fedipod 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (276) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +123 -0
  3. package/architecture.svg +89 -0
  4. package/bin/fedipod.mjs +2303 -0
  5. package/cli.md +243 -0
  6. package/groups.md +85 -0
  7. package/gui.md +99 -0
  8. package/lib/account.mjs +87 -0
  9. package/lib/admin.mjs +1606 -0
  10. package/lib/atproto.mjs +310 -0
  11. package/lib/bskyfeed.mjs +166 -0
  12. package/lib/bskygroup.mjs +162 -0
  13. package/lib/c2s.mjs +305 -0
  14. package/lib/certs.mjs +265 -0
  15. package/lib/deliver.mjs +249 -0
  16. package/lib/directory.mjs +90 -0
  17. package/lib/embed.mjs +214 -0
  18. package/lib/export-collections.mjs +161 -0
  19. package/lib/front-core.mjs +322 -0
  20. package/lib/gateway-core.mjs +115 -0
  21. package/lib/guard.mjs +213 -0
  22. package/lib/home.mjs +161 -0
  23. package/lib/httpsig.mjs +109 -0
  24. package/lib/import.mjs +357 -0
  25. package/lib/intake.mjs +1710 -0
  26. package/lib/keys.mjs +139 -0
  27. package/lib/lease.mjs +190 -0
  28. package/lib/localapi.mjs +87 -0
  29. package/lib/mastoapi.mjs +1588 -0
  30. package/lib/migrate.mjs +127 -0
  31. package/lib/oidc-auth.mjs +53 -0
  32. package/lib/podrdf.mjs +132 -0
  33. package/lib/ports.mjs +27 -0
  34. package/lib/publisher.mjs +1003 -0
  35. package/lib/remote.mjs +303 -0
  36. package/lib/safefetch.mjs +235 -0
  37. package/lib/setup.mjs +262 -0
  38. package/lib/social.mjs +505 -0
  39. package/lib/storage.mjs +170 -0
  40. package/lib/store.mjs +470 -0
  41. package/lib/streaming.mjs +154 -0
  42. package/lib/tagfeed.mjs +158 -0
  43. package/lib/ua.mjs +29 -0
  44. package/lib/update.mjs +91 -0
  45. package/lib/webpush.mjs +98 -0
  46. package/lib/wire.mjs +762 -0
  47. package/package.json +60 -0
  48. package/phanpy/dist/404.html +40 -0
  49. package/phanpy/dist/_headers +2 -0
  50. package/phanpy/dist/apple-touch-icon.png +0 -0
  51. package/phanpy/dist/assets/ICONS-DIPJeU0C.js +2 -0
  52. package/phanpy/dist/assets/ICONS-DIPJeU0C.js.map +1 -0
  53. package/phanpy/dist/assets/ScheduledAtField-D-Abfo4J.js +183 -0
  54. package/phanpy/dist/assets/ScheduledAtField-D-Abfo4J.js.map +1 -0
  55. package/phanpy/dist/assets/Temml-CCjoacWt.woff2 +0 -0
  56. package/phanpy/dist/assets/__vite-browser-external-C7iut881.js +2 -0
  57. package/phanpy/dist/assets/__vite-browser-external-C7iut881.js.map +1 -0
  58. package/phanpy/dist/assets/boosts-carousel-BiOaNdMT.jpg +0 -0
  59. package/phanpy/dist/assets/catch-up-O5q5C75Z.png +0 -0
  60. package/phanpy/dist/assets/chunk-aKtaBQYM.js +1 -0
  61. package/phanpy/dist/assets/compose-CFEx7wb4.js +2 -0
  62. package/phanpy/dist/assets/compose-CFEx7wb4.js.map +1 -0
  63. package/phanpy/dist/assets/compose-ZJN5xSb4.js +35 -0
  64. package/phanpy/dist/assets/compose-ZJN5xSb4.js.map +1 -0
  65. package/phanpy/dist/assets/debug.module-YFQgwnIr.js +52 -0
  66. package/phanpy/dist/assets/debug.module-YFQgwnIr.js.map +1 -0
  67. package/phanpy/dist/assets/dom-p1YcJ5Rw.js +2 -0
  68. package/phanpy/dist/assets/dom-p1YcJ5Rw.js.map +1 -0
  69. package/phanpy/dist/assets/home-mobile-dark@2x-Dc-J8-SM.png +0 -0
  70. package/phanpy/dist/assets/home-mobile-light@2x-Bd3fod8m.png +0 -0
  71. package/phanpy/dist/assets/home-tablet-dark@2x-BgcNI8le.png +0 -0
  72. package/phanpy/dist/assets/home-tablet-light@2x-BW2RV9T6.png +0 -0
  73. package/phanpy/dist/assets/icons/add-circle-line-WD0mwORD.js +1 -0
  74. package/phanpy/dist/assets/icons/alert-line-CpFUMf9s.js +1 -0
  75. package/phanpy/dist/assets/icons/android-2-line-Bzxnrd3S.js +1 -0
  76. package/phanpy/dist/assets/icons/announcement-line-5nwaJFJm.js +1 -0
  77. package/phanpy/dist/assets/icons/arrow-down-circle-line-a7Id9-Iv.js +1 -0
  78. package/phanpy/dist/assets/icons/arrow-down-line-B8uzXzq6.js +1 -0
  79. package/phanpy/dist/assets/icons/arrow-left-line-CGrGT9C-.js +1 -0
  80. package/phanpy/dist/assets/icons/arrow-right-line-CE-HERfX.js +1 -0
  81. package/phanpy/dist/assets/icons/arrow-to-up-line-CvdQjmcy.js +1 -0
  82. package/phanpy/dist/assets/icons/arrow-up-circle-line-DEparSNF.js +1 -0
  83. package/phanpy/dist/assets/icons/arrow-up-line-C7yBeugc.js +1 -0
  84. package/phanpy/dist/assets/icons/arrows-right-line-BtbXmJGP.js +1 -0
  85. package/phanpy/dist/assets/icons/at-line-CF66Bznk.js +1 -0
  86. package/phanpy/dist/assets/icons/attachment-line-BY8It-l9.js +1 -0
  87. package/phanpy/dist/assets/icons/blockquote-line-BS6pU_hm.js +1 -0
  88. package/phanpy/dist/assets/icons/board-line-C0UWXyA6.js +1 -0
  89. package/phanpy/dist/assets/icons/bookmark-line-1CtX5JLF.js +1 -0
  90. package/phanpy/dist/assets/icons/building-5-line-Dd59MzbO.js +1 -0
  91. package/phanpy/dist/assets/icons/bus-2-line-6_dvA0GG.js +1 -0
  92. package/phanpy/dist/assets/icons/calendar-day-line-Crpl_fmu.js +1 -0
  93. package/phanpy/dist/assets/icons/calendar-month-line-vommts2C.js +1 -0
  94. package/phanpy/dist/assets/icons/calendar-time-add-line-BU_DTlQk.js +1 -0
  95. package/phanpy/dist/assets/icons/camera-line-Cv69MEei.js +1 -0
  96. package/phanpy/dist/assets/icons/celebrate-line-B8DvIoi0.js +1 -0
  97. package/phanpy/dist/assets/icons/chart-bar-line-FK-QOmtF.js +1 -0
  98. package/phanpy/dist/assets/icons/chart-line-line-BGcJAFWw.js +1 -0
  99. package/phanpy/dist/assets/icons/chat-3-line-YFK2-hwz.js +1 -0
  100. package/phanpy/dist/assets/icons/check-circle-line-DsAxFr5-.js +1 -0
  101. package/phanpy/dist/assets/icons/clipboard-line-BBp364gJ.js +1 -0
  102. package/phanpy/dist/assets/icons/close-circle-line-CICdiuGz.js +1 -0
  103. package/phanpy/dist/assets/icons/close-line-DYrFWcjv.js +1 -0
  104. package/phanpy/dist/assets/icons/cloud-line-tiQAbah8.js +1 -0
  105. package/phanpy/dist/assets/icons/code-line-fAl8iiV3.js +1 -0
  106. package/phanpy/dist/assets/icons/comment-2-line-CR3g7WeB.js +1 -0
  107. package/phanpy/dist/assets/icons/copy-2-line-CLW69yF5.js +1 -0
  108. package/phanpy/dist/assets/icons/delete-2-line-B8xmbr4n.js +1 -0
  109. package/phanpy/dist/assets/icons/document-3-line-DBGNhAg2.js +1 -0
  110. package/phanpy/dist/assets/icons/document-line-C7mb9sb7.js +1 -0
  111. package/phanpy/dist/assets/icons/down-line-BGqSSThd.js +1 -0
  112. package/phanpy/dist/assets/icons/edit-4-line-DcgGaEhx.js +1 -0
  113. package/phanpy/dist/assets/icons/emoji-2-line-D8YgnM-y.js +1 -0
  114. package/phanpy/dist/assets/icons/exit-line-Dc07BS-x.js +1 -0
  115. package/phanpy/dist/assets/icons/external-link-line-BvpSkmjO.js +1 -0
  116. package/phanpy/dist/assets/icons/eye-2-line-CiWXx-f_.js +1 -0
  117. package/phanpy/dist/assets/icons/eye-close-line-BgTaSJ4P.js +1 -0
  118. package/phanpy/dist/assets/icons/filter-2-line-B_mR2usy.js +1 -0
  119. package/phanpy/dist/assets/icons/filter-line-C_nm-3cU.js +1 -0
  120. package/phanpy/dist/assets/icons/flag-1-line-C2HB05I0.js +1 -0
  121. package/phanpy/dist/assets/icons/forbid-circle-line-D3LTT9yd.js +1 -0
  122. package/phanpy/dist/assets/icons/formula-line-DLrt2d6j.js +1 -0
  123. package/phanpy/dist/assets/icons/grid-line-CgUmEikf.js +1 -0
  124. package/phanpy/dist/assets/icons/group-line-C5fnX0wU.js +1 -0
  125. package/phanpy/dist/assets/icons/hand-finger-2-line-BGgxbuL9.js +1 -0
  126. package/phanpy/dist/assets/icons/hashtag-line-CyTEEXBb.js +1 -0
  127. package/phanpy/dist/assets/icons/heart-crack-line-BZddbO2C.js +1 -0
  128. package/phanpy/dist/assets/icons/heart-line-CJ7K47J4.js +1 -0
  129. package/phanpy/dist/assets/icons/history-2-line-kWWvFzqv.js +1 -0
  130. package/phanpy/dist/assets/icons/history-line-bGQiwbTH.js +1 -0
  131. package/phanpy/dist/assets/icons/home-3-line-fRU1zeLG.js +1 -0
  132. package/phanpy/dist/assets/icons/information-line-iNk6-sOY.js +1 -0
  133. package/phanpy/dist/assets/icons/keyboard-line-DsCyuQNz.js +1 -0
  134. package/phanpy/dist/assets/icons/layout-4-line-CZkOX52Z.js +1 -0
  135. package/phanpy/dist/assets/icons/layout-5-line-B_znt5wO.js +1 -0
  136. package/phanpy/dist/assets/icons/left-line-eUw0tya4.js +1 -0
  137. package/phanpy/dist/assets/icons/lightning-line-DaKoDdix.js +1 -0
  138. package/phanpy/dist/assets/icons/link-2-line-DCqLmMA7.js +1 -0
  139. package/phanpy/dist/assets/icons/list-check-line-BAxosBh9.js +1 -0
  140. package/phanpy/dist/assets/icons/lock-line-CPoaXeUW.js +1 -0
  141. package/phanpy/dist/assets/icons/mail-line-B0P8aa1L.js +1 -0
  142. package/phanpy/dist/assets/icons/moon-line-CEqNAToP.js +1 -0
  143. package/phanpy/dist/assets/icons/more-1-fill-Dw2e5xab.js +1 -0
  144. package/phanpy/dist/assets/icons/more-3-line-BIiVjYTz.js +1 -0
  145. package/phanpy/dist/assets/icons/notification-line-BZZq2Gtu.js +1 -0
  146. package/phanpy/dist/assets/icons/pencil-line-CKh8-A1v.js +1 -0
  147. package/phanpy/dist/assets/icons/photo-album-line-Bnfg2u40.js +1 -0
  148. package/phanpy/dist/assets/icons/pin-line-DpTolyhs.js +1 -0
  149. package/phanpy/dist/assets/icons/play-fill-B0-G_8lX.js +1 -0
  150. package/phanpy/dist/assets/icons/qrcode-2-line-B6SPCaHn.js +1 -0
  151. package/phanpy/dist/assets/icons/quill-pen-line-B6LUrnCP.js +1 -0
  152. package/phanpy/dist/assets/icons/quote-left-fill-hQZ1cj_6.js +1 -0
  153. package/phanpy/dist/assets/icons/radar-line-CKyroTth.js +1 -0
  154. package/phanpy/dist/assets/icons/react-line-CoIKhhtK.js +1 -0
  155. package/phanpy/dist/assets/icons/refresh-2-line-D0mTF97S.js +1 -0
  156. package/phanpy/dist/assets/icons/right-line-B3KWJaqc.js +1 -0
  157. package/phanpy/dist/assets/icons/rocket-line-4KZl537D.js +1 -0
  158. package/phanpy/dist/assets/icons/round-fill-C69NTrZ0.js +1 -0
  159. package/phanpy/dist/assets/icons/round-line-B9k_1uo-.js +1 -0
  160. package/phanpy/dist/assets/icons/route-line-B28ReHcE.js +1 -0
  161. package/phanpy/dist/assets/icons/rows-4-line-CrBniagM.js +1 -0
  162. package/phanpy/dist/assets/icons/scan-line-DSf74YdP.js +1 -0
  163. package/phanpy/dist/assets/icons/search-2-line-B6geIU1z.js +1 -0
  164. package/phanpy/dist/assets/icons/settings-3-line-azJwK47w.js +1 -0
  165. package/phanpy/dist/assets/icons/settings-6-line-C_5zc5YR.js +1 -0
  166. package/phanpy/dist/assets/icons/share-2-line-D5MxWjrm.js +1 -0
  167. package/phanpy/dist/assets/icons/share-forward-line-Cp61fZzZ.js +1 -0
  168. package/phanpy/dist/assets/icons/sparkles-2-line-DYYyXTaW.js +1 -0
  169. package/phanpy/dist/assets/icons/sparkles-line-C2hY1s6I.js +1 -0
  170. package/phanpy/dist/assets/icons/time-line-BF3eet1v.js +1 -0
  171. package/phanpy/dist/assets/icons/transfer-4-line-oisfvTBw.js +1 -0
  172. package/phanpy/dist/assets/icons/translate-line-BFWol2Ce.js +1 -0
  173. package/phanpy/dist/assets/icons/unlock-line-X_x5vwv3.js +1 -0
  174. package/phanpy/dist/assets/icons/upload-3-line-DgzwUJeW.js +1 -0
  175. package/phanpy/dist/assets/icons/user-4-line-BVSynZCp.js +1 -0
  176. package/phanpy/dist/assets/icons/user-add-2-line-BlGS5Q8q.js +1 -0
  177. package/phanpy/dist/assets/icons/user-add-line-BbXdHG4z.js +1 -0
  178. package/phanpy/dist/assets/icons/user-edit-line-BFAHOV0X.js +1 -0
  179. package/phanpy/dist/assets/icons/user-follow-line-BXux0wSd.js +1 -0
  180. package/phanpy/dist/assets/icons/user-star-line-DdYlpHLU.js +1 -0
  181. package/phanpy/dist/assets/icons/user-warning-line-Cj43j0_E.js +1 -0
  182. package/phanpy/dist/assets/icons/user-x-line-DIDgNlPH.js +1 -0
  183. package/phanpy/dist/assets/icons/volume-line-Bs390KQt.js +1 -0
  184. package/phanpy/dist/assets/icons/volume-mute-line-DzlzIqFZ.js +1 -0
  185. package/phanpy/dist/assets/icons/walk-line-yNXfB-md.js +1 -0
  186. package/phanpy/dist/assets/icons/world-2-line-CenkGIwj.js +1 -0
  187. package/phanpy/dist/assets/icons/zoom-in-line-CaENUphf.js +1 -0
  188. package/phanpy/dist/assets/icons/zoom-out-line-BDNk0EWo.js +1 -0
  189. package/phanpy/dist/assets/instances-BNPptnn-.json +333 -0
  190. package/phanpy/dist/assets/locales/ar-SA-CfheRbCu.js +1 -0
  191. package/phanpy/dist/assets/locales/ca-ES-DHRW86Tz.js +1 -0
  192. package/phanpy/dist/assets/locales/cs-CZ-CKoqEuA1.js +1 -0
  193. package/phanpy/dist/assets/locales/de-DE-ByRPMRFy.js +1 -0
  194. package/phanpy/dist/assets/locales/eo-UY-CPC7wLCS.js +1 -0
  195. package/phanpy/dist/assets/locales/es-ES-dJa0Fd9t.js +1 -0
  196. package/phanpy/dist/assets/locales/eu-ES-C3djlPR2.js +1 -0
  197. package/phanpy/dist/assets/locales/fa-IR-DTT490Ck.js +1 -0
  198. package/phanpy/dist/assets/locales/fi-FI-B23MCPuz.js +1 -0
  199. package/phanpy/dist/assets/locales/fr-FR-BcaQsO5C.js +1 -0
  200. package/phanpy/dist/assets/locales/gl-ES-BR-CVKBN.js +1 -0
  201. package/phanpy/dist/assets/locales/he-IL-CfheRbCu.js +1 -0
  202. package/phanpy/dist/assets/locales/hu-HU-CfheRbCu.js +1 -0
  203. package/phanpy/dist/assets/locales/it-IT-C1136UFV.js +1 -0
  204. package/phanpy/dist/assets/locales/ja-JP-CRZmRAhD.js +1 -0
  205. package/phanpy/dist/assets/locales/kab-Cz8xH_TT.js +1 -0
  206. package/phanpy/dist/assets/locales/ko-KR-CG9UiY4o.js +1 -0
  207. package/phanpy/dist/assets/locales/lt-LT-CJcI6sHZ.js +1 -0
  208. package/phanpy/dist/assets/locales/nb-NO-CfheRbCu.js +1 -0
  209. package/phanpy/dist/assets/locales/nl-NL-DxN4Yc1t.js +1 -0
  210. package/phanpy/dist/assets/locales/oc-FR-CfheRbCu.js +1 -0
  211. package/phanpy/dist/assets/locales/pl-PL-DkwGXf6P.js +1 -0
  212. package/phanpy/dist/assets/locales/pseudo-LOCALE-CQ4XxkQ0.js +1 -0
  213. package/phanpy/dist/assets/locales/pt-BR-nGL0HdFS.js +1 -0
  214. package/phanpy/dist/assets/locales/pt-PT-Cp17aj2z.js +1 -0
  215. package/phanpy/dist/assets/locales/ru-RU-0Y8cIoaK.js +1 -0
  216. package/phanpy/dist/assets/locales/th-TH-CfheRbCu.js +1 -0
  217. package/phanpy/dist/assets/locales/tok-CfheRbCu.js +1 -0
  218. package/phanpy/dist/assets/locales/tr-TR-CfheRbCu.js +1 -0
  219. package/phanpy/dist/assets/locales/uk-UA-C5E3dFBf.js +1 -0
  220. package/phanpy/dist/assets/locales/zh-CN-BHJi7_et.js +1 -0
  221. package/phanpy/dist/assets/locales/zh-TW-CfheRbCu.js +1 -0
  222. package/phanpy/dist/assets/main-BdqNbG-a.js +26 -0
  223. package/phanpy/dist/assets/main-BdqNbG-a.js.map +1 -0
  224. package/phanpy/dist/assets/mock-home-DGhR__He.js +2 -0
  225. package/phanpy/dist/assets/mock-home-DGhR__He.js.map +1 -0
  226. package/phanpy/dist/assets/multi-column-ROck0NVt.jpg +0 -0
  227. package/phanpy/dist/assets/multi-hashtag-timeline-DH5INVHi.jpg +0 -0
  228. package/phanpy/dist/assets/nested-comments-thread-hv59kZLc.jpg +0 -0
  229. package/phanpy/dist/assets/polyfill-force-H8sUkLGp.js +2 -0
  230. package/phanpy/dist/assets/polyfill-force-H8sUkLGp.js.map +1 -0
  231. package/phanpy/dist/assets/pwa-viewport-ogKbF51K.js +20 -0
  232. package/phanpy/dist/assets/pwa-viewport-ogKbF51K.js.map +1 -0
  233. package/phanpy/dist/assets/style-B1iLPTPR.css +2 -0
  234. package/phanpy/dist/assets/temml-DuyIQMei.js +97 -0
  235. package/phanpy/dist/assets/temml-DuyIQMei.js.map +1 -0
  236. package/phanpy/dist/assets/tinyld.light.node-DtbBhLYC.js +2 -0
  237. package/phanpy/dist/assets/tinyld.light.node-DtbBhLYC.js.map +1 -0
  238. package/phanpy/dist/assets/year-in-posts-B2lywqdx.png +0 -0
  239. package/phanpy/dist/assets/year-in-posts-DJv_star.js +3 -0
  240. package/phanpy/dist/assets/year-in-posts-DJv_star.js.map +1 -0
  241. package/phanpy/dist/compose/index.html +20 -0
  242. package/phanpy/dist/favicon.ico +0 -0
  243. package/phanpy/dist/index.html +73 -0
  244. package/phanpy/dist/logo-192.png +0 -0
  245. package/phanpy/dist/logo-512.png +0 -0
  246. package/phanpy/dist/logo-badge-72.png +0 -0
  247. package/phanpy/dist/logo-maskable-512.png +0 -0
  248. package/phanpy/dist/logo-monochrome-512.png +0 -0
  249. package/phanpy/dist/logo-monochrome-maskable-512.png +0 -0
  250. package/phanpy/dist/manifest.webmanifest +1 -0
  251. package/phanpy/dist/og-image-2.jpg +0 -0
  252. package/phanpy/dist/og-image.png +0 -0
  253. package/phanpy/dist/robots.txt +2 -0
  254. package/phanpy/dist/sw.js +25 -0
  255. package/phanpy/dist/version.json +1 -0
  256. package/run-agent.mjs +805 -0
  257. package/scripts/build-dist.mjs +37 -0
  258. package/scripts/verify-ui.mjs +60 -0
  259. package/ui/README.md +23 -0
  260. package/vendor/gate.cjs +132 -0
  261. package/vendor/idp-grant.cjs +394 -0
  262. package/vendor/jfetch.cjs +16 -0
  263. package/web/admin/admin.js +958 -0
  264. package/web/admin/bar.css +64 -0
  265. package/web/admin/bar.js +61 -0
  266. package/web/admin/client/client.js +66 -0
  267. package/web/admin/client/index.html +42 -0
  268. package/web/admin/index.html +493 -0
  269. package/web/admin/setup/index.html +172 -0
  270. package/web/admin/setup/setup.js +268 -0
  271. package/web/admin/window.css +55 -0
  272. package/web/admin/window.js +136 -0
  273. package/web/front/install.sh +69 -0
  274. package/web/front/new-account.html +424 -0
  275. package/web/front/run.html +138 -0
  276. package/web/front/solid-client-authn.bundle.js +2 -0
@@ -0,0 +1 @@
1
+ {"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","_jsx","type","accept","filter","mimeType","join","capture","onChange","e","files","target","mediaFile","Array","from","fileData","arrayBuffer","error","fileName","size","url","id","description","input","supportsCameraCapture","document","CharCountMeter","maxCharacters","charCount","useSnapshot","states","snapStates","composerCharacterCount","leftChars","class","_jsxs","title","style","children","value","max","#updateStyles","#requestUpdateLayout","#inputRef","#container","#cloneElement","#updateText","#styleObserver","#resizeObserver","#onDocumentScrollOrResize","#onInput","#input","#usingInput","#xOffset","#yOffset","#isLayoutUpdating","#updateLayout","#inputElement","#startOffset","#endOffset","#clampOffset","#createCloneRange","#styleClone","TextExpander","_getCustomEmojis","instance","masto","api","visibleEmojis","emojis","v1","customEmojis","list","visibleInPicker","searcher","Fuse","keys","findAllMatches","getCustomEmojis","pmem","expires","menu","createElement","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","searcherRef","textExpanderTextRef","hasTextExpanderRef","useImperativeHandle","setStyle","current","Object","assign","activated","useEffect","then","catch","console","textExpander","handleChange","provide","text","key","showMore","results","search","html","emoji","innerHTML","Promise","matched","searchResults","q","limit","resolve","avatarStatic","displayName","accountInstance","displayNameWithEmoji","roles","cur","uses","handleValue","item","detail","setTimeout","name","handleCommited","handleActivate","handleDeactivate","addEventListener","removeEventListener","_t","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","MENTION_RE","HASHTAG_RE","SCAN_RE","highlightText","Infinity","withinLimitHTML","exceedLimitHTML","htmlSegments","index","escapeHTML","autoResizeTextarea","textarea","getComputedStyle","writingMode","includes","offsetHeight","scrollHeight","clientHeight","innerHeight","offset","height","detectLangs","langDetector","langs","detect","slice","detectedLanguage","detectAll","Textarea","forwardRef","setText","useState","textareaProps","useThrottledResizeObserver","onResize","getBoundingClientRect","minHeight","slowHighlightPerf","composeHighlightRef","throttleHighlightText","useThrottledCallback","cancel","start","end","now","Date","debug","diff","dom","querySelectorAll","mark","remove","languages","autoCapitalize","autoComplete","autoCorrect","rows","cols","onKeyDown","hasTextExpander","selectionStart","textBeforeCursor","lastLine","preSpaces","anything","preventDefault","number","match","newBullet","setRangeText","setSelectionRange","dispatchEvent","onScroll","onPaste","pastedText","CUSTOM_EMOJIS_COUNT","EMOJI_SIZE_MIN","EMOJI_SIZE_MAX","EMOJI_SIZE_STEP","CustomEmojiButton","memo","onSelect","showCode","addEdges","parent","currentTarget","closest","rect","selfRect","targetClassList","classList","buffer","add","right","useCallback","shortcode","handleClick","undefined","onPointerEnter","onFocus","staticUrl","srcSet","media","src","alt","loading","decoding","_Fragment","CustomEmojisList","i18n","setMax","NF","locale","format","CUSTOM_EMOJI_SIZE","CustomEmojisModal","propInstance","onClose","defaultSearchTerm","uiState","setUIState","customEmojisList","setCustomEmojis","customInstance","setCustomInstance","recentlyUsedCustomEmojis","useMemo","store","account","get","customEmojisCatList","shortcodeSet","categoryMap","set","category","emojisCat","othersCat","scrollableRef","matches","setMatches","emojiSize","setEmojiSize","stored","onEmojiSizeDecrease","Math","newSize","local","del","onEmojiSizeIncrease","onFind","onSelectEmoji","queueMicrotask","unshift","recentlyUsedEmojiIndex","findIndex","inputRef","focus","hasCustomEmojis","onSubmit","autocorrect","autocapitalize","enterKeyHint","defaultValue","icon","FilePickerInput","maxMediaAttachments","mediaAttachments","mediaFiles","all","file","URL","createObjectURL","alert","PHANPY_GIPHY_API_KEY","GIPHY_API_KEY","GIFS_PER_PAGE","GIFPickerModal","setResults","formRef","qRef","currentOffset","fetchGIFs","log","top","behavior","query","api_key","rating","bundle","response","fetch","debouncedOnInput","poweredByGiphyURL","data","abrupt","fixed_height_small","images","alt_text","gif","theImage","strippedURL","strippedWebP","webpObj","origin","pathname","original","theURL","mp4","urlObj","srcset","referrerpolicy","onLoad","backgroundColor","pagination","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","fileSize","objectURL","blob","Blob","revokeObjectURL","configuration","checkMaxError","getCurrentInstanceConfiguration","imageSizeLimit","details","imageSize","videoSize","setMaxError","imageMatrix","imageMatrixLimit","videoMatrix","videoMatrixLimit","cancelled","fileObj","File","extractedDescription","suffixType","subtype","subTypeMap","suffixTypes","debouncedOnDescriptionChange","useDebouncedCallback","textareaRef","timer","showModal","clearTimeout","descTextarea","image","video","gifv","audio","setDescription","toastRef","hideToast","maxErrorToast","maxErrorText","err","tabIndex","setShowModal","naturalWidth","setImageMatrix","naturalHeight","playsinline","muted","disablePictureInPicture","preload","onLoadedMetadata","videoWidth","videoHeight","setVideoMatrix","maxError","duration","controls","portal","containerProps","align","position","overflow","menuButton","MenuItem","body","FormData","method","Error","showToast","message","Icon","params","r","components","MentionModal","accounts","setAccounts","relationshipsMap","setRelationshipsMap","selectedIndex","setSelectedIndex","loadRelationships","relationships","fetchRelationships","loadAccounts","term","debouncedLoadAccounts","selectAccount","socialAddress","useHotkeys","selectedAccount","enableOnFormTags","useKey","ignoreEventWhen","listRef","selectedItem","block","inline","relationship","avatarSize","showStats","showActivity","Loader","QuoteSuggestion","quoteSuggestion","hasCurrentQuoteStatus","onAccept","onCancel","Status","status","readOnly","supportedLanguagesMap","supportedLanguages","reduce","acc","l","code","common","native","camelToKebabCase","isPopOutNotSupported","expirySeconds","oneDay","expiresInFromExpiresAt","expiresAt","delta","parse","find","s","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","split","st","fixLanguage","language","fixedLanguage","Compose","replyToStatus","replyMode","editStatus","draftStatus","quoteStatus","standalone","hasOpener","sharedData","rtf","RTF","lf","warn","UID","uid","currentAccountInfo","currentAccount","info","statuses","supportedImagesVideosTypes","spoilerTextRef","visibility","setVisibility","quoteApprovalPolicy","setQuoteApprovalPolicy","setSensitive","sensitiveMedia","setSensitiveMedia","setLanguage","prevLanguage","scheduledAt","setScheduledAt","setQuoteSuggestion","localQuoteStatus","setLocalQuoteStatus","quoteCleared","setQuoteCleared","prefs","getPreferences","currentQuoteStatus","checkQuoteEligibility","supportsNativeQuote","quoteApproval","isSelf","isPublic","isMineAndPrivate","isQuoteAutomaticallyAccepted","isQuoteManuallyAccepted","processFiles","supportedFiles","unsupportedFiles","_i18n","allowedFiles","unfurledData","unfurlMastodonLink","oninputTextarea","cursorPosition","insertTextAtCursor","targetElement","textBeforeInsert","selectionEnd","spaceBeforeInsert","textAfterInsert","newText","focusLastFocusedField","lastFocusedFieldRef","composeContainerRef","lastFocusedEmojiFieldRef","isFormElement","composeContainer","handleFocus","spoilerText","mentions","Set","allMentions","authorMention","otherMentions","focusTextarea","composablePoll","statusSource","$select","postQuoteApprovalPolicy","toLowerCase","policy","o","cursorPos","initialText","composerState","minimized","canClose","beforeUnloadCopy","dataset","hasMediaAttachments","hasIDMediaAttachments","hasOnlyAcct","sameWithSource","confirmClose","yes","returnValue","handleBeforeUnload","getCharCount","updateCharCount","supportsCloseWatcher","CloseWatcher","escDownRef","enabled","keyup","modals","hasModal","hasOnlyComposer","useCloseWatcher","prevBackgroundDraft","getCurrentAccountNS","ns","saveUnsavedDraft","replyTo","username","quote","backgroundDraft","db","drafts","updatedAt","useInterval","handleItems","items","clipboardData","dataTransfer","kind","prev","handleDragover","showMentionPicker","setShowMentionPicker","showEmoji2Picker","showGIFPicker","autoDetectedLanguages","topSupportedLanguages","restLanguages","contentTranslationHideLanguages","settings","topLanguages","codeB","codeA","replyToStatusMonthsAgo","onMinimize","mediaButtonDisabled","cwButtonDisabled","onCWButtonClick","showPollButton","pollButtonDisabled","onPollButtonClick","setPoll","highlightLanguageField","highlightVisibilityField","opener","highlightQuoteApprovalPolicyField","disableQuotePolicy","addSubToolbarRef","showAddButton","BUTTON_WIDTH","scrollWidth","truncated","overTruncated","setShowAddButton","showScheduledAt","scheduledAtButtonDisabled","onScheduledAtClick","date","hideDisplayName","useAvatarStatic","newWin","__COMPOSE__","passData","__STATES__","showCompose","open","previewMode","activeElement","ctrlKey","metaKey","cancelable","formData","hasNoDescriptions","confirm","mediaPromises","removeNullUndefined","create","res","result","spoiler_text","quote_approval_policy","in_reply_to_id","newStatus","saveStatus","action","setShowEmoji2Picker","handlePastedLink","newAttachments","fileID","currentValue","lastCursorPos","pastedLinkPos","newValue","hasCurrentQuote","startViewTransition","MenuDivider","setShowGIFPicker","visibilityText","quoteURL","currentText","fallback","showCommon","commonText","localeCode2Text","trigger","emojiShortcode"],"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={async (e) => {\n const files = e.target.files;\n if (!files) return;\n const mediaFile = Array.from(files)[0];\n if (!mediaFile) return;\n let fileData;\n try {\n fileData = await mediaFile.arrayBuffer();\n } catch (err) {\n console.error('Failed to read file:', err);\n return;\n }\n setMediaAttachments((attachments) => [\n ...attachments,\n {\n fileData,\n fileName: mediaFile.name,\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 clampedPosition = Math.min(position, this.input.value.length);\n const caretRect = new InputRange(this.input, clampedPosition).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 isMatchStillValid(match) {\n return match.position <= this.input.value.length;\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 || !this.isMatchStillValid(match)) {\n this.match = null;\n this.deactivate();\n return;\n }\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 { api } from './api';\nimport pmem from './pmem';\n\nasync function _getCustomEmojis(instance) {\n const { masto } = api({ instance });\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 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)\n .then(([, searcher]) => {\n searcherRef.current = searcher;\n })\n .catch((e) => {\n console.error(e);\n });\n }, [instance]);\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 // writing-mode is vertical, don't do this\n if (getComputedStyle(textarea).writingMode.includes('vertical')) 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 NF from '../utils/nf';\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, onSelect, 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 const handleClick = useCallback(() => {\n onSelect(`:${emoji.shortcode}:`);\n }, [onSelect, emoji.shortcode]);\n\n return (\n <button\n type=\"button\"\n className=\"plain4\"\n onClick={handleClick}\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 onSelect={onSelect}\n />\n ))}\n {showMore && (\n <button\n type=\"button\"\n class=\"plain small\"\n onClick={() => setMax(max + CUSTOM_EMOJIS_COUNT)}\n >\n <Trans>{NF(i18n.locale).format(emojis.length - max)} more…</Trans>\n </button>\n )}\n </section>\n );\n});\n\nconst CUSTOM_EMOJI_SIZE = 'composer-customEmojiSize';\n\nfunction CustomEmojisModal({\n instance: propInstance,\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 [customInstance, setCustomInstance] = useState(null);\n const instance = customInstance || propInstance;\n\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);\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 }, [instance]);\n\n const customEmojisCatList = useMemo(() => {\n const shortcodeSet = new Set(customEmojis.map((e) => e.shortcode));\n const categoryMap = new Map();\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 (!categoryMap.has(emoji.category)) {\n categoryMap.set(emoji.category, []);\n }\n categoryMap.get(emoji.category).push(emoji);\n });\n const emojisCat = {\n '--recent--': recentlyUsedCustomEmojis.filter((emoji) =>\n shortcodeSet.has(emoji.shortcode),\n ),\n };\n if (othersCat.length) {\n emojisCat['--others--'] = othersCat;\n }\n for (const [category, list] of categoryMap) {\n emojisCat[category] = list;\n }\n return emojisCat;\n }, [customEmojis]);\n\n const scrollableRef = useRef();\n const [matches, setMatches] = useState(null);\n const [emojiSize, setEmojiSize] = useState(() => {\n const stored = Number(store.local.get(CUSTOM_EMOJI_SIZE));\n return stored && stored >= EMOJI_SIZE_MIN ? stored : 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\">\n {' '}\n •{' '}\n {import.meta.env.DEV ? (\n <button\n type=\"button\"\n class=\"textual\"\n onClick={() => {\n const newInstance = prompt(\n '[DEV] Change instance. Leave blank to reset',\n instance,\n );\n if (newInstance && newInstance.trim()) {\n setCustomInstance(newInstance.trim());\n } else {\n setCustomInstance(null);\n }\n }}\n >\n {instance}\n </button>\n ) : (\n instance\n )}\n </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 onSelect={onSelectEmoji}\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={async (e) => {\n const files = e.target.files;\n if (!files) return;\n\n let mediaFiles;\n try {\n mediaFiles = await Promise.all(\n Array.from(files).map(async (file) => ({\n fileData: await file.arrayBuffer(),\n fileName: file.name,\n type: file.type,\n size: file.size,\n url: URL.createObjectURL(file),\n id: null, // indicate uploaded state\n description: null,\n })),\n );\n } catch (err) {\n console.error('Failed to read file(s):', err);\n return;\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(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof exports?exports.ExifReader=t():e.ExifReader=t()}(Object(\"undefined\"!=typeof self?self:this),function(){return function(){\"use strict\";var e={d:function(t,n){for(var r in n)e.o(n,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:1,get:n[r]})},o:function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r:function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:1})}},t={};function n(e,t,n){for(var r=[],o=0;o<n&&t+o<e.byteLength;o++)r.push(e.getUint8(t+o));return i(r)}function r(e,t){for(var n=[],r=0;t+r<e.byteLength;){var o=e.getUint8(t+r);if(0===o)break;n.push(o),r++}return i(n)}function i(e){return e.map(function(e){return String.fromCharCode(e)}).join(\"\")}function o(){for(var e=1;e<arguments.length;e++)for(var t in arguments[e])arguments[0][t]=arguments[e][t];return arguments[0]}function u(e){var t=e.substring(e.indexOf(\",\")+1);if(-1!==e.indexOf(\";base64\")){if(\"undefined\"!=typeof atob)return Uint8Array.from(atob(t),function(e){return e.charCodeAt(0)}).buffer;if(\"undefined\"==typeof Buffer)return;return\"undefined\"!=typeof Buffer.from?Buffer.from(t,\"base64\"):new Buffer(t,\"base64\")}var n=decodeURIComponent(t);return\"undefined\"!=typeof Buffer?\"undefined\"!=typeof Buffer.from?Buffer.from(n):new Buffer(n):Uint8Array.from(n,function(e){return e.charCodeAt(0)}).buffer}e.r(t),e.d(t,{default:function(){return Mr},errors:function(){return _r},load:function(){return Vr},loadView:function(){return qr}});var a=void 0;function f(e,t,n){var r=new DecompressionStream(t),i=new Blob([e]).stream().pipeThrough(r).getReader(),o=[],u=0;return function e(){return i.read().then(function(t){var r=t.done,a=t.value;return r?function(e,t){for(var n=new Uint8Array(t),r=0,i=0;i<e.length;i++)n.set(e[i],r),r+=e[i].byteLength;return n.buffer}(o,u):(u+=a.byteLength)>n?i.cancel().then(function(){return c(n)}):(o.push(a),e())})}()}function s(e,t,n){return\"dataview\"===t?new DataView(e):new TextDecoder(n).decode(e)}function c(e){return\"undefined\"!=typeof console&&\"function\"==typeof console.warn&&console.warn(\"ExifReader: skipped a compressed metadata block that would exceed the maximum decompressed size of \".concat(e,\" bytes.\")),Promise.reject(\"Decompressed metadata exceeded the maximum allowed size of \".concat(e,\" bytes.\"))}var d=200,l=299,p=416;function g(e){return\"string\"==typeof e}function h(e){return\"undefined\"!=typeof File&&e instanceof File}function v(e){return/^data:[^;,]*(;base64)?,/.test(e)}function m(e){return e&&Number.isInteger(e.length)&&e.length>=0?{start:0,end:e.length}:{start:0}}function y(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.start,r=void 0===n?0:n,i=t.end,o={method:\"GET\"};return(r>0||void 0!==i&&i!==1/0)&&(o.headers={range:b(r,i)}),fetch(e,o).then(function(e){var t=e&&\"number\"==typeof e.status?e.status:void 0;if(void 0!==t&&!function(e){return e>=d&&e<=l?1:e===p}(t)){var n=e.statusText||\"\";return Promise.reject(Error(\"Could not fetch file: \".concat(t,\" \").concat(n).trim()))}var r=function(e){if(e&&e.headers&&\"function\"==typeof e.headers.get){var t=e.headers.get(\"Content-Range\");if(t){var n=/\\/(\\d+|\\*)$/.exec(t);if(n&&\"*\"!==n[1])return parseInt(n[1],10)}var r=e.headers.get(\"Content-Length\");if(r){var i=parseInt(r,10);if(Number.isFinite(i))return i}}}(e);return Promise.resolve(e.arrayBuffer()).then(function(e){return{buffer:e,totalSize:r,status:t}})})}function b(e,t){return void 0===t||t===1/0?\"bytes=\".concat(e,\"-\"):\"bytes=\".concat(e,\"-\").concat(t-1)}function x(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.start,r=void 0===n?0:n,i=t.end;return new Promise(function(t,n){var o={};(r>0||void 0!==i&&i!==1/0)&&(o.headers={range:b(r,i)});var u=function(e){return/^https:\\/\\//.test(e)?require(\"https\").get:require(\"http\").get}(e);u(e,o,function(e){if(e.statusCode>=d&&e.statusCode<=l){var r=A(e),i=[];e.on(\"data\",function(e){return i.push(Buffer.from(e))}),e.on(\"error\",function(e){return n(e)}),e.on(\"end\",function(){return t({buffer:Buffer.concat(i),totalSize:r,status:e.statusCode})})}else e.statusCode===p?(e.resume(),t({buffer:Buffer.alloc(0),totalSize:A(e),status:e.statusCode})):(n(Error(\"Could not fetch file: \".concat(e.statusCode,\" \").concat(e.statusMessage))),e.resume())}).on(\"error\",function(e){return n(e)})})}function A(e){if(e&&e.headers){var t=e.headers[\"content-range\"];if(t){var n=/\\/(\\d+|\\*)$/.exec(t);if(n&&\"*\"!==n[1])return parseInt(n[1],10)}var r=e.headers[\"content-length\"];if(r){var i=parseInt(r,10);if(Number.isFinite(i))return i}}}function T(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.start,r=void 0===n?0:n,i=t.end,o=t.totalSize;return new Promise(function(t,n){var u=function(){try{return require(\"fs\")}catch(e){return}}();u.open(e,function(a,f){if(a)return n(a);!function(e,t,n,r){if(void 0!==n)return r(null,n);e.stat(t,function(e,t){return r(e,e?void 0:t.size)})}(u,e,o,function(o,a){if(o)return u.close(f,function(){return n(o)});var s=void 0===i||i===1/0||i>a?a:i,c=Math.min(Math.max(0,r),s),d=s-c,l=Buffer.alloc(d);if(0===d)return u.close(f,function(n){return I(e,n,l,a,t)});u.read(f,{buffer:l,length:d,position:c},function(r){if(r)return u.close(f,function(){return n(r)});u.close(f,function(n){return I(e,n,l,a,t)})})})})})}function I(e,t,n,r,i){t&&console.warn(\"Could not close file \".concat(e,\":\"),t),i({buffer:n,totalSize:r})}function w(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.start,r=void 0===n?0:n,i=t.end;return new Promise(function(t,n){var o=new FileReader,u=\"number\"==typeof e.size?e.size:void 0;if(o.onload=function(e){return t({buffer:e.target.result,totalSize:u})},o.onerror=function(){return n(o.error)},e&&\"function\"==typeof e.slice&&(r>0||void 0!==i&&i!==1/0)){var a=void 0===i||i===1/0?u:i;o.readAsArrayBuffer(e.slice(r,a))}else o.readAsArrayBuffer(e)})}function S(e){return e instanceof ArrayBuffer?new Uint8Array(e):\"undefined\"!=typeof Buffer&&Buffer.isBuffer(e)||ArrayBuffer.isView(e)?new Uint8Array(e.buffer,e.byteOffset,e.byteLength):new Uint8Array(e)}var P=131072,O=4,C='length: \"auto\" could not locate metadata in this file (no metadata blocks found after reading the file — e.g. plain TIFF, bare JPEG XL codestream, or a file with no recognizable metadata).',R='length: \"auto\" is not supported for this file type (no leading metadata container — e.g. plain TIFF or bare JPEG XL codestream).';function L(e){return function(e,r){if(\"undefined\"==typeof Promise)throw Error(\"Promise is required when async mode is enabled.\");var i=o({},r,{async:1});return g(e)?function(e,r){return/^\\w+:\\/\\//.test(e)?\"undefined\"!=typeof fetch?n({readRange:function(t,n){return y(e,{start:t,end:n})},options:r}):n({readRange:function(t,n){return x(e,{start:t,end:n})},options:r}):v(e)?t(u(e),r):n({readRange:function(t,n,r){return T(e,{start:t,end:n,totalSize:r?r.totalSize:void 0})},options:r})}(e,i):h(e)?function(e,t){return n({readRange:function(t,n){return w(e,{start:t,end:n})},options:t})}(e,i):t(e,i)};function t(t,n){return Promise.resolve().then(function(){return e(t,n)}).then(function(e){if(!e||!e.metadataRange)throw Error(R);var n=e.metadataRange.end;return e.metadataRange.buffer=function(e,t){return\"undefined\"!=typeof Buffer&&Buffer.isBuffer(e)?Buffer.from(e.subarray(0,t)):e instanceof ArrayBuffer||\"undefined\"!=typeof SharedArrayBuffer&&e instanceof SharedArrayBuffer?e.slice(0,t):ArrayBuffer.isView(e)?e.buffer.slice(e.byteOffset,e.byteOffset+t):e}(t,n),e.metadataRange.fetched=k(e.metadataRange.buffer),e.metadataRange.requests=0,e})}function n(e){return r({readRange:e.readRange,options:e.options,buffer:null,fetched:0,requests:0,totalSize:void 0,need:P,iter:0})}function r(t){return t.iter>=O?i(t):(void 0!==t.totalSize&&(t.need=Math.min(t.need,t.totalSize)),t.need<=t.fetched?i(t):t.readRange(t.fetched,t.need,{totalSize:t.totalSize}).then(function(n){return t.requests++,n.status===p?function(t){return t.readRange(0,1/0,{totalSize:void 0}).then(function(n){return t.requests++,t.buffer=n.buffer,t.fetched=k(t.buffer),void 0!==n.totalSize&&(t.totalSize=n.totalSize),Promise.resolve(e(t.buffer,t.options))}).then(function(e){if(!e||!e.metadataRange)throw Error(C);return U(e,t.buffer,t.fetched,t.requests)})}(t):(E(t,n),Promise.resolve(e(t.buffer,t.options)).then(function(e){return function(e,t){var n=t&&t.metadataRange;if(n&&n.complete)return U(t,e.buffer,e.fetched,e.requests);var i=void 0!==e.totalSize&&e.fetched>=e.totalSize;if(!n&&i)throw Error(C);var o=function(e){var t=e.range,n=e.totalSize,r=e.fetched;return t?Math.min(Math.max(t.end,2*r),void 0!==n?n:1/0):void 0!==n?n:2*r}({range:n,totalSize:e.totalSize,fetched:e.fetched});if(o<=e.fetched){if(n)return U(t,e.buffer,e.fetched,e.requests);throw Error(C)}return e.need=o,e.iter++,r(e)}(t,e)}))}))}function i(t){return console.warn('ExifReader: length:\"auto\" did not converge in '.concat(O,\" iterations; falling back to full read.\")),(void 0!==t.totalSize&&t.fetched<t.totalSize?t.readRange(t.fetched,t.totalSize,{totalSize:t.totalSize}).then(function(e){t.requests++,E(t,e)}):void 0===t.totalSize?t.readRange(t.fetched,1/0,{totalSize:t.totalSize}).then(function(e){t.requests++,E(t,e)}):Promise.resolve()).then(function(){return Promise.resolve(e(t.buffer,t.options))}).then(function(e){if(!e||!e.metadataRange)throw Error(C);return U(e,t.buffer,t.fetched,t.requests)})}}function E(e,t){if(t.status===d&&e.fetched>0)return e.buffer=t.buffer,e.fetched=k(e.buffer),void(void 0!==t.totalSize&&(e.totalSize=t.totalSize));void 0!==t.totalSize&&void 0===e.totalSize&&(e.totalSize=t.totalSize),e.buffer=function(e,t){if(!e)return t;if(!t)return e;if(\"undefined\"!=typeof Buffer&&Buffer.isBuffer(e)&&Buffer.isBuffer(t))return Buffer.concat([e,t]);var n=S(e),r=S(t),i=new Uint8Array(n.byteLength+r.byteLength);return i.set(n,0),i.set(r,n.byteLength),i.buffer}(e.buffer,t.buffer),e.fetched=k(e.buffer)}function U(e,t,n,r){var i=e.metadataRange.end;return e.metadataRange.buffer=function(e,t){return!e||\"number\"!=typeof t||t<0?e:\"undefined\"!=typeof Buffer&&Buffer.isBuffer(e)?Buffer.from(e.subarray(0,Math.min(t,e.length))):e instanceof ArrayBuffer||\"undefined\"!=typeof SharedArrayBuffer&&e instanceof SharedArrayBuffer?e.slice(0,Math.min(t,e.byteLength)):e}(t,i),e.metadataRange.fetched=n,e.metadataRange.requests=r,e}function k(e){return e?\"number\"==typeof e.byteLength?e.byteLength:\"number\"==typeof e.length?e.length:0:0}function N(e){return N=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},N(e)}function j(e){var t=function(e){if(\"object\"!=N(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=N(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return e+\"\"}(e);return\"symbol\"==N(t)?t:t+\"\"}var B=function(){return e=function e(t){if(function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),function(e){return\"object\"!==N(e)||void 0===e.length||void 0===e.readUInt8||void 0===e.readUInt16LE||void 0===e.readUInt16BE||void 0===e.readUInt32LE||void 0===e.readUInt32BE||void 0===e.readInt32LE||void 0===e.readInt32BE}(t))throw Error(\"DataView: Passed buffer type is unsupported.\");this.buffer=t,this.byteLength=this.buffer.length},(t=[{key:\"getUint8\",value:function(e){return this.buffer.readUInt8(e)}},{key:\"getUint16\",value:function(e,t){return t?this.buffer.readUInt16LE(e):this.buffer.readUInt16BE(e)}},{key:\"getUint32\",value:function(e,t){return t?this.buffer.readUInt32LE(e):this.buffer.readUInt32BE(e)}},{key:\"getInt32\",value:function(e,t){return t?this.buffer.readInt32LE(e):this.buffer.readInt32BE(e)}}])&&function(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||0,r.configurable=1,\"value\"in r&&(r.writable=1),Object.defineProperty(e,j(r.key),r)}}(e.prototype,t),Object.defineProperty(e,\"prototype\",{writable:0}),e;var e,t}();function G(e){return e[0][0]/e[0][1]+e[1][0]/e[1][1]/60+e[2][0]/e[2][1]/3600}var F=18761,z=19789,D={BIG_ENDIAN:z,LITTLE_ENDIAN:F,getByteOrder:function(e,t){if(e.getUint16(t)===F)return F;if(e.getUint16(t)===z)return z;throw Error(\"Illegal byte order value. Faulty image.\")}},M=2,_=65496,V=2,H=4,q=2,W=10,X=18,K=33,Y=79,$=65472,J=65474,Z=65476,Q=65499,ee=65501,te=65498,ne=65504,re=65505,ie=65517,oe=65519,ue=65534,ae=65535,fe=\"Exif\",se=\"http://ns.adobe.com/xap/1.0/\\0\",ce=\"http://ns.adobe.com/xmp/extension/\\0\",de=\"Photoshop 3.0\",le=\"8BIM\";function pe(e,t){var r=fe.length;return e.getUint16(t)===re&&n(e,t+H,r)===fe&&0===e.getUint8(t+H+r)}function ge(e,t){return e.getUint16(t)===re&&function(e,t){var r=se.length;return n(e,t+H,r)===se}(e,t)}function he(e,t){return e.getUint16(t)===re&&function(e,t){var r=ce.length;return n(e,t+H,r)===ce}(e,t)}function ve(e,t){return{dataOffset:e+K,length:t-(K-q)}}function me(e,t){return{dataOffset:e+Y,length:t-(Y-q)}}function ye(e,t){var r=de.length,i=le.length,o=t+H+r+1;return e.getUint16(t)===ie&&n(e,t+H,r)===de&&0===e.getUint8(t+H+r)&&n(e,o,i)===le}function be(e,t){var n=e.getUint16(t);return n>=ne&&n<=oe||n===ue||n===$||n===J||n===Z||n===Q||n===ee||n===te}function xe(e,t){return e.getUint16(t)===ae}function Ae(e,t,n,r){var i=function(e,t,n){try{if(t+8>n)return;var r=e.getUint16(t+0),i=r===D.LITTLE_ENDIAN;if(!i&&r!==D.BIG_ENDIAN)return;if(42!==e.getUint16(t+2,i))return;var o=t+e.getUint32(t+4,i);if(o+2>n)return;var u=e.getUint16(o,i);return{ifdEntries:u,isValid:o+(2+12*u+4)<=n&&u>0}}catch(e){return}}(e,r,t+q+n);if(!i)return 0;var o=Number.isInteger(i.ifdEntries)?i.ifdEntries:0;return(i.isValid?1e9:0)+1e6*o+n}var Te=\"‰PNG\\r\\n\u001a\\n\",Ie=4,we=4,Se=0,Pe=Ie,Oe=Ie+we,Ce=\"XML:com.adobe.xmp\\0\",Re=\"tEXt\",Le=\"iTXt\",Ee=\"zTXt\",Ue=\"pHYs\",ke=\"tIME\",Ne=\"eXIf\";function je(e,t){return n(e,t+Pe,we)===Le&&n(e,t+Oe,Ce.length)===Ce}function Be(e,t,r){var i=n(e,t+Pe,we);return i===Re||i===Le||i===Ee&&r}function Ge(e,t){return n(e,t+Pe,we)===Ne}function Fe(e,t){var r=[Ue,ke],i=n(e,t+Pe,we);return r.includes(i)}function ze(e,t){t+=Oe+Ce.length+1+1;for(var n=0;n<2&&t<e.byteLength;)0===e.getUint8(t)&&n++,t++;if(!(n<2))return t}function De(e,t,n){return t+n<=e.byteLength}function Me(e,t,n,r,i,o,u,a){if(void 0===a)return[];for(var f=[],s=n.items,c=0;c<a;c++){var d={extents:[]};d.itemId=_e(e,s,t),s+=r.item.itemId,d.constructionMethod=1===t||2===t?15&e.getUint16(s):void 0,s+=r.item.constructionMethod,d.dataReferenceIndex=e.getUint16(s),s+=r.item.dataReferenceIndex,d.baseOffset=He(e,s,r.item.baseOffset),s+=r.item.baseOffset,d.extentCount=e.getUint16(s),s+=r.item.extentCount;for(var l=0;l<d.extentCount;l++){var p={};p.extentIndex=Ve(e,t,s,u),s+=r.item.extent.extentIndex,p.extentOffset=He(e,s,i),s+=r.item.extent.extentOffset,p.extentLength=He(e,s,o),s+=r.item.extent.extentLength,d.extents.push(p)}f.push(d)}return f}function _e(e,t,n){return n<2?e.getUint16(t):2===n?e.getUint32(t):void 0}function Ve(e,t,n,r){if((1===t||2===t)&&r>0)return He(e,n,r)}function He(e,t,n){return 4===n?e.getUint32(t):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(e,t){return e.getUint32(t+4)}(e,t)):0}var qe=1165519206,We=1835625829;function Xe(e,t){if(De(e,t,8))try{var i=function(e,t){var n=e.getUint32(t);if(function(e){return 0===e}(n))return{length:e.byteLength-t,contentOffset:t+4+4};if(function(e){return 1===e}(n)){if(!De(e,t,16))return{length:0,contentOffset:t+4+4};if(function(e,t){return 0===e.getUint32(t+8)}(e,t))return{length:e.getUint32(t+12),contentOffset:t+4+4+8}}return{length:n,contentOffset:t+4+4}}(e,t),o=i.length,u=i.contentOffset;if(o<8)return;var a=e.getUint32(t+4);if(1718909296===a)return function(e,t,r){return{type:\"ftyp\",majorBrand:n(e,t,4),length:r}}(e,u,o);if(1768977008===a)return function(e,t,n,r){return{type:\"iprp\",subBoxes:nt(e,n,r-(n-t)),length:r}}(e,t,u,o);if(1768973167===a)return function(e,t,n,r){return{type:\"ipco\",properties:nt(e,n,r-(n-t)),length:r}}(e,t,u,o);if(1668246642===a)return function(e,t,n){return{type:\"colr\",icc:tt(e,t),length:n}}(e,u,o);if(1768186228===a)return function(e,t){return{type:\"idat\",contentOffset:e,length:t}}(u,o);if(!De(e,u,1))return;var f=e.getUint8(u);return 1835365473===a?function(e,t,n,r){return{type:\"meta\",subBoxes:nt(e,n+3,r-(n+3-t)),length:r}}(e,t,u+1,o):1768714083===a?function(e,t,n,r){var i=function(e,t){var n={item:{dataReferenceIndex:2,extentCount:2,extent:{}}};e<2?(n.itemCount=2,n.item.itemId=2):2===e&&(n.itemCount=4,n.item.itemId=4),n.item.constructionMethod=1===e||2===e?2:0;var r={offsetSize:t,lengthSize:t,baseOffsetSize:t+1,indexSize:t+1};return r.itemCount=t+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}}(t,n+3),o=i.offsets,u=i.sizes,a=e.getUint8(o.offsetSize)>>4;u.item.extent.extentOffset=a;var f=15&e.getUint8(o.lengthSize);u.item.extent.extentLength=f;var s=e.getUint8(o.baseOffsetSize)>>4;u.item.baseOffset=s;var c=function(e,t,n){if(1===n||2===n)return 15&e.getUint8(t)}(e,o.indexSize,t);u.item.extent.extentIndex=void 0!==c?c:0;var d=function(e,t,n){return n<2?e.getUint16(t):2===n?e.getUint32(t):void 0}(e,o.itemCount,t);return{type:\"iloc\",items:Me(e,t,o,u,a,f,c,d),length:r}}(e,f,u+1,o):1768517222===a?function(e,t,n,r,i){var o=function(e,t){var n={entryCount:t+3},r={};return r.entryCount=0===e?2:4,n.itemInfos=n.entryCount+r.entryCount,{offsets:n}}(n,r),u=o.offsets;return{type:\"iinf\",itemInfos:nt(e,u.itemInfos,i-(u.itemInfos-t)),length:i}}(e,t,f,u+1,o):1768842853===a?function(e,t,n,i,o){i+=3;var u={type:\"infe\",length:o};return 0!==n&&1!==n||(u.itemId=e.getUint16(i),i+=2,u.itemProtectionIndex=e.getUint16(i),i+=2,u.itemName=r(e,i),i+=u.itemName.length+1),n>=2&&(2===n?(u.itemId=e.getUint16(i),i+=2):3===n&&(u.itemId=e.getUint32(i),i+=4),u.itemProtectionIndex=e.getUint16(i),i+=2,u.itemType=e.getUint32(i),i+=4,u.itemName=r(e,i),i+=u.itemName.length+1,u.itemType===We?(u.contentType=r(e,i),t+o>(i+=u.contentType.length+1)&&(u.contentEncoding=r(e,i),i+=u.contentEncoding.length+1)):1970432288===u.itemType&&(u.itemUri=r(e,i),i+=u.itemUri.length+1)),u}(e,t,f,u+1,o):{type:void 0,length:o}}catch(e){return}}function Ke(e,t,n,r){if(e)for(var i=0;i<t.extents.length;i++){var o=t.extents[i],u=Ye(t,o,r);void 0!==u&&e.push({type:n,start:u,end:u+o.extentLength})}}function Ye(e,t,n){var r=e.constructionMethod;return void 0===r||0===r?e.baseOffset+t.extentOffset:1===r&&void 0!==n?n+e.baseOffset+t.extentOffset:void 0}function $e(e){var t=e.subBoxes.find(function(e){return\"idat\"===e.type});return t?t.contentOffset:void 0}function Je(e){2===e.constructionMethod&&console.warn(\"This file uses iloc constructionMethod 2 (item_offset) which is currently not supported by ExifReader. Contact the maintainer to get it fixed.\")}function Ze(e,t,n){for(var r=[],i=0,o=0;o<t.extents.length;o++){var u=t.extents[o],a=Ye(t,u,n);if(void 0===a||a+u.extentLength>e.byteLength)return;if(r.push({start:a,length:u.extentLength}),(i+=u.extentLength)>e.byteLength)return}for(var f=new Uint8Array(i),s=0,c=0;c<r.length;c++){for(var d=r[c],l=d.start,p=d.length,g=0;g<p;g++)f[s+g]=e.getUint8(l+g);s+=p}return new DataView(f.buffer)}function Qe(e,t){return e.subBoxes.find(function(e){return\"iloc\"===e.type}).items.find(function(e){return e.itemId===t})}function et(e,t){return t+4+e.getUint32(t)}function tt(e,t){var r=n(e,t,4);if(\"prof\"===r||\"rICC\"===r)return{offset:t+4,length:e.getUint32(t+4),chunkNumber:1,chunksTotal:1}}function nt(e,t,n){for(var r=[qe,We],i=[],o=t;o<t+n;){var u=Xe(e,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 rt=0,it=\"<?xpacket begin\",ot=[\"<?xpacket end=\",\"</x:xmpmeta>\"],ut={parseAppMarkers:function(e,t,r){var i=r?[]:void 0;if(function(e){return!!e&&e.byteLength>=M&&e.getUint16(0)===_}(e))return at(function(e,t){for(var n,r,i,o,u,a,f,s,c=V,d=0,l=0;c+H+5<=e.byteLength;){var p=void 0;if(e.getUint16(c)===te&&(l=1),pe(e,c)){n=e.getUint16(c+q),d++;var g=c+W;if(1===d)a=g,f=c,s=n;else if(2===d){u=Ae(e,f,s,a);var h=Ae(e,c,n,g);h>u&&(u=h,a=g,f=c,s=n)}else{var v=Ae(e,c,n,g);v>u&&(u=v,a=g,f=c,s=n)}r=a,p=\"exif\"}else if(ge(e,c))o||(o=[]),n=e.getUint16(c+q),o.push(ve(c,n)),p=\"xmp\";else if(he(e,c))o||(o=[]),n=e.getUint16(c+q),o.push(me(c,n)),p=\"xmp\";else if(ye(e,c))n=e.getUint16(c+q),i=c+X,p=\"iptc\";else{if(!be(e,c)){if(xe(e,c)){c++;continue}break}n=e.getUint16(c+q)}t&&p&&t.push({type:p,start:c,end:c+q+n}),c+=q+n}return d>1&&function(e){\"undefined\"!=typeof console&&\"function\"==typeof console.warn&&console.warn(\"ExifReader: Found \".concat(e,\" Exif segments (APP1). \")+\"Will pick the best candidate segment.\")}(d),t&&(!l&&c+q<=e.byteLength&&e.getUint16(c)===te&&(l=1),t.truncated=!l),{hasAppMarkers:c>V,fileDataOffset:void 0,jfifDataOffset:void 0,tiffHeaderOffset:r,iptcDataOffset:i,xmpChunks:o,iccChunks:void 0,mpfDataOffset:void 0}}(e,i),\"jpeg\",\"JPEG\",i);if(function(e){return!!e&&n(e,0,Te.length)===Te}(e))return at(function(e,t,r){for(var i={hasAppMarkers:0},o=Te.length,u=0;o+Ie+we<=e.byteLength;){var a=void 0,f=e.getUint32(o+Se);if(r&&\"IEND\"===n(e,o+Pe,we)&&(u=1),je(e,o)){var s=ze(e,o);void 0!==s&&(i.hasAppMarkers=1,i.xmpChunks=[{dataOffset:s,length:f-(s-(o+Oe))}],a=\"xmp\")}else if(Be(e,o,t)){i.hasAppMarkers=1;var c=n(e,o+Pe,we);i.pngTextChunks||(i.pngTextChunks=[]),i.pngTextChunks.push({length:f,type:c,offset:o+Oe}),a=\"png\"}else Ge(e,o)?(i.hasAppMarkers=1,i.tiffHeaderOffset=o+Oe,a=\"exif\"):Fe(e,o)&&(i.hasAppMarkers=1,i.pngChunkOffsets||(i.pngChunkOffsets=[]),i.pngChunkOffsets.push(o+Se),a=\"png\");var d=f+Ie+we+4;r&&a&&r.push({type:a,start:o,end:o+d}),o+=d}return r&&(r.truncated=!u),i}(e,t,i),\"png\",\"PNG\",i);if(function(e){if(!e)return 0;try{var t=Xe(e,0);return void 0!==t&&-1!==[\"heic\",\"heix\",\"hevc\",\"hevx\",\"heim\",\"heis\",\"hevm\",\"hevs\",\"mif1\"].indexOf(t.majorBrand)}catch(e){return 0}}(e))return at(function(e,t){return function(e,t){var n={},r=function(e){for(var t=0;t+4+4<=e.byteLength;){var n=Xe(e,t);if(void 0===n)break;if(\"meta\"===n.type)return n;t+=n.length}}(e);if(!r)return{hasAppMarkers:0};var i=function(e,t,n){try{var r=function(e){return e.subBoxes.find(function(e){return\"iinf\"===e.type}).itemInfos.find(function(e){return e.itemType===qe})}(t).itemId,i=Qe(t,r);Je(i);var o=$e(t);if(Ke(n,i,\"exif\",o),i.extents.length>1){var u=Ze(e,i,o);if(void 0===u)return;return{tiffHeaderOffset:et(u,0),dataView:u}}var a=Ye(i,i.extents[0],o);if(void 0===a)return;return{tiffHeaderOffset:et(e,a)}}catch(e){return}}(e,r,t);void 0!==i&&(n.tiffHeaderOffset=i.tiffHeaderOffset,void 0!==i.dataView&&(n.exifDataView=i.dataView));var o=function(e,t,n){try{var r=function(e){return e.subBoxes.find(function(e){return\"iinf\"===e.type}).itemInfos.find(function(e){return e.itemType===We&&\"application/rdf+xml\"===e.contentType})}(t).itemId,i=Qe(t,r);Je(i);var o=$e(t);if(Ke(n,i,\"xmp\",o),i.extents.length>1){var u=Ze(e,i,o);if(void 0===u)return;return{chunks:[{dataOffset:0,length:u.byteLength}],dataView:u}}var a=i.extents[0],f=Ye(i,a,o);if(void 0===f)return;return{chunks:[{dataOffset:f,length:a.extentLength}]}}catch(e){return}}(e,r,t);return void 0!==o&&(n.xmpChunks=o.chunks,void 0!==o.dataView&&(n.xmpDataView=o.dataView)),n.hasAppMarkers=void 0!==n.tiffHeaderOffset||void 0!==n.xmpChunks||void 0!==n.iccChunks,n}(e,t)}(e,i),\"heic\",\"HEIC\",i);if(function(e){return!!e&&\"RIFF\"===n(e,0,4)&&\"WEBP\"===n(e,8,4)}(e))return at(function(e,t){for(var r,i,o,u=12,a=0;u+8<e.byteLength;){var f=n(e,u,4),s=e.getUint32(u+4,1),c=void 0;\"EXIF\"===f?(a=1,r=\"Exif\\0\\0\"===n(e,u+8,6)?u+8+6:u+8,c=\"exif\"):\"XMP \"===f?(a=1,i=[{dataOffset:u+8,length:s}],c=\"xmp\"):\"VP8X\"===f&&(a=1,o=u+8,c=\"riff\");var d=8+(s%2==0?s:s+1);t&&c&&t.push({type:c,start:u,end:u+d}),u+=d}return{hasAppMarkers:a,tiffHeaderOffset:r,xmpChunks:i,iccChunks:void 0,vp8xChunkOffset:o}}(e,i),\"webp\",\"WebP\",i);if(function(e){return!!e&&n(e,rt,it.length)===it}(e))return at(function(e,t){var r=[];return r.push({dataOffset:rt,length:e.byteLength}),t&&(t.push({type:\"xmp\",start:0,end:e.byteLength}),t.truncated=!function(e){for(var t=n(e,0,e.byteLength),r=0;r<ot.length;r++)if(-1!==t.indexOf(ot[r]))return 1;return 0}(e)),{xmpChunks:r}}(e,i),\"xml\",\"XML\",i);throw Error(\"Invalid image format\")}};function at(e,t,n,r){var i=o({},e,{fileType:{value:t,description:n}});return void 0!==r&&(i.metadataBlocks=r,i.metadataTruncated=!!r.truncated),i}var ft={270:\"ImageDescription\",700:\"ApplicationNotes\",33723:\"IPTC-NAA\",34665:\"Exif IFD Pointer\"};function st(e){return st=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},st(e)}function ct(e,t,n){return(t=function(e){var t=function(e){if(\"object\"!=st(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=st(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return e+\"\"}(e);return\"symbol\"==st(t)?t:t+\"\"}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:1,configurable:1,writable:1}):e[t]=n,e}var dt=o({},ft,{}),lt=\"exif\",pt=\"interoperability\",gt=\"pentax\",ht=ct(ct(ct(ct(ct(ct(ct(ct({},\"0th\",dt),\"1st\",ft),lt,dt),\"gps\",{}),pt,{}),\"mpf\",{}),\"canon\",{}),gt,{}),vt={1:1,2:1,3:2,4:4,5:8,7:1,9:4,10:8,13:4},mt={BYTE:1,ASCII:2,SHORT:3,LONG:4,RATIONAL:5,UNDEFINED:7,SLONG:9,SRATIONAL:10,IFD:13},yt={getAsciiValue:function(e){return e.map(function(e){return String.fromCharCode(e)})},getByteAt:bt,getAsciiAt:function(e,t){return e.getUint8(t)},getShortAt:function(e,t,n){return e.getUint16(t,n===D.LITTLE_ENDIAN)},getLongAt:xt,getRationalAt:function(e,t,n){return[xt(e,t,n),xt(e,t+4,n)]},getUndefinedAt:function(e,t){return bt(e,t)},getSlongAt:At,getSrationalAt:function(e,t,n){return[At(e,t,n),At(e,t+4,n)]},getIfdPointerAt:function(e,t,n){return xt(e,t,n)},typeSizes:vt,tagTypes:mt,getTypeSize:function(e){if(void 0===mt[e])throw Error(\"No such type found.\");return vt[mt[e]]}};function bt(e,t){return e.getUint8(t)}function xt(e,t,n){return e.getUint32(t,n===D.LITTLE_ENDIAN)}function At(e,t,n){return e.getInt32(t,n===D.LITTLE_ENDIAN)}var Tt={exif:1,iptc:1,photoshop:1,mpf:1,makerNotes:1},It={exif:1,iptc:1,xmp:1,icc:1,photoshop:1,makerNotes:1,mpf:1,file:1,jfif:1,png:1,riff:1,gif:1,gps:1,composite:1,thumbnail:1},wt={exifIfdPointer:\"Exif IFD Pointer\",gpsInfoIfdPointer:\"GPS Info IFD Pointer\",interoperabilityIfdPointer:\"Interoperability IFD Pointer\"},St={thumbnail:[\"JPEGInterchangeFormat\",\"JPEGInterchangeFormatLength\"],iptc:[\"IPTC-NAA\"],xmp:[\"ApplicationNotes\"],icc:[\"ICC_Profile\"],photoshop:[\"ImageSourceData\",\"PhotoshopSettings\"],makerNotes:[\"MakerNote\",\"Make\"],gps:[\"GPSLatitude\",\"GPSLatitudeRef\",\"GPSLongitude\",\"GPSLongitudeRef\",\"GPSAltitude\",\"GPSAltitudeRef\"]},Pt={file:[\"Image Width\",\"Image Height\"],exif:[\"FocalLength\",\"FocalPlaneXResolution\",\"FocalPlaneYResolution\",\"FocalPlaneResolutionUnit\",\"FocalLengthIn35mmFilm\"]};function Ot(e){return 1==e?1:Array.isArray(e)&&e.length>0}function Ct(){return{isActive:0,shouldReturnGroup:e,shouldParseGroup:e,shouldReturnTag:e,shouldParseTag:e};function e(){return 1}}var Rt=Ct();function Lt(e){var t=e.groupKey,n=e.hasIncludeTags,r=e.hasIncludeEntry,i=e.includeTags,o=e.shouldParseExif,u=e.shouldParseFile;return n?r?\"thumbnail\"===t&&Array.isArray(i[t])?1:i[t]:\"exif\"===t&&o||\"file\"===t&&u?[]:void 0:1}function Et(e){var t=e.groupKey,n=e.hasIncludeTags,r=e.hasIncludeEntry,i=e.shouldParseExif,o=e.shouldParseFile,u=e.exifIncludeDependencies,a=e.fileIncludeDependencies;return n?\"exif\"===t&&(i||r&&Object.keys(u).length>0)?u:\"file\"===t&&o?a:Object.create(null):Object.create(null)}function Ut(e,t){if(!e||!Object.prototype.hasOwnProperty.call(e,t))return 0;var n=e[t];return 1==n?1:Array.isArray(n)&&n.length>0}function kt(e){return Array.isArray(e)&&0===e.length}function Nt(e){var t=e.groupKey,n=e.includeValue,r=e.excludeValue,i=e.extraIncludeNames,o=!!Tt[t],u={includeAll:0,includeNames:void 0,includeIds:void 0,excludeAll:0,excludeNames:void 0,excludeIds:void 0};if(1==n)u.includeAll=1;else if(Array.isArray(n)){u.includeNames=Object.create(null),o&&(u.includeIds=Object.create(null));for(var a=0;a<n.length;a++)d(u,n[a]);for(var f in i)u.includeNames[f.toLowerCase()]=1}else if(i&&Object.keys(i).length>0)for(var s in u.includeNames=Object.create(null),i)u.includeNames[s.toLowerCase()]=1;if(1==r)return u.excludeAll=1,u;if(Array.isArray(r)){u.excludeNames=Object.create(null),o&&(u.excludeIds=Object.create(null));for(var c=0;c<r.length;c++)l(u,r[c])}return u;function d(e,t){\"number\"==typeof t&&e.includeIds?e.includeIds[t+\"\"]=1:\"string\"==typeof t&&(e.includeNames[t.toLowerCase()]=1)}function l(e,t){\"number\"==typeof t&&e.excludeIds?e.excludeIds[t+\"\"]=1:\"string\"==typeof t&&(e.excludeNames[t.toLowerCase()]=1)}}function jt(e,t,n){return e.excludeAll?0:e.includeAll?!Bt(e,t,n):e.includeNames||e.includeIds?function(e,t,n){return void 0!==n&&e.includeIds&&e.includeIds[n+\"\"]||t&&e.includeNames&&e.includeNames[(t+\"\").toLowerCase()]?1:0}(e,t,n)?!Bt(e,t,n):0:!Bt(e,t,n)}function Bt(e,t,n){return void 0!==n&&e.excludeIds&&e.excludeIds[n+\"\"]||t&&e.excludeNames&&e.excludeNames[(t+\"\").toLowerCase()]?1:0}var Gt={1:yt.getByteAt,2:yt.getAsciiAt,3:yt.getShortAt,4:yt.getLongAt,5:yt.getRationalAt,7:yt.getUndefinedAt,9:yt.getSlongAt,10:yt.getSrationalAt,13:yt.getIfdPointerAt};function Ft(e,t,n,r,i,o){var u=arguments.length>6&&void 0!==arguments[6]?arguments[6]:0,a=arguments.length>7&&void 0!==arguments[7]?arguments[7]:Rt,f=arguments.length>8&&void 0!==arguments[8]?arguments[8]:\"exif\",s=yt.getTypeSize(\"SHORT\"),c={},d=function(e,t,n){return t+yt.getTypeSize(\"SHORT\")<=e.byteLength?yt.getShortAt(e,t,n):0}(e,r,i);r+=s;for(var l=0;l<d&&!(r+12>e.byteLength);l++){var p=zt(e,t,n,r,i,o,a,f);void 0!==p&&(c[p.name]={id:p.id,value:p.value,description:p.description},u&&(c[p.name].computed=_t(p.tagType,p.value)),(\"MakerNote\"===p.name||t===gt&&\"LevelInfo\"===p.name)&&(c[p.name].__offset=p.__offset)),r+=12}return c}function zt(e,t,n,r,i){var o,u,a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,f=arguments.length>6&&void 0!==arguments[6]?arguments[6]:Rt,s=arguments.length>7&&void 0!==arguments[7]?arguments[7]:\"exif\",c=yt.getTypeSize(\"SHORT\"),d=c+yt.getTypeSize(\"SHORT\"),l=d+yt.getTypeSize(\"LONG\"),p=yt.getShortAt(e,r,i),g=yt.getShortAt(e,r+c,i),h=yt.getLongAt(e,r+d,i);if(void 0!==yt.typeSizes[g]&&(a||void 0!==ht[t][p])){var v=function(e,t){if(void 0!==ht[e][t]){if(\"string\"==typeof ht[e][t])return ht[e][t];if(ht[e][t].name)return ht[e][t].name}return\"undefined-\".concat(t)}(t,p);if(f.shouldParseTag(s,v,p)){o=function(e,t){return yt.typeSizes[e]*t<=yt.getTypeSize(\"LONG\")}(g,h)?Dt(e,u=r+l,g,h,i):function(e,t,n,r,i){return t+n+yt.typeSizes[r]*i<=e.byteLength}(e,n,u=yt.getLongAt(e,r+l,i),g,h)?Dt(e,n+u,g,h,i,33723===p):\"<faulty value>\",g===yt.tagTypes.ASCII&&(o=function(e){try{return e.map(function(e){return decodeURIComponent(escape(e))})}catch(t){return e}}(o=function(e){for(var t=[],n=0,r=0;r<e.length;r++)\"\\0\"!==e[r]?(void 0===t[n]&&(t[n]=\"\"),t[n]+=e[r]):n++;return t}(o)));var m=o;if(void 0!==ht[t][p])if(void 0!==ht[t][p].name&&void 0!==ht[t][p].description)try{m=ht[t][p].description(o)}catch(e){m=Mt(o)}else m=g===yt.tagTypes.RATIONAL||g===yt.tagTypes.SRATIONAL?\"\"+o[0]/o[1]:Mt(o);return{id:p,name:v,value:o,description:m,tagType:g,__offset:u}}}}function Dt(e,t,n,r,i){var o=[];arguments.length>5&&void 0!==arguments[5]&&arguments[5]&&(r*=yt.typeSizes[n],n=yt.tagTypes.BYTE);for(var u=0;u<r;u++)o.push(Gt[n](e,t,i)),t+=yt.typeSizes[n];return n===yt.tagTypes.ASCII?o=yt.getAsciiValue(o):1===o.length&&(o=o[0]),o}function Mt(e){return e instanceof Array?e.join(\", \"):e}function _t(e,t){return e===yt.tagTypes.ASCII?Array.isArray(t)&&1===t.length?t[0]:t:e===yt.tagTypes.RATIONAL||e===yt.tagTypes.SRATIONAL?function(e){return Array.isArray(e)&&2===e.length?\"number\"==typeof e[0]&&\"number\"==typeof e[1]:0}(t)?Vt(t):Array.isArray(t)?t.map(function(e){return Vt(e)}):t:t}function Vt(e){if(!Array.isArray(e)||2!==e.length)return e;var t=e[0],n=e[1];return Number.isFinite(t)&&Number.isFinite(n)?0===n?null:t/n:e}var Ht=\"Exif IFD Pointer\",qt=\"GPS Info IFD Pointer\",Wt=\"Interoperability IFD Pointer\",Xt={read:function(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:void 0,o=D.getByteOrder(e,t),u=function(e,t,n,r,i,o){var u=function(e,t,n){var r=t+4;if(!(r+yt.getTypeSize(\"LONG\")>e.byteLength))return t+yt.getLongAt(e,r,n)}(e,t,n);return void 0===u?{}:Ft(e,\"0th\",t,u,n,r,i,o,\"exif\")}(e,t,o,n,r,i);return{tags:u=$t(u=Yt(u=Kt(u,e,t,o,n,r,i),e,t,o,n,r,i),e,t,o,n,r,i),byteOrder:o}}};function Kt(e,t,n,r,i,u,a){return void 0!==e[Ht]?o(e,Ft(t,lt,n,n+e[Ht].value,r,i,u,a,\"exif\")):e}function Yt(e,t,n,r,i,u,a){return void 0!==e[qt]?o(e,Ft(t,\"gps\",n,n+e[qt].value,r,i,u,a,\"exif\")):e}function $t(e,t,n,r,i,u,a){return void 0!==e[Wt]?o(e,Ft(t,pt,n,n+e[Wt].value,r,i,u,a,\"exif\")):e}var Jt={iptc:{632:\"Caption/Abstract\"}},Zt={128:8364,130:8218,131:402,132:8222,133:8230,134:8224,135:8225,136:710,137:8240,138:352,139:8249,140:338,142:381,145:8216,146:8217,147:8220,148:8221,149:8226,150:8211,151:8212,152:732,153:8482,154:353,155:8250,156:339,158:382,159:376},Qt=function(e,t){if(\"string\"==typeof t)return function(e){try{return decodeURIComponent(escape(e))}catch(t){return e}}(t);var n=function(){if(\"undefined\"!=typeof TextDecoder)return TextDecoder}();if(\"undefined\"!=typeof n&&void 0!==e)try{return new n(e).decode(t instanceof DataView?t.buffer:Uint8Array.from(t))}catch(e){}var r=t.map(function(e){return String.fromCharCode(e)}).join(\"\");try{return decodeURIComponent(escape(r))}catch(e){return function(e){for(var t=e instanceof DataView,n=t?e.byteLength:e.length,r=t?function(t){return e.getUint8(t)}:function(t){return e[t]},i=Array(n),o=0;o<n;o++){var u=r(o),a=Zt[u];i[o]=void 0!==a?a:u}return String.fromCharCode.apply(null,i)}(t)}},en={read:function(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:Rt;try{if(Array.isArray(e))return on(new DataView(Uint8Array.from(e).buffer),{size:e.length},0,n,r);var i=function(e,t){for(;t+12<=e.byteLength;){var n=tn(e,t);if(nn(n))return{naaBlock:n,dataOffset:t+n.headerSize};t+=n.headerSize+n.size+rn(n)}throw Error(\"No IPTC NAA resource block.\")}(e,t);return on(e,i.naaBlock,i.dataOffset,n,r)}catch(e){return{}}}};function tn(e,t){if(943868237!==e.getUint32(t,0))throw Error(\"Not an IPTC resource block.\");var n=e.getUint8(t+4+2),r=(n%2==0?n+1:n)+1;return{headerSize:6+r+4,type:e.getUint16(t+4),size:e.getUint32(t+4+2+r)}}function nn(e){return 1028===e.type}function rn(e){return e.size%2!=0?1:0}function on(e,t,n,r,i){for(var o={},u=void 0,a=n+t.size;n<a&&n<e.byteLength;){var f=un(e,n,o,u,r,i),s=f.tag,c=f.tagSize;if(null===s)break;s&&(\"encoding\"in s&&(u=s.encoding),void 0===o[s.name]||void 0===s.repeatable?o[s.name]={id:s.id,value:s.value,description:s.description}:(o[s.name]instanceof Array||(o[s.name]=[{id:o[s.name].id,value:o[s.name].value,description:o[s.name].description}]),o[s.name].push({id:s.id,value:s.value,description:s.description}))),n+=5+c}return o}function un(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0,i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,o=arguments.length>5&&void 0!==arguments[5]?arguments[5]:Rt;if(function(e,t){return 28!==e.getUint8(t)}(e,t))return{tag:null,tagSize:0};var u=e.getUint16(t+1),a=e.getUint16(t+3);if(!i&&!Jt.iptc[u])return{tag:void 0,tagSize:a};if(!o.shouldParseTag(\"iptc\",function(e,t){var n=Jt.iptc[e];return n?\"string\"==typeof n?n:n&&\"string\"==typeof n.name?n.name:void 0:t?\"undefined-\".concat(e):void 0}(u,i),u))return{tag:void 0,tagSize:a};var f=function(e,t,n){for(var r=[],i=0;i<n;i++)r.push(e.getUint8(t+i));return r}(e,t+5,a),s={id:u,name:an(Jt.iptc[u],u,f),value:f,description:fn(Jt.iptc[u],f,n,r)};return function(e){return Jt.iptc[e]&&Jt.iptc[e].repeatable}(u)&&(s.repeatable=1),function(e){return Jt.iptc[e]&&void 0!==Jt.iptc[e].encoding_name}(u)&&(s.encoding=Jt.iptc[u].encoding_name(f)),{tag:s,tagSize:a}}function an(e,t,n){return e?function(e){return\"string\"==typeof e}(e)?e:function(e){return\"function\"==typeof e.name}(e)?e.name(n):e.name:\"undefined-\".concat(t)}function fn(e,t,n,r){if(function(e){return e&&void 0!==e.description}(e))try{return e.description(t,n)}catch(e){}return function(e,t){return e&&t instanceof Array}(e,t)?Qt(r,t):t}var sn=function(e){return Math.pow(Math.sqrt(2),e[0]/e[1]).toFixed(2)},cn=function(e){return\"f/\".concat(Number(e[0]/e[1]).toFixed(1))},dn=function(e){return e[0]/e[1]+\" mm\"},ln=function(e){var t=Math.pow(2,e[0]/e[1]);return t<=1?\"\".concat(Math.round(1/t)):\"1/\".concat(Math.round(t))},pn=function(e){return\"\"+Math.round(e[0]/e[1])},gn=function(e){return\"\"+Math.round(e[0]/e[1])};function hn(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var vn={\"tiff:Orientation\":function(e){return\"1\"===e?\"Horizontal (normal)\":\"2\"===e?\"Mirror horizontal\":\"3\"===e?\"Rotate 180\":\"4\"===e?\"Mirror vertical\":\"5\"===e?\"Mirror horizontal and rotate 270 CW\":\"6\"===e?\"Rotate 90 CW\":\"7\"===e?\"Mirror horizontal and rotate 90 CW\":\"8\"===e?\"Rotate 270 CW\":e},\"tiff:ResolutionUnit\":function(e){return function(e){return 2===e?\"inches\":3===e?\"centimeters\":\"Unknown\"}(parseInt(e,10))},\"tiff:XResolution\":function(e){return mn(pn,e)},\"tiff:YResolution\":function(e){return mn(gn,e)},\"exif:ApertureValue\":function(e){return mn(sn,e)},\"exif:GPSLatitude\":bn,\"exif:GPSLongitude\":bn,\"exif:FNumber\":function(e){return mn(cn,e)},\"exif:FocalLength\":function(e){return mn(dn,e)},\"exif:FocalPlaneResolutionUnit\":function(e){return function(e){return 2===e?\"inches\":3===e?\"centimeters\":4===e?\"millimeters\":\"Unknown\"}(parseInt(e,10))},\"exif:ColorSpace\":function(e){return function(e){return 1===e?\"sRGB\":65535===e?\"Uncalibrated\":\"Unknown\"}(function(e){return\"0x\"===e.substring(0,2)?parseInt(e.substring(2),16):parseInt(e,10)}(e))},\"exif:ComponentsConfiguration\":function(e,t){return/^\\d, \\d, \\d, \\d$/.test(t)?function(e){return e.map(function(e){return 49===e?\"Y\":50===e?\"Cb\":51===e?\"Cr\":52===e?\"R\":53===e?\"G\":54===e?\"B\":void 0}).join(\"\")}(t.split(\", \").map(function(e){return e.charCodeAt(0)})):t},\"exif:Contrast\":function(e){return function(e){return 0===e?\"Normal\":1===e?\"Soft\":2===e?\"Hard\":\"Unknown\"}(parseInt(e,10))},\"exif:CustomRendered\":function(e){return function(e){return 0===e?\"Normal process\":1===e?\"Custom process\":\"Unknown\"}(parseInt(e,10))},\"exif:ExposureMode\":function(e){return function(e){return 0===e?\"Auto exposure\":1===e?\"Manual exposure\":2===e?\"Auto bracket\":\"Unknown\"}(parseInt(e,10))},\"exif:ExposureProgram\":function(e){return function(e){return 0===e?\"Undefined\":1===e?\"Manual\":2===e?\"Normal program\":3===e?\"Aperture priority\":4===e?\"Shutter priority\":5===e?\"Creative program\":6===e?\"Action program\":7===e?\"Portrait mode\":8===e?\"Landscape mode\":9===e?\"Bulb\":\"Unknown\"}(parseInt(e,10))},\"exif:ExposureTime\":function(e){return yn(e)?function(e){if(e[0]/e[1]>.25){var t=e[0]/e[1];return Number.isInteger(t)?\"\"+t:t.toFixed(1)}return 0!==e[0]?\"1/\".concat(Math.round(e[1]/e[0])):\"0/\".concat(e[1])}(e.split(\"/\").map(function(e){return parseInt(e,10)})):e},\"exif:MeteringMode\":function(e){return function(e){return 1===e?\"Average\":2===e?\"CenterWeightedAverage\":3===e?\"Spot\":4===e?\"MultiSpot\":5===e?\"Pattern\":6===e?\"Partial\":255===e?\"Other\":\"Unknown\"}(parseInt(e,10))},\"exif:Saturation\":function(e){return function(e){return 0===e?\"Normal\":1===e?\"Low saturation\":2===e?\"High saturation\":\"Unknown\"}(parseInt(e,10))},\"exif:SceneCaptureType\":function(e){return function(e){return 0===e?\"Standard\":1===e?\"Landscape\":2===e?\"Portrait\":3===e?\"Night scene\":\"Unknown\"}(parseInt(e,10))},\"exif:Sharpness\":function(e){return function(e){return 0===e?\"Normal\":1===e?\"Soft\":2===e?\"Hard\":\"Unknown\"}(parseInt(e,10))},\"exif:ShutterSpeedValue\":function(e){return mn(ln,e)},\"exif:WhiteBalance\":function(e){return function(e){return 0===e?\"Auto white balance\":1===e?\"Manual white balance\":\"Unknown\"}(parseInt(e,10))}};function mn(e,t){return yn(t)?e(t.split(\"/\")):t}function yn(e){return/^-?\\d+\\/-?\\d+$/.test(e)}function bn(e){var t,n=function(e){if(Array.isArray(e))return e}(t=e.split(\",\"))||function(e){var t=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=t){var n,r,i,o,u=[],a=1,f=0;try{for(i=(t=t.call(e)).next,!2;!(a=(n=i.call(t)).done)&&(u.push(n.value),2!==u.length);a=1);}catch(e){f=1,r=e}finally{try{if(!a&&null!=t.return&&(o=t.return(),Object(o)!==o))return}finally{if(f)throw r}}return u}}(t)||function(e){if(e){if(\"string\"==typeof e)return hn(e,2);var t={}.toString.call(e).slice(8,-1);return\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t?Array.from(e):\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?hn(e,2):void 0}}(t)||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 e}var xn={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 An(e){return An=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},An(e)}function Tn(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function In(e){var t=\"function\"==typeof Map?new Map:void 0;return In=function(e){if(null===e||!function(e){try{return-1!==Function.toString.call(e).indexOf(\"[native code]\")}catch(t){return\"function\"==typeof e}}(e))return e;if(\"function\"!=typeof e)throw new TypeError(\"Super expression must either be null or a function\");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,n)}function n(){return function(e,t,n){if(wn())return Reflect.construct.apply(null,arguments);var r=[null];r.push.apply(r,t);var i=new(e.bind.apply(e,r));return n&&Sn(i,n.prototype),i}(e,arguments,Pn(this).constructor)}return n.prototype=Object.create(e.prototype,{constructor:{value:n,enumerable:0,writable:1,configurable:1}}),Sn(n,e)},In(e)}function wn(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(wn=function(){return!!e})()}function Sn(e,t){return Sn=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},Sn(e,t)}function Pn(e){return Pn=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},Pn(e)}var On={read:function(e,t,n){var r={};if(\"string\"==typeof e)return Ln(r,e,n),r;var i,o=(i=function(e,t){if(0===t.length)return[];var n=[Rn(e,t.slice(0,1))];return t.length>1&&n.push(Rn(e,t.slice(1))),n}(e,t),function(e){if(Array.isArray(e))return e}(i)||function(e){var t=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=t){var n,r,i,o,u=[],a=1,f=0;try{for(i=(t=t.call(e)).next,!2;!(a=(n=i.call(t)).done)&&(u.push(n.value),2!==u.length);a=1);}catch(e){f=1,r=e}finally{try{if(!a&&null!=t.return&&(o=t.return(),Object(o)!==o))return}finally{if(f)throw r}}return u}}(i)||function(e){if(e){if(\"string\"==typeof e)return Tn(e,2);var t={}.toString.call(e).slice(8,-1);return\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t?Array.from(e):\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?Tn(e,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=Ln(r,u,n);if(a){var s=Ln(r,a,n);f||s||(delete r._raw,Ln(r,Rn(e,t),n))}return r}},Cn=function(e){function t(e){var n;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t),(n=function(e,t,n){return t=Pn(t),function(e,t){if(t&&(\"object\"==An(t)||\"function\"==typeof t))return t;if(void 0!==t)throw new TypeError(\"Derived constructors may only return object or undefined\");return function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e)}(e,wn()?Reflect.construct(t,n||[],Pn(e).constructor):t.apply(e,n))}(this,t,[e])).name=\"ParseError\",n}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:1,configurable:1}}),Object.defineProperty(e,\"prototype\",{writable:0}),t&&Sn(e,t)}(t,e),Object.defineProperty(n=t,\"prototype\",{writable:0}),n;var n}(In(Error));function Rn(e,t){for(var n=t.reduce(function(e,t){return e+t.length},0),r=new Uint8Array(n),i=0,o=0;o<t.length;o++){var u=t[o],a=e.buffer.slice(u.dataOffset,u.dataOffset+u.length);r.set(new Uint8Array(a),i),i+=u.length}return new DataView(r.buffer)}function Ln(e,t,r){try{var i=function(e,t){var r=function(e){if(e)return e;if(\"undefined\"!=typeof DOMParser)return new DOMParser;try{var t=require(\"@xmldom/xmldom\");return new(0,t.DOMParser)({onError:t.onErrorStopParsing})}catch(e){return}}(t);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 e?e:n(e,0,e.byteLength);return{doc:En(r,i.replace(/^.+(<\\?xpacket begin)/,\"$1\").replace(/(<\\?xpacket end=\".*\"\\?>).+$/,\"$1\")),raw:i}}(t,r),u=i.doc,a=i.raw;return e._raw=(e._raw||\"\")+a,o(e,jn(kn(Un(u),1))),1}catch(e){return 0}}function En(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;try{var r=e.parseFromString(t,\"application/xml\"),i=r.getElementsByTagName(\"parsererror\");if(i.length>0)throw new Cn(i[0].textContent);return r}catch(r){if(\"ParseError\"===r.name&&function(e){for(var t=[\"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<t.length;n++)if(RegExp(t[n]).test(e.message))return 1;return 0}(r)&&!n)return En(e,function(e){var t=e.match(/<([A-Za-z_][A-Za-z0-9._-]*)([^>]*)>/);if(!t)return e;var n=t[1],r=function(e){for(var t,n=[],r=/xmlns:([\\w-]+)=[\"'][^\"']+[\"']/g;null!==(t=r.exec(e));)-1===n.indexOf(t[1])&&n.push(t[1]);return n}(e),i=function(e){for(var t,n=[],r=/\\b([A-Za-z_][A-Za-z0-9._-]*):[A-Za-z_][A-Za-z0-9._-]*\\b/g;null!==(t=r.exec(e));){var i=t[1];\"xmlns\"!==i&&\"xml\"!==i&&-1===n.indexOf(i)&&n.push(i)}return n}(e).filter(function(e){return-1===r.indexOf(e)});return 0===i.length?e:function(e,t,n){var r=RegExp(\"<\"+t+\"([^>]*)>\");return e.replace(r,\"<\"+t+\"$1\"+n+\">\")}(e,n,function(e){for(var t=[],n=0;n<e.length;n++){var r=e[n],i=xn[r]||\"http://fallback.namespace/\"+r;t.push(\" xmlns:\"+r+'=\"'+i+'\"')}return t.join(\"\")}(i))}(t),1);throw r}}function Un(e){for(var t=0;t<e.childNodes.length;t++){if(\"x:xmpmeta\"===e.childNodes[t].tagName)return Un(e.childNodes[t]);if(\"rdf:RDF\"===e.childNodes[t].tagName)return e.childNodes[t]}throw Error()}function kn(e){var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,r=function(e){for(var t=[],n=0;n<e.childNodes.length;n++)t.push(e.childNodes[n]);return t}(e);return 1===(t=r).length&&\"#text\"===t[0].nodeName?n?{}:function(e){return e.nodeValue}(r[0]):function(e){var t={};return e.forEach(function(e){if(function(e){return e.nodeName&&\"#text\"!==e.nodeName}(e)){var n=function(e){return{attributes:Nn(e),value:kn(e)}}(e);void 0!==t[e.nodeName]?(Array.isArray(t[e.nodeName])||(t[e.nodeName]=[t[e.nodeName]]),t[e.nodeName].push(n)):t[e.nodeName]=n}}),t}(r)}function Nn(e){for(var t={},n=0;n<e.attributes.length;n++)t[e.attributes[n].nodeName]=decodeURIComponent(escape(e.attributes[n].value));return t}function jn(e){var t={};if(\"string\"==typeof e)return e;for(var n in e){var r=e[n];Array.isArray(r)||(r=[r]),r.forEach(function(e){o(t,Bn(e.attributes)),\"object\"===An(e.value)&&o(t,_n(e.value))})}return t}function Bn(e){var t={};for(var n in e)try{Gn(n)&&(t[zn(n)]={value:e[n],attributes:{},description:Dn(e[n],n)})}catch(e){}return t}function Gn(e){return\"rdf:parseType\"!==e&&!Fn(e)}function Fn(e){return\"xmlns\"===e.split(\":\")[0]}function zn(e){return/^MicrosoftPhoto(_\\d+_)?:Rating$/i.test(e)?\"RatingPercent\":e.split(\":\")[1]}function Dn(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(Array.isArray(e)){var n=function(e){return e.map(function(e){return void 0!==e.value?Dn(e.value):Dn(e)}).join(\", \")}(e);return t&&\"function\"==typeof vn[t]?vn[t](e,n):n}if(\"object\"===An(e))return function(e){var t=[];for(var n in e)t.push(\"\".concat(Mn(n),\": \").concat(Dn(e[n].value)));return t.join(\"; \")}(e);try{return t&&\"function\"==typeof vn[t]?vn[t](e):decodeURIComponent(escape(e))}catch(t){return e}}function Mn(e){return\"CiAdrCity\"===e?\"CreatorCity\":\"CiAdrCtry\"===e?\"CreatorCountry\":\"CiAdrExtadr\"===e?\"CreatorAddress\":\"CiAdrPcode\"===e?\"CreatorPostalCode\":\"CiAdrRegion\"===e?\"CreatorRegion\":\"CiEmailWork\"===e?\"CreatorWorkEmail\":\"CiTelWork\"===e?\"CreatorWorkPhone\":\"CiUrlWork\"===e?\"CreatorWorkUrl\":e}function _n(e){var t={};for(var n in e)try{Fn(n)||(t[zn(n)]=Vn(e[n],n))}catch(e){}return t}function Vn(e,t){return function(e){return Array.isArray(e)}(e)?function(e,t){return Zn(e[e.length-1],t)}(e,t):function(e){return\"Resource\"===e.attributes[\"rdf:parseType\"]&&\"string\"==typeof e.value&&\"\"===e.value.trim()}(e)?{value:\"\",attributes:{},description:\"\"}:Hn(e)?qn(e,t):Xn(e)?Kn(e,t):Yn(e)?$n(e,t):function(e){return void 0!==Jn(e.value)}(e)?function(e,t){var n=Jn(e.value).value[\"rdf:li\"],r=Wn(e),i=[];return void 0===n?n=[]:Array.isArray(n)||(n=[n]),n.forEach(function(e){i.push(function(e){return Hn(e)?qn(e):Xn(e)?Kn(e).value:Yn(e)?$n(e).value:Zn(e)}(e))}),{value:i,attributes:r,description:Dn(i,t)}}(e,t):Zn(e,t)}function Hn(e){return\"Resource\"===e.attributes[\"rdf:parseType\"]&&void 0!==e.value[\"rdf:value\"]||void 0!==e.value[\"rdf:Description\"]&&void 0!==e.value[\"rdf:Description\"].value[\"rdf:value\"]}function qn(e,t){var n=Wn(e);void 0!==e.value[\"rdf:Description\"]&&(e=e.value[\"rdf:Description\"]),o(n,Wn(e),function(e){var t={};for(var n in e.value)\"rdf:value\"===n||Fn(n)||(t[zn(n)]=e.value[n].value);return t}(e));var r=function(e){return Qn(e.value[\"rdf:value\"])||e.value[\"rdf:value\"].value}(e);return{value:r,attributes:n,description:Dn(r,t)}}function Wn(e){var t={};for(var n in e.attributes)\"rdf:parseType\"===n||\"rdf:resource\"===n||Fn(n)||(t[zn(n)]=e.attributes[n]);return t}function Xn(e){return\"Resource\"===e.attributes[\"rdf:parseType\"]||void 0!==e.value[\"rdf:Description\"]&&void 0===e.value[\"rdf:Description\"].value[\"rdf:value\"]}function Kn(e,t){var n={value:{},attributes:{}};return void 0!==e.value[\"rdf:Description\"]&&(o(n.value,Bn(e.value[\"rdf:Description\"].attributes)),o(n.attributes,Wn(e)),e=e.value[\"rdf:Description\"]),o(n.value,_n(e.value)),n.description=Dn(n.value,t),n}function Yn(e){return 0===Object.keys(e.value).length&&void 0===e.attributes[\"xml:lang\"]&&void 0===e.attributes[\"rdf:resource\"]}function $n(e,t){var n=Bn(e.attributes);return{value:n,attributes:{},description:Dn(n,t)}}function Jn(e){return e[\"rdf:Bag\"]||e[\"rdf:Seq\"]||e[\"rdf:Alt\"]}function Zn(e,t){var n=Qn(e)||jn(e.value);return{value:n,attributes:Wn(e),description:Dn(n,t)}}function Qn(e){return e.attributes&&e.attributes[\"rdf:resource\"]}function er(e){return er=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},er(e)}var tr={read:function(e,t,n,r){for(var i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,o=arguments.length>5&&void 0!==arguments[5]?arguments[5]:Rt,u=arguments.length>6?arguments[6]:void 0,a={},f=[],s=0;s<t.length;s++){var c=t[s],d=cr(e,c.offset,c.length,c.type,n,u);if(d instanceof Promise)f.push(d.then(function(e){var t,n,u,a=e.name,f=e.value,s=e.description;try{if(vr(a,f))return o.shouldParseGroup(\"exif\")?{__exif:Xt.read(yr(f),sr,r,i,o).tags}:{};if(mr(a,f))return o.shouldParseGroup(\"iptc\")?{__iptc:en.read(yr(f),0,r,o)}:{};if(a&&!vr(a,f)&&!mr(a,f))return o.shouldParseGroup(\"png\")?(t={},u={value:f,description:s},(n=function(e){var t=function(e){if(\"object\"!=er(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=er(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return e+\"\"}(e);return\"symbol\"==er(t)?t:t+\"\"}(n=a))in t?Object.defineProperty(t,n,{value:u,enumerable:1,configurable:1,writable:1}):t[n]=u,t):{}}catch(e){}return{}}));else{var l=d.name,p=d.value,g=d.description;l&&o.shouldParseGroup(\"png\")&&(a[l]={value:p,description:g})}}return{readTags:a,readTagsPromise:f.length>0?Promise.all(f):void 0}}},nr=\"STATE_KEYWORD\",rr=\"STATE_COMPRESSION\",ir=\"STATE_LANG\",or=\"STATE_TRANSLATED_KEYWORD\",ur=\"STATE_TEXT\",ar=1,fr=1,sr=6;function cr(e,t,n,r,i,o){for(var u,d=[],l=[],p=[],g=nr,h=a,v=0;v<n&&t+v<e.byteLength;v++)if(g!==rr){if(g===ur){u=new DataView(e.buffer.slice(t+v,t+n));break}var m=e.getUint8(t+v);0===m?g=lr(r,g):g===nr?d.push(m):g===ir?l.push(m):g===or&&p.push(m)}else h=dr({type:r,dataView:e,offset:t+v}),r===Le&&(v+=ar),g=lr(r,g);if(h!==a&&!i)return{};var y=function(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\"string\",i=arguments.length>4?arguments[4]:void 0,o=function(e){return e&&\"number\"==typeof e.maxDecompressedSize?e.maxDecompressedSize:134217728}(i);if(i&&t!==a){var u=i[0===t?\"deflate\":\"brotli\"];if(\"function\"==typeof u){var d=new Uint8Array(e.buffer,e.byteOffset,e.byteLength);return Promise.resolve(u(d)).then(function(e){return function(e){return e&&\"number\"==typeof e.byteLength?e.byteLength:0}(e)>o?c(o):\"dataview\"===r?e instanceof DataView?e:e instanceof ArrayBuffer?new DataView(e):new DataView(e.buffer,e.byteOffset,e.byteLength):new TextDecoder(n).decode(e)})}}if(0===t&&\"function\"==typeof DecompressionStream)return f(e,\"deflate\",o).then(function(e){return s(e,r,n)});if(\"brotli\"===t){if(\"function\"==typeof DecompressionStream)try{return f(e,\"brotli\",o).then(function(e){return s(e,r,n)})}catch(e){}return Promise.reject(\"Brotli decompression is not supported in this environment. Pass in a brotli decompression function via the decompress option.\")}if(void 0!==t)return Promise.reject(\"Unknown compression method \".concat(t,\".\"));if(\"string\"===r)try{return new TextDecoder(n).decode(e)}catch(t){var l=new Uint8Array(e.buffer,e.byteOffset,e.byteLength);return Array.from(l,function(e){return String.fromCharCode(e)}).join(\"\")}return e}(u,h,function(e){return e===Re||e===Ee?\"latin1\":\"utf-8\"}(r),\"string\",o);return y instanceof Promise?y.then(function(e){return pr(e,r,l,d)}).catch(function(){return pr(\"<text using unknown compression>\".split(\"\"),r,l,d)}):pr(y,r,l,d)}function dr(e){var t=e.type,n=e.dataView,r=e.offset;if(t===Le){if(n.getUint8(r)===fr)return n.getUint8(r+1)}else if(t===Ee)return n.getUint8(r);return a}function lr(e,t){return t===nr&&[Le,Ee].includes(e)?rr:t===rr?e===Le?ir:ur:t===ir?or:ur}function pr(e,t,r,i){var o=function(e){return e instanceof DataView?n(e,0,e.byteLength):e}(e);return{name:gr(t,r,i),value:o,description:t===Le?hr(e):o}}function gr(e,t,n){var r=i(n);if(e===Re||0===t.length)return r;var o=i(t);return\"\".concat(r,\" (\").concat(o,\")\")}function hr(e){return Qt(\"UTF-8\",e)}function vr(e,t){return\"raw profile type exif\"===e.toLowerCase()&&\"exif\"===t.substring(1,5)}function mr(e,t){return\"raw profile type iptc\"===e.toLowerCase()&&\"iptc\"===t.substring(1,5)}function yr(e){return function(e){for(var t=new DataView(new ArrayBuffer(e.length/2)),n=0;n<e.length;n+=2)t.setUint8(n/2,parseInt(e.substring(n,n+2),16));return t}(e.match(/\\n(exif|iptc)\\n\\s*\\d+\\n([\\s\\S]*)$/)[2].replace(/\\n/g,\"\"))}var br={read:function(e,t){for(var r={},i=0;i<t.length;i++){var o=yt.getLongAt(e,t[i]+Se),u=n(e,t[i]+Pe,we);u===Ue?(r[\"Pixels Per Unit X\"]=xr(e,t[i],o),r[\"Pixels Per Unit Y\"]=Ar(e,t[i],o),r[\"Pixel Units\"]=Tr(e,t[i],o)):u===ke&&(r[\"Modify Date\"]=Ir(e,t[i],o))}return r}};function xr(e,t,n){if(wr(e,t,n,0,4)){var r=yt.getLongAt(e,t+Oe+0);return{value:r,description:\"\"+r}}}function Ar(e,t,n){if(wr(e,t,n,4,4)){var r=yt.getLongAt(e,t+Oe+4);return{value:r,description:\"\"+r}}}function Tr(e,t,n){if(wr(e,t,n,8,1)){var r=yt.getByteAt(e,t+Oe+8);return{value:r,description:1===r?\"meters\":\"Unknown\"}}}function Ir(e,t,n){if(wr(e,t,n,0,7)){var r=yt.getShortAt(e,t+Oe),i=yt.getByteAt(e,t+Oe+2),o=yt.getByteAt(e,t+Oe+3),u=yt.getByteAt(e,t+Oe+4),a=yt.getByteAt(e,t+Oe+5),f=yt.getByteAt(e,t+Oe+6);return{value:[r,i,o,u,a,f],description:\"\".concat(Sr(r,4),\"-\").concat(Sr(i,2),\"-\").concat(Sr(o,2),\" \").concat(Sr(u,2),\":\").concat(Sr(a,2),\":\").concat(Sr(f,2))}}}function wr(e,t,n,r,i){return r+i<=n&&t+Oe+r+i<=e.byteLength}function Sr(e,t){return\"\".concat(\"0\".repeat(t-(\"\"+e).length)).concat(e)}var Pr={read:function(e,t){var n={};if(t+Rr>e.byteLength)return n;var r=yt.getByteAt(e,t);return n.Alpha=function(e){var t=16&e;return{value:t?1:0,description:t?\"Yes\":\"No\"}}(r),n.Animation=function(e){var t=2&e;return{value:t?1:0,description:t?\"Yes\":\"No\"}}(r),n.ImageWidth=Lr(e,t+Or),n.ImageHeight=Lr(e,t+Cr),n}},Or=4,Cr=7,Rr=10;function Lr(e,t){var n=yt.getByteAt(e,t)+256*yt.getByteAt(e,t+1)+65536*yt.getByteAt(e,t+2)+1;return{value:n,description:n+\"px\"}}var Er=[6,7,99],Ur={get:function(e,t,n){if((f=t)&&(void 0===f.Compression||Er.includes(f.Compression.value))&&f.JPEGInterchangeFormat&&f.JPEGInterchangeFormat.value&&f.JPEGInterchangeFormatLength&&f.JPEGInterchangeFormatLength.value){t.type=\"image/jpeg\";var r=n+t.JPEGInterchangeFormat.value;t.image=e.buffer.slice(r,r+t.JPEGInterchangeFormatLength.value),u=function(){return e=this.image,\"undefined\"!=typeof btoa?\"string\"==typeof e?btoa(e):btoa(Array.prototype.reduce.call(new Uint8Array(e),function(e,t){return e+String.fromCharCode(t)},\"\")):\"undefined\"!=typeof Buffer?\"undefined\"!=typeof Buffer.from?Buffer.from(e).toString(\"base64\"):new Buffer(e).toString(\"base64\"):void 0;var e},a=0,Object.defineProperty(i=t,o=\"base64\",{get:function(){return a||(a=1,Object.defineProperty(i,o,{configurable:1,enumerable:1,value:u.apply(i),writable:1})),i[o]},configurable:1,enumerable:1})}var i,o,u,a,f;return t}},kr={get:function(e,t){var n,r={},i=0,o=Nr(e,\"exif\",\"FocalLength\",t),u=Nr(e,\"exif\",\"FocalPlaneXResolution\",t),a=Nr(e,\"exif\",\"FocalPlaneYResolution\",t),f=Nr(e,\"exif\",\"FocalPlaneResolutionUnit\",t),s=Nr(e,\"file\",\"Image Width\",t),c=Nr(e,\"file\",\"Image Height\",t),d=Nr(e,\"exif\",\"FocalLengthIn35mmFilm\",t)||function(e,t,n,r,i,o){if(e&&t&&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=e[0]/e[1]*u,f=i/(t[0]/t[1]*u),s=Math.sqrt(Math.pow(r/a,2)+Math.pow(f,2));return o[0]/o[1]*(43.27/s)}catch(e){}}(u,a,f,s,c,o);d&&(r.FocalLength35efl={value:d,description:(n=d,0===n?\"Unknown\":n+\" mm\")},i=1);var l=function(e,t){if(e&&t)try{var n=t/(e[0]/e[1]);return{value:n,description:n.toFixed(1)}}catch(e){}}(o,d);l&&(r.ScaleFactorTo35mmEquivalent=l,i=1);var p=function(e){if(e)try{var t=2*Math.atan(36/(2*e))*(180/Math.PI);return{value:t,description:t.toFixed(1)+\" deg\"}}catch(e){}}(d);if(p&&(r.FieldOfView=p,i=1),i)return r}};function Nr(e,t,n,r){return r&&e[t]&&e[t][n]?e[t][n].value:!r&&e[n]?e[n].value:void 0}function jr(e){for(var t=e.mergeSteps,n=e.deferredResults,r=e.parsedGroups,i=e.expanded,o=e.tagFilter,u=e.dataView,a=e.tiffHeaderOffset,f=e.exifDataView,s=e.fileType,c=e.pngTextChunks,d=e.pngTextIsAsync,l=e.thumbnailIfdTags,p=e.deps,g={},h=0;h<t.length;h++)g=Br({step:t[h],deferredResults:n,parsedGroups:r,expanded:i,tagFilter:o,dataView:u,tiffHeaderOffset:a,exifDataView:f,fileType:s,thumbnailIfdTags:l,tags:g,deps:p});return i&&d&&o.shouldReturnGroup(\"png\")&&g.png&&(g.pngText=p.objectAssign({},g.png)),i&&o.shouldReturnGroup(\"png\")&&p.hasPngTextData(c)&&g.png&&!g.pngText&&(g.pngText=p.objectAssign({},g.png)),g}function Br(e){var t=e.step,n=e.deferredResults,r=e.parsedGroups,i=e.expanded,o=e.tagFilter,u=e.dataView,a=(e.tiffHeaderOffset,e.exifDataView,e.fileType),f=e.thumbnailIfdTags,s=e.tags,c=e.deps;if(\"mergeGroupAssign\"===t.type){var d=c.filterTagsForReturn(t.groupKey,t.parsedTags,o);return Gr(s,t.groupKey,d,i,c)}if(\"mergeGroupMerge\"===t.type){var l=c.filterTagsForReturn(t.groupKey,t.parsedTags,o);return function(e,t,n,r,i){return r?(e[t]?e[t]=i.objectAssign({},e[t],n):e[t]=n,e):i.objectAssign({},e,n)}(s,t.groupKey,l,i,c)}if(\"mergeXmpGroupAssign\"===t.type){var p=c.filterTagsForReturn(\"xmp\",t.parsedTags,o);if(i)return s.xmp=p,s;var g=c.objectAssign({},p);return delete g._raw,c.objectAssign({},s,g)}if(\"mergePngFile\"===t.type){var h=c.filterTagsForReturn(\"png\",t.parsedTags,o);return o.shouldReturnGroup(\"png\")?i?(s.png=s.png?c.objectAssign({},s.png,h):h,s.pngFile=h,s):c.objectAssign({},s,h):s}if(\"mergePngChunk\"===t.type){var v=c.filterTagsForReturn(\"png\",t.parsedTags,o);return o.shouldReturnGroup(\"png\")?i?(s.png=s.png?c.objectAssign({},s.png,v):v,s):c.objectAssign({},s,v):s}if(\"processPngTextReadTags\"===t.type)return Fr({readTags:t.readTags,parsedGroups:r,expanded:i,tagFilter:o,tags:s,deps:c});if(\"processPngTextReadTagsDeferredList\"===t.type){for(var m=n[t.deferredKey]||[],y=0;y<m.length;y++)s=Fr({readTags:m[y],parsedGroups:r,expanded:i,tagFilter:o,tags:s,deps:c});return s}if(\"gps\"===t.type){if(i&&o.shouldReturnGroup(\"gps\")&&r.exif){var b=c.getGpsGroupFromExifTags(r.exif);if(b){var x=c.filterTagsForReturn(\"gps\",b,o);s.gps=x}}return s}if(\"composite\"===t.type){if(!o.shouldReturnGroup(\"composite\"))return s;var A=s,T=i;o.isActive&&(A={exif:r.exif,file:r.file},T=1);var I=c.Composite.get(A,T);return I?Gr(s,\"composite\",c.filterTagsForReturn(\"composite\",I,o),i,c):s}if(\"thumbnail\"===t.type){if(!o.shouldReturnGroup(\"thumbnail\")||!o.shouldReturnTag(\"thumbnail\",\"Thumbnail\"))return delete s.Thumbnail,s;if(!f)return s;var w=f?c.filterTagsForParse(\"thumbnail\",f,o):void 0;return w&&(r.thumbnail=w),delete s.Thumbnail,s}if(\"metadataRange\"===t.type){if(!i)return s;var S=function(e,t,n,r){var i=(e||[]).slice(),o=!!t;if(r&&r.mpf&&Array.isArray(r.mpf.Images))for(var u=0;u<r.mpf.Images.length;u++){var a=r.mpf.Images[u];if(a&&a.ImageOffset&&a.ImageSize){var f=a.ImageOffset.value,s=a.ImageSize.value;\"number\"!=typeof f||f<=0||\"number\"!=typeof s||s<=0||i.push({type:\"mpfImage\",start:f,end:f+s})}}if(0!==i.length){i.sort(function(e,t){return e.start-t.start});for(var c=i[0].start,d=i[0].end,l=1;l<i.length;l++)i[l].end>d&&(d=i[l].end);var p=n&&\"number\"==typeof n.byteLength?n.byteLength:0;return{start:c,end:d,complete:!o&&d<=p,blocks:i}}}(t.metadataBlocks,t.metadataTruncated,u,r);return S&&(s.metadataRange=S),s}return\"fileType\"===t.type?(a&&o.shouldReturnGroup(\"file\")&&o.shouldReturnTag(\"file\",\"FileType\")&&(i?(s.file||(s.file={}),s.file.FileType=a):s.FileType=a),s):s}function Gr(e,t,n,r,i){return r?(e[t]=n,e):i.objectAssign({},e,n)}function Fr(e){var t=e.readTags,n=e.parsedGroups,r=e.expanded,i=e.tagFilter,o=e.tags,u=e.deps,a=t.__exif,f=t.__iptc;if(delete t.__exif,delete t.__iptc,a){var s=u.filterTagsForParse(\"exif\",a,i);if(n.exif=n.exif?u.objectAssign({},n.exif,s):s,i.shouldReturnGroup(\"exif\")){var c=u.filterTagsForReturn(\"exif\",s,i);r?o.exif=o.exif?u.objectAssign({},o.exif,c):c:o=u.objectAssign({},o,c)}}if(f){var d=u.filterTagsForParse(\"iptc\",f,i);if(n.iptc=n.iptc?u.objectAssign({},n.iptc,d):d,i.shouldReturnGroup(\"iptc\")){var l=u.filterTagsForReturn(\"iptc\",d,i);r?o.iptc=o.iptc?u.objectAssign({},o.iptc,l):l:o=u.objectAssign({},o,l)}}if(i.shouldReturnGroup(\"png\")){var p=u.filterTagsForParse(\"png\",t,i),g=u.filterTagsForReturn(\"png\",p,i);n.pngText=p,r?(o.png=o.png?u.objectAssign({},o.png,g):g,g&&Object.keys(g).length>0&&(o.pngText=o.pngText?u.objectAssign({},o.pngText,g):g)):o=u.objectAssign({},o,g)}return o}function zr(e){this.name=\"MetadataMissingError\",this.message=e||\"No Exif data\",this.stack=Error().stack}zr.prototype=Error();var Dr={MetadataMissingError:zr},Mr={load:Vr,loadView:qr,errors:Dr},_r=Dr;function Vr(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(\"auto\"===t.length)return function(e){if(1!=e.expanded||1!=e.includeOffsets)throw Error('length: \"auto\" requires both expanded: true and includeOffsets: true.')}(t),L(Hr)(e,t);if(g(e)){if(\"undefined\"==typeof Promise)throw Error(\"Promise is required when async mode is enabled.\");var n=o({},t,{async:1});return function(e,t){return/^\\w+:\\/\\//.test(e)?\"undefined\"!=typeof fetch?y(e,m(t)).then(function(e){return e.buffer}):x(e,m(t)).then(function(e){return e.buffer}):v(e)?Promise.resolve(u(e)):T(e,m(t)).then(function(e){return e.buffer})}(e,n).then(function(e){return Hr(e,n)})}if(h(e)){if(\"undefined\"==typeof Promise)throw Error(\"Promise is required when async mode is enabled.\");var r=o({},t,{async:1});return function(e,t){return w(e,m(t)).then(function(e){return e.buffer})}(e,r).then(function(e){return Hr(e,r)})}return Hr(e,t)}function Hr(e,t){return function(e){try{return Buffer.isBuffer(e)}catch(e){return 0}}(e)&&(e=new Uint8Array(e).buffer),qr(function(e){try{return new DataView(e)}catch(t){return new B(e)}}(e),t)}function qr(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{expanded:0,async:0,computed:0,includeUnknown:0,includeOffsets:0,domParser:void 0,includeTags:void 0,excludeTags:void 0,decompress:void 0},n=t.expanded,r=void 0===n?0:n,i=t.async,u=void 0===i?0:i,a=t.computed,f=void 0===a?0:a,s=t.includeUnknown,c=void 0===s?0:s,d=t.includeOffsets,l=void 0===d?0:d,p=t.domParser,g=void 0===p?void 0:p,h=t.includeTags,v=void 0===h?void 0:h,m=t.excludeTags,y=void 0===m?void 0:m,b=t.decompress,x=void 0===b?void 0:b,A=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.includeTags,n=e.excludeTags,r=!!t,i=!!n,o=r||i,u=Object.create(null),a=Object.create(null),f=Object.create(null);if(!o)return Ct();var s=r&&(Ut(t,\"iptc\")||Ut(t,\"xmp\")||Ut(t,\"icc\")||Ut(t,\"photoshop\")||Ut(t,\"makerNotes\")||Ut(t,\"thumbnail\")||Ut(t,\"gps\")||Ut(t,\"composite\")),c=r&&Ut(t,\"composite\"),d=Object.create(null);r&&(d=function(e){var t=function(e){var t=Object.create(null);if(!e)return t;for(var n in Array.isArray(e.exif)&&e.exif.length>0&&(t[wt.exifIfdPointer]=1,function(e,t){for(var n=0;n<t.length;n++){var r=t[n];if(\"string\"==typeof r){var i=r.toLowerCase();0===i.indexOf(\"gps\")&&(e[wt.gpsInfoIfdPointer]=1),0!==i.indexOf(\"interoperability\")&&0!==i.indexOf(\"relatedimage\")||(e[wt.interoperabilityIfdPointer]=1)}}}(t,e.exif)),St)if(Ot(e[n])){for(var r=St[n],i=0;i<r.length;i++)t[r[i]]=1;t[wt.exifIfdPointer]=1}return Ot(e.gps)&&(t[wt.gpsInfoIfdPointer]=1,t[wt.exifIfdPointer]=1),t}(e);return Ut(e,\"composite\")&&function(e,t){for(var n=0;n<t.length;n++)e[t[n]]=1}(t,Pt.exif),t}(t));var l=Object.create(null);for(var p in r&&c&&(l=function(e){for(var t=Object.create(null),n=0;n<e.length;n++)t[e[n].toLowerCase()]=1;return t}(Pt.file)),It){var g=r&&Object.prototype.hasOwnProperty.call(t,p),h=void 0;i&&Object.prototype.hasOwnProperty.call(n,p)&&!g&&(h=n[p]);var v=Nt({groupKey:p,includeValue:g?t[p]:void 0,excludeValue:h,extraIncludeNames:Object.create(null)});u[p]=r?g:1,g&&kt(t[p])&&(u[p]=0),v.excludeAll&&(u[p]=0),a[p]=v;var m=Nt({groupKey:p,includeValue:Lt({groupKey:p,hasIncludeTags:r,hasIncludeEntry:g,includeTags:t,shouldParseExif:s,shouldParseFile:c}),excludeValue:h,extraIncludeNames:Et({groupKey:p,hasIncludeTags:r,hasIncludeEntry:g,shouldParseExif:s,shouldParseFile:c,exifIncludeDependencies:d,fileIncludeDependencies:l})});f[p]=m}return{isActive:o,shouldReturnGroup:y,shouldParseGroup:b,shouldReturnTag:function(e,t,n){return It[e]?y(e)?jt(a[e],t,n):0:1},shouldParseTag:function(e,t,n){return It[e]?b(e)?jt(f[e],t,n):0:1}};function y(e){return It[e]?!!u[e]:1}function b(e){return It[e]?y(e)?1:\"exif\"===e?s:\"file\"===e?c:0:1}}({includeTags:v,excludeTags:y}),T=Object.create(null),I=[],w=Object.create(null),S=[],P=0,O=void 0,C=void 0,R=ut.parseAppMarkers(e,u,r&&l),L=R.fileType,E=R.fileDataOffset,U=R.jfifDataOffset,k=R.tiffHeaderOffset,N=R.iptcDataOffset,j=R.xmpChunks,B=R.iccChunks,G=R.mpfDataOffset,F=R.pngHeaderOffset,z=R.pngTextChunks,M=R.pngChunkOffsets,_=R.vp8xChunkOffset,V=R.gifHeaderOffset,H=(R.brobExifChunk,R.brobXmpChunk,R.jxlCodestreamOffset),q=R.metadataBlocks,W=R.metadataTruncated,X=R.exifDataView,K=R.xmpDataView,Y=function(e){var t=e.iptcDataOffset,n=e.xmpChunks,r=e.pngTextChunks,i=e.pngChunkOffsets,o=e.vp8xChunkOffset;return!!e.fileType||$r(e.tiffHeaderOffset)||Jr(t)||Zr(n)||Qr(r)||ei(i)||ti(o)||0}({fileType:L,fileDataOffset:E,jfifDataOffset:U,tiffHeaderOffset:k,iptcDataOffset:N,xmpChunks:j,iccChunks:B,mpfDataOffset:G,pngHeaderOffset:F,pngTextChunks:z,pngChunkOffsets:M,vp8xChunkOffset:_,gifHeaderOffset:V,jxlCodestreamOffset:H});if($r(k)&&A.shouldParseGroup(\"exif\")){var $=function(e,t,n,r,i){try{return Xt.read(e,t,n,r,i)}catch(e){return{tags:{},byteOrder:D.BIG_ENDIAN}}}(X||e,k,c,f,A),J=$.tags;$.byteOrder,J.Thumbnail&&(O=J.Thumbnail,delete J.Thumbnail);var Z=Wr(\"exif\",J,A);T.exif=Z,Z.MakerNote&&delete Z.MakerNote.__offset,A.shouldReturnGroup(\"exif\")&&I.push({type:\"mergeGroupAssign\",groupKey:\"exif\",parsedTags:Z}),!r&&C&&(I.push(C),C=void 0)}if(Jr(N)&&A.shouldParseGroup(\"iptc\")){var Q=Wr(\"iptc\",en.read(e,N,c,A),A);T.iptc=Q,A.shouldReturnGroup(\"iptc\")&&I.push({type:\"mergeGroupAssign\",groupKey:\"iptc\",parsedTags:Q})}if(Zr(j)&&A.shouldParseGroup(\"xmp\")){var ee=Wr(\"xmp\",On.read(K||e,j,g),A);T.xmp=ee,A.shouldReturnGroup(\"xmp\")&&I.push({type:\"mergeXmpGroupAssign\",parsedTags:ee})}if(Qr(z)&&(A.shouldParseGroup(\"png\")||A.shouldParseGroup(\"exif\")||A.shouldParseGroup(\"iptc\"))){var te=tr.read(e,z,u,c,f,A,x),ne=te.readTags,re=te.readTagsPromise;P=!!re,I.push({type:\"processPngTextReadTags\",readTags:ne}),re&&(S.push(re.then(function(e){w.pngTextTagList=e})),I.push({type:\"processPngTextReadTagsDeferredList\",deferredKey:\"pngTextTagList\"}))}if(ei(M)&&A.shouldParseGroup(\"png\")){var ie=Wr(\"png\",br.read(e,M),A);T.pngChunk=ie,A.shouldReturnGroup(\"png\")&&I.push({type:\"mergePngChunk\",parsedTags:ie})}if(ti(_)&&A.shouldParseGroup(\"riff\")){var oe=Wr(\"riff\",Pr.read(e,_),A);T.riff=oe,A.shouldReturnGroup(\"riff\")&&I.push({type:\"mergeGroupMerge\",groupKey:\"riff\",parsedTags:oe})}if(I.push({type:\"gps\"}),I.push({type:\"composite\"}),I.push({type:\"thumbnail\"}),I.push({type:\"fileType\"}),r&&l&&I.push({type:\"metadataRange\",metadataBlocks:q,metadataTruncated:!!W}),!Y)throw new Dr.MetadataMissingError;var ue={objectAssign:o,hasPngTextData:Qr,filterTagsForParse:Wr,filterTagsForReturn:Xr,getGpsGroupFromExifTags:Yr,Composite:kr,Thumbnail:Ur};if(u){if(\"undefined\"==typeof Promise)throw Error(\"Promise is required when async mode is enabled.\");return Promise.all(S).then(function(){return jr({mergeSteps:I,deferredResults:w,parsedGroups:T,expanded:r,tagFilter:A,dataView:e,tiffHeaderOffset:k,exifDataView:X,fileType:L,pngTextChunks:z,pngTextIsAsync:P,thumbnailIfdTags:O,deps:ue})})}return jr({mergeSteps:I,deferredResults:w,parsedGroups:T,expanded:r,tagFilter:A,dataView:e,tiffHeaderOffset:k,exifDataView:X,fileType:L,pngTextChunks:z,pngTextIsAsync:P,thumbnailIfdTags:O,deps:ue})}function Wr(e,t,n){return n.isActive?Kr(e,t,n.shouldParseTag):t}function Xr(e,t,n){return n.isActive?Kr(e,t,n.shouldReturnTag):t}function Kr(e,t,n){if(!t)return t;var r={};for(var i in t){var o=t[i];n(e,i,u(o))&&(r[i]=o)}return r;function u(e){if(e){if(Array.isArray(e)){if(0===e.length)return;return e[0].id}return e.id}}}function Yr(e){var t=void 0;if(e.GPSLatitude&&e.GPSLatitudeRef){t=t||{};try{t.Latitude=G(e.GPSLatitude.value),\"S\"===e.GPSLatitudeRef.value.join(\"\")&&(t.Latitude=-t.Latitude)}catch(e){}}if(e.GPSLongitude&&e.GPSLongitudeRef){t=t||{};try{t.Longitude=G(e.GPSLongitude.value),\"W\"===e.GPSLongitudeRef.value.join(\"\")&&(t.Longitude=-t.Longitude)}catch(e){}}if(e.GPSAltitude&&e.GPSAltitudeRef){t=t||{};try{t.Altitude=e.GPSAltitude.value[0]/e.GPSAltitude.value[1],1===e.GPSAltitudeRef.value&&(t.Altitude=-t.Altitude)}catch(e){}}if(t)return t}function $r(e){return void 0!==e}function Jr(e){return void 0!==e}function Zr(e){return Array.isArray(e)&&e.length>0}function Qr(e){return Array.isArray(e)&&e.length>0}function ei(e){return void 0!==e}function ti(e){return void 0!==e}return t}()});\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 NF from '../utils/nf';\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, fileData, fileName, file } = attachment;\n const fileSize = attachment.size ?? file?.size;\n const url = useMemo(() => {\n let objectURL;\n // Prioritize fileData so restored drafts get a fresh blob URL\n if (fileData) {\n const blob = new Blob([fileData], { type });\n objectURL = URL.createObjectURL(blob);\n } else if (file) {\n objectURL = URL.createObjectURL(file);\n }\n if (objectURL) {\n return objectURL;\n }\n return attachment.url || null;\n }, [fileData, file, attachment.url, type]);\n\n useEffect(() => {\n return () => {\n if (url && url !== attachment.url) {\n URL.revokeObjectURL(url);\n }\n };\n }, [url]);\n\n console.log({ attachment });\n\n const checkMaxError = !!fileSize;\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 fileSize > imageSizeLimit\n ) {\n return {\n type: 'imageSizeLimit',\n details: {\n imageSize: fileSize,\n imageSizeLimit,\n },\n };\n } else if (\n type.startsWith('video') &&\n videoSizeLimit &&\n fileSize > videoSizeLimit\n ) {\n return {\n type: 'videoSizeLimit',\n details: {\n videoSize: fileSize,\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 const hasFileData = fileData || file;\n if (\n !hasFileData ||\n !type.startsWith('image/') ||\n id ||\n attachment.description\n ) {\n return;\n }\n\n let cancelled = false;\n\n (async () => {\n setUIState('loading');\n try {\n // Reconstruct File from fileData, or fall back to legacy file object\n const fileObj = fileData\n ? new File([fileData], fileName || 'upload', { type })\n : file;\n const extractedDescription = await extractImageDescription(fileObj);\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 ${NF(\n i18n.locale,\n ).format(\n width,\n )}×${NF(i18n.locale).format(height)}px to ${NF(i18n.locale).format(newWidth)}×${NF(\n i18n.locale,\n ).format(newHeight)}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 ${NF(\n i18n.locale,\n ).format(\n width,\n )}×${NF(i18n.locale).format(height)}px to ${NF(i18n.locale).format(newWidth)}×${NF(\n i18n.locale,\n ).format(newHeight)}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 const fileObj = fileData\n ? new File([fileData], fileName || 'upload', {\n type,\n })\n : file;\n body.append('image', fileObj);\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 const fileObj = fileData\n ? new File(\n [fileData],\n fileName || 'upload',\n { type },\n )\n : file;\n body.append('image', fileObj);\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 haptics from '../utils/haptics';\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// Convert camelCase to kebab-case for language codes\n// e.g., \"mnMong\" → \"mn-Mong\", \"msArab\" → \"ms-Arab\"\nconst camelToKebabCase = (str) => {\n return str.replace(/([a-z])([A-Z])/g, '$1-$2');\n};\n\n/* NOTES:\n - Max character limit includes BOTH status text and Content Warning text\n*/\n\n// Detect devices that can't open proper custom-sized windows\n// (Android phones/tablets, iOS devices, but not Chromebooks)\nconst isPopOutNotSupported =\n /Android|iPhone|iPad|iPod/.test(navigator.userAgent) &&\n !/CrOS/.test(navigator.userAgent);\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 fixLanguage(language) {\n if (!language || typeof language !== 'string') return null;\n // If inside list, return it, else fix it\n if (supportedLanguagesMap[language]) return language;\n const fixedLanguage = camelToKebabCase(language);\n if (supportedLanguagesMap[fixedLanguage]) {\n return fixedLanguage;\n }\n return null;\n}\n\nfunction Compose({\n onClose,\n replyToStatus,\n replyMode = 'all',\n editStatus,\n draftStatus,\n quoteStatus,\n standalone,\n hasOpener,\n sharedData,\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 processFiles = async (files) => {\n const supportedFiles = [];\n const unsupportedFiles = [];\n for (const file of files || []) {\n if (!isMimeTypeSupported(file.type, supportedMimeTypes)) {\n unsupportedFiles.push(file);\n } else {\n supportedFiles.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\n if (supportedFiles.length > 0) {\n // Auto-cut-off files to avoid exceeding maxMediaAttachments\n let allowedFiles = supportedFiles;\n if (maxMediaAttachments !== undefined) {\n const max = maxMediaAttachments - mediaAttachments.length;\n if (max <= 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 allowedFiles = allowedFiles.slice(0, max);\n }\n return Promise.all(\n allowedFiles.map(async (file) => ({\n fileData: await file.arrayBuffer(),\n fileName: file.name,\n type: file.type,\n size: file.size,\n url: URL.createObjectURL(file),\n id: null,\n description: null,\n })),\n );\n }\n return null;\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 fixLanguage(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 useEffect(() => {\n if (sharedData) {\n const { initialText, files } = sharedData;\n\n if (initialText && textareaRef.current) {\n textareaRef.current.value = initialText;\n oninputTextarea();\n }\n\n if (files && files.length > 0) {\n processFiles(files)\n .then((mediaFiles) => {\n if (mediaFiles) {\n setMediaAttachments(mediaFiles);\n }\n })\n .catch((err) => {\n console.error('Failed to process file(s):', err);\n });\n }\n }\n }, [sharedData]);\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 for (let i = 0; i < items.length; i++) {\n const item = items[i];\n if (item.kind === 'file') {\n files.push(item.getAsFile());\n }\n }\n if (files.length > 0) {\n e.preventDefault();\n e.stopPropagation();\n processFiles(files)\n .then((mediaFiles) => {\n if (mediaFiles) {\n setMediaAttachments((prev) => [...prev, ...mediaFiles]);\n }\n })\n .catch((err) => {\n console.error('Failed to process file(s):', err);\n });\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 = uiState === 'loading' || !!poll; /* ||\n !!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 {!isPopOutNotSupported && (\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 )}\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 &rsquo;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 &rsquo;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 { fileData, fileName, file, type, description, id } =\n attachment;\n console.log('UPLOADING', attachment);\n if (id) {\n // If already uploaded\n return attachment;\n } else {\n // Reconstruct File from fileData, or fall back to legacy file object\n const fileObj = fileData\n ? new File([fileData], fileName || 'upload', { type })\n : file;\n const params = removeNullUndefined({\n file: fileObj,\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()) {\n params.quote_approval_policy = quoteApprovalPolicy;\n if (currentQuoteStatus?.id) {\n params.quoted_status_id = currentQuoteStatus.id;\n }\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 onKeyDown={(e) => {\n if (\n e.key === 'Enter' &&\n !e.ctrlKey &&\n !e.metaKey &&\n !e.isComposing\n ) {\n e.preventDefault();\n focusTextarea();\n }\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=\"alert\" /> <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 icon=\"alert\" alt={_(ADD_LABELS.sensitive)} />\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 || language}\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\n type=\"submit\"\n disabled={uiState === 'loading'}\n onClick={() => haptics.trigger('medium')}\n >\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 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 fileData = await blob.arrayBuffer();\n const newMediaAttachments = [\n ...mediaAttachments,\n {\n fileData,\n fileName:\n type === 'video/mp4' ? 'video.mp4' : 'image.gif',\n type,\n size: blob.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-ZJN5xSb4.js"}