1 line
377 KiB
Plaintext
1 line
377 KiB
Plaintext
{"version":3,"mappings":"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","names":["segmenter","Intl","Segmenter","stringLength","string","length","_","segment","urlRegexObj","RegExp","urlRegex","source","flags","isMobileSafari","test","navigator","userAgent","CameraCaptureInput","hidden","disabled","supportedMimeTypes","setMediaAttachments","filteredSupportedMimeTypes","filter","mimeType","_jsx","type","accept","join","capture","onChange","e","files","target","mediaFile","Array","from","attachments","file","size","url","URL","createObjectURL","id","description","value","supportsCameraCapture","document","createElement","CharCountMeter","maxCharacters","charCount","useSnapshot","states","composerCharacterCount","leftChars","class","_jsxs","title","style","children","max","Combobox","input","list","tabInsertsSuggestions","defaultFirstOption","scrollIntoViewOptions","event","keyboardBindings","trackComposition","commitWithElement","_a","visible","indexDiff","focusEl","els","focusIndex","indexOfItem","newIndex","el","fireSelectEvent","combobox","commit","fireCommitEvent","detail","boundary","query","text","key","cursor","multiWord","lookBackIndex","lastMatchPosition","keyIndex","pre","InputStyleCloneUpdateEvent","CloneRegistry","InputStyleClone","#styleObserver","#updateStyles","#resizeObserver","#requestUpdateLayout","#inputRef","#container","#cloneElement","clone","#updateText","#onDocumentScrollOrResize","#onInput","#input","#usingInput","fn","#xOffset","#yOffset","#updateLayout","inputStyle","inputRect","cloneRect","#isLayoutUpdating","prop","propertiesToCopy","InputRange","#inputElement","#startOffset","#endOffset","element","startOffset","endOffset","selectionStart","selectionEnd","offset","#clampOffset","toStart","#createCloneRange","#styleClone","range","textNode","TextExpander$2","expander","match","menu","_b","position","caretRect","targetPosition","currentPosition","delta","currentStyle","item","beginning","remaining","suffix","found","providers","provide","result","changeEvent","x","TextExpanderElement","keysAttr","keys","multiWordAttr","globalMultiWord","state","TextExpander","_getCustomEmojis","instance","masto","visibleEmojis","v1","customEmojis","visibleInPicker","searcher","Fuse","findAllMatches","getCustomEmojis","pmem","isKeyItemEqual","cacheKeyArg","keyArg","expires","role","className","windowMargin","observer","IntersectionObserver","entries","forEach","entry","isIntersecting","left","width","boundingClientRect","innerWidth","window","insetInlineStart","isRTL","observe","encodeHTML","str","replace","char","charCodeAt","onTrigger","props","ref","t","_useLingui","textExpanderRef","useRef","api","searcherRef","textExpanderTextRef","hasTextExpanderRef","useImperativeHandle","setStyle","current","Object","assign","activated","useEffect","then","catch","console","textExpander","showMore","limit","results","html","emoji","shortcode","innerHTML","matched","resolve","searchResults","q","response","avatarStatic","name","displayName","username","acct","emojis","history","roles","accountInstance","displayNameWithEmoji","total","acc","cur","_t","error","more","continue","setTimeout","handleCommited","Event","handleActivate","handleDeactivate","handleChange","handleValue","addEventListener","removeEventListener","expiryOptions","i18nDuration","ComposePoll","lang","poll","onInput","maxOptions","maxExpiration","minExpiration","maxCharactersPerOption","options","expiresIn","multiple","map","option","i","required","maxlength","placeholder","values","0","spellCheck","autocomplete","dir","onClick","splice","push","checked","_Trans","label","USERNAME_RE","MENTION_RE","HASHTAG_RE","SHORTCODE_RE_FRAGMENT","SCAN_RE","highlightText","Infinity","withinLimitHTML","exceedLimitHTML","htmlSegments","index","escapeHTML","autoResizeTextarea","textarea","offsetHeight","scrollHeight","clientHeight","innerHeight","height","detectLangs","langDetector","langs","detect","slice","detectedLanguage","detectAll","__vitePreload","Textarea","forwardRef","setText","useState","textareaProps","useThrottledResizeObserver","onResize","getBoundingClientRect","minHeight","slowHighlightPerf","composeHighlightRef","throttleHighlightText","useThrottledCallback","cancel","start","end","Date","now","debouncedAutoDetectLanguage","useDebouncedCallback","dom","mark","querySelectorAll","remove","text2","languages","autoCapitalize","autoComplete","autoCorrect","rows","cols","hasTextExpander","lastLine","textBeforeCursor","bullet","newBullet","number","preSpaces","anything","preventDefault","pos","postSpaces","setRangeText","setSelectionRange","dispatchEvent","scrollTop","onScroll","pastedText","CUSTOM_EMOJIS_COUNT","EMOJI_SIZE_MIN","EMOJI_SIZE_MAX","EMOJI_SIZE_STEP","CustomEmojiButton","memo","showCode","addEdges","parent","currentTarget","closest","rect","selfRect","targetClassList","classList","buffer","add","right","undefined","onPointerEnter","onFocus","staticUrl","srcSet","media","src","alt","loading","decoding","_Fragment","CustomEmojisList","onSelect","i18n","setMax","CUSTOM_EMOJI_SIZE","CustomEmojisModal","onClose","defaultSearchTerm","uiState","setUIState","customEmojisList","setCustomEmojis","recentlyUsedCustomEmojis","useMemo","store","account","get","customEmojisCatList","emojisCat","othersCat","category","scrollableRef","setMatches","onEmojiSizeDecrease","useCallback","emojiSize","setEmojiSize","newSize","Math","local","del","onEmojiSizeIncrease","onFind","onSelectEmoji","queueMicrotask","recentlyUsedCustomEmojis2","findIndex","unshift","emoji2","inputRef","focus","hasCustomEmojis","Icon","Loader","autocorrect","autocapitalize","matches","icon","FilePickerInput","maxMediaAttachments","mediaAttachments","mediaFiles","poweredByGiphyURL","PHANPY_GIPHY_API_KEY","GIPHY_API_KEY","import","GIFS_PER_PAGE","GIFPickerModal","setResults","formRef","qRef","currentOffset","fetchGIFs","behavior","api_key","rating","locale","r","fetch","referrerPolicy","debouncedOnInput","onSubmit","enterKeyHint","abrupt","gif","alt_text","images","fixed_height","original","fixed_height_small","fixed_height_downsampled","webp","urlObj","parse","strippedWebP","strippedURL","origin","webpObj","url2","theURL","mp4","srcset","referrerpolicy","onLoad","backgroundColor","pagination","module","this","n","o","Mn","Rn","Bn","jn","u","a","f","c","s","l","d","p","v","g","h","m","y","b","A","S","w","U","I","O","T","C","P","E","k","L","N","M","R","B","j","D","z","F","G","H","V","W","X","Y","$","Z","K","J","Q","tt","et","nt","rt","it","ot","ut","at","ft","ct","lt","st","dt","pt","vt","mt","ht","gt","yt","bt","xt","At","St","wt","Ut","It","Ot","Tt","Ct","Pt","Et","kt","Lt","Nt","Mt","Rt","Bt","jt","Dt","zt","Ht","Ft","Gt","Vt","Wt","Xt","Yt","$t","Kt","Zt","qt","Jt","Qt","te","ie","ee","ne","re","oe","ue","ae","fe","ce","se","le","de","pe","ve","ge","he","ye","me","be","xe","Ae","Se","we","Ue","Ie","Oe","Pe","Ce","Te","Ee","Me","Le","ke","Ne","Re","Fe","Be","je","De","_e","ze","Ge","Ke","He","Ve","Xe","Ye","$e","qe","Ze","We","Je","Qe","tn","sn","hn","yn","cn","mn","en","nn","rn","on","un","an","dn","ln","pn","vn","gn","bn","xn","An","Sn","wn","Un","In","On","Pn","Tn","Cn","En","kn","Ln","Nn","require$$1","require$$3","_n","TAG_NAMES","extractImageDescription","startsWith","tags","ExifReader","load","trim","PHANPY_IMG_ALT_API_URL","IMG_ALT_API_URL","scaleDimension","matrix","matrixLimit","scalingFactor","sqrt","newWidth","floor","newHeight","MediaAttachment","attachment","descriptionLimit","onDescriptionChange","onRemove","supportsEdit","supports","checkMaxError","imageSizeLimit","imageMatrixLimit","videoSizeLimit","videoMatrixLimit","videoFrameRateLimit","maxError","imageMatrix","setImageMatrix","setMaxError","details","videoMatrix","setVideoMatrix","setDescription","cancelled","extractedDescription","suffixType","subtype","suffixTypes","subTypeMap","debouncedOnDescriptionChange","has","showModal","setShowModal","timer","textareaRef","descTextarea","clearTimeout","toastRef","maxErrorText","err","type2","maxErrorToast","imageSize","imageMatrix2","imageMatrixLimit2","videoSize","videoSizeLimit2","videoMatrix2","videoMatrixLimit2","tabIndex","naturalWidth","naturalHeight","playsinline","muted","disablePictureInPicture","preload","onLoadedMetadata","videoWidth","videoHeight","controls","duration","Modal","Menu2","portal","body","containerProps","zIndex","align","overflow","menuButton","MenuItem","showToast","FormData","message","hideToast","params","localeCode2Text","MentionModal","accounts","setAccounts","relationshipsMap","setRelationshipsMap","selectedIndex","setSelectedIndex","loadRelationships","relationships","fetchRelationships","loadAccounts","term","search","debouncedLoadAccounts","useHotkeys","selectedAccount","selectAccount","enableOnFormTags","useKey","listRef","selectedItem","block","relationship","avatarSize","showStats","showActivity","QuoteSuggestion","quoteSuggestion","hasCurrentQuoteStatus","onAccept","onCancel","Status","status","readOnly","supportedLanguagesMap","supportedLanguages","reduce","code","common","native","expirySeconds","oneDay","expiresInFromExpiresAt","expiresAt","find","DEFAULT_LANG","localeMatch","getDtfLocale","usernameRegex","urlPlaceholder","countableText","inputText","LF","mem","ListFormat","ADD_LABELS","camera","customEmoji","sensitive","scheduledPost","DEFAULT_SCHEDULED_AT","MIN_SCHEDULED_AT","isMimeTypeSupported","fileType","includes","split","Compose","replyToStatus","replyMode","editStatus","draftStatus","quoteStatus","standalone","hasOpener","rtf","RTF","lf","UID","uid","currentAccount","currentAccountInfo","charactersReservedPerUrl","polls","supportedImagesVideosTypes","setQuoteApprovalPolicy","spoilerTextRef","visibility","setVisibility","quoteApprovalPolicy","prevLanguage","setSensitive","sensitiveMedia","setSensitiveMedia","language","setLanguage","scheduledAt","setScheduledAt","prefs","setQuoteSuggestion","currentQuoteStatus","setLocalQuoteStatus","checkQuoteEligibility","setQuoteCleared","getPreferences","quoteApproval","isSelf","isPublic","isMineAndPrivate","isQuoteAutomaticallyAccepted","isQuoteManuallyAccepted","handlePastedLink","supportsNativeQuote","unfurledData","unfurlMastodonLink","originalURL","focusTextarea","cursorPosition","targetElement","textBeforeInsert","spaceAfterInsert","textAfterInsert","lastFocusedFieldRef","spaceBeforeInsert","newText","focusLastFocusedField","handleFocus","composeContainerRef","lastFocusedEmojiFieldRef","composeContainer","isFormElement","spoilerText","visibility2","language2","sensitive2","mentions","authorMention","oninputTextarea","allMentions","otherMentions","composablePoll","statusSource","statuses","setPoll","postQuoteApprovalPolicy","alert","toLowerCase","policy","sensitiveMedia2","mediaAttachments2","scheduledAt2","quoteApprovalPolicy2","snapStates","beforeUnloadCopy","canClose","composerState","hasValue","hasMediaAttachments","hasOnlyAcct","confirmClose","hasIDMediaAttachments","handleBeforeUnload","sameWithSource","supportsCloseWatcher","escDownRef","yes","returnValue","hasModal","modals","hasOnlyComposer","getCharCount","useCloseWatcher","updateCharCount","draftKey","backgroundDraft","keyup","ns","deepEqual","prevBackgroundDraft","db","useInterval","saveUnsavedDraft","quote","_i18n","debug","drafts","unsupportedFiles","updatedAt","handleItems","querySelector","items","clipboardData","dataTransfer","allowedFiles","1","format","handleDragover","showMentionPicker","setShowMentionPicker","setShowEmoji2Picker","stopPropagation","autoDetectedLanguages","topSupportedLanguages","topLanguages","contentTranslationHideLanguages","restLanguages","codeA","commonA","codeB","commonB","replyToStatusMonthsAgo","onMinimize","cwButtonDisabled","onCWButtonClick","pollButtonDisabled","showGIFPicker","setAutoDetectedLanguages","highlightLanguageField","highlightVisibilityField","settings","showAddButton","BUTTON_WIDTH","addSubToolbarRef","scrollWidth","truncated","setShowAddButton","overTruncated","minimized","onScheduledAtClick","mediaButtonDisabled","showPollButton","onPollButtonClick","newWin","confirmText","passData","opener","__STATES__","showCompose","disableQuotePolicy","openCompose","scheduledAtButtonDisabled","AccountBlock","useAvatarStatic","__COMPOSE__","previewMode","formData","components","pointerEvents","opacity","cancelable","fromEntries","params2","res","mediaPromises","hasNoDescriptions","removeNullUndefined","v2","Promise","publishing","newStatus","reason","e2","quote_approval_policy","action","in_reply_to_id","saveStatus","skipThreading","i2","fileID","newAttachments","poll2","newPoll","ScheduledAtField","currentValue","pastedLinkPos","lastCursorPos","newValue","getLocalTimezoneName","open","hasCurrentQuote","MenuDivider","composerGIFPicker","setShowGIFPicker","showScheduledAt","quoteURL","currentText","quoteCleared","localQuoteStatus","linkPos","visibilityText","commonText","session","socialAddress","showCommon","showEmoji2Picker","emojiShortcode","insertTextAtCursor","newMediaAttachments","theToast","obj","log"],"ignoreList":[4,5,14],"sources":["../../src/utils/string-length.js","../../src/utils/url-regex.js","../../src/components/camera-capture-input.jsx","../../src/components/char-count-meter.jsx","../../node_modules/@github/combobox-nav/dist/index.js","../../node_modules/@github/text-expander-element/dist/index.js","../../src/utils/custom-emojis.js","../../src/components/text-expander.jsx","../../src/components/compose-poll.jsx","../../src/components/compose-textarea.jsx","../../src/components/custom-emojis-modal.jsx","../../src/components/file-picker-input.jsx","../../src/assets/powered-by-giphy.svg","../../src/components/gif-picker-modal.jsx","../../node_modules/exifreader/dist/exif-reader.js","../../src/utils/extract-image-desc.js","../../src/components/media-attachment.jsx","../../src/components/mention-modal.jsx","../../src/components/quote-suggestion.jsx","../../src/components/compose.jsx"],"sourcesContent":["const segmenter = new Intl.Segmenter();\n\nexport default function stringLength(string) {\n if (string === '') return 0;\n let length = 0;\n for (const _ of segmenter.segment(string)) {\n length++;\n }\n return length;\n}\n","import urlRegex from '../data/url-regex';\n\nconst urlRegexObj = new RegExp(urlRegex.source, urlRegex.flags);\n\nexport default urlRegexObj;\n","const isMobileSafari =\n /iPad|iPhone|iPod/.test(navigator.userAgent) &&\n /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n\nfunction CameraCaptureInput({\n hidden,\n disabled = false,\n supportedMimeTypes,\n setMediaAttachments,\n}) {\n // If not Mobile Safari, only apply image/*\n // Chrome Android doesn't show the camera if image and video combined\n // It also can't switch between photo and video mode like iOS/Safari\n const filteredSupportedMimeTypes = isMobileSafari\n ? supportedMimeTypes\n : supportedMimeTypes?.filter((mimeType) => !/^image\\//i.test(mimeType));\n\n return (\n <input\n type=\"file\"\n hidden={hidden}\n accept={filteredSupportedMimeTypes?.join(',')}\n capture=\"environment\"\n disabled={disabled}\n onChange={(e) => {\n const files = e.target.files;\n if (!files) return;\n const mediaFile = Array.from(files)[0];\n if (!mediaFile) return;\n setMediaAttachments((attachments) => [\n ...attachments,\n {\n file: mediaFile,\n type: mediaFile.type,\n size: mediaFile.size,\n url: URL.createObjectURL(mediaFile),\n id: null, // indicate uploaded state\n description: null,\n },\n ]);\n e.target.value = null;\n }}\n />\n );\n}\n\nexport const supportsCameraCapture = (() => {\n const input = document.createElement('input');\n return 'capture' in input;\n})();\n\nexport default CameraCaptureInput;\n","import { useSnapshot } from 'valtio';\n\nimport states from '../utils/states';\n\nfunction CharCountMeter({ maxCharacters = 500, hidden }) {\n const snapStates = useSnapshot(states);\n const charCount = snapStates.composerCharacterCount;\n const leftChars = maxCharacters - charCount;\n if (hidden) {\n return <span class=\"char-counter\" hidden />;\n }\n return (\n <span\n class=\"char-counter\"\n title={`${leftChars}/${maxCharacters}`}\n style={{\n '--percentage': (charCount / maxCharacters) * 100,\n }}\n >\n <meter\n class={`${\n leftChars <= -10\n ? 'explode'\n : leftChars <= 0\n ? 'danger'\n : leftChars <= 20\n ? 'warning'\n : ''\n }`}\n value={charCount}\n max={maxCharacters}\n />\n <span class=\"counter\">{leftChars}</span>\n </span>\n );\n}\n\nexport default CharCountMeter;\n","export default class Combobox {\n constructor(input, list, { tabInsertsSuggestions, defaultFirstOption, scrollIntoViewOptions } = {}) {\n this.input = input;\n this.list = list;\n this.tabInsertsSuggestions = tabInsertsSuggestions !== null && tabInsertsSuggestions !== void 0 ? tabInsertsSuggestions : true;\n this.defaultFirstOption = defaultFirstOption !== null && defaultFirstOption !== void 0 ? defaultFirstOption : false;\n this.scrollIntoViewOptions = scrollIntoViewOptions !== null && scrollIntoViewOptions !== void 0 ? scrollIntoViewOptions : { block: 'nearest', inline: 'nearest' };\n this.isComposing = false;\n if (!list.id) {\n list.id = `combobox-${Math.random().toString().slice(2, 6)}`;\n }\n this.ctrlBindings = !!navigator.userAgent.match(/Macintosh/);\n this.keyboardEventHandler = event => keyboardBindings(event, this);\n this.compositionEventHandler = event => trackComposition(event, this);\n this.inputHandler = this.clearSelection.bind(this);\n input.setAttribute('role', 'combobox');\n input.setAttribute('aria-controls', list.id);\n input.setAttribute('aria-expanded', 'false');\n input.setAttribute('aria-autocomplete', 'list');\n input.setAttribute('aria-haspopup', 'listbox');\n }\n destroy() {\n this.clearSelection();\n this.stop();\n this.input.removeAttribute('role');\n this.input.removeAttribute('aria-controls');\n this.input.removeAttribute('aria-expanded');\n this.input.removeAttribute('aria-autocomplete');\n this.input.removeAttribute('aria-haspopup');\n }\n start() {\n this.input.setAttribute('aria-expanded', 'true');\n this.input.addEventListener('compositionstart', this.compositionEventHandler);\n this.input.addEventListener('compositionend', this.compositionEventHandler);\n this.input.addEventListener('input', this.inputHandler);\n this.input.addEventListener('keydown', this.keyboardEventHandler);\n this.list.addEventListener('click', commitWithElement);\n this.indicateDefaultOption();\n }\n stop() {\n this.clearSelection();\n this.input.setAttribute('aria-expanded', 'false');\n this.input.removeEventListener('compositionstart', this.compositionEventHandler);\n this.input.removeEventListener('compositionend', this.compositionEventHandler);\n this.input.removeEventListener('input', this.inputHandler);\n this.input.removeEventListener('keydown', this.keyboardEventHandler);\n this.list.removeEventListener('click', commitWithElement);\n }\n indicateDefaultOption() {\n var _a;\n if (this.defaultFirstOption) {\n (_a = Array.from(this.list.querySelectorAll('[role=\"option\"]:not([aria-disabled=\"true\"])'))\n .filter(visible)[0]) === null || _a === void 0 ? void 0 : _a.setAttribute('data-combobox-option-default', 'true');\n }\n }\n navigate(indexDiff = 1) {\n const focusEl = Array.from(this.list.querySelectorAll('[aria-selected=\"true\"]')).filter(visible)[0];\n const els = Array.from(this.list.querySelectorAll('[role=\"option\"]')).filter(visible);\n const focusIndex = els.indexOf(focusEl);\n if ((focusIndex === els.length - 1 && indexDiff === 1) || (focusIndex === 0 && indexDiff === -1)) {\n this.clearSelection();\n this.input.focus();\n return;\n }\n let indexOfItem = indexDiff === 1 ? 0 : els.length - 1;\n if (focusEl && focusIndex >= 0) {\n const newIndex = focusIndex + indexDiff;\n if (newIndex >= 0 && newIndex < els.length)\n indexOfItem = newIndex;\n }\n const target = els[indexOfItem];\n if (!target)\n return;\n for (const el of els) {\n el.removeAttribute('data-combobox-option-default');\n if (target === el) {\n this.input.setAttribute('aria-activedescendant', target.id);\n target.setAttribute('aria-selected', 'true');\n fireSelectEvent(target);\n target.scrollIntoView(this.scrollIntoViewOptions);\n }\n else {\n el.removeAttribute('aria-selected');\n }\n }\n }\n clearSelection() {\n this.input.removeAttribute('aria-activedescendant');\n for (const el of this.list.querySelectorAll('[aria-selected=\"true\"]')) {\n el.removeAttribute('aria-selected');\n }\n this.indicateDefaultOption();\n }\n}\nfunction keyboardBindings(event, combobox) {\n if (event.shiftKey || event.metaKey || event.altKey)\n return;\n if (!combobox.ctrlBindings && event.ctrlKey)\n return;\n if (combobox.isComposing)\n return;\n switch (event.key) {\n case 'Enter':\n if (commit(combobox.input, combobox.list)) {\n event.preventDefault();\n }\n break;\n case 'Tab':\n if (combobox.tabInsertsSuggestions && commit(combobox.input, combobox.list)) {\n event.preventDefault();\n }\n break;\n case 'Escape':\n combobox.clearSelection();\n break;\n case 'ArrowDown':\n combobox.navigate(1);\n event.preventDefault();\n break;\n case 'ArrowUp':\n combobox.navigate(-1);\n event.preventDefault();\n break;\n case 'n':\n if (combobox.ctrlBindings && event.ctrlKey) {\n combobox.navigate(1);\n event.preventDefault();\n }\n break;\n case 'p':\n if (combobox.ctrlBindings && event.ctrlKey) {\n combobox.navigate(-1);\n event.preventDefault();\n }\n break;\n default:\n if (event.ctrlKey)\n break;\n combobox.clearSelection();\n }\n}\nfunction commitWithElement(event) {\n if (!(event.target instanceof Element))\n return;\n const target = event.target.closest('[role=\"option\"]');\n if (!target)\n return;\n if (target.getAttribute('aria-disabled') === 'true')\n return;\n fireCommitEvent(target, { event });\n}\nfunction commit(input, list) {\n const target = list.querySelector('[aria-selected=\"true\"], [data-combobox-option-default=\"true\"]');\n if (!target)\n return false;\n if (target.getAttribute('aria-disabled') === 'true')\n return true;\n target.click();\n return true;\n}\nfunction fireCommitEvent(target, detail) {\n target.dispatchEvent(new CustomEvent('combobox-commit', { bubbles: true, detail }));\n}\nfunction fireSelectEvent(target) {\n target.dispatchEvent(new Event('combobox-select', { bubbles: true }));\n}\nfunction visible(el) {\n return (!el.hidden &&\n !(el instanceof HTMLInputElement && el.type === 'hidden') &&\n (el.offsetWidth > 0 || el.offsetHeight > 0));\n}\nfunction trackComposition(event, combobox) {\n combobox.isComposing = event.type === 'compositionstart';\n const list = document.getElementById(combobox.input.getAttribute('aria-controls') || '');\n if (!list)\n return;\n combobox.clearSelection();\n}\n","import Combobox from '@github/combobox-nav';\n\nconst boundary = /\\s|\\(|\\[/;\nfunction query(text, key, cursor, { multiWord, lookBackIndex, lastMatchPosition } = {\n multiWord: false,\n lookBackIndex: 0,\n lastMatchPosition: null\n}) {\n let keyIndex = text.lastIndexOf(key, cursor - 1);\n if (keyIndex === -1)\n return;\n if (keyIndex < lookBackIndex)\n return;\n if (multiWord) {\n if (lastMatchPosition != null) {\n if (lastMatchPosition === keyIndex)\n return;\n keyIndex = lastMatchPosition - key.length;\n }\n const charAfterKey = text[keyIndex + 1];\n if (charAfterKey === ' ' && cursor >= keyIndex + key.length + 1)\n return;\n const newLineIndex = text.lastIndexOf('\\n', cursor - 1);\n if (newLineIndex > keyIndex)\n return;\n const dotIndex = text.lastIndexOf('.', cursor - 1);\n if (dotIndex > keyIndex)\n return;\n }\n else {\n const spaceIndex = text.lastIndexOf(' ', cursor - 1);\n if (spaceIndex > keyIndex)\n return;\n }\n const pre = text[keyIndex - 1];\n if (pre && !boundary.test(pre))\n return;\n const queryString = text.substring(keyIndex + key.length, cursor);\n return {\n text: queryString,\n position: keyIndex + key.length\n };\n}\n\nclass InputStyleCloneUpdateEvent extends Event {\n constructor() {\n super(\"update\");\n }\n}\nconst CloneRegistry = new WeakMap();\n/**\n * Creates an element that exactly matches an input pixel-for-pixel and automatically stays in sync with it. This\n * is a non-interactive overlay on to the input and can be used to affect the visual appearance of the input\n * without modifying its behavior. The clone element is hidden by default.\n *\n * This lower level API powers the `InputRange` but provides more advanced functionality including event updates.\n *\n * Emits `update` events whenever anything is recalculated: when the layout changes, when the user scrolls, when the\n * input is updated, etc. This event may be emitted more than once per change.\n *\n * @note There may be cases in which the clone cannot observe changes to the input and fails to automatically update.\n * For example, if the `value` property on the input is written to directly, no `input` event is emitted by the input\n * and the clone does not automatically update. In these cases, `forceUpdate` can be used to manually trigger an update.\n */\n// PRIOR ART: This approach was adapted from the following MIT-licensed sources:\n// - primer/react (Copyright (c) 2018 GitHub, Inc.): https://github.com/primer/react/blob/a0db832302702b869aa22b0c4049ad9305ef631f/src/drafts/utils/character-coordinates.ts\n// - component/textarea-caret-position (Copyright (c) 2015 Jonathan Ong me@jongleberry.com): https://github.com/component/textarea-caret-position/blob/b5db7a7e47dd149c2a66276183c69234e4dabe30/index.js\n// - koddsson/textarea-caret-position (Copyright (c) 2015 Jonathan Ong me@jongleberry.com): https://github.com/koddsson/textarea-caret-position/blob/eba40ec8488eed4d77815f109af22e1d9c0751d3/index.js\nclass InputStyleClone extends EventTarget {\n #styleObserver = new MutationObserver(() => this.#updateStyles());\n #resizeObserver = new ResizeObserver(() => this.#requestUpdateLayout());\n // This class is unique in that it will prevent itself from getting garbage collected because of the subscribed\n // observers (if never detached). Because of this, we want to avoid preventing the existence of this class from also\n // preventing the garbage collection of the associated input. This also allows us to automatically detach if the\n // input gets collected.\n #inputRef;\n #container = document.createElement(\"div\");\n #cloneElement = document.createElement(\"div\");\n /**\n * Get the clone for an input, reusing an existing one if available. This avoids creating unecessary clones, which\n * have a performance cost due to their high-frequency event-based updates. Because these elements are shared, they\n * should be mutated with caution. If you're planning to mutate the clone, consider constructing a new one instead.\n *\n * Upon initial creation the clone element will automatically be inserted into the DOM and begin observing the\n * linked input.\n * @param input The target input to clone.\n */\n static for(input) {\n let clone = CloneRegistry.get(input);\n if (!clone) {\n clone = new InputStyleClone(input);\n CloneRegistry.set(input, clone);\n }\n return clone;\n }\n /**\n * Connect this instance to a target input element and insert this instance into the DOM in the correct location.\n *\n * NOTE: calling the static `for` method is usually preferable as it will reuse an existing clone if available.\n * However, if reusing clones is problematic (ie, if the clone needs to be mutated), a clone can be constructed\n * directly with `new InputStyleClone(target)`.\n */\n constructor(input) {\n super();\n this.#inputRef = new WeakRef(input);\n // We want position:absolute so it doesn't take space in the layout, but that doesn't work with display:table-cell\n // used in the HTMLInputElement approach. So we need a wrapper.\n this.#container.style.position = \"absolute\";\n this.#container.style.pointerEvents = \"none\";\n this.#container.setAttribute(\"aria-hidden\", \"true\");\n this.#container.appendChild(this.#cloneElement);\n this.#cloneElement.style.pointerEvents = \"none\";\n this.#cloneElement.style.userSelect = \"none\";\n this.#cloneElement.style.overflow = \"hidden\";\n this.#cloneElement.style.display = \"block\";\n // Important not to use display:none which would not render the content at all\n this.#cloneElement.style.visibility = \"hidden\";\n if (input instanceof HTMLTextAreaElement) {\n this.#cloneElement.style.whiteSpace = \"pre-wrap\";\n this.#cloneElement.style.wordWrap = \"break-word\";\n }\n else {\n this.#cloneElement.style.whiteSpace = \"nowrap\";\n // text in single-line inputs is vertically centered\n this.#cloneElement.style.display = \"table-cell\";\n this.#cloneElement.style.verticalAlign = \"middle\";\n }\n input.after(this.#container);\n this.#updateStyles();\n this.#updateText();\n this.#styleObserver.observe(input, {\n attributeFilter: [\n \"style\",\n \"dir\", // users can right-click in some browsers to change the text direction dynamically\n ],\n });\n this.#resizeObserver.observe(input);\n document.addEventListener(\"scroll\", this.#onDocumentScrollOrResize, { capture: true });\n window.addEventListener(\"resize\", this.#onDocumentScrollOrResize, { capture: true });\n // capture so this happens first, so other things can respond to `input` events after this data updates\n input.addEventListener(\"input\", this.#onInput, { capture: true });\n }\n /** Get the clone element. */\n get element() {\n return this.#cloneElement;\n }\n /**\n * Force a recalculation. Will emit an `update` event. This is typically not needed unless the input has changed in\n * an unobservable way, eg by directly writing to the `value` property.\n */\n forceUpdate() {\n this.#updateStyles();\n this.#updateText();\n }\n disconnect() {\n this.#container?.remove();\n this.#styleObserver.disconnect();\n this.#resizeObserver.disconnect();\n document.removeEventListener(\"scroll\", this.#onDocumentScrollOrResize, { capture: true });\n window.removeEventListener(\"resize\", this.#onDocumentScrollOrResize, { capture: true });\n // Can't use `usingInput` here since that could infinitely recurse\n const input = this.#input;\n if (input) {\n input.removeEventListener(\"input\", this.#onInput, { capture: true });\n CloneRegistry.delete(input);\n }\n }\n // --- private ---\n get #input() {\n return this.#inputRef?.deref();\n }\n /** Perform `fn` using the `input` if it is still available. If not, clean up the clone instead. */\n #usingInput(fn) {\n const input = this.#input;\n if (!input)\n return this.disconnect();\n return fn(input);\n }\n /** Current relative x-adjustment in pixels, executed via CSS transform. */\n #xOffset = 0;\n /** Current relative y-adjustment in pixels, executed via CSS transform. */\n #yOffset = 0;\n /**\n * Update only geometric properties without recalculating styles. Typically call `#requestUpdateLayout` instead to\n * only update once per animation frame.\n */\n #updateLayout() {\n // This runs often, so keep it as fast as possible! Avoid all unecessary updates.\n this.#usingInput((input) => {\n const inputStyle = window.getComputedStyle(input);\n this.#cloneElement.style.height = inputStyle.height;\n this.#cloneElement.style.width = inputStyle.width;\n // Immediately re-adjust for browser inconsistencies in scrollbar handling, if necessary\n if (input.clientHeight !== this.#cloneElement.clientHeight)\n this.#cloneElement.style.height = `calc(${inputStyle.height} + ${input.clientHeight - this.#cloneElement.clientHeight}px)`;\n if (input.clientWidth !== this.#cloneElement.clientWidth)\n this.#cloneElement.style.width = `calc(${inputStyle.width} + ${input.clientWidth - this.#cloneElement.clientWidth}px)`;\n // Position on top of the input\n const inputRect = input.getBoundingClientRect();\n const cloneRect = this.#cloneElement.getBoundingClientRect();\n this.#xOffset = this.#xOffset + inputRect.left - cloneRect.left;\n this.#yOffset = this.#yOffset + inputRect.top - cloneRect.top;\n this.#cloneElement.style.transform = `translate(${this.#xOffset}px, ${this.#yOffset}px)`;\n this.#cloneElement.scrollTop = input.scrollTop;\n this.#cloneElement.scrollLeft = input.scrollLeft;\n this.dispatchEvent(new InputStyleCloneUpdateEvent());\n });\n }\n #isLayoutUpdating = false;\n /** Request a layout update. Will only happen once per animation frame, to avoid unecessary updates. */\n #requestUpdateLayout() {\n if (this.#isLayoutUpdating)\n return;\n this.#isLayoutUpdating = true;\n requestAnimationFrame(() => {\n this.#updateLayout();\n this.#isLayoutUpdating = false;\n });\n }\n /** Update the styles of the clone based on the styles of the input, then request a layout update. */\n #updateStyles() {\n this.#usingInput((input) => {\n const inputStyle = window.getComputedStyle(input);\n for (const prop of propertiesToCopy)\n this.#cloneElement.style[prop] = inputStyle[prop];\n this.#requestUpdateLayout();\n });\n }\n /**\n * Update the text content of the clone based on the text content of the input. Triggers a layout update in case the\n * text update caused scrolling.\n */\n #updateText() {\n this.#usingInput((input) => {\n this.#cloneElement.textContent = input.value;\n // This is often unecessary on a pure text update, but text updates could potentially cause layout updates like\n // scrolling or resizing. And we run the update on _every frame_ when scrolling, so this isn't that expensive.\n // We don't requestUpdateLayout here because this one should happen synchronously, so that clients can react\n // within their own `input` event handlers.\n this.#updateLayout();\n });\n }\n #onInput = () => this.#updateText();\n #onDocumentScrollOrResize = (event) => {\n this.#usingInput((input) => {\n if (event.target === document ||\n event.target === window ||\n (event.target instanceof Node && event.target.contains(input)))\n this.#requestUpdateLayout();\n });\n };\n}\n// Note that some browsers, such as Firefox, do not concatenate properties\n// into their shorthand (e.g. padding-top, padding-bottom etc. -> padding),\n// so we have to list every single property explicitly.\nconst propertiesToCopy = [\n // RTL / vertical writing modes support:\n \"direction\",\n \"writingMode\",\n \"unicodeBidi\",\n \"textOrientation\",\n \"boxSizing\",\n \"borderTopWidth\",\n \"borderRightWidth\",\n \"borderBottomWidth\",\n \"borderLeftWidth\",\n \"borderStyle\",\n \"paddingTop\",\n \"paddingRight\",\n \"paddingBottom\",\n \"paddingLeft\",\n // https://developer.mozilla.org/en-US/docs/Web/CSS/font\n \"fontStyle\",\n \"fontVariant\",\n \"fontWeight\",\n \"fontStretch\",\n \"fontSize\",\n \"fontSizeAdjust\",\n \"lineHeight\",\n \"fontFamily\",\n \"textAlign\",\n \"textTransform\",\n \"textIndent\",\n \"textDecoration\",\n \"letterSpacing\",\n \"wordSpacing\",\n \"tabSize\",\n \"MozTabSize\",\n];\n\nclass InputRange {\n #inputElement;\n #startOffset;\n #endOffset;\n /**\n * Construct a new `InputRange`.\n * @param element The target input element that contains the content for the range.\n * @param startOffset The inclusive 0-based start index for the range. Will be adjusted to fit in the input contents.\n * @param endOffset The exclusive 0-based end index for the range. Will be adjusted to fit in the input contents.\n */\n constructor(element, startOffset = 0, endOffset = startOffset) {\n this.#inputElement = element;\n this.#startOffset = startOffset;\n this.#endOffset = endOffset;\n }\n /**\n * Create a new range from the current user selection. If the input is not focused, the range will just be the start\n * of the input (offsets `0` to `0`).\n *\n * This can be used to get the caret coordinates: if the resulting range is `collapsed`, the location of the\n * `getBoundingClientRect` will be the location of the caret caret (note, however, that the width will be `0` in\n * this case).\n */\n static fromSelection(input) {\n const { selectionStart, selectionEnd } = input;\n return new InputRange(input, selectionStart ?? undefined, selectionEnd ?? undefined);\n }\n /** Returns true if the start is equal to the end of this range. */\n get collapsed() {\n return this.startOffset === this.endOffset;\n }\n /** Always returns the containing input element. */\n get commonAncestorContainer() {\n return this.#inputElement;\n }\n /** Always returns the containing input element. */\n get endContainer() {\n return this.#inputElement;\n }\n /** Always returns the containing input element. */\n get startContainer() {\n return this.#inputElement;\n }\n get startOffset() {\n return this.#startOffset;\n }\n get endOffset() {\n return this.#endOffset;\n }\n /** Update the inclusive start offset. Will be adjusted to fit within the content size. */\n setStartOffset(offset) {\n this.#startOffset = this.#clampOffset(offset);\n }\n /** Update the exclusive end offset. Will be adjusted to fit within the content size. */\n setEndOffset(offset) {\n this.#endOffset = this.#clampOffset(offset);\n }\n /**\n * Collapse this range to one side.\n * @param toStart If `true`, will collapse to the start side. Otherwise, will collapse to the end.\n */\n collapse(toStart = false) {\n if (toStart)\n this.setEndOffset(this.startOffset);\n else\n this.setStartOffset(this.endOffset);\n }\n /** Returns a `DocumentFragment` containing a new `Text` node containing the content in the range. */\n cloneContents() {\n return this.#createCloneRange().cloneContents();\n }\n /** Create a copy of this range. */\n cloneRange() {\n return new InputRange(this.#inputElement, this.startOffset, this.endOffset);\n }\n /**\n * Obtain one rect that contains the entire contents of the range. If the range spans multiple lines, this box will\n * contain all pieces of the range but may also contain some space outside the range.\n * @see https://iansan5653.github.io/dom-input-range/demos/playground/\n */\n getBoundingClientRect() {\n return this.#createCloneRange().getBoundingClientRect();\n }\n /**\n * Obtain the rects that contain contents of this range. If the range spans multiple lines, there will be multiple\n * bounding boxes. These boxes can be used, for example, to draw a highlight over the range.\n * @see https://iansan5653.github.io/dom-input-range/demos/playground/\n */\n getClientRects() {\n return this.#createCloneRange().getClientRects();\n }\n /** Get the contents of the range as a string. */\n toString() {\n return this.#createCloneRange().toString();\n }\n /**\n * Get the underlying `InputStyleClone` instance powering these calculations. This can be used to listen for\n * updates to trigger layout recalculation.\n */\n getStyleClone() {\n return this.#styleClone;\n }\n // --- private ---\n get #styleClone() {\n return InputStyleClone.for(this.#inputElement);\n }\n get #cloneElement() {\n return this.#styleClone;\n }\n #clampOffset(offset) {\n return Math.max(0, Math.min(offset, this.#inputElement.value.length));\n }\n #createCloneRange() {\n // It's tempting to create a single Range and reuse it across the lifetime of the class. However, this wouldn't be\n // accurate because the contents of the input can change and the contents of the range would become stale. So we\n // must create a new range every time we need it.\n const range = document.createRange();\n const textNode = this.#cloneElement.element.childNodes[0];\n if (textNode) {\n range.setStart(textNode, this.startOffset);\n range.setEnd(textNode, this.endOffset);\n }\n return range;\n }\n}\n\nconst states = new WeakMap();\nclass TextExpander {\n constructor(expander, input) {\n this.expander = expander;\n this.input = input;\n this.combobox = null;\n this.menu = null;\n this.match = null;\n this.justPasted = false;\n this.lookBackIndex = 0;\n this.oninput = this.onInput.bind(this);\n this.onpaste = this.onPaste.bind(this);\n this.onkeydown = this.onKeydown.bind(this);\n this.oncommit = this.onCommit.bind(this);\n this.onmousedown = this.onMousedown.bind(this);\n this.onblur = this.onBlur.bind(this);\n this.interactingWithList = false;\n input.addEventListener('paste', this.onpaste);\n input.addEventListener('input', this.oninput);\n input.addEventListener('keydown', this.onkeydown);\n input.addEventListener('blur', this.onblur);\n }\n destroy() {\n this.input.removeEventListener('paste', this.onpaste);\n this.input.removeEventListener('input', this.oninput);\n this.input.removeEventListener('keydown', this.onkeydown);\n this.input.removeEventListener('blur', this.onblur);\n }\n dismissMenu() {\n if (this.deactivate()) {\n this.lookBackIndex = this.input.selectionEnd || this.lookBackIndex;\n }\n }\n activate(match, menu) {\n var _a, _b;\n if (this.input !== document.activeElement && this.input !== ((_b = (_a = document.activeElement) === null || _a === void 0 ? void 0 : _a.shadowRoot) === null || _b === void 0 ? void 0 : _b.activeElement)) {\n return;\n }\n this.deactivate();\n this.menu = menu;\n if (!menu.id)\n menu.id = `text-expander-${Math.floor(Math.random() * 100000).toString()}`;\n this.expander.append(menu);\n this.combobox = new Combobox(this.input, menu);\n this.expander.dispatchEvent(new Event('text-expander-activate'));\n this.positionMenu(menu, match.position);\n this.combobox.start();\n menu.addEventListener('combobox-commit', this.oncommit);\n menu.addEventListener('mousedown', this.onmousedown);\n this.combobox.navigate(1);\n }\n positionMenu(menu, position) {\n const caretRect = new InputRange(this.input, position).getBoundingClientRect();\n const targetPosition = { left: caretRect.left, top: caretRect.top + caretRect.height };\n const currentPosition = menu.getBoundingClientRect();\n const delta = {\n left: targetPosition.left - currentPosition.left,\n top: targetPosition.top - currentPosition.top\n };\n if (delta.left !== 0 || delta.top !== 0) {\n const currentStyle = getComputedStyle(menu);\n menu.style.left = currentStyle.left ? `calc(${currentStyle.left} + ${delta.left}px)` : `${delta.left}px`;\n menu.style.top = currentStyle.top ? `calc(${currentStyle.top} + ${delta.top}px)` : `${delta.top}px`;\n }\n }\n deactivate() {\n const menu = this.menu;\n if (!menu || !this.combobox)\n return false;\n this.expander.dispatchEvent(new Event('text-expander-deactivate'));\n this.menu = null;\n menu.removeEventListener('combobox-commit', this.oncommit);\n menu.removeEventListener('mousedown', this.onmousedown);\n this.combobox.destroy();\n this.combobox = null;\n menu.remove();\n return true;\n }\n onCommit({ target }) {\n var _a;\n const item = target;\n if (!(item instanceof HTMLElement))\n return;\n if (!this.combobox)\n return;\n const match = this.match;\n if (!match)\n return;\n const beginning = this.input.value.substring(0, match.position - match.key.length);\n const remaining = this.input.value.substring(match.position + match.text.length);\n const detail = { item, key: match.key, value: null, continue: false };\n const canceled = !this.expander.dispatchEvent(new CustomEvent('text-expander-value', { cancelable: true, detail }));\n if (canceled)\n return;\n if (!detail.value)\n return;\n let suffix = (_a = this.expander.getAttribute('suffix')) !== null && _a !== void 0 ? _a : ' ';\n if (detail.continue) {\n suffix = '';\n }\n const value = `${detail.value}${suffix}`;\n this.input.value = beginning + value + remaining;\n const cursor = beginning.length + value.length;\n this.deactivate();\n this.input.focus({\n preventScroll: true\n });\n this.input.selectionStart = cursor;\n this.input.selectionEnd = cursor;\n if (!detail.continue) {\n this.lookBackIndex = cursor;\n this.match = null;\n }\n this.expander.dispatchEvent(new CustomEvent('text-expander-committed', { cancelable: false, detail: { input: this.input } }));\n }\n onBlur() {\n if (this.interactingWithList) {\n this.interactingWithList = false;\n return;\n }\n this.deactivate();\n }\n onPaste() {\n this.justPasted = true;\n }\n async onInput() {\n if (this.justPasted) {\n this.justPasted = false;\n return;\n }\n const match = this.findMatch();\n if (match) {\n this.match = match;\n const menu = await this.notifyProviders(match);\n if (!this.match)\n return;\n if (menu) {\n this.activate(match, menu);\n }\n else {\n this.deactivate();\n }\n }\n else {\n this.match = null;\n this.deactivate();\n }\n }\n findMatch() {\n const cursor = this.input.selectionEnd || 0;\n const text = this.input.value;\n if (cursor <= this.lookBackIndex) {\n this.lookBackIndex = cursor - 1;\n }\n for (const { key, multiWord } of this.expander.keys) {\n const found = query(text, key, cursor, {\n multiWord,\n lookBackIndex: this.lookBackIndex,\n lastMatchPosition: this.match ? this.match.position : null\n });\n if (found) {\n return { text: found.text, key, position: found.position };\n }\n }\n }\n async notifyProviders(match) {\n const providers = [];\n const provide = (result) => providers.push(result);\n const changeEvent = new CustomEvent('text-expander-change', {\n cancelable: true,\n detail: { provide, text: match.text, key: match.key }\n });\n const canceled = !this.expander.dispatchEvent(changeEvent);\n if (canceled)\n return;\n const all = await Promise.all(providers);\n const fragments = all.filter(x => x.matched).map(x => x.fragment);\n return fragments[0];\n }\n onMousedown() {\n this.interactingWithList = true;\n }\n onKeydown(event) {\n if (event.key === 'Escape') {\n this.match = null;\n if (this.deactivate()) {\n this.lookBackIndex = this.input.selectionEnd || this.lookBackIndex;\n event.stopImmediatePropagation();\n event.preventDefault();\n }\n }\n }\n}\nclass TextExpanderElement extends HTMLElement {\n get keys() {\n const keysAttr = this.getAttribute('keys');\n const keys = keysAttr ? keysAttr.split(' ') : [];\n const multiWordAttr = this.getAttribute('multiword');\n const multiWord = multiWordAttr ? multiWordAttr.split(' ') : [];\n const globalMultiWord = multiWord.length === 0 && this.hasAttribute('multiword');\n return keys.map(key => ({ key, multiWord: globalMultiWord || multiWord.includes(key) }));\n }\n set keys(value) {\n this.setAttribute('keys', value);\n }\n connectedCallback() {\n const input = this.querySelector('input[type=\"text\"], textarea');\n if (!(input instanceof HTMLInputElement || input instanceof HTMLTextAreaElement))\n return;\n const state = new TextExpander(this, input);\n states.set(this, state);\n }\n disconnectedCallback() {\n const state = states.get(this);\n if (!state)\n return;\n state.destroy();\n states.delete(this);\n }\n dismiss() {\n const state = states.get(this);\n if (!state)\n return;\n state.dismissMenu();\n }\n}\n\nif (!window.customElements.get('text-expander')) {\n window.TextExpanderElement = TextExpanderElement;\n window.customElements.define('text-expander', TextExpanderElement);\n}\n\nexport { TextExpanderElement as default };\n","import Fuse from 'fuse.js';\n\nimport pmem from './pmem';\n\nasync function _getCustomEmojis(instance, masto) {\n const emojis = await masto.v1.customEmojis.list();\n const visibleEmojis = emojis.filter((e) => e.visibleInPicker);\n const searcher = new Fuse(visibleEmojis, {\n keys: ['shortcode'],\n findAllMatches: true,\n });\n return [visibleEmojis, searcher];\n}\n\nconst getCustomEmojis = pmem(_getCustomEmojis, {\n // Limit by time to reduce memory usage\n // Cached by instance\n isKeyItemEqual: (cacheKeyArg, keyArg) =>\n cacheKeyArg.instance === keyArg.instance,\n expires: 30 * 60 * 1000, // 30 minutes\n});\n\nexport { getCustomEmojis, _getCustomEmojis };\nexport default getCustomEmojis;\n","import '@github/text-expander-element';\n\nimport { useLingui } from '@lingui/react/macro';\nimport { forwardRef, useImperativeHandle } from 'preact/compat';\nimport { useEffect, useRef } from 'preact/hooks';\n\nimport { api } from '../utils/api';\nimport getCustomEmojis from '../utils/custom-emojis';\nimport emojifyText from '../utils/emojify-text';\nimport getDomain from '../utils/get-domain';\nimport isRTL from '../utils/is-rtl';\nimport shortenNumber from '../utils/shorten-number';\n\nconst menu = document.createElement('ul');\nmenu.role = 'listbox';\nmenu.className = 'text-expander-menu';\n\n// Set IntersectionObserver on menu, reposition it because text-expander doesn't handle it\nconst windowMargin = 16;\nconst observer = new IntersectionObserver((entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n const { left, width } = entry.boundingClientRect;\n const { innerWidth } = window;\n if (left + width > innerWidth) {\n const insetInlineStart = isRTL() ? 'right' : 'left';\n menu.style[insetInlineStart] = innerWidth - width - windowMargin + 'px';\n }\n }\n });\n});\nobserver.observe(menu);\n\nfunction encodeHTML(str) {\n return str.replace(/[&<>\"']/g, function (char) {\n return '&#' + char.charCodeAt(0) + ';';\n });\n}\n\nfunction TextExpander({ onTrigger = null, ...props }, ref) {\n const { t } = useLingui();\n const textExpanderRef = useRef();\n const { masto, instance } = api();\n const searcherRef = useRef();\n const textExpanderTextRef = useRef('');\n const hasTextExpanderRef = useRef(false);\n\n // Expose the activated state to parent components\n useImperativeHandle(ref, () => ({\n setStyle: (style) => {\n if (textExpanderRef.current) {\n Object.assign(textExpanderRef.current.style, style);\n }\n },\n activated: () => hasTextExpanderRef.current,\n }));\n\n // Setup emoji search if not already set up\n useEffect(() => {\n if (searcherRef.current) return; // Already set up\n\n getCustomEmojis(instance, masto)\n .then(([, searcher]) => {\n searcherRef.current = searcher;\n })\n .catch((e) => {\n console.error(e);\n });\n }, [instance, masto]);\n\n useEffect(() => {\n const textExpander = textExpanderRef.current;\n if (!textExpander) return;\n\n const handleChange = (e) => {\n const { key, provide, text } = e.detail;\n textExpanderTextRef.current = text;\n\n if (text === '') {\n provide(\n Promise.resolve({\n matched: false,\n }),\n );\n return;\n }\n\n if (key === ':') {\n const showMore = !!onTrigger;\n const results = searcherRef.current?.search(text, {\n limit: 5,\n });\n\n let html = '';\n results?.forEach(({ item: emoji }) => {\n const { shortcode, url } = emoji;\n html += `\n <li role=\"option\" data-value=\"${encodeHTML(shortcode)}\">\n <img src=\"${encodeHTML(\n url,\n )}\" width=\"16\" height=\"16\" alt=\"\" loading=\"lazy\" />\n ${encodeHTML(shortcode)}\n </li>`;\n });\n if (showMore) {\n html += `<li role=\"option\" data-value=\"\" data-more=\"${text}\">${'More…'}</li>`;\n }\n menu.innerHTML = html;\n\n provide(\n Promise.resolve({\n matched: (results?.length || 0) > 0,\n fragment: menu,\n }),\n );\n return;\n }\n\n // Handle @ mentions and # hashtags\n const type = {\n '@': 'accounts',\n '@': 'accounts',\n '#': 'hashtags',\n '#': 'hashtags',\n }[key];\n\n if (type) {\n provide(\n new Promise(async (resolve) => {\n try {\n let searchResults;\n if (type === 'accounts') {\n searchResults = await masto.v1.accounts.search.list({\n q: text,\n limit: 5,\n resolve: false,\n });\n } else {\n const response = await masto.v2.search.list({\n type,\n q: text,\n limit: 5,\n });\n searchResults = response[type] || response;\n }\n\n if (text !== textExpanderTextRef.current) {\n return;\n }\n\n const results = searchResults;\n let html = '';\n results.forEach((result) => {\n const {\n name,\n avatarStatic,\n displayName,\n username,\n acct,\n emojis,\n history,\n roles,\n url,\n } = result;\n const displayNameWithEmoji = emojifyText(displayName, emojis);\n const accountInstance = getDomain(url);\n\n if (acct) {\n html += `\n <li role=\"option\" data-value=\"${encodeHTML(acct)}\">\n <span class=\"avatar\">\n <img src=\"${encodeHTML(\n avatarStatic,\n )}\" width=\"16\" height=\"16\" alt=\"\" loading=\"lazy\" />\n </span>\n <span>\n <b>${displayNameWithEmoji || username}</b>\n <br><span class=\"bidi-isolate\">@${encodeHTML(\n acct,\n )}</span>\n ${\n roles?.map(\n (role) => ` <span class=\"tag collapsed\">\n ${role.name}\n ${\n !!accountInstance &&\n `<span class=\"more-insignificant\">\n ${accountInstance}\n </span>`\n }\n </span>`,\n ) || ''\n }\n </span>\n </li>\n `;\n } else {\n const total = history?.reduce?.(\n (acc, cur) => acc + +cur.uses,\n 0,\n );\n html += `\n <li role=\"option\" data-value=\"${encodeHTML(name)}\">\n <span class=\"grow\">#<b>${encodeHTML(name)}</b></span>\n ${\n total\n ? `<span class=\"count\">${shortenNumber(total)}</span>`\n : ''\n }\n </li>\n `;\n }\n });\n if (type === 'accounts') {\n html += `<li role=\"option\" data-value=\"\" data-more=\"${text}\">${t`More…`}</li>`;\n }\n menu.innerHTML = html;\n resolve({\n matched: results.length > 0,\n fragment: menu,\n });\n } catch (error) {\n console.error('Search error:', error);\n resolve({\n matched: false,\n });\n }\n }),\n );\n return;\n }\n\n // No other keys supported\n provide(\n Promise.resolve({\n matched: false,\n }),\n );\n };\n\n const handleValue = (e) => {\n const { key, item } = e.detail;\n const { value, more } = item.dataset;\n\n if (key === ':') {\n e.detail.value = value ? `:${value}:` : ''; // zero-width space\n if (more) {\n // Prevent adding space after the above value\n e.detail.continue = true;\n\n setTimeout(() => {\n // Trigger custom emoji picker modal for more options\n onTrigger?.({\n name: 'custom-emojis',\n defaultSearchTerm: more,\n });\n }, 300);\n }\n } else if (key === '@') {\n e.detail.value = value ? `@${value}` : ''; // zero-width space\n if (more) {\n e.detail.continue = true;\n setTimeout(() => {\n onTrigger?.({\n name: 'mention',\n defaultSearchTerm: more,\n });\n }, 300);\n }\n } else {\n e.detail.value = `${key}${value}`;\n }\n };\n\n const handleCommited = (e) => {\n const { input } = e.detail;\n\n if (input) {\n const event = new Event('input', { bubbles: true });\n input.dispatchEvent(event);\n }\n };\n\n const handleActivate = () => {\n hasTextExpanderRef.current = true;\n };\n\n const handleDeactivate = () => {\n hasTextExpanderRef.current = false;\n };\n\n textExpander.addEventListener('text-expander-change', handleChange);\n textExpander.addEventListener('text-expander-value', handleValue);\n textExpander.addEventListener('text-expander-committed', handleCommited);\n textExpander.addEventListener('text-expander-activate', handleActivate);\n textExpander.addEventListener('text-expander-deactivate', handleDeactivate);\n\n return () => {\n textExpander.removeEventListener('text-expander-change', handleChange);\n textExpander.removeEventListener('text-expander-value', handleValue);\n textExpander.removeEventListener(\n 'text-expander-committed',\n handleCommited,\n );\n textExpander.removeEventListener(\n 'text-expander-activate',\n handleActivate,\n );\n textExpander.removeEventListener(\n 'text-expander-deactivate',\n handleDeactivate,\n );\n };\n }, [searcherRef.current, onTrigger, t, masto]);\n\n return <text-expander ref={textExpanderRef} {...props} />;\n}\n\nexport default forwardRef(TextExpander);\n","import { Trans, useLingui } from '@lingui/react/macro';\n\nimport i18nDuration from '../utils/i18n-duration';\n\nimport Icon from './icon';\nimport TextExpander from './text-expander';\n\nexport const expiryOptions = {\n 300: i18nDuration(5, 'minute'),\n 1_800: i18nDuration(30, 'minute'),\n 3_600: i18nDuration(1, 'hour'),\n 21_600: i18nDuration(6, 'hour'),\n 86_400: i18nDuration(1, 'day'),\n 259_200: i18nDuration(3, 'day'),\n 604_800: i18nDuration(1, 'week'),\n};\n\nfunction ComposePoll({\n lang,\n poll,\n disabled,\n onInput = () => {},\n maxOptions,\n maxExpiration,\n minExpiration,\n maxCharactersPerOption,\n}) {\n const { t } = useLingui();\n const { options, expiresIn, multiple } = poll;\n\n return (\n <div class={`poll ${multiple ? 'multiple' : ''}`}>\n <div class=\"poll-choices\">\n {options.map((option, i) => (\n <div class=\"poll-choice\" key={i}>\n <TextExpander keys=\":\" class=\"poll-field-container\">\n <input\n required\n type=\"text\"\n value={option}\n disabled={disabled}\n maxlength={maxCharactersPerOption}\n placeholder={t`Choice ${i + 1}`}\n lang={lang}\n spellCheck=\"true\"\n autocomplete=\"off\"\n dir=\"auto\"\n data-allow-custom-emoji=\"true\"\n onInput={(e) => {\n const { value } = e.target;\n options[i] = value;\n onInput(poll);\n }}\n />\n </TextExpander>\n <button\n type=\"button\"\n class=\"plain4 poll-button\"\n disabled={disabled || options.length <= 1}\n onClick={() => {\n options.splice(i, 1);\n onInput(poll);\n }}\n title={t`Remove`}\n >\n −\n </button>\n </div>\n ))}\n </div>\n <div class=\"poll-toolbar\">\n <button\n type=\"button\"\n class=\"plain2 poll-button\"\n disabled={disabled || options.length >= maxOptions}\n onClick={() => {\n options.push('');\n onInput(poll);\n }}\n title={t`Add`}\n >\n +\n </button>{' '}\n <div class=\"poll-config\">\n <label class=\"multiple-choices\">\n <input\n type=\"checkbox\"\n checked={multiple}\n disabled={disabled}\n onChange={(e) => {\n const { checked } = e.target;\n poll.multiple = checked;\n onInput(poll);\n }}\n />{' '}\n <Trans>Multiple choice</Trans>\n </label>\n <label class=\"expires-in\">\n <Trans>Duration</Trans>{' '}\n <select\n value={expiresIn}\n disabled={disabled}\n onChange={(e) => {\n const { value } = e.target;\n poll.expiresIn = value;\n onInput(poll);\n }}\n >\n {Object.entries(expiryOptions)\n .filter(([value]) => {\n return value >= minExpiration && value <= maxExpiration;\n })\n .map(([value, label]) => (\n <option value={value} key={value}>\n {label()}\n </option>\n ))}\n </select>\n </label>\n <div class=\"spacer\" />\n <button\n type=\"button\"\n class=\"light danger small\"\n disabled={disabled}\n onClick={() => {\n onInput(null);\n }}\n >\n <Trans>Remove poll</Trans>\n </button>\n </div>\n </div>\n </div>\n );\n}\n\nexport default ComposePoll;\n","import { forwardRef } from 'preact/compat';\nimport { useEffect, useRef, useState } from 'preact/hooks';\nimport { useDebouncedCallback, useThrottledCallback } from 'use-debounce';\n\nimport { langDetector } from '../utils/browser-translator';\nimport escapeHTML from '../utils/escape-html';\nimport states from '../utils/states';\nimport urlRegexObj from '../utils/url-regex';\nimport useThrottledResizeObserver from '../utils/useThrottledResizeObserver';\n\nimport TextExpander from './text-expander';\n\n// https://github.com/mastodon/mastodon/blob/c03bd2a238741a012aa4b98dc4902d6cf948ab63/app/models/account.rb#L69\nconst USERNAME_RE = /[a-z0-9_]+([a-z0-9_.-]+[a-z0-9_]+)?/i;\nconst MENTION_RE = new RegExp(\n `(^|[^=\\\\/\\\\w])([@@]${USERNAME_RE.source}(?:@[\\\\p{L}\\\\w.-]+[\\\\w]+)?)`,\n 'uig',\n);\n\n// AI-generated, all other regexes are too complicated\nconst HASHTAG_RE = new RegExp(\n `(^|[^=\\\\/\\\\w])([##][\\\\p{L}\\\\p{N}_]+([\\\\p{L}\\\\p{N}_.]+[\\\\p{L}\\\\p{N}_]+)?)(?![\\\\/\\\\w])`,\n 'iug',\n);\n\n// https://github.com/mastodon/mastodon/blob/23e32a4b3031d1da8b911e0145d61b4dd47c4f96/app/models/custom_emoji.rb#L31\nconst SHORTCODE_RE_FRAGMENT = '[a-zA-Z0-9_]{2,}';\nconst SCAN_RE = new RegExp(\n `(^|[^=\\\\/\\\\w])(:${SHORTCODE_RE_FRAGMENT}:)(?=[^A-Za-z0-9_:]|$)`,\n 'g',\n);\n\nconst segmenter = new Intl.Segmenter();\n\nfunction highlightText(text, { maxCharacters = Infinity }) {\n // Exceeded characters limit\n const { composerCharacterCount } = states;\n if (composerCharacterCount > maxCharacters) {\n // Highlight exceeded characters\n let withinLimitHTML = '',\n exceedLimitHTML = '';\n const htmlSegments = segmenter.segment(text);\n for (const { segment, index } of htmlSegments) {\n if (index < maxCharacters) {\n withinLimitHTML += segment;\n } else {\n exceedLimitHTML += segment;\n }\n }\n if (exceedLimitHTML) {\n exceedLimitHTML =\n '<mark class=\"compose-highlight-exceeded\">' +\n escapeHTML(exceedLimitHTML) +\n '</mark>';\n }\n return escapeHTML(withinLimitHTML) + exceedLimitHTML;\n }\n\n return escapeHTML(text)\n .replace(urlRegexObj, '$2<mark class=\"compose-highlight-url\">$3</mark>') // URLs\n .replace(MENTION_RE, '$1<mark class=\"compose-highlight-mention\">$2</mark>') // Mentions\n .replace(HASHTAG_RE, '$1<mark class=\"compose-highlight-hashtag\">$2</mark>') // Hashtags\n .replace(\n SCAN_RE,\n '$1<mark class=\"compose-highlight-emoji-shortcode\">$2</mark>',\n ); // Emoji shortcodes\n}\n\nfunction autoResizeTextarea(textarea) {\n if (!textarea) return;\n const { value, offsetHeight, scrollHeight, clientHeight } = textarea;\n if (offsetHeight < window.innerHeight) {\n // NOTE: This check is needed because the offsetHeight return 50000 (really large number) on first render\n // No idea why it does that, will re-investigate in far future\n const offset = offsetHeight - clientHeight;\n const height = value ? scrollHeight + offset + 'px' : null;\n textarea.style.height = height;\n }\n}\n\nconst detectLangs = async (text) => {\n if (langDetector) {\n const langs = await langDetector.detect(text);\n if (langs?.length) {\n return langs.slice(0, 2).map((lang) => lang.detectedLanguage);\n }\n }\n const { detectAll } = await import('tinyld/light');\n const langs = detectAll(text);\n if (langs?.length) {\n // return max 2\n return langs.slice(0, 2).map((lang) => lang.lang);\n }\n return null;\n};\n\nconst Textarea = forwardRef((props, ref) => {\n const [text, setText] = useState(ref.current?.value || '');\n const { maxCharacters, onTrigger = null, ...textareaProps } = props;\n\n const textExpanderRef = useRef();\n\n useThrottledResizeObserver({\n ref,\n onResize: () => {\n // Get height of textarea, set height to textExpander\n if (textExpanderRef.current && ref.current) {\n const { height } = ref.current.getBoundingClientRect();\n if (height) {\n textExpanderRef.current.setStyle({ minHeight: height + 'px' });\n }\n }\n },\n });\n\n const slowHighlightPerf = useRef(0); // increment if slow\n const composeHighlightRef = useRef();\n const throttleHighlightText = useThrottledCallback((text) => {\n if (!composeHighlightRef.current) return;\n if (slowHighlightPerf.current > 3) {\n // After 3 times of lag, disable highlighting\n composeHighlightRef.current.innerHTML = '';\n composeHighlightRef.current = null; // Destroy the whole thing\n throttleHighlightText?.cancel?.();\n return;\n }\n let start;\n let end;\n if (slowHighlightPerf.current <= 3) start = Date.now();\n composeHighlightRef.current.innerHTML =\n highlightText(text, {\n maxCharacters,\n }) + '\\n';\n if (slowHighlightPerf.current <= 3) end = Date.now();\n console.debug('HIGHLIGHT PERF', { start, end, diff: end - start });\n if (start && end && end - start > 50) {\n // if slow, increment\n slowHighlightPerf.current++;\n }\n // Newline to prevent multiple line breaks at the end from being collapsed, no idea why\n }, 500);\n\n const debouncedAutoDetectLanguage = useDebouncedCallback(() => {\n // Make use of the highlightRef to get the DOM\n // Clone the dom\n const dom = composeHighlightRef.current?.cloneNode(true);\n if (!dom) return;\n // Remove mark\n dom.querySelectorAll('mark').forEach((mark) => {\n mark.remove();\n });\n const text = dom.innerText?.trim();\n if (!text) return;\n (async () => {\n const langs = await detectLangs(text);\n if (langs?.length) {\n onTrigger?.({\n name: 'auto-detect-language',\n languages: langs,\n });\n }\n })();\n }, 2000);\n\n return (\n <TextExpander\n ref={textExpanderRef}\n keys=\"@ @ : # #\"\n class=\"compose-field-container\"\n onTrigger={onTrigger}\n >\n <textarea\n class=\"compose-field\"\n autoCapitalize=\"sentences\"\n autoComplete=\"on\"\n autoCorrect=\"on\"\n spellCheck=\"true\"\n dir=\"auto\"\n rows=\"6\"\n cols=\"50\"\n {...textareaProps}\n ref={ref}\n name=\"status\"\n value={text}\n onKeyDown={(e) => {\n // Get line before cursor position after pressing 'Enter'\n const { key, target } = e;\n const hasTextExpander = textExpanderRef.current?.activated();\n if (\n key === 'Enter' &&\n !(e.ctrlKey || e.metaKey || hasTextExpander) &&\n !e.isComposing\n ) {\n try {\n const { value, selectionStart } = target;\n const textBeforeCursor = value.slice(0, selectionStart);\n const lastLine = textBeforeCursor.split('\\n').slice(-1)[0];\n if (lastLine) {\n // If line starts with \"- \" or \"12. \"\n if (/^\\s*(-|\\d+\\.)\\s/.test(lastLine)) {\n // insert \"- \" at cursor position\n const [_, preSpaces, bullet, postSpaces, anything] =\n lastLine.match(/^(\\s*)(-|\\d+\\.)(\\s+)(.+)?/) || [];\n if (anything) {\n e.preventDefault();\n const [number] = bullet.match(/\\d+/) || [];\n const newBullet = number ? `${+number + 1}.` : '-';\n const text = `\\n${preSpaces}${newBullet}${postSpaces}`;\n target.setRangeText(text, selectionStart, selectionStart);\n const pos = selectionStart + text.length;\n target.setSelectionRange(pos, pos);\n } else {\n // trim the line before the cursor, then insert new line\n const pos = selectionStart - lastLine.length;\n target.setRangeText('', pos, selectionStart);\n }\n autoResizeTextarea(target);\n target.dispatchEvent(new Event('input'));\n }\n }\n } catch (e) {\n // silent fail\n console.error(e);\n }\n }\n if (composeHighlightRef.current) {\n composeHighlightRef.current.scrollTop = target.scrollTop;\n }\n }}\n onInput={(e) => {\n const { target } = e;\n const text = target.value;\n setText(text);\n autoResizeTextarea(target);\n props.onInput?.(e);\n throttleHighlightText(text);\n debouncedAutoDetectLanguage();\n }}\n onScroll={(e) => {\n if (composeHighlightRef.current) {\n const { scrollTop } = e.target;\n composeHighlightRef.current.scrollTop = scrollTop;\n }\n }}\n onPaste={(e) => {\n try {\n const pastedText = e.clipboardData.getData('text').trim();\n if (pastedText) {\n onTrigger?.({\n name: 'pasted-link',\n url: pastedText,\n });\n }\n } catch (error) {\n console.error(error);\n }\n }}\n />\n <div\n ref={composeHighlightRef}\n class=\"compose-highlight\"\n aria-hidden=\"true\"\n />\n </TextExpander>\n );\n});\n\nexport default Textarea;\n","import './custom-emojis-modal.css';\n\nimport { Trans, useLingui } from '@lingui/react/macro';\nimport { memo } from 'preact/compat';\nimport {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'preact/hooks';\n\nimport getCustomEmojis from '../utils/custom-emojis';\nimport store from '../utils/store';\n\nimport Icon from './icon';\nimport Loader from './loader';\n\nconst CUSTOM_EMOJIS_COUNT = 100;\nconst EMOJI_SIZE_MIN = 1;\nconst EMOJI_SIZE_MAX = 2;\nconst EMOJI_SIZE_STEP = 0.5;\n\nconst CustomEmojiButton = memo(({ emoji, onClick, showCode }) => {\n const addEdges = (e) => {\n // Add edge-left or edge-right class based on self position relative to scrollable parent\n // If near left edge, add edge-left, if near right edge, add edge-right\n const buffer = 88;\n const parent = e.currentTarget.closest('main');\n if (parent) {\n const rect = parent.getBoundingClientRect();\n const selfRect = e.currentTarget.getBoundingClientRect();\n const targetClassList = e.currentTarget.classList;\n if (selfRect.left < rect.left + buffer) {\n targetClassList.add('edge-left');\n targetClassList.remove('edge-right');\n } else if (selfRect.right > rect.right - buffer) {\n targetClassList.add('edge-right');\n targetClassList.remove('edge-left');\n } else {\n targetClassList.remove('edge-left', 'edge-right');\n }\n }\n };\n\n return (\n <button\n type=\"button\"\n className=\"plain4\"\n onClick={onClick}\n data-title={showCode ? undefined : emoji.shortcode}\n onPointerEnter={addEdges}\n onFocus={addEdges}\n >\n <picture>\n {!!emoji.staticUrl && (\n <source\n srcSet={emoji.staticUrl}\n media=\"(prefers-reduced-motion: reduce)\"\n />\n )}\n <img\n className=\"shortcode-emoji\"\n src={emoji.url || emoji.staticUrl}\n alt={emoji.shortcode}\n width=\"24\"\n height=\"24\"\n loading=\"lazy\"\n decoding=\"async\"\n />\n </picture>\n {showCode && (\n <>\n {' '}\n <code>{emoji.shortcode}</code>\n </>\n )}\n </button>\n );\n});\n\nconst CustomEmojisList = memo(({ emojis, onSelect }) => {\n const { i18n } = useLingui();\n const [max, setMax] = useState(CUSTOM_EMOJIS_COUNT);\n const showMore = emojis.length > max;\n return (\n <section>\n {emojis.slice(0, max).map((emoji) => (\n <CustomEmojiButton\n key={emoji.shortcode}\n emoji={emoji}\n onClick={() => {\n onSelect(`:${emoji.shortcode}:`);\n }}\n />\n ))}\n {showMore && (\n <button\n type=\"button\"\n class=\"plain small\"\n onClick={() => setMax(max + CUSTOM_EMOJIS_COUNT)}\n >\n <Trans>{i18n.number(emojis.length - max)} more…</Trans>\n </button>\n )}\n </section>\n );\n});\n\nconst CUSTOM_EMOJI_SIZE = 'composer-customEmojiSize';\n\nfunction CustomEmojisModal({\n masto,\n instance,\n onClose = () => {},\n onSelect = () => {},\n defaultSearchTerm,\n}) {\n const { t } = useLingui();\n const [uiState, setUIState] = useState('default');\n const customEmojisList = useRef([]);\n const [customEmojis, setCustomEmojis] = useState([]);\n const recentlyUsedCustomEmojis = useMemo(\n () => store.account.get('recentlyUsedCustomEmojis') || [],\n );\n const searcherRef = useRef();\n useEffect(() => {\n setUIState('loading');\n (async () => {\n try {\n const [emojis, searcher] = await getCustomEmojis(instance, masto);\n console.log('emojis', emojis);\n searcherRef.current = searcher;\n setCustomEmojis(emojis);\n setUIState('default');\n } catch (e) {\n setUIState('error');\n console.error(e);\n }\n })();\n }, []);\n\n const customEmojisCatList = useMemo(() => {\n // Group emojis by category\n const emojisCat = {\n '--recent--': recentlyUsedCustomEmojis.filter((emoji) =>\n customEmojis.find((e) => e.shortcode === emoji.shortcode),\n ),\n };\n const othersCat = [];\n customEmojis.forEach((emoji) => {\n customEmojisList.current?.push?.(emoji);\n if (!emoji.category) {\n othersCat.push(emoji);\n return;\n }\n if (!emojisCat[emoji.category]) {\n emojisCat[emoji.category] = [];\n }\n emojisCat[emoji.category].push(emoji);\n });\n if (othersCat.length) {\n emojisCat['--others--'] = othersCat;\n }\n return emojisCat;\n }, [customEmojis]);\n\n const scrollableRef = useRef();\n const [matches, setMatches] = useState(null);\n const [emojiSize, setEmojiSize] = useState(\n store.local.get(CUSTOM_EMOJI_SIZE) || EMOJI_SIZE_MIN,\n );\n const onEmojiSizeDecrease = useCallback(() => {\n const newSize = Math.max(EMOJI_SIZE_MIN, emojiSize - EMOJI_SIZE_STEP);\n setEmojiSize(newSize);\n if (newSize === EMOJI_SIZE_MIN) {\n store.local.del(CUSTOM_EMOJI_SIZE);\n } else {\n store.local.set(CUSTOM_EMOJI_SIZE, newSize);\n }\n }, [emojiSize]);\n\n const onEmojiSizeIncrease = useCallback(() => {\n const newSize = Math.min(EMOJI_SIZE_MAX, emojiSize + EMOJI_SIZE_STEP);\n setEmojiSize(newSize);\n if (newSize === EMOJI_SIZE_MIN) {\n store.local.del(CUSTOM_EMOJI_SIZE);\n } else {\n store.local.set(CUSTOM_EMOJI_SIZE, newSize);\n }\n }, [emojiSize]);\n\n const onFind = useCallback(\n (e) => {\n const { value } = e.target;\n if (value) {\n const results = searcherRef.current?.search(value, {\n limit: CUSTOM_EMOJIS_COUNT,\n });\n setMatches(results.map((r) => r.item));\n scrollableRef.current?.scrollTo?.(0, 0);\n } else {\n setMatches(null);\n }\n },\n [customEmojis],\n );\n useEffect(() => {\n if (defaultSearchTerm && customEmojis?.length) {\n onFind({ target: { value: defaultSearchTerm } });\n }\n }, [defaultSearchTerm, onFind, customEmojis]);\n\n const onSelectEmoji = useCallback(\n (emoji) => {\n onSelect?.(emoji);\n onClose?.();\n\n queueMicrotask(() => {\n let recentlyUsedCustomEmojis =\n store.account.get('recentlyUsedCustomEmojis') || [];\n const recentlyUsedEmojiIndex = recentlyUsedCustomEmojis.findIndex(\n (e) => e.shortcode === emoji.shortcode,\n );\n if (recentlyUsedEmojiIndex !== -1) {\n // Move emoji to index 0\n recentlyUsedCustomEmojis.splice(recentlyUsedEmojiIndex, 1);\n recentlyUsedCustomEmojis.unshift(emoji);\n } else {\n recentlyUsedCustomEmojis.unshift(emoji);\n // Remove unavailable ones\n recentlyUsedCustomEmojis = recentlyUsedCustomEmojis.filter((e) =>\n customEmojisList.current?.find?.(\n (emoji) => emoji.shortcode === e.shortcode,\n ),\n );\n // Limit to 10\n recentlyUsedCustomEmojis = recentlyUsedCustomEmojis.slice(0, 10);\n }\n\n // Store back\n store.account.set('recentlyUsedCustomEmojis', recentlyUsedCustomEmojis);\n });\n },\n [onSelect],\n );\n\n const inputRef = useRef();\n useEffect(() => {\n if (inputRef.current) {\n inputRef.current.focus();\n // Put cursor at the end\n if (inputRef.current.value) {\n inputRef.current.selectionStart = inputRef.current.value.length;\n inputRef.current.selectionEnd = inputRef.current.value.length;\n }\n }\n }, []);\n\n const hasCustomEmojis = !!customEmojis?.length;\n\n return (\n <div\n id=\"custom-emojis-sheet\"\n class=\"sheet\"\n style={{\n '--custom-emoji-size': emojiSize,\n }}\n >\n {!!onClose && (\n <button type=\"button\" class=\"sheet-close\" onClick={onClose}>\n <Icon icon=\"x\" alt={t`Close`} />\n </button>\n )}\n <header>\n <div>\n <b>\n <Trans>Custom emojis</Trans>\n </b>{' '}\n {uiState === 'loading' ? (\n <Loader />\n ) : (\n <small class=\"insignificant\"> • {instance}</small>\n )}\n </div>\n {hasCustomEmojis && (\n <form\n onSubmit={(e) => {\n e.preventDefault();\n const emoji = matches[0];\n if (emoji) {\n onSelectEmoji(`:${emoji.shortcode}:`);\n }\n }}\n >\n <input\n ref={inputRef}\n type=\"search\"\n placeholder={t`Search emoji`}\n onInput={onFind}\n autocomplete=\"off\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n spellCheck=\"false\"\n dir=\"auto\"\n enterKeyHint=\"search\"\n defaultValue={defaultSearchTerm || ''}\n />\n </form>\n )}\n </header>\n <main ref={scrollableRef}>\n {hasCustomEmojis ? (\n <>\n {matches !== null ? (\n <ul class=\"custom-emojis-matches custom-emojis-list\">\n {matches.map((emoji) => (\n <li key={emoji.shortcode} class=\"custom-emojis-match\">\n <CustomEmojiButton\n emoji={emoji}\n onClick={() => {\n onSelectEmoji(`:${emoji.shortcode}:`);\n }}\n showCode\n />\n </li>\n ))}\n </ul>\n ) : (\n <div class=\"custom-emojis-list\">\n {uiState === 'error' && (\n <div class=\"ui-state\">\n <p>\n <Trans>Error loading custom emojis</Trans>\n </p>\n </div>\n )}\n {uiState === 'default' &&\n Object.entries(customEmojisCatList).map(\n ([category, emojis]) =>\n !!emojis?.length && (\n <div class=\"section-container\">\n <div class=\"section-header\">\n {{\n '--recent--': t`Recently used`,\n '--others--': t`Others`,\n }[category] || category}\n </div>\n <CustomEmojisList\n emojis={emojis}\n onSelect={onSelectEmoji}\n />\n </div>\n ),\n )}\n </div>\n )}\n <div class=\"size-range\">\n <button\n type=\"button\"\n class=\"plain4\"\n onClick={onEmojiSizeDecrease}\n disabled={emojiSize <= EMOJI_SIZE_MIN}\n >\n <Icon icon=\"zoom-out\" size=\"l\" alt={t`Zoom out`} />\n </button>\n <button\n type=\"button\"\n class=\"plain4\"\n onClick={onEmojiSizeIncrease}\n disabled={emojiSize >= EMOJI_SIZE_MAX}\n >\n <Icon icon=\"zoom-in\" size=\"l\" alt={t`Zoom in`} />\n </button>\n </div>\n </>\n ) : (\n <div class=\"ui-state\">\n <p>\n <Trans>Custom emojis are not available on this server.</Trans>\n </p>\n </div>\n )}\n </main>\n </div>\n );\n}\n\nexport default CustomEmojisModal;\n","import { plural } from '@lingui/core/macro';\n\nfunction FilePickerInput({\n hidden,\n supportedMimeTypes,\n maxMediaAttachments,\n mediaAttachments,\n disabled = false,\n setMediaAttachments,\n}) {\n return (\n <input\n type=\"file\"\n hidden={hidden}\n accept={supportedMimeTypes?.join(',')}\n multiple={\n maxMediaAttachments === undefined ||\n maxMediaAttachments - mediaAttachments >= 2\n }\n disabled={disabled}\n onChange={(e) => {\n const files = e.target.files;\n if (!files) return;\n\n const mediaFiles = Array.from(files).map((file) => ({\n file,\n type: file.type,\n size: file.size,\n url: URL.createObjectURL(file),\n id: null, // indicate uploaded state\n description: null,\n }));\n console.log('MEDIA ATTACHMENTS', files, mediaFiles);\n\n // Validate max media attachments\n if (mediaAttachments.length + mediaFiles.length > maxMediaAttachments) {\n alert(\n plural(maxMediaAttachments, {\n one: 'You can only attach up to 1 file.',\n other: 'You can only attach up to # files.',\n }),\n );\n } else {\n setMediaAttachments((attachments) => {\n return attachments.concat(mediaFiles);\n });\n }\n // Reset\n e.target.value = '';\n }}\n />\n );\n}\n\nexport default FilePickerInput;\n","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20version='1.0'%20viewBox='0%200%20641%20223'%3e%3cpath%20fill='%23aaa'%20d='M86%20214c-9-1-17-4-24-8l-6-3-5-5-5-4-4-6-4-6-3-8-2-8v-27l2-9%203-9%204-6%204-6%205-5%205-5%207-3%206-4%207-2%207-2%2012-1h12l7%201%208%202%207%204%207%203%205%205%205%204-10%2010-10%209-4-3-10-5-5-1H88l-5%202-6%203-3%204-4%204-2%205-2%206v6l-1%207%201%207%202%207%203%205%202%204%204%203%204%203%205%202%206%202h9l10-1%205-2%206-3v-16H91v-27h59v54l-1%203-2%203-5%204-4%204-5%203-5%202-8%202-8%202-10%201H92l-6-1zm266-62V91h34v46h44V91h34v121h-34v-46h-44v46h-34v-61zm-182-1V90h34v121h-34v-60zm59-1V90h35l36%201%205%202c3%200%208%202%2010%204l5%202%204%205%205%204%203%207%203%207%201%2013v13l-4%206-3%207-4%204-5%205-5%202-5%203-6%202-5%201-18%201h-18v32h-34v-61zm67-2%203-2%202-4%202-5v-5l-2-4-2-4-3-2-3-3h-30v31h30l3-2zm226%2039v-24l-8-12-18-28a1751%201751%200%200%200-20-31v-2h39l7%2012%2012%2021%206%209%2013-21%2013-21h38v2l-41%2061-7%2010v48h-34v-24zM109%2066l-4-1-5-5-5-4-1-5-3-9v-5l1-5c2-7%203-10%208-15l4-4%207-2%207-2h7l6%201%205%202%205%202%203%204%204%203%202%206%202%205v13l-2%205-2%206-4%204-3%203-5%202-4%202-9%201h-9l-5-2zm22-11%204-2%203-4%202-5V34l-2-4-2-4-3-2-4-3-5-1h-6l-4%202-5%202-2%204-3%205-1%203v4l1%205%202%205%202%202%205%203%204%202h10l4-2zM37%2039V11h33l3%201%203%202%204%203%203%203%201%205%201%204v5l-1%204-3%204-3%205-4%201-3%202-11%201H49v16H37V39zm31%200%203-2%201-2%201-2v-4l-1-3-3-2-2-2H49v18h15l4-1zm107%2025a512%20512%200%200%200-19-53h14l4%2014%206%2019%201%204%201-1%207-19%205-17h9l6%2019%207%2018v-1l2-6%205-17%204-13h14v1l-4%2012-16%2041v2h-5l-5-1-6-15-6-15-1%201-3%207-6%2015-2%208h-11l-1-3zm74-25V11h42v11h-29v2l-1%205v4h29v11h-28v11h2l15%201h13v11h-43V39zm55%200V11h33l5%203%205%202%202%204%202%205v10l-2%203-1%204-5%203-5%203%205%205%208%2010%203%204h-14l-7-9-8-10h-9v19h-12V39zm33-3%202-3v-6l-3-3-2-3h-18v16h1v1h17l2-2zm26%203V11h42v11h-29l-1%206v5h29v11h-28v5l-1%205%201%201v1h30v11h-43V39zm54%200V11h17l18%201%204%202%205%203%202%204%203%204%202%206%201%206v5c-1%206-3%2012-6%2015l-3%204-5%203-5%202-17%201h-16V39zm33%2014%205-5%202-3v-6l-1-6-1-3-1-3-4-3-3-2h-5l-6-1-3%201h-3v34h9l8-1%203-2zm50-14V11h34l5%202%204%202%202%203%202%203v9l-2%202-3%204-1%201%203%203%203%204%201%203%201%204-1%204-1%204-3%203-3%203-5%201-5%201h-31V39zm34%2015%202-1v-6l-2-2-2-2h-20v13h20l2-2zm-3-22%204-2v-6l-2-1-2-2h-19v12h16l4-1zm42%2024V45l-6-9-11-17-5-8h15l4%208%207%2011%202%203%207-11%207-11h14l-11%2016-11%2017v23h-12V56z'/%3e%3c/svg%3e\"","import { Trans, useLingui } from '@lingui/react/macro';\nimport { useEffect, useRef, useState } from 'preact/hooks';\nimport { useDebouncedCallback } from 'use-debounce';\n\nimport poweredByGiphyURL from '../assets/powered-by-giphy.svg';\n\nimport Icon from './icon';\nimport Loader from './loader';\n\nconst { PHANPY_GIPHY_API_KEY: GIPHY_API_KEY } = import.meta.env;\n\nconst GIFS_PER_PAGE = 20;\n\nfunction GIFPickerModal({ onClose = () => {}, onSelect = () => {} }) {\n const { i18n, t } = useLingui();\n const [uiState, setUIState] = useState('default');\n const [results, setResults] = useState([]);\n const formRef = useRef(null);\n const qRef = useRef(null);\n const currentOffset = useRef(0);\n const scrollableRef = useRef(null);\n\n function fetchGIFs({ offset }) {\n console.log('fetchGIFs', { offset });\n if (!qRef.current?.value) return;\n setUIState('loading');\n scrollableRef.current?.scrollTo?.({\n top: 0,\n left: 0,\n behavior: 'smooth',\n });\n (async () => {\n try {\n const query = {\n api_key: GIPHY_API_KEY,\n q: qRef.current.value,\n rating: 'g',\n limit: GIFS_PER_PAGE,\n bundle: 'messaging_non_clips',\n offset,\n lang: i18n.locale || 'en',\n };\n const response = await fetch(\n 'https://api.giphy.com/v1/gifs/search?' + new URLSearchParams(query),\n {\n referrerPolicy: 'no-referrer',\n },\n ).then((r) => r.json());\n currentOffset.current = response.pagination?.offset || 0;\n setResults(response);\n setUIState('results');\n } catch (e) {\n setUIState('error');\n console.error(e);\n }\n })();\n }\n\n useEffect(() => {\n qRef.current?.focus();\n }, []);\n\n const debouncedOnInput = useDebouncedCallback(() => {\n fetchGIFs({ offset: 0 });\n }, 1000);\n\n return (\n <div id=\"gif-picker-sheet\" class=\"sheet\">\n {!!onClose && (\n <button type=\"button\" class=\"sheet-close\" onClick={onClose}>\n <Icon icon=\"x\" alt={t`Close`} />\n </button>\n )}\n <header>\n <form\n ref={formRef}\n onSubmit={(e) => {\n e.preventDefault();\n fetchGIFs({ offset: 0 });\n }}\n >\n <input\n ref={qRef}\n type=\"search\"\n name=\"q\"\n placeholder={t`Search GIFs`}\n required\n autocomplete=\"off\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n spellCheck=\"false\"\n dir=\"auto\"\n enterKeyHint=\"search\"\n onInput={debouncedOnInput}\n />\n <input\n type=\"image\"\n class=\"powered-button\"\n src={poweredByGiphyURL}\n width=\"86\"\n height=\"30\"\n alt={t`Powered by GIPHY`}\n />\n </form>\n </header>\n <main ref={scrollableRef} class={uiState === 'loading' ? 'loading' : ''}>\n {uiState === 'default' && (\n <div class=\"ui-state\">\n <p class=\"insignificant\">\n <Trans>Type to search GIFs</Trans>\n </p>\n </div>\n )}\n {uiState === 'loading' && !results?.data?.length && (\n <div class=\"ui-state\">\n <Loader abrupt />\n </div>\n )}\n {results?.data?.length > 0 ? (\n <>\n <ul>\n {results.data.map((gif) => {\n const { id, images, title, alt_text } = gif;\n const {\n fixed_height_small,\n fixed_height_downsampled,\n fixed_height,\n original,\n } = images;\n const theImage = fixed_height_small?.url\n ? fixed_height_small\n : fixed_height_downsampled?.url\n ? fixed_height_downsampled\n : fixed_height;\n let { url, webp, width, height } = theImage;\n if (+height > 100) {\n width = (width / height) * 100;\n height = 100;\n }\n const urlObj = URL.parse(url);\n const strippedURL = urlObj.origin + urlObj.pathname;\n let strippedWebP;\n if (webp) {\n const webpObj = URL.parse(webp);\n strippedWebP = webpObj.origin + webpObj.pathname;\n }\n return (\n <li key={id}>\n <button\n type=\"button\"\n onClick={() => {\n const { mp4, url } = original;\n const theURL = mp4 || url;\n const urlObj = URL.parse(theURL);\n const strippedURL = urlObj.origin + urlObj.pathname;\n onClose();\n onSelect({\n url: strippedURL,\n type: mp4 ? 'video/mp4' : 'image/gif',\n alt_text: alt_text || title,\n });\n }}\n >\n <figure\n style={{\n '--figure-width': width + 'px',\n // width: width + 'px'\n }}\n >\n <picture>\n {strippedWebP && (\n <source srcset={strippedWebP} type=\"image/webp\" />\n )}\n <img\n src={strippedURL}\n width={width}\n height={height}\n loading=\"lazy\"\n decoding=\"async\"\n alt={alt_text}\n referrerpolicy=\"no-referrer\"\n onLoad={(e) => {\n e.target.style.backgroundColor = 'transparent';\n }}\n />\n </picture>\n <figcaption>{alt_text || title}</figcaption>\n </figure>\n </button>\n </li>\n );\n })}\n </ul>\n <p class=\"pagination\">\n {results.pagination?.offset > 0 && (\n <button\n type=\"button\"\n class=\"light small\"\n disabled={uiState === 'loading'}\n onClick={() => {\n fetchGIFs({\n offset: results.pagination?.offset - GIFS_PER_PAGE,\n });\n }}\n >\n <Icon icon=\"chevron-left\" />\n <span>\n <Trans>Previous</Trans>\n </span>\n </button>\n )}\n <span />\n {results.pagination?.offset + results.pagination?.count <\n results.pagination?.total_count && (\n <button\n type=\"button\"\n class=\"light small\"\n disabled={uiState === 'loading'}\n onClick={() => {\n fetchGIFs({\n offset: results.pagination?.offset + GIFS_PER_PAGE,\n });\n }}\n >\n <span>\n <Trans>Next</Trans>\n </span>{' '}\n <Icon icon=\"chevron-right\" />\n </button>\n )}\n </p>\n </>\n ) : (\n uiState === 'results' && (\n <div class=\"ui-state\">\n <p>No results</p>\n </div>\n )\n )}\n {uiState === 'error' && (\n <div class=\"ui-state\">\n <p>\n <Trans>Error loading GIFs</Trans>\n </p>\n </div>\n )}\n </main>\n </div>\n );\n}\n\nexport default GIFPickerModal;\n","!function(t,e){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define([],e):\"object\"==typeof exports?exports.ExifReader=e():t.ExifReader=e()}(Object(\"undefined\"!=typeof self?self:this),function(){return function(){\"use strict\";var t={d:function(e,n){for(var r in n)t.o(n,r)&&!t.o(e,r)&&Object.defineProperty(e,r,{enumerable:1,get:n[r]})},o:function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r:function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:1})}},e={};function n(t,e,n){for(var r=[],o=0;o<n&&e+o<t.byteLength;o++)r.push(t.getUint8(e+o));return i(r)}function r(t,e){for(var n=[],r=0;e+r<t.byteLength;){var o=t.getUint8(e+r);if(0===o)break;n.push(o),r++}return i(n)}function i(t){return t.map(function(t){return String.fromCharCode(t)}).join(\"\")}function o(){for(var t=1;t<arguments.length;t++)for(var e in arguments[t])arguments[0][e]=arguments[t][e];return arguments[0]}t.r(e),t.d(e,{default:function(){return Mn},errors:function(){return Rn},load:function(){return Bn},loadView:function(){return jn}});var u=void 0;function a(t){return a=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},a(t)}function f(t){var e=function(t){if(\"object\"!=a(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,\"string\");if(\"object\"!=a(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return t+\"\"}(t);return\"symbol\"==a(e)?e:e+\"\"}var c=function(){return t=function t(e){if(function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),function(t){return\"object\"!==a(t)||void 0===t.length||void 0===t.readUInt8||void 0===t.readUInt16LE||void 0===t.readUInt16BE||void 0===t.readUInt32LE||void 0===t.readUInt32BE||void 0===t.readInt32LE||void 0===t.readInt32BE}(e))throw Error(\"DataView: Passed buffer type is unsupported.\");this.buffer=e,this.byteLength=this.buffer.length},(e=[{key:\"getUint8\",value:function(t){return this.buffer.readUInt8(t)}},{key:\"getUint16\",value:function(t,e){return e?this.buffer.readUInt16LE(t):this.buffer.readUInt16BE(t)}},{key:\"getUint32\",value:function(t,e){return e?this.buffer.readUInt32LE(t):this.buffer.readUInt32BE(t)}},{key:\"getInt32\",value:function(t,e){return e?this.buffer.readInt32LE(t):this.buffer.readInt32BE(t)}}])&&function(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||0,r.configurable=1,\"value\"in r&&(r.writable=1),Object.defineProperty(t,f(r.key),r)}}(t.prototype,e),Object.defineProperty(t,\"prototype\",{writable:0}),t;var t,e}();function s(t){return t[0][0]/t[0][1]+t[1][0]/t[1][1]/60+t[2][0]/t[2][1]/3600}var l=2,d=65496,p=2,v=4,g=2,h=10,m=18,y=33,b=79,x=65472,A=65474,S=65476,w=65499,U=65501,I=65498,O=65504,T=65505,C=65517,P=65519,E=65534,k=65535,L=\"Exif\",N=\"http://ns.adobe.com/xap/1.0/\\0\",M=\"http://ns.adobe.com/xmp/extension/\\0\",R=\"Photoshop 3.0\";function B(t,e){var r=L.length;return t.getUint16(e)===T&&n(t,e+v,r)===L&&0===t.getUint8(e+v+r)}function _(t,e){return t.getUint16(e)===T&&function(t,e){var r=N.length;return n(t,e+v,r)===N}(t,e)}function j(t,e){return t.getUint16(e)===T&&function(t,e){var r=M.length;return n(t,e+v,r)===M}(t,e)}function D(t,e){return{dataOffset:t+y,length:e-(y-g)}}function z(t,e){return{dataOffset:t+b,length:e-(b-g)}}function F(t,e){var r=R.length;return t.getUint16(e)===C&&n(t,e+v,r)===R&&0===t.getUint8(e+v+r)}function G(t,e){var n=t.getUint16(e);return n>=O&&n<=P||n===E||n===x||n===A||n===S||n===w||n===U||n===I}function H(t,e){return t.getUint16(e)===k}var V=\"PNG\\r\\n\u001a\\n\",W=4,X=4,Y=0,$=W,q=W+X,Z=\"XML:com.adobe.xmp\\0\",K=\"tEXt\",J=\"iTXt\",Q=\"zTXt\",tt=\"pHYs\",et=\"tIME\",nt=\"eXIf\";function rt(t,e){return n(t,e+$,X)===J&&n(t,e+q,Z.length)===Z}function it(t,e,r){var i=n(t,e+$,X);return i===K||i===J||i===Q&&r}function ot(t,e){return n(t,e+$,X)===nt}function ut(t,e){var r=[tt,et],i=n(t,e+$,X);return r.includes(i)}function at(t,e){e+=q+Z.length+1+1;for(var n=0;n<2&&e<t.byteLength;)0===t.getUint8(e)&&n++,e++;if(!(n<2))return e}function ft(t,e,n,r,i,o,u,a){if(void 0===a)return[];for(var f=[],c=n.items,s=0;s<a;s++){var l={extents:[]};l.itemId=ct(t,c,e),c+=r.item.itemId,l.constructionMethod=1===e||2===e?15&t.getUint16(c):void 0,c+=r.item.constructionMethod,l.dataReferenceIndex=t.getUint16(c),c+=r.item.dataReferenceIndex,l.baseOffset=lt(t,c,r.item.baseOffset),c+=r.item.baseOffset,l.extentCount=t.getUint16(c),c+=r.item.extentCount;for(var d=0;d<l.extentCount;d++){var p={};p.extentIndex=st(t,e,c,u),c+=r.item.extent.extentIndex,p.extentOffset=lt(t,c,i),c+=r.item.extent.extentOffset,p.extentLength=lt(t,c,o),c+=r.item.extent.extentLength,l.extents.push(p)}f.push(l)}return f}function ct(t,e,n){return n<2?t.getUint16(e):2===n?t.getUint32(e):void 0}function st(t,e,n,r){if((1===e||2===e)&&r>0)return lt(t,n,r)}function lt(t,e,n){return 4===n?t.getUint32(e):8===n?(console.warn(\"This file uses an 8-bit offset which is currently not supported by ExifReader. Contact the maintainer to get it fixed.\"),function(t,e){return t.getUint32(e+4)}(t,e)):0}var dt=1165519206,pt=1835625829;function vt(t,e){var i=function(t,e){var n=t.getUint32(e);return function(t){return 0===t}(n)?{length:t.byteLength-e,contentOffset:e+4+4}:function(t){return 1===t}(n)&&function(t,e){return 0===t.getUint32(e+8)}(t,e)?{length:t.getUint32(e+12),contentOffset:e+4+4+8}:{length:n,contentOffset:e+4+4}}(t,e),o=i.length,u=i.contentOffset;if(!(o<8)){var a=t.getUint32(e+4);if(1718909296===a)return function(t,e,r){return{type:\"ftyp\",majorBrand:n(t,e,4),length:r}}(t,u,o);if(1768977008===a)return function(t,e,n,r){return{type:\"iprp\",subBoxes:mt(t,n,r-(n-e)),length:r}}(t,e,u,o);if(1768973167===a)return function(t,e,n,r){return{type:\"ipco\",properties:mt(t,n,r-(n-e)),length:r}}(t,e,u,o);if(1668246642===a)return function(t,e,n){return{type:\"colr\",icc:ht(t,e),length:n}}(t,u,o);var f=t.getUint8(u);return 1835365473===a?function(t,e,n,r){return{type:\"meta\",subBoxes:mt(t,n+3,r-(n+3-e)),length:r}}(t,e,u+1,o):1768714083===a?function(t,e,n,r){var i=function(t,e){var n={item:{dataReferenceIndex:2,extentCount:2,extent:{}}};t<2?(n.itemCount=2,n.item.itemId=2):2===t&&(n.itemCount=4,n.item.itemId=4),n.item.constructionMethod=1===t||2===t?2:0;var r={offsetSize:e,lengthSize:e,baseOffsetSize:e+1,indexSize:e+1};return r.itemCount=e+2,r.items=r.itemCount+n.itemCount,r.item={itemId:0},r.item.constructionMethod=r.item.itemId+n.item.itemId,r.item.dataReferenceIndex=r.item.constructionMethod+n.item.constructionMethod,{offsets:r,sizes:n}}(e,n+3),o=i.offsets,u=i.sizes,a=t.getUint8(o.offsetSize)>>4;u.item.extent.extentOffset=a;var f=15&t.getUint8(o.lengthSize);u.item.extent.extentLength=f;var c=t.getUint8(o.baseOffsetSize)>>4;u.item.baseOffset=c;var s=function(t,e,n){if(1===n||2===n)return 15&t.getUint8(e)}(t,o.indexSize,e);u.item.extent.extentIndex=void 0!==s?s:0;var l=function(t,e,n){return n<2?t.getUint16(e):2===n?t.getUint32(e):void 0}(t,o.itemCount,e);return{type:\"iloc\",items:ft(t,e,o,u,a,f,s,l),length:r}}(t,f,u+1,o):1768517222===a?function(t,e,n,r,i){var o=function(t,e){var n={entryCount:e+3},r={};return r.entryCount=0===t?2:4,n.itemInfos=n.entryCount+r.entryCount,{offsets:n}}(n,r),u=o.offsets;return{type:\"iinf\",itemInfos:mt(t,u.itemInfos,i-(u.itemInfos-e)),length:i}}(t,e,f,u+1,o):1768842853===a?function(t,e,n,i,o){i+=3;var u={type:\"infe\",length:o};return 0!==n&&1!==n||(u.itemId=t.getUint16(i),i+=2,u.itemProtectionIndex=t.getUint16(i),i+=2,u.itemName=r(t,i),i+=u.itemName.length+1),n>=2&&(2===n?(u.itemId=t.getUint16(i),i+=2):3===n&&(u.itemId=t.getUint32(i),i+=4),u.itemProtectionIndex=t.getUint16(i),i+=2,u.itemType=t.getUint32(i),i+=4,u.itemName=r(t,i),i+=u.itemName.length+1,u.itemType===pt?(u.contentType=r(t,i),e+o>(i+=u.contentType.length+1)&&(u.contentEncoding=r(t,i),i+=u.contentEncoding.length+1)):1970432288===u.itemType&&(u.itemUri=r(t,i),i+=u.itemUri.length+1)),u}(t,e,f,u+1,o):{type:void 0,length:o}}}function gt(t,e){return t.subBoxes.find(function(t){return\"iloc\"===t.type}).items.find(function(t){return t.itemId===e})}function ht(t,e){var r=n(t,e,4);if(\"prof\"===r||\"rICC\"===r)return{offset:e+4,length:t.getUint32(e+4),chunkNumber:1,chunksTotal:1}}function mt(t,e,n){for(var r=[dt,pt],i=[],o=e;o<e+n;){var u=vt(t,o);if(void 0===u)break;void 0===u.type||void 0!==u.itemType&&-1===r.indexOf(u.itemType)||i.push(u),o+=u.length}return i}var yt=0,bt=\"<?xpacket begin\",xt={parseAppMarkers:function(t,e){if(function(t){return!!t&&t.byteLength>=l&&t.getUint16(0)===d}(t))return At(function(t){for(var e,n,r,i,o=p;o+v+5<=t.byteLength;){if(B(t,o))e=t.getUint16(o+g),n=o+h;else if(_(t,o))i||(i=[]),e=t.getUint16(o+g),i.push(D(o,e));else if(j(t,o))i||(i=[]),e=t.getUint16(o+g),i.push(z(o,e));else if(F(t,o))e=t.getUint16(o+g),r=o+m;else{if(!G(t,o)){if(H(t,o)){o++;continue}break}e=t.getUint16(o+g)}o+=g+e}return{hasAppMarkers:o>p,fileDataOffset:void 0,jfifDataOffset:void 0,tiffHeaderOffset:n,iptcDataOffset:r,xmpChunks:i,iccChunks:void 0,mpfDataOffset:void 0}}(t),\"jpeg\",\"JPEG\");if(function(t){return!!t&&n(t,0,V.length)===V}(t))return At(function(t,e){for(var r={hasAppMarkers:0},i=V.length;i+W+X<=t.byteLength;){if(rt(t,i)){var o=at(t,i);void 0!==o&&(r.hasAppMarkers=1,r.xmpChunks=[{dataOffset:o,length:t.getUint32(i+Y)-(o-(i+q))}])}else if(it(t,i,e)){r.hasAppMarkers=1;var u=n(t,i+$,X);r.pngTextChunks||(r.pngTextChunks=[]),r.pngTextChunks.push({length:t.getUint32(i+Y),type:u,offset:i+q})}else ot(t,i)?(r.hasAppMarkers=1,r.tiffHeaderOffset=i+q):ut(t,i)&&(r.hasAppMarkers=1,r.pngChunkOffsets||(r.pngChunkOffsets=[]),r.pngChunkOffsets.push(i+Y));i+=t.getUint32(i+Y)+W+X+4}return r}(t,e),\"png\",\"PNG\");if(function(t){if(!t)return 0;try{var e=vt(t,0);return e&&-1!==[\"heic\",\"heix\",\"hevc\",\"hevx\",\"heim\",\"heis\",\"hevm\",\"hevs\",\"mif1\"].indexOf(e.majorBrand)}catch(t){return 0}}(t))return At(function(t){return function(t){var e={},n=function(t){for(var e=0;e+4+4<=t.byteLength;){var n=vt(t,e);if(void 0===n)break;if(\"meta\"===n.type)return n;e+=n.length}}(t);return n?(e.tiffHeaderOffset=function(t,e){try{var n=function(t){return t.subBoxes.find(function(t){return\"iinf\"===t.type}).itemInfos.find(function(t){return t.itemType===dt})}(e).itemId,r=gt(e,n);return function(t,e){return e+4+t.getUint32(e)}(t,r.baseOffset+r.extents[0].extentOffset)}catch(t){return}}(t,n),e.xmpChunks=function(t){try{var e=function(t){return t.subBoxes.find(function(t){return\"iinf\"===t.type}).itemInfos.find(function(t){return t.itemType===pt&&\"application/rdf+xml\"===t.contentType})}(t).itemId,n=gt(t,e),r=gt(t,e).extents[0];return[{dataOffset:n.baseOffset+r.extentOffset,length:r.extentLength}]}catch(t){return}}(n),e.hasAppMarkers=void 0!==e.tiffHeaderOffset||void 0!==e.xmpChunks||void 0!==e.iccChunks,e):{hasAppMarkers:0}}(t)}(t),\"heic\",\"HEIC\");if(function(t){return!!t&&\"RIFF\"===n(t,0,4)&&\"WEBP\"===n(t,8,4)}(t))return At(function(t){for(var e,r,i,o=12,u=0;o+8<t.byteLength;){var a=n(t,o,4),f=t.getUint32(o+4,1);\"EXIF\"===a?(u=1,e=\"Exif\\0\\0\"===n(t,o+8,6)?o+8+6:o+8):\"XMP \"===a?(u=1,r=[{dataOffset:o+8,length:f}]):\"VP8X\"===a&&(u=1,i=o+8),o+=8+(f%2==0?f:f+1)}return{hasAppMarkers:u,tiffHeaderOffset:e,xmpChunks:r,iccChunks:void 0,vp8xChunkOffset:i}}(t),\"webp\",\"WebP\");if(function(t){return!!t&&n(t,yt,bt.length)===bt}(t))return At(function(t){var e=[];return e.push({dataOffset:yt,length:t.byteLength}),{xmpChunks:e}}(t),\"xml\",\"XML\");throw Error(\"Invalid image format\")}};function At(t,e,n){return o({},t,{fileType:{value:e,description:n}})}var St=18761,wt=St,Ut={270:\"ImageDescription\",700:\"ApplicationNotes\",33723:\"IPTC-NAA\",34665:\"Exif IFD Pointer\"};function It(t){return It=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},It(t)}function Ot(t,e,n){return(e=function(t){var e=function(t){if(\"object\"!=It(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,\"string\");if(\"object\"!=It(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return t+\"\"}(t);return\"symbol\"==It(e)?e:e+\"\"}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:1,configurable:1,writable:1}):t[e]=n,t}var Tt=o({},Ut,{}),Ct=\"exif\",Pt=\"interoperability\",Et=\"pentax\",kt=Ot(Ot(Ot(Ot(Ot(Ot(Ot(Ot({},\"0th\",Tt),\"1st\",Ut),Ct,Tt),\"gps\",{}),Pt,{}),\"mpf\",{}),\"canon\",{}),Et,{}),Lt={1:1,2:1,3:2,4:4,5:8,7:1,9:4,10:8,13:4},Nt={BYTE:1,ASCII:2,SHORT:3,LONG:4,RATIONAL:5,UNDEFINED:7,SLONG:9,SRATIONAL:10,IFD:13},Mt={getAsciiValue:function(t){return t.map(function(t){return String.fromCharCode(t)})},getByteAt:Rt,getAsciiAt:function(t,e){return t.getUint8(e)},getShortAt:function(t,e,n){return t.getUint16(e,n===wt)},getLongAt:Bt,getRationalAt:function(t,e,n){return[Bt(t,e,n),Bt(t,e+4,n)]},getUndefinedAt:function(t,e){return Rt(t,e)},getSlongAt:_t,getSrationalAt:function(t,e,n){return[_t(t,e,n),_t(t,e+4,n)]},getIfdPointerAt:function(t,e,n){return Bt(t,e,n)},typeSizes:Lt,tagTypes:Nt,getTypeSize:function(t){if(void 0===Nt[t])throw Error(\"No such type found.\");return Lt[Nt[t]]}};function Rt(t,e){return t.getUint8(e)}function Bt(t,e,n){return t.getUint32(e,n===wt)}function _t(t,e,n){return t.getInt32(e,n===wt)}var jt={1:Mt.getByteAt,2:Mt.getAsciiAt,3:Mt.getShortAt,4:Mt.getLongAt,5:Mt.getRationalAt,7:Mt.getUndefinedAt,9:Mt.getSlongAt,10:Mt.getSrationalAt,13:Mt.getIfdPointerAt};function Dt(t,e,n,r,i,o){var u=arguments.length>6&&void 0!==arguments[6]?arguments[6]:0,a=Mt.getTypeSize(\"SHORT\"),f={},c=function(t,e,n){return e+Mt.getTypeSize(\"SHORT\")<=t.byteLength?Mt.getShortAt(t,e,n):0}(t,r,i);r+=a;for(var s=0;s<c&&!(r+12>t.byteLength);s++){var l=zt(t,e,n,r,i,o);void 0!==l&&(f[l.name]={id:l.id,value:l.value,description:l.description},u&&(f[l.name].computed=Ht(l.tagType,l.value)),(\"MakerNote\"===l.name||e===Et&&\"LevelInfo\"===l.name)&&(f[l.name].__offset=l.__offset)),r+=12}return f}function zt(t,e,n,r,i,o){var u,a,f=Mt.getTypeSize(\"SHORT\"),c=f+Mt.getTypeSize(\"SHORT\"),s=c+Mt.getTypeSize(\"LONG\"),l=Mt.getShortAt(t,r,i),d=Mt.getShortAt(t,r+f,i),p=Mt.getLongAt(t,r+c,i);if(void 0!==Mt.typeSizes[d]&&(o||void 0!==kt[e][l])){u=function(t,e){return Mt.typeSizes[t]*e<=Mt.getTypeSize(\"LONG\")}(d,p)?Ft(t,a=r+s,d,p,i):function(t,e,n,r,i){return e+n+Mt.typeSizes[r]*i<=t.byteLength}(t,n,a=Mt.getLongAt(t,r+s,i),d,p)?Ft(t,n+a,d,p,i,33723===l):\"<faulty value>\",d===Mt.tagTypes.ASCII&&(u=function(t){try{return t.map(function(t){return decodeURIComponent(escape(t))})}catch(e){return t}}(u=function(t){for(var e=[],n=0,r=0;r<t.length;r++)\"\\0\"!==t[r]?(void 0===e[n]&&(e[n]=\"\"),e[n]+=t[r]):n++;return e}(u)));var v=\"undefined-\".concat(l),g=u;if(void 0!==kt[e][l])if(void 0!==kt[e][l].name&&void 0!==kt[e][l].description){v=kt[e][l].name;try{g=kt[e][l].description(u)}catch(t){g=Gt(u)}}else d===Mt.tagTypes.RATIONAL||d===Mt.tagTypes.SRATIONAL?(v=kt[e][l],g=\"\"+u[0]/u[1]):(v=kt[e][l],g=Gt(u));return{id:l,name:v,value:u,description:g,tagType:d,__offset:a}}}function Ft(t,e,n,r,i){var o=[];arguments.length>5&&void 0!==arguments[5]&&arguments[5]&&(r*=Mt.typeSizes[n],n=Mt.tagTypes.BYTE);for(var u=0;u<r;u++)o.push(jt[n](t,e,i)),e+=Mt.typeSizes[n];return n===Mt.tagTypes.ASCII?o=Mt.getAsciiValue(o):1===o.length&&(o=o[0]),o}function Gt(t){return t instanceof Array?t.join(\", \"):t}function Ht(t,e){return t===Mt.tagTypes.ASCII?Array.isArray(e)&&1===e.length?e[0]:e:t===Mt.tagTypes.RATIONAL||t===Mt.tagTypes.SRATIONAL?function(t){return Array.isArray(t)&&2===t.length?\"number\"==typeof t[0]&&\"number\"==typeof t[1]:0}(e)?Vt(e):Array.isArray(e)?e.map(function(t){return Vt(t)}):e:e}function Vt(t){if(!Array.isArray(t)||2!==t.length)return t;var e=t[0],n=t[1];return Number.isFinite(e)&&Number.isFinite(n)?0===n?null:e/n:t}var Wt=\"Exif IFD Pointer\",Xt=\"GPS Info IFD Pointer\",Yt=\"Interoperability IFD Pointer\",$t={read:function(t,e,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,i=function(t,e){if(t.getUint16(e)===St)return St;if(19789===t.getUint16(e))return 19789;throw Error(\"Illegal byte order value. Faulty image.\")}(t,e),o=function(t,e,n,r,i){return Dt(t,\"0th\",e,function(t,e,n){return e+Mt.getLongAt(t,e+4,n)}(t,e,n),n,r,i)}(t,e,i,n,r);return{tags:o=Kt(o=Zt(o=qt(o,t,e,i,n,r),t,e,i,n,r),t,e,i,n,r),byteOrder:i}}};function qt(t,e,n,r,i,u){return void 0!==t[Wt]?o(t,Dt(e,Ct,n,n+t[Wt].value,r,i,u)):t}function Zt(t,e,n,r,i,u){return void 0!==t[Xt]?o(t,Dt(e,\"gps\",n,n+t[Xt].value,r,i,u)):t}function Kt(t,e,n,r,i,u){return void 0!==t[Yt]?o(t,Dt(e,Pt,n,n+t[Yt].value,r,i,u)):t}var Jt={iptc:{632:\"Caption/Abstract\"}},Qt=function(t,e){var n=function(){if(\"undefined\"!=typeof TextDecoder)return TextDecoder}();if(\"undefined\"!=typeof n&&void 0!==t)try{return new n(t).decode(e instanceof DataView?e.buffer:Uint8Array.from(e))}catch(t){}return function(t){try{return decodeURIComponent(escape(t))}catch(e){return t}}(e.map(function(t){return String.fromCharCode(t)}).join(\"\"))},te={read:function(t,e,n){try{if(Array.isArray(t))return ie(new DataView(Uint8Array.from(t).buffer),{size:t.length},0,n);var r=function(t,e){for(;e+12<=t.byteLength;){var n=ee(t,e);if(ne(n))return{naaBlock:n,dataOffset:e+n.headerSize};e+=n.headerSize+n.size+re(n)}throw Error(\"No IPTC NAA resource block.\")}(t,e);return ie(t,r.naaBlock,r.dataOffset,n)}catch(t){return{}}}};function ee(t,e){if(943868237!==t.getUint32(e,0))throw Error(\"Not an IPTC resource block.\");var n=t.getUint8(e+4+2),r=(n%2==0?n+1:n)+1;return{headerSize:6+r+4,type:t.getUint16(e+4),size:t.getUint32(e+4+2+r)}}function ne(t){return 1028===t.type}function re(t){return t.size%2!=0?1:0}function ie(t,e,n,r){for(var i={},o=void 0,u=n+e.size;n<u&&n<t.byteLength;){var a=oe(t,n,i,o,r),f=a.tag,c=a.tagSize;if(null===f)break;f&&(\"encoding\"in f&&(o=f.encoding),void 0===i[f.name]||void 0===f.repeatable?i[f.name]={id:f.id,value:f.value,description:f.description}:(i[f.name]instanceof Array||(i[f.name]=[{id:i[f.name].id,value:i[f.name].value,description:i[f.name].description}]),i[f.name].push({id:f.id,value:f.value,description:f.description}))),n+=5+c}return i}function oe(t,e,n,r,i){if(function(t,e){return 28!==t.getUint8(e)}(t,e))return{tag:null,tagSize:0};var o=t.getUint16(e+1),u=t.getUint16(e+3);if(!i&&!Jt.iptc[o])return{tag:void 0,tagSize:u};var a=function(t,e,n){for(var r=[],i=0;i<n;i++)r.push(t.getUint8(e+i));return r}(t,e+5,u),f={id:o,name:ue(Jt.iptc[o],o,a),value:a,description:ae(Jt.iptc[o],a,n,r)};return function(t){return Jt.iptc[t]&&Jt.iptc[t].repeatable}(o)&&(f.repeatable=1),function(t){return Jt.iptc[t]&&void 0!==Jt.iptc[t].encoding_name}(o)&&(f.encoding=Jt.iptc[o].encoding_name(a)),{tag:f,tagSize:u}}function ue(t,e,n){return t?function(t){return\"string\"==typeof t}(t)?t:function(t){return\"function\"==typeof t.name}(t)?t.name(n):t.name:\"undefined-\".concat(e)}function ae(t,e,n,r){if(function(t){return t&&void 0!==t.description}(t))try{return t.description(e,n)}catch(t){}return function(t,e){return t&&e instanceof Array}(t,e)?Qt(r,e):e}var fe=function(t){return Math.pow(Math.sqrt(2),t[0]/t[1]).toFixed(2)},ce=function(t){return\"f/\".concat(Number(t[0]/t[1]).toFixed(1))},se=function(t){return t[0]/t[1]+\" mm\"},le=function(t){var e=Math.pow(2,t[0]/t[1]);return e<=1?\"\".concat(Math.round(1/e)):\"1/\".concat(Math.round(e))},de=function(t){return\"\"+Math.round(t[0]/t[1])},pe=function(t){return\"\"+Math.round(t[0]/t[1])};function ve(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}var ge={\"tiff:Orientation\":function(t){return\"1\"===t?\"Horizontal (normal)\":\"2\"===t?\"Mirror horizontal\":\"3\"===t?\"Rotate 180\":\"4\"===t?\"Mirror vertical\":\"5\"===t?\"Mirror horizontal and rotate 270 CW\":\"6\"===t?\"Rotate 90 CW\":\"7\"===t?\"Mirror horizontal and rotate 90 CW\":\"8\"===t?\"Rotate 270 CW\":t},\"tiff:ResolutionUnit\":function(t){return function(t){return 2===t?\"inches\":3===t?\"centimeters\":\"Unknown\"}(parseInt(t,10))},\"tiff:XResolution\":function(t){return he(de,t)},\"tiff:YResolution\":function(t){return he(pe,t)},\"exif:ApertureValue\":function(t){return he(fe,t)},\"exif:GPSLatitude\":ye,\"exif:GPSLongitude\":ye,\"exif:FNumber\":function(t){return he(ce,t)},\"exif:FocalLength\":function(t){return he(se,t)},\"exif:FocalPlaneResolutionUnit\":function(t){return function(t){return 2===t?\"inches\":3===t?\"centimeters\":4===t?\"millimeters\":\"Unknown\"}(parseInt(t,10))},\"exif:ColorSpace\":function(t){return function(t){return 1===t?\"sRGB\":65535===t?\"Uncalibrated\":\"Unknown\"}(function(t){return\"0x\"===t.substring(0,2)?parseInt(t.substring(2),16):parseInt(t,10)}(t))},\"exif:ComponentsConfiguration\":function(t,e){return/^\\d, \\d, \\d, \\d$/.test(e)?function(t){return t.map(function(t){return 49===t?\"Y\":50===t?\"Cb\":51===t?\"Cr\":52===t?\"R\":53===t?\"G\":54===t?\"B\":void 0}).join(\"\")}(e.split(\", \").map(function(t){return t.charCodeAt(0)})):e},\"exif:Contrast\":function(t){return function(t){return 0===t?\"Normal\":1===t?\"Soft\":2===t?\"Hard\":\"Unknown\"}(parseInt(t,10))},\"exif:CustomRendered\":function(t){return function(t){return 0===t?\"Normal process\":1===t?\"Custom process\":\"Unknown\"}(parseInt(t,10))},\"exif:ExposureMode\":function(t){return function(t){return 0===t?\"Auto exposure\":1===t?\"Manual exposure\":2===t?\"Auto bracket\":\"Unknown\"}(parseInt(t,10))},\"exif:ExposureProgram\":function(t){return function(t){return 0===t?\"Undefined\":1===t?\"Manual\":2===t?\"Normal program\":3===t?\"Aperture priority\":4===t?\"Shutter priority\":5===t?\"Creative program\":6===t?\"Action program\":7===t?\"Portrait mode\":8===t?\"Landscape mode\":9===t?\"Bulb\":\"Unknown\"}(parseInt(t,10))},\"exif:ExposureTime\":function(t){return me(t)?function(t){if(t[0]/t[1]>.25){var e=t[0]/t[1];return Number.isInteger(e)?\"\"+e:e.toFixed(1)}return 0!==t[0]?\"1/\".concat(Math.round(t[1]/t[0])):\"0/\".concat(t[1])}(t.split(\"/\").map(function(t){return parseInt(t,10)})):t},\"exif:MeteringMode\":function(t){return function(t){return 1===t?\"Average\":2===t?\"CenterWeightedAverage\":3===t?\"Spot\":4===t?\"MultiSpot\":5===t?\"Pattern\":6===t?\"Partial\":255===t?\"Other\":\"Unknown\"}(parseInt(t,10))},\"exif:Saturation\":function(t){return function(t){return 0===t?\"Normal\":1===t?\"Low saturation\":2===t?\"High saturation\":\"Unknown\"}(parseInt(t,10))},\"exif:SceneCaptureType\":function(t){return function(t){return 0===t?\"Standard\":1===t?\"Landscape\":2===t?\"Portrait\":3===t?\"Night scene\":\"Unknown\"}(parseInt(t,10))},\"exif:Sharpness\":function(t){return function(t){return 0===t?\"Normal\":1===t?\"Soft\":2===t?\"Hard\":\"Unknown\"}(parseInt(t,10))},\"exif:ShutterSpeedValue\":function(t){return he(le,t)},\"exif:WhiteBalance\":function(t){return function(t){return 0===t?\"Auto white balance\":1===t?\"Manual white balance\":\"Unknown\"}(parseInt(t,10))}};function he(t,e){return me(e)?t(e.split(\"/\")):e}function me(t){return/^-?\\d+\\/-?\\d+$/.test(t)}function ye(t){var e,n=function(t){if(Array.isArray(t))return t}(e=t.split(\",\"))||function(t){var e=null==t?null:\"undefined\"!=typeof Symbol&&t[Symbol.iterator]||t[\"@@iterator\"];if(null!=e){var n,r,i,o,u=[],a=1,f=0;try{for(i=(e=e.call(t)).next,!2;!(a=(n=i.call(e)).done)&&(u.push(n.value),2!==u.length);a=1);}catch(t){f=1,r=t}finally{try{if(!a&&null!=e.return&&(o=e.return(),Object(o)!==o))return}finally{if(f)throw r}}return u}}(e)||function(t){if(t){if(\"string\"==typeof t)return ve(t,2);var e={}.toString.call(t).slice(8,-1);return\"Object\"===e&&t.constructor&&(e=t.constructor.name),\"Map\"===e||\"Set\"===e?Array.from(t):\"Arguments\"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?ve(t,2):void 0}}(e)||function(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}(),r=n[0],i=n[1];if(void 0!==r&&void 0!==i){var o=parseFloat(r),u=parseFloat(i),a=i.charAt(i.length-1);if(!Number.isNaN(o)&&!Number.isNaN(u))return\"\"+(o+u/60)+a}return t}var be={xmp:\"http://ns.adobe.com/xap/1.0/\",tiff:\"http://ns.adobe.com/tiff/1.0/\",exif:\"http://ns.adobe.com/exif/1.0/\",dc:\"http://purl.org/dc/elements/1.1/\",xmpMM:\"http://ns.adobe.com/xap/1.0/mm/\",stEvt:\"http://ns.adobe.com/xap/1.0/sType/ResourceEvent#\",stRef:\"http://ns.adobe.com/xap/1.0/sType/ResourceRef#\",photoshop:\"http://ns.adobe.com/photoshop/1.0/\"};function xe(t){return xe=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},xe(t)}function Ae(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}function Se(t){var e=\"function\"==typeof Map?new Map:void 0;return Se=function(t){if(null===t||!function(t){try{return-1!==Function.toString.call(t).indexOf(\"[native code]\")}catch(e){return\"function\"==typeof t}}(t))return t;if(\"function\"!=typeof t)throw new TypeError(\"Super expression must either be null or a function\");if(void 0!==e){if(e.has(t))return e.get(t);e.set(t,n)}function n(){return function(t,e,n){if(we())return Reflect.construct.apply(null,arguments);var r=[null];r.push.apply(r,e);var i=new(t.bind.apply(t,r));return n&&Ue(i,n.prototype),i}(t,arguments,Ie(this).constructor)}return n.prototype=Object.create(t.prototype,{constructor:{value:n,enumerable:0,writable:1,configurable:1}}),Ue(n,t)},Se(t)}function we(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(we=function(){return!!t})()}function Ue(t,e){return Ue=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},Ue(t,e)}function Ie(t){return Ie=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},Ie(t)}var Oe={read:function(t,e,n){var r={};if(\"string\"==typeof t)return Pe(r,t,n),r;var i,o=(i=function(t,e){if(0===e.length)return[];var n=[Ce(t,e.slice(0,1))];return e.length>1&&n.push(Ce(t,e.slice(1))),n}(t,e),function(t){if(Array.isArray(t))return t}(i)||function(t){var e=null==t?null:\"undefined\"!=typeof Symbol&&t[Symbol.iterator]||t[\"@@iterator\"];if(null!=e){var n,r,i,o,u=[],a=1,f=0;try{for(i=(e=e.call(t)).next,!2;!(a=(n=i.call(e)).done)&&(u.push(n.value),2!==u.length);a=1);}catch(t){f=1,r=t}finally{try{if(!a&&null!=e.return&&(o=e.return(),Object(o)!==o))return}finally{if(f)throw r}}return u}}(i)||function(t){if(t){if(\"string\"==typeof t)return Ae(t,2);var e={}.toString.call(t).slice(8,-1);return\"Object\"===e&&t.constructor&&(e=t.constructor.name),\"Map\"===e||\"Set\"===e?Array.from(t):\"Arguments\"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?Ae(t,2):void 0}}(i)||function(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),u=o[0],a=o[1],f=Pe(r,u,n);if(a){var c=Pe(r,a,n);f||c||(delete r._raw,Pe(r,Ce(t,e),n))}return r}},Te=function(t){function e(t){var n;return function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,e),(n=function(t,e,n){return e=Ie(e),function(t,e){if(e&&(\"object\"==xe(e)||\"function\"==typeof e))return e;if(void 0!==e)throw new TypeError(\"Derived constructors may only return object or undefined\");return function(t){if(void 0===t)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return t}(t)}(t,we()?Reflect.construct(e,n||[],Ie(t).constructor):e.apply(t,n))}(this,e,[t])).name=\"ParseError\",n}return function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Super expression must either be null or a function\");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:1,configurable:1}}),Object.defineProperty(t,\"prototype\",{writable:0}),e&&Ue(t,e)}(e,t),Object.defineProperty(n=e,\"prototype\",{writable:0}),n;var n}(Se(Error));function Ce(t,e){for(var n=e.reduce(function(t,e){return t+e.length},0),r=new Uint8Array(n),i=0,o=0;o<e.length;o++){var u=e[o],a=t.buffer.slice(u.dataOffset,u.dataOffset+u.length);r.set(new Uint8Array(a),i),i+=u.length}return new DataView(r.buffer)}function Pe(t,e,r){try{var i=function(t,e){var r=function(t){if(t)return t;if(\"undefined\"!=typeof DOMParser)return new DOMParser;try{var e=require(\"@xmldom/xmldom\");return new(0,e.DOMParser)({onError:e.onErrorStopParsing})}catch(t){return}}(e);if(!r)throw console.warn(\"Warning: DOMParser is not available. It is needed to be able to parse XMP tags.\"),Error();var i=\"string\"==typeof t?t:n(t,0,t.byteLength);return{doc:Ee(r,i.replace(/^.+(<\\?xpacket begin)/,\"$1\").replace(/(<\\?xpacket end=\".*\"\\?>).+$/,\"$1\")),raw:i}}(e,r),u=i.doc,a=i.raw;return t._raw=(t._raw||\"\")+a,o(t,Me(Le(ke(u),1))),1}catch(t){return 0}}function Ee(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;try{var r=t.parseFromString(e,\"application/xml\"),i=r.getElementsByTagName(\"parsererror\");if(i.length>0)throw new Te(i[0].textContent);return r}catch(r){if(\"ParseError\"===r.name&&function(t){for(var e=[\"prefix is non-null and namespace is null\",\"prefix not bound to a namespace\",\"prefix inte bundet till en namnrymd\",/Namespace prefix .+ is not defined/],n=0;n<e.length;n++)if(RegExp(e[n]).test(t.message))return 1;return 0}(r)&&!n)return Ee(t,function(t){var e=t.match(/<([A-Za-z_][A-Za-z0-9._-]*)([^>]*)>/);if(!e)return t;var n=e[1],r=function(t){for(var e,n=[],r=/xmlns:([\\w-]+)=[\"'][^\"']+[\"']/g;null!==(e=r.exec(t));)-1===n.indexOf(e[1])&&n.push(e[1]);return n}(t),i=function(t){for(var e,n=[],r=/\\b([A-Za-z_][A-Za-z0-9._-]*):[A-Za-z_][A-Za-z0-9._-]*\\b/g;null!==(e=r.exec(t));){var i=e[1];\"xmlns\"!==i&&\"xml\"!==i&&-1===n.indexOf(i)&&n.push(i)}return n}(t).filter(function(t){return-1===r.indexOf(t)});return 0===i.length?t:function(t,e,n){var r=RegExp(\"<\"+e+\"([^>]*)>\");return t.replace(r,\"<\"+e+\"$1\"+n+\">\")}(t,n,function(t){for(var e=[],n=0;n<t.length;n++){var r=t[n],i=be[r]||\"http://fallback.namespace/\"+r;e.push(\" xmlns:\"+r+'=\"'+i+'\"')}return e.join(\"\")}(i))}(e),1);throw r}}function ke(t){for(var e=0;e<t.childNodes.length;e++){if(\"x:xmpmeta\"===t.childNodes[e].tagName)return ke(t.childNodes[e]);if(\"rdf:RDF\"===t.childNodes[e].tagName)return t.childNodes[e]}throw Error()}function Le(t){var e,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,r=function(t){for(var e=[],n=0;n<t.childNodes.length;n++)e.push(t.childNodes[n]);return e}(t);return 1===(e=r).length&&\"#text\"===e[0].nodeName?n?{}:function(t){return t.nodeValue}(r[0]):function(t){var e={};return t.forEach(function(t){if(function(t){return t.nodeName&&\"#text\"!==t.nodeName}(t)){var n=function(t){return{attributes:Ne(t),value:Le(t)}}(t);void 0!==e[t.nodeName]?(Array.isArray(e[t.nodeName])||(e[t.nodeName]=[e[t.nodeName]]),e[t.nodeName].push(n)):e[t.nodeName]=n}}),e}(r)}function Ne(t){for(var e={},n=0;n<t.attributes.length;n++)e[t.attributes[n].nodeName]=decodeURIComponent(escape(t.attributes[n].value));return e}function Me(t){var e={};if(\"string\"==typeof t)return t;for(var n in t){var r=t[n];Array.isArray(r)||(r=[r]),r.forEach(function(t){o(e,Re(t.attributes)),\"object\"===xe(t.value)&&o(e,Fe(t.value))})}return e}function Re(t){var e={};for(var n in t)try{Be(n)&&(e[je(n)]={value:t[n],attributes:{},description:De(t[n],n)})}catch(t){}return e}function Be(t){return\"rdf:parseType\"!==t&&!_e(t)}function _e(t){return\"xmlns\"===t.split(\":\")[0]}function je(t){return/^MicrosoftPhoto(_\\d+_)?:Rating$/i.test(t)?\"RatingPercent\":t.split(\":\")[1]}function De(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(Array.isArray(t)){var n=function(t){return t.map(function(t){return void 0!==t.value?De(t.value):De(t)}).join(\", \")}(t);return e&&\"function\"==typeof ge[e]?ge[e](t,n):n}if(\"object\"===xe(t))return function(t){var e=[];for(var n in t)e.push(\"\".concat(ze(n),\": \").concat(De(t[n].value)));return e.join(\"; \")}(t);try{return e&&\"function\"==typeof ge[e]?ge[e](t):decodeURIComponent(escape(t))}catch(e){return t}}function ze(t){return\"CiAdrCity\"===t?\"CreatorCity\":\"CiAdrCtry\"===t?\"CreatorCountry\":\"CiAdrExtadr\"===t?\"CreatorAddress\":\"CiAdrPcode\"===t?\"CreatorPostalCode\":\"CiAdrRegion\"===t?\"CreatorRegion\":\"CiEmailWork\"===t?\"CreatorWorkEmail\":\"CiTelWork\"===t?\"CreatorWorkPhone\":\"CiUrlWork\"===t?\"CreatorWorkUrl\":t}function Fe(t){var e={};for(var n in t)try{_e(n)||(e[je(n)]=Ge(t[n],n))}catch(t){}return e}function Ge(t,e){return function(t){return Array.isArray(t)}(t)?function(t,e){return Ke(t[t.length-1],e)}(t,e):function(t){return\"Resource\"===t.attributes[\"rdf:parseType\"]&&\"string\"==typeof t.value&&\"\"===t.value.trim()}(t)?{value:\"\",attributes:{},description:\"\"}:He(t)?Ve(t,e):Xe(t)?Ye(t,e):$e(t)?qe(t,e):function(t){return void 0!==Ze(t.value)}(t)?function(t,e){var n=Ze(t.value).value[\"rdf:li\"],r=We(t),i=[];return void 0===n?n=[]:Array.isArray(n)||(n=[n]),n.forEach(function(t){i.push(function(t){return He(t)?Ve(t):Xe(t)?Ye(t).value:$e(t)?qe(t).value:Ke(t)}(t))}),{value:i,attributes:r,description:De(i,e)}}(t,e):Ke(t,e)}function He(t){return\"Resource\"===t.attributes[\"rdf:parseType\"]&&void 0!==t.value[\"rdf:value\"]||void 0!==t.value[\"rdf:Description\"]&&void 0!==t.value[\"rdf:Description\"].value[\"rdf:value\"]}function Ve(t,e){var n=We(t);void 0!==t.value[\"rdf:Description\"]&&(t=t.value[\"rdf:Description\"]),o(n,We(t),function(t){var e={};for(var n in t.value)\"rdf:value\"===n||_e(n)||(e[je(n)]=t.value[n].value);return e}(t));var r=function(t){return Je(t.value[\"rdf:value\"])||t.value[\"rdf:value\"].value}(t);return{value:r,attributes:n,description:De(r,e)}}function We(t){var e={};for(var n in t.attributes)\"rdf:parseType\"===n||\"rdf:resource\"===n||_e(n)||(e[je(n)]=t.attributes[n]);return e}function Xe(t){return\"Resource\"===t.attributes[\"rdf:parseType\"]||void 0!==t.value[\"rdf:Description\"]&&void 0===t.value[\"rdf:Description\"].value[\"rdf:value\"]}function Ye(t,e){var n={value:{},attributes:{}};return void 0!==t.value[\"rdf:Description\"]&&(o(n.value,Re(t.value[\"rdf:Description\"].attributes)),o(n.attributes,We(t)),t=t.value[\"rdf:Description\"]),o(n.value,Fe(t.value)),n.description=De(n.value,e),n}function $e(t){return 0===Object.keys(t.value).length&&void 0===t.attributes[\"xml:lang\"]&&void 0===t.attributes[\"rdf:resource\"]}function qe(t,e){var n=Re(t.attributes);return{value:n,attributes:{},description:De(n,e)}}function Ze(t){return t[\"rdf:Bag\"]||t[\"rdf:Seq\"]||t[\"rdf:Alt\"]}function Ke(t,e){var n=Je(t)||Me(t.value);return{value:n,attributes:We(t),description:De(n,e)}}function Je(t){return t.attributes&&t.attributes[\"rdf:resource\"]}function Qe(t){return Qe=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},Qe(t)}var tn={read:function(t,e,n,r){for(var i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,o={},u=[],a=0;a<e.length;a++){var f=e[a],c=sn(t,f.offset,f.length,f.type,n);if(c instanceof Promise)u.push(c.then(function(t){var e,n,o,u=t.name,a=t.value,f=t.description;try{if(hn(u,a))return{__exif:$t.read(yn(a),cn,r,i).tags};if(mn(u,a))return{__iptc:te.read(yn(a),0,r)};if(u&&!hn(u,a)&&!mn(u,a))return e={},o={value:a,description:f},(n=function(t){var e=function(t){if(\"object\"!=Qe(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,\"string\");if(\"object\"!=Qe(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return t+\"\"}(t);return\"symbol\"==Qe(e)?e:e+\"\"}(n=u))in e?Object.defineProperty(e,n,{value:o,enumerable:1,configurable:1,writable:1}):e[n]=o,e}catch(t){}return{}}));else{var s=c.name,l=c.value,d=c.description;s&&(o[s]={value:l,description:d})}}return{readTags:o,readTagsPromise:u.length>0?Promise.all(u):void 0}}},en=\"STATE_KEYWORD\",nn=\"STATE_COMPRESSION\",rn=\"STATE_LANG\",on=\"STATE_TRANSLATED_KEYWORD\",un=\"STATE_TEXT\",an=1,fn=1,cn=6;function sn(t,e,n,r,i){for(var o,a=[],f=[],c=[],s=en,l=u,d=0;d<n&&e+d<t.byteLength;d++)if(s!==nn){if(s===un){o=new DataView(t.buffer.slice(e+d,e+n));break}var p=t.getUint8(e+d);0===p?s=dn(r,s):s===en?a.push(p):s===rn?f.push(p):s===on&&c.push(p)}else l=ln({type:r,dataView:t,offset:e+d}),r===J&&(d+=an),s=dn(r,s);if(l!==u&&!i)return{};var v=function(t,e,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\"string\";if(0===e&&\"function\"==typeof DecompressionStream){var i=new DecompressionStream(\"deflate\"),o=new Blob([t]).stream().pipeThrough(i);return\"dataview\"===r?new Response(o).arrayBuffer().then(function(t){return new DataView(t)}):new Response(o).arrayBuffer().then(function(t){return new TextDecoder(n).decode(t)})}return void 0!==e?Promise.reject(\"Unknown compression method \".concat(e,\".\")):t}(o,l,function(t){return t===K||t===Q?\"latin1\":\"utf-8\"}(r));return v instanceof Promise?v.then(function(t){return pn(t,r,f,a)}).catch(function(){return pn(\"<text using unknown compression>\".split(\"\"),r,f,a)}):pn(v,r,f,a)}function ln(t){var e=t.type,n=t.dataView,r=t.offset;if(e===J){if(n.getUint8(r)===fn)return n.getUint8(r+1)}else if(e===Q)return n.getUint8(r);return u}function dn(t,e){return e===en&&[J,Q].includes(t)?nn:e===nn?t===J?rn:un:e===rn?on:un}function pn(t,e,r,i){var o=function(t){return t instanceof DataView?n(t,0,t.byteLength):t}(t);return{name:vn(e,r,i),value:o,description:e===J?gn(t):o}}function vn(t,e,n){var r=i(n);if(t===K||0===e.length)return r;var o=i(e);return\"\".concat(r,\" (\").concat(o,\")\")}function gn(t){return Qt(\"UTF-8\",t)}function hn(t,e){return\"raw profile type exif\"===t.toLowerCase()&&\"exif\"===e.substring(1,5)}function mn(t,e){return\"raw profile type iptc\"===t.toLowerCase()&&\"iptc\"===e.substring(1,5)}function yn(t){return function(t){for(var e=new DataView(new ArrayBuffer(t.length/2)),n=0;n<t.length;n+=2)e.setUint8(n/2,parseInt(t.substring(n,n+2),16));return e}(t.match(/\\n(exif|iptc)\\n\\s*\\d+\\n([\\s\\S]*)$/)[2].replace(/\\n/g,\"\"))}var bn={read:function(t,e){for(var r={},i=0;i<e.length;i++){var o=Mt.getLongAt(t,e[i]+Y),u=n(t,e[i]+$,X);u===tt?(r[\"Pixels Per Unit X\"]=xn(t,e[i],o),r[\"Pixels Per Unit Y\"]=An(t,e[i],o),r[\"Pixel Units\"]=Sn(t,e[i],o)):u===et&&(r[\"Modify Date\"]=wn(t,e[i],o))}return r}};function xn(t,e,n){if(Un(t,e,n,0,4)){var r=Mt.getLongAt(t,e+q+0);return{value:r,description:\"\"+r}}}function An(t,e,n){if(Un(t,e,n,4,4)){var r=Mt.getLongAt(t,e+q+4);return{value:r,description:\"\"+r}}}function Sn(t,e,n){if(Un(t,e,n,8,1)){var r=Mt.getByteAt(t,e+q+8);return{value:r,description:1===r?\"meters\":\"Unknown\"}}}function wn(t,e,n){if(Un(t,e,n,0,7)){var r=Mt.getShortAt(t,e+q),i=Mt.getByteAt(t,e+q+2),o=Mt.getByteAt(t,e+q+3),u=Mt.getByteAt(t,e+q+4),a=Mt.getByteAt(t,e+q+5),f=Mt.getByteAt(t,e+q+6);return{value:[r,i,o,u,a,f],description:\"\".concat(In(r,4),\"-\").concat(In(i,2),\"-\").concat(In(o,2),\" \").concat(In(u,2),\":\").concat(In(a,2),\":\").concat(In(f,2))}}}function Un(t,e,n,r,i){return r+i<=n&&e+q+r+i<=t.byteLength}function In(t,e){return\"\".concat(\"0\".repeat(e-(\"\"+t).length)).concat(t)}var On={read:function(t,e){var n={},r=Mt.getByteAt(t,e);return n.Alpha=function(t){var e=16&t;return{value:e?1:0,description:e?\"Yes\":\"No\"}}(r),n.Animation=function(t){var e=2&t;return{value:e?1:0,description:e?\"Yes\":\"No\"}}(r),n.ImageWidth=Pn(t,e+Tn),n.ImageHeight=Pn(t,e+Cn),n}},Tn=4,Cn=7;function Pn(t,e){var n=Mt.getByteAt(t,e)+256*Mt.getByteAt(t,e+1)+65536*Mt.getByteAt(t,e+2)+1;return{value:n,description:n+\"px\"}}var En={get:function(t,e){var n,r={},i=0,o=kn(t,\"exif\",\"FocalLength\",e),u=kn(t,\"exif\",\"FocalPlaneXResolution\",e),a=kn(t,\"exif\",\"FocalPlaneYResolution\",e),f=kn(t,\"exif\",\"FocalPlaneResolutionUnit\",e),c=kn(t,\"file\",\"Image Width\",e),s=kn(t,\"file\",\"Image Height\",e),l=kn(t,\"exif\",\"FocalLengthIn35mmFilm\",e)||function(t,e,n,r,i,o){if(t&&e&&n&&r&&i&&o)try{var u;switch(n){case 2:u=25.4;break;case 3:u=10;break;case 4:u=1;break;default:return}var a=t[0]/t[1]*u,f=i/(e[0]/e[1]*u),c=Math.sqrt(Math.pow(r/a,2)+Math.pow(f,2));return o[0]/o[1]*(43.27/c)}catch(t){}}(u,a,f,c,s,o);l&&(r.FocalLength35efl={value:l,description:(n=l,0===n?\"Unknown\":n+\" mm\")},i=1);var d=function(t,e){if(t&&e)try{var n=e/(t[0]/t[1]);return{value:n,description:n.toFixed(1)}}catch(t){}}(o,l);d&&(r.ScaleFactorTo35mmEquivalent=d,i=1);var p=function(t){if(t)try{var e=2*Math.atan(36/(2*t))*(180/Math.PI);return{value:e,description:e.toFixed(1)+\" deg\"}}catch(t){}}(l);if(p&&(r.FieldOfView=p,i=1),i)return r}};function kn(t,e,n,r){return r&&t[e]&&t[e][n]?t[e][n].value:!r&&t[n]?t[n].value:void 0}function Ln(t){this.name=\"MetadataMissingError\",this.message=t||\"No Exif data\",this.stack=Error().stack}Ln.prototype=Error();var Nn={MetadataMissingError:Ln},Mn={load:Bn,loadView:jn,errors:Nn},Rn=Nn;function Bn(t){var e,n,r,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return function(t){return\"string\"==typeof t}(t)?(i.async=1,function(t,e){return/^\\w+:\\/\\//.test(t)?\"undefined\"!=typeof fetch?function(t){var e=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).length,n={method:\"GET\"};return Number.isInteger(e)&&e>=0&&(n.headers={range:\"bytes=0-\".concat(e-1)}),fetch(t,n).then(function(t){return t.arrayBuffer()})}(t,e):function(t){var e=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).length;return new Promise(function(n,r){var i={};Number.isInteger(e)&&e>=0&&(i.headers={range:\"bytes=0-\".concat(e-1)});var o=function(t){return/^https:\\/\\//.test(t)?require(\"https\").get:require(\"http\").get}(t);o(t,i,function(t){if(t.statusCode>=200&&t.statusCode<=299){var e=[];t.on(\"data\",function(t){return e.push(Buffer.from(t))}),t.on(\"error\",function(t){return r(t)}),t.on(\"end\",function(){return n(Buffer.concat(e))})}else r(\"Could not fetch file: \".concat(t.statusCode,\" \").concat(t.statusMessage)),t.resume()}).on(\"error\",function(t){return r(t)})})}(t,e):function(t){return/^data:[^;,]*(;base64)?,/.test(t)}(t)?Promise.resolve(function(t){var e=t.substring(t.indexOf(\",\")+1);if(-1!==t.indexOf(\";base64\")){if(\"undefined\"!=typeof atob)return Uint8Array.from(atob(e),function(t){return t.charCodeAt(0)}).buffer;if(\"undefined\"==typeof Buffer)return;return\"undefined\"!=typeof Buffer.from?Buffer.from(e,\"base64\"):new Buffer(e,\"base64\")}var n=decodeURIComponent(e);return\"undefined\"!=typeof Buffer?\"undefined\"!=typeof Buffer.from?Buffer.from(n):new Buffer(n):Uint8Array.from(n,function(t){return t.charCodeAt(0)}).buffer}(t)):function(t){var e=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).length;return new Promise(function(n,r){var i=function(){try{return require(\"fs\")}catch(t){return}}();i.open(t,function(o,u){o?r(o):i.stat(t,function(o,a){if(o)r(o);else{var f=Math.min(a.size,void 0!==e?e:a.size),c=Buffer.alloc(f),s={buffer:c,length:f};i.read(u,s,function(e){e?r(e):i.close(u,function(e){e&&console.warn(\"Could not close file \".concat(t,\":\"),e),n(c)})})}})})})}(t,e)}(t,i).then(function(t){return _n(t,i)})):function(t){return\"undefined\"!=typeof File&&t instanceof File}(t)?(i.async=1,(e=t,n=i,r=n.length,new Promise(function(t,n){var i=new FileReader;i.onload=function(e){return t(e.target.result)},i.onerror=function(){return n(i.error)},Number.isInteger(r)&&r>=0&&void 0!==e.slice?i.readAsArrayBuffer(e.slice(0,r)):i.readAsArrayBuffer(e)})).then(function(t){return _n(t,i)})):_n(t,i)}function _n(t,e){return function(t){try{return Buffer.isBuffer(t)}catch(t){return 0}}(t)&&(t=new Uint8Array(t).buffer),jn(function(t){try{return new DataView(t)}catch(e){return new c(t)}}(t),e)}function jn(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{expanded:0,async:0,computed:0,includeUnknown:0,domParser:void 0},n=e.expanded,r=void 0===n?0:n,i=e.async,u=void 0===i?0:i,a=e.computed,f=void 0===a?0:a,c=e.includeUnknown,l=void 0===c?0:c,d=e.domParser,p=void 0===d?void 0:d,v=0,g={},h=[],m=xt.parseAppMarkers(t,u),y=m.fileType,b=(m.fileDataOffset,m.jfifDataOffset,m.tiffHeaderOffset),x=m.iptcDataOffset,A=m.xmpChunks,S=(m.iccChunks,m.mpfDataOffset,m.pngHeaderOffset,m.pngTextChunks),w=m.pngChunkOffsets,U=m.vp8xChunkOffset;if(m.gifHeaderOffset,function(t){return void 0!==t}(b)){v=1;var I=$t.read(t,b,l,f),O=I.tags;I.byteOrder,O.Thumbnail&&(g.Thumbnail=O.Thumbnail,delete O.Thumbnail),r?(g.exif=O,function(t){if(t.exif){if(t.exif.GPSLatitude&&t.exif.GPSLatitudeRef)try{t.gps=t.gps||{},t.gps.Latitude=s(t.exif.GPSLatitude.value),\"S\"===t.exif.GPSLatitudeRef.value.join(\"\")&&(t.gps.Latitude=-t.gps.Latitude)}catch(t){}if(t.exif.GPSLongitude&&t.exif.GPSLongitudeRef)try{t.gps=t.gps||{},t.gps.Longitude=s(t.exif.GPSLongitude.value),\"W\"===t.exif.GPSLongitudeRef.value.join(\"\")&&(t.gps.Longitude=-t.gps.Longitude)}catch(t){}if(t.exif.GPSAltitude&&t.exif.GPSAltitudeRef)try{t.gps=t.gps||{},t.gps.Altitude=t.exif.GPSAltitude.value[0]/t.exif.GPSAltitude.value[1],1===t.exif.GPSAltitudeRef.value&&(t.gps.Altitude=-t.gps.Altitude)}catch(t){}}}(g)):g=o({},g,O),O.MakerNote&&delete O.MakerNote.__offset}if(function(t){return void 0!==t}(x)){v=1;var T=te.read(t,x,l);r?g.iptc=T:g=o({},g,T)}if(function(t){return Array.isArray(t)&&t.length>0}(A)){v=1;var C=Oe.read(t,A,p);r?g.xmp=C:(delete C._raw,g=o({},g,C))}if(function(t){return void 0!==t}(S)){v=1;var P=tn.read(t,S,u,l,f),E=P.readTags,k=P.readTagsPromise;R(E),k&&h.push(k.then(function(t){return t.forEach(R)}))}if(function(t){return void 0!==t}(w)){v=1;var L=bn.read(t,w);r?g.png=g.png?o({},g.png,L):L:g=o({},g,L)}if(function(t){return void 0!==t}(U)){v=1;var N=On.read(t,U);r?g.riff=g.riff?o({},g.riff,N):N:g=o({},g,N)}var M=En.get(g,r);if(M&&(r?g.composite=M:g=o({},g,M)),delete g.Thumbnail,y&&(r?(g.file||(g.file={}),g.file.FileType=y):g.FileType=y,v=1),!v)throw new Nn.MetadataMissingError;return u?Promise.all(h).then(function(){return g}):g;function R(t){if(r){for(var e=0,n=[\"exif\",\"iptc\"];e<n.length;e++){var i=n[e],u=\"__\".concat(i);t[u]&&(g[i]=g[i]?o({},g.exif,t[u]):t[u],delete t[u])}g.png=g.png?o({},g.png,t):t,g.pngText=g.pngText?o({},g.png,t):t}else delete(g=o({},g,t.__exif?t.__exif:{},t.__iptc?t.__iptc:{},t)).__exif,delete g.__iptc}}return e}()});\n//# sourceMappingURL=exif-reader.js.map","// Custom-built version of exifreader, config is in package.json\nimport ExifReader from 'exifreader/dist/exif-reader.js';\n\n// Tags from IPTC, XMP, EXIF\nconst TAG_NAMES = ['Caption/Abstract', 'Description', 'ImageDescription'];\n\nexport default async function extractImageDescription(file) {\n if (!file || !file.type?.startsWith?.('image/')) return null;\n\n try {\n const tags = await ExifReader.load(file);\n for (const name of TAG_NAMES) {\n if (tags[name]?.description) {\n return tags[name].description.trim();\n }\n }\n return null;\n } catch (error) {\n console.debug('Failed to extract image description:', error);\n return null;\n }\n}\n","import { Trans, useLingui } from '@lingui/react/macro';\nimport { MenuItem } from '@szhsin/react-menu';\nimport { useEffect, useMemo, useRef, useState } from 'preact/hooks';\nimport { useDebouncedCallback } from 'use-debounce';\n\nimport extractImageDescription from '../utils/extract-image-desc';\nimport localeCode2Text from '../utils/localeCode2Text';\nimport prettyBytes from '../utils/pretty-bytes';\nimport showToast from '../utils/show-toast';\nimport states from '../utils/states';\nimport { getCurrentInstanceConfiguration } from '../utils/store-utils';\nimport supports from '../utils/supports';\n\nimport Icon from './icon';\nimport Menu2 from './menu2';\nimport Modal from './modal';\n\nconst { PHANPY_IMG_ALT_API_URL: IMG_ALT_API_URL } = import.meta.env;\n\nfunction scaleDimension(matrix, matrixLimit, width, height) {\n // matrix = number of pixels\n // matrixLimit = max number of pixels\n // Calculate new width and height, downsize to within the limit, preserve aspect ratio, no decimals\n const scalingFactor = Math.sqrt(matrixLimit / matrix);\n const newWidth = Math.floor(width * scalingFactor);\n const newHeight = Math.floor(height * scalingFactor);\n return { newWidth, newHeight };\n}\n\nfunction MediaAttachment({\n attachment,\n disabled,\n lang,\n supportedMimeTypes,\n descriptionLimit = 1500,\n onDescriptionChange = () => {},\n onRemove = () => {},\n}) {\n const { i18n, t } = useLingui();\n const [uiState, setUIState] = useState('default');\n const supportsEdit =\n supports('@mastodon') || supports('@gotosocial/edit-media-attributes');\n const { type, id, file } = attachment;\n const url = useMemo(\n () => (file ? URL.createObjectURL(file) : attachment.url),\n [file, attachment.url],\n );\n console.log({ attachment });\n\n const checkMaxError = !!file?.size;\n const configuration = checkMaxError ? getCurrentInstanceConfiguration() : {};\n const {\n mediaAttachments: {\n imageSizeLimit,\n imageMatrixLimit,\n videoSizeLimit,\n videoMatrixLimit,\n videoFrameRateLimit,\n } = {},\n } = configuration || {};\n\n const [maxError, setMaxError] = useState(() => {\n if (!checkMaxError) return null;\n if (\n type.startsWith('image') &&\n imageSizeLimit &&\n file.size > imageSizeLimit\n ) {\n return {\n type: 'imageSizeLimit',\n details: {\n imageSize: file.size,\n imageSizeLimit,\n },\n };\n } else if (\n type.startsWith('video') &&\n videoSizeLimit &&\n file.size > videoSizeLimit\n ) {\n return {\n type: 'videoSizeLimit',\n details: {\n videoSize: file.size,\n videoSizeLimit,\n },\n };\n }\n return null;\n });\n\n const [imageMatrix, setImageMatrix] = useState({});\n useEffect(() => {\n if (!checkMaxError || !imageMatrixLimit) return;\n if (imageMatrix?.matrix > imageMatrixLimit) {\n setMaxError({\n type: 'imageMatrixLimit',\n details: {\n imageMatrix: imageMatrix?.matrix,\n imageMatrixLimit,\n width: imageMatrix?.width,\n height: imageMatrix?.height,\n },\n });\n }\n }, [imageMatrix, imageMatrixLimit, checkMaxError]);\n\n const [videoMatrix, setVideoMatrix] = useState({});\n useEffect(() => {\n if (!checkMaxError || !videoMatrixLimit) return;\n if (videoMatrix?.matrix > videoMatrixLimit) {\n setMaxError({\n type: 'videoMatrixLimit',\n details: {\n videoMatrix: videoMatrix?.matrix,\n videoMatrixLimit,\n width: videoMatrix?.width,\n height: videoMatrix?.height,\n },\n });\n }\n }, [videoMatrix, videoMatrixLimit, checkMaxError]);\n\n const [description, setDescription] = useState(attachment.description);\n\n // Extract description from images that's not uploaded yet\n useEffect(() => {\n if (!file || !type.startsWith('image/') || id || attachment.description) {\n return;\n }\n\n let cancelled = false;\n\n (async () => {\n setUIState('loading');\n try {\n const extractedDescription = await extractImageDescription(file);\n if (!cancelled && extractedDescription) {\n setDescription(extractedDescription);\n }\n } catch (error) {\n console.debug('Failed to extract image metadata:', error);\n } finally {\n if (!cancelled) {\n setUIState('default');\n }\n }\n })();\n\n return () => {\n cancelled = true;\n };\n }, []);\n\n let [suffixType, subtype] = type.split('/');\n // If type is not supported, try to find a supported type with the same subtype\n // E.g. application/ogg -> audio/ogg\n const suffixTypes = new Set();\n const subTypeMap = {};\n if (supportedMimeTypes?.length) {\n supportedMimeTypes.forEach((mimeType) => {\n const [t, st] = mimeType.split('/');\n subTypeMap[st] = t;\n suffixTypes.add(t);\n });\n }\n if (subtype && !suffixTypes.has(suffixType) && subTypeMap[subtype]) {\n suffixType = subTypeMap[subtype];\n }\n\n const debouncedOnDescriptionChange = useDebouncedCallback(\n onDescriptionChange,\n 250,\n );\n useEffect(() => {\n debouncedOnDescriptionChange(description);\n }, [description, debouncedOnDescriptionChange]);\n\n const [showModal, setShowModal] = useState(false);\n const textareaRef = useRef(null);\n useEffect(() => {\n let timer;\n if (showModal && textareaRef.current) {\n timer = setTimeout(() => {\n textareaRef.current.focus();\n }, 100);\n }\n return () => {\n clearTimeout(timer);\n };\n }, [showModal]);\n\n const descTextarea = (\n <>\n {!!id && !supportsEdit ? (\n <div class=\"media-desc\">\n <span class=\"tag\">\n <Trans>Uploaded</Trans>\n </span>\n <p title={description}>\n {attachment.description || <i>No description</i>}\n </p>\n </div>\n ) : (\n <textarea\n ref={textareaRef}\n value={description || ''}\n lang={lang}\n placeholder={\n {\n image: t`Image description`,\n video: t`Video description`,\n gifv: t`Video description`,\n audio: t`Audio description`,\n }[suffixType]\n }\n autoCapitalize=\"sentences\"\n autoComplete=\"on\"\n autoCorrect=\"on\"\n spellCheck=\"true\"\n dir=\"auto\"\n disabled={disabled || uiState === 'loading'}\n class={uiState === 'loading' ? 'loading' : ''}\n maxlength={descriptionLimit} // Not unicode-aware :(\n onInput={(e) => {\n const { value } = e.target;\n setDescription(value);\n // debouncedOnDescriptionChange(value);\n }}\n ></textarea>\n )}\n </>\n );\n\n const toastRef = useRef(null);\n useEffect(() => {\n return () => {\n toastRef.current?.hideToast?.();\n };\n }, []);\n\n const maxErrorToast = useRef(null);\n\n const maxErrorText = (err) => {\n const { type, details } = err;\n switch (type) {\n case 'imageSizeLimit': {\n const { imageSize, imageSizeLimit } = details;\n return t`File size too large. Uploading might encounter issues. Try reduce the file size from ${prettyBytes(\n imageSize,\n )} to ${prettyBytes(imageSizeLimit)} or lower.`;\n }\n case 'imageMatrixLimit': {\n const { imageMatrix, imageMatrixLimit, width, height } = details;\n const { newWidth, newHeight } = scaleDimension(\n imageMatrix,\n imageMatrixLimit,\n width,\n height,\n );\n return t`Dimension too large. Uploading might encounter issues. Try reduce dimension from ${i18n.number(\n width,\n )}×${i18n.number(height)}px to ${i18n.number(newWidth)}×${i18n.number(\n newHeight,\n )}px.`;\n }\n case 'videoSizeLimit': {\n const { videoSize, videoSizeLimit } = details;\n return t`File size too large. Uploading might encounter issues. Try reduce the file size from ${prettyBytes(\n videoSize,\n )} to ${prettyBytes(videoSizeLimit)} or lower.`;\n }\n case 'videoMatrixLimit': {\n const { videoMatrix, videoMatrixLimit, width, height } = details;\n const { newWidth, newHeight } = scaleDimension(\n videoMatrix,\n videoMatrixLimit,\n width,\n height,\n );\n return t`Dimension too large. Uploading might encounter issues. Try reduce dimension from ${i18n.number(\n width,\n )}×${i18n.number(height)}px to ${i18n.number(newWidth)}×${i18n.number(\n newHeight,\n )}px.`;\n }\n case 'videoFrameRateLimit': {\n // Not possible to detect this on client-side for now\n return t`Frame rate too high. Uploading might encounter issues.`;\n }\n }\n };\n\n return (\n <>\n <div class=\"media-attachment\">\n <div\n class=\"media-preview\"\n tabIndex=\"0\"\n onClick={() => {\n setShowModal(true);\n }}\n >\n {suffixType === 'image' ? (\n <img\n src={url}\n alt=\"\"\n onLoad={(e) => {\n if (!checkMaxError) return;\n const { naturalWidth, naturalHeight } = e.target;\n setImageMatrix({\n matrix: naturalWidth * naturalHeight,\n width: naturalWidth,\n height: naturalHeight,\n });\n }}\n />\n ) : suffixType === 'video' || suffixType === 'gifv' ? (\n <video\n src={url + '#t=0.1'} // Make Safari show 1st-frame preview\n playsinline\n muted\n disablePictureInPicture\n preload=\"metadata\"\n onLoadedMetadata={(e) => {\n if (!checkMaxError) return;\n const { videoWidth, videoHeight } = e.target;\n if (videoWidth && videoHeight) {\n setVideoMatrix({\n matrix: videoWidth * videoHeight,\n width: videoWidth,\n height: videoHeight,\n });\n }\n }}\n />\n ) : suffixType === 'audio' ? (\n <audio src={url} controls />\n ) : null}\n </div>\n {descTextarea}\n <div class=\"media-aside\">\n <button\n type=\"button\"\n class=\"plain close-button\"\n disabled={disabled}\n onClick={onRemove}\n >\n <Icon icon=\"x\" alt={t`Remove`} />\n </button>\n {!!maxError && (\n <button\n type=\"button\"\n class=\"media-error\"\n title={maxErrorText(maxError)}\n onClick={() => {\n if (maxErrorToast.current) {\n maxErrorToast.current.hideToast();\n }\n maxErrorToast.current = showToast({\n text: maxErrorText(maxError),\n duration: 10_000,\n });\n }}\n >\n <Icon icon=\"alert\" alt={t`Error`} />\n </button>\n )}\n </div>\n </div>\n {showModal && (\n <Modal\n onClose={() => {\n setShowModal(false);\n }}\n >\n <div id=\"media-sheet\" class=\"sheet sheet-max\">\n <button\n type=\"button\"\n class=\"sheet-close\"\n onClick={() => {\n setShowModal(false);\n }}\n >\n <Icon icon=\"x\" alt={t`Close`} />\n </button>\n <header>\n <h2>\n {\n {\n image: t`Edit image description`,\n video: t`Edit video description`,\n gifv: t`Edit video description`,\n audio: t`Edit audio description`,\n }[suffixType]\n }\n </h2>\n </header>\n <main tabIndex=\"-1\">\n <div class=\"media-preview\">\n {suffixType === 'image' ? (\n <img src={url} alt=\"\" />\n ) : suffixType === 'video' || suffixType === 'gifv' ? (\n <video src={url} playsinline controls />\n ) : suffixType === 'audio' ? (\n <audio src={url} controls />\n ) : null}\n </div>\n <div class=\"media-form\">\n {descTextarea}\n <footer>\n {suffixType === 'image' &&\n /^(png|jpe?g|gif|webp)$/i.test(subtype) &&\n !!states.settings.mediaAltGenerator &&\n !!IMG_ALT_API_URL && (\n <Menu2\n portal={{\n target: document.body,\n }}\n containerProps={{\n style: {\n zIndex: 1001,\n },\n }}\n align=\"center\"\n position=\"anchor\"\n overflow=\"auto\"\n menuButton={\n <button type=\"button\" class=\"plain\">\n <Icon icon=\"more\" size=\"l\" alt={t`More`} />\n </button>\n }\n >\n <MenuItem\n disabled={uiState === 'loading'}\n onClick={() => {\n setUIState('loading');\n toastRef.current = showToast({\n text: t`Generating description. Please wait…`,\n duration: -1,\n });\n // POST with multipart\n (async function () {\n try {\n const body = new FormData();\n body.append('image', file);\n const response = await fetch(IMG_ALT_API_URL, {\n method: 'POST',\n body,\n }).then((r) => r.json());\n if (response.error) {\n throw new Error(response.error);\n }\n setDescription(response.description);\n } catch (e) {\n console.error(e);\n showToast(\n e.message\n ? t`Failed to generate description: ${e.message}`\n : t`Failed to generate description`,\n );\n } finally {\n setUIState('default');\n toastRef.current?.hideToast?.();\n }\n })();\n }}\n >\n <Icon icon=\"sparkles2\" />\n {lang && lang !== 'en' ? (\n <small>\n <Trans>Generate description…</Trans>\n <br />\n (English)\n </small>\n ) : (\n <span>\n <Trans>Generate description…</Trans>\n </span>\n )}\n </MenuItem>\n {!!lang && lang !== 'en' && (\n <MenuItem\n disabled={uiState === 'loading'}\n onClick={() => {\n setUIState('loading');\n toastRef.current = showToast({\n text: t`Generating description. Please wait…`,\n duration: -1,\n });\n // POST with multipart\n (async function () {\n try {\n const body = new FormData();\n body.append('image', file);\n const params = `?lang=${lang}`;\n const response = await fetch(\n IMG_ALT_API_URL + params,\n {\n method: 'POST',\n body,\n },\n ).then((r) => r.json());\n if (response.error) {\n throw new Error(response.error);\n }\n setDescription(response.description);\n } catch (e) {\n console.error(e);\n showToast(\n t`Failed to generate description${\n e?.message ? `: ${e.message}` : ''\n }`,\n );\n } finally {\n setUIState('default');\n toastRef.current?.hideToast?.();\n }\n })();\n }}\n >\n <Icon icon=\"sparkles2\" />\n <small>\n <Trans>Generate description…</Trans>\n <br />\n <Trans>\n ({localeCode2Text(lang)}){' '}\n <span class=\"more-insignificant\">\n — experimental\n </span>\n </Trans>\n </small>\n </MenuItem>\n )}\n </Menu2>\n )}\n <button\n type=\"button\"\n class=\"light block\"\n onClick={() => {\n setShowModal(false);\n }}\n disabled={uiState === 'loading'}\n >\n <Trans>Done</Trans>\n </button>\n </footer>\n </div>\n </main>\n </div>\n </Modal>\n )}\n </>\n );\n}\n\nexport default MediaAttachment;\n","import { Trans, useLingui } from '@lingui/react/macro';\nimport { useEffect, useRef, useState } from 'preact/hooks';\nimport { useHotkeys } from 'react-hotkeys-hook';\nimport { useDebouncedCallback } from 'use-debounce';\n\nimport { api } from '../utils/api';\nimport { fetchRelationships } from '../utils/relationships';\n\nimport AccountBlock from './account-block';\nimport Icon from './icon';\nimport Loader from './loader';\n\nfunction MentionModal({\n onClose = () => {},\n onSelect = () => {},\n defaultSearchTerm,\n}) {\n const { t } = useLingui();\n const { masto } = api();\n const [uiState, setUIState] = useState('default');\n const [accounts, setAccounts] = useState([]);\n const [relationshipsMap, setRelationshipsMap] = useState({});\n\n const [selectedIndex, setSelectedIndex] = useState(0);\n\n const loadRelationships = async (accounts) => {\n if (!accounts?.length) return;\n const relationships = await fetchRelationships(accounts, relationshipsMap);\n if (relationships) {\n setRelationshipsMap({\n ...relationshipsMap,\n ...relationships,\n });\n }\n };\n\n const loadAccounts = (term) => {\n if (!term) return;\n setUIState('loading');\n (async () => {\n try {\n const accounts = await masto.v1.accounts.search.list({\n q: term,\n limit: 40,\n resolve: false,\n });\n setAccounts(accounts);\n loadRelationships(accounts);\n setUIState('default');\n } catch (e) {\n setUIState('error');\n console.error(e);\n }\n })();\n };\n\n const debouncedLoadAccounts = useDebouncedCallback(loadAccounts, 1000);\n\n useEffect(() => {\n loadAccounts();\n }, [loadAccounts]);\n\n const inputRef = useRef();\n useEffect(() => {\n if (inputRef.current) {\n inputRef.current.focus();\n // Put cursor at the end\n if (inputRef.current.value) {\n inputRef.current.selectionStart = inputRef.current.value.length;\n inputRef.current.selectionEnd = inputRef.current.value.length;\n }\n }\n }, []);\n\n useEffect(() => {\n if (defaultSearchTerm) {\n loadAccounts(defaultSearchTerm);\n }\n }, [defaultSearchTerm]);\n\n const selectAccount = (account) => {\n const socialAddress = account.acct;\n onSelect(socialAddress);\n onClose();\n };\n\n useHotkeys(\n 'enter',\n () => {\n const selectedAccount = accounts[selectedIndex];\n if (selectedAccount) {\n selectAccount(selectedAccount);\n }\n },\n {\n preventDefault: true,\n enableOnFormTags: ['input'],\n useKey: true,\n ignoreEventWhen: (e) => e.metaKey || e.ctrlKey || e.altKey || e.shiftKey,\n },\n );\n\n const listRef = useRef();\n useHotkeys(\n 'down',\n () => {\n if (selectedIndex < accounts.length - 1) {\n setSelectedIndex(selectedIndex + 1);\n } else {\n setSelectedIndex(0);\n }\n setTimeout(() => {\n const selectedItem = listRef.current.querySelector('.selected');\n if (selectedItem) {\n selectedItem.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n inline: 'center',\n });\n }\n }, 1);\n },\n {\n preventDefault: true,\n enableOnFormTags: ['input'],\n useKey: true,\n ignoreEventWhen: (e) => e.metaKey || e.ctrlKey || e.altKey || e.shiftKey,\n },\n );\n\n useHotkeys(\n 'up',\n () => {\n if (selectedIndex > 0) {\n setSelectedIndex(selectedIndex - 1);\n } else {\n setSelectedIndex(accounts.length - 1);\n }\n setTimeout(() => {\n const selectedItem = listRef.current.querySelector('.selected');\n if (selectedItem) {\n selectedItem.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n inline: 'center',\n });\n }\n }, 1);\n },\n {\n preventDefault: true,\n enableOnFormTags: ['input'],\n useKey: true,\n ignoreEventWhen: (e) => e.metaKey || e.ctrlKey || e.altKey || e.shiftKey,\n },\n );\n\n return (\n <div id=\"mention-sheet\" class=\"sheet\">\n {!!onClose && (\n <button type=\"button\" class=\"sheet-close\" onClick={onClose}>\n <Icon icon=\"x\" alt={t`Close`} />\n </button>\n )}\n <header>\n <form\n onSubmit={(e) => {\n e.preventDefault();\n debouncedLoadAccounts.flush?.();\n // const searchTerm = inputRef.current.value;\n // debouncedLoadAccounts(searchTerm);\n }}\n >\n <input\n ref={inputRef}\n required\n type=\"search\"\n class=\"block\"\n placeholder={t`Search accounts`}\n onInput={(e) => {\n const { value } = e.target;\n debouncedLoadAccounts(value);\n }}\n autocomplete=\"off\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n spellCheck=\"false\"\n dir=\"auto\"\n enterKeyHint=\"search\"\n defaultValue={defaultSearchTerm || ''}\n />\n </form>\n </header>\n <main>\n {accounts?.length > 0 ? (\n <ul\n ref={listRef}\n class={`accounts-list ${uiState === 'loading' ? 'loading' : ''}`}\n >\n {accounts.map((account, i) => {\n const relationship = relationshipsMap[account.id];\n return (\n <li\n key={account.id}\n class={i === selectedIndex ? 'selected' : ''}\n >\n <AccountBlock\n avatarSize=\"xxl\"\n account={account}\n relationship={relationship}\n showStats\n showActivity\n />\n <button\n type=\"button\"\n class=\"plain2\"\n onClick={() => {\n selectAccount(account);\n }}\n >\n <Icon icon=\"plus\" size=\"xl\" alt={t`Add`} />\n </button>\n </li>\n );\n })}\n </ul>\n ) : uiState === 'loading' ? (\n <div class=\"ui-state\">\n <Loader abrupt />\n </div>\n ) : uiState === 'error' ? (\n <div class=\"ui-state\">\n <p>\n <Trans>Error loading accounts</Trans>\n </p>\n </div>\n ) : null}\n </main>\n </div>\n );\n}\n\nexport default MentionModal;\n","import './quote-suggestion.css';\n\nimport { Trans } from '@lingui/react/macro';\n\nimport Status from './status';\n\nexport default function QuoteSuggestion({\n quoteSuggestion,\n hasCurrentQuoteStatus,\n onAccept,\n onCancel,\n}) {\n if (!quoteSuggestion) return null;\n\n return (\n <div class=\"quote-suggestion\">\n <div class=\"quote-suggestion-header\">\n <b>\n <Trans>Turn link into a quote?</Trans>\n </b>\n <div class=\"quote-suggestion-url\">{quoteSuggestion.url}</div>\n </div>\n <div class=\"quote-status\">\n <Status\n status={quoteSuggestion.status}\n instance={quoteSuggestion.instance}\n size=\"s\"\n readOnly\n />\n </div>\n <div class=\"quote-suggestion-actions\">\n <span class=\"spacer\" />\n <button type=\"button\" class=\"plain\" onClick={onCancel}>\n {hasCurrentQuoteStatus ? (\n <Trans>Cancel</Trans>\n ) : (\n <Trans>Keep as link</Trans>\n )}\n </button>\n <button type=\"button\" class=\"plain6\" onClick={onAccept}>\n {hasCurrentQuoteStatus ? (\n <Trans>Replace current quote</Trans>\n ) : (\n <Trans>Turn into quote</Trans>\n )}\n </button>\n </div>\n </div>\n );\n}\n","import './compose.css';\n\nimport { msg, plural } from '@lingui/core/macro';\nimport { Trans, useLingui } from '@lingui/react/macro';\nimport { MenuDivider, MenuItem } from '@szhsin/react-menu';\nimport { deepEqual } from 'fast-equals';\nimport { useEffect, useMemo, useRef, useState } from 'preact/hooks';\nimport { useHotkeys } from 'react-hotkeys-hook';\nimport { uid } from 'uid/single';\nimport { useSnapshot } from 'valtio';\n\nimport supportedLanguages from '../data/status-supported-languages';\nimport { api, getPreferences } from '../utils/api';\nimport db from '../utils/db';\nimport { getDtfLocale } from '../utils/dtf-locale';\nimport localeMatch from '../utils/locale-match';\nimport localeCode2Text from '../utils/localeCode2Text';\nimport mem from '../utils/mem';\nimport openCompose from '../utils/open-compose';\nimport {\n getPostQuoteApprovalPolicy,\n supportsNativeQuote,\n} from '../utils/quote-utils';\nimport RTF from '../utils/relative-time-format';\nimport showToast from '../utils/show-toast';\nimport states, { saveStatus } from '../utils/states';\nimport store from '../utils/store';\nimport {\n getAPIVersions,\n getCurrentAccount,\n getCurrentAccountNS,\n getCurrentInstanceConfiguration,\n} from '../utils/store-utils';\nimport stringLength from '../utils/string-length';\nimport supports from '../utils/supports';\nimport unfurlMastodonLink from '../utils/unfurl-link';\nimport urlRegexObj from '../utils/url-regex';\nimport useCloseWatcher from '../utils/useCloseWatcher';\nimport useInterval from '../utils/useInterval';\nimport useThrottledResizeObserver from '../utils/useThrottledResizeObserver';\nimport visibilityIconsMap from '../utils/visibility-icons-map';\nimport visibilityText from '../utils/visibility-text';\n\nimport AccountBlock from './account-block';\n// import Avatar from './avatar';\nimport CameraCaptureInput, {\n supportsCameraCapture,\n} from './camera-capture-input';\nimport CharCountMeter from './char-count-meter';\nimport ComposePoll, { expiryOptions } from './compose-poll';\nimport Textarea from './compose-textarea';\nimport CustomEmojisModal from './custom-emojis-modal';\nimport FilePickerInput from './file-picker-input';\nimport GIFPickerModal from './gif-picker-modal';\nimport Icon from './icon';\nimport Loader from './loader';\nimport MediaAttachment from './media-attachment';\nimport MentionModal from './mention-modal';\nimport Menu2 from './menu2';\nimport Modal from './modal';\nimport QuoteSuggestion from './quote-suggestion';\nimport ScheduledAtField, {\n getLocalTimezoneName,\n MIN_SCHEDULED_AT,\n} from './ScheduledAtField';\nimport Status from './status';\nimport TextExpander from './text-expander';\n\nconst supportedLanguagesMap = supportedLanguages.reduce((acc, l) => {\n const [code, common, native] = l;\n acc[code] = {\n common,\n native,\n };\n return acc;\n}, {});\n\n/* NOTES:\n - Max character limit includes BOTH status text and Content Warning text\n*/\n\nconst expirySeconds = Object.keys(expiryOptions);\nconst oneDay = 24 * 60 * 60;\n\nconst expiresInFromExpiresAt = (expiresAt) => {\n if (!expiresAt) return oneDay;\n const delta = (Date.parse(expiresAt) - Date.now()) / 1000;\n return expirySeconds.find((s) => s >= delta) || oneDay;\n};\n\nconst DEFAULT_LANG = localeMatch(\n [getDtfLocale(), ...navigator.languages],\n supportedLanguages.map((l) => l[0]),\n 'en',\n);\n\n// https://github.com/mastodon/mastodon/blob/c4a429ed47e85a6bbf0d470a41cc2f64cf120c19/app/javascript/mastodon/features/compose/util/counter.js\nconst usernameRegex = /(^|[^\\/\\w])[@@](([a-z0-9_]+)@[a-z0-9\\.\\-]+[a-z0-9]+)/gi;\nconst urlPlaceholder = '$2xxxxxxxxxxxxxxxxxxxxxxx';\nfunction countableText(inputText) {\n return inputText\n .replace(urlRegexObj, urlPlaceholder)\n .replace(usernameRegex, '$1@$3');\n}\n\n// const rtf = new Intl.RelativeTimeFormat();\nconst LF = mem((locale) => new Intl.ListFormat(locale || undefined));\n\nconst ADD_LABELS = {\n camera: msg`Take photo or video`,\n media: msg`Add media`,\n customEmoji: msg`Add custom emoji`,\n gif: msg`Add GIF`,\n poll: msg`Add poll`,\n sensitive: msg`Add content warning`,\n scheduledPost: msg`Schedule post`,\n};\n\nconst DEFAULT_SCHEDULED_AT = Math.max(10 * 60 * 1000, MIN_SCHEDULED_AT); // 10 mins\n\nfunction isMimeTypeSupported(fileType, supportedMimeTypes) {\n if (!supportedMimeTypes) return true;\n if (supportedMimeTypes.includes(fileType)) return true;\n\n // If type is not supported, try to find a supported type with the same subtype\n // E.g. application/ogg -> audio/ogg\n const [suffixType, subtype] = fileType.split('/');\n const subTypeMap = {};\n supportedMimeTypes.forEach((mimeType) => {\n const [t, st] = mimeType.split('/');\n subTypeMap[st] = t;\n });\n\n return !!subTypeMap[subtype];\n}\n\nfunction Compose({\n onClose,\n replyToStatus,\n replyMode = 'all',\n editStatus,\n draftStatus,\n quoteStatus,\n standalone,\n hasOpener,\n}) {\n const { i18n, _, t } = useLingui();\n const rtf = RTF(i18n.locale);\n const lf = LF(i18n.locale);\n\n console.warn('RENDER COMPOSER');\n const { masto, instance } = api();\n const [uiState, setUIState] = useState('default');\n const UID = useRef(draftStatus?.uid || uid());\n console.log('Compose UID', UID.current);\n\n const currentAccount = useMemo(getCurrentAccount, []);\n const currentAccountInfo = currentAccount.info;\n\n const configuration = getCurrentInstanceConfiguration();\n console.log('⚙️ Configuration', configuration);\n\n const {\n statuses: {\n maxCharacters,\n maxMediaAttachments, // Beware: it can be undefined!\n charactersReservedPerUrl,\n } = {},\n mediaAttachments: {\n supportedMimeTypes,\n imageSizeLimit,\n imageMatrixLimit,\n videoSizeLimit,\n videoMatrixLimit,\n videoFrameRateLimit,\n descriptionLimit,\n } = {},\n polls: {\n maxOptions,\n maxCharactersPerOption,\n maxExpiration,\n minExpiration,\n } = {},\n } = configuration || {};\n const supportedImagesVideosTypes = supportedMimeTypes?.filter((mimeType) =>\n /^(image|video)/i.test(mimeType),\n );\n\n const textareaRef = useRef();\n const spoilerTextRef = useRef();\n\n const [visibility, setVisibility] = useState('public');\n const [quoteApprovalPolicy, setQuoteApprovalPolicy] = useState('public');\n const [sensitive, setSensitive] = useState(false);\n const [sensitiveMedia, setSensitiveMedia] = useState(false);\n const [language, setLanguage] = useState(\n store.session.get('currentLanguage') || DEFAULT_LANG,\n );\n const prevLanguage = useRef(language);\n const [mediaAttachments, setMediaAttachments] = useState([]);\n const [poll, setPoll] = useState(null);\n const [scheduledAt, setScheduledAt] = useState(null);\n const [quoteSuggestion, setQuoteSuggestion] = useState(null);\n const [localQuoteStatus, setLocalQuoteStatus] = useState(quoteStatus);\n const [quoteCleared, setQuoteCleared] = useState(false);\n\n const prefs = getPreferences();\n\n const currentQuoteStatus = quoteCleared\n ? null\n : localQuoteStatus || quoteStatus;\n\n // Quote eligibility logic duplicated from status.jsx\n const checkQuoteEligibility = (status) => {\n if (!supportsNativeQuote()) return false;\n\n const { visibility, quoteApproval, account } = status;\n const isSelf = currentAccountInfo && currentAccountInfo.id === account.id;\n const isPublic = ['public', 'unlisted'].includes(visibility);\n const isMineAndPrivate = isSelf && visibility === 'private';\n\n const isQuoteAutomaticallyAccepted =\n quoteApproval?.currentUser === 'automatic' &&\n (isPublic || isMineAndPrivate);\n const isQuoteManuallyAccepted =\n quoteApproval?.currentUser === 'manual' && (isPublic || isMineAndPrivate);\n\n if (!isPublic && !isSelf) {\n return false;\n } else if (isQuoteAutomaticallyAccepted) {\n return true;\n } else if (isQuoteManuallyAccepted) {\n return true;\n } else {\n return false;\n }\n };\n\n const handlePastedLink = async (url) => {\n // Handle QP links\n if (supportsNativeQuote()) {\n // Quotes cannot coexist with media attachments or polls\n if (mediaAttachments.length > 0 || poll) {\n return;\n }\n\n // Cannot add/remove/replace current quote when editing\n if (editStatus) {\n return;\n }\n\n // Don't show quote suggestion when visibility is 'direct'\n if (visibility === 'direct') {\n return;\n }\n\n try {\n const unfurledData = await unfurlMastodonLink(instance, url);\n if (unfurledData?.id) {\n const status =\n states.statuses[`${unfurledData.instance}/${unfurledData.id}`];\n if (status && checkQuoteEligibility(status)) {\n // Don't show suggestion if it's the same as current quote\n if (currentQuoteStatus?.id === status.id) {\n return;\n }\n\n setQuoteSuggestion({\n status,\n instance: unfurledData.instance,\n url: unfurledData.originalURL,\n });\n }\n }\n } catch (error) {\n console.error(error);\n }\n }\n };\n\n const oninputTextarea = () => {\n if (!textareaRef.current) return;\n textareaRef.current.dispatchEvent(new Event('input'));\n };\n const focusTextarea = (cursorPosition) => {\n setTimeout(() => {\n if (!textareaRef.current) return;\n // If cursor position is provided, set it\n if (cursorPosition !== undefined) {\n textareaRef.current.setSelectionRange(cursorPosition, cursorPosition);\n }\n console.debug('FOCUS textarea');\n textareaRef.current?.focus();\n }, 300);\n };\n const insertTextAtCursor = ({ targetElement, text }) => {\n if (!targetElement) return;\n\n const { selectionStart, selectionEnd, value } = targetElement;\n let textBeforeInsert = value.slice(0, selectionStart);\n\n // Remove zero-width space from end of text\n textBeforeInsert = textBeforeInsert.replace(/\\u200B$/, '');\n\n const spaceBeforeInsert = textBeforeInsert\n ? /[\\s\\t\\n\\r]$/.test(textBeforeInsert)\n ? ''\n : ' '\n : '';\n\n const textAfterInsert = value.slice(selectionEnd);\n const spaceAfterInsert = /^[\\s\\t\\n\\r]/.test(textAfterInsert) ? '' : ' ';\n\n const newText =\n textBeforeInsert +\n spaceBeforeInsert +\n text +\n spaceAfterInsert +\n textAfterInsert;\n\n targetElement.value = newText;\n targetElement.selectionStart = targetElement.selectionEnd =\n selectionEnd + text.length + spaceAfterInsert.length;\n targetElement.focus();\n targetElement.dispatchEvent(new Event('input'));\n };\n\n const lastFocusedFieldRef = useRef(null);\n const lastFocusedEmojiFieldRef = useRef(null);\n const focusLastFocusedField = () => {\n setTimeout(() => {\n if (!lastFocusedFieldRef.current) return;\n lastFocusedFieldRef.current.focus();\n }, 0);\n };\n const composeContainerRef = useRef(null);\n useEffect(() => {\n const handleFocus = (e) => {\n // Toggle focused if in or out if any fields are focused\n composeContainerRef.current.classList.toggle(\n 'focused',\n e.type === 'focusin',\n );\n\n const target = e.target;\n if (target.hasAttribute('data-allow-custom-emoji')) {\n lastFocusedEmojiFieldRef.current = target;\n }\n const isFormElement = ['INPUT', 'BUTTON', 'SELECT', 'TEXTAREA'].includes(\n target.tagName,\n );\n if (isFormElement) {\n lastFocusedFieldRef.current = target;\n }\n };\n\n const composeContainer = composeContainerRef.current;\n if (composeContainer) {\n composeContainer.addEventListener('focusin', handleFocus);\n composeContainer.addEventListener('focusout', handleFocus);\n }\n\n return () => {\n if (composeContainer) {\n composeContainer.removeEventListener('focusin', handleFocus);\n composeContainer.removeEventListener('focusout', handleFocus);\n }\n };\n }, []);\n\n useEffect(() => {\n if (replyToStatus) {\n const { spoilerText, visibility, language, sensitive } = replyToStatus;\n if (spoilerText && spoilerTextRef.current) {\n spoilerTextRef.current.value = spoilerText;\n }\n const mentions = new Set([\n replyToStatus.account.acct,\n ...replyToStatus.mentions.map((m) => m.acct),\n ]);\n const allMentions = [...mentions].filter(\n (m) => m !== currentAccountInfo.acct,\n );\n\n if (allMentions.length > 0) {\n const authorMention = `@${replyToStatus.account.acct}`;\n const otherMentions = allMentions\n .filter((m) => m !== replyToStatus.account.acct)\n .map((m) => `@${m}`);\n\n if (replyMode === 'author-only') {\n // Mode 1: Only mention the author\n textareaRef.current.value = `${authorMention} `;\n oninputTextarea();\n focusTextarea();\n } else if (replyMode === 'author-first') {\n // Mode 2: Mention author first, then others at the end after 2 newlines\n if (otherMentions.length > 0) {\n textareaRef.current.value = `${authorMention} \\n\\n${otherMentions.join(' ')}`;\n oninputTextarea();\n // Set cursor position after the author mention\n const cursorPosition = authorMention.length + 1; // +1 for the space\n focusTextarea(cursorPosition);\n } else {\n // If no other mentions, just mention the author\n textareaRef.current.value = `${authorMention} `;\n oninputTextarea();\n focusTextarea();\n }\n } else {\n // Mode 3 (default 'all'): All mentions at the beginning\n textareaRef.current.value = `${allMentions\n .map((m) => `@${m}`)\n .join(' ')} `;\n oninputTextarea();\n focusTextarea();\n }\n }\n setVisibility(\n visibility === 'public' && prefs['posting:default:visibility']\n ? prefs['posting:default:visibility'].toLowerCase()\n : visibility,\n );\n setLanguage(\n language ||\n prefs['posting:default:language']?.toLowerCase() ||\n DEFAULT_LANG,\n );\n setSensitive(!!spoilerText);\n } else if (editStatus) {\n const {\n visibility,\n language,\n sensitive,\n poll,\n mediaAttachments,\n quoteApproval,\n } = editStatus;\n const composablePoll = !!poll?.options && {\n ...poll,\n options: poll.options.map((o) => o?.title || o),\n expiresIn: poll?.expiresIn || expiresInFromExpiresAt(poll.expiresAt),\n };\n setUIState('loading');\n (async () => {\n try {\n const statusSource = await masto.v1.statuses\n .$select(editStatus.id)\n .source.fetch();\n console.log({ statusSource });\n const { text, spoilerText } = statusSource;\n textareaRef.current.value = text;\n textareaRef.current.dataset.source = text;\n oninputTextarea();\n focusTextarea();\n spoilerTextRef.current.value = spoilerText;\n setVisibility(visibility);\n setLanguage(\n language ||\n prefs['posting:default:language']?.toLowerCase() ||\n DEFAULT_LANG,\n );\n if (supportsNativeQuote()) {\n const postQuoteApprovalPolicy =\n getPostQuoteApprovalPolicy(quoteApproval);\n setQuoteApprovalPolicy(postQuoteApprovalPolicy);\n }\n setSensitive(sensitive);\n if (composablePoll) setPoll(composablePoll);\n setMediaAttachments(mediaAttachments);\n setUIState('default');\n } catch (e) {\n console.error(e);\n alert(e?.reason || e);\n setUIState('error');\n }\n })();\n } else {\n focusTextarea();\n console.log('Apply prefs', prefs);\n if (prefs['posting:default:visibility']) {\n setVisibility(prefs['posting:default:visibility'].toLowerCase());\n }\n if (prefs['posting:default:language']) {\n setLanguage(prefs['posting:default:language'].toLowerCase());\n }\n if (prefs['posting:default:sensitive']) {\n setSensitive(!!prefs['posting:default:sensitive']);\n }\n if (prefs['posting:default:quote_policy']) {\n let policy = prefs['posting:default:quote_policy'].toLowerCase();\n if (prefs['posting:default:visibility']) {\n const visibility = prefs['posting:default:visibility'].toLowerCase();\n if (visibility === 'private' || visibility === 'direct') {\n policy = 'nobody';\n }\n }\n setQuoteApprovalPolicy(policy);\n }\n }\n if (draftStatus) {\n const {\n status,\n spoilerText,\n visibility,\n language,\n sensitive,\n sensitiveMedia,\n poll,\n mediaAttachments,\n scheduledAt,\n quoteApprovalPolicy,\n } = draftStatus;\n const composablePoll = !!poll?.options && {\n ...poll,\n options: poll.options.map((o) => o?.title || o),\n expiresIn: poll?.expiresIn || expiresInFromExpiresAt(poll.expiresAt),\n };\n textareaRef.current.value = status;\n oninputTextarea();\n // status starts with newline or space, focus on first position\n const cursorPos = /^\\n|\\s/.test(status) ? 0 : undefined;\n focusTextarea(cursorPos);\n if (spoilerText) spoilerTextRef.current.value = spoilerText;\n if (visibility) setVisibility(visibility);\n setLanguage(\n language ||\n prefs['posting:default:language']?.toLowerCase() ||\n DEFAULT_LANG,\n );\n if (sensitiveMedia !== null) setSensitiveMedia(sensitiveMedia);\n if (sensitive !== null) setSensitive(sensitive);\n if (composablePoll) setPoll(composablePoll);\n if (mediaAttachments) setMediaAttachments(mediaAttachments);\n if (scheduledAt) setScheduledAt(scheduledAt);\n if (quoteApprovalPolicy) setQuoteApprovalPolicy(quoteApprovalPolicy);\n }\n }, [draftStatus, editStatus, replyToStatus, replyMode]);\n\n // focus textarea when state.composerState.minimized turns false\n const snapStates = useSnapshot(states);\n useEffect(() => {\n if (!snapStates.composerState.minimized) {\n focusTextarea();\n }\n }, [snapStates.composerState.minimized]);\n\n const formRef = useRef();\n\n const beforeUnloadCopy = t`You have unsaved changes. Discard this post?`;\n const canClose = () => {\n const { value, dataset } = textareaRef.current;\n\n // check if loading\n if (uiState === 'loading') {\n console.log('canClose', { uiState });\n return false;\n }\n\n // check for status and media attachments\n const hasValue = (value || '')\n .trim()\n .replace(/^\\p{White_Space}+|\\p{White_Space}+$/gu, '');\n const hasMediaAttachments = mediaAttachments.length > 0;\n if (!hasValue && !hasMediaAttachments) {\n console.log('canClose', { value, mediaAttachments });\n return true;\n }\n\n // check if all media attachments have IDs\n const hasIDMediaAttachments =\n mediaAttachments.length > 0 &&\n mediaAttachments.every((media) => media.id);\n if (hasIDMediaAttachments) {\n console.log('canClose', { hasIDMediaAttachments });\n return true;\n }\n\n // check if status contains only \"@acct\", if replying\n const isSelf = replyToStatus?.account.id === currentAccountInfo.id;\n const hasOnlyAcct =\n replyToStatus && value.trim() === `@${replyToStatus.account.acct}`;\n // TODO: check for mentions, or maybe just generic \"@username<space>\", including multiple mentions like \"@username1<space>@username2<space>\"\n if (!isSelf && hasOnlyAcct) {\n console.log('canClose', { isSelf, hasOnlyAcct });\n return true;\n }\n\n // check if status is same with source\n const sameWithSource = value === dataset?.source;\n if (sameWithSource) {\n console.log('canClose', { sameWithSource });\n return true;\n }\n\n console.log('canClose', {\n value,\n hasMediaAttachments,\n hasIDMediaAttachments,\n poll,\n isSelf,\n hasOnlyAcct,\n sameWithSource,\n uiState,\n });\n\n return false;\n };\n\n const confirmClose = () => {\n if (!canClose()) {\n const yes = confirm(beforeUnloadCopy);\n return yes;\n }\n return true;\n };\n\n useEffect(() => {\n // Show warning if user tries to close window with unsaved changes\n const handleBeforeUnload = (e) => {\n if (!canClose()) {\n e.preventDefault();\n e.returnValue = beforeUnloadCopy;\n }\n };\n window.addEventListener('beforeunload', handleBeforeUnload, {\n capture: true,\n });\n return () =>\n window.removeEventListener('beforeunload', handleBeforeUnload, {\n capture: true,\n });\n }, []);\n\n const getCharCount = () => {\n const { value } = textareaRef.current;\n const { value: spoilerText } = spoilerTextRef.current;\n return stringLength(countableText(value)) + stringLength(spoilerText);\n };\n const updateCharCount = () => {\n const count = getCharCount();\n states.composerCharacterCount = count;\n };\n useEffect(updateCharCount, []);\n\n const supportsCloseWatcher = window.CloseWatcher;\n const escDownRef = useRef(false);\n useHotkeys(\n 'esc',\n () => {\n escDownRef.current = true;\n // This won't be true if this event is already handled and not propagated 🤞\n },\n {\n enabled: !supportsCloseWatcher,\n enableOnFormTags: true,\n useKey: true,\n ignoreEventWhen: (e) => e.metaKey || e.ctrlKey || e.altKey || e.shiftKey,\n },\n );\n useHotkeys(\n 'esc',\n () => {\n if (!standalone && escDownRef.current && confirmClose()) {\n onClose();\n }\n escDownRef.current = false;\n },\n {\n enabled: !supportsCloseWatcher,\n enableOnFormTags: true,\n // Use keyup because Esc keydown will close the confirm dialog on Safari\n keyup: true,\n ignoreEventWhen: (e) => {\n const modals = document.querySelectorAll('#modal-container > *');\n const hasModal = !!modals;\n const hasOnlyComposer =\n modals.length === 1 && modals[0].querySelector('#compose-container');\n return (\n (hasModal && !hasOnlyComposer) ||\n e.metaKey ||\n e.ctrlKey ||\n e.altKey ||\n e.shiftKey\n );\n },\n useKey: true,\n },\n );\n useCloseWatcher(() => {\n if (!standalone && confirmClose()) {\n onClose();\n }\n }, []);\n\n const prevBackgroundDraft = useRef({});\n const draftKey = () => {\n const ns = getCurrentAccountNS();\n return `${ns}#${UID.current}`;\n };\n const saveUnsavedDraft = () => {\n // Not enabling this for editing status\n // I don't think this warrant a draft mode for a status that's already posted\n // Maybe it could be a big edit change but it should be rare\n if (editStatus) return;\n if (states.composerState.minimized) return;\n const key = draftKey();\n const backgroundDraft = {\n key,\n replyTo: replyToStatus\n ? {\n /* Smaller payload of replyToStatus. Reasons:\n - No point storing whole thing\n - Could have media attachments\n - Could be deleted/edited later\n */\n id: replyToStatus.id,\n account: {\n id: replyToStatus.account.id,\n username: replyToStatus.account.username,\n acct: replyToStatus.account.acct,\n },\n }\n : null,\n draftStatus: {\n uid: UID.current,\n status: textareaRef.current.value,\n spoilerText: spoilerTextRef.current.value,\n visibility,\n language,\n sensitive,\n sensitiveMedia,\n poll,\n mediaAttachments,\n scheduledAt,\n quoteApprovalPolicy,\n },\n quote: currentQuoteStatus?.id\n ? {\n // Smaller payload, same reason as replyTo\n id: currentQuoteStatus.id,\n }\n : null,\n };\n if (\n !deepEqual(backgroundDraft, prevBackgroundDraft.current) &&\n !canClose()\n ) {\n console.debug('not equal', backgroundDraft, prevBackgroundDraft.current);\n db.drafts\n .set(key, {\n ...backgroundDraft,\n state: 'unsaved',\n updatedAt: Date.now(),\n })\n .then(() => {\n console.debug('DRAFT saved', key, backgroundDraft);\n })\n .catch((e) => {\n console.error('DRAFT failed', key, e);\n });\n prevBackgroundDraft.current = structuredClone(backgroundDraft);\n }\n };\n useInterval(saveUnsavedDraft, 5000); // background save every 5s\n useEffect(() => {\n saveUnsavedDraft();\n // If unmounted, means user discarded the draft\n // Also means pop-out 🙈, but it's okay because the pop-out will persist the ID and re-create the draft\n return () => {\n db.drafts.del(draftKey());\n };\n }, []);\n\n useEffect(() => {\n const handleItems = (e) => {\n // Ignore drops when a sheet is open\n if (document.querySelector('.sheet')) return;\n\n const { items } = e.clipboardData || e.dataTransfer;\n const files = [];\n const unsupportedFiles = [];\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n if (item.kind === 'file') {\n const file = item.getAsFile();\n if (!isMimeTypeSupported(file.type, supportedMimeTypes)) {\n unsupportedFiles.push(file);\n } else {\n files.push(file);\n }\n }\n }\n if (unsupportedFiles.length > 0) {\n alert(\n plural(unsupportedFiles.length, {\n one: `File ${unsupportedFiles[0].name} is not supported.`,\n other: `Files ${lf.format(\n unsupportedFiles.map((f) => f.name),\n )} are not supported.`,\n }),\n );\n }\n if (files.length > 0 && mediaAttachments.length >= maxMediaAttachments) {\n alert(\n plural(maxMediaAttachments, {\n one: 'You can only attach up to 1 file.',\n other: 'You can only attach up to # files.',\n }),\n );\n return;\n }\n console.log({ files });\n if (files.length > 0) {\n e.preventDefault();\n e.stopPropagation();\n // Auto-cut-off files to avoid exceeding maxMediaAttachments\n let allowedFiles = files;\n if (maxMediaAttachments !== undefined) {\n const max = maxMediaAttachments - mediaAttachments.length;\n allowedFiles = allowedFiles.slice(0, max);\n if (allowedFiles.length <= 0) {\n alert(\n plural(maxMediaAttachments, {\n one: 'You can only attach up to 1 file.',\n other: 'You can only attach up to # files.',\n }),\n );\n return;\n }\n }\n const mediaFiles = allowedFiles.map((file) => ({\n file,\n type: file.type,\n size: file.size,\n url: URL.createObjectURL(file),\n id: null,\n description: null,\n }));\n setMediaAttachments([...mediaAttachments, ...mediaFiles]);\n }\n };\n window.addEventListener('paste', handleItems);\n const handleDragover = (e) => {\n // Prevent default if there's files\n if (e.dataTransfer.items.length > 0) {\n e.preventDefault();\n e.stopPropagation();\n }\n };\n window.addEventListener('dragover', handleDragover);\n window.addEventListener('drop', handleItems);\n return () => {\n window.removeEventListener('paste', handleItems);\n window.removeEventListener('dragover', handleDragover);\n window.removeEventListener('drop', handleItems);\n };\n }, [mediaAttachments]);\n\n const [showMentionPicker, setShowMentionPicker] = useState(false);\n const [showEmoji2Picker, setShowEmoji2Picker] = useState(false);\n const [showGIFPicker, setShowGIFPicker] = useState(false);\n\n const [autoDetectedLanguages, setAutoDetectedLanguages] = useState(null);\n const [topSupportedLanguages, restSupportedLanguages] = useMemo(() => {\n const topLanguages = [];\n const restLanguages = [];\n const { contentTranslationHideLanguages = [] } = states.settings;\n supportedLanguages.forEach((l) => {\n const [code] = l;\n if (\n code === language ||\n code === prevLanguage.current ||\n code === DEFAULT_LANG ||\n contentTranslationHideLanguages.includes(code) ||\n (autoDetectedLanguages?.length && autoDetectedLanguages.includes(code))\n ) {\n topLanguages.push(l);\n } else {\n restLanguages.push(l);\n }\n });\n topLanguages.sort(([codeA, commonA], [codeB, commonB]) => {\n if (codeA === language) return -1;\n if (codeB === language) return 1;\n return commonA.localeCompare(commonB);\n });\n restLanguages.sort(([codeA, commonA], [codeB, commonB]) =>\n commonA.localeCompare(commonB),\n );\n return [topLanguages, restLanguages];\n }, [language, autoDetectedLanguages]);\n\n const replyToStatusMonthsAgo = useMemo(\n () =>\n !!replyToStatus?.createdAt &&\n Math.floor(\n (Date.now() - Date.parse(replyToStatus.createdAt)) /\n (1000 * 60 * 60 * 24 * 30),\n ),\n [replyToStatus],\n );\n\n const onMinimize = () => {\n saveUnsavedDraft();\n states.composerState.minimized = true;\n };\n\n const mediaButtonDisabled =\n uiState === 'loading' ||\n (maxMediaAttachments !== undefined &&\n mediaAttachments.length >= maxMediaAttachments) ||\n !!poll; /* ||\n !!currentQuoteStatus?.id; */\n\n const cwButtonDisabled = uiState === 'loading' || !!sensitive;\n const onCWButtonClick = () => {\n setSensitive(true);\n setTimeout(() => {\n spoilerTextRef.current?.focus();\n }, 0);\n };\n\n // If maxOptions is not defined or defined and is greater than 1, show poll button\n const showPollButton = maxOptions == null || maxOptions > 1;\n const pollButtonDisabled =\n uiState === 'loading' || !!poll || !!mediaAttachments.length; /* ||\n !!currentQuoteStatus?.id; */\n const onPollButtonClick = () => {\n setPoll({\n options: ['', ''],\n expiresIn: 24 * 60 * 60, // 1 day\n multiple: false,\n });\n // Focus first choice field\n setTimeout(() => {\n composeContainerRef.current\n ?.querySelector('.poll-choice input[type=\"text\"]')\n ?.focus();\n }, 0);\n };\n\n const highlightLanguageField =\n language !== prevLanguage.current ||\n (autoDetectedLanguages?.length &&\n !autoDetectedLanguages.includes(language));\n const highlightVisibilityField = visibility !== 'public';\n\n const highlightQuoteApprovalPolicyField = quoteApprovalPolicy !== 'public';\n const disableQuotePolicy =\n visibility === 'private' || visibility === 'direct';\n\n const addSubToolbarRef = useRef();\n const [showAddButton, setShowAddButton] = useState(true);\n const BUTTON_WIDTH = 42; // roughly one button width\n useThrottledResizeObserver({\n ref: addSubToolbarRef,\n box: 'border-box',\n onResize: ({ width }) => {\n // If scrollable, it's truncated\n const { scrollWidth } = addSubToolbarRef.current;\n const truncated = scrollWidth > width;\n const overTruncated = width < BUTTON_WIDTH * 4;\n setShowAddButton(overTruncated || truncated);\n addSubToolbarRef.current.hidden = overTruncated;\n },\n });\n\n const showScheduledAt = !editStatus;\n const scheduledAtButtonDisabled = uiState === 'loading' || !!scheduledAt;\n const onScheduledAtClick = () => {\n const date = new Date(Date.now() + DEFAULT_SCHEDULED_AT);\n setScheduledAt(date);\n };\n\n return (\n <div id=\"compose-container-outer\" ref={composeContainerRef}>\n <div\n id=\"compose-container\"\n tabIndex={-1}\n class={standalone ? 'standalone' : ''}\n >\n <div class=\"compose-top\">\n {currentAccountInfo?.avatarStatic && (\n // <Avatar\n // url={currentAccountInfo.avatarStatic}\n // size=\"xl\"\n // alt={currentAccountInfo.username}\n // squircle={currentAccountInfo?.bot}\n // />\n <AccountBlock\n account={currentAccountInfo}\n accountInstance={currentAccount.instanceURL}\n hideDisplayName\n useAvatarStatic\n />\n )}\n {!standalone ? (\n <span class=\"compose-controls\">\n <button\n type=\"button\"\n class=\"plain4 pop-button\"\n disabled={uiState === 'loading'}\n onClick={() => {\n // If there are non-ID media attachments (not yet uploaded), show confirmation dialog because they are not going to be passed to the new window\n // const containNonIDMediaAttachments =\n // mediaAttachments.length > 0 &&\n // mediaAttachments.some((media) => !media.id);\n // if (containNonIDMediaAttachments) {\n // const yes = confirm(\n // 'You have media attachments that are not yet uploaded. Opening a new window will discard them and you will need to re-attach them. Are you sure you want to continue?',\n // );\n // if (!yes) {\n // return;\n // }\n // }\n\n // const mediaAttachmentsWithIDs = mediaAttachments.filter(\n // (media) => media.id,\n // );\n\n const newWin = openCompose({\n editStatus,\n replyToStatus,\n draftStatus: {\n uid: UID.current,\n status: textareaRef.current.value,\n spoilerText: spoilerTextRef.current.value,\n visibility,\n language,\n sensitive,\n poll,\n mediaAttachments,\n scheduledAt,\n },\n quoteStatus: currentQuoteStatus,\n });\n\n if (!newWin) {\n return;\n }\n\n onClose();\n }}\n >\n <Icon icon=\"popout\" alt={t`Pop out`} />\n </button>\n <button\n type=\"button\"\n class=\"plain4 min-button\"\n onClick={onMinimize}\n >\n <Icon icon=\"minimize\" alt={t`Minimize`} />\n </button>{' '}\n <button\n type=\"button\"\n class=\"plain4 close-button\"\n disabled={uiState === 'loading'}\n onClick={() => {\n if (confirmClose()) {\n onClose();\n }\n }}\n >\n <Icon icon=\"x\" alt={t`Close`} />\n </button>\n </span>\n ) : (\n hasOpener && (\n <button\n type=\"button\"\n class=\"light pop-button\"\n disabled={uiState === 'loading'}\n onClick={() => {\n // If there are non-ID media attachments (not yet uploaded), show confirmation dialog because they are not going to be passed to the new window\n // const containNonIDMediaAttachments =\n // mediaAttachments.length > 0 &&\n // mediaAttachments.some((media) => !media.id);\n // if (containNonIDMediaAttachments) {\n // const yes = confirm(\n // 'You have media attachments that are not yet uploaded. Opening a new window will discard them and you will need to re-attach them. Are you sure you want to continue?',\n // );\n // if (!yes) {\n // return;\n // }\n // }\n\n if (!window.opener) {\n alert(t`Looks like you closed the parent window.`);\n return;\n }\n\n if (window.opener.__STATES__.showCompose) {\n if (window.opener.__STATES__.composerState?.publishing) {\n alert(\n t`Looks like you already have a compose field open in the parent window and currently publishing. Please wait for it to be done and try again later.`,\n );\n return;\n }\n\n let confirmText = t`Looks like you already have a compose field open in the parent window. Popping in this window will discard the changes you made in the parent window. Continue?`;\n const yes = confirm(confirmText);\n if (!yes) return;\n }\n\n // const mediaAttachmentsWithIDs = mediaAttachments.filter(\n // (media) => media.id,\n // );\n\n onClose({\n fn: () => {\n const passData = {\n editStatus,\n replyToStatus,\n replyMode,\n draftStatus: {\n uid: UID.current,\n status: textareaRef.current.value,\n spoilerText: spoilerTextRef.current.value,\n visibility,\n language,\n sensitive,\n sensitiveMedia,\n poll,\n mediaAttachments,\n scheduledAt,\n },\n quoteStatus: currentQuoteStatus,\n };\n window.opener.__COMPOSE__ = passData; // Pass it here instead of `showCompose` due to some weird proxy issue again\n if (window.opener.__STATES__.showCompose) {\n window.opener.__STATES__.showCompose = false;\n setTimeout(() => {\n window.opener.__STATES__.showCompose = true;\n }, 10);\n } else {\n window.opener.__STATES__.showCompose = true;\n }\n if (window.opener.__STATES__.composerState.minimized) {\n // Maximize it\n window.opener.__STATES__.composerState.minimized = false;\n }\n },\n });\n }}\n >\n <Icon icon=\"popin\" alt={t`Pop in`} />\n </button>\n )\n )}\n </div>\n {!!replyToStatus && (\n <details class=\"status-preview\" open>\n <Status status={replyToStatus} size=\"s\" previewMode />\n <summary class=\"status-preview-legend reply-to\">\n {replyToStatusMonthsAgo > 0 ? (\n <Trans>\n Replying to @\n {replyToStatus.account.acct || replyToStatus.account.username}\n ’s post (\n <strong>\n {rtf.format(-replyToStatusMonthsAgo, 'month')}\n </strong>\n )\n </Trans>\n ) : (\n <Trans>\n Replying to @\n {replyToStatus.account.acct || replyToStatus.account.username}\n ’s post\n </Trans>\n )}\n </summary>\n </details>\n )}\n {!!editStatus && (\n <details class=\"status-preview\">\n <Status status={editStatus} size=\"s\" previewMode />\n <summary class=\"status-preview-legend\">\n <Trans>Editing source post</Trans>\n </summary>\n </details>\n )}\n <form\n ref={formRef}\n class={`form-visibility-${visibility}`}\n style={{\n pointerEvents: uiState === 'loading' ? 'none' : 'auto',\n opacity: uiState === 'loading' ? 0.5 : 1,\n }}\n onClick={() => {\n setTimeout(() => {\n if (!document.activeElement) {\n lastFocusedFieldRef.current?.focus?.();\n }\n }, 10);\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && (e.ctrlKey || e.metaKey)) {\n formRef.current.dispatchEvent(\n new Event('submit', { cancelable: true }),\n );\n }\n }}\n onSubmit={(e) => {\n e.preventDefault();\n\n const formData = new FormData(e.target);\n const entries = Object.fromEntries(formData.entries());\n console.log('ENTRIES', entries);\n let {\n status,\n visibility,\n sensitive,\n sensitiveMedia,\n spoilerText,\n scheduledAt,\n quoteApprovalPolicy,\n } = entries;\n\n // Pre-cleanup\n // checkboxes return \"on\" if checked\n sensitive = sensitive === 'on';\n sensitiveMedia = sensitiveMedia === 'on';\n\n // Convert datetime-local input value to RFC3339 Date string value\n scheduledAt = scheduledAt\n ? new Date(scheduledAt).toISOString()\n : undefined;\n\n // Validation\n /* Let the backend validate this\n if (stringLength(status) > maxCharacters) {\n alert(`Status is too long! Max characters: ${maxCharacters}`);\n return;\n }\n if (\n sensitive &&\n stringLength(status) + stringLength(spoilerText) > maxCharacters\n ) {\n alert(\n `Status and content warning is too long! Max characters: ${maxCharacters}`,\n );\n return;\n }\n */\n if (poll) {\n if (poll.options.length < 2) {\n alert(t`Poll must have at least 2 options`);\n return;\n }\n if (poll.options.some((option) => option === '')) {\n alert(t`Some poll choices are empty`);\n return;\n }\n }\n // TODO: check for URLs and use `charactersReservedPerUrl` to calculate max characters\n\n if (mediaAttachments.length > 0) {\n // If there are media attachments, check if they have no descriptions\n const hasNoDescriptions = mediaAttachments.some(\n (media) => !media.description?.trim?.(),\n );\n if (hasNoDescriptions) {\n const yes = confirm(\n t`Some media have no descriptions. Continue?`,\n );\n if (!yes) return;\n }\n }\n\n // Post-cleanup\n spoilerText = (sensitive && spoilerText) || undefined;\n status = status === '' ? undefined : status;\n\n // states.composerState.minimized = true;\n states.composerState.publishing = true;\n setUIState('loading');\n (async () => {\n try {\n console.log('MEDIA ATTACHMENTS', mediaAttachments);\n if (mediaAttachments.length > 0) {\n // Upload media attachments first\n const mediaPromises = mediaAttachments.map((attachment) => {\n const { file, description, id } = attachment;\n console.log('UPLOADING', attachment);\n if (id) {\n // If already uploaded\n return attachment;\n } else {\n const params = removeNullUndefined({\n file,\n description,\n });\n return masto.v2.media.create(params).then((res) => {\n if (res.id) {\n attachment.id = res.id;\n }\n return res;\n });\n }\n });\n const results = await Promise.allSettled(mediaPromises);\n\n // If any failed, return\n if (\n results.some((result) => {\n return result.status === 'rejected' || !result.value?.id;\n })\n ) {\n states.composerState.publishing = false;\n states.composerState.publishingError = true;\n setUIState('error');\n // Alert all the reasons\n results.forEach((result) => {\n if (result.status === 'rejected') {\n console.error(result);\n alert(result.reason || t`Attachment #${i} failed`);\n }\n });\n return;\n }\n\n console.log({ results, mediaAttachments });\n }\n\n /* NOTE:\n Using snakecase here because masto.js's `isObject` returns false for `params`, ONLY happens when opening in pop-out window. This is maybe due to `window.masto` variable being passed from the parent window. The check that failed is `x.constructor === Object`, so maybe the `Object` in new window is different than parent window's?\n Code: https://github.com/neet/masto.js/blob/dd0d649067b6a2b6e60fbb0a96597c373a255b00/src/serializers/is-object.ts#L2\n\n // TODO: Note above is no longer true in Masto.js v6. Revisit this.\n */\n let params = {\n status,\n // spoilerText,\n spoiler_text: spoilerText,\n language,\n sensitive: sensitive || sensitiveMedia,\n poll,\n // mediaIds: mediaAttachments.map((attachment) => attachment.id),\n media_ids: mediaAttachments.map(\n (attachment) => attachment.id,\n ),\n };\n if (editStatus) {\n if (supportsNativeQuote()) {\n params.quote_approval_policy = quoteApprovalPolicy;\n }\n if (\n supports('@mastodon') ||\n supports('@gotosocial/edit-media-attributes')\n ) {\n params.media_attributes = mediaAttachments.map(\n (attachment) => {\n return {\n id: attachment.id,\n description: attachment.description,\n // focus\n // thumbnail\n };\n },\n );\n }\n } else {\n if (supportsNativeQuote() && currentQuoteStatus?.id) {\n params.quoted_status_id = currentQuoteStatus.id;\n params.quote_approval_policy = quoteApprovalPolicy;\n }\n params.visibility = visibility;\n // params.inReplyToId = replyToStatus?.id || undefined;\n params.in_reply_to_id = replyToStatus?.id || undefined;\n params.scheduled_at = scheduledAt;\n }\n params = removeNullUndefined(params);\n console.log('POST', params);\n\n let newStatus;\n if (editStatus) {\n newStatus = await masto.v1.statuses\n .$select(editStatus.id)\n .update(params);\n saveStatus(newStatus, instance, {\n skipThreading: true,\n });\n } else {\n try {\n newStatus = await masto.v1.statuses.create(params, {\n requestInit: {\n headers: {\n 'Idempotency-Key': UID.current,\n },\n },\n });\n } catch (_) {\n // If idempotency key fails, try again without it\n newStatus = await masto.v1.statuses.create(params);\n }\n }\n states.composerState.minimized = false;\n states.composerState.publishing = false;\n setUIState('default');\n\n // Close\n onClose({\n // type: post, reply, edit\n type: editStatus ? 'edit' : replyToStatus ? 'reply' : 'post',\n newStatus,\n instance,\n scheduledAt,\n });\n } catch (e) {\n states.composerState.publishing = false;\n states.composerState.publishingError = true;\n console.error(e);\n alert(e?.reason || e);\n setUIState('error');\n }\n })();\n }}\n >\n <div>\n <div class={`compose-cw-container ${sensitive ? '' : 'collapsed'}`}>\n <input\n type=\"hidden\"\n name=\"sensitive\"\n value={sensitive ? 'on' : 'off'}\n />\n {/* mimic the old checkbox */}\n <TextExpander\n keys=\":\"\n class=\"spoiler-text-field-container\"\n onTrigger={(action) => {\n if (action?.name === 'custom-emojis') {\n setShowEmoji2Picker({\n targetElement: spoilerTextRef,\n defaultSearchTerm: action?.defaultSearchTerm || null,\n });\n }\n }}\n >\n <input\n ref={spoilerTextRef}\n type=\"text\"\n name=\"spoilerText\"\n placeholder={t`Content warning`}\n data-allow-custom-emoji=\"true\"\n disabled={uiState === 'loading'}\n class=\"spoiler-text-field\"\n lang={language}\n spellCheck=\"true\"\n autocomplete=\"off\"\n dir=\"auto\"\n onInput={() => {\n updateCharCount();\n }}\n />\n </TextExpander>\n <button\n type=\"button\"\n class=\"close-button plain4 small\"\n onClick={() => {\n setSensitive(false);\n textareaRef.current.focus();\n }}\n >\n <Icon icon=\"x\" alt={t`Cancel`} />\n </button>\n </div>\n <Textarea\n ref={textareaRef}\n data-allow-custom-emoji=\"true\"\n placeholder={\n replyToStatus\n ? t`Post your reply`\n : editStatus\n ? t`Edit your post`\n : !!poll\n ? t`Ask a question`\n : t`What are you doing?`\n }\n required={mediaAttachments?.length === 0}\n disabled={uiState === 'loading'}\n lang={language}\n onInput={() => {\n updateCharCount();\n }}\n maxCharacters={maxCharacters}\n onTrigger={(action) => {\n if (action?.name === 'custom-emojis') {\n setShowEmoji2Picker({\n targetElement: lastFocusedEmojiFieldRef,\n defaultSearchTerm: action?.defaultSearchTerm || null,\n });\n } else if (action?.name === 'mention') {\n setShowMentionPicker({\n defaultSearchTerm: action?.defaultSearchTerm || null,\n });\n } else if (\n action?.name === 'auto-detect-language' &&\n action?.languages\n ) {\n setAutoDetectedLanguages(action.languages);\n } else if (action?.name === 'pasted-link' && action?.url) {\n handlePastedLink(action.url);\n }\n }}\n />\n </div>\n {mediaAttachments?.length > 0 && (\n <div class=\"media-attachments\">\n {mediaAttachments.map((attachment, i) => {\n const { id, file } = attachment;\n const fileID = file?.size + file?.type + file?.name;\n return (\n <MediaAttachment\n key={id || fileID || i}\n attachment={attachment}\n disabled={uiState === 'loading'}\n lang={language}\n supportedMimeTypes={supportedMimeTypes}\n descriptionLimit={descriptionLimit}\n onDescriptionChange={(value) => {\n setMediaAttachments((attachments) => {\n const newAttachments = [...attachments];\n newAttachments[i] = {\n ...newAttachments[i],\n description: value,\n };\n return newAttachments;\n });\n }}\n onRemove={() => {\n setMediaAttachments((attachments) => {\n return attachments.filter((_, j) => j !== i);\n });\n }}\n />\n );\n })}\n <label class=\"media-sensitive\">\n <input\n name=\"sensitiveMedia\"\n type=\"checkbox\"\n checked={sensitiveMedia}\n disabled={uiState === 'loading'}\n onChange={(e) => {\n const sensitiveMedia = e.target.checked;\n setSensitiveMedia(sensitiveMedia);\n }}\n />{' '}\n <span>\n <Trans>Mark media as sensitive</Trans>\n </span>{' '}\n <Icon icon={`eye-${sensitiveMedia ? 'close' : 'open'}`} />\n </label>\n </div>\n )}\n {!!poll && (\n <ComposePoll\n lang={language}\n maxOptions={maxOptions}\n maxExpiration={maxExpiration}\n minExpiration={minExpiration}\n maxCharactersPerOption={maxCharactersPerOption}\n poll={poll}\n disabled={uiState === 'loading'}\n onInput={(poll) => {\n if (poll) {\n const newPoll = { ...poll };\n setPoll(newPoll);\n } else {\n setPoll(null);\n focusLastFocusedField();\n }\n }}\n />\n )}\n {!!currentQuoteStatus?.id && (\n <div class=\"quote-status\">\n <Status\n status={currentQuoteStatus}\n instance={instance}\n size=\"s\"\n readOnly\n />\n </div>\n )}\n {scheduledAt && (\n <div class=\"toolbar scheduled-at\">\n <span>\n <label>\n <Trans>\n Posting on{' '}\n <ScheduledAtField\n scheduledAt={scheduledAt}\n setScheduledAt={setScheduledAt}\n />\n </Trans>\n </label>{' '}\n <small class=\"tag insignificant\">\n {getLocalTimezoneName()}\n </small>\n </span>\n <button\n type=\"button\"\n class=\"plain4 close-button small\"\n onClick={() => {\n setScheduledAt(null);\n focusLastFocusedField();\n }}\n >\n <Icon icon=\"x\" alt={t`Cancel`} />\n </button>\n </div>\n )}\n <QuoteSuggestion\n quoteSuggestion={quoteSuggestion}\n hasCurrentQuoteStatus={!!currentQuoteStatus?.id}\n onAccept={() => {\n const { status } = quoteSuggestion;\n\n // Remove the pasted link from textarea\n const currentValue = textareaRef.current?.value || '';\n // Find pasted link nearest to last cursor position\n const lastCursorPos = textareaRef.current?.selectionStart || 0;\n const pastedLinkPos = currentValue.lastIndexOf(\n quoteSuggestion.url,\n lastCursorPos,\n );\n const newValue =\n currentValue.slice(0, pastedLinkPos) +\n currentValue.slice(pastedLinkPos + quoteSuggestion.url.length);\n if (textareaRef.current) {\n textareaRef.current.value = newValue;\n textareaRef.current.dispatchEvent(new Event('input'));\n }\n\n const hasCurrentQuote = !!currentQuoteStatus?.id;\n if (hasCurrentQuote) {\n // If there's already a quote, replacement doesn't need transition\n setQuoteSuggestion(null);\n setLocalQuoteStatus(status);\n } else {\n // Transition the unfurled quote to the quote preview\n if (document.startViewTransition) {\n document.startViewTransition(() => {\n setQuoteSuggestion(null);\n setLocalQuoteStatus(status);\n });\n } else {\n setQuoteSuggestion(null);\n setLocalQuoteStatus(status);\n }\n }\n focusTextarea();\n }}\n onCancel={() => setQuoteSuggestion(null)}\n />\n <div class=\"toolbar compose-footer\">\n <span class=\"add-toolbar-button-group spacer\">\n {showAddButton && (\n <Menu2\n portal={{\n target: document.body,\n }}\n containerProps={{\n style: {\n zIndex: 1001,\n },\n }}\n menuButton={({ open }) => (\n <button\n type=\"button\"\n class={`toolbar-button add-button ${\n open ? 'active' : ''\n }`}\n >\n <Icon icon=\"plus\" title={t`Add`} />\n </button>\n )}\n >\n {supportsCameraCapture && (\n <MenuItem\n disabled={mediaButtonDisabled}\n className=\"compose-menu-add-media\"\n >\n <label class=\"compose-menu-add-media-field\">\n <CameraCaptureInput\n hidden\n supportedMimeTypes={supportedImagesVideosTypes}\n disabled={mediaButtonDisabled}\n setMediaAttachments={setMediaAttachments}\n />\n </label>\n <Icon icon=\"camera\" /> <span>{_(ADD_LABELS.camera)}</span>\n </MenuItem>\n )}\n <MenuItem\n disabled={mediaButtonDisabled}\n className=\"compose-menu-add-media\"\n >\n <label class=\"compose-menu-add-media-field\">\n <FilePickerInput\n hidden\n supportedMimeTypes={supportedMimeTypes}\n maxMediaAttachments={maxMediaAttachments}\n mediaAttachments={mediaAttachments}\n disabled={mediaButtonDisabled}\n setMediaAttachments={setMediaAttachments}\n />\n </label>\n <Icon icon=\"media\" /> <span>{_(ADD_LABELS.media)}</span>\n </MenuItem>\n <MenuItem\n disabled={cwButtonDisabled}\n onClick={onCWButtonClick}\n >\n <Icon icon={`eye-${sensitive ? 'close' : 'open'}`} />{' '}\n <span>{_(ADD_LABELS.sensitive)}</span>\n </MenuItem>\n {showPollButton && (\n <MenuItem\n disabled={pollButtonDisabled}\n onClick={onPollButtonClick}\n >\n <Icon icon=\"poll\" /> <span>{_(ADD_LABELS.poll)}</span>\n </MenuItem>\n )}\n <MenuDivider />\n <MenuItem\n onClick={() => {\n setShowEmoji2Picker({\n targetElement: lastFocusedEmojiFieldRef,\n });\n }}\n >\n <Icon icon=\"emoji2\" />{' '}\n <span>{_(ADD_LABELS.customEmoji)}</span>\n </MenuItem>\n {!!states.settings.composerGIFPicker && (\n <MenuItem\n disabled={mediaButtonDisabled}\n onClick={() => {\n setShowGIFPicker(true);\n }}\n >\n <span class=\"icon icon-gif\" role=\"img\" />\n <span>{_(ADD_LABELS.gif)}</span>\n </MenuItem>\n )}\n {showScheduledAt && (\n <>\n <MenuDivider />\n <MenuItem\n disabled={scheduledAtButtonDisabled}\n onClick={onScheduledAtClick}\n >\n <Icon icon=\"schedule\" />{' '}\n <span>{_(ADD_LABELS.scheduledPost)}</span>\n </MenuItem>\n </>\n )}\n </Menu2>\n )}\n <span\n class=\"add-sub-toolbar-button-group\"\n ref={addSubToolbarRef}\n hidden\n >\n {supportsCameraCapture && (\n <label class=\"toolbar-button\">\n <CameraCaptureInput\n supportedMimeTypes={supportedImagesVideosTypes}\n mediaAttachments={mediaAttachments}\n disabled={mediaButtonDisabled}\n setMediaAttachments={setMediaAttachments}\n />\n <Icon icon=\"camera\" alt={_(ADD_LABELS.camera)} />\n </label>\n )}\n <label class=\"toolbar-button\">\n <FilePickerInput\n supportedMimeTypes={supportedMimeTypes}\n maxMediaAttachments={maxMediaAttachments}\n mediaAttachments={mediaAttachments}\n disabled={mediaButtonDisabled}\n setMediaAttachments={setMediaAttachments}\n />\n <Icon icon=\"media\" alt={_(ADD_LABELS.media)} />\n </label>\n <button\n type=\"button\"\n class=\"toolbar-button\"\n disabled={cwButtonDisabled}\n onClick={onCWButtonClick}\n >\n <Icon\n icon={`eye-${sensitive ? 'close' : 'open'}`}\n alt={_(ADD_LABELS.sensitive)}\n />\n </button>\n {showPollButton && (\n <button\n type=\"button\"\n class=\"toolbar-button\"\n disabled={pollButtonDisabled}\n onClick={onPollButtonClick}\n >\n <Icon icon=\"poll\" alt={_(ADD_LABELS.poll)} />\n </button>\n )}\n <div class=\"toolbar-divider\" />\n {/* <button\n type=\"button\"\n class=\"toolbar-button\"\n disabled={uiState === 'loading'}\n onClick={() => {\n setShowMentionPicker(true);\n }}\n >\n <Icon icon=\"at\" />\n </button> */}\n <button\n type=\"button\"\n class=\"toolbar-button\"\n disabled={uiState === 'loading'}\n onClick={() => {\n setShowEmoji2Picker({\n targetElement: lastFocusedEmojiFieldRef,\n });\n }}\n >\n <Icon icon=\"emoji2\" alt={_(ADD_LABELS.customEmoji)} />\n </button>\n {!!states.settings.composerGIFPicker && (\n <button\n type=\"button\"\n class=\"toolbar-button gif-picker-button\"\n disabled={mediaButtonDisabled}\n onClick={() => {\n setShowGIFPicker(true);\n }}\n >\n <span\n class=\"icon icon-gif\"\n aria-label={_(ADD_LABELS.gif)}\n />\n </button>\n )}\n {showScheduledAt && (\n <>\n <div class=\"toolbar-divider\" />\n <button\n type=\"button\"\n class={`toolbar-button ${scheduledAt ? 'highlight' : ''}`}\n disabled={scheduledAtButtonDisabled}\n onClick={onScheduledAtClick}\n >\n <Icon icon=\"schedule\" alt={_(ADD_LABELS.scheduledPost)} />\n </button>\n </>\n )}\n </span>\n </span>\n {uiState === 'loading' ? (\n <Loader abrupt />\n ) : (\n <CharCountMeter\n maxCharacters={maxCharacters}\n hidden={uiState === 'loading'}\n />\n )}\n {supportsNativeQuote() && (\n <label\n class={`toolbar-button ${highlightQuoteApprovalPolicyField ? 'highlight' : ''}`}\n >\n <Icon icon=\"quote2\" alt=\"Quote settings\" />\n {quoteApprovalPolicy === 'followers' && (\n <Icon icon=\"group\" class=\"insignificant\" />\n )}\n {quoteApprovalPolicy === 'nobody' && (\n <Icon icon=\"block\" class=\"insignificant\" />\n )}\n <select\n name=\"quoteApprovalPolicy\"\n value={quoteApprovalPolicy}\n onChange={(e) => {\n setQuoteApprovalPolicy(e.target.value);\n }}\n disabled={uiState === 'loading'}\n dir=\"auto\"\n >\n <option value=\"public\" disabled={disableQuotePolicy}>\n <Trans>Anyone can quote</Trans>\n </option>\n <option value=\"followers\" disabled={disableQuotePolicy}>\n <Trans>Your followers can quote</Trans>\n </option>\n <option value=\"nobody\">\n <Trans>Only you can quote</Trans>\n </option>\n </select>\n </label>\n )}\n <label\n class={`toolbar-button ${highlightVisibilityField ? 'highlight' : ''}`}\n title={_(visibilityText[visibility])}\n >\n {visibility === 'public' || visibility === 'direct' ? (\n <Icon\n icon={visibilityIconsMap[visibility]}\n alt={_(visibilityText[visibility])}\n />\n ) : (\n <span class=\"icon-text\">{_(visibilityText[visibility])}</span>\n )}\n <select\n name=\"visibility\"\n value={visibility}\n onChange={(e) => {\n setVisibility(e.target.value);\n if (\n e.target.value === 'private' ||\n e.target.value === 'direct'\n ) {\n setQuoteApprovalPolicy('nobody');\n }\n\n if (e.target.value === 'direct' && currentQuoteStatus?.id) {\n const quoteURL = currentQuoteStatus.url;\n if (quoteURL) {\n const currentText = textareaRef.current.value;\n if (!currentText.includes(quoteURL)) {\n textareaRef.current.value =\n currentText + (currentText ? '\\n' : '') + quoteURL;\n oninputTextarea();\n }\n }\n setQuoteCleared(true);\n showToast(t`Quotes can't be embedded in private mentions.`);\n } else if (e.target.value !== 'direct' && quoteCleared) {\n const quoteURL = (localQuoteStatus || quoteStatus)?.url;\n if (quoteURL && textareaRef.current) {\n const currentValue = textareaRef.current.value;\n const linkPos = currentValue.indexOf(quoteURL);\n if (linkPos !== -1) {\n let newValue =\n currentValue.slice(0, linkPos) +\n currentValue.slice(linkPos + quoteURL.length);\n newValue = newValue.replace(/\\n+$/, '');\n textareaRef.current.value = newValue;\n oninputTextarea();\n }\n }\n setQuoteCleared(false);\n }\n }}\n disabled={uiState === 'loading' || !!editStatus}\n dir=\"auto\"\n >\n <option value=\"public\">\n <Trans>Public</Trans>\n </option>\n {(supports('@pleroma/local-visibility-post') ||\n supports('@akkoma/local-visibility-post')) && (\n <option value=\"local\">\n <Trans>Local</Trans>\n </option>\n )}\n <option value=\"unlisted\">\n <Trans>Quiet public</Trans>\n </option>\n <option value=\"private\">\n <Trans>Followers</Trans>\n </option>\n <option value=\"direct\">\n <Trans>Private mention</Trans>\n </option>\n </select>\n </label>{' '}\n <label\n class={`toolbar-button ${\n highlightLanguageField ? 'highlight' : ''\n }`}\n >\n <span class=\"icon-text\">\n {supportedLanguagesMap[language]?.native}\n </span>\n <select\n name=\"language\"\n value={language}\n onChange={(e) => {\n const { value } = e.target;\n setLanguage(value || DEFAULT_LANG);\n store.session.set('currentLanguage', value || DEFAULT_LANG);\n }}\n disabled={uiState === 'loading'}\n dir=\"auto\"\n >\n {topSupportedLanguages.map(([code, common, native]) => {\n const commonText = localeCode2Text({\n code,\n fallback: common,\n });\n const showCommon = commonText !== native;\n return (\n <option value={code} key={code}>\n {showCommon ? `${native} - ${commonText}` : commonText}\n </option>\n );\n })}\n <hr />\n {restSupportedLanguages.map(([code, common, native]) => {\n const commonText = localeCode2Text({\n code,\n fallback: common,\n });\n const showCommon = commonText !== native;\n return (\n <option value={code} key={code}>\n {showCommon ? `${native} - ${commonText}` : commonText}\n </option>\n );\n })}\n </select>\n </label>{' '}\n <button type=\"submit\" disabled={uiState === 'loading'}>\n {scheduledAt\n ? t`Schedule`\n : replyToStatus\n ? t`Reply`\n : editStatus\n ? t`Update`\n : t({\n message: 'Post',\n context: 'Submit button in composer',\n })}\n </button>\n </div>\n </form>\n </div>\n {showMentionPicker && (\n <Modal\n onClose={() => {\n setShowMentionPicker(false);\n focusLastFocusedField();\n }}\n >\n <MentionModal\n masto={masto}\n instance={instance}\n onClose={() => {\n setShowMentionPicker(false);\n }}\n defaultSearchTerm={showMentionPicker?.defaultSearchTerm}\n onSelect={(socialAddress) => {\n const textarea = textareaRef.current;\n if (textarea) {\n insertTextAtCursor({\n targetElement: textarea,\n text: '@' + socialAddress,\n });\n }\n }}\n />\n </Modal>\n )}\n {showEmoji2Picker && (\n <Modal\n onClose={() => {\n setShowEmoji2Picker(false);\n focusLastFocusedField();\n }}\n >\n <CustomEmojisModal\n masto={masto}\n instance={instance}\n onClose={() => {\n setShowEmoji2Picker(false);\n }}\n defaultSearchTerm={showEmoji2Picker?.defaultSearchTerm}\n onSelect={(emojiShortcode) => {\n const targetElement =\n showEmoji2Picker?.targetElement?.current || textareaRef.current;\n if (targetElement) {\n insertTextAtCursor({ targetElement, text: emojiShortcode });\n }\n }}\n />\n </Modal>\n )}\n {showGIFPicker && (\n <Modal\n onClose={() => {\n setShowGIFPicker(false);\n focusLastFocusedField();\n }}\n >\n <GIFPickerModal\n onClose={() => setShowGIFPicker(false)}\n onSelect={({ url, type, alt_text }) => {\n console.log('GIF URL', url);\n if (mediaAttachments.length >= maxMediaAttachments) {\n alert(\n plural(maxMediaAttachments, {\n one: 'You can only attach up to 1 file.',\n other: 'You can only attach up to # files.',\n }),\n );\n return;\n }\n // Download the GIF and insert it as media attachment\n (async () => {\n let theToast;\n try {\n theToast = showToast({\n text: t`Downloading GIF…`,\n duration: -1,\n });\n const blob = await fetch(url, {\n referrerPolicy: 'no-referrer',\n }).then((res) => res.blob());\n const file = new File(\n [blob],\n type === 'video/mp4' ? 'video.mp4' : 'image.gif',\n {\n type,\n },\n );\n const newMediaAttachments = [\n ...mediaAttachments,\n {\n file,\n type,\n size: file.size,\n id: null,\n description: alt_text || '',\n },\n ];\n setMediaAttachments(newMediaAttachments);\n theToast?.hideToast?.();\n } catch (err) {\n console.error(err);\n theToast?.hideToast?.();\n showToast(t`Failed to download GIF`);\n }\n })();\n }}\n />\n </Modal>\n )}\n </div>\n );\n}\n\nfunction removeNullUndefined(obj) {\n for (let key in obj) {\n if (obj[key] === null || obj[key] === undefined) {\n delete obj[key];\n }\n }\n return obj;\n}\n\nexport default Compose;\n"],"file":"compose-BR9Aa_dR.js"} |