3b991dbb3c
- Updated dependencies in package-lock.json and package.json - Modified various components for improved functionality - Added new utility function 'is-rtl.js' - Improved styling in multiple CSS files - Fixed minor issues and bugs across the applicationPřidána podstránka s kontakty
1 line
747 KiB
Plaintext
1 line
747 KiB
Plaintext
{"version":3,"mappings":"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","names":["_extends","target","i","source","key","reservedModifierKeywords","mappedKeys","mapKey","isHotkeyModifier","parseKeysHookInput","keys","splitKey","parseHotkey","hotkey","combinationKey","description","k","modifiers","singleCharKeys","pushToCurrentlyPressedKeys","removeFromCurrentlyPressedKeys","currentlyPressedKeys","isReadonlyArray","value","isHotkeyPressed","hotkeyArray","maybePreventDefault","preventDefault","isHotkeyEnabled","enabled","isKeyboardEventTriggeredByInput","ev","isHotkeyEnabledOnTag","_ref","enabledOnTags","targetTagName","tag","isScopeActive","activeScopes","scopes","scope","isHotkeyMatchingKeyboardEvent","e","ignoreModifiers","alt","meta","mod","shift","ctrl","pressedKeyUppercase","code","ctrlKey","metaKey","shiftKey","altKey","keyCode","pressedKey","BoundHotkeysProxyProvider","createContext","useBoundHotkeysProxy","useContext","deepEqual","x","y","isEqual","HotkeysContext","useHotkeysContext","useDeepEqualMemo","ref","useRef","stopPropagation","useSafeLayoutEffect","useLayoutEffect","useEffect","useHotkeys","callback","options","dependencies","hasTriggeredRef","_options","_keys","_deps","memoisedCB","useCallback","cbRef","memoisedOptions","_useHotkeysContext","enabledScopes","proxy","listener","isKeyUp","_e$target","rootNode","_hotkey$keys","handleKeyDown","event","handleKeyUp","domNode","root","factory","module","this","global","Toastify","version","divElement","property","avatarElement","closeElement","width","self","getAxisOffsetAValue","xOffset","yOffset","rootElement","elementToInsert","toastElement","topLeftOffsetSize","topRightOffsetSize","offsetSize","allToasts","classUsed","containsClass","height","offset","axis","elem","yourClass","window","_showToast","showToast","props","text","onClick","delay","rest","toast","className","destination","gravity","position","setTimeout","useInterval","fn","deps","immediate","savedCallback","current","id","setInterval","tick","clearInterval","openCompose","opts","url","URL","parse","location","screenWidth","screenHeight","screen","left","Math","max","top","min","winUID","uid","random","newWin","open","__COMPOSE__","alert","isSafari","test","navigator","userAgent","openOSK","fauxEl","document","createElement","style","opacity","body","appendChild","focus","removeChild","ICONS","__vitePreload","heart","bookmark","check-circle","x-circle","transfer","rocket","rtl","arrow-up","arrow-down","earth","lock","unlock","eye-close","eye-open","message","comment","comment2","home","notification","follow","follow-add","poll","pencil","quill","at","attachment","upload","gear","more","more2","external","popout","popin","rotate","plus","chevron-down","reply","flip","thread","group","bot","menu","list","search","hashtag","info","shortcut","user","following","pin","unpin","bus","link","history","share","sparkles","sparkles2","exit","translate","play","trash","mute","unmute","block","unblock","flag","time","refresh","emoji2","filter","filters","chart","react","layout4","layout5","announce","round","arrow-up-circle","arrow-down-circle","clipboard","account-edit","account-warning","keyboard","cloud","month","media","speak","building","history2","copy","quote","settings","heart-break","user-x","minimize","SIZES","s","m","l","xl","xxl","ICONDATA","SVGICon","moize","_jsx","viewBox","dangerouslySetInnerHTML","__html","transform","isShallowEqual","maxSize","Object","length","matchesArg","cacheKeyArg","keyArg","icon","Icon","size","title","class","iconSize","iconBlock","warn","Array","iconData","setIconData","useState","currentIcon","iconB","useCloseWatcher","watcher","CloseWatcher","addEventListener","destroy","useCloseWatcher$1","$modalContainer","getElementById","Modal","children","onClose","minimized","modalRef","timer","focusElement","querySelector","clearTimeout","supportsCloseWatcher","escRef","keydown","keyup","$deckContainers","querySelectorAll","page","tabIndex","forEach","$deckContainer","setAttribute","removeAttribute","node","currentTarget","inert","onFocus","isFocusable","getComputedStyle","pointerEvents","console","ReactPropTypesSecret","ReactPropTypesSecret_1","require$$0","emptyFunction","emptyFunctionWithReset","factoryWithThrowingShims","shim","propName","componentName","propFullName","secret","err","getShim","ReactPropTypes","ReactIs","throwOnDirectAccess","propTypesModule","isMenuOpen","state","batchedUpdates","unstable_batchedUpdates","getTransition","transition","name","safeCall","arg","internalKey","getName","component","mergeProps","targetProp","sourceProp","parsePadding","paddingStr","padding","right","getScrollAncestor","overflow","overflowX","overflowY","commonProps","isDisabled","isHovering","indexOfNode","nodeList","stylePropTypes","oneOfType","string","func","menuPropTypes","object","bool","number","oneOf","rootMenuPropTypes","exact","uncontrolledMenuPropTypes","useBEM","element","useMemo","blockElement","classString","expandedClassName","menuContainerClass","menuClass","menuArrowClass","menuItemClass","menuDividerClass","menuHeaderClass","menuGroupClass","subMenuClass","HoverItemContext","MenuListItemContext","MenuListContext","EventHandlersContext","RadioGroupContext","SettingsContext","Keys","HoverActionTypes","CloseReason","FocusPositions","MenuStateMap","positionAbsolute","roleNone","roleMenuitem","dummyItemProps","MenuContainer","containerRef","containerProps","isOpen","theming","itemTransition","jsx","createSubmenuCtx","count","closeDelay","pending","settled","useItems","menuRef","focusRef","hoverItem","setHoverItem","mutableState","updateItems","item","isMounted","items","index","dispatch","actionType","nextIndex","hoverIndex","sortItems","orderedNodes","a","b","newItem","prevItem","getNativeDimension","transformed","untransformed","getNormalizedClientRect","rect","getPositionHelpers","menuScroll","boundingBoxPadding","menuRect","containerRect","boundingRect","getLeftOverflow","getRightOverflow","getTopOverflow","getBottomOverflow","leftOverflow","rightOverflow","topOverflow","bottomOverflow","placeArrowVertical","arrowRef","menuY","anchorRect","placeLeftorRight","placeLeftorRightY","placeLeftX","placeRightX","confineHorizontally","confineVertically","arrow","direction","computedDirection","placeArrowHorizontal","menuX","placeToporBottom","placeToporBottomX","placeTopY","placeBottomY","positionMenu","align","gap","positionHelpers","isHorizontal","horizontalOffset","verticalOffset","arrowElt","useIsomorphicLayoutEffect","setRef","instance","useCombinedRef","refA","refB","offScreen","MenuList","ariaLabel","menuClassName","menuStyle","arrowProps","anchorPoint","anchorRef","focusProps","externalRef","parentScrollingRef","setDownOverflow","repositionFlag","captureFocus","endTransition","menuItemFocus","restProps","menuPosition","setMenuPosition","arrowPosition","setArrowPosition","overflowData","setOverflowData","expandedDirection","setExpandedDirection","submenuCtx","reposSubmenu","forceReposSubmenu","useReducer","c","boundingBoxRef","rootMenuRef","rootAnchorRef","scrollNodesRef","reposition","viewScroll","submenuCloseDelay","parentSubmenuCtx","reposFlag","prevOpen","openTransition","closeTransition","scrollNodes","onKeyDown","onAnimationEnd","onPointerMove","onPointerLeave","handlePosition","noOverflowCheck","_anchorRef$current","arrowX","arrowY","menuHeight","overflowAmt","anchorScroll","scroll","handleScroll","scrollObservers","o","hasOverflow","parentScroll","targetList","resizeObserver","entries","flushSync","resizeObserverOptions","anchor","alwaysUpdate","setItemFocus","menuElt","itemContext","maxHeight","listContext","overflowStyle","arrowModifiers","_arrowClassName","ControlledMenu","forwardRef","initialMounted","unmountOnClose","transitionTimeout","submenuOpenDelay","portal","onItemClick","eventHandlers","isCheckorRadio","keepOpen","menuList","createPortal","PRE_ENTER","ENTERING","ENTERED","PRE_EXIT","EXITING","EXITED","UNMOUNTED","STATUS","getState","status","startOrEnd","unmounted","getEndStatus","unmountOnExit","getTimeout","timeout","updateState","setState","latestState","timeoutId","onChange","useTransition","enter","preEnter","preExit","initialEntered","mountOnEnter","enterTimeout","exitTimeout","toggle","toEnter","transitState","enterStage","useMenuState","initialOpen","toggleMenu","useMenuStateAndFocus","menuProps","setMenuItemFocus","openMenu","useClick","onToggle","skipOpen","useMenuChange","onMenuChange","Menu","_","_1","menuButton","instanceRef","stateProps","buttonRef","anchorProps","handleClose","button","buttonProps","renderButton","cloneElement","useImperativeHandle","Fragment","withHovering","WrappedComponent","Component","memo","WithHovering","itemRef","useItemEffect","SubMenu","disabled","label","openTrigger","_2","itemProps","parentMenuRef","parentDir","parentOverflow","isParentOpen","isPortal","_openMenu","timerId","stopTimer","args","setHover","delayOpen","onKeyDownOfRoot","handled","externalItemRef","itemClassName","restItemProps","mergedItemProps","getMenuList","container","useItemState","unsetHover","onBlur","keepHover","MenuItem","href","type","checked","restStateProps","radioGroup","isRadio","isCheckBox","isAnchor","isChecked","handleClick","mergedProps","menuItemProps","FocusableItem","renderChildren","MenuDivider","MenuHeader","MenuGroup","takeOverflow","setOverflowStyle","xxxl","alphaCache","canvas","OffscreenCanvas","ctx","getContext","willReadFrequently","imageSmoothingEnabled","Avatar","squircle","avatarRef","isMissing","src","loading","decoding","crossOrigin","undefined","onError","onLoad","dataset","loaded","drawImage","allPixels","getImageData","hasAlpha","data","pixel","classList","add","clearRect","mem","Link","routerLocation","useLocation","hash","replace","trim","to","includes","parsedHash","origin","searchParams","searchParamsStr","from","map","encodeURIComponent","join","pathname","isActive","decodeURIComponent","parentNode","closest","prevLocation","IS_RTL","observer","MutationObserver","mutations","mutation","observe","documentElement","attributes","attributeFilter","isRTL","defaultBoundingBoxPadding","safeAreaInsets","getSafeAreaInsets","safeAreaInsetTop","getPropertyValue","safeAreaInsetRight","safeAreaInsetBottom","safeAreaInsetLeft","parseInt","requestAnimationFrame","safeBoundingBoxPadding","paddings","v","CSS","supports","passive","useWindowSize","setSize","handleResize","innerWidth","innerHeight","removeEventListener","Menu2","_instanceRef","rtlAlign","closeMenu","SubMenu2","pointerType","MenuConfirm","subMenu","confirm","confirmLabel","menuItemClassName","menuFooter","menuExtras","_jsxs","CustomEmoji","staticUrl","srcset","EmojiText","emojis","indexOf","regex","RegExp","shortcode","elements","split","word","emoji","find","EmojiText$1","oldProps","newProps","nameCollator","Intl","Collator","sensitivity","NameText","account","showAvatar","showAcct","short","acct","avatar","avatarStatic","displayName","username","acct1","acct2","match","api","trimmedUsername","toLowerCase","trimmedDisplayName","shortenedDisplayName","shortenedAlphaNumericDisplayName","hideUsername","compare","which","internalURL","states","showAccount","_Fragment","dir","newAccount","t","n","r","u","f","h","d","$","M","g","D","p","S","w","O","dayjs","extend","dayjsTwitter","localizedFormat","relativeTime","dtf","DateTimeFormat","RelativeTime","datetime","format","renderCount","rerender","date","dateStr","dt","isValid","str","now","diff","year","twitter","toDate","fromNow","toISOString","raf","rafRerender","scheduleRerender","cancelAnimationFrame","_localeMatch","localeMatch","locales","resolvedOptions","locale","languages","localeTargetLanguages","translationTargetLanguages","getTranslateTargetLanguage","fromSettings","contentTranslationTargetLanguage","IntlDN","DisplayNames","_localeCode2Text","of","localeCode2Text","semver","validateAndParse","isWildcard","tryParse","forceType","compareStrings","ap","bp","compareSegments","compareVersions","v1","v2","n1","n2","p1","p2","operator","assertValidOperator","res","operatorResMap","allowedOperators","op","satisfies","range","v3","vp","r1","r2","r3","rp","nonZero","containPixelfed","notContainPixelfed","platformFeatures","supportsCache","feature","domain","getCurrentInstance","features","includePrerelease","loose","maxInt","base","tMin","tMax","skew","damp","initialBias","initialN","delimiter","regexPunycode","regexNonASCII","regexSeparators","errors","baseMinusTMin","floor","stringFromCharCode","error","array","result","mapDomain","parts","labels","encoded","ucs2decode","output","counter","extra","ucs2encode","codePoints","basicToDigit","codePoint","digitToBasic","digit","adapt","delta","numPoints","firstTime","decode","input","inputLength","bias","basic","j","oldi","baseMinusT","out","encode","currentValue","basicLength","handledCPCount","handledCPCountPlusOne","q","qMinusT","toUnicode","toASCII","punycode","emojifyText","fauxDiv","whitelistLinkClasses","_enhanceContent","content","postEnhanceDOM","enhancedContent","dom","innerHTML","hasLink","hasCodeBlock","remove","textContent","shortenLink","links","usernames","innerText","hasChildren","some","push","slice","textNodes","extractTextNodes","html","nodeValue","replaceWith","childNodes","pre","br","nextParagraphs","currentBlock","nextElementSibling","next","tagName","codeText","replaceAll","rejectFilter","prevIndex","hashtagStuffedParagraphs","hashtagCount","nodeType","Node","TEXT_NODE","linkText","startsWith","img","getAttribute","naturalWidth","naturalHeight","setProperty","queueMicrotask","enhanceContent","defaultRejectFilter","defaultRejectFilterMap","fromEntries","nodeName","URL_PREFIX_REGEX","URL_DISPLAY_LENGTH","prefix","displayURL","suffix","cutoff","rejectFilterMap","assign","reduce","acc","cur","walk","createTreeWalker","NodeFilter","SHOW_TEXT","acceptNode","FILTER_REJECT","FILTER_ACCEPT","nextNode","div","getHTMLText","preProcess","el","append","handleContentLinks","mentions","previewMode","statusURL","prevText","previousSibling","textBeforeLinkIsAt","endsWith","textStartsWithAt","contains","targetText","mention","textBeforeLinkIsHash","hashURL","_b","_DateTimeFormat","dateYear","hideTime","formatOpts","currentYear","Date","getFullYear","day","hour","minute","niceDateTime","dtfOpts","NumberFormat","shortenNumber","notation","roundingMode","TOAST_DURATION","showCompose","composerState","duration","AccountBlock","skeleton","avatarSize","useAvatarStatic","internal","showActivity","showStats","accountInstance","hideDisplayName","relationship","excludeRelationshipAttrs","statusesCount","lastStatusAt","fields","note","followersCount","createdAt","locked","verifiedField","verifiedAt","excludedRelationship","hasRelationship","followedBy","requested","MenuLink","detail","RetryOperation","timeouts","retry_operation","currentTime","timeoutOps","counts","mainError","mainErrorCount","exports","attempt","obj","methods","method","original","retry","objectToString","isError","errorMessages","isNetworkError","AbortError","decorateErrorWithCounts","attemptNumber","retriesLeft","pRetry","resolve","reject","operation","abortHandler","_a","cleanUp","finalError","__defProp","__defNormalProp","__publicField","observerMap","RootIds","rootId","unsupportedValue","getRootId","optionsToId","createObserver","thresholds","entry","inView","threshold","fallbackInView","bounds","callbacks","isPlainChildren","InView","React.Component","prevProps","rootMargin","trackVisibility","as","triggerOnce","skip","initialInView","React.createElement","useInView","React2.useState","React2.useRef","React2.useEffect","unobserve","entryTarget","previousEntryTarget","TOP","shazamIDs","LazyShazam","hasID","visible","setVisible","visibleStart","setVisibleStart","getBoundingClientRect","bottom","hidden","PHANPY_LINGVA_INSTANCES","import","LINGVA_INSTANCES","throttle","pThrottle","limit","interval","currentLingvaInstance","_lingvaTranslate","fetchCall","fetch","ok","provider","translation","detectedSourceLanguage","detectedSource","retries","onFailedAttempt","log","TRANSLATED_MAX_AGE","lingvaTranslate","pmem","forceTranslate","sourceLanguage","onTranslate","mini","autoDetected","uiState","setUIState","targetLang","setTranslatedContent","pronunciationContent","detailsRef","translatedContent","sourceLangText","targetLangText","apiSourceLang","detectedLangText","setDetectedLang","pronunciation","query","setPronunciationContent","detectedLang","lang","sourceLanguages","abrupt","TranslationBlock$1","TranslationBlock","promisifyRequest","request","createStore","dbName","storeName","dbp","txMode","db","defaultGetStoreFunc","defaultGetStore","get","customStore","store","set","getMany","del","delMany","clear","eachCursor","cursor","initDB","val","drafts","catchup","fetchRelationships","accounts","relationshipsMap","masto","currentAccount","getCurrentAccountID","uniqueAccountIds","relationships","LiteYTEmbed","shadowDom","nonce","oldVal","newVal","isIntersectionObserver","autoplay","wantsNoCookie","embedTarget","iframeHTML","posterUrlWebp","posterUrlJpeg","kind","linkElem","digitLookup","decode83","start","end","pow","PI","PI2","sRGBToLinear","linearTosRGB","signSqr","fastCos","cos","getBlurHashAverageColor","blurHash","decodeBlurHash","punch","sizeFlag","numX","numY","basis","basisY","colorIndex","pixelIndex","maximumValue","colors","averageColor","cosinesY","cosinesX","bytesPerRow","pixels","addIndentation","splittedHtml","char","level","opened","indented","elTag","newIndented","addIndentation_1","removeEmptyLines","nonFormattedString","mergeAttributesWithElements","markup","splittedMarkup","mergedLines","currentElement","line","toLines","require$$1","prettify","splitted","A","z","U","X","Y","R","G","J","C","L","P","I","T","E","B","Poll","readOnly","votePoll","expired","expiresAt","multiple","ownVotes","voted","votersCount","votesCount","expiresAtDate","pollVotesCount","roundPrecision","showResults","setShowResults","optionsHaveVoteCounts","every","option","optionVotesCount","percentage","toFixed","isLeading","onSubmit","form","formData","FormData","choices","FilterContext","_isFiltered","filtered","filterContext","appliedFilters","hasContext","context","filterAction","action","filterTitles","titles","titlesStr","isFiltered","filteredItem","currentAccountID","filterState","filteredItems","htmlContentLength","supportsTTS","speechSynthesis","speaking","cancel","utterance","SpeechSynthesisUtterance","statusPeek","spoilerText","mediaAttachments","image","gifv","video","audio","unknown","F","useResolvedElement","subscriber","refOrElement","lastReportRef","refOrElementRef","cbElementRef","evaluateSubscription","cbElement","extractSize","boxProp","sizeType","useResizeObserver","onResize","onResizeRef","resizeObserverRef","_useState","didUnmount","previous","refCallback","reportedWidth","reportedHeight","newWidth","newHeight","newSize","useTruncated","useThrottledCallback","scrollHeight","truncated","_height","computedHeight","box","visibilityIconsMap","public","unlisted","private","direct","styleRoot","styleChild","styles","isSsr","isTouch","make3dTransformValue","scale","getOffsetBounds","containerDimension","childDimension","centerContained","classnames","other","abs","sqrt","isMac","isDragInteraction","isZoomInteraction","isZoomGesture","wheelEvent","cancelEvent","getDistance","calculateScale","startTouches","endTouches","startDistance","endDistance","isCloseTo","expected","swing","getPointByPageCoordinates","touch","getPageCoordinatesByTouches","touches","sum","getVectorAvg","vectors","clamp","shouldInterceptWheel","getElementSize","offsetWidth","offsetHeight","calculateVelocity","startPoint","endPoint","comparePoints","noup","zeroPoint","PinchZoom","_super","__extends","_this","__assign","createRef","clickEvent","touchEndEvent","touchStartEvent","touchMoveEvent","pageX","pageY","deltaY","deltaMode","scaleDelta","likeTouchEvent","center","dScale","inertiaFriction","inertia","renderFrame","prevOffset","currentCoordinates","prevPoint","newScale","touchCenter","needZoomOut","zoomFactor","startZoomFactor","updateProgress","progress","elWidth","elHeight","minOffsetX","maxOffsetX","_c","minOffsetY","maxOffsetY","__x","__y","animated","startOffset","containerCenter","diffZoomFactor","diffOffset","updateFrame","originalZoomFactor","lastCenter","sanitizedOffset","targetOffset","scaleFactor","offsetLeft","offsetTop","_document","_html","_body","scrollTop","scrollLeft","posTop","posLeft","frameFn","startTime","timeFn","frameTime","xZoomFactor","yZoomFactor","eventName","_i","newInteraction","interaction","fingers","mouseEvent","isEnd","isStart","child","Children","React","any","formatDuration","hours","minutes","seconds","toString","padStart","dataAltLabel","AltBadge","showMediaAlt","MEDIA_CAPTION_LIMIT","MEDIA_CAPTION_LIMIT_LONGER","isMediaCaptionLong","caption","Media","showOriginal","autoAnimate","showCaption","allowLongerCaption","altIndex","blurhash","previewRemoteUrl","previewUrl","remoteUrl","small","mediaURL","remoteMediaURL","hasDimensions","orientation","rgbAverageColor","videoRef","focalPosition","mediaRef","onUpdate","removeProperty","touchAction","pinchZoomEnabled","setPinchZoomEnabled","quickPinchZoomProps","draggableUnZoomed","tapZoomFactor","doubleTapToggleZoom","Parent","remoteMediaURLObj","getURLObj","isVideoMaybe","isAudioMaybe","isImage","parentRef","imageSmallerThanParent","setImageSmallerThanParent","smaller","maxAspectHeight","averageColorStyle","mediaStyles","aspectRatio","longDesc","showInlineDesc","Figure","hasNaturalAspectRatio","setHasNaturalAspectRatio","display","mode","backgroundImage","backgroundSize","QuickPinchZoom","objectPosition","$media","clientWidth","clientHeight","minDimension","hasSmallDimension","displayNaturalHeight","hasDuration","shortDuration","isGIF","loopable","formattedDuration","hoverAnimate","autoGIFAnimate","showProgress","gifHTML","videoHTML","pause","onMouseEnter","onMouseLeave","poster","preload","playsinline","loop","muted","onTimeUpdate","disablePictureInPicture","onLoadedMetadata","controls","autoPlay","oldMedia","newMedia","SHOW_COMMENT_COUNT_LIMIT","INLINE_TRANSLATE_LIMIT","fetchAccount","$select","memFetchAccount","visibilityText","isIOS","ontouchstart","rtf","RelativeTimeFormat","REACTIONS_LIMIT","getPollText","getPostText","PostContent","post","language","oldPost","newPost","SIZE_CLASS","detectLang","detectAll","accuracy","Status","statusID","propInstance","contentTextWeight","enableCommentHint","withinContext","enableTranslate","_forceTranslate","onMediaClick","quoted","onStatusLinkClick","showFollowedTags","allowContextMenu","showActionsBar","showReplyParent","mediaFirst","authenticated","currentInstance","sameInstance","sKey","statusKey","snapStates","useSnapshot","statuses","accountId","accountURL","accountEmojis","repliesCount","reblogged","reblogsCount","favourited","favouritesCount","bookmarked","sensitive","visibility","_language","editedAt","card","inReplyToId","inReplyToAccountId","reblog","uri","tags","pinned","_deleted","_pinned","emojiReactions","languageAutoDetected","setLanguageAutoDetected","detected","hasMediaAttachments","isSelf","filterInfo","debugHover","FilteredStatus","createdAtDate","editedAtDate","inReplyToAccountRef","setInReplyToAccount","inReplyToAccount","account2","catch","mentionSelf","readingExpandSpoilers","showSpoiler","readingExpandMedia","prefs","showSpoilerMedia","FollowedTagsParent","setForceTranslate","statusFollowedTags","StatusParent","contentTranslation","contentTranslationAutoInline","targetLanguage","inlineTranslate","isSizeLarge","showEdited","setShowEdited","showEmbed","setShowEmbed","contentLength","readMoreText","statusRef","spoilerContentRef","contentRef","mediaContainerRef","textWeight","editedDateText","mediaNoDesc","replyToStatus","statusMonthsAgo","boostStatus","unauthInteractionErrorMessage","confirmText","yes","newStatus","saveStatus","favouriteStatus","favouriteStatusNotify","done","bookmarkStatus","bookmarkStatusNotify","contentTranslationHideLanguages","reblogIterator","firstLoad","favouriteIterator","differentLanguage","reblogResults","Promise","favouriteResults","_types","isPinnable","StatusMenuItems","replyStatus","canBoost","confirmBoostStatus","heading","fetchBoostedLikedByAccounts","showReactions","postID","postText","createdDateText","nicePostURL","isPublic","cachedStatus","getStatus","setIsContextMenuOpen","contextMenuProps","bindLongPressContext","useLongPress","showContextMenu","clientX","clientY","setContextMenuProps","isContextMenuOpen","hotkeysEnabled","fRef","dRef","bRef","rRef","xRef","activeStatus","spoilerButton","spoilerMediaButton","displayedMediaAttachments","captionChildren","attachments","indices","showMultipleMediaCaptions","showCommentCount","isThread","showCommentHint","containsQuestion","nodeRef","anchorNode","selection","contextMenuRef","actionsRef","StatusButton","statusThreadNumber","MediaFirstContainer","spoilers","spoilersMedia","QuoteStatuses","newPoll","pollResponse","polls","then","MultipleMediaFigure","selfReferential","emojiReaction","me","url2","isShortCode","EditedAtModal","moreThanOne","currentIndex","setCurrentIndex","carouselRef","behavior","getDomain","providerName","providerUrl","authorName","authorUrl","imageDescription","embedUrl","publishedAt","isLandscape","hasIframeHTML","setCardStatusURL","hasText","unfurlMastodonLink","unfurledLinks","blurhashImage","isPost","isCardPost","putImageData","videoID","cardStatusURL","nocookie","setEditHistory","editHistory2","fetchStatusHistory","editHistory","Loader","generateHTMLCode","quotes","contentHTML","sourceMediaURL","previewMediaURL","mediaHTML","sourceMediaURLObj","htmlCode","EmbedModal","readonly","setButtonTitle","buttonTitle","host","iconAlt","restPath","urlObj","statusReply","filterTitleStr","srKey","statusPeekText","bindLongPressPeek","isReblog","actualStatusID","showPeek","isFollowedTags","setShowPeek","cancelOnMovement","ssKey","statusPeekRef","uniqueQuotes","arr","q2","restNewProps","shallowEqual","restOldProps","IDX","HEX","len","num","isArray","getTag","INFINITY","baseToString","isString","isNumber","isBoolean","isObjectLike","isObject","isDefined","isBlank","INCORRECT_INDEX_TYPE","LOGICAL_SEARCH_INVALID_QUERY_FOR_KEY","PATTERN_LENGTH_TOO_LARGE","MISSING_KEY_PROPERTY","INVALID_KEY_WEIGHT_VALUE","hasOwn","KeyStore","totalWeight","createKey","keyId","path","weight","getFn","createKeyPath","createKeyId","deepGet","MatchOptions","BasicOptions","FuzzyOptions","AdvancedOptions","Config","SPACE","norm","mantissa","cache","numTokens","FuseIndex","fieldNormWeight","docs","records","idx","doc","docIndex","record","keyIndex","subRecords","stack","nestedArrIndex","subRecord","createIndex","myIndex","parseIndex","computeScore$1","pattern","currentLocation","expectedLocation","distance","ignoreLocation","proximity","convertMaskToIndices","matchmask","minMatchCharLength","MAX_BITS","patternAlphabet","findAllMatches","includeMatches","patternLen","textLen","currentThreshold","bestLocation","computeMatches","matchMask","score","lastBitArr","finalScore","binMax","mask","binMin","binMid","finish","bitArr","charMatch","createPatternAlphabet","BitapSearch","isCaseSensitive","addChunk","startIndex","remainder","allIndices","totalScore","hasMatches","alphabet","isMatch","BaseMatch","getMatch","exp","matches","ExactMatch","InverseExactMatch","PrefixExactMatch","InversePrefixExactMatch","SuffixExactMatch","InverseSuffixExactMatch","FuzzyMatch","IncludeMatch","searchers","searchersLen","SPACE_RE","OR_TOKEN","parseQuery","results","queryItem","found","searcher","token","MultiMatchSet","ExtendedSearch","numMatches","qLen","pLen","registeredSearchers","register","createSearcher","searcherClass","LogicalOperator","KeyType","isExpression","isPath","isLeaf","convertToExplicit","auto","isQueryPath","computeScore","ignoreFieldNorm","transformMatches","transformScore","includeScore","transformers","transformer","Fuse","predicate","shouldSort","sortFn","expression","evaluate","resultMap","expResults"],"ignoreList":[0,1,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,58,59,60,61,66,67,68,69,71,81,82,83,84,85,86,89,92,93,94,95,96,97,104,105,108,109,110,111,115,116],"sources":["../../node_modules/react-hotkeys-hook/dist/react-hotkeys-hook.esm.js","../../node_modules/toastify-js/src/toastify.js","../../src/utils/show-toast.js","../../src/utils/useInterval.js","../../src/utils/open-compose.js","../../src/utils/open-osk.jsx","../../src/components/ICONS.jsx","../../src/components/icon.jsx","../../src/utils/useCloseWatcher.js","../../src/components/modal.jsx","../../node_modules/prop-types/lib/ReactPropTypesSecret.js","../../node_modules/prop-types/factoryWithThrowingShims.js","../../node_modules/prop-types/index.js","../../node_modules/@szhsin/react-menu/dist/es/utils/utils.js","../../node_modules/@szhsin/react-menu/dist/es/utils/propTypes.js","../../node_modules/@szhsin/react-menu/dist/es/hooks/useBEM.js","../../node_modules/@szhsin/react-menu/dist/es/utils/constants.js","../../node_modules/@szhsin/react-menu/dist/es/components/MenuContainer.js","../../node_modules/@szhsin/react-menu/dist/es/utils/submenuCtx.js","../../node_modules/@szhsin/react-menu/dist/es/hooks/useItems.js","../../node_modules/@szhsin/react-menu/dist/es/positionUtils/getNormalizedClientRect.js","../../node_modules/@szhsin/react-menu/dist/es/positionUtils/getPositionHelpers.js","../../node_modules/@szhsin/react-menu/dist/es/positionUtils/placeArrowVertical.js","../../node_modules/@szhsin/react-menu/dist/es/positionUtils/placeLeftorRight.js","../../node_modules/@szhsin/react-menu/dist/es/positionUtils/placeArrowHorizontal.js","../../node_modules/@szhsin/react-menu/dist/es/positionUtils/placeToporBottom.js","../../node_modules/@szhsin/react-menu/dist/es/positionUtils/positionMenu.js","../../node_modules/@szhsin/react-menu/dist/es/hooks/useIsomorphicLayoutEffect.js","../../node_modules/@szhsin/react-menu/dist/es/hooks/useCombinedRef.js","../../node_modules/@szhsin/react-menu/dist/es/components/MenuList.js","../../node_modules/@szhsin/react-menu/dist/es/components/ControlledMenu.js","../../node_modules/react-transition-state/dist/es/hooks/utils.js","../../node_modules/react-transition-state/dist/es/hooks/useTransition.js","../../node_modules/@szhsin/react-menu/dist/es/hooks/useMenuState.js","../../node_modules/@szhsin/react-menu/dist/es/hooks/useMenuStateAndFocus.js","../../node_modules/@szhsin/react-menu/dist/es/hooks/useClick.js","../../node_modules/@szhsin/react-menu/dist/es/hooks/useMenuChange.js","../../node_modules/@szhsin/react-menu/dist/es/components/Menu.js","../../node_modules/@szhsin/react-menu/dist/es/utils/withHovering.js","../../node_modules/@szhsin/react-menu/dist/es/hooks/useItemEffect.js","../../node_modules/@szhsin/react-menu/dist/es/components/SubMenu.js","../../node_modules/@szhsin/react-menu/dist/es/hooks/useItemState.js","../../node_modules/@szhsin/react-menu/dist/es/components/MenuItem.js","../../node_modules/@szhsin/react-menu/dist/es/components/FocusableItem.js","../../node_modules/@szhsin/react-menu/dist/es/components/MenuDivider.js","../../node_modules/@szhsin/react-menu/dist/es/components/MenuHeader.js","../../node_modules/@szhsin/react-menu/dist/es/components/MenuGroup.js","../../src/components/avatar.jsx","../../src/components/link.jsx","../../src/utils/is-rtl.js","../../src/utils/safe-bounding-box-padding.js","../../src/utils/useWindowSize.js","../../src/components/menu2.jsx","../../src/components/submenu2.jsx","../../src/components/menu-confirm.jsx","../../src/components/custom-emoji.jsx","../../src/components/emoji-text.jsx","../../src/components/name-text.jsx","../../node_modules/dayjs/dayjs.min.js","../../node_modules/dayjs-twitter/dist/dayjs-twitter.min.js","../../node_modules/dayjs/plugin/localizedFormat.js","../../node_modules/dayjs/plugin/relativeTime.js","../../src/components/relative-time.jsx","../../src/utils/locale-match.jsx","../../src/utils/get-translate-target-language.jsx","../../src/utils/localeCode2Text.jsx","../../node_modules/compare-versions/lib/esm/utils.js","../../node_modules/compare-versions/lib/esm/compareVersions.js","../../node_modules/compare-versions/lib/esm/compare.js","../../node_modules/compare-versions/lib/esm/satisfies.js","../../src/utils/supports.js","../../node_modules/punycode/punycode.es6.js","../../src/utils/emojify-text.js","../../src/utils/enhance-content.js","../../src/utils/getHTMLText.jsx","../../src/utils/handle-content-links.js","../../src/utils/nice-date-time.js","../../src/utils/shorten-number.jsx","../../src/utils/show-compose.js","../../src/components/account-block.jsx","../../src/components/menu-link.jsx","../../node_modules/retry/lib/retry_operation.js","../../node_modules/retry/lib/retry.js","../../node_modules/retry/index.js","../../node_modules/is-network-error/index.js","../../node_modules/p-retry/index.js","../../node_modules/react-intersection-observer/dist/index.mjs","../../src/components/lazy-shazam.jsx","../../src/components/translation-block.jsx","../../node_modules/idb-keyval/dist/index.js","../../src/utils/db.js","../../src/utils/relationships.js","../../node_modules/@justinribeiro/lite-youtube/lite-youtube.js","../../node_modules/fast-blurhash/index.js","../../node_modules/html-prettify/src/utils/addIndentation.js","../../node_modules/html-prettify/src/utils/toLines.js","../../node_modules/html-prettify/src/index.js","../../node_modules/use-long-press/index.mjs","../../src/components/poll.jsx","../../src/utils/filter-context.js","../../src/utils/filters.jsx","../../src/utils/html-content-length.js","../../src/utils/speech.js","../../src/utils/status-peek.jsx","../../node_modules/use-debounce/dist/index.module.js","../../node_modules/use-resize-observer/dist/bundle.esm.js","../../src/utils/useTruncated.js","../../src/utils/visibility-icons-map.js","../../node_modules/react-quick-pinch-zoom/esm/PinchZoom/styles.css.js","../../node_modules/react-quick-pinch-zoom/esm/utils.js","../../node_modules/react-quick-pinch-zoom/esm/PinchZoom/getOffsetBounds.js","../../node_modules/react-quick-pinch-zoom/esm/PinchZoom/component.js","../../src/utils/format-duration.jsx","../../src/components/media.jsx","../../src/components/status.jsx","../../node_modules/uid/single/index.mjs","../../node_modules/fuse.js/dist/fuse.mjs"],"sourcesContent":["import { useContext, createContext, useState, useCallback, useRef, useLayoutEffect, useEffect } from 'react';\nimport { jsx } from 'react/jsx-runtime';\n\nfunction _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\n\nvar reservedModifierKeywords = ['shift', 'alt', 'meta', 'mod', 'ctrl'];\nvar mappedKeys = {\n esc: 'escape',\n \"return\": 'enter',\n '.': 'period',\n ',': 'comma',\n '-': 'slash',\n ' ': 'space',\n '`': 'backquote',\n '#': 'backslash',\n '+': 'bracketright',\n ShiftLeft: 'shift',\n ShiftRight: 'shift',\n AltLeft: 'alt',\n AltRight: 'alt',\n MetaLeft: 'meta',\n MetaRight: 'meta',\n OSLeft: 'meta',\n OSRight: 'meta',\n ControlLeft: 'ctrl',\n ControlRight: 'ctrl'\n};\nfunction mapKey(key) {\n return (mappedKeys[key] || key).trim().toLowerCase().replace(/key|digit|numpad|arrow/, '');\n}\nfunction isHotkeyModifier(key) {\n return reservedModifierKeywords.includes(key);\n}\nfunction parseKeysHookInput(keys, splitKey) {\n if (splitKey === void 0) {\n splitKey = ',';\n }\n return keys.split(splitKey);\n}\nfunction parseHotkey(hotkey, combinationKey, description) {\n if (combinationKey === void 0) {\n combinationKey = '+';\n }\n var keys = hotkey.toLocaleLowerCase().split(combinationKey).map(function (k) {\n return mapKey(k);\n });\n var modifiers = {\n alt: keys.includes('alt'),\n ctrl: keys.includes('ctrl') || keys.includes('control'),\n shift: keys.includes('shift'),\n meta: keys.includes('meta'),\n mod: keys.includes('mod')\n };\n var singleCharKeys = keys.filter(function (k) {\n return !reservedModifierKeywords.includes(k);\n });\n return _extends({}, modifiers, {\n keys: singleCharKeys,\n description: description\n });\n}\n\n(function () {\n if (typeof document !== 'undefined') {\n document.addEventListener('keydown', function (e) {\n if (e.key === undefined) {\n // Synthetic event (e.g., Chrome autofill). Ignore.\n return;\n }\n pushToCurrentlyPressedKeys([mapKey(e.key), mapKey(e.code)]);\n });\n document.addEventListener('keyup', function (e) {\n if (e.key === undefined) {\n // Synthetic event (e.g., Chrome autofill). Ignore.\n return;\n }\n removeFromCurrentlyPressedKeys([mapKey(e.key), mapKey(e.code)]);\n });\n }\n if (typeof window !== 'undefined') {\n window.addEventListener('blur', function () {\n currentlyPressedKeys.clear();\n });\n }\n})();\nvar currentlyPressedKeys = /*#__PURE__*/new Set();\n// https://github.com/microsoft/TypeScript/issues/17002\nfunction isReadonlyArray(value) {\n return Array.isArray(value);\n}\nfunction isHotkeyPressed(key, splitKey) {\n if (splitKey === void 0) {\n splitKey = ',';\n }\n var hotkeyArray = isReadonlyArray(key) ? key : key.split(splitKey);\n return hotkeyArray.every(function (hotkey) {\n return currentlyPressedKeys.has(hotkey.trim().toLowerCase());\n });\n}\nfunction pushToCurrentlyPressedKeys(key) {\n var hotkeyArray = Array.isArray(key) ? key : [key];\n /*\r\n Due to a weird behavior on macOS we need to clear the set if the user pressed down the meta key and presses another key.\r\n https://stackoverflow.com/questions/11818637/why-does-javascript-drop-keyup-events-when-the-metakey-is-pressed-on-mac-browser\r\n Otherwise the set will hold all ever pressed keys while the meta key is down which leads to wrong results.\r\n */\n if (currentlyPressedKeys.has('meta')) {\n currentlyPressedKeys.forEach(function (key) {\n return !isHotkeyModifier(key) && currentlyPressedKeys[\"delete\"](key.toLowerCase());\n });\n }\n hotkeyArray.forEach(function (hotkey) {\n return currentlyPressedKeys.add(hotkey.toLowerCase());\n });\n}\nfunction removeFromCurrentlyPressedKeys(key) {\n var hotkeyArray = Array.isArray(key) ? key : [key];\n /*\r\n Due to a weird behavior on macOS we need to clear the set if the user pressed down the meta key and presses another key.\r\n https://stackoverflow.com/questions/11818637/why-does-javascript-drop-keyup-events-when-the-metakey-is-pressed-on-mac-browser\r\n Otherwise the set will hold all ever pressed keys while the meta key is down which leads to wrong results.\r\n */\n if (key === 'meta') {\n currentlyPressedKeys.clear();\n } else {\n hotkeyArray.forEach(function (hotkey) {\n return currentlyPressedKeys[\"delete\"](hotkey.toLowerCase());\n });\n }\n}\n\nfunction maybePreventDefault(e, hotkey, preventDefault) {\n if (typeof preventDefault === 'function' && preventDefault(e, hotkey) || preventDefault === true) {\n e.preventDefault();\n }\n}\nfunction isHotkeyEnabled(e, hotkey, enabled) {\n if (typeof enabled === 'function') {\n return enabled(e, hotkey);\n }\n return enabled === true || enabled === undefined;\n}\nfunction isKeyboardEventTriggeredByInput(ev) {\n return isHotkeyEnabledOnTag(ev, ['input', 'textarea', 'select']);\n}\nfunction isHotkeyEnabledOnTag(_ref, enabledOnTags) {\n var target = _ref.target;\n if (enabledOnTags === void 0) {\n enabledOnTags = false;\n }\n var targetTagName = target && target.tagName;\n if (isReadonlyArray(enabledOnTags)) {\n return Boolean(targetTagName && enabledOnTags && enabledOnTags.some(function (tag) {\n return tag.toLowerCase() === targetTagName.toLowerCase();\n }));\n }\n return Boolean(targetTagName && enabledOnTags && enabledOnTags === true);\n}\nfunction isScopeActive(activeScopes, scopes) {\n if (activeScopes.length === 0 && scopes) {\n console.warn('A hotkey has the \"scopes\" option set, however no active scopes were found. If you want to use the global scopes feature, you need to wrap your app in a <HotkeysProvider>');\n return true;\n }\n if (!scopes) {\n return true;\n }\n return activeScopes.some(function (scope) {\n return scopes.includes(scope);\n }) || activeScopes.includes('*');\n}\nvar isHotkeyMatchingKeyboardEvent = function isHotkeyMatchingKeyboardEvent(e, hotkey, ignoreModifiers) {\n if (ignoreModifiers === void 0) {\n ignoreModifiers = false;\n }\n var alt = hotkey.alt,\n meta = hotkey.meta,\n mod = hotkey.mod,\n shift = hotkey.shift,\n ctrl = hotkey.ctrl,\n keys = hotkey.keys;\n var pressedKeyUppercase = e.key,\n code = e.code,\n ctrlKey = e.ctrlKey,\n metaKey = e.metaKey,\n shiftKey = e.shiftKey,\n altKey = e.altKey;\n var keyCode = mapKey(code);\n var pressedKey = pressedKeyUppercase.toLowerCase();\n if (!(keys != null && keys.includes(keyCode)) && !(keys != null && keys.includes(pressedKey)) && !['ctrl', 'control', 'unknown', 'meta', 'alt', 'shift', 'os'].includes(keyCode)) {\n return false;\n }\n if (!ignoreModifiers) {\n // We check the pressed keys for compatibility with the keyup event. In keyup events the modifier flags are not set.\n if (alt === !altKey && pressedKey !== 'alt') {\n return false;\n }\n if (shift === !shiftKey && pressedKey !== 'shift') {\n return false;\n }\n // Mod is a special key name that is checking for meta on macOS and ctrl on other platforms\n if (mod) {\n if (!metaKey && !ctrlKey) {\n return false;\n }\n } else {\n if (meta === !metaKey && pressedKey !== 'meta' && pressedKey !== 'os') {\n return false;\n }\n if (ctrl === !ctrlKey && pressedKey !== 'ctrl' && pressedKey !== 'control') {\n return false;\n }\n }\n }\n // All modifiers are correct, now check the key\n // If the key is set, we check for the key\n if (keys && keys.length === 1 && (keys.includes(pressedKey) || keys.includes(keyCode))) {\n return true;\n } else if (keys) {\n // Check if all keys are present in pressedDownKeys set\n return isHotkeyPressed(keys);\n } else if (!keys) {\n // If the key is not set, we only listen for modifiers, that check went alright, so we return true\n return true;\n }\n // There is nothing that matches.\n return false;\n};\n\nvar BoundHotkeysProxyProvider = /*#__PURE__*/createContext(undefined);\nvar useBoundHotkeysProxy = function useBoundHotkeysProxy() {\n return useContext(BoundHotkeysProxyProvider);\n};\nfunction BoundHotkeysProxyProviderProvider(_ref) {\n var addHotkey = _ref.addHotkey,\n removeHotkey = _ref.removeHotkey,\n children = _ref.children;\n return /*#__PURE__*/jsx(BoundHotkeysProxyProvider.Provider, {\n value: {\n addHotkey: addHotkey,\n removeHotkey: removeHotkey\n },\n children: children\n });\n}\n\nfunction deepEqual(x, y) {\n //@ts-ignore\n return x && y && typeof x === 'object' && typeof y === 'object' ? Object.keys(x).length === Object.keys(y).length &&\n //@ts-ignore\n Object.keys(x).reduce(function (isEqual, key) {\n return isEqual && deepEqual(x[key], y[key]);\n }, true) : x === y;\n}\n\nvar HotkeysContext = /*#__PURE__*/createContext({\n hotkeys: [],\n enabledScopes: [],\n toggleScope: function toggleScope() {},\n enableScope: function enableScope() {},\n disableScope: function disableScope() {}\n});\nvar useHotkeysContext = function useHotkeysContext() {\n return useContext(HotkeysContext);\n};\nvar HotkeysProvider = function HotkeysProvider(_ref) {\n var _ref$initiallyActiveS = _ref.initiallyActiveScopes,\n initiallyActiveScopes = _ref$initiallyActiveS === void 0 ? ['*'] : _ref$initiallyActiveS,\n children = _ref.children;\n var _useState = useState((initiallyActiveScopes == null ? void 0 : initiallyActiveScopes.length) > 0 ? initiallyActiveScopes : ['*']),\n internalActiveScopes = _useState[0],\n setInternalActiveScopes = _useState[1];\n var _useState2 = useState([]),\n boundHotkeys = _useState2[0],\n setBoundHotkeys = _useState2[1];\n var enableScope = useCallback(function (scope) {\n setInternalActiveScopes(function (prev) {\n if (prev.includes('*')) {\n return [scope];\n }\n return Array.from(new Set([].concat(prev, [scope])));\n });\n }, []);\n var disableScope = useCallback(function (scope) {\n setInternalActiveScopes(function (prev) {\n if (prev.filter(function (s) {\n return s !== scope;\n }).length === 0) {\n return ['*'];\n } else {\n return prev.filter(function (s) {\n return s !== scope;\n });\n }\n });\n }, []);\n var toggleScope = useCallback(function (scope) {\n setInternalActiveScopes(function (prev) {\n if (prev.includes(scope)) {\n if (prev.filter(function (s) {\n return s !== scope;\n }).length === 0) {\n return ['*'];\n } else {\n return prev.filter(function (s) {\n return s !== scope;\n });\n }\n } else {\n if (prev.includes('*')) {\n return [scope];\n }\n return Array.from(new Set([].concat(prev, [scope])));\n }\n });\n }, []);\n var addBoundHotkey = useCallback(function (hotkey) {\n setBoundHotkeys(function (prev) {\n return [].concat(prev, [hotkey]);\n });\n }, []);\n var removeBoundHotkey = useCallback(function (hotkey) {\n setBoundHotkeys(function (prev) {\n return prev.filter(function (h) {\n return !deepEqual(h, hotkey);\n });\n });\n }, []);\n return /*#__PURE__*/jsx(HotkeysContext.Provider, {\n value: {\n enabledScopes: internalActiveScopes,\n hotkeys: boundHotkeys,\n enableScope: enableScope,\n disableScope: disableScope,\n toggleScope: toggleScope\n },\n children: /*#__PURE__*/jsx(BoundHotkeysProxyProviderProvider, {\n addHotkey: addBoundHotkey,\n removeHotkey: removeBoundHotkey,\n children: children\n })\n });\n};\n\nfunction useDeepEqualMemo(value) {\n var ref = useRef(undefined);\n if (!deepEqual(ref.current, value)) {\n ref.current = value;\n }\n return ref.current;\n}\n\nvar stopPropagation = function stopPropagation(e) {\n e.stopPropagation();\n e.preventDefault();\n e.stopImmediatePropagation();\n};\nvar useSafeLayoutEffect = typeof window !== 'undefined' ? useLayoutEffect : useEffect;\nfunction useHotkeys(keys, callback, options, dependencies) {\n var ref = useRef(null);\n var hasTriggeredRef = useRef(false);\n var _options = !(options instanceof Array) ? options : !(dependencies instanceof Array) ? dependencies : undefined;\n var _keys = isReadonlyArray(keys) ? keys.join(_options == null ? void 0 : _options.splitKey) : keys;\n var _deps = options instanceof Array ? options : dependencies instanceof Array ? dependencies : undefined;\n var memoisedCB = useCallback(callback, _deps != null ? _deps : []);\n var cbRef = useRef(memoisedCB);\n if (_deps) {\n cbRef.current = memoisedCB;\n } else {\n cbRef.current = callback;\n }\n var memoisedOptions = useDeepEqualMemo(_options);\n var _useHotkeysContext = useHotkeysContext(),\n enabledScopes = _useHotkeysContext.enabledScopes;\n var proxy = useBoundHotkeysProxy();\n useSafeLayoutEffect(function () {\n if ((memoisedOptions == null ? void 0 : memoisedOptions.enabled) === false || !isScopeActive(enabledScopes, memoisedOptions == null ? void 0 : memoisedOptions.scopes)) {\n return;\n }\n var listener = function listener(e, isKeyUp) {\n var _e$target;\n if (isKeyUp === void 0) {\n isKeyUp = false;\n }\n if (isKeyboardEventTriggeredByInput(e) && !isHotkeyEnabledOnTag(e, memoisedOptions == null ? void 0 : memoisedOptions.enableOnFormTags)) {\n return;\n }\n // TODO: SINCE THE EVENT IS NOW ATTACHED TO THE REF, THE ACTIVE ELEMENT CAN NEVER BE INSIDE THE REF. THE HOTKEY ONLY TRIGGERS IF THE\n // REF IS THE ACTIVE ELEMENT. THIS IS A PROBLEM SINCE FOCUSED SUB COMPONENTS WON'T TRIGGER THE HOTKEY.\n if (ref.current !== null) {\n var rootNode = ref.current.getRootNode();\n if ((rootNode instanceof Document || rootNode instanceof ShadowRoot) && rootNode.activeElement !== ref.current && !ref.current.contains(rootNode.activeElement)) {\n stopPropagation(e);\n return;\n }\n }\n if ((_e$target = e.target) != null && _e$target.isContentEditable && !(memoisedOptions != null && memoisedOptions.enableOnContentEditable)) {\n return;\n }\n parseKeysHookInput(_keys, memoisedOptions == null ? void 0 : memoisedOptions.splitKey).forEach(function (key) {\n var _hotkey$keys;\n var hotkey = parseHotkey(key, memoisedOptions == null ? void 0 : memoisedOptions.combinationKey);\n if (isHotkeyMatchingKeyboardEvent(e, hotkey, memoisedOptions == null ? void 0 : memoisedOptions.ignoreModifiers) || (_hotkey$keys = hotkey.keys) != null && _hotkey$keys.includes('*')) {\n if (memoisedOptions != null && memoisedOptions.ignoreEventWhen != null && memoisedOptions.ignoreEventWhen(e)) {\n return;\n }\n if (isKeyUp && hasTriggeredRef.current) {\n return;\n }\n maybePreventDefault(e, hotkey, memoisedOptions == null ? void 0 : memoisedOptions.preventDefault);\n if (!isHotkeyEnabled(e, hotkey, memoisedOptions == null ? void 0 : memoisedOptions.enabled)) {\n stopPropagation(e);\n return;\n }\n // Execute the user callback for that hotkey\n cbRef.current(e, hotkey);\n if (!isKeyUp) {\n hasTriggeredRef.current = true;\n }\n }\n });\n };\n var handleKeyDown = function handleKeyDown(event) {\n if (event.key === undefined) {\n // Synthetic event (e.g., Chrome autofill). Ignore.\n return;\n }\n pushToCurrentlyPressedKeys(mapKey(event.code));\n if ((memoisedOptions == null ? void 0 : memoisedOptions.keydown) === undefined && (memoisedOptions == null ? void 0 : memoisedOptions.keyup) !== true || memoisedOptions != null && memoisedOptions.keydown) {\n listener(event);\n }\n };\n var handleKeyUp = function handleKeyUp(event) {\n if (event.key === undefined) {\n // Synthetic event (e.g., Chrome autofill). Ignore.\n return;\n }\n removeFromCurrentlyPressedKeys(mapKey(event.code));\n hasTriggeredRef.current = false;\n if (memoisedOptions != null && memoisedOptions.keyup) {\n listener(event, true);\n }\n };\n var domNode = ref.current || (_options == null ? void 0 : _options.document) || document;\n // @ts-ignore\n domNode.addEventListener('keyup', handleKeyUp);\n // @ts-ignore\n domNode.addEventListener('keydown', handleKeyDown);\n if (proxy) {\n parseKeysHookInput(_keys, memoisedOptions == null ? void 0 : memoisedOptions.splitKey).forEach(function (key) {\n return proxy.addHotkey(parseHotkey(key, memoisedOptions == null ? void 0 : memoisedOptions.combinationKey, memoisedOptions == null ? void 0 : memoisedOptions.description));\n });\n }\n return function () {\n // @ts-ignore\n domNode.removeEventListener('keyup', handleKeyUp);\n // @ts-ignore\n domNode.removeEventListener('keydown', handleKeyDown);\n if (proxy) {\n parseKeysHookInput(_keys, memoisedOptions == null ? void 0 : memoisedOptions.splitKey).forEach(function (key) {\n return proxy.removeHotkey(parseHotkey(key, memoisedOptions == null ? void 0 : memoisedOptions.combinationKey, memoisedOptions == null ? void 0 : memoisedOptions.description));\n });\n }\n };\n }, [_keys, memoisedOptions, enabledScopes]);\n return ref;\n}\n\nfunction useRecordHotkeys() {\n var _useState = useState(new Set()),\n keys = _useState[0],\n setKeys = _useState[1];\n var _useState2 = useState(false),\n isRecording = _useState2[0],\n setIsRecording = _useState2[1];\n var handler = useCallback(function (event) {\n if (event.key === undefined) {\n // Synthetic event (e.g., Chrome autofill). Ignore.\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n setKeys(function (prev) {\n var newKeys = new Set(prev);\n newKeys.add(mapKey(event.code));\n return newKeys;\n });\n }, []);\n var stop = useCallback(function () {\n if (typeof document !== 'undefined') {\n document.removeEventListener('keydown', handler);\n setIsRecording(false);\n }\n }, [handler]);\n var start = useCallback(function () {\n setKeys(new Set());\n if (typeof document !== 'undefined') {\n stop();\n document.addEventListener('keydown', handler);\n setIsRecording(true);\n }\n }, [handler, stop]);\n var resetKeys = useCallback(function () {\n setKeys(new Set());\n }, []);\n return [keys, {\n start: start,\n stop: stop,\n resetKeys: resetKeys,\n isRecording: isRecording\n }];\n}\n\nexport { HotkeysProvider, isHotkeyPressed, useHotkeys, useHotkeysContext, useRecordHotkeys };\n//# sourceMappingURL=react-hotkeys-hook.esm.js.map\n","/*!\n * Toastify js 1.12.0\n * https://github.com/apvarun/toastify-js\n * @license MIT licensed\n *\n * Copyright (C) 2018 Varun A P\n */\n(function(root, factory) {\n if (typeof module === \"object\" && module.exports) {\n module.exports = factory();\n } else {\n root.Toastify = factory();\n }\n})(this, function(global) {\n // Object initialization\n var Toastify = function(options) {\n // Returning a new init object\n return new Toastify.lib.init(options);\n },\n // Library version\n version = \"1.12.0\";\n\n // Set the default global options\n Toastify.defaults = {\n oldestFirst: true,\n text: \"Toastify is awesome!\",\n node: undefined,\n duration: 3000,\n selector: undefined,\n callback: function () {\n },\n destination: undefined,\n newWindow: false,\n close: false,\n gravity: \"toastify-top\",\n positionLeft: false,\n position: '',\n backgroundColor: '',\n avatar: \"\",\n className: \"\",\n stopOnFocus: true,\n onClick: function () {\n },\n offset: {x: 0, y: 0},\n escapeMarkup: true,\n ariaLive: 'polite',\n style: {background: ''}\n };\n\n // Defining the prototype of the object\n Toastify.lib = Toastify.prototype = {\n toastify: version,\n\n constructor: Toastify,\n\n // Initializing the object with required parameters\n init: function(options) {\n // Verifying and validating the input object\n if (!options) {\n options = {};\n }\n\n // Creating the options object\n this.options = {};\n\n this.toastElement = null;\n\n // Validating the options\n this.options.text = options.text || Toastify.defaults.text; // Display message\n this.options.node = options.node || Toastify.defaults.node; // Display content as node\n this.options.duration = options.duration === 0 ? 0 : options.duration || Toastify.defaults.duration; // Display duration\n this.options.selector = options.selector || Toastify.defaults.selector; // Parent selector\n this.options.callback = options.callback || Toastify.defaults.callback; // Callback after display\n this.options.destination = options.destination || Toastify.defaults.destination; // On-click destination\n this.options.newWindow = options.newWindow || Toastify.defaults.newWindow; // Open destination in new window\n this.options.close = options.close || Toastify.defaults.close; // Show toast close icon\n this.options.gravity = options.gravity === \"bottom\" ? \"toastify-bottom\" : Toastify.defaults.gravity; // toast position - top or bottom\n this.options.positionLeft = options.positionLeft || Toastify.defaults.positionLeft; // toast position - left or right\n this.options.position = options.position || Toastify.defaults.position; // toast position - left or right\n this.options.backgroundColor = options.backgroundColor || Toastify.defaults.backgroundColor; // toast background color\n this.options.avatar = options.avatar || Toastify.defaults.avatar; // img element src - url or a path\n this.options.className = options.className || Toastify.defaults.className; // additional class names for the toast\n this.options.stopOnFocus = options.stopOnFocus === undefined ? Toastify.defaults.stopOnFocus : options.stopOnFocus; // stop timeout on focus\n this.options.onClick = options.onClick || Toastify.defaults.onClick; // Callback after click\n this.options.offset = options.offset || Toastify.defaults.offset; // toast offset\n this.options.escapeMarkup = options.escapeMarkup !== undefined ? options.escapeMarkup : Toastify.defaults.escapeMarkup;\n this.options.ariaLive = options.ariaLive || Toastify.defaults.ariaLive;\n this.options.style = options.style || Toastify.defaults.style;\n if(options.backgroundColor) {\n this.options.style.background = options.backgroundColor;\n }\n\n // Returning the current object for chaining functions\n return this;\n },\n\n // Building the DOM element\n buildToast: function() {\n // Validating if the options are defined\n if (!this.options) {\n throw \"Toastify is not initialized\";\n }\n\n // Creating the DOM object\n var divElement = document.createElement(\"div\");\n divElement.className = \"toastify on \" + this.options.className;\n\n // Positioning toast to left or right or center\n if (!!this.options.position) {\n divElement.className += \" toastify-\" + this.options.position;\n } else {\n // To be depreciated in further versions\n if (this.options.positionLeft === true) {\n divElement.className += \" toastify-left\";\n console.warn('Property `positionLeft` will be depreciated in further versions. Please use `position` instead.')\n } else {\n // Default position\n divElement.className += \" toastify-right\";\n }\n }\n\n // Assigning gravity of element\n divElement.className += \" \" + this.options.gravity;\n\n if (this.options.backgroundColor) {\n // This is being deprecated in favor of using the style HTML DOM property\n console.warn('DEPRECATION NOTICE: \"backgroundColor\" is being deprecated. Please use the \"style.background\" property.');\n }\n\n // Loop through our style object and apply styles to divElement\n for (var property in this.options.style) {\n divElement.style[property] = this.options.style[property];\n }\n\n // Announce the toast to screen readers\n if (this.options.ariaLive) {\n divElement.setAttribute('aria-live', this.options.ariaLive)\n }\n\n // Adding the toast message/node\n if (this.options.node && this.options.node.nodeType === Node.ELEMENT_NODE) {\n // If we have a valid node, we insert it\n divElement.appendChild(this.options.node)\n } else {\n if (this.options.escapeMarkup) {\n divElement.innerText = this.options.text;\n } else {\n divElement.innerHTML = this.options.text;\n }\n\n if (this.options.avatar !== \"\") {\n var avatarElement = document.createElement(\"img\");\n avatarElement.src = this.options.avatar;\n\n avatarElement.className = \"toastify-avatar\";\n\n if (this.options.position == \"left\" || this.options.positionLeft === true) {\n // Adding close icon on the left of content\n divElement.appendChild(avatarElement);\n } else {\n // Adding close icon on the right of content\n divElement.insertAdjacentElement(\"afterbegin\", avatarElement);\n }\n }\n }\n\n // Adding a close icon to the toast\n if (this.options.close === true) {\n // Create a span for close element\n var closeElement = document.createElement(\"button\");\n closeElement.type = \"button\";\n closeElement.setAttribute(\"aria-label\", \"Close\");\n closeElement.className = \"toast-close\";\n closeElement.innerHTML = \"✖\";\n\n // Triggering the removal of toast from DOM on close click\n closeElement.addEventListener(\n \"click\",\n function(event) {\n event.stopPropagation();\n this.removeElement(this.toastElement);\n window.clearTimeout(this.toastElement.timeOutValue);\n }.bind(this)\n );\n\n //Calculating screen width\n var width = window.innerWidth > 0 ? window.innerWidth : screen.width;\n\n // Adding the close icon to the toast element\n // Display on the right if screen width is less than or equal to 360px\n if ((this.options.position == \"left\" || this.options.positionLeft === true) && width > 360) {\n // Adding close icon on the left of content\n divElement.insertAdjacentElement(\"afterbegin\", closeElement);\n } else {\n // Adding close icon on the right of content\n divElement.appendChild(closeElement);\n }\n }\n\n // Clear timeout while toast is focused\n if (this.options.stopOnFocus && this.options.duration > 0) {\n var self = this;\n // stop countdown\n divElement.addEventListener(\n \"mouseover\",\n function(event) {\n window.clearTimeout(divElement.timeOutValue);\n }\n )\n // add back the timeout\n divElement.addEventListener(\n \"mouseleave\",\n function() {\n divElement.timeOutValue = window.setTimeout(\n function() {\n // Remove the toast from DOM\n self.removeElement(divElement);\n },\n self.options.duration\n )\n }\n )\n }\n\n // Adding an on-click destination path\n if (typeof this.options.destination !== \"undefined\") {\n divElement.addEventListener(\n \"click\",\n function(event) {\n event.stopPropagation();\n if (this.options.newWindow === true) {\n window.open(this.options.destination, \"_blank\");\n } else {\n window.location = this.options.destination;\n }\n }.bind(this)\n );\n }\n\n if (typeof this.options.onClick === \"function\" && typeof this.options.destination === \"undefined\") {\n divElement.addEventListener(\n \"click\",\n function(event) {\n event.stopPropagation();\n this.options.onClick();\n }.bind(this)\n );\n }\n\n // Adding offset\n if(typeof this.options.offset === \"object\") {\n\n var x = getAxisOffsetAValue(\"x\", this.options);\n var y = getAxisOffsetAValue(\"y\", this.options);\n\n var xOffset = this.options.position == \"left\" ? x : \"-\" + x;\n var yOffset = this.options.gravity == \"toastify-top\" ? y : \"-\" + y;\n\n divElement.style.transform = \"translate(\" + xOffset + \",\" + yOffset + \")\";\n\n }\n\n // Returning the generated element\n return divElement;\n },\n\n // Displaying the toast\n showToast: function() {\n // Creating the DOM object for the toast\n this.toastElement = this.buildToast();\n\n // Getting the root element to with the toast needs to be added\n var rootElement;\n if (typeof this.options.selector === \"string\") {\n rootElement = document.getElementById(this.options.selector);\n } else if (this.options.selector instanceof HTMLElement || (typeof ShadowRoot !== 'undefined' && this.options.selector instanceof ShadowRoot)) {\n rootElement = this.options.selector;\n } else {\n rootElement = document.body;\n }\n\n // Validating if root element is present in DOM\n if (!rootElement) {\n throw \"Root element is not defined\";\n }\n\n // Adding the DOM element\n var elementToInsert = Toastify.defaults.oldestFirst ? rootElement.firstChild : rootElement.lastChild;\n rootElement.insertBefore(this.toastElement, elementToInsert);\n\n // Repositioning the toasts in case multiple toasts are present\n Toastify.reposition();\n\n if (this.options.duration > 0) {\n this.toastElement.timeOutValue = window.setTimeout(\n function() {\n // Remove the toast from DOM\n this.removeElement(this.toastElement);\n }.bind(this),\n this.options.duration\n ); // Binding `this` for function invocation\n }\n\n // Supporting function chaining\n return this;\n },\n\n hideToast: function() {\n if (this.toastElement.timeOutValue) {\n clearTimeout(this.toastElement.timeOutValue);\n }\n this.removeElement(this.toastElement);\n },\n\n // Removing the element from the DOM\n removeElement: function(toastElement) {\n // Hiding the element\n // toastElement.classList.remove(\"on\");\n toastElement.className = toastElement.className.replace(\" on\", \"\");\n\n // Removing the element from DOM after transition end\n window.setTimeout(\n function() {\n // remove options node if any\n if (this.options.node && this.options.node.parentNode) {\n this.options.node.parentNode.removeChild(this.options.node);\n }\n\n // Remove the element from the DOM, only when the parent node was not removed before.\n if (toastElement.parentNode) {\n toastElement.parentNode.removeChild(toastElement);\n }\n\n // Calling the callback function\n this.options.callback.call(toastElement);\n\n // Repositioning the toasts again\n Toastify.reposition();\n }.bind(this),\n 400\n ); // Binding `this` for function invocation\n },\n };\n\n // Positioning the toasts on the DOM\n Toastify.reposition = function() {\n\n // Top margins with gravity\n var topLeftOffsetSize = {\n top: 15,\n bottom: 15,\n };\n var topRightOffsetSize = {\n top: 15,\n bottom: 15,\n };\n var offsetSize = {\n top: 15,\n bottom: 15,\n };\n\n // Get all toast messages on the DOM\n var allToasts = document.getElementsByClassName(\"toastify\");\n\n var classUsed;\n\n // Modifying the position of each toast element\n for (var i = 0; i < allToasts.length; i++) {\n // Getting the applied gravity\n if (containsClass(allToasts[i], \"toastify-top\") === true) {\n classUsed = \"toastify-top\";\n } else {\n classUsed = \"toastify-bottom\";\n }\n\n var height = allToasts[i].offsetHeight;\n classUsed = classUsed.substr(9, classUsed.length-1)\n // Spacing between toasts\n var offset = 15;\n\n var width = window.innerWidth > 0 ? window.innerWidth : screen.width;\n\n // Show toast in center if screen with less than or equal to 360px\n if (width <= 360) {\n // Setting the position\n allToasts[i].style[classUsed] = offsetSize[classUsed] + \"px\";\n\n offsetSize[classUsed] += height + offset;\n } else {\n if (containsClass(allToasts[i], \"toastify-left\") === true) {\n // Setting the position\n allToasts[i].style[classUsed] = topLeftOffsetSize[classUsed] + \"px\";\n\n topLeftOffsetSize[classUsed] += height + offset;\n } else {\n // Setting the position\n allToasts[i].style[classUsed] = topRightOffsetSize[classUsed] + \"px\";\n\n topRightOffsetSize[classUsed] += height + offset;\n }\n }\n }\n\n // Supporting function chaining\n return this;\n };\n\n // Helper function to get offset.\n function getAxisOffsetAValue(axis, options) {\n\n if(options.offset[axis]) {\n if(isNaN(options.offset[axis])) {\n return options.offset[axis];\n }\n else {\n return options.offset[axis] + 'px';\n }\n }\n\n return '0px';\n\n }\n\n function containsClass(elem, yourClass) {\n if (!elem || typeof yourClass !== \"string\") {\n return false;\n } else if (\n elem.className &&\n elem.className\n .trim()\n .split(/\\s+/gi)\n .indexOf(yourClass) > -1\n ) {\n return true;\n } else {\n return false;\n }\n }\n\n // Setting up the prototype for the init object\n Toastify.lib.init.prototype = Toastify.lib;\n\n // Returning the Toastify function to be assigned to the window object/module\n return Toastify;\n});\n","import Toastify from 'toastify-js';\n\nwindow._showToast = showToast;\n\nfunction showToast(props) {\n if (typeof props === 'string') {\n props = { text: props };\n }\n const { onClick, delay, ...rest } = props;\n const toast = Toastify({\n className: `${onClick || props.destination ? 'shiny-pill' : ''}`,\n gravity: 'bottom',\n position: 'center',\n ...rest,\n onClick: () => {\n onClick?.(toast); // Pass in the object itself!\n },\n });\n if (delay) {\n setTimeout(() => {\n toast.showToast();\n }, delay);\n } else {\n toast.showToast();\n }\n return toast;\n}\n\nexport default showToast;\n","import { useEffect, useRef } from 'preact/hooks';\n\nfunction useInterval(fn, delay, deps, immediate) {\n const savedCallback = useRef(fn);\n useEffect(() => {\n savedCallback.current = fn;\n }, [fn, deps]);\n\n useEffect(() => {\n if (!immediate || delay === null || delay === false) return;\n savedCallback.current();\n }, [immediate]);\n\n useEffect(() => {\n if (delay === null || delay === false) return;\n const tick = () => savedCallback.current();\n const id = setInterval(tick, delay);\n return () => clearInterval(id);\n }, [delay]);\n}\n\nexport default useInterval;\n","export default function openCompose(opts) {\n const url = URL.parse('/compose/', window.location);\n const { width: screenWidth, height: screenHeight } = window.screen;\n const left = Math.max(0, (screenWidth - 600) / 2);\n const top = Math.max(0, (screenHeight - 450) / 2);\n const width = Math.min(screenWidth, 600);\n const height = Math.min(screenHeight, 450);\n const winUID = opts?.uid || Math.random();\n const newWin = window.open(\n url,\n 'compose' + winUID,\n `width=${width},height=${height},left=${left},top=${top}`,\n );\n\n if (newWin) {\n // if (masto) {\n // newWin.masto = masto;\n // }\n\n newWin.__COMPOSE__ = opts;\n } else {\n alert('Looks like your browser is blocking popups.');\n }\n\n return newWin;\n}\n","const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent); // https://stackoverflow.com/a/23522755\n\nexport default function openOSK() {\n if (isSafari) {\n const fauxEl = document.createElement('input');\n fauxEl.style.position = 'absolute';\n fauxEl.style.top = '0';\n fauxEl.style.left = '0';\n fauxEl.style.opacity = '0';\n document.body.appendChild(fauxEl);\n fauxEl.focus();\n setTimeout(() => {\n document.body.removeChild(fauxEl);\n }, 500);\n }\n}\n","export const ICONS = {\n x: () => import('@iconify-icons/mingcute/close-line'),\n heart: () => import('@iconify-icons/mingcute/heart-line'),\n bookmark: () => import('@iconify-icons/mingcute/bookmark-line'),\n 'check-circle': () => import('@iconify-icons/mingcute/check-circle-line'),\n 'x-circle': () => import('@iconify-icons/mingcute/close-circle-line'),\n transfer: () => import('@iconify-icons/mingcute/transfer-4-line'),\n rocket: () => import('@iconify-icons/mingcute/rocket-line'),\n 'arrow-left': {\n module: () => import('@iconify-icons/mingcute/arrow-left-line'),\n rtl: true,\n },\n 'arrow-right': {\n module: () => import('@iconify-icons/mingcute/arrow-right-line'),\n rtl: true,\n },\n 'arrow-up': () => import('@iconify-icons/mingcute/arrow-up-line'),\n 'arrow-down': () => import('@iconify-icons/mingcute/arrow-down-line'),\n earth: () => import('@iconify-icons/mingcute/earth-line'),\n lock: () => import('@iconify-icons/mingcute/lock-line'),\n unlock: () => import('@iconify-icons/mingcute/unlock-line'),\n 'eye-close': () => import('@iconify-icons/mingcute/eye-close-line'),\n 'eye-open': () => import('@iconify-icons/mingcute/eye-2-line'),\n message: () => import('@iconify-icons/mingcute/mail-line'),\n comment: {\n module: () => import('@iconify-icons/mingcute/chat-3-line'),\n rtl: true,\n },\n comment2: {\n module: () => import('@iconify-icons/mingcute/comment-2-line'),\n rtl: true,\n },\n home: () => import('@iconify-icons/mingcute/home-3-line'),\n notification: () => import('@iconify-icons/mingcute/notification-line'),\n follow: () => import('@iconify-icons/mingcute/user-follow-line'),\n 'follow-add': () => import('@iconify-icons/mingcute/user-add-line'),\n poll: [() => import('@iconify-icons/mingcute/chart-bar-line'), '90deg'],\n pencil: () => import('@iconify-icons/mingcute/pencil-line'),\n quill: () => import('@iconify-icons/mingcute/quill-pen-line'),\n at: () => import('@iconify-icons/mingcute/at-line'),\n attachment: () => import('@iconify-icons/mingcute/attachment-line'),\n upload: () => import('@iconify-icons/mingcute/upload-3-line'),\n gear: () => import('@iconify-icons/mingcute/settings-3-line'),\n more: () => import('@iconify-icons/mingcute/more-3-line'),\n more2: () => import('@iconify-icons/mingcute/more-1-fill'),\n external: {\n module: () => import('@iconify-icons/mingcute/external-link-line'),\n rtl: true,\n },\n popout: {\n module: () => import('@iconify-icons/mingcute/external-link-line'),\n rtl: true,\n },\n popin: {\n module: () => import('@iconify-icons/mingcute/external-link-line'),\n rotate: '180deg',\n rtl: true,\n },\n plus: () => import('@iconify-icons/mingcute/add-circle-line'),\n 'chevron-left': {\n module: () => import('@iconify-icons/mingcute/left-line'),\n rtl: true,\n },\n 'chevron-right': {\n module: () => import('@iconify-icons/mingcute/right-line'),\n rtl: true,\n },\n 'chevron-down': () => import('@iconify-icons/mingcute/down-line'),\n reply: {\n module: () => import('@iconify-icons/mingcute/share-forward-line'),\n rotate: '180deg',\n flip: 'horizontal',\n rtl: true,\n },\n thread: () => import('@iconify-icons/mingcute/route-line'),\n group: {\n module: () => import('@iconify-icons/mingcute/group-line'),\n rtl: true,\n },\n bot: () => import('@iconify-icons/mingcute/android-2-line'),\n menu: () => import('@iconify-icons/mingcute/rows-4-line'),\n list: {\n module: () => import('@iconify-icons/mingcute/list-check-line'),\n rtl: true,\n },\n search: () => import('@iconify-icons/mingcute/search-2-line'),\n hashtag: () => import('@iconify-icons/mingcute/hashtag-line'),\n info: () => import('@iconify-icons/mingcute/information-line'),\n shortcut: () => import('@iconify-icons/mingcute/lightning-line'),\n user: () => import('@iconify-icons/mingcute/user-4-line'),\n following: () => import('@iconify-icons/mingcute/walk-line'),\n pin: () => import('@iconify-icons/mingcute/pin-line'),\n unpin: [() => import('@iconify-icons/mingcute/pin-line'), '180deg'],\n bus: () => import('@iconify-icons/mingcute/bus-2-line'),\n link: () => import('@iconify-icons/mingcute/link-2-line'),\n history: () => import('@iconify-icons/mingcute/history-line'),\n share: () => import('@iconify-icons/mingcute/share-2-line'),\n sparkles: () => import('@iconify-icons/mingcute/sparkles-line'),\n sparkles2: () => import('@iconify-icons/mingcute/sparkles-2-line'),\n exit: {\n module: () => import('@iconify-icons/mingcute/exit-line'),\n rtl: true,\n },\n translate: () => import('@iconify-icons/mingcute/translate-line'),\n play: () => import('@iconify-icons/mingcute/play-fill'),\n trash: () => import('@iconify-icons/mingcute/delete-2-line'),\n mute: {\n module: () => import('@iconify-icons/mingcute/volume-mute-line'),\n rtl: true,\n },\n unmute: {\n module: () => import('@iconify-icons/mingcute/volume-line'),\n rtl: true,\n },\n block: () => import('@iconify-icons/mingcute/forbid-circle-line'),\n unblock: [\n () => import('@iconify-icons/mingcute/forbid-circle-line'),\n '180deg',\n ],\n flag: () => import('@iconify-icons/mingcute/flag-1-line'),\n time: () => import('@iconify-icons/mingcute/time-line'),\n refresh: () => import('@iconify-icons/mingcute/refresh-2-line'),\n emoji2: () => import('@iconify-icons/mingcute/emoji-2-line'),\n filter: () => import('@iconify-icons/mingcute/filter-2-line'),\n filters: () => import('@iconify-icons/mingcute/filter-line'),\n chart: () => import('@iconify-icons/mingcute/chart-line-line'),\n react: () => import('@iconify-icons/mingcute/react-line'),\n layout4: {\n module: () => import('@iconify-icons/mingcute/layout-4-line'),\n rtl: true,\n },\n layout5: () => import('@iconify-icons/mingcute/layout-5-line'),\n announce: {\n module: () => import('@iconify-icons/mingcute/announcement-line'),\n rtl: true,\n },\n alert: () => import('@iconify-icons/mingcute/alert-line'),\n round: () => import('@iconify-icons/mingcute/round-fill'),\n 'arrow-up-circle': () =>\n import('@iconify-icons/mingcute/arrow-up-circle-line'),\n 'arrow-down-circle': () =>\n import('@iconify-icons/mingcute/arrow-down-circle-line'),\n clipboard: {\n module: () => import('@iconify-icons/mingcute/clipboard-line'),\n rtl: true,\n },\n 'account-edit': () => import('@iconify-icons/mingcute/user-edit-line'),\n 'account-warning': () => import('@iconify-icons/mingcute/user-warning-line'),\n keyboard: () => import('@iconify-icons/mingcute/keyboard-line'),\n cloud: () => import('@iconify-icons/mingcute/cloud-line'),\n month: {\n module: () => import('@iconify-icons/mingcute/calendar-month-line'),\n rtl: true,\n },\n media: () => import('@iconify-icons/mingcute/photo-album-line'),\n speak: () => import('@iconify-icons/mingcute/radar-line'),\n building: () => import('@iconify-icons/mingcute/building-5-line'),\n history2: {\n module: () => import('@iconify-icons/mingcute/history-2-line'),\n rtl: true,\n },\n document: () => import('@iconify-icons/mingcute/document-line'),\n 'arrows-right': {\n module: () => import('@iconify-icons/mingcute/arrows-right-line'),\n rtl: true,\n },\n code: () => import('@iconify-icons/mingcute/code-line'),\n copy: () => import('@iconify-icons/mingcute/copy-2-line'),\n quote: {\n module: () => import('@iconify-icons/mingcute/quote-left-line'),\n rtl: true,\n },\n settings: () => import('@iconify-icons/mingcute/settings-6-line'),\n 'heart-break': () => import('@iconify-icons/mingcute/heart-crack-line'),\n 'user-x': () => import('@iconify-icons/mingcute/user-x-line'),\n minimize: () => import('@iconify-icons/mingcute/arrows-down-line'),\n};\n","import moize from 'moize';\nimport { useEffect, useRef, useState } from 'preact/hooks';\n\nimport { ICONS } from './ICONS';\n\nconst SIZES = {\n s: 12,\n m: 16,\n l: 20,\n xl: 24,\n xxl: 32,\n};\n\nconst ICONDATA = {};\n\n// Memoize the dangerouslySetInnerHTML of the SVGs\nconst SVGICon = moize(\n function ({ width, height, body, rotate, flip }) {\n return (\n <svg\n viewBox={`0 0 ${width} ${height}`}\n dangerouslySetInnerHTML={{ __html: body }}\n style={{\n transform: `${rotate ? `rotate(${rotate})` : ''} ${\n flip ? `scaleX(-1)` : ''\n }`,\n }}\n />\n );\n },\n {\n isShallowEqual: true,\n maxSize: Object.keys(ICONS).length,\n matchesArg: (cacheKeyArg, keyArg) =>\n cacheKeyArg.icon === keyArg.icon && cacheKeyArg.body === keyArg.body,\n },\n);\n\nfunction Icon({\n icon,\n size = 'm',\n alt,\n title,\n class: className = '',\n style = {},\n}) {\n if (!icon) return null;\n\n const iconSize = SIZES[size];\n let iconBlock = ICONS[icon];\n if (!iconBlock) {\n console.warn(`Icon ${icon} not found`);\n return null;\n }\n\n let rotate,\n flip,\n rtl = false;\n if (Array.isArray(iconBlock)) {\n [iconBlock, rotate, flip] = iconBlock;\n } else if (typeof iconBlock === 'object') {\n ({ rotate, flip, rtl } = iconBlock);\n iconBlock = iconBlock.module;\n }\n\n const [iconData, setIconData] = useState(ICONDATA[icon]);\n const currentIcon = useRef(icon);\n useEffect(() => {\n if (iconData && currentIcon.current === icon) return;\n (async () => {\n const iconB = await iconBlock();\n setIconData(iconB.default);\n ICONDATA[icon] = iconB.default;\n })();\n currentIcon.current = icon;\n }, [icon]);\n\n return (\n <span\n class={`icon ${className} ${rtl ? 'rtl-flip' : ''}`}\n title={title || alt}\n style={{\n width: `${iconSize}px`,\n height: `${iconSize}px`,\n ...style,\n }}\n data-icon={icon}\n >\n {iconData && (\n // <svg\n // width={iconSize}\n // height={iconSize}\n // viewBox={`0 0 ${iconData.width} ${iconData.height}`}\n // dangerouslySetInnerHTML={{ __html: iconData.body }}\n // style={{\n // transform: `${rotate ? `rotate(${rotate})` : ''} ${\n // flip ? `scaleX(-1)` : ''\n // }`,\n // }}\n // />\n <SVGICon\n icon={icon}\n width={iconData.width}\n height={iconData.height}\n body={iconData.body}\n rotate={rotate}\n flip={flip}\n />\n )}\n </span>\n );\n}\n\nexport default Icon;\n","import { useEffect } from 'preact/hooks';\n\nfunction useCloseWatcher(fn, deps = []) {\n if (!fn || typeof fn !== 'function') return;\n useEffect(() => {\n const watcher = new CloseWatcher();\n watcher.addEventListener('close', fn);\n return () => {\n watcher.destroy();\n };\n }, deps);\n}\n\nexport default window.CloseWatcher ? useCloseWatcher : () => {};\n","import './modal.css';\n\nimport { createPortal } from 'preact/compat';\nimport { useEffect, useRef } from 'preact/hooks';\nimport { useHotkeys } from 'react-hotkeys-hook';\n\nimport useCloseWatcher from '../utils/useCloseWatcher';\n\nconst $modalContainer = document.getElementById('modal-container');\n\nfunction Modal({ children, onClose, onClick, class: className, minimized }) {\n if (!children) return null;\n\n const modalRef = useRef();\n useEffect(() => {\n let timer = setTimeout(() => {\n const focusElement = modalRef.current?.querySelector('[tabindex=\"-1\"]');\n if (focusElement) {\n focusElement.focus();\n }\n }, 100);\n return () => clearTimeout(timer);\n }, []);\n\n const supportsCloseWatcher = window.CloseWatcher;\n const escRef = useHotkeys(\n 'esc',\n () => {\n setTimeout(() => {\n onClose?.();\n }, 0);\n },\n {\n enabled: !supportsCloseWatcher && !!onClose,\n // Using keyup and setTimeout above\n // This will run \"later\" to prevent clash with esc handlers from other components\n keydown: false,\n keyup: true,\n },\n [onClose],\n );\n useCloseWatcher(onClose, [onClose]);\n\n useEffect(() => {\n const $deckContainers = document.querySelectorAll('.deck-container');\n if (minimized) {\n // Similar to focusDeck in focus-deck.jsx\n // Focus last deck\n const page = $deckContainers[$deckContainers.length - 1]; // last one\n if (page && page.tabIndex === -1) {\n page.focus();\n }\n } else {\n if (children) {\n $deckContainers.forEach(($deckContainer) => {\n $deckContainer.setAttribute('inert', '');\n });\n } else {\n $deckContainers.forEach(($deckContainer) => {\n $deckContainer.removeAttribute('inert');\n });\n }\n }\n return () => {\n $deckContainers.forEach(($deckContainer) => {\n $deckContainer.removeAttribute('inert');\n });\n };\n }, [children, minimized]);\n\n const Modal = (\n <div\n ref={(node) => {\n modalRef.current = node;\n escRef.current = node?.querySelector?.('[tabindex=\"-1\"]') || node;\n }}\n className={className}\n onClick={(e) => {\n onClick?.(e);\n if (e.target === e.currentTarget) {\n onClose?.(e);\n }\n }}\n tabIndex={minimized ? 0 : '-1'}\n inert={minimized}\n onFocus={(e) => {\n try {\n if (e.target === e.currentTarget) {\n const focusElement =\n modalRef.current?.querySelector('[tabindex=\"-1\"]');\n const isFocusable =\n !!focusElement &&\n getComputedStyle(focusElement)?.pointerEvents !== 'none';\n if (focusElement && isFocusable) {\n focusElement.focus();\n }\n }\n } catch (err) {\n console.error(err);\n }\n }}\n >\n {children}\n </div>\n );\n\n return createPortal(Modal, $modalContainer);\n\n // return createPortal(children, $modalContainer);\n}\n\nexport default Modal;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bigint: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","import { unstable_batchedUpdates } from 'react-dom';\n\nconst isMenuOpen = state => !!state && state[0] === 'o';\nconst batchedUpdates = unstable_batchedUpdates || (callback => callback());\nconst values = Object.values || (obj => Object.keys(obj).map(key => obj[key]));\nconst getTransition = (transition, name) => transition === true || !!(transition && transition[name]);\nconst safeCall = (fn, arg) => typeof fn === 'function' ? fn(arg) : fn;\nconst internalKey = '_szhsinMenu';\nconst getName = component => component[internalKey];\nconst defineName = (name, component) => Object.defineProperty(component, internalKey, {\n value: name\n});\nconst mergeProps = (target, source) => {\n source && Object.keys(source).forEach(key => {\n const targetProp = target[key];\n const sourceProp = source[key];\n if (typeof sourceProp === 'function' && targetProp) {\n target[key] = (...arg) => {\n sourceProp(...arg);\n targetProp(...arg);\n };\n } else {\n target[key] = sourceProp;\n }\n });\n return target;\n};\nconst parsePadding = paddingStr => {\n if (typeof paddingStr !== 'string') return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n const padding = paddingStr.trim().split(/\\s+/, 4).map(parseFloat);\n const top = !isNaN(padding[0]) ? padding[0] : 0;\n const right = !isNaN(padding[1]) ? padding[1] : top;\n return {\n top,\n right,\n bottom: !isNaN(padding[2]) ? padding[2] : top,\n left: !isNaN(padding[3]) ? padding[3] : right\n };\n};\nconst getScrollAncestor = node => {\n while (node) {\n node = node.parentNode;\n if (!node || node === document.body || !node.parentNode) return;\n const {\n overflow,\n overflowX,\n overflowY\n } = getComputedStyle(node);\n if (/auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX)) return node;\n }\n};\nfunction commonProps(isDisabled, isHovering) {\n return {\n 'aria-disabled': isDisabled || undefined,\n tabIndex: isHovering ? 0 : -1\n };\n}\nfunction indexOfNode(nodeList, node) {\n for (let i = 0; i < nodeList.length; i++) {\n if (nodeList[i] === node) return i;\n }\n return -1;\n}\n\nexport { batchedUpdates, commonProps, defineName, getName, getScrollAncestor, getTransition, indexOfNode, isMenuOpen, mergeProps, parsePadding, safeCall, values };\n","import { oneOfType, string, func, object, bool, number, oneOf, exact } from 'prop-types';\n\nconst stylePropTypes = name => ({\n [name ? `${name}ClassName` : 'className']: oneOfType([string, func])\n});\nconst menuPropTypes = {\n className: string,\n ...stylePropTypes('menu'),\n arrowProps: object,\n focusProps: object,\n menuStyle: object,\n arrow: bool,\n setDownOverflow: bool,\n gap: number,\n shift: number,\n align: /*#__PURE__*/oneOf(['start', 'center', 'end']),\n direction: /*#__PURE__*/oneOf(['left', 'right', 'top', 'bottom']),\n position: /*#__PURE__*/oneOf(['auto', 'anchor', 'initial']),\n overflow: /*#__PURE__*/oneOf(['auto', 'visible', 'hidden'])\n};\nconst rootMenuPropTypes = {\n ...menuPropTypes,\n containerProps: object,\n initialMounted: bool,\n unmountOnClose: bool,\n transition: /*#__PURE__*/oneOfType([bool, /*#__PURE__*/exact({\n open: bool,\n close: bool,\n item: bool\n })]),\n transitionTimeout: number,\n boundingBoxRef: object,\n boundingBoxPadding: string,\n reposition: /*#__PURE__*/oneOf(['auto', 'initial']),\n repositionFlag: /*#__PURE__*/oneOfType([string, number]),\n viewScroll: /*#__PURE__*/oneOf(['auto', 'close', 'initial']),\n submenuOpenDelay: number,\n submenuCloseDelay: number,\n portal: /*#__PURE__*/oneOfType([bool, /*#__PURE__*/exact({\n target: object,\n stablePosition: bool\n })]),\n theming: string,\n onItemClick: func\n};\nconst uncontrolledMenuPropTypes = {\n instanceRef: /*#__PURE__*/oneOfType([object, func]),\n onMenuChange: func\n};\n\nexport { menuPropTypes, rootMenuPropTypes, stylePropTypes, uncontrolledMenuPropTypes };\n","import { useMemo } from 'react';\n\nconst useBEM = ({\n block,\n element,\n modifiers,\n className\n}) => useMemo(() => {\n const blockElement = element ? `${block}__${element}` : block;\n let classString = blockElement;\n modifiers && Object.keys(modifiers).forEach(name => {\n const value = modifiers[name];\n if (value) classString += ` ${blockElement}--${value === true ? name : `${name}-${value}`}`;\n });\n let expandedClassName = typeof className === 'function' ? className(modifiers) : className;\n if (typeof expandedClassName === 'string') {\n expandedClassName = expandedClassName.trim();\n if (expandedClassName) classString += ` ${expandedClassName}`;\n }\n return classString;\n}, [block, element, modifiers, className]);\n\nexport { useBEM };\n","import { createContext } from 'react';\n\nconst menuContainerClass = 'szh-menu-container';\nconst menuClass = 'szh-menu';\nconst menuButtonClass = 'szh-menu-button';\nconst menuArrowClass = 'arrow';\nconst menuItemClass = 'item';\nconst menuDividerClass = 'divider';\nconst menuHeaderClass = 'header';\nconst menuGroupClass = 'group';\nconst subMenuClass = 'submenu';\nconst radioGroupClass = 'radio-group';\nconst HoverItemContext = /*#__PURE__*/createContext();\nconst MenuListItemContext = /*#__PURE__*/createContext({});\nconst MenuListContext = /*#__PURE__*/createContext({});\nconst EventHandlersContext = /*#__PURE__*/createContext({});\nconst RadioGroupContext = /*#__PURE__*/createContext({});\nconst SettingsContext = /*#__PURE__*/createContext({});\nconst Keys = /*#__PURE__*/Object.freeze({\n ENTER: 'Enter',\n ESC: 'Escape',\n SPACE: ' ',\n HOME: 'Home',\n END: 'End',\n LEFT: 'ArrowLeft',\n RIGHT: 'ArrowRight',\n UP: 'ArrowUp',\n DOWN: 'ArrowDown'\n});\nconst HoverActionTypes = /*#__PURE__*/Object.freeze({\n RESET: 0,\n SET: 1,\n UNSET: 2,\n INCREASE: 3,\n DECREASE: 4,\n FIRST: 5,\n LAST: 6,\n SET_INDEX: 7\n});\nconst CloseReason = /*#__PURE__*/Object.freeze({\n CLICK: 'click',\n CANCEL: 'cancel',\n BLUR: 'blur',\n SCROLL: 'scroll'\n});\nconst FocusPositions = /*#__PURE__*/Object.freeze({\n FIRST: 'first',\n LAST: 'last'\n});\nconst MenuStateMap = /*#__PURE__*/Object.freeze({\n entering: 'opening',\n entered: 'open',\n exiting: 'closing',\n exited: 'closed'\n});\nconst positionAbsolute = 'absolute';\nconst roleNone = 'presentation';\nconst roleMenuitem = 'menuitem';\nconst dummyItemProps = {\n 'aria-hidden': true,\n role: roleMenuitem\n};\n\nexport { CloseReason, EventHandlersContext, FocusPositions, HoverActionTypes, HoverItemContext, Keys, MenuListContext, MenuListItemContext, MenuStateMap, RadioGroupContext, SettingsContext, dummyItemProps, menuArrowClass, menuButtonClass, menuClass, menuContainerClass, menuDividerClass, menuGroupClass, menuHeaderClass, menuItemClass, positionAbsolute, radioGroupClass, roleMenuitem, roleNone, subMenuClass };\n","import { useMemo } from 'react';\nimport { jsx } from 'react/jsx-runtime';\nimport { mergeProps, getTransition, safeCall } from '../utils/utils.js';\nimport { useBEM } from '../hooks/useBEM.js';\nimport { menuContainerClass, Keys, CloseReason } from '../utils/constants.js';\n\nconst MenuContainer = ({\n className,\n containerRef,\n containerProps,\n children,\n isOpen,\n theming,\n transition,\n onClose\n}) => {\n const itemTransition = getTransition(transition, 'item');\n const onKeyDown = ({\n key\n }) => {\n switch (key) {\n case Keys.ESC:\n safeCall(onClose, {\n key,\n reason: CloseReason.CANCEL\n });\n break;\n }\n };\n const onBlur = e => {\n if (isOpen && !e.currentTarget.contains(e.relatedTarget)) {\n safeCall(onClose, {\n reason: CloseReason.BLUR\n });\n }\n };\n return /*#__PURE__*/jsx(\"div\", {\n ...mergeProps({\n onKeyDown,\n onBlur\n }, containerProps),\n className: useBEM({\n block: menuContainerClass,\n modifiers: useMemo(() => ({\n theme: theming,\n itemTransition\n }), [theming, itemTransition]),\n className\n }),\n style: {\n position: 'absolute',\n ...(containerProps == null ? void 0 : containerProps.style)\n },\n ref: containerRef,\n children: children\n });\n};\n\nexport { MenuContainer };\n","const createSubmenuCtx = () => {\n let timer,\n count = 0;\n return {\n toggle: isOpen => {\n isOpen ? count++ : count--;\n count = Math.max(count, 0);\n },\n on: (closeDelay, pending, settled) => {\n if (count) {\n if (!timer) timer = setTimeout(() => {\n timer = 0;\n pending();\n }, closeDelay);\n } else {\n settled == null || settled();\n }\n },\n off: () => {\n if (timer) {\n clearTimeout(timer);\n timer = 0;\n }\n }\n };\n};\n\nexport { createSubmenuCtx };\n","import { useState, useRef, useCallback } from 'react';\nimport { HoverActionTypes } from '../utils/constants.js';\nimport { indexOfNode } from '../utils/utils.js';\n\nconst useItems = (menuRef, focusRef) => {\n const [hoverItem, setHoverItem] = useState();\n const stateRef = useRef({\n items: [],\n hoverIndex: -1,\n sorted: false\n });\n const mutableState = stateRef.current;\n const updateItems = useCallback((item, isMounted) => {\n const {\n items\n } = mutableState;\n if (!item) {\n mutableState.items = [];\n } else if (isMounted) {\n items.push(item);\n } else {\n const index = items.indexOf(item);\n if (index > -1) {\n items.splice(index, 1);\n if (item.contains(document.activeElement)) {\n focusRef.current.focus();\n setHoverItem();\n }\n }\n }\n mutableState.hoverIndex = -1;\n mutableState.sorted = false;\n }, [mutableState, focusRef]);\n const dispatch = useCallback((actionType, item, nextIndex) => {\n const {\n items,\n hoverIndex\n } = mutableState;\n const sortItems = () => {\n if (mutableState.sorted) return;\n const orderedNodes = menuRef.current.querySelectorAll('.szh-menu__item');\n items.sort((a, b) => indexOfNode(orderedNodes, a) - indexOfNode(orderedNodes, b));\n mutableState.sorted = true;\n };\n let index = -1,\n newItem = undefined;\n switch (actionType) {\n case HoverActionTypes.RESET:\n break;\n case HoverActionTypes.SET:\n newItem = item;\n break;\n case HoverActionTypes.UNSET:\n newItem = prevItem => prevItem === item ? undefined : prevItem;\n break;\n case HoverActionTypes.FIRST:\n sortItems();\n index = 0;\n newItem = items[index];\n break;\n case HoverActionTypes.LAST:\n sortItems();\n index = items.length - 1;\n newItem = items[index];\n break;\n case HoverActionTypes.SET_INDEX:\n sortItems();\n index = nextIndex;\n newItem = items[index];\n break;\n case HoverActionTypes.INCREASE:\n sortItems();\n index = hoverIndex;\n if (index < 0) index = items.indexOf(item);\n index++;\n if (index >= items.length) index = 0;\n newItem = items[index];\n break;\n case HoverActionTypes.DECREASE:\n sortItems();\n index = hoverIndex;\n if (index < 0) index = items.indexOf(item);\n index--;\n if (index < 0) index = items.length - 1;\n newItem = items[index];\n break;\n default:\n if (process.env.NODE_ENV !== 'production') throw new Error(`[React-Menu] Unknown hover action type: ${actionType}`);\n }\n if (!newItem) index = -1;\n setHoverItem(newItem);\n mutableState.hoverIndex = index;\n }, [menuRef, mutableState]);\n return {\n hoverItem,\n dispatch,\n updateItems\n };\n};\n\nexport { useItems };\n","const getNativeDimension = (transformed, untransformed) => Math.round(transformed) === untransformed ? transformed : untransformed;\nconst getNormalizedClientRect = element => {\n const rect = element.getBoundingClientRect();\n rect.width = getNativeDimension(rect.width, element.offsetWidth);\n rect.height = getNativeDimension(rect.height, element.offsetHeight);\n return rect;\n};\n\nexport { getNormalizedClientRect };\n","import { getNormalizedClientRect } from './getNormalizedClientRect.js';\nimport { parsePadding } from '../utils/utils.js';\n\nconst getPositionHelpers = (containerRef, menuRef, menuScroll, boundingBoxPadding) => {\n const menuRect = getNormalizedClientRect(menuRef.current);\n const containerRect = containerRef.current.getBoundingClientRect();\n const boundingRect = menuScroll === window ? {\n left: 0,\n top: 0,\n right: document.documentElement.clientWidth,\n bottom: window.innerHeight\n } : menuScroll.getBoundingClientRect();\n const padding = parsePadding(boundingBoxPadding);\n const getLeftOverflow = x => x + containerRect.left - boundingRect.left - padding.left;\n const getRightOverflow = x => x + containerRect.left + menuRect.width - boundingRect.right + padding.right;\n const getTopOverflow = y => y + containerRect.top - boundingRect.top - padding.top;\n const getBottomOverflow = y => y + containerRect.top + menuRect.height - boundingRect.bottom + padding.bottom;\n const confineHorizontally = x => {\n let leftOverflow = getLeftOverflow(x);\n if (leftOverflow < 0) {\n x -= leftOverflow;\n } else {\n const rightOverflow = getRightOverflow(x);\n if (rightOverflow > 0) {\n x -= rightOverflow;\n leftOverflow = getLeftOverflow(x);\n if (leftOverflow < 0) x -= leftOverflow;\n }\n }\n return x;\n };\n const confineVertically = y => {\n let topOverflow = getTopOverflow(y);\n if (topOverflow < 0) {\n y -= topOverflow;\n } else {\n const bottomOverflow = getBottomOverflow(y);\n if (bottomOverflow > 0) {\n y -= bottomOverflow;\n topOverflow = getTopOverflow(y);\n if (topOverflow < 0) y -= topOverflow;\n }\n }\n return y;\n };\n return {\n menuRect,\n containerRect,\n getLeftOverflow,\n getRightOverflow,\n getTopOverflow,\n getBottomOverflow,\n confineHorizontally,\n confineVertically\n };\n};\n\nexport { getPositionHelpers };\n","const placeArrowVertical = ({\n arrowRef,\n menuY,\n anchorRect,\n containerRect,\n menuRect\n}) => {\n let y = anchorRect.top - containerRect.top - menuY + anchorRect.height / 2;\n const offset = arrowRef.current.offsetHeight * 1.25;\n y = Math.max(offset, y);\n y = Math.min(y, menuRect.height - offset);\n return y;\n};\n\nexport { placeArrowVertical };\n","import { placeArrowVertical } from './placeArrowVertical.js';\n\nconst placeLeftorRight = ({\n anchorRect,\n containerRect,\n menuRect,\n placeLeftorRightY,\n placeLeftX,\n placeRightX,\n getLeftOverflow,\n getRightOverflow,\n confineHorizontally,\n confineVertically,\n arrowRef,\n arrow,\n direction,\n position\n}) => {\n let computedDirection = direction;\n let y = placeLeftorRightY;\n if (position !== 'initial') {\n y = confineVertically(y);\n if (position === 'anchor') {\n y = Math.min(y, anchorRect.bottom - containerRect.top);\n y = Math.max(y, anchorRect.top - containerRect.top - menuRect.height);\n }\n }\n let x, leftOverflow, rightOverflow;\n if (computedDirection === 'left') {\n x = placeLeftX;\n if (position !== 'initial') {\n leftOverflow = getLeftOverflow(x);\n if (leftOverflow < 0) {\n rightOverflow = getRightOverflow(placeRightX);\n if (rightOverflow <= 0 || -leftOverflow > rightOverflow) {\n x = placeRightX;\n computedDirection = 'right';\n }\n }\n }\n } else {\n x = placeRightX;\n if (position !== 'initial') {\n rightOverflow = getRightOverflow(x);\n if (rightOverflow > 0) {\n leftOverflow = getLeftOverflow(placeLeftX);\n if (leftOverflow >= 0 || -leftOverflow < rightOverflow) {\n x = placeLeftX;\n computedDirection = 'left';\n }\n }\n }\n }\n if (position === 'auto') x = confineHorizontally(x);\n const arrowY = arrow ? placeArrowVertical({\n menuY: y,\n arrowRef,\n anchorRect,\n containerRect,\n menuRect\n }) : undefined;\n return {\n arrowY,\n x,\n y,\n computedDirection\n };\n};\n\nexport { placeLeftorRight };\n","const placeArrowHorizontal = ({\n arrowRef,\n menuX,\n anchorRect,\n containerRect,\n menuRect\n}) => {\n let x = anchorRect.left - containerRect.left - menuX + anchorRect.width / 2;\n const offset = arrowRef.current.offsetWidth * 1.25;\n x = Math.max(offset, x);\n x = Math.min(x, menuRect.width - offset);\n return x;\n};\n\nexport { placeArrowHorizontal };\n","import { placeArrowHorizontal } from './placeArrowHorizontal.js';\n\nconst placeToporBottom = ({\n anchorRect,\n containerRect,\n menuRect,\n placeToporBottomX,\n placeTopY,\n placeBottomY,\n getTopOverflow,\n getBottomOverflow,\n confineHorizontally,\n confineVertically,\n arrowRef,\n arrow,\n direction,\n position\n}) => {\n let computedDirection = direction === 'top' ? 'top' : 'bottom';\n let x = placeToporBottomX;\n if (position !== 'initial') {\n x = confineHorizontally(x);\n if (position === 'anchor') {\n x = Math.min(x, anchorRect.right - containerRect.left);\n x = Math.max(x, anchorRect.left - containerRect.left - menuRect.width);\n }\n }\n let y, topOverflow, bottomOverflow;\n if (computedDirection === 'top') {\n y = placeTopY;\n if (position !== 'initial') {\n topOverflow = getTopOverflow(y);\n if (topOverflow < 0) {\n bottomOverflow = getBottomOverflow(placeBottomY);\n if (bottomOverflow <= 0 || -topOverflow > bottomOverflow) {\n y = placeBottomY;\n computedDirection = 'bottom';\n }\n }\n }\n } else {\n y = placeBottomY;\n if (position !== 'initial') {\n bottomOverflow = getBottomOverflow(y);\n if (bottomOverflow > 0) {\n topOverflow = getTopOverflow(placeTopY);\n if (topOverflow >= 0 || -topOverflow < bottomOverflow) {\n y = placeTopY;\n computedDirection = 'top';\n }\n }\n }\n }\n if (position === 'auto') y = confineVertically(y);\n const arrowX = arrow ? placeArrowHorizontal({\n menuX: x,\n arrowRef,\n anchorRect,\n containerRect,\n menuRect\n }) : undefined;\n return {\n arrowX,\n x,\n y,\n computedDirection\n };\n};\n\nexport { placeToporBottom };\n","import { placeLeftorRight } from './placeLeftorRight.js';\nimport { placeToporBottom } from './placeToporBottom.js';\n\nconst positionMenu = ({\n arrow,\n align,\n direction,\n gap,\n shift,\n position,\n anchorRect,\n arrowRef,\n positionHelpers\n}) => {\n const {\n menuRect,\n containerRect\n } = positionHelpers;\n const isHorizontal = direction === 'left' || direction === 'right';\n let horizontalOffset = isHorizontal ? gap : shift;\n let verticalOffset = isHorizontal ? shift : gap;\n if (arrow) {\n const arrowElt = arrowRef.current;\n if (isHorizontal) {\n horizontalOffset += arrowElt.offsetWidth;\n } else {\n verticalOffset += arrowElt.offsetHeight;\n }\n }\n const placeLeftX = anchorRect.left - containerRect.left - menuRect.width - horizontalOffset;\n const placeRightX = anchorRect.right - containerRect.left + horizontalOffset;\n const placeTopY = anchorRect.top - containerRect.top - menuRect.height - verticalOffset;\n const placeBottomY = anchorRect.bottom - containerRect.top + verticalOffset;\n let placeToporBottomX, placeLeftorRightY;\n if (align === 'end') {\n placeToporBottomX = anchorRect.right - containerRect.left - menuRect.width;\n placeLeftorRightY = anchorRect.bottom - containerRect.top - menuRect.height;\n } else if (align === 'center') {\n placeToporBottomX = anchorRect.left - containerRect.left - (menuRect.width - anchorRect.width) / 2;\n placeLeftorRightY = anchorRect.top - containerRect.top - (menuRect.height - anchorRect.height) / 2;\n } else {\n placeToporBottomX = anchorRect.left - containerRect.left;\n placeLeftorRightY = anchorRect.top - containerRect.top;\n }\n placeToporBottomX += horizontalOffset;\n placeLeftorRightY += verticalOffset;\n const options = {\n ...positionHelpers,\n anchorRect,\n placeLeftX,\n placeRightX,\n placeLeftorRightY,\n placeTopY,\n placeBottomY,\n placeToporBottomX,\n arrowRef,\n arrow,\n direction,\n position\n };\n switch (direction) {\n case 'left':\n case 'right':\n return placeLeftorRight(options);\n case 'top':\n case 'bottom':\n default:\n return placeToporBottom(options);\n }\n};\n\nexport { positionMenu };\n","import { useLayoutEffect, useEffect } from 'react';\n\nconst useIsomorphicLayoutEffect = typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined' ? useLayoutEffect : useEffect;\n\nexport { useIsomorphicLayoutEffect as useLayoutEffect };\n","import { useMemo } from 'react';\n\nfunction setRef(ref, instance) {\n typeof ref === 'function' ? ref(instance) : ref.current = instance;\n}\nconst useCombinedRef = (refA, refB) => useMemo(() => {\n if (!refA) return refB;\n if (!refB) return refA;\n return instance => {\n setRef(refA, instance);\n setRef(refB, instance);\n };\n}, [refA, refB]);\n\nexport { useCombinedRef };\n","import { useState, useReducer, useContext, useRef, useCallback, useEffect, useMemo } from 'react';\nimport { flushSync } from 'react-dom';\nimport { MenuContainer } from './MenuContainer.js';\nimport { jsxs, jsx } from 'react/jsx-runtime';\nimport { createSubmenuCtx } from '../utils/submenuCtx.js';\nimport { SettingsContext, MenuListContext, HoverActionTypes, menuClass, menuArrowClass, positionAbsolute, dummyItemProps, MenuListItemContext, HoverItemContext, Keys, CloseReason, FocusPositions } from '../utils/constants.js';\nimport { useItems } from '../hooks/useItems.js';\nimport { getScrollAncestor, commonProps, mergeProps, safeCall, isMenuOpen, getTransition, batchedUpdates } from '../utils/utils.js';\nimport { getPositionHelpers } from '../positionUtils/getPositionHelpers.js';\nimport { positionMenu } from '../positionUtils/positionMenu.js';\nimport { useLayoutEffect as useIsomorphicLayoutEffect } from '../hooks/useIsomorphicLayoutEffect.js';\nimport { useBEM } from '../hooks/useBEM.js';\nimport { useCombinedRef } from '../hooks/useCombinedRef.js';\n\nconst offScreen = -9999;\nconst MenuList = ({\n ariaLabel,\n menuClassName,\n menuStyle,\n arrow,\n arrowProps = {},\n anchorPoint,\n anchorRef,\n containerRef,\n containerProps,\n focusProps,\n externalRef,\n parentScrollingRef,\n align = 'start',\n direction = 'bottom',\n position = 'auto',\n overflow = 'visible',\n setDownOverflow,\n repositionFlag,\n captureFocus = true,\n state,\n endTransition,\n isDisabled,\n menuItemFocus,\n gap = 0,\n shift = 0,\n children,\n onClose,\n ...restProps\n}) => {\n const [menuPosition, setMenuPosition] = useState({\n x: offScreen,\n y: offScreen\n });\n const [arrowPosition, setArrowPosition] = useState({});\n const [overflowData, setOverflowData] = useState();\n const [expandedDirection, setExpandedDirection] = useState(direction);\n const [submenuCtx] = useState(createSubmenuCtx);\n const [reposSubmenu, forceReposSubmenu] = useReducer(c => c + 1, 1);\n const {\n transition,\n boundingBoxRef,\n boundingBoxPadding,\n rootMenuRef,\n rootAnchorRef,\n scrollNodesRef,\n reposition,\n viewScroll,\n submenuCloseDelay\n } = useContext(SettingsContext);\n const {\n submenuCtx: parentSubmenuCtx,\n reposSubmenu: reposFlag = repositionFlag\n } = useContext(MenuListContext);\n const menuRef = useRef(null);\n const focusRef = useRef();\n const arrowRef = useRef();\n const prevOpen = useRef(false);\n const {\n hoverItem,\n dispatch,\n updateItems\n } = useItems(menuRef, focusRef);\n const isOpen = isMenuOpen(state);\n const openTransition = getTransition(transition, 'open');\n const closeTransition = getTransition(transition, 'close');\n const scrollNodes = scrollNodesRef.current;\n const onKeyDown = e => {\n switch (e.key) {\n case Keys.HOME:\n dispatch(HoverActionTypes.FIRST);\n break;\n case Keys.END:\n dispatch(HoverActionTypes.LAST);\n break;\n case Keys.UP:\n dispatch(HoverActionTypes.DECREASE, hoverItem);\n break;\n case Keys.DOWN:\n dispatch(HoverActionTypes.INCREASE, hoverItem);\n break;\n case Keys.SPACE:\n if (e.target && e.target.className.indexOf(menuClass) !== -1) {\n e.preventDefault();\n }\n return;\n default:\n return;\n }\n e.preventDefault();\n e.stopPropagation();\n };\n const onAnimationEnd = () => {\n if (state === 'closing') {\n setOverflowData();\n }\n safeCall(endTransition);\n };\n const onPointerMove = e => {\n e.stopPropagation();\n submenuCtx.on(submenuCloseDelay, () => {\n dispatch(HoverActionTypes.RESET);\n focusRef.current.focus();\n });\n };\n const onPointerLeave = e => {\n if (e.target === e.currentTarget) submenuCtx.off();\n };\n const handlePosition = useCallback(noOverflowCheck => {\n var _anchorRef$current;\n const anchorRect = anchorRef ? (_anchorRef$current = anchorRef.current) == null ? void 0 : _anchorRef$current.getBoundingClientRect() : anchorPoint ? {\n left: anchorPoint.x,\n right: anchorPoint.x,\n top: anchorPoint.y,\n bottom: anchorPoint.y,\n width: 0,\n height: 0\n } : null;\n if (!anchorRect) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn('[React-Menu] Menu might not be positioned properly as one of the anchorRef or anchorPoint prop should be provided. If `anchorRef` is provided, the anchor must be mounted before menu is open.');\n }\n return;\n }\n if (!scrollNodes.menu) {\n scrollNodes.menu = (boundingBoxRef ? boundingBoxRef.current : getScrollAncestor(rootMenuRef.current)) || window;\n }\n const positionHelpers = getPositionHelpers(containerRef, menuRef, scrollNodes.menu, boundingBoxPadding);\n let {\n arrowX,\n arrowY,\n x,\n y,\n computedDirection\n } = positionMenu({\n arrow,\n align,\n direction,\n gap,\n shift,\n position,\n anchorRect,\n arrowRef,\n positionHelpers\n });\n const {\n menuRect\n } = positionHelpers;\n const menuHeight = menuRect.height;\n if (!noOverflowCheck && overflow !== 'visible') {\n const {\n getTopOverflow,\n getBottomOverflow\n } = positionHelpers;\n let height, overflowAmt;\n const bottomOverflow = getBottomOverflow(y);\n if (bottomOverflow > 0) {\n height = menuHeight - bottomOverflow;\n overflowAmt = bottomOverflow;\n } else {\n const topOverflow = getTopOverflow(y);\n if (topOverflow < 0) {\n height = menuHeight + topOverflow;\n overflowAmt = 0 - topOverflow;\n if (height >= 0) y -= topOverflow;\n }\n }\n if (height >= 0) {\n setOverflowData({\n height,\n overflowAmt\n });\n }\n }\n if (arrow) setArrowPosition({\n x: arrowX,\n y: arrowY\n });\n setMenuPosition({\n x,\n y\n });\n setExpandedDirection(computedDirection);\n }, [arrow, align, boundingBoxPadding, direction, gap, shift, position, overflow, anchorPoint, anchorRef, containerRef, boundingBoxRef, rootMenuRef, scrollNodes]);\n useIsomorphicLayoutEffect(() => {\n if (isOpen) {\n handlePosition();\n if (prevOpen.current) forceReposSubmenu();\n }\n prevOpen.current = isOpen;\n }, [isOpen, handlePosition, reposFlag]);\n useIsomorphicLayoutEffect(() => {\n if (overflowData && !setDownOverflow) menuRef.current.scrollTop = 0;\n }, [overflowData, setDownOverflow]);\n useIsomorphicLayoutEffect(() => updateItems, [updateItems]);\n useEffect(() => {\n let {\n menu: menuScroll\n } = scrollNodes;\n if (!isOpen || !menuScroll) return;\n menuScroll = menuScroll.addEventListener ? menuScroll : window;\n if (!scrollNodes.anchors) {\n scrollNodes.anchors = [];\n let anchorScroll = getScrollAncestor(rootAnchorRef && rootAnchorRef.current);\n while (anchorScroll && anchorScroll !== menuScroll) {\n scrollNodes.anchors.push(anchorScroll);\n anchorScroll = getScrollAncestor(anchorScroll);\n }\n }\n let scroll = viewScroll;\n if (scrollNodes.anchors.length && scroll === 'initial') scroll = 'auto';\n if (scroll === 'initial') return;\n const handleScroll = () => {\n if (scroll === 'auto') {\n batchedUpdates(() => handlePosition(true));\n } else {\n safeCall(onClose, {\n reason: CloseReason.SCROLL\n });\n }\n };\n const scrollObservers = scrollNodes.anchors.concat(viewScroll !== 'initial' ? menuScroll : []);\n scrollObservers.forEach(o => o.addEventListener('scroll', handleScroll));\n return () => scrollObservers.forEach(o => o.removeEventListener('scroll', handleScroll));\n }, [rootAnchorRef, scrollNodes, isOpen, onClose, viewScroll, handlePosition]);\n const hasOverflow = !!overflowData && overflowData.overflowAmt > 0;\n useEffect(() => {\n if (hasOverflow || !isOpen || !parentScrollingRef) return;\n const handleScroll = () => batchedUpdates(handlePosition);\n const parentScroll = parentScrollingRef.current;\n parentScroll.addEventListener('scroll', handleScroll);\n return () => parentScroll.removeEventListener('scroll', handleScroll);\n }, [isOpen, hasOverflow, parentScrollingRef, handlePosition]);\n useEffect(() => {\n if (!isOpen || typeof ResizeObserver !== 'function' || reposition === 'initial') return;\n const targetList = [];\n const resizeObserver = new ResizeObserver(entries => entries.forEach(({\n target\n }) => {\n if (targetList.indexOf(target) < 0) {\n targetList.push(target);\n } else {\n flushSync(() => {\n handlePosition();\n forceReposSubmenu();\n });\n }\n }));\n const resizeObserverOptions = {\n box: 'border-box'\n };\n resizeObserver.observe(menuRef.current, resizeObserverOptions);\n const anchor = anchorRef == null ? void 0 : anchorRef.current;\n anchor && resizeObserver.observe(anchor, resizeObserverOptions);\n return () => resizeObserver.disconnect();\n }, [isOpen, reposition, anchorRef, handlePosition]);\n useEffect(() => {\n if (!isOpen) {\n dispatch(HoverActionTypes.RESET);\n if (!closeTransition) setOverflowData();\n return;\n }\n const {\n position,\n alwaysUpdate\n } = menuItemFocus || {};\n const setItemFocus = () => {\n if (position === FocusPositions.FIRST) {\n dispatch(HoverActionTypes.FIRST);\n } else if (position === FocusPositions.LAST) {\n dispatch(HoverActionTypes.LAST);\n } else if (position >= -1) {\n dispatch(HoverActionTypes.SET_INDEX, undefined, position);\n }\n };\n if (alwaysUpdate) {\n setItemFocus();\n } else if (captureFocus) {\n const id = setTimeout(() => {\n const menuElt = menuRef.current;\n if (menuElt && !menuElt.contains(document.activeElement)) {\n focusRef.current.focus();\n setItemFocus();\n }\n }, openTransition ? 170 : 100);\n return () => clearTimeout(id);\n }\n }, [isOpen, openTransition, closeTransition, captureFocus, menuItemFocus, dispatch]);\n const itemContext = useMemo(() => ({\n isParentOpen: isOpen,\n submenuCtx,\n dispatch,\n updateItems\n }), [isOpen, submenuCtx, dispatch, updateItems]);\n let maxHeight, overflowAmt;\n if (overflowData) {\n setDownOverflow ? overflowAmt = overflowData.overflowAmt : maxHeight = overflowData.height;\n }\n const listContext = useMemo(() => ({\n reposSubmenu,\n submenuCtx,\n overflow,\n overflowAmt,\n parentMenuRef: menuRef,\n parentDir: expandedDirection\n }), [reposSubmenu, submenuCtx, overflow, overflowAmt, expandedDirection]);\n const overflowStyle = maxHeight >= 0 ? {\n maxHeight,\n overflow\n } : undefined;\n const modifiers = useMemo(() => ({\n state,\n align,\n dir: expandedDirection\n }), [state, align, expandedDirection]);\n const arrowModifiers = useMemo(() => ({\n dir: expandedDirection\n }), [expandedDirection]);\n const _arrowClassName = useBEM({\n block: menuClass,\n element: menuArrowClass,\n modifiers: arrowModifiers,\n className: arrowProps.className\n });\n const menu = /*#__PURE__*/jsxs(\"ul\", {\n role: \"menu\",\n \"aria-label\": ariaLabel,\n ...commonProps(isDisabled),\n ...mergeProps({\n onPointerEnter: parentSubmenuCtx == null ? void 0 : parentSubmenuCtx.off,\n onPointerMove,\n onPointerLeave,\n onKeyDown,\n onAnimationEnd\n }, restProps),\n ref: useCombinedRef(externalRef, menuRef),\n className: useBEM({\n block: menuClass,\n modifiers,\n className: menuClassName\n }),\n style: {\n ...menuStyle,\n ...overflowStyle,\n margin: 0,\n display: state === 'closed' ? 'none' : undefined,\n position: positionAbsolute,\n left: menuPosition.x,\n top: menuPosition.y\n },\n children: [/*#__PURE__*/jsx(\"li\", {\n tabIndex: -1,\n style: {\n position: positionAbsolute,\n left: 0,\n top: 0,\n display: 'block',\n outline: 'none'\n },\n ref: focusRef,\n ...dummyItemProps,\n ...focusProps\n }), arrow && /*#__PURE__*/jsx(\"li\", {\n ...dummyItemProps,\n ...arrowProps,\n className: _arrowClassName,\n style: {\n display: 'block',\n position: positionAbsolute,\n left: arrowPosition.x,\n top: arrowPosition.y,\n ...arrowProps.style\n },\n ref: arrowRef\n }), /*#__PURE__*/jsx(MenuListContext.Provider, {\n value: listContext,\n children: /*#__PURE__*/jsx(MenuListItemContext.Provider, {\n value: itemContext,\n children: /*#__PURE__*/jsx(HoverItemContext.Provider, {\n value: hoverItem,\n children: safeCall(children, modifiers)\n })\n })\n })]\n });\n return containerProps ? /*#__PURE__*/jsx(MenuContainer, {\n ...containerProps,\n isOpen: isOpen,\n children: menu\n }) : menu;\n};\n\nexport { MenuList };\n","import { forwardRef, useRef, useMemo } from 'react';\nimport { createPortal } from 'react-dom';\nimport { oneOf, exact, number, object, bool, oneOfType, string, func } from 'prop-types';\nimport { MenuList } from './MenuList.js';\nimport { jsx } from 'react/jsx-runtime';\nimport { rootMenuPropTypes } from '../utils/propTypes.js';\nimport { safeCall, values } from '../utils/utils.js';\nimport { MenuStateMap, Keys, CloseReason, SettingsContext, EventHandlersContext } from '../utils/constants.js';\n\nconst ControlledMenu = /*#__PURE__*/forwardRef(function ControlledMenu({\n 'aria-label': ariaLabel,\n className,\n containerProps,\n initialMounted,\n unmountOnClose,\n transition,\n transitionTimeout,\n boundingBoxRef,\n boundingBoxPadding,\n reposition = 'auto',\n submenuOpenDelay = 300,\n submenuCloseDelay = 150,\n viewScroll = 'initial',\n portal,\n theming,\n onItemClick,\n ...restProps\n}, externalRef) {\n const containerRef = useRef(null);\n const scrollNodesRef = useRef({});\n const {\n anchorRef,\n state,\n onClose\n } = restProps;\n const settings = useMemo(() => ({\n initialMounted,\n unmountOnClose,\n transition,\n transitionTimeout,\n boundingBoxRef,\n boundingBoxPadding,\n rootMenuRef: containerRef,\n rootAnchorRef: anchorRef,\n scrollNodesRef,\n reposition,\n viewScroll,\n submenuOpenDelay,\n submenuCloseDelay\n }), [initialMounted, unmountOnClose, transition, transitionTimeout, anchorRef, boundingBoxRef, boundingBoxPadding, reposition, viewScroll, submenuOpenDelay, submenuCloseDelay]);\n const eventHandlers = useMemo(() => ({\n handleClick(event, isCheckorRadio) {\n if (!event.stopPropagation) safeCall(onItemClick, event);\n let keepOpen = event.keepOpen;\n if (keepOpen === undefined) {\n keepOpen = isCheckorRadio && event.key === Keys.SPACE;\n }\n if (!keepOpen) {\n safeCall(onClose, {\n value: event.value,\n key: event.key,\n reason: CloseReason.CLICK\n });\n }\n },\n handleClose(key) {\n safeCall(onClose, {\n key,\n reason: CloseReason.CLICK\n });\n }\n }), [onItemClick, onClose]);\n if (!state) return null;\n const menuList = /*#__PURE__*/jsx(SettingsContext.Provider, {\n value: settings,\n children: /*#__PURE__*/jsx(EventHandlersContext.Provider, {\n value: eventHandlers,\n children: /*#__PURE__*/jsx(MenuList, {\n ...restProps,\n ariaLabel: ariaLabel || 'Menu',\n externalRef: externalRef,\n containerRef: containerRef,\n containerProps: {\n className,\n containerRef,\n containerProps,\n theming,\n transition,\n onClose\n }\n })\n })\n });\n if (portal === true && typeof document !== 'undefined') {\n return /*#__PURE__*/createPortal(menuList, document.body);\n } else if (portal) {\n return portal.target ? /*#__PURE__*/createPortal(menuList, portal.target) : portal.stablePosition ? null : menuList;\n }\n return menuList;\n});\nprocess.env.NODE_ENV !== \"production\" ? ControlledMenu.propTypes = {\n ...rootMenuPropTypes,\n state: /*#__PURE__*/oneOf( /*#__PURE__*/values(MenuStateMap)),\n anchorPoint: /*#__PURE__*/exact({\n x: number,\n y: number\n }),\n anchorRef: object,\n captureFocus: bool,\n menuItemFocus: /*#__PURE__*/exact({\n position: /*#__PURE__*/oneOfType([string, number]),\n alwaysUpdate: bool\n }),\n onClose: func\n} : void 0;\n\nexport { ControlledMenu };\n","const PRE_ENTER = 0;\nconst ENTERING = 1;\nconst ENTERED = 2;\nconst PRE_EXIT = 3;\nconst EXITING = 4;\nconst EXITED = 5;\nconst UNMOUNTED = 6;\nconst STATUS = ['preEnter', 'entering', 'entered', 'preExit', 'exiting', 'exited', 'unmounted'];\nconst getState = status => ({\n _s: status,\n status: STATUS[status],\n isEnter: status < PRE_EXIT,\n isMounted: status !== UNMOUNTED,\n isResolved: status === ENTERED || status > EXITING\n});\nconst startOrEnd = unmounted => unmounted ? UNMOUNTED : EXITED;\nconst getEndStatus = (status, unmountOnExit) => {\n switch (status) {\n case ENTERING:\n case PRE_ENTER:\n return ENTERED;\n case EXITING:\n case PRE_EXIT:\n return startOrEnd(unmountOnExit);\n }\n};\nconst getTimeout = timeout => typeof timeout === 'object' ? [timeout.enter, timeout.exit] : [timeout, timeout];\n\nexport { ENTERED, ENTERING, EXITED, EXITING, PRE_ENTER, PRE_EXIT, STATUS, UNMOUNTED, getEndStatus, getState, getTimeout, startOrEnd };\n","import { useState, useRef, useCallback, useEffect } from 'react';\nimport { getState, ENTERED, startOrEnd, getTimeout, getEndStatus, PRE_ENTER, ENTERING, PRE_EXIT, EXITING } from './utils.js';\n\nconst updateState = (status, setState, latestState, timeoutId, onChange) => {\n clearTimeout(timeoutId.current);\n const state = getState(status);\n setState(state);\n latestState.current = state;\n onChange && onChange({\n current: state\n });\n};\nconst useTransition = ({\n enter = true,\n exit = true,\n preEnter,\n preExit,\n timeout,\n initialEntered,\n mountOnEnter,\n unmountOnExit,\n onStateChange: onChange\n} = {}) => {\n const [state, setState] = useState(() => getState(initialEntered ? ENTERED : startOrEnd(mountOnEnter)));\n const latestState = useRef(state);\n const timeoutId = useRef();\n const [enterTimeout, exitTimeout] = getTimeout(timeout);\n const endTransition = useCallback(() => {\n const status = getEndStatus(latestState.current._s, unmountOnExit);\n status && updateState(status, setState, latestState, timeoutId, onChange);\n }, [onChange, unmountOnExit]);\n const toggle = useCallback(toEnter => {\n const transitState = status => {\n updateState(status, setState, latestState, timeoutId, onChange);\n switch (status) {\n case ENTERING:\n if (enterTimeout >= 0) timeoutId.current = setTimeout(endTransition, enterTimeout);\n break;\n case EXITING:\n if (exitTimeout >= 0) timeoutId.current = setTimeout(endTransition, exitTimeout);\n break;\n case PRE_ENTER:\n case PRE_EXIT:\n timeoutId.current = setTimeout(() => transitState(status + 1), 0);\n break;\n }\n };\n const enterStage = latestState.current.isEnter;\n if (typeof toEnter !== 'boolean') toEnter = !enterStage;\n if (toEnter) {\n !enterStage && transitState(enter ? preEnter ? PRE_ENTER : ENTERING : ENTERED);\n } else {\n enterStage && transitState(exit ? preExit ? PRE_EXIT : EXITING : startOrEnd(unmountOnExit));\n }\n }, [endTransition, onChange, enter, exit, preEnter, preExit, enterTimeout, exitTimeout, unmountOnExit]);\n useEffect(() => () => clearTimeout(timeoutId.current), []);\n return [state, toggle, endTransition];\n};\n\nexport { useTransition };\n","import { useTransition } from 'react-transition-state';\nimport { getTransition } from '../utils/utils.js';\nimport { MenuStateMap } from '../utils/constants.js';\n\nconst useMenuState = ({\n initialOpen,\n initialMounted,\n unmountOnClose,\n transition,\n transitionTimeout = 500\n} = {}) => {\n const [{\n status\n }, toggleMenu, endTransition] = useTransition({\n initialEntered: initialOpen,\n mountOnEnter: !initialMounted,\n unmountOnExit: unmountOnClose,\n timeout: transitionTimeout,\n enter: getTransition(transition, 'open'),\n exit: getTransition(transition, 'close')\n });\n return [{\n state: MenuStateMap[status],\n endTransition\n }, toggleMenu];\n};\n\nexport { useMenuState };\n","import { useState } from 'react';\nimport { useMenuState } from './useMenuState.js';\n\nconst useMenuStateAndFocus = options => {\n const [menuProps, toggleMenu] = useMenuState(options);\n const [menuItemFocus, setMenuItemFocus] = useState();\n const openMenu = (position, alwaysUpdate) => {\n setMenuItemFocus({\n position,\n alwaysUpdate\n });\n toggleMenu(true);\n };\n return [{\n menuItemFocus,\n ...menuProps\n }, toggleMenu, openMenu];\n};\n\nexport { useMenuStateAndFocus };\n","import { useState } from 'react';\n\nconst useClick = (state, onToggle) => {\n if (process.env.NODE_ENV !== 'production' && typeof onToggle !== 'function') {\n throw new Error('[React-Menu] useClick/useHover requires a function in the second parameter.');\n }\n const [skipOpen] = useState({});\n return {\n onMouseDown: () => {\n skipOpen.v = state && state !== 'closed';\n },\n onClick: e => skipOpen.v ? skipOpen.v = false : onToggle(true, e)\n };\n};\n\nexport { useClick };\n","import { useRef, useEffect } from 'react';\nimport { safeCall } from '../utils/utils.js';\n\nconst useMenuChange = (onMenuChange, isOpen) => {\n const prevOpen = useRef(isOpen);\n useEffect(() => {\n if (prevOpen.current !== isOpen) safeCall(onMenuChange, {\n open: isOpen\n });\n prevOpen.current = isOpen;\n }, [onMenuChange, isOpen]);\n};\n\nexport { useMenuChange };\n","import { forwardRef, useRef, useCallback, useImperativeHandle, Fragment, cloneElement } from 'react';\nimport { oneOfType, element, func } from 'prop-types';\nimport { ControlledMenu } from './ControlledMenu.js';\nimport { jsxs, jsx } from 'react/jsx-runtime';\nimport { useMenuStateAndFocus } from '../hooks/useMenuStateAndFocus.js';\nimport { useClick } from '../hooks/useClick.js';\nimport { useCombinedRef } from '../hooks/useCombinedRef.js';\nimport { safeCall, mergeProps, getName, isMenuOpen } from '../utils/utils.js';\nimport { useMenuChange } from '../hooks/useMenuChange.js';\nimport { rootMenuPropTypes, uncontrolledMenuPropTypes } from '../utils/propTypes.js';\nimport { FocusPositions, Keys } from '../utils/constants.js';\n\nconst Menu = /*#__PURE__*/forwardRef(function Menu({\n 'aria-label': ariaLabel,\n captureFocus: _,\n initialOpen: _1,\n menuButton,\n instanceRef,\n onMenuChange,\n ...restProps\n}, externalRef) {\n const [stateProps, toggleMenu, openMenu] = useMenuStateAndFocus(restProps);\n const {\n state\n } = stateProps;\n const isOpen = isMenuOpen(state);\n const buttonRef = useRef(null);\n const anchorProps = useClick(state, (_, e) => openMenu(!e.detail ? FocusPositions.FIRST : undefined));\n const handleClose = useCallback(e => {\n toggleMenu(false);\n if (e.key) buttonRef.current.focus();\n }, [toggleMenu]);\n const onKeyDown = e => {\n switch (e.key) {\n case Keys.UP:\n openMenu(FocusPositions.LAST);\n break;\n case Keys.DOWN:\n openMenu(FocusPositions.FIRST);\n break;\n default:\n return;\n }\n e.preventDefault();\n };\n const button = safeCall(menuButton, {\n open: isOpen\n });\n if (!button || !button.type) throw new Error('Menu requires a menuButton prop.');\n const buttonProps = {\n ref: useCombinedRef(button.ref, buttonRef),\n ...mergeProps({\n onKeyDown,\n ...anchorProps\n }, button.props)\n };\n if (getName(button.type) === 'MenuButton') {\n buttonProps.isOpen = isOpen;\n }\n const renderButton = /*#__PURE__*/cloneElement(button, buttonProps);\n useMenuChange(onMenuChange, isOpen);\n useImperativeHandle(instanceRef, () => ({\n openMenu,\n closeMenu: () => toggleMenu(false)\n }));\n return /*#__PURE__*/jsxs(Fragment, {\n children: [renderButton, /*#__PURE__*/jsx(ControlledMenu, {\n ...restProps,\n ...stateProps,\n \"aria-label\": ariaLabel || (typeof button.props.children === 'string' ? button.props.children : 'Menu'),\n anchorRef: buttonRef,\n ref: externalRef,\n onClose: handleClose\n })]\n });\n});\nprocess.env.NODE_ENV !== \"production\" ? Menu.propTypes = {\n ...rootMenuPropTypes,\n ...uncontrolledMenuPropTypes,\n menuButton: oneOfType([element, func]).isRequired\n} : void 0;\n\nexport { Menu };\n","import { forwardRef, useRef, useContext, memo } from 'react';\nimport { HoverItemContext } from './constants.js';\nimport { jsx } from 'react/jsx-runtime';\n\nconst withHovering = (name, WrappedComponent) => {\n const Component = /*#__PURE__*/memo(WrappedComponent);\n const WithHovering = /*#__PURE__*/forwardRef((props, ref) => {\n const itemRef = useRef(null);\n return /*#__PURE__*/jsx(Component, {\n ...props,\n itemRef: itemRef,\n externalRef: ref,\n isHovering: useContext(HoverItemContext) === itemRef.current\n });\n });\n WithHovering.displayName = `WithHovering(${name})`;\n return WithHovering;\n};\n\nexport { withHovering };\n","import { useLayoutEffect as useIsomorphicLayoutEffect } from './useIsomorphicLayoutEffect.js';\n\nconst useItemEffect = (isDisabled, itemRef, updateItems) => {\n useIsomorphicLayoutEffect(() => {\n if (process.env.NODE_ENV !== 'production' && !updateItems) {\n throw new Error(`[React-Menu] This menu item or submenu should be rendered under a menu: ${itemRef.current.outerHTML}`);\n }\n if (isDisabled) return;\n const item = itemRef.current;\n updateItems(item, true);\n return () => {\n updateItems(item);\n };\n }, [isDisabled, itemRef, updateItems]);\n};\n\nexport { useItemEffect };\n","import { useContext, useRef, useState, useEffect, useImperativeHandle, useMemo } from 'react';\nimport { createPortal } from 'react-dom';\nimport { bool, oneOf, oneOfType, node, func, shape } from 'prop-types';\nimport { MenuList } from './MenuList.js';\nimport { jsxs, jsx } from 'react/jsx-runtime';\nimport { withHovering } from '../utils/withHovering.js';\nimport { menuPropTypes, uncontrolledMenuPropTypes, stylePropTypes } from '../utils/propTypes.js';\nimport { useMenuStateAndFocus } from '../hooks/useMenuStateAndFocus.js';\nimport { useItemEffect } from '../hooks/useItemEffect.js';\nimport { useMenuChange } from '../hooks/useMenuChange.js';\nimport { useBEM } from '../hooks/useBEM.js';\nimport { SettingsContext, MenuListContext, MenuListItemContext, menuClass, subMenuClass, roleNone, roleMenuitem, menuItemClass, HoverActionTypes, Keys, FocusPositions } from '../utils/constants.js';\nimport { useCombinedRef } from '../hooks/useCombinedRef.js';\nimport { mergeProps, commonProps, safeCall, isMenuOpen, batchedUpdates } from '../utils/utils.js';\n\nconst SubMenu = /*#__PURE__*/withHovering('SubMenu', function SubMenu({\n 'aria-label': ariaLabel,\n className,\n disabled,\n direction,\n label,\n openTrigger,\n onMenuChange,\n isHovering,\n instanceRef,\n itemRef,\n captureFocus: _1,\n repositionFlag: _2,\n itemProps = {},\n ...restProps\n}) {\n const settings = useContext(SettingsContext);\n const {\n rootMenuRef,\n submenuOpenDelay,\n submenuCloseDelay\n } = settings;\n const {\n parentMenuRef,\n parentDir,\n overflow: parentOverflow\n } = useContext(MenuListContext);\n const {\n isParentOpen,\n submenuCtx,\n dispatch,\n updateItems\n } = useContext(MenuListItemContext);\n const isPortal = parentOverflow !== 'visible';\n const [stateProps, toggleMenu, _openMenu] = useMenuStateAndFocus(settings);\n const {\n state\n } = stateProps;\n const isDisabled = !!disabled;\n const isOpen = isMenuOpen(state);\n const containerRef = useRef(null);\n const [timerId] = useState({\n v: 0\n });\n const stopTimer = () => {\n submenuCtx.off();\n if (timerId.v) {\n clearTimeout(timerId.v);\n timerId.v = 0;\n }\n };\n const openMenu = (...args) => {\n stopTimer();\n setHover();\n !isDisabled && _openMenu(...args);\n };\n const setHover = () => !isHovering && !isDisabled && dispatch(HoverActionTypes.SET, itemRef.current);\n const delayOpen = delay => {\n setHover();\n if (!openTrigger) timerId.v = setTimeout(() => batchedUpdates(openMenu), Math.max(delay, 0));\n };\n const onPointerMove = e => {\n if (isDisabled) return;\n e.stopPropagation();\n if (timerId.v || isOpen) return;\n submenuCtx.on(submenuCloseDelay, () => delayOpen(submenuOpenDelay - submenuCloseDelay), () => delayOpen(submenuOpenDelay));\n };\n const onPointerLeave = () => {\n stopTimer();\n if (!isOpen) dispatch(HoverActionTypes.UNSET, itemRef.current);\n };\n const onKeyDown = e => {\n if (!isHovering) return;\n switch (e.key) {\n case Keys.ENTER:\n e.preventDefault();\n case Keys.SPACE:\n case Keys.RIGHT:\n openTrigger !== 'none' && openMenu(FocusPositions.FIRST);\n }\n };\n const onKeyDownOfRoot = e => {\n let handled = false;\n switch (e.key) {\n case Keys.LEFT:\n if (isOpen) {\n itemRef.current.focus();\n toggleMenu(false);\n handled = true;\n }\n break;\n case Keys.RIGHT:\n if (!isOpen) handled = true;\n break;\n }\n if (handled) {\n e.preventDefault();\n e.stopPropagation();\n }\n };\n useItemEffect(isDisabled, itemRef, updateItems);\n useMenuChange(onMenuChange, isOpen);\n useEffect(() => submenuCtx.toggle(isOpen), [submenuCtx, isOpen]);\n useEffect(() => () => clearTimeout(timerId.v), [timerId]);\n useEffect(() => {\n if (isHovering && isParentOpen) {\n itemRef.current.focus();\n } else {\n toggleMenu(false);\n }\n }, [isHovering, isParentOpen, toggleMenu, itemRef]);\n useImperativeHandle(instanceRef, () => ({\n openMenu: (...args) => {\n isParentOpen && openMenu(...args);\n },\n closeMenu: () => {\n if (isOpen) {\n itemRef.current.focus();\n toggleMenu(false);\n }\n }\n }));\n const modifiers = useMemo(() => ({\n open: isOpen,\n hover: isHovering,\n disabled: isDisabled,\n submenu: true\n }), [isOpen, isHovering, isDisabled]);\n const {\n ref: externalItemRef,\n className: itemClassName,\n ...restItemProps\n } = itemProps;\n const mergedItemProps = mergeProps({\n onPointerEnter: submenuCtx.off,\n onPointerMove,\n onPointerLeave,\n onKeyDown,\n onClick: () => openTrigger !== 'none' && openMenu()\n }, restItemProps);\n const getMenuList = () => {\n const menuList = /*#__PURE__*/jsx(MenuList, {\n ...restProps,\n ...stateProps,\n ariaLabel: ariaLabel || (typeof label === 'string' ? label : 'Submenu'),\n anchorRef: itemRef,\n containerRef: isPortal ? rootMenuRef : containerRef,\n direction: direction || (parentDir === 'right' || parentDir === 'left' ? parentDir : 'right'),\n parentScrollingRef: isPortal && parentMenuRef,\n isDisabled: isDisabled\n });\n const container = rootMenuRef.current;\n return isPortal && container ? /*#__PURE__*/createPortal(menuList, container) : menuList;\n };\n return /*#__PURE__*/jsxs(\"li\", {\n className: useBEM({\n block: menuClass,\n element: subMenuClass,\n className\n }),\n style: {\n position: 'relative'\n },\n role: roleNone,\n ref: containerRef,\n onKeyDown: onKeyDownOfRoot,\n children: [/*#__PURE__*/jsx(\"div\", {\n role: roleMenuitem,\n \"aria-haspopup\": true,\n \"aria-expanded\": isOpen,\n ...commonProps(isDisabled, isHovering),\n ...mergedItemProps,\n ref: useCombinedRef(externalItemRef, itemRef),\n className: useBEM({\n block: menuClass,\n element: menuItemClass,\n modifiers,\n className: itemClassName\n }),\n children: useMemo(() => safeCall(label, modifiers), [label, modifiers])\n }), state && getMenuList()]\n });\n});\nprocess.env.NODE_ENV !== \"production\" ? SubMenu.propTypes = {\n ...menuPropTypes,\n ...uncontrolledMenuPropTypes,\n disabled: bool,\n openTrigger: /*#__PURE__*/oneOf(['none', 'clickOnly']),\n label: /*#__PURE__*/oneOfType([node, func]),\n itemProps: /*#__PURE__*/shape({\n ...stylePropTypes()\n })\n} : void 0;\n\nexport { SubMenu };\n","import { useContext, useEffect } from 'react';\nimport { useItemEffect } from './useItemEffect.js';\nimport { SettingsContext, MenuListItemContext, HoverActionTypes } from '../utils/constants.js';\n\nconst useItemState = (itemRef, focusRef, isHovering, isDisabled) => {\n const {\n submenuCloseDelay\n } = useContext(SettingsContext);\n const {\n isParentOpen,\n submenuCtx,\n dispatch,\n updateItems\n } = useContext(MenuListItemContext);\n const setHover = () => {\n !isHovering && !isDisabled && dispatch(HoverActionTypes.SET, itemRef.current);\n };\n const unsetHover = () => {\n !isDisabled && dispatch(HoverActionTypes.UNSET, itemRef.current);\n };\n const onBlur = e => {\n if (isHovering && !e.currentTarget.contains(e.relatedTarget)) unsetHover();\n };\n const onPointerMove = e => {\n if (!isDisabled) {\n e.stopPropagation();\n submenuCtx.on(submenuCloseDelay, setHover, setHover);\n }\n };\n const onPointerLeave = (_, keepHover) => {\n submenuCtx.off();\n !keepHover && unsetHover();\n };\n useItemEffect(isDisabled, itemRef, updateItems);\n useEffect(() => {\n if (isHovering && isParentOpen) {\n focusRef.current && focusRef.current.focus();\n }\n }, [focusRef, isHovering, isParentOpen]);\n return {\n setHover,\n onBlur,\n onPointerMove,\n onPointerLeave\n };\n};\n\nexport { useItemState };\n","import { useContext, useMemo } from 'react';\nimport { any, string, oneOf, bool, oneOfType, node, func } from 'prop-types';\nimport { jsx } from 'react/jsx-runtime';\nimport { useItemState } from '../hooks/useItemState.js';\nimport { EventHandlersContext, RadioGroupContext, roleMenuitem, menuClass, menuItemClass, roleNone, Keys } from '../utils/constants.js';\nimport { useCombinedRef } from '../hooks/useCombinedRef.js';\nimport { useBEM } from '../hooks/useBEM.js';\nimport { withHovering } from '../utils/withHovering.js';\nimport { stylePropTypes } from '../utils/propTypes.js';\nimport { mergeProps, commonProps, safeCall } from '../utils/utils.js';\n\nconst MenuItem = /*#__PURE__*/withHovering('MenuItem', function MenuItem({\n className,\n value,\n href,\n type,\n checked,\n disabled,\n children,\n onClick,\n isHovering,\n itemRef,\n externalRef,\n ...restProps\n}) {\n const isDisabled = !!disabled;\n const {\n setHover,\n ...restStateProps\n } = useItemState(itemRef, itemRef, isHovering, isDisabled);\n const eventHandlers = useContext(EventHandlersContext);\n const radioGroup = useContext(RadioGroupContext);\n const isRadio = type === 'radio';\n const isCheckBox = type === 'checkbox';\n const isAnchor = !!href && !isDisabled && !isRadio && !isCheckBox;\n const isChecked = isRadio ? radioGroup.value === value : isCheckBox ? !!checked : false;\n const handleClick = e => {\n if (isDisabled) {\n e.stopPropagation();\n e.preventDefault();\n return;\n }\n const event = {\n value,\n syntheticEvent: e\n };\n if (e.key !== undefined) event.key = e.key;\n if (isCheckBox) event.checked = !isChecked;\n if (isRadio) event.name = radioGroup.name;\n safeCall(onClick, event);\n if (isRadio) safeCall(radioGroup.onRadioChange, event);\n eventHandlers.handleClick(event, isCheckBox || isRadio);\n };\n const handleKeyDown = e => {\n if (!isHovering) return;\n switch (e.key) {\n case Keys.ENTER:\n e.preventDefault();\n case Keys.SPACE:\n isAnchor ? itemRef.current.click() : handleClick(e);\n }\n };\n const modifiers = useMemo(() => ({\n type,\n disabled: isDisabled,\n hover: isHovering,\n checked: isChecked,\n anchor: isAnchor\n }), [type, isDisabled, isHovering, isChecked, isAnchor]);\n const mergedProps = mergeProps({\n ...restStateProps,\n onPointerDown: setHover,\n onKeyDown: handleKeyDown,\n onClick: handleClick\n }, restProps);\n const menuItemProps = {\n role: isRadio ? 'menuitemradio' : isCheckBox ? 'menuitemcheckbox' : roleMenuitem,\n 'aria-checked': isRadio || isCheckBox ? isChecked : undefined,\n ...commonProps(isDisabled, isHovering),\n ...mergedProps,\n ref: useCombinedRef(externalRef, itemRef),\n className: useBEM({\n block: menuClass,\n element: menuItemClass,\n modifiers,\n className\n }),\n children: useMemo(() => safeCall(children, modifiers), [children, modifiers])\n };\n return isAnchor ? /*#__PURE__*/jsx(\"li\", {\n role: roleNone,\n children: /*#__PURE__*/jsx(\"a\", {\n href: href,\n ...menuItemProps\n })\n }) : /*#__PURE__*/jsx(\"li\", {\n ...menuItemProps\n });\n});\nprocess.env.NODE_ENV !== \"production\" ? MenuItem.propTypes = {\n ...stylePropTypes(),\n value: any,\n href: string,\n type: /*#__PURE__*/oneOf(['checkbox', 'radio']),\n checked: bool,\n disabled: bool,\n children: /*#__PURE__*/oneOfType([node, func]),\n onClick: func\n} : void 0;\n\nexport { MenuItem };\n","import { useRef, useContext, useMemo } from 'react';\nimport { bool, func } from 'prop-types';\nimport { jsx } from 'react/jsx-runtime';\nimport { useItemState } from '../hooks/useItemState.js';\nimport { useCombinedRef } from '../hooks/useCombinedRef.js';\nimport { useBEM } from '../hooks/useBEM.js';\nimport { withHovering } from '../utils/withHovering.js';\nimport { stylePropTypes } from '../utils/propTypes.js';\nimport { EventHandlersContext, roleMenuitem, menuClass, menuItemClass } from '../utils/constants.js';\nimport { safeCall, mergeProps, commonProps } from '../utils/utils.js';\n\nconst FocusableItem = /*#__PURE__*/withHovering('FocusableItem', function FocusableItem({\n className,\n disabled,\n children,\n isHovering,\n itemRef,\n externalRef,\n ...restProps\n}) {\n const isDisabled = !!disabled;\n const ref = useRef(null);\n const {\n setHover,\n onPointerLeave,\n ...restStateProps\n } = useItemState(itemRef, ref, isHovering, isDisabled);\n const {\n handleClose\n } = useContext(EventHandlersContext);\n const modifiers = useMemo(() => ({\n disabled: isDisabled,\n hover: isHovering,\n focusable: true\n }), [isDisabled, isHovering]);\n const renderChildren = useMemo(() => safeCall(children, {\n ...modifiers,\n ref,\n closeMenu: handleClose\n }), [children, modifiers, handleClose]);\n const mergedProps = mergeProps({\n ...restStateProps,\n onPointerLeave: e => onPointerLeave(e, true),\n onFocus: setHover\n }, restProps);\n return /*#__PURE__*/jsx(\"li\", {\n role: roleMenuitem,\n ...commonProps(isDisabled),\n ...mergedProps,\n ref: useCombinedRef(externalRef, itemRef),\n className: useBEM({\n block: menuClass,\n element: menuItemClass,\n modifiers,\n className\n }),\n children: renderChildren\n });\n});\nprocess.env.NODE_ENV !== \"production\" ? FocusableItem.propTypes = {\n ...stylePropTypes(),\n disabled: bool,\n children: func\n} : void 0;\n\nexport { FocusableItem };\n","import { memo, forwardRef } from 'react';\nimport { jsx } from 'react/jsx-runtime';\nimport { useBEM } from '../hooks/useBEM.js';\nimport { menuClass, menuDividerClass } from '../utils/constants.js';\nimport { stylePropTypes } from '../utils/propTypes.js';\n\nconst MenuDivider = /*#__PURE__*/memo( /*#__PURE__*/forwardRef(function MenuDivider({\n className,\n ...restProps\n}, externalRef) {\n return /*#__PURE__*/jsx(\"li\", {\n role: \"separator\",\n ...restProps,\n ref: externalRef,\n className: useBEM({\n block: menuClass,\n element: menuDividerClass,\n className\n })\n });\n}));\nprocess.env.NODE_ENV !== \"production\" ? MenuDivider.propTypes = {\n ...stylePropTypes()\n} : void 0;\n\nexport { MenuDivider };\n","import { memo, forwardRef } from 'react';\nimport { jsx } from 'react/jsx-runtime';\nimport { useBEM } from '../hooks/useBEM.js';\nimport { roleNone, menuClass, menuHeaderClass } from '../utils/constants.js';\nimport { stylePropTypes } from '../utils/propTypes.js';\n\nconst MenuHeader = /*#__PURE__*/memo( /*#__PURE__*/forwardRef(function MenuHeader({\n className,\n ...restProps\n}, externalRef) {\n return /*#__PURE__*/jsx(\"li\", {\n role: roleNone,\n ...restProps,\n ref: externalRef,\n className: useBEM({\n block: menuClass,\n element: menuHeaderClass,\n className\n })\n });\n}));\nprocess.env.NODE_ENV !== \"production\" ? MenuHeader.propTypes = {\n ...stylePropTypes()\n} : void 0;\n\nexport { MenuHeader };\n","import { forwardRef, useRef, useState, useContext } from 'react';\nimport { bool } from 'prop-types';\nimport { jsx } from 'react/jsx-runtime';\nimport { useLayoutEffect as useIsomorphicLayoutEffect } from '../hooks/useIsomorphicLayoutEffect.js';\nimport { getNormalizedClientRect } from '../positionUtils/getNormalizedClientRect.js';\nimport { useCombinedRef } from '../hooks/useCombinedRef.js';\nimport { useBEM } from '../hooks/useBEM.js';\nimport { MenuListContext, menuClass, menuGroupClass } from '../utils/constants.js';\nimport { stylePropTypes } from '../utils/propTypes.js';\n\nconst MenuGroup = /*#__PURE__*/forwardRef(function MenuGroup({\n className,\n style,\n takeOverflow,\n ...restProps\n}, externalRef) {\n const ref = useRef(null);\n const [overflowStyle, setOverflowStyle] = useState();\n const {\n overflow,\n overflowAmt\n } = useContext(MenuListContext);\n useIsomorphicLayoutEffect(() => {\n let maxHeight;\n if (takeOverflow && overflowAmt >= 0) {\n maxHeight = getNormalizedClientRect(ref.current).height - overflowAmt;\n if (maxHeight < 0) maxHeight = 0;\n }\n setOverflowStyle(maxHeight >= 0 ? {\n maxHeight,\n overflow\n } : undefined);\n }, [takeOverflow, overflow, overflowAmt]);\n useIsomorphicLayoutEffect(() => {\n if (overflowStyle) ref.current.scrollTop = 0;\n }, [overflowStyle]);\n return /*#__PURE__*/jsx(\"div\", {\n ...restProps,\n ref: useCombinedRef(externalRef, ref),\n className: useBEM({\n block: menuClass,\n element: menuGroupClass,\n className\n }),\n style: {\n ...style,\n ...overflowStyle\n }\n });\n});\nprocess.env.NODE_ENV !== \"production\" ? MenuGroup.propTypes = {\n ...stylePropTypes(),\n takeOverflow: bool\n} : void 0;\n\nexport { MenuGroup };\n","import './avatar.css';\n\nimport { useRef } from 'preact/hooks';\n\nimport mem from '../utils/mem';\n\nconst SIZES = {\n s: 16,\n m: 20,\n l: 24,\n xl: 32,\n xxl: 50,\n xxxl: 64,\n};\n\nconst alphaCache = {};\n\nconst canvas = window.OffscreenCanvas\n ? new OffscreenCanvas(1, 1)\n : document.createElement('canvas');\nconst ctx = canvas.getContext('2d', {\n willReadFrequently: true,\n});\nctx.imageSmoothingEnabled = false;\n\nfunction Avatar({ url, size, alt = '', squircle, ...props }) {\n size = SIZES[size] || size || SIZES.m;\n const avatarRef = useRef();\n const isMissing = /missing\\.png$/.test(url);\n return (\n <span\n ref={avatarRef}\n class={`avatar ${squircle ? 'squircle' : ''} ${\n alphaCache[url] ? 'has-alpha' : ''\n }`}\n style={{\n width: size,\n height: size,\n }}\n title={alt}\n {...props}\n >\n {!!url && (\n <img\n src={url}\n width={size}\n height={size}\n alt={alt}\n loading=\"lazy\"\n decoding=\"async\"\n crossOrigin={\n alphaCache[url] === undefined && !isMissing\n ? 'anonymous'\n : undefined\n }\n onError={(e) => {\n if (e.target.crossOrigin) {\n e.target.crossOrigin = null;\n e.target.src = url;\n }\n }}\n onLoad={(e) => {\n if (avatarRef.current) avatarRef.current.dataset.loaded = true;\n if (alphaCache[url] !== undefined) return;\n if (isMissing) return;\n setTimeout(() => {\n try {\n // Check if image has alpha channel\n const { width, height } = e.target;\n if (canvas.width !== width) canvas.width = width;\n if (canvas.height !== height) canvas.height = height;\n ctx.drawImage(e.target, 0, 0);\n const allPixels = ctx.getImageData(0, 0, width, height);\n // At least 10% of pixels have alpha <= 128\n const hasAlpha =\n allPixels.data.filter(\n (pixel, i) => i % 4 === 3 && pixel <= 128,\n ).length /\n (allPixels.data.length / 4) >\n 0.1;\n if (hasAlpha) {\n // console.log('hasAlpha', hasAlpha, allPixels.data);\n avatarRef.current.classList.add('has-alpha');\n }\n alphaCache[url] = hasAlpha;\n ctx.clearRect(0, 0, width, height);\n } catch (e) {\n // Silent fail\n alphaCache[url] = false;\n }\n }, 1);\n }}\n />\n )}\n </span>\n );\n}\n\nexport default mem(Avatar);\n","import { forwardRef } from 'preact/compat';\nimport { useLocation } from 'react-router-dom';\n\nimport states from '../utils/states';\n\n/* NOTES\n =====\n Initially this uses <NavLink> from react-router-dom, but it doesn't work:\n 1. It interferes with nested <a> inside <a> and it's difficult to preventDefault/stopPropagation from the nested <a>\n 2. isActive doesn't work properly with the weird routes that's set up in this app, due to the faux \"location\" to make the modals work and prevent unmounting\n 3. Not using <Link state/> because it modifies history.state that *persists* across page reloads. I don't need that, so using valtio's states instead.\n*/\n\nconst Link = forwardRef((props, ref) => {\n let routerLocation;\n try {\n routerLocation = useLocation();\n } catch (e) {}\n let hash = (location.hash || '').replace(/^#/, '').trim();\n if (hash === '') hash = '/';\n const { to, ...restProps } = props;\n\n // Handle encodeURIComponent of searchParams values\n if (!!hash && hash !== '/' && hash.includes('?')) {\n const parsedHash = URL.parse(hash, location.origin); // Fake base URL\n if (parsedHash?.searchParams?.size) {\n const searchParamsStr = Array.from(parsedHash.searchParams.entries())\n .map(([key, value]) => `${key}=${encodeURIComponent(value)}`)\n .join('&');\n hash = parsedHash.pathname + '?' + searchParamsStr;\n }\n }\n\n const isActive = hash === to || decodeURIComponent(hash) === to;\n return (\n <a\n ref={ref}\n href={`#${to}`}\n {...restProps}\n class={`${props.class || ''} ${isActive ? 'is-active' : ''}`}\n onClick={(e) => {\n if (e.currentTarget?.parentNode?.closest('a')) {\n // If this <a> is nested inside another <a>\n e.stopPropagation();\n }\n if (routerLocation) states.prevLocation = routerLocation;\n props.onClick?.(e);\n }}\n />\n );\n});\n\nexport default Link;\n","let IS_RTL = false;\n\n// Use MutationObserver to detect RTL\nconst observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n if (mutation.type === 'attributes') {\n const { value } = mutation.target;\n if (value === 'rtl') {\n IS_RTL = true;\n } else {\n IS_RTL = false;\n }\n // Fire custom event 'dirchange' on document\n // document.dispatchEvent(new Event('dirchange'));\n }\n });\n});\nobserver.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['dir'],\n});\n\nexport default function isRTL() {\n return IS_RTL;\n // return document.documentElement.dir === 'rtl';\n}\n","const root = document.documentElement;\nconst style = getComputedStyle(root);\nconst defaultBoundingBoxPadding = 8;\n\nlet safeAreaInsets = [0, 0, 0, 0];\nfunction getSafeAreaInsets() {\n // Get safe area inset variables from root\n const safeAreaInsetTop = style.getPropertyValue('--sai-top');\n const safeAreaInsetRight = style.getPropertyValue('--sai-right');\n const safeAreaInsetBottom = style.getPropertyValue('--sai-bottom');\n const safeAreaInsetLeft = style.getPropertyValue('--sai-left');\n safeAreaInsets = [\n // top, right, bottom, left (clockwise)\n Math.max(0, parseInt(safeAreaInsetTop, 10)),\n Math.max(0, parseInt(safeAreaInsetRight, 10)),\n Math.max(0, parseInt(safeAreaInsetBottom, 10)),\n Math.max(0, parseInt(safeAreaInsetLeft, 10)),\n ];\n}\nrequestAnimationFrame(getSafeAreaInsets);\n\nfunction safeBoundingBoxPadding(paddings = []) {\n const str = safeAreaInsets\n .map((v, i) => (v || defaultBoundingBoxPadding) + (paddings[i] || 0))\n .join(' ');\n // console.log(str);\n return str;\n}\n\n// Update safe area insets when orientation or resize\nif (CSS.supports('top: env(safe-area-inset-top)')) {\n window.addEventListener('resize', getSafeAreaInsets, { passive: true });\n}\n\nexport default safeBoundingBoxPadding;\n","import { useLayoutEffect, useState } from 'preact/hooks';\n\nexport default function useWindowSize() {\n const [size, setSize] = useState({\n width: null,\n height: null,\n });\n\n useLayoutEffect(() => {\n const handleResize = () => {\n setSize({\n width: window.innerWidth,\n height: window.innerHeight,\n });\n };\n\n handleResize();\n window.addEventListener('resize', handleResize, {\n passive: true,\n });\n\n return () => {\n window.removeEventListener('resize', handleResize);\n };\n }, []);\n\n return size;\n}\n","import { Menu } from '@szhsin/react-menu';\nimport { useRef } from 'preact/hooks';\n\nimport isRTL from '../utils/is-rtl';\nimport safeBoundingBoxPadding from '../utils/safe-bounding-box-padding';\nimport useWindowSize from '../utils/useWindowSize';\n\n// It's like Menu but with sensible defaults, bug fixes and improvements.\nfunction Menu2(props) {\n const { containerProps, instanceRef: _instanceRef, align } = props;\n const size = useWindowSize();\n const instanceRef = _instanceRef?.current ? _instanceRef : useRef();\n\n // Values: start, end, center\n // Note: don't mess with 'center'\n const rtlAlign = isRTL()\n ? align === 'end'\n ? 'start'\n : align === 'start'\n ? 'end'\n : align\n : align;\n\n return (\n <Menu\n boundingBoxPadding={safeBoundingBoxPadding()}\n repositionFlag={`${size.width}x${size.height}`}\n unmountOnClose\n {...props}\n align={rtlAlign}\n instanceRef={instanceRef}\n containerProps={{\n onClick: (e) => {\n if (e.target === e.currentTarget) {\n instanceRef.current?.closeMenu?.();\n }\n containerProps?.onClick?.(e);\n },\n ...containerProps,\n }}\n />\n );\n}\n\nexport default Menu2;\n","import { SubMenu } from '@szhsin/react-menu';\nimport { useRef } from 'preact/hooks';\n\nexport default function SubMenu2(props) {\n const menuRef = useRef();\n return (\n <SubMenu\n {...props}\n instanceRef={menuRef}\n // Test fix for bug; submenus not opening on Android\n itemProps={{\n onPointerMove: (e) => {\n if (e.pointerType === 'touch') {\n menuRef.current?.openMenu?.();\n }\n },\n onPointerLeave: (e) => {\n if (e.pointerType === 'touch') {\n menuRef.current?.openMenu?.();\n }\n },\n }}\n />\n );\n}\n","import { MenuItem } from '@szhsin/react-menu';\nimport { cloneElement } from 'preact';\n\nimport Menu2 from './menu2';\nimport SubMenu2 from './submenu2';\n\nfunction MenuConfirm({\n subMenu = false,\n confirm = true,\n confirmLabel,\n menuItemClassName,\n menuFooter,\n menuExtras,\n ...props\n}) {\n const { children, onClick, ...restProps } = props;\n if (!confirm) {\n if (subMenu) return <MenuItem {...props} />;\n if (onClick) {\n return cloneElement(children, {\n onClick,\n });\n }\n return children;\n }\n const Parent = subMenu ? SubMenu2 : Menu2;\n return (\n <Parent\n openTrigger=\"clickOnly\"\n direction=\"bottom\"\n overflow=\"auto\"\n gap={-8}\n shift={8}\n menuClassName=\"menu-emphasized\"\n {...restProps}\n menuButton={subMenu ? undefined : children}\n label={subMenu ? children : undefined}\n >\n <MenuItem className={menuItemClassName} onClick={onClick}>\n {confirmLabel}\n </MenuItem>\n {menuExtras}\n {menuFooter}\n </Parent>\n );\n}\n\nexport default MenuConfirm;\n","export default function CustomEmoji({ staticUrl, alt, url }) {\n return (\n <picture>\n {staticUrl && (\n <source srcset={staticUrl} media=\"(prefers-reduced-motion: reduce)\" />\n )}\n <img\n key={alt || url}\n src={url}\n alt={alt}\n class=\"shortcode-emoji emoji\"\n width=\"16\"\n height=\"16\"\n loading=\"lazy\"\n decoding=\"async\"\n />\n </picture>\n );\n}\n","import { memo } from 'preact/compat';\n\nimport CustomEmoji from './custom-emoji';\n\nfunction EmojiText({ text, emojis }) {\n if (!text) return '';\n if (!emojis?.length) return text;\n if (text.indexOf(':') === -1) return text;\n const regex = new RegExp(\n `:(${emojis.map((e) => e.shortcode).join('|')}):`,\n 'g',\n );\n const elements = text.split(regex).map((word) => {\n const emoji = emojis.find((e) => e.shortcode === word);\n if (emoji) {\n const { url, staticUrl } = emoji;\n return <CustomEmoji staticUrl={staticUrl} alt={word} url={url} />;\n }\n return word;\n });\n return elements;\n}\n\nexport default memo(\n EmojiText,\n (oldProps, newProps) =>\n oldProps.text === newProps.text &&\n oldProps.emojis?.length === newProps.emojis?.length,\n);\n","import './name-text.css';\n\nimport { memo } from 'preact/compat';\n\nimport { api } from '../utils/api';\nimport states from '../utils/states';\n\nimport Avatar from './avatar';\nimport EmojiText from './emoji-text';\n\nconst nameCollator = new Intl.Collator('en', {\n sensitivity: 'base',\n});\n\nfunction NameText({\n account,\n instance,\n showAvatar,\n showAcct,\n short,\n external,\n onClick,\n}) {\n const {\n acct,\n avatar,\n avatarStatic,\n id,\n url,\n displayName,\n emojis,\n bot,\n username,\n } = account;\n const [_, acct1, acct2] = acct.match(/([^@]+)(@.+)/i) || [, acct];\n\n if (!instance) instance = api().instance;\n\n const trimmedUsername = username.toLowerCase().trim();\n const trimmedDisplayName = (displayName || '').toLowerCase().trim();\n const shortenedDisplayName = trimmedDisplayName\n .replace(/(\\:(\\w|\\+|\\-)+\\:)(?=|[\\!\\.\\?]|$)/g, '') // Remove shortcodes, regex from https://regex101.com/r/iE9uV0/1\n .replace(/\\s+/g, ''); // E.g. \"My name\" === \"myname\"\n const shortenedAlphaNumericDisplayName = shortenedDisplayName.replace(\n /[^a-z0-9@\\.]/gi,\n '',\n ); // Remove non-alphanumeric characters\n\n const hideUsername =\n (!short &&\n (trimmedUsername === trimmedDisplayName ||\n trimmedUsername === shortenedDisplayName ||\n trimmedUsername === shortenedAlphaNumericDisplayName ||\n nameCollator.compare(trimmedUsername, shortenedDisplayName) === 0)) ||\n shortenedAlphaNumericDisplayName === acct.toLowerCase();\n\n return (\n <a\n class={`name-text ${showAcct ? 'show-acct' : ''} ${short ? 'short' : ''}`}\n href={url}\n target={external ? '_blank' : null}\n title={\n displayName\n ? `${displayName} (${acct2 ? '' : '@'}${acct})`\n : `${acct2 ? '' : '@'}${acct}`\n }\n onClick={(e) => {\n if (external) return;\n if (e.shiftKey) return; // Save link? 🤷♂️\n e.preventDefault();\n e.stopPropagation();\n if (onClick) return onClick(e);\n if (e.metaKey || e.ctrlKey || e.shiftKey || e.which === 2) {\n const internalURL = `#/${instance}/a/${id}`;\n window.open(internalURL, '_blank');\n return;\n }\n states.showAccount = {\n account,\n instance,\n };\n }}\n >\n {showAvatar && (\n <>\n <Avatar url={avatarStatic || avatar} squircle={bot} />{' '}\n </>\n )}\n {displayName && !short ? (\n <>\n <b dir=\"auto\">\n <EmojiText text={displayName} emojis={emojis} />\n </b>\n {!showAcct && !hideUsername && (\n <>\n {' '}\n <i class=\"bidi-isolate\">@{username}</i>\n </>\n )}\n </>\n ) : short ? (\n <i>{username}</i>\n ) : (\n <b>{username}</b>\n )}\n {showAcct && (\n <>\n <br />\n <i class=\"bidi-isolate\">\n {acct2 ? '' : '@'}\n {acct1}\n {!!acct2 && <span class=\"ib\">{acct2}</span>}\n </i>\n </>\n )}\n </a>\n );\n}\n\nexport default memo(NameText, (oldProps, newProps) => {\n // Only care about account.id, the other props usually don't change\n const { account } = oldProps;\n const { account: newAccount } = newProps;\n return account?.acct === newAccount?.acct;\n});\n","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",c=\"month\",f=\"quarter\",h=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,c),s=n-i<0,u=e.clone().add(r+(s?-1:1),c);return+(-(r+(n-i)/(s?i-u:u-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:c,y:h,w:o,d:a,D:d,h:u,m:s,s:i,ms:r,Q:f}[t]||String(t||\"\").toLowerCase().replace(/s$/,\"\")},u:function(t){return void 0===t}},g=\"en\",D={};D[g]=M;var p=\"$isDayjsObject\",S=function(t){return t instanceof _||!(!t||!t[p])},w=function t(e,n,r){var i;if(!e)return g;if(\"string\"==typeof e){var s=e.toLowerCase();D[s]&&(i=s),n&&(D[s]=n,i=s);var u=e.split(\"-\");if(!i&&u.length>1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},O=function(t,e){if(S(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},b=v;b.l=w,b.i=S,b.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[p]=!0}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(b.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return b},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return O(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<O(t)},m.$g=function(t,e,n){return b.u(t)?this[e]:this.set(n,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var n=this,r=!!b.u(e)||e,f=b.p(t),l=function(t,e){var i=b.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return r?i:i.endOf(a)},$=function(t,e){return b.w(n.toDate()[t].apply(n.toDate(\"s\"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},y=this.$W,M=this.$M,m=this.$D,v=\"set\"+(this.$u?\"UTC\":\"\");switch(f){case h:return r?l(1,0):l(31,11);case c:return r?l(1,M):l(0,M+1);case o:var g=this.$locale().weekStart||0,D=(y<g?y+7:y)-g;return l(r?m-D:m+(6-D),M);case a:case d:return $(v+\"Hours\",0);case u:return $(v+\"Minutes\",1);case s:return $(v+\"Seconds\",2);case i:return $(v+\"Milliseconds\",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var n,o=b.p(t),f=\"set\"+(this.$u?\"UTC\":\"\"),l=(n={},n[a]=f+\"Date\",n[d]=f+\"Date\",n[c]=f+\"Month\",n[h]=f+\"FullYear\",n[u]=f+\"Hours\",n[s]=f+\"Minutes\",n[i]=f+\"Seconds\",n[r]=f+\"Milliseconds\",n)[o],$=o===a?this.$D+(e-this.$W):e;if(o===c||o===h){var y=this.clone().set(d,1);y.$d[l]($),y.init(),this.$d=y.set(d,Math.min(this.$D,y.daysInMonth())).$d}else l&&this.$d[l]($);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[b.p(t)]()},m.add=function(r,f){var d,l=this;r=Number(r);var $=b.p(f),y=function(t){var e=O(l);return b.w(e.date(e.date()+Math.round(t*r)),l)};if($===c)return this.set(c,this.$M+r);if($===h)return this.set(h,this.$y+r);if($===a)return y(1);if($===o)return y(7);var M=(d={},d[s]=e,d[u]=n,d[i]=t,d)[$]||1,m=this.$d.getTime()+r*M;return b.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||l;var r=t||\"YYYY-MM-DDTHH:mm:ssZ\",i=b.z(this),s=this.$H,u=this.$m,a=this.$M,o=n.weekdays,c=n.months,f=n.meridiem,h=function(t,n,i,s){return t&&(t[n]||t(e,r))||i[n].slice(0,s)},d=function(t){return b.s(s%12||12,t,\"0\")},$=f||function(t,e,n){var r=t<12?\"AM\":\"PM\";return n?r.toLowerCase():r};return r.replace(y,(function(t,r){return r||function(t){switch(t){case\"YY\":return String(e.$y).slice(-2);case\"YYYY\":return b.s(e.$y,4,\"0\");case\"M\":return a+1;case\"MM\":return b.s(a+1,2,\"0\");case\"MMM\":return h(n.monthsShort,a,c,3);case\"MMMM\":return h(c,a);case\"D\":return e.$D;case\"DD\":return b.s(e.$D,2,\"0\");case\"d\":return String(e.$W);case\"dd\":return h(n.weekdaysMin,e.$W,o,2);case\"ddd\":return h(n.weekdaysShort,e.$W,o,3);case\"dddd\":return o[e.$W];case\"H\":return String(s);case\"HH\":return b.s(s,2,\"0\");case\"h\":return d(1);case\"hh\":return d(2);case\"a\":return $(s,u,!0);case\"A\":return $(s,u,!1);case\"m\":return String(u);case\"mm\":return b.s(u,2,\"0\");case\"s\":return String(e.$s);case\"ss\":return b.s(e.$s,2,\"0\");case\"SSS\":return b.s(e.$ms,3,\"0\");case\"Z\":return i}return null}(t)||i.replace(\":\",\"\")}))},m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(r,d,l){var $,y=this,M=b.p(d),m=O(r),v=(m.utcOffset()-this.utcOffset())*e,g=this-m,D=function(){return b.m(y,m)};switch(M){case h:$=D()/12;break;case c:$=D();break;case f:$=D()/3;break;case o:$=(g-v)/6048e5;break;case a:$=(g-v)/864e5;break;case u:$=g/n;break;case s:$=g/e;break;case i:$=g/t;break;default:$=g}return l?$:b.a($)},m.daysInMonth=function(){return this.endOf(c).$D},m.$locale=function(){return D[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=w(t,e,!0);return r&&(n.$L=r),n},m.clone=function(){return b.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},M}(),k=_.prototype;return O.prototype=k,[[\"$ms\",r],[\"$s\",i],[\"$m\",s],[\"$H\",u],[\"$W\",a],[\"$M\",c],[\"$y\",h],[\"$D\",d]].forEach((function(t){k[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),O.extend=function(t,e){return t.$i||(t(e,_,O),t.$i=!0),O},O.locale=w,O.isDayjs=S,O.unix=function(t){return O(1e3*t)},O.en=D[g],O.Ls=D,O.p={},O}));","!function(e,n){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=n():\"function\"==typeof define&&define.amd?define([],n):\"object\"==typeof exports?exports.dayjsTwitter=n():e.dayjsTwitter=n()}(this,function(){return function(e){var n={};function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{enumerable:!0,get:r})},t.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},t.t=function(e,n){if(1&n&&(e=t(e)),8&n)return e;if(4&n&&\"object\"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(t.r(r),Object.defineProperty(r,\"default\",{enumerable:!0,value:e}),2&n&&\"string\"!=typeof e)for(var o in e)t.d(r,o,function(n){return e[n]}.bind(null,o));return r},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,\"a\",n),n},t.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},t.p=\"\",t(t.s=1)}([function(e,n,t){var r,o=function(){var e={ns:1e-6,us:.001,\"µs\":.001,\"μs\":.001,ms:1,s:1e3,m:6e4,h:36e5,d:864e5,w:6048e5},n=function(e){if(e instanceof n)return e;switch(typeof e){case\"number\":if(!isFinite(e))throw new Error(\"invalid duration: \"+e);this._milliseconds=e;break;case\"string\":this._milliseconds=n.parse(e).valueOf();break;case\"undefined\":this._milliseconds=0;break;default:throw new Error(\"invalid duration: \"+e)}};return n.millisecond=new n(1),n.second=new n(1e3),n.minute=new n(6e4),n.hour=new n(36e5),n.day=new n(864e5),n.week=new n(6048e5),n.prototype.nanoseconds=function(){return Math.floor(this._milliseconds/1e-6)},n.prototype.microseconds=function(){return Math.floor(this._milliseconds/.001)},n.prototype.milliseconds=function(){return this._milliseconds},n.prototype.seconds=function(){return Math.floor(this._milliseconds/1e3)},n.prototype.minutes=function(){return Math.floor(this._milliseconds/6e4)},n.prototype.hours=function(){return Math.floor(this._milliseconds/36e5)},n.prototype.days=function(){return Math.floor(this._milliseconds/864e5)},n.prototype.weeks=function(){return Math.floor(this._milliseconds/6048e5)},n.prototype.toString=function(){var e=\"\",n=Math.abs(this._milliseconds),t=this._milliseconds<0?\"-\":\"\";if(0===n)return\"0\";var r=Math.floor(n/36e5);0!==r&&(n-=36e5*r,e+=r.toString()+\"h\");var o=Math.floor(n/6e4);0!==o&&(n-=6e4*o,e+=o.toString()+\"m\");var i=Math.floor(n/1e3);return 0!==i&&(n-=1e3*i,e+=i.toString()+\"s\"),0!==n&&(e+=n.toString()+\"ms\"),t+e},n.prototype.valueOf=function(){return this._milliseconds},n.parse=function(t){if(\"0\"===t||\"+0\"===t||\"-0\"===t)return new n(0);for(var r,o,i,s=/([\\-\\+\\d\\.]+)([a-zµμ]+)/g,u=0,a=0,f=\"-\"===t[0]?-1:1;i=s.exec(t);){if(r=i[2],o=Math.abs(parseFloat(i[1])),a++,isNaN(o))throw new Error(\"invalid duration\");if(void 0===e[r])throw new Error(\"invalid unit: \"+r);u+=o*e[r]}if(0===a)throw new Error(\"invalid duration\");return new n(Math.floor(u)*f)},n.prototype.roundTo=function(e){var t=new n(e).valueOf();this._milliseconds=t*Math.round(this._milliseconds/t)},n.prototype.isGreaterThan=function(e){return this.valueOf()>new n(e).valueOf()},n.prototype.isLessThan=function(e){return this.valueOf()<new n(e).valueOf()},n.prototype.isEqualTo=function(e){return this.valueOf()===new n(e).valueOf()},n.prototype.after=function(e){return new Date(e.valueOf()+this._milliseconds)},n.since=function(e){return new n((new Date).valueOf()-e.valueOf())},n.until=function(e){return new n(e.valueOf()-(new Date).valueOf())},n.fromMicroseconds=function(e){var t=Math.floor(e/1e3);return new n(t)},n.fromNanoseconds=function(e){var t=Math.floor(e/1e6);return new n(t)},n.between=function(e,t){return new n(t.valueOf()-e.valueOf())},n.add=function(e,t){return new n(e+t)},n.subtract=function(e,t){return new n(e-t)},n.multiply=function(e,t){return new n(e*t)},n.divide=function(e,n){return e/n},n}.call(this);void 0===(r=function(){return o}.apply(n,[]))||(e.exports=r)},function(e,n,t){\"use strict\";t.r(n);var r=t(0),o=t.n(r),i={en:{now:\"Now\",seconds:\"%ds\",minutes:\"%dm\",hours:\"%dh\",days:\"MMM D\",years:\"MMM D, YYYY\"},es:{now:\"Ahora\",seconds:\"%ds\",minutes:\"%dmin\",hours:\"%dh\",days:\"D MMM.\",years:\"D MMM. YYYY\"},ru:{now:\"1 с\",seconds:\"%d с\",minutes:\"%d мин\",hours:\"%d ч\",days:\"D MMM.\",years:\"D MMM. YYYY\"},fr:{now:\"Μaintenant\",seconds:\"%ds\",minutes:\"%dm\",hours:\"%dh\",days:\"MMM D\",years:\"MMM D, YYYY\"},el:{now:\"Τώρα\",seconds:\"%dδ\",minutes:\"%dλ\",hours:\"%dω\",days:\"MMM D\",years:\"MMM D, YYYY\"}};n.default=function(e,n,t){n.prototype.twitter=function(){return function(e){var n=e.$locale(),t=n?n.name:\"en\",r=Math.abs(e.diff(new Date)),s=null,u=null;(s=r<=1e3?\"now\":r<6e4?\"seconds\":r<36e5?\"minutes\":r<864e5?\"hours\":r<31536e6?\"days\":\"years\",u&&s||!([\"seconds\",\"minutes\",\"hours\"].indexOf(s)>-1))||(u=new o.a(r)[s]());if(\"days\"===s||\"years\"===s){var a=i[t][s];return e.format(a)}return i[t][s].replace(\"%d\",u)}(this)}}}])});","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_localizedFormat=t()}(this,(function(){\"use strict\";var e={LTS:\"h:mm:ss A\",LT:\"h:mm A\",L:\"MM/DD/YYYY\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY h:mm A\",LLLL:\"dddd, MMMM D, YYYY h:mm A\"};return function(t,o,n){var r=o.prototype,i=r.format;n.en.formats=e,r.format=function(t){void 0===t&&(t=\"YYYY-MM-DDTHH:mm:ssZ\");var o=this.$locale().formats,n=function(t,o){return t.replace(/(\\[[^\\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(t,n,r){var i=r&&r.toUpperCase();return n||o[r]||e[r]||o[i].replace(/(\\[[^\\]]+])|(MMMM|MM|DD|dddd)/g,(function(e,t,o){return t||o.slice(1)}))}))}(t,void 0===o?{}:o);return i.call(this,n)}}}));","!function(r,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(r=\"undefined\"!=typeof globalThis?globalThis:r||self).dayjs_plugin_relativeTime=e()}(this,(function(){\"use strict\";return function(r,e,t){r=r||{};var n=e.prototype,o={future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"};function i(r,e,t,o){return n.fromToBase(r,e,t,o)}t.en.relativeTime=o,n.fromToBase=function(e,n,i,d,u){for(var f,a,s,l=i.$locale().relativeTime||o,h=r.thresholds||[{l:\"s\",r:44,d:\"second\"},{l:\"m\",r:89},{l:\"mm\",r:44,d:\"minute\"},{l:\"h\",r:89},{l:\"hh\",r:21,d:\"hour\"},{l:\"d\",r:35},{l:\"dd\",r:25,d:\"day\"},{l:\"M\",r:45},{l:\"MM\",r:10,d:\"month\"},{l:\"y\",r:17},{l:\"yy\",d:\"year\"}],m=h.length,c=0;c<m;c+=1){var y=h[c];y.d&&(f=d?t(e).diff(i,y.d,!0):i.diff(e,y.d,!0));var p=(r.rounding||Math.round)(Math.abs(f));if(s=f>0,p<=y.r||!y.r){p<=1&&c>0&&(y=h[c-1]);var v=l[y.l];u&&(p=u(\"\"+p)),a=\"string\"==typeof v?v.replace(\"%d\",p):v(p,n,y.l,s);break}}if(n)return a;var M=s?l.future:l.past;return\"function\"==typeof M?M(a):M.replace(\"%s\",a)},n.to=function(r,e){return i(r,e,this,!0)},n.from=function(r,e){return i(r,e,this)};var d=function(r){return r.$u?t.utc():t()};n.toNow=function(r){return this.to(d(this),r)},n.fromNow=function(r){return this.from(d(this),r)}}}));","// Twitter-style relative time component\n// Seconds = 1s\n// Minutes = 1m\n// Hours = 1h\n// Days = 1d\n// After 7 days, use DD/MM/YYYY or MM/DD/YYYY\nimport dayjs from 'dayjs';\nimport dayjsTwitter from 'dayjs-twitter';\nimport localizedFormat from 'dayjs/plugin/localizedFormat';\nimport relativeTime from 'dayjs/plugin/relativeTime';\nimport { useEffect, useMemo, useReducer } from 'preact/hooks';\n\ndayjs.extend(dayjsTwitter);\ndayjs.extend(localizedFormat);\ndayjs.extend(relativeTime);\n\nconst dtf = new Intl.DateTimeFormat();\n\nexport default function RelativeTime({ datetime, format }) {\n if (!datetime) return null;\n const [renderCount, rerender] = useReducer((x) => x + 1, 0);\n const date = useMemo(() => dayjs(datetime), [datetime]);\n const [dateStr, dt, title] = useMemo(() => {\n if (!date.isValid()) return ['' + datetime, '', ''];\n let str;\n if (format === 'micro') {\n // If date <= 1 day ago or day is within this year\n const now = dayjs();\n const dayDiff = now.diff(date, 'day');\n if (dayDiff <= 1 || now.year() === date.year()) {\n str = date.twitter();\n } else {\n str = dtf.format(date.toDate());\n }\n }\n if (!str) str = date.fromNow();\n return [str, date.toISOString(), date.format('LLLL')];\n }, [date, format, renderCount]);\n\n useEffect(() => {\n if (!date.isValid()) return;\n let timeout;\n let raf;\n function rafRerender() {\n raf = requestAnimationFrame(() => {\n rerender();\n scheduleRerender();\n });\n }\n function scheduleRerender() {\n // If less than 1 minute, rerender every 10s\n // If less than 1 hour rerender every 1m\n // Else, don't need to rerender\n if (date.diff(dayjs(), 'minute', true) < 1) {\n timeout = setTimeout(rafRerender, 10_000);\n } else if (date.diff(dayjs(), 'hour', true) < 1) {\n timeout = setTimeout(rafRerender, 60_000);\n }\n }\n scheduleRerender();\n return () => {\n clearTimeout(timeout);\n cancelAnimationFrame(raf);\n };\n }, []);\n\n return (\n <time datetime={dt} title={title}>\n {dateStr}\n </time>\n );\n}\n","import { match } from '@formatjs/intl-localematcher';\n\nimport mem from './mem';\n\nfunction _localeMatch(...args) {\n // Wrap in try/catch because localeMatcher throws on invalid locales\n try {\n return match(...args);\n } catch (e) {\n const defaultLocale = args[2];\n return defaultLocale || false;\n }\n}\nconst localeMatch = mem(_localeMatch);\n\nexport default localeMatch;\n","import translationTargetLanguages from '../data/lingva-target-languages';\n\nimport localeMatch from './locale-match';\nimport states from './states';\n\nconst locales = [\n new Intl.DateTimeFormat().resolvedOptions().locale,\n ...navigator.languages,\n];\n\nconst localeTargetLanguages = localeMatch(\n locales,\n translationTargetLanguages.map((l) => l.code.replace('_', '-')), // The underscore will fail Intl.Locale inside `match`\n 'en',\n);\n\nfunction getTranslateTargetLanguage(fromSettings = false) {\n if (fromSettings) {\n const { contentTranslationTargetLanguage } = states.settings;\n if (contentTranslationTargetLanguage) {\n return contentTranslationTargetLanguage;\n }\n }\n return localeTargetLanguages;\n}\n\nexport default getTranslateTargetLanguage;\n","import mem from './mem';\n\nconst IntlDN = new Intl.DisplayNames(navigator.languages, {\n type: 'language',\n});\n\nfunction _localeCode2Text(code) {\n try {\n return IntlDN.of(code);\n } catch (e) {\n console.error(e);\n return null;\n }\n}\n\nexport default mem(_localeCode2Text);\n","export const semver = /^[v^~<>=]*?(\\d+)(?:\\.([x*]|\\d+)(?:\\.([x*]|\\d+)(?:\\.([x*]|\\d+))?(?:-([\\da-z\\-]+(?:\\.[\\da-z\\-]+)*))?(?:\\+[\\da-z\\-]+(?:\\.[\\da-z\\-]+)*)?)?)?$/i;\nexport const validateAndParse = (version) => {\n if (typeof version !== 'string') {\n throw new TypeError('Invalid argument expected string');\n }\n const match = version.match(semver);\n if (!match) {\n throw new Error(`Invalid argument not valid semver ('${version}' received)`);\n }\n match.shift();\n return match;\n};\nconst isWildcard = (s) => s === '*' || s === 'x' || s === 'X';\nconst tryParse = (v) => {\n const n = parseInt(v, 10);\n return isNaN(n) ? v : n;\n};\nconst forceType = (a, b) => typeof a !== typeof b ? [String(a), String(b)] : [a, b];\nconst compareStrings = (a, b) => {\n if (isWildcard(a) || isWildcard(b))\n return 0;\n const [ap, bp] = forceType(tryParse(a), tryParse(b));\n if (ap > bp)\n return 1;\n if (ap < bp)\n return -1;\n return 0;\n};\nexport const compareSegments = (a, b) => {\n for (let i = 0; i < Math.max(a.length, b.length); i++) {\n const r = compareStrings(a[i] || '0', b[i] || '0');\n if (r !== 0)\n return r;\n }\n return 0;\n};\n//# sourceMappingURL=utils.js.map","import { compareSegments, validateAndParse } from './utils.js';\n/**\n * Compare [semver](https://semver.org/) version strings to find greater, equal or lesser.\n * This library supports the full semver specification, including comparing versions with different number of digits like `1.0.0`, `1.0`, `1`, and pre-release versions like `1.0.0-alpha`.\n * @param v1 - First version to compare\n * @param v2 - Second version to compare\n * @returns Numeric value compatible with the [Array.sort(fn) interface](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#Parameters).\n */\nexport const compareVersions = (v1, v2) => {\n // validate input and split into segments\n const n1 = validateAndParse(v1);\n const n2 = validateAndParse(v2);\n // pop off the patch\n const p1 = n1.pop();\n const p2 = n2.pop();\n // validate numbers\n const r = compareSegments(n1, n2);\n if (r !== 0)\n return r;\n // validate pre-release\n if (p1 && p2) {\n return compareSegments(p1.split('.'), p2.split('.'));\n }\n else if (p1 || p2) {\n return p1 ? -1 : 1;\n }\n return 0;\n};\n//# sourceMappingURL=compareVersions.js.map","import { compareVersions } from './compareVersions.js';\n/**\n * Compare [semver](https://semver.org/) version strings using the specified operator.\n *\n * @param v1 First version to compare\n * @param v2 Second version to compare\n * @param operator Allowed arithmetic operator to use\n * @returns `true` if the comparison between the firstVersion and the secondVersion satisfies the operator, `false` otherwise.\n *\n * @example\n * ```\n * compare('10.1.8', '10.0.4', '>'); // return true\n * compare('10.0.1', '10.0.1', '='); // return true\n * compare('10.1.1', '10.2.2', '<'); // return true\n * compare('10.1.1', '10.2.2', '<='); // return true\n * compare('10.1.1', '10.2.2', '>='); // return false\n * ```\n */\nexport const compare = (v1, v2, operator) => {\n // validate input operator\n assertValidOperator(operator);\n // since result of compareVersions can only be -1 or 0 or 1\n // a simple map can be used to replace switch\n const res = compareVersions(v1, v2);\n return operatorResMap[operator].includes(res);\n};\nconst operatorResMap = {\n '>': [1],\n '>=': [0, 1],\n '=': [0],\n '<=': [-1, 0],\n '<': [-1],\n '!=': [-1, 1],\n};\nconst allowedOperators = Object.keys(operatorResMap);\nconst assertValidOperator = (op) => {\n if (typeof op !== 'string') {\n throw new TypeError(`Invalid operator type, expected string but got ${typeof op}`);\n }\n if (allowedOperators.indexOf(op) === -1) {\n throw new Error(`Invalid operator, expected one of ${allowedOperators.join('|')}`);\n }\n};\n//# sourceMappingURL=compare.js.map","import { compare } from './compare.js';\nimport { compareSegments, validateAndParse } from './utils.js';\n/**\n * Match [npm semver](https://docs.npmjs.com/cli/v6/using-npm/semver) version range.\n *\n * @param version Version number to match\n * @param range Range pattern for version\n * @returns `true` if the version number is within the range, `false` otherwise.\n *\n * @example\n * ```\n * satisfies('1.1.0', '^1.0.0'); // return true\n * satisfies('1.1.0', '~1.0.0'); // return false\n * ```\n */\nexport const satisfies = (version, range) => {\n // clean input\n range = range.replace(/([><=]+)\\s+/g, '$1');\n // handle multiple comparators\n if (range.includes('||')) {\n return range.split('||').some((r) => satisfies(version, r));\n }\n else if (range.includes(' - ')) {\n const [a, b] = range.split(' - ', 2);\n return satisfies(version, `>=${a} <=${b}`);\n }\n else if (range.includes(' ')) {\n return range\n .trim()\n .replace(/\\s{2,}/g, ' ')\n .split(' ')\n .every((r) => satisfies(version, r));\n }\n // if no range operator then \"=\"\n const m = range.match(/^([<>=~^]+)/);\n const op = m ? m[1] : '=';\n // if gt/lt/eq then operator compare\n if (op !== '^' && op !== '~')\n return compare(version, range, op);\n // else range of either \"~\" or \"^\" is assumed\n const [v1, v2, v3, , vp] = validateAndParse(version);\n const [r1, r2, r3, , rp] = validateAndParse(range);\n const v = [v1, v2, v3];\n const r = [r1, r2 !== null && r2 !== void 0 ? r2 : 'x', r3 !== null && r3 !== void 0 ? r3 : 'x'];\n // validate pre-release\n if (rp) {\n if (!vp)\n return false;\n if (compareSegments(v, r) !== 0)\n return false;\n if (compareSegments(vp.split('.'), rp.split('.')) === -1)\n return false;\n }\n // first non-zero number\n const nonZero = r.findIndex((v) => v !== '0') + 1;\n // pointer to where segments can be >=\n const i = op === '~' ? 2 : nonZero > 1 ? nonZero : 1;\n // before pointer must be equal\n if (compareSegments(v.slice(0, i), r.slice(0, i)) !== 0)\n return false;\n // after pointer must be >=\n if (compareSegments(v.slice(i), r.slice(i)) === -1)\n return false;\n return true;\n};\n//# sourceMappingURL=satisfies.js.map","import { satisfies } from 'compare-versions';\n\nimport features from '../data/features.json';\n\nimport { getCurrentInstance } from './store-utils';\n\n// Non-semver(?) UA string detection\nconst containPixelfed = /pixelfed/i;\nconst notContainPixelfed = /^(?!.*pixelfed).*$/i;\nconst platformFeatures = {\n '@mastodon/lists': notContainPixelfed,\n '@mastodon/filters': notContainPixelfed,\n '@mastodon/mentions': notContainPixelfed,\n '@mastodon/trending-hashtags': notContainPixelfed,\n '@mastodon/trending-links': notContainPixelfed,\n '@mastodon/post-bookmark': notContainPixelfed,\n '@mastodon/post-edit': notContainPixelfed,\n '@mastodon/profile-edit': notContainPixelfed,\n '@mastodon/profile-private-note': notContainPixelfed,\n '@pixelfed/trending': containPixelfed,\n '@pixelfed/home-include-reblogs': containPixelfed,\n '@pixelfed/global-feed': containPixelfed,\n};\nconst supportsCache = {};\n\nfunction supports(feature) {\n try {\n const { version, domain } = getCurrentInstance();\n const key = `${domain}-${feature}`;\n if (supportsCache[key]) return supportsCache[key];\n\n if (platformFeatures[feature]) {\n return (supportsCache[key] = platformFeatures[feature].test(version));\n }\n\n const range = features[feature];\n if (!range) return false;\n return (supportsCache[key] = satisfies(version, range, {\n includePrerelease: true,\n loose: true,\n }));\n } catch (e) {\n return false;\n }\n}\n\nexport default supports;\n","'use strict';\n\n/** Highest positive signed 32-bit float value */\nconst maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\n\n/** Bootstring parameters */\nconst base = 36;\nconst tMin = 1;\nconst tMax = 26;\nconst skew = 38;\nconst damp = 700;\nconst initialBias = 72;\nconst initialN = 128; // 0x80\nconst delimiter = '-'; // '\\x2D'\n\n/** Regular expressions */\nconst regexPunycode = /^xn--/;\nconst regexNonASCII = /[^\\0-\\x7F]/; // Note: U+007F DEL is excluded too.\nconst regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\n\n/** Error messages */\nconst errors = {\n\t'overflow': 'Overflow: input needs wider integers to process',\n\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t'invalid-input': 'Invalid input'\n};\n\n/** Convenience shortcuts */\nconst baseMinusTMin = base - tMin;\nconst floor = Math.floor;\nconst stringFromCharCode = String.fromCharCode;\n\n/*--------------------------------------------------------------------------*/\n\n/**\n * A generic error utility function.\n * @private\n * @param {String} type The error type.\n * @returns {Error} Throws a `RangeError` with the applicable error message.\n */\nfunction error(type) {\n\tthrow new RangeError(errors[type]);\n}\n\n/**\n * A generic `Array#map` utility function.\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} callback The function that gets called for every array\n * item.\n * @returns {Array} A new array of values returned by the callback function.\n */\nfunction map(array, callback) {\n\tconst result = [];\n\tlet length = array.length;\n\twhile (length--) {\n\t\tresult[length] = callback(array[length]);\n\t}\n\treturn result;\n}\n\n/**\n * A simple `Array#map`-like wrapper to work with domain name strings or email\n * addresses.\n * @private\n * @param {String} domain The domain name or email address.\n * @param {Function} callback The function that gets called for every\n * character.\n * @returns {String} A new string of characters returned by the callback\n * function.\n */\nfunction mapDomain(domain, callback) {\n\tconst parts = domain.split('@');\n\tlet result = '';\n\tif (parts.length > 1) {\n\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t// the local part (i.e. everything up to `@`) intact.\n\t\tresult = parts[0] + '@';\n\t\tdomain = parts[1];\n\t}\n\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\tdomain = domain.replace(regexSeparators, '\\x2E');\n\tconst labels = domain.split('.');\n\tconst encoded = map(labels, callback).join('.');\n\treturn result + encoded;\n}\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n * @see `punycode.ucs2.encode`\n * @see <https://mathiasbynens.be/notes/javascript-encoding>\n * @memberOf punycode.ucs2\n * @name decode\n * @param {String} string The Unicode input string (UCS-2).\n * @returns {Array} The new array of code points.\n */\nfunction ucs2decode(string) {\n\tconst output = [];\n\tlet counter = 0;\n\tconst length = string.length;\n\twhile (counter < length) {\n\t\tconst value = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// It's a high surrogate, and there is a next character.\n\t\t\tconst extra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// It's an unmatched surrogate; only append this code unit, in case the\n\t\t\t\t// next code unit is the high surrogate of a surrogate pair.\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n/**\n * Creates a string based on an array of numeric code points.\n * @see `punycode.ucs2.decode`\n * @memberOf punycode.ucs2\n * @name encode\n * @param {Array} codePoints The array of numeric code points.\n * @returns {String} The new Unicode string (UCS-2).\n */\nconst ucs2encode = codePoints => String.fromCodePoint(...codePoints);\n\n/**\n * Converts a basic code point into a digit/integer.\n * @see `digitToBasic()`\n * @private\n * @param {Number} codePoint The basic numeric code point value.\n * @returns {Number} The numeric value of a basic code point (for use in\n * representing integers) in the range `0` to `base - 1`, or `base` if\n * the code point does not represent a value.\n */\nconst basicToDigit = function(codePoint) {\n\tif (codePoint >= 0x30 && codePoint < 0x3A) {\n\t\treturn 26 + (codePoint - 0x30);\n\t}\n\tif (codePoint >= 0x41 && codePoint < 0x5B) {\n\t\treturn codePoint - 0x41;\n\t}\n\tif (codePoint >= 0x61 && codePoint < 0x7B) {\n\t\treturn codePoint - 0x61;\n\t}\n\treturn base;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n * @see `basicToDigit()`\n * @private\n * @param {Number} digit The numeric value of a basic code point.\n * @returns {Number} The basic code point whose value (when used for\n * representing integers) is `digit`, which needs to be in the range\n * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n * used; else, the lowercase form is used. The behavior is undefined\n * if `flag` is non-zero and `digit` has no uppercase form.\n */\nconst digitToBasic = function(digit, flag) {\n\t// 0..25 map to ASCII a..z or A..Z\n\t// 26..35 map to ASCII 0..9\n\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n * @private\n */\nconst adapt = function(delta, numPoints, firstTime) {\n\tlet k = 0;\n\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\tdelta += floor(delta / numPoints);\n\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\tdelta = floor(delta / baseMinusTMin);\n\t}\n\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n * symbols.\n * @memberOf punycode\n * @param {String} input The Punycode string of ASCII-only symbols.\n * @returns {String} The resulting string of Unicode symbols.\n */\nconst decode = function(input) {\n\t// Don't use UCS-2.\n\tconst output = [];\n\tconst inputLength = input.length;\n\tlet i = 0;\n\tlet n = initialN;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points: let `basic` be the number of input code\n\t// points before the last delimiter, or `0` if there is none, then copy\n\t// the first basic code points to the output.\n\n\tlet basic = input.lastIndexOf(delimiter);\n\tif (basic < 0) {\n\t\tbasic = 0;\n\t}\n\n\tfor (let j = 0; j < basic; ++j) {\n\t\t// if it's not a basic code point\n\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\terror('not-basic');\n\t\t}\n\t\toutput.push(input.charCodeAt(j));\n\t}\n\n\t// Main decoding loop: start just after the last delimiter if any basic code\n\t// points were copied; start at the beginning otherwise.\n\n\tfor (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t// `index` is the index of the next character to be consumed.\n\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t// which gets added to `i`. The overflow checking is easier\n\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t// value at the end to obtain `delta`.\n\t\tconst oldi = i;\n\t\tfor (let w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\tif (index >= inputLength) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\n\t\t\tconst digit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\tif (digit >= base) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\t\t\tif (digit > floor((maxInt - i) / w)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\ti += digit * w;\n\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\tif (digit < t) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst baseMinusT = base - t;\n\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tw *= baseMinusT;\n\n\t\t}\n\n\t\tconst out = output.length + 1;\n\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t// incrementing `n` each time, so we'll fix that now:\n\t\tif (floor(i / out) > maxInt - n) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tn += floor(i / out);\n\t\ti %= out;\n\n\t\t// Insert `n` at position `i` of the output.\n\t\toutput.splice(i++, 0, n);\n\n\t}\n\n\treturn String.fromCodePoint(...output);\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n * @memberOf punycode\n * @param {String} input The string of Unicode symbols.\n * @returns {String} The resulting Punycode string of ASCII-only symbols.\n */\nconst encode = function(input) {\n\tconst output = [];\n\n\t// Convert the input in UCS-2 to an array of Unicode code points.\n\tinput = ucs2decode(input);\n\n\t// Cache the length.\n\tconst inputLength = input.length;\n\n\t// Initialize the state.\n\tlet n = initialN;\n\tlet delta = 0;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points.\n\tfor (const currentValue of input) {\n\t\tif (currentValue < 0x80) {\n\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t}\n\t}\n\n\tconst basicLength = output.length;\n\tlet handledCPCount = basicLength;\n\n\t// `handledCPCount` is the number of code points that have been handled;\n\t// `basicLength` is the number of basic code points.\n\n\t// Finish the basic string with a delimiter unless it's empty.\n\tif (basicLength) {\n\t\toutput.push(delimiter);\n\t}\n\n\t// Main encoding loop:\n\twhile (handledCPCount < inputLength) {\n\n\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t// larger one:\n\t\tlet m = maxInt;\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\tm = currentValue;\n\t\t\t}\n\t\t}\n\n\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t// but guard against overflow.\n\t\tconst handledCPCountPlusOne = handledCPCount + 1;\n\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\tn = m;\n\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\t\t\tif (currentValue === n) {\n\t\t\t\t// Represent delta as a generalized variable-length integer.\n\t\t\t\tlet q = delta;\n\t\t\t\tfor (let k = base; /* no condition */; k += base) {\n\t\t\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tconst qMinusT = q - t;\n\t\t\t\t\tconst baseMinusT = base - t;\n\t\t\t\t\toutput.push(\n\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t);\n\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t}\n\n\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount === basicLength);\n\t\t\t\tdelta = 0;\n\t\t\t\t++handledCPCount;\n\t\t\t}\n\t\t}\n\n\t\t++delta;\n\t\t++n;\n\n\t}\n\treturn output.join('');\n};\n\n/**\n * Converts a Punycode string representing a domain name or an email address\n * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n * it doesn't matter if you call it on a string that has already been\n * converted to Unicode.\n * @memberOf punycode\n * @param {String} input The Punycoded domain name or email address to\n * convert to Unicode.\n * @returns {String} The Unicode representation of the given Punycode\n * string.\n */\nconst toUnicode = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexPunycode.test(string)\n\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t: string;\n\t});\n};\n\n/**\n * Converts a Unicode string representing a domain name or an email address to\n * Punycode. Only the non-ASCII parts of the domain name will be converted,\n * i.e. it doesn't matter if you call it with a domain that's already in\n * ASCII.\n * @memberOf punycode\n * @param {String} input The domain name or email address to convert, as a\n * Unicode string.\n * @returns {String} The Punycode representation of the given domain name or\n * email address.\n */\nconst toASCII = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexNonASCII.test(string)\n\t\t\t? 'xn--' + encode(string)\n\t\t\t: string;\n\t});\n};\n\n/*--------------------------------------------------------------------------*/\n\n/** Define the public API */\nconst punycode = {\n\t/**\n\t * A string representing the current Punycode.js version number.\n\t * @memberOf punycode\n\t * @type String\n\t */\n\t'version': '2.3.1',\n\t/**\n\t * An object of methods to convert from JavaScript's internal character\n\t * representation (UCS-2) to Unicode code points, and back.\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode\n\t * @type Object\n\t */\n\t'ucs2': {\n\t\t'decode': ucs2decode,\n\t\t'encode': ucs2encode\n\t},\n\t'decode': decode,\n\t'encode': encode,\n\t'toASCII': toASCII,\n\t'toUnicode': toUnicode\n};\n\nexport { ucs2decode, ucs2encode, decode, encode, toASCII, toUnicode };\nexport default punycode;\n","function emojifyText(text, emojis = []) {\n if (!text) return '';\n if (!emojis.length) return text;\n if (text.indexOf(':') === -1) return text;\n // Replace shortcodes in text with emoji\n // emojis = [{ shortcode: 'smile', url: 'https://example.com/emoji.png' }]\n emojis.forEach((emoji) => {\n const { shortcode, staticUrl, url } = emoji;\n text = text.replace(\n new RegExp(`:${shortcode}:`, 'g'),\n `<picture><source srcset=\"${staticUrl}\" media=\"(prefers-reduced-motion: reduce)\"></source><img class=\"shortcode-emoji emoji\" src=\"${url}\" alt=\":${shortcode}:\" width=\"16\" height=\"16\" loading=\"lazy\" decoding=\"async\" /></picture>`,\n );\n });\n // console.log(text, emojis);\n return text;\n}\n\nexport default emojifyText;\n","import emojifyText from './emojify-text';\nimport mem from './mem';\n\nconst fauxDiv = document.createElement('div');\nconst whitelistLinkClasses = ['u-url', 'mention', 'hashtag'];\n\nfunction _enhanceContent(content, opts = {}) {\n const { emojis, postEnhanceDOM = () => {} } = opts;\n let enhancedContent = content;\n const dom = document.createElement('div');\n dom.innerHTML = enhancedContent;\n const hasLink = /<a/i.test(enhancedContent);\n const hasCodeBlock = enhancedContent.includes('```');\n\n if (hasLink) {\n // Add target=\"_blank\" to all links with no target=\"_blank\"\n // E.g. `note` in `account`\n const noTargetBlankLinks = dom.querySelectorAll('a:not([target=\"_blank\"])');\n noTargetBlankLinks.forEach((link) => {\n link.setAttribute('target', '_blank');\n });\n\n // Remove all classes except `u-url`, `mention`, `hashtag`\n const links = dom.querySelectorAll('a[class]');\n links.forEach((link) => {\n link.classList.forEach((c) => {\n if (!whitelistLinkClasses.includes(c)) {\n link.classList.remove(c);\n }\n });\n });\n }\n\n // Add 'has-url-text' to all links that contains a url\n if (hasLink) {\n const links = dom.querySelectorAll('a[href]');\n links.forEach((link) => {\n if (/^https?:\\/\\//i.test(link.textContent.trim())) {\n link.classList.add('has-url-text');\n shortenLink(link);\n }\n });\n }\n\n // Spanify un-spanned mentions\n if (hasLink) {\n const links = dom.querySelectorAll('a[href]');\n const usernames = [];\n links.forEach((link) => {\n const text = link.innerText.trim();\n const hasChildren = link.querySelector('*');\n // If text looks like @username@domain, then it's a mention\n if (/^@[^@]+(@[^@]+)?$/g.test(text)) {\n // Only show @username\n const [_, username, domain] = text.split('@');\n if (!hasChildren) {\n if (\n !usernames.some(([u]) => u === username) ||\n usernames.some(([u, d]) => u === username && d === domain)\n ) {\n link.innerHTML = `@<span>${username}</span>`;\n usernames.push([username, domain]);\n } else {\n link.innerHTML = `@<span>${username}@${domain}</span>`;\n }\n }\n link.classList.add('mention');\n }\n // If text looks like #hashtag, then it's a hashtag\n if (/^#[^#]+$/g.test(text)) {\n if (!hasChildren) link.innerHTML = `#<span>${text.slice(1)}</span>`;\n link.classList.add('mention', 'hashtag');\n }\n });\n }\n\n // EMOJIS\n // ======\n // Convert :shortcode: to <img />\n let textNodes;\n if (enhancedContent.includes(':')) {\n textNodes = extractTextNodes(dom);\n textNodes.forEach((node) => {\n let html = node.nodeValue\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>');\n if (emojis) {\n html = emojifyText(html, emojis);\n }\n fauxDiv.innerHTML = html;\n // const nodes = [...fauxDiv.childNodes];\n node.replaceWith(...fauxDiv.childNodes);\n });\n }\n\n // CODE BLOCKS\n // ===========\n // Convert ```code``` to <pre><code>code</code></pre>\n if (hasCodeBlock) {\n const blocks = [...dom.querySelectorAll('p')].filter((p) =>\n /^```[^]+```$/g.test(p.innerText.trim()),\n );\n blocks.forEach((block) => {\n const pre = document.createElement('pre');\n // Replace <br /> with newlines\n block.querySelectorAll('br').forEach((br) => br.replaceWith('\\n'));\n pre.innerHTML = `<code>${block.innerHTML.trim()}</code>`;\n block.replaceWith(pre);\n });\n }\n\n // Convert multi-paragraph code blocks to <pre><code>code</code></pre>\n if (hasCodeBlock) {\n const paragraphs = [...dom.querySelectorAll('p')];\n // Filter out paragraphs with ``` in beginning only\n const codeBlocks = paragraphs.filter((p) => /^```/g.test(p.innerText));\n // For each codeBlocks, get all paragraphs until the last paragraph with ``` at the end only\n codeBlocks.forEach((block) => {\n const nextParagraphs = [block];\n let hasCodeBlock = false;\n let currentBlock = block;\n while (currentBlock.nextElementSibling) {\n const next = currentBlock.nextElementSibling;\n if (next && next.tagName === 'P') {\n if (/```$/g.test(next.innerText)) {\n nextParagraphs.push(next);\n hasCodeBlock = true;\n break;\n } else {\n nextParagraphs.push(next);\n }\n } else {\n break;\n }\n currentBlock = next;\n }\n if (hasCodeBlock) {\n const pre = document.createElement('pre');\n nextParagraphs.forEach((p) => {\n // Replace <br /> with newlines\n p.querySelectorAll('br').forEach((br) => br.replaceWith('\\n'));\n });\n const codeText = nextParagraphs.map((p) => p.innerHTML).join('\\n\\n');\n pre.innerHTML = `<code tabindex=\"0\">${codeText}</code>`;\n block.replaceWith(pre);\n nextParagraphs.forEach((p) => p.remove());\n }\n });\n }\n\n // INLINE CODE\n // ===========\n // Convert `code` to <code>code</code>\n if (enhancedContent.includes('`')) {\n textNodes = extractTextNodes(dom);\n textNodes.forEach((node) => {\n let html = node.nodeValue\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>');\n if (/`[^`]+`/g.test(html)) {\n html = html.replaceAll(/(`[^]+?`)/g, '<code>$1</code>');\n }\n fauxDiv.innerHTML = html;\n // const nodes = [...fauxDiv.childNodes];\n node.replaceWith(...fauxDiv.childNodes);\n });\n }\n\n // TWITTER USERNAMES\n // =================\n // Convert @username@twitter.com to <a href=\"https://twitter.com/username\">@username@twitter.com</a>\n if (/twitter\\.com/i.test(enhancedContent)) {\n textNodes = extractTextNodes(dom, {\n rejectFilter: ['A'],\n });\n textNodes.forEach((node) => {\n let html = node.nodeValue\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>');\n if (/@[a-zA-Z0-9_]+@twitter\\.com/g.test(html)) {\n html = html.replaceAll(\n /(@([a-zA-Z0-9_]+)@twitter\\.com)/g,\n '<a href=\"https://twitter.com/$2\" rel=\"nofollow noopener noreferrer\" target=\"_blank\">$1</a>',\n );\n }\n fauxDiv.innerHTML = html;\n // const nodes = [...fauxDiv.childNodes];\n node.replaceWith(...fauxDiv.childNodes);\n });\n }\n\n // HASHTAG STUFFING\n // ================\n // Get the <p> that contains a lot of hashtags, add a class to it\n if (enhancedContent.includes('#')) {\n let prevIndex = null;\n const hashtagStuffedParagraphs = [...dom.querySelectorAll('p')].filter(\n (p, index) => {\n let hashtagCount = 0;\n for (let i = 0; i < p.childNodes.length; i++) {\n const node = p.childNodes[i];\n\n if (node.nodeType === Node.TEXT_NODE) {\n const text = node.textContent.trim();\n if (text !== '') {\n return false;\n }\n } else if (node.tagName === 'BR') {\n // Ignore <br />\n } else if (node.tagName === 'A') {\n const linkText = node.textContent.trim();\n if (!linkText || !linkText.startsWith('#')) {\n return false;\n } else {\n hashtagCount++;\n }\n } else {\n return false;\n }\n }\n // Only consider \"stuffing\" if:\n // - there are more than 3 hashtags\n // - there are more than 1 hashtag in adjacent paragraphs\n if (hashtagCount > 3) {\n prevIndex = index;\n return true;\n }\n if (hashtagCount > 1 && prevIndex && index === prevIndex + 1) {\n prevIndex = index;\n return true;\n }\n },\n );\n if (hashtagStuffedParagraphs?.length) {\n hashtagStuffedParagraphs.forEach((p) => {\n p.classList.add('hashtag-stuffing');\n p.title = p.innerText;\n });\n }\n }\n\n // ADD ASPECT RATIO TO ALL IMAGES\n if (enhancedContent.includes('<img')) {\n dom.querySelectorAll('img').forEach((img) => {\n const width = img.getAttribute('width') || img.naturalWidth;\n const height = img.getAttribute('height') || img.naturalHeight;\n if (width && height) {\n img.style.setProperty('--original-aspect-ratio', `${width}/${height}`);\n }\n });\n }\n\n if (postEnhanceDOM) {\n queueMicrotask(() => postEnhanceDOM(dom));\n // postEnhanceDOM(dom); // mutate dom\n }\n\n enhancedContent = dom.innerHTML;\n\n return enhancedContent;\n}\nconst enhanceContent = mem(_enhanceContent);\n\nconst defaultRejectFilter = [\n // Document metadata\n 'STYLE',\n // Image and multimedia\n 'IMG',\n 'VIDEO',\n 'AUDIO',\n 'AREA',\n 'MAP',\n 'TRACK',\n // Embedded content\n 'EMBED',\n 'IFRAME',\n 'OBJECT',\n 'PICTURE',\n 'PORTAL',\n 'SOURCE',\n // SVG and MathML\n 'SVG',\n 'MATH',\n // Scripting\n 'CANVAS',\n 'NOSCRIPT',\n 'SCRIPT',\n // Forms\n 'INPUT',\n 'OPTION',\n 'TEXTAREA',\n // Web Components\n 'SLOT',\n 'TEMPLATE',\n];\nconst defaultRejectFilterMap = Object.fromEntries(\n defaultRejectFilter.map((nodeName) => [nodeName, true]),\n);\n\nconst URL_PREFIX_REGEX = /^(https?:\\/\\/(www\\.)?|xmpp:)/;\nconst URL_DISPLAY_LENGTH = 30;\n// Similar to https://github.com/mastodon/mastodon/blob/1666b1955992e16f4605b414c6563ca25b3a3f18/app/lib/text_formatter.rb#L54-L69\nfunction shortenLink(link) {\n if (!link || link.querySelector?.('*')) {\n return;\n }\n try {\n const url = link.innerText.trim();\n const prefix = (url.match(URL_PREFIX_REGEX) || [])[0] || '';\n if (!prefix) return;\n const displayURL = url.slice(\n prefix.length,\n prefix.length + URL_DISPLAY_LENGTH,\n );\n const suffix = url.slice(prefix.length + URL_DISPLAY_LENGTH);\n const cutoff = url.slice(prefix.length).length > URL_DISPLAY_LENGTH;\n link.innerHTML = `<span class=\"invisible\">${prefix}</span><span class=${\n cutoff ? 'ellipsis' : ''\n }>${displayURL}</span><span class=\"invisible\">${suffix}</span>`;\n } catch (e) {}\n}\n\nfunction extractTextNodes(dom, opts = {}) {\n const textNodes = [];\n const rejectFilterMap = Object.assign(\n {},\n defaultRejectFilterMap,\n opts.rejectFilter?.reduce((acc, cur) => {\n acc[cur] = true;\n return acc;\n }, {}),\n );\n const walk = document.createTreeWalker(\n dom,\n NodeFilter.SHOW_TEXT,\n {\n acceptNode(node) {\n if (rejectFilterMap[node.parentNode.nodeName]) {\n return NodeFilter.FILTER_REJECT;\n }\n return NodeFilter.FILTER_ACCEPT;\n },\n },\n false,\n );\n let node;\n while ((node = walk.nextNode())) {\n textNodes.push(node);\n }\n return textNodes;\n}\n\nexport default enhanceContent;\n","import mem from './mem';\n\nconst div = document.createElement('div');\nfunction getHTMLText(html, opts) {\n if (!html) return '';\n const { preProcess } = opts || {};\n\n div.innerHTML = html\n .replace(/<\\/p>/g, '</p>\\n\\n')\n .replace(/<\\/li>/g, '</li>\\n');\n div.querySelectorAll('br').forEach((br) => {\n br.replaceWith('\\n');\n });\n\n preProcess?.(div);\n\n // MASTODON-SPECIFIC classes\n // Remove .invisible\n div.querySelectorAll('.invisible').forEach((el) => {\n el.remove();\n });\n // Add … at end of .ellipsis\n div.querySelectorAll('.ellipsis').forEach((el) => {\n el.append('...');\n });\n\n return div.innerText.replace(/[\\r\\n]{3,}/g, '\\n\\n').trim();\n}\n\nexport default mem(getHTMLText);\n","import states from './states';\n\nfunction handleContentLinks(opts) {\n const { mentions = [], instance, previewMode, statusURL } = opts || {};\n return (e) => {\n let { target } = e;\n target = target.closest('a');\n if (!target) return;\n\n // If cmd/ctrl/shift/alt key is pressed or middle-click, let the browser handle it\n if (e.metaKey || e.ctrlKey || e.shiftKey || e.altKey || e.which === 2) {\n return;\n }\n\n const prevText = target.previousSibling?.textContent;\n const textBeforeLinkIsAt = prevText?.endsWith('@');\n const textStartsWithAt = target.innerText.startsWith('@');\n if (\n ((target.classList.contains('u-url') ||\n target.classList.contains('mention')) &&\n textStartsWithAt) ||\n (textBeforeLinkIsAt && !textStartsWithAt)\n ) {\n const targetText = (\n target.querySelector('span') || target\n ).innerText.trim();\n const username = targetText.replace(/^@/, '');\n const url = target.getAttribute('href');\n // Only fallback to acct/username check if url doesn't match\n const mention =\n mentions.find((mention) => mention.url === url) ||\n mentions.find(\n (mention) =>\n mention.acct === username || mention.username === username,\n );\n console.warn('MENTION', mention, url);\n if (mention) {\n e.preventDefault();\n e.stopPropagation();\n states.showAccount = {\n account: mention.acct,\n instance,\n };\n } else if (!/^http/i.test(targetText)) {\n console.log('mention not found', targetText);\n e.preventDefault();\n e.stopPropagation();\n const href = target.getAttribute('href');\n states.showAccount = {\n account: href,\n instance,\n };\n }\n } else if (!previewMode) {\n const textBeforeLinkIsHash = prevText?.endsWith('#');\n if (target.classList.contains('hashtag') || textBeforeLinkIsHash) {\n e.preventDefault();\n e.stopPropagation();\n const tag = target.innerText.replace(/^#/, '').trim();\n const hashURL = instance ? `#/${instance}/t/${tag}` : `#/t/${tag}`;\n console.log({ hashURL });\n location.hash = hashURL;\n } else if (\n states.unfurledLinks[target.href]?.url &&\n statusURL !== target.href\n ) {\n // If unfurled AND not self-referential\n e.preventDefault();\n e.stopPropagation();\n states.prevLocation = {\n pathname: location.hash.replace(/^#/, ''),\n };\n location.hash = `#${states.unfurledLinks[target.href].url}`;\n }\n }\n };\n}\n\nexport default handleContentLinks;\n","import mem from './mem';\n\nconst { locale } = new Intl.DateTimeFormat().resolvedOptions();\n\nconst _DateTimeFormat = (opts) => {\n const { dateYear, hideTime, formatOpts } = opts || {};\n const currentYear = new Date().getFullYear();\n return Intl.DateTimeFormat(locale, {\n // Show year if not current year\n year: dateYear === currentYear ? undefined : 'numeric',\n month: 'short',\n day: 'numeric',\n // Hide time if requested\n hour: hideTime ? undefined : 'numeric',\n minute: hideTime ? undefined : 'numeric',\n ...formatOpts,\n });\n};\nconst DateTimeFormat = mem(_DateTimeFormat);\n\nfunction niceDateTime(date, dtfOpts) {\n if (!(date instanceof Date)) {\n date = new Date(date);\n }\n const DTF = DateTimeFormat({\n dateYear: date.getFullYear(),\n ...dtfOpts,\n });\n const dateText = DTF.format(date);\n return dateText;\n}\n\nexport default niceDateTime;\n","const { locale } = Intl.NumberFormat().resolvedOptions();\nconst shortenNumber = Intl.NumberFormat(locale, {\n notation: 'compact',\n roundingMode: 'floor',\n}).format;\nexport default shortenNumber;\n","import openOSK from './open-osk';\nimport showToast from './show-toast';\nimport states from './states';\n\nconst TOAST_DURATION = 5_000; // 5 seconds\n\nexport default function showCompose(opts) {\n if (!opts) opts = true;\n\n if (states.showCompose) {\n if (states.composerState.minimized) {\n showToast({\n duration: TOAST_DURATION,\n text: `A draft post is currently minimized. Post or discard it before creating a new one.`,\n });\n } else {\n showToast({\n duration: TOAST_DURATION,\n text: `A post is currently open. Post or discard it before creating a new one.`,\n });\n }\n return;\n }\n\n openOSK();\n states.showCompose = opts;\n}\n","import './account-block.css';\n\n// import { useNavigate } from 'react-router-dom';\nimport enhanceContent from '../utils/enhance-content';\nimport niceDateTime from '../utils/nice-date-time';\nimport shortenNumber from '../utils/shorten-number';\nimport states from '../utils/states';\n\nimport Avatar from './avatar';\nimport EmojiText from './emoji-text';\nimport Icon from './icon';\n\nfunction AccountBlock({\n skeleton,\n account,\n avatarSize = 'xl',\n useAvatarStatic = false,\n instance,\n external,\n internal,\n onClick,\n showActivity = false,\n showStats = false,\n accountInstance,\n hideDisplayName = false,\n relationship = {},\n excludeRelationshipAttrs = [],\n}) {\n if (skeleton) {\n return (\n <div class=\"account-block skeleton\">\n <Avatar size={avatarSize} />\n <span>\n <b>████████</b>\n <br />\n <span class=\"account-block-acct\">██████</span>\n </span>\n </div>\n );\n }\n\n if (!account) {\n return null;\n }\n\n // const navigate = useNavigate();\n\n const {\n id,\n acct,\n avatar,\n avatarStatic,\n displayName,\n username,\n emojis,\n url,\n statusesCount,\n lastStatusAt,\n bot,\n fields,\n note,\n group,\n followersCount,\n createdAt,\n locked,\n } = account;\n let [_, acct1, acct2] = acct.match(/([^@]+)(@.+)/i) || [, acct];\n if (accountInstance) {\n acct2 = `@${accountInstance}`;\n }\n\n const verifiedField = fields?.find((f) => !!f.verifiedAt && !!f.value);\n\n const excludedRelationship = {};\n for (const r in relationship) {\n if (!excludeRelationshipAttrs.includes(r)) {\n excludedRelationship[r] = relationship[r];\n }\n }\n const hasRelationship =\n excludedRelationship.following ||\n excludedRelationship.followedBy ||\n excludedRelationship.requested;\n\n return (\n <a\n class=\"account-block\"\n href={url}\n target={external ? '_blank' : null}\n title={acct2 ? acct : `@${acct}`}\n onClick={(e) => {\n if (external) return;\n e.preventDefault();\n if (onClick) return onClick(e);\n if (internal) {\n // navigate(`/${instance}/a/${id}`);\n location.hash = `/${instance}/a/${id}`;\n } else {\n states.showAccount = {\n account,\n instance,\n };\n }\n }}\n >\n <Avatar\n url={useAvatarStatic ? avatarStatic : avatar || avatarStatic}\n size={avatarSize}\n squircle={bot}\n />\n <span class=\"account-block-content\">\n {!hideDisplayName && (\n <>\n {displayName ? (\n <b>\n <EmojiText text={displayName} emojis={emojis} />\n </b>\n ) : (\n <b>{username}</b>\n )}\n </>\n )}{' '}\n <span class=\"account-block-acct bidi-isolate\">\n {acct2 ? '' : '@'}\n {acct1}\n <wbr />\n {acct2}\n {locked && (\n <>\n {' '}\n <Icon icon=\"lock\" size=\"s\" alt=\"Locked\" />\n </>\n )}\n </span>\n {showActivity && (\n <div class=\"account-block-stats\">\n Posts: {shortenNumber(statusesCount)}\n {!!lastStatusAt && (\n <>\n {' '}\n · Last posted:{' '}\n {niceDateTime(lastStatusAt, {\n hideTime: true,\n })}\n </>\n )}\n </div>\n )}\n {showStats && (\n <div class=\"account-block-stats\">\n {bot && (\n <>\n <span class=\"tag collapsed\">\n <Icon icon=\"bot\" /> Automated\n </span>\n </>\n )}\n {!!group && (\n <>\n <span class=\"tag collapsed\">\n <Icon icon=\"group\" /> Group\n </span>\n </>\n )}\n {hasRelationship && (\n <div key={relationship.id} class=\"shazam-container-horizontal\">\n <div class=\"shazam-container-inner\">\n {excludedRelationship.following &&\n excludedRelationship.followedBy ? (\n <span class=\"tag minimal\">Mutual</span>\n ) : excludedRelationship.requested ? (\n <span class=\"tag minimal\">Requested</span>\n ) : excludedRelationship.following ? (\n <span class=\"tag minimal\">Following</span>\n ) : excludedRelationship.followedBy ? (\n <span class=\"tag minimal\">Follows you</span>\n ) : null}\n </div>\n </div>\n )}\n {!!followersCount && (\n <span class=\"ib\">\n {shortenNumber(followersCount)}{' '}\n {followersCount === 1 ? 'follower' : 'followers'}\n </span>\n )}\n {!!verifiedField && (\n <span class=\"verified-field\">\n <Icon icon=\"check-circle\" size=\"s\" />{' '}\n <span\n dangerouslySetInnerHTML={{\n __html: enhanceContent(verifiedField.value, { emojis }),\n }}\n />\n </span>\n )}\n {!bot &&\n !group &&\n !hasRelationship &&\n !followersCount &&\n !verifiedField &&\n !!createdAt && (\n <span class=\"created-at\">\n Joined{' '}\n <time datetime={createdAt}>\n {niceDateTime(createdAt, {\n hideTime: true,\n })}\n </time>\n </span>\n )}\n </div>\n )}\n </span>\n </a>\n );\n}\n\nexport default AccountBlock;\n","import { FocusableItem } from '@szhsin/react-menu';\n\nimport Link from './link';\n\nfunction MenuLink(props) {\n const { className, disabled, ...restProps } = props;\n return (\n <FocusableItem className={className} disabled={disabled}>\n {({ ref, closeMenu }) => (\n <Link\n {...restProps}\n ref={ref}\n onClick={({ detail }) =>\n closeMenu(detail === 0 ? 'Enter' : undefined)\n }\n />\n )}\n </FocusableItem>\n );\n}\n\nexport default MenuLink;\n","function RetryOperation(timeouts, options) {\n // Compatibility for the old (timeouts, retryForever) signature\n if (typeof options === 'boolean') {\n options = { forever: options };\n }\n\n this._originalTimeouts = JSON.parse(JSON.stringify(timeouts));\n this._timeouts = timeouts;\n this._options = options || {};\n this._maxRetryTime = options && options.maxRetryTime || Infinity;\n this._fn = null;\n this._errors = [];\n this._attempts = 1;\n this._operationTimeout = null;\n this._operationTimeoutCb = null;\n this._timeout = null;\n this._operationStart = null;\n this._timer = null;\n\n if (this._options.forever) {\n this._cachedTimeouts = this._timeouts.slice(0);\n }\n}\nmodule.exports = RetryOperation;\n\nRetryOperation.prototype.reset = function() {\n this._attempts = 1;\n this._timeouts = this._originalTimeouts.slice(0);\n}\n\nRetryOperation.prototype.stop = function() {\n if (this._timeout) {\n clearTimeout(this._timeout);\n }\n if (this._timer) {\n clearTimeout(this._timer);\n }\n\n this._timeouts = [];\n this._cachedTimeouts = null;\n};\n\nRetryOperation.prototype.retry = function(err) {\n if (this._timeout) {\n clearTimeout(this._timeout);\n }\n\n if (!err) {\n return false;\n }\n var currentTime = new Date().getTime();\n if (err && currentTime - this._operationStart >= this._maxRetryTime) {\n this._errors.push(err);\n this._errors.unshift(new Error('RetryOperation timeout occurred'));\n return false;\n }\n\n this._errors.push(err);\n\n var timeout = this._timeouts.shift();\n if (timeout === undefined) {\n if (this._cachedTimeouts) {\n // retry forever, only keep last error\n this._errors.splice(0, this._errors.length - 1);\n timeout = this._cachedTimeouts.slice(-1);\n } else {\n return false;\n }\n }\n\n var self = this;\n this._timer = setTimeout(function() {\n self._attempts++;\n\n if (self._operationTimeoutCb) {\n self._timeout = setTimeout(function() {\n self._operationTimeoutCb(self._attempts);\n }, self._operationTimeout);\n\n if (self._options.unref) {\n self._timeout.unref();\n }\n }\n\n self._fn(self._attempts);\n }, timeout);\n\n if (this._options.unref) {\n this._timer.unref();\n }\n\n return true;\n};\n\nRetryOperation.prototype.attempt = function(fn, timeoutOps) {\n this._fn = fn;\n\n if (timeoutOps) {\n if (timeoutOps.timeout) {\n this._operationTimeout = timeoutOps.timeout;\n }\n if (timeoutOps.cb) {\n this._operationTimeoutCb = timeoutOps.cb;\n }\n }\n\n var self = this;\n if (this._operationTimeoutCb) {\n this._timeout = setTimeout(function() {\n self._operationTimeoutCb();\n }, self._operationTimeout);\n }\n\n this._operationStart = new Date().getTime();\n\n this._fn(this._attempts);\n};\n\nRetryOperation.prototype.try = function(fn) {\n console.log('Using RetryOperation.try() is deprecated');\n this.attempt(fn);\n};\n\nRetryOperation.prototype.start = function(fn) {\n console.log('Using RetryOperation.start() is deprecated');\n this.attempt(fn);\n};\n\nRetryOperation.prototype.start = RetryOperation.prototype.try;\n\nRetryOperation.prototype.errors = function() {\n return this._errors;\n};\n\nRetryOperation.prototype.attempts = function() {\n return this._attempts;\n};\n\nRetryOperation.prototype.mainError = function() {\n if (this._errors.length === 0) {\n return null;\n }\n\n var counts = {};\n var mainError = null;\n var mainErrorCount = 0;\n\n for (var i = 0; i < this._errors.length; i++) {\n var error = this._errors[i];\n var message = error.message;\n var count = (counts[message] || 0) + 1;\n\n counts[message] = count;\n\n if (count >= mainErrorCount) {\n mainError = error;\n mainErrorCount = count;\n }\n }\n\n return mainError;\n};\n","var RetryOperation = require('./retry_operation');\n\nexports.operation = function(options) {\n var timeouts = exports.timeouts(options);\n return new RetryOperation(timeouts, {\n forever: options && (options.forever || options.retries === Infinity),\n unref: options && options.unref,\n maxRetryTime: options && options.maxRetryTime\n });\n};\n\nexports.timeouts = function(options) {\n if (options instanceof Array) {\n return [].concat(options);\n }\n\n var opts = {\n retries: 10,\n factor: 2,\n minTimeout: 1 * 1000,\n maxTimeout: Infinity,\n randomize: false\n };\n for (var key in options) {\n opts[key] = options[key];\n }\n\n if (opts.minTimeout > opts.maxTimeout) {\n throw new Error('minTimeout is greater than maxTimeout');\n }\n\n var timeouts = [];\n for (var i = 0; i < opts.retries; i++) {\n timeouts.push(this.createTimeout(i, opts));\n }\n\n if (options && options.forever && !timeouts.length) {\n timeouts.push(this.createTimeout(i, opts));\n }\n\n // sort the array numerically ascending\n timeouts.sort(function(a,b) {\n return a - b;\n });\n\n return timeouts;\n};\n\nexports.createTimeout = function(attempt, opts) {\n var random = (opts.randomize)\n ? (Math.random() + 1)\n : 1;\n\n var timeout = Math.round(random * Math.max(opts.minTimeout, 1) * Math.pow(opts.factor, attempt));\n timeout = Math.min(timeout, opts.maxTimeout);\n\n return timeout;\n};\n\nexports.wrap = function(obj, options, methods) {\n if (options instanceof Array) {\n methods = options;\n options = null;\n }\n\n if (!methods) {\n methods = [];\n for (var key in obj) {\n if (typeof obj[key] === 'function') {\n methods.push(key);\n }\n }\n }\n\n for (var i = 0; i < methods.length; i++) {\n var method = methods[i];\n var original = obj[method];\n\n obj[method] = function retryWrapper(original) {\n var op = exports.operation(options);\n var args = Array.prototype.slice.call(arguments, 1);\n var callback = args.pop();\n\n args.push(function(err) {\n if (op.retry(err)) {\n return;\n }\n if (err) {\n arguments[0] = op.mainError();\n }\n callback.apply(this, arguments);\n });\n\n op.attempt(function() {\n original.apply(obj, args);\n });\n }.bind(obj, original);\n obj[method].options = options;\n }\n};\n","module.exports = require('./lib/retry');","const objectToString = Object.prototype.toString;\n\nconst isError = value => objectToString.call(value) === '[object Error]';\n\nconst errorMessages = new Set([\n\t'Failed to fetch', // Chrome\n\t'NetworkError when attempting to fetch resource.', // Firefox\n\t'The Internet connection appears to be offline.', // Safari 16\n\t'Load failed', // Safari 17+\n\t'Network request failed', // `cross-fetch`\n\t'fetch failed', // Undici (Node.js)\n]);\n\nexport default function isNetworkError(error) {\n\tconst isValid = error\n\t\t&& isError(error)\n\t\t&& error.name === 'TypeError'\n\t\t&& typeof error.message === 'string';\n\n\tif (!isValid) {\n\t\treturn false;\n\t}\n\n\t// We do an extra check for Safari 17+ as it has a very generic error message.\n\t// Network errors in Safari have no stack.\n\tif (error.message === 'Load failed') {\n\t\treturn error.stack === undefined;\n\t}\n\n\treturn errorMessages.has(error.message);\n}\n","import retry from 'retry';\nimport isNetworkError from 'is-network-error';\n\nexport class AbortError extends Error {\n\tconstructor(message) {\n\t\tsuper();\n\n\t\tif (message instanceof Error) {\n\t\t\tthis.originalError = message;\n\t\t\t({message} = message);\n\t\t} else {\n\t\t\tthis.originalError = new Error(message);\n\t\t\tthis.originalError.stack = this.stack;\n\t\t}\n\n\t\tthis.name = 'AbortError';\n\t\tthis.message = message;\n\t}\n}\n\nconst decorateErrorWithCounts = (error, attemptNumber, options) => {\n\t// Minus 1 from attemptNumber because the first attempt does not count as a retry\n\tconst retriesLeft = options.retries - (attemptNumber - 1);\n\n\terror.attemptNumber = attemptNumber;\n\terror.retriesLeft = retriesLeft;\n\treturn error;\n};\n\nexport default async function pRetry(input, options) {\n\treturn new Promise((resolve, reject) => {\n\t\toptions = {\n\t\t\tonFailedAttempt() {},\n\t\t\tretries: 10,\n\t\t\tshouldRetry: () => true,\n\t\t\t...options,\n\t\t};\n\n\t\tconst operation = retry.operation(options);\n\n\t\tconst abortHandler = () => {\n\t\t\toperation.stop();\n\t\t\treject(options.signal?.reason);\n\t\t};\n\n\t\tif (options.signal && !options.signal.aborted) {\n\t\t\toptions.signal.addEventListener('abort', abortHandler, {once: true});\n\t\t}\n\n\t\tconst cleanUp = () => {\n\t\t\toptions.signal?.removeEventListener('abort', abortHandler);\n\t\t\toperation.stop();\n\t\t};\n\n\t\toperation.attempt(async attemptNumber => {\n\t\t\ttry {\n\t\t\t\tconst result = await input(attemptNumber);\n\t\t\t\tcleanUp();\n\t\t\t\tresolve(result);\n\t\t\t} catch (error) {\n\t\t\t\ttry {\n\t\t\t\t\tif (!(error instanceof Error)) {\n\t\t\t\t\t\tthrow new TypeError(`Non-error was thrown: \"${error}\". You should only throw errors.`);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (error instanceof AbortError) {\n\t\t\t\t\t\tthrow error.originalError;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (error instanceof TypeError && !isNetworkError(error)) {\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\t}\n\n\t\t\t\t\tdecorateErrorWithCounts(error, attemptNumber, options);\n\n\t\t\t\t\tif (!(await options.shouldRetry(error))) {\n\t\t\t\t\t\toperation.stop();\n\t\t\t\t\t\treject(error);\n\t\t\t\t\t}\n\n\t\t\t\t\tawait options.onFailedAttempt(error);\n\n\t\t\t\t\tif (!operation.retry(error)) {\n\t\t\t\t\t\tthrow operation.mainError();\n\t\t\t\t\t}\n\t\t\t\t} catch (finalError) {\n\t\t\t\t\tdecorateErrorWithCounts(finalError, attemptNumber, options);\n\t\t\t\t\tcleanUp();\n\t\t\t\t\treject(finalError);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n","\"use client\";\nvar __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n\n// src/InView.tsx\nimport * as React from \"react\";\n\n// src/observe.ts\nvar observerMap = /* @__PURE__ */ new Map();\nvar RootIds = /* @__PURE__ */ new WeakMap();\nvar rootId = 0;\nvar unsupportedValue = void 0;\nfunction defaultFallbackInView(inView) {\n unsupportedValue = inView;\n}\nfunction getRootId(root) {\n if (!root) return \"0\";\n if (RootIds.has(root)) return RootIds.get(root);\n rootId += 1;\n RootIds.set(root, rootId.toString());\n return RootIds.get(root);\n}\nfunction optionsToId(options) {\n return Object.keys(options).sort().filter(\n (key) => options[key] !== void 0\n ).map((key) => {\n return `${key}_${key === \"root\" ? getRootId(options.root) : options[key]}`;\n }).toString();\n}\nfunction createObserver(options) {\n const id = optionsToId(options);\n let instance = observerMap.get(id);\n if (!instance) {\n const elements = /* @__PURE__ */ new Map();\n let thresholds;\n const observer = new IntersectionObserver((entries) => {\n entries.forEach((entry) => {\n var _a;\n const inView = entry.isIntersecting && thresholds.some((threshold) => entry.intersectionRatio >= threshold);\n if (options.trackVisibility && typeof entry.isVisible === \"undefined\") {\n entry.isVisible = inView;\n }\n (_a = elements.get(entry.target)) == null ? void 0 : _a.forEach((callback) => {\n callback(inView, entry);\n });\n });\n }, options);\n thresholds = observer.thresholds || (Array.isArray(options.threshold) ? options.threshold : [options.threshold || 0]);\n instance = {\n id,\n observer,\n elements\n };\n observerMap.set(id, instance);\n }\n return instance;\n}\nfunction observe(element, callback, options = {}, fallbackInView = unsupportedValue) {\n if (typeof window.IntersectionObserver === \"undefined\" && fallbackInView !== void 0) {\n const bounds = element.getBoundingClientRect();\n callback(fallbackInView, {\n isIntersecting: fallbackInView,\n target: element,\n intersectionRatio: typeof options.threshold === \"number\" ? options.threshold : 0,\n time: 0,\n boundingClientRect: bounds,\n intersectionRect: bounds,\n rootBounds: bounds\n });\n return () => {\n };\n }\n const { id, observer, elements } = createObserver(options);\n const callbacks = elements.get(element) || [];\n if (!elements.has(element)) {\n elements.set(element, callbacks);\n }\n callbacks.push(callback);\n observer.observe(element);\n return function unobserve() {\n callbacks.splice(callbacks.indexOf(callback), 1);\n if (callbacks.length === 0) {\n elements.delete(element);\n observer.unobserve(element);\n }\n if (elements.size === 0) {\n observer.disconnect();\n observerMap.delete(id);\n }\n };\n}\n\n// src/InView.tsx\nfunction isPlainChildren(props) {\n return typeof props.children !== \"function\";\n}\nvar InView = class extends React.Component {\n constructor(props) {\n super(props);\n __publicField(this, \"node\", null);\n __publicField(this, \"_unobserveCb\", null);\n __publicField(this, \"handleNode\", (node) => {\n if (this.node) {\n this.unobserve();\n if (!node && !this.props.triggerOnce && !this.props.skip) {\n this.setState({ inView: !!this.props.initialInView, entry: void 0 });\n }\n }\n this.node = node ? node : null;\n this.observeNode();\n });\n __publicField(this, \"handleChange\", (inView, entry) => {\n if (inView && this.props.triggerOnce) {\n this.unobserve();\n }\n if (!isPlainChildren(this.props)) {\n this.setState({ inView, entry });\n }\n if (this.props.onChange) {\n this.props.onChange(inView, entry);\n }\n });\n this.state = {\n inView: !!props.initialInView,\n entry: void 0\n };\n }\n componentDidMount() {\n this.unobserve();\n this.observeNode();\n }\n componentDidUpdate(prevProps) {\n if (prevProps.rootMargin !== this.props.rootMargin || prevProps.root !== this.props.root || prevProps.threshold !== this.props.threshold || prevProps.skip !== this.props.skip || prevProps.trackVisibility !== this.props.trackVisibility || prevProps.delay !== this.props.delay) {\n this.unobserve();\n this.observeNode();\n }\n }\n componentWillUnmount() {\n this.unobserve();\n }\n observeNode() {\n if (!this.node || this.props.skip) return;\n const {\n threshold,\n root,\n rootMargin,\n trackVisibility,\n delay,\n fallbackInView\n } = this.props;\n this._unobserveCb = observe(\n this.node,\n this.handleChange,\n {\n threshold,\n root,\n rootMargin,\n // @ts-ignore\n trackVisibility,\n // @ts-ignore\n delay\n },\n fallbackInView\n );\n }\n unobserve() {\n if (this._unobserveCb) {\n this._unobserveCb();\n this._unobserveCb = null;\n }\n }\n render() {\n const { children } = this.props;\n if (typeof children === \"function\") {\n const { inView, entry } = this.state;\n return children({ inView, entry, ref: this.handleNode });\n }\n const {\n as,\n triggerOnce,\n threshold,\n root,\n rootMargin,\n onChange,\n skip,\n trackVisibility,\n delay,\n initialInView,\n fallbackInView,\n ...props\n } = this.props;\n return React.createElement(\n as || \"div\",\n { ref: this.handleNode, ...props },\n children\n );\n }\n};\n\n// src/useInView.tsx\nimport * as React2 from \"react\";\nfunction useInView({\n threshold,\n delay,\n trackVisibility,\n rootMargin,\n root,\n triggerOnce,\n skip,\n initialInView,\n fallbackInView,\n onChange\n} = {}) {\n var _a;\n const [ref, setRef] = React2.useState(null);\n const callback = React2.useRef();\n const [state, setState] = React2.useState({\n inView: !!initialInView,\n entry: void 0\n });\n callback.current = onChange;\n React2.useEffect(\n () => {\n if (skip || !ref) return;\n let unobserve;\n unobserve = observe(\n ref,\n (inView, entry) => {\n setState({\n inView,\n entry\n });\n if (callback.current) callback.current(inView, entry);\n if (entry.isIntersecting && triggerOnce && unobserve) {\n unobserve();\n unobserve = void 0;\n }\n },\n {\n root,\n rootMargin,\n threshold,\n // @ts-ignore\n trackVisibility,\n // @ts-ignore\n delay\n },\n fallbackInView\n );\n return () => {\n if (unobserve) {\n unobserve();\n }\n };\n },\n // We break the rule here, because we aren't including the actual `threshold` variable\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n // If the threshold is an array, convert it to a string, so it won't change between renders.\n Array.isArray(threshold) ? threshold.toString() : threshold,\n ref,\n root,\n rootMargin,\n triggerOnce,\n skip,\n trackVisibility,\n fallbackInView,\n delay\n ]\n );\n const entryTarget = (_a = state.entry) == null ? void 0 : _a.target;\n const previousEntryTarget = React2.useRef();\n if (!ref && entryTarget && !triggerOnce && !skip && previousEntryTarget.current !== entryTarget) {\n previousEntryTarget.current = entryTarget;\n setState({\n inView: !!initialInView,\n entry: void 0\n });\n }\n const result = [setRef, state.inView, state.entry];\n result.ref = result[0];\n result.inView = result[1];\n result.entry = result[2];\n return result;\n}\nexport {\n InView,\n defaultFallbackInView,\n observe,\n useInView\n};\n//# sourceMappingURL=index.mjs.map","/*\n Rendered but hidden. Only show when visible\n*/\nimport { useEffect, useRef, useState } from 'preact/hooks';\nimport { useInView } from 'react-intersection-observer';\n\n// The sticky header, usually at the top\nconst TOP = 48;\n\nconst shazamIDs = {};\n\nexport default function LazyShazam({ id, children }) {\n const containerRef = useRef();\n const hasID = !!shazamIDs[id];\n const [visible, setVisible] = useState(false);\n const [visibleStart, setVisibleStart] = useState(hasID || false);\n\n const { ref } = useInView({\n root: null,\n rootMargin: `-${TOP}px 0px 0px 0px`,\n trackVisibility: true,\n delay: 1000,\n onChange: (inView) => {\n if (inView) {\n setVisible(true);\n if (id) shazamIDs[id] = true;\n }\n },\n triggerOnce: true,\n skip: visibleStart || visible,\n });\n\n useEffect(() => {\n if (!containerRef.current) return;\n const rect = containerRef.current.getBoundingClientRect();\n if (rect.bottom > TOP) {\n if (rect.top < window.innerHeight) {\n setVisible(true);\n } else {\n setVisibleStart(true);\n }\n if (id) shazamIDs[id] = true;\n }\n }, []);\n\n if (visibleStart) return children;\n\n return (\n <div\n ref={containerRef}\n class=\"shazam-container no-animation\"\n hidden={!visible}\n >\n <div ref={ref} class=\"shazam-container-inner\">\n {children}\n </div>\n </div>\n );\n}\n","import './translation-block.css';\n\nimport pRetry from 'p-retry';\nimport pThrottle from 'p-throttle';\nimport { useEffect, useRef, useState } from 'preact/hooks';\n\nimport sourceLanguages from '../data/lingva-source-languages';\nimport getTranslateTargetLanguage from '../utils/get-translate-target-language';\nimport localeCode2Text from '../utils/localeCode2Text';\nimport pmem from '../utils/pmem';\n\nimport Icon from './icon';\nimport LazyShazam from './lazy-shazam';\nimport Loader from './loader';\n\nconst { PHANPY_LINGVA_INSTANCES } = import.meta.env;\nconst LINGVA_INSTANCES = PHANPY_LINGVA_INSTANCES\n ? PHANPY_LINGVA_INSTANCES.split(/\\s+/)\n : [];\n\nconst throttle = pThrottle({\n limit: 1,\n interval: 2000,\n});\n\nlet currentLingvaInstance = 0;\n\nfunction _lingvaTranslate(text, source, target) {\n console.log('TRANSLATE', text, source, target);\n const fetchCall = () => {\n let instance = LINGVA_INSTANCES[currentLingvaInstance];\n return fetch(\n `https://${instance}/api/v1/${source}/${target}/${encodeURIComponent(\n text,\n )}`,\n )\n .then((res) => {\n if (!res.ok) throw new Error(res.statusText);\n return res.json();\n })\n .then((res) => {\n return {\n provider: 'lingva',\n content: res.translation,\n detectedSourceLanguage: res.info?.detectedSource,\n info: res.info,\n };\n });\n };\n return pRetry(fetchCall, {\n retries: 3,\n onFailedAttempt: (e) => {\n currentLingvaInstance =\n (currentLingvaInstance + 1) % LINGVA_INSTANCES.length;\n console.log(\n 'Retrying translation with another instance',\n currentLingvaInstance,\n );\n },\n });\n // return masto.v1.statuses.$select(id).translate({\n // lang: DEFAULT_LANG,\n // });\n}\nconst TRANSLATED_MAX_AGE = 1000 * 60 * 60; // 1 hour\nconst lingvaTranslate = pmem(_lingvaTranslate, {\n maxAge: TRANSLATED_MAX_AGE,\n});\nconst throttledLingvaTranslate = pmem(throttle(lingvaTranslate), {\n // I know, this is double-layered memoization\n maxAge: TRANSLATED_MAX_AGE,\n});\n\nfunction TranslationBlock({\n forceTranslate,\n sourceLanguage,\n onTranslate,\n text = '',\n mini,\n autoDetected,\n}) {\n const targetLang = getTranslateTargetLanguage(true);\n const [uiState, setUIState] = useState('default');\n const [pronunciationContent, setPronunciationContent] = useState(null);\n const [translatedContent, setTranslatedContent] = useState(null);\n const [detectedLang, setDetectedLang] = useState(null);\n const detailsRef = useRef();\n\n const sourceLangText = sourceLanguage\n ? localeCode2Text(sourceLanguage)\n : null;\n const targetLangText = localeCode2Text(targetLang);\n const apiSourceLang = useRef('auto');\n\n if (!onTranslate) {\n onTranslate = mini ? throttledLingvaTranslate : lingvaTranslate;\n }\n\n const translate = async () => {\n setUIState('loading');\n try {\n const { content, detectedSourceLanguage, provider, error, ...props } =\n await onTranslate(text, apiSourceLang.current, targetLang);\n if (content) {\n if (detectedSourceLanguage) {\n const detectedLangText = localeCode2Text(detectedSourceLanguage);\n setDetectedLang(detectedLangText);\n }\n if (provider === 'lingva') {\n const pronunciation = props?.info?.pronunciation?.query;\n if (pronunciation) {\n setPronunciationContent(pronunciation);\n }\n }\n setTranslatedContent(content);\n setUIState('default');\n if (!mini && content.trim() !== text.trim()) {\n detailsRef.current.open = true;\n detailsRef.current.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n });\n }\n } else {\n if (error) console.error(error);\n setUIState('error');\n }\n } catch (e) {\n console.error(e);\n setUIState('error');\n }\n };\n\n useEffect(() => {\n if (forceTranslate) {\n translate();\n }\n }, [forceTranslate]);\n\n if (mini) {\n if (\n !!translatedContent &&\n translatedContent.trim() !== text.trim() &&\n detectedLang !== targetLangText\n ) {\n return (\n <LazyShazam>\n <div class=\"status-translation-block-mini\">\n <Icon\n icon=\"translate\"\n alt={`Auto-translated from ${sourceLangText}`}\n />\n <output\n lang={targetLang}\n dir=\"auto\"\n title={pronunciationContent || ''}\n >\n {translatedContent}\n </output>\n </div>\n </LazyShazam>\n );\n }\n return null;\n }\n\n return (\n <div\n class=\"status-translation-block\"\n onClick={(e) => {\n e.preventDefault();\n }}\n >\n <details ref={detailsRef}>\n <summary>\n <button\n type=\"button\"\n onClick={async (e) => {\n e.preventDefault();\n e.stopPropagation();\n detailsRef.current.open = !detailsRef.current.open;\n if (uiState === 'loading') return;\n if (!translatedContent) translate();\n }}\n >\n <Icon icon=\"translate\" />{' '}\n <span>\n {uiState === 'loading'\n ? 'Translating…'\n : sourceLanguage && sourceLangText && !detectedLang\n ? autoDetected\n ? `Translate from ${sourceLangText} (auto-detected)`\n : `Translate from ${sourceLangText}`\n : `Translate`}\n </span>\n </button>\n </summary>\n <div class=\"translated-block\">\n <div class=\"translation-info insignificant\">\n <select\n class=\"translated-source-select\"\n disabled={uiState === 'loading'}\n onChange={(e) => {\n apiSourceLang.current = e.target.value;\n translate();\n }}\n >\n {sourceLanguages.map((l) => (\n <option value={l.code}>\n {l.code === 'auto' ? `Auto (${detectedLang ?? '…'})` : l.name}\n </option>\n ))}\n </select>{' '}\n <span>→ {targetLangText}</span>\n <Loader abrupt hidden={uiState !== 'loading'} />\n </div>\n {uiState === 'error' ? (\n <p class=\"ui-state\">Failed to translate</p>\n ) : (\n !!translatedContent && (\n <>\n <output class=\"translated-content\" lang={targetLang} dir=\"auto\">\n {translatedContent}\n </output>\n {!!pronunciationContent && (\n <output\n class=\"translated-pronunciation-content\"\n tabIndex={-1}\n onClick={(e) => {\n e.target.classList.toggle('expand');\n }}\n >\n {pronunciationContent}\n </output>\n )}\n </>\n )\n )}\n </div>\n </details>\n </div>\n );\n}\n\nexport default LINGVA_INSTANCES?.length ? TranslationBlock : () => null;\n","function promisifyRequest(request) {\n return new Promise((resolve, reject) => {\n // @ts-ignore - file size hacks\n request.oncomplete = request.onsuccess = () => resolve(request.result);\n // @ts-ignore - file size hacks\n request.onabort = request.onerror = () => reject(request.error);\n });\n}\nfunction createStore(dbName, storeName) {\n const request = indexedDB.open(dbName);\n request.onupgradeneeded = () => request.result.createObjectStore(storeName);\n const dbp = promisifyRequest(request);\n return (txMode, callback) => dbp.then((db) => callback(db.transaction(storeName, txMode).objectStore(storeName)));\n}\nlet defaultGetStoreFunc;\nfunction defaultGetStore() {\n if (!defaultGetStoreFunc) {\n defaultGetStoreFunc = createStore('keyval-store', 'keyval');\n }\n return defaultGetStoreFunc;\n}\n/**\n * Get a value by its key.\n *\n * @param key\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction get(key, customStore = defaultGetStore()) {\n return customStore('readonly', (store) => promisifyRequest(store.get(key)));\n}\n/**\n * Set a value with a key.\n *\n * @param key\n * @param value\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction set(key, value, customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => {\n store.put(value, key);\n return promisifyRequest(store.transaction);\n });\n}\n/**\n * Set multiple values at once. This is faster than calling set() multiple times.\n * It's also atomic – if one of the pairs can't be added, none will be added.\n *\n * @param entries Array of entries, where each entry is an array of `[key, value]`.\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction setMany(entries, customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => {\n entries.forEach((entry) => store.put(entry[1], entry[0]));\n return promisifyRequest(store.transaction);\n });\n}\n/**\n * Get multiple values by their keys\n *\n * @param keys\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction getMany(keys, customStore = defaultGetStore()) {\n return customStore('readonly', (store) => Promise.all(keys.map((key) => promisifyRequest(store.get(key)))));\n}\n/**\n * Update a value. This lets you see the old value and update it as an atomic operation.\n *\n * @param key\n * @param updater A callback that takes the old value and returns a new value.\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction update(key, updater, customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => \n // Need to create the promise manually.\n // If I try to chain promises, the transaction closes in browsers\n // that use a promise polyfill (IE10/11).\n new Promise((resolve, reject) => {\n store.get(key).onsuccess = function () {\n try {\n store.put(updater(this.result), key);\n resolve(promisifyRequest(store.transaction));\n }\n catch (err) {\n reject(err);\n }\n };\n }));\n}\n/**\n * Delete a particular key from the store.\n *\n * @param key\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction del(key, customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => {\n store.delete(key);\n return promisifyRequest(store.transaction);\n });\n}\n/**\n * Delete multiple keys at once.\n *\n * @param keys List of keys to delete.\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction delMany(keys, customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => {\n keys.forEach((key) => store.delete(key));\n return promisifyRequest(store.transaction);\n });\n}\n/**\n * Clear all values in the store.\n *\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction clear(customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => {\n store.clear();\n return promisifyRequest(store.transaction);\n });\n}\nfunction eachCursor(store, callback) {\n store.openCursor().onsuccess = function () {\n if (!this.result)\n return;\n callback(this.result);\n this.result.continue();\n };\n return promisifyRequest(store.transaction);\n}\n/**\n * Get all keys in the store.\n *\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction keys(customStore = defaultGetStore()) {\n return customStore('readonly', (store) => {\n // Fast path for modern browsers\n if (store.getAllKeys) {\n return promisifyRequest(store.getAllKeys());\n }\n const items = [];\n return eachCursor(store, (cursor) => items.push(cursor.key)).then(() => items);\n });\n}\n/**\n * Get all values in the store.\n *\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction values(customStore = defaultGetStore()) {\n return customStore('readonly', (store) => {\n // Fast path for modern browsers\n if (store.getAll) {\n return promisifyRequest(store.getAll());\n }\n const items = [];\n return eachCursor(store, (cursor) => items.push(cursor.value)).then(() => items);\n });\n}\n/**\n * Get all entries in the store. Each entry is an array of `[key, value]`.\n *\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction entries(customStore = defaultGetStore()) {\n return customStore('readonly', (store) => {\n // Fast path for modern browsers\n // (although, hopefully we'll get a simpler path some day)\n if (store.getAll && store.getAllKeys) {\n return Promise.all([\n promisifyRequest(store.getAllKeys()),\n promisifyRequest(store.getAll()),\n ]).then(([keys, values]) => keys.map((key, i) => [key, values[i]]));\n }\n const items = [];\n return customStore('readonly', (store) => eachCursor(store, (cursor) => items.push([cursor.key, cursor.value])).then(() => items));\n });\n}\n\nexport { clear, createStore, del, delMany, entries, get, getMany, keys, promisifyRequest, set, setMany, update, values };\n","import {\n clear,\n createStore,\n del,\n delMany,\n get,\n getMany,\n keys,\n set,\n} from 'idb-keyval';\n\nfunction initDB(dbName, storeName) {\n const store = createStore(dbName, storeName);\n return {\n set: (key, val) => set(key, val, store),\n get: (key) => get(key, store),\n getMany: (keys) => getMany(keys, store),\n del: (key) => del(key, store),\n delMany: (keys) => delMany(keys, store),\n clear: () => clear(store),\n keys: () => keys(store),\n };\n}\n\nexport default {\n drafts: initDB('drafts-db', 'drafts-store'),\n catchup: initDB('catchup-db', 'catchup-store'),\n};\n","import { api } from './api';\nimport { getCurrentAccountID } from './store-utils';\n\nexport async function fetchRelationships(accounts, relationshipsMap = {}) {\n if (!accounts?.length) return;\n const { masto } = api();\n\n const currentAccount = getCurrentAccountID();\n const uniqueAccountIds = accounts.reduce((acc, a) => {\n // 1. Ignore duplicate accounts\n // 2. Ignore accounts that are already inside relationshipsMap\n // 3. Ignore currently logged in account\n if (\n !acc.includes(a.id) &&\n !relationshipsMap[a.id] &&\n a.id !== currentAccount\n ) {\n acc.push(a.id);\n }\n return acc;\n }, []);\n if (!uniqueAccountIds.length) return null;\n\n try {\n const relationships = await masto.v1.accounts.relationships.fetch({\n id: uniqueAccountIds,\n });\n const newRelationshipsMap = relationships.reduce((acc, r) => {\n acc[r.id] = r;\n return acc;\n }, {});\n return newRelationshipsMap;\n } catch (e) {\n console.error(e);\n // It's okay to fail\n return null;\n }\n}\n","export class LiteYTEmbed extends HTMLElement {\n constructor() {\n super();\n this.isIframeLoaded = false;\n this.setupDom();\n }\n static get observedAttributes() {\n return ['videoid', 'playlistid'];\n }\n connectedCallback() {\n this.addEventListener('pointerover', LiteYTEmbed.warmConnections, {\n once: true,\n });\n this.addEventListener('click', () => this.addIframe());\n }\n get videoId() {\n return encodeURIComponent(this.getAttribute('videoid') || '');\n }\n set videoId(id) {\n this.setAttribute('videoid', id);\n }\n get playlistId() {\n return encodeURIComponent(this.getAttribute('playlistid') || '');\n }\n set playlistId(id) {\n this.setAttribute('playlistid', id);\n }\n get videoTitle() {\n return this.getAttribute('videotitle') || 'Video';\n }\n set videoTitle(title) {\n this.setAttribute('videotitle', title);\n }\n get videoPlay() {\n return this.getAttribute('videoPlay') || 'Play';\n }\n set videoPlay(name) {\n this.setAttribute('videoPlay', name);\n }\n get videoStartAt() {\n return this.getAttribute('videoStartAt') || '0';\n }\n get autoLoad() {\n return this.hasAttribute('autoload');\n }\n get noCookie() {\n return this.hasAttribute('nocookie');\n }\n get posterQuality() {\n return this.getAttribute('posterquality') || 'hqdefault';\n }\n get posterLoading() {\n return (this.getAttribute('posterloading') ||\n 'lazy');\n }\n get params() {\n return `start=${this.videoStartAt}&${this.getAttribute('params')}`;\n }\n set params(opts) {\n this.setAttribute('params', opts);\n }\n setupDom() {\n const shadowDom = this.attachShadow({ mode: 'open' });\n let nonce = '';\n if (window.liteYouTubeNonce) {\n nonce = `nonce=\"${window.liteYouTubeNonce}\"`;\n }\n shadowDom.innerHTML = `\n <style ${nonce}>\n :host {\n contain: content;\n display: block;\n position: relative;\n width: 100%;\n padding-bottom: calc(100% / (16 / 9));\n }\n\n @media (max-width: 40em) {\n :host([short]) {\n padding-bottom: calc(100% / (9 / 16));\n }\n }\n\n #frame, #fallbackPlaceholder, iframe {\n position: absolute;\n width: 100%;\n height: 100%;\n left: 0;\n }\n\n #frame {\n cursor: pointer;\n }\n\n #fallbackPlaceholder {\n object-fit: cover;\n }\n\n #frame::before {\n content: '';\n display: block;\n position: absolute;\n top: 0;\n background-image: linear-gradient(180deg, #111 -20%, transparent 90%);\n height: 60px;\n width: 100%;\n z-index: 1;\n }\n\n #playButton {\n width: 68px;\n height: 48px;\n background-color: transparent;\n background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 68 48\"><path d=\"M66.52 7.74c-.78-2.93-2.49-5.41-5.42-6.19C55.79.13 34 0 34 0S12.21.13 6.9 1.55c-2.93.78-4.63 3.26-5.42 6.19C.06 13.05 0 24 0 24s.06 10.95 1.48 16.26c.78 2.93 2.49 5.41 5.42 6.19C12.21 47.87 34 48 34 48s21.79-.13 27.1-1.55c2.93-.78 4.64-3.26 5.42-6.19C67.94 34.95 68 24 68 24s-.06-10.95-1.48-16.26z\" fill=\"red\"/><path d=\"M45 24 27 14v20\" fill=\"white\"/></svg>');\n z-index: 1;\n border: 0;\n border-radius: inherit;\n }\n\n #playButton:before {\n content: '';\n border-style: solid;\n border-width: 11px 0 11px 19px;\n border-color: transparent transparent transparent #fff;\n }\n\n #playButton,\n #playButton:before {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate3d(-50%, -50%, 0);\n cursor: inherit;\n }\n\n /* Post-click styles */\n .activated {\n cursor: unset;\n }\n\n #frame.activated::before,\n #frame.activated > #playButton {\n display: none;\n }\n </style>\n <div id=\"frame\">\n <picture>\n <source id=\"webpPlaceholder\" type=\"image/webp\">\n <source id=\"jpegPlaceholder\" type=\"image/jpeg\">\n <img id=\"fallbackPlaceholder\" referrerpolicy=\"origin\" loading=\"lazy\">\n </picture>\n <button id=\"playButton\"></button>\n </div>\n `;\n this.domRefFrame = shadowDom.querySelector('#frame');\n this.domRefImg = {\n fallback: shadowDom.querySelector('#fallbackPlaceholder'),\n webp: shadowDom.querySelector('#webpPlaceholder'),\n jpeg: shadowDom.querySelector('#jpegPlaceholder'),\n };\n this.domRefPlayButton = shadowDom.querySelector('#playButton');\n }\n setupComponent() {\n this.initImagePlaceholder();\n this.domRefPlayButton.setAttribute('aria-label', `${this.videoPlay}: ${this.videoTitle}`);\n this.setAttribute('title', `${this.videoPlay}: ${this.videoTitle}`);\n if (this.autoLoad || this.isYouTubeShort()) {\n this.initIntersectionObserver();\n }\n }\n attributeChangedCallback(name, oldVal, newVal) {\n switch (name) {\n case 'videoid':\n case 'playlistid':\n case 'videoTitle':\n case 'videoPlay': {\n if (oldVal !== newVal) {\n this.setupComponent();\n if (this.domRefFrame.classList.contains('activated')) {\n this.domRefFrame.classList.remove('activated');\n this.shadowRoot.querySelector('iframe').remove();\n this.isIframeLoaded = false;\n }\n }\n break;\n }\n default:\n break;\n }\n }\n addIframe(isIntersectionObserver = false) {\n if (!this.isIframeLoaded) {\n let autoplay = isIntersectionObserver ? 0 : 1;\n const wantsNoCookie = this.noCookie ? '-nocookie' : '';\n let embedTarget;\n if (this.playlistId) {\n embedTarget = `?listType=playlist&list=${this.playlistId}&`;\n }\n else {\n embedTarget = `${this.videoId}?`;\n }\n if (this.isYouTubeShort()) {\n this.params = `loop=1&mute=1&modestbranding=1&playsinline=1&rel=0&enablejsapi=1&playlist=${this.videoId}`;\n autoplay = 1;\n }\n const iframeHTML = `\n<iframe frameborder=\"0\" title=\"${this.videoTitle}\"\n allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen\n src=\"https://www.youtube${wantsNoCookie}.com/embed/${embedTarget}autoplay=${autoplay}&${this.params}\"\n></iframe>`;\n this.domRefFrame.insertAdjacentHTML('beforeend', iframeHTML);\n this.domRefFrame.classList.add('activated');\n this.isIframeLoaded = true;\n this.attemptShortAutoPlay();\n this.dispatchEvent(new CustomEvent('liteYoutubeIframeLoaded', {\n detail: {\n videoId: this.videoId,\n },\n bubbles: true,\n cancelable: true,\n }));\n }\n }\n initImagePlaceholder() {\n const posterUrlWebp = `https://i.ytimg.com/vi_webp/${this.videoId}/${this.posterQuality}.webp`;\n const posterUrlJpeg = `https://i.ytimg.com/vi/${this.videoId}/${this.posterQuality}.jpg`;\n this.domRefImg.fallback.loading = this.posterLoading;\n this.domRefImg.webp.srcset = posterUrlWebp;\n this.domRefImg.jpeg.srcset = posterUrlJpeg;\n this.domRefImg.fallback.src = posterUrlJpeg;\n this.domRefImg.fallback.setAttribute('aria-label', `${this.videoPlay}: ${this.videoTitle}`);\n this.domRefImg?.fallback?.setAttribute('alt', `${this.videoPlay}: ${this.videoTitle}`);\n }\n initIntersectionObserver() {\n const options = {\n root: null,\n rootMargin: '0px',\n threshold: 0,\n };\n const observer = new IntersectionObserver((entries, observer) => {\n entries.forEach(entry => {\n if (entry.isIntersecting && !this.isIframeLoaded) {\n LiteYTEmbed.warmConnections();\n this.addIframe(true);\n observer.unobserve(this);\n }\n });\n }, options);\n observer.observe(this);\n }\n attemptShortAutoPlay() {\n if (this.isYouTubeShort()) {\n setTimeout(() => {\n this.shadowRoot\n .querySelector('iframe')\n ?.contentWindow?.postMessage('{\"event\":\"command\",\"func\":\"' + 'playVideo' + '\",\"args\":\"\"}', '*');\n }, 2000);\n }\n }\n isYouTubeShort() {\n return (this.getAttribute('short') === '' &&\n window.matchMedia('(max-width: 40em)').matches);\n }\n static addPrefetch(kind, url) {\n const linkElem = document.createElement('link');\n linkElem.rel = kind;\n linkElem.href = url;\n linkElem.crossOrigin = 'true';\n document.head.append(linkElem);\n }\n static warmConnections() {\n if (LiteYTEmbed.isPreconnected || window.liteYouTubeIsPreconnected)\n return;\n LiteYTEmbed.addPrefetch('preconnect', 'https://i.ytimg.com/');\n LiteYTEmbed.addPrefetch('preconnect', 'https://s.ytimg.com');\n LiteYTEmbed.addPrefetch('preconnect', 'https://www.youtube.com');\n LiteYTEmbed.addPrefetch('preconnect', 'https://www.google.com');\n LiteYTEmbed.addPrefetch('preconnect', 'https://googleads.g.doubleclick.net');\n LiteYTEmbed.addPrefetch('preconnect', 'https://static.doubleclick.net');\n LiteYTEmbed.isPreconnected = true;\n window.liteYouTubeIsPreconnected = true;\n }\n}\nLiteYTEmbed.isPreconnected = false;\ncustomElements.define('lite-youtube', LiteYTEmbed);\n//# sourceMappingURL=lite-youtube.js.map","const digitLookup = new Uint8Array(128);\nfor (let i = 0; i < 83; i++) {\n digitLookup[\n '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz#$%*+,-.:;=?@[]^_{|}~'.charCodeAt(\n i,\n )\n ] = i;\n}\nconst decode83 = (str, start, end) => {\n let value = 0;\n while (start < end) {\n value *= 83;\n value += digitLookup[str.charCodeAt(start++)];\n }\n return value;\n};\n\nconst pow = Math.pow;\nconst PI = Math.PI;\nconst PI2 = PI * 2;\n\nconst d = 3294.6;\nconst e = 269.025;\nconst sRGBToLinear = (value) =>\n value > 10.31475 ? pow(value / e + 0.052132, 2.4) : value / d;\n\nconst linearTosRGB = (v) =>\n ~~(v > 0.00001227 ? e * pow(v, 0.416666) - 13.025 : v * d + 1);\n\nconst signSqr = (x) => (x < 0 ? -1 : 1) * x * x;\n\n/**\n * Fast approximate cosine implementation\n * Based on FTrig https://github.com/netcell/FTrig\n */\nconst fastCos = (x) => {\n x += PI / 2;\n while (x > PI) {\n x -= PI2;\n }\n const cos = 1.27323954 * x - 0.405284735 * signSqr(x);\n return 0.225 * (signSqr(cos) - cos) + cos;\n};\n\n/**\n * Extracts average color from BlurHash image\n * @param {string} blurHash BlurHash image string\n * @returns {[number, number, number]}\n */\nexport function getBlurHashAverageColor(blurHash) {\n const val = decode83(blurHash, 2, 6);\n return [val >> 16, (val >> 8) & 255, val & 255];\n}\n\n/**\n * Decodes BlurHash image\n * @param {string} blurHash BlurHash image string\n * @param {number} width Output image width\n * @param {number} height Output image height\n * @param {?number} punch\n * @returns {Uint8ClampedArray}\n */\nexport function decodeBlurHash(blurHash, width, height, punch) {\n const sizeFlag = decode83(blurHash, 0, 1);\n const numX = (sizeFlag % 9) + 1;\n const numY = ~~(sizeFlag / 9) + 1;\n const size = numX * numY;\n\n let i = 0,\n j = 0,\n x = 0,\n y = 0,\n r = 0,\n g = 0,\n b = 0,\n basis = 0,\n basisY = 0,\n colorIndex = 0,\n pixelIndex = 0,\n value = 0;\n\n const maximumValue = ((decode83(blurHash, 1, 2) + 1) / 13446) * (punch | 1);\n\n const colors = new Float64Array(size * 3);\n\n const averageColor = getBlurHashAverageColor(blurHash);\n for (i = 0; i < 3; i++) {\n colors[i] = sRGBToLinear(averageColor[i]);\n }\n\n for (i = 1; i < size; i++) {\n value = decode83(blurHash, 4 + i * 2, 6 + i * 2);\n colors[i * 3] = signSqr(~~(value / 361) - 9) * maximumValue;\n colors[i * 3 + 1] = signSqr((~~(value / 19) % 19) - 9) * maximumValue;\n colors[i * 3 + 2] = signSqr((value % 19) - 9) * maximumValue;\n }\n\n const cosinesY = new Float64Array(numY * height);\n const cosinesX = new Float64Array(numX * width);\n for (j = 0; j < numY; j++) {\n for (y = 0; y < height; y++) {\n cosinesY[j * height + y] = fastCos((PI * y * j) / height);\n }\n }\n for (i = 0; i < numX; i++) {\n for (x = 0; x < width; x++) {\n cosinesX[i * width + x] = fastCos((PI * x * i) / width);\n }\n }\n\n const bytesPerRow = width * 4;\n const pixels = new Uint8ClampedArray(bytesPerRow * height);\n\n for (y = 0; y < height; y++) {\n for (x = 0; x < width; x++) {\n r = g = b = 0;\n for (j = 0; j < numY; j++) {\n basisY = cosinesY[j * height + y];\n for (i = 0; i < numX; i++) {\n basis = cosinesX[i * width + x] * basisY;\n colorIndex = (i + j * numX) * 3;\n r += colors[colorIndex] * basis;\n g += colors[colorIndex + 1] * basis;\n b += colors[colorIndex + 2] * basis;\n }\n }\n\n pixelIndex = 4 * x + y * bytesPerRow;\n pixels[pixelIndex] = linearTosRGB(r);\n pixels[pixelIndex + 1] = linearTosRGB(g);\n pixels[pixelIndex + 2] = linearTosRGB(b);\n pixels[pixelIndex + 3] = 255; // alpha\n }\n }\n return pixels;\n}\n","/**\n * @param {string[]} splittedHtml\n * @param {{ char?: string; count?: number}} options\n * @returns {string}\n */\nconst addIndentation = (splittedHtml, options = {}) => {\n const char = options.char || ' '\n const count = options.count || 2\n\n let level = 0\n const opened = []\n\n return splittedHtml.reverse().reduce((indented, elTag) => {\n if (opened.length\n && level\n && opened[level]\n /* if current element tag is the same as previously opened one */\n && opened[level] === elTag.substring(1, opened[level].length + 1)\n ) {\n opened.splice(level, 1)\n level--\n }\n\n const indentation = char.repeat(level ? level * count : 0)\n\n const newIndented = [\n `${indentation}${elTag}`,\n ...indented,\n ]\n\n // if current element tag is closing tag\n // add it to opened elements\n if (elTag.substring(0, 2) === '</') {\n level++\n opened[level] = elTag.substring(2, elTag.length - 1)\n }\n\n return newIndented\n }, []).join('\\n')\n}\n\nmodule.exports = addIndentation\n","/**\n * @param {string} nonFormattedString Any non formatted string\n * @returns {string[]} Array of strings separated on new lines\n */\nconst removeEmptyLines = (nonFormattedString) => (\n // Replace\n // - 1 or more spaces or tabs at the start of line\n // - 1 or more spaces or tabs at the end of line\n // - empty lines\n // with empty string\n nonFormattedString.trim().replace(/(^(\\s|\\t)+|(( |\\t)+)$)/gm, '')\n)\n\n/**\n * @param {string} markup\n * @returns {string[]} Array of strings splitted on new lines without empty lines\n */\nconst mergeAttributesWithElements = (markup) => {\n const splittedMarkup = removeEmptyLines(markup).split('\\n')\n\n const mergedLines = []\n let currentElement = ''\n for (let i = 0; i < splittedMarkup.length; i += 1) {\n const line = splittedMarkup[i]\n\n // If line is closing element/tag separate closing tag from rest of the line with space\n if (line.endsWith('/>')) {\n mergedLines.push(`${currentElement}${line.slice(0, -2)} />`)\n currentElement = ''\n // eslint-disable-next-line no-continue\n continue\n }\n\n if (line.endsWith('>')) {\n mergedLines.push(`${currentElement}${\n line.startsWith('>') || line.startsWith('<') ? '' : ' '\n }${line}`)\n currentElement = ''\n // eslint-disable-next-line no-continue\n continue\n }\n\n currentElement += currentElement.length ? ` ${line}` : line\n }\n\n return mergedLines\n}\n\nmodule.exports = {\n mergeAttributesWithElements,\n removeEmptyLines,\n}\n","const addIndentation = require('./utils/addIndentation')\nconst { mergeAttributesWithElements } = require('./utils/toLines')\n\n/**\n * @param {string} markup\n * @param {{ char?: string; count?: number }} options\n * @returns {string}\n */\nconst prettify = (markup, options = {}) => {\n const splitted = mergeAttributesWithElements(markup)\n\n return addIndentation(splitted, options)\n}\n\nmodule.exports = prettify\n","import { useRef as s, useCallback as h, useEffect as g } from \"react\";\nvar l = /* @__PURE__ */ ((e) => (e.Mouse = \"mouse\", e.Touch = \"touch\", e.Pointer = \"pointer\", e))(l || {}), d = /* @__PURE__ */ ((e) => (e.CancelledByMovement = \"cancelled-by-movement\", e.CancelledByRelease = \"cancelled-by-release\", e.CancelledOutsideElement = \"cancelled-outside-element\", e))(d || {});\nconst A = () => typeof window == \"object\" ? window?.PointerEvent ?? null : null, z = () => typeof window == \"object\" ? window?.TouchEvent ?? null : null;\nfunction U(e) {\n const { nativeEvent: t } = e, u = z();\n return u && t instanceof u || \"touches\" in e;\n}\nfunction X(e) {\n const t = A();\n return e.nativeEvent instanceof MouseEvent && !(t && e.nativeEvent instanceof t);\n}\nfunction Y(e) {\n const { nativeEvent: t } = e;\n if (!t)\n return !1;\n const u = A();\n return u && t instanceof u || \"pointerId\" in t;\n}\nfunction R(e) {\n return X(e) || U(e) || Y(e);\n}\nfunction j(e) {\n return U(e) ? {\n x: e.touches[0].pageX,\n y: e.touches[0].pageY\n } : X(e) || Y(e) ? {\n x: e.pageX,\n y: e.pageY\n } : null;\n}\nfunction G(e) {\n return {\n target: e.target,\n currentTarget: e.currentTarget,\n nativeEvent: e,\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n persist: () => {\n }\n };\n}\nfunction J(e, {\n threshold: t = 400,\n captureEvent: u = !1,\n detect: y = l.Pointer,\n cancelOnMovement: w = !1,\n cancelOutsideElement: v = !0,\n filterEvents: p,\n onStart: M,\n onMove: C,\n onFinish: L,\n onCancel: b\n} = {}) {\n const P = s(!1), c = s(!1), I = s(), a = s(), T = s(e), f = s(null), E = h(\n (n) => (r) => {\n c.current || R(r) && (p !== void 0 && !p(r) || (u && r.persist(), M?.(r, { context: n }), f.current = j(r), c.current = !0, I.current = r.currentTarget, a.current = setTimeout(() => {\n T.current && (T.current(r, { context: n }), P.current = !0);\n }, t)));\n },\n [u, p, M, t]\n ), i = h(\n (n) => (r, o) => {\n R(r) && c.current && (f.current = null, u && r.persist(), P.current ? L?.(r, { context: n }) : c.current && b?.(r, { context: n, reason: o ?? d.CancelledByRelease }), P.current = !1, c.current = !1, a.current !== void 0 && clearTimeout(a.current));\n },\n [u, L, b]\n ), m = h(\n (n) => (r) => {\n if (C?.(r, { context: n }), w !== !1 && f.current) {\n const o = j(r);\n if (o) {\n const B = w === !0 ? 25 : w, D = {\n x: Math.abs(o.x - f.current.x),\n y: Math.abs(o.y - f.current.y)\n };\n (D.x > B || D.y > B) && i(n)(r, d.CancelledByMovement);\n }\n }\n },\n [i, w, C]\n ), q = h(\n (n) => {\n if (e === null)\n return {};\n switch (y) {\n case l.Mouse: {\n const r = {\n onMouseDown: E(n),\n onMouseMove: m(n),\n onMouseUp: i(n)\n };\n return v && (r.onMouseLeave = (o) => {\n i(n)(o, d.CancelledOutsideElement);\n }), r;\n }\n case l.Touch:\n return {\n onTouchStart: E(n),\n onTouchMove: m(n),\n onTouchEnd: i(n)\n };\n case l.Pointer: {\n const r = {\n onPointerDown: E(n),\n onPointerMove: m(n),\n onPointerUp: i(n)\n };\n return v && (r.onPointerLeave = (o) => i(n)(o, d.CancelledOutsideElement)), r;\n }\n }\n },\n [e, i, v, y, m, E]\n );\n return g(() => {\n if (!window)\n return;\n function n(r) {\n const o = G(r);\n i()(o);\n }\n return window.addEventListener(\"mouseup\", n), window.addEventListener(\"touchend\", n), window.addEventListener(\"pointerup\", n), () => {\n window.removeEventListener(\"mouseup\", n), window.removeEventListener(\"touchend\", n), window.removeEventListener(\"pointerup\", n);\n };\n }, [i]), g(\n () => () => {\n a.current !== void 0 && clearTimeout(a.current);\n },\n []\n ), g(() => {\n T.current = e;\n }, [e]), q;\n}\nexport {\n d as LongPressCallbackReason,\n l as LongPressEventType,\n J as useLongPress\n};\n","import { useState } from 'preact/hooks';\n\nimport shortenNumber from '../utils/shorten-number';\n\nimport EmojiText from './emoji-text';\nimport Icon from './icon';\nimport RelativeTime from './relative-time';\n\nexport default function Poll({\n poll,\n lang,\n readOnly,\n refresh = () => {},\n votePoll = () => {},\n}) {\n const [uiState, setUIState] = useState('default');\n const {\n expired,\n expiresAt,\n id,\n multiple,\n options,\n ownVotes,\n voted,\n votersCount,\n votesCount,\n emojis,\n } = poll;\n const expiresAtDate = !!expiresAt && new Date(expiresAt); // Update poll at point of expiry\n // NOTE: Disable this because setTimeout runs immediately if delay is too large\n // https://stackoverflow.com/a/56718027/20838\n // useEffect(() => {\n // let timeout;\n // if (!expired && expiresAtDate) {\n // const ms = expiresAtDate.getTime() - Date.now() + 1; // +1 to give it a little buffer\n // if (ms > 0) {\n // timeout = setTimeout(() => {\n // setUIState('loading');\n // (async () => {\n // // await refresh();\n // setUIState('default');\n // })();\n // }, ms);\n // }\n // }\n // return () => {\n // clearTimeout(timeout);\n // };\n // }, [expired, expiresAtDate]);\n\n const pollVotesCount = votersCount || votesCount;\n let roundPrecision = 0;\n\n if (pollVotesCount <= 1000) {\n roundPrecision = 0;\n } else if (pollVotesCount <= 10000) {\n roundPrecision = 1;\n } else if (pollVotesCount <= 100000) {\n roundPrecision = 2;\n }\n\n const [showResults, setShowResults] = useState(false);\n const optionsHaveVoteCounts = options.every((o) => o.votesCount !== null);\n\n return (\n <div\n lang={lang}\n dir=\"auto\"\n class={`poll ${readOnly ? 'read-only' : ''} ${\n uiState === 'loading' ? 'loading' : ''\n }`}\n >\n {(showResults && optionsHaveVoteCounts) || voted || expired ? (\n <>\n <div class=\"poll-options\">\n {options.map((option, i) => {\n const { title, votesCount: optionVotesCount } = option;\n const percentage = pollVotesCount\n ? ((optionVotesCount / pollVotesCount) * 100).toFixed(\n roundPrecision,\n )\n : 0; // check if current poll choice is the leading one\n\n const isLeading =\n optionVotesCount > 0 &&\n optionVotesCount ===\n Math.max(...options.map((o) => o.votesCount));\n return (\n <div\n key={`${i}-${title}-${optionVotesCount}`}\n class={`poll-option poll-result ${\n isLeading ? 'poll-option-leading' : ''\n }`}\n style={{\n '--percentage': `${percentage}%`,\n }}\n >\n <div class=\"poll-option-title\">\n <span>\n <EmojiText text={title} emojis={emojis} />\n </span>\n {voted && ownVotes.includes(i) && (\n <>\n {' '}\n <Icon icon=\"check-circle\" />\n </>\n )}\n </div>\n <div\n class=\"poll-option-votes\"\n title={`${optionVotesCount} vote${\n optionVotesCount === 1 ? '' : 's'\n }`}\n >\n {percentage}%\n </div>\n </div>\n );\n })}\n </div>\n {!expired && !voted && (\n <button\n class=\"poll-vote-button plain2\"\n disabled={uiState === 'loading'}\n onClick={(e) => {\n e.preventDefault();\n setShowResults(false);\n }}\n >\n <Icon icon=\"arrow-left\" size=\"s\" /> Hide results\n </button>\n )}\n </>\n ) : (\n <form\n onSubmit={async (e) => {\n e.preventDefault();\n const form = e.target;\n const formData = new FormData(form);\n const choices = [];\n formData.forEach((value, key) => {\n if (key === 'poll') {\n choices.push(value);\n }\n });\n if (!choices.length) return;\n setUIState('loading');\n await votePoll(choices);\n setUIState('default');\n }}\n >\n <div class=\"poll-options\">\n {options.map((option, i) => {\n const { title } = option;\n return (\n <div class=\"poll-option\">\n <label class=\"poll-label\">\n <input\n type={multiple ? 'checkbox' : 'radio'}\n name=\"poll\"\n value={i}\n disabled={uiState === 'loading'}\n readOnly={readOnly}\n />\n <span class=\"poll-option-title\">\n <EmojiText text={title} emojis={emojis} />\n </span>\n </label>\n </div>\n );\n })}\n </div>\n {!readOnly && (\n <button\n class=\"poll-vote-button\"\n type=\"submit\"\n disabled={uiState === 'loading'}\n >\n Vote\n </button>\n )}\n </form>\n )}\n <p class=\"poll-meta\">\n {!expired && !readOnly && (\n <button\n type=\"button\"\n class=\"plain small\"\n disabled={uiState === 'loading'}\n onClick={(e) => {\n e.preventDefault();\n setUIState('loading');\n\n (async () => {\n await refresh();\n setUIState('default');\n })();\n }}\n title=\"Refresh\"\n >\n <Icon icon=\"refresh\" alt=\"Refresh\" />\n </button>\n )}\n {!voted && !expired && !readOnly && optionsHaveVoteCounts && (\n <button\n type=\"button\"\n class=\"plain small\"\n disabled={uiState === 'loading'}\n onClick={(e) => {\n e.preventDefault();\n setShowResults(!showResults);\n }}\n title={showResults ? 'Hide results' : 'Show results'}\n >\n <Icon\n icon={showResults ? 'eye-open' : 'eye-close'}\n alt={showResults ? 'Hide results' : 'Show results'}\n />{' '}\n </button>\n )}\n {!expired && !readOnly && ' '}\n <span title={votesCount}>{shortenNumber(votesCount)}</span> vote\n {votesCount === 1 ? '' : 's'}\n {!!votersCount && votersCount !== votesCount && (\n <>\n {' '}\n • <span title={votersCount}>\n {shortenNumber(votersCount)}\n </span>{' '}\n voter\n {votersCount === 1 ? '' : 's'}\n </>\n )}{' '}\n • {expired ? 'Ended' : 'Ending'}{' '}\n {!!expiresAtDate && <RelativeTime datetime={expiresAtDate} />}\n </p>{' '}\n </div>\n );\n}\n","import { createContext } from 'preact';\n\nconst FilterContext = createContext();\nexport default FilterContext;\n","import mem from './mem';\nimport { getCurrentAccountID } from './store-utils';\n\nfunction _isFiltered(filtered, filterContext) {\n if (!filtered?.length) return false;\n const appliedFilters = filtered.filter((f) => {\n const { filter } = f;\n const hasContext = filter.context.includes(filterContext);\n if (!hasContext) return false;\n if (!filter.expiresAt) return hasContext;\n return new Date(filter.expiresAt) > new Date();\n });\n if (!appliedFilters.length) return false;\n const isHidden = appliedFilters.some((f) => f.filter.filterAction === 'hide');\n if (isHidden)\n return {\n action: 'hide',\n };\n const isWarn = appliedFilters.some((f) => f.filter.filterAction === 'warn');\n if (isWarn) {\n const filterTitles = appliedFilters.map((f) => f.filter.title);\n return {\n action: 'warn',\n titles: filterTitles,\n titlesStr: filterTitles.join(' • '),\n };\n }\n return false;\n}\nexport const isFiltered = mem(_isFiltered);\n\nexport function filteredItem(item, filterContext, currentAccountID) {\n const { filtered } = item;\n if (!filtered?.length) return true;\n const isSelf = currentAccountID && item.account?.id === currentAccountID;\n if (isSelf) return true;\n const filterState = isFiltered(filtered, filterContext);\n if (!filterState) return true;\n if (filterState.action === 'hide') return false;\n // item._filtered = filterState;\n return true;\n}\nexport function filteredItems(items, filterContext) {\n if (!items?.length) return [];\n if (!filterContext) return items;\n const currentAccountID = getCurrentAccountID();\n return items.filter((item) =>\n filteredItem(item, filterContext, currentAccountID),\n );\n}\n","const div = document.createElement('div');\nexport default function htmlContentLength(html) {\n if (!html) return 0;\n div.innerHTML = html;\n // .invisible spans for links\n // e.g. <span class=\"invisible\">https://</span>mastodon.social\n div.querySelectorAll('.invisible').forEach((el) => {\n el.remove();\n });\n return div.innerText.length;\n}\n","export const supportsTTS = 'speechSynthesis' in window;\n\nexport function speak(text, lang) {\n if (!supportsTTS) return;\n try {\n if (speechSynthesis.speaking) {\n speechSynthesis.cancel();\n }\n const utterance = new SpeechSynthesisUtterance(text);\n if (lang) utterance.lang = lang;\n speechSynthesis.speak(utterance);\n } catch (e) {\n alert(e);\n }\n}\n","import getHTMLText from './getHTMLText';\n\nfunction statusPeek(status) {\n const { spoilerText, content, poll, mediaAttachments } = status;\n let text = '';\n if (spoilerText?.trim()) {\n text += spoilerText;\n } else {\n text += getHTMLText(content);\n }\n text = text.trim();\n if (poll?.options?.length) {\n text += `\\n\\n📊:\\n${poll.options\n .map((o) => `${poll.multiple ? '▪️' : '•'} ${o.title}`)\n .join('\\n')}`;\n }\n if (mediaAttachments?.length) {\n text +=\n ' ' +\n mediaAttachments\n .map(\n (m) =>\n ({\n image: '🖼️',\n gifv: '🎞️',\n video: '📹',\n audio: '🎵',\n unknown: '',\n }[m.type] || ''),\n )\n .join('');\n }\n return text;\n}\n\nexport default statusPeek;\n","import{useRef as r,useEffect as n,useMemo as t,useReducer as e,useCallback as u}from\"react\";function c(e,u,c){var i=this,a=r(null),o=r(0),f=r(null),l=r([]),v=r(),m=r(),d=r(e),g=r(!0);d.current=e;var p=\"undefined\"!=typeof window,w=!u&&0!==u&&p;if(\"function\"!=typeof e)throw new TypeError(\"Expected a function\");u=+u||0;var s=!!(c=c||{}).leading,x=!(\"trailing\"in c)||!!c.trailing,h=\"maxWait\"in c,y=\"debounceOnServer\"in c&&!!c.debounceOnServer,F=h?Math.max(+c.maxWait||0,u):null;n(function(){return g.current=!0,function(){g.current=!1}},[]);var A=t(function(){var r=function(r){var n=l.current,t=v.current;return l.current=v.current=null,o.current=r,m.current=d.current.apply(t,n)},n=function(r,n){w&&cancelAnimationFrame(f.current),f.current=w?requestAnimationFrame(r):setTimeout(r,n)},t=function(r){if(!g.current)return!1;var n=r-a.current;return!a.current||n>=u||n<0||h&&r-o.current>=F},e=function(n){return f.current=null,x&&l.current?r(n):(l.current=v.current=null,m.current)},c=function r(){var c=Date.now();if(t(c))return e(c);if(g.current){var i=u-(c-a.current),f=h?Math.min(i,F-(c-o.current)):i;n(r,f)}},A=function(){if(p||y){var e=Date.now(),d=t(e);if(l.current=[].slice.call(arguments),v.current=i,a.current=e,d){if(!f.current&&g.current)return o.current=a.current,n(c,u),s?r(a.current):m.current;if(h)return n(c,u),r(a.current)}return f.current||n(c,u),m.current}};return A.cancel=function(){f.current&&(w?cancelAnimationFrame(f.current):clearTimeout(f.current)),o.current=0,l.current=a.current=v.current=f.current=null},A.isPending=function(){return!!f.current},A.flush=function(){return f.current?e(Date.now()):m.current},A},[s,h,u,F,x,w,p,y]);return A}function i(r,n){return r===n}function a(r,n){return n}function o(n,t,o){var f=o&&o.equalityFn||i,l=e(a,n),v=l[0],m=l[1],d=c(u(function(r){return m(r)},[m]),t,o),g=r(n);return f(g.current,n)||(d(n),g.current=n),f(v,n)&&d.cancel(),[v,d]}function f(r,n,t){var e=void 0===t?{}:t,u=e.leading,i=e.trailing;return c(r,n,{maxWait:n,leading:void 0===u||u,trailing:void 0===i||i})}export{o as useDebounce,c as useDebouncedCallback,f as useThrottledCallback};\n//# sourceMappingURL=index.module.js.map\n","import { useRef, useEffect, useCallback, useState, useMemo } from 'react';\n\n// This could've been more streamlined with internal state instead of abusing\n// refs to such extent, but then composing hooks and components could not opt out of unnecessary renders.\nfunction useResolvedElement(subscriber, refOrElement) {\n var lastReportRef = useRef(null);\n var refOrElementRef = useRef(null);\n refOrElementRef.current = refOrElement;\n var cbElementRef = useRef(null); // Calling re-evaluation after each render without using a dep array,\n // as the ref object's current value could've changed since the last render.\n\n useEffect(function () {\n evaluateSubscription();\n });\n var evaluateSubscription = useCallback(function () {\n var cbElement = cbElementRef.current;\n var refOrElement = refOrElementRef.current; // Ugly ternary. But smaller than an if-else block.\n\n var element = cbElement ? cbElement : refOrElement ? refOrElement instanceof Element ? refOrElement : refOrElement.current : null;\n\n if (lastReportRef.current && lastReportRef.current.element === element && lastReportRef.current.subscriber === subscriber) {\n return;\n }\n\n if (lastReportRef.current && lastReportRef.current.cleanup) {\n lastReportRef.current.cleanup();\n }\n\n lastReportRef.current = {\n element: element,\n subscriber: subscriber,\n // Only calling the subscriber, if there's an actual element to report.\n // Setting cleanup to undefined unless a subscriber returns one, as an existing cleanup function would've been just called.\n cleanup: element ? subscriber(element) : undefined\n };\n }, [subscriber]); // making sure we call the cleanup function on unmount\n\n useEffect(function () {\n return function () {\n if (lastReportRef.current && lastReportRef.current.cleanup) {\n lastReportRef.current.cleanup();\n lastReportRef.current = null;\n }\n };\n }, []);\n return useCallback(function (element) {\n cbElementRef.current = element;\n evaluateSubscription();\n }, [evaluateSubscription]);\n}\n\n// We're only using the first element of the size sequences, until future versions of the spec solidify on how\n// exactly it'll be used for fragments in multi-column scenarios:\n// From the spec:\n// > The box size properties are exposed as FrozenArray in order to support elements that have multiple fragments,\n// > which occur in multi-column scenarios. However the current definitions of content rect and border box do not\n// > mention how those boxes are affected by multi-column layout. In this spec, there will only be a single\n// > ResizeObserverSize returned in the FrozenArray, which will correspond to the dimensions of the first column.\n// > A future version of this spec will extend the returned FrozenArray to contain the per-fragment size information.\n// (https://drafts.csswg.org/resize-observer/#resize-observer-entry-interface)\n//\n// Also, testing these new box options revealed that in both Chrome and FF everything is returned in the callback,\n// regardless of the \"box\" option.\n// The spec states the following on this:\n// > This does not have any impact on which box dimensions are returned to the defined callback when the event\n// > is fired, it solely defines which box the author wishes to observe layout changes on.\n// (https://drafts.csswg.org/resize-observer/#resize-observer-interface)\n// I'm not exactly clear on what this means, especially when you consider a later section stating the following:\n// > This section is non-normative. An author may desire to observe more than one CSS box.\n// > In this case, author will need to use multiple ResizeObservers.\n// (https://drafts.csswg.org/resize-observer/#resize-observer-interface)\n// Which is clearly not how current browser implementations behave, and seems to contradict the previous quote.\n// For this reason I decided to only return the requested size,\n// even though it seems we have access to results for all box types.\n// This also means that we get to keep the current api, being able to return a simple { width, height } pair,\n// regardless of box option.\nfunction extractSize(entry, boxProp, sizeType) {\n if (!entry[boxProp]) {\n if (boxProp === \"contentBoxSize\") {\n // The dimensions in `contentBoxSize` and `contentRect` are equivalent according to the spec.\n // See the 6th step in the description for the RO algorithm:\n // https://drafts.csswg.org/resize-observer/#create-and-populate-resizeobserverentry-h\n // > Set this.contentRect to logical this.contentBoxSize given target and observedBox of \"content-box\".\n // In real browser implementations of course these objects differ, but the width/height values should be equivalent.\n return entry.contentRect[sizeType === \"inlineSize\" ? \"width\" : \"height\"];\n }\n\n return undefined;\n } // A couple bytes smaller than calling Array.isArray() and just as effective here.\n\n\n return entry[boxProp][0] ? entry[boxProp][0][sizeType] : // TS complains about this, because the RO entry type follows the spec and does not reflect Firefox's current\n // behaviour of returning objects instead of arrays for `borderBoxSize` and `contentBoxSize`.\n // @ts-ignore\n entry[boxProp][sizeType];\n}\n\nfunction useResizeObserver(opts) {\n if (opts === void 0) {\n opts = {};\n }\n\n // Saving the callback as a ref. With this, I don't need to put onResize in the\n // effect dep array, and just passing in an anonymous function without memoising\n // will not reinstantiate the hook's ResizeObserver.\n var onResize = opts.onResize;\n var onResizeRef = useRef(undefined);\n onResizeRef.current = onResize;\n var round = opts.round || Math.round; // Using a single instance throughout the hook's lifetime\n\n var resizeObserverRef = useRef();\n\n var _useState = useState({\n width: undefined,\n height: undefined\n }),\n size = _useState[0],\n setSize = _useState[1]; // In certain edge cases the RO might want to report a size change just after\n // the component unmounted.\n\n\n var didUnmount = useRef(false);\n useEffect(function () {\n didUnmount.current = false;\n return function () {\n didUnmount.current = true;\n };\n }, []); // Using a ref to track the previous width / height to avoid unnecessary renders.\n\n var previous = useRef({\n width: undefined,\n height: undefined\n }); // This block is kinda like a useEffect, only it's called whenever a new\n // element could be resolved based on the ref option. It also has a cleanup\n // function.\n\n var refCallback = useResolvedElement(useCallback(function (element) {\n // We only use a single Resize Observer instance, and we're instantiating it on demand, only once there's something to observe.\n // This instance is also recreated when the `box` option changes, so that a new observation is fired if there was a previously observed element with a different box option.\n if (!resizeObserverRef.current || resizeObserverRef.current.box !== opts.box || resizeObserverRef.current.round !== round) {\n resizeObserverRef.current = {\n box: opts.box,\n round: round,\n instance: new ResizeObserver(function (entries) {\n var entry = entries[0];\n var boxProp = opts.box === \"border-box\" ? \"borderBoxSize\" : opts.box === \"device-pixel-content-box\" ? \"devicePixelContentBoxSize\" : \"contentBoxSize\";\n var reportedWidth = extractSize(entry, boxProp, \"inlineSize\");\n var reportedHeight = extractSize(entry, boxProp, \"blockSize\");\n var newWidth = reportedWidth ? round(reportedWidth) : undefined;\n var newHeight = reportedHeight ? round(reportedHeight) : undefined;\n\n if (previous.current.width !== newWidth || previous.current.height !== newHeight) {\n var newSize = {\n width: newWidth,\n height: newHeight\n };\n previous.current.width = newWidth;\n previous.current.height = newHeight;\n\n if (onResizeRef.current) {\n onResizeRef.current(newSize);\n } else {\n if (!didUnmount.current) {\n setSize(newSize);\n }\n }\n }\n })\n };\n }\n\n resizeObserverRef.current.instance.observe(element, {\n box: opts.box\n });\n return function () {\n if (resizeObserverRef.current) {\n resizeObserverRef.current.instance.unobserve(element);\n }\n };\n }, [opts.box, round]), opts.ref);\n return useMemo(function () {\n return {\n ref: refCallback,\n width: size.width,\n height: size.height\n };\n }, [refCallback, size.width, size.height]);\n}\n\nexport { useResizeObserver as default };\n","import { useRef } from 'preact/hooks';\nimport { useThrottledCallback } from 'use-debounce';\nimport useResizeObserver from 'use-resize-observer';\n\nexport default function useTruncated({ className = 'truncated' } = {}) {\n const ref = useRef();\n const onResize = useThrottledCallback(({ height }) => {\n if (ref.current) {\n const { scrollHeight } = ref.current;\n let truncated = scrollHeight > height;\n if (truncated) {\n const { height: _height, maxHeight } = getComputedStyle(ref.current);\n const computedHeight = parseInt(maxHeight || _height, 10);\n truncated = scrollHeight > computedHeight;\n }\n ref.current.classList.toggle(className, truncated);\n }\n }, 300);\n useResizeObserver({\n ref,\n box: 'border-box',\n onResize,\n });\n return ref;\n}\n","export default {\n public: 'earth',\n unlisted: 'group',\n private: 'lock',\n direct: 'message',\n};\n","export var styleRoot = 'kvfysmfp';\nexport var styleChild = 'ufhsfnkm';\nexport var styles = \".\".concat(styleRoot, \"{overflow:hidden;touch-action:none}.\").concat(styleChild, \"{transform-origin: 0 0}\");\n","var isSsr = typeof window === 'undefined';\nexport var isTouch = function () {\n return !isSsr && ('ontouchstart' in window || navigator.maxTouchPoints > 0);\n};\nexport var make2dTransformValue = function (_a) {\n var x = _a.x, y = _a.y, scale = _a.scale;\n return \"scale(\".concat(scale, \") translate(\").concat(x, \"px, \").concat(y, \"px)\");\n};\nexport var make3dTransformValue = function (_a) {\n var x = _a.x, y = _a.y, scale = _a.scale;\n return \"scale3d(\".concat(scale, \",\").concat(scale, \", 1) translate3d(\").concat(x, \"px, \").concat(y, \"px, 0)\");\n};\nexport var hasTranslate3DSupport = function () {\n var css = !isSsr && window.CSS;\n return css && css.supports && css.supports('transform', 'translate3d(0,0,0)');\n};\n","var min = Math.min, max = Math.max;\nexport function getOffsetBounds(_a) {\n var containerDimension = _a.containerDimension, childDimension = _a.childDimension, padding = _a.padding, centerContained = _a.centerContained;\n var diff = childDimension - containerDimension;\n if (diff + 2 * padding <= 0 && centerContained) {\n return [diff / 2, diff / 2];\n }\n else {\n return [min(diff + padding, 0) - padding, max(0, diff + padding)];\n }\n}\n","import { __assign, __extends } from \"tslib\";\nimport React, { Component, createRef, Children, cloneElement } from 'react';\nimport { styleRoot, styleChild, styles } from './styles.css';\nimport { isTouch } from '../utils';\nimport { getOffsetBounds } from './getOffsetBounds';\nvar classnames = function (base, other) {\n return other ? \"\".concat(base, \" \").concat(other) : base;\n};\nvar abs = Math.abs, min = Math.min, sqrt = Math.sqrt;\nvar isSsr = typeof window === 'undefined';\nvar isMac = isSsr ? false : /(Mac)/i.test(navigator.platform);\nvar isDragInteraction = function (i) { return i === 'drag'; };\nvar isZoomInteraction = function (i) { return i === 'zoom'; };\nvar isZoomGesture = function (wheelEvent) { return isMac && wheelEvent.ctrlKey; };\nvar cancelEvent = function (event) {\n event.stopPropagation();\n event.preventDefault();\n};\nvar getDistance = function (a, b) {\n var x = a.x - b.x;\n var y = a.y - b.y;\n return sqrt(x * x + y * y);\n};\nvar calculateScale = function (startTouches, endTouches) {\n var startDistance = getDistance(startTouches[0], startTouches[1]);\n var endDistance = getDistance(endTouches[0], endTouches[1]);\n return endDistance / startDistance;\n};\nvar isCloseTo = function (value, expected) {\n return value > expected - 0.01 && value < expected + 0.01;\n};\nvar swing = function (p) { return -Math.cos(p * Math.PI) / 2 + 0.5; };\nvar getPointByPageCoordinates = function (touch) { return ({\n x: touch.pageX,\n y: touch.pageY,\n}); };\nvar getPageCoordinatesByTouches = function (touches) {\n return Array.from(touches).map(getPointByPageCoordinates);\n};\nvar sum = function (a, b) { return a + b; };\nvar getVectorAvg = function (vectors) { return ({\n x: vectors.map(function (_a) {\n var x = _a.x;\n return x;\n }).reduce(sum, 0) / vectors.length,\n y: vectors.map(function (_a) {\n var y = _a.y;\n return y;\n }).reduce(sum, 0) / vectors.length,\n}); };\nvar clamp = function (min, max, value) {\n return value < min ? min : value > max ? max : value;\n};\nvar shouldInterceptWheel = function (event) {\n return !(event.ctrlKey || event.metaKey);\n};\nvar getElementSize = function (element) {\n if (element) {\n var offsetWidth = element.offsetWidth, offsetHeight = element.offsetHeight;\n // Any DOMElement\n if (offsetWidth && offsetHeight) {\n return { width: offsetWidth, height: offsetHeight };\n }\n // Svg support\n var style = getComputedStyle(element);\n var width = parseFloat(style.width);\n var height = parseFloat(style.height);\n if (height && width) {\n return { width: width, height: height };\n }\n }\n return { width: 0, height: 0 };\n};\nvar calculateVelocity = function (startPoint, endPoint) { return ({\n x: endPoint.x - startPoint.x,\n y: endPoint.y - startPoint.y,\n}); };\nvar comparePoints = function (p1, p2) { return p1.x === p2.x && p1.y === p2.y; };\nvar noup = function () { };\nvar zeroPoint = { x: 0, y: 0 };\nvar PinchZoom = /** @class */ (function (_super) {\n __extends(PinchZoom, _super);\n function PinchZoom() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this._prevDragMovePoint = null;\n _this._containerObserver = null;\n _this._fingers = 0;\n _this._firstMove = true;\n _this._initialOffset = __assign({}, zeroPoint);\n _this._interaction = null;\n _this._isDoubleTap = false;\n _this._isOffsetsSet = false;\n _this._lastDragPosition = null;\n _this._lastScale = 1;\n _this._lastTouchStart = 0;\n _this._lastZoomCenter = null;\n _this._listenMouseMove = false;\n _this._nthZoom = 0;\n _this._offset = __assign({}, zeroPoint);\n _this._startOffset = __assign({}, zeroPoint);\n _this._startTouches = null;\n _this._updatePlaned = false;\n _this._wheelTimeOut = null;\n _this._zoomFactor = 1;\n _this._initialZoomFactor = 1;\n _this._draggingPoint = __assign({}, zeroPoint);\n // It help reduce behavior difference between touch and mouse events\n _this._ignoreNextClick = false;\n // @ts-ignore\n _this._containerRef = createRef();\n _this._handleClick = function (clickEvent) {\n if (_this._ignoreNextClick) {\n _this._ignoreNextClick = false;\n clickEvent.stopPropagation();\n }\n };\n _this._onResize = function () {\n var _a;\n if ((_a = _this._containerRef) === null || _a === void 0 ? void 0 : _a.current) {\n _this._updateInitialZoomFactor();\n _this._setupOffsets();\n _this._update();\n }\n };\n _this._handlerOnTouchEnd = _this._handlerIfEnable(function (touchEndEvent) {\n _this._fingers = touchEndEvent.touches.length;\n if (_this.props.shouldCancelHandledTouchEndEvents &&\n (isZoomInteraction(_this._interaction) ||\n (isDragInteraction(_this._interaction) &&\n (_this._startOffset.x !== _this._offset.x ||\n _this._startOffset.y !== _this._offset.y)))) {\n cancelEvent(touchEndEvent);\n }\n if (isDragInteraction(_this._interaction) && !_this._enoughToDrag()) {\n _this._handleClick(touchEndEvent);\n }\n _this._updateInteraction(touchEndEvent);\n });\n _this._handlerOnTouchStart = _this._handlerIfEnable(function (touchStartEvent) {\n _this._firstMove = true;\n _this._fingers = touchStartEvent.touches.length;\n _this._detectDoubleTap(touchStartEvent);\n });\n _this._handlerOnTouchMove = _this._handlerIfEnable(function (touchMoveEvent) {\n if (_this._isDoubleTap) {\n return;\n }\n _this._collectInertia(touchMoveEvent);\n if (_this._firstMove) {\n _this._updateInteraction(touchMoveEvent);\n if (_this._interaction) {\n cancelEvent(touchMoveEvent);\n }\n _this._startOffset = __assign({}, _this._offset);\n _this._startTouches = getPageCoordinatesByTouches(touchMoveEvent.touches);\n }\n else {\n if (isZoomInteraction(_this._interaction)) {\n if (_this._startTouches &&\n _this._startTouches.length === 2 &&\n touchMoveEvent.touches.length === 2) {\n _this._handleZoom(touchMoveEvent, calculateScale(_this._startTouches, getPageCoordinatesByTouches(touchMoveEvent.touches)));\n }\n }\n else if (isDragInteraction(_this._interaction)) {\n _this._handleDrag(touchMoveEvent);\n }\n if (_this._interaction) {\n cancelEvent(touchMoveEvent);\n _this._update();\n }\n }\n _this._firstMove = false;\n });\n _this._handlerWheel = function (wheelEvent) {\n if (_this.props.shouldInterceptWheel(wheelEvent)) {\n return;\n }\n cancelEvent(wheelEvent);\n var pageX = wheelEvent.pageX, pageY = wheelEvent.pageY, deltaY = wheelEvent.deltaY, deltaMode = wheelEvent.deltaMode;\n var scaleDelta = 1;\n if (isZoomGesture(wheelEvent) || deltaMode === 1) {\n scaleDelta = 15;\n }\n var likeTouchEvent = {\n touches: [\n // @ts-ignore\n { pageX: pageX, pageY: pageY },\n ],\n };\n var center = _this._getOffsetByFirstTouch(likeTouchEvent);\n var dScale = deltaY * scaleDelta;\n _this._stopAnimation();\n _this._scaleTo(_this._zoomFactor - dScale / _this.props.wheelScaleFactor, center);\n _this._update();\n clearTimeout(\n // @ts-ignore\n _this._wheelTimeOut);\n _this._wheelTimeOut = setTimeout(function () { return _this._sanitize(); }, 100);\n };\n // @ts-ignore\n _this._handlers = _this.props.isTouch()\n ? [\n ['touchstart', _this._handlerOnTouchStart],\n ['touchend', _this._handlerOnTouchEnd],\n ['touchmove', _this._handlerOnTouchMove],\n ]\n : [\n [\n 'mousemove',\n _this.simulate(_this._handlerOnTouchMove),\n _this.props._document,\n ],\n [\n 'mouseup',\n _this.simulate(_this._handlerOnTouchEnd),\n _this.props._document,\n ],\n ['mousedown', _this.simulate(_this._handlerOnTouchStart)],\n ['click', _this._handleClick],\n ['wheel', _this._handlerWheel],\n ];\n return _this;\n }\n PinchZoom.prototype._handleDragStart = function (event) {\n this._ignoreNextClick = true;\n this.props.onDragStart();\n this._stopAnimation();\n this._resetInertia();\n this._lastDragPosition = null;\n this._hasInteraction = true;\n this._draggingPoint = this._offset;\n this._handleDrag(event);\n };\n PinchZoom.prototype._handleDrag = function (event) {\n var touch = this._getOffsetByFirstTouch(event);\n if (this._enoughToDrag()) {\n this._drag(touch, this._lastDragPosition);\n }\n else {\n this._virtualDrag(touch, this._lastDragPosition);\n }\n this._offset = this._sanitizeOffset(this._offset);\n this._lastDragPosition = touch;\n };\n PinchZoom.prototype._resetInertia = function () {\n this._velocity = null;\n this._prevDragMovePoint = null;\n };\n PinchZoom.prototype._realizeInertia = function () {\n var _this = this;\n var _a = this.props, inertiaFriction = _a.inertiaFriction, inertia = _a.inertia;\n if (!inertia || !this._velocity) {\n return;\n }\n var _b = this._velocity, x = _b.x, y = _b.y;\n if (x || y) {\n this._stopAnimation();\n this._resetInertia();\n var renderFrame = function () {\n x *= inertiaFriction;\n y *= inertiaFriction;\n if (!x && !y) {\n return _this._stopAnimation();\n }\n var prevOffset = __assign({}, _this._offset);\n _this._addOffset({ x: x, y: y });\n _this._offset = _this._sanitizeOffset(_this._offset);\n if (comparePoints(prevOffset, _this._offset)) {\n return _this._stopAnimation();\n }\n _this._update({ isAnimation: true });\n };\n this._animate(renderFrame, { duration: 9999 });\n }\n };\n PinchZoom.prototype._collectInertia = function (_a) {\n var touches = _a.touches;\n if (!this.props.inertia) {\n return;\n }\n var currentCoordinates = getPageCoordinatesByTouches(touches)[0];\n var prevPoint = this._prevDragMovePoint;\n if (prevPoint) {\n this._velocity = calculateVelocity(currentCoordinates, prevPoint);\n }\n this._prevDragMovePoint = currentCoordinates;\n };\n PinchZoom.prototype._handleDragEnd = function () {\n this.props.onDragEnd();\n this._end();\n this._realizeInertia();\n };\n PinchZoom.prototype._handleZoomStart = function () {\n this.props.onZoomStart();\n this._stopAnimation();\n this._lastScale = 1;\n this._nthZoom = 0;\n this._lastZoomCenter = null;\n this._hasInteraction = true;\n };\n PinchZoom.prototype._handleZoom = function (event, newScale) {\n var touchCenter = getVectorAvg(this._getOffsetTouches(event));\n var scale = newScale / this._lastScale;\n this._lastScale = newScale;\n // The first touch events are thrown away since they are not precise\n this._nthZoom += 1;\n if (this._nthZoom > 3) {\n this._scale(scale, touchCenter);\n this._drag(touchCenter, this._lastZoomCenter);\n if (this.props.enforceBoundsDuringZoom) {\n this._offset = this._sanitizeOffset(this._offset);\n }\n }\n this._lastZoomCenter = touchCenter;\n };\n PinchZoom.prototype._handleZoomEnd = function () {\n this.props.onZoomEnd();\n this._end();\n };\n PinchZoom.prototype._handleDoubleTap = function (event) {\n var _this = this;\n if (this._hasInteraction || this.props.tapZoomFactor === 0) {\n return;\n }\n var needZoomOut = (this.props.doubleTapZoomOutOnMaxScale &&\n this._zoomFactor === this.props.maxZoom) ||\n (this.props.doubleTapToggleZoom && this._zoomFactor > 1);\n this.props.onDoubleTap();\n this._ignoreNextClick = true;\n var zoomFactor = this._zoomFactor + this.props.tapZoomFactor;\n var startZoomFactor = this._zoomFactor;\n var updateProgress = function (progress) {\n _this._scaleTo(startZoomFactor + progress * (zoomFactor - startZoomFactor), center);\n };\n var center = this._getOffsetByFirstTouch(event);\n this._isDoubleTap = true;\n if (startZoomFactor > zoomFactor) {\n center = this._getCurrentZoomCenter();\n }\n needZoomOut ? this._zoomOutAnimation() : this._animate(updateProgress);\n };\n PinchZoom.prototype._computeInitialOffset = function () {\n var rect = this._getContainerRect();\n var _a = this._getChildSize(), width = _a.width, height = _a.height;\n var x = -abs(width * this._getInitialZoomFactor() - rect.width) / 2;\n var y = -abs(height * this._getInitialZoomFactor() - rect.height) / 2;\n this._initialOffset = { x: x, y: y };\n };\n PinchZoom.prototype._resetOffset = function () {\n this._offset = __assign({}, this._initialOffset);\n };\n PinchZoom.prototype._setupOffsets = function () {\n if (this.props.setOffsetsOnce && this._isOffsetsSet) {\n return;\n }\n this._isOffsetsSet = true;\n this._computeInitialOffset();\n this._resetOffset();\n };\n PinchZoom.prototype._sanitizeOffset = function (offset) {\n var rect = this._getContainerRect();\n var _a = this._getChildSize(), width = _a.width, height = _a.height;\n var elWidth = width * this._getInitialZoomFactor() * this._zoomFactor;\n var elHeight = height * this._getInitialZoomFactor() * this._zoomFactor;\n var _b = getOffsetBounds({\n containerDimension: rect.width,\n childDimension: elWidth,\n padding: this.props.horizontalPadding,\n centerContained: this.props.centerContained,\n }), minOffsetX = _b[0], maxOffsetX = _b[1];\n var _c = getOffsetBounds({\n containerDimension: rect.height,\n childDimension: elHeight,\n padding: this.props.verticalPadding,\n centerContained: this.props.centerContained,\n }), minOffsetY = _c[0], maxOffsetY = _c[1];\n return {\n x: clamp(minOffsetX, maxOffsetX, offset.x),\n y: clamp(minOffsetY, maxOffsetY, offset.y),\n };\n };\n PinchZoom.prototype.alignCenter = function (options) {\n var _this = this;\n var _a = __assign({ duration: 250, animated: true }, options), __x = _a.x, __y = _a.y, scale = _a.scale, animated = _a.animated, duration = _a.duration;\n // Bug-Fix: https://github.com/retyui/react-quick-pinch-zoom/issues/58\n var x = __x * this._initialZoomFactor;\n var y = __y * this._initialZoomFactor;\n var startZoomFactor = this._zoomFactor;\n var startOffset = __assign({}, this._offset);\n var rect = this._getContainerRect();\n var containerCenter = { x: rect.width / 2, y: rect.height / 2 };\n this._zoomFactor = 1;\n this._offset = { x: -(containerCenter.x - x), y: -(containerCenter.y - y) };\n this._scaleTo(scale, containerCenter);\n this._stopAnimation();\n if (!animated) {\n return this._update();\n }\n var diffZoomFactor = this._zoomFactor - startZoomFactor;\n var diffOffset = {\n x: this._offset.x - startOffset.x,\n y: this._offset.y - startOffset.y,\n };\n this._zoomFactor = startZoomFactor;\n this._offset = __assign({}, startOffset);\n var updateFrame = function (progress) {\n var x = startOffset.x + diffOffset.x * progress;\n var y = startOffset.y + diffOffset.y * progress;\n _this._zoomFactor = startZoomFactor + diffZoomFactor * progress;\n _this._offset = _this._sanitizeOffset({ x: x, y: y });\n _this._update();\n };\n this._animate(updateFrame, {\n callback: function () { return _this._sanitize(); },\n duration: duration,\n });\n };\n PinchZoom.prototype.scaleTo = function (options) {\n var _this = this;\n var _a = __assign({ duration: 250, animated: true }, options), x = _a.x, y = _a.y, scale = _a.scale, animated = _a.animated, duration = _a.duration;\n var startZoomFactor = this._zoomFactor;\n var startOffset = __assign({}, this._offset);\n this._zoomFactor = 1;\n this._offset = { x: 0, y: 0 };\n this._scaleTo(scale, { x: x, y: y });\n this._stopAnimation();\n if (!animated) {\n return this._update();\n }\n var diffZoomFactor = this._zoomFactor - startZoomFactor;\n var diffOffset = {\n x: this._offset.x - startOffset.x,\n y: this._offset.y - startOffset.y,\n };\n this._zoomFactor = startZoomFactor;\n this._offset = __assign({}, startOffset);\n var updateFrame = function (progress) {\n var x = startOffset.x + diffOffset.x * progress;\n var y = startOffset.y + diffOffset.y * progress;\n _this._zoomFactor = startZoomFactor + diffZoomFactor * progress;\n _this._offset = { x: x, y: y };\n _this._update();\n };\n this._animate(updateFrame, { callback: function () { return _this._sanitize(); }, duration: duration });\n };\n PinchZoom.prototype._scaleTo = function (zoomFactor, center) {\n this._scale(zoomFactor / this._zoomFactor, center);\n this._offset = this._sanitizeOffset(this._offset);\n };\n PinchZoom.prototype._scale = function (scale, center) {\n scale = this._scaleZoomFactor(scale);\n this._addOffset({\n x: (scale - 1) * (center.x + this._offset.x),\n y: (scale - 1) * (center.y + this._offset.y),\n });\n this.props.onZoomUpdate();\n };\n PinchZoom.prototype._scaleZoomFactor = function (scale) {\n var originalZoomFactor = this._zoomFactor;\n this._zoomFactor *= scale;\n this._zoomFactor = clamp(this.props.minZoom, this.props.maxZoom, this._zoomFactor);\n return this._zoomFactor / originalZoomFactor;\n };\n PinchZoom.prototype._canDrag = function () {\n return this.props.draggableUnZoomed || !isCloseTo(this._zoomFactor, 1);\n };\n PinchZoom.prototype._drag = function (center, lastCenter) {\n if (lastCenter) {\n var y = -(center.y - lastCenter.y);\n var x = -(center.x - lastCenter.x);\n if (!this.props.lockDragAxis) {\n this._addOffset({\n x: x,\n y: y,\n });\n }\n else {\n // lock scroll to position that was changed the most\n if (abs(x) > abs(y)) {\n this._addOffset({\n x: x,\n y: 0,\n });\n }\n else {\n this._addOffset({\n y: y,\n x: 0,\n });\n }\n }\n this.props.onDragUpdate();\n }\n };\n PinchZoom.prototype._virtualDrag = function (center, lastCenter) {\n if (lastCenter) {\n var y = -(center.y - lastCenter.y);\n var x = -(center.x - lastCenter.x);\n this._draggingPoint = {\n x: x + this._draggingPoint.x,\n y: y + this._draggingPoint.y,\n };\n }\n };\n PinchZoom.prototype._addOffset = function (offset) {\n var _a = this._offset, x = _a.x, y = _a.y;\n this._offset = {\n x: x + offset.x,\n y: y + offset.y,\n };\n };\n PinchZoom.prototype._sanitize = function () {\n if (this._zoomFactor < this.props.zoomOutFactor) {\n this._resetInertia();\n this._zoomOutAnimation();\n }\n else if (this._isInsaneOffset()) {\n this._sanitizeOffsetAnimation();\n }\n };\n PinchZoom.prototype._isInsaneOffset = function () {\n var offset = this._offset;\n var sanitizedOffset = this._sanitizeOffset(offset);\n return sanitizedOffset.x !== offset.x || sanitizedOffset.y !== offset.y;\n };\n PinchZoom.prototype._sanitizeOffsetAnimation = function () {\n var _this = this;\n var targetOffset = this._sanitizeOffset(this._offset);\n var startOffset = __assign({}, this._offset);\n var updateProgress = function (progress) {\n var x = startOffset.x + progress * (targetOffset.x - startOffset.x);\n var y = startOffset.y + progress * (targetOffset.y - startOffset.y);\n _this._offset = { x: x, y: y };\n _this._update();\n };\n this._animate(updateProgress);\n };\n PinchZoom.prototype._zoomOutAnimation = function () {\n var _this = this;\n if (this._zoomFactor === 1) {\n return;\n }\n var startZoomFactor = this._zoomFactor;\n var zoomFactor = 1;\n var center = this._getCurrentZoomCenter();\n var updateProgress = function (progress) {\n var scaleFactor = startZoomFactor + progress * (zoomFactor - startZoomFactor);\n _this._scaleTo(scaleFactor, center);\n };\n this._animate(updateProgress);\n };\n PinchZoom.prototype._getInitialZoomFactor = function () {\n return this._initialZoomFactor;\n };\n PinchZoom.prototype._getCurrentZoomCenter = function () {\n var _a = this._offset, x = _a.x, y = _a.y;\n var offsetLeft = x - this._initialOffset.x;\n var offsetTop = y - this._initialOffset.y;\n return {\n x: -1 * x - offsetLeft / (1 / this._zoomFactor - 1),\n y: -1 * y - offsetTop / (1 / this._zoomFactor - 1),\n };\n };\n PinchZoom.prototype._getOffsetByFirstTouch = function (event) {\n return this._getOffsetTouches(event)[0];\n };\n PinchZoom.prototype._getOffsetTouches = function (event) {\n var _document = this.props._document;\n var _html = _document.documentElement;\n var _body = _document.body;\n var _a = this._getContainerRect(), top = _a.top, left = _a.left;\n var scrollTop = _html.scrollTop || _body.scrollTop;\n var scrollLeft = _html.scrollLeft || _body.scrollLeft;\n var posTop = top + scrollTop;\n var posLeft = left + scrollLeft;\n return getPageCoordinatesByTouches(event.touches).map(function (_a) {\n var x = _a.x, y = _a.y;\n return ({\n x: x - posLeft,\n y: y - posTop,\n });\n });\n };\n PinchZoom.prototype._animate = function (frameFn, options) {\n var _this = this;\n var startTime = new Date().getTime();\n var _a = __assign({ timeFn: swing, callback: function () { }, duration: this.props.animationDuration }, options), timeFn = _a.timeFn, callback = _a.callback, duration = _a.duration;\n var renderFrame = function () {\n if (!_this._inAnimation) {\n return;\n }\n var frameTime = new Date().getTime() - startTime;\n var progress = frameTime / duration;\n if (frameTime >= duration) {\n frameFn(1);\n _this._stopAnimation();\n callback();\n _this._update();\n }\n else {\n progress = timeFn(progress);\n frameFn(progress);\n _this._update({ isAnimation: true });\n requestAnimationFrame(renderFrame);\n }\n };\n this._inAnimation = true;\n requestAnimationFrame(renderFrame);\n };\n PinchZoom.prototype._stopAnimation = function () {\n this._inAnimation = false;\n };\n PinchZoom.prototype._end = function () {\n this._hasInteraction = false;\n this._sanitize();\n this._update();\n };\n PinchZoom.prototype._getContainerRect = function () {\n var div = this._containerRef.current;\n return div.getBoundingClientRect();\n };\n PinchZoom.prototype._getChildSize = function () {\n var div = this._containerRef.current;\n return getElementSize(div === null || div === void 0 ? void 0 : div.firstElementChild);\n };\n PinchZoom.prototype._updateInitialZoomFactor = function () {\n var rect = this._getContainerRect();\n var size = this._getChildSize();\n var xZoomFactor = rect.width / size.width;\n var yZoomFactor = rect.height / size.height;\n this._initialZoomFactor = min(xZoomFactor, yZoomFactor);\n };\n PinchZoom.prototype._bindEvents = function () {\n var _this = this;\n var div = this._containerRef.current;\n if (window.ResizeObserver) {\n this._containerObserver = new ResizeObserver(this._onResize);\n this._containerObserver.observe(div);\n }\n else {\n window.addEventListener('resize', this._onResize);\n }\n this._handlers.forEach(function (_a) {\n var eventName = _a[0], fn = _a[1], target = _a[2];\n (target || div).addEventListener(eventName, fn, true);\n });\n Array.from(div.querySelectorAll('img')).forEach(function (img) {\n return img.addEventListener('load', _this._onResize);\n });\n };\n PinchZoom.prototype._unSubscribe = function () {\n var _this = this;\n var div = this._containerRef.current;\n if (this._containerObserver) {\n this._containerObserver.disconnect();\n this._containerObserver = null;\n }\n window.removeEventListener('resize', this._onResize);\n this._handlers.forEach(function (_a) {\n var eventName = _a[0], fn = _a[1], target = _a[2];\n (target || div).removeEventListener(eventName, fn, true);\n });\n Array.from(div.querySelectorAll('img')).forEach(function (img) {\n return img.removeEventListener('load', _this._onResize);\n });\n };\n PinchZoom.prototype._update = function (options) {\n var _this = this;\n if (this._updatePlaned) {\n return;\n }\n var updateFrame = function () {\n var scale = _this._getInitialZoomFactor() * _this._zoomFactor;\n var x = -_this._offset.x / scale;\n var y = -_this._offset.y / scale;\n _this.props.onUpdate({ scale: scale, x: x, y: y });\n };\n if (options === null || options === void 0 ? void 0 : options.isAnimation) {\n return updateFrame();\n }\n this._updatePlaned = true;\n requestAnimationFrame(function () {\n _this._updatePlaned = false;\n updateFrame();\n });\n };\n PinchZoom.prototype._handlerIfEnable = function (fn) {\n var _this = this;\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (_this.props.enabled) {\n fn.apply(void 0, args);\n }\n };\n };\n PinchZoom.prototype._setInteraction = function (newInteraction, event) {\n var interaction = this._interaction;\n if (interaction !== newInteraction) {\n if (interaction && !newInteraction) {\n if (isZoomInteraction(interaction)) {\n this._handleZoomEnd();\n }\n else if (isDragInteraction(interaction)) {\n this._handleDragEnd();\n }\n }\n if (isZoomInteraction(newInteraction)) {\n this._handleZoomStart();\n }\n else if (isDragInteraction(newInteraction)) {\n this._handleDragStart(event);\n }\n }\n this._interaction = newInteraction;\n };\n PinchZoom.prototype._distanceBetweenNumbers = function (a, b) {\n return a > b ? a - b : b - a;\n };\n PinchZoom.prototype._enoughToDrag = function () {\n if (this._distanceBetweenNumbers(this._startOffset.x, this._draggingPoint.x) >\n 5 ||\n this._distanceBetweenNumbers(this._startOffset.y, this._draggingPoint.y) >\n 5)\n return true;\n return false;\n };\n PinchZoom.prototype._updateInteraction = function (event) {\n var fingers = this._fingers;\n if (fingers === 2) {\n return this._setInteraction('zoom', event);\n }\n if (fingers === 1 && this._canDrag()) {\n return this._setInteraction('drag', event);\n }\n this._setInteraction(null, event);\n };\n PinchZoom.prototype._detectDoubleTap = function (event) {\n var time = new Date().getTime();\n if (this._fingers > 1) {\n this._lastTouchStart = 0;\n }\n if (time - this._lastTouchStart < 300) {\n cancelEvent(event);\n this._handleDoubleTap(event);\n if (isZoomInteraction(this._interaction)) {\n this._handleZoomEnd();\n }\n else if (isDragInteraction(this._interaction)) {\n this._handleDragEnd();\n }\n }\n else {\n this._isDoubleTap = false;\n }\n if (this._fingers === 1) {\n this._lastTouchStart = time;\n }\n };\n PinchZoom.prototype.simulate = function (fn) {\n var _this = this;\n return function (mouseEvent) {\n var pageX = mouseEvent.pageX, pageY = mouseEvent.pageY, type = mouseEvent.type;\n var isEnd = type === 'mouseup';\n var isStart = type === 'mousedown';\n if (isStart) {\n mouseEvent.preventDefault();\n _this._listenMouseMove = true;\n }\n if (_this._listenMouseMove) {\n // @ts-ignore\n mouseEvent.touches = isEnd ? [] : [{ pageX: pageX, pageY: pageY }];\n fn(\n // @ts-ignore\n mouseEvent);\n }\n if (isEnd) {\n _this._listenMouseMove = false;\n }\n };\n };\n PinchZoom.prototype.componentDidMount = function () {\n this._bindEvents();\n this._update();\n };\n PinchZoom.prototype.componentWillUnmount = function () {\n this._stopAnimation();\n this._unSubscribe();\n };\n PinchZoom.prototype.render = function () {\n var _a = this.props, children = _a.children, containerProps = _a.containerProps;\n var child = Children.only(children);\n var props = containerProps || {};\n return (React.createElement(React.Fragment, null,\n React.createElement(\"style\", null, styles),\n React.createElement(\"div\", __assign({}, props, { ref: this._containerRef, className: classnames(styleRoot, props.className) }), cloneElement(child, {\n className: classnames(styleChild, child.props.className),\n }))));\n };\n PinchZoom.defaultProps = {\n animationDuration: 250,\n draggableUnZoomed: true,\n enforceBoundsDuringZoom: false,\n centerContained: false,\n enabled: true,\n inertia: true,\n inertiaFriction: 0.96,\n horizontalPadding: 0,\n isTouch: isTouch,\n lockDragAxis: false,\n maxZoom: 5,\n minZoom: 0.5,\n onDoubleTap: noup,\n onDragEnd: noup,\n onDragStart: noup,\n onDragUpdate: noup,\n onZoomEnd: noup,\n onZoomStart: noup,\n onZoomUpdate: noup,\n setOffsetsOnce: false,\n shouldInterceptWheel: shouldInterceptWheel,\n shouldCancelHandledTouchEndEvents: false,\n tapZoomFactor: 1,\n verticalPadding: 0,\n wheelScaleFactor: 1500,\n zoomOutFactor: 1.3,\n doubleTapZoomOutOnMaxScale: false,\n doubleTapToggleZoom: false,\n // @ts-expect-error\n _document: isSsr ? null : window.document,\n };\n return PinchZoom;\n}(Component));\nif (process.env.NODE_ENV !== 'production') {\n var _a = require('prop-types'), any = _a.any, element = _a.element, object = _a.object, number = _a.number, func = _a.func, bool = _a.bool;\n // @ts-ignore\n PinchZoom.propTypes = {\n children: element,\n containerProps: object,\n wheelScaleFactor: number,\n animationDuration: number,\n draggableUnZoomed: bool,\n enforceBoundsDuringZoom: bool,\n centerContained: bool,\n enabled: bool,\n horizontalPadding: number,\n lockDragAxis: bool,\n onUpdate: func.isRequired,\n maxZoom: number,\n minZoom: number,\n onDoubleTap: func,\n onDragEnd: func,\n onDragStart: func,\n onDragUpdate: func,\n onZoomEnd: func,\n onZoomStart: func,\n onZoomUpdate: func,\n setOffsetsOnce: bool,\n tapZoomFactor: number,\n verticalPadding: number,\n zoomOutFactor: number,\n doubleTapZoomOutOnMaxScale: bool,\n doubleTapToggleZoom: bool,\n isTouch: func,\n _document: any,\n };\n}\nexport default PinchZoom;\n","export default function formatDuration(time) {\n if (!time) return;\n let hours = Math.floor(time / 3600);\n let minutes = Math.floor((time % 3600) / 60);\n let seconds = Math.round(time % 60);\n\n if (hours === 0) {\n return `${minutes}:${seconds.toString().padStart(2, '0')}`;\n } else {\n return `${hours}:${minutes.toString().padStart(2, '0')}:${seconds\n .toString()\n .padStart(2, '0')}`;\n }\n}\n","import { getBlurHashAverageColor } from 'fast-blurhash';\nimport { Fragment } from 'preact';\nimport { memo } from 'preact/compat';\nimport {\n useCallback,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'preact/hooks';\nimport QuickPinchZoom, { make3dTransformValue } from 'react-quick-pinch-zoom';\n\nimport formatDuration from '../utils/format-duration';\nimport mem from '../utils/mem';\nimport states from '../utils/states';\n\nimport Icon from './icon';\nimport Link from './link';\n\nconst isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent); // https://stackoverflow.com/a/23522755\n\n/*\nMedia type\n===\nunknown = unsupported or unrecognized file type\nimage = Static image\ngifv = Looping, soundless animation\nvideo = Video clip\naudio = Audio track\n*/\n\nconst dataAltLabel = 'ALT';\nconst AltBadge = (props) => {\n const { alt, lang, index, ...rest } = props;\n if (!alt || !alt.trim()) return null;\n return (\n <button\n type=\"button\"\n class=\"alt-badge clickable\"\n {...rest}\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n states.showMediaAlt = {\n alt,\n lang,\n };\n }}\n title=\"Media description\"\n >\n {dataAltLabel}\n {!!index && <sup>{index}</sup>}\n </button>\n );\n};\n\nconst MEDIA_CAPTION_LIMIT = 140;\nconst MEDIA_CAPTION_LIMIT_LONGER = 280;\nexport const isMediaCaptionLong = mem((caption) =>\n caption?.length\n ? caption.length > MEDIA_CAPTION_LIMIT ||\n /[\\n\\r].*[\\n\\r]/.test(caption.trim())\n : false,\n);\n\nfunction Media({\n class: className = '',\n media,\n to,\n lang,\n showOriginal,\n autoAnimate,\n showCaption,\n allowLongerCaption,\n altIndex,\n onClick = () => {},\n}) {\n let {\n blurhash,\n description,\n meta,\n previewRemoteUrl,\n previewUrl,\n remoteUrl,\n url,\n type,\n } = media;\n if (/no\\-preview\\./i.test(previewUrl)) {\n previewUrl = null;\n }\n const { original = {}, small, focus } = meta || {};\n\n const width = showOriginal\n ? original?.width\n : small?.width || original?.width;\n const height = showOriginal\n ? original?.height\n : small?.height || original?.height;\n const mediaURL = showOriginal ? url : previewUrl || url;\n const remoteMediaURL = showOriginal\n ? remoteUrl\n : previewRemoteUrl || remoteUrl;\n const hasDimensions = width && height;\n const orientation = hasDimensions\n ? width > height\n ? 'landscape'\n : 'portrait'\n : null;\n\n const rgbAverageColor = blurhash ? getBlurHashAverageColor(blurhash) : null;\n\n const videoRef = useRef();\n\n let focalPosition;\n if (focus) {\n // Convert focal point to CSS background position\n // Formula from jquery-focuspoint\n // x = -1, y = 1 => 0% 0%\n // x = 0, y = 0 => 50% 50%\n // x = 1, y = -1 => 100% 100%\n const x = ((focus.x + 1) / 2) * 100;\n const y = ((1 - focus.y) / 2) * 100;\n focalPosition = `${x.toFixed(0)}% ${y.toFixed(0)}%`;\n }\n\n const mediaRef = useRef();\n const onUpdate = useCallback(({ x, y, scale }) => {\n const { current: media } = mediaRef;\n\n if (media) {\n const value = make3dTransformValue({ x, y, scale });\n\n if (scale === 1) {\n media.style.removeProperty('transform');\n } else {\n media.style.setProperty('transform', value);\n }\n\n media.closest('.media-zoom').style.touchAction =\n scale <= 1.01 ? 'pan-x' : '';\n }\n }, []);\n\n const [pinchZoomEnabled, setPinchZoomEnabled] = useState(false);\n const quickPinchZoomProps = {\n enabled: pinchZoomEnabled,\n draggableUnZoomed: false,\n inertiaFriction: 0.9,\n tapZoomFactor: 2,\n doubleTapToggleZoom: true,\n containerProps: {\n className: 'media-zoom',\n style: {\n overflow: 'visible',\n // width: 'inherit',\n // height: 'inherit',\n // justifyContent: 'inherit',\n // alignItems: 'inherit',\n // display: 'inherit',\n },\n },\n onUpdate,\n };\n\n const Parent = useMemo(\n () => (to ? (props) => <Link to={to} {...props} /> : 'div'),\n [to],\n );\n\n const remoteMediaURLObj = remoteMediaURL ? getURLObj(remoteMediaURL) : null;\n const isVideoMaybe =\n type === 'unknown' &&\n remoteMediaURLObj &&\n /\\.(mp4|m4r|m4v|mov|webm)$/i.test(remoteMediaURLObj.pathname);\n const isAudioMaybe =\n type === 'unknown' &&\n remoteMediaURLObj &&\n /\\.(mp3|ogg|wav|m4a|m4p|m4b)$/i.test(remoteMediaURLObj.pathname);\n const isImage =\n type === 'image' ||\n (type === 'unknown' && previewUrl && !isVideoMaybe && !isAudioMaybe);\n\n const parentRef = useRef();\n const [imageSmallerThanParent, setImageSmallerThanParent] = useState(false);\n useLayoutEffect(() => {\n if (!isImage) return;\n if (!showOriginal) return;\n if (!parentRef.current) return;\n const { offsetWidth, offsetHeight } = parentRef.current;\n const smaller = width < offsetWidth && height < offsetHeight;\n if (smaller) setImageSmallerThanParent(smaller);\n }, [width, height]);\n\n const maxAspectHeight =\n window.innerHeight * (orientation === 'portrait' ? 0.45 : 0.33);\n const maxHeight = orientation === 'portrait' ? 0 : 160;\n const averageColorStyle = {\n '--average-color': rgbAverageColor && `rgb(${rgbAverageColor.join(',')})`,\n };\n const mediaStyles =\n width && height\n ? {\n '--width': `${width}px`,\n '--height': `${height}px`,\n // Calculate '--aspectWidth' based on aspect ratio calculated from '--width' and '--height', max height has to be 160px\n '--aspectWidth': `${\n (width / height) * Math.max(maxHeight, maxAspectHeight)\n }px`,\n aspectRatio: `${width} / ${height}`,\n ...averageColorStyle,\n }\n : {\n ...averageColorStyle,\n };\n\n const longDesc = isMediaCaptionLong(description);\n let showInlineDesc =\n !!showCaption && !showOriginal && !!description && !longDesc;\n if (\n allowLongerCaption &&\n !showInlineDesc &&\n description?.length <= MEDIA_CAPTION_LIMIT_LONGER\n ) {\n showInlineDesc = true;\n }\n const Figure = !showInlineDesc\n ? Fragment\n : (props) => {\n const { children, ...restProps } = props;\n return (\n <figure {...restProps}>\n {children}\n <figcaption\n class=\"media-caption\"\n lang={lang}\n dir=\"auto\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n states.showMediaAlt = {\n alt: description,\n lang,\n };\n }}\n >\n {description}\n </figcaption>\n </figure>\n );\n };\n\n const [hasNaturalAspectRatio, setHasNaturalAspectRatio] = useState(undefined);\n\n if (isImage) {\n // Note: type: unknown might not have width/height\n quickPinchZoomProps.containerProps.style.display = 'inherit';\n\n useLayoutEffect(() => {\n if (!isSafari) return;\n if (!showOriginal) return;\n (async () => {\n try {\n await fetch(mediaURL, { mode: 'no-cors' });\n mediaRef.current.src = mediaURL;\n } catch (e) {\n // Ignore\n }\n })();\n }, [mediaURL]);\n\n return (\n <Figure>\n <Parent\n ref={parentRef}\n class={`media media-image ${className}`}\n onClick={onClick}\n data-orientation={orientation}\n data-has-alt={!showInlineDesc || undefined}\n data-has-natural-aspect-ratio={hasNaturalAspectRatio || undefined}\n style={\n showOriginal\n ? {\n backgroundImage: `url(${previewUrl})`,\n backgroundSize: imageSmallerThanParent\n ? `${width}px ${height}px`\n : undefined,\n ...averageColorStyle,\n }\n : mediaStyles\n }\n >\n {showOriginal ? (\n <QuickPinchZoom {...quickPinchZoomProps}>\n <img\n ref={mediaRef}\n src={mediaURL}\n alt={description}\n width={width}\n height={height}\n data-orientation={orientation}\n loading=\"eager\"\n decoding=\"sync\"\n onLoad={(e) => {\n e.target.closest('.media-image').style.backgroundImage = '';\n e.target.closest('.media-zoom').style.display = '';\n setPinchZoomEnabled(true);\n }}\n onError={(e) => {\n const { src } = e.target;\n if (\n src === mediaURL &&\n remoteMediaURL &&\n mediaURL !== remoteMediaURL\n ) {\n e.target.src = remoteMediaURL;\n }\n }}\n />\n </QuickPinchZoom>\n ) : (\n <>\n <img\n src={mediaURL}\n alt={showInlineDesc ? '' : description}\n width={width}\n height={height}\n data-orientation={orientation}\n loading=\"lazy\"\n style={{\n // backgroundColor:\n // rgbAverageColor && `rgb(${rgbAverageColor.join(',')})`,\n // backgroundPosition: focalBackgroundPosition || 'center',\n // Duration based on width or height in pixels\n objectPosition: focalPosition || 'center',\n // 100px per second (rough estimate)\n // Clamp between 5s and 120s\n '--anim-duration': `${Math.min(\n Math.max(Math.max(width, height) / 100, 5),\n 120,\n )}s`,\n }}\n onLoad={(e) => {\n // e.target.closest('.media-image').style.backgroundImage = '';\n e.target.dataset.loaded = true;\n const $media = e.target.closest('.media');\n if (!hasDimensions && $media) {\n const { naturalWidth, naturalHeight } = e.target;\n $media.dataset.orientation =\n naturalWidth > naturalHeight ? 'landscape' : 'portrait';\n $media.style.setProperty('--width', `${naturalWidth}px`);\n $media.style.setProperty('--height', `${naturalHeight}px`);\n $media.style.aspectRatio = `${naturalWidth}/${naturalHeight}`;\n }\n\n // Check natural aspect ratio vs display aspect ratio\n if ($media) {\n const {\n clientWidth,\n clientHeight,\n naturalWidth,\n naturalHeight,\n } = e.target;\n if (\n clientWidth &&\n clientHeight &&\n naturalWidth &&\n naturalHeight\n ) {\n const minDimension = 88;\n if (\n naturalWidth < minDimension ||\n naturalHeight < minDimension\n ) {\n $media.dataset.hasSmallDimension = true;\n } else {\n const displayNaturalHeight =\n (naturalHeight * clientWidth) / naturalWidth;\n const almostSimilarHeight =\n Math.abs(displayNaturalHeight - clientHeight) < 5;\n\n if (almostSimilarHeight) {\n setHasNaturalAspectRatio(true);\n }\n }\n }\n }\n }}\n onError={(e) => {\n const { src } = e.target;\n if (src === mediaURL && mediaURL !== remoteMediaURL) {\n e.target.src = remoteMediaURL;\n }\n }}\n />\n {!showInlineDesc && (\n <AltBadge alt={description} lang={lang} index={altIndex} />\n )}\n </>\n )}\n </Parent>\n </Figure>\n );\n } else if (type === 'gifv' || type === 'video' || isVideoMaybe) {\n const hasDuration = original.duration > 0;\n const shortDuration = original.duration < 31;\n const isGIF = type === 'gifv' && shortDuration;\n // If GIF is too long, treat it as a video\n const loopable = original.duration < 61;\n const formattedDuration = formatDuration(original.duration);\n const hoverAnimate = !showOriginal && !autoAnimate && isGIF;\n const autoGIFAnimate = !showOriginal && autoAnimate && isGIF;\n const showProgress = original.duration > 5;\n\n // This string is only for autoplay + muted to work on Mobile Safari\n const gifHTML = `\n <video\n src=\"${url}\"\n poster=\"${previewUrl}\"\n width=\"${width}\"\n height=\"${height}\"\n data-orientation=\"${orientation}\"\n preload=\"auto\"\n autoplay\n muted\n playsinline\n ${loopable ? 'loop' : ''}\n ondblclick=\"this.paused ? this.play() : this.pause()\"\n ${\n showProgress\n ? \"ontimeupdate=\\\"this.closest('.media-gif') && this.closest('.media-gif').style.setProperty('--progress', `${~~((this.currentTime / this.duration) * 100)}%`)\\\"\"\n : ''\n }\n ></video>\n `;\n\n const videoHTML = `\n <video\n src=\"${url}\"\n poster=\"${previewUrl}\"\n width=\"${width}\"\n height=\"${height}\"\n data-orientation=\"${orientation}\"\n preload=\"auto\"\n autoplay\n playsinline\n ${loopable ? 'loop' : ''}\n controls\n ></video>\n `;\n\n return (\n <Figure>\n <Parent\n class={`media ${className} media-${isGIF ? 'gif' : 'video'} ${\n autoGIFAnimate ? 'media-contain' : ''\n } ${hoverAnimate ? 'media-hover-animate' : ''}`}\n data-orientation={orientation}\n data-formatted-duration={\n !showOriginal ? formattedDuration : undefined\n }\n data-label={\n isGIF && !showOriginal && !autoGIFAnimate ? 'GIF' : undefined\n }\n data-has-alt={!showInlineDesc || undefined}\n // style={{\n // backgroundColor:\n // rgbAverageColor && `rgb(${rgbAverageColor.join(',')})`,\n // }}\n style={!showOriginal && mediaStyles}\n onClick={(e) => {\n if (hoverAnimate) {\n try {\n videoRef.current.pause();\n } catch (e) {}\n }\n onClick(e);\n }}\n onMouseEnter={() => {\n if (hoverAnimate) {\n try {\n videoRef.current.play();\n } catch (e) {}\n }\n }}\n onMouseLeave={() => {\n if (hoverAnimate) {\n try {\n videoRef.current.pause();\n } catch (e) {}\n }\n }}\n onFocus={() => {\n if (hoverAnimate) {\n try {\n videoRef.current.play();\n } catch (e) {}\n }\n }}\n onBlur={() => {\n if (hoverAnimate) {\n try {\n videoRef.current.pause();\n } catch (e) {}\n }\n }}\n >\n {showOriginal || autoGIFAnimate ? (\n isGIF && showOriginal ? (\n <QuickPinchZoom {...quickPinchZoomProps} enabled>\n <div\n ref={mediaRef}\n dangerouslySetInnerHTML={{\n __html: gifHTML,\n }}\n />\n </QuickPinchZoom>\n ) : isGIF ? (\n <div\n class=\"video-container\"\n dangerouslySetInnerHTML={{\n __html: gifHTML,\n }}\n />\n ) : (\n <div\n class=\"video-container\"\n dangerouslySetInnerHTML={{ __html: videoHTML }}\n />\n )\n ) : isGIF ? (\n <video\n ref={videoRef}\n src={url}\n poster={previewUrl}\n width={width}\n height={height}\n data-orientation={orientation}\n preload=\"auto\"\n // controls\n playsinline\n loop\n muted\n onTimeUpdate={\n showProgress\n ? (e) => {\n const { target } = e;\n const container = target?.closest('.media-gif');\n if (container) {\n const percentage =\n (target.currentTime / target.duration) * 100;\n container.style.setProperty(\n '--progress',\n `${percentage}%`,\n );\n }\n }\n : undefined\n }\n />\n ) : (\n <>\n {previewUrl ? (\n <img\n src={previewUrl}\n alt={showInlineDesc ? '' : description}\n width={width}\n height={height}\n data-orientation={orientation}\n loading=\"lazy\"\n decoding=\"async\"\n onLoad={(e) => {\n if (!hasDimensions) {\n const $media = e.target.closest('.media');\n if ($media) {\n const { naturalHeight, naturalWidth } = e.target;\n $media.dataset.orientation =\n naturalWidth > naturalHeight\n ? 'landscape'\n : 'portrait';\n $media.style.setProperty(\n '--width',\n `${naturalWidth}px`,\n );\n $media.style.setProperty(\n '--height',\n `${naturalHeight}px`,\n );\n $media.style.aspectRatio = `${naturalWidth}/${naturalHeight}`;\n }\n }\n }}\n />\n ) : (\n <video\n src={url + '#t=0.1'} // Make Safari show 1st-frame preview\n width={width}\n height={height}\n data-orientation={orientation}\n preload=\"metadata\"\n muted\n disablePictureInPicture\n onLoadedMetadata={(e) => {\n if (!hasDuration) {\n const { duration } = e.target;\n if (duration) {\n const formattedDuration = formatDuration(duration);\n const container = e.target.closest('.media-video');\n if (container) {\n container.dataset.formattedDuration =\n formattedDuration;\n }\n }\n }\n }}\n />\n )}\n <div class=\"media-play\">\n <Icon icon=\"play\" size=\"xl\" />\n </div>\n </>\n )}\n {!showOriginal && !showInlineDesc && (\n <AltBadge alt={description} lang={lang} index={altIndex} />\n )}\n </Parent>\n </Figure>\n );\n } else if (type === 'audio' || isAudioMaybe) {\n const formattedDuration = formatDuration(original.duration);\n return (\n <Figure>\n <Parent\n class={`media media-audio ${className}`}\n data-formatted-duration={\n !showOriginal ? formattedDuration : undefined\n }\n data-has-alt={!showInlineDesc || undefined}\n onClick={onClick}\n style={!showOriginal && mediaStyles}\n >\n {showOriginal ? (\n <audio src={remoteUrl || url} preload=\"none\" controls autoPlay />\n ) : previewUrl ? (\n <img\n src={previewUrl}\n alt={showInlineDesc ? '' : description}\n width={width}\n height={height}\n data-orientation={orientation}\n loading=\"lazy\"\n onError={(e) => {\n try {\n // Remove self if broken\n e.target?.remove?.();\n } catch (e) {}\n }}\n />\n ) : null}\n {!showOriginal && (\n <>\n <div class=\"media-play\">\n <Icon icon=\"play\" size=\"xl\" />\n </div>\n {!showInlineDesc && (\n <AltBadge alt={description} lang={lang} index={altIndex} />\n )}\n </>\n )}\n </Parent>\n </Figure>\n );\n }\n}\n\nfunction getURLObj(url) {\n // Fake base URL if url doesn't have https:// prefix\n return URL.parse(url, location.origin);\n}\n\nexport default memo(Media, (oldProps, newProps) => {\n const oldMedia = oldProps.media || {};\n const newMedia = newProps.media || {};\n\n return (\n oldMedia?.id === newMedia?.id &&\n oldMedia.url === newMedia.url &&\n oldProps.to === newProps.to &&\n oldProps.class === newProps.class\n );\n});\n","import './status.css';\nimport '@justinribeiro/lite-youtube';\n\nimport {\n ControlledMenu,\n Menu,\n MenuDivider,\n MenuHeader,\n MenuItem,\n} from '@szhsin/react-menu';\nimport { decodeBlurHash, getBlurHashAverageColor } from 'fast-blurhash';\nimport { shallowEqual } from 'fast-equals';\nimport prettify from 'html-prettify';\nimport pThrottle from 'p-throttle';\nimport { Fragment } from 'preact';\nimport { memo } from 'preact/compat';\nimport {\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'preact/hooks';\nimport punycode from 'punycode/';\nimport { useHotkeys } from 'react-hotkeys-hook';\nimport { detectAll } from 'tinyld/light';\nimport { useLongPress } from 'use-long-press';\nimport { useSnapshot } from 'valtio';\n\nimport CustomEmoji from '../components/custom-emoji';\nimport EmojiText from '../components/emoji-text';\nimport LazyShazam from '../components/lazy-shazam';\nimport Loader from '../components/loader';\nimport MenuConfirm from '../components/menu-confirm';\nimport Menu2 from '../components/menu2';\nimport Modal from '../components/modal';\nimport NameText from '../components/name-text';\nimport Poll from '../components/poll';\nimport { api } from '../utils/api';\nimport emojifyText from '../utils/emojify-text';\nimport enhanceContent from '../utils/enhance-content';\nimport FilterContext from '../utils/filter-context';\nimport { isFiltered } from '../utils/filters';\nimport getTranslateTargetLanguage from '../utils/get-translate-target-language';\nimport getHTMLText from '../utils/getHTMLText';\nimport handleContentLinks from '../utils/handle-content-links';\nimport htmlContentLength from '../utils/html-content-length';\nimport isRTL from '../utils/is-rtl';\nimport isMastodonLinkMaybe from '../utils/isMastodonLinkMaybe';\nimport localeMatch from '../utils/locale-match';\nimport mem from '../utils/mem';\nimport niceDateTime from '../utils/nice-date-time';\nimport openCompose from '../utils/open-compose';\nimport pmem from '../utils/pmem';\nimport safeBoundingBoxPadding from '../utils/safe-bounding-box-padding';\nimport shortenNumber from '../utils/shorten-number';\nimport showCompose from '../utils/show-compose';\nimport showToast from '../utils/show-toast';\nimport { speak, supportsTTS } from '../utils/speech';\nimport states, { getStatus, saveStatus, statusKey } from '../utils/states';\nimport statusPeek from '../utils/status-peek';\nimport store from '../utils/store';\nimport { getCurrentAccountID } from '../utils/store-utils';\nimport supports from '../utils/supports';\nimport unfurlMastodonLink from '../utils/unfurl-link';\nimport useTruncated from '../utils/useTruncated';\nimport visibilityIconsMap from '../utils/visibility-icons-map';\n\nimport Avatar from './avatar';\nimport Icon from './icon';\nimport Link from './link';\nimport Media, { isMediaCaptionLong } from './media';\nimport MenuLink from './menu-link';\nimport RelativeTime from './relative-time';\nimport TranslationBlock from './translation-block';\n\nconst SHOW_COMMENT_COUNT_LIMIT = 280;\nconst INLINE_TRANSLATE_LIMIT = 140;\n\nconst throttle = pThrottle({\n limit: 1,\n interval: 1000,\n});\nfunction fetchAccount(id, masto) {\n return masto.v1.accounts.$select(id).fetch();\n}\nconst memFetchAccount = pmem(throttle(fetchAccount));\n\nconst visibilityText = {\n public: 'Public',\n unlisted: 'Unlisted',\n private: 'Followers only',\n direct: 'Private mention',\n};\n\nconst isIOS =\n window.ontouchstart !== undefined &&\n /iPad|iPhone|iPod/.test(navigator.userAgent);\n\nconst rtf = new Intl.RelativeTimeFormat();\n\nconst REACTIONS_LIMIT = 80;\n\nfunction getPollText(poll) {\n if (!poll?.options?.length) return '';\n return `📊:\\n${poll.options\n .map(\n (option) =>\n `- ${option.title}${\n option.votesCount >= 0 ? ` (${option.votesCount})` : ''\n }`,\n )\n .join('\\n')}`;\n}\nfunction getPostText(status) {\n const { spoilerText, content, poll } = status;\n return (\n (spoilerText ? `${spoilerText}\\n\\n` : '') +\n getHTMLText(content) +\n getPollText(poll)\n );\n}\n\nconst PostContent = memo(\n ({ post, instance, previewMode }) => {\n const { content, emojis, language, mentions, url } = post;\n return (\n <div\n lang={language}\n dir=\"auto\"\n class=\"inner-content\"\n onClick={handleContentLinks({\n mentions,\n instance,\n previewMode,\n statusURL: url,\n })}\n dangerouslySetInnerHTML={{\n __html: enhanceContent(content, {\n emojis,\n postEnhanceDOM: (dom) => {\n // Remove target=\"_blank\" from links\n dom.querySelectorAll('a.u-url[target=\"_blank\"]').forEach((a) => {\n if (!/http/i.test(a.innerText.trim())) {\n a.removeAttribute('target');\n }\n });\n },\n }),\n }}\n />\n );\n },\n (oldProps, newProps) => {\n const { post: oldPost } = oldProps;\n const { post: newPost } = newProps;\n return oldPost.content === newPost.content;\n },\n);\n\nconst SIZE_CLASS = {\n s: 'small',\n m: 'medium',\n l: 'large',\n};\n\nconst detectLang = mem((text) => {\n text = text?.trim();\n\n // Ref: https://github.com/komodojp/tinyld/blob/develop/docs/benchmark.md\n // 500 should be enough for now, also the default max chars for Mastodon\n if (text?.length > 500) {\n return null;\n }\n const langs = detectAll(text);\n const lang = langs[0];\n if (lang?.lang && lang?.accuracy > 0.5) {\n // If > 50% accurate, use it\n // It can be accurate if < 50% but better be safe\n // Though > 50% also can be inaccurate 🤷♂️\n return lang.lang;\n }\n return null;\n});\n\nfunction Status({\n statusID,\n status,\n instance: propInstance,\n size = 'm',\n contentTextWeight,\n readOnly,\n enableCommentHint,\n withinContext,\n skeleton,\n enableTranslate,\n forceTranslate: _forceTranslate,\n previewMode,\n // allowFilters,\n onMediaClick,\n quoted,\n onStatusLinkClick = () => {},\n showFollowedTags,\n allowContextMenu,\n showActionsBar,\n showReplyParent,\n mediaFirst,\n}) {\n if (skeleton) {\n return (\n <div\n class={`status skeleton ${\n mediaFirst ? 'status-media-first small' : ''\n }`}\n >\n {!mediaFirst && <Avatar size=\"xxl\" />}\n <div class=\"container\">\n <div class=\"meta\">\n {(size === 's' || mediaFirst) && <Avatar size=\"m\" />} ███ ████████\n </div>\n <div class=\"content-container\">\n {mediaFirst && <div class=\"media-first-container\" />}\n <div class={`content ${mediaFirst ? 'media-first-content' : ''}`}>\n <p>████ ████████</p>\n </div>\n </div>\n </div>\n </div>\n );\n }\n const { masto, instance, authenticated } = api({ instance: propInstance });\n const { instance: currentInstance } = api();\n const sameInstance = instance === currentInstance;\n\n let sKey = statusKey(statusID || status?.id, instance);\n const snapStates = useSnapshot(states);\n if (!status) {\n status = snapStates.statuses[sKey] || snapStates.statuses[statusID];\n sKey = statusKey(status?.id, instance);\n }\n if (!status) {\n return null;\n }\n\n const {\n account: {\n acct,\n avatar,\n avatarStatic,\n id: accountId,\n url: accountURL,\n displayName,\n username,\n emojis: accountEmojis,\n bot,\n group,\n },\n id,\n repliesCount,\n reblogged,\n reblogsCount,\n favourited,\n favouritesCount,\n bookmarked,\n poll,\n muted,\n sensitive,\n spoilerText,\n visibility, // public, unlisted, private, direct\n language: _language,\n editedAt,\n filtered,\n card,\n createdAt,\n inReplyToId,\n inReplyToAccountId,\n content,\n mentions,\n mediaAttachments,\n reblog,\n uri,\n url,\n emojis,\n tags,\n pinned,\n // Non-API props\n _deleted,\n _pinned,\n // _filtered,\n // Non-Mastodon\n emojiReactions,\n } = status;\n\n const [languageAutoDetected, setLanguageAutoDetected] = useState(null);\n useEffect(() => {\n if (!content) return;\n if (_language) return;\n let timer;\n timer = setTimeout(() => {\n let detected = detectLang(\n getHTMLText(content, {\n preProcess: (dom) => {\n // Remove anything that can skew the language detection\n\n // Remove .mention, .hashtag, pre, code, a:has(.invisible)\n dom\n .querySelectorAll(\n '.mention, .hashtag, pre, code, a:has(.invisible)',\n )\n .forEach((a) => {\n a.remove();\n });\n\n // Remove links that contains text that starts with https?://\n dom.querySelectorAll('a').forEach((a) => {\n const text = a.innerText.trim();\n if (text.startsWith('https://') || text.startsWith('http://')) {\n a.remove();\n }\n });\n },\n }),\n );\n setLanguageAutoDetected(detected);\n }, 1000);\n return () => clearTimeout(timer);\n }, [content, _language]);\n const language = _language || languageAutoDetected;\n\n // if (!mediaAttachments?.length) mediaFirst = false;\n const hasMediaAttachments = !!mediaAttachments?.length;\n if (mediaFirst && hasMediaAttachments) size = 's';\n\n const currentAccount = useMemo(() => {\n return getCurrentAccountID();\n }, []);\n const isSelf = useMemo(() => {\n return currentAccount && currentAccount === accountId;\n }, [accountId, currentAccount]);\n\n const filterContext = useContext(FilterContext);\n const filterInfo =\n !isSelf && !readOnly && !previewMode && isFiltered(filtered, filterContext);\n\n if (filterInfo?.action === 'hide') {\n return null;\n }\n\n console.debug('RENDER Status', id, status?.account.displayName, quoted);\n\n const debugHover = (e) => {\n if (e.shiftKey) {\n console.log({\n ...status,\n });\n }\n };\n\n if (/*allowFilters && */ size !== 'l' && filterInfo) {\n return (\n <FilteredStatus\n status={status}\n filterInfo={filterInfo}\n instance={instance}\n containerProps={{\n onMouseEnter: debugHover,\n }}\n showFollowedTags\n quoted={quoted}\n />\n );\n }\n\n const createdAtDate = new Date(createdAt);\n const editedAtDate = new Date(editedAt);\n\n let inReplyToAccountRef = mentions?.find(\n (mention) => mention.id === inReplyToAccountId,\n );\n if (!inReplyToAccountRef && inReplyToAccountId === id) {\n inReplyToAccountRef = { url: accountURL, username, displayName };\n }\n const [inReplyToAccount, setInReplyToAccount] = useState(inReplyToAccountRef);\n if (!withinContext && !inReplyToAccount && inReplyToAccountId) {\n const account = states.accounts[inReplyToAccountId];\n if (account) {\n setInReplyToAccount(account);\n } else {\n memFetchAccount(inReplyToAccountId, masto)\n .then((account) => {\n setInReplyToAccount(account);\n states.accounts[account.id] = account;\n })\n .catch((e) => {});\n }\n }\n const mentionSelf =\n inReplyToAccountId === currentAccount ||\n mentions?.find((mention) => mention.id === currentAccount);\n\n const readingExpandSpoilers = useMemo(() => {\n const prefs = store.account.get('preferences') || {};\n return !!prefs['reading:expand:spoilers'];\n }, []);\n const readingExpandMedia = useMemo(() => {\n // default | show_all | hide_all\n // Ignore hide_all because it means hide *ALL* media including non-sensitive ones\n const prefs = store.account.get('preferences') || {};\n return prefs['reading:expand:media'] || 'default';\n }, []);\n // FOR TESTING:\n // const readingExpandSpoilers = true;\n // const readingExpandMedia = 'show_all';\n const showSpoiler =\n previewMode || readingExpandSpoilers || !!snapStates.spoilers[id];\n const showSpoilerMedia =\n previewMode ||\n readingExpandMedia === 'show_all' ||\n !!snapStates.spoilersMedia[id];\n\n if (reblog) {\n // If has statusID, means useItemID (cached in states)\n\n if (group) {\n return (\n <div\n data-state-post-id={sKey}\n class=\"status-group\"\n onMouseEnter={debugHover}\n >\n <div class=\"status-pre-meta\">\n <Icon icon=\"group\" size=\"l\" alt=\"Group\" />{' '}\n <NameText account={status.account} instance={instance} showAvatar />\n </div>\n <Status\n status={statusID ? null : reblog}\n statusID={statusID ? reblog.id : null}\n instance={instance}\n size={size}\n contentTextWeight={contentTextWeight}\n readOnly={readOnly}\n mediaFirst={mediaFirst}\n />\n </div>\n );\n }\n\n return (\n <div\n data-state-post-id={sKey}\n class=\"status-reblog\"\n onMouseEnter={debugHover}\n >\n <div class=\"status-pre-meta\">\n <Icon icon=\"rocket\" size=\"l\" />{' '}\n <NameText account={status.account} instance={instance} showAvatar />{' '}\n <span>boosted</span>\n </div>\n <Status\n status={statusID ? null : reblog}\n statusID={statusID ? reblog.id : null}\n instance={instance}\n size={size}\n contentTextWeight={contentTextWeight}\n readOnly={readOnly}\n enableCommentHint\n mediaFirst={mediaFirst}\n />\n </div>\n );\n }\n\n // Check followedTags\n const FollowedTagsParent = useCallback(\n ({ children }) => (\n <div\n data-state-post-id={sKey}\n class=\"status-followed-tags\"\n onMouseEnter={debugHover}\n >\n <div class=\"status-pre-meta\">\n <Icon icon=\"hashtag\" size=\"l\" />{' '}\n {snapStates.statusFollowedTags[sKey].slice(0, 3).map((tag) => (\n <Link\n key={tag}\n to={instance ? `/${instance}/t/${tag}` : `/t/${tag}`}\n class=\"status-followed-tag-item\"\n >\n {tag}\n </Link>\n ))}\n </div>\n {children}\n </div>\n ),\n [sKey, instance, snapStates.statusFollowedTags[sKey]],\n );\n const StatusParent =\n showFollowedTags && !!snapStates.statusFollowedTags[sKey]?.length\n ? FollowedTagsParent\n : Fragment;\n\n const isSizeLarge = size === 'l';\n\n const [forceTranslate, setForceTranslate] = useState(_forceTranslate);\n const targetLanguage = getTranslateTargetLanguage(true);\n const contentTranslationHideLanguages =\n snapStates.settings.contentTranslationHideLanguages || [];\n const { contentTranslation, contentTranslationAutoInline } =\n snapStates.settings;\n if (!contentTranslation) enableTranslate = false;\n const inlineTranslate = useMemo(() => {\n if (\n !contentTranslation ||\n !contentTranslationAutoInline ||\n readOnly ||\n (withinContext && !isSizeLarge) ||\n previewMode ||\n spoilerText ||\n sensitive ||\n poll ||\n card ||\n mediaAttachments?.length\n ) {\n return false;\n }\n const contentLength = htmlContentLength(content);\n return contentLength > 0 && contentLength <= INLINE_TRANSLATE_LIMIT;\n }, [\n contentTranslation,\n contentTranslationAutoInline,\n readOnly,\n withinContext,\n isSizeLarge,\n previewMode,\n spoilerText,\n sensitive,\n poll,\n card,\n mediaAttachments,\n content,\n ]);\n\n const [showEdited, setShowEdited] = useState(false);\n const [showEmbed, setShowEmbed] = useState(false);\n\n const spoilerContentRef = useTruncated();\n const contentRef = useTruncated();\n const mediaContainerRef = useTruncated();\n const readMoreText = 'Read more →';\n\n const statusRef = useRef(null);\n\n const unauthInteractionErrorMessage = `Sorry, your current logged-in instance can't interact with this post from another instance.`;\n\n const textWeight = useCallback(\n () =>\n Math.max(\n Math.round((spoilerText.length + htmlContentLength(content)) / 140) ||\n 1,\n 1,\n ),\n [spoilerText, content],\n );\n\n const createdDateText = niceDateTime(createdAtDate);\n const editedDateText = editedAt && niceDateTime(editedAtDate);\n\n // Can boost if:\n // - authenticated AND\n // - visibility != direct OR\n // - visibility = private AND isSelf\n let canBoost =\n authenticated && visibility !== 'direct' && visibility !== 'private';\n if (visibility === 'private' && isSelf) {\n canBoost = true;\n }\n\n const replyStatus = (e) => {\n if (!sameInstance || !authenticated) {\n return alert(unauthInteractionErrorMessage);\n }\n // syntheticEvent comes from MenuItem\n if (e?.shiftKey || e?.syntheticEvent?.shiftKey) {\n const newWin = openCompose({\n replyToStatus: status,\n });\n if (newWin) return;\n }\n showCompose({\n replyToStatus: status,\n });\n };\n\n // Check if media has no descriptions\n const mediaNoDesc = useMemo(() => {\n return mediaAttachments.some(\n (attachment) => !attachment.description?.trim?.(),\n );\n }, [mediaAttachments]);\n\n const statusMonthsAgo = useMemo(() => {\n return Math.floor(\n (new Date() - createdAtDate) / (1000 * 60 * 60 * 24 * 30),\n );\n }, [createdAtDate]);\n\n const boostStatus = async () => {\n if (!sameInstance || !authenticated) {\n alert(unauthInteractionErrorMessage);\n return false;\n }\n try {\n if (!reblogged) {\n let confirmText = 'Boost this post?';\n if (mediaNoDesc) {\n confirmText += '\\n\\n⚠️ Some media have no descriptions.';\n }\n const yes = confirm(confirmText);\n if (!yes) {\n return false;\n }\n }\n // Optimistic\n states.statuses[sKey] = {\n ...status,\n reblogged: !reblogged,\n reblogsCount: reblogsCount + (reblogged ? -1 : 1),\n };\n if (reblogged) {\n const newStatus = await masto.v1.statuses.$select(id).unreblog();\n saveStatus(newStatus, instance);\n return true;\n } else {\n const newStatus = await masto.v1.statuses.$select(id).reblog();\n saveStatus(newStatus, instance);\n return true;\n }\n } catch (e) {\n console.error(e);\n // Revert optimistism\n states.statuses[sKey] = status;\n return false;\n }\n };\n const confirmBoostStatus = async () => {\n if (!sameInstance || !authenticated) {\n alert(unauthInteractionErrorMessage);\n return false;\n }\n try {\n // Optimistic\n states.statuses[sKey] = {\n ...status,\n reblogged: !reblogged,\n reblogsCount: reblogsCount + (reblogged ? -1 : 1),\n };\n if (reblogged) {\n const newStatus = await masto.v1.statuses.$select(id).unreblog();\n saveStatus(newStatus, instance);\n } else {\n const newStatus = await masto.v1.statuses.$select(id).reblog();\n saveStatus(newStatus, instance);\n }\n return true;\n } catch (e) {\n console.error(e);\n // Revert optimistism\n states.statuses[sKey] = status;\n return false;\n }\n };\n\n const favouriteStatus = async () => {\n if (!sameInstance || !authenticated) {\n alert(unauthInteractionErrorMessage);\n return false;\n }\n try {\n // Optimistic\n states.statuses[sKey] = {\n ...status,\n favourited: !favourited,\n favouritesCount: favouritesCount + (favourited ? -1 : 1),\n };\n if (favourited) {\n const newStatus = await masto.v1.statuses.$select(id).unfavourite();\n saveStatus(newStatus, instance);\n } else {\n const newStatus = await masto.v1.statuses.$select(id).favourite();\n saveStatus(newStatus, instance);\n }\n return true;\n } catch (e) {\n console.error(e);\n // Revert optimistism\n states.statuses[sKey] = status;\n return false;\n }\n };\n const favouriteStatusNotify = async () => {\n try {\n const done = await favouriteStatus();\n if (!isSizeLarge && done) {\n showToast(\n favourited\n ? `Unliked @${username || acct}'s post`\n : `Liked @${username || acct}'s post`,\n );\n }\n } catch (e) {}\n };\n\n const bookmarkStatus = async () => {\n if (!supports('@mastodon/post-bookmark')) return;\n if (!sameInstance || !authenticated) {\n alert(unauthInteractionErrorMessage);\n return false;\n }\n try {\n // Optimistic\n states.statuses[sKey] = {\n ...status,\n bookmarked: !bookmarked,\n };\n if (bookmarked) {\n const newStatus = await masto.v1.statuses.$select(id).unbookmark();\n saveStatus(newStatus, instance);\n } else {\n const newStatus = await masto.v1.statuses.$select(id).bookmark();\n saveStatus(newStatus, instance);\n }\n return true;\n } catch (e) {\n console.error(e);\n // Revert optimistism\n states.statuses[sKey] = status;\n return false;\n }\n };\n const bookmarkStatusNotify = async () => {\n try {\n const done = await bookmarkStatus();\n if (!isSizeLarge && done) {\n showToast(\n bookmarked\n ? `Unbookmarked @${username || acct}'s post`\n : `Bookmarked @${username || acct}'s post`,\n );\n }\n } catch (e) {}\n };\n\n const differentLanguage =\n !!language &&\n language !== targetLanguage &&\n !localeMatch([language], [targetLanguage]) &&\n !contentTranslationHideLanguages.find(\n (l) => language === l || localeMatch([language], [l]),\n );\n\n const reblogIterator = useRef();\n const favouriteIterator = useRef();\n async function fetchBoostedLikedByAccounts(firstLoad) {\n if (firstLoad) {\n reblogIterator.current = masto.v1.statuses\n .$select(statusID)\n .rebloggedBy.list({\n limit: REACTIONS_LIMIT,\n });\n favouriteIterator.current = masto.v1.statuses\n .$select(statusID)\n .favouritedBy.list({\n limit: REACTIONS_LIMIT,\n });\n }\n const [{ value: reblogResults }, { value: favouriteResults }] =\n await Promise.allSettled([\n reblogIterator.current.next(),\n favouriteIterator.current.next(),\n ]);\n if (reblogResults.value?.length || favouriteResults.value?.length) {\n const accounts = [];\n if (reblogResults.value?.length) {\n accounts.push(\n ...reblogResults.value.map((a) => {\n a._types = ['reblog'];\n return a;\n }),\n );\n }\n if (favouriteResults.value?.length) {\n accounts.push(\n ...favouriteResults.value.map((a) => {\n a._types = ['favourite'];\n return a;\n }),\n );\n }\n return {\n value: accounts,\n done: reblogResults.done && favouriteResults.done,\n };\n }\n return {\n value: [],\n done: true,\n };\n }\n\n const actionsRef = useRef();\n const isPublic = ['public', 'unlisted'].includes(visibility);\n const isPinnable = ['public', 'unlisted', 'private'].includes(visibility);\n const StatusMenuItems = (\n <>\n {!isSizeLarge && sameInstance && (\n <>\n <div class=\"menu-control-group-horizontal status-menu\">\n <MenuItem onClick={replyStatus}>\n <Icon icon=\"comment\" />\n <span>\n {repliesCount > 0 ? shortenNumber(repliesCount) : 'Reply'}\n </span>\n </MenuItem>\n <MenuConfirm\n subMenu\n confirmLabel={\n <>\n <Icon icon=\"rocket\" />\n <span>{reblogged ? 'Unboost' : 'Boost'}</span>\n </>\n }\n className={`menu-reblog ${reblogged ? 'checked' : ''}`}\n menuExtras={\n <MenuItem\n onClick={() => {\n showCompose({\n draftStatus: {\n status: `\\n${url}`,\n },\n });\n }}\n >\n <Icon icon=\"quote\" />\n <span>Quote</span>\n </MenuItem>\n }\n menuFooter={\n mediaNoDesc && !reblogged ? (\n <div class=\"footer\">\n <Icon icon=\"alert\" />\n Some media have no descriptions.\n </div>\n ) : (\n statusMonthsAgo >= 3 && (\n <div class=\"footer\">\n <Icon icon=\"info\" />\n <span>\n Old post (\n <strong>{rtf.format(-statusMonthsAgo, 'month')}</strong>\n )\n </span>\n </div>\n )\n )\n }\n disabled={!canBoost}\n onClick={async () => {\n try {\n const done = await confirmBoostStatus();\n if (!isSizeLarge && done) {\n showToast(\n reblogged\n ? `Unboosted @${username || acct}'s post`\n : `Boosted @${username || acct}'s post`,\n );\n }\n } catch (e) {}\n }}\n >\n <Icon icon=\"rocket\" />\n <span>\n {reblogsCount > 0\n ? shortenNumber(reblogsCount)\n : reblogged\n ? 'Unboost'\n : 'Boost…'}\n </span>\n </MenuConfirm>\n <MenuItem\n onClick={favouriteStatusNotify}\n className={`menu-favourite ${favourited ? 'checked' : ''}`}\n >\n <Icon icon=\"heart\" />\n <span>\n {favouritesCount > 0\n ? shortenNumber(favouritesCount)\n : favourited\n ? 'Unlike'\n : 'Like'}\n </span>\n </MenuItem>\n {supports('@mastodon/post-bookmark') && (\n <MenuItem\n onClick={bookmarkStatusNotify}\n className={`menu-bookmark ${bookmarked ? 'checked' : ''}`}\n >\n <Icon icon=\"bookmark\" />\n <span>{bookmarked ? 'Unbookmark' : 'Bookmark'}</span>\n </MenuItem>\n )}\n </div>\n </>\n )}\n {!isSizeLarge && sameInstance && (isSizeLarge || showActionsBar) && (\n <MenuDivider />\n )}\n {(isSizeLarge || showActionsBar) && (\n <>\n <MenuItem\n onClick={() => {\n states.showGenericAccounts = {\n heading: 'Boosted/Liked by…',\n fetchAccounts: fetchBoostedLikedByAccounts,\n instance,\n showReactions: true,\n postID: sKey,\n };\n }}\n >\n <Icon icon=\"react\" />\n <span>\n Boosted/Liked by<span class=\"more-insignificant\">…</span>\n </span>\n </MenuItem>\n </>\n )}\n {!mediaFirst && (\n <>\n {(enableTranslate || !language || differentLanguage) && (\n <MenuDivider />\n )}\n {enableTranslate ? (\n <div class={supportsTTS ? 'menu-horizontal' : ''}>\n <MenuItem\n disabled={forceTranslate}\n onClick={() => {\n setForceTranslate(true);\n }}\n >\n <Icon icon=\"translate\" />\n <span>Translate</span>\n </MenuItem>\n {supportsTTS && (\n <MenuItem\n onClick={() => {\n const postText = getPostText(status);\n if (postText) {\n speak(postText, language);\n }\n }}\n >\n <Icon icon=\"speak\" />\n <span>Speak</span>\n </MenuItem>\n )}\n </div>\n ) : (\n (!language || differentLanguage) && (\n <div class={supportsTTS ? 'menu-horizontal' : ''}>\n <MenuLink\n to={`${instance ? `/${instance}` : ''}/s/${id}?translate=1`}\n >\n <Icon icon=\"translate\" />\n <span>Translate</span>\n </MenuLink>\n {supportsTTS && (\n <MenuItem\n onClick={() => {\n const postText = getPostText(status);\n if (postText) {\n speak(postText, language);\n }\n }}\n >\n <Icon icon=\"speak\" />\n <span>Speak</span>\n </MenuItem>\n )}\n </div>\n )\n )}\n </>\n )}\n {((!isSizeLarge && sameInstance) ||\n enableTranslate ||\n !language ||\n differentLanguage) && <MenuDivider />}\n {!isSizeLarge && (\n <>\n <MenuLink\n to={instance ? `/${instance}/s/${id}` : `/s/${id}`}\n onClick={(e) => {\n onStatusLinkClick(e, status);\n }}\n >\n <Icon icon=\"arrows-right\" />\n <small>\n View post by @{username || acct}\n <br />\n <span class=\"more-insignificant\">\n {visibilityText[visibility]} • {createdDateText}\n </span>\n </small>\n </MenuLink>\n </>\n )}\n {!!editedAt && (\n <>\n <MenuItem\n onClick={() => {\n setShowEdited(id);\n }}\n >\n <Icon icon=\"history\" />\n <small>\n Show Edit History\n <br />\n <span class=\"more-insignificant\">Edited: {editedDateText}</span>\n </small>\n </MenuItem>\n </>\n )}\n <MenuItem href={url} target=\"_blank\">\n <Icon icon=\"external\" />\n <small class=\"menu-double-lines\">{nicePostURL(url)}</small>\n </MenuItem>\n <div class=\"menu-horizontal\">\n <MenuItem\n onClick={() => {\n // Copy url to clipboard\n try {\n navigator.clipboard.writeText(url);\n showToast('Link copied');\n } catch (e) {\n console.error(e);\n showToast('Unable to copy link');\n }\n }}\n >\n <Icon icon=\"link\" />\n <span>Copy</span>\n </MenuItem>\n {isPublic &&\n navigator?.share &&\n navigator?.canShare?.({\n url,\n }) && (\n <MenuItem\n onClick={() => {\n try {\n navigator.share({\n url,\n });\n } catch (e) {\n console.error(e);\n alert(\"Sharing doesn't seem to work.\");\n }\n }}\n >\n <Icon icon=\"share\" />\n <span>Share…</span>\n </MenuItem>\n )}\n </div>\n {isPublic && isSizeLarge && (\n <MenuItem\n onClick={() => {\n setShowEmbed(true);\n }}\n >\n <Icon icon=\"code\" />\n <span>Embed post</span>\n </MenuItem>\n )}\n {(isSelf || mentionSelf) && <MenuDivider />}\n {(isSelf || mentionSelf) && (\n <MenuItem\n onClick={async () => {\n try {\n const newStatus = await masto.v1.statuses\n .$select(id)\n [muted ? 'unmute' : 'mute']();\n saveStatus(newStatus, instance);\n showToast(muted ? 'Conversation unmuted' : 'Conversation muted');\n } catch (e) {\n console.error(e);\n showToast(\n muted\n ? 'Unable to unmute conversation'\n : 'Unable to mute conversation',\n );\n }\n }}\n >\n {muted ? (\n <>\n <Icon icon=\"unmute\" />\n <span>Unmute conversation</span>\n </>\n ) : (\n <>\n <Icon icon=\"mute\" />\n <span>Mute conversation</span>\n </>\n )}\n </MenuItem>\n )}\n {isSelf && isPinnable && (\n <MenuItem\n onClick={async () => {\n try {\n const newStatus = await masto.v1.statuses\n .$select(id)\n [pinned ? 'unpin' : 'pin']();\n saveStatus(newStatus, instance);\n showToast(\n pinned\n ? 'Post unpinned from profile'\n : 'Post pinned to profile',\n );\n } catch (e) {\n console.error(e);\n showToast(pinned ? 'Unable to unpin post' : 'Unable to pin post');\n }\n }}\n >\n {pinned ? (\n <>\n <Icon icon=\"unpin\" />\n <span>Unpin from profile</span>\n </>\n ) : (\n <>\n <Icon icon=\"pin\" />\n <span>Pin to profile</span>\n </>\n )}\n </MenuItem>\n )}\n {isSelf && (\n <div class=\"menu-horizontal\">\n {supports('@mastodon/post-edit') && (\n <MenuItem\n onClick={() => {\n showCompose({\n editStatus: status,\n });\n }}\n >\n <Icon icon=\"pencil\" />\n <span>Edit</span>\n </MenuItem>\n )}\n {isSizeLarge && (\n <MenuConfirm\n subMenu\n confirmLabel={\n <>\n <Icon icon=\"trash\" />\n <span>Delete this post?</span>\n </>\n }\n menuItemClassName=\"danger\"\n onClick={() => {\n // const yes = confirm('Delete this post?');\n // if (yes) {\n (async () => {\n try {\n await masto.v1.statuses.$select(id).remove();\n const cachedStatus = getStatus(id, instance);\n cachedStatus._deleted = true;\n showToast('Deleted');\n } catch (e) {\n console.error(e);\n showToast('Unable to delete');\n }\n })();\n // }\n }}\n >\n <Icon icon=\"trash\" />\n <span>Delete…</span>\n </MenuConfirm>\n )}\n </div>\n )}\n {!isSelf && isSizeLarge && (\n <>\n <MenuDivider />\n <MenuItem\n className=\"danger\"\n onClick={() => {\n states.showReportModal = {\n account: status.account,\n post: status,\n };\n }}\n >\n <Icon icon=\"flag\" />\n <span>Report post…</span>\n </MenuItem>\n </>\n )}\n </>\n );\n\n const contextMenuRef = useRef();\n const [isContextMenuOpen, setIsContextMenuOpen] = useState(false);\n const [contextMenuProps, setContextMenuProps] = useState({});\n\n const showContextMenu =\n allowContextMenu || (!isSizeLarge && !previewMode && !_deleted && !quoted);\n\n // Only iOS/iPadOS browsers don't support contextmenu\n // Some comments report iPadOS might support contextmenu if a mouse is connected\n const bindLongPressContext = useLongPress(\n isIOS && showContextMenu\n ? (e) => {\n if (e.pointerType === 'mouse') return;\n // There's 'pen' too, but not sure if contextmenu event would trigger from a pen\n\n const { clientX, clientY } = e.touches?.[0] || e;\n // link detection copied from onContextMenu because here it works\n const link = e.target.closest('a');\n if (\n link &&\n statusRef.current.contains(link) &&\n !link.getAttribute('href').startsWith('#')\n )\n return;\n e.preventDefault();\n setContextMenuProps({\n anchorPoint: {\n x: clientX,\n y: clientY,\n },\n direction: 'right',\n });\n setIsContextMenuOpen(true);\n }\n : null,\n {\n threshold: 600,\n captureEvent: true,\n detect: 'touch',\n cancelOnMovement: 2, // true allows movement of up to 25 pixels\n },\n );\n\n const hotkeysEnabled = !readOnly && !previewMode && !quoted;\n const rRef = useHotkeys('r, shift+r', replyStatus, {\n enabled: hotkeysEnabled,\n });\n const fRef = useHotkeys('f, l', favouriteStatusNotify, {\n enabled: hotkeysEnabled,\n });\n const dRef = useHotkeys('d', bookmarkStatusNotify, {\n enabled: hotkeysEnabled,\n });\n const bRef = useHotkeys(\n 'shift+b',\n () => {\n (async () => {\n try {\n const done = await confirmBoostStatus();\n if (!isSizeLarge && done) {\n showToast(\n reblogged\n ? `Unboosted @${username || acct}'s post`\n : `Boosted @${username || acct}'s post`,\n );\n }\n } catch (e) {}\n })();\n },\n {\n enabled: hotkeysEnabled && canBoost,\n },\n );\n const xRef = useHotkeys('x', (e) => {\n const activeStatus = document.activeElement.closest(\n '.status-link, .status-focus',\n );\n if (activeStatus) {\n const spoilerButton = activeStatus.querySelector(\n '.spoiler-button:not(.spoiling)',\n );\n if (spoilerButton) {\n e.stopPropagation();\n spoilerButton.click();\n } else {\n const spoilerMediaButton = activeStatus.querySelector(\n '.spoiler-media-button:not(.spoiling)',\n );\n if (spoilerMediaButton) {\n e.stopPropagation();\n spoilerMediaButton.click();\n }\n }\n }\n });\n\n const displayedMediaAttachments = mediaAttachments.slice(\n 0,\n isSizeLarge ? undefined : 4,\n );\n const showMultipleMediaCaptions =\n mediaAttachments.length > 1 &&\n displayedMediaAttachments.some(\n (media) => !!media.description && !isMediaCaptionLong(media.description),\n );\n const captionChildren = useMemo(() => {\n if (!showMultipleMediaCaptions) return null;\n const attachments = [];\n displayedMediaAttachments.forEach((media, i) => {\n if (!media.description) return;\n const index = attachments.findIndex(\n (attachment) => attachment.media.description === media.description,\n );\n if (index === -1) {\n attachments.push({\n media,\n indices: [i],\n });\n } else {\n attachments[index].indices.push(i);\n }\n });\n return attachments.map(({ media, indices }) => (\n <div\n key={media.id}\n data-caption-index={indices.map((i) => i + 1).join(' ')}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n states.showMediaAlt = {\n alt: media.description,\n lang: language,\n };\n }}\n title={media.description}\n >\n <sup>{indices.map((i) => i + 1).join(' ')}</sup> {media.description}\n </div>\n ));\n\n // return displayedMediaAttachments.map(\n // (media, i) =>\n // !!media.description && (\n // <div\n // key={media.id}\n // data-caption-index={i + 1}\n // onClick={(e) => {\n // e.preventDefault();\n // e.stopPropagation();\n // states.showMediaAlt = {\n // alt: media.description,\n // lang: language,\n // };\n // }}\n // title={media.description}\n // >\n // <sup>{i + 1}</sup> {media.description}\n // </div>\n // ),\n // );\n }, [showMultipleMediaCaptions, displayedMediaAttachments, language]);\n\n const isThread = useMemo(() => {\n return (\n (!!inReplyToId && inReplyToAccountId === status.account?.id) ||\n !!snapStates.statusThreadNumber[sKey]\n );\n }, [\n inReplyToId,\n inReplyToAccountId,\n status.account?.id,\n snapStates.statusThreadNumber[sKey],\n ]);\n\n const showCommentHint = useMemo(() => {\n return (\n enableCommentHint &&\n !isThread &&\n !withinContext &&\n !inReplyToId &&\n visibility === 'public' &&\n repliesCount > 0\n );\n }, [\n enableCommentHint,\n isThread,\n withinContext,\n inReplyToId,\n repliesCount,\n visibility,\n ]);\n const showCommentCount = useMemo(() => {\n if (\n card ||\n poll ||\n sensitive ||\n spoilerText ||\n mediaAttachments?.length ||\n isThread ||\n withinContext ||\n inReplyToId ||\n repliesCount <= 0\n ) {\n return false;\n }\n const questionRegex = /[???︖❓❔⁇⁈⁉¿‽؟]/;\n const containsQuestion = questionRegex.test(content);\n if (!containsQuestion) return false;\n const contentLength = htmlContentLength(content);\n if (contentLength > 0 && contentLength <= SHOW_COMMENT_COUNT_LIMIT) {\n return true;\n }\n }, [\n card,\n poll,\n sensitive,\n spoilerText,\n mediaAttachments,\n reblog,\n isThread,\n withinContext,\n inReplyToId,\n repliesCount,\n content,\n ]);\n\n return (\n <StatusParent>\n {showReplyParent && !!(inReplyToId && inReplyToAccountId) && (\n <StatusCompact sKey={sKey} />\n )}\n <article\n data-state-post-id={sKey}\n ref={(node) => {\n statusRef.current = node;\n // Use parent node if it's in focus\n // Use case: <a><status /></a>\n // When navigating (j/k), the <a> is focused instead of <status />\n // Hotkey binding doesn't bubble up thus this hack\n const nodeRef =\n node?.closest?.(\n '.timeline-item, .timeline-item-alt, .status-link, .status-focus',\n ) || node;\n rRef.current = nodeRef;\n fRef.current = nodeRef;\n dRef.current = nodeRef;\n bRef.current = nodeRef;\n xRef.current = nodeRef;\n }}\n tabindex=\"-1\"\n class={`status ${\n !withinContext && inReplyToId && inReplyToAccount\n ? 'status-reply-to'\n : ''\n } visibility-${visibility} ${_pinned ? 'status-pinned' : ''} ${\n SIZE_CLASS[size]\n } ${_deleted ? 'status-deleted' : ''} ${quoted ? 'status-card' : ''} ${\n isContextMenuOpen ? 'status-menu-open' : ''\n } ${mediaFirst && hasMediaAttachments ? 'status-media-first' : ''}`}\n onMouseEnter={debugHover}\n onContextMenu={(e) => {\n if (!showContextMenu) return;\n if (e.metaKey) return;\n // console.log('context menu', e);\n const link = e.target.closest('a');\n if (\n link &&\n statusRef.current.contains(link) &&\n !link.getAttribute('href').startsWith('#')\n )\n return;\n\n // If there's selected text, don't show custom context menu\n const selection = window.getSelection?.();\n if (selection.toString().length > 0) {\n const { anchorNode } = selection;\n if (statusRef.current?.contains(anchorNode)) {\n return;\n }\n }\n e.preventDefault();\n setContextMenuProps({\n anchorPoint: {\n x: e.clientX,\n y: e.clientY,\n },\n direction: 'right',\n });\n setIsContextMenuOpen(true);\n }}\n {...(showContextMenu ? bindLongPressContext() : {})}\n >\n {showContextMenu && (\n <ControlledMenu\n ref={contextMenuRef}\n state={isContextMenuOpen ? 'open' : undefined}\n {...contextMenuProps}\n onClose={(e) => {\n setIsContextMenuOpen(false);\n // statusRef.current?.focus?.();\n if (e?.reason === 'click') {\n statusRef.current?.closest('[tabindex]')?.focus?.();\n }\n }}\n portal={{\n target: document.body,\n }}\n containerProps={{\n style: {\n // Higher than the backdrop\n zIndex: 1001,\n },\n onClick: () => {\n contextMenuRef.current?.closeMenu?.();\n },\n }}\n overflow=\"auto\"\n boundingBoxPadding={safeBoundingBoxPadding()}\n unmountOnClose\n >\n {StatusMenuItems}\n </ControlledMenu>\n )}\n {showActionsBar &&\n size !== 'l' &&\n !previewMode &&\n !readOnly &&\n !_deleted &&\n !quoted && (\n <div\n class={`status-actions ${\n isContextMenuOpen === 'actions-bar' ? 'open' : ''\n }`}\n ref={actionsRef}\n >\n <StatusButton\n size=\"s\"\n title=\"Reply\"\n alt=\"Reply\"\n class=\"reply-button\"\n icon=\"comment\"\n iconSize=\"m\"\n onClick={replyStatus}\n />\n <StatusButton\n size=\"s\"\n checked={favourited}\n title={['Like', 'Unlike']}\n alt={['Like', 'Liked']}\n class=\"favourite-button\"\n icon=\"heart\"\n iconSize=\"m\"\n count={favouritesCount}\n onClick={favouriteStatusNotify}\n />\n <button\n type=\"button\"\n title=\"More\"\n class=\"plain more-button\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n setContextMenuProps({\n anchorRef: {\n current: e.currentTarget,\n },\n align: 'start',\n direction: 'left',\n gap: 0,\n shift: -8,\n });\n setIsContextMenuOpen('actions-bar');\n }}\n >\n <Icon icon=\"more2\" size=\"m\" alt=\"More\" />\n </button>\n </div>\n )}\n {size !== 'l' && (\n <div class=\"status-badge\">\n {reblogged && <Icon class=\"reblog\" icon=\"rocket\" size=\"s\" />}\n {favourited && <Icon class=\"favourite\" icon=\"heart\" size=\"s\" />}\n {bookmarked && <Icon class=\"bookmark\" icon=\"bookmark\" size=\"s\" />}\n {_pinned && <Icon class=\"pin\" icon=\"pin\" size=\"s\" />}\n </div>\n )}\n {size !== 's' && (\n <a\n href={accountURL}\n tabindex=\"-1\"\n // target=\"_blank\"\n title={`@${acct}`}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n states.showAccount = {\n account: status.account,\n instance,\n };\n }}\n >\n <Avatar url={avatarStatic || avatar} size=\"xxl\" squircle={bot} />\n </a>\n )}\n <div class=\"container\">\n <div class=\"meta\">\n <span class=\"meta-name\">\n <NameText\n account={status.account}\n instance={instance}\n showAvatar={size === 's'}\n showAcct={isSizeLarge}\n />\n </span>\n {/* {inReplyToAccount && !withinContext && size !== 's' && (\n <>\n {' '}\n <span class=\"ib\">\n <Icon icon=\"arrow-right\" class=\"arrow\" />{' '}\n <NameText account={inReplyToAccount} instance={instance} short />\n </span>\n </>\n )} */}\n {/* </span> */}{' '}\n {size !== 'l' &&\n (_deleted ? (\n <span class=\"status-deleted-tag\">Deleted</span>\n ) : url && !previewMode && !readOnly && !quoted ? (\n <Link\n to={instance ? `/${instance}/s/${id}` : `/s/${id}`}\n onClick={(e) => {\n if (\n e.metaKey ||\n e.ctrlKey ||\n e.shiftKey ||\n e.altKey ||\n e.which === 2\n ) {\n return;\n }\n e.preventDefault();\n e.stopPropagation();\n onStatusLinkClick?.(e, status);\n setContextMenuProps({\n anchorRef: {\n current: e.currentTarget,\n },\n align: 'end',\n direction: 'bottom',\n gap: 4,\n });\n setIsContextMenuOpen(true);\n }}\n class={`time ${\n isContextMenuOpen && contextMenuProps?.anchorRef\n ? 'is-open'\n : ''\n }`}\n >\n {showCommentHint && !showCommentCount ? (\n <Icon\n icon=\"comment2\"\n size=\"s\"\n alt={`${repliesCount} ${\n repliesCount === 1 ? 'reply' : 'replies'\n }`}\n />\n ) : (\n visibility !== 'public' &&\n visibility !== 'direct' && (\n <Icon\n icon={visibilityIconsMap[visibility]}\n alt={visibilityText[visibility]}\n size=\"s\"\n />\n )\n )}{' '}\n <RelativeTime datetime={createdAtDate} format=\"micro\" />\n {!previewMode && !readOnly && (\n <Icon icon=\"more2\" class=\"more\" />\n )}\n </Link>\n ) : (\n // <Menu\n // instanceRef={menuInstanceRef}\n // portal={{\n // target: document.body,\n // }}\n // containerProps={{\n // style: {\n // // Higher than the backdrop\n // zIndex: 1001,\n // },\n // onClick: (e) => {\n // if (e.target === e.currentTarget)\n // menuInstanceRef.current?.closeMenu?.();\n // },\n // }}\n // align=\"end\"\n // gap={4}\n // overflow=\"auto\"\n // viewScroll=\"close\"\n // boundingBoxPadding=\"8 8 8 8\"\n // unmountOnClose\n // menuButton={({ open }) => (\n // <Link\n // to={instance ? `/${instance}/s/${id}` : `/s/${id}`}\n // onClick={(e) => {\n // e.preventDefault();\n // e.stopPropagation();\n // onStatusLinkClick?.(e, status);\n // }}\n // class={`time ${open ? 'is-open' : ''}`}\n // >\n // <Icon\n // icon={visibilityIconsMap[visibility]}\n // alt={visibilityText[visibility]}\n // size=\"s\"\n // />{' '}\n // <RelativeTime datetime={createdAtDate} format=\"micro\" />\n // </Link>\n // )}\n // >\n // {StatusMenuItems}\n // </Menu>\n <span class=\"time\">\n {visibility !== 'public' && visibility !== 'direct' && (\n <>\n <Icon\n icon={visibilityIconsMap[visibility]}\n alt={visibilityText[visibility]}\n size=\"s\"\n />{' '}\n </>\n )}\n <RelativeTime datetime={createdAtDate} format=\"micro\" />\n </span>\n ))}\n </div>\n {visibility === 'direct' && (\n <>\n <div class=\"status-direct-badge\">Private mention</div>{' '}\n </>\n )}\n {!withinContext && (\n <>\n {isThread ? (\n <div class=\"status-thread-badge\">\n <Icon icon=\"thread\" size=\"s\" />\n Thread\n {snapStates.statusThreadNumber[sKey]\n ? ` ${snapStates.statusThreadNumber[sKey]}/X`\n : ''}\n </div>\n ) : (\n !!inReplyToId &&\n !!inReplyToAccount &&\n (!!spoilerText ||\n !mentions.find((mention) => {\n return mention.id === inReplyToAccountId;\n })) && (\n <div class=\"status-reply-badge\">\n <Icon icon=\"reply\" />{' '}\n <NameText\n account={inReplyToAccount}\n instance={instance}\n short\n />\n </div>\n )\n )}\n </>\n )}\n <div\n class={`content-container ${\n spoilerText || sensitive ? 'has-spoiler' : ''\n } ${showSpoiler ? 'show-spoiler' : ''} ${\n showSpoilerMedia ? 'show-media' : ''\n }`}\n data-content-text-weight={contentTextWeight ? textWeight() : null}\n style={\n (isSizeLarge || contentTextWeight) && {\n '--content-text-weight': textWeight(),\n }\n }\n >\n {mediaFirst && hasMediaAttachments ? (\n <>\n {(!!spoilerText || !!sensitive) && !readingExpandSpoilers && (\n <>\n {!!spoilerText && (\n <span\n class=\"spoiler-content media-first-spoiler-content\"\n lang={language}\n dir=\"auto\"\n ref={spoilerContentRef}\n data-read-more={readMoreText}\n >\n <EmojiText text={spoilerText} emojis={emojis} />{' '}\n </span>\n )}\n <button\n class={`light spoiler-button media-first-spoiler-button ${\n showSpoiler ? 'spoiling' : ''\n }`}\n type=\"button\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n if (showSpoiler) {\n delete states.spoilers[id];\n if (!readingExpandSpoilers) {\n delete states.spoilersMedia[id];\n }\n } else {\n states.spoilers[id] = true;\n if (!readingExpandSpoilers) {\n states.spoilersMedia[id] = true;\n }\n }\n }}\n >\n <Icon icon={showSpoiler ? 'eye-open' : 'eye-close'} />{' '}\n {showSpoiler ? 'Show less' : 'Show content'}\n </button>\n </>\n )}\n <MediaFirstContainer\n mediaAttachments={mediaAttachments}\n language={language}\n postID={id}\n instance={instance}\n />\n {!!content && (\n <div class=\"media-first-content content\" ref={contentRef}>\n <PostContent\n post={status}\n instance={instance}\n previewMode={previewMode}\n />\n </div>\n )}\n </>\n ) : (\n <>\n {!!spoilerText && (\n <>\n <div\n class=\"content spoiler-content\"\n lang={language}\n dir=\"auto\"\n ref={spoilerContentRef}\n data-read-more={readMoreText}\n >\n <p>\n <EmojiText text={spoilerText} emojis={emojis} />\n </p>\n </div>\n {readingExpandSpoilers || previewMode ? (\n <div class=\"spoiler-divider\">\n <Icon icon=\"eye-open\" /> Content warning\n </div>\n ) : (\n <button\n class={`light spoiler-button ${\n showSpoiler ? 'spoiling' : ''\n }`}\n type=\"button\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n if (showSpoiler) {\n delete states.spoilers[id];\n if (!readingExpandSpoilers) {\n delete states.spoilersMedia[id];\n }\n } else {\n states.spoilers[id] = true;\n if (!readingExpandSpoilers) {\n states.spoilersMedia[id] = true;\n }\n }\n }}\n >\n <Icon icon={showSpoiler ? 'eye-open' : 'eye-close'} />{' '}\n {showSpoiler ? 'Show less' : 'Show content'}\n </button>\n )}\n </>\n )}\n {!!content && (\n <div\n class=\"content\"\n ref={contentRef}\n data-read-more={readMoreText}\n >\n <PostContent\n post={status}\n instance={instance}\n previewMode={previewMode}\n />\n <QuoteStatuses id={id} instance={instance} level={quoted} />\n </div>\n )}\n {!!poll && (\n <Poll\n lang={language}\n poll={poll}\n readOnly={readOnly || !sameInstance || !authenticated}\n onUpdate={(newPoll) => {\n states.statuses[sKey].poll = newPoll;\n }}\n refresh={() => {\n return masto.v1.polls\n .$select(poll.id)\n .fetch()\n .then((pollResponse) => {\n states.statuses[sKey].poll = pollResponse;\n })\n .catch((e) => {}); // Silently fail\n }}\n votePoll={(choices) => {\n return masto.v1.polls\n .$select(poll.id)\n .votes.create({\n choices,\n })\n .then((pollResponse) => {\n states.statuses[sKey].poll = pollResponse;\n })\n .catch((e) => {}); // Silently fail\n }}\n />\n )}\n {(((enableTranslate || inlineTranslate) &&\n !!content.trim() &&\n !!getHTMLText(emojifyText(content, emojis)) &&\n differentLanguage) ||\n forceTranslate) && (\n <TranslationBlock\n forceTranslate={forceTranslate || inlineTranslate}\n mini={!isSizeLarge && !withinContext}\n sourceLanguage={language}\n autoDetected={languageAutoDetected}\n text={getPostText(status)}\n />\n )}\n {!previewMode &&\n sensitive &&\n !!mediaAttachments.length &&\n readingExpandMedia !== 'show_all' && (\n <button\n class={`plain spoiler-media-button ${\n showSpoilerMedia ? 'spoiling' : ''\n }`}\n type=\"button\"\n hidden={!readingExpandSpoilers && !!spoilerText}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n if (showSpoilerMedia) {\n delete states.spoilersMedia[id];\n } else {\n states.spoilersMedia[id] = true;\n }\n }}\n >\n <Icon\n icon={showSpoilerMedia ? 'eye-open' : 'eye-close'}\n />{' '}\n {showSpoilerMedia ? 'Show less' : 'Show media'}\n </button>\n )}\n {!!mediaAttachments.length &&\n (mediaAttachments.length > 1 &&\n (isSizeLarge || (withinContext && size === 'm')) ? (\n <div class=\"media-large-container\">\n {mediaAttachments.map((media, i) => (\n <div key={media.id} class={`media-container media-eq1`}>\n <Media\n media={media}\n autoAnimate\n showCaption\n allowLongerCaption={!content}\n lang={language}\n to={`/${instance}/s/${id}?${\n withinContext ? 'media' : 'media-only'\n }=${i + 1}`}\n onClick={\n onMediaClick\n ? (e) => onMediaClick(e, i, media, status)\n : undefined\n }\n />\n </div>\n ))}\n </div>\n ) : (\n <MultipleMediaFigure\n lang={language}\n enabled={showMultipleMediaCaptions}\n captionChildren={captionChildren}\n >\n <div\n ref={mediaContainerRef}\n class={`media-container media-eq${\n mediaAttachments.length\n } ${mediaAttachments.length > 2 ? 'media-gt2' : ''} ${\n mediaAttachments.length > 4 ? 'media-gt4' : ''\n }`}\n >\n {displayedMediaAttachments.map((media, i) => (\n <Media\n key={media.id}\n media={media}\n autoAnimate={isSizeLarge}\n showCaption={mediaAttachments.length === 1}\n allowLongerCaption={\n !content && mediaAttachments.length === 1\n }\n lang={language}\n altIndex={\n showMultipleMediaCaptions &&\n !!media.description &&\n i + 1\n }\n to={`/${instance}/s/${id}?${\n withinContext ? 'media' : 'media-only'\n }=${i + 1}`}\n onClick={\n onMediaClick\n ? (e) => {\n onMediaClick(e, i, media, status);\n }\n : undefined\n }\n />\n ))}\n </div>\n </MultipleMediaFigure>\n ))}\n {!!card &&\n /^https/i.test(card?.url) &&\n !sensitive &&\n !spoilerText &&\n !poll &&\n !mediaAttachments.length &&\n !snapStates.statusQuotes[sKey] && (\n <Card\n card={card}\n selfReferential={\n card?.url === status.url || card?.url === status.uri\n }\n instance={currentInstance}\n />\n )}\n </>\n )}\n </div>\n {!isSizeLarge && showCommentCount && (\n <div class=\"content-comment-hint insignificant\">\n <Icon icon=\"comment2\" alt=\"Replies\" /> {repliesCount}\n </div>\n )}\n {isSizeLarge && (\n <>\n <div class=\"extra-meta\">\n {_deleted ? (\n <span class=\"status-deleted-tag\">Deleted</span>\n ) : (\n <>\n {/* <Icon\n icon={visibilityIconsMap[visibility]}\n alt={visibilityText[visibility]}\n /> */}\n <span>{visibilityText[visibility]}</span> •{' '}\n <a href={url} target=\"_blank\" rel=\"noopener noreferrer\">\n <time\n class=\"created\"\n datetime={createdAtDate.toISOString()}\n title={createdAtDate.toLocaleString()}\n >\n {createdDateText}\n </time>\n </a>\n {editedAt && (\n <>\n {' '}\n • <Icon icon=\"pencil\" alt=\"Edited\" />{' '}\n <time\n tabIndex=\"0\"\n class=\"edited\"\n datetime={editedAtDate.toISOString()}\n onClick={() => {\n setShowEdited(id);\n }}\n >\n {editedDateText}\n </time>\n </>\n )}\n </>\n )}\n </div>\n {!!emojiReactions?.length && (\n <div class=\"emoji-reactions\">\n {emojiReactions.map((emojiReaction) => {\n const { name, count, me, url, staticUrl } = emojiReaction;\n if (url) {\n // Some servers return url and staticUrl\n return (\n <span\n class={`emoji-reaction tag ${\n me ? '' : 'insignificant'\n }`}\n >\n <CustomEmoji\n alt={name}\n url={url}\n staticUrl={staticUrl}\n />{' '}\n {count}\n </span>\n );\n }\n const isShortCode = /^:.+?:$/.test(name);\n if (isShortCode) {\n const emoji = emojis.find(\n (e) =>\n e.shortcode ===\n name.replace(/^:/, '').replace(/:$/, ''),\n );\n if (emoji) {\n return (\n <span\n class={`emoji-reaction tag ${\n me ? '' : 'insignificant'\n }`}\n >\n <CustomEmoji\n alt={name}\n url={emoji.url}\n staticUrl={emoji.staticUrl}\n />{' '}\n {count}\n </span>\n );\n }\n }\n return (\n <span\n class={`emoji-reaction tag ${\n me ? '' : 'insignificant'\n }`}\n >\n {name} {count}\n </span>\n );\n })}\n </div>\n )}\n <div class={`actions ${_deleted ? 'disabled' : ''}`}>\n <div class=\"action has-count\">\n <StatusButton\n title=\"Reply\"\n alt=\"Comments\"\n class=\"reply-button\"\n icon=\"comment\"\n count={repliesCount}\n onClick={replyStatus}\n />\n </div>\n {/* <div class=\"action has-count\">\n <StatusButton\n checked={reblogged}\n title={['Boost', 'Unboost']}\n alt={['Boost', 'Boosted']}\n class=\"reblog-button\"\n icon=\"rocket\"\n count={reblogsCount}\n onClick={boostStatus}\n disabled={!canBoost}\n />\n </div> */}\n <MenuConfirm\n disabled={!canBoost}\n onClick={confirmBoostStatus}\n confirmLabel={\n <>\n <Icon icon=\"rocket\" />\n <span>{reblogged ? 'Unboost' : 'Boost'}</span>\n </>\n }\n menuExtras={\n <MenuItem\n onClick={() => {\n showCompose({\n draftStatus: {\n status: `\\n${url}`,\n },\n });\n }}\n >\n <Icon icon=\"quote\" />\n <span>Quote</span>\n </MenuItem>\n }\n menuFooter={\n mediaNoDesc &&\n !reblogged && (\n <div class=\"footer\">\n <Icon icon=\"alert\" />\n Some media have no descriptions.\n </div>\n )\n }\n >\n <div class=\"action has-count\">\n <StatusButton\n checked={reblogged}\n title={['Boost', 'Unboost']}\n alt={['Boost', 'Boosted']}\n class=\"reblog-button\"\n icon=\"rocket\"\n count={reblogsCount}\n // onClick={boostStatus}\n disabled={!canBoost}\n />\n </div>\n </MenuConfirm>\n <div class=\"action has-count\">\n <StatusButton\n checked={favourited}\n title={['Like', 'Unlike']}\n alt={['Like', 'Liked']}\n class=\"favourite-button\"\n icon=\"heart\"\n count={favouritesCount}\n onClick={favouriteStatus}\n />\n </div>\n {supports('@mastodon/post-bookmark') && (\n <div class=\"action\">\n <StatusButton\n checked={bookmarked}\n title={['Bookmark', 'Unbookmark']}\n alt={['Bookmark', 'Bookmarked']}\n class=\"bookmark-button\"\n icon=\"bookmark\"\n onClick={bookmarkStatus}\n />\n </div>\n )}\n <Menu2\n portal={{\n target:\n document.querySelector('.status-deck') || document.body,\n }}\n align=\"end\"\n gap={4}\n overflow=\"auto\"\n viewScroll=\"close\"\n menuButton={\n <div class=\"action\">\n <button\n type=\"button\"\n title=\"More\"\n class=\"plain more-button\"\n >\n <Icon icon=\"more\" size=\"l\" alt=\"More\" />\n </button>\n </div>\n }\n >\n {StatusMenuItems}\n </Menu2>\n </div>\n </>\n )}\n </div>\n {!!showEdited && (\n <Modal\n onClick={(e) => {\n if (e.target === e.currentTarget) {\n setShowEdited(false);\n // statusRef.current?.focus();\n }\n }}\n >\n <EditedAtModal\n statusID={showEdited}\n instance={instance}\n fetchStatusHistory={() => {\n return masto.v1.statuses.$select(showEdited).history.list();\n }}\n onClose={() => {\n setShowEdited(false);\n statusRef.current?.focus();\n }}\n />\n </Modal>\n )}\n {!!showEmbed && (\n <Modal\n onClick={(e) => {\n if (e.target === e.currentTarget) {\n setShowEmbed(false);\n }\n }}\n >\n <EmbedModal\n post={status}\n instance={instance}\n onClose={() => {\n setShowEmbed(false);\n }}\n />\n </Modal>\n )}\n </article>\n </StatusParent>\n );\n}\n\nfunction MultipleMediaFigure(props) {\n const { enabled, children, lang, captionChildren } = props;\n if (!enabled || !captionChildren) return children;\n return (\n <figure class=\"media-figure-multiple\">\n {children}\n <figcaption lang={lang} dir=\"auto\">\n {captionChildren}\n </figcaption>\n </figure>\n );\n}\n\nfunction MediaFirstContainer(props) {\n const { mediaAttachments, language, postID, instance } = props;\n const moreThanOne = mediaAttachments.length > 1;\n\n const carouselRef = useRef();\n const [currentIndex, setCurrentIndex] = useState(0);\n\n useEffect(() => {\n let handleScroll = () => {\n const { clientWidth, scrollLeft } = carouselRef.current;\n const index = Math.round(Math.abs(scrollLeft) / clientWidth);\n setCurrentIndex(index);\n };\n if (carouselRef.current) {\n carouselRef.current.addEventListener('scroll', handleScroll, {\n passive: true,\n });\n }\n return () => {\n if (carouselRef.current) {\n carouselRef.current.removeEventListener('scroll', handleScroll);\n }\n };\n }, []);\n\n return (\n <>\n <div class=\"media-first-container\">\n <div class=\"media-first-carousel\" ref={carouselRef}>\n {mediaAttachments.map((media, i) => (\n <div class=\"media-first-item\" key={media.id}>\n <Media\n media={media}\n lang={language}\n to={`/${instance}/s/${postID}?media=${i + 1}`}\n />\n </div>\n ))}\n </div>\n {moreThanOne && (\n <div class=\"media-carousel-controls\">\n <div class=\"carousel-indexer\">\n {currentIndex + 1}/{mediaAttachments.length}\n </div>\n <label class=\"media-carousel-button\">\n <button\n type=\"button\"\n class=\"carousel-button\"\n hidden={currentIndex === 0}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n carouselRef.current.focus();\n carouselRef.current.scrollTo({\n left:\n carouselRef.current.clientWidth *\n (currentIndex - 1) *\n (isRTL() ? -1 : 1),\n behavior: 'smooth',\n });\n }}\n >\n <Icon icon=\"arrow-left\" />\n </button>\n </label>\n <label class=\"media-carousel-button\">\n <button\n type=\"button\"\n class=\"carousel-button\"\n hidden={currentIndex === mediaAttachments.length - 1}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n carouselRef.current.focus();\n carouselRef.current.scrollTo({\n left:\n carouselRef.current.clientWidth *\n (currentIndex + 1) *\n (isRTL() ? -1 : 1),\n behavior: 'smooth',\n });\n }}\n >\n <Icon icon=\"arrow-right\" />\n </button>\n </label>\n </div>\n )}\n </div>\n {moreThanOne && (\n <div\n class=\"media-carousel-dots\"\n style={{\n '--dots-count': mediaAttachments.length,\n }}\n >\n {mediaAttachments.map((media, i) => (\n <span\n key={media.id}\n class={`carousel-dot ${i === currentIndex ? 'active' : ''}`}\n />\n ))}\n </div>\n )}\n </>\n );\n}\n\nfunction getDomain(url) {\n return punycode.toUnicode(\n URL.parse(url)\n .hostname.replace(/^www\\./, '')\n .replace(/\\/$/, ''),\n );\n}\n\n// \"Post\": Quote post + card link preview combo\n// Assume all links from these domains are \"posts\"\n// Mastodon links are \"posts\" too but they are converted to real quote posts and there's too many domains to check\n// This is just \"Progressive Enhancement\"\nfunction isCardPost(domain) {\n return ['x.com', 'twitter.com', 'threads.net', 'bsky.app'].includes(domain);\n}\n\nfunction Card({ card, selfReferential, instance }) {\n const snapStates = useSnapshot(states);\n const {\n blurhash,\n title,\n description,\n html,\n providerName,\n providerUrl,\n authorName,\n authorUrl,\n width,\n height,\n image,\n imageDescription,\n url,\n type,\n embedUrl,\n language,\n publishedAt,\n } = card;\n\n /* type\n link = Link OEmbed\n photo = Photo OEmbed\n video = Video OEmbed\n rich = iframe OEmbed. Not currently accepted, so won’t show up in practice.\n */\n\n const hasText = title || providerName || authorName;\n const isLandscape = width / height >= 1.2;\n const size = isLandscape ? 'large' : '';\n\n const [cardStatusURL, setCardStatusURL] = useState(null);\n // const [cardStatusID, setCardStatusID] = useState(null);\n useEffect(() => {\n if (hasText && image && !selfReferential && isMastodonLinkMaybe(url)) {\n unfurlMastodonLink(instance, url).then((result) => {\n if (!result) return;\n const { id, url } = result;\n setCardStatusURL('#' + url);\n\n // NOTE: This is for quote post\n // (async () => {\n // const { masto } = api({ instance });\n // const status = await masto.v1.statuses.$select(id).fetch();\n // saveStatus(status, instance);\n // setCardStatusID(id);\n // })();\n });\n }\n }, [hasText, image, selfReferential]);\n\n // if (cardStatusID) {\n // return (\n // <Status statusID={cardStatusID} instance={instance} size=\"s\" readOnly />\n // );\n // }\n\n if (snapStates.unfurledLinks[url]) return null;\n\n const hasIframeHTML = /<iframe/i.test(html);\n const handleClick = useCallback(\n (e) => {\n if (hasIframeHTML) {\n e.preventDefault();\n states.showEmbedModal = {\n html,\n url: url || embedUrl,\n width,\n height,\n };\n }\n },\n [hasIframeHTML],\n );\n\n if (hasText && (image || (type === 'photo' && blurhash))) {\n const domain = getDomain(url);\n let blurhashImage;\n const rgbAverageColor =\n image && blurhash ? getBlurHashAverageColor(blurhash) : null;\n if (!image) {\n const w = 44;\n const h = 44;\n const blurhashPixels = decodeBlurHash(blurhash, w, h);\n const canvas = window.OffscreenCanvas\n ? new OffscreenCanvas(1, 1)\n : document.createElement('canvas');\n canvas.width = w;\n canvas.height = h;\n const ctx = canvas.getContext('2d');\n ctx.imageSmoothingEnabled = false;\n const imageData = ctx.createImageData(w, h);\n imageData.data.set(blurhashPixels);\n ctx.putImageData(imageData, 0, 0);\n blurhashImage = canvas.toDataURL();\n }\n\n const isPost = isCardPost(domain);\n\n return (\n <a\n href={cardStatusURL || url}\n target={cardStatusURL ? null : '_blank'}\n rel=\"nofollow noopener noreferrer\"\n class={`card link ${isPost ? 'card-post' : ''} ${\n blurhashImage ? '' : size\n }`}\n style={{\n '--average-color':\n rgbAverageColor && `rgb(${rgbAverageColor.join(',')})`,\n }}\n onClick={handleClick}\n >\n <div class=\"card-image\">\n <img\n src={image || blurhashImage}\n width={width}\n height={height}\n loading=\"lazy\"\n alt={imageDescription || ''}\n onError={(e) => {\n try {\n e.target.style.display = 'none';\n } catch (e) {}\n }}\n style={{\n '--anim-duration':\n width &&\n height &&\n `${Math.min(Math.max(Math.max(width, height) / 100, 5), 120)}s`,\n }}\n />\n </div>\n <div class=\"meta-container\" lang={language}>\n <p class=\"meta domain\">\n <span class=\"domain\">{domain}</span>{' '}\n {!!publishedAt && <>· </>}\n {!!publishedAt && (\n <>\n <RelativeTime datetime={publishedAt} format=\"micro\" />\n </>\n )}\n </p>\n <p class=\"title\" dir=\"auto\" title={title}>\n {title}\n </p>\n <p class=\"meta\" dir=\"auto\" title={description}>\n {description ||\n (!!publishedAt && (\n <RelativeTime datetime={publishedAt} format=\"micro\" />\n ))}\n </p>\n </div>\n </a>\n );\n } else if (type === 'photo') {\n return (\n <a\n href={url}\n target=\"_blank\"\n rel=\"nofollow noopener noreferrer\"\n class=\"card photo\"\n onClick={handleClick}\n >\n <img\n src={embedUrl}\n width={width}\n height={height}\n alt={title || description}\n loading=\"lazy\"\n style={{\n height: 'auto',\n aspectRatio: `${width}/${height}`,\n }}\n />\n </a>\n );\n } else {\n if (type === 'video') {\n if (/youtube/i.test(providerName)) {\n // Get ID from e.g. https://www.youtube.com/watch?v=[VIDEO_ID]\n const videoID = url.match(/watch\\?v=([^&]+)/)?.[1];\n if (videoID) {\n return (\n <a class=\"card video\" onClick={handleClick}>\n <lite-youtube videoid={videoID} nocookie></lite-youtube>\n </a>\n );\n }\n }\n // return (\n // <div\n // class=\"card video\"\n // style={{\n // aspectRatio: `${width}/${height}`,\n // }}\n // dangerouslySetInnerHTML={{ __html: html }}\n // />\n // );\n }\n if (hasText && !image) {\n const domain = getDomain(url);\n const isPost = isCardPost(domain);\n return (\n <a\n href={cardStatusURL || url}\n target={cardStatusURL ? null : '_blank'}\n rel=\"nofollow noopener noreferrer\"\n class={`card link ${isPost ? 'card-post' : ''} no-image`}\n lang={language}\n dir=\"auto\"\n onClick={handleClick}\n >\n <div class=\"meta-container\">\n <p class=\"meta domain\">\n <span class=\"domain\">\n <Icon icon=\"link\" size=\"s\" /> <span>{domain}</span>\n </span>{' '}\n {!!publishedAt && <>· </>}\n {!!publishedAt && (\n <>\n <RelativeTime datetime={publishedAt} format=\"micro\" />\n </>\n )}\n </p>\n <p class=\"title\" title={title}>\n {title}\n </p>\n <p class=\"meta\" title={description || providerName || authorName}>\n {description || providerName || authorName}\n </p>\n </div>\n </a>\n );\n }\n }\n}\n\nfunction EditedAtModal({\n statusID,\n instance,\n fetchStatusHistory = () => {},\n onClose,\n}) {\n const [uiState, setUIState] = useState('default');\n const [editHistory, setEditHistory] = useState([]);\n\n useEffect(() => {\n setUIState('loading');\n (async () => {\n try {\n const editHistory = await fetchStatusHistory();\n console.log(editHistory);\n setEditHistory(editHistory);\n setUIState('default');\n } catch (e) {\n console.error(e);\n setUIState('error');\n }\n })();\n }, []);\n\n return (\n <div id=\"edit-history\" class=\"sheet\">\n {!!onClose && (\n <button type=\"button\" class=\"sheet-close\" onClick={onClose}>\n <Icon icon=\"x\" />\n </button>\n )}\n <header>\n <h2>Edit History</h2>\n {uiState === 'error' && <p>Failed to load history</p>}\n {uiState === 'loading' && (\n <p>\n <Loader abrupt /> Loading…\n </p>\n )}\n </header>\n <main tabIndex=\"-1\">\n {editHistory.length > 0 && (\n <ol>\n {editHistory.map((status) => {\n const { createdAt } = status;\n const createdAtDate = new Date(createdAt);\n return (\n <li key={createdAt} class=\"history-item\">\n <h3>\n <time>\n {niceDateTime(createdAtDate, {\n formatOpts: {\n weekday: 'short',\n second: 'numeric',\n },\n })}\n </time>\n </h3>\n <Status\n status={status}\n instance={instance}\n size=\"s\"\n withinContext\n readOnly\n previewMode\n />\n </li>\n );\n })}\n </ol>\n )}\n </main>\n </div>\n );\n}\n\nfunction generateHTMLCode(post, instance, level = 0) {\n const {\n account: {\n url: accountURL,\n displayName,\n acct,\n username,\n emojis: accountEmojis,\n bot,\n group,\n },\n id,\n poll,\n spoilerText,\n language,\n editedAt,\n createdAt,\n content,\n mediaAttachments,\n url,\n emojis,\n } = post;\n\n const sKey = statusKey(id, instance);\n const quotes = states.statusQuotes[sKey] || [];\n const uniqueQuotes = quotes.filter(\n (q, i, arr) => arr.findIndex((q2) => q2.url === q.url) === i,\n );\n const quoteStatusesHTML =\n uniqueQuotes.length && level <= 2\n ? uniqueQuotes\n .map((quote) => {\n const { id, instance } = quote;\n const sKey = statusKey(id, instance);\n const s = states.statuses[sKey];\n if (s) {\n return generateHTMLCode(s, instance, ++level);\n }\n })\n .join('')\n : '';\n\n const createdAtDate = new Date(createdAt);\n // const editedAtDate = editedAt && new Date(editedAt);\n\n const contentHTML =\n emojifyText(content, emojis) +\n '\\n' +\n quoteStatusesHTML +\n '\\n' +\n (poll?.options?.length\n ? `\n <p>📊:</p>\n <ul>\n ${poll.options\n .map(\n (option) => `\n <li>\n ${option.title}\n ${option.votesCount >= 0 ? ` (${option.votesCount})` : ''}\n </li>\n `,\n )\n .join('')}\n </ul>`\n : '') +\n (mediaAttachments.length > 0\n ? '\\n' +\n mediaAttachments\n .map((media) => {\n const {\n description,\n meta,\n previewRemoteUrl,\n previewUrl,\n remoteUrl,\n url,\n type,\n } = media;\n const { original = {}, small } = meta || {};\n const width = small?.width || original?.width;\n const height = small?.height || original?.height;\n\n // Prefer remote over original\n const sourceMediaURL = remoteUrl || url;\n const previewMediaURL = previewRemoteUrl || previewUrl;\n const mediaURL = previewMediaURL || sourceMediaURL;\n\n const sourceMediaURLObj = sourceMediaURL\n ? URL.parse(sourceMediaURL)\n : null;\n const isVideoMaybe =\n type === 'unknown' &&\n sourceMediaURLObj &&\n /\\.(mp4|m4r|m4v|mov|webm)$/i.test(sourceMediaURLObj.pathname);\n const isAudioMaybe =\n type === 'unknown' &&\n sourceMediaURLObj &&\n /\\.(mp3|ogg|wav|m4a|m4p|m4b)$/i.test(sourceMediaURLObj.pathname);\n const isImage =\n type === 'image' ||\n (type === 'unknown' &&\n previewMediaURL &&\n !isVideoMaybe &&\n !isAudioMaybe);\n const isVideo = type === 'gifv' || type === 'video' || isVideoMaybe;\n const isAudio = type === 'audio' || isAudioMaybe;\n\n let mediaHTML = '';\n if (isImage) {\n mediaHTML = `<img src=\"${mediaURL}\" width=\"${width}\" height=\"${height}\" alt=\"${description}\" loading=\"lazy\" />`;\n } else if (isVideo) {\n mediaHTML = `\n <video src=\"${sourceMediaURL}\" width=\"${width}\" height=\"${height}\" controls preload=\"auto\" poster=\"${previewMediaURL}\" loading=\"lazy\"></video>\n ${description ? `<figcaption>${description}</figcaption>` : ''}\n `;\n } else if (isAudio) {\n mediaHTML = `\n <audio src=\"${sourceMediaURL}\" controls preload=\"auto\"></audio>\n ${description ? `<figcaption>${description}</figcaption>` : ''}\n `;\n } else {\n mediaHTML = `\n <a href=\"${sourceMediaURL}\">📄 ${\n description || sourceMediaURL\n }</a>\n `;\n }\n\n return `<figure>${mediaHTML}</figure>`;\n })\n .join('\\n')\n : '');\n\n const htmlCode = `\n <blockquote lang=\"${language}\" cite=\"${url}\">\n ${\n spoilerText\n ? `\n <details>\n <summary>${spoilerText}</summary>\n ${contentHTML}\n </details>\n `\n : contentHTML\n }\n <footer>\n — ${emojifyText(\n displayName,\n accountEmojis,\n )} (@${acct}) <a href=\"${url}\"><time datetime=\"${createdAtDate.toISOString()}\">${createdAtDate.toLocaleString()}</time></a>\n </footer>\n </blockquote>\n `;\n\n return prettify(htmlCode);\n}\n\nfunction EmbedModal({ post, instance, onClose }) {\n const {\n account: {\n url: accountURL,\n displayName,\n username,\n emojis: accountEmojis,\n bot,\n group,\n },\n id,\n poll,\n spoilerText,\n language,\n editedAt,\n createdAt,\n content,\n mediaAttachments,\n url,\n emojis,\n } = post;\n\n const htmlCode = generateHTMLCode(post, instance);\n return (\n <div id=\"embed-post\" class=\"sheet\">\n {!!onClose && (\n <button type=\"button\" class=\"sheet-close\" onClick={onClose}>\n <Icon icon=\"x\" />\n </button>\n )}\n <header>\n <h2>Embed post</h2>\n </header>\n <main tabIndex=\"-1\">\n <h3>HTML Code</h3>\n <textarea\n class=\"embed-code\"\n readonly\n onClick={(e) => {\n e.target.select();\n }}\n dir=\"auto\"\n >\n {htmlCode}\n </textarea>\n <button\n type=\"button\"\n onClick={() => {\n try {\n navigator.clipboard.writeText(htmlCode);\n showToast('HTML code copied');\n } catch (e) {\n console.error(e);\n showToast('Unable to copy HTML code');\n }\n }}\n >\n <Icon icon=\"clipboard\" /> <span>Copy</span>\n </button>\n {!!mediaAttachments?.length && (\n <section>\n <p>Media attachments:</p>\n <ol class=\"links-list\">\n {mediaAttachments.map((media) => {\n return (\n <li key={media.id}>\n <a\n href={media.remoteUrl || media.url}\n target=\"_blank\"\n download\n >\n {media.remoteUrl || media.url}\n </a>\n </li>\n );\n })}\n </ol>\n </section>\n )}\n {!!accountEmojis?.length && (\n <section>\n <p>Account Emojis:</p>\n <ul>\n {accountEmojis.map((emoji) => {\n return (\n <li key={emoji.shortcode}>\n <picture>\n <source\n srcset={emoji.staticUrl}\n media=\"(prefers-reduced-motion: reduce)\"\n ></source>\n <img\n class=\"shortcode-emoji emoji\"\n src={emoji.url}\n alt={`:${emoji.shortcode}:`}\n width=\"16\"\n height=\"16\"\n loading=\"lazy\"\n decoding=\"async\"\n />\n </picture>{' '}\n <code>:{emoji.shortcode}:</code> (\n <a href={emoji.url} target=\"_blank\" download>\n url\n </a>\n )\n {emoji.staticUrl ? (\n <>\n {' '}\n (\n <a href={emoji.staticUrl} target=\"_blank\" download>\n static\n </a>\n )\n </>\n ) : null}\n </li>\n );\n })}\n </ul>\n </section>\n )}\n {!!emojis?.length && (\n <section>\n <p>Emojis:</p>\n <ul>\n {emojis.map((emoji) => {\n return (\n <li key={emoji.shortcode}>\n <picture>\n <source\n srcset={emoji.staticUrl}\n media=\"(prefers-reduced-motion: reduce)\"\n ></source>\n <img\n class=\"shortcode-emoji emoji\"\n src={emoji.url}\n alt={`:${emoji.shortcode}:`}\n width=\"16\"\n height=\"16\"\n loading=\"lazy\"\n decoding=\"async\"\n />\n </picture>{' '}\n <code>:{emoji.shortcode}:</code> (\n <a href={emoji.url} target=\"_blank\" download>\n url\n </a>\n )\n {emoji.staticUrl ? (\n <>\n {' '}\n (\n <a href={emoji.staticUrl} target=\"_blank\" download>\n static\n </a>\n )\n </>\n ) : null}\n </li>\n );\n })}\n </ul>\n </section>\n )}\n <section>\n <small>\n <p>Notes:</p>\n <ul>\n <li>\n This is static, unstyled and scriptless. You may need to apply\n your own styles and edit as needed.\n </li>\n <li>\n Polls are not interactive, becomes a list with vote counts.\n </li>\n <li>\n Media attachments can be images, videos, audios or any file\n types.\n </li>\n <li>Post could be edited or deleted later.</li>\n </ul>\n </small>\n </section>\n <h3>Preview</h3>\n <output\n class=\"embed-preview\"\n dangerouslySetInnerHTML={{ __html: htmlCode }}\n dir=\"auto\"\n />\n <p>\n <small>Note: This preview is lightly styled.</small>\n </p>\n </main>\n </div>\n );\n}\n\nfunction StatusButton({\n checked,\n count,\n class: className,\n title,\n alt,\n size,\n icon,\n iconSize = 'l',\n onClick,\n ...props\n}) {\n if (typeof title === 'string') {\n title = [title, title];\n }\n if (typeof alt === 'string') {\n alt = [alt, alt];\n }\n\n const [buttonTitle, setButtonTitle] = useState(title[0] || '');\n const [iconAlt, setIconAlt] = useState(alt[0] || '');\n\n useEffect(() => {\n if (checked) {\n setButtonTitle(title[1] || '');\n setIconAlt(alt[1] || '');\n } else {\n setButtonTitle(title[0] || '');\n setIconAlt(alt[0] || '');\n }\n }, [checked, title, alt]);\n\n return (\n <button\n type=\"button\"\n title={buttonTitle}\n class={`plain ${size ? 'small' : ''} ${className} ${\n checked ? 'checked' : ''\n }`}\n onClick={(e) => {\n if (!onClick) return;\n e.preventDefault();\n e.stopPropagation();\n onClick(e);\n }}\n {...props}\n >\n <Icon icon={icon} size={iconSize} alt={iconAlt} />\n {!!count && (\n <>\n {' '}\n <small title={count}>{shortenNumber(count)}</small>\n </>\n )}\n </button>\n );\n}\n\nfunction nicePostURL(url) {\n if (!url) return;\n const urlObj = URL.parse(url);\n const { host, pathname } = urlObj;\n const path = pathname.replace(/\\/$/, '');\n // split only first slash\n const [_, username, restPath] = path.match(/\\/(@[^\\/]+)\\/(.*)/) || [];\n return (\n <>\n {punycode.toUnicode(host)}\n {username ? (\n <>\n /{username}\n <wbr />\n <span class=\"more-insignificant\">/{restPath}</span>\n </>\n ) : (\n <span class=\"more-insignificant\">{path}</span>\n )}\n </>\n );\n}\n\nfunction StatusCompact({ sKey }) {\n const snapStates = useSnapshot(states);\n const statusReply = snapStates.statusReply[sKey];\n if (!statusReply) return null;\n\n const { id, instance } = statusReply;\n const status = getStatus(id, instance);\n if (!status) return null;\n\n const {\n sensitive,\n spoilerText,\n account: { avatar, avatarStatic, bot } = {},\n visibility,\n content,\n language,\n filtered,\n } = status;\n if (sensitive || spoilerText) return null;\n if (!content) return null;\n\n const srKey = statusKey(id, instance);\n const statusPeekText = statusPeek(status);\n\n const filterContext = useContext(FilterContext);\n const filterInfo = isFiltered(filtered, filterContext);\n\n if (filterInfo?.action === 'hide') return null;\n\n const filterTitleStr = filterInfo?.titlesStr || '';\n\n return (\n <article\n class={`status compact-reply ${\n visibility === 'direct' ? 'visibility-direct' : ''\n }`}\n tabindex=\"-1\"\n data-state-post-id={srKey}\n >\n <Avatar url={avatarStatic || avatar} squircle={bot} />\n <div\n class=\"content-compact\"\n title={statusPeekText}\n lang={language}\n dir=\"auto\"\n >\n {filterInfo ? (\n <b class=\"status-filtered-badge badge-meta\" title={filterTitleStr}>\n <span>Filtered</span>\n <span>{filterTitleStr}</span>\n </b>\n ) : (\n <span>{statusPeekText}</span>\n )}\n </div>\n </article>\n );\n}\n\nfunction FilteredStatus({\n status,\n filterInfo,\n instance,\n containerProps = {},\n showFollowedTags,\n quoted,\n}) {\n const snapStates = useSnapshot(states);\n const {\n id: statusID,\n account: { avatar, avatarStatic, bot, group },\n createdAt,\n visibility,\n reblog,\n } = status;\n const isReblog = !!reblog;\n const filterTitleStr = filterInfo?.titlesStr || '';\n const createdAtDate = new Date(createdAt);\n const statusPeekText = statusPeek(status.reblog || status);\n\n const [showPeek, setShowPeek] = useState(false);\n const bindLongPressPeek = useLongPress(\n () => {\n setShowPeek(true);\n },\n {\n threshold: 600,\n captureEvent: true,\n detect: 'touch',\n cancelOnMovement: 2, // true allows movement of up to 25 pixels\n },\n );\n\n const statusPeekRef = useTruncated();\n const sKey = statusKey(status.id, instance);\n const ssKey =\n statusKey(status.id, instance) +\n ' ' +\n (statusKey(reblog?.id, instance) || '');\n\n const actualStatusID = reblog?.id || statusID;\n const url = instance\n ? `/${instance}/s/${actualStatusID}`\n : `/s/${actualStatusID}`;\n const isFollowedTags =\n showFollowedTags && !!snapStates.statusFollowedTags[sKey]?.length;\n\n return (\n <div\n class={\n quoted\n ? ''\n : isReblog\n ? group\n ? 'status-group'\n : 'status-reblog'\n : isFollowedTags\n ? 'status-followed-tags'\n : ''\n }\n {...containerProps}\n // title={statusPeekText}\n onContextMenu={(e) => {\n e.preventDefault();\n setShowPeek(true);\n }}\n {...bindLongPressPeek()}\n >\n <article\n data-state-post-id={ssKey}\n class={`status filtered ${quoted ? 'status-card' : ''}`}\n tabindex=\"-1\"\n >\n <b\n class=\"status-filtered-badge clickable badge-meta\"\n title={filterTitleStr}\n onClick={(e) => {\n e.preventDefault();\n setShowPeek(true);\n }}\n >\n <span>Filtered</span>\n <span>{filterTitleStr}</span>\n </b>{' '}\n <Avatar url={avatarStatic || avatar} squircle={bot} />\n <span class=\"status-filtered-info\">\n <span class=\"status-filtered-info-1\">\n <NameText account={status.account} instance={instance} />{' '}\n <Icon\n icon={visibilityIconsMap[visibility]}\n alt={visibilityText[visibility]}\n size=\"s\"\n />{' '}\n {isReblog ? (\n 'boosted'\n ) : isFollowedTags ? (\n <span>\n {snapStates.statusFollowedTags[sKey].slice(0, 3).map((tag) => (\n <span key={tag} class=\"status-followed-tag-item\">\n #{tag}\n </span>\n ))}\n </span>\n ) : (\n <RelativeTime datetime={createdAtDate} format=\"micro\" />\n )}\n </span>\n <span class=\"status-filtered-info-2\">\n {isReblog && (\n <>\n <Avatar\n url={reblog.account.avatarStatic || reblog.account.avatar}\n squircle={bot}\n />{' '}\n </>\n )}\n {statusPeekText}\n </span>\n </span>\n </article>\n {!!showPeek && (\n <Modal\n onClick={(e) => {\n if (e.target === e.currentTarget) {\n setShowPeek(false);\n }\n }}\n >\n <div id=\"filtered-status-peek\" class=\"sheet\">\n <button\n type=\"button\"\n class=\"sheet-close\"\n onClick={() => setShowPeek(false)}\n >\n <Icon icon=\"x\" />\n </button>\n <header>\n <b class=\"status-filtered-badge\">Filtered</b> {filterTitleStr}\n </header>\n <main tabIndex=\"-1\">\n <Link\n ref={statusPeekRef}\n class=\"status-link\"\n to={url}\n onClick={() => {\n setShowPeek(false);\n }}\n data-read-more=\"Read more →\"\n >\n <Status status={status} instance={instance} size=\"s\" readOnly />\n </Link>\n </main>\n </div>\n </Modal>\n )}\n </div>\n );\n}\n\nconst QuoteStatuses = memo(({ id, instance, level = 0 }) => {\n if (!id || !instance) return;\n const snapStates = useSnapshot(states);\n const sKey = statusKey(id, instance);\n const quotes = snapStates.statusQuotes[sKey];\n const uniqueQuotes = quotes?.filter(\n (q, i, arr) => arr.findIndex((q2) => q2.url === q.url) === i,\n );\n\n if (!uniqueQuotes?.length) return;\n if (level > 2) return;\n\n return uniqueQuotes.map((q) => {\n return (\n <LazyShazam id={q.instance + q.id}>\n <Link\n key={q.instance + q.id}\n to={`${q.instance ? `/${q.instance}` : ''}/s/${q.id}`}\n class=\"status-card-link\"\n data-read-more=\"Read more →\"\n >\n <Status\n statusID={q.id}\n instance={q.instance}\n size=\"s\"\n quoted={level + 1}\n enableCommentHint\n />\n </Link>\n </LazyShazam>\n );\n });\n});\n\nexport default memo(Status, (oldProps, newProps) => {\n // Shallow equal all props except 'status'\n // This will be pure static until status ID changes\n const { status, ...restOldProps } = oldProps;\n const { status: newStatus, ...restNewProps } = newProps;\n return (\n status?.id === newStatus?.id && shallowEqual(restOldProps, restNewProps)\n );\n});\n","var IDX=36, HEX='';\nwhile (IDX--) HEX += IDX.toString(36);\n\nexport function uid(len) {\n\tvar str='', num = len || 11;\n\twhile (num--) str += HEX[Math.random() * 36 | 0];\n\treturn str;\n}\n","/**\n * Fuse.js v7.0.0 - Lightweight fuzzy-search (http://fusejs.io)\n *\n * Copyright (c) 2023 Kiro Risk (http://kiro.me)\n * All Rights Reserved. Apache Software License 2.0\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n */\n\nfunction isArray(value) {\n return !Array.isArray\n ? getTag(value) === '[object Array]'\n : Array.isArray(value)\n}\n\n// Adapted from: https://github.com/lodash/lodash/blob/master/.internal/baseToString.js\nconst INFINITY = 1 / 0;\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value\n }\n let result = value + '';\n return result == '0' && 1 / value == -INFINITY ? '-0' : result\n}\n\nfunction toString(value) {\n return value == null ? '' : baseToString(value)\n}\n\nfunction isString(value) {\n return typeof value === 'string'\n}\n\nfunction isNumber(value) {\n return typeof value === 'number'\n}\n\n// Adapted from: https://github.com/lodash/lodash/blob/master/isBoolean.js\nfunction isBoolean(value) {\n return (\n value === true ||\n value === false ||\n (isObjectLike(value) && getTag(value) == '[object Boolean]')\n )\n}\n\nfunction isObject(value) {\n return typeof value === 'object'\n}\n\n// Checks if `value` is object-like.\nfunction isObjectLike(value) {\n return isObject(value) && value !== null\n}\n\nfunction isDefined(value) {\n return value !== undefined && value !== null\n}\n\nfunction isBlank(value) {\n return !value.trim().length\n}\n\n// Gets the `toStringTag` of `value`.\n// Adapted from: https://github.com/lodash/lodash/blob/master/.internal/getTag.js\nfunction getTag(value) {\n return value == null\n ? value === undefined\n ? '[object Undefined]'\n : '[object Null]'\n : Object.prototype.toString.call(value)\n}\n\nconst EXTENDED_SEARCH_UNAVAILABLE = 'Extended search is not available';\n\nconst INCORRECT_INDEX_TYPE = \"Incorrect 'index' type\";\n\nconst LOGICAL_SEARCH_INVALID_QUERY_FOR_KEY = (key) =>\n `Invalid value for key ${key}`;\n\nconst PATTERN_LENGTH_TOO_LARGE = (max) =>\n `Pattern length exceeds max of ${max}.`;\n\nconst MISSING_KEY_PROPERTY = (name) => `Missing ${name} property in key`;\n\nconst INVALID_KEY_WEIGHT_VALUE = (key) =>\n `Property 'weight' in key '${key}' must be a positive integer`;\n\nconst hasOwn = Object.prototype.hasOwnProperty;\n\nclass KeyStore {\n constructor(keys) {\n this._keys = [];\n this._keyMap = {};\n\n let totalWeight = 0;\n\n keys.forEach((key) => {\n let obj = createKey(key);\n\n this._keys.push(obj);\n this._keyMap[obj.id] = obj;\n\n totalWeight += obj.weight;\n });\n\n // Normalize weights so that their sum is equal to 1\n this._keys.forEach((key) => {\n key.weight /= totalWeight;\n });\n }\n get(keyId) {\n return this._keyMap[keyId]\n }\n keys() {\n return this._keys\n }\n toJSON() {\n return JSON.stringify(this._keys)\n }\n}\n\nfunction createKey(key) {\n let path = null;\n let id = null;\n let src = null;\n let weight = 1;\n let getFn = null;\n\n if (isString(key) || isArray(key)) {\n src = key;\n path = createKeyPath(key);\n id = createKeyId(key);\n } else {\n if (!hasOwn.call(key, 'name')) {\n throw new Error(MISSING_KEY_PROPERTY('name'))\n }\n\n const name = key.name;\n src = name;\n\n if (hasOwn.call(key, 'weight')) {\n weight = key.weight;\n\n if (weight <= 0) {\n throw new Error(INVALID_KEY_WEIGHT_VALUE(name))\n }\n }\n\n path = createKeyPath(name);\n id = createKeyId(name);\n getFn = key.getFn;\n }\n\n return { path, id, weight, src, getFn }\n}\n\nfunction createKeyPath(key) {\n return isArray(key) ? key : key.split('.')\n}\n\nfunction createKeyId(key) {\n return isArray(key) ? key.join('.') : key\n}\n\nfunction get(obj, path) {\n let list = [];\n let arr = false;\n\n const deepGet = (obj, path, index) => {\n if (!isDefined(obj)) {\n return\n }\n if (!path[index]) {\n // If there's no path left, we've arrived at the object we care about.\n list.push(obj);\n } else {\n let key = path[index];\n\n const value = obj[key];\n\n if (!isDefined(value)) {\n return\n }\n\n // If we're at the last value in the path, and if it's a string/number/bool,\n // add it to the list\n if (\n index === path.length - 1 &&\n (isString(value) || isNumber(value) || isBoolean(value))\n ) {\n list.push(toString(value));\n } else if (isArray(value)) {\n arr = true;\n // Search each item in the array.\n for (let i = 0, len = value.length; i < len; i += 1) {\n deepGet(value[i], path, index + 1);\n }\n } else if (path.length) {\n // An object. Recurse further.\n deepGet(value, path, index + 1);\n }\n }\n };\n\n // Backwards compatibility (since path used to be a string)\n deepGet(obj, isString(path) ? path.split('.') : path, 0);\n\n return arr ? list : list[0]\n}\n\nconst MatchOptions = {\n // Whether the matches should be included in the result set. When `true`, each record in the result\n // set will include the indices of the matched characters.\n // These can consequently be used for highlighting purposes.\n includeMatches: false,\n // When `true`, the matching function will continue to the end of a search pattern even if\n // a perfect match has already been located in the string.\n findAllMatches: false,\n // Minimum number of characters that must be matched before a result is considered a match\n minMatchCharLength: 1\n};\n\nconst BasicOptions = {\n // When `true`, the algorithm continues searching to the end of the input even if a perfect\n // match is found before the end of the same input.\n isCaseSensitive: false,\n // When true, the matching function will continue to the end of a search pattern even if\n includeScore: false,\n // List of properties that will be searched. This also supports nested properties.\n keys: [],\n // Whether to sort the result list, by score\n shouldSort: true,\n // Default sort function: sort by ascending score, ascending index\n sortFn: (a, b) =>\n a.score === b.score ? (a.idx < b.idx ? -1 : 1) : a.score < b.score ? -1 : 1\n};\n\nconst FuzzyOptions = {\n // Approximately where in the text is the pattern expected to be found?\n location: 0,\n // At what point does the match algorithm give up. A threshold of '0.0' requires a perfect match\n // (of both letters and location), a threshold of '1.0' would match anything.\n threshold: 0.6,\n // Determines how close the match must be to the fuzzy location (specified above).\n // An exact letter match which is 'distance' characters away from the fuzzy location\n // would score as a complete mismatch. A distance of '0' requires the match be at\n // the exact location specified, a threshold of '1000' would require a perfect match\n // to be within 800 characters of the fuzzy location to be found using a 0.8 threshold.\n distance: 100\n};\n\nconst AdvancedOptions = {\n // When `true`, it enables the use of unix-like search commands\n useExtendedSearch: false,\n // The get function to use when fetching an object's properties.\n // The default will search nested paths *ie foo.bar.baz*\n getFn: get,\n // When `true`, search will ignore `location` and `distance`, so it won't matter\n // where in the string the pattern appears.\n // More info: https://fusejs.io/concepts/scoring-theory.html#fuzziness-score\n ignoreLocation: false,\n // When `true`, the calculation for the relevance score (used for sorting) will\n // ignore the field-length norm.\n // More info: https://fusejs.io/concepts/scoring-theory.html#field-length-norm\n ignoreFieldNorm: false,\n // The weight to determine how much field length norm effects scoring.\n fieldNormWeight: 1\n};\n\nvar Config = {\n ...BasicOptions,\n ...MatchOptions,\n ...FuzzyOptions,\n ...AdvancedOptions\n};\n\nconst SPACE = /[^ ]+/g;\n\n// Field-length norm: the shorter the field, the higher the weight.\n// Set to 3 decimals to reduce index size.\nfunction norm(weight = 1, mantissa = 3) {\n const cache = new Map();\n const m = Math.pow(10, mantissa);\n\n return {\n get(value) {\n const numTokens = value.match(SPACE).length;\n\n if (cache.has(numTokens)) {\n return cache.get(numTokens)\n }\n\n // Default function is 1/sqrt(x), weight makes that variable\n const norm = 1 / Math.pow(numTokens, 0.5 * weight);\n\n // In place of `toFixed(mantissa)`, for faster computation\n const n = parseFloat(Math.round(norm * m) / m);\n\n cache.set(numTokens, n);\n\n return n\n },\n clear() {\n cache.clear();\n }\n }\n}\n\nclass FuseIndex {\n constructor({\n getFn = Config.getFn,\n fieldNormWeight = Config.fieldNormWeight\n } = {}) {\n this.norm = norm(fieldNormWeight, 3);\n this.getFn = getFn;\n this.isCreated = false;\n\n this.setIndexRecords();\n }\n setSources(docs = []) {\n this.docs = docs;\n }\n setIndexRecords(records = []) {\n this.records = records;\n }\n setKeys(keys = []) {\n this.keys = keys;\n this._keysMap = {};\n keys.forEach((key, idx) => {\n this._keysMap[key.id] = idx;\n });\n }\n create() {\n if (this.isCreated || !this.docs.length) {\n return\n }\n\n this.isCreated = true;\n\n // List is Array<String>\n if (isString(this.docs[0])) {\n this.docs.forEach((doc, docIndex) => {\n this._addString(doc, docIndex);\n });\n } else {\n // List is Array<Object>\n this.docs.forEach((doc, docIndex) => {\n this._addObject(doc, docIndex);\n });\n }\n\n this.norm.clear();\n }\n // Adds a doc to the end of the index\n add(doc) {\n const idx = this.size();\n\n if (isString(doc)) {\n this._addString(doc, idx);\n } else {\n this._addObject(doc, idx);\n }\n }\n // Removes the doc at the specified index of the index\n removeAt(idx) {\n this.records.splice(idx, 1);\n\n // Change ref index of every subsquent doc\n for (let i = idx, len = this.size(); i < len; i += 1) {\n this.records[i].i -= 1;\n }\n }\n getValueForItemAtKeyId(item, keyId) {\n return item[this._keysMap[keyId]]\n }\n size() {\n return this.records.length\n }\n _addString(doc, docIndex) {\n if (!isDefined(doc) || isBlank(doc)) {\n return\n }\n\n let record = {\n v: doc,\n i: docIndex,\n n: this.norm.get(doc)\n };\n\n this.records.push(record);\n }\n _addObject(doc, docIndex) {\n let record = { i: docIndex, $: {} };\n\n // Iterate over every key (i.e, path), and fetch the value at that key\n this.keys.forEach((key, keyIndex) => {\n let value = key.getFn ? key.getFn(doc) : this.getFn(doc, key.path);\n\n if (!isDefined(value)) {\n return\n }\n\n if (isArray(value)) {\n let subRecords = [];\n const stack = [{ nestedArrIndex: -1, value }];\n\n while (stack.length) {\n const { nestedArrIndex, value } = stack.pop();\n\n if (!isDefined(value)) {\n continue\n }\n\n if (isString(value) && !isBlank(value)) {\n let subRecord = {\n v: value,\n i: nestedArrIndex,\n n: this.norm.get(value)\n };\n\n subRecords.push(subRecord);\n } else if (isArray(value)) {\n value.forEach((item, k) => {\n stack.push({\n nestedArrIndex: k,\n value: item\n });\n });\n } else ;\n }\n record.$[keyIndex] = subRecords;\n } else if (isString(value) && !isBlank(value)) {\n let subRecord = {\n v: value,\n n: this.norm.get(value)\n };\n\n record.$[keyIndex] = subRecord;\n }\n });\n\n this.records.push(record);\n }\n toJSON() {\n return {\n keys: this.keys,\n records: this.records\n }\n }\n}\n\nfunction createIndex(\n keys,\n docs,\n { getFn = Config.getFn, fieldNormWeight = Config.fieldNormWeight } = {}\n) {\n const myIndex = new FuseIndex({ getFn, fieldNormWeight });\n myIndex.setKeys(keys.map(createKey));\n myIndex.setSources(docs);\n myIndex.create();\n return myIndex\n}\n\nfunction parseIndex(\n data,\n { getFn = Config.getFn, fieldNormWeight = Config.fieldNormWeight } = {}\n) {\n const { keys, records } = data;\n const myIndex = new FuseIndex({ getFn, fieldNormWeight });\n myIndex.setKeys(keys);\n myIndex.setIndexRecords(records);\n return myIndex\n}\n\nfunction computeScore$1(\n pattern,\n {\n errors = 0,\n currentLocation = 0,\n expectedLocation = 0,\n distance = Config.distance,\n ignoreLocation = Config.ignoreLocation\n } = {}\n) {\n const accuracy = errors / pattern.length;\n\n if (ignoreLocation) {\n return accuracy\n }\n\n const proximity = Math.abs(expectedLocation - currentLocation);\n\n if (!distance) {\n // Dodge divide by zero error.\n return proximity ? 1.0 : accuracy\n }\n\n return accuracy + proximity / distance\n}\n\nfunction convertMaskToIndices(\n matchmask = [],\n minMatchCharLength = Config.minMatchCharLength\n) {\n let indices = [];\n let start = -1;\n let end = -1;\n let i = 0;\n\n for (let len = matchmask.length; i < len; i += 1) {\n let match = matchmask[i];\n if (match && start === -1) {\n start = i;\n } else if (!match && start !== -1) {\n end = i - 1;\n if (end - start + 1 >= minMatchCharLength) {\n indices.push([start, end]);\n }\n start = -1;\n }\n }\n\n // (i-1 - start) + 1 => i - start\n if (matchmask[i - 1] && i - start >= minMatchCharLength) {\n indices.push([start, i - 1]);\n }\n\n return indices\n}\n\n// Machine word size\nconst MAX_BITS = 32;\n\nfunction search(\n text,\n pattern,\n patternAlphabet,\n {\n location = Config.location,\n distance = Config.distance,\n threshold = Config.threshold,\n findAllMatches = Config.findAllMatches,\n minMatchCharLength = Config.minMatchCharLength,\n includeMatches = Config.includeMatches,\n ignoreLocation = Config.ignoreLocation\n } = {}\n) {\n if (pattern.length > MAX_BITS) {\n throw new Error(PATTERN_LENGTH_TOO_LARGE(MAX_BITS))\n }\n\n const patternLen = pattern.length;\n // Set starting location at beginning text and initialize the alphabet.\n const textLen = text.length;\n // Handle the case when location > text.length\n const expectedLocation = Math.max(0, Math.min(location, textLen));\n // Highest score beyond which we give up.\n let currentThreshold = threshold;\n // Is there a nearby exact match? (speedup)\n let bestLocation = expectedLocation;\n\n // Performance: only computer matches when the minMatchCharLength > 1\n // OR if `includeMatches` is true.\n const computeMatches = minMatchCharLength > 1 || includeMatches;\n // A mask of the matches, used for building the indices\n const matchMask = computeMatches ? Array(textLen) : [];\n\n let index;\n\n // Get all exact matches, here for speed up\n while ((index = text.indexOf(pattern, bestLocation)) > -1) {\n let score = computeScore$1(pattern, {\n currentLocation: index,\n expectedLocation,\n distance,\n ignoreLocation\n });\n\n currentThreshold = Math.min(score, currentThreshold);\n bestLocation = index + patternLen;\n\n if (computeMatches) {\n let i = 0;\n while (i < patternLen) {\n matchMask[index + i] = 1;\n i += 1;\n }\n }\n }\n\n // Reset the best location\n bestLocation = -1;\n\n let lastBitArr = [];\n let finalScore = 1;\n let binMax = patternLen + textLen;\n\n const mask = 1 << (patternLen - 1);\n\n for (let i = 0; i < patternLen; i += 1) {\n // Scan for the best match; each iteration allows for one more error.\n // Run a binary search to determine how far from the match location we can stray\n // at this error level.\n let binMin = 0;\n let binMid = binMax;\n\n while (binMin < binMid) {\n const score = computeScore$1(pattern, {\n errors: i,\n currentLocation: expectedLocation + binMid,\n expectedLocation,\n distance,\n ignoreLocation\n });\n\n if (score <= currentThreshold) {\n binMin = binMid;\n } else {\n binMax = binMid;\n }\n\n binMid = Math.floor((binMax - binMin) / 2 + binMin);\n }\n\n // Use the result from this iteration as the maximum for the next.\n binMax = binMid;\n\n let start = Math.max(1, expectedLocation - binMid + 1);\n let finish = findAllMatches\n ? textLen\n : Math.min(expectedLocation + binMid, textLen) + patternLen;\n\n // Initialize the bit array\n let bitArr = Array(finish + 2);\n\n bitArr[finish + 1] = (1 << i) - 1;\n\n for (let j = finish; j >= start; j -= 1) {\n let currentLocation = j - 1;\n let charMatch = patternAlphabet[text.charAt(currentLocation)];\n\n if (computeMatches) {\n // Speed up: quick bool to int conversion (i.e, `charMatch ? 1 : 0`)\n matchMask[currentLocation] = +!!charMatch;\n }\n\n // First pass: exact match\n bitArr[j] = ((bitArr[j + 1] << 1) | 1) & charMatch;\n\n // Subsequent passes: fuzzy match\n if (i) {\n bitArr[j] |=\n ((lastBitArr[j + 1] | lastBitArr[j]) << 1) | 1 | lastBitArr[j + 1];\n }\n\n if (bitArr[j] & mask) {\n finalScore = computeScore$1(pattern, {\n errors: i,\n currentLocation,\n expectedLocation,\n distance,\n ignoreLocation\n });\n\n // This match will almost certainly be better than any existing match.\n // But check anyway.\n if (finalScore <= currentThreshold) {\n // Indeed it is\n currentThreshold = finalScore;\n bestLocation = currentLocation;\n\n // Already passed `loc`, downhill from here on in.\n if (bestLocation <= expectedLocation) {\n break\n }\n\n // When passing `bestLocation`, don't exceed our current distance from `expectedLocation`.\n start = Math.max(1, 2 * expectedLocation - bestLocation);\n }\n }\n }\n\n // No hope for a (better) match at greater error levels.\n const score = computeScore$1(pattern, {\n errors: i + 1,\n currentLocation: expectedLocation,\n expectedLocation,\n distance,\n ignoreLocation\n });\n\n if (score > currentThreshold) {\n break\n }\n\n lastBitArr = bitArr;\n }\n\n const result = {\n isMatch: bestLocation >= 0,\n // Count exact matches (those with a score of 0) to be \"almost\" exact\n score: Math.max(0.001, finalScore)\n };\n\n if (computeMatches) {\n const indices = convertMaskToIndices(matchMask, minMatchCharLength);\n if (!indices.length) {\n result.isMatch = false;\n } else if (includeMatches) {\n result.indices = indices;\n }\n }\n\n return result\n}\n\nfunction createPatternAlphabet(pattern) {\n let mask = {};\n\n for (let i = 0, len = pattern.length; i < len; i += 1) {\n const char = pattern.charAt(i);\n mask[char] = (mask[char] || 0) | (1 << (len - i - 1));\n }\n\n return mask\n}\n\nclass BitapSearch {\n constructor(\n pattern,\n {\n location = Config.location,\n threshold = Config.threshold,\n distance = Config.distance,\n includeMatches = Config.includeMatches,\n findAllMatches = Config.findAllMatches,\n minMatchCharLength = Config.minMatchCharLength,\n isCaseSensitive = Config.isCaseSensitive,\n ignoreLocation = Config.ignoreLocation\n } = {}\n ) {\n this.options = {\n location,\n threshold,\n distance,\n includeMatches,\n findAllMatches,\n minMatchCharLength,\n isCaseSensitive,\n ignoreLocation\n };\n\n this.pattern = isCaseSensitive ? pattern : pattern.toLowerCase();\n\n this.chunks = [];\n\n if (!this.pattern.length) {\n return\n }\n\n const addChunk = (pattern, startIndex) => {\n this.chunks.push({\n pattern,\n alphabet: createPatternAlphabet(pattern),\n startIndex\n });\n };\n\n const len = this.pattern.length;\n\n if (len > MAX_BITS) {\n let i = 0;\n const remainder = len % MAX_BITS;\n const end = len - remainder;\n\n while (i < end) {\n addChunk(this.pattern.substr(i, MAX_BITS), i);\n i += MAX_BITS;\n }\n\n if (remainder) {\n const startIndex = len - MAX_BITS;\n addChunk(this.pattern.substr(startIndex), startIndex);\n }\n } else {\n addChunk(this.pattern, 0);\n }\n }\n\n searchIn(text) {\n const { isCaseSensitive, includeMatches } = this.options;\n\n if (!isCaseSensitive) {\n text = text.toLowerCase();\n }\n\n // Exact match\n if (this.pattern === text) {\n let result = {\n isMatch: true,\n score: 0\n };\n\n if (includeMatches) {\n result.indices = [[0, text.length - 1]];\n }\n\n return result\n }\n\n // Otherwise, use Bitap algorithm\n const {\n location,\n distance,\n threshold,\n findAllMatches,\n minMatchCharLength,\n ignoreLocation\n } = this.options;\n\n let allIndices = [];\n let totalScore = 0;\n let hasMatches = false;\n\n this.chunks.forEach(({ pattern, alphabet, startIndex }) => {\n const { isMatch, score, indices } = search(text, pattern, alphabet, {\n location: location + startIndex,\n distance,\n threshold,\n findAllMatches,\n minMatchCharLength,\n includeMatches,\n ignoreLocation\n });\n\n if (isMatch) {\n hasMatches = true;\n }\n\n totalScore += score;\n\n if (isMatch && indices) {\n allIndices = [...allIndices, ...indices];\n }\n });\n\n let result = {\n isMatch: hasMatches,\n score: hasMatches ? totalScore / this.chunks.length : 1\n };\n\n if (hasMatches && includeMatches) {\n result.indices = allIndices;\n }\n\n return result\n }\n}\n\nclass BaseMatch {\n constructor(pattern) {\n this.pattern = pattern;\n }\n static isMultiMatch(pattern) {\n return getMatch(pattern, this.multiRegex)\n }\n static isSingleMatch(pattern) {\n return getMatch(pattern, this.singleRegex)\n }\n search(/*text*/) {}\n}\n\nfunction getMatch(pattern, exp) {\n const matches = pattern.match(exp);\n return matches ? matches[1] : null\n}\n\n// Token: 'file\n\nclass ExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'exact'\n }\n static get multiRegex() {\n return /^=\"(.*)\"$/\n }\n static get singleRegex() {\n return /^=(.*)$/\n }\n search(text) {\n const isMatch = text === this.pattern;\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [0, this.pattern.length - 1]\n }\n }\n}\n\n// Token: !fire\n\nclass InverseExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'inverse-exact'\n }\n static get multiRegex() {\n return /^!\"(.*)\"$/\n }\n static get singleRegex() {\n return /^!(.*)$/\n }\n search(text) {\n const index = text.indexOf(this.pattern);\n const isMatch = index === -1;\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [0, text.length - 1]\n }\n }\n}\n\n// Token: ^file\n\nclass PrefixExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'prefix-exact'\n }\n static get multiRegex() {\n return /^\\^\"(.*)\"$/\n }\n static get singleRegex() {\n return /^\\^(.*)$/\n }\n search(text) {\n const isMatch = text.startsWith(this.pattern);\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [0, this.pattern.length - 1]\n }\n }\n}\n\n// Token: !^fire\n\nclass InversePrefixExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'inverse-prefix-exact'\n }\n static get multiRegex() {\n return /^!\\^\"(.*)\"$/\n }\n static get singleRegex() {\n return /^!\\^(.*)$/\n }\n search(text) {\n const isMatch = !text.startsWith(this.pattern);\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [0, text.length - 1]\n }\n }\n}\n\n// Token: .file$\n\nclass SuffixExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'suffix-exact'\n }\n static get multiRegex() {\n return /^\"(.*)\"\\$$/\n }\n static get singleRegex() {\n return /^(.*)\\$$/\n }\n search(text) {\n const isMatch = text.endsWith(this.pattern);\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [text.length - this.pattern.length, text.length - 1]\n }\n }\n}\n\n// Token: !.file$\n\nclass InverseSuffixExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'inverse-suffix-exact'\n }\n static get multiRegex() {\n return /^!\"(.*)\"\\$$/\n }\n static get singleRegex() {\n return /^!(.*)\\$$/\n }\n search(text) {\n const isMatch = !text.endsWith(this.pattern);\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [0, text.length - 1]\n }\n }\n}\n\nclass FuzzyMatch extends BaseMatch {\n constructor(\n pattern,\n {\n location = Config.location,\n threshold = Config.threshold,\n distance = Config.distance,\n includeMatches = Config.includeMatches,\n findAllMatches = Config.findAllMatches,\n minMatchCharLength = Config.minMatchCharLength,\n isCaseSensitive = Config.isCaseSensitive,\n ignoreLocation = Config.ignoreLocation\n } = {}\n ) {\n super(pattern);\n this._bitapSearch = new BitapSearch(pattern, {\n location,\n threshold,\n distance,\n includeMatches,\n findAllMatches,\n minMatchCharLength,\n isCaseSensitive,\n ignoreLocation\n });\n }\n static get type() {\n return 'fuzzy'\n }\n static get multiRegex() {\n return /^\"(.*)\"$/\n }\n static get singleRegex() {\n return /^(.*)$/\n }\n search(text) {\n return this._bitapSearch.searchIn(text)\n }\n}\n\n// Token: 'file\n\nclass IncludeMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'include'\n }\n static get multiRegex() {\n return /^'\"(.*)\"$/\n }\n static get singleRegex() {\n return /^'(.*)$/\n }\n search(text) {\n let location = 0;\n let index;\n\n const indices = [];\n const patternLen = this.pattern.length;\n\n // Get all exact matches\n while ((index = text.indexOf(this.pattern, location)) > -1) {\n location = index + patternLen;\n indices.push([index, location - 1]);\n }\n\n const isMatch = !!indices.length;\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices\n }\n }\n}\n\n// ❗Order is important. DO NOT CHANGE.\nconst searchers = [\n ExactMatch,\n IncludeMatch,\n PrefixExactMatch,\n InversePrefixExactMatch,\n InverseSuffixExactMatch,\n SuffixExactMatch,\n InverseExactMatch,\n FuzzyMatch\n];\n\nconst searchersLen = searchers.length;\n\n// Regex to split by spaces, but keep anything in quotes together\nconst SPACE_RE = / +(?=(?:[^\\\"]*\\\"[^\\\"]*\\\")*[^\\\"]*$)/;\nconst OR_TOKEN = '|';\n\n// Return a 2D array representation of the query, for simpler parsing.\n// Example:\n// \"^core go$ | rb$ | py$ xy$\" => [[\"^core\", \"go$\"], [\"rb$\"], [\"py$\", \"xy$\"]]\nfunction parseQuery(pattern, options = {}) {\n return pattern.split(OR_TOKEN).map((item) => {\n let query = item\n .trim()\n .split(SPACE_RE)\n .filter((item) => item && !!item.trim());\n\n let results = [];\n for (let i = 0, len = query.length; i < len; i += 1) {\n const queryItem = query[i];\n\n // 1. Handle multiple query match (i.e, once that are quoted, like `\"hello world\"`)\n let found = false;\n let idx = -1;\n while (!found && ++idx < searchersLen) {\n const searcher = searchers[idx];\n let token = searcher.isMultiMatch(queryItem);\n if (token) {\n results.push(new searcher(token, options));\n found = true;\n }\n }\n\n if (found) {\n continue\n }\n\n // 2. Handle single query matches (i.e, once that are *not* quoted)\n idx = -1;\n while (++idx < searchersLen) {\n const searcher = searchers[idx];\n let token = searcher.isSingleMatch(queryItem);\n if (token) {\n results.push(new searcher(token, options));\n break\n }\n }\n }\n\n return results\n })\n}\n\n// These extended matchers can return an array of matches, as opposed\n// to a singl match\nconst MultiMatchSet = new Set([FuzzyMatch.type, IncludeMatch.type]);\n\n/**\n * Command-like searching\n * ======================\n *\n * Given multiple search terms delimited by spaces.e.g. `^jscript .python$ ruby !java`,\n * search in a given text.\n *\n * Search syntax:\n *\n * | Token | Match type | Description |\n * | ----------- | -------------------------- | -------------------------------------- |\n * | `jscript` | fuzzy-match | Items that fuzzy match `jscript` |\n * | `=scheme` | exact-match | Items that are `scheme` |\n * | `'python` | include-match | Items that include `python` |\n * | `!ruby` | inverse-exact-match | Items that do not include `ruby` |\n * | `^java` | prefix-exact-match | Items that start with `java` |\n * | `!^earlang` | inverse-prefix-exact-match | Items that do not start with `earlang` |\n * | `.js$` | suffix-exact-match | Items that end with `.js` |\n * | `!.go$` | inverse-suffix-exact-match | Items that do not end with `.go` |\n *\n * A single pipe character acts as an OR operator. For example, the following\n * query matches entries that start with `core` and end with either`go`, `rb`,\n * or`py`.\n *\n * ```\n * ^core go$ | rb$ | py$\n * ```\n */\nclass ExtendedSearch {\n constructor(\n pattern,\n {\n isCaseSensitive = Config.isCaseSensitive,\n includeMatches = Config.includeMatches,\n minMatchCharLength = Config.minMatchCharLength,\n ignoreLocation = Config.ignoreLocation,\n findAllMatches = Config.findAllMatches,\n location = Config.location,\n threshold = Config.threshold,\n distance = Config.distance\n } = {}\n ) {\n this.query = null;\n this.options = {\n isCaseSensitive,\n includeMatches,\n minMatchCharLength,\n findAllMatches,\n ignoreLocation,\n location,\n threshold,\n distance\n };\n\n this.pattern = isCaseSensitive ? pattern : pattern.toLowerCase();\n this.query = parseQuery(this.pattern, this.options);\n }\n\n static condition(_, options) {\n return options.useExtendedSearch\n }\n\n searchIn(text) {\n const query = this.query;\n\n if (!query) {\n return {\n isMatch: false,\n score: 1\n }\n }\n\n const { includeMatches, isCaseSensitive } = this.options;\n\n text = isCaseSensitive ? text : text.toLowerCase();\n\n let numMatches = 0;\n let allIndices = [];\n let totalScore = 0;\n\n // ORs\n for (let i = 0, qLen = query.length; i < qLen; i += 1) {\n const searchers = query[i];\n\n // Reset indices\n allIndices.length = 0;\n numMatches = 0;\n\n // ANDs\n for (let j = 0, pLen = searchers.length; j < pLen; j += 1) {\n const searcher = searchers[j];\n const { isMatch, indices, score } = searcher.search(text);\n\n if (isMatch) {\n numMatches += 1;\n totalScore += score;\n if (includeMatches) {\n const type = searcher.constructor.type;\n if (MultiMatchSet.has(type)) {\n allIndices = [...allIndices, ...indices];\n } else {\n allIndices.push(indices);\n }\n }\n } else {\n totalScore = 0;\n numMatches = 0;\n allIndices.length = 0;\n break\n }\n }\n\n // OR condition, so if TRUE, return\n if (numMatches) {\n let result = {\n isMatch: true,\n score: totalScore / numMatches\n };\n\n if (includeMatches) {\n result.indices = allIndices;\n }\n\n return result\n }\n }\n\n // Nothing was matched\n return {\n isMatch: false,\n score: 1\n }\n }\n}\n\nconst registeredSearchers = [];\n\nfunction register(...args) {\n registeredSearchers.push(...args);\n}\n\nfunction createSearcher(pattern, options) {\n for (let i = 0, len = registeredSearchers.length; i < len; i += 1) {\n let searcherClass = registeredSearchers[i];\n if (searcherClass.condition(pattern, options)) {\n return new searcherClass(pattern, options)\n }\n }\n\n return new BitapSearch(pattern, options)\n}\n\nconst LogicalOperator = {\n AND: '$and',\n OR: '$or'\n};\n\nconst KeyType = {\n PATH: '$path',\n PATTERN: '$val'\n};\n\nconst isExpression = (query) =>\n !!(query[LogicalOperator.AND] || query[LogicalOperator.OR]);\n\nconst isPath = (query) => !!query[KeyType.PATH];\n\nconst isLeaf = (query) =>\n !isArray(query) && isObject(query) && !isExpression(query);\n\nconst convertToExplicit = (query) => ({\n [LogicalOperator.AND]: Object.keys(query).map((key) => ({\n [key]: query[key]\n }))\n});\n\n// When `auto` is `true`, the parse function will infer and initialize and add\n// the appropriate `Searcher` instance\nfunction parse(query, options, { auto = true } = {}) {\n const next = (query) => {\n let keys = Object.keys(query);\n\n const isQueryPath = isPath(query);\n\n if (!isQueryPath && keys.length > 1 && !isExpression(query)) {\n return next(convertToExplicit(query))\n }\n\n if (isLeaf(query)) {\n const key = isQueryPath ? query[KeyType.PATH] : keys[0];\n\n const pattern = isQueryPath ? query[KeyType.PATTERN] : query[key];\n\n if (!isString(pattern)) {\n throw new Error(LOGICAL_SEARCH_INVALID_QUERY_FOR_KEY(key))\n }\n\n const obj = {\n keyId: createKeyId(key),\n pattern\n };\n\n if (auto) {\n obj.searcher = createSearcher(pattern, options);\n }\n\n return obj\n }\n\n let node = {\n children: [],\n operator: keys[0]\n };\n\n keys.forEach((key) => {\n const value = query[key];\n\n if (isArray(value)) {\n value.forEach((item) => {\n node.children.push(next(item));\n });\n }\n });\n\n return node\n };\n\n if (!isExpression(query)) {\n query = convertToExplicit(query);\n }\n\n return next(query)\n}\n\n// Practical scoring function\nfunction computeScore(\n results,\n { ignoreFieldNorm = Config.ignoreFieldNorm }\n) {\n results.forEach((result) => {\n let totalScore = 1;\n\n result.matches.forEach(({ key, norm, score }) => {\n const weight = key ? key.weight : null;\n\n totalScore *= Math.pow(\n score === 0 && weight ? Number.EPSILON : score,\n (weight || 1) * (ignoreFieldNorm ? 1 : norm)\n );\n });\n\n result.score = totalScore;\n });\n}\n\nfunction transformMatches(result, data) {\n const matches = result.matches;\n data.matches = [];\n\n if (!isDefined(matches)) {\n return\n }\n\n matches.forEach((match) => {\n if (!isDefined(match.indices) || !match.indices.length) {\n return\n }\n\n const { indices, value } = match;\n\n let obj = {\n indices,\n value\n };\n\n if (match.key) {\n obj.key = match.key.src;\n }\n\n if (match.idx > -1) {\n obj.refIndex = match.idx;\n }\n\n data.matches.push(obj);\n });\n}\n\nfunction transformScore(result, data) {\n data.score = result.score;\n}\n\nfunction format(\n results,\n docs,\n {\n includeMatches = Config.includeMatches,\n includeScore = Config.includeScore\n } = {}\n) {\n const transformers = [];\n\n if (includeMatches) transformers.push(transformMatches);\n if (includeScore) transformers.push(transformScore);\n\n return results.map((result) => {\n const { idx } = result;\n\n const data = {\n item: docs[idx],\n refIndex: idx\n };\n\n if (transformers.length) {\n transformers.forEach((transformer) => {\n transformer(result, data);\n });\n }\n\n return data\n })\n}\n\nclass Fuse {\n constructor(docs, options = {}, index) {\n this.options = { ...Config, ...options };\n\n if (\n this.options.useExtendedSearch &&\n !true\n ) {\n throw new Error(EXTENDED_SEARCH_UNAVAILABLE)\n }\n\n this._keyStore = new KeyStore(this.options.keys);\n\n this.setCollection(docs, index);\n }\n\n setCollection(docs, index) {\n this._docs = docs;\n\n if (index && !(index instanceof FuseIndex)) {\n throw new Error(INCORRECT_INDEX_TYPE)\n }\n\n this._myIndex =\n index ||\n createIndex(this.options.keys, this._docs, {\n getFn: this.options.getFn,\n fieldNormWeight: this.options.fieldNormWeight\n });\n }\n\n add(doc) {\n if (!isDefined(doc)) {\n return\n }\n\n this._docs.push(doc);\n this._myIndex.add(doc);\n }\n\n remove(predicate = (/* doc, idx */) => false) {\n const results = [];\n\n for (let i = 0, len = this._docs.length; i < len; i += 1) {\n const doc = this._docs[i];\n if (predicate(doc, i)) {\n this.removeAt(i);\n i -= 1;\n len -= 1;\n\n results.push(doc);\n }\n }\n\n return results\n }\n\n removeAt(idx) {\n this._docs.splice(idx, 1);\n this._myIndex.removeAt(idx);\n }\n\n getIndex() {\n return this._myIndex\n }\n\n search(query, { limit = -1 } = {}) {\n const {\n includeMatches,\n includeScore,\n shouldSort,\n sortFn,\n ignoreFieldNorm\n } = this.options;\n\n let results = isString(query)\n ? isString(this._docs[0])\n ? this._searchStringList(query)\n : this._searchObjectList(query)\n : this._searchLogical(query);\n\n computeScore(results, { ignoreFieldNorm });\n\n if (shouldSort) {\n results.sort(sortFn);\n }\n\n if (isNumber(limit) && limit > -1) {\n results = results.slice(0, limit);\n }\n\n return format(results, this._docs, {\n includeMatches,\n includeScore\n })\n }\n\n _searchStringList(query) {\n const searcher = createSearcher(query, this.options);\n const { records } = this._myIndex;\n const results = [];\n\n // Iterate over every string in the index\n records.forEach(({ v: text, i: idx, n: norm }) => {\n if (!isDefined(text)) {\n return\n }\n\n const { isMatch, score, indices } = searcher.searchIn(text);\n\n if (isMatch) {\n results.push({\n item: text,\n idx,\n matches: [{ score, value: text, norm, indices }]\n });\n }\n });\n\n return results\n }\n\n _searchLogical(query) {\n\n const expression = parse(query, this.options);\n\n const evaluate = (node, item, idx) => {\n if (!node.children) {\n const { keyId, searcher } = node;\n\n const matches = this._findMatches({\n key: this._keyStore.get(keyId),\n value: this._myIndex.getValueForItemAtKeyId(item, keyId),\n searcher\n });\n\n if (matches && matches.length) {\n return [\n {\n idx,\n item,\n matches\n }\n ]\n }\n\n return []\n }\n\n const res = [];\n for (let i = 0, len = node.children.length; i < len; i += 1) {\n const child = node.children[i];\n const result = evaluate(child, item, idx);\n if (result.length) {\n res.push(...result);\n } else if (node.operator === LogicalOperator.AND) {\n return []\n }\n }\n return res\n };\n\n const records = this._myIndex.records;\n const resultMap = {};\n const results = [];\n\n records.forEach(({ $: item, i: idx }) => {\n if (isDefined(item)) {\n let expResults = evaluate(expression, item, idx);\n\n if (expResults.length) {\n // Dedupe when adding\n if (!resultMap[idx]) {\n resultMap[idx] = { idx, item, matches: [] };\n results.push(resultMap[idx]);\n }\n expResults.forEach(({ matches }) => {\n resultMap[idx].matches.push(...matches);\n });\n }\n }\n });\n\n return results\n }\n\n _searchObjectList(query) {\n const searcher = createSearcher(query, this.options);\n const { keys, records } = this._myIndex;\n const results = [];\n\n // List is Array<Object>\n records.forEach(({ $: item, i: idx }) => {\n if (!isDefined(item)) {\n return\n }\n\n let matches = [];\n\n // Iterate over every key (i.e, path), and fetch the value at that key\n keys.forEach((key, keyIndex) => {\n matches.push(\n ...this._findMatches({\n key,\n value: item[keyIndex],\n searcher\n })\n );\n });\n\n if (matches.length) {\n results.push({\n idx,\n item,\n matches\n });\n }\n });\n\n return results\n }\n _findMatches({ key, value, searcher }) {\n if (!isDefined(value)) {\n return []\n }\n\n let matches = [];\n\n if (isArray(value)) {\n value.forEach(({ v: text, i: idx, n: norm }) => {\n if (!isDefined(text)) {\n return\n }\n\n const { isMatch, score, indices } = searcher.searchIn(text);\n\n if (isMatch) {\n matches.push({\n score,\n key,\n value: text,\n idx,\n norm,\n indices\n });\n }\n });\n } else {\n const { v: text, n: norm } = value;\n\n const { isMatch, score, indices } = searcher.searchIn(text);\n\n if (isMatch) {\n matches.push({ score, key, value: text, norm, indices });\n }\n }\n\n return matches\n }\n}\n\nFuse.version = '7.0.0';\nFuse.createIndex = createIndex;\nFuse.parseIndex = parseIndex;\nFuse.config = Config;\n\n{\n Fuse.parseQuery = parse;\n}\n\n{\n register(ExtendedSearch);\n}\n\nexport { Fuse as default };\n"],"file":"assets/fuse-rEcEZtAj.js"} |