From 45709617dc51ea620bc360013f4ef47402f9ae22 Mon Sep 17 00:00:00 2001 From: archos Date: Tue, 8 Oct 2024 19:16:36 +0200 Subject: [PATCH] =?UTF-8?q?aktualizce=20a=20nov=C3=A1=20verze=20phanpy?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LICENSE | 9 - README.md | 44 -- assets/compose-0-ugg34f.js | 2 - assets/compose-0-ugg34f.js.map | 1 - assets/compose-25Dzs_uX.js | 2 - assets/compose-25Dzs_uX.js.map | 1 - assets/compose-2Y_rtJfC.js | 26 -- assets/compose-2Y_rtJfC.js.map | 1 - assets/compose-BMVCbqt4.js | 2 - assets/compose-BMVCbqt4.js.map | 1 - assets/compose-GEsXl1Xt.js | 2 - assets/compose-GEsXl1Xt.js.map | 1 - assets/compose-GqPD-mCC.js | 26 -- assets/compose-GqPD-mCC.js.map | 1 - ...ompose-ZHWvrAfe.js => compose-Gtwe4AUy.js} | 4 +- ...HWvrAfe.js.map => compose-Gtwe4AUy.js.map} | 2 +- assets/compose-IeRiPb7Z.js | 26 -- assets/compose-IeRiPb7Z.js.map | 1 - assets/compose-Q2Nvocbp.js | 2 - assets/compose-Q2Nvocbp.js.map | 1 - assets/compose-SFPeyg8r.js | 2 - assets/compose-SFPeyg8r.js.map | 1 - assets/compose-W5mt71Ut.js | 26 -- assets/compose-W5mt71Ut.js.map | 1 - assets/compose-Z2yW_miJ.js | 2 - assets/compose-Z2yW_miJ.js.map | 1 - assets/compose-feY08m5z.js | 26 -- assets/compose-feY08m5z.js.map | 1 - assets/compose-hDlR2o-x.js | 26 ++ assets/compose-hDlR2o-x.js.map | 1 + assets/compose-nqnue7DX.js | 26 -- assets/compose-nqnue7DX.js.map | 1 - assets/compose-oSeoicVc.js | 26 -- assets/compose-oSeoicVc.js.map | 1 - assets/compose-sEmGhv2s.js | 26 -- assets/compose-sEmGhv2s.js.map | 1 - assets/compose-vcUtIZ0p.js | 2 - assets/compose-vcUtIZ0p.js.map | 1 - assets/compose-z10cLv8p.js | 26 -- assets/compose-z10cLv8p.js.map | 1 - assets/fuse-4Bvpr1kU.js | 183 --------- assets/fuse-4Bvpr1kU.js.map | 1 - assets/fuse-7xj_Hrid.js | 183 --------- assets/fuse-7xj_Hrid.js.map | 1 - assets/fuse-BiYvWrZm.js | 183 --------- assets/fuse-BiYvWrZm.js.map | 1 - assets/fuse-GSnTzOyH.js | 183 --------- assets/fuse-GSnTzOyH.js.map | 1 - assets/fuse-MwQ_F2cO.js | 181 --------- assets/fuse-MwQ_F2cO.js.map | 1 - assets/fuse-eCqHk9H3.js | 183 --------- assets/fuse-eCqHk9H3.js.map | 1 - assets/fuse-rEcEZtAj.js | 183 --------- assets/fuse-rEcEZtAj.js.map | 1 - assets/fuse-sLNor9NY.js | 183 --------- assets/fuse-sLNor9NY.js.map | 1 - assets/fuse-uYeGZ3ik.js | 181 +++++++++ assets/fuse-uYeGZ3ik.js.map | 1 + assets/index-5wlk767u.js | 2 - assets/index-5wlk767u.js.map | 1 - assets/index-A6D3rukc.js | 2 - assets/index-A6D3rukc.js.map | 1 - assets/index-CeOZgm-k.js | 2 - assets/index-CeOZgm-k.js.map | 1 - assets/index-ELVm98zU.js | 2 - assets/index-ELVm98zU.js.map | 1 - assets/index-cp67bciK.js | 2 - assets/index-cp67bciK.js.map | 1 - assets/index-dbOm7oTI.js | 2 - assets/index-dbOm7oTI.js.map | 1 - assets/index-gNUvm9kb.js | 2 - assets/index-gNUvm9kb.js.map | 1 - assets/instances-MzK7fGXv.json | 384 ------------------ assets/locales/ar-SA-8WIB99UV.js | 2 - assets/locales/ar-SA-8WIB99UV.js.map | 1 - assets/locales/ar-SA-d0IcoGc_.js | 2 + assets/locales/ar-SA-d0IcoGc_.js.map | 1 + assets/locales/ca-ES-NQgq8q4p.js | 2 + assets/locales/ca-ES-NQgq8q4p.js.map | 1 + assets/locales/ca-ES-rzGqwou2.js | 2 - assets/locales/ca-ES-rzGqwou2.js.map | 1 - assets/locales/cs-CZ-fQsWEx8D.js | 2 + assets/locales/cs-CZ-fQsWEx8D.js.map | 1 + assets/locales/cs-CZ-mACGttet.js | 2 - assets/locales/cs-CZ-mACGttet.js.map | 1 - assets/locales/de-DE-4Y9oxJt9.js | 2 + assets/locales/de-DE-4Y9oxJt9.js.map | 1 + assets/locales/de-DE-7EC9pOwV.js | 2 - assets/locales/de-DE-7EC9pOwV.js.map | 1 - assets/locales/eo-UY-8WIB99UV.js | 2 - assets/locales/eo-UY-8WIB99UV.js.map | 1 - assets/locales/eo-UY-QMukRqop.js | 2 + assets/locales/eo-UY-QMukRqop.js.map | 1 + assets/locales/es-ES-BVO7yU-V.js | 2 + assets/locales/es-ES-BVO7yU-V.js.map | 1 + assets/locales/es-ES-YIzrt3_Q.js | 2 - assets/locales/es-ES-YIzrt3_Q.js.map | 1 - assets/locales/eu-ES-8b0eDXji.js | 2 - assets/locales/eu-ES-8b0eDXji.js.map | 1 - assets/locales/eu-ES-e1MlT9L0.js | 2 + assets/locales/eu-ES-e1MlT9L0.js.map | 1 + assets/locales/fa-IR-Lefw2bMZ.js | 2 + assets/locales/fa-IR-Lefw2bMZ.js.map | 1 + assets/locales/fa-IR-g3U_RJnj.js | 2 - assets/locales/fa-IR-g3U_RJnj.js.map | 1 - assets/locales/fi-FI-JVGPDlpj.js | 2 + assets/locales/fi-FI-JVGPDlpj.js.map | 1 + assets/locales/fi-FI-SiMnHBzO.js | 2 - assets/locales/fi-FI-SiMnHBzO.js.map | 1 - assets/locales/fr-FR-ePx-LY3z.js | 2 + assets/locales/fr-FR-ePx-LY3z.js.map | 1 + assets/locales/fr-FR-kEt0chL5.js | 2 - assets/locales/fr-FR-kEt0chL5.js.map | 1 - assets/locales/gl-ES-X60wJI5A.js | 2 - assets/locales/gl-ES-X60wJI5A.js.map | 1 - assets/locales/gl-ES-uOACPqDw.js | 2 + assets/locales/gl-ES-uOACPqDw.js.map | 1 + assets/locales/he-IL-8WIB99UV.js | 2 - assets/locales/he-IL-8WIB99UV.js.map | 1 - assets/locales/he-IL-d0IcoGc_.js | 2 + assets/locales/he-IL-d0IcoGc_.js.map | 1 + assets/locales/it-IT-8WIB99UV.js | 2 - assets/locales/it-IT-8WIB99UV.js.map | 1 - assets/locales/it-IT-zkEqgvQc.js | 2 + assets/locales/it-IT-zkEqgvQc.js.map | 1 + assets/locales/ja-JP-7hRw_nT0.js | 2 + assets/locales/ja-JP-7hRw_nT0.js.map | 1 + assets/locales/ja-JP-8WIB99UV.js | 2 - assets/locales/ja-JP-8WIB99UV.js.map | 1 - assets/locales/kab-nrAsUXV7.js | 2 + assets/locales/kab-nrAsUXV7.js.map | 1 + assets/locales/kab-rXQumIzl.js | 2 - assets/locales/kab-rXQumIzl.js.map | 1 - assets/locales/ko-KR-rcv85GJM.js | 2 + assets/locales/ko-KR-rcv85GJM.js.map | 1 + assets/locales/ko-KR-w80QRZ31.js | 2 - assets/locales/ko-KR-w80QRZ31.js.map | 1 - assets/locales/lt-LT-8RxWCtZs.js | 2 + assets/locales/lt-LT-8RxWCtZs.js.map | 1 + assets/locales/lt-LT-8WIB99UV.js | 2 - assets/locales/lt-LT-8WIB99UV.js.map | 1 - assets/locales/nb-NO-d0IcoGc_.js | 2 + assets/locales/nb-NO-d0IcoGc_.js.map | 1 + assets/locales/nl-NL-8WIB99UV.js | 2 - assets/locales/nl-NL-8WIB99UV.js.map | 1 - assets/locales/nl-NL-CeLvve2g.js | 2 + assets/locales/nl-NL-CeLvve2g.js.map | 1 + assets/locales/oc-FR-8WIB99UV.js | 2 - assets/locales/oc-FR-8WIB99UV.js.map | 1 - assets/locales/oc-FR-d0IcoGc_.js | 2 + assets/locales/oc-FR-d0IcoGc_.js.map | 1 + assets/locales/pl-PL-8WIB99UV.js | 2 - assets/locales/pl-PL-8WIB99UV.js.map | 1 - assets/locales/pl-PL-d0IcoGc_.js | 2 + assets/locales/pl-PL-d0IcoGc_.js.map | 1 + assets/locales/pseudo-LOCALE-9w6Kn6k2.js | 2 - assets/locales/pseudo-LOCALE-tOtHxWmm.js | 2 + ...2.js.map => pseudo-LOCALE-tOtHxWmm.js.map} | 2 +- assets/locales/pt-BR-Kstrv7XL.js | 2 - assets/locales/pt-BR-Kstrv7XL.js.map | 1 - assets/locales/pt-BR-VPHddHuv.js | 2 + assets/locales/pt-BR-VPHddHuv.js.map | 1 + assets/locales/pt-PT-2c8ozYpW.js | 2 - assets/locales/pt-PT-2c8ozYpW.js.map | 1 - assets/locales/pt-PT-Shszru04.js | 2 + assets/locales/pt-PT-Shszru04.js.map | 1 + assets/locales/ru-RU-ffvGPZ2f.js | 2 + assets/locales/ru-RU-ffvGPZ2f.js.map | 1 + assets/locales/ru-RU-w-QqUc2J.js | 2 - assets/locales/ru-RU-w-QqUc2J.js.map | 1 - assets/locales/th-TH-8WIB99UV.js | 2 - assets/locales/th-TH-8WIB99UV.js.map | 1 - assets/locales/th-TH-d0IcoGc_.js | 2 + assets/locales/th-TH-d0IcoGc_.js.map | 1 + assets/locales/uk-UA-d0IcoGc_.js | 2 + assets/locales/uk-UA-d0IcoGc_.js.map | 1 + assets/locales/zh-CN-lSLSktKu.js | 2 + assets/locales/zh-CN-lSLSktKu.js.map | 1 + assets/locales/zh-CN-ou2aKXqE.js | 2 - assets/locales/zh-CN-ou2aKXqE.js.map | 1 - assets/locales/zh-TW-8WIB99UV.js | 2 - assets/locales/zh-TW-8WIB99UV.js.map | 1 - assets/locales/zh-TW-d0IcoGc_.js | 2 + assets/locales/zh-TW-d0IcoGc_.js.map | 1 + assets/main-1wKRS81d.js | 25 -- assets/main-1wKRS81d.js.map | 1 - assets/main-63N-3YbG.js | 32 -- assets/main-63N-3YbG.js.map | 1 - assets/main-DaGMLi0n.js | 29 ++ assets/main-DaGMLi0n.js.map | 1 + assets/main-FOJmGvRC.js | 32 -- assets/main-FOJmGvRC.js.map | 1 - assets/main-Gn0PSoQw.js | 32 -- assets/main-Gn0PSoQw.js.map | 1 - assets/main-hRAbIWke.js | 32 -- assets/main-hRAbIWke.js.map | 1 - assets/main-kbQH2PR3.js | 29 -- assets/main-kbQH2PR3.js.map | 1 - assets/main-q4UThEef.js | 32 -- assets/main-q4UThEef.js.map | 1 - assets/main-t2P3iL-h.js | 32 -- assets/main-t2P3iL-h.js.map | 1 - assets/main-ztohNzti.js | 32 -- assets/main-ztohNzti.js.map | 1 - ...nc_RJpe6.js => polyfill-force-71Ewx0dk.js} | 6 +- ....js.map => polyfill-force-71Ewx0dk.js.map} | 2 +- assets/polyfill-force-DZUmDfwq.js | 3 - assets/polyfill-force-DZUmDfwq.js.map | 1 - assets/polyfill-force-FXjoUqOk.js | 3 - assets/polyfill-force-FXjoUqOk.js.map | 1 - assets/polyfill-force-FtpG8yY4.js | 3 - assets/polyfill-force-FtpG8yY4.js.map | 1 - assets/polyfill-force-QDvkLAHy.js | 3 - assets/polyfill-force-QDvkLAHy.js.map | 1 - assets/polyfill-force-g2mcly7m.js | 3 - assets/polyfill-force-g2mcly7m.js.map | 1 - assets/polyfill-force-g5zrZgQH.js | 3 - assets/polyfill-force-g5zrZgQH.js.map | 1 - assets/polyfill-force-shE5d4Mw.js | 3 - assets/polyfill-force-shE5d4Mw.js.map | 1 - assets/polyfill-force-v3PARI-z.js | 3 - assets/polyfill-force-v3PARI-z.js.map | 1 - assets/status-FORkhePO.js | 72 ---- assets/status-FORkhePO.js.map | 1 - assets/style-C0C806IL.css | 7 - assets/style-Jyj9EDmC.css | 7 - assets/style-KZH8lEC5.css | 7 - assets/style-LhJ7Rndd.css | 7 - assets/style-U9i6KDxy.css | 7 - assets/style-VzhezNpT.css | 7 + assets/style-hHkodcxc.css | 7 - assets/style-wyTLd4Oi.css | 7 - assets/tinyld-light-PxOyhYWY.js | 2 - assets/tinyld-light-tbgyvj3S.js | 2 + ...WY.js.map => tinyld-light-tbgyvj3S.js.map} | 2 +- assets/useTitle-4zhrJw0D.js | 38 -- assets/useTitle-4zhrJw0D.js.map | 1 - assets/useTitle-6AJYXxJy.js | 38 ++ assets/useTitle-6AJYXxJy.js.map | 1 + assets/useTitle-KMkGka9H.js | 38 -- assets/useTitle-KMkGka9H.js.map | 1 - assets/useTitle-KlNTnsJV.js | 38 -- assets/useTitle-KlNTnsJV.js.map | 1 - assets/useTitle-Mh8hVeGN.js | 38 -- assets/useTitle-Mh8hVeGN.js.map | 1 - assets/useTitle-SRT6j-GL.js | 38 -- assets/useTitle-SRT6j-GL.js.map | 1 - assets/useTitle-TOnOofzE.js | 38 -- assets/useTitle-TOnOofzE.js.map | 1 - assets/useTitle-YZXo8QRp.js | 38 -- assets/useTitle-YZXo8QRp.js.map | 1 - assets/useTitle-dCp14HlU.js | 3 - assets/useTitle-dCp14HlU.js.map | 1 - assets/useTitle-v86HJIox.js | 38 -- assets/useTitle-v86HJIox.js.map | 1 - assets/vendor-GrW-f9CX.js | 142 ------- assets/vendor-GrW-f9CX.js.map | 1 - compose/index.html | 11 +- index.html | 14 +- sw.js | 2 +- sw.js.map | 2 +- version.json | 2 +- 262 files changed, 402 insertions(+), 3197 deletions(-) delete mode 100644 LICENSE delete mode 100644 README.md delete mode 100644 assets/compose-0-ugg34f.js delete mode 100644 assets/compose-0-ugg34f.js.map delete mode 100644 assets/compose-25Dzs_uX.js delete mode 100644 assets/compose-25Dzs_uX.js.map delete mode 100644 assets/compose-2Y_rtJfC.js delete mode 100644 assets/compose-2Y_rtJfC.js.map delete mode 100644 assets/compose-BMVCbqt4.js delete mode 100644 assets/compose-BMVCbqt4.js.map delete mode 100644 assets/compose-GEsXl1Xt.js delete mode 100644 assets/compose-GEsXl1Xt.js.map delete mode 100644 assets/compose-GqPD-mCC.js delete mode 100644 assets/compose-GqPD-mCC.js.map rename assets/{compose-ZHWvrAfe.js => compose-Gtwe4AUy.js} (62%) rename assets/{compose-ZHWvrAfe.js.map => compose-Gtwe4AUy.js.map} (98%) delete mode 100644 assets/compose-IeRiPb7Z.js delete mode 100644 assets/compose-IeRiPb7Z.js.map delete mode 100644 assets/compose-Q2Nvocbp.js delete mode 100644 assets/compose-Q2Nvocbp.js.map delete mode 100644 assets/compose-SFPeyg8r.js delete mode 100644 assets/compose-SFPeyg8r.js.map delete mode 100644 assets/compose-W5mt71Ut.js delete mode 100644 assets/compose-W5mt71Ut.js.map delete mode 100644 assets/compose-Z2yW_miJ.js delete mode 100644 assets/compose-Z2yW_miJ.js.map delete mode 100644 assets/compose-feY08m5z.js delete mode 100644 assets/compose-feY08m5z.js.map create mode 100644 assets/compose-hDlR2o-x.js create mode 100644 assets/compose-hDlR2o-x.js.map delete mode 100644 assets/compose-nqnue7DX.js delete mode 100644 assets/compose-nqnue7DX.js.map delete mode 100644 assets/compose-oSeoicVc.js delete mode 100644 assets/compose-oSeoicVc.js.map delete mode 100644 assets/compose-sEmGhv2s.js delete mode 100644 assets/compose-sEmGhv2s.js.map delete mode 100644 assets/compose-vcUtIZ0p.js delete mode 100644 assets/compose-vcUtIZ0p.js.map delete mode 100644 assets/compose-z10cLv8p.js delete mode 100644 assets/compose-z10cLv8p.js.map delete mode 100644 assets/fuse-4Bvpr1kU.js delete mode 100644 assets/fuse-4Bvpr1kU.js.map delete mode 100644 assets/fuse-7xj_Hrid.js delete mode 100644 assets/fuse-7xj_Hrid.js.map delete mode 100644 assets/fuse-BiYvWrZm.js delete mode 100644 assets/fuse-BiYvWrZm.js.map delete mode 100644 assets/fuse-GSnTzOyH.js delete mode 100644 assets/fuse-GSnTzOyH.js.map delete mode 100644 assets/fuse-MwQ_F2cO.js delete mode 100644 assets/fuse-MwQ_F2cO.js.map delete mode 100644 assets/fuse-eCqHk9H3.js delete mode 100644 assets/fuse-eCqHk9H3.js.map delete mode 100644 assets/fuse-rEcEZtAj.js delete mode 100644 assets/fuse-rEcEZtAj.js.map delete mode 100644 assets/fuse-sLNor9NY.js delete mode 100644 assets/fuse-sLNor9NY.js.map create mode 100644 assets/fuse-uYeGZ3ik.js create mode 100644 assets/fuse-uYeGZ3ik.js.map delete mode 100644 assets/index-5wlk767u.js delete mode 100644 assets/index-5wlk767u.js.map delete mode 100644 assets/index-A6D3rukc.js delete mode 100644 assets/index-A6D3rukc.js.map delete mode 100644 assets/index-CeOZgm-k.js delete mode 100644 assets/index-CeOZgm-k.js.map delete mode 100644 assets/index-ELVm98zU.js delete mode 100644 assets/index-ELVm98zU.js.map delete mode 100644 assets/index-cp67bciK.js delete mode 100644 assets/index-cp67bciK.js.map delete mode 100644 assets/index-dbOm7oTI.js delete mode 100644 assets/index-dbOm7oTI.js.map delete mode 100644 assets/index-gNUvm9kb.js delete mode 100644 assets/index-gNUvm9kb.js.map delete mode 100644 assets/instances-MzK7fGXv.json delete mode 100644 assets/locales/ar-SA-8WIB99UV.js delete mode 100644 assets/locales/ar-SA-8WIB99UV.js.map create mode 100644 assets/locales/ar-SA-d0IcoGc_.js create mode 100644 assets/locales/ar-SA-d0IcoGc_.js.map create mode 100644 assets/locales/ca-ES-NQgq8q4p.js create mode 100644 assets/locales/ca-ES-NQgq8q4p.js.map delete mode 100644 assets/locales/ca-ES-rzGqwou2.js delete mode 100644 assets/locales/ca-ES-rzGqwou2.js.map create mode 100644 assets/locales/cs-CZ-fQsWEx8D.js create mode 100644 assets/locales/cs-CZ-fQsWEx8D.js.map delete mode 100644 assets/locales/cs-CZ-mACGttet.js delete mode 100644 assets/locales/cs-CZ-mACGttet.js.map create mode 100644 assets/locales/de-DE-4Y9oxJt9.js create mode 100644 assets/locales/de-DE-4Y9oxJt9.js.map delete mode 100644 assets/locales/de-DE-7EC9pOwV.js delete mode 100644 assets/locales/de-DE-7EC9pOwV.js.map delete mode 100644 assets/locales/eo-UY-8WIB99UV.js delete mode 100644 assets/locales/eo-UY-8WIB99UV.js.map create mode 100644 assets/locales/eo-UY-QMukRqop.js create mode 100644 assets/locales/eo-UY-QMukRqop.js.map create mode 100644 assets/locales/es-ES-BVO7yU-V.js create mode 100644 assets/locales/es-ES-BVO7yU-V.js.map delete mode 100644 assets/locales/es-ES-YIzrt3_Q.js delete mode 100644 assets/locales/es-ES-YIzrt3_Q.js.map delete mode 100644 assets/locales/eu-ES-8b0eDXji.js delete mode 100644 assets/locales/eu-ES-8b0eDXji.js.map create mode 100644 assets/locales/eu-ES-e1MlT9L0.js create mode 100644 assets/locales/eu-ES-e1MlT9L0.js.map create mode 100644 assets/locales/fa-IR-Lefw2bMZ.js create mode 100644 assets/locales/fa-IR-Lefw2bMZ.js.map delete mode 100644 assets/locales/fa-IR-g3U_RJnj.js delete mode 100644 assets/locales/fa-IR-g3U_RJnj.js.map create mode 100644 assets/locales/fi-FI-JVGPDlpj.js create mode 100644 assets/locales/fi-FI-JVGPDlpj.js.map delete mode 100644 assets/locales/fi-FI-SiMnHBzO.js delete mode 100644 assets/locales/fi-FI-SiMnHBzO.js.map create mode 100644 assets/locales/fr-FR-ePx-LY3z.js create mode 100644 assets/locales/fr-FR-ePx-LY3z.js.map delete mode 100644 assets/locales/fr-FR-kEt0chL5.js delete mode 100644 assets/locales/fr-FR-kEt0chL5.js.map delete mode 100644 assets/locales/gl-ES-X60wJI5A.js delete mode 100644 assets/locales/gl-ES-X60wJI5A.js.map create mode 100644 assets/locales/gl-ES-uOACPqDw.js create mode 100644 assets/locales/gl-ES-uOACPqDw.js.map delete mode 100644 assets/locales/he-IL-8WIB99UV.js delete mode 100644 assets/locales/he-IL-8WIB99UV.js.map create mode 100644 assets/locales/he-IL-d0IcoGc_.js create mode 100644 assets/locales/he-IL-d0IcoGc_.js.map delete mode 100644 assets/locales/it-IT-8WIB99UV.js delete mode 100644 assets/locales/it-IT-8WIB99UV.js.map create mode 100644 assets/locales/it-IT-zkEqgvQc.js create mode 100644 assets/locales/it-IT-zkEqgvQc.js.map create mode 100644 assets/locales/ja-JP-7hRw_nT0.js create mode 100644 assets/locales/ja-JP-7hRw_nT0.js.map delete mode 100644 assets/locales/ja-JP-8WIB99UV.js delete mode 100644 assets/locales/ja-JP-8WIB99UV.js.map create mode 100644 assets/locales/kab-nrAsUXV7.js create mode 100644 assets/locales/kab-nrAsUXV7.js.map delete mode 100644 assets/locales/kab-rXQumIzl.js delete mode 100644 assets/locales/kab-rXQumIzl.js.map create mode 100644 assets/locales/ko-KR-rcv85GJM.js create mode 100644 assets/locales/ko-KR-rcv85GJM.js.map delete mode 100644 assets/locales/ko-KR-w80QRZ31.js delete mode 100644 assets/locales/ko-KR-w80QRZ31.js.map create mode 100644 assets/locales/lt-LT-8RxWCtZs.js create mode 100644 assets/locales/lt-LT-8RxWCtZs.js.map delete mode 100644 assets/locales/lt-LT-8WIB99UV.js delete mode 100644 assets/locales/lt-LT-8WIB99UV.js.map create mode 100644 assets/locales/nb-NO-d0IcoGc_.js create mode 100644 assets/locales/nb-NO-d0IcoGc_.js.map delete mode 100644 assets/locales/nl-NL-8WIB99UV.js delete mode 100644 assets/locales/nl-NL-8WIB99UV.js.map create mode 100644 assets/locales/nl-NL-CeLvve2g.js create mode 100644 assets/locales/nl-NL-CeLvve2g.js.map delete mode 100644 assets/locales/oc-FR-8WIB99UV.js delete mode 100644 assets/locales/oc-FR-8WIB99UV.js.map create mode 100644 assets/locales/oc-FR-d0IcoGc_.js create mode 100644 assets/locales/oc-FR-d0IcoGc_.js.map delete mode 100644 assets/locales/pl-PL-8WIB99UV.js delete mode 100644 assets/locales/pl-PL-8WIB99UV.js.map create mode 100644 assets/locales/pl-PL-d0IcoGc_.js create mode 100644 assets/locales/pl-PL-d0IcoGc_.js.map delete mode 100644 assets/locales/pseudo-LOCALE-9w6Kn6k2.js create mode 100644 assets/locales/pseudo-LOCALE-tOtHxWmm.js rename assets/locales/{pseudo-LOCALE-9w6Kn6k2.js.map => pseudo-LOCALE-tOtHxWmm.js.map} (99%) delete mode 100644 assets/locales/pt-BR-Kstrv7XL.js delete mode 100644 assets/locales/pt-BR-Kstrv7XL.js.map create mode 100644 assets/locales/pt-BR-VPHddHuv.js create mode 100644 assets/locales/pt-BR-VPHddHuv.js.map delete mode 100644 assets/locales/pt-PT-2c8ozYpW.js delete mode 100644 assets/locales/pt-PT-2c8ozYpW.js.map create mode 100644 assets/locales/pt-PT-Shszru04.js create mode 100644 assets/locales/pt-PT-Shszru04.js.map create mode 100644 assets/locales/ru-RU-ffvGPZ2f.js create mode 100644 assets/locales/ru-RU-ffvGPZ2f.js.map delete mode 100644 assets/locales/ru-RU-w-QqUc2J.js delete mode 100644 assets/locales/ru-RU-w-QqUc2J.js.map delete mode 100644 assets/locales/th-TH-8WIB99UV.js delete mode 100644 assets/locales/th-TH-8WIB99UV.js.map create mode 100644 assets/locales/th-TH-d0IcoGc_.js create mode 100644 assets/locales/th-TH-d0IcoGc_.js.map create mode 100644 assets/locales/uk-UA-d0IcoGc_.js create mode 100644 assets/locales/uk-UA-d0IcoGc_.js.map create mode 100644 assets/locales/zh-CN-lSLSktKu.js create mode 100644 assets/locales/zh-CN-lSLSktKu.js.map delete mode 100644 assets/locales/zh-CN-ou2aKXqE.js delete mode 100644 assets/locales/zh-CN-ou2aKXqE.js.map delete mode 100644 assets/locales/zh-TW-8WIB99UV.js delete mode 100644 assets/locales/zh-TW-8WIB99UV.js.map create mode 100644 assets/locales/zh-TW-d0IcoGc_.js create mode 100644 assets/locales/zh-TW-d0IcoGc_.js.map delete mode 100644 assets/main-1wKRS81d.js delete mode 100644 assets/main-1wKRS81d.js.map delete mode 100644 assets/main-63N-3YbG.js delete mode 100644 assets/main-63N-3YbG.js.map create mode 100644 assets/main-DaGMLi0n.js create mode 100644 assets/main-DaGMLi0n.js.map delete mode 100644 assets/main-FOJmGvRC.js delete mode 100644 assets/main-FOJmGvRC.js.map delete mode 100644 assets/main-Gn0PSoQw.js delete mode 100644 assets/main-Gn0PSoQw.js.map delete mode 100644 assets/main-hRAbIWke.js delete mode 100644 assets/main-hRAbIWke.js.map delete mode 100644 assets/main-kbQH2PR3.js delete mode 100644 assets/main-kbQH2PR3.js.map delete mode 100644 assets/main-q4UThEef.js delete mode 100644 assets/main-q4UThEef.js.map delete mode 100644 assets/main-t2P3iL-h.js delete mode 100644 assets/main-t2P3iL-h.js.map delete mode 100644 assets/main-ztohNzti.js delete mode 100644 assets/main-ztohNzti.js.map rename assets/{polyfill-force-nc_RJpe6.js => polyfill-force-71Ewx0dk.js} (99%) rename assets/{polyfill-force-nc_RJpe6.js.map => polyfill-force-71Ewx0dk.js.map} (99%) delete mode 100644 assets/polyfill-force-DZUmDfwq.js delete mode 100644 assets/polyfill-force-DZUmDfwq.js.map delete mode 100644 assets/polyfill-force-FXjoUqOk.js delete mode 100644 assets/polyfill-force-FXjoUqOk.js.map delete mode 100644 assets/polyfill-force-FtpG8yY4.js delete mode 100644 assets/polyfill-force-FtpG8yY4.js.map delete mode 100644 assets/polyfill-force-QDvkLAHy.js delete mode 100644 assets/polyfill-force-QDvkLAHy.js.map delete mode 100644 assets/polyfill-force-g2mcly7m.js delete mode 100644 assets/polyfill-force-g2mcly7m.js.map delete mode 100644 assets/polyfill-force-g5zrZgQH.js delete mode 100644 assets/polyfill-force-g5zrZgQH.js.map delete mode 100644 assets/polyfill-force-shE5d4Mw.js delete mode 100644 assets/polyfill-force-shE5d4Mw.js.map delete mode 100644 assets/polyfill-force-v3PARI-z.js delete mode 100644 assets/polyfill-force-v3PARI-z.js.map delete mode 100644 assets/status-FORkhePO.js delete mode 100644 assets/status-FORkhePO.js.map delete mode 100644 assets/style-C0C806IL.css delete mode 100644 assets/style-Jyj9EDmC.css delete mode 100644 assets/style-KZH8lEC5.css delete mode 100644 assets/style-LhJ7Rndd.css delete mode 100644 assets/style-U9i6KDxy.css create mode 100644 assets/style-VzhezNpT.css delete mode 100644 assets/style-hHkodcxc.css delete mode 100644 assets/style-wyTLd4Oi.css delete mode 100644 assets/tinyld-light-PxOyhYWY.js create mode 100644 assets/tinyld-light-tbgyvj3S.js rename assets/{tinyld-light-PxOyhYWY.js.map => tinyld-light-tbgyvj3S.js.map} (58%) delete mode 100644 assets/useTitle-4zhrJw0D.js delete mode 100644 assets/useTitle-4zhrJw0D.js.map create mode 100644 assets/useTitle-6AJYXxJy.js create mode 100644 assets/useTitle-6AJYXxJy.js.map delete mode 100644 assets/useTitle-KMkGka9H.js delete mode 100644 assets/useTitle-KMkGka9H.js.map delete mode 100644 assets/useTitle-KlNTnsJV.js delete mode 100644 assets/useTitle-KlNTnsJV.js.map delete mode 100644 assets/useTitle-Mh8hVeGN.js delete mode 100644 assets/useTitle-Mh8hVeGN.js.map delete mode 100644 assets/useTitle-SRT6j-GL.js delete mode 100644 assets/useTitle-SRT6j-GL.js.map delete mode 100644 assets/useTitle-TOnOofzE.js delete mode 100644 assets/useTitle-TOnOofzE.js.map delete mode 100644 assets/useTitle-YZXo8QRp.js delete mode 100644 assets/useTitle-YZXo8QRp.js.map delete mode 100644 assets/useTitle-dCp14HlU.js delete mode 100644 assets/useTitle-dCp14HlU.js.map delete mode 100644 assets/useTitle-v86HJIox.js delete mode 100644 assets/useTitle-v86HJIox.js.map delete mode 100644 assets/vendor-GrW-f9CX.js delete mode 100644 assets/vendor-GrW-f9CX.js.map diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 415a1ff..0000000 --- a/LICENSE +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) 2024 Archos - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/README.md b/README.md deleted file mode 100644 index 513d64f..0000000 --- a/README.md +++ /dev/null @@ -1,44 +0,0 @@ -# Phanpy - Fork projektu - -Toto je fork projektu [Phanpy](https://github.com/cheeaun/phanpy)., minimalistického webového klienta pro Mastodon. Cílem tohoto forku je pracovat na různých vylepšeních a úpravách. - -## Popis - -Phanpy je minimalistický a názorový webový klient pro Mastodon. Tento fork byl vytvořen, aby umožnil další experimenty a úpravy projektu. - -## Funkce - -- 👪 Podpora více účtů -- 🪟 Vyskakovací a zasouvací okno pro psaní příspěvků -- 🌗 Světlý/tmavý/automatický režim -- 🔔 Seskupené notifikace -- 🪺 Vnořené vlákna komentářů -- 📬 Obnova neodeslaných konceptů -- 🎠 Karusel pro boosty™️ -- ⚡ Zkratky™️ s režimy zobrazení jako multi-sloupcový nebo s tabulkovým panelem -- #️⃣ Časová osa s více hashtagy - -## Vylepšení - -- Akce u statusů (odpovědět, boost, oblíbené, záložka, atd.) jsou ve výchozím nastavení skryté. -- Objevují se pouze na individuální stránce statusu. Toto je zamýšleno ke snížení nepořádku a rozptylování. Může to vést k nižší angažovanosti, ale nehoníme se za čísly. -- Boost je reprezentován ikonou rakety. -- Zelená dvojitá šipka (retweet pro Twitter) neodpovídá termínu "boost". Zelená raketa vypadá divně, takže používám fialovou. -- Krátká uživatelská jména (@username) jsou zobrazena v časové ose místo úplného uživatelského jména (@username@instance). -- Navzdory zmíněné směrnici, že "decentralizace musí být uživateli transparentní", nemyslím si, že bychom to měli uživateli cpát do tváře pokaždé. Existují také některé problémy s přístupností pro čtečky obrazovky s úplným uživatelským jménem, ačkoli tato webová aplikace bohužel ještě není přístupná. -- Žádné automatické přehrávání videí/GIFů/čehokoliv v časové ose. -- Časová osa je již velký nepořádek s mnoha lidmi, značkami, zprávami a médii, které se snaží upoutat vaši pozornost. Nezhoršujme to. (Současná výjimka jsou animované emoji.) -- URL založené na hashe. -- Tato webová aplikace není zamýšlena jako plnohodnotná náhrada za stávající front-end Mastodonu. Neexistuje zde žádné SEO, databáze, serverless nebo jakékoliv dlouhodobě běžící servery. Možná se jednou mýlím. - -## Instalace - -Postup instalace a používání této verze je stejný jako u původního projektu. Další informace najdete v původní dokumentaci [zde](https://github.com/cheeaun/phanpy). - -## Licence - -Tento projekt je licencován pod licencí MIT. Původní autor projektu je Lim Chee Aun. Úpravy a experimenty provádí [Archos]. - -## Poznámka - -Tento fork byl vytvořen za účelem dalšího vývoje a experimentů s projektem Phanpy. Pokud máte jakékoliv dotazy nebo připomínky, neváhejte nás kontaktovat. diff --git a/assets/compose-0-ugg34f.js b/assets/compose-0-ugg34f.js deleted file mode 100644 index e93f976..0000000 --- a/assets/compose-0-ugg34f.js +++ /dev/null @@ -1,2 +0,0 @@ -import{p,H as w,S,_ as i,c as e,C as f,X as _}from"./useTitle-TOnOofzE.js";window.opener&&(console=window.opener.console);function h(){var s,a;const[t,d]=p("default"),{editStatus:n,replyToStatus:o,draftStatus:l}=window.__COMPOSE__||{};return w(n?"Editing source status":o?`Replying to @${((s=o.account)==null?void 0:s.acct)||((a=o.account)==null?void 0:a.username)}`:"Compose"),i(()=>{S()},[]),i(()=>{if(t==="closed"){try{window.opener.focus()}catch{}window.close()}},[t]),t==="closed"?e("div",{class:"box",children:[e("p",{children:"You may close this page now."}),e("p",{children:e("button",{onClick:()=>{window.close()},children:"Close window"})})]}):e(f,{editStatus:n,replyToStatus:o,draftStatus:l,standalone:!0,hasOpener:window.opener,onClose:c=>{const{newStatus:r,fn:u=()=>{}}=c||{};try{r&&window.opener.__STATES__.reloadStatusPage++,u(),d("closed")}catch{}}})}_(e(h,{}),document.getElementById("app-standalone")); -//# sourceMappingURL=compose-0-ugg34f.js.map diff --git a/assets/compose-0-ugg34f.js.map b/assets/compose-0-ugg34f.js.map deleted file mode 100644 index 3a9211a..0000000 --- a/assets/compose-0-ugg34f.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"compose-0-ugg34f.js","sources":["../../src/compose.jsx"],"sourcesContent":["import './index.css';\n\nimport './app.css';\n\nimport './polyfills';\n\nimport { render } from 'preact';\nimport { useEffect, useState } from 'preact/hooks';\n\nimport ComposeSuspense from './components/compose-suspense';\nimport { initStates } from './utils/states';\nimport useTitle from './utils/useTitle';\n\nif (window.opener) {\n console = window.opener.console;\n}\n\nfunction App() {\n const [uiState, setUIState] = useState('default');\n\n const { editStatus, replyToStatus, draftStatus } = window.__COMPOSE__ || {};\n\n useTitle(\n editStatus\n ? 'Editing source status'\n : replyToStatus\n ? `Replying to @${\n replyToStatus.account?.acct || replyToStatus.account?.username\n }`\n : 'Compose',\n );\n\n useEffect(() => {\n initStates();\n }, []);\n\n useEffect(() => {\n if (uiState === 'closed') {\n try {\n // Focus parent window\n window.opener.focus();\n } catch (e) {}\n window.close();\n }\n }, [uiState]);\n\n if (uiState === 'closed') {\n return (\n
\n

You may close this page now.

\n

\n {\n window.close();\n }}\n >\n Close window\n \n

\n
\n );\n }\n\n console.debug('OPEN COMPOSE');\n\n return (\n {\n const { newStatus, fn = () => {} } = results || {};\n try {\n if (newStatus) {\n window.opener.__STATES__.reloadStatusPage++;\n }\n fn();\n setUIState('closed');\n } catch (e) {}\n }}\n />\n );\n}\n\nrender(, document.getElementById('app-standalone'));\n"],"names":["window","opener","console","App","uiState","setUIState","useState","editStatus","replyToStatus","draftStatus","__COMPOSE__","account","acct","username","useEffect","initStates","focus","close","_jsxs","class","children","_jsx","onClick","standalone","hasOpener","newStatus","results","fn","render"],"mappings":"2EAaIA,OAAOC,SACTC,QAAUF,OAAOC,OAAOC,SAG1B,SAASC,GAAM,SACb,KAAM,CAACC,EAASC,CAAU,EAAIC,EAAS,SAAS,EAE1C,CAAEC,WAAAA,EAAYC,cAAAA,EAAeC,YAAAA,CAAAA,EAAgBT,OAAOU,aAAe,GA0BzE,OAvBEH,EAAAA,EACI,wBACAC,EACC,kBACCA,EAAAA,EAAcG,UAAdH,YAAAA,EAAuBI,SAAQJ,EAAAA,EAAcG,UAAdH,YAAAA,EAAuBK,SACvD,GACD,SACN,EAEAC,EAAU,IAAM,CACHC,GACb,EAAG,CAAE,CAAA,EAELD,EAAU,IAAM,CACd,GAAIV,IAAY,SAAU,CACpB,GAAA,CAEFJ,OAAOC,OAAOe,aACJ,CAAC,CACbhB,OAAOiB,MAAM,CACf,CAAA,EACC,CAACb,CAAO,CAAC,EAERA,IAAY,SAEZc,EAAA,MAAA,CAAKC,MAAM,MAAKC,UACdC,EAAA,IAAA,CAAAD,SAAG,8BAAA,CAA+B,EAClCC,EAAA,IAAA,CAAAD,SACEC,EAAA,SAAA,CACEC,QAASA,IAAM,CACbtB,OAAOiB,MAAM,CACf,EAAEG,SACH,cAAA,CAEO,CAAA,CACP,CAAC,CAAA,CACD,EAITlB,IAA4B,CAE5B,WAAAK,EAEIA,cAAAA,EACAC,YAAAA,EACAC,WAAAA,GACAc,UAAU,OAAA,OACVC,WAAkBvB,OAEV,UAAAwB,EAAEA,GAAAA,EAAAA,IAAAA,EAAsB,EAACC,GAAA,CAAA,EAAE,GAAIA,CACjCD,GACF,OAAe,OAAA,WAAA,mBAEfE,IACGtB,EAAA,QAAA,CACHA,MAAAA,EACW,CAAA,CACf,CAAA,CAGNuB,EAAAP,EAAAlB,EAAA,CAAA,CAAA,EAAA,SAAA,eAAA,gBAAA,CAAA"} \ No newline at end of file diff --git a/assets/compose-25Dzs_uX.js b/assets/compose-25Dzs_uX.js deleted file mode 100644 index 851d424..0000000 --- a/assets/compose-25Dzs_uX.js +++ /dev/null @@ -1,2 +0,0 @@ -import{h as w,I as p,U as S,y as i,c as e,C as f,Y as h}from"./useTitle-Mh8hVeGN.js";window.opener&&(console=window.opener.console);function m(){var s,a;const[t,d]=w("default"),{editStatus:n,replyToStatus:o,draftStatus:l}=window.__COMPOSE__||{};return p(n?"Editing source status":o?`Replying to @${((s=o.account)==null?void 0:s.acct)||((a=o.account)==null?void 0:a.username)}`:"Compose"),i(()=>{S()},[]),i(()=>{if(t==="closed"){try{window.opener.focus()}catch{}window.close()}},[t]),t==="closed"?e("div",{class:"box",children:[e("p",{children:"You may close this page now."}),e("p",{children:e("button",{onClick:()=>{window.close()},children:"Close window"})})]}):e(f,{editStatus:n,replyToStatus:o,draftStatus:l,standalone:!0,hasOpener:window.opener,onClose:c=>{const{newStatus:r,fn:u=()=>{}}=c||{};try{r&&window.opener.__STATES__.reloadStatusPage++,u(),d("closed")}catch{}}})}h(e(m,{}),document.getElementById("app-standalone")); -//# sourceMappingURL=compose-25Dzs_uX.js.map diff --git a/assets/compose-25Dzs_uX.js.map b/assets/compose-25Dzs_uX.js.map deleted file mode 100644 index 2bd4ed5..0000000 --- a/assets/compose-25Dzs_uX.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"compose-25Dzs_uX.js","sources":["../../src/compose.jsx"],"sourcesContent":["import './index.css';\nimport './app.css';\nimport './polyfills';\n\nimport { render } from 'preact';\nimport { useEffect, useState } from 'preact/hooks';\n\nimport ComposeSuspense from './components/compose-suspense';\nimport { initStates } from './utils/states';\nimport useTitle from './utils/useTitle';\n\nif (window.opener) {\n console = window.opener.console;\n}\n\nfunction App() {\n const [uiState, setUIState] = useState('default');\n\n const { editStatus, replyToStatus, draftStatus } = window.__COMPOSE__ || {};\n\n useTitle(\n editStatus\n ? 'Editing source status'\n : replyToStatus\n ? `Replying to @${\n replyToStatus.account?.acct || replyToStatus.account?.username\n }`\n : 'Compose',\n );\n\n useEffect(() => {\n initStates();\n }, []);\n\n useEffect(() => {\n if (uiState === 'closed') {\n try {\n // Focus parent window\n window.opener.focus();\n } catch (e) {}\n window.close();\n }\n }, [uiState]);\n\n if (uiState === 'closed') {\n return (\n
\n

You may close this page now.

\n

\n {\n window.close();\n }}\n >\n Close window\n \n

\n
\n );\n }\n\n console.debug('OPEN COMPOSE');\n\n return (\n {\n const { newStatus, fn = () => {} } = results || {};\n try {\n if (newStatus) {\n window.opener.__STATES__.reloadStatusPage++;\n }\n fn();\n setUIState('closed');\n } catch (e) {}\n }}\n />\n );\n}\n\nrender(, document.getElementById('app-standalone'));\n"],"names":["window","opener","console","App","uiState","setUIState","useState","editStatus","replyToStatus","draftStatus","__COMPOSE__","account","acct","username","useEffect","initStates","focus","close","_jsxs","class","children","_jsx","onClick","standalone","hasOpener","newStatus","results","fn","render"],"mappings":"qFAWIA,OAAOC,SACTC,QAAUF,OAAOC,OAAOC,SAG1B,SAASC,GAAM,SACb,KAAM,CAACC,EAASC,CAAU,EAAIC,EAAS,SAAS,EAE1C,CAAEC,WAAAA,EAAYC,cAAAA,EAAeC,YAAAA,CAAAA,EAAgBT,OAAOU,aAAe,GA0BzE,OAvBEH,EAAAA,EACI,wBACAC,EACA,kBACEA,EAAAA,EAAcG,UAAdH,YAAAA,EAAuBI,SAAQJ,EAAAA,EAAcG,UAAdH,YAAAA,EAAuBK,SAAQ,GAEhE,SACN,EAEAC,EAAU,IAAM,CACHC,GACb,EAAG,CAAE,CAAA,EAELD,EAAU,IAAM,CACd,GAAIV,IAAY,SAAU,CACpB,GAAA,CAEFJ,OAAOC,OAAOe,aACJ,CAAC,CACbhB,OAAOiB,MAAM,CACf,CAAA,EACC,CAACb,CAAO,CAAC,EAERA,IAAY,SAEZc,EAAA,MAAA,CAAKC,MAAM,MAAKC,UACdC,EAAA,IAAA,CAAAD,SAAG,8BAAA,CAA+B,EAClCC,EAAA,IAAA,CAAAD,SACEC,EAAA,SAAA,CACEC,QAASA,IAAM,CACbtB,OAAOiB,MAAM,CACf,EAAEG,SACH,cAAA,CAEO,CAAA,CACP,CAAC,CAAA,CACD,EAITlB,IAA4B,CAE5B,WAAAK,EAEIA,cAAAA,EACAC,YAAAA,EACAC,WAAAA,GACAc,UAAU,OAAA,OACVC,WAAkBvB,OAEV,UAAAwB,EAAEA,GAAAA,EAAAA,IAAAA,EAAsB,EAACC,GAAA,CAAA,EAAE,GAAIA,CACjCD,GACF,OAAe,OAAA,WAAA,mBAEfE,IACGtB,EAAA,QAAA,CACHA,MAAAA,EACW,CAAA,CACf,CAAA,CAGNuB,EAAAP,EAAAlB,EAAA,CAAA,CAAA,EAAA,SAAA,eAAA,gBAAA,CAAA"} \ No newline at end of file diff --git a/assets/compose-2Y_rtJfC.js b/assets/compose-2Y_rtJfC.js deleted file mode 100644 index 10891ea..0000000 --- a/assets/compose-2Y_rtJfC.js +++ /dev/null @@ -1,26 +0,0 @@ -var Ct=s=>{throw TypeError(s)};var rt=(s,e,n)=>e.has(s)||Ct("Cannot "+n);var T=(s,e,n)=>(rt(s,e,"read from private field"),n?n.call(s):e.get(s)),re=(s,e,n)=>e.has(s)?Ct("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(s):e.set(s,n),de=(s,e,n,o)=>(rt(s,e,"write to private field"),o?o.call(s,n):e.set(s,n),n),G=(s,e,n)=>(rt(s,e,"access private method"),n);import{B as an,Z as on,a as _e,a7 as rn,w as zt,u as ln,i as Ot,b as cn,I as K,y as Lt,h as Ht,a8 as un,M as Ve,s as ke,a3 as dn,$ as hn,n as pn,K as mn,W as Qe,c as gn,d as St,l as fn,x as vn}from"./fuse-GSnTzOyH.js";import{s as le,a as vt,p as H,F as U,f as bn,al as Nt,d as ze,_ as ee,m as yn,am as xn,q as Re,c as t,k as Ce,b as wn,L as et,i as kn,D as En,u as Fn,j as At,x as Wt}from"./useTitle-KMkGka9H.js";import{e as Cn}from"./tinyld-light-PxOyhYWY.js";import"./index-dbOm7oTI.js";class zn{constructor(e,n,{tabInsertsSuggestions:o,defaultFirstOption:r}={}){this.input=e,this.list=n,this.tabInsertsSuggestions=o??!0,this.defaultFirstOption=r??!1,this.isComposing=!1,n.id||(n.id=`combobox-${Math.random().toString().slice(2,6)}`),this.ctrlBindings=!!navigator.userAgent.match(/Macintosh/),this.keyboardEventHandler=p=>Ln(p,this),this.compositionEventHandler=p=>An(p,this),this.inputHandler=this.clearSelection.bind(this),e.setAttribute("role","combobox"),e.setAttribute("aria-controls",n.id),e.setAttribute("aria-expanded","false"),e.setAttribute("aria-autocomplete","list"),e.setAttribute("aria-haspopup","listbox")}destroy(){this.clearSelection(),this.stop(),this.input.removeAttribute("role"),this.input.removeAttribute("aria-controls"),this.input.removeAttribute("aria-expanded"),this.input.removeAttribute("aria-autocomplete"),this.input.removeAttribute("aria-haspopup")}start(){this.input.setAttribute("aria-expanded","true"),this.input.addEventListener("compositionstart",this.compositionEventHandler),this.input.addEventListener("compositionend",this.compositionEventHandler),this.input.addEventListener("input",this.inputHandler),this.input.addEventListener("keydown",this.keyboardEventHandler),this.list.addEventListener("click",It),this.indicateDefaultOption()}stop(){this.clearSelection(),this.input.setAttribute("aria-expanded","false"),this.input.removeEventListener("compositionstart",this.compositionEventHandler),this.input.removeEventListener("compositionend",this.compositionEventHandler),this.input.removeEventListener("input",this.inputHandler),this.input.removeEventListener("keydown",this.keyboardEventHandler),this.list.removeEventListener("click",It)}indicateDefaultOption(){var e;this.defaultFirstOption&&((e=Array.from(this.list.querySelectorAll('[role="option"]:not([aria-disabled="true"])')).filter(lt)[0])===null||e===void 0||e.setAttribute("data-combobox-option-default","true"))}navigate(e=1){const n=Array.from(this.list.querySelectorAll('[aria-selected="true"]')).filter(lt)[0],o=Array.from(this.list.querySelectorAll('[role="option"]')).filter(lt),r=o.indexOf(n);if(r===o.length-1&&e===1||r===0&&e===-1){this.clearSelection(),this.input.focus();return}let p=e===1?0:o.length-1;if(n&&r>=0){const v=r+e;v>=0&&v0||s.offsetHeight>0)}function An(s,e){e.isComposing=s.type==="compositionstart",document.getElementById(e.input.getAttribute("aria-controls")||"")&&e.clearSelection()}function In(s,e){$n(s,e)||(s.scrollTop=e.offsetTop)}function $n(s,e){const n=s.scrollTop,o=n+s.clientHeight,r=e.offsetTop,p=r+e.clientHeight;return r>=n&&p<=o}const Mn=/\s|\(|\[/;function Bn(s,e,n,{multiWord:o,lookBackIndex:r,lastMatchPosition:p}={multiWord:!1,lookBackIndex:0,lastMatchPosition:null}){let u=s.lastIndexOf(e,n-1);if(u===-1||u=u+e.length+1||s.lastIndexOf(` -`,n-1)>u||s.lastIndexOf(".",n-1)>u)return}else if(s.lastIndexOf(" ",n-1)>u)return;const v=s[u-1];return v&&!Mn.test(v)?void 0:{text:s.substring(u+e.length,n),position:u+e.length}}class Tn extends HTMLElement{}class _n extends Event{constructor(){super("update")}}const ct=new WeakMap;var De,je,Ee,fe,Y,Be,Le,Se,ht,Ae,Ge,Ye,Ze,Pe,Fe;const yt=class yt extends Tn{constructor(n){super();re(this,Y);re(this,De,new MutationObserver(()=>G(this,Y,Ye).call(this)));re(this,je,new ResizeObserver(()=>G(this,Y,Ge).call(this)));re(this,Ee);re(this,fe);re(this,Le,0);re(this,Se,0);re(this,Ae,!1);re(this,Pe,()=>G(this,Y,Ze).call(this));re(this,Fe,n=>{G(this,Y,Be).call(this,o=>{(n.target===document||n.target===window||n.target instanceof Node&&n.target.contains(o))&&G(this,Y,Ge).call(this)})});de(this,Ee,new WeakRef(n)),de(this,fe,document.createElement("div")),T(this,fe).style.position="absolute",T(this,fe).style.pointerEvents="none",n.after(T(this,fe)),T(this,fe).appendChild(this)}static for(n){const o=ct.get(n)??new yt(n);return ct.set(n,o),o}forceUpdate(){G(this,Y,Ye).call(this),G(this,Y,Ze).call(this)}connectedCallback(){const n=T(this,Ee).deref();if(!n)return this.remove();this.style.pointerEvents="none",this.style.userSelect="none",this.style.overflow="hidden",this.style.display="block",this.style.visibility="hidden",n instanceof HTMLTextAreaElement?(this.style.whiteSpace="pre-wrap",this.style.wordWrap="break-word"):(this.style.whiteSpace="nowrap",this.style.display="table-cell",this.style.verticalAlign="middle"),this.setAttribute("aria-hidden","true"),G(this,Y,Ye).call(this),G(this,Y,Ze).call(this),T(this,De).observe(n,{attributeFilter:["style","dir"]}),T(this,je).observe(n),document.addEventListener("scroll",T(this,Fe),{capture:!0}),window.addEventListener("resize",T(this,Fe),{capture:!0}),n.addEventListener("input",T(this,Pe),{capture:!0})}disconnectedCallback(){T(this,fe).remove(),T(this,De).disconnect(),T(this,je).disconnect(),document.removeEventListener("scroll",T(this,Fe),{capture:!0}),window.removeEventListener("resize",T(this,Fe),{capture:!0});const n=T(this,Ee).deref();n&&(n.removeEventListener("input",T(this,Pe),{capture:!0}),ct.delete(n))}};De=new WeakMap,je=new WeakMap,Ee=new WeakMap,fe=new WeakMap,Y=new WeakSet,Be=function(n){const o=T(this,Ee).deref();return o?n(o):this.remove()},Le=new WeakMap,Se=new WeakMap,ht=function(){G(this,Y,Be).call(this,n=>{const o=window.getComputedStyle(n);this.style.height=o.height,this.style.width=o.width,n.clientHeight!==this.clientHeight&&(this.style.height=`calc(${o.height} + ${n.clientHeight-this.clientHeight}px)`),n.clientWidth!==this.clientWidth&&(this.style.width=`calc(${o.width} + ${n.clientWidth-this.clientWidth}px)`);const r=n.getBoundingClientRect(),p=this.getBoundingClientRect();de(this,Le,T(this,Le)+r.left-p.left),de(this,Se,T(this,Se)+r.top-p.top),this.style.transform=`translate(${T(this,Le)}px, ${T(this,Se)}px)`,this.scrollTop=n.scrollTop,this.scrollLeft=n.scrollLeft,this.dispatchEvent(new _n)})},Ae=new WeakMap,Ge=function(){T(this,Ae)||(de(this,Ae,!0),requestAnimationFrame(()=>{G(this,Y,ht).call(this),de(this,Ae,!1)}))},Ye=function(){G(this,Y,Be).call(this,n=>{const o=window.getComputedStyle(n);for(const r of Rn)this.style[r]=o[r];G(this,Y,Ge).call(this)})},Ze=function(){G(this,Y,Be).call(this,n=>{this.textContent=n.value,G(this,Y,ht).call(this)})},Pe=new WeakMap,Fe=new WeakMap;let Je=yt;const Rn=["direction","writingMode","unicodeBidi","textOrientation","boxSizing","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","borderStyle","paddingTop","paddingRight","paddingBottom","paddingLeft","fontStyle","fontVariant","fontWeight","fontStretch","fontSize","fontSizeAdjust","lineHeight","fontFamily","textAlign","textTransform","textIndent","textDecoration","letterSpacing","wordSpacing","tabSize","MozTabSize"];try{customElements.define("input-style-clone",Je)}catch(s){if(!(s instanceof DOMException&&s.name==="NotSupportedError"))throw s}var pe,Ie,$e,ce,mt,Ut,gt,Te;const Xe=class Xe{constructor(e,n=0,o=n){re(this,ce);re(this,pe);re(this,Ie);re(this,$e);de(this,pe,e),de(this,Ie,n),de(this,$e,o)}static fromSelection(e){const{selectionStart:n,selectionEnd:o}=e;return new Xe(e,n??void 0,o??void 0)}get collapsed(){return this.startOffset===this.endOffset}get commonAncestorContainer(){return T(this,pe)}get endContainer(){return T(this,pe)}get startContainer(){return T(this,pe)}get startOffset(){return T(this,Ie)}get endOffset(){return T(this,$e)}setStartOffset(e){de(this,Ie,G(this,ce,gt).call(this,e))}setEndOffset(e){de(this,$e,G(this,ce,gt).call(this,e))}collapse(e=!1){e?this.setEndOffset(this.startOffset):this.setStartOffset(this.endOffset)}cloneContents(){return G(this,ce,Te).call(this).cloneContents()}cloneRange(){return new Xe(T(this,pe),this.startOffset,this.endOffset)}getBoundingClientRect(){return G(this,ce,Te).call(this).getBoundingClientRect()}getClientRects(){return G(this,ce,Te).call(this).getClientRects()}toString(){return G(this,ce,Te).call(this).toString()}getStyleClone(){return T(this,ce,mt)}};pe=new WeakMap,Ie=new WeakMap,$e=new WeakMap,ce=new WeakSet,mt=function(){return Je.for(T(this,pe))},Ut=function(){return T(this,ce,mt)},gt=function(e){return Math.max(0,Math.min(e,T(this,pe).value.length))},Te=function(){const e=document.createRange(),n=T(this,ce,Ut).childNodes[0];return n&&(e.setStart(n,this.startOffset),e.setEnd(n,this.endOffset)),e};let pt=Xe;const qe=new WeakMap;class Dn{constructor(e,n){this.expander=e,this.input=n,this.combobox=null,this.menu=null,this.match=null,this.justPasted=!1,this.lookBackIndex=0,this.oninput=this.onInput.bind(this),this.onpaste=this.onPaste.bind(this),this.onkeydown=this.onKeydown.bind(this),this.oncommit=this.onCommit.bind(this),this.onmousedown=this.onMousedown.bind(this),this.onblur=this.onBlur.bind(this),this.interactingWithList=!1,n.addEventListener("paste",this.onpaste),n.addEventListener("input",this.oninput),n.addEventListener("keydown",this.onkeydown),n.addEventListener("blur",this.onblur)}destroy(){this.input.removeEventListener("paste",this.onpaste),this.input.removeEventListener("input",this.oninput),this.input.removeEventListener("keydown",this.onkeydown),this.input.removeEventListener("blur",this.onblur)}dismissMenu(){this.deactivate()&&(this.lookBackIndex=this.input.selectionEnd||this.lookBackIndex)}activate(e,n){var o,r;this.input!==document.activeElement&&this.input!==((r=(o=document.activeElement)===null||o===void 0?void 0:o.shadowRoot)===null||r===void 0?void 0:r.activeElement)||(this.deactivate(),this.menu=n,n.id||(n.id=`text-expander-${Math.floor(Math.random()*1e5).toString()}`),this.expander.append(n),this.combobox=new zn(this.input,n),this.expander.dispatchEvent(new Event("text-expander-activate")),this.positionMenu(n,e.position),this.combobox.start(),n.addEventListener("combobox-commit",this.oncommit),n.addEventListener("mousedown",this.onmousedown),this.combobox.navigate(1))}positionMenu(e,n){const o=new pt(this.input,n).getBoundingClientRect(),r={left:o.left,top:o.top+o.height},p=e.getBoundingClientRect(),u={left:r.left-p.left,top:r.top-p.top};if(u.left!==0||u.top!==0){const v=getComputedStyle(e);e.style.left=v.left?`calc(${v.left} + ${u.left}px)`:`${u.left}px`,e.style.top=v.top?`calc(${v.top} + ${u.top}px)`:`${u.top}px`}}deactivate(){const e=this.menu;return!e||!this.combobox?!1:(this.expander.dispatchEvent(new Event("text-expander-deactivate")),this.menu=null,e.removeEventListener("combobox-commit",this.oncommit),e.removeEventListener("mousedown",this.onmousedown),this.combobox.destroy(),this.combobox=null,e.remove(),!0)}onCommit({target:e}){var n;const o=e;if(!(o instanceof HTMLElement)||!this.combobox)return;const r=this.match;if(!r)return;const p=this.input.value.substring(0,r.position-r.key.length),u=this.input.value.substring(r.position+r.text.length),v={item:o,key:r.key,value:null,continue:!1};if(!this.expander.dispatchEvent(new CustomEvent("text-expander-value",{cancelable:!0,detail:v}))||!v.value)return;let R=(n=this.expander.getAttribute("suffix"))!==null&&n!==void 0?n:" ";v.continue&&(R="");const C=`${v.value}${R}`;this.input.value=p+C+u;const k=p.length+C.length;this.deactivate(),this.input.focus({preventScroll:!0}),this.input.selectionStart=k,this.input.selectionEnd=k,v.continue||(this.lookBackIndex=k,this.match=null),this.expander.dispatchEvent(new CustomEvent("text-expander-committed",{cancelable:!1,detail:{input:this.input}}))}onBlur(){if(this.interactingWithList){this.interactingWithList=!1;return}this.deactivate()}onPaste(){this.justPasted=!0}async onInput(){if(this.justPasted){this.justPasted=!1;return}const e=this.findMatch();if(e){this.match=e;const n=await this.notifyProviders(e);if(!this.match)return;n?this.activate(e,n):this.deactivate()}else this.match=null,this.deactivate()}findMatch(){const e=this.input.selectionEnd||0,n=this.input.value;e<=this.lookBackIndex&&(this.lookBackIndex=e-1);for(const{key:o,multiWord:r}of this.expander.keys){const p=Bn(n,o,e,{multiWord:r,lookBackIndex:this.lookBackIndex,lastMatchPosition:this.match?this.match.position:null});if(p)return{text:p.text,key:o,position:p.position}}}async notifyProviders(e){const n=[],o=v=>n.push(v);return this.expander.dispatchEvent(new CustomEvent("text-expander-change",{cancelable:!0,detail:{provide:o,text:e.text,key:e.key}}))?(await Promise.all(n)).filter(v=>v.matched).map(v=>v.fragment)[0]:void 0}onMousedown(){this.interactingWithList=!0}onKeydown(e){e.key==="Escape"&&(this.match=null,this.deactivate()&&(this.lookBackIndex=this.input.selectionEnd||this.lookBackIndex,e.stopImmediatePropagation(),e.preventDefault()))}}class Mt extends HTMLElement{get keys(){const e=this.getAttribute("keys"),n=e?e.split(" "):[],o=this.getAttribute("multiword"),r=o?o.split(" "):[],p=r.length===0&&this.hasAttribute("multiword");return n.map(u=>({key:u,multiWord:p||r.includes(u)}))}connectedCallback(){const e=this.querySelector('input[type="text"], textarea');if(!(e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement))return;const n=new Dn(this,e);qe.set(this,n)}disconnectedCallback(){const e=qe.get(this);e&&(e.destroy(),qe.delete(this))}dismiss(){const e=qe.get(this);e&&e.dismissMenu()}}window.customElements.get("text-expander")||(window.TextExpanderElement=Mt,window.customElements.define("text-expander",Mt));function jn({onlyFirst:s=!1}={}){const e=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(e,s?void 0:"g")}const Pn=jn();function On(s){if(typeof s!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof s}\``);return s.replace(Pn,"")}const Hn=new Intl.Segmenter;function Bt(s,{countAnsiEscapeCodes:e=!1}={}){if(s===""||(e||(s=On(s)),s===""))return 0;let n=0;for(const o of Hn.segment(s))n++;return n}const Nn="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",bt=[["aa","Afar","Afaraf"],["ab","Abkhaz","аҧсуа бызшәа"],["ae","Avestan","avesta"],["af","Afrikaans","Afrikaans"],["ak","Akan","Akan"],["am","Amharic","አማርኛ"],["an","Aragonese","aragonés"],["ar","Arabic","اللغة العربية"],["as","Assamese","অসমীয়া"],["av","Avaric","авар мацӀ"],["ay","Aymara","aymar aru"],["az","Azerbaijani","azərbaycan dili"],["ba","Bashkir","башҡорт теле"],["be","Belarusian","беларуская мова"],["bg","Bulgarian","български език"],["bh","Bihari","भोजपुरी"],["bi","Bislama","Bislama"],["bm","Bambara","bamanankan"],["bn","Bengali","বাংলা"],["bo","Tibetan","བོད་ཡིག"],["br","Breton","brezhoneg"],["bs","Bosnian","bosanski jezik"],["ca","Catalan","Català"],["ce","Chechen","нохчийн мотт"],["ch","Chamorro","Chamoru"],["co","Corsican","corsu"],["cr","Cree","ᓀᐦᐃᔭᐍᐏᐣ"],["cs","Czech","čeština"],["cu","Old Church Slavonic","ѩзыкъ словѣньскъ"],["cv","Chuvash","чӑваш чӗлхи"],["cy","Welsh","Cymraeg"],["da","Danish","dansk"],["de","German","Deutsch"],["dv","Divehi","Dhivehi"],["dz","Dzongkha","རྫོང་ཁ"],["ee","Ewe","Eʋegbe"],["el","Greek","Ελληνικά"],["en","English","English"],["eo","Esperanto","Esperanto"],["es","Spanish","Español"],["et","Estonian","eesti"],["eu","Basque","euskara"],["fa","Persian","فارسی"],["ff","Fula","Fulfulde"],["fi","Finnish","suomi"],["fj","Fijian","Vakaviti"],["fo","Faroese","føroyskt"],["fr","French","Français"],["fy","Western Frisian","Frysk"],["ga","Irish","Gaeilge"],["gd","Scottish Gaelic","Gàidhlig"],["gl","Galician","galego"],["gu","Gujarati","ગુજરાતી"],["gv","Manx","Gaelg"],["ha","Hausa","هَوُسَ"],["he","Hebrew","עברית"],["hi","Hindi","हिन्दी"],["ho","Hiri Motu","Hiri Motu"],["hr","Croatian","Hrvatski"],["ht","Haitian","Kreyòl ayisyen"],["hu","Hungarian","magyar"],["hy","Armenian","Հայերեն"],["hz","Herero","Otjiherero"],["ia","Interlingua","Interlingua"],["id","Indonesian","Bahasa Indonesia"],["ie","Interlingue","Interlingue"],["ig","Igbo","Asụsụ Igbo"],["ii","Nuosu","ꆈꌠ꒿ Nuosuhxop"],["ik","Inupiaq","Iñupiaq"],["io","Ido","Ido"],["is","Icelandic","Íslenska"],["it","Italian","Italiano"],["iu","Inuktitut","ᐃᓄᒃᑎᑐᑦ"],["ja","Japanese","日本語"],["jv","Javanese","basa Jawa"],["ka","Georgian","ქართული"],["kg","Kongo","Kikongo"],["ki","Kikuyu","Gĩkũyũ"],["kj","Kwanyama","Kuanyama"],["kk","Kazakh","қазақ тілі"],["kl","Kalaallisut","kalaallisut"],["km","Khmer","ខេមរភាសា"],["kn","Kannada","ಕನ್ನಡ"],["ko","Korean","한국어"],["kr","Kanuri","Kanuri"],["ks","Kashmiri","कश्मीरी"],["ku","Kurmanji (Kurdish)","Kurmancî"],["kv","Komi","коми кыв"],["kw","Cornish","Kernewek"],["ky","Kyrgyz","Кыргызча"],["la","Latin","latine"],["lb","Luxembourgish","Lëtzebuergesch"],["lg","Ganda","Luganda"],["li","Limburgish","Limburgs"],["ln","Lingala","Lingála"],["lo","Lao","ລາວ"],["lt","Lithuanian","lietuvių kalba"],["lu","Luba-Katanga","Tshiluba"],["lv","Latvian","latviešu valoda"],["mg","Malagasy","fiteny malagasy"],["mh","Marshallese","Kajin M̧ajeļ"],["mi","Māori","te reo Māori"],["mk","Macedonian","македонски јазик"],["ml","Malayalam","മലയാളം"],["mn","Mongolian","Монгол хэл"],["mr","Marathi","मराठी"],["ms","Malay","Bahasa Melayu"],["mt","Maltese","Malti"],["my","Burmese","ဗမာစာ"],["na","Nauru","Ekakairũ Naoero"],["nb","Norwegian Bokmål","Norsk bokmål"],["nd","Northern Ndebele","isiNdebele"],["ne","Nepali","नेपाली"],["ng","Ndonga","Owambo"],["nl","Dutch","Nederlands"],["nn","Norwegian Nynorsk","Norsk Nynorsk"],["no","Norwegian","Norsk"],["nr","Southern Ndebele","isiNdebele"],["nv","Navajo","Diné bizaad"],["ny","Chichewa","chiCheŵa"],["oc","Occitan","occitan"],["oj","Ojibwe","ᐊᓂᔑᓈᐯᒧᐎᓐ"],["om","Oromo","Afaan Oromoo"],["or","Oriya","ଓଡ଼ିଆ"],["os","Ossetian","ирон æвзаг"],["pa","Panjabi","ਪੰਜਾਬੀ"],["pi","Pāli","पाऴि"],["pl","Polish","Polski"],["ps","Pashto","پښتو"],["pt","Portuguese","Português"],["qu","Quechua","Runa Simi"],["rm","Romansh","rumantsch grischun"],["rn","Kirundi","Ikirundi"],["ro","Romanian","Română"],["ru","Russian","Русский"],["rw","Kinyarwanda","Ikinyarwanda"],["sa","Sanskrit","संस्कृतम्"],["sc","Sardinian","sardu"],["sd","Sindhi","सिन्धी"],["se","Northern Sami","Davvisámegiella"],["sg","Sango","yângâ tî sängö"],["si","Sinhala","සිංහල"],["sk","Slovak","slovenčina"],["sl","Slovenian","slovenščina"],["sn","Shona","chiShona"],["so","Somali","Soomaaliga"],["sq","Albanian","Shqip"],["sr","Serbian","српски језик"],["ss","Swati","SiSwati"],["st","Southern Sotho","Sesotho"],["su","Sundanese","Basa Sunda"],["sv","Swedish","Svenska"],["sw","Swahili","Kiswahili"],["ta","Tamil","தமிழ்"],["te","Telugu","తెలుగు"],["tg","Tajik","тоҷикӣ"],["th","Thai","ไทย"],["ti","Tigrinya","ትግርኛ"],["tk","Turkmen","Türkmen"],["tl","Tagalog","Wikang Tagalog"],["tn","Tswana","Setswana"],["to","Tonga","faka Tonga"],["tr","Turkish","Türkçe"],["ts","Tsonga","Xitsonga"],["tt","Tatar","татар теле"],["tw","Twi","Twi"],["ty","Tahitian","Reo Tahiti"],["ug","Uyghur","ئۇيغۇرچە‎"],["uk","Ukrainian","Українська"],["ur","Urdu","اردو"],["uz","Uzbek","Ўзбек"],["ve","Venda","Tshivenḓa"],["vi","Vietnamese","Tiếng Việt"],["vo","Volapük","Volapük"],["wa","Walloon","walon"],["wo","Wolof","Wollof"],["xh","Xhosa","isiXhosa"],["yi","Yiddish","ייִדיש"],["yo","Yoruba","Yorùbá"],["za","Zhuang","Saɯ cueŋƅ"],["zh","Chinese","中文"],["zu","Zulu","isiZulu"],["zh-CN","Chinese (China)","简体中文"],["zh-HK","Chinese (Hong Kong)","繁體中文(香港)"],["zh-TW","Chinese (Taiwan)","繁體中文(臺灣)"],["zh-YUE","Cantonese","廣東話"],["ast","Asturian","Asturianu"],["chr","Cherokee","ᏣᎳᎩ ᎦᏬᏂᎯᏍᏗ"],["ckb","Sorani (Kurdish)","سۆرانی"],["cnr","Montenegrin","crnogorski"],["jbo","Lojban","la .lojban."],["kab","Kabyle","Taqbaylit"],["ldn","Láadan","Láadan"],["lfn","Lingua Franca Nova","lingua franca nova"],["sco","Scots","Scots"],["sma","Southern Sami","Åarjelsaemien Gïele"],["smj","Lule Sami","Julevsámegiella"],["szl","Silesian","ślůnsko godka"],["tok","Toki Pona","toki pona"],["xal","Kalmyk","Хальмг келн"],["zba","Balaibalan","باليبلن"],["zgh","Standard Moroccan Tamazight","ⵜⴰⵎⴰⵣⵉⵖⵜ"]],Wn="(((?:[^A-Za-z0-9@@$##\\uFFFE\\uFEFF\\uFFFF]|[\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069]|^))((https?:\\/\\/)((?:(?:(?:[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/](?:[_-]|[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/])*)?[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/]\\.)*(?:(?:[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/](?:-|[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/])*)?[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/]\\.)(?:(?:(?:삼성|닷컴|닷넷|香格里拉|餐厅|食品|飞利浦|電訊盈科|集团|通販|购物|谷歌|诺基亚|联通|网络|网站|网店|网址|组织机构|移动|珠宝|点看|游戏|淡马锡|机构|書籍|时尚|新闻|政府|政务|招聘|手表|手机|我爱你|慈善|微博|广东|工行|家電|娱乐|天主教|大拿|大众汽车|在线|嘉里大酒店|嘉里|商标|商店|商城|公益|公司|八卦|健康|信息|佛山|企业|中文网|中信|世界|ポイント|ファッション|セール|ストア|コム|グーグル|クラウド|みんな|คอม|संगठन|नेट|कॉम|همراه|موقع|موبايلي|كوم|كاثوليك|عرب|شبكة|بيتك|بازار|العليان|ارامكو|اتصالات|ابوظبي|קום|сайт|рус|орг|онлайн|москва|ком|католик|дети|zuerich|zone|zippo|zip|zero|zara|zappos|yun|youtube|you|yokohama|yoga|yodobashi|yandex|yamaxun|yahoo|yachts|xyz|xxx|xperia|xin|xihuan|xfinity|xerox|xbox|wtf|wtc|wow|world|works|work|woodside|wolterskluwer|wme|winners|wine|windows|win|williamhill|wiki|wien|whoswho|weir|weibo|wedding|wed|website|weber|webcam|weatherchannel|weather|watches|watch|warman|wanggou|wang|walter|walmart|wales|vuelos|voyage|voto|voting|vote|volvo|volkswagen|vodka|vlaanderen|vivo|viva|vistaprint|vista|vision|visa|virgin|vip|vin|villas|viking|vig|video|viajes|vet|versicherung|vermögensberatung|vermögensberater|verisign|ventures|vegas|vanguard|vana|vacations|ups|uol|uno|university|unicom|uconnect|ubs|ubank|tvs|tushu|tunes|tui|tube|trv|trust|travelersinsurance|travelers|travelchannel|travel|training|trading|trade|toys|toyota|town|tours|total|toshiba|toray|top|tools|tokyo|today|tmall|tkmaxx|tjx|tjmaxx|tirol|tires|tips|tiffany|tienda|tickets|tiaa|theatre|theater|thd|teva|tennis|temasek|telefonica|telecity|tel|technology|tech|team|tdk|tci|taxi|tax|tattoo|tatar|tatamotors|target|taobao|talk|taipei|tab|systems|symantec|sydney|swiss|swiftcover|swatch|suzuki|surgery|surf|support|supply|supplies|sucks|style|study|studio|stream|store|storage|stockholm|stcgroup|stc|statoil|statefarm|statebank|starhub|star|staples|stada|srt|srl|spreadbetting|spot|sport|spiegel|space|soy|sony|song|solutions|solar|sohu|software|softbank|social|soccer|sncf|smile|smart|sling|skype|sky|skin|ski|site|singles|sina|silk|shriram|showtime|show|shouji|shopping|shop|shoes|shiksha|shia|shell|shaw|sharp|shangrila|sfr|sexy|sex|sew|seven|ses|services|sener|select|seek|security|secure|seat|search|scot|scor|scjohnson|science|schwarz|schule|school|scholarships|schmidt|schaeffler|scb|sca|sbs|sbi|saxo|save|sas|sarl|sapo|sap|sanofi|sandvikcoromant|sandvik|samsung|samsclub|salon|sale|sakura|safety|safe|saarland|ryukyu|rwe|run|ruhr|rugby|rsvp|room|rogers|rodeo|rocks|rocher|rmit|rip|rio|ril|rightathome|ricoh|richardli|rich|rexroth|reviews|review|restaurant|rest|republican|report|repair|rentals|rent|ren|reliance|reit|reisen|reise|rehab|redumbrella|redstone|red|recipes|realty|realtor|realestate|read|raid|radio|racing|qvc|quest|quebec|qpon|pwc|pub|prudential|pru|protection|property|properties|promo|progressive|prof|productions|prod|pro|prime|press|praxi|pramerica|post|porn|politie|poker|pohl|pnc|plus|plumbing|playstation|play|place|pizza|pioneer|pink|ping|pin|pid|pictures|pictet|pics|piaget|physio|photos|photography|photo|phone|philips|phd|pharmacy|pfizer|pet|pccw|pay|passagens|party|parts|partners|pars|paris|panerai|panasonic|pamperedchef|page|ovh|ott|otsuka|osaka|origins|orientexpress|organic|org|orange|oracle|open|ooo|onyourside|online|onl|ong|one|omega|ollo|oldnavy|olayangroup|olayan|okinawa|office|off|observer|obi|nyc|ntt|nrw|nra|nowtv|nowruz|now|norton|northwesternmutual|nokia|nissay|nissan|ninja|nikon|nike|nico|nhk|ngo|nfl|nexus|nextdirect|next|news|newholland|new|neustar|network|netflix|netbank|net|nec|nba|navy|natura|nationwide|name|nagoya|nadex|nab|mutuelle|mutual|museum|mtr|mtpc|mtn|msd|movistar|movie|mov|motorcycles|moto|moscow|mortgage|mormon|mopar|montblanc|monster|money|monash|mom|moi|moe|moda|mobily|mobile|mobi|mma|mls|mlb|mitsubishi|mit|mint|mini|mil|microsoft|miami|metlife|merckmsd|meo|menu|men|memorial|meme|melbourne|meet|media|med|mckinsey|mcdonalds|mcd|mba|mattel|maserati|marshalls|marriott|markets|marketing|market|map|mango|management|man|makeup|maison|maif|madrid|macys|luxury|luxe|lupin|lundbeck|ltda|ltd|lplfinancial|lpl|love|lotto|lotte|london|lol|loft|locus|locker|loans|loan|llp|llc|lixil|living|live|lipsy|link|linde|lincoln|limo|limited|lilly|like|lighting|lifestyle|lifeinsurance|life|lidl|liaison|lgbt|lexus|lego|legal|lefrak|leclerc|lease|lds|lawyer|law|latrobe|latino|lat|lasalle|lanxess|landrover|land|lancome|lancia|lancaster|lamer|lamborghini|ladbrokes|lacaixa|kyoto|kuokgroup|kred|krd|kpn|kpmg|kosher|komatsu|koeln|kiwi|kitchen|kindle|kinder|kim|kia|kfh|kerryproperties|kerrylogistics|kerryhotels|kddi|kaufen|juniper|juegos|jprs|jpmorgan|joy|jot|joburg|jobs|jnj|jmp|jll|jlc|jio|jewelry|jetzt|jeep|jcp|jcb|java|jaguar|iwc|iveco|itv|itau|istanbul|ist|ismaili|iselect|irish|ipiranga|investments|intuit|international|intel|int|insure|insurance|institute|ink|ing|info|infiniti|industries|inc|immobilien|immo|imdb|imamat|ikano|iinet|ifm|ieee|icu|ice|icbc|ibm|hyundai|hyatt|hughes|htc|hsbc|how|house|hotmail|hotels|hoteles|hot|hosting|host|hospital|horse|honeywell|honda|homesense|homes|homegoods|homedepot|holiday|holdings|hockey|hkt|hiv|hitachi|hisamitsu|hiphop|hgtv|hermes|here|helsinki|help|healthcare|health|hdfcbank|hdfc|hbo|haus|hangout|hamburg|hair|guru|guitars|guide|guge|gucci|guardian|group|grocery|gripe|green|gratis|graphics|grainger|gov|got|gop|google|goog|goodyear|goodhands|goo|golf|goldpoint|gold|godaddy|gmx|gmo|gmbh|gmail|globo|global|gle|glass|glade|giving|gives|gifts|gift|ggee|george|genting|gent|gea|gdn|gbiz|gay|garden|gap|games|game|gallup|gallo|gallery|gal|fyi|futbol|furniture|fund|fun|fujixerox|fujitsu|ftr|frontier|frontdoor|frogans|frl|fresenius|free|fox|foundation|forum|forsale|forex|ford|football|foodnetwork|food|foo|fly|flsmidth|flowers|florist|flir|flights|flickr|fitness|fit|fishing|fish|firmdale|firestone|fire|financial|finance|final|film|fido|fidelity|fiat|ferrero|ferrari|feedback|fedex|fast|fashion|farmers|farm|fans|fan|family|faith|fairwinds|fail|fage|extraspace|express|exposed|expert|exchange|everbank|events|eus|eurovision|etisalat|esurance|estate|esq|erni|ericsson|equipment|epson|epost|enterprises|engineering|engineer|energy|emerck|email|education|edu|edeka|eco|eat|earth|dvr|dvag|durban|dupont|duns|dunlop|duck|dubai|dtv|drive|download|dot|doosan|domains|doha|dog|dodge|doctor|docs|dnp|diy|dish|discover|discount|directory|direct|digital|diet|diamonds|dhl|dev|design|desi|dentist|dental|democrat|delta|deloitte|dell|delivery|degree|deals|dealer|deal|dds|dclk|day|datsun|dating|date|data|dance|dad|dabur|cyou|cymru|cuisinella|csc|cruises|cruise|crs|crown|cricket|creditunion|creditcard|credit|cpa|courses|coupons|coupon|country|corsica|coop|cool|cookingchannel|cooking|contractors|contact|consulting|construction|condos|comsec|computer|compare|company|community|commbank|comcast|com|cologne|college|coffee|codes|coach|clubmed|club|cloud|clothing|clinique|clinic|click|cleaning|claims|cityeats|city|citic|citi|citadel|cisco|circle|cipriani|church|chrysler|chrome|christmas|chloe|chintai|cheap|chat|chase|charity|channel|chanel|cfd|cfa|cern|ceo|center|ceb|cbs|cbre|cbn|cba|catholic|catering|cat|casino|cash|caseih|case|casa|cartier|cars|careers|career|care|cards|caravan|car|capitalone|capital|capetown|canon|cancerresearch|camp|camera|cam|calvinklein|call|cal|cafe|cab|bzh|buzz|buy|business|builders|build|bugatti|budapest|brussels|brother|broker|broadway|bridgestone|bradesco|box|boutique|bot|boston|bostik|bosch|boots|booking|book|boo|bond|bom|bofa|boehringer|boats|bnpparibas|bnl|bmw|bms|blue|bloomberg|blog|blockbuster|blanco|blackfriday|black|biz|bio|bingo|bing|bike|bid|bible|bharti|bet|bestbuy|best|berlin|bentley|beer|beauty|beats|bcn|bcg|bbva|bbt|bbc|bayern|bauhaus|basketball|baseball|bargains|barefoot|barclays|barclaycard|barcelona|bar|bank|band|bananarepublic|banamex|baidu|baby|azure|axa|aws|avianca|autos|auto|author|auspost|audio|audible|audi|auction|attorney|athleta|associates|asia|asda|arte|art|arpa|army|archi|aramco|arab|aquarelle|apple|app|apartments|aol|anz|anquan|android|analytics|amsterdam|amica|amfam|amex|americanfamily|americanexpress|alstom|alsace|ally|allstate|allfinanz|alipay|alibaba|alfaromeo|akdn|airtel|airforce|airbus|aigo|aig|agency|agakhan|africa|afl|afamilycompany|aetna|aero|aeg|adult|ads|adac|actor|active|aco|accountants|accountant|accenture|academy|abudhabi|abogado|able|abc|abbvie|abbott|abb|abarth|aarp|aaa|onion)(?=[^0-9a-zA-Z@+-]|$))|(?:(?:한국|香港|澳門|新加坡|台灣|台湾|中國|中国|გე|ລາວ|ไทย|ලංකා|ഭാരതം|ಭಾರತ|భారత్|சிங்கப்பூர்|இலங்கை|இந்தியா|ଭାରତ|ભારત|ਭਾਰਤ|ভাৰত|ভারত|বাংলা|भारोत|भारतम्|भारत|ڀارت|پاکستان|موريتانيا|مليسيا|مصر|قطر|فلسطين|عمان|عراق|سورية|سودان|تونس|بھارت|بارت|ایران|امارات|المغرب|السعودية|الجزائر|البحرين|الاردن|հայ|қаз|укр|срб|рф|мон|мкд|ею|бел|бг|ευ|ελ|zw|zm|za|yt|ye|ws|wf|vu|vn|vi|vg|ve|vc|va|uz|uy|us|um|uk|ug|ua|tz|tw|tv|tt|tr|tp|to|tn|tm|tl|tk|tj|th|tg|tf|td|tc|sz|sy|sx|sv|su|st|ss|sr|so|sn|sm|sl|sk|sj|si|sh|sg|se|sd|sc|sb|sa|rw|ru|rs|ro|re|qa|py|pw|pt|ps|pr|pn|pm|pl|pk|ph|pg|pf|pe|pa|om|nz|nu|nr|np|no|nl|ni|ng|nf|ne|nc|na|mz|my|mx|mw|mv|mu|mt|ms|mr|mq|mp|mo|mn|mm|ml|mk|mh|mg|mf|me|md|mc|ma|ly|lv|lu|lt|ls|lr|lk|li|lc|lb|la|kz|ky|kw|kr|kp|kn|km|ki|kh|kg|ke|jp|jo|jm|je|it|is|ir|iq|io|in|im|il|ie|id|hu|ht|hr|hn|hm|hk|gy|gw|gu|gt|gs|gr|gq|gp|gn|gm|gl|gi|gh|gg|gf|ge|gd|gb|ga|fr|fo|fm|fk|fj|fi|eu|et|es|er|eh|eg|ee|ec|dz|do|dm|dk|dj|de|cz|cy|cx|cw|cv|cu|cr|co|cn|cm|cl|ck|ci|ch|cg|cf|cd|cc|ca|bz|by|bw|bv|bt|bs|br|bq|bo|bn|bm|bl|bj|bi|bh|bg|bf|be|bd|bb|ba|az|ax|aw|au|at|as|ar|aq|ao|an|am|al|ai|ag|af|ae|ad|ac)(?=[^0-9a-zA-Z@+-]|$))|(?:xn--[\\-0-9a-z]+))))(?::([0-9]+))?(\\/(?:(?:[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*(?:\\((?:[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]+|(?:[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*\\([a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]+\\)[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*))\\)[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*)*[\\+\\-a-z\\u0400-\\u04FF0-9=_#\\/\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]|(?:\\((?:[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]+|(?:[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*\\([a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]+\\)[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*))\\)))|(?:@[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]+\\/))*)?(\\?[a-z0-9!?\\*'@\\(\\);:&=\\+\\$\\/%#\\[\\]\\-_\\.,~|]*[a-z0-9\\-_&=#\\/])?))",Un="gi",Tt={source:Wn,flags:Un};var qn={PHANPY_CLIENT_NAME:"Phanpy",PHANPY_WEBSITE:"https://phanpy.social",PHANPY_LINGVA_INSTANCES:"lingva.phanpy.social lingva.lunar.icu lingva.garudalinux.org translate.plausibility.cloud",PHANPY_PRIVACY_POLICY_URL:"https://github.com/cheeaun/phanpy/blob/main/PRIVACY.MD",VITE_APP_ENV:"production",BASE_URL:"./",MODE:"production",DEV:!1,PROD:!0,SSR:!1};const{PHANPY_IMG_ALT_API_URL:ut,PHANPY_GIPHY_API_KEY:Kn}=qn,Vn=bt.reduce((s,e)=>{const[n,o,r]=e;return s[n]={common:o,native:r},s},{}),qt={"5 minutes":5*60,"30 minutes":30*60,"1 hour":60*60,"6 hours":6*60*60,"12 hours":12*60*60,"1 day":24*60*60,"3 days":3*24*60*60,"7 days":7*24*60*60},Gn=Object.values(qt),_t=24*60*60,Rt=s=>{if(!s)return _t;const e=(new Date(s).getTime()-Date.now())/1e3;return Gn.find(n=>n>=e)||_t},ye=document.createElement("ul");ye.role="listbox";ye.className="text-expander-menu";const Yn=16,Zn=new IntersectionObserver(s=>{s.forEach(e=>{if(e.isIntersecting){const{left:n,width:o}=e.boundingClientRect,{innerWidth:r}=window;n+o>r&&(ye.style.left=r-o-Yn+"px")}})});Zn.observe(ye);const we=an([new Intl.DateTimeFormat().resolvedOptions().locale,...navigator.languages],bt.map(s=>s[0]),"en"),Kt=new RegExp(Tt.source,Tt.flags),Jn=/(^|[^\/\w])@(([a-z0-9_]+)@[a-z0-9\.\-]+[a-z0-9]+)/gi,Xn="$2xxxxxxxxxxxxxxxxxxxxxxx";function Qn(s){return s.replace(Kt,Xn).replace(Jn,"$1@$3")}const ei=/[a-z0-9_]+([a-z0-9_.-]+[a-z0-9_]+)?/i,ti=new RegExp(`(^|[^=\\/\\w])(@${ei.source}(?:@[\\p{L}\\w.-]+[\\w]+)?)`,"uig"),ni=new RegExp("(^|[^=\\/\\w])(#[a-z0-9_]+([a-z0-9_.]+[a-z0-9_]+)?)(?![\\/\\w])","ig"),ii="[a-zA-Z0-9_]{2,}",si=new RegExp(`(^|[^=\\/\\w])(:${ii}:)(?=[^A-Za-z0-9_:]|$)`,"g"),ai=new Intl.Segmenter;function oi(s,{maxCharacters:e=1/0}){let n=s.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'");const{composerCharacterCount:o}=le;if(o>e){let r="",p="";const u=ai.segment(n);for(const{segment:v,index:g}of u)g"),r+p}return n.replace(Kt,'$2$3').replace(ti,'$1$2').replace(ni,'$1$2').replace(si,'$1$2')}const ri=new Intl.RelativeTimeFormat,ft=100;function Ei({onClose:s,replyToStatus:e,editStatus:n,draftStatus:o,standalone:r,hasOpener:p}){var Ft;const{masto:u,instance:v}=vt(),[g,R]=H("default"),C=U((o==null?void 0:o.uid)||on()),k=bn(),S=k.info,Z=Nt(),{statuses:{maxCharacters:D,maxMediaAttachments:I,charactersReservedPerUrl:se}={},mediaAttachments:{supportedMimeTypes:J=[],imageSizeLimit:c,imageMatrixLimit:h,videoSizeLimit:m,videoMatrixLimit:f,videoFrameRateLimit:E}={},polls:{maxOptions:y,maxCharactersPerOption:B,maxExpiration:q,minExpiration:ue}={}}=Z||{},A=U(),X=U(),[V,W]=H("public"),[j,te]=H(!1),[O,ie]=H(ze.session.get("currentLanguage")||we),ae=U(O),[$,z]=H([]),[M,L]=H(null),N=ze.account.get("preferences")||{},Q=()=>{A.current&&A.current.dispatchEvent(new Event("input"))},oe=()=>{setTimeout(()=>{var a,l,b;A.current&&((l=(a=o==null?void 0:o.status)==null?void 0:a.startsWith)!=null&&l.call(a,` -`)&&(A.current.selectionStart=0,A.current.selectionEnd=0),(b=A.current)==null||b.focus())},300)};ee(()=>{if(e){const{spoilerText:a,visibility:l,language:b,sensitive:d}=e;a&&X.current&&(X.current.value=a);const x=[...new Set([e.account.acct,...e.mentions.map(w=>w.acct)])].filter(w=>w!==S.acct);x.length>0&&(A.current.value=`${x.map(w=>`@${w}`).join(" ")} `,Q()),oe(),W(l==="public"&&N["posting:default:visibility"]?N["posting:default:visibility"]:l),ie(b||N.postingDefaultLanguage||we),te(d&&!!a)}else if(n){const{visibility:a,language:l,sensitive:b,poll:d,mediaAttachments:_}=n,x=!!(d!=null&&d.options)&&{...d,options:d.options.map(w=>(w==null?void 0:w.title)||w),expiresIn:(d==null?void 0:d.expiresIn)||Rt(d.expiresAt)};R("loading"),(async()=>{try{const w=await u.v1.statuses.$select(n.id).source.fetch(),{text:F,spoilerText:P}=w;A.current.value=F,A.current.dataset.source=F,Q(),oe(),X.current.value=P,W(a),ie(l||presf.postingDefaultLanguage||we),te(b),x&&L(x),z(_),R("default")}catch(w){alert((w==null?void 0:w.reason)||w),R("error")}})()}else oe(),N["posting:default:visibility"]&&W(N["posting:default:visibility"]),N["posting:default:language"]&&ie(N["posting:default:language"]),N["posting:default:sensitive"]&&te(N["posting:default:sensitive"]);if(o){const{status:a,spoilerText:l,visibility:b,language:d,sensitive:_,poll:x,mediaAttachments:w}=o,F=!!(x!=null&&x.options)&&{...x,options:x.options.map(P=>(P==null?void 0:P.title)||P),expiresIn:(x==null?void 0:x.expiresIn)||Rt(x.expiresAt)};A.current.value=a,Q(),oe(),l&&(X.current.value=l),b&&W(b),ie(d||N.postingDefaultLanguage||we),_!==null&&te(_),F&&L(F),w&&z(w)}},[o,n,e]);const he=U(),ve="You have unsaved changes. Discard this post?",xe=()=>{const{value:a,dataset:l}=A.current;if(g==="loading")return!1;const b=(a||"").trim().replace(new RegExp("^\\p{White_Space}+|\\p{White_Space}+$","gu"),""),d=$.length>0;if(!b&&!d||$.length>0&&$.every(P=>P.id))return!0;const x=(e==null?void 0:e.account.id)===S.id,w=e&&a.trim()===`@${e.account.acct}`;return!!(!x&&w||a===(l==null?void 0:l.source))},Oe=()=>xe()?!0:confirm(ve);ee(()=>{const a=l=>{xe()||(l.preventDefault(),l.returnValue=ve)};return window.addEventListener("beforeunload",a,{capture:!0}),()=>window.removeEventListener("beforeunload",a,{capture:!0})},[]);const Yt=()=>{const{value:a}=A.current,{value:l}=X.current;return Bt(Qn(a))+Bt(l)},tt=()=>{const a=Yt();le.composerCharacterCount=a};ee(tt,[]);const xt=window.CloseWatcher,nt=U(!1);_e("esc",()=>{nt.current=!0},{enabled:!xt,enableOnFormTags:!0}),_e("esc",()=>{!r&&nt.current&&Oe()&&s(),nt.current=!1},{enabled:!xt,enableOnFormTags:!0,keyup:!0,ignoreEventWhen:a=>{const l=document.querySelectorAll("#modal-container > *"),b=!!l,d=l.length===1&&l[0].querySelector("#compose-container");return b&&!d}}),rn(()=>{!r&&Oe()&&s()},[r,Oe,s]);const wt=U({}),kt=()=>`${yn()}#${C.current}`,it=()=>{if(n||le.composerState.minimized)return;const a=kt(),l={key:a,replyTo:e?{id:e.id,account:{id:e.account.id,username:e.account.username,acct:e.account.acct}}:null,draftStatus:{uid:C.current,status:A.current.value,spoilerText:X.current.value,visibility:V,language:O,sensitive:j,poll:M,mediaAttachments:$}};!xn(l,wt.current)&&!xe()&&(zt.drafts.set(a,{...l,state:"unsaved",updatedAt:Date.now()}).then(()=>{}).catch(b=>{}),wt.current=structuredClone(l))};ln(it,5e3),ee(()=>(it(),()=>{zt.drafts.del(kt())}),[]),ee(()=>{const a=b=>{const{items:d}=b.clipboardData||b.dataTransfer,_=[];for(let x=0;x0&&$.length>=I){alert(`You can only attach up to ${I} files.`);return}if(_.length>0){b.preventDefault(),b.stopPropagation();const x=I-$.length,w=_.slice(0,x);if(w.length<=0){alert(`You can only attach up to ${I} files.`);return}const F=w.map(P=>({file:P,type:P.type,size:P.size,url:URL.createObjectURL(P),id:null,description:null}));z([...$,...F])}};window.addEventListener("paste",a);const l=b=>{b.dataTransfer.items.length>0&&(b.preventDefault(),b.stopPropagation())};return window.addEventListener("dragover",l),window.addEventListener("drop",a),()=>{window.removeEventListener("paste",a),window.removeEventListener("dragover",l),window.removeEventListener("drop",a)}},[$]);const[He,st]=H(!1),[Ne,We]=H(!1),[Zt,at]=H(!1),[me,Jt]=H(null),[Xt,Qt]=Re(()=>{const a=[],l=[],{contentTranslationHideLanguages:b=[]}=le.settings;return bt.forEach(d=>{const[_]=d;_===O||_===ae.current||_===we||b.includes(_)||me!=null&&me.length&&me.includes(_)?a.push(d):l.push(d)}),a.sort(([d,_],[x,w])=>d===O?-1:x===O?1:_.localeCompare(w)),l.sort(([d,_],[x,w])=>_.localeCompare(w)),[a,l]},[O,me]),Et=Re(()=>!!(e!=null&&e.createdAt)&&Math.floor((Date.now()-new Date(e.createdAt))/(1e3*60*60*24*30)),[e]),en=()=>{it(),le.composerState.minimized=!0};return t("div",{id:"compose-container-outer",children:[t("div",{id:"compose-container",class:r?"standalone":"",children:[t("div",{class:"compose-top",children:[(S==null?void 0:S.avatarStatic)&&t(Ot,{account:S,accountInstance:k.instanceURL,hideDisplayName:!0,useAvatarStatic:!0}),r?p&&t("button",{type:"button",class:"light pop-button",disabled:g==="loading",onClick:()=>{var a;if(!window.opener){alert("Looks like you closed the parent window.");return}if(window.opener.__STATES__.showCompose){if((a=window.opener.__STATES__.composerState)!=null&&a.publishing){alert("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.");return}if(!confirm("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?"))return}s({fn:()=>{const l={editStatus:n,replyToStatus:e,draftStatus:{uid:C.current,status:A.current.value,spoilerText:X.current.value,visibility:V,language:O,sensitive:j,poll:M,mediaAttachments:$}};window.opener.__COMPOSE__=l,window.opener.__STATES__.showCompose?(window.opener.__STATES__.showCompose=!1,setTimeout(()=>{window.opener.__STATES__.showCompose=!0},10)):window.opener.__STATES__.showCompose=!0,window.opener.__STATES__.composerState.minimized&&(window.opener.__STATES__.composerState.minimized=!1)}})},children:t(K,{icon:"popin",alt:"Pop in"})}):t("span",{class:"compose-controls",children:[t("button",{type:"button",class:"plain4 pop-button",disabled:g==="loading",onClick:()=>{cn({editStatus:n,replyToStatus:e,draftStatus:{uid:C.current,status:A.current.value,spoilerText:X.current.value,visibility:V,language:O,sensitive:j,poll:M,mediaAttachments:$}})&&s()},children:t(K,{icon:"popout",alt:"Pop out"})}),t("button",{type:"button",class:"plain4 min-button",onClick:en,children:t(K,{icon:"minimize",alt:"Minimize"})})," ",t("button",{type:"button",class:"light close-button",disabled:g==="loading",onClick:()=>{Oe()&&s()},children:t(K,{icon:"x"})})]})]}),!!e&&t("div",{class:"status-preview",children:[t(Lt,{status:e,size:"s",previewMode:!0}),t("div",{class:"status-preview-legend reply-to",children:["Replying to @",e.account.acct||e.account.username,"’s post",Et>=3&&t(Ce,{children:[" ","(",t("strong",{children:ri.format(-Et,"month")}),")"]})]})]}),!!n&&t("div",{class:"status-preview",children:[t(Lt,{status:n,size:"s",previewMode:!0}),t("div",{class:"status-preview-legend",children:"Editing source post"})]}),t("form",{ref:he,class:`form-visibility-${V}`,style:{pointerEvents:g==="loading"?"none":"auto",opacity:g==="loading"?.5:1},onKeyDown:a=>{a.key==="Enter"&&(a.ctrlKey||a.metaKey)&&he.current.dispatchEvent(new Event("submit",{cancelable:!0}))},onSubmit:a=>{a.preventDefault();const l=new FormData(a.target),b=Object.fromEntries(l.entries());let{status:d,visibility:_,sensitive:x,spoilerText:w}=b;if(x=x==="on",M){if(M.options.length<2){alert("Poll must have at least 2 options");return}if(M.options.some(F=>F==="")){alert("Some poll choices are empty");return}}$.length>0&&$.some(P=>{var ne,Me;return!((Me=(ne=P.description)==null?void 0:ne.trim)!=null&&Me.call(ne))})&&!confirm("Some media have no descriptions. Continue?")||(w=x&&w||void 0,d=d===""?void 0:d,le.composerState.publishing=!0,R("loading"),(async()=>{try{if($.length>0){const ne=$.map(ge=>{const{file:Ue,description:tn,id:nn}=ge;if(nn)return ge;{const sn=Pt({file:Ue,description:tn});return u.v2.media.create(sn).then(ot=>(ot.id&&(ge.id=ot.id),ot))}}),Me=await Promise.allSettled(ne);if(Me.some(ge=>{var Ue;return ge.status==="rejected"||!((Ue=ge.value)!=null&&Ue.id)})){le.composerState.publishing=!1,le.composerState.publishingError=!0,R("error"),Me.forEach(ge=>{ge.status==="rejected"&&alert(ge.reason||`Attachment #${i} failed`)});return}}let F={status:d,spoiler_text:w,language:O,sensitive:x,poll:M,media_ids:$.map(ne=>ne.id)};n&&Ht("@mastodon/edit-media-attributes")?F.media_attributes=$.map(ne=>({id:ne.id,description:ne.description})):n||(F.visibility=_,F.in_reply_to_id=(e==null?void 0:e.id)||void 0),F=Pt(F);let P;if(n)P=await u.v1.statuses.$select(n.id).update(F),wn(P,v,{skipThreading:!0});else try{P=await u.v1.statuses.create(F,{requestInit:{headers:{"Idempotency-Key":C.current}}})}catch{P=await u.v1.statuses.create(F)}le.composerState.minimized=!1,le.composerState.publishing=!1,R("default"),s({type:n?"edit":e?"reply":"post",newStatus:P,instance:v})}catch(F){le.composerState.publishing=!1,le.composerState.publishingError=!0,alert((F==null?void 0:F.reason)||F),R("error")}})())},children:[t("div",{class:"toolbar stretch",children:[t("input",{ref:X,type:"text",name:"spoilerText",placeholder:"Content warning",disabled:g==="loading",class:"spoiler-text-field",lang:O,spellCheck:"true",dir:"auto",style:{opacity:j?1:0,pointerEvents:j?"auto":"none"},onInput:()=>{tt()}}),t("label",{class:`toolbar-button ${j?"highlight":""}`,title:"Content warning or sensitive media",children:[t("input",{name:"sensitive",type:"checkbox",checked:j,disabled:g==="loading",onChange:a=>{var b,d;const l=a.target.checked;te(l),l?(b=X.current)==null||b.focus():(d=A.current)==null||d.focus()}}),t(K,{icon:`eye-${j?"close":"open"}`})]})," ",t("label",{class:`toolbar-button ${V!=="public"&&!j?"show-field":""} ${V!=="public"?"highlight":""}`,title:`Visibility: ${V}`,children:[t(K,{icon:un[V],alt:V}),t("select",{name:"visibility",value:V,onChange:a=>{W(a.target.value)},disabled:g==="loading"||!!n,children:[t("option",{value:"public",children:["Public ",t(K,{icon:"earth"})]}),t("option",{value:"unlisted",children:"Unlisted"}),t("option",{value:"private",children:"Followers only"}),t("option",{value:"direct",children:"Private mention"})]})]})," "]}),t(ui,{ref:A,placeholder:e?"Post your reply":n?"Edit your post":"What are you doing?",required:($==null?void 0:$.length)===0,disabled:g==="loading",lang:O,onInput:()=>{tt()},maxCharacters:D,performSearch:a=>{const{type:l,q:b,limit:d}=a;return l==="accounts"?u.v1.accounts.search.list({q:b,limit:d,resolve:!1}):u.v2.search.fetch(a)},onTrigger:a=>{(a==null?void 0:a.name)==="custom-emojis"?We({defaultSearchTerm:(a==null?void 0:a.defaultSearchTerm)||null}):(a==null?void 0:a.name)==="mention"?st({defaultSearchTerm:(a==null?void 0:a.defaultSearchTerm)||null}):(a==null?void 0:a.name)==="auto-detect-language"&&(a!=null&&a.languages)&&Jt(a.languages)}}),($==null?void 0:$.length)>0&&t("div",{class:"media-attachments",children:[$.map((a,l)=>{const{id:b,file:d}=a,_=(d==null?void 0:d.size)+(d==null?void 0:d.type)+(d==null?void 0:d.name);return t(hi,{attachment:a,disabled:g==="loading",lang:O,onDescriptionChange:x=>{z(w=>{const F=[...w];return F[l].description=x,F})},onRemove:()=>{z(x=>x.filter((w,F)=>F!==l))}},b||_||l)}),t("label",{class:"media-sensitive",children:[t("input",{name:"sensitive",type:"checkbox",checked:j,disabled:g==="loading",onChange:a=>{const l=a.target.checked;te(l)}})," ",t("span",{children:"Mark media as sensitive"})," ",t(K,{icon:`eye-${j?"close":"open"}`})]})]}),!!M&&t(pi,{lang:O,maxOptions:y,maxExpiration:q,minExpiration:ue,maxCharactersPerOption:B,poll:M,disabled:g==="loading",onInput:a=>{if(a){const l={...a};L(l)}else L(null)}}),t("div",{class:"toolbar wrap",style:{justifyContent:"flex-end"},children:[t("span",{children:[t("label",{class:"toolbar-button",children:[t("input",{type:"file",accept:J.join(","),multiple:$.length=I||!!M,onChange:a=>{const l=a.target.files;if(!l)return;const b=Array.from(l).map(d=>({file:d,type:d.type,size:d.size,url:URL.createObjectURL(d),id:null,description:null}));$.length+b.length>I?alert(`You can only attach up to ${I} files.`):z(d=>d.concat(b)),a.target.value=""}}),t(K,{icon:"attachment"})]}),y==null||y>1&&t(Ce,{children:t("button",{type:"button",class:"toolbar-button",disabled:g==="loading"||!!M||!!$.length,onClick:()=>{L({options:["",""],expiresIn:24*60*60,multiple:!1})},children:t(K,{icon:"poll",alt:"Add poll"})})}),t("button",{type:"button",class:"toolbar-button",disabled:g==="loading",onClick:()=>{We(!0)},children:t(K,{icon:"emoji2"})}),!!le.settings.composerGIFPicker&&t("button",{type:"button",class:"toolbar-button gif-picker-button",disabled:g==="loading"||$.length>=I||!!M,onClick:()=>{at(!0)},children:t("span",{children:"GIF"})})]}),t("div",{class:"spacer"}),g==="loading"?t(et,{abrupt:!0}):t(di,{maxCharacters:D,hidden:g==="loading"}),t("label",{class:`toolbar-button ${O!==ae.current||me!=null&&me.length&&!me.includes(O)?"highlight":""}`,children:[t("span",{class:"icon-text",children:(Ft=Vn[O])==null?void 0:Ft.native}),t("select",{name:"language",value:O,onChange:a=>{const{value:l}=a.target;ie(l||we),ze.session.set("currentLanguage",l||we)},disabled:g==="loading",children:[Xt.map(([a,l,b])=>t("option",{value:a,children:[l," (",b,")"]},a)),t("hr",{}),Qt.map(([a,l,b])=>t("option",{value:a,children:[l," (",b,")"]},a))]})]})," ",t("button",{type:"submit",class:"large",disabled:g==="loading",children:e?"Reply":n?"Update":"Post"})]})]})]}),He&&t(Ve,{onClick:a=>{a.target===a.currentTarget&&st(!1)},children:t(mi,{masto:u,instance:v,onClose:()=>{st(!1)},defaultSearchTerm:He==null?void 0:He.defaultSearchTerm,onSelect:a=>{const l=A.current;if(!l)return;const{selectionStart:b,selectionEnd:d}=l,_=l.value,x=_.slice(0,b),w=x?/[\s\t\n\r]$/.test(x)?"":" ":"",F=_.slice(d),P=/^[\s\t\n\r]/.test(F)?"":" ",ne=x+w+"@"+a+P+F;l.value=ne,l.selectionStart=l.selectionEnd=d+1+a.length+P.length,l.focus(),l.dispatchEvent(new Event("input"))}})}),Ne&&t(Ve,{onClick:a=>{a.target===a.currentTarget&&We(!1)},children:t(gi,{masto:u,instance:v,onClose:()=>{We(!1)},defaultSearchTerm:Ne==null?void 0:Ne.defaultSearchTerm,onSelect:a=>{const l=A.current;if(!l)return;const{selectionStart:b,selectionEnd:d}=l,_=l.value,x=_.slice(0,b),w=x?/[\s\t\n\r]$/.test(x)?"":" ":"",F=_.slice(d),P=/^[\s\t\n\r]/.test(F)?"":" ",ne=x+w+a+P+F;l.value=ne,l.selectionStart=l.selectionEnd=d+a.length+P.length,l.focus(),l.dispatchEvent(new Event("input"))}})}),Zt&&t(Ve,{onClick:a=>{a.target===a.currentTarget&&at(!1)},children:t(vi,{onClose:()=>at(!1),onSelect:({url:a,type:l,alt_text:b})=>{if($.length>=I){alert(`You can only attach up to ${I} files.`);return}(async()=>{var _,x;let d;try{d=ke({text:"Downloading GIF…",duration:-1});const w=await fetch(a,{referrerPolicy:"no-referrer"}).then(ne=>ne.blob()),F=new File([w],l==="video/mp4"?"video.mp4":"image.gif",{type:l}),P=[...$,{file:F,type:l,size:F.size,id:null,description:b||""}];z(P),(_=d==null?void 0:d.hideToast)==null||_.call(d)}catch{(x=d==null?void 0:d.hideToast)==null||x.call(d),ke("Failed to download GIF")}})()}})})]})}function Dt(s){if(!s)return;const{value:e,offsetHeight:n,scrollHeight:o,clientHeight:r}=s;if(np.visibleInPicker),r=new dn(o,{keys:["shortcode"],findAllMatches:!0});return[o,r]}const Vt=kn(li,{matchesArg:(s,e)=>s.instance===e.instance,maxAge:30*60*1e3}),ci=s=>{const e=Cn(s);return e!=null&&e.length?e.slice(0,2).map(n=>n.lang):null},ui=En((s,e)=>{var J;const{masto:n,instance:o}=vt(),[r,p]=H(((J=e.current)==null?void 0:J.value)||""),{maxCharacters:u,performSearch:v=()=>{},onTrigger:g=()=>{},...R}=s,C=U();ee(()=>{Vt(o,n).then(c=>{const[h,m]=c;C.current=m}).catch(c=>{})},[]);const k=U(),S=U("");ee(()=>{let c,h,m;return k.current&&(c=f=>{var ue;const{key:E,provide:y,text:B}=f.detail;if(S.current=B,B===""){y(Promise.resolve({matched:!1}));return}if(E===":"){const A=(ue=C.current)==null?void 0:ue.search(B,{limit:5});let X="";A.forEach(({item:V})=>{const{shortcode:W,url:j}=V;X+=` -
  • - - ${be(W)} -
  • `}),X+=`
  • More…
  • `,ye.innerHTML=X,y(Promise.resolve({matched:A.length>0,fragment:ye}));return}const q={"@":"accounts","#":"hashtags"}[E];y(new Promise(A=>{v({type:q,q:B,limit:5}).then(V=>{if(B!==S.current)return;const W=V[q]||V;let j="";W.forEach(te=>{var Q;const{name:O,avatarStatic:ie,displayName:ae,username:$,acct:z,emojis:M,history:L}=te,N=hn(ae,M);if(z)j+=` -
  • - - - - - ${N||$} -
    @${be(z)} -
    -
  • - `;else{const oe=(Q=L==null?void 0:L.reduce)==null?void 0:Q.call(L,(he,ve)=>he+ +ve.uses,0);j+=` -
  • - #${be(O)} - ${oe?`${pn(oe)}`:""} -
  • - `}}),q==="accounts"&&(j+=`
  • More…
  • `),ye.innerHTML=j,A({matched:W.length>0,fragment:ye})})}))},k.current.addEventListener("text-expander-change",c),h=f=>{const{key:E,item:y}=f.detail,{value:B,more:q}=y.dataset;E===":"?(f.detail.value=B?`:${B}:`:"​",q&&(f.detail.continue=!0,setTimeout(()=>{g==null||g({name:"custom-emojis",defaultSearchTerm:q})},300))):E==="@"?(f.detail.value=B?`@${B} `:"​",q&&(f.detail.continue=!0,setTimeout(()=>{g==null||g({name:"mention",defaultSearchTerm:q})},300))):f.detail.value=`${E}${B}`},k.current.addEventListener("text-expander-value",h),m=f=>{const{input:E}=f.detail;if(p(E.value),e.current){const y=new Event("input",{bubbles:!0});e.current.dispatchEvent(y)}},k.current.addEventListener("text-expander-committed",m)),()=>{k.current&&(k.current.removeEventListener("text-expander-change",c),k.current.removeEventListener("text-expander-value",h),k.current.removeEventListener("text-expander-committed",m))}},[]),ee(()=>{const c=e.current;if(!c)return;new ResizeObserver(()=>{if(k.current){const{height:m}=c.getBoundingClientRect();k.current.style.height=m+"px"}}).observe(c)},[]);const Z=U(0),D=U(),I=mn(c=>{var f;if(!D.current)return;if(Z.current>3){D.current.innerHTML="",D.current=null,(f=I==null?void 0:I.cancel)==null||f.call(I);return}let h,m;Z.current<=3&&(h=Date.now()),D.current.innerHTML=oi(c,{maxCharacters:u})+` -`,Z.current<=3&&(m=Date.now()),h&&m&&m-h>50&&Z.current++},500),se=Qe(()=>{var f,E;const c=(f=D.current)==null?void 0:f.cloneNode(!0);if(!c)return;c.querySelectorAll("mark").forEach(y=>{y.remove()});const h=(E=c.innerText)==null?void 0:E.trim();if(!h)return;const m=ci(h);m!=null&&m.length&&(g==null||g({name:"auto-detect-language",languages:m}))},2e3);return t("text-expander",{ref:k,keys:"@ # :",class:"compose-field-container",children:[t("textarea",{class:"compose-field",autoCapitalize:"sentences",autoComplete:"on",autoCorrect:"on",spellCheck:"true",dir:"auto",rows:"6",cols:"50",...R,ref:e,name:"status",value:r,onKeyDown:c=>{const{key:h,target:m}=c;if(h==="Enter"&&!(c.ctrlKey||c.metaKey))try{const{value:f,selectionStart:E}=m,B=f.slice(0,E).split(` -`).slice(-1)[0];if(B&&/^\s*(-|\d+\.)\s/.test(B)){const[q,ue,A,X,V]=B.match(/^(\s*)(-|\d+\.)(\s+)(.+)?/)||[];if(V){c.preventDefault();const[W]=A.match(/\d+/)||[],j=W?`${+W+1}.`:"-",te=` -${ue}${j}${X}`;m.setRangeText(te,E,E);const O=E+te.length;m.setSelectionRange(O,O)}else{const W=E-B.length;m.setRangeText("",W,E)}Dt(m),m.dispatchEvent(new Event("input"))}}catch{}D.current&&(D.current.scrollTop=m.scrollTop)},onInput:c=>{var f;const{target:h}=c,m=h.value.replace(/\u200b/g,"");p(m),Dt(h),(f=s.onInput)==null||f.call(s,c),I(m),se()},style:{width:"100%",height:"4em"},onScroll:c=>{if(D.current){const{scrollTop:h}=c.target;D.current.scrollTop=h}}}),t("div",{ref:D,class:"compose-highlight","aria-hidden":"true"})]})});function di({maxCharacters:s=500,hidden:e}){const o=Fn(le).composerCharacterCount,r=s-o;return e?t("span",{class:"char-counter",hidden:!0}):t("span",{class:"char-counter",title:`${r}/${s}`,style:{"--percentage":o/s*100},children:[t("meter",{class:`${r<=-10?"explode":r<=0?"danger":r<=20?"warning":""}`,value:o,max:s}),t("span",{class:"counter",children:r})]})}function Ke(s){const e=["bytes","KB","MB","GB","TB","PB","EB","ZB","YB"];let n=0;for(;s>=1024;)s/=1024,n++;return`${s.toFixed(0).toLocaleString()} ${e[n]}`}function jt(s,e,n,o){const r=Math.sqrt(e/s),p=Math.floor(n*r),u=Math.floor(o*r);return{newWidth:p,newHeight:u}}function hi({attachment:s,disabled:e,lang:n,onDescriptionChange:o=()=>{},onRemove:r=()=>{}}){const[p,u]=H("default"),v=Ht("@mastodon/edit-media-attributes"),{type:g,id:R,file:C}=s,k=Re(()=>C?URL.createObjectURL(C):s.url,[C,s.url]),S=!!(C!=null&&C.size),Z=S?Nt():{},{mediaAttachments:{imageSizeLimit:D,imageMatrixLimit:I,videoSizeLimit:se,videoMatrixLimit:J,videoFrameRateLimit:c}={}}=Z||{},[h,m]=H(()=>S?g.startsWith("image")&&D&&C.size>D?{type:"imageSizeLimit",details:{imageSize:C.size,imageSizeLimit:D}}:g.startsWith("video")&&se&&C.size>se?{type:"videoSizeLimit",details:{videoSize:C.size,videoSizeLimit:se}}:null:null),[f,E]=H({});ee(()=>{!S||!I||(f==null?void 0:f.matrix)>I&&m({type:"imageMatrixLimit",details:{imageMatrix:f==null?void 0:f.matrix,imageMatrixLimit:I,width:f==null?void 0:f.width,height:f==null?void 0:f.height}})},[f,I,S]);const[y,B]=H({});ee(()=>{!S||!J||(y==null?void 0:y.matrix)>J&&m({type:"videoMatrixLimit",details:{videoMatrix:y==null?void 0:y.matrix,videoMatrixLimit:J,width:y==null?void 0:y.width,height:y==null?void 0:y.height}})},[y,J,S]);const[q,ue]=H(s.description),[A,X]=g.split("/"),V=Qe(o,250);ee(()=>{V(q)},[q,V]);const[W,j]=H(!1),te=U(null);ee(()=>{let z;return W&&te.current&&(z=setTimeout(()=>{te.current.focus()},100)),()=>{clearTimeout(z)}},[W]);const O=t(Ce,{children:R&&!v?t("div",{class:"media-desc",children:[t("span",{class:"tag",children:"Uploaded"}),t("p",{title:q,children:s.description||t("i",{children:"No description"})})]}):t("textarea",{ref:te,value:q||"",lang:n,placeholder:{image:"Image description",video:"Video description",audio:"Audio description"}[A],autoCapitalize:"sentences",autoComplete:"on",autoCorrect:"on",spellCheck:"true",dir:"auto",disabled:e||p==="loading",class:p==="loading"?"loading":"",maxlength:"1500",onInput:z=>{const{value:M}=z.target;ue(M)}})}),ie=U(null);ee(()=>()=>{var z,M;(M=(z=ie.current)==null?void 0:z.hideToast)==null||M.call(z)},[]);const ae=U(null),$=z=>{const{type:M,details:L}=z;switch(M){case"imageSizeLimit":{const{imageSize:N,imageSizeLimit:Q}=L;return`File size too large. Uploading might encounter issues. Try reduce the file size from ${Ke(N)} to ${Ke(Q)} or lower.`}case"imageMatrixLimit":{const{imageMatrix:N,imageMatrixLimit:Q,width:oe,height:he}=L,{newWidth:ve,newHeight:xe}=jt(N,Q,oe,he);return`Dimension too large. Uploading might encounter issues. Try reduce dimension from ${oe.toLocaleString()}×${he.toLocaleString()}px to ${ve.toLocaleString()}×${xe.toLocaleString()}px.`}case"videoSizeLimit":{const{videoSize:N,videoSizeLimit:Q}=L;return`File size too large. Uploading might encounter issues. Try reduce the file size from ${Ke(N)} to ${Ke(Q)} or lower.`}case"videoMatrixLimit":{const{videoMatrix:N,videoMatrixLimit:Q,width:oe,height:he}=L,{newWidth:ve,newHeight:xe}=jt(N,Q,oe,he);return`Dimension too large. Uploading might encounter issues. Try reduce dimension from ${oe.toLocaleString()}×${he.toLocaleString()}px to ${ve.toLocaleString()}×${xe.toLocaleString()}px.`}case"videoFrameRateLimit":return"Frame rate too high. Uploading might encounter issues."}};return t(Ce,{children:[t("div",{class:"media-attachment",children:[t("div",{class:"media-preview",tabIndex:"0",onClick:()=>{j(!0)},children:A==="image"?t("img",{src:k,alt:"",onLoad:z=>{if(!S)return;const{naturalWidth:M,naturalHeight:L}=z.target;E({matrix:M*L,width:M,height:L})}}):A==="video"||A==="gifv"?t("video",{src:k+"#t=0.1",playsinline:!0,muted:!0,disablePictureInPicture:!0,preload:"metadata",onLoadedMetadata:z=>{if(!S)return;const{videoWidth:M,videoHeight:L}=z.target;M&&L&&B({matrix:M*L,width:M,height:L})}}):A==="audio"?t("audio",{src:k,controls:!0}):null}),O,t("div",{class:"media-aside",children:[t("button",{type:"button",class:"plain close-button",disabled:e,onClick:r,children:t(K,{icon:"x"})}),!!h&&t("button",{type:"button",class:"media-error",title:$(h),onClick:()=>{ae.current&&ae.current.hideToast(),ae.current=ke({text:$(h),duration:1e4})},children:t(K,{icon:"alert"})})]})]}),W&&t(Ve,{onClick:z=>{z.target===z.currentTarget&&j(!1)},children:t("div",{id:"media-sheet",class:"sheet sheet-max",children:[t("button",{type:"button",class:"sheet-close",onClick:()=>{j(!1)},children:t(K,{icon:"x"})}),t("header",{children:t("h2",{children:{image:"Edit image description",video:"Edit video description",audio:"Edit audio description"}[A]})}),t("main",{tabIndex:"-1",children:[t("div",{class:"media-preview",children:A==="image"?t("img",{src:k,alt:""}):A==="video"||A==="gifv"?t("video",{src:k,playsinline:!0,controls:!0}):A==="audio"?t("audio",{src:k,controls:!0}):null}),t("div",{class:"media-form",children:[O,t("footer",{children:[A==="image"&&/^(png|jpe?g|gif|webp)$/i.test(X)&&!!le.settings.mediaAltGenerator&&!!ut&&t(gn,{portal:{target:document.body},containerProps:{style:{zIndex:1001}},align:"center",position:"anchor",overflow:"auto",menuButton:t("button",{type:"button",title:"More",class:"plain",children:t(K,{icon:"more",size:"l",alt:"More"})}),children:[t(St,{disabled:p==="loading",onClick:()=>{u("loading"),ie.current=ke({text:"Generating description. Please wait...",duration:-1}),async function(){var z,M;try{const L=new FormData;L.append("image",C);const N=await fetch(ut,{method:"POST",body:L}).then(Q=>Q.json());if(N.error)throw new Error(N.error);ue(N.description)}catch(L){ke(`Failed to generate description${L!=null&&L.message?`: ${L.message}`:""}`)}finally{u("default"),(M=(z=ie.current)==null?void 0:z.hideToast)==null||M.call(z)}}()},children:[t(K,{icon:"sparkles2"}),n&&n!=="en"?t("small",{children:["Generate description…",t("br",{}),"(English)"]}):t("span",{children:"Generate description…"})]}),!!n&&n!=="en"&&t(St,{disabled:p==="loading",onClick:()=>{u("loading"),ie.current=ke({text:"Generating description. Please wait...",duration:-1}),async function(){var z,M;try{const L=new FormData;L.append("image",C);const N=`?lang=${n}`,Q=await fetch(ut+N,{method:"POST",body:L}).then(oe=>oe.json());if(Q.error)throw new Error(Q.error);ue(Q.description)}catch(L){ke(`Failed to generate description${L!=null&&L.message?`: ${L.message}`:""}`)}finally{u("default"),(M=(z=ie.current)==null?void 0:z.hideToast)==null||M.call(z)}}()},children:[t(K,{icon:"sparkles2"}),t("small",{children:["Generate description…",t("br",{}),"(",fn(n),")"," ",t("span",{class:"more-insignificant",children:"— experimental"})]})]})]}),t("button",{type:"button",class:"light block",onClick:()=>{j(!1)},disabled:p==="loading",children:"Done"})]})]})]})]})})]})}function pi({lang:s,poll:e,disabled:n,onInput:o=()=>{},maxOptions:r,maxExpiration:p,minExpiration:u,maxCharactersPerOption:v}){const{options:g,expiresIn:R,multiple:C}=e;return t("div",{class:`poll ${C?"multiple":""}`,children:[t("div",{class:"poll-choices",children:g.map((k,S)=>t("div",{class:"poll-choice",children:[t("input",{required:!0,type:"text",value:k,disabled:n,maxlength:v,placeholder:`Choice ${S+1}`,lang:s,spellCheck:"true",dir:"auto",onInput:Z=>{const{value:D}=Z.target;g[S]=D,o(e)}}),t("button",{type:"button",class:"plain2 poll-button",disabled:n||g.length<=1,onClick:()=>{g.splice(S,1),o(e)},children:t(K,{icon:"x",size:"s"})})]},S))}),t("div",{class:"poll-toolbar",children:[t("button",{type:"button",class:"plain2 poll-button",disabled:n||g.length>=r,onClick:()=>{g.push(""),o(e)},children:"+"})," ",t("label",{class:"multiple-choices",children:[t("input",{type:"checkbox",checked:C,disabled:n,onChange:k=>{const{checked:S}=k.target;e.multiple=S,o(e)}})," ","Multiple choices"]}),t("label",{class:"expires-in",children:["Duration"," ",t("select",{value:R,disabled:n,onChange:k=>{const{value:S}=k.target;e.expiresIn=S,o(e)},children:Object.entries(qt).filter(([k,S])=>S>=u&&S<=p).map(([k,S])=>t("option",{value:S,children:k},S))})]})]}),t("div",{class:"poll-toolbar",children:t("button",{type:"button",class:"plain remove-poll-button",disabled:n,onClick:()=>{o(null)},children:"Remove poll"})})]})}function be(s){return s.replace(/[&<>"']/g,function(e){return"&#"+e.charCodeAt(0)+";"})}function Pt(s){for(let e in s)(s[e]===null||s[e]===void 0)&&delete s[e];return s}function mi({onClose:s=()=>{},onSelect:e=()=>{},defaultSearchTerm:n}){const{masto:o}=vt(),[r,p]=H("default"),[u,v]=H([]),[g,R]=H({}),[C,k]=H(0),S=async c=>{if(!(c!=null&&c.length))return;const h=await vn(c,g);h&&R({...g,...h})},Z=c=>{c&&(p("loading"),(async()=>{try{const h=await o.v1.accounts.search.list({q:c,limit:40,resolve:!1});v(h),S(h),p("default")}catch{p("error")}})())},D=Qe(Z,1e3);ee(()=>{Z()},[Z]);const I=U();ee(()=>{I.current&&(I.current.focus(),I.current.value&&(I.current.selectionStart=I.current.value.length,I.current.selectionEnd=I.current.value.length))},[]),ee(()=>{n&&Z(n)},[n]);const se=c=>{const h=c.acct;e(h),s()};_e("enter",()=>{const c=u[C];c&&se(c)},{preventDefault:!0,enableOnFormTags:["input"]});const J=U();return _e("down",()=>{C{const c=J.current.querySelector(".selected");c&&c.scrollIntoView({behavior:"smooth",block:"center",inline:"center"})},1)},{preventDefault:!0,enableOnFormTags:["input"]}),_e("up",()=>{C>0?k(C-1):k(u.length-1),setTimeout(()=>{const c=J.current.querySelector(".selected");c&&c.scrollIntoView({behavior:"smooth",block:"center",inline:"center"})},1)},{preventDefault:!0,enableOnFormTags:["input"]}),t("div",{id:"mention-sheet",class:"sheet",children:[!!s&&t("button",{type:"button",class:"sheet-close",onClick:s,children:t(K,{icon:"x"})}),t("header",{children:t("form",{onSubmit:c=>{var h;c.preventDefault(),(h=D.flush)==null||h.call(D)},children:t("input",{ref:I,required:!0,type:"search",class:"block",placeholder:"Search accounts",onInput:c=>{const{value:h}=c.target;D(h)},autocomplete:"off",autocorrect:"off",autocapitalize:"off",spellCheck:"false",dir:"auto",defaultValue:n||""})})}),t("main",{children:(u==null?void 0:u.length)>0?t("ul",{ref:J,class:`accounts-list ${r==="loading"?"loading":""}`,children:u.map((c,h)=>{const m=g[c.id];return t("li",{class:h===C?"selected":"",children:[t(Ot,{avatarSize:"xxl",account:c,relationship:m,showStats:!0,showActivity:!0}),t("button",{type:"button",class:"plain2",onClick:()=>{se(c)},children:t(K,{icon:"plus",size:"xl"})})]},c.id)})}):r==="loading"?t("div",{class:"ui-state",children:t(et,{abrupt:!0})}):r==="error"?t("div",{class:"ui-state",children:t("p",{children:"Error loading accounts"})}):null})]})}function gi({masto:s,instance:e,onClose:n=()=>{},onSelect:o=()=>{},defaultSearchTerm:r}){const[p,u]=H("default"),v=U([]),[g,R]=H([]),C=Re(()=>ze.account.get("recentlyUsedCustomEmojis")||[]),k=U();ee(()=>{u("loading"),(async()=>{try{const[h,m]=await Vt(e,s);k.current=m,R(h),u("default")}catch{u("error")}})()},[]);const S=Re(()=>{const h={"--recent--":C.filter(f=>g.find(E=>E.shortcode===f.shortcode))},m=[];return g.forEach(f=>{var E,y;if((y=(E=v.current)==null?void 0:E.push)==null||y.call(E,f),!f.category){m.push(f);return}h[f.category]||(h[f.category]=[]),h[f.category].push(f)}),m.length&&(h["--others--"]=m),h},[g]),Z=U(),[D,I]=H(null),se=At(h=>{var f,E,y;const{value:m}=h.target;if(m){const B=(f=k.current)==null?void 0:f.search(m,{limit:ft});I(B.map(q=>q.item)),(y=(E=Z.current)==null?void 0:E.scrollTo)==null||y.call(E,0,0)}else I(null)},[g]);ee(()=>{r&&(g!=null&&g.length)&&se({target:{value:r}})},[r,se,g]);const J=At(h=>{o==null||o(h),n==null||n(),queueMicrotask(()=>{let m=ze.account.get("recentlyUsedCustomEmojis")||[];const f=m.findIndex(E=>E.shortcode===h.shortcode);f!==-1?(m.splice(f,1),m.unshift(h)):(m.unshift(h),m=m.filter(E=>{var y,B;return(B=(y=v.current)==null?void 0:y.find)==null?void 0:B.call(y,q=>q.shortcode===E.shortcode)}),m=m.slice(0,10)),ze.account.set("recentlyUsedCustomEmojis",m)})},[o]),c=U();return ee(()=>{c.current&&(c.current.focus(),c.current.value&&(c.current.selectionStart=c.current.value.length,c.current.selectionEnd=c.current.value.length))},[]),t("div",{id:"custom-emojis-sheet",class:"sheet",children:[!!n&&t("button",{type:"button",class:"sheet-close",onClick:n,children:t(K,{icon:"x"})}),t("header",{children:[t("div",{children:[t("b",{children:"Custom emojis"})," ",p==="loading"?t(et,{}):t("small",{class:"insignificant",children:[" • ",e]})]}),t("form",{onSubmit:h=>{h.preventDefault();const m=D[0];m&&J(`:${m.shortcode}:`)},children:t("input",{ref:c,type:"search",placeholder:"Search emoji",onInput:se,autocomplete:"off",autocorrect:"off",autocapitalize:"off",spellCheck:"false",dir:"auto",defaultValue:r||""})})]}),t("main",{ref:Z,children:D!==null?t("ul",{class:"custom-emojis-matches custom-emojis-list",children:D.map(h=>t("li",{class:"custom-emojis-match",children:t(Gt,{emoji:h,onClick:()=>{J(`:${h.shortcode}:`)},showCode:!0})},h.shortcode))}):t("div",{class:"custom-emojis-list",children:[p==="error"&&t("div",{class:"ui-state",children:t("p",{children:"Error loading custom emojis"})}),p==="default"&&Object.entries(S).map(([h,m])=>!!(m!=null&&m.length)&&t(Ce,{children:[t("div",{class:"section-header",children:{"--recent--":"Recently used","--others--":"Others"}[h]||h}),t(fi,{emojis:m,onSelect:J})]}))]})})]})}const fi=Wt(({emojis:s,onSelect:e})=>{const[n,o]=H(ft),r=s.length>n;return t("section",{children:[s.slice(0,n).map(p=>t(Gt,{emoji:p,onClick:()=>{e(`:${p.shortcode}:`)}},p.shortcode)),r&&t("button",{type:"button",class:"plain small",onClick:()=>o(n+ft),children:[(s.length-n).toLocaleString()," more…"]})]})}),Gt=Wt(({emoji:s,onClick:e,showCode:n})=>{const o=r=>{const u=r.currentTarget.closest("main");if(u){const v=u.getBoundingClientRect(),g=r.currentTarget.getBoundingClientRect(),R=r.currentTarget.classList;g.leftv.right-88?(R.add("edge-right"),R.remove("edge-left")):R.remove("edge-left","edge-right")}};return t("button",{type:"button",className:"plain4",onClick:e,"data-title":n?void 0:s.shortcode,onPointerEnter:o,onFocus:o,children:[t("picture",{children:[!!s.staticUrl&&t("source",{srcSet:s.staticUrl,media:"(prefers-reduced-motion: reduce)"}),t("img",{className:"shortcode-emoji",src:s.url||s.staticUrl,alt:s.shortcode,width:"24",height:"24",loading:"lazy",decoding:"async"})]}),n&&t(Ce,{children:[" ",t("code",{children:s.shortcode})]})]})}),dt=20;function vi({onClose:s=()=>{},onSelect:e=()=>{}}){var S,Z,D,I,se,J;const[n,o]=H("default"),[r,p]=H([]),u=U(null),v=U(null),g=U(0),R=U(null);function C({offset:c}){var h,m,f;(h=v.current)!=null&&h.value&&(o("loading"),(f=(m=R.current)==null?void 0:m.scrollTo)==null||f.call(m,{top:0,left:0,behavior:"smooth"}),(async()=>{var E;try{const y={api_key:Kn,q:v.current.value,rating:"g",limit:dt,bundle:"messaging_non_clips",offset:c},B=await fetch("https://api.giphy.com/v1/gifs/search?"+new URLSearchParams(y),{referrerPolicy:"no-referrer"}).then(q=>q.json());g.current=((E=B.pagination)==null?void 0:E.offset)||0,p(B),o("results")}catch{o("error")}})())}ee(()=>{var c;(c=v.current)==null||c.focus()},[]);const k=Qe(()=>{C({offset:0})},1e3);return t("div",{id:"gif-picker-sheet",class:"sheet",children:[!!s&&t("button",{type:"button",class:"sheet-close",onClick:s,children:t(K,{icon:"x"})}),t("header",{children:t("form",{ref:u,onSubmit:c=>{c.preventDefault(),C({offset:0})},children:[t("input",{ref:v,type:"search",name:"q",placeholder:"Search GIFs",required:!0,autocomplete:"off",autocorrect:"off",autocapitalize:"off",spellCheck:"false",dir:"auto",onInput:k}),t("input",{type:"image",class:"powered-button",src:Nn,width:"86",height:"30"})]})}),t("main",{ref:R,class:n==="loading"?"loading":"",children:[n==="default"&&t("div",{class:"ui-state",children:t("p",{class:"insignificant",children:"Type to search GIFs"})}),n==="loading"&&!((S=r==null?void 0:r.data)!=null&&S.length)&&t("div",{class:"ui-state",children:t(et,{abrupt:!0})}),((Z=r==null?void 0:r.data)==null?void 0:Z.length)>0?t(Ce,{children:[t("ul",{children:r.data.map(c=>{const{id:h,images:m,title:f,alt_text:E}=c,{fixed_height_small:y,fixed_height_downsampled:B,fixed_height:q,original:ue}=m,A=y!=null&&y.url?y:B!=null&&B.url?B:q;let{url:X,webp:V,width:W,height:j}=A;+j>100&&(W=W/j*100,j=100);const te=URL.parse(X),O=te.origin+te.pathname;let ie;if(V){const ae=URL.parse(V);ie=ae.origin+ae.pathname}return t("li",{children:t("button",{type:"button",onClick:()=>{const{mp4:ae,url:$}=ue,z=ae||$,M=URL.parse(z),L=M.origin+M.pathname;s(),e({url:L,type:ae?"video/mp4":"image/gif",alt_text:E||f})},children:t("figure",{style:{"--figure-width":W+"px"},children:[t("picture",{children:[ie&&t("source",{srcset:ie,type:"image/webp"}),t("img",{src:O,width:W,height:j,loading:"lazy",decoding:"async",alt:E,referrerpolicy:"no-referrer",onLoad:ae=>{ae.target.style.backgroundColor="transparent"}})]}),t("figcaption",{children:E||f})]})})},h)})}),t("p",{class:"pagination",children:[((D=r.pagination)==null?void 0:D.offset)>0&&t("button",{type:"button",class:"light small",disabled:n==="loading",onClick:()=>{var c;C({offset:((c=r.pagination)==null?void 0:c.offset)-dt})},children:[t(K,{icon:"chevron-left"}),t("span",{children:"Previous"})]}),t("span",{}),((I=r.pagination)==null?void 0:I.offset)+((se=r.pagination)==null?void 0:se.count)<((J=r.pagination)==null?void 0:J.total_count)&&t("button",{type:"button",class:"light small",disabled:n==="loading",onClick:()=>{var c;C({offset:((c=r.pagination)==null?void 0:c.offset)+dt})},children:[t("span",{children:"Next"})," ",t(K,{icon:"chevron-right"})]})]})]}):n==="results"&&t("div",{class:"ui-state",children:t("p",{children:"No results"})}),n==="error"&&t("div",{class:"ui-state",children:t("p",{children:"Error loading GIFs"})})]})]})}export{Ei as default}; -//# sourceMappingURL=compose-2Y_rtJfC.js.map diff --git a/assets/compose-2Y_rtJfC.js.map b/assets/compose-2Y_rtJfC.js.map deleted file mode 100644 index 9e412db..0000000 --- a/assets/compose-2Y_rtJfC.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"compose-2Y_rtJfC.js","sources":["../../node_modules/@github/combobox-nav/dist/index.js","../../node_modules/@github/text-expander-element/dist/index.js","../../node_modules/ansi-regex/index.js","../../node_modules/strip-ansi/index.js","../../node_modules/string-length/index.js","../../src/assets/powered-by-giphy.svg","../../src/components/compose.jsx"],"sourcesContent":["export default class Combobox {\n constructor(input, list, { tabInsertsSuggestions, defaultFirstOption } = {}) {\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.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 scrollTo(this.list, target);\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);\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) {\n target.dispatchEvent(new CustomEvent('combobox-commit', { 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}\nfunction scrollTo(container, target) {\n if (!inViewport(container, target)) {\n container.scrollTop = target.offsetTop;\n }\n}\nfunction inViewport(container, element) {\n const scrollTop = container.scrollTop;\n const containerBottom = scrollTop + container.clientHeight;\n const top = element.offsetTop;\n const bottom = top + element.clientHeight;\n return top >= scrollTop && bottom <= containerBottom;\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\n/**\n * A custom element is implemented as a class which extends HTMLElement (in the\n * case of autonomous elements) or the interface you want to customize (in the\n * case of customized built-in elements).\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Web_components/Using_custom_elements#custom_element_lifecycle_callbacks\n */\nclass CustomHTMLElement extends HTMLElement {\n}\n\nclass InputStyleCloneUpdateEvent extends Event {\n constructor() {\n super(\"update\");\n }\n}\nconst CloneRegistry = new WeakMap();\n/**\n * Create 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 InputStyleCloneElement extends CustomHTMLElement {\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;\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.\n *\n * Upon initial creation the clone element will automatically be inserted into the DOM and begin observing the\n * linked input. Only one clone per input can ever exist at a time.\n * @param input The target input to clone.\n */\n static for(input) {\n const clone = CloneRegistry.get(input) ?? new InputStyleCloneElement(input);\n CloneRegistry.set(input, clone);\n return clone;\n }\n /**\n * Avoid constructing directly: Use `InputStyleCloneElement.for` instead.\n * @private\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 = document.createElement(\"div\");\n this.#container.style.position = \"absolute\";\n this.#container.style.pointerEvents = \"none\";\n input.after(this.#container);\n this.#container.appendChild(this);\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 /** @private */\n connectedCallback() {\n const input = this.#inputRef.deref();\n if (!input)\n return this.remove();\n this.style.pointerEvents = \"none\";\n this.style.userSelect = \"none\";\n this.style.overflow = \"hidden\";\n this.style.display = \"block\";\n // Important not to use display:none which would not render the content at all\n this.style.visibility = \"hidden\";\n if (input instanceof HTMLTextAreaElement) {\n this.style.whiteSpace = \"pre-wrap\";\n this.style.wordWrap = \"break-word\";\n }\n else {\n this.style.whiteSpace = \"nowrap\";\n // text in single-line inputs is vertically centered\n this.style.display = \"table-cell\";\n this.style.verticalAlign = \"middle\";\n }\n this.setAttribute(\"aria-hidden\", \"true\");\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 /** @private */\n disconnectedCallback() {\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 const input = this.#inputRef.deref();\n if (input) {\n input.removeEventListener(\"input\", this.#onInput, { capture: true });\n CloneRegistry.delete(input);\n }\n }\n // --- private ---\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.#inputRef.deref();\n if (!input)\n return this.remove();\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.style.height = inputStyle.height;\n this.style.width = inputStyle.width;\n // Immediately re-adjust for browser inconsistencies in scrollbar handling, if necessary\n if (input.clientHeight !== this.clientHeight)\n this.style.height = `calc(${inputStyle.height} + ${input.clientHeight - this.clientHeight}px)`;\n if (input.clientWidth !== this.clientWidth)\n this.style.width = `calc(${inputStyle.width} + ${input.clientWidth - this.clientWidth}px)`;\n // Position on top of the input\n const inputRect = input.getBoundingClientRect();\n const cloneRect = this.getBoundingClientRect();\n this.#xOffset = this.#xOffset + inputRect.left - cloneRect.left;\n this.#yOffset = this.#yOffset + inputRect.top - cloneRect.top;\n this.style.transform = `translate(${this.#xOffset}px, ${this.#yOffset}px)`;\n this.scrollTop = input.scrollTop;\n this.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.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.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// Inspired by https://github.com/github/catalyst/blob/dc284dcf4f82329a9cac5c867462a8fa529b6c40/src/register.ts\ntry {\n customElements.define(\"input-style-clone\", InputStyleCloneElement);\n}\ncatch (e) {\n // Throws DOMException with NotSupportedError if already defined\n if (!(e instanceof DOMException && e.name === \"NotSupportedError\"))\n throw e;\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 InputStyleCloneElement.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.childNodes[0];\n if (textNode) {\n range.setStart(textNode, this.startOffset);\n range.setEnd(textNode, this.endOffset);\n }\n return range;\n }\n}\n\nconst states = new WeakMap();\nclass TextExpander {\n constructor(expander, input) {\n this.expander = expander;\n this.input = input;\n this.combobox = null;\n this.menu = null;\n this.match = null;\n this.justPasted = false;\n this.lookBackIndex = 0;\n this.oninput = this.onInput.bind(this);\n this.onpaste = this.onPaste.bind(this);\n this.onkeydown = this.onKeydown.bind(this);\n this.oncommit = this.onCommit.bind(this);\n this.onmousedown = this.onMousedown.bind(this);\n this.onblur = this.onBlur.bind(this);\n this.interactingWithList = false;\n input.addEventListener('paste', this.onpaste);\n input.addEventListener('input', this.oninput);\n input.addEventListener('keydown', this.onkeydown);\n input.addEventListener('blur', this.onblur);\n }\n destroy() {\n this.input.removeEventListener('paste', this.onpaste);\n this.input.removeEventListener('input', this.oninput);\n this.input.removeEventListener('keydown', this.onkeydown);\n this.input.removeEventListener('blur', this.onblur);\n }\n dismissMenu() {\n if (this.deactivate()) {\n this.lookBackIndex = this.input.selectionEnd || this.lookBackIndex;\n }\n }\n activate(match, menu) {\n var _a, _b;\n if (this.input !== document.activeElement && this.input !== ((_b = (_a = document.activeElement) === null || _a === void 0 ? void 0 : _a.shadowRoot) === null || _b === void 0 ? void 0 : _b.activeElement)) {\n return;\n }\n this.deactivate();\n this.menu = menu;\n if (!menu.id)\n menu.id = `text-expander-${Math.floor(Math.random() * 100000).toString()}`;\n this.expander.append(menu);\n this.combobox = new Combobox(this.input, menu);\n this.expander.dispatchEvent(new Event('text-expander-activate'));\n this.positionMenu(menu, match.position);\n this.combobox.start();\n menu.addEventListener('combobox-commit', this.oncommit);\n menu.addEventListener('mousedown', this.onmousedown);\n this.combobox.navigate(1);\n }\n positionMenu(menu, position) {\n const caretRect = new InputRange(this.input, position).getBoundingClientRect();\n const targetPosition = { left: caretRect.left, top: caretRect.top + caretRect.height };\n const currentPosition = menu.getBoundingClientRect();\n const delta = {\n left: targetPosition.left - currentPosition.left,\n top: targetPosition.top - currentPosition.top\n };\n if (delta.left !== 0 || delta.top !== 0) {\n const currentStyle = getComputedStyle(menu);\n menu.style.left = currentStyle.left ? `calc(${currentStyle.left} + ${delta.left}px)` : `${delta.left}px`;\n menu.style.top = currentStyle.top ? `calc(${currentStyle.top} + ${delta.top}px)` : `${delta.top}px`;\n }\n }\n deactivate() {\n const menu = this.menu;\n if (!menu || !this.combobox)\n return false;\n this.expander.dispatchEvent(new Event('text-expander-deactivate'));\n this.menu = null;\n menu.removeEventListener('combobox-commit', this.oncommit);\n menu.removeEventListener('mousedown', this.onmousedown);\n this.combobox.destroy();\n this.combobox = null;\n menu.remove();\n return true;\n }\n onCommit({ target }) {\n var _a;\n const item = target;\n if (!(item instanceof HTMLElement))\n return;\n if (!this.combobox)\n return;\n const match = this.match;\n if (!match)\n return;\n const beginning = this.input.value.substring(0, match.position - match.key.length);\n const remaining = this.input.value.substring(match.position + match.text.length);\n const detail = { item, key: match.key, value: null, continue: false };\n const canceled = !this.expander.dispatchEvent(new CustomEvent('text-expander-value', { cancelable: true, detail }));\n if (canceled)\n return;\n if (!detail.value)\n return;\n let suffix = (_a = this.expander.getAttribute('suffix')) !== null && _a !== void 0 ? _a : ' ';\n if (detail.continue) {\n suffix = '';\n }\n const value = `${detail.value}${suffix}`;\n this.input.value = beginning + value + remaining;\n const cursor = beginning.length + value.length;\n this.deactivate();\n this.input.focus({\n preventScroll: true\n });\n this.input.selectionStart = cursor;\n this.input.selectionEnd = cursor;\n if (!detail.continue) {\n this.lookBackIndex = cursor;\n this.match = null;\n }\n this.expander.dispatchEvent(new CustomEvent('text-expander-committed', { cancelable: false, detail: { input: this.input } }));\n }\n onBlur() {\n if (this.interactingWithList) {\n this.interactingWithList = false;\n return;\n }\n this.deactivate();\n }\n onPaste() {\n this.justPasted = true;\n }\n async onInput() {\n if (this.justPasted) {\n this.justPasted = false;\n return;\n }\n const match = this.findMatch();\n if (match) {\n this.match = match;\n const menu = await this.notifyProviders(match);\n if (!this.match)\n return;\n if (menu) {\n this.activate(match, menu);\n }\n else {\n this.deactivate();\n }\n }\n else {\n this.match = null;\n this.deactivate();\n }\n }\n findMatch() {\n const cursor = this.input.selectionEnd || 0;\n const text = this.input.value;\n if (cursor <= this.lookBackIndex) {\n this.lookBackIndex = cursor - 1;\n }\n for (const { key, multiWord } of this.expander.keys) {\n const found = query(text, key, cursor, {\n multiWord,\n lookBackIndex: this.lookBackIndex,\n lastMatchPosition: this.match ? this.match.position : null\n });\n if (found) {\n return { text: found.text, key, position: found.position };\n }\n }\n }\n async notifyProviders(match) {\n const providers = [];\n const provide = (result) => providers.push(result);\n const canceled = !this.expander.dispatchEvent(new CustomEvent('text-expander-change', { cancelable: true, detail: { provide, text: match.text, key: match.key } }));\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 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 default TextExpanderElement;\n","export default function ansiRegex({onlyFirst = false} = {}) {\n\tconst pattern = [\n\t '[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)',\n\t\t'(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-ntqry=><~]))'\n\t].join('|');\n\n\treturn new RegExp(pattern, onlyFirst ? undefined : 'g');\n}\n","import ansiRegex from 'ansi-regex';\n\nconst regex = ansiRegex();\n\nexport default function stripAnsi(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError(`Expected a \\`string\\`, got \\`${typeof string}\\``);\n\t}\n\n\t// Even though the regex is global, we don't need to reset the `.lastIndex`\n\t// because unlike `.exec()` and `.test()`, `.replace()` does it automatically\n\t// and doing it manually has a performance penalty.\n\treturn string.replace(regex, '');\n}\n","import stripAnsi from 'strip-ansi';\n\nconst segmenter = new Intl.Segmenter();\n\nexport default function stringLength(string, {countAnsiEscapeCodes = false} = {}) {\n\tif (string === '') {\n\t\treturn 0;\n\t}\n\n\tif (!countAnsiEscapeCodes) {\n\t\tstring = stripAnsi(string);\n\t}\n\n\tif (string === '') {\n\t\treturn 0;\n\t}\n\n\tlet length = 0;\n\n\tfor (const _ of segmenter.segment(string)) { // eslint-disable-line no-unused-vars\n\t\tlength++;\n\t}\n\n\treturn length;\n}\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 './compose.css';\n\nimport '@github/text-expander-element';\nimport { MenuItem } from '@szhsin/react-menu';\nimport { deepEqual } from 'fast-equals';\nimport Fuse from 'fuse.js';\nimport { memo } from 'preact/compat';\nimport { forwardRef } from 'preact/compat';\nimport {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'preact/hooks';\nimport { useHotkeys } from 'react-hotkeys-hook';\nimport stringLength from 'string-length';\nimport { detectAll } from 'tinyld/light';\nimport { uid } from 'uid/single';\nimport { useDebouncedCallback, useThrottledCallback } from 'use-debounce';\nimport { useSnapshot } from 'valtio';\n\nimport poweredByGiphyURL from '../assets/powered-by-giphy.svg';\n\nimport Menu2 from '../components/menu2';\nimport supportedLanguages from '../data/status-supported-languages';\nimport urlRegex from '../data/url-regex';\nimport { api } from '../utils/api';\nimport db from '../utils/db';\nimport emojifyText from '../utils/emojify-text';\nimport localeMatch from '../utils/locale-match';\nimport localeCode2Text from '../utils/localeCode2Text';\nimport openCompose from '../utils/open-compose';\nimport pmem from '../utils/pmem';\nimport { fetchRelationships } from '../utils/relationships';\nimport shortenNumber from '../utils/shorten-number';\nimport showToast from '../utils/show-toast';\nimport states, { saveStatus } from '../utils/states';\nimport store from '../utils/store';\nimport {\n getCurrentAccount,\n getCurrentAccountNS,\n getCurrentInstance,\n getCurrentInstanceConfiguration,\n} from '../utils/store-utils';\nimport supports from '../utils/supports';\nimport useCloseWatcher from '../utils/useCloseWatcher';\nimport useInterval from '../utils/useInterval';\nimport visibilityIconsMap from '../utils/visibility-icons-map';\n\nimport AccountBlock from './account-block';\n// import Avatar from './avatar';\nimport Icon from './icon';\nimport Loader from './loader';\nimport Modal from './modal';\nimport Status from './status';\n\nconst {\n PHANPY_IMG_ALT_API_URL: IMG_ALT_API_URL,\n PHANPY_GIPHY_API_KEY: GIPHY_API_KEY,\n} = import.meta.env;\n\nconst supportedLanguagesMap = supportedLanguages.reduce((acc, l) => {\n const [code, common, native] = l;\n acc[code] = {\n common,\n native,\n };\n return acc;\n}, {});\n\n/* NOTES:\n - Max character limit includes BOTH status text and Content Warning text\n*/\n\nconst expiryOptions = {\n '5 minutes': 5 * 60,\n '30 minutes': 30 * 60,\n '1 hour': 60 * 60,\n '6 hours': 6 * 60 * 60,\n '12 hours': 12 * 60 * 60,\n '1 day': 24 * 60 * 60,\n '3 days': 3 * 24 * 60 * 60,\n '7 days': 7 * 24 * 60 * 60,\n};\nconst expirySeconds = Object.values(expiryOptions);\nconst oneDay = 24 * 60 * 60;\n\nconst expiresInFromExpiresAt = (expiresAt) => {\n if (!expiresAt) return oneDay;\n const delta = (new Date(expiresAt).getTime() - Date.now()) / 1000;\n return expirySeconds.find((s) => s >= delta) || oneDay;\n};\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 menu.style.left = innerWidth - width - windowMargin + 'px';\n }\n }\n });\n});\nobserver.observe(menu);\n\nconst DEFAULT_LANG = localeMatch(\n [new Intl.DateTimeFormat().resolvedOptions().locale, ...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 urlRegexObj = new RegExp(urlRegex.source, urlRegex.flags);\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// 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])(#[a-z0-9_]+([a-z0-9_.]+[a-z0-9_]+)?)(?![\\\\/\\\\w])`,\n 'ig',\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();\nfunction highlightText(text, { maxCharacters = Infinity }) {\n // Accept text string, return formatted HTML string\n // Escape all HTML special characters\n let html = text\n .replace(/&/g, '&')\n .replace(//g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n\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(html);\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 '' +\n exceedLimitHTML +\n '';\n }\n return withinLimitHTML + exceedLimitHTML;\n }\n\n return html\n .replace(urlRegexObj, '$2$3') // URLs\n .replace(MENTION_RE, '$1$2') // Mentions\n .replace(HASHTAG_RE, '$1$2') // Hashtags\n .replace(\n SCAN_RE,\n '$1$2',\n ); // Emoji shortcodes\n}\n\nconst rtf = new Intl.RelativeTimeFormat();\n\nconst CUSTOM_EMOJIS_COUNT = 100;\n\nfunction Compose({\n onClose,\n replyToStatus,\n editStatus,\n draftStatus,\n standalone,\n hasOpener,\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 = 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,\n charactersReservedPerUrl,\n } = {},\n mediaAttachments: {\n supportedMimeTypes = [],\n imageSizeLimit,\n imageMatrixLimit,\n videoSizeLimit,\n videoMatrixLimit,\n videoFrameRateLimit,\n } = {},\n polls: {\n maxOptions,\n maxCharactersPerOption,\n maxExpiration,\n minExpiration,\n } = {},\n } = configuration || {};\n\n const textareaRef = useRef();\n const spoilerTextRef = useRef();\n const [visibility, setVisibility] = useState('public');\n const [sensitive, setSensitive] = 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\n const prefs = store.account.get('preferences') || {};\n\n const oninputTextarea = () => {\n if (!textareaRef.current) return;\n textareaRef.current.dispatchEvent(new Event('input'));\n };\n const focusTextarea = () => {\n setTimeout(() => {\n if (!textareaRef.current) return;\n // status starts with newline, focus on first position\n if (draftStatus?.status?.startsWith?.('\\n')) {\n textareaRef.current.selectionStart = 0;\n textareaRef.current.selectionEnd = 0;\n }\n console.debug('FOCUS textarea');\n textareaRef.current?.focus();\n }, 300);\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 if (allMentions.length > 0) {\n textareaRef.current.value = `${allMentions\n .map((m) => `@${m}`)\n .join(' ')} `;\n oninputTextarea();\n }\n focusTextarea();\n setVisibility(\n visibility === 'public' && prefs['posting:default:visibility']\n ? prefs['posting:default:visibility']\n : visibility,\n );\n setLanguage(language || prefs.postingDefaultLanguage || DEFAULT_LANG);\n setSensitive(sensitive && !!spoilerText);\n } else if (editStatus) {\n const { visibility, language, sensitive, poll, mediaAttachments } =\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(language || presf.postingDefaultLanguage || DEFAULT_LANG);\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']);\n }\n if (prefs['posting:default:language']) {\n setLanguage(prefs['posting:default:language']);\n }\n if (prefs['posting:default:sensitive']) {\n setSensitive(prefs['posting:default:sensitive']);\n }\n }\n if (draftStatus) {\n const {\n status,\n spoilerText,\n visibility,\n language,\n sensitive,\n poll,\n mediaAttachments,\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 focusTextarea();\n if (spoilerText) spoilerTextRef.current.value = spoilerText;\n if (visibility) setVisibility(visibility);\n setLanguage(language || prefs.postingDefaultLanguage || DEFAULT_LANG);\n if (sensitive !== null) setSensitive(sensitive);\n if (composablePoll) setPoll(composablePoll);\n if (mediaAttachments) setMediaAttachments(mediaAttachments);\n }\n }, [draftStatus, editStatus, replyToStatus]);\n\n const formRef = useRef();\n\n const beforeUnloadCopy = '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\", including multiple mentions like \"@username1@username2\"\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 },\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 hasModal && !hasOnlyComposer;\n },\n },\n );\n useCloseWatcher(() => {\n if (!standalone && confirmClose()) {\n onClose();\n }\n }, [standalone, confirmClose, onClose]);\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 poll,\n mediaAttachments,\n },\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 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 const file = item.getAsFile();\n if (file && supportedMimeTypes.includes(file.type)) {\n files.push(file);\n }\n }\n }\n if (files.length > 0 && mediaAttachments.length >= maxMediaAttachments) {\n alert(`You can only attach up to ${maxMediaAttachments} files.`);\n return;\n }\n console.log({ files });\n if (files.length > 0) {\n e.preventDefault();\n e.stopPropagation();\n // Auto-cut-off files to avoid exceeding maxMediaAttachments\n const max = maxMediaAttachments - mediaAttachments.length;\n const allowedFiles = files.slice(0, max);\n if (allowedFiles.length <= 0) {\n alert(`You can only attach up to ${maxMediaAttachments} files.`);\n return;\n }\n const mediaFiles = allowedFiles.map((file) => ({\n file,\n type: file.type,\n size: file.size,\n url: URL.createObjectURL(file),\n id: null,\n description: null,\n }));\n setMediaAttachments([...mediaAttachments, ...mediaFiles]);\n }\n };\n window.addEventListener('paste', handleItems);\n const handleDragover = (e) => {\n // Prevent default if there's files\n if (e.dataTransfer.items.length > 0) {\n e.preventDefault();\n e.stopPropagation();\n }\n };\n window.addEventListener('dragover', handleDragover);\n window.addEventListener('drop', handleItems);\n return () => {\n window.removeEventListener('paste', handleItems);\n window.removeEventListener('dragover', handleDragover);\n window.removeEventListener('drop', handleItems);\n };\n }, [mediaAttachments]);\n\n const [showMentionPicker, setShowMentionPicker] = useState(false);\n const [showEmoji2Picker, setShowEmoji2Picker] = useState(false);\n const [showGIFPicker, setShowGIFPicker] = useState(false);\n\n const [autoDetectedLanguages, setAutoDetectedLanguages] = useState(null);\n const [topSupportedLanguages, restSupportedLanguages] = useMemo(() => {\n const topLanguages = [];\n const restLanguages = [];\n const { contentTranslationHideLanguages = [] } = states.settings;\n supportedLanguages.forEach((l) => {\n const [code] = l;\n if (\n code === language ||\n code === prevLanguage.current ||\n code === DEFAULT_LANG ||\n contentTranslationHideLanguages.includes(code) ||\n (autoDetectedLanguages?.length && autoDetectedLanguages.includes(code))\n ) {\n topLanguages.push(l);\n } else {\n restLanguages.push(l);\n }\n });\n topLanguages.sort(([codeA, commonA], [codeB, commonB]) => {\n if (codeA === language) return -1;\n if (codeB === language) return 1;\n return commonA.localeCompare(commonB);\n });\n restLanguages.sort(([codeA, commonA], [codeB, commonB]) =>\n commonA.localeCompare(commonB),\n );\n return [topLanguages, restLanguages];\n }, [language, autoDetectedLanguages]);\n\n const replyToStatusMonthsAgo = useMemo(\n () =>\n !!replyToStatus?.createdAt &&\n Math.floor(\n (Date.now() - new Date(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 return (\n
    \n
    \n
    \n {currentAccountInfo?.avatarStatic && (\n // \n \n )}\n {!standalone ? (\n \n {\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 },\n });\n\n if (!newWin) {\n return;\n }\n\n onClose();\n }}\n >\n \n \n \n \n {' '}\n {\n if (confirmClose()) {\n onClose();\n }\n }}\n >\n \n \n \n ) : (\n hasOpener && (\n {\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('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 '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 =\n '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 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 },\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 \n \n )\n )}\n
    \n {!!replyToStatus && (\n
    \n \n
    \n Replying to @\n {replyToStatus.account.acct || replyToStatus.account.username}\n ’s post\n {replyToStatusMonthsAgo >= 3 && (\n <>\n {' '}\n (\n \n {rtf.format(-replyToStatusMonthsAgo, 'month')}\n \n )\n \n )}\n
    \n
    \n )}\n {!!editStatus && (\n
    \n \n
    Editing source post
    \n
    \n )}\n {\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 { status, visibility, sensitive, spoilerText } = entries;\n\n // Pre-cleanup\n sensitive = sensitive === 'on'; // checkboxes return \"on\" if checked\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('Poll must have at least 2 options');\n return;\n }\n if (poll.options.some((option) => option === '')) {\n alert('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 'Some media have no descriptions. Continue?',\n );\n if (!yes) return;\n }\n }\n\n // Post-cleanup\n spoilerText = (sensitive && spoilerText) || undefined;\n status = status === '' ? undefined : status;\n\n // states.composerState.minimized = true;\n states.composerState.publishing = true;\n setUIState('loading');\n (async () => {\n try {\n console.log('MEDIA ATTACHMENTS', mediaAttachments);\n if (mediaAttachments.length > 0) {\n // Upload media attachments first\n const mediaPromises = mediaAttachments.map((attachment) => {\n const { file, description, id } = attachment;\n console.log('UPLOADING', attachment);\n if (id) {\n // If already uploaded\n return attachment;\n } else {\n const params = removeNullUndefined({\n file,\n description,\n });\n return masto.v2.media.create(params).then((res) => {\n if (res.id) {\n attachment.id = res.id;\n }\n return res;\n });\n }\n });\n const results = await Promise.allSettled(mediaPromises);\n\n // If any failed, return\n if (\n results.some((result) => {\n return result.status === 'rejected' || !result.value?.id;\n })\n ) {\n states.composerState.publishing = false;\n states.composerState.publishingError = true;\n setUIState('error');\n // Alert all the reasons\n results.forEach((result) => {\n if (result.status === 'rejected') {\n console.error(result);\n alert(result.reason || `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,\n poll,\n // mediaIds: mediaAttachments.map((attachment) => attachment.id),\n media_ids: mediaAttachments.map(\n (attachment) => attachment.id,\n ),\n };\n if (editStatus && supports('@mastodon/edit-media-attributes')) {\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 } else if (!editStatus) {\n params.visibility = visibility;\n // params.inReplyToId = replyToStatus?.id || undefined;\n params.in_reply_to_id = replyToStatus?.id || undefined;\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 });\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
    \n {\n updateCharCount();\n }}\n />\n \n {\n const sensitive = e.target.checked;\n setSensitive(sensitive);\n if (sensitive) {\n spoilerTextRef.current?.focus();\n } else {\n textareaRef.current?.focus();\n }\n }}\n />\n \n {' '}\n \n \n {\n setVisibility(e.target.value);\n }}\n disabled={uiState === 'loading' || !!editStatus}\n >\n \n \n \n \n \n {' '}\n
    \n {\n updateCharCount();\n }}\n maxCharacters={maxCharacters}\n performSearch={(params) => {\n const { type, q, limit } = params;\n if (type === 'accounts') {\n return masto.v1.accounts.search.list({\n q,\n limit,\n resolve: false,\n });\n }\n return masto.v2.search.fetch(params);\n }}\n onTrigger={(action) => {\n if (action?.name === 'custom-emojis') {\n setShowEmoji2Picker({\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 }\n }}\n />\n {mediaAttachments?.length > 0 && (\n
    \n {mediaAttachments.map((attachment, i) => {\n const { id, file } = attachment;\n const fileID = file?.size + file?.type + file?.name;\n return (\n {\n setMediaAttachments((attachments) => {\n const newAttachments = [...attachments];\n newAttachments[i].description = value;\n return newAttachments;\n });\n }}\n onRemove={() => {\n setMediaAttachments((attachments) => {\n return attachments.filter((_, j) => j !== i);\n });\n }}\n />\n );\n })}\n \n
    \n )}\n {!!poll && (\n {\n if (poll) {\n const newPoll = { ...poll };\n setPoll(newPoll);\n } else {\n setPoll(null);\n }\n }}\n />\n )}\n \n \n \n {/* If maxOptions is not defined or defined and is greater than 1, show poll button */}\n {maxOptions == null ||\n (maxOptions > 1 && (\n <>\n {\n setPoll({\n options: ['', ''],\n expiresIn: 24 * 60 * 60, // 1 day\n multiple: false,\n });\n }}\n >\n \n \n \n ))}\n {/* {\n setShowMentionPicker(true);\n }}\n >\n \n */}\n {\n setShowEmoji2Picker(true);\n }}\n >\n \n \n {!!states.settings.composerGIFPicker && (\n = maxMediaAttachments ||\n !!poll\n }\n onClick={() => {\n setShowGIFPicker(true);\n }}\n >\n GIF\n \n )}\n \n
    \n {uiState === 'loading' ? (\n \n ) : (\n
    \n \n
    \n {showMentionPicker && (\n {\n if (e.target === e.currentTarget) {\n setShowMentionPicker(false);\n }\n }}\n >\n {\n setShowMentionPicker(false);\n }}\n defaultSearchTerm={showMentionPicker?.defaultSearchTerm}\n onSelect={(socialAddress) => {\n const textarea = textareaRef.current;\n if (!textarea) return;\n const { selectionStart, selectionEnd } = textarea;\n const text = textarea.value;\n const textBeforeMention = text.slice(0, selectionStart);\n const spaceBeforeMention = textBeforeMention\n ? /[\\s\\t\\n\\r]$/.test(textBeforeMention)\n ? ''\n : ' '\n : '';\n const textAfterMention = text.slice(selectionEnd);\n const spaceAfterMention = /^[\\s\\t\\n\\r]/.test(textAfterMention)\n ? ''\n : ' ';\n const newText =\n textBeforeMention +\n spaceBeforeMention +\n '@' +\n socialAddress +\n spaceAfterMention +\n textAfterMention;\n textarea.value = newText;\n textarea.selectionStart = textarea.selectionEnd =\n selectionEnd +\n 1 +\n socialAddress.length +\n spaceAfterMention.length;\n textarea.focus();\n textarea.dispatchEvent(new Event('input'));\n }}\n />\n \n )}\n {showEmoji2Picker && (\n {\n if (e.target === e.currentTarget) {\n setShowEmoji2Picker(false);\n }\n }}\n >\n {\n setShowEmoji2Picker(false);\n }}\n defaultSearchTerm={showEmoji2Picker?.defaultSearchTerm}\n onSelect={(emojiShortcode) => {\n const textarea = textareaRef.current;\n if (!textarea) return;\n const { selectionStart, selectionEnd } = textarea;\n const text = textarea.value;\n const textBeforeEmoji = text.slice(0, selectionStart);\n const spaceBeforeEmoji = textBeforeEmoji\n ? /[\\s\\t\\n\\r]$/.test(textBeforeEmoji)\n ? ''\n : ' '\n : '';\n const textAfterEmoji = text.slice(selectionEnd);\n const spaceAfterEmoji = /^[\\s\\t\\n\\r]/.test(textAfterEmoji)\n ? ''\n : ' ';\n const newText =\n textBeforeEmoji +\n spaceBeforeEmoji +\n emojiShortcode +\n spaceAfterEmoji +\n textAfterEmoji;\n textarea.value = newText;\n textarea.selectionStart = textarea.selectionEnd =\n selectionEnd + emojiShortcode.length + spaceAfterEmoji.length;\n textarea.focus();\n textarea.dispatchEvent(new Event('input'));\n }}\n />\n \n )}\n {showGIFPicker && (\n {\n if (e.target === e.currentTarget) {\n setShowGIFPicker(false);\n }\n }}\n >\n setShowGIFPicker(false)}\n onSelect={({ url, type, alt_text }) => {\n console.log('GIF URL', url);\n if (mediaAttachments.length >= maxMediaAttachments) {\n alert(\n `You can only attach up to ${maxMediaAttachments} files.`,\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: 'Downloading GIF…',\n duration: -1,\n });\n const blob = await fetch(url, {\n referrerPolicy: 'no-referrer',\n }).then((res) => res.blob());\n const file = new File(\n [blob],\n type === 'video/mp4' ? 'video.mp4' : 'image.gif',\n {\n type,\n },\n );\n const newMediaAttachments = [\n ...mediaAttachments,\n {\n file,\n type,\n size: file.size,\n id: null,\n description: alt_text || '',\n },\n ];\n setMediaAttachments(newMediaAttachments);\n theToast?.hideToast?.();\n } catch (err) {\n console.error(err);\n theToast?.hideToast?.();\n showToast('Failed to download GIF');\n }\n })();\n }}\n />\n \n )}\n
    \n );\n}\n\nfunction autoResizeTextarea(textarea) {\n if (!textarea) return;\n const { value, offsetHeight, scrollHeight, clientHeight } = textarea;\n if (offsetHeight < window.innerHeight) {\n // NOTE: This check is needed because the offsetHeight return 50000 (really large number) on first render\n // No idea why it does that, will re-investigate in far future\n const offset = offsetHeight - clientHeight;\n const height = value ? scrollHeight + offset + 'px' : null;\n textarea.style.height = height;\n }\n}\n\nasync function _getCustomEmojis(instance, masto) {\n const emojis = await masto.v1.customEmojis.list();\n const visibleEmojis = emojis.filter((e) => e.visibleInPicker);\n const searcher = new Fuse(visibleEmojis, {\n keys: ['shortcode'],\n findAllMatches: true,\n });\n return [visibleEmojis, searcher];\n}\nconst getCustomEmojis = pmem(_getCustomEmojis, {\n // Limit by time to reduce memory usage\n // Cached by instance\n matchesArg: (cacheKeyArg, keyArg) => cacheKeyArg.instance === keyArg.instance,\n maxAge: 30 * 60 * 1000, // 30 minutes\n});\n\nconst detectLangs = (text) => {\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 { masto, instance } = api();\n const [text, setText] = useState(ref.current?.value || '');\n const {\n maxCharacters,\n performSearch = () => {},\n onTrigger = () => {},\n ...textareaProps\n } = props;\n // const snapStates = useSnapshot(states);\n // const charCount = snapStates.composerCharacterCount;\n\n // const customEmojis = useRef();\n const searcherRef = useRef();\n useEffect(() => {\n getCustomEmojis(instance, masto)\n .then((r) => {\n const [emojis, searcher] = r;\n searcherRef.current = searcher;\n })\n .catch((e) => {\n console.error(e);\n });\n }, []);\n\n const textExpanderRef = useRef();\n const textExpanderTextRef = useRef('');\n useEffect(() => {\n let handleChange, handleValue, handleCommited;\n if (textExpanderRef.current) {\n handleChange = (e) => {\n // console.log('text-expander-change', 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 emojis = customEmojis.current.filter((emoji) =>\n // emoji.shortcode.startsWith(text),\n // );\n // const emojis = filterShortcodes(customEmojis.current, text);\n const results = searcherRef.current?.search(text, {\n limit: 5,\n });\n let html = '';\n results.forEach(({ item: emoji }) => {\n const { shortcode, url } = emoji;\n html += `\n
  • \n \"\" \n ${encodeHTML(shortcode)}\n
  • `;\n });\n html += `
  • More…
  • `;\n // console.log({ emojis, html });\n menu.innerHTML = html;\n provide(\n Promise.resolve({\n matched: results.length > 0,\n fragment: menu,\n }),\n );\n return;\n }\n\n const type = {\n '@': 'accounts',\n '#': 'hashtags',\n }[key];\n provide(\n new Promise((resolve) => {\n const searchResults = performSearch({\n type,\n q: text,\n limit: 5,\n });\n searchResults.then((value) => {\n if (text !== textExpanderTextRef.current) {\n return;\n }\n console.log({ value, type, v: value[type] });\n const results = value[type] || value;\n console.log('RESULTS', value, results);\n let html = '';\n results.forEach((result) => {\n const {\n name,\n avatarStatic,\n displayName,\n username,\n acct,\n emojis,\n history,\n } = result;\n const displayNameWithEmoji = emojifyText(displayName, emojis);\n // const item = menuItem.cloneNode();\n if (acct) {\n html += `\n
  • \n \n \"\"\n \n \n ${displayNameWithEmoji || username}\n
    @${encodeHTML(acct)}\n
    \n
  • \n `;\n } else {\n const total = history?.reduce?.(\n (acc, cur) => acc + +cur.uses,\n 0,\n );\n html += `\n
  • \n #${encodeHTML(name)}\n ${\n total\n ? `${shortenNumber(total)}`\n : ''\n }\n
  • \n `;\n }\n });\n if (type === 'accounts') {\n html += `
  • More…
  • `;\n }\n menu.innerHTML = html;\n console.log('MENU', results, menu);\n resolve({\n matched: results.length > 0,\n fragment: menu,\n });\n });\n }),\n );\n };\n\n textExpanderRef.current.addEventListener(\n 'text-expander-change',\n handleChange,\n );\n\n handleValue = (e) => {\n const { key, item } = e.detail;\n const { value, more } = item.dataset;\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 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 textExpanderRef.current.addEventListener(\n 'text-expander-value',\n handleValue,\n );\n\n handleCommited = (e) => {\n const { input } = e.detail;\n setText(input.value);\n // fire input event\n if (ref.current) {\n const event = new Event('input', { bubbles: true });\n ref.current.dispatchEvent(event);\n }\n };\n\n textExpanderRef.current.addEventListener(\n 'text-expander-committed',\n handleCommited,\n );\n }\n\n return () => {\n if (textExpanderRef.current) {\n textExpanderRef.current.removeEventListener(\n 'text-expander-change',\n handleChange,\n );\n textExpanderRef.current.removeEventListener(\n 'text-expander-value',\n handleValue,\n );\n textExpanderRef.current.removeEventListener(\n 'text-expander-committed',\n handleCommited,\n );\n }\n };\n }, []);\n\n useEffect(() => {\n // Resize observer for textarea\n const textarea = ref.current;\n if (!textarea) return;\n const resizeObserver = new ResizeObserver(() => {\n // Get height of textarea, set height to textExpander\n if (textExpanderRef.current) {\n const { height } = textarea.getBoundingClientRect();\n textExpanderRef.current.style.height = height + 'px';\n }\n });\n resizeObserver.observe(textarea);\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 const langs = detectLangs(text);\n if (langs?.length) {\n onTrigger?.({\n name: 'auto-detect-language',\n languages: langs,\n });\n }\n }, 2000);\n\n return (\n \n {\n // Get line before cursor position after pressing 'Enter'\n const { key, target } = e;\n if (key === 'Enter' && !(e.ctrlKey || e.metaKey)) {\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 // Replace zero-width space\n const text = target.value.replace(/\\u200b/g, '');\n setText(text);\n autoResizeTextarea(target);\n props.onInput?.(e);\n throttleHighlightText(text);\n debouncedAutoDetectLanguage();\n }}\n style={{\n width: '100%',\n height: '4em',\n // '--text-weight': (1 + charCount / 140).toFixed(1) || 1,\n }}\n onScroll={(e) => {\n if (composeHighlightRef.current) {\n const { scrollTop } = e.target;\n composeHighlightRef.current.scrollTop = scrollTop;\n }\n }}\n />\n \n \n );\n});\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 \n );\n}\n\nfunction prettyBytes(bytes) {\n const units = ['bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n let unitIndex = 0;\n while (bytes >= 1024) {\n bytes /= 1024;\n unitIndex++;\n }\n return `${bytes.toFixed(0).toLocaleString()} ${units[unitIndex]}`;\n}\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 onDescriptionChange = () => {},\n onRemove = () => {},\n}) {\n const [uiState, setUIState] = useState('default');\n const supportsEdit = supports('@mastodon/edit-media-attributes');\n const { type, id, file } = attachment;\n const url = useMemo(\n () => (file ? URL.createObjectURL(file) : attachment.url),\n [file, attachment.url],\n );\n console.log({ attachment });\n\n const checkMaxError = !!file?.size;\n const configuration = checkMaxError ? getCurrentInstanceConfiguration() : {};\n const {\n mediaAttachments: {\n imageSizeLimit,\n imageMatrixLimit,\n videoSizeLimit,\n videoMatrixLimit,\n videoFrameRateLimit,\n } = {},\n } = configuration || {};\n\n const [maxError, setMaxError] = useState(() => {\n if (!checkMaxError) return null;\n if (\n type.startsWith('image') &&\n imageSizeLimit &&\n file.size > imageSizeLimit\n ) {\n return {\n type: 'imageSizeLimit',\n details: {\n imageSize: file.size,\n imageSizeLimit,\n },\n };\n } else if (\n type.startsWith('video') &&\n videoSizeLimit &&\n file.size > videoSizeLimit\n ) {\n return {\n type: 'videoSizeLimit',\n details: {\n videoSize: file.size,\n videoSizeLimit,\n },\n };\n }\n return null;\n });\n\n const [imageMatrix, setImageMatrix] = useState({});\n useEffect(() => {\n if (!checkMaxError || !imageMatrixLimit) return;\n if (imageMatrix?.matrix > imageMatrixLimit) {\n setMaxError({\n type: 'imageMatrixLimit',\n details: {\n imageMatrix: imageMatrix?.matrix,\n imageMatrixLimit,\n width: imageMatrix?.width,\n height: imageMatrix?.height,\n },\n });\n }\n }, [imageMatrix, imageMatrixLimit, checkMaxError]);\n\n const [videoMatrix, setVideoMatrix] = useState({});\n useEffect(() => {\n if (!checkMaxError || !videoMatrixLimit) return;\n if (videoMatrix?.matrix > videoMatrixLimit) {\n setMaxError({\n type: 'videoMatrixLimit',\n details: {\n videoMatrix: videoMatrix?.matrix,\n videoMatrixLimit,\n width: videoMatrix?.width,\n height: videoMatrix?.height,\n },\n });\n }\n }, [videoMatrix, videoMatrixLimit, checkMaxError]);\n\n const [description, setDescription] = useState(attachment.description);\n const [suffixType, subtype] = type.split('/');\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
    \n Uploaded\n

    \n {attachment.description || No description}\n

    \n
    \n ) : (\n {\n const { value } = e.target;\n setDescription(value);\n // debouncedOnDescriptionChange(value);\n }}\n >\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 `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 `Dimension too large. Uploading might encounter issues. Try reduce dimension from ${width.toLocaleString()}×${height.toLocaleString()}px to ${newWidth.toLocaleString()}×${newHeight.toLocaleString()}px.`;\n }\n case 'videoSizeLimit': {\n const { videoSize, videoSizeLimit } = details;\n return `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 `Dimension too large. Uploading might encounter issues. Try reduce dimension from ${width.toLocaleString()}×${height.toLocaleString()}px to ${newWidth.toLocaleString()}×${newHeight.toLocaleString()}px.`;\n }\n case 'videoFrameRateLimit': {\n // Not possible to detect this on client-side for now\n return 'Frame rate too high. Uploading might encounter issues.';\n }\n }\n };\n\n return (\n <>\n
    \n {\n setShowModal(true);\n }}\n >\n {suffixType === 'image' ? (\n {\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 {\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
    \n {descTextarea}\n
    \n \n \n \n {!!maxError && (\n {\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 \n \n )}\n
    \n \n {showModal && (\n {\n if (e.target === e.currentTarget) {\n setShowModal(false);\n }\n }}\n >\n
    \n {\n setShowModal(false);\n }}\n >\n \n \n
    \n

    \n {\n {\n image: 'Edit image description',\n video: 'Edit video description',\n audio: 'Edit audio description',\n }[suffixType]\n }\n

    \n
    \n
    \n
    \n {suffixType === 'image' ? (\n \"\"\n ) : suffixType === 'video' || suffixType === 'gifv' ? (\n
    \n
    \n {descTextarea}\n
    \n {suffixType === 'image' &&\n /^(png|jpe?g|gif|webp)$/i.test(subtype) &&\n !!states.settings.mediaAltGenerator &&\n !!IMG_ALT_API_URL && (\n \n \n \n }\n >\n {\n setUIState('loading');\n toastRef.current = showToast({\n text: 'Generating description. Please wait...',\n duration: -1,\n });\n // POST with multipart\n (async function () {\n try {\n const body = new FormData();\n body.append('image', file);\n const response = await fetch(IMG_ALT_API_URL, {\n method: 'POST',\n body,\n }).then((r) => r.json());\n if (response.error) {\n throw new Error(response.error);\n }\n setDescription(response.description);\n } catch (e) {\n console.error(e);\n showToast(\n `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 \n {lang && lang !== 'en' ? (\n \n Generate description…\n
    \n (English)\n
    \n ) : (\n Generate description…\n )}\n \n {!!lang && lang !== 'en' && (\n {\n setUIState('loading');\n toastRef.current = showToast({\n text: 'Generating description. Please wait...',\n duration: -1,\n });\n // POST with multipart\n (async function () {\n try {\n const body = new FormData();\n body.append('image', file);\n const params = `?lang=${lang}`;\n const response = await fetch(\n IMG_ALT_API_URL + params,\n {\n method: 'POST',\n body,\n },\n ).then((r) => r.json());\n if (response.error) {\n throw new Error(response.error);\n }\n setDescription(response.description);\n } catch (e) {\n console.error(e);\n showToast(\n `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 \n \n Generate description…\n
    ({localeCode2Text(lang)}){' '}\n \n — experimental\n \n
    \n \n )}\n \n )}\n {\n setShowModal(false);\n }}\n disabled={uiState === 'loading'}\n >\n Done\n \n
    \n
    \n
    \n
    \n \n )}\n \n );\n}\n\nfunction Poll({\n lang,\n poll,\n disabled,\n onInput = () => {},\n maxOptions,\n maxExpiration,\n minExpiration,\n maxCharactersPerOption,\n}) {\n const { options, expiresIn, multiple } = poll;\n\n return (\n
    \n
    \n {options.map((option, i) => (\n
    \n {\n const { value } = e.target;\n options[i] = value;\n onInput(poll);\n }}\n />\n {\n options.splice(i, 1);\n onInput(poll);\n }}\n >\n \n \n
    \n ))}\n
    \n
    \n = maxOptions}\n onClick={() => {\n options.push('');\n onInput(poll);\n }}\n >\n +\n {' '}\n \n \n
    \n
    \n {\n onInput(null);\n }}\n >\n Remove poll\n \n
    \n
    \n );\n}\n\nfunction filterShortcodes(emojis, searchTerm) {\n searchTerm = searchTerm.toLowerCase();\n\n // Return an array of shortcodes that start with or contain the search term, sorted by relevance and limited to the first 5\n return emojis\n .sort((a, b) => {\n let aLower = a.shortcode.toLowerCase();\n let bLower = b.shortcode.toLowerCase();\n\n let aStartsWith = aLower.startsWith(searchTerm);\n let bStartsWith = bLower.startsWith(searchTerm);\n let aContains = aLower.includes(searchTerm);\n let bContains = bLower.includes(searchTerm);\n let bothStartWith = aStartsWith && bStartsWith;\n let bothContain = aContains && bContains;\n\n return bothStartWith\n ? a.length - b.length\n : aStartsWith\n ? -1\n : bStartsWith\n ? 1\n : bothContain\n ? a.length - b.length\n : aContains\n ? -1\n : bContains\n ? 1\n : 0;\n })\n .slice(0, 5);\n}\n\nfunction encodeHTML(str) {\n return str.replace(/[&<>\"']/g, function (char) {\n return '&#' + char.charCodeAt(0) + ';';\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\nfunction MentionModal({\n onClose = () => {},\n onSelect = () => {},\n defaultSearchTerm,\n}) {\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 },\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 },\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 },\n );\n\n return (\n
    \n {!!onClose && (\n \n )}\n
    \n {\n e.preventDefault();\n debouncedLoadAccounts.flush?.();\n // const searchTerm = inputRef.current.value;\n // debouncedLoadAccounts(searchTerm);\n }}\n >\n {\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 defaultValue={defaultSearchTerm || ''}\n />\n \n
    \n
    \n {accounts?.length > 0 ? (\n \n {accounts.map((account, i) => {\n const relationship = relationshipsMap[account.id];\n return (\n \n \n {\n selectAccount(account);\n }}\n >\n \n \n \n );\n })}\n \n ) : uiState === 'loading' ? (\n
    \n \n
    \n ) : uiState === 'error' ? (\n
    \n

    Error loading accounts

    \n
    \n ) : null}\n
    \n
    \n );\n}\n\nfunction CustomEmojisModal({\n masto,\n instance,\n onClose = () => {},\n onSelect = () => {},\n defaultSearchTerm,\n}) {\n const [uiState, setUIState] = useState('default');\n const customEmojisList = useRef([]);\n const [customEmojis, setCustomEmojis] = useState([]);\n const recentlyUsedCustomEmojis = useMemo(\n () => store.account.get('recentlyUsedCustomEmojis') || [],\n );\n const searcherRef = useRef();\n useEffect(() => {\n setUIState('loading');\n (async () => {\n try {\n const [emojis, searcher] = await getCustomEmojis(instance, masto);\n console.log('emojis', emojis);\n searcherRef.current = searcher;\n setCustomEmojis(emojis);\n setUIState('default');\n } catch (e) {\n setUIState('error');\n console.error(e);\n }\n })();\n }, []);\n\n const customEmojisCatList = useMemo(() => {\n // Group emojis by category\n const emojisCat = {\n '--recent--': recentlyUsedCustomEmojis.filter((emoji) =>\n customEmojis.find((e) => e.shortcode === emoji.shortcode),\n ),\n };\n const othersCat = [];\n customEmojis.forEach((emoji) => {\n customEmojisList.current?.push?.(emoji);\n if (!emoji.category) {\n othersCat.push(emoji);\n return;\n }\n if (!emojisCat[emoji.category]) {\n emojisCat[emoji.category] = [];\n }\n emojisCat[emoji.category].push(emoji);\n });\n if (othersCat.length) {\n emojisCat['--others--'] = othersCat;\n }\n return emojisCat;\n }, [customEmojis]);\n\n const scrollableRef = useRef();\n const [matches, setMatches] = useState(null);\n const 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 return (\n
    \n {!!onClose && (\n \n )}\n
    \n
    \n Custom emojis{' '}\n {uiState === 'loading' ? (\n \n ) : (\n • {instance}\n )}\n
    \n {\n e.preventDefault();\n const emoji = matches[0];\n if (emoji) {\n onSelectEmoji(`:${emoji.shortcode}:`);\n }\n }}\n >\n \n \n
    \n
    \n {matches !== null ? (\n
      \n {matches.map((emoji) => (\n
    • \n {\n onSelectEmoji(`:${emoji.shortcode}:`);\n }}\n showCode\n />\n
    • \n ))}\n
    \n ) : (\n
    \n {uiState === 'error' && (\n
    \n

    Error loading custom emojis

    \n
    \n )}\n {uiState === 'default' &&\n Object.entries(customEmojisCatList).map(\n ([category, emojis]) =>\n !!emojis?.length && (\n <>\n
    \n {{\n '--recent--': 'Recently used',\n '--others--': 'Others',\n }[category] || category}\n
    \n \n \n ),\n )}\n
    \n )}\n
    \n
    \n );\n}\n\nconst CustomEmojisList = memo(({ emojis, onSelect }) => {\n const [max, setMax] = useState(CUSTOM_EMOJIS_COUNT);\n const showMore = emojis.length > max;\n return (\n
    \n {emojis.slice(0, max).map((emoji) => (\n {\n onSelect(`:${emoji.shortcode}:`);\n }}\n />\n ))}\n {showMore && (\n setMax(max + CUSTOM_EMOJIS_COUNT)}\n >\n {(emojis.length - max).toLocaleString()} more…\n \n )}\n
    \n );\n});\n\nconst CustomEmojiButton = memo(({ emoji, onClick, showCode }) => {\n const addEdges = (e) => {\n // Add edge-left or edge-right class based on self position relative to scrollable parent\n // If near left edge, add edge-left, if near right edge, add edge-right\n const buffer = 88;\n const parent = e.currentTarget.closest('main');\n if (parent) {\n const rect = parent.getBoundingClientRect();\n const selfRect = e.currentTarget.getBoundingClientRect();\n const targetClassList = e.currentTarget.classList;\n if (selfRect.left < rect.left + buffer) {\n targetClassList.add('edge-left');\n targetClassList.remove('edge-right');\n } else if (selfRect.right > rect.right - buffer) {\n targetClassList.add('edge-right');\n targetClassList.remove('edge-left');\n } else {\n targetClassList.remove('edge-left', 'edge-right');\n }\n }\n };\n\n return (\n \n \n {!!emoji.staticUrl && (\n \n )}\n \n \n {showCode && (\n <>\n {' '}\n {emoji.shortcode}\n \n )}\n \n );\n});\n\nconst GIFS_PER_PAGE = 20;\nfunction GIFPickerModal({ onClose = () => {}, onSelect = () => {} }) {\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 };\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
    \n {!!onClose && (\n \n )}\n
    \n {\n e.preventDefault();\n fetchGIFs({ offset: 0 });\n }}\n >\n \n \n \n
    \n
    \n {uiState === 'default' && (\n
    \n

    Type to search GIFs

    \n
    \n )}\n {uiState === 'loading' && !results?.data?.length && (\n
    \n \n
    \n )}\n {results?.data?.length > 0 ? (\n <>\n
      \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
    • \n {\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 \n \n {strippedWebP && (\n \n )}\n {\n e.target.style.backgroundColor = 'transparent';\n }}\n />\n \n
      {alt_text || title}
      \n \n \n
    • \n );\n })}\n
    \n

    \n {results.pagination?.offset > 0 && (\n {\n fetchGIFs({\n offset: results.pagination?.offset - GIFS_PER_PAGE,\n });\n }}\n >\n \n Previous\n \n )}\n \n {results.pagination?.offset + results.pagination?.count <\n results.pagination?.total_count && (\n {\n fetchGIFs({\n offset: results.pagination?.offset + GIFS_PER_PAGE,\n });\n }}\n >\n Next \n \n )}\n

    \n \n ) : (\n uiState === 'results' && (\n
    \n

    No results

    \n
    \n )\n )}\n {uiState === 'error' && (\n
    \n

    Error loading GIFs

    \n
    \n )}\n
    \n
    \n );\n}\n\nexport default Compose;\n"],"names":["Combobox","input","list","tabInsertsSuggestions","defaultFirstOption","event","keyboardBindings","trackComposition","commitWithElement","_a","visible","indexDiff","focusEl","els","focusIndex","indexOfItem","newIndex","target","el","scrollTo","combobox","commit","fireCommitEvent","container","inViewport","element","scrollTop","containerBottom","top","bottom","boundary","query","text","key","cursor","multiWord","lookBackIndex","lastMatchPosition","keyIndex","pre","CustomHTMLElement","InputStyleCloneUpdateEvent","CloneRegistry","_InputStyleCloneElement","__privateAdd","_InputStyleCloneElement_instances","_styleObserver","__privateMethod","updateStyles_fn","_resizeObserver","requestUpdateLayout_fn","_inputRef","_container","_xOffset","_yOffset","_isLayoutUpdating","_onInput","updateText_fn","_onDocumentScrollOrResize","usingInput_fn","__privateSet","__privateGet","clone","fn","updateLayout_fn","inputStyle","inputRect","cloneRect","prop","propertiesToCopy","InputStyleCloneElement","e","_InputRange","startOffset","endOffset","_InputRange_instances","_inputElement","_startOffset","_endOffset","selectionStart","selectionEnd","offset","clampOffset_fn","toStart","createCloneRange_fn","styleClone_get","cloneElement_get","range","textNode","InputRange","states","TextExpander","expander","match","menu","_b","position","caretRect","targetPosition","currentPosition","delta","currentStyle","item","beginning","remaining","detail","suffix","value","found","providers","provide","result","x","TextExpanderElement","keysAttr","keys","multiWordAttr","globalMultiWord","state","ansiRegex","onlyFirst","pattern","regex","stripAnsi","string","segmenter","stringLength","countAnsiEscapeCodes","length","_","poweredByGiphyURL","PHANPY_IMG_ALT_API_URL","IMG_ALT_API_URL","PHANPY_GIPHY_API_KEY","GIPHY_API_KEY","import","supportedLanguagesMap","supportedLanguages","reduce","acc","l","code","common","native","expiryOptions","expirySeconds","Object","values","oneDay","expiresInFromExpiresAt","expiresAt","Date","getTime","now","find","s","document","createElement","role","className","windowMargin","observer","IntersectionObserver","entries","forEach","entry","isIntersecting","left","width","boundingClientRect","innerWidth","window","style","observe","DEFAULT_LANG","localeMatch","Intl","DateTimeFormat","resolvedOptions","locale","navigator","languages","map","urlRegexObj","RegExp","urlRegex","source","flags","usernameRegex","urlPlaceholder","countableText","inputText","replace","USERNAME_RE","MENTION_RE","HASHTAG_RE","SHORTCODE_RE_FRAGMENT","SCAN_RE","Segmenter","highlightText","maxCharacters","Infinity","html","composerCharacterCount","withinLimitHTML","exceedLimitHTML","htmlSegments","segment","index","rtf","RelativeTimeFormat","CUSTOM_EMOJIS_COUNT","Compose","onClose","replyToStatus","editStatus","draftStatus","standalone","hasOpener","console","masto","instance","uiState","setUIState","useState","UID","uid","log","currentAccount","currentAccountInfo","maxMediaAttachments","charactersReservedPerUrl","imageMatrixLimit","supportedMimeTypes","imageSizeLimit","videoSizeLimit","videoMatrixLimit","videoFrameRateLimit","maxExpiration","maxOptions","maxCharactersPerOption","minExpiration","spoilerTextRef","useRef","textareaRef","store","prevLanguage","language","sensitive","setMediaAttachments","setLanguage","oninputTextarea","poll","account","focusTextarea","dispatchEvent","setTimeout","spoilerText","useEffect","visibility2","language2","sensitive2","visibility","current","m","allMentions","prefs","setSensitive","poll2","mediaAttachments","options","expiresIn","statusSource","dataset","mediaAttachments2","setVisibility","composablePoll","status","o","formRef","hasValue","hasMediaAttachments","isSelf","hasOnlyAcct","confirmClose","hasIDMediaAttachments","beforeUnloadCopy","id","handleBeforeUnload","sameWithSource","getCharCount","updateCharCount","supportsCloseWatcher","useHotkeys","yes","addEventListener","capture","modals","hasModal","hasOnlyComposer","prevBackgroundDraft","count","escDownRef","ignoreEventWhen","useCloseWatcher","canClose","draftKey","getCurrentAccountNS","backgroundDraft","useInterval","db","handleItems","username","acct","items","i2","file","files","drafts","allowedFiles","updatedAt","then","debug","error","mediaFiles","handleDragover","includes","showMentionPicker","setShowMentionPicker","showEmoji2Picker","setShowEmoji2Picker","showGIFPicker","autoDetectedLanguages","setAutoDetectedLanguages","topSupportedLanguages","restSupportedLanguages","useMemo","topLanguages","contentTranslationHideLanguages","max","restLanguages","commonB","type","size","url","codeA","commonA","codeB","onMinimize","saveUnsavedDraft","_jsxs","dataTransfer","_jsx","children","passData","Icon","alert","settings","sort","class","avatarStatic","instanceURL","onClick","opener","composerState","Status","replyToStatusMonthsAgo","_Fragment","formData","previewMode","option","media","pointerEvents","opacity","mediaPromises","attachment","description","params2","removeNullUndefined","res","results","some","hasNoDescriptions","params","saveStatus","newStatus","allSettled","e2","media_attributes","in_reply_to_id","Textarea","onChange","limit","action","title","icon","name","MediaAttachment","attachments","newAttachments","required","fileID","performSearch","q","v1","search","resolve","v2","fetch","onTrigger","defaultSearchTerm","newPoll","setPoll","onDescriptionChange","i","accept","multiple","setShowGIFPicker","Array","Loader","CharCountMeter","disabled","MentionModal","socialAddress","textarea","textBeforeMention","spaceAfterMention","spaceBeforeMention","textAfterMention","newText","Modal","emojiShortcode","textBeforeEmoji","spaceBeforeEmoji","spaceAfterEmoji","textAfterEmoji","GIFPickerModal","alt_text","showToast","blob","onSelect","theToast","offsetHeight","scrollHeight","clientHeight","height","visibleEmojis","searcher","getCustomEmojis","pmem","_getCustomEmojis","cacheKeyArg","keyArg","detectLangs","langs","lang","newMediaAttachments","setText","ref","props","searcherRef","r","emojis","textExpanderRef","textExpanderTextRef","text2","emoji","shortcode","encodeHTML","forwardRef","textareaProps","handleChange","total","history","cur","matched","handleValue","more","searchResults","v","displayName","handleCommited","shortenNumber","slowHighlightPerf","composeHighlightRef","start","end","debouncedAutoDetectLanguage","useDebouncedCallback","dom","mark","Event","resizeObserver","throttleHighlightText","bullet","postSpaces","anything","lastLine","innerHTML","number","preSpaces","newBullet","pos","innerText","autoResizeTextarea","dir","rows","cols","onKeyDown","hidden","charCount","leftChars","ctrlKey","setRangeText","setSelectionRange","prettyBytes","bytes","unitIndex","units","scaleDimension","newWidth","scalingFactor","newHeight","onInput","onRemove","supportsEdit","supports","onScroll","checkMaxError","configuration","getCurrentInstanceConfiguration","snapStates","setImageMatrix","imageMatrix","setMaxError","matrix","Math","videoMatrix","setDescription","suffixType","subtype","debouncedOnDescriptionChange","timer","maxError","details","toastRef","maxErrorText","err","type2","imageSizeLimit2","imageSize","imageMatrixLimit2","showModal","videoSize","clearTimeout","videoSizeLimit2","descTextarea","videoMatrix2","videoMatrixLimit2","autoCapitalize","autoComplete","naturalWidth","naturalHeight","maxErrorToast","setVideoMatrix","videoWidth","videoHeight","setShowModal","src","alt","onLoad","muted","disablePictureInPicture","onLoadedMetadata","Menu2","body","response","MenuItem","menuButton","localeCode2Text","append","Poll","checked","label","maxlength","placeholder","str","char","obj","accounts2","relationships","fetchRelationships","relationshipsMap","setRelationshipsMap","filter","setAccounts","loadRelationships","loadAccounts","inputRef","filterShortcodes","searchTerm","bLower","aStartsWith","bStartsWith","aContains","bothContain","bContains","selectedAccount","accounts","selectedIndex","selectAccount","listRef","setSelectedIndex","selectedItem","term","debouncedLoadAccounts","enableOnFormTags","AccountBlock","relationship","inline","customEmojis","setCustomEmojis","onSubmit","recentlyUsedCustomEmojis","autocorrect","customEmojisList","othersCat","emojisCat","useCallback","_c","scrollableRef","setMatches","onFind","abrupt","onSelectEmoji","recentlyUsedCustomEmojis2","recentlyUsedEmojiIndex","emoji2","customEmojisCatList","category","matches","CustomEmojiButton","queueMicrotask","splice","CustomEmojisList","setMax","showMore","memo","showCode","parent","rect","selfRect","targetClassList","addEdges","GIFS_PER_PAGE","setResults","qRef","closest","getBoundingClientRect","remove","staticUrl","loading","debouncedOnInput","currentOffset","gif","fixed_height_downsampled","original","pagination","fixed_height_small","fixed_height","theImage","urlObj","strippedWebP","webp","webpObj","url2","theURL","mp4","urlObj2","strippedURL2","strippedURL","images","fetchGIFs","parse"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4]} \ No newline at end of file diff --git a/assets/compose-BMVCbqt4.js b/assets/compose-BMVCbqt4.js deleted file mode 100644 index 8424941..0000000 --- a/assets/compose-BMVCbqt4.js +++ /dev/null @@ -1,2 +0,0 @@ -import{h as w,I as p,U as S,y as i,c as e,C as f,Y as h}from"./useTitle-YZXo8QRp.js";window.opener&&(console=window.opener.console);function m(){var s,a;const[t,d]=w("default"),{editStatus:n,replyToStatus:o,draftStatus:l}=window.__COMPOSE__||{};return p(n?"Editing source status":o?`Replying to @${((s=o.account)==null?void 0:s.acct)||((a=o.account)==null?void 0:a.username)}`:"Compose"),i(()=>{S()},[]),i(()=>{if(t==="closed"){try{window.opener.focus()}catch{}window.close()}},[t]),t==="closed"?e("div",{class:"box",children:[e("p",{children:"You may close this page now."}),e("p",{children:e("button",{onClick:()=>{window.close()},children:"Close window"})})]}):e(f,{editStatus:n,replyToStatus:o,draftStatus:l,standalone:!0,hasOpener:window.opener,onClose:c=>{const{newStatus:r,fn:u=()=>{}}=c||{};try{r&&window.opener.__STATES__.reloadStatusPage++,u(),d("closed")}catch{}}})}h(e(m,{}),document.getElementById("app-standalone")); -//# sourceMappingURL=compose-BMVCbqt4.js.map diff --git a/assets/compose-BMVCbqt4.js.map b/assets/compose-BMVCbqt4.js.map deleted file mode 100644 index 4bcd5a6..0000000 --- a/assets/compose-BMVCbqt4.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"compose-BMVCbqt4.js","sources":["../../src/compose.jsx"],"sourcesContent":["import './index.css';\nimport './app.css';\nimport './polyfills';\n\nimport { render } from 'preact';\nimport { useEffect, useState } from 'preact/hooks';\n\nimport ComposeSuspense from './components/compose-suspense';\nimport { initStates } from './utils/states';\nimport useTitle from './utils/useTitle';\n\nif (window.opener) {\n console = window.opener.console;\n}\n\nfunction App() {\n const [uiState, setUIState] = useState('default');\n\n const { editStatus, replyToStatus, draftStatus } = window.__COMPOSE__ || {};\n\n useTitle(\n editStatus\n ? 'Editing source status'\n : replyToStatus\n ? `Replying to @${\n replyToStatus.account?.acct || replyToStatus.account?.username\n }`\n : 'Compose',\n );\n\n useEffect(() => {\n initStates();\n }, []);\n\n useEffect(() => {\n if (uiState === 'closed') {\n try {\n // Focus parent window\n window.opener.focus();\n } catch (e) {}\n window.close();\n }\n }, [uiState]);\n\n if (uiState === 'closed') {\n return (\n
    \n

    You may close this page now.

    \n

    \n {\n window.close();\n }}\n >\n Close window\n \n

    \n
    \n );\n }\n\n console.debug('OPEN COMPOSE');\n\n return (\n {\n const { newStatus, fn = () => {} } = results || {};\n try {\n if (newStatus) {\n window.opener.__STATES__.reloadStatusPage++;\n }\n fn();\n setUIState('closed');\n } catch (e) {}\n }}\n />\n );\n}\n\nrender(, document.getElementById('app-standalone'));\n"],"names":["window","opener","console","App","uiState","setUIState","useState","editStatus","replyToStatus","draftStatus","__COMPOSE__","account","acct","username","useEffect","initStates","focus","close","_jsxs","class","children","_jsx","onClick","standalone","hasOpener","newStatus","results","fn","render"],"mappings":"qFAWIA,OAAOC,SACTC,QAAUF,OAAOC,OAAOC,SAG1B,SAASC,GAAM,SACb,KAAM,CAACC,EAASC,CAAU,EAAIC,EAAS,SAAS,EAE1C,CAAEC,WAAAA,EAAYC,cAAAA,EAAeC,YAAAA,CAAAA,EAAgBT,OAAOU,aAAe,GA0BzE,OAvBEH,EAAAA,EACI,wBACAC,EACA,kBACEA,EAAAA,EAAcG,UAAdH,YAAAA,EAAuBI,SAAQJ,EAAAA,EAAcG,UAAdH,YAAAA,EAAuBK,SAAQ,GAEhE,SACN,EAEAC,EAAU,IAAM,CACHC,GACb,EAAG,CAAE,CAAA,EAELD,EAAU,IAAM,CACd,GAAIV,IAAY,SAAU,CACpB,GAAA,CAEFJ,OAAOC,OAAOe,aACJ,CAAC,CACbhB,OAAOiB,MAAM,CACf,CAAA,EACC,CAACb,CAAO,CAAC,EAERA,IAAY,SAEZc,EAAA,MAAA,CAAKC,MAAM,MAAKC,UACdC,EAAA,IAAA,CAAAD,SAAG,8BAAA,CAA+B,EAClCC,EAAA,IAAA,CAAAD,SACEC,EAAA,SAAA,CACEC,QAASA,IAAM,CACbtB,OAAOiB,MAAM,CACf,EAAEG,SACH,cAAA,CAEO,CAAA,CACP,CAAC,CAAA,CACD,EAITlB,IAA4B,CAE5B,WAAAK,EAEIA,cAAAA,EACAC,YAAAA,EACAC,WAAAA,GACAc,UAAU,OAAA,OACVC,WAAkBvB,OAEV,UAAAwB,EAAEA,GAAAA,EAAAA,IAAAA,EAAsB,EAACC,GAAA,CAAA,EAAE,GAAIA,CACjCD,GACF,OAAe,OAAA,WAAA,mBAEfE,IACGtB,EAAA,QAAA,CACHA,MAAAA,EACW,CAAA,CACf,CAAA,CAGNuB,EAAAP,EAAAlB,EAAA,CAAA,CAAA,EAAA,SAAA,eAAA,gBAAA,CAAA"} \ No newline at end of file diff --git a/assets/compose-GEsXl1Xt.js b/assets/compose-GEsXl1Xt.js deleted file mode 100644 index 8928c2a..0000000 --- a/assets/compose-GEsXl1Xt.js +++ /dev/null @@ -1,2 +0,0 @@ -import{m as p,v as w,C as S}from"./useTitle-dCp14HlU.js";import{p as f,_ as i,b as e,Q as m}from"./vendor-GrW-f9CX.js";window.opener&&(console=window.opener.console);function _(){var s,a;const[t,d]=f("default"),{editStatus:n,replyToStatus:o,draftStatus:r}=window.__COMPOSE__||{};return p(n?"Editing source status":o?`Replying to @${((s=o.account)==null?void 0:s.acct)||((a=o.account)==null?void 0:a.username)}`:"Compose"),i(()=>{w()},[]),i(()=>{if(t==="closed"){try{window.opener.focus()}catch{}window.close()}},[t]),t==="closed"?e("div",{class:"box",children:[e("p",{children:"You may close this page now."}),e("p",{children:e("button",{onClick:()=>{window.close()},children:"Close window"})})]}):e(S,{editStatus:n,replyToStatus:o,draftStatus:r,standalone:!0,hasOpener:window.opener,onClose:c=>{const{newStatus:l,fn:u=()=>{}}=c||{};try{l&&window.opener.__STATES__.reloadStatusPage++,u(),d("closed")}catch{}}})}m(e(_,{}),document.getElementById("app-standalone")); -//# sourceMappingURL=compose-GEsXl1Xt.js.map diff --git a/assets/compose-GEsXl1Xt.js.map b/assets/compose-GEsXl1Xt.js.map deleted file mode 100644 index 9d85ced..0000000 --- a/assets/compose-GEsXl1Xt.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"compose-GEsXl1Xt.js","sources":["../../src/compose.jsx"],"sourcesContent":["import './index.css';\n\nimport './app.css';\n\nimport { render } from 'preact';\nimport { useEffect, useState } from 'preact/hooks';\n\nimport ComposeSuspense from './components/compose-suspense';\nimport { initStates } from './utils/states';\nimport useTitle from './utils/useTitle';\n\nif (window.opener) {\n console = window.opener.console;\n}\n\nfunction App() {\n const [uiState, setUIState] = useState('default');\n\n const { editStatus, replyToStatus, draftStatus } = window.__COMPOSE__ || {};\n\n useTitle(\n editStatus\n ? 'Editing source status'\n : replyToStatus\n ? `Replying to @${\n replyToStatus.account?.acct || replyToStatus.account?.username\n }`\n : 'Compose',\n );\n\n useEffect(() => {\n initStates();\n }, []);\n\n useEffect(() => {\n if (uiState === 'closed') {\n try {\n // Focus parent window\n window.opener.focus();\n } catch (e) {}\n window.close();\n }\n }, [uiState]);\n\n if (uiState === 'closed') {\n return (\n
    \n

    You may close this page now.

    \n

    \n {\n window.close();\n }}\n >\n Close window\n \n

    \n
    \n );\n }\n\n console.debug('OPEN COMPOSE');\n\n return (\n {\n const { newStatus, fn = () => {} } = results || {};\n try {\n if (newStatus) {\n window.opener.__STATES__.reloadStatusPage++;\n }\n fn();\n setUIState('closed');\n } catch (e) {}\n }}\n />\n );\n}\n\nrender(, document.getElementById('app-standalone'));\n"],"names":["window","opener","console","App","uiState","setUIState","useState","editStatus","replyToStatus","draftStatus","__COMPOSE__","account","acct","username","useEffect","initStates","focus","close","_jsxs","class","children","_jsx","onClick","standalone","hasOpener","newStatus","results","fn","render"],"mappings":"uHAWIA,OAAOC,SACTC,QAAUF,OAAOC,OAAOC,SAG1B,SAASC,GAAM,SACb,KAAM,CAACC,EAASC,CAAU,EAAIC,EAAS,SAAS,EAE1C,CAAEC,WAAAA,EAAYC,cAAAA,EAAeC,YAAAA,CAAAA,EAAgBT,OAAOU,aAAe,GA0BzE,OAvBEH,EAAAA,EACI,wBACAC,EACC,kBACCA,EAAAA,EAAcG,UAAdH,YAAAA,EAAuBI,SAAQJ,EAAAA,EAAcG,UAAdH,YAAAA,EAAuBK,SACvD,GACD,SACN,EAEAC,EAAU,IAAM,CACHC,GACb,EAAG,CAAE,CAAA,EAELD,EAAU,IAAM,CACd,GAAIV,IAAY,SAAU,CACpB,GAAA,CAEFJ,OAAOC,OAAOe,aACJ,CAAC,CACbhB,OAAOiB,MAAM,CACf,CAAA,EACC,CAACb,CAAO,CAAC,EAERA,IAAY,SAEZc,EAAA,MAAA,CAAKC,MAAM,MAAKC,UACdC,EAAA,IAAA,CAAAD,SAAG,8BAAA,CAA+B,EAClCC,EAAA,IAAA,CAAAD,SACEC,EAAA,SAAA,CACEC,QAASA,IAAM,CACbtB,OAAOiB,MAAM,CACf,EAAEG,SACH,cAAA,CAEO,CAAA,CACP,CAAC,CAAA,CACD,EAITlB,IAA4B,CAE5B,WAAAK,EAEIA,cAAAA,EACAC,YAAAA,EACAC,WAAAA,GACAc,UAAU,OAAA,OACVC,WAAkBvB,OAEV,UAAAwB,EAAEA,GAAAA,EAAAA,IAAAA,EAAsB,EAACC,GAAA,CAAA,EAAE,GAAIA,CACjCD,GACF,OAAe,OAAA,WAAA,mBAEfE,IACGtB,EAAA,QAAA,CACHA,MAAAA,EACW,CAAA,CACf,CAAA,CAGNuB,EAAAP,EAAAlB,EAAA,CAAA,CAAA,EAAA,SAAA,eAAA,gBAAA,CAAA"} \ No newline at end of file diff --git a/assets/compose-GqPD-mCC.js b/assets/compose-GqPD-mCC.js deleted file mode 100644 index 21480ee..0000000 --- a/assets/compose-GqPD-mCC.js +++ /dev/null @@ -1,26 +0,0 @@ -var zt=s=>{throw TypeError(s)};var rt=(s,e,n)=>e.has(s)||zt("Cannot "+n);var T=(s,e,n)=>(rt(s,e,"read from private field"),n?n.call(s):e.get(s)),re=(s,e,n)=>e.has(s)?zt("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(s):e.set(s,n),de=(s,e,n,a)=>(rt(s,e,"write to private field"),a?a.call(s,n):e.set(s,n),n),G=(s,e,n)=>(rt(s,e,"access private method"),n);import{B as on,Z as rn,a as _e,a7 as ln,w as Lt,u as cn,i as Ht,b as un,I as K,y as At,h as Nt,a8 as dn,M as Ve,s as ke,a3 as hn,$ as pn,n as mn,K as gn,W as Qe,c as fn,d as St,l as vn,x as bn}from"./fuse-BiYvWrZm.js";import{s as le,a as bt,h as H,A as U,f as yn,al as Wt,d as ze,y as ee,m as xn,am as wn,T as Re,c as t,k as Ce,b as kn,L as et,j as En,D as Fn,u as Cn,q as It,x as Ut}from"./useTitle-YZXo8QRp.js";import{e as zn}from"./tinyld-light-PxOyhYWY.js";import"./index-A6D3rukc.js";class Ln{constructor(e,n,{tabInsertsSuggestions:a,defaultFirstOption:r}={}){this.input=e,this.list=n,this.tabInsertsSuggestions=a??!0,this.defaultFirstOption=r??!1,this.isComposing=!1,n.id||(n.id=`combobox-${Math.random().toString().slice(2,6)}`),this.ctrlBindings=!!navigator.userAgent.match(/Macintosh/),this.keyboardEventHandler=m=>An(m,this),this.compositionEventHandler=m=>In(m,this),this.inputHandler=this.clearSelection.bind(this),e.setAttribute("role","combobox"),e.setAttribute("aria-controls",n.id),e.setAttribute("aria-expanded","false"),e.setAttribute("aria-autocomplete","list"),e.setAttribute("aria-haspopup","listbox")}destroy(){this.clearSelection(),this.stop(),this.input.removeAttribute("role"),this.input.removeAttribute("aria-controls"),this.input.removeAttribute("aria-expanded"),this.input.removeAttribute("aria-autocomplete"),this.input.removeAttribute("aria-haspopup")}start(){this.input.setAttribute("aria-expanded","true"),this.input.addEventListener("compositionstart",this.compositionEventHandler),this.input.addEventListener("compositionend",this.compositionEventHandler),this.input.addEventListener("input",this.inputHandler),this.input.addEventListener("keydown",this.keyboardEventHandler),this.list.addEventListener("click",Mt),this.indicateDefaultOption()}stop(){this.clearSelection(),this.input.setAttribute("aria-expanded","false"),this.input.removeEventListener("compositionstart",this.compositionEventHandler),this.input.removeEventListener("compositionend",this.compositionEventHandler),this.input.removeEventListener("input",this.inputHandler),this.input.removeEventListener("keydown",this.keyboardEventHandler),this.list.removeEventListener("click",Mt)}indicateDefaultOption(){var e;this.defaultFirstOption&&((e=Array.from(this.list.querySelectorAll('[role="option"]:not([aria-disabled="true"])')).filter(lt)[0])===null||e===void 0||e.setAttribute("data-combobox-option-default","true"))}navigate(e=1){const n=Array.from(this.list.querySelectorAll('[aria-selected="true"]')).filter(lt)[0],a=Array.from(this.list.querySelectorAll('[role="option"]')).filter(lt),r=a.indexOf(n);if(r===a.length-1&&e===1||r===0&&e===-1){this.clearSelection(),this.input.focus();return}let m=e===1?0:a.length-1;if(n&&r>=0){const v=r+e;v>=0&&v0||s.offsetHeight>0)}function In(s,e){e.isComposing=s.type==="compositionstart",document.getElementById(e.input.getAttribute("aria-controls")||"")&&e.clearSelection()}function Mn(s,e){$n(s,e)||(s.scrollTop=e.offsetTop)}function $n(s,e){const n=s.scrollTop,a=n+s.clientHeight,r=e.offsetTop,m=r+e.clientHeight;return r>=n&&m<=a}const Bn=/\s|\(|\[/;function Tn(s,e,n,{multiWord:a,lookBackIndex:r,lastMatchPosition:m}={multiWord:!1,lookBackIndex:0,lastMatchPosition:null}){let u=s.lastIndexOf(e,n-1);if(u===-1||u=u+e.length+1||s.lastIndexOf(` -`,n-1)>u||s.lastIndexOf(".",n-1)>u)return}else if(s.lastIndexOf(" ",n-1)>u)return;const v=s[u-1];return v&&!Bn.test(v)?void 0:{text:s.substring(u+e.length,n),position:u+e.length}}class _n extends HTMLElement{}class Rn extends Event{constructor(){super("update")}}const ct=new WeakMap;var De,je,Ee,fe,Y,Be,Le,Ae,pt,Se,Ge,Ye,Ze,Pe,Fe;const xt=class xt extends _n{constructor(n){super();re(this,Y);re(this,De,new MutationObserver(()=>G(this,Y,Ye).call(this)));re(this,je,new ResizeObserver(()=>G(this,Y,Ge).call(this)));re(this,Ee);re(this,fe);re(this,Le,0);re(this,Ae,0);re(this,Se,!1);re(this,Pe,()=>G(this,Y,Ze).call(this));re(this,Fe,n=>{G(this,Y,Be).call(this,a=>{(n.target===document||n.target===window||n.target instanceof Node&&n.target.contains(a))&&G(this,Y,Ge).call(this)})});de(this,Ee,new WeakRef(n)),de(this,fe,document.createElement("div")),T(this,fe).style.position="absolute",T(this,fe).style.pointerEvents="none",n.after(T(this,fe)),T(this,fe).appendChild(this)}static for(n){const a=ct.get(n)??new xt(n);return ct.set(n,a),a}forceUpdate(){G(this,Y,Ye).call(this),G(this,Y,Ze).call(this)}connectedCallback(){const n=T(this,Ee).deref();if(!n)return this.remove();this.style.pointerEvents="none",this.style.userSelect="none",this.style.overflow="hidden",this.style.display="block",this.style.visibility="hidden",n instanceof HTMLTextAreaElement?(this.style.whiteSpace="pre-wrap",this.style.wordWrap="break-word"):(this.style.whiteSpace="nowrap",this.style.display="table-cell",this.style.verticalAlign="middle"),this.setAttribute("aria-hidden","true"),G(this,Y,Ye).call(this),G(this,Y,Ze).call(this),T(this,De).observe(n,{attributeFilter:["style","dir"]}),T(this,je).observe(n),document.addEventListener("scroll",T(this,Fe),{capture:!0}),window.addEventListener("resize",T(this,Fe),{capture:!0}),n.addEventListener("input",T(this,Pe),{capture:!0})}disconnectedCallback(){T(this,fe).remove(),T(this,De).disconnect(),T(this,je).disconnect(),document.removeEventListener("scroll",T(this,Fe),{capture:!0}),window.removeEventListener("resize",T(this,Fe),{capture:!0});const n=T(this,Ee).deref();n&&(n.removeEventListener("input",T(this,Pe),{capture:!0}),ct.delete(n))}};De=new WeakMap,je=new WeakMap,Ee=new WeakMap,fe=new WeakMap,Y=new WeakSet,Be=function(n){const a=T(this,Ee).deref();return a?n(a):this.remove()},Le=new WeakMap,Ae=new WeakMap,pt=function(){G(this,Y,Be).call(this,n=>{const a=window.getComputedStyle(n);this.style.height=a.height,this.style.width=a.width,n.clientHeight!==this.clientHeight&&(this.style.height=`calc(${a.height} + ${n.clientHeight-this.clientHeight}px)`),n.clientWidth!==this.clientWidth&&(this.style.width=`calc(${a.width} + ${n.clientWidth-this.clientWidth}px)`);const r=n.getBoundingClientRect(),m=this.getBoundingClientRect();de(this,Le,T(this,Le)+r.left-m.left),de(this,Ae,T(this,Ae)+r.top-m.top),this.style.transform=`translate(${T(this,Le)}px, ${T(this,Ae)}px)`,this.scrollTop=n.scrollTop,this.scrollLeft=n.scrollLeft,this.dispatchEvent(new Rn)})},Se=new WeakMap,Ge=function(){T(this,Se)||(de(this,Se,!0),requestAnimationFrame(()=>{G(this,Y,pt).call(this),de(this,Se,!1)}))},Ye=function(){G(this,Y,Be).call(this,n=>{const a=window.getComputedStyle(n);for(const r of Dn)this.style[r]=a[r];G(this,Y,Ge).call(this)})},Ze=function(){G(this,Y,Be).call(this,n=>{this.textContent=n.value,G(this,Y,pt).call(this)})},Pe=new WeakMap,Fe=new WeakMap;let Je=xt;const Dn=["direction","writingMode","unicodeBidi","textOrientation","boxSizing","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","borderStyle","paddingTop","paddingRight","paddingBottom","paddingLeft","fontStyle","fontVariant","fontWeight","fontStretch","fontSize","fontSizeAdjust","lineHeight","fontFamily","textAlign","textTransform","textIndent","textDecoration","letterSpacing","wordSpacing","tabSize","MozTabSize"];try{customElements.define("input-style-clone",Je)}catch(s){if(!(s instanceof DOMException&&s.name==="NotSupportedError"))throw s}var pe,Ie,Me,ce,gt,qt,ft,Te;const Xe=class Xe{constructor(e,n=0,a=n){re(this,ce);re(this,pe);re(this,Ie);re(this,Me);de(this,pe,e),de(this,Ie,n),de(this,Me,a)}static fromSelection(e){const{selectionStart:n,selectionEnd:a}=e;return new Xe(e,n??void 0,a??void 0)}get collapsed(){return this.startOffset===this.endOffset}get commonAncestorContainer(){return T(this,pe)}get endContainer(){return T(this,pe)}get startContainer(){return T(this,pe)}get startOffset(){return T(this,Ie)}get endOffset(){return T(this,Me)}setStartOffset(e){de(this,Ie,G(this,ce,ft).call(this,e))}setEndOffset(e){de(this,Me,G(this,ce,ft).call(this,e))}collapse(e=!1){e?this.setEndOffset(this.startOffset):this.setStartOffset(this.endOffset)}cloneContents(){return G(this,ce,Te).call(this).cloneContents()}cloneRange(){return new Xe(T(this,pe),this.startOffset,this.endOffset)}getBoundingClientRect(){return G(this,ce,Te).call(this).getBoundingClientRect()}getClientRects(){return G(this,ce,Te).call(this).getClientRects()}toString(){return G(this,ce,Te).call(this).toString()}getStyleClone(){return T(this,ce,gt)}};pe=new WeakMap,Ie=new WeakMap,Me=new WeakMap,ce=new WeakSet,gt=function(){return Je.for(T(this,pe))},qt=function(){return T(this,ce,gt)},ft=function(e){return Math.max(0,Math.min(e,T(this,pe).value.length))},Te=function(){const e=document.createRange(),n=T(this,ce,qt).childNodes[0];return n&&(e.setStart(n,this.startOffset),e.setEnd(n,this.endOffset)),e};let mt=Xe;const qe=new WeakMap;class jn{constructor(e,n){this.expander=e,this.input=n,this.combobox=null,this.menu=null,this.match=null,this.justPasted=!1,this.lookBackIndex=0,this.oninput=this.onInput.bind(this),this.onpaste=this.onPaste.bind(this),this.onkeydown=this.onKeydown.bind(this),this.oncommit=this.onCommit.bind(this),this.onmousedown=this.onMousedown.bind(this),this.onblur=this.onBlur.bind(this),this.interactingWithList=!1,n.addEventListener("paste",this.onpaste),n.addEventListener("input",this.oninput),n.addEventListener("keydown",this.onkeydown),n.addEventListener("blur",this.onblur)}destroy(){this.input.removeEventListener("paste",this.onpaste),this.input.removeEventListener("input",this.oninput),this.input.removeEventListener("keydown",this.onkeydown),this.input.removeEventListener("blur",this.onblur)}dismissMenu(){this.deactivate()&&(this.lookBackIndex=this.input.selectionEnd||this.lookBackIndex)}activate(e,n){var a,r;this.input!==document.activeElement&&this.input!==((r=(a=document.activeElement)===null||a===void 0?void 0:a.shadowRoot)===null||r===void 0?void 0:r.activeElement)||(this.deactivate(),this.menu=n,n.id||(n.id=`text-expander-${Math.floor(Math.random()*1e5).toString()}`),this.expander.append(n),this.combobox=new Ln(this.input,n),this.expander.dispatchEvent(new Event("text-expander-activate")),this.positionMenu(n,e.position),this.combobox.start(),n.addEventListener("combobox-commit",this.oncommit),n.addEventListener("mousedown",this.onmousedown),this.combobox.navigate(1))}positionMenu(e,n){const a=new mt(this.input,n).getBoundingClientRect(),r={left:a.left,top:a.top+a.height},m=e.getBoundingClientRect(),u={left:r.left-m.left,top:r.top-m.top};if(u.left!==0||u.top!==0){const v=getComputedStyle(e);e.style.left=v.left?`calc(${v.left} + ${u.left}px)`:`${u.left}px`,e.style.top=v.top?`calc(${v.top} + ${u.top}px)`:`${u.top}px`}}deactivate(){const e=this.menu;return!e||!this.combobox?!1:(this.expander.dispatchEvent(new Event("text-expander-deactivate")),this.menu=null,e.removeEventListener("combobox-commit",this.oncommit),e.removeEventListener("mousedown",this.onmousedown),this.combobox.destroy(),this.combobox=null,e.remove(),!0)}onCommit({target:e}){var n;const a=e;if(!(a instanceof HTMLElement)||!this.combobox)return;const r=this.match;if(!r)return;const m=this.input.value.substring(0,r.position-r.key.length),u=this.input.value.substring(r.position+r.text.length),v={item:a,key:r.key,value:null,continue:!1};if(!this.expander.dispatchEvent(new CustomEvent("text-expander-value",{cancelable:!0,detail:v}))||!v.value)return;let R=(n=this.expander.getAttribute("suffix"))!==null&&n!==void 0?n:" ";v.continue&&(R="");const C=`${v.value}${R}`;this.input.value=m+C+u;const k=m.length+C.length;this.deactivate(),this.input.focus({preventScroll:!0}),this.input.selectionStart=k,this.input.selectionEnd=k,v.continue||(this.lookBackIndex=k,this.match=null),this.expander.dispatchEvent(new CustomEvent("text-expander-committed",{cancelable:!1,detail:{input:this.input}}))}onBlur(){if(this.interactingWithList){this.interactingWithList=!1;return}this.deactivate()}onPaste(){this.justPasted=!0}async onInput(){if(this.justPasted){this.justPasted=!1;return}const e=this.findMatch();if(e){this.match=e;const n=await this.notifyProviders(e);if(!this.match)return;n?this.activate(e,n):this.deactivate()}else this.match=null,this.deactivate()}findMatch(){const e=this.input.selectionEnd||0,n=this.input.value;e<=this.lookBackIndex&&(this.lookBackIndex=e-1);for(const{key:a,multiWord:r}of this.expander.keys){const m=Tn(n,a,e,{multiWord:r,lookBackIndex:this.lookBackIndex,lastMatchPosition:this.match?this.match.position:null});if(m)return{text:m.text,key:a,position:m.position}}}async notifyProviders(e){const n=[],a=v=>n.push(v);return this.expander.dispatchEvent(new CustomEvent("text-expander-change",{cancelable:!0,detail:{provide:a,text:e.text,key:e.key}}))?(await Promise.all(n)).filter(v=>v.matched).map(v=>v.fragment)[0]:void 0}onMousedown(){this.interactingWithList=!0}onKeydown(e){e.key==="Escape"&&(this.match=null,this.deactivate()&&(this.lookBackIndex=this.input.selectionEnd||this.lookBackIndex,e.stopImmediatePropagation(),e.preventDefault()))}}class Bt extends HTMLElement{get keys(){const e=this.getAttribute("keys"),n=e?e.split(" "):[],a=this.getAttribute("multiword"),r=a?a.split(" "):[],m=r.length===0&&this.hasAttribute("multiword");return n.map(u=>({key:u,multiWord:m||r.includes(u)}))}connectedCallback(){const e=this.querySelector('input[type="text"], textarea');if(!(e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement))return;const n=new jn(this,e);qe.set(this,n)}disconnectedCallback(){const e=qe.get(this);e&&(e.destroy(),qe.delete(this))}dismiss(){const e=qe.get(this);e&&e.dismissMenu()}}window.customElements.get("text-expander")||(window.TextExpanderElement=Bt,window.customElements.define("text-expander",Bt));function Pn({onlyFirst:s=!1}={}){const e=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(e,s?void 0:"g")}const On=Pn();function Hn(s){if(typeof s!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof s}\``);return s.replace(On,"")}const Nn=new Intl.Segmenter;function Tt(s,{countAnsiEscapeCodes:e=!1}={}){if(s===""||(e||(s=Hn(s)),s===""))return 0;let n=0;for(const a of Nn.segment(s))n++;return n}const Wn="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",yt=[["aa","Afar","Afaraf"],["ab","Abkhaz","аҧсуа бызшәа"],["ae","Avestan","avesta"],["af","Afrikaans","Afrikaans"],["ak","Akan","Akan"],["am","Amharic","አማርኛ"],["an","Aragonese","aragonés"],["ar","Arabic","اللغة العربية"],["as","Assamese","অসমীয়া"],["av","Avaric","авар мацӀ"],["ay","Aymara","aymar aru"],["az","Azerbaijani","azərbaycan dili"],["ba","Bashkir","башҡорт теле"],["be","Belarusian","беларуская мова"],["bg","Bulgarian","български език"],["bh","Bihari","भोजपुरी"],["bi","Bislama","Bislama"],["bm","Bambara","bamanankan"],["bn","Bengali","বাংলা"],["bo","Tibetan","བོད་ཡིག"],["br","Breton","brezhoneg"],["bs","Bosnian","bosanski jezik"],["ca","Catalan","Català"],["ce","Chechen","нохчийн мотт"],["ch","Chamorro","Chamoru"],["co","Corsican","corsu"],["cr","Cree","ᓀᐦᐃᔭᐍᐏᐣ"],["cs","Czech","čeština"],["cu","Old Church Slavonic","ѩзыкъ словѣньскъ"],["cv","Chuvash","чӑваш чӗлхи"],["cy","Welsh","Cymraeg"],["da","Danish","dansk"],["de","German","Deutsch"],["dv","Divehi","Dhivehi"],["dz","Dzongkha","རྫོང་ཁ"],["ee","Ewe","Eʋegbe"],["el","Greek","Ελληνικά"],["en","English","English"],["eo","Esperanto","Esperanto"],["es","Spanish","Español"],["et","Estonian","eesti"],["eu","Basque","euskara"],["fa","Persian","فارسی"],["ff","Fula","Fulfulde"],["fi","Finnish","suomi"],["fj","Fijian","Vakaviti"],["fo","Faroese","føroyskt"],["fr","French","Français"],["fy","Western Frisian","Frysk"],["ga","Irish","Gaeilge"],["gd","Scottish Gaelic","Gàidhlig"],["gl","Galician","galego"],["gu","Gujarati","ગુજરાતી"],["gv","Manx","Gaelg"],["ha","Hausa","هَوُسَ"],["he","Hebrew","עברית"],["hi","Hindi","हिन्दी"],["ho","Hiri Motu","Hiri Motu"],["hr","Croatian","Hrvatski"],["ht","Haitian","Kreyòl ayisyen"],["hu","Hungarian","magyar"],["hy","Armenian","Հայերեն"],["hz","Herero","Otjiherero"],["ia","Interlingua","Interlingua"],["id","Indonesian","Bahasa Indonesia"],["ie","Interlingue","Interlingue"],["ig","Igbo","Asụsụ Igbo"],["ii","Nuosu","ꆈꌠ꒿ Nuosuhxop"],["ik","Inupiaq","Iñupiaq"],["io","Ido","Ido"],["is","Icelandic","Íslenska"],["it","Italian","Italiano"],["iu","Inuktitut","ᐃᓄᒃᑎᑐᑦ"],["ja","Japanese","日本語"],["jv","Javanese","basa Jawa"],["ka","Georgian","ქართული"],["kg","Kongo","Kikongo"],["ki","Kikuyu","Gĩkũyũ"],["kj","Kwanyama","Kuanyama"],["kk","Kazakh","қазақ тілі"],["kl","Kalaallisut","kalaallisut"],["km","Khmer","ខេមរភាសា"],["kn","Kannada","ಕನ್ನಡ"],["ko","Korean","한국어"],["kr","Kanuri","Kanuri"],["ks","Kashmiri","कश्मीरी"],["ku","Kurmanji (Kurdish)","Kurmancî"],["kv","Komi","коми кыв"],["kw","Cornish","Kernewek"],["ky","Kyrgyz","Кыргызча"],["la","Latin","latine"],["lb","Luxembourgish","Lëtzebuergesch"],["lg","Ganda","Luganda"],["li","Limburgish","Limburgs"],["ln","Lingala","Lingála"],["lo","Lao","ລາວ"],["lt","Lithuanian","lietuvių kalba"],["lu","Luba-Katanga","Tshiluba"],["lv","Latvian","latviešu valoda"],["mg","Malagasy","fiteny malagasy"],["mh","Marshallese","Kajin M̧ajeļ"],["mi","Māori","te reo Māori"],["mk","Macedonian","македонски јазик"],["ml","Malayalam","മലയാളം"],["mn","Mongolian","Монгол хэл"],["mr","Marathi","मराठी"],["ms","Malay","Bahasa Melayu"],["mt","Maltese","Malti"],["my","Burmese","ဗမာစာ"],["na","Nauru","Ekakairũ Naoero"],["nb","Norwegian Bokmål","Norsk bokmål"],["nd","Northern Ndebele","isiNdebele"],["ne","Nepali","नेपाली"],["ng","Ndonga","Owambo"],["nl","Dutch","Nederlands"],["nn","Norwegian Nynorsk","Norsk Nynorsk"],["no","Norwegian","Norsk"],["nr","Southern Ndebele","isiNdebele"],["nv","Navajo","Diné bizaad"],["ny","Chichewa","chiCheŵa"],["oc","Occitan","occitan"],["oj","Ojibwe","ᐊᓂᔑᓈᐯᒧᐎᓐ"],["om","Oromo","Afaan Oromoo"],["or","Oriya","ଓଡ଼ିଆ"],["os","Ossetian","ирон æвзаг"],["pa","Panjabi","ਪੰਜਾਬੀ"],["pi","Pāli","पाऴि"],["pl","Polish","Polski"],["ps","Pashto","پښتو"],["pt","Portuguese","Português"],["qu","Quechua","Runa Simi"],["rm","Romansh","rumantsch grischun"],["rn","Kirundi","Ikirundi"],["ro","Romanian","Română"],["ru","Russian","Русский"],["rw","Kinyarwanda","Ikinyarwanda"],["sa","Sanskrit","संस्कृतम्"],["sc","Sardinian","sardu"],["sd","Sindhi","सिन्धी"],["se","Northern Sami","Davvisámegiella"],["sg","Sango","yângâ tî sängö"],["si","Sinhala","සිංහල"],["sk","Slovak","slovenčina"],["sl","Slovenian","slovenščina"],["sn","Shona","chiShona"],["so","Somali","Soomaaliga"],["sq","Albanian","Shqip"],["sr","Serbian","српски језик"],["ss","Swati","SiSwati"],["st","Southern Sotho","Sesotho"],["su","Sundanese","Basa Sunda"],["sv","Swedish","Svenska"],["sw","Swahili","Kiswahili"],["ta","Tamil","தமிழ்"],["te","Telugu","తెలుగు"],["tg","Tajik","тоҷикӣ"],["th","Thai","ไทย"],["ti","Tigrinya","ትግርኛ"],["tk","Turkmen","Türkmen"],["tl","Tagalog","Wikang Tagalog"],["tn","Tswana","Setswana"],["to","Tonga","faka Tonga"],["tr","Turkish","Türkçe"],["ts","Tsonga","Xitsonga"],["tt","Tatar","татар теле"],["tw","Twi","Twi"],["ty","Tahitian","Reo Tahiti"],["ug","Uyghur","ئۇيغۇرچە‎"],["uk","Ukrainian","Українська"],["ur","Urdu","اردو"],["uz","Uzbek","Ўзбек"],["ve","Venda","Tshivenḓa"],["vi","Vietnamese","Tiếng Việt"],["vo","Volapük","Volapük"],["wa","Walloon","walon"],["wo","Wolof","Wollof"],["xh","Xhosa","isiXhosa"],["yi","Yiddish","ייִדיש"],["yo","Yoruba","Yorùbá"],["za","Zhuang","Saɯ cueŋƅ"],["zh","Chinese","中文"],["zu","Zulu","isiZulu"],["zh-CN","Chinese (China)","简体中文"],["zh-HK","Chinese (Hong Kong)","繁體中文(香港)"],["zh-TW","Chinese (Taiwan)","繁體中文(臺灣)"],["zh-YUE","Cantonese","廣東話"],["ast","Asturian","Asturianu"],["chr","Cherokee","ᏣᎳᎩ ᎦᏬᏂᎯᏍᏗ"],["ckb","Sorani (Kurdish)","سۆرانی"],["cnr","Montenegrin","crnogorski"],["jbo","Lojban","la .lojban."],["kab","Kabyle","Taqbaylit"],["ldn","Láadan","Láadan"],["lfn","Lingua Franca Nova","lingua franca nova"],["sco","Scots","Scots"],["sma","Southern Sami","Åarjelsaemien Gïele"],["smj","Lule Sami","Julevsámegiella"],["szl","Silesian","ślůnsko godka"],["tok","Toki Pona","toki pona"],["xal","Kalmyk","Хальмг келн"],["zba","Balaibalan","باليبلن"],["zgh","Standard Moroccan Tamazight","ⵜⴰⵎⴰⵣⵉⵖⵜ"]],Un="(((?:[^A-Za-z0-9@@$##\\uFFFE\\uFEFF\\uFFFF]|[\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069]|^))((https?:\\/\\/)((?:(?:(?:[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/](?:[_-]|[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/])*)?[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/]\\.)*(?:(?:[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/](?:-|[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/])*)?[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/]\\.)(?:(?:(?:삼성|닷컴|닷넷|香格里拉|餐厅|食品|飞利浦|電訊盈科|集团|通販|购物|谷歌|诺基亚|联通|网络|网站|网店|网址|组织机构|移动|珠宝|点看|游戏|淡马锡|机构|書籍|时尚|新闻|政府|政务|招聘|手表|手机|我爱你|慈善|微博|广东|工行|家電|娱乐|天主教|大拿|大众汽车|在线|嘉里大酒店|嘉里|商标|商店|商城|公益|公司|八卦|健康|信息|佛山|企业|中文网|中信|世界|ポイント|ファッション|セール|ストア|コム|グーグル|クラウド|みんな|คอม|संगठन|नेट|कॉम|همراه|موقع|موبايلي|كوم|كاثوليك|عرب|شبكة|بيتك|بازار|العليان|ارامكو|اتصالات|ابوظبي|קום|сайт|рус|орг|онлайн|москва|ком|католик|дети|zuerich|zone|zippo|zip|zero|zara|zappos|yun|youtube|you|yokohama|yoga|yodobashi|yandex|yamaxun|yahoo|yachts|xyz|xxx|xperia|xin|xihuan|xfinity|xerox|xbox|wtf|wtc|wow|world|works|work|woodside|wolterskluwer|wme|winners|wine|windows|win|williamhill|wiki|wien|whoswho|weir|weibo|wedding|wed|website|weber|webcam|weatherchannel|weather|watches|watch|warman|wanggou|wang|walter|walmart|wales|vuelos|voyage|voto|voting|vote|volvo|volkswagen|vodka|vlaanderen|vivo|viva|vistaprint|vista|vision|visa|virgin|vip|vin|villas|viking|vig|video|viajes|vet|versicherung|vermögensberatung|vermögensberater|verisign|ventures|vegas|vanguard|vana|vacations|ups|uol|uno|university|unicom|uconnect|ubs|ubank|tvs|tushu|tunes|tui|tube|trv|trust|travelersinsurance|travelers|travelchannel|travel|training|trading|trade|toys|toyota|town|tours|total|toshiba|toray|top|tools|tokyo|today|tmall|tkmaxx|tjx|tjmaxx|tirol|tires|tips|tiffany|tienda|tickets|tiaa|theatre|theater|thd|teva|tennis|temasek|telefonica|telecity|tel|technology|tech|team|tdk|tci|taxi|tax|tattoo|tatar|tatamotors|target|taobao|talk|taipei|tab|systems|symantec|sydney|swiss|swiftcover|swatch|suzuki|surgery|surf|support|supply|supplies|sucks|style|study|studio|stream|store|storage|stockholm|stcgroup|stc|statoil|statefarm|statebank|starhub|star|staples|stada|srt|srl|spreadbetting|spot|sport|spiegel|space|soy|sony|song|solutions|solar|sohu|software|softbank|social|soccer|sncf|smile|smart|sling|skype|sky|skin|ski|site|singles|sina|silk|shriram|showtime|show|shouji|shopping|shop|shoes|shiksha|shia|shell|shaw|sharp|shangrila|sfr|sexy|sex|sew|seven|ses|services|sener|select|seek|security|secure|seat|search|scot|scor|scjohnson|science|schwarz|schule|school|scholarships|schmidt|schaeffler|scb|sca|sbs|sbi|saxo|save|sas|sarl|sapo|sap|sanofi|sandvikcoromant|sandvik|samsung|samsclub|salon|sale|sakura|safety|safe|saarland|ryukyu|rwe|run|ruhr|rugby|rsvp|room|rogers|rodeo|rocks|rocher|rmit|rip|rio|ril|rightathome|ricoh|richardli|rich|rexroth|reviews|review|restaurant|rest|republican|report|repair|rentals|rent|ren|reliance|reit|reisen|reise|rehab|redumbrella|redstone|red|recipes|realty|realtor|realestate|read|raid|radio|racing|qvc|quest|quebec|qpon|pwc|pub|prudential|pru|protection|property|properties|promo|progressive|prof|productions|prod|pro|prime|press|praxi|pramerica|post|porn|politie|poker|pohl|pnc|plus|plumbing|playstation|play|place|pizza|pioneer|pink|ping|pin|pid|pictures|pictet|pics|piaget|physio|photos|photography|photo|phone|philips|phd|pharmacy|pfizer|pet|pccw|pay|passagens|party|parts|partners|pars|paris|panerai|panasonic|pamperedchef|page|ovh|ott|otsuka|osaka|origins|orientexpress|organic|org|orange|oracle|open|ooo|onyourside|online|onl|ong|one|omega|ollo|oldnavy|olayangroup|olayan|okinawa|office|off|observer|obi|nyc|ntt|nrw|nra|nowtv|nowruz|now|norton|northwesternmutual|nokia|nissay|nissan|ninja|nikon|nike|nico|nhk|ngo|nfl|nexus|nextdirect|next|news|newholland|new|neustar|network|netflix|netbank|net|nec|nba|navy|natura|nationwide|name|nagoya|nadex|nab|mutuelle|mutual|museum|mtr|mtpc|mtn|msd|movistar|movie|mov|motorcycles|moto|moscow|mortgage|mormon|mopar|montblanc|monster|money|monash|mom|moi|moe|moda|mobily|mobile|mobi|mma|mls|mlb|mitsubishi|mit|mint|mini|mil|microsoft|miami|metlife|merckmsd|meo|menu|men|memorial|meme|melbourne|meet|media|med|mckinsey|mcdonalds|mcd|mba|mattel|maserati|marshalls|marriott|markets|marketing|market|map|mango|management|man|makeup|maison|maif|madrid|macys|luxury|luxe|lupin|lundbeck|ltda|ltd|lplfinancial|lpl|love|lotto|lotte|london|lol|loft|locus|locker|loans|loan|llp|llc|lixil|living|live|lipsy|link|linde|lincoln|limo|limited|lilly|like|lighting|lifestyle|lifeinsurance|life|lidl|liaison|lgbt|lexus|lego|legal|lefrak|leclerc|lease|lds|lawyer|law|latrobe|latino|lat|lasalle|lanxess|landrover|land|lancome|lancia|lancaster|lamer|lamborghini|ladbrokes|lacaixa|kyoto|kuokgroup|kred|krd|kpn|kpmg|kosher|komatsu|koeln|kiwi|kitchen|kindle|kinder|kim|kia|kfh|kerryproperties|kerrylogistics|kerryhotels|kddi|kaufen|juniper|juegos|jprs|jpmorgan|joy|jot|joburg|jobs|jnj|jmp|jll|jlc|jio|jewelry|jetzt|jeep|jcp|jcb|java|jaguar|iwc|iveco|itv|itau|istanbul|ist|ismaili|iselect|irish|ipiranga|investments|intuit|international|intel|int|insure|insurance|institute|ink|ing|info|infiniti|industries|inc|immobilien|immo|imdb|imamat|ikano|iinet|ifm|ieee|icu|ice|icbc|ibm|hyundai|hyatt|hughes|htc|hsbc|how|house|hotmail|hotels|hoteles|hot|hosting|host|hospital|horse|honeywell|honda|homesense|homes|homegoods|homedepot|holiday|holdings|hockey|hkt|hiv|hitachi|hisamitsu|hiphop|hgtv|hermes|here|helsinki|help|healthcare|health|hdfcbank|hdfc|hbo|haus|hangout|hamburg|hair|guru|guitars|guide|guge|gucci|guardian|group|grocery|gripe|green|gratis|graphics|grainger|gov|got|gop|google|goog|goodyear|goodhands|goo|golf|goldpoint|gold|godaddy|gmx|gmo|gmbh|gmail|globo|global|gle|glass|glade|giving|gives|gifts|gift|ggee|george|genting|gent|gea|gdn|gbiz|gay|garden|gap|games|game|gallup|gallo|gallery|gal|fyi|futbol|furniture|fund|fun|fujixerox|fujitsu|ftr|frontier|frontdoor|frogans|frl|fresenius|free|fox|foundation|forum|forsale|forex|ford|football|foodnetwork|food|foo|fly|flsmidth|flowers|florist|flir|flights|flickr|fitness|fit|fishing|fish|firmdale|firestone|fire|financial|finance|final|film|fido|fidelity|fiat|ferrero|ferrari|feedback|fedex|fast|fashion|farmers|farm|fans|fan|family|faith|fairwinds|fail|fage|extraspace|express|exposed|expert|exchange|everbank|events|eus|eurovision|etisalat|esurance|estate|esq|erni|ericsson|equipment|epson|epost|enterprises|engineering|engineer|energy|emerck|email|education|edu|edeka|eco|eat|earth|dvr|dvag|durban|dupont|duns|dunlop|duck|dubai|dtv|drive|download|dot|doosan|domains|doha|dog|dodge|doctor|docs|dnp|diy|dish|discover|discount|directory|direct|digital|diet|diamonds|dhl|dev|design|desi|dentist|dental|democrat|delta|deloitte|dell|delivery|degree|deals|dealer|deal|dds|dclk|day|datsun|dating|date|data|dance|dad|dabur|cyou|cymru|cuisinella|csc|cruises|cruise|crs|crown|cricket|creditunion|creditcard|credit|cpa|courses|coupons|coupon|country|corsica|coop|cool|cookingchannel|cooking|contractors|contact|consulting|construction|condos|comsec|computer|compare|company|community|commbank|comcast|com|cologne|college|coffee|codes|coach|clubmed|club|cloud|clothing|clinique|clinic|click|cleaning|claims|cityeats|city|citic|citi|citadel|cisco|circle|cipriani|church|chrysler|chrome|christmas|chloe|chintai|cheap|chat|chase|charity|channel|chanel|cfd|cfa|cern|ceo|center|ceb|cbs|cbre|cbn|cba|catholic|catering|cat|casino|cash|caseih|case|casa|cartier|cars|careers|career|care|cards|caravan|car|capitalone|capital|capetown|canon|cancerresearch|camp|camera|cam|calvinklein|call|cal|cafe|cab|bzh|buzz|buy|business|builders|build|bugatti|budapest|brussels|brother|broker|broadway|bridgestone|bradesco|box|boutique|bot|boston|bostik|bosch|boots|booking|book|boo|bond|bom|bofa|boehringer|boats|bnpparibas|bnl|bmw|bms|blue|bloomberg|blog|blockbuster|blanco|blackfriday|black|biz|bio|bingo|bing|bike|bid|bible|bharti|bet|bestbuy|best|berlin|bentley|beer|beauty|beats|bcn|bcg|bbva|bbt|bbc|bayern|bauhaus|basketball|baseball|bargains|barefoot|barclays|barclaycard|barcelona|bar|bank|band|bananarepublic|banamex|baidu|baby|azure|axa|aws|avianca|autos|auto|author|auspost|audio|audible|audi|auction|attorney|athleta|associates|asia|asda|arte|art|arpa|army|archi|aramco|arab|aquarelle|apple|app|apartments|aol|anz|anquan|android|analytics|amsterdam|amica|amfam|amex|americanfamily|americanexpress|alstom|alsace|ally|allstate|allfinanz|alipay|alibaba|alfaromeo|akdn|airtel|airforce|airbus|aigo|aig|agency|agakhan|africa|afl|afamilycompany|aetna|aero|aeg|adult|ads|adac|actor|active|aco|accountants|accountant|accenture|academy|abudhabi|abogado|able|abc|abbvie|abbott|abb|abarth|aarp|aaa|onion)(?=[^0-9a-zA-Z@+-]|$))|(?:(?:한국|香港|澳門|新加坡|台灣|台湾|中國|中国|გე|ລາວ|ไทย|ලංකා|ഭാരതം|ಭಾರತ|భారత్|சிங்கப்பூர்|இலங்கை|இந்தியா|ଭାରତ|ભારત|ਭਾਰਤ|ভাৰত|ভারত|বাংলা|भारोत|भारतम्|भारत|ڀارت|پاکستان|موريتانيا|مليسيا|مصر|قطر|فلسطين|عمان|عراق|سورية|سودان|تونس|بھارت|بارت|ایران|امارات|المغرب|السعودية|الجزائر|البحرين|الاردن|հայ|қаз|укр|срб|рф|мон|мкд|ею|бел|бг|ευ|ελ|zw|zm|za|yt|ye|ws|wf|vu|vn|vi|vg|ve|vc|va|uz|uy|us|um|uk|ug|ua|tz|tw|tv|tt|tr|tp|to|tn|tm|tl|tk|tj|th|tg|tf|td|tc|sz|sy|sx|sv|su|st|ss|sr|so|sn|sm|sl|sk|sj|si|sh|sg|se|sd|sc|sb|sa|rw|ru|rs|ro|re|qa|py|pw|pt|ps|pr|pn|pm|pl|pk|ph|pg|pf|pe|pa|om|nz|nu|nr|np|no|nl|ni|ng|nf|ne|nc|na|mz|my|mx|mw|mv|mu|mt|ms|mr|mq|mp|mo|mn|mm|ml|mk|mh|mg|mf|me|md|mc|ma|ly|lv|lu|lt|ls|lr|lk|li|lc|lb|la|kz|ky|kw|kr|kp|kn|km|ki|kh|kg|ke|jp|jo|jm|je|it|is|ir|iq|io|in|im|il|ie|id|hu|ht|hr|hn|hm|hk|gy|gw|gu|gt|gs|gr|gq|gp|gn|gm|gl|gi|gh|gg|gf|ge|gd|gb|ga|fr|fo|fm|fk|fj|fi|eu|et|es|er|eh|eg|ee|ec|dz|do|dm|dk|dj|de|cz|cy|cx|cw|cv|cu|cr|co|cn|cm|cl|ck|ci|ch|cg|cf|cd|cc|ca|bz|by|bw|bv|bt|bs|br|bq|bo|bn|bm|bl|bj|bi|bh|bg|bf|be|bd|bb|ba|az|ax|aw|au|at|as|ar|aq|ao|an|am|al|ai|ag|af|ae|ad|ac)(?=[^0-9a-zA-Z@+-]|$))|(?:xn--[\\-0-9a-z]+))))(?::([0-9]+))?(\\/(?:(?:[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*(?:\\((?:[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]+|(?:[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*\\([a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]+\\)[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*))\\)[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*)*[\\+\\-a-z\\u0400-\\u04FF0-9=_#\\/\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]|(?:\\((?:[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]+|(?:[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*\\([a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]+\\)[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*))\\)))|(?:@[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]+\\/))*)?(\\?[a-z0-9!?\\*'@\\(\\);:&=\\+\\$\\/%#\\[\\]\\-_\\.,~|]*[a-z0-9\\-_&=#\\/])?))",qn="gi",_t={source:Un,flags:qn};var Kn={BASE_URL:"./",DEV:!1,MODE:"production",PHANPY_CLIENT_NAME:"Phanpy",PHANPY_LINGVA_INSTANCES:"lingva.phanpy.social lingva.lunar.icu lingva.garudalinux.org translate.plausibility.cloud",PHANPY_PRIVACY_POLICY_URL:"https://github.com/cheeaun/phanpy/blob/main/PRIVACY.MD",PHANPY_WEBSITE:"https://phanpy.social",PROD:!0,SSR:!1,VITE_APP_ENV:"production"};const{PHANPY_IMG_ALT_API_URL:ut,PHANPY_GIPHY_API_KEY:Vn}=Kn,Gn=yt.reduce((s,e)=>{const[n,a,r]=e;return s[n]={common:a,native:r},s},{}),Kt={"5 minutes":5*60,"30 minutes":30*60,"1 hour":60*60,"6 hours":6*60*60,"12 hours":12*60*60,"1 day":24*60*60,"3 days":3*24*60*60,"7 days":7*24*60*60},Yn=Object.values(Kt),Rt=24*60*60,Dt=s=>{if(!s)return Rt;const e=(new Date(s).getTime()-Date.now())/1e3;return Yn.find(n=>n>=e)||Rt},ye=document.createElement("ul");ye.role="listbox";ye.className="text-expander-menu";const Zn=16,Jn=new IntersectionObserver(s=>{s.forEach(e=>{if(e.isIntersecting){const{left:n,width:a}=e.boundingClientRect,{innerWidth:r}=window;n+a>r&&(ye.style.left=r-a-Zn+"px")}})});Jn.observe(ye);const we=on([new Intl.DateTimeFormat().resolvedOptions().locale,...navigator.languages],yt.map(s=>s[0]),"en"),Vt=new RegExp(_t.source,_t.flags),Xn=/(^|[^\/\w])@(([a-z0-9_]+)@[a-z0-9\.\-]+[a-z0-9]+)/gi,Qn="$2xxxxxxxxxxxxxxxxxxxxxxx";function ei(s){return s.replace(Vt,Qn).replace(Xn,"$1@$3")}const ti=/[a-z0-9_]+([a-z0-9_.-]+[a-z0-9_]+)?/i,ni=new RegExp(`(^|[^=\\/\\w])(@${ti.source}(?:@[\\p{L}\\w.-]+[\\w]+)?)`,"uig"),ii=new RegExp("(^|[^=\\/\\w])(#[a-z0-9_]+([a-z0-9_.]+[a-z0-9_]+)?)(?![\\/\\w])","ig"),si="[a-zA-Z0-9_]{2,}",ai=new RegExp(`(^|[^=\\/\\w])(:${si}:)(?=[^A-Za-z0-9_:]|$)`,"g"),oi=new Intl.Segmenter;function dt(s){return s.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function ri(s,{maxCharacters:e=1/0}){const{composerCharacterCount:n}=le;if(n>e){let a="",r="";const m=oi.segment(s);for(const{segment:u,index:v}of m)v"),dt(a)+r}return dt(s).replace(Vt,'$2$3').replace(ni,'$1$2').replace(ii,'$1$2').replace(ai,'$1$2')}const li=new Intl.RelativeTimeFormat,vt=100;function Fi({onClose:s,replyToStatus:e,editStatus:n,draftStatus:a,standalone:r,hasOpener:m}){var Ct;const{masto:u,instance:v}=bt(),[g,R]=H("default"),C=U((a==null?void 0:a.uid)||rn()),k=yn(),L=k.info,Z=Wt(),{statuses:{maxCharacters:D,maxMediaAttachments:I,charactersReservedPerUrl:se}={},mediaAttachments:{supportedMimeTypes:J=[],imageSizeLimit:c,imageMatrixLimit:h,videoSizeLimit:p,videoMatrixLimit:f,videoFrameRateLimit:E}={},polls:{maxOptions:y,maxCharactersPerOption:B,maxExpiration:q,minExpiration:ue}={}}=Z||{},A=U(),X=U(),[V,W]=H("public"),[j,te]=H(!1),[O,ie]=H(ze.session.get("currentLanguage")||we),ae=U(O),[M,S]=H([]),[$,z]=H(null),N=ze.account.get("preferences")||{},Q=()=>{A.current&&A.current.dispatchEvent(new Event("input"))},oe=()=>{setTimeout(()=>{var o,l,b;A.current&&((l=(o=a==null?void 0:a.status)==null?void 0:o.startsWith)!=null&&l.call(o,` -`)&&(A.current.selectionStart=0,A.current.selectionEnd=0),(b=A.current)==null||b.focus())},300)};ee(()=>{if(e){const{spoilerText:o,visibility:l,language:b,sensitive:d}=e;o&&X.current&&(X.current.value=o);const x=[...new Set([e.account.acct,...e.mentions.map(w=>w.acct)])].filter(w=>w!==L.acct);x.length>0&&(A.current.value=`${x.map(w=>`@${w}`).join(" ")} `,Q()),oe(),W(l==="public"&&N["posting:default:visibility"]?N["posting:default:visibility"]:l),ie(b||N.postingDefaultLanguage||we),te(d&&!!o)}else if(n){const{visibility:o,language:l,sensitive:b,poll:d,mediaAttachments:_}=n,x=!!(d!=null&&d.options)&&{...d,options:d.options.map(w=>(w==null?void 0:w.title)||w),expiresIn:(d==null?void 0:d.expiresIn)||Dt(d.expiresAt)};R("loading"),(async()=>{try{const w=await u.v1.statuses.$select(n.id).source.fetch(),{text:F,spoilerText:P}=w;A.current.value=F,A.current.dataset.source=F,Q(),oe(),X.current.value=P,W(o),ie(l||presf.postingDefaultLanguage||we),te(b),x&&z(x),S(_),R("default")}catch(w){alert((w==null?void 0:w.reason)||w),R("error")}})()}else oe(),N["posting:default:visibility"]&&W(N["posting:default:visibility"]),N["posting:default:language"]&&ie(N["posting:default:language"]),N["posting:default:sensitive"]&&te(N["posting:default:sensitive"]);if(a){const{status:o,spoilerText:l,visibility:b,language:d,sensitive:_,poll:x,mediaAttachments:w}=a,F=!!(x!=null&&x.options)&&{...x,options:x.options.map(P=>(P==null?void 0:P.title)||P),expiresIn:(x==null?void 0:x.expiresIn)||Dt(x.expiresAt)};A.current.value=o,Q(),oe(),l&&(X.current.value=l),b&&W(b),ie(d||N.postingDefaultLanguage||we),_!==null&&te(_),F&&z(F),w&&S(w)}},[a,n,e]);const he=U(),ve="You have unsaved changes. Discard this post?",xe=()=>{const{value:o,dataset:l}=A.current;if(g==="loading")return!1;const b=(o||"").trim().replace(new RegExp("^\\p{White_Space}+|\\p{White_Space}+$","gu"),""),d=M.length>0;if(!b&&!d||M.length>0&&M.every(P=>P.id))return!0;const x=(e==null?void 0:e.account.id)===L.id,w=e&&o.trim()===`@${e.account.acct}`;return!!(!x&&w||o===(l==null?void 0:l.source))},Oe=()=>xe()?!0:confirm(ve);ee(()=>{const o=l=>{xe()||(l.preventDefault(),l.returnValue=ve)};return window.addEventListener("beforeunload",o,{capture:!0}),()=>window.removeEventListener("beforeunload",o,{capture:!0})},[]);const Zt=()=>{const{value:o}=A.current,{value:l}=X.current;return Tt(ei(o))+Tt(l)},tt=()=>{const o=Zt();le.composerCharacterCount=o};ee(tt,[]);const wt=window.CloseWatcher,nt=U(!1);_e("esc",()=>{nt.current=!0},{enabled:!wt,enableOnFormTags:!0}),_e("esc",()=>{!r&&nt.current&&Oe()&&s(),nt.current=!1},{enabled:!wt,enableOnFormTags:!0,keyup:!0,ignoreEventWhen:o=>{const l=document.querySelectorAll("#modal-container > *"),b=!!l,d=l.length===1&&l[0].querySelector("#compose-container");return b&&!d}}),ln(()=>{!r&&Oe()&&s()},[r,Oe,s]);const kt=U({}),Et=()=>`${xn()}#${C.current}`,it=()=>{if(n||le.composerState.minimized)return;const o=Et(),l={key:o,replyTo:e?{id:e.id,account:{id:e.account.id,username:e.account.username,acct:e.account.acct}}:null,draftStatus:{uid:C.current,status:A.current.value,spoilerText:X.current.value,visibility:V,language:O,sensitive:j,poll:$,mediaAttachments:M}};!wn(l,kt.current)&&!xe()&&(Lt.drafts.set(o,{...l,state:"unsaved",updatedAt:Date.now()}).then(()=>{}).catch(b=>{}),kt.current=structuredClone(l))};cn(it,5e3),ee(()=>(it(),()=>{Lt.drafts.del(Et())}),[]),ee(()=>{const o=b=>{const{items:d}=b.clipboardData||b.dataTransfer,_=[];for(let x=0;x0&&M.length>=I){alert(`You can only attach up to ${I} files.`);return}if(_.length>0){b.preventDefault(),b.stopPropagation();const x=I-M.length,w=_.slice(0,x);if(w.length<=0){alert(`You can only attach up to ${I} files.`);return}const F=w.map(P=>({file:P,type:P.type,size:P.size,url:URL.createObjectURL(P),id:null,description:null}));S([...M,...F])}};window.addEventListener("paste",o);const l=b=>{b.dataTransfer.items.length>0&&(b.preventDefault(),b.stopPropagation())};return window.addEventListener("dragover",l),window.addEventListener("drop",o),()=>{window.removeEventListener("paste",o),window.removeEventListener("dragover",l),window.removeEventListener("drop",o)}},[M]);const[He,st]=H(!1),[Ne,We]=H(!1),[Jt,at]=H(!1),[me,Xt]=H(null),[Qt,en]=Re(()=>{const o=[],l=[],{contentTranslationHideLanguages:b=[]}=le.settings;return yt.forEach(d=>{const[_]=d;_===O||_===ae.current||_===we||b.includes(_)||me!=null&&me.length&&me.includes(_)?o.push(d):l.push(d)}),o.sort(([d,_],[x,w])=>d===O?-1:x===O?1:_.localeCompare(w)),l.sort(([d,_],[x,w])=>_.localeCompare(w)),[o,l]},[O,me]),Ft=Re(()=>!!(e!=null&&e.createdAt)&&Math.floor((Date.now()-new Date(e.createdAt))/(1e3*60*60*24*30)),[e]),tn=()=>{it(),le.composerState.minimized=!0};return t("div",{id:"compose-container-outer",children:[t("div",{id:"compose-container",class:r?"standalone":"",children:[t("div",{class:"compose-top",children:[(L==null?void 0:L.avatarStatic)&&t(Ht,{account:L,accountInstance:k.instanceURL,hideDisplayName:!0,useAvatarStatic:!0}),r?m&&t("button",{type:"button",class:"light pop-button",disabled:g==="loading",onClick:()=>{var o;if(!window.opener){alert("Looks like you closed the parent window.");return}if(window.opener.__STATES__.showCompose){if((o=window.opener.__STATES__.composerState)!=null&&o.publishing){alert("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.");return}if(!confirm("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?"))return}s({fn:()=>{const l={editStatus:n,replyToStatus:e,draftStatus:{uid:C.current,status:A.current.value,spoilerText:X.current.value,visibility:V,language:O,sensitive:j,poll:$,mediaAttachments:M}};window.opener.__COMPOSE__=l,window.opener.__STATES__.showCompose?(window.opener.__STATES__.showCompose=!1,setTimeout(()=>{window.opener.__STATES__.showCompose=!0},10)):window.opener.__STATES__.showCompose=!0,window.opener.__STATES__.composerState.minimized&&(window.opener.__STATES__.composerState.minimized=!1)}})},children:t(K,{icon:"popin",alt:"Pop in"})}):t("span",{class:"compose-controls",children:[t("button",{type:"button",class:"plain4 pop-button",disabled:g==="loading",onClick:()=>{un({editStatus:n,replyToStatus:e,draftStatus:{uid:C.current,status:A.current.value,spoilerText:X.current.value,visibility:V,language:O,sensitive:j,poll:$,mediaAttachments:M}})&&s()},children:t(K,{icon:"popout",alt:"Pop out"})}),t("button",{type:"button",class:"plain4 min-button",onClick:tn,children:t(K,{icon:"minimize",alt:"Minimize"})})," ",t("button",{type:"button",class:"light close-button",disabled:g==="loading",onClick:()=>{Oe()&&s()},children:t(K,{icon:"x"})})]})]}),!!e&&t("div",{class:"status-preview",children:[t(At,{status:e,size:"s",previewMode:!0}),t("div",{class:"status-preview-legend reply-to",children:["Replying to @",e.account.acct||e.account.username,"’s post",Ft>=3&&t(Ce,{children:[" ","(",t("strong",{children:li.format(-Ft,"month")}),")"]})]})]}),!!n&&t("div",{class:"status-preview",children:[t(At,{status:n,size:"s",previewMode:!0}),t("div",{class:"status-preview-legend",children:"Editing source post"})]}),t("form",{ref:he,class:`form-visibility-${V}`,style:{pointerEvents:g==="loading"?"none":"auto",opacity:g==="loading"?.5:1},onKeyDown:o=>{o.key==="Enter"&&(o.ctrlKey||o.metaKey)&&he.current.dispatchEvent(new Event("submit",{cancelable:!0}))},onSubmit:o=>{o.preventDefault();const l=new FormData(o.target),b=Object.fromEntries(l.entries());let{status:d,visibility:_,sensitive:x,spoilerText:w}=b;if(x=x==="on",$){if($.options.length<2){alert("Poll must have at least 2 options");return}if($.options.some(F=>F==="")){alert("Some poll choices are empty");return}}M.length>0&&M.some(P=>{var ne,$e;return!(($e=(ne=P.description)==null?void 0:ne.trim)!=null&&$e.call(ne))})&&!confirm("Some media have no descriptions. Continue?")||(w=x&&w||void 0,d=d===""?void 0:d,le.composerState.publishing=!0,R("loading"),(async()=>{try{if(M.length>0){const ne=M.map(ge=>{const{file:Ue,description:nn,id:sn}=ge;if(sn)return ge;{const an=Ot({file:Ue,description:nn});return u.v2.media.create(an).then(ot=>(ot.id&&(ge.id=ot.id),ot))}}),$e=await Promise.allSettled(ne);if($e.some(ge=>{var Ue;return ge.status==="rejected"||!((Ue=ge.value)!=null&&Ue.id)})){le.composerState.publishing=!1,le.composerState.publishingError=!0,R("error"),$e.forEach(ge=>{ge.status==="rejected"&&alert(ge.reason||`Attachment #${i} failed`)});return}}let F={status:d,spoiler_text:w,language:O,sensitive:x,poll:$,media_ids:M.map(ne=>ne.id)};n&&Nt("@mastodon/edit-media-attributes")?F.media_attributes=M.map(ne=>({id:ne.id,description:ne.description})):n||(F.visibility=_,F.in_reply_to_id=(e==null?void 0:e.id)||void 0),F=Ot(F);let P;if(n)P=await u.v1.statuses.$select(n.id).update(F),kn(P,v,{skipThreading:!0});else try{P=await u.v1.statuses.create(F,{requestInit:{headers:{"Idempotency-Key":C.current}}})}catch{P=await u.v1.statuses.create(F)}le.composerState.minimized=!1,le.composerState.publishing=!1,R("default"),s({type:n?"edit":e?"reply":"post",newStatus:P,instance:v})}catch(F){le.composerState.publishing=!1,le.composerState.publishingError=!0,alert((F==null?void 0:F.reason)||F),R("error")}})())},children:[t("div",{class:"toolbar stretch",children:[t("input",{ref:X,type:"text",name:"spoilerText",placeholder:"Content warning",disabled:g==="loading",class:"spoiler-text-field",lang:O,spellCheck:"true",dir:"auto",style:{opacity:j?1:0,pointerEvents:j?"auto":"none"},onInput:()=>{tt()}}),t("label",{class:`toolbar-button ${j?"highlight":""}`,title:"Content warning or sensitive media",children:[t("input",{name:"sensitive",type:"checkbox",checked:j,disabled:g==="loading",onChange:o=>{var b,d;const l=o.target.checked;te(l),l?(b=X.current)==null||b.focus():(d=A.current)==null||d.focus()}}),t(K,{icon:`eye-${j?"close":"open"}`})]})," ",t("label",{class:`toolbar-button ${V!=="public"&&!j?"show-field":""} ${V!=="public"?"highlight":""}`,title:`Visibility: ${V}`,children:[t(K,{icon:dn[V],alt:V}),t("select",{name:"visibility",value:V,onChange:o=>{W(o.target.value)},disabled:g==="loading"||!!n,children:[t("option",{value:"public",children:["Public ",t(K,{icon:"earth"})]}),t("option",{value:"unlisted",children:"Unlisted"}),t("option",{value:"private",children:"Followers only"}),t("option",{value:"direct",children:"Private mention"})]})]})," "]}),t(di,{ref:A,placeholder:e?"Post your reply":n?"Edit your post":"What are you doing?",required:(M==null?void 0:M.length)===0,disabled:g==="loading",lang:O,onInput:()=>{tt()},maxCharacters:D,performSearch:o=>{const{type:l,q:b,limit:d}=o;return l==="accounts"?u.v1.accounts.search.list({q:b,limit:d,resolve:!1}):u.v2.search.fetch(o)},onTrigger:o=>{(o==null?void 0:o.name)==="custom-emojis"?We({defaultSearchTerm:(o==null?void 0:o.defaultSearchTerm)||null}):(o==null?void 0:o.name)==="mention"?st({defaultSearchTerm:(o==null?void 0:o.defaultSearchTerm)||null}):(o==null?void 0:o.name)==="auto-detect-language"&&(o!=null&&o.languages)&&Xt(o.languages)}}),(M==null?void 0:M.length)>0&&t("div",{class:"media-attachments",children:[M.map((o,l)=>{const{id:b,file:d}=o,_=(d==null?void 0:d.size)+(d==null?void 0:d.type)+(d==null?void 0:d.name);return t(pi,{attachment:o,disabled:g==="loading",lang:O,onDescriptionChange:x=>{S(w=>{const F=[...w];return F[l].description=x,F})},onRemove:()=>{S(x=>x.filter((w,F)=>F!==l))}},b||_||l)}),t("label",{class:"media-sensitive",children:[t("input",{name:"sensitive",type:"checkbox",checked:j,disabled:g==="loading",onChange:o=>{const l=o.target.checked;te(l)}})," ",t("span",{children:"Mark media as sensitive"})," ",t(K,{icon:`eye-${j?"close":"open"}`})]})]}),!!$&&t(mi,{lang:O,maxOptions:y,maxExpiration:q,minExpiration:ue,maxCharactersPerOption:B,poll:$,disabled:g==="loading",onInput:o=>{if(o){const l={...o};z(l)}else z(null)}}),t("div",{class:"toolbar wrap",style:{justifyContent:"flex-end"},children:[t("span",{children:[t("label",{class:"toolbar-button",children:[t("input",{type:"file",accept:J.join(","),multiple:M.length=I||!!$,onChange:o=>{const l=o.target.files;if(!l)return;const b=Array.from(l).map(d=>({file:d,type:d.type,size:d.size,url:URL.createObjectURL(d),id:null,description:null}));M.length+b.length>I?alert(`You can only attach up to ${I} files.`):S(d=>d.concat(b)),o.target.value=""}}),t(K,{icon:"attachment"})]}),y==null||y>1&&t(Ce,{children:t("button",{type:"button",class:"toolbar-button",disabled:g==="loading"||!!$||!!M.length,onClick:()=>{z({options:["",""],expiresIn:24*60*60,multiple:!1})},children:t(K,{icon:"poll",alt:"Add poll"})})}),t("button",{type:"button",class:"toolbar-button",disabled:g==="loading",onClick:()=>{We(!0)},children:t(K,{icon:"emoji2"})}),!!le.settings.composerGIFPicker&&t("button",{type:"button",class:"toolbar-button gif-picker-button",disabled:g==="loading"||M.length>=I||!!$,onClick:()=>{at(!0)},children:t("span",{children:"GIF"})})]}),t("div",{class:"spacer"}),g==="loading"?t(et,{abrupt:!0}):t(hi,{maxCharacters:D,hidden:g==="loading"}),t("label",{class:`toolbar-button ${O!==ae.current||me!=null&&me.length&&!me.includes(O)?"highlight":""}`,children:[t("span",{class:"icon-text",children:(Ct=Gn[O])==null?void 0:Ct.native}),t("select",{name:"language",value:O,onChange:o=>{const{value:l}=o.target;ie(l||we),ze.session.set("currentLanguage",l||we)},disabled:g==="loading",children:[Qt.map(([o,l,b])=>t("option",{value:o,children:[l," (",b,")"]},o)),t("hr",{}),en.map(([o,l,b])=>t("option",{value:o,children:[l," (",b,")"]},o))]})]})," ",t("button",{type:"submit",class:"large",disabled:g==="loading",children:e?"Reply":n?"Update":"Post"})]})]})]}),He&&t(Ve,{onClick:o=>{o.target===o.currentTarget&&st(!1)},children:t(gi,{masto:u,instance:v,onClose:()=>{st(!1)},defaultSearchTerm:He==null?void 0:He.defaultSearchTerm,onSelect:o=>{const l=A.current;if(!l)return;const{selectionStart:b,selectionEnd:d}=l,_=l.value,x=_.slice(0,b),w=x?/[\s\t\n\r]$/.test(x)?"":" ":"",F=_.slice(d),P=/^[\s\t\n\r]/.test(F)?"":" ",ne=x+w+"@"+o+P+F;l.value=ne,l.selectionStart=l.selectionEnd=d+1+o.length+P.length,l.focus(),l.dispatchEvent(new Event("input"))}})}),Ne&&t(Ve,{onClick:o=>{o.target===o.currentTarget&&We(!1)},children:t(fi,{masto:u,instance:v,onClose:()=>{We(!1)},defaultSearchTerm:Ne==null?void 0:Ne.defaultSearchTerm,onSelect:o=>{const l=A.current;if(!l)return;const{selectionStart:b,selectionEnd:d}=l,_=l.value,x=_.slice(0,b),w=x?/[\s\t\n\r]$/.test(x)?"":" ":"",F=_.slice(d),P=/^[\s\t\n\r]/.test(F)?"":" ",ne=x+w+o+P+F;l.value=ne,l.selectionStart=l.selectionEnd=d+o.length+P.length,l.focus(),l.dispatchEvent(new Event("input"))}})}),Jt&&t(Ve,{onClick:o=>{o.target===o.currentTarget&&at(!1)},children:t(bi,{onClose:()=>at(!1),onSelect:({url:o,type:l,alt_text:b})=>{if(M.length>=I){alert(`You can only attach up to ${I} files.`);return}(async()=>{var _,x;let d;try{d=ke({text:"Downloading GIF…",duration:-1});const w=await fetch(o,{referrerPolicy:"no-referrer"}).then(ne=>ne.blob()),F=new File([w],l==="video/mp4"?"video.mp4":"image.gif",{type:l}),P=[...M,{file:F,type:l,size:F.size,id:null,description:b||""}];S(P),(_=d==null?void 0:d.hideToast)==null||_.call(d)}catch{(x=d==null?void 0:d.hideToast)==null||x.call(d),ke("Failed to download GIF")}})()}})})]})}function jt(s){if(!s)return;const{value:e,offsetHeight:n,scrollHeight:a,clientHeight:r}=s;if(nm.visibleInPicker),r=new hn(a,{keys:["shortcode"],findAllMatches:!0});return[a,r]}const Gt=En(ci,{matchesArg:(s,e)=>s.instance===e.instance,maxAge:30*60*1e3}),ui=s=>{const e=zn(s);return e!=null&&e.length?e.slice(0,2).map(n=>n.lang):null},di=Fn((s,e)=>{var J;const{masto:n,instance:a}=bt(),[r,m]=H(((J=e.current)==null?void 0:J.value)||""),{maxCharacters:u,performSearch:v=()=>{},onTrigger:g=()=>{},...R}=s,C=U();ee(()=>{Gt(a,n).then(c=>{const[h,p]=c;C.current=p}).catch(c=>{})},[]);const k=U(),L=U("");ee(()=>{let c,h,p;return k.current&&(c=f=>{var ue;const{key:E,provide:y,text:B}=f.detail;if(L.current=B,B===""){y(Promise.resolve({matched:!1}));return}if(E===":"){const A=(ue=C.current)==null?void 0:ue.search(B,{limit:5});let X="";A.forEach(({item:V})=>{const{shortcode:W,url:j}=V;X+=` -
  • - - ${be(W)} -
  • `}),X+=`
  • More…
  • `,ye.innerHTML=X,y(Promise.resolve({matched:A.length>0,fragment:ye}));return}const q={"@":"accounts","#":"hashtags"}[E];y(new Promise(A=>{v({type:q,q:B,limit:5}).then(V=>{if(B!==L.current)return;const W=V[q]||V;let j="";W.forEach(te=>{var Q;const{name:O,avatarStatic:ie,displayName:ae,username:M,acct:S,emojis:$,history:z}=te,N=pn(ae,$);if(S)j+=` -
  • - - - - - ${N||M} -
    @${be(S)} -
    -
  • - `;else{const oe=(Q=z==null?void 0:z.reduce)==null?void 0:Q.call(z,(he,ve)=>he+ +ve.uses,0);j+=` -
  • - #${be(O)} - ${oe?`${mn(oe)}`:""} -
  • - `}}),q==="accounts"&&(j+=`
  • More…
  • `),ye.innerHTML=j,A({matched:W.length>0,fragment:ye})})}))},k.current.addEventListener("text-expander-change",c),h=f=>{const{key:E,item:y}=f.detail,{value:B,more:q}=y.dataset;E===":"?(f.detail.value=B?`:${B}:`:"​",q&&(f.detail.continue=!0,setTimeout(()=>{g==null||g({name:"custom-emojis",defaultSearchTerm:q})},300))):E==="@"?(f.detail.value=B?`@${B} `:"​",q&&(f.detail.continue=!0,setTimeout(()=>{g==null||g({name:"mention",defaultSearchTerm:q})},300))):f.detail.value=`${E}${B}`},k.current.addEventListener("text-expander-value",h),p=f=>{const{input:E}=f.detail;if(m(E.value),e.current){const y=new Event("input",{bubbles:!0});e.current.dispatchEvent(y)}},k.current.addEventListener("text-expander-committed",p)),()=>{k.current&&(k.current.removeEventListener("text-expander-change",c),k.current.removeEventListener("text-expander-value",h),k.current.removeEventListener("text-expander-committed",p))}},[]),ee(()=>{const c=e.current;if(!c)return;new ResizeObserver(()=>{if(k.current){const{height:p}=c.getBoundingClientRect();k.current.style.height=p+"px"}}).observe(c)},[]);const Z=U(0),D=U(),I=gn(c=>{var f;if(!D.current)return;if(Z.current>3){D.current.innerHTML="",D.current=null,(f=I==null?void 0:I.cancel)==null||f.call(I);return}let h,p;Z.current<=3&&(h=Date.now()),D.current.innerHTML=ri(c,{maxCharacters:u})+` -`,Z.current<=3&&(p=Date.now()),h&&p&&p-h>50&&Z.current++},500),se=Qe(()=>{var f,E;const c=(f=D.current)==null?void 0:f.cloneNode(!0);if(!c)return;c.querySelectorAll("mark").forEach(y=>{y.remove()});const h=(E=c.innerText)==null?void 0:E.trim();if(!h)return;const p=ui(h);p!=null&&p.length&&(g==null||g({name:"auto-detect-language",languages:p}))},2e3);return t("text-expander",{ref:k,keys:"@ # :",class:"compose-field-container",children:[t("textarea",{class:"compose-field",autoCapitalize:"sentences",autoComplete:"on",autoCorrect:"on",spellCheck:"true",dir:"auto",rows:"6",cols:"50",...R,ref:e,name:"status",value:r,onKeyDown:c=>{const{key:h,target:p}=c;if(h==="Enter"&&!(c.ctrlKey||c.metaKey))try{const{value:f,selectionStart:E}=p,B=f.slice(0,E).split(` -`).slice(-1)[0];if(B&&/^\s*(-|\d+\.)\s/.test(B)){const[q,ue,A,X,V]=B.match(/^(\s*)(-|\d+\.)(\s+)(.+)?/)||[];if(V){c.preventDefault();const[W]=A.match(/\d+/)||[],j=W?`${+W+1}.`:"-",te=` -${ue}${j}${X}`;p.setRangeText(te,E,E);const O=E+te.length;p.setSelectionRange(O,O)}else{const W=E-B.length;p.setRangeText("",W,E)}jt(p),p.dispatchEvent(new Event("input"))}}catch{}D.current&&(D.current.scrollTop=p.scrollTop)},onInput:c=>{var f;const{target:h}=c,p=h.value.replace(/\u200b/g,"");m(p),jt(h),(f=s.onInput)==null||f.call(s,c),I(p),se()},style:{width:"100%",height:"4em"},onScroll:c=>{if(D.current){const{scrollTop:h}=c.target;D.current.scrollTop=h}}}),t("div",{ref:D,class:"compose-highlight","aria-hidden":"true"})]})});function hi({maxCharacters:s=500,hidden:e}){const a=Cn(le).composerCharacterCount,r=s-a;return e?t("span",{class:"char-counter",hidden:!0}):t("span",{class:"char-counter",title:`${r}/${s}`,style:{"--percentage":a/s*100},children:[t("meter",{class:`${r<=-10?"explode":r<=0?"danger":r<=20?"warning":""}`,value:a,max:s}),t("span",{class:"counter",children:r})]})}function Ke(s){const e=["bytes","KB","MB","GB","TB","PB","EB","ZB","YB"];let n=0;for(;s>=1024;)s/=1024,n++;return`${s.toFixed(0).toLocaleString()} ${e[n]}`}function Pt(s,e,n,a){const r=Math.sqrt(e/s),m=Math.floor(n*r),u=Math.floor(a*r);return{newWidth:m,newHeight:u}}function pi({attachment:s,disabled:e,lang:n,onDescriptionChange:a=()=>{},onRemove:r=()=>{}}){const[m,u]=H("default"),v=Nt("@mastodon/edit-media-attributes"),{type:g,id:R,file:C}=s,k=Re(()=>C?URL.createObjectURL(C):s.url,[C,s.url]),L=!!(C!=null&&C.size),Z=L?Wt():{},{mediaAttachments:{imageSizeLimit:D,imageMatrixLimit:I,videoSizeLimit:se,videoMatrixLimit:J,videoFrameRateLimit:c}={}}=Z||{},[h,p]=H(()=>L?g.startsWith("image")&&D&&C.size>D?{type:"imageSizeLimit",details:{imageSize:C.size,imageSizeLimit:D}}:g.startsWith("video")&&se&&C.size>se?{type:"videoSizeLimit",details:{videoSize:C.size,videoSizeLimit:se}}:null:null),[f,E]=H({});ee(()=>{!L||!I||(f==null?void 0:f.matrix)>I&&p({type:"imageMatrixLimit",details:{imageMatrix:f==null?void 0:f.matrix,imageMatrixLimit:I,width:f==null?void 0:f.width,height:f==null?void 0:f.height}})},[f,I,L]);const[y,B]=H({});ee(()=>{!L||!J||(y==null?void 0:y.matrix)>J&&p({type:"videoMatrixLimit",details:{videoMatrix:y==null?void 0:y.matrix,videoMatrixLimit:J,width:y==null?void 0:y.width,height:y==null?void 0:y.height}})},[y,J,L]);const[q,ue]=H(s.description),[A,X]=g.split("/"),V=Qe(a,250);ee(()=>{V(q)},[q,V]);const[W,j]=H(!1),te=U(null);ee(()=>{let S;return W&&te.current&&(S=setTimeout(()=>{te.current.focus()},100)),()=>{clearTimeout(S)}},[W]);const O=t(Ce,{children:R&&!v?t("div",{class:"media-desc",children:[t("span",{class:"tag",children:"Uploaded"}),t("p",{title:q,children:s.description||t("i",{children:"No description"})})]}):t("textarea",{ref:te,value:q||"",lang:n,placeholder:{image:"Image description",video:"Video description",audio:"Audio description"}[A],autoCapitalize:"sentences",autoComplete:"on",autoCorrect:"on",spellCheck:"true",dir:"auto",disabled:e||m==="loading",class:m==="loading"?"loading":"",maxlength:"1500",onInput:S=>{const{value:$}=S.target;ue($)}})}),ie=U(null);ee(()=>()=>{var S,$;($=(S=ie.current)==null?void 0:S.hideToast)==null||$.call(S)},[]);const ae=U(null),M=S=>{const{type:$,details:z}=S;switch($){case"imageSizeLimit":{const{imageSize:N,imageSizeLimit:Q}=z;return`File size too large. Uploading might encounter issues. Try reduce the file size from ${Ke(N)} to ${Ke(Q)} or lower.`}case"imageMatrixLimit":{const{imageMatrix:N,imageMatrixLimit:Q,width:oe,height:he}=z,{newWidth:ve,newHeight:xe}=Pt(N,Q,oe,he);return`Dimension too large. Uploading might encounter issues. Try reduce dimension from ${oe.toLocaleString()}×${he.toLocaleString()}px to ${ve.toLocaleString()}×${xe.toLocaleString()}px.`}case"videoSizeLimit":{const{videoSize:N,videoSizeLimit:Q}=z;return`File size too large. Uploading might encounter issues. Try reduce the file size from ${Ke(N)} to ${Ke(Q)} or lower.`}case"videoMatrixLimit":{const{videoMatrix:N,videoMatrixLimit:Q,width:oe,height:he}=z,{newWidth:ve,newHeight:xe}=Pt(N,Q,oe,he);return`Dimension too large. Uploading might encounter issues. Try reduce dimension from ${oe.toLocaleString()}×${he.toLocaleString()}px to ${ve.toLocaleString()}×${xe.toLocaleString()}px.`}case"videoFrameRateLimit":return"Frame rate too high. Uploading might encounter issues."}};return t(Ce,{children:[t("div",{class:"media-attachment",children:[t("div",{class:"media-preview",tabIndex:"0",onClick:()=>{j(!0)},children:A==="image"?t("img",{src:k,alt:"",onLoad:S=>{if(!L)return;const{naturalWidth:$,naturalHeight:z}=S.target;E({matrix:$*z,width:$,height:z})}}):A==="video"||A==="gifv"?t("video",{src:k+"#t=0.1",playsinline:!0,muted:!0,disablePictureInPicture:!0,preload:"metadata",onLoadedMetadata:S=>{if(!L)return;const{videoWidth:$,videoHeight:z}=S.target;$&&z&&B({matrix:$*z,width:$,height:z})}}):A==="audio"?t("audio",{src:k,controls:!0}):null}),O,t("div",{class:"media-aside",children:[t("button",{type:"button",class:"plain close-button",disabled:e,onClick:r,children:t(K,{icon:"x"})}),!!h&&t("button",{type:"button",class:"media-error",title:M(h),onClick:()=>{ae.current&&ae.current.hideToast(),ae.current=ke({text:M(h),duration:1e4})},children:t(K,{icon:"alert"})})]})]}),W&&t(Ve,{onClose:()=>{j(!1)},children:t("div",{id:"media-sheet",class:"sheet sheet-max",children:[t("button",{type:"button",class:"sheet-close",onClick:()=>{j(!1)},children:t(K,{icon:"x"})}),t("header",{children:t("h2",{children:{image:"Edit image description",video:"Edit video description",audio:"Edit audio description"}[A]})}),t("main",{tabIndex:"-1",children:[t("div",{class:"media-preview",children:A==="image"?t("img",{src:k,alt:""}):A==="video"||A==="gifv"?t("video",{src:k,playsinline:!0,controls:!0}):A==="audio"?t("audio",{src:k,controls:!0}):null}),t("div",{class:"media-form",children:[O,t("footer",{children:[A==="image"&&/^(png|jpe?g|gif|webp)$/i.test(X)&&!!le.settings.mediaAltGenerator&&!!ut&&t(fn,{portal:{target:document.body},containerProps:{style:{zIndex:1001}},align:"center",position:"anchor",overflow:"auto",menuButton:t("button",{type:"button",title:"More",class:"plain",children:t(K,{icon:"more",size:"l",alt:"More"})}),children:[t(St,{disabled:m==="loading",onClick:()=>{u("loading"),ie.current=ke({text:"Generating description. Please wait...",duration:-1}),async function(){var S,$;try{const z=new FormData;z.append("image",C);const N=await fetch(ut,{method:"POST",body:z}).then(Q=>Q.json());if(N.error)throw new Error(N.error);ue(N.description)}catch(z){ke(`Failed to generate description${z!=null&&z.message?`: ${z.message}`:""}`)}finally{u("default"),($=(S=ie.current)==null?void 0:S.hideToast)==null||$.call(S)}}()},children:[t(K,{icon:"sparkles2"}),n&&n!=="en"?t("small",{children:["Generate description…",t("br",{}),"(English)"]}):t("span",{children:"Generate description…"})]}),!!n&&n!=="en"&&t(St,{disabled:m==="loading",onClick:()=>{u("loading"),ie.current=ke({text:"Generating description. Please wait...",duration:-1}),async function(){var S,$;try{const z=new FormData;z.append("image",C);const N=`?lang=${n}`,Q=await fetch(ut+N,{method:"POST",body:z}).then(oe=>oe.json());if(Q.error)throw new Error(Q.error);ue(Q.description)}catch(z){ke(`Failed to generate description${z!=null&&z.message?`: ${z.message}`:""}`)}finally{u("default"),($=(S=ie.current)==null?void 0:S.hideToast)==null||$.call(S)}}()},children:[t(K,{icon:"sparkles2"}),t("small",{children:["Generate description…",t("br",{}),"(",vn(n),")"," ",t("span",{class:"more-insignificant",children:"— experimental"})]})]})]}),t("button",{type:"button",class:"light block",onClick:()=>{j(!1)},disabled:m==="loading",children:"Done"})]})]})]})]})})]})}function mi({lang:s,poll:e,disabled:n,onInput:a=()=>{},maxOptions:r,maxExpiration:m,minExpiration:u,maxCharactersPerOption:v}){const{options:g,expiresIn:R,multiple:C}=e;return t("div",{class:`poll ${C?"multiple":""}`,children:[t("div",{class:"poll-choices",children:g.map((k,L)=>t("div",{class:"poll-choice",children:[t("input",{required:!0,type:"text",value:k,disabled:n,maxlength:v,placeholder:`Choice ${L+1}`,lang:s,spellCheck:"true",dir:"auto",onInput:Z=>{const{value:D}=Z.target;g[L]=D,a(e)}}),t("button",{type:"button",class:"plain2 poll-button",disabled:n||g.length<=1,onClick:()=>{g.splice(L,1),a(e)},children:t(K,{icon:"x",size:"s"})})]},L))}),t("div",{class:"poll-toolbar",children:[t("button",{type:"button",class:"plain2 poll-button",disabled:n||g.length>=r,onClick:()=>{g.push(""),a(e)},children:"+"})," ",t("label",{class:"multiple-choices",children:[t("input",{type:"checkbox",checked:C,disabled:n,onChange:k=>{const{checked:L}=k.target;e.multiple=L,a(e)}})," ","Multiple choices"]}),t("label",{class:"expires-in",children:["Duration"," ",t("select",{value:R,disabled:n,onChange:k=>{const{value:L}=k.target;e.expiresIn=L,a(e)},children:Object.entries(Kt).filter(([k,L])=>L>=u&&L<=m).map(([k,L])=>t("option",{value:L,children:k},L))})]})]}),t("div",{class:"poll-toolbar",children:t("button",{type:"button",class:"plain remove-poll-button",disabled:n,onClick:()=>{a(null)},children:"Remove poll"})})]})}function be(s){return s.replace(/[&<>"']/g,function(e){return"&#"+e.charCodeAt(0)+";"})}function Ot(s){for(let e in s)(s[e]===null||s[e]===void 0)&&delete s[e];return s}function gi({onClose:s=()=>{},onSelect:e=()=>{},defaultSearchTerm:n}){const{masto:a}=bt(),[r,m]=H("default"),[u,v]=H([]),[g,R]=H({}),[C,k]=H(0),L=async c=>{if(!(c!=null&&c.length))return;const h=await bn(c,g);h&&R({...g,...h})},Z=c=>{c&&(m("loading"),(async()=>{try{const h=await a.v1.accounts.search.list({q:c,limit:40,resolve:!1});v(h),L(h),m("default")}catch{m("error")}})())},D=Qe(Z,1e3);ee(()=>{Z()},[Z]);const I=U();ee(()=>{I.current&&(I.current.focus(),I.current.value&&(I.current.selectionStart=I.current.value.length,I.current.selectionEnd=I.current.value.length))},[]),ee(()=>{n&&Z(n)},[n]);const se=c=>{const h=c.acct;e(h),s()};_e("enter",()=>{const c=u[C];c&&se(c)},{preventDefault:!0,enableOnFormTags:["input"]});const J=U();return _e("down",()=>{C{const c=J.current.querySelector(".selected");c&&c.scrollIntoView({behavior:"smooth",block:"center",inline:"center"})},1)},{preventDefault:!0,enableOnFormTags:["input"]}),_e("up",()=>{C>0?k(C-1):k(u.length-1),setTimeout(()=>{const c=J.current.querySelector(".selected");c&&c.scrollIntoView({behavior:"smooth",block:"center",inline:"center"})},1)},{preventDefault:!0,enableOnFormTags:["input"]}),t("div",{id:"mention-sheet",class:"sheet",children:[!!s&&t("button",{type:"button",class:"sheet-close",onClick:s,children:t(K,{icon:"x"})}),t("header",{children:t("form",{onSubmit:c=>{var h;c.preventDefault(),(h=D.flush)==null||h.call(D)},children:t("input",{ref:I,required:!0,type:"search",class:"block",placeholder:"Search accounts",onInput:c=>{const{value:h}=c.target;D(h)},autocomplete:"off",autocorrect:"off",autocapitalize:"off",spellCheck:"false",dir:"auto",defaultValue:n||""})})}),t("main",{children:(u==null?void 0:u.length)>0?t("ul",{ref:J,class:`accounts-list ${r==="loading"?"loading":""}`,children:u.map((c,h)=>{const p=g[c.id];return t("li",{class:h===C?"selected":"",children:[t(Ht,{avatarSize:"xxl",account:c,relationship:p,showStats:!0,showActivity:!0}),t("button",{type:"button",class:"plain2",onClick:()=>{se(c)},children:t(K,{icon:"plus",size:"xl"})})]},c.id)})}):r==="loading"?t("div",{class:"ui-state",children:t(et,{abrupt:!0})}):r==="error"?t("div",{class:"ui-state",children:t("p",{children:"Error loading accounts"})}):null})]})}function fi({masto:s,instance:e,onClose:n=()=>{},onSelect:a=()=>{},defaultSearchTerm:r}){const[m,u]=H("default"),v=U([]),[g,R]=H([]),C=Re(()=>ze.account.get("recentlyUsedCustomEmojis")||[]),k=U();ee(()=>{u("loading"),(async()=>{try{const[h,p]=await Gt(e,s);k.current=p,R(h),u("default")}catch{u("error")}})()},[]);const L=Re(()=>{const h={"--recent--":C.filter(f=>g.find(E=>E.shortcode===f.shortcode))},p=[];return g.forEach(f=>{var E,y;if((y=(E=v.current)==null?void 0:E.push)==null||y.call(E,f),!f.category){p.push(f);return}h[f.category]||(h[f.category]=[]),h[f.category].push(f)}),p.length&&(h["--others--"]=p),h},[g]),Z=U(),[D,I]=H(null),se=It(h=>{var f,E,y;const{value:p}=h.target;if(p){const B=(f=k.current)==null?void 0:f.search(p,{limit:vt});I(B.map(q=>q.item)),(y=(E=Z.current)==null?void 0:E.scrollTo)==null||y.call(E,0,0)}else I(null)},[g]);ee(()=>{r&&(g!=null&&g.length)&&se({target:{value:r}})},[r,se,g]);const J=It(h=>{a==null||a(h),n==null||n(),queueMicrotask(()=>{let p=ze.account.get("recentlyUsedCustomEmojis")||[];const f=p.findIndex(E=>E.shortcode===h.shortcode);f!==-1?(p.splice(f,1),p.unshift(h)):(p.unshift(h),p=p.filter(E=>{var y,B;return(B=(y=v.current)==null?void 0:y.find)==null?void 0:B.call(y,q=>q.shortcode===E.shortcode)}),p=p.slice(0,10)),ze.account.set("recentlyUsedCustomEmojis",p)})},[a]),c=U();return ee(()=>{c.current&&(c.current.focus(),c.current.value&&(c.current.selectionStart=c.current.value.length,c.current.selectionEnd=c.current.value.length))},[]),t("div",{id:"custom-emojis-sheet",class:"sheet",children:[!!n&&t("button",{type:"button",class:"sheet-close",onClick:n,children:t(K,{icon:"x"})}),t("header",{children:[t("div",{children:[t("b",{children:"Custom emojis"})," ",m==="loading"?t(et,{}):t("small",{class:"insignificant",children:[" • ",e]})]}),t("form",{onSubmit:h=>{h.preventDefault();const p=D[0];p&&J(`:${p.shortcode}:`)},children:t("input",{ref:c,type:"search",placeholder:"Search emoji",onInput:se,autocomplete:"off",autocorrect:"off",autocapitalize:"off",spellCheck:"false",dir:"auto",defaultValue:r||""})})]}),t("main",{ref:Z,children:D!==null?t("ul",{class:"custom-emojis-matches custom-emojis-list",children:D.map(h=>t("li",{class:"custom-emojis-match",children:t(Yt,{emoji:h,onClick:()=>{J(`:${h.shortcode}:`)},showCode:!0})},h.shortcode))}):t("div",{class:"custom-emojis-list",children:[m==="error"&&t("div",{class:"ui-state",children:t("p",{children:"Error loading custom emojis"})}),m==="default"&&Object.entries(L).map(([h,p])=>!!(p!=null&&p.length)&&t(Ce,{children:[t("div",{class:"section-header",children:{"--recent--":"Recently used","--others--":"Others"}[h]||h}),t(vi,{emojis:p,onSelect:J})]}))]})})]})}const vi=Ut(({emojis:s,onSelect:e})=>{const[n,a]=H(vt),r=s.length>n;return t("section",{children:[s.slice(0,n).map(m=>t(Yt,{emoji:m,onClick:()=>{e(`:${m.shortcode}:`)}},m.shortcode)),r&&t("button",{type:"button",class:"plain small",onClick:()=>a(n+vt),children:[(s.length-n).toLocaleString()," more…"]})]})}),Yt=Ut(({emoji:s,onClick:e,showCode:n})=>{const a=r=>{const u=r.currentTarget.closest("main");if(u){const v=u.getBoundingClientRect(),g=r.currentTarget.getBoundingClientRect(),R=r.currentTarget.classList;g.leftv.right-88?(R.add("edge-right"),R.remove("edge-left")):R.remove("edge-left","edge-right")}};return t("button",{type:"button",className:"plain4",onClick:e,"data-title":n?void 0:s.shortcode,onPointerEnter:a,onFocus:a,children:[t("picture",{children:[!!s.staticUrl&&t("source",{srcSet:s.staticUrl,media:"(prefers-reduced-motion: reduce)"}),t("img",{className:"shortcode-emoji",src:s.url||s.staticUrl,alt:s.shortcode,width:"24",height:"24",loading:"lazy",decoding:"async"})]}),n&&t(Ce,{children:[" ",t("code",{children:s.shortcode})]})]})}),ht=20;function bi({onClose:s=()=>{},onSelect:e=()=>{}}){var L,Z,D,I,se,J;const[n,a]=H("default"),[r,m]=H([]),u=U(null),v=U(null),g=U(0),R=U(null);function C({offset:c}){var h,p,f;(h=v.current)!=null&&h.value&&(a("loading"),(f=(p=R.current)==null?void 0:p.scrollTo)==null||f.call(p,{top:0,left:0,behavior:"smooth"}),(async()=>{var E;try{const y={api_key:Vn,q:v.current.value,rating:"g",limit:ht,bundle:"messaging_non_clips",offset:c},B=await fetch("https://api.giphy.com/v1/gifs/search?"+new URLSearchParams(y),{referrerPolicy:"no-referrer"}).then(q=>q.json());g.current=((E=B.pagination)==null?void 0:E.offset)||0,m(B),a("results")}catch{a("error")}})())}ee(()=>{var c;(c=v.current)==null||c.focus()},[]);const k=Qe(()=>{C({offset:0})},1e3);return t("div",{id:"gif-picker-sheet",class:"sheet",children:[!!s&&t("button",{type:"button",class:"sheet-close",onClick:s,children:t(K,{icon:"x"})}),t("header",{children:t("form",{ref:u,onSubmit:c=>{c.preventDefault(),C({offset:0})},children:[t("input",{ref:v,type:"search",name:"q",placeholder:"Search GIFs",required:!0,autocomplete:"off",autocorrect:"off",autocapitalize:"off",spellCheck:"false",dir:"auto",onInput:k}),t("input",{type:"image",class:"powered-button",src:Wn,width:"86",height:"30"})]})}),t("main",{ref:R,class:n==="loading"?"loading":"",children:[n==="default"&&t("div",{class:"ui-state",children:t("p",{class:"insignificant",children:"Type to search GIFs"})}),n==="loading"&&!((L=r==null?void 0:r.data)!=null&&L.length)&&t("div",{class:"ui-state",children:t(et,{abrupt:!0})}),((Z=r==null?void 0:r.data)==null?void 0:Z.length)>0?t(Ce,{children:[t("ul",{children:r.data.map(c=>{const{id:h,images:p,title:f,alt_text:E}=c,{fixed_height_small:y,fixed_height_downsampled:B,fixed_height:q,original:ue}=p,A=y!=null&&y.url?y:B!=null&&B.url?B:q;let{url:X,webp:V,width:W,height:j}=A;+j>100&&(W=W/j*100,j=100);const te=URL.parse(X),O=te.origin+te.pathname;let ie;if(V){const ae=URL.parse(V);ie=ae.origin+ae.pathname}return t("li",{children:t("button",{type:"button",onClick:()=>{const{mp4:ae,url:M}=ue,S=ae||M,$=URL.parse(S),z=$.origin+$.pathname;s(),e({url:z,type:ae?"video/mp4":"image/gif",alt_text:E||f})},children:t("figure",{style:{"--figure-width":W+"px"},children:[t("picture",{children:[ie&&t("source",{srcset:ie,type:"image/webp"}),t("img",{src:O,width:W,height:j,loading:"lazy",decoding:"async",alt:E,referrerpolicy:"no-referrer",onLoad:ae=>{ae.target.style.backgroundColor="transparent"}})]}),t("figcaption",{children:E||f})]})})},h)})}),t("p",{class:"pagination",children:[((D=r.pagination)==null?void 0:D.offset)>0&&t("button",{type:"button",class:"light small",disabled:n==="loading",onClick:()=>{var c;C({offset:((c=r.pagination)==null?void 0:c.offset)-ht})},children:[t(K,{icon:"chevron-left"}),t("span",{children:"Previous"})]}),t("span",{}),((I=r.pagination)==null?void 0:I.offset)+((se=r.pagination)==null?void 0:se.count)<((J=r.pagination)==null?void 0:J.total_count)&&t("button",{type:"button",class:"light small",disabled:n==="loading",onClick:()=>{var c;C({offset:((c=r.pagination)==null?void 0:c.offset)+ht})},children:[t("span",{children:"Next"})," ",t(K,{icon:"chevron-right"})]})]})]}):n==="results"&&t("div",{class:"ui-state",children:t("p",{children:"No results"})}),n==="error"&&t("div",{class:"ui-state",children:t("p",{children:"Error loading GIFs"})})]})]})}export{Fi as default}; -//# sourceMappingURL=compose-GqPD-mCC.js.map diff --git a/assets/compose-GqPD-mCC.js.map b/assets/compose-GqPD-mCC.js.map deleted file mode 100644 index e49ebce..0000000 --- a/assets/compose-GqPD-mCC.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"compose-GqPD-mCC.js","sources":["../../node_modules/@github/combobox-nav/dist/index.js","../../node_modules/@github/text-expander-element/dist/index.js","../../node_modules/ansi-regex/index.js","../../node_modules/strip-ansi/index.js","../../node_modules/string-length/index.js","../../src/assets/powered-by-giphy.svg","../../src/components/compose.jsx"],"sourcesContent":["export default class Combobox {\n constructor(input, list, { tabInsertsSuggestions, defaultFirstOption } = {}) {\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.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 scrollTo(this.list, target);\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);\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) {\n target.dispatchEvent(new CustomEvent('combobox-commit', { 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}\nfunction scrollTo(container, target) {\n if (!inViewport(container, target)) {\n container.scrollTop = target.offsetTop;\n }\n}\nfunction inViewport(container, element) {\n const scrollTop = container.scrollTop;\n const containerBottom = scrollTop + container.clientHeight;\n const top = element.offsetTop;\n const bottom = top + element.clientHeight;\n return top >= scrollTop && bottom <= containerBottom;\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\n/**\n * A custom element is implemented as a class which extends HTMLElement (in the\n * case of autonomous elements) or the interface you want to customize (in the\n * case of customized built-in elements).\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Web_components/Using_custom_elements#custom_element_lifecycle_callbacks\n */\nclass CustomHTMLElement extends HTMLElement {\n}\n\nclass InputStyleCloneUpdateEvent extends Event {\n constructor() {\n super(\"update\");\n }\n}\nconst CloneRegistry = new WeakMap();\n/**\n * Create 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 InputStyleCloneElement extends CustomHTMLElement {\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;\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.\n *\n * Upon initial creation the clone element will automatically be inserted into the DOM and begin observing the\n * linked input. Only one clone per input can ever exist at a time.\n * @param input The target input to clone.\n */\n static for(input) {\n const clone = CloneRegistry.get(input) ?? new InputStyleCloneElement(input);\n CloneRegistry.set(input, clone);\n return clone;\n }\n /**\n * Avoid constructing directly: Use `InputStyleCloneElement.for` instead.\n * @private\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 = document.createElement(\"div\");\n this.#container.style.position = \"absolute\";\n this.#container.style.pointerEvents = \"none\";\n input.after(this.#container);\n this.#container.appendChild(this);\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 /** @private */\n connectedCallback() {\n const input = this.#inputRef.deref();\n if (!input)\n return this.remove();\n this.style.pointerEvents = \"none\";\n this.style.userSelect = \"none\";\n this.style.overflow = \"hidden\";\n this.style.display = \"block\";\n // Important not to use display:none which would not render the content at all\n this.style.visibility = \"hidden\";\n if (input instanceof HTMLTextAreaElement) {\n this.style.whiteSpace = \"pre-wrap\";\n this.style.wordWrap = \"break-word\";\n }\n else {\n this.style.whiteSpace = \"nowrap\";\n // text in single-line inputs is vertically centered\n this.style.display = \"table-cell\";\n this.style.verticalAlign = \"middle\";\n }\n this.setAttribute(\"aria-hidden\", \"true\");\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 /** @private */\n disconnectedCallback() {\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 const input = this.#inputRef.deref();\n if (input) {\n input.removeEventListener(\"input\", this.#onInput, { capture: true });\n CloneRegistry.delete(input);\n }\n }\n // --- private ---\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.#inputRef.deref();\n if (!input)\n return this.remove();\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.style.height = inputStyle.height;\n this.style.width = inputStyle.width;\n // Immediately re-adjust for browser inconsistencies in scrollbar handling, if necessary\n if (input.clientHeight !== this.clientHeight)\n this.style.height = `calc(${inputStyle.height} + ${input.clientHeight - this.clientHeight}px)`;\n if (input.clientWidth !== this.clientWidth)\n this.style.width = `calc(${inputStyle.width} + ${input.clientWidth - this.clientWidth}px)`;\n // Position on top of the input\n const inputRect = input.getBoundingClientRect();\n const cloneRect = this.getBoundingClientRect();\n this.#xOffset = this.#xOffset + inputRect.left - cloneRect.left;\n this.#yOffset = this.#yOffset + inputRect.top - cloneRect.top;\n this.style.transform = `translate(${this.#xOffset}px, ${this.#yOffset}px)`;\n this.scrollTop = input.scrollTop;\n this.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.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.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// Inspired by https://github.com/github/catalyst/blob/dc284dcf4f82329a9cac5c867462a8fa529b6c40/src/register.ts\ntry {\n customElements.define(\"input-style-clone\", InputStyleCloneElement);\n}\ncatch (e) {\n // Throws DOMException with NotSupportedError if already defined\n if (!(e instanceof DOMException && e.name === \"NotSupportedError\"))\n throw e;\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 InputStyleCloneElement.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.childNodes[0];\n if (textNode) {\n range.setStart(textNode, this.startOffset);\n range.setEnd(textNode, this.endOffset);\n }\n return range;\n }\n}\n\nconst states = new WeakMap();\nclass TextExpander {\n constructor(expander, input) {\n this.expander = expander;\n this.input = input;\n this.combobox = null;\n this.menu = null;\n this.match = null;\n this.justPasted = false;\n this.lookBackIndex = 0;\n this.oninput = this.onInput.bind(this);\n this.onpaste = this.onPaste.bind(this);\n this.onkeydown = this.onKeydown.bind(this);\n this.oncommit = this.onCommit.bind(this);\n this.onmousedown = this.onMousedown.bind(this);\n this.onblur = this.onBlur.bind(this);\n this.interactingWithList = false;\n input.addEventListener('paste', this.onpaste);\n input.addEventListener('input', this.oninput);\n input.addEventListener('keydown', this.onkeydown);\n input.addEventListener('blur', this.onblur);\n }\n destroy() {\n this.input.removeEventListener('paste', this.onpaste);\n this.input.removeEventListener('input', this.oninput);\n this.input.removeEventListener('keydown', this.onkeydown);\n this.input.removeEventListener('blur', this.onblur);\n }\n dismissMenu() {\n if (this.deactivate()) {\n this.lookBackIndex = this.input.selectionEnd || this.lookBackIndex;\n }\n }\n activate(match, menu) {\n var _a, _b;\n if (this.input !== document.activeElement && this.input !== ((_b = (_a = document.activeElement) === null || _a === void 0 ? void 0 : _a.shadowRoot) === null || _b === void 0 ? void 0 : _b.activeElement)) {\n return;\n }\n this.deactivate();\n this.menu = menu;\n if (!menu.id)\n menu.id = `text-expander-${Math.floor(Math.random() * 100000).toString()}`;\n this.expander.append(menu);\n this.combobox = new Combobox(this.input, menu);\n this.expander.dispatchEvent(new Event('text-expander-activate'));\n this.positionMenu(menu, match.position);\n this.combobox.start();\n menu.addEventListener('combobox-commit', this.oncommit);\n menu.addEventListener('mousedown', this.onmousedown);\n this.combobox.navigate(1);\n }\n positionMenu(menu, position) {\n const caretRect = new InputRange(this.input, position).getBoundingClientRect();\n const targetPosition = { left: caretRect.left, top: caretRect.top + caretRect.height };\n const currentPosition = menu.getBoundingClientRect();\n const delta = {\n left: targetPosition.left - currentPosition.left,\n top: targetPosition.top - currentPosition.top\n };\n if (delta.left !== 0 || delta.top !== 0) {\n const currentStyle = getComputedStyle(menu);\n menu.style.left = currentStyle.left ? `calc(${currentStyle.left} + ${delta.left}px)` : `${delta.left}px`;\n menu.style.top = currentStyle.top ? `calc(${currentStyle.top} + ${delta.top}px)` : `${delta.top}px`;\n }\n }\n deactivate() {\n const menu = this.menu;\n if (!menu || !this.combobox)\n return false;\n this.expander.dispatchEvent(new Event('text-expander-deactivate'));\n this.menu = null;\n menu.removeEventListener('combobox-commit', this.oncommit);\n menu.removeEventListener('mousedown', this.onmousedown);\n this.combobox.destroy();\n this.combobox = null;\n menu.remove();\n return true;\n }\n onCommit({ target }) {\n var _a;\n const item = target;\n if (!(item instanceof HTMLElement))\n return;\n if (!this.combobox)\n return;\n const match = this.match;\n if (!match)\n return;\n const beginning = this.input.value.substring(0, match.position - match.key.length);\n const remaining = this.input.value.substring(match.position + match.text.length);\n const detail = { item, key: match.key, value: null, continue: false };\n const canceled = !this.expander.dispatchEvent(new CustomEvent('text-expander-value', { cancelable: true, detail }));\n if (canceled)\n return;\n if (!detail.value)\n return;\n let suffix = (_a = this.expander.getAttribute('suffix')) !== null && _a !== void 0 ? _a : ' ';\n if (detail.continue) {\n suffix = '';\n }\n const value = `${detail.value}${suffix}`;\n this.input.value = beginning + value + remaining;\n const cursor = beginning.length + value.length;\n this.deactivate();\n this.input.focus({\n preventScroll: true\n });\n this.input.selectionStart = cursor;\n this.input.selectionEnd = cursor;\n if (!detail.continue) {\n this.lookBackIndex = cursor;\n this.match = null;\n }\n this.expander.dispatchEvent(new CustomEvent('text-expander-committed', { cancelable: false, detail: { input: this.input } }));\n }\n onBlur() {\n if (this.interactingWithList) {\n this.interactingWithList = false;\n return;\n }\n this.deactivate();\n }\n onPaste() {\n this.justPasted = true;\n }\n async onInput() {\n if (this.justPasted) {\n this.justPasted = false;\n return;\n }\n const match = this.findMatch();\n if (match) {\n this.match = match;\n const menu = await this.notifyProviders(match);\n if (!this.match)\n return;\n if (menu) {\n this.activate(match, menu);\n }\n else {\n this.deactivate();\n }\n }\n else {\n this.match = null;\n this.deactivate();\n }\n }\n findMatch() {\n const cursor = this.input.selectionEnd || 0;\n const text = this.input.value;\n if (cursor <= this.lookBackIndex) {\n this.lookBackIndex = cursor - 1;\n }\n for (const { key, multiWord } of this.expander.keys) {\n const found = query(text, key, cursor, {\n multiWord,\n lookBackIndex: this.lookBackIndex,\n lastMatchPosition: this.match ? this.match.position : null\n });\n if (found) {\n return { text: found.text, key, position: found.position };\n }\n }\n }\n async notifyProviders(match) {\n const providers = [];\n const provide = (result) => providers.push(result);\n const canceled = !this.expander.dispatchEvent(new CustomEvent('text-expander-change', { cancelable: true, detail: { provide, text: match.text, key: match.key } }));\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 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 default TextExpanderElement;\n","export default function ansiRegex({onlyFirst = false} = {}) {\n\tconst pattern = [\n\t '[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)',\n\t\t'(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-ntqry=><~]))'\n\t].join('|');\n\n\treturn new RegExp(pattern, onlyFirst ? undefined : 'g');\n}\n","import ansiRegex from 'ansi-regex';\n\nconst regex = ansiRegex();\n\nexport default function stripAnsi(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError(`Expected a \\`string\\`, got \\`${typeof string}\\``);\n\t}\n\n\t// Even though the regex is global, we don't need to reset the `.lastIndex`\n\t// because unlike `.exec()` and `.test()`, `.replace()` does it automatically\n\t// and doing it manually has a performance penalty.\n\treturn string.replace(regex, '');\n}\n","import stripAnsi from 'strip-ansi';\n\nconst segmenter = new Intl.Segmenter();\n\nexport default function stringLength(string, {countAnsiEscapeCodes = false} = {}) {\n\tif (string === '') {\n\t\treturn 0;\n\t}\n\n\tif (!countAnsiEscapeCodes) {\n\t\tstring = stripAnsi(string);\n\t}\n\n\tif (string === '') {\n\t\treturn 0;\n\t}\n\n\tlet length = 0;\n\n\tfor (const _ of segmenter.segment(string)) { // eslint-disable-line no-unused-vars\n\t\tlength++;\n\t}\n\n\treturn length;\n}\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 './compose.css';\nimport '@github/text-expander-element';\n\nimport { MenuItem } from '@szhsin/react-menu';\nimport { deepEqual } from 'fast-equals';\nimport Fuse from 'fuse.js';\nimport { forwardRef, memo } from 'preact/compat';\nimport {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'preact/hooks';\nimport { useHotkeys } from 'react-hotkeys-hook';\nimport stringLength from 'string-length';\nimport { detectAll } from 'tinyld/light';\nimport { uid } from 'uid/single';\nimport { useDebouncedCallback, useThrottledCallback } from 'use-debounce';\nimport { useSnapshot } from 'valtio';\n\nimport poweredByGiphyURL from '../assets/powered-by-giphy.svg';\n\nimport Menu2 from '../components/menu2';\nimport supportedLanguages from '../data/status-supported-languages';\nimport urlRegex from '../data/url-regex';\nimport { api } from '../utils/api';\nimport db from '../utils/db';\nimport emojifyText from '../utils/emojify-text';\nimport localeMatch from '../utils/locale-match';\nimport localeCode2Text from '../utils/localeCode2Text';\nimport openCompose from '../utils/open-compose';\nimport pmem from '../utils/pmem';\nimport { fetchRelationships } from '../utils/relationships';\nimport shortenNumber from '../utils/shorten-number';\nimport showToast from '../utils/show-toast';\nimport states, { saveStatus } from '../utils/states';\nimport store from '../utils/store';\nimport {\n getCurrentAccount,\n getCurrentAccountNS,\n getCurrentInstance,\n getCurrentInstanceConfiguration,\n} from '../utils/store-utils';\nimport supports from '../utils/supports';\nimport useCloseWatcher from '../utils/useCloseWatcher';\nimport useInterval from '../utils/useInterval';\nimport visibilityIconsMap from '../utils/visibility-icons-map';\n\nimport AccountBlock from './account-block';\n// import Avatar from './avatar';\nimport Icon from './icon';\nimport Loader from './loader';\nimport Modal from './modal';\nimport Status from './status';\n\nconst {\n PHANPY_IMG_ALT_API_URL: IMG_ALT_API_URL,\n PHANPY_GIPHY_API_KEY: GIPHY_API_KEY,\n} = import.meta.env;\n\nconst supportedLanguagesMap = supportedLanguages.reduce((acc, l) => {\n const [code, common, native] = l;\n acc[code] = {\n common,\n native,\n };\n return acc;\n}, {});\n\n/* NOTES:\n - Max character limit includes BOTH status text and Content Warning text\n*/\n\nconst expiryOptions = {\n '5 minutes': 5 * 60,\n '30 minutes': 30 * 60,\n '1 hour': 60 * 60,\n '6 hours': 6 * 60 * 60,\n '12 hours': 12 * 60 * 60,\n '1 day': 24 * 60 * 60,\n '3 days': 3 * 24 * 60 * 60,\n '7 days': 7 * 24 * 60 * 60,\n};\nconst expirySeconds = Object.values(expiryOptions);\nconst oneDay = 24 * 60 * 60;\n\nconst expiresInFromExpiresAt = (expiresAt) => {\n if (!expiresAt) return oneDay;\n const delta = (new Date(expiresAt).getTime() - Date.now()) / 1000;\n return expirySeconds.find((s) => s >= delta) || oneDay;\n};\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 menu.style.left = innerWidth - width - windowMargin + 'px';\n }\n }\n });\n});\nobserver.observe(menu);\n\nconst DEFAULT_LANG = localeMatch(\n [new Intl.DateTimeFormat().resolvedOptions().locale, ...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 urlRegexObj = new RegExp(urlRegex.source, urlRegex.flags);\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// 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])(#[a-z0-9_]+([a-z0-9_.]+[a-z0-9_]+)?)(?![\\\\/\\\\w])`,\n 'ig',\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();\nfunction escapeHTML(text) {\n return text\n .replace(/&/g, '&')\n .replace(//g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\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 '' +\n escapeHTML(exceedLimitHTML) +\n '';\n }\n return escapeHTML(withinLimitHTML) + exceedLimitHTML;\n }\n\n return escapeHTML(text)\n .replace(urlRegexObj, '$2$3') // URLs\n .replace(MENTION_RE, '$1$2') // Mentions\n .replace(HASHTAG_RE, '$1$2') // Hashtags\n .replace(\n SCAN_RE,\n '$1$2',\n ); // Emoji shortcodes\n}\n\nconst rtf = new Intl.RelativeTimeFormat();\n\nconst CUSTOM_EMOJIS_COUNT = 100;\n\nfunction Compose({\n onClose,\n replyToStatus,\n editStatus,\n draftStatus,\n standalone,\n hasOpener,\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 = 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,\n charactersReservedPerUrl,\n } = {},\n mediaAttachments: {\n supportedMimeTypes = [],\n imageSizeLimit,\n imageMatrixLimit,\n videoSizeLimit,\n videoMatrixLimit,\n videoFrameRateLimit,\n } = {},\n polls: {\n maxOptions,\n maxCharactersPerOption,\n maxExpiration,\n minExpiration,\n } = {},\n } = configuration || {};\n\n const textareaRef = useRef();\n const spoilerTextRef = useRef();\n const [visibility, setVisibility] = useState('public');\n const [sensitive, setSensitive] = 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\n const prefs = store.account.get('preferences') || {};\n\n const oninputTextarea = () => {\n if (!textareaRef.current) return;\n textareaRef.current.dispatchEvent(new Event('input'));\n };\n const focusTextarea = () => {\n setTimeout(() => {\n if (!textareaRef.current) return;\n // status starts with newline, focus on first position\n if (draftStatus?.status?.startsWith?.('\\n')) {\n textareaRef.current.selectionStart = 0;\n textareaRef.current.selectionEnd = 0;\n }\n console.debug('FOCUS textarea');\n textareaRef.current?.focus();\n }, 300);\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 if (allMentions.length > 0) {\n textareaRef.current.value = `${allMentions\n .map((m) => `@${m}`)\n .join(' ')} `;\n oninputTextarea();\n }\n focusTextarea();\n setVisibility(\n visibility === 'public' && prefs['posting:default:visibility']\n ? prefs['posting:default:visibility']\n : visibility,\n );\n setLanguage(language || prefs.postingDefaultLanguage || DEFAULT_LANG);\n setSensitive(sensitive && !!spoilerText);\n } else if (editStatus) {\n const { visibility, language, sensitive, poll, mediaAttachments } =\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(language || presf.postingDefaultLanguage || DEFAULT_LANG);\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']);\n }\n if (prefs['posting:default:language']) {\n setLanguage(prefs['posting:default:language']);\n }\n if (prefs['posting:default:sensitive']) {\n setSensitive(prefs['posting:default:sensitive']);\n }\n }\n if (draftStatus) {\n const {\n status,\n spoilerText,\n visibility,\n language,\n sensitive,\n poll,\n mediaAttachments,\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 focusTextarea();\n if (spoilerText) spoilerTextRef.current.value = spoilerText;\n if (visibility) setVisibility(visibility);\n setLanguage(language || prefs.postingDefaultLanguage || DEFAULT_LANG);\n if (sensitive !== null) setSensitive(sensitive);\n if (composablePoll) setPoll(composablePoll);\n if (mediaAttachments) setMediaAttachments(mediaAttachments);\n }\n }, [draftStatus, editStatus, replyToStatus]);\n\n const formRef = useRef();\n\n const beforeUnloadCopy = '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\", including multiple mentions like \"@username1@username2\"\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 },\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 hasModal && !hasOnlyComposer;\n },\n },\n );\n useCloseWatcher(() => {\n if (!standalone && confirmClose()) {\n onClose();\n }\n }, [standalone, confirmClose, onClose]);\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 poll,\n mediaAttachments,\n },\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 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 const file = item.getAsFile();\n if (file && supportedMimeTypes.includes(file.type)) {\n files.push(file);\n }\n }\n }\n if (files.length > 0 && mediaAttachments.length >= maxMediaAttachments) {\n alert(`You can only attach up to ${maxMediaAttachments} files.`);\n return;\n }\n console.log({ files });\n if (files.length > 0) {\n e.preventDefault();\n e.stopPropagation();\n // Auto-cut-off files to avoid exceeding maxMediaAttachments\n const max = maxMediaAttachments - mediaAttachments.length;\n const allowedFiles = files.slice(0, max);\n if (allowedFiles.length <= 0) {\n alert(`You can only attach up to ${maxMediaAttachments} files.`);\n return;\n }\n const mediaFiles = allowedFiles.map((file) => ({\n file,\n type: file.type,\n size: file.size,\n url: URL.createObjectURL(file),\n id: null,\n description: null,\n }));\n setMediaAttachments([...mediaAttachments, ...mediaFiles]);\n }\n };\n window.addEventListener('paste', handleItems);\n const handleDragover = (e) => {\n // Prevent default if there's files\n if (e.dataTransfer.items.length > 0) {\n e.preventDefault();\n e.stopPropagation();\n }\n };\n window.addEventListener('dragover', handleDragover);\n window.addEventListener('drop', handleItems);\n return () => {\n window.removeEventListener('paste', handleItems);\n window.removeEventListener('dragover', handleDragover);\n window.removeEventListener('drop', handleItems);\n };\n }, [mediaAttachments]);\n\n const [showMentionPicker, setShowMentionPicker] = useState(false);\n const [showEmoji2Picker, setShowEmoji2Picker] = useState(false);\n const [showGIFPicker, setShowGIFPicker] = useState(false);\n\n const [autoDetectedLanguages, setAutoDetectedLanguages] = useState(null);\n const [topSupportedLanguages, restSupportedLanguages] = useMemo(() => {\n const topLanguages = [];\n const restLanguages = [];\n const { contentTranslationHideLanguages = [] } = states.settings;\n supportedLanguages.forEach((l) => {\n const [code] = l;\n if (\n code === language ||\n code === prevLanguage.current ||\n code === DEFAULT_LANG ||\n contentTranslationHideLanguages.includes(code) ||\n (autoDetectedLanguages?.length && autoDetectedLanguages.includes(code))\n ) {\n topLanguages.push(l);\n } else {\n restLanguages.push(l);\n }\n });\n topLanguages.sort(([codeA, commonA], [codeB, commonB]) => {\n if (codeA === language) return -1;\n if (codeB === language) return 1;\n return commonA.localeCompare(commonB);\n });\n restLanguages.sort(([codeA, commonA], [codeB, commonB]) =>\n commonA.localeCompare(commonB),\n );\n return [topLanguages, restLanguages];\n }, [language, autoDetectedLanguages]);\n\n const replyToStatusMonthsAgo = useMemo(\n () =>\n !!replyToStatus?.createdAt &&\n Math.floor(\n (Date.now() - new Date(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 return (\n
    \n
    \n
    \n {currentAccountInfo?.avatarStatic && (\n // \n \n )}\n {!standalone ? (\n \n {\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 },\n });\n\n if (!newWin) {\n return;\n }\n\n onClose();\n }}\n >\n \n \n \n \n {' '}\n {\n if (confirmClose()) {\n onClose();\n }\n }}\n >\n \n \n \n ) : (\n hasOpener && (\n {\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('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 '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 =\n '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 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 },\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 \n \n )\n )}\n
    \n {!!replyToStatus && (\n
    \n \n
    \n Replying to @\n {replyToStatus.account.acct || replyToStatus.account.username}\n ’s post\n {replyToStatusMonthsAgo >= 3 && (\n <>\n {' '}\n (\n \n {rtf.format(-replyToStatusMonthsAgo, 'month')}\n \n )\n \n )}\n
    \n
    \n )}\n {!!editStatus && (\n
    \n \n
    Editing source post
    \n
    \n )}\n {\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 { status, visibility, sensitive, spoilerText } = entries;\n\n // Pre-cleanup\n sensitive = sensitive === 'on'; // checkboxes return \"on\" if checked\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('Poll must have at least 2 options');\n return;\n }\n if (poll.options.some((option) => option === '')) {\n alert('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 'Some media have no descriptions. Continue?',\n );\n if (!yes) return;\n }\n }\n\n // Post-cleanup\n spoilerText = (sensitive && spoilerText) || undefined;\n status = status === '' ? undefined : status;\n\n // states.composerState.minimized = true;\n states.composerState.publishing = true;\n setUIState('loading');\n (async () => {\n try {\n console.log('MEDIA ATTACHMENTS', mediaAttachments);\n if (mediaAttachments.length > 0) {\n // Upload media attachments first\n const mediaPromises = mediaAttachments.map((attachment) => {\n const { file, description, id } = attachment;\n console.log('UPLOADING', attachment);\n if (id) {\n // If already uploaded\n return attachment;\n } else {\n const params = removeNullUndefined({\n file,\n description,\n });\n return masto.v2.media.create(params).then((res) => {\n if (res.id) {\n attachment.id = res.id;\n }\n return res;\n });\n }\n });\n const results = await Promise.allSettled(mediaPromises);\n\n // If any failed, return\n if (\n results.some((result) => {\n return result.status === 'rejected' || !result.value?.id;\n })\n ) {\n states.composerState.publishing = false;\n states.composerState.publishingError = true;\n setUIState('error');\n // Alert all the reasons\n results.forEach((result) => {\n if (result.status === 'rejected') {\n console.error(result);\n alert(result.reason || `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,\n poll,\n // mediaIds: mediaAttachments.map((attachment) => attachment.id),\n media_ids: mediaAttachments.map(\n (attachment) => attachment.id,\n ),\n };\n if (editStatus && supports('@mastodon/edit-media-attributes')) {\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 } else if (!editStatus) {\n params.visibility = visibility;\n // params.inReplyToId = replyToStatus?.id || undefined;\n params.in_reply_to_id = replyToStatus?.id || undefined;\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 });\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
    \n {\n updateCharCount();\n }}\n />\n \n {\n const sensitive = e.target.checked;\n setSensitive(sensitive);\n if (sensitive) {\n spoilerTextRef.current?.focus();\n } else {\n textareaRef.current?.focus();\n }\n }}\n />\n \n {' '}\n \n \n {\n setVisibility(e.target.value);\n }}\n disabled={uiState === 'loading' || !!editStatus}\n >\n \n \n \n \n \n {' '}\n
    \n {\n updateCharCount();\n }}\n maxCharacters={maxCharacters}\n performSearch={(params) => {\n const { type, q, limit } = params;\n if (type === 'accounts') {\n return masto.v1.accounts.search.list({\n q,\n limit,\n resolve: false,\n });\n }\n return masto.v2.search.fetch(params);\n }}\n onTrigger={(action) => {\n if (action?.name === 'custom-emojis') {\n setShowEmoji2Picker({\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 }\n }}\n />\n {mediaAttachments?.length > 0 && (\n
    \n {mediaAttachments.map((attachment, i) => {\n const { id, file } = attachment;\n const fileID = file?.size + file?.type + file?.name;\n return (\n {\n setMediaAttachments((attachments) => {\n const newAttachments = [...attachments];\n newAttachments[i].description = value;\n return newAttachments;\n });\n }}\n onRemove={() => {\n setMediaAttachments((attachments) => {\n return attachments.filter((_, j) => j !== i);\n });\n }}\n />\n );\n })}\n \n
    \n )}\n {!!poll && (\n {\n if (poll) {\n const newPoll = { ...poll };\n setPoll(newPoll);\n } else {\n setPoll(null);\n }\n }}\n />\n )}\n \n \n \n {/* If maxOptions is not defined or defined and is greater than 1, show poll button */}\n {maxOptions == null ||\n (maxOptions > 1 && (\n <>\n {\n setPoll({\n options: ['', ''],\n expiresIn: 24 * 60 * 60, // 1 day\n multiple: false,\n });\n }}\n >\n \n \n \n ))}\n {/* {\n setShowMentionPicker(true);\n }}\n >\n \n */}\n {\n setShowEmoji2Picker(true);\n }}\n >\n \n \n {!!states.settings.composerGIFPicker && (\n = maxMediaAttachments ||\n !!poll\n }\n onClick={() => {\n setShowGIFPicker(true);\n }}\n >\n GIF\n \n )}\n \n
    \n {uiState === 'loading' ? (\n \n ) : (\n
    \n \n
    \n {showMentionPicker && (\n {\n if (e.target === e.currentTarget) {\n setShowMentionPicker(false);\n }\n }}\n >\n {\n setShowMentionPicker(false);\n }}\n defaultSearchTerm={showMentionPicker?.defaultSearchTerm}\n onSelect={(socialAddress) => {\n const textarea = textareaRef.current;\n if (!textarea) return;\n const { selectionStart, selectionEnd } = textarea;\n const text = textarea.value;\n const textBeforeMention = text.slice(0, selectionStart);\n const spaceBeforeMention = textBeforeMention\n ? /[\\s\\t\\n\\r]$/.test(textBeforeMention)\n ? ''\n : ' '\n : '';\n const textAfterMention = text.slice(selectionEnd);\n const spaceAfterMention = /^[\\s\\t\\n\\r]/.test(textAfterMention)\n ? ''\n : ' ';\n const newText =\n textBeforeMention +\n spaceBeforeMention +\n '@' +\n socialAddress +\n spaceAfterMention +\n textAfterMention;\n textarea.value = newText;\n textarea.selectionStart = textarea.selectionEnd =\n selectionEnd +\n 1 +\n socialAddress.length +\n spaceAfterMention.length;\n textarea.focus();\n textarea.dispatchEvent(new Event('input'));\n }}\n />\n \n )}\n {showEmoji2Picker && (\n {\n if (e.target === e.currentTarget) {\n setShowEmoji2Picker(false);\n }\n }}\n >\n {\n setShowEmoji2Picker(false);\n }}\n defaultSearchTerm={showEmoji2Picker?.defaultSearchTerm}\n onSelect={(emojiShortcode) => {\n const textarea = textareaRef.current;\n if (!textarea) return;\n const { selectionStart, selectionEnd } = textarea;\n const text = textarea.value;\n const textBeforeEmoji = text.slice(0, selectionStart);\n const spaceBeforeEmoji = textBeforeEmoji\n ? /[\\s\\t\\n\\r]$/.test(textBeforeEmoji)\n ? ''\n : ' '\n : '';\n const textAfterEmoji = text.slice(selectionEnd);\n const spaceAfterEmoji = /^[\\s\\t\\n\\r]/.test(textAfterEmoji)\n ? ''\n : ' ';\n const newText =\n textBeforeEmoji +\n spaceBeforeEmoji +\n emojiShortcode +\n spaceAfterEmoji +\n textAfterEmoji;\n textarea.value = newText;\n textarea.selectionStart = textarea.selectionEnd =\n selectionEnd + emojiShortcode.length + spaceAfterEmoji.length;\n textarea.focus();\n textarea.dispatchEvent(new Event('input'));\n }}\n />\n \n )}\n {showGIFPicker && (\n {\n if (e.target === e.currentTarget) {\n setShowGIFPicker(false);\n }\n }}\n >\n setShowGIFPicker(false)}\n onSelect={({ url, type, alt_text }) => {\n console.log('GIF URL', url);\n if (mediaAttachments.length >= maxMediaAttachments) {\n alert(\n `You can only attach up to ${maxMediaAttachments} files.`,\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: 'Downloading GIF…',\n duration: -1,\n });\n const blob = await fetch(url, {\n referrerPolicy: 'no-referrer',\n }).then((res) => res.blob());\n const file = new File(\n [blob],\n type === 'video/mp4' ? 'video.mp4' : 'image.gif',\n {\n type,\n },\n );\n const newMediaAttachments = [\n ...mediaAttachments,\n {\n file,\n type,\n size: file.size,\n id: null,\n description: alt_text || '',\n },\n ];\n setMediaAttachments(newMediaAttachments);\n theToast?.hideToast?.();\n } catch (err) {\n console.error(err);\n theToast?.hideToast?.();\n showToast('Failed to download GIF');\n }\n })();\n }}\n />\n \n )}\n
    \n );\n}\n\nfunction autoResizeTextarea(textarea) {\n if (!textarea) return;\n const { value, offsetHeight, scrollHeight, clientHeight } = textarea;\n if (offsetHeight < window.innerHeight) {\n // NOTE: This check is needed because the offsetHeight return 50000 (really large number) on first render\n // No idea why it does that, will re-investigate in far future\n const offset = offsetHeight - clientHeight;\n const height = value ? scrollHeight + offset + 'px' : null;\n textarea.style.height = height;\n }\n}\n\nasync function _getCustomEmojis(instance, masto) {\n const emojis = await masto.v1.customEmojis.list();\n const visibleEmojis = emojis.filter((e) => e.visibleInPicker);\n const searcher = new Fuse(visibleEmojis, {\n keys: ['shortcode'],\n findAllMatches: true,\n });\n return [visibleEmojis, searcher];\n}\nconst getCustomEmojis = pmem(_getCustomEmojis, {\n // Limit by time to reduce memory usage\n // Cached by instance\n matchesArg: (cacheKeyArg, keyArg) => cacheKeyArg.instance === keyArg.instance,\n maxAge: 30 * 60 * 1000, // 30 minutes\n});\n\nconst detectLangs = (text) => {\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 { masto, instance } = api();\n const [text, setText] = useState(ref.current?.value || '');\n const {\n maxCharacters,\n performSearch = () => {},\n onTrigger = () => {},\n ...textareaProps\n } = props;\n // const snapStates = useSnapshot(states);\n // const charCount = snapStates.composerCharacterCount;\n\n // const customEmojis = useRef();\n const searcherRef = useRef();\n useEffect(() => {\n getCustomEmojis(instance, masto)\n .then((r) => {\n const [emojis, searcher] = r;\n searcherRef.current = searcher;\n })\n .catch((e) => {\n console.error(e);\n });\n }, []);\n\n const textExpanderRef = useRef();\n const textExpanderTextRef = useRef('');\n useEffect(() => {\n let handleChange, handleValue, handleCommited;\n if (textExpanderRef.current) {\n handleChange = (e) => {\n // console.log('text-expander-change', 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 emojis = customEmojis.current.filter((emoji) =>\n // emoji.shortcode.startsWith(text),\n // );\n // const emojis = filterShortcodes(customEmojis.current, text);\n const results = searcherRef.current?.search(text, {\n limit: 5,\n });\n let html = '';\n results.forEach(({ item: emoji }) => {\n const { shortcode, url } = emoji;\n html += `\n
  • \n \"\" \n ${encodeHTML(shortcode)}\n
  • `;\n });\n html += `
  • More…
  • `;\n // console.log({ emojis, html });\n menu.innerHTML = html;\n provide(\n Promise.resolve({\n matched: results.length > 0,\n fragment: menu,\n }),\n );\n return;\n }\n\n const type = {\n '@': 'accounts',\n '#': 'hashtags',\n }[key];\n provide(\n new Promise((resolve) => {\n const searchResults = performSearch({\n type,\n q: text,\n limit: 5,\n });\n searchResults.then((value) => {\n if (text !== textExpanderTextRef.current) {\n return;\n }\n console.log({ value, type, v: value[type] });\n const results = value[type] || value;\n console.log('RESULTS', value, results);\n let html = '';\n results.forEach((result) => {\n const {\n name,\n avatarStatic,\n displayName,\n username,\n acct,\n emojis,\n history,\n } = result;\n const displayNameWithEmoji = emojifyText(displayName, emojis);\n // const item = menuItem.cloneNode();\n if (acct) {\n html += `\n
  • \n \n \"\"\n \n \n ${displayNameWithEmoji || username}\n
    @${encodeHTML(acct)}\n
    \n
  • \n `;\n } else {\n const total = history?.reduce?.(\n (acc, cur) => acc + +cur.uses,\n 0,\n );\n html += `\n
  • \n #${encodeHTML(name)}\n ${\n total\n ? `${shortenNumber(total)}`\n : ''\n }\n
  • \n `;\n }\n });\n if (type === 'accounts') {\n html += `
  • More…
  • `;\n }\n menu.innerHTML = html;\n console.log('MENU', results, menu);\n resolve({\n matched: results.length > 0,\n fragment: menu,\n });\n });\n }),\n );\n };\n\n textExpanderRef.current.addEventListener(\n 'text-expander-change',\n handleChange,\n );\n\n handleValue = (e) => {\n const { key, item } = e.detail;\n const { value, more } = item.dataset;\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 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 textExpanderRef.current.addEventListener(\n 'text-expander-value',\n handleValue,\n );\n\n handleCommited = (e) => {\n const { input } = e.detail;\n setText(input.value);\n // fire input event\n if (ref.current) {\n const event = new Event('input', { bubbles: true });\n ref.current.dispatchEvent(event);\n }\n };\n\n textExpanderRef.current.addEventListener(\n 'text-expander-committed',\n handleCommited,\n );\n }\n\n return () => {\n if (textExpanderRef.current) {\n textExpanderRef.current.removeEventListener(\n 'text-expander-change',\n handleChange,\n );\n textExpanderRef.current.removeEventListener(\n 'text-expander-value',\n handleValue,\n );\n textExpanderRef.current.removeEventListener(\n 'text-expander-committed',\n handleCommited,\n );\n }\n };\n }, []);\n\n useEffect(() => {\n // Resize observer for textarea\n const textarea = ref.current;\n if (!textarea) return;\n const resizeObserver = new ResizeObserver(() => {\n // Get height of textarea, set height to textExpander\n if (textExpanderRef.current) {\n const { height } = textarea.getBoundingClientRect();\n textExpanderRef.current.style.height = height + 'px';\n }\n });\n resizeObserver.observe(textarea);\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 const langs = detectLangs(text);\n if (langs?.length) {\n onTrigger?.({\n name: 'auto-detect-language',\n languages: langs,\n });\n }\n }, 2000);\n\n return (\n \n {\n // Get line before cursor position after pressing 'Enter'\n const { key, target } = e;\n if (key === 'Enter' && !(e.ctrlKey || e.metaKey)) {\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 // Replace zero-width space\n const text = target.value.replace(/\\u200b/g, '');\n setText(text);\n autoResizeTextarea(target);\n props.onInput?.(e);\n throttleHighlightText(text);\n debouncedAutoDetectLanguage();\n }}\n style={{\n width: '100%',\n height: '4em',\n // '--text-weight': (1 + charCount / 140).toFixed(1) || 1,\n }}\n onScroll={(e) => {\n if (composeHighlightRef.current) {\n const { scrollTop } = e.target;\n composeHighlightRef.current.scrollTop = scrollTop;\n }\n }}\n />\n \n \n );\n});\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 \n );\n}\n\nfunction prettyBytes(bytes) {\n const units = ['bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n let unitIndex = 0;\n while (bytes >= 1024) {\n bytes /= 1024;\n unitIndex++;\n }\n return `${bytes.toFixed(0).toLocaleString()} ${units[unitIndex]}`;\n}\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 onDescriptionChange = () => {},\n onRemove = () => {},\n}) {\n const [uiState, setUIState] = useState('default');\n const supportsEdit = supports('@mastodon/edit-media-attributes');\n const { type, id, file } = attachment;\n const url = useMemo(\n () => (file ? URL.createObjectURL(file) : attachment.url),\n [file, attachment.url],\n );\n console.log({ attachment });\n\n const checkMaxError = !!file?.size;\n const configuration = checkMaxError ? getCurrentInstanceConfiguration() : {};\n const {\n mediaAttachments: {\n imageSizeLimit,\n imageMatrixLimit,\n videoSizeLimit,\n videoMatrixLimit,\n videoFrameRateLimit,\n } = {},\n } = configuration || {};\n\n const [maxError, setMaxError] = useState(() => {\n if (!checkMaxError) return null;\n if (\n type.startsWith('image') &&\n imageSizeLimit &&\n file.size > imageSizeLimit\n ) {\n return {\n type: 'imageSizeLimit',\n details: {\n imageSize: file.size,\n imageSizeLimit,\n },\n };\n } else if (\n type.startsWith('video') &&\n videoSizeLimit &&\n file.size > videoSizeLimit\n ) {\n return {\n type: 'videoSizeLimit',\n details: {\n videoSize: file.size,\n videoSizeLimit,\n },\n };\n }\n return null;\n });\n\n const [imageMatrix, setImageMatrix] = useState({});\n useEffect(() => {\n if (!checkMaxError || !imageMatrixLimit) return;\n if (imageMatrix?.matrix > imageMatrixLimit) {\n setMaxError({\n type: 'imageMatrixLimit',\n details: {\n imageMatrix: imageMatrix?.matrix,\n imageMatrixLimit,\n width: imageMatrix?.width,\n height: imageMatrix?.height,\n },\n });\n }\n }, [imageMatrix, imageMatrixLimit, checkMaxError]);\n\n const [videoMatrix, setVideoMatrix] = useState({});\n useEffect(() => {\n if (!checkMaxError || !videoMatrixLimit) return;\n if (videoMatrix?.matrix > videoMatrixLimit) {\n setMaxError({\n type: 'videoMatrixLimit',\n details: {\n videoMatrix: videoMatrix?.matrix,\n videoMatrixLimit,\n width: videoMatrix?.width,\n height: videoMatrix?.height,\n },\n });\n }\n }, [videoMatrix, videoMatrixLimit, checkMaxError]);\n\n const [description, setDescription] = useState(attachment.description);\n const [suffixType, subtype] = type.split('/');\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
    \n Uploaded\n

    \n {attachment.description || No description}\n

    \n
    \n ) : (\n {\n const { value } = e.target;\n setDescription(value);\n // debouncedOnDescriptionChange(value);\n }}\n >\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 `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 `Dimension too large. Uploading might encounter issues. Try reduce dimension from ${width.toLocaleString()}×${height.toLocaleString()}px to ${newWidth.toLocaleString()}×${newHeight.toLocaleString()}px.`;\n }\n case 'videoSizeLimit': {\n const { videoSize, videoSizeLimit } = details;\n return `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 `Dimension too large. Uploading might encounter issues. Try reduce dimension from ${width.toLocaleString()}×${height.toLocaleString()}px to ${newWidth.toLocaleString()}×${newHeight.toLocaleString()}px.`;\n }\n case 'videoFrameRateLimit': {\n // Not possible to detect this on client-side for now\n return 'Frame rate too high. Uploading might encounter issues.';\n }\n }\n };\n\n return (\n <>\n
    \n {\n setShowModal(true);\n }}\n >\n {suffixType === 'image' ? (\n {\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 {\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
    \n {descTextarea}\n
    \n \n \n \n {!!maxError && (\n {\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 \n \n )}\n
    \n \n {showModal && (\n {\n setShowModal(false);\n }}\n >\n
    \n {\n setShowModal(false);\n }}\n >\n \n \n
    \n

    \n {\n {\n image: 'Edit image description',\n video: 'Edit video description',\n audio: 'Edit audio description',\n }[suffixType]\n }\n

    \n
    \n
    \n
    \n {suffixType === 'image' ? (\n \"\"\n ) : suffixType === 'video' || suffixType === 'gifv' ? (\n
    \n
    \n {descTextarea}\n
    \n {suffixType === 'image' &&\n /^(png|jpe?g|gif|webp)$/i.test(subtype) &&\n !!states.settings.mediaAltGenerator &&\n !!IMG_ALT_API_URL && (\n \n \n \n }\n >\n {\n setUIState('loading');\n toastRef.current = showToast({\n text: 'Generating description. Please wait...',\n duration: -1,\n });\n // POST with multipart\n (async function () {\n try {\n const body = new FormData();\n body.append('image', file);\n const response = await fetch(IMG_ALT_API_URL, {\n method: 'POST',\n body,\n }).then((r) => r.json());\n if (response.error) {\n throw new Error(response.error);\n }\n setDescription(response.description);\n } catch (e) {\n console.error(e);\n showToast(\n `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 \n {lang && lang !== 'en' ? (\n \n Generate description…\n
    \n (English)\n
    \n ) : (\n Generate description…\n )}\n \n {!!lang && lang !== 'en' && (\n {\n setUIState('loading');\n toastRef.current = showToast({\n text: 'Generating description. Please wait...',\n duration: -1,\n });\n // POST with multipart\n (async function () {\n try {\n const body = new FormData();\n body.append('image', file);\n const params = `?lang=${lang}`;\n const response = await fetch(\n IMG_ALT_API_URL + params,\n {\n method: 'POST',\n body,\n },\n ).then((r) => r.json());\n if (response.error) {\n throw new Error(response.error);\n }\n setDescription(response.description);\n } catch (e) {\n console.error(e);\n showToast(\n `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 \n \n Generate description…\n
    ({localeCode2Text(lang)}){' '}\n \n — experimental\n \n
    \n \n )}\n \n )}\n {\n setShowModal(false);\n }}\n disabled={uiState === 'loading'}\n >\n Done\n \n
    \n
    \n
    \n
    \n \n )}\n \n );\n}\n\nfunction Poll({\n lang,\n poll,\n disabled,\n onInput = () => {},\n maxOptions,\n maxExpiration,\n minExpiration,\n maxCharactersPerOption,\n}) {\n const { options, expiresIn, multiple } = poll;\n\n return (\n
    \n
    \n {options.map((option, i) => (\n
    \n {\n const { value } = e.target;\n options[i] = value;\n onInput(poll);\n }}\n />\n {\n options.splice(i, 1);\n onInput(poll);\n }}\n >\n \n \n
    \n ))}\n
    \n
    \n = maxOptions}\n onClick={() => {\n options.push('');\n onInput(poll);\n }}\n >\n +\n {' '}\n \n \n
    \n
    \n {\n onInput(null);\n }}\n >\n Remove poll\n \n
    \n
    \n );\n}\n\nfunction filterShortcodes(emojis, searchTerm) {\n searchTerm = searchTerm.toLowerCase();\n\n // Return an array of shortcodes that start with or contain the search term, sorted by relevance and limited to the first 5\n return emojis\n .sort((a, b) => {\n let aLower = a.shortcode.toLowerCase();\n let bLower = b.shortcode.toLowerCase();\n\n let aStartsWith = aLower.startsWith(searchTerm);\n let bStartsWith = bLower.startsWith(searchTerm);\n let aContains = aLower.includes(searchTerm);\n let bContains = bLower.includes(searchTerm);\n let bothStartWith = aStartsWith && bStartsWith;\n let bothContain = aContains && bContains;\n\n return bothStartWith\n ? a.length - b.length\n : aStartsWith\n ? -1\n : bStartsWith\n ? 1\n : bothContain\n ? a.length - b.length\n : aContains\n ? -1\n : bContains\n ? 1\n : 0;\n })\n .slice(0, 5);\n}\n\nfunction encodeHTML(str) {\n return str.replace(/[&<>\"']/g, function (char) {\n return '&#' + char.charCodeAt(0) + ';';\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\nfunction MentionModal({\n onClose = () => {},\n onSelect = () => {},\n defaultSearchTerm,\n}) {\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 },\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 },\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 },\n );\n\n return (\n
    \n {!!onClose && (\n \n )}\n
    \n {\n e.preventDefault();\n debouncedLoadAccounts.flush?.();\n // const searchTerm = inputRef.current.value;\n // debouncedLoadAccounts(searchTerm);\n }}\n >\n {\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 defaultValue={defaultSearchTerm || ''}\n />\n \n
    \n
    \n {accounts?.length > 0 ? (\n \n {accounts.map((account, i) => {\n const relationship = relationshipsMap[account.id];\n return (\n \n \n {\n selectAccount(account);\n }}\n >\n \n \n \n );\n })}\n \n ) : uiState === 'loading' ? (\n
    \n \n
    \n ) : uiState === 'error' ? (\n
    \n

    Error loading accounts

    \n
    \n ) : null}\n
    \n
    \n );\n}\n\nfunction CustomEmojisModal({\n masto,\n instance,\n onClose = () => {},\n onSelect = () => {},\n defaultSearchTerm,\n}) {\n const [uiState, setUIState] = useState('default');\n const customEmojisList = useRef([]);\n const [customEmojis, setCustomEmojis] = useState([]);\n const recentlyUsedCustomEmojis = useMemo(\n () => store.account.get('recentlyUsedCustomEmojis') || [],\n );\n const searcherRef = useRef();\n useEffect(() => {\n setUIState('loading');\n (async () => {\n try {\n const [emojis, searcher] = await getCustomEmojis(instance, masto);\n console.log('emojis', emojis);\n searcherRef.current = searcher;\n setCustomEmojis(emojis);\n setUIState('default');\n } catch (e) {\n setUIState('error');\n console.error(e);\n }\n })();\n }, []);\n\n const customEmojisCatList = useMemo(() => {\n // Group emojis by category\n const emojisCat = {\n '--recent--': recentlyUsedCustomEmojis.filter((emoji) =>\n customEmojis.find((e) => e.shortcode === emoji.shortcode),\n ),\n };\n const othersCat = [];\n customEmojis.forEach((emoji) => {\n customEmojisList.current?.push?.(emoji);\n if (!emoji.category) {\n othersCat.push(emoji);\n return;\n }\n if (!emojisCat[emoji.category]) {\n emojisCat[emoji.category] = [];\n }\n emojisCat[emoji.category].push(emoji);\n });\n if (othersCat.length) {\n emojisCat['--others--'] = othersCat;\n }\n return emojisCat;\n }, [customEmojis]);\n\n const scrollableRef = useRef();\n const [matches, setMatches] = useState(null);\n const 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 return (\n
    \n {!!onClose && (\n \n )}\n
    \n
    \n Custom emojis{' '}\n {uiState === 'loading' ? (\n \n ) : (\n • {instance}\n )}\n
    \n {\n e.preventDefault();\n const emoji = matches[0];\n if (emoji) {\n onSelectEmoji(`:${emoji.shortcode}:`);\n }\n }}\n >\n \n \n
    \n
    \n {matches !== null ? (\n
      \n {matches.map((emoji) => (\n
    • \n {\n onSelectEmoji(`:${emoji.shortcode}:`);\n }}\n showCode\n />\n
    • \n ))}\n
    \n ) : (\n
    \n {uiState === 'error' && (\n
    \n

    Error loading custom emojis

    \n
    \n )}\n {uiState === 'default' &&\n Object.entries(customEmojisCatList).map(\n ([category, emojis]) =>\n !!emojis?.length && (\n <>\n
    \n {{\n '--recent--': 'Recently used',\n '--others--': 'Others',\n }[category] || category}\n
    \n \n \n ),\n )}\n
    \n )}\n
    \n
    \n );\n}\n\nconst CustomEmojisList = memo(({ emojis, onSelect }) => {\n const [max, setMax] = useState(CUSTOM_EMOJIS_COUNT);\n const showMore = emojis.length > max;\n return (\n
    \n {emojis.slice(0, max).map((emoji) => (\n {\n onSelect(`:${emoji.shortcode}:`);\n }}\n />\n ))}\n {showMore && (\n setMax(max + CUSTOM_EMOJIS_COUNT)}\n >\n {(emojis.length - max).toLocaleString()} more…\n \n )}\n
    \n );\n});\n\nconst CustomEmojiButton = memo(({ emoji, onClick, showCode }) => {\n const addEdges = (e) => {\n // Add edge-left or edge-right class based on self position relative to scrollable parent\n // If near left edge, add edge-left, if near right edge, add edge-right\n const buffer = 88;\n const parent = e.currentTarget.closest('main');\n if (parent) {\n const rect = parent.getBoundingClientRect();\n const selfRect = e.currentTarget.getBoundingClientRect();\n const targetClassList = e.currentTarget.classList;\n if (selfRect.left < rect.left + buffer) {\n targetClassList.add('edge-left');\n targetClassList.remove('edge-right');\n } else if (selfRect.right > rect.right - buffer) {\n targetClassList.add('edge-right');\n targetClassList.remove('edge-left');\n } else {\n targetClassList.remove('edge-left', 'edge-right');\n }\n }\n };\n\n return (\n \n \n {!!emoji.staticUrl && (\n \n )}\n \n \n {showCode && (\n <>\n {' '}\n {emoji.shortcode}\n \n )}\n \n );\n});\n\nconst GIFS_PER_PAGE = 20;\nfunction GIFPickerModal({ onClose = () => {}, onSelect = () => {} }) {\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 };\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
    \n {!!onClose && (\n \n )}\n
    \n {\n e.preventDefault();\n fetchGIFs({ offset: 0 });\n }}\n >\n \n \n \n
    \n
    \n {uiState === 'default' && (\n
    \n

    Type to search GIFs

    \n
    \n )}\n {uiState === 'loading' && !results?.data?.length && (\n
    \n \n
    \n )}\n {results?.data?.length > 0 ? (\n <>\n
      \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
    • \n {\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 \n \n {strippedWebP && (\n \n )}\n {\n e.target.style.backgroundColor = 'transparent';\n }}\n />\n \n
      {alt_text || title}
      \n \n \n
    • \n );\n })}\n
    \n

    \n {results.pagination?.offset > 0 && (\n {\n fetchGIFs({\n offset: results.pagination?.offset - GIFS_PER_PAGE,\n });\n }}\n >\n \n Previous\n \n )}\n \n {results.pagination?.offset + results.pagination?.count <\n results.pagination?.total_count && (\n {\n fetchGIFs({\n offset: results.pagination?.offset + GIFS_PER_PAGE,\n });\n }}\n >\n Next \n \n )}\n

    \n \n ) : (\n uiState === 'results' && (\n
    \n

    No results

    \n
    \n )\n )}\n {uiState === 'error' && (\n
    \n

    Error loading GIFs

    \n
    \n )}\n
    \n
    \n );\n}\n\nexport default Compose;\n"],"names":["Combobox","input","list","tabInsertsSuggestions","defaultFirstOption","event","keyboardBindings","trackComposition","commitWithElement","_a","visible","indexDiff","focusEl","els","focusIndex","indexOfItem","newIndex","target","el","scrollTo","combobox","commit","fireCommitEvent","container","inViewport","element","scrollTop","containerBottom","top","bottom","boundary","query","text","key","cursor","multiWord","lookBackIndex","lastMatchPosition","keyIndex","pre","CustomHTMLElement","InputStyleCloneUpdateEvent","CloneRegistry","_InputStyleCloneElement","__privateAdd","_InputStyleCloneElement_instances","_styleObserver","__privateMethod","updateStyles_fn","_resizeObserver","requestUpdateLayout_fn","_inputRef","_container","_xOffset","_yOffset","_isLayoutUpdating","_onInput","updateText_fn","_onDocumentScrollOrResize","usingInput_fn","__privateSet","__privateGet","clone","fn","updateLayout_fn","inputStyle","inputRect","cloneRect","prop","propertiesToCopy","InputStyleCloneElement","e","_InputRange","startOffset","endOffset","_InputRange_instances","_inputElement","_startOffset","_endOffset","selectionStart","selectionEnd","offset","clampOffset_fn","toStart","createCloneRange_fn","styleClone_get","cloneElement_get","range","textNode","InputRange","states","TextExpander","expander","match","menu","_b","position","caretRect","targetPosition","currentPosition","delta","currentStyle","item","beginning","remaining","detail","suffix","value","found","providers","provide","result","x","TextExpanderElement","keysAttr","keys","multiWordAttr","globalMultiWord","state","ansiRegex","onlyFirst","pattern","regex","stripAnsi","string","segmenter","stringLength","countAnsiEscapeCodes","length","_","poweredByGiphyURL","PHANPY_IMG_ALT_API_URL","IMG_ALT_API_URL","PHANPY_GIPHY_API_KEY","GIPHY_API_KEY","import","supportedLanguagesMap","supportedLanguages","reduce","acc","l","code","common","native","expiryOptions","expirySeconds","Object","values","oneDay","expiresInFromExpiresAt","expiresAt","Date","getTime","now","find","s","document","createElement","role","className","windowMargin","observer","IntersectionObserver","entries","forEach","entry","isIntersecting","left","width","boundingClientRect","innerWidth","window","style","observe","DEFAULT_LANG","localeMatch","Intl","DateTimeFormat","resolvedOptions","locale","navigator","languages","map","urlRegexObj","RegExp","urlRegex","source","flags","usernameRegex","urlPlaceholder","countableText","inputText","replace","USERNAME_RE","MENTION_RE","HASHTAG_RE","SHORTCODE_RE_FRAGMENT","SCAN_RE","Segmenter","escapeHTML","highlightText","maxCharacters","Infinity","composerCharacterCount","withinLimitHTML","exceedLimitHTML","htmlSegments","segment","index","rtf","RelativeTimeFormat","CUSTOM_EMOJIS_COUNT","Compose","onClose","replyToStatus","editStatus","draftStatus","standalone","hasOpener","console","masto","instance","uiState","setUIState","useState","UID","uid","log","currentAccount","currentAccountInfo","maxMediaAttachments","charactersReservedPerUrl","imageMatrixLimit","supportedMimeTypes","imageSizeLimit","videoSizeLimit","videoMatrixLimit","videoFrameRateLimit","maxExpiration","maxOptions","maxCharactersPerOption","minExpiration","spoilerTextRef","useRef","textareaRef","store","prevLanguage","language","sensitive","setMediaAttachments","setLanguage","oninputTextarea","poll","account","focusTextarea","dispatchEvent","setTimeout","spoilerText","useEffect","visibility2","language2","sensitive2","visibility","current","m","allMentions","prefs","setSensitive","poll2","mediaAttachments","options","expiresIn","statusSource","dataset","mediaAttachments2","setVisibility","composablePoll","status","o","formRef","hasValue","hasMediaAttachments","isSelf","hasOnlyAcct","confirmClose","hasIDMediaAttachments","beforeUnloadCopy","id","handleBeforeUnload","sameWithSource","getCharCount","updateCharCount","supportsCloseWatcher","useHotkeys","yes","addEventListener","capture","modals","hasModal","hasOnlyComposer","prevBackgroundDraft","count","escDownRef","ignoreEventWhen","useCloseWatcher","canClose","draftKey","getCurrentAccountNS","backgroundDraft","useInterval","db","handleItems","username","acct","items","i2","file","files","drafts","allowedFiles","updatedAt","then","debug","error","mediaFiles","handleDragover","includes","showMentionPicker","setShowMentionPicker","showEmoji2Picker","setShowEmoji2Picker","showGIFPicker","autoDetectedLanguages","setAutoDetectedLanguages","topSupportedLanguages","restSupportedLanguages","useMemo","topLanguages","contentTranslationHideLanguages","max","restLanguages","commonB","type","size","url","codeA","commonA","codeB","onMinimize","saveUnsavedDraft","_jsxs","dataTransfer","_jsx","children","passData","Icon","alert","settings","sort","class","avatarStatic","instanceURL","onClick","opener","composerState","Status","replyToStatusMonthsAgo","_Fragment","formData","previewMode","option","media","pointerEvents","opacity","mediaPromises","attachment","description","params2","removeNullUndefined","res","results","some","hasNoDescriptions","params","saveStatus","newStatus","allSettled","e2","media_attributes","in_reply_to_id","Textarea","onChange","limit","action","title","icon","name","MediaAttachment","attachments","newAttachments","required","fileID","performSearch","q","v1","search","resolve","v2","fetch","onTrigger","defaultSearchTerm","newPoll","setPoll","onDescriptionChange","i","accept","multiple","setShowGIFPicker","Array","Loader","CharCountMeter","disabled","MentionModal","socialAddress","textarea","textBeforeMention","spaceAfterMention","spaceBeforeMention","textAfterMention","newText","Modal","emojiShortcode","textBeforeEmoji","spaceBeforeEmoji","spaceAfterEmoji","textAfterEmoji","GIFPickerModal","alt_text","showToast","blob","onSelect","theToast","offsetHeight","scrollHeight","clientHeight","height","visibleEmojis","searcher","getCustomEmojis","pmem","_getCustomEmojis","cacheKeyArg","keyArg","detectLangs","langs","lang","newMediaAttachments","setText","ref","props","searcherRef","r","emojis","textExpanderRef","textExpanderTextRef","text2","emoji","shortcode","encodeHTML","forwardRef","html","textareaProps","handleChange","total","history","cur","matched","handleValue","more","searchResults","v","displayName","handleCommited","shortenNumber","slowHighlightPerf","composeHighlightRef","start","end","debouncedAutoDetectLanguage","useDebouncedCallback","dom","mark","Event","resizeObserver","throttleHighlightText","bullet","postSpaces","anything","lastLine","innerHTML","number","preSpaces","newBullet","pos","innerText","autoResizeTextarea","dir","rows","cols","onKeyDown","hidden","charCount","leftChars","ctrlKey","setRangeText","setSelectionRange","prettyBytes","bytes","unitIndex","units","scaleDimension","newWidth","scalingFactor","newHeight","onInput","onRemove","supportsEdit","supports","onScroll","checkMaxError","configuration","getCurrentInstanceConfiguration","snapStates","setImageMatrix","imageMatrix","setMaxError","matrix","Math","videoMatrix","setDescription","suffixType","subtype","debouncedOnDescriptionChange","timer","maxError","details","toastRef","maxErrorText","err","type2","imageSizeLimit2","imageSize","imageMatrixLimit2","showModal","videoSize","clearTimeout","videoSizeLimit2","descTextarea","videoMatrix2","videoMatrixLimit2","autoCapitalize","autoComplete","naturalWidth","naturalHeight","maxErrorToast","setVideoMatrix","videoWidth","videoHeight","setShowModal","tabIndex","src","onLoad","playsinline","onLoadedMetadata","Menu2","body","response","MenuItem","menuButton","localeCode2Text","append","Poll","checked","label","maxlength","placeholder","str","char","obj","accounts2","relationships","fetchRelationships","relationshipsMap","setRelationshipsMap","filter","setAccounts","loadRelationships","loadAccounts","inputRef","filterShortcodes","searchTerm","bLower","aStartsWith","bStartsWith","aContains","bothContain","bContains","selectedAccount","accounts","selectedIndex","selectAccount","listRef","setSelectedIndex","selectedItem","term","debouncedLoadAccounts","enableOnFormTags","AccountBlock","relationship","inline","customEmojis","setCustomEmojis","onSubmit","recentlyUsedCustomEmojis","autocorrect","customEmojisList","othersCat","emojisCat","useCallback","_c","scrollableRef","setMatches","onFind","abrupt","onSelectEmoji","recentlyUsedCustomEmojis2","recentlyUsedEmojiIndex","emoji2","customEmojisCatList","category","matches","CustomEmojiButton","queueMicrotask","splice","CustomEmojisList","setMax","showMore","memo","showCode","parent","rect","selfRect","targetClassList","addEdges","GIFS_PER_PAGE","setResults","qRef","closest","getBoundingClientRect","remove","staticUrl","loading","debouncedOnInput","currentOffset","gif","fixed_height_downsampled","original","pagination","fixed_height_small","fixed_height","theImage","urlObj","strippedWebP","webp","webpObj","url2","theURL","mp4","urlObj2","strippedURL2","strippedURL","images","fetchGIFs","parse"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4]} \ No newline at end of file diff --git a/assets/compose-ZHWvrAfe.js b/assets/compose-Gtwe4AUy.js similarity index 62% rename from assets/compose-ZHWvrAfe.js rename to assets/compose-Gtwe4AUy.js index 2ebe81c..60de394 100644 --- a/assets/compose-ZHWvrAfe.js +++ b/assets/compose-Gtwe4AUy.js @@ -1,2 +1,2 @@ -import{a7 as _,h as l,i as o,U as v,M as g,a3 as T,y as u,T as t,c as e,I as m,v as y,a8 as I,aa as C}from"./useTitle-SRT6j-GL.js";_();window.opener&&(console=window.opener.console);function x(){var d,r;const[s,p]=l("default"),[a,f]=l(null),{editStatus:c,replyToStatus:i,draftStatus:h}=window.__COMPOSE__||{};return v(c?o._({id:"Txus+H"}):i?o._({id:"03vjxE",values:{0:((d=i.account)==null?void 0:d.acct)||((r=i.account)==null?void 0:r.username)}}):o._({id:"QOhkyl"})),u(()=>{const n=g();f(!!n),n&&T()},[]),u(()=>{if(s==="closed"){try{window.opener.focus()}catch{}window.close()}},[s]),s==="closed"?e("div",{class:"box",children:[e("p",{children:e(t,{id:"mBdQnV"})}),e("p",{children:e("button",{onClick:()=>{window.close()},children:e(t,{id:"rf8fiC"})})})]}):a===!1?e("div",{class:"box",children:[e("h1",{children:e(t,{id:"SlfejT"})}),e("p",{children:e(t,{id:"D3vX+9"})}),e("p",{children:e("a",{href:"/",children:e(t,{id:"iWpEwy"})})})]}):a?e(m,{editStatus:c,replyToStatus:i,draftStatus:h,standalone:!0,hasOpener:window.opener,onClose:n=>{const{newStatus:w,fn:S=()=>{}}=n||{};try{w&&window.opener.__STATES__.reloadStatusPage++,S(),p("closed")}catch{}}}):e("div",{class:"box",children:e(y,{})})}C(e(I,{i18n:o,children:e(x,{})}),document.getElementById("app-standalone")); -//# sourceMappingURL=compose-ZHWvrAfe.js.map +import{a9 as _,h as l,i as o,U as g,M as v,a3 as T,y as u,T as t,c as e,I as m,w as y,aa as I,ac as C}from"./useTitle-6AJYXxJy.js";_();window.opener&&(console=window.opener.console);function x(){var d,r;const[s,p]=l("default"),[a,w]=l(null),{editStatus:c,replyToStatus:i,draftStatus:f}=window.__COMPOSE__||{};return g(c?o._({id:"Txus+H"}):i?o._({id:"03vjxE",values:{0:((d=i.account)==null?void 0:d.acct)||((r=i.account)==null?void 0:r.username)}}):o._({id:"QOhkyl"})),u(()=>{const n=v();w(!!n),n&&T()},[]),u(()=>{if(s==="closed"){try{window.opener.focus()}catch{}window.close()}},[s]),s==="closed"?e("div",{class:"box",children:[e("p",{children:e(t,{id:"mBdQnV"})}),e("p",{children:e("button",{onClick:()=>{window.close()},children:e(t,{id:"rf8fiC"})})})]}):a===!1?e("div",{class:"box",children:[e("h1",{children:e(t,{id:"SlfejT"})}),e("p",{children:e(t,{id:"D3vX+9"})}),e("p",{children:e("a",{href:"/",children:e(t,{id:"iWpEwy"})})})]}):a?e(m,{editStatus:c,replyToStatus:i,draftStatus:f,standalone:!0,hasOpener:window.opener,onClose:n=>{const{newStatus:h,fn:S=()=>{}}=n||{};try{h&&window.opener.__STATES__.reloadStatusPage++,S(),p("closed")}catch{}}}):e("div",{class:"box",children:e(y,{})})}C(e(I,{i18n:o,children:e(x,{})}),document.getElementById("app-standalone")); +//# sourceMappingURL=compose-Gtwe4AUy.js.map diff --git a/assets/compose-ZHWvrAfe.js.map b/assets/compose-Gtwe4AUy.js.map similarity index 98% rename from assets/compose-ZHWvrAfe.js.map rename to assets/compose-Gtwe4AUy.js.map index d58f064..e38c8f8 100644 --- a/assets/compose-ZHWvrAfe.js.map +++ b/assets/compose-Gtwe4AUy.js.map @@ -1 +1 @@ -{"version":3,"file":"compose-ZHWvrAfe.js","sources":["../../src/compose.jsx"],"sourcesContent":["import './index.css';\nimport './app.css';\nimport './polyfills';\n\nimport { i18n } from '@lingui/core';\nimport { t, Trans } from '@lingui/macro';\nimport { I18nProvider } from '@lingui/react';\nimport { render } from 'preact';\nimport { useEffect, useState } from 'preact/hooks';\n\nimport ComposeSuspense from './components/compose-suspense';\nimport Loader from './components/loader';\nimport { initActivateLang } from './utils/lang';\nimport { initStates } from './utils/states';\nimport { getCurrentAccount, setCurrentAccountID } from './utils/store-utils';\nimport useTitle from './utils/useTitle';\n\ninitActivateLang();\n\nif (window.opener) {\n console = window.opener.console;\n}\n\nfunction App() {\n const [uiState, setUIState] = useState('default');\n const [isLoggedIn, setIsLoggedIn] = useState(null);\n\n const { editStatus, replyToStatus, draftStatus } = window.__COMPOSE__ || {};\n\n useTitle(\n editStatus\n ? t`Editing source status`\n : replyToStatus\n ? t`Replying to @${\n replyToStatus.account?.acct || replyToStatus.account?.username\n }`\n : t`Compose`,\n );\n\n useEffect(() => {\n const account = getCurrentAccount();\n setIsLoggedIn(!!account);\n if (account) {\n initStates();\n }\n }, []);\n\n useEffect(() => {\n if (uiState === 'closed') {\n try {\n // Focus parent window\n window.opener.focus();\n } catch (e) {}\n window.close();\n }\n }, [uiState]);\n\n if (uiState === 'closed') {\n return (\n
    \n

    \n You may close this page now.\n

    \n

    \n {\n window.close();\n }}\n >\n Close window\n \n

    \n
    \n );\n }\n\n console.debug('OPEN COMPOSE');\n\n if (isLoggedIn === false) {\n return (\n
    \n

    \n Error\n

    \n

    \n Login required.\n

    \n

    \n \n Go home\n \n

    \n
    \n );\n }\n\n if (isLoggedIn) {\n return (\n {\n const { newStatus, fn = () => {} } = results || {};\n try {\n if (newStatus) {\n window.opener.__STATES__.reloadStatusPage++;\n }\n fn();\n setUIState('closed');\n } catch (e) {}\n }}\n />\n );\n }\n\n return (\n
    \n \n
    \n );\n}\n\nrender(\n \n \n ,\n document.getElementById('app-standalone'),\n);\n"],"names":["initActivateLang","window","opener","console","App","uiState","setUIState","useState","isLoggedIn","setIsLoggedIn","editStatus","replyToStatus","draftStatus","__COMPOSE__","useTitle","i18n","_","id","values","0","account","acct","username","useEffect","getCurrentAccount","initStates","focus","close","_jsxs","class","children","_jsx","Trans","onClick","href","ComposeSuspense","standalone","hasOpener","newStatus","results","fn","Loader","render","I18nProvider"],"mappings":"mIAiBAA,IAEIC,OAAOC,SACTC,QAAUF,OAAOC,OAAOC,SAG1B,SAASC,GAAM,SACb,KAAM,CAACC,EAASC,CAAU,EAAIC,EAAS,SAAS,EAC1C,CAACC,EAAYC,CAAa,EAAIF,EAAS,IAAI,EAE3C,CAAEG,WAAAA,EAAYC,cAAAA,EAAeC,YAAAA,CAAAA,EAAgBX,OAAOY,aAAe,GA8BzE,OA5BAC,EACEJ,EAAUK,EAAAC,EACN,CAAAC,GAAA,QAAuB,CAAA,EACvBN,EAAaI,EAAAC,EACb,CAAAC,GAAA,SAAAC,OAAA,CAAAC,IACER,EAAAA,EAAcS,UAAdT,YAAAA,EAAuBU,SAAQV,EAAAA,EAAcS,UAAdT,YAAAA,EAAuBW,SAAQ,CAC/D,GAACP,EAAAC,EACF,CAAAC,GAAA,QAAS,CAAA,CACf,EAEAM,EAAU,IAAM,CACd,MAAMH,EAAUI,IACFf,EAAA,CAAC,CAACW,CAAO,EACnBA,GACSK,GAEf,EAAG,CAAE,CAAA,EAELF,EAAU,IAAM,CACd,GAAIlB,IAAY,SAAU,CACpB,GAAA,CAEFJ,OAAOC,OAAOwB,aACJ,CAAC,CACbzB,OAAO0B,MAAM,CACf,CAAA,EACC,CAACtB,CAAO,CAAC,EAERA,IAAY,SAEZuB,EAAA,MAAA,CAAKC,MAAM,MAAKC,UACdC,EAAA,IAAA,CAAAD,SACEC,EAAAC,EAAA,CAAAf,GAAA,QAAA,CAA0C,CAAA,CACzC,EACHc,EAAA,IAAA,CAAAD,SACEC,EAAA,SAAA,CACEE,QAASA,IAAM,CACbhC,OAAO0B,MAAM,CACf,EAAEG,SAEFC,EAAAC,EAAA,CAAAf,GAAA,QAAA,CAA0B,CAAA,CACpB,CAAA,CACP,CAAC,CAAA,CACD,EAITd,IAA4B,WAEF,CACxB,YACO0B,SAAM,CAAAE,EAAA,KAAA,CAAKD,SACdC,EAAAC,EAAA,CAAAF,GAAAA,QACE,CAAA,CAAA,CAAA,EAAmBC,EAAA,IAAA,CAErBA,SAAAA,EAAAC,EAAA,CAAAF,GAAAA,QACE,CAAA,CAAA,CAAA,EAA6BC,EAAA,IAAA,CAE/BA,SAAAA,EAAA,IAAA,CAAAD,KAAAA,IACKI,SAAKH,EAAAC,EAAA,CAAGF,GAAAA,QACT,CAAA,CAAA,CAAA,CAAqB,CAAA,CAAC,CACrB,CAAA,EAIXtB,EAEgBuB,EAAAI,EAAA,CACd,WAAAzB,EAEIA,cAAAA,EACAC,YAAAA,EACAC,WAAAA,GACAwB,UAAU,OAAA,OACVC,WAAkBnC,OAEV,UAAAoC,EAAEA,GAAAA,EAAAA,IAAAA,EAAsB,EAACC,GAAA,CAAA,EAAE,GAAIA,CACjCD,GACF,OAAe,OAAA,WAAA,mBAEfE,IACGlC,EAAA,QAAA,CACHA,MAAAA,EACW,CAAA,CACf,EAGNyB,EAAA,MAAA,CAEA,YACOF,SAAME,EAAAU,EAAA,EAAA,CAAA,CAAA,CACA,CAGfC,EAAAX,EAAAY,EAAA,CAEAD,KAAAA,EACgB3B,SAAAA,EAAAA,EAAAA,EAAAA,CAAAA,CAAAA,EACZgB,SAAAA,eAAM,gBAAA,CAAA"} \ No newline at end of file +{"version":3,"file":"compose-Gtwe4AUy.js","sources":["../../src/compose.jsx"],"sourcesContent":["import './index.css';\nimport './app.css';\nimport './polyfills';\n\nimport { i18n } from '@lingui/core';\nimport { t, Trans } from '@lingui/macro';\nimport { I18nProvider } from '@lingui/react';\nimport { render } from 'preact';\nimport { useEffect, useState } from 'preact/hooks';\n\nimport ComposeSuspense from './components/compose-suspense';\nimport Loader from './components/loader';\nimport { initActivateLang } from './utils/lang';\nimport { initStates } from './utils/states';\nimport { getCurrentAccount, setCurrentAccountID } from './utils/store-utils';\nimport useTitle from './utils/useTitle';\n\ninitActivateLang();\n\nif (window.opener) {\n console = window.opener.console;\n}\n\nfunction App() {\n const [uiState, setUIState] = useState('default');\n const [isLoggedIn, setIsLoggedIn] = useState(null);\n\n const { editStatus, replyToStatus, draftStatus } = window.__COMPOSE__ || {};\n\n useTitle(\n editStatus\n ? t`Editing source status`\n : replyToStatus\n ? t`Replying to @${\n replyToStatus.account?.acct || replyToStatus.account?.username\n }`\n : t`Compose`,\n );\n\n useEffect(() => {\n const account = getCurrentAccount();\n setIsLoggedIn(!!account);\n if (account) {\n initStates();\n }\n }, []);\n\n useEffect(() => {\n if (uiState === 'closed') {\n try {\n // Focus parent window\n window.opener.focus();\n } catch (e) {}\n window.close();\n }\n }, [uiState]);\n\n if (uiState === 'closed') {\n return (\n
    \n

    \n You may close this page now.\n

    \n

    \n {\n window.close();\n }}\n >\n Close window\n \n

    \n
    \n );\n }\n\n console.debug('OPEN COMPOSE');\n\n if (isLoggedIn === false) {\n return (\n
    \n

    \n Error\n

    \n

    \n Login required.\n

    \n

    \n \n Go home\n \n

    \n
    \n );\n }\n\n if (isLoggedIn) {\n return (\n {\n const { newStatus, fn = () => {} } = results || {};\n try {\n if (newStatus) {\n window.opener.__STATES__.reloadStatusPage++;\n }\n fn();\n setUIState('closed');\n } catch (e) {}\n }}\n />\n );\n }\n\n return (\n
    \n \n
    \n );\n}\n\nrender(\n \n \n ,\n document.getElementById('app-standalone'),\n);\n"],"names":["initActivateLang","window","opener","console","App","uiState","setUIState","useState","isLoggedIn","setIsLoggedIn","editStatus","replyToStatus","draftStatus","__COMPOSE__","useTitle","i18n","_","id","values","0","account","acct","username","useEffect","getCurrentAccount","initStates","focus","close","_jsxs","class","children","_jsx","Trans","onClick","href","ComposeSuspense","standalone","hasOpener","newStatus","results","fn","Loader","render","I18nProvider"],"mappings":"mIAiBAA,IAEIC,OAAOC,SACTC,QAAUF,OAAOC,OAAOC,SAG1B,SAASC,GAAM,SACb,KAAM,CAACC,EAASC,CAAU,EAAIC,EAAS,SAAS,EAC1C,CAACC,EAAYC,CAAa,EAAIF,EAAS,IAAI,EAE3C,CAAEG,WAAAA,EAAYC,cAAAA,EAAeC,YAAAA,CAAAA,EAAgBX,OAAOY,aAAe,GA8BzE,OA5BAC,EACEJ,EAAUK,EAAAC,EACN,CAAAC,GAAA,QAAuB,CAAA,EACvBN,EAAaI,EAAAC,EACb,CAAAC,GAAA,SAAAC,OAAA,CAAAC,IACER,EAAAA,EAAcS,UAAdT,YAAAA,EAAuBU,SAAQV,EAAAA,EAAcS,UAAdT,YAAAA,EAAuBW,SAAQ,CAC/D,GAACP,EAAAC,EACF,CAAAC,GAAA,QAAS,CAAA,CACf,EAEAM,EAAU,IAAM,CACd,MAAMH,EAAUI,IACFf,EAAA,CAAC,CAACW,CAAO,EACnBA,GACSK,GAEf,EAAG,CAAE,CAAA,EAELF,EAAU,IAAM,CACd,GAAIlB,IAAY,SAAU,CACpB,GAAA,CAEFJ,OAAOC,OAAOwB,aACJ,CAAC,CACbzB,OAAO0B,MAAM,CACf,CAAA,EACC,CAACtB,CAAO,CAAC,EAERA,IAAY,SAEZuB,EAAA,MAAA,CAAKC,MAAM,MAAKC,UACdC,EAAA,IAAA,CAAAD,SACEC,EAAAC,EAAA,CAAAf,GAAA,QAAA,CAA0C,CAAA,CACzC,EACHc,EAAA,IAAA,CAAAD,SACEC,EAAA,SAAA,CACEE,QAASA,IAAM,CACbhC,OAAO0B,MAAM,CACf,EAAEG,SAEFC,EAAAC,EAAA,CAAAf,GAAA,QAAA,CAA0B,CAAA,CACpB,CAAA,CACP,CAAC,CAAA,CACD,EAITd,IAA4B,WAEF,CACxB,YACO0B,SAAM,CAAAE,EAAA,KAAA,CAAKD,SACdC,EAAAC,EAAA,CAAAF,GAAAA,QACE,CAAA,CAAA,CAAA,EAAmBC,EAAA,IAAA,CAErBA,SAAAA,EAAAC,EAAA,CAAAF,GAAAA,QACE,CAAA,CAAA,CAAA,EAA6BC,EAAA,IAAA,CAE/BA,SAAAA,EAAA,IAAA,CAAAD,KAAAA,IACKI,SAAKH,EAAAC,EAAA,CAAGF,GAAAA,QACT,CAAA,CAAA,CAAA,CAAqB,CAAA,CAAC,CACrB,CAAA,EAIXtB,EAEgBuB,EAAAI,EAAA,CACd,WAAAzB,EAEIA,cAAAA,EACAC,YAAAA,EACAC,WAAAA,GACAwB,UAAU,OAAA,OACVC,WAAkBnC,OAEV,UAAAoC,EAAEA,GAAAA,EAAAA,IAAAA,EAAsB,EAACC,GAAA,CAAA,EAAE,GAAIA,CACjCD,GACF,OAAe,OAAA,WAAA,mBAEfE,IACGlC,EAAA,QAAA,CACHA,MAAAA,EACW,CAAA,CACf,EAGNyB,EAAA,MAAA,CAEA,YACOF,SAAME,EAAAU,EAAA,EAAA,CAAA,CAAA,CACA,CAGfC,EAAAX,EAAAY,EAAA,CAEAD,KAAAA,EACgB3B,SAAAA,EAAAA,EAAAA,EAAAA,CAAAA,CAAAA,EACZgB,SAAAA,eAAM,gBAAA,CAAA"} \ No newline at end of file diff --git a/assets/compose-IeRiPb7Z.js b/assets/compose-IeRiPb7Z.js deleted file mode 100644 index d819431..0000000 --- a/assets/compose-IeRiPb7Z.js +++ /dev/null @@ -1,26 +0,0 @@ -var Lt=s=>{throw TypeError(s)};var rt=(s,e,n)=>e.has(s)||Lt("Cannot "+n);var B=(s,e,n)=>(rt(s,e,"read from private field"),n?n.call(s):e.get(s)),re=(s,e,n)=>e.has(s)?Lt("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(s):e.set(s,n),de=(s,e,n,a)=>(rt(s,e,"write to private field"),a?a.call(s,n):e.set(s,n),n),G=(s,e,n)=>(rt(s,e,"access private method"),n);import{F as on,B as rn,_ as ln,a as _e,a8 as cn,w as zt,u as un,i as Ht,b as dn,I as K,y as St,h as Nt,a9 as hn,M as Ve,s as ke,a4 as pn,a0 as mn,n as gn,O as fn,X as Qe,c as vn,d as At,l as bn,x as yn}from"./fuse-4Bvpr1kU.js";import{s as le,a as bt,h as H,A as W,f as xn,al as Ut,d as Le,y as ee,m as wn,am as kn,T as Re,c as t,k as Ce,b as En,L as et,j as Fn,D as Cn,u as Ln,q as It,x as Wt}from"./useTitle-Mh8hVeGN.js";import{e as zn}from"./tinyld-light-PxOyhYWY.js";import"./index-CeOZgm-k.js";class Sn{constructor(e,n,{tabInsertsSuggestions:a,defaultFirstOption:r}={}){this.input=e,this.list=n,this.tabInsertsSuggestions=a??!0,this.defaultFirstOption=r??!1,this.isComposing=!1,n.id||(n.id=`combobox-${Math.random().toString().slice(2,6)}`),this.ctrlBindings=!!navigator.userAgent.match(/Macintosh/),this.keyboardEventHandler=m=>An(m,this),this.compositionEventHandler=m=>Mn(m,this),this.inputHandler=this.clearSelection.bind(this),e.setAttribute("role","combobox"),e.setAttribute("aria-controls",n.id),e.setAttribute("aria-expanded","false"),e.setAttribute("aria-autocomplete","list"),e.setAttribute("aria-haspopup","listbox")}destroy(){this.clearSelection(),this.stop(),this.input.removeAttribute("role"),this.input.removeAttribute("aria-controls"),this.input.removeAttribute("aria-expanded"),this.input.removeAttribute("aria-autocomplete"),this.input.removeAttribute("aria-haspopup")}start(){this.input.setAttribute("aria-expanded","true"),this.input.addEventListener("compositionstart",this.compositionEventHandler),this.input.addEventListener("compositionend",this.compositionEventHandler),this.input.addEventListener("input",this.inputHandler),this.input.addEventListener("keydown",this.keyboardEventHandler),this.list.addEventListener("click",Mt),this.indicateDefaultOption()}stop(){this.clearSelection(),this.input.setAttribute("aria-expanded","false"),this.input.removeEventListener("compositionstart",this.compositionEventHandler),this.input.removeEventListener("compositionend",this.compositionEventHandler),this.input.removeEventListener("input",this.inputHandler),this.input.removeEventListener("keydown",this.keyboardEventHandler),this.list.removeEventListener("click",Mt)}indicateDefaultOption(){var e;this.defaultFirstOption&&((e=Array.from(this.list.querySelectorAll('[role="option"]:not([aria-disabled="true"])')).filter(lt)[0])===null||e===void 0||e.setAttribute("data-combobox-option-default","true"))}navigate(e=1){const n=Array.from(this.list.querySelectorAll('[aria-selected="true"]')).filter(lt)[0],a=Array.from(this.list.querySelectorAll('[role="option"]')).filter(lt),r=a.indexOf(n);if(r===a.length-1&&e===1||r===0&&e===-1){this.clearSelection(),this.input.focus();return}let m=e===1?0:a.length-1;if(n&&r>=0){const v=r+e;v>=0&&v0||s.offsetHeight>0)}function Mn(s,e){e.isComposing=s.type==="compositionstart",document.getElementById(e.input.getAttribute("aria-controls")||"")&&e.clearSelection()}function $n(s,e){Tn(s,e)||(s.scrollTop=e.offsetTop)}function Tn(s,e){const n=s.scrollTop,a=n+s.clientHeight,r=e.offsetTop,m=r+e.clientHeight;return r>=n&&m<=a}const Bn=/\s|\(|\[/;function _n(s,e,n,{multiWord:a,lookBackIndex:r,lastMatchPosition:m}={multiWord:!1,lookBackIndex:0,lastMatchPosition:null}){let u=s.lastIndexOf(e,n-1);if(u===-1||u=u+e.length+1||s.lastIndexOf(` -`,n-1)>u||s.lastIndexOf(".",n-1)>u)return}else if(s.lastIndexOf(" ",n-1)>u)return;const v=s[u-1];return v&&!Bn.test(v)?void 0:{text:s.substring(u+e.length,n),position:u+e.length}}class Rn extends HTMLElement{}class Dn extends Event{constructor(){super("update")}}const ct=new WeakMap;var De,je,Ee,fe,Y,Te,ze,Se,pt,Ae,Ge,Ye,Ze,Pe,Fe;const xt=class xt extends Rn{constructor(n){super();re(this,Y);re(this,De,new MutationObserver(()=>G(this,Y,Ye).call(this)));re(this,je,new ResizeObserver(()=>G(this,Y,Ge).call(this)));re(this,Ee);re(this,fe);re(this,ze,0);re(this,Se,0);re(this,Ae,!1);re(this,Pe,()=>G(this,Y,Ze).call(this));re(this,Fe,n=>{G(this,Y,Te).call(this,a=>{(n.target===document||n.target===window||n.target instanceof Node&&n.target.contains(a))&&G(this,Y,Ge).call(this)})});de(this,Ee,new WeakRef(n)),de(this,fe,document.createElement("div")),B(this,fe).style.position="absolute",B(this,fe).style.pointerEvents="none",n.after(B(this,fe)),B(this,fe).appendChild(this)}static for(n){const a=ct.get(n)??new xt(n);return ct.set(n,a),a}forceUpdate(){G(this,Y,Ye).call(this),G(this,Y,Ze).call(this)}connectedCallback(){const n=B(this,Ee).deref();if(!n)return this.remove();this.style.pointerEvents="none",this.style.userSelect="none",this.style.overflow="hidden",this.style.display="block",this.style.visibility="hidden",n instanceof HTMLTextAreaElement?(this.style.whiteSpace="pre-wrap",this.style.wordWrap="break-word"):(this.style.whiteSpace="nowrap",this.style.display="table-cell",this.style.verticalAlign="middle"),this.setAttribute("aria-hidden","true"),G(this,Y,Ye).call(this),G(this,Y,Ze).call(this),B(this,De).observe(n,{attributeFilter:["style","dir"]}),B(this,je).observe(n),document.addEventListener("scroll",B(this,Fe),{capture:!0}),window.addEventListener("resize",B(this,Fe),{capture:!0}),n.addEventListener("input",B(this,Pe),{capture:!0})}disconnectedCallback(){B(this,fe).remove(),B(this,De).disconnect(),B(this,je).disconnect(),document.removeEventListener("scroll",B(this,Fe),{capture:!0}),window.removeEventListener("resize",B(this,Fe),{capture:!0});const n=B(this,Ee).deref();n&&(n.removeEventListener("input",B(this,Pe),{capture:!0}),ct.delete(n))}};De=new WeakMap,je=new WeakMap,Ee=new WeakMap,fe=new WeakMap,Y=new WeakSet,Te=function(n){const a=B(this,Ee).deref();return a?n(a):this.remove()},ze=new WeakMap,Se=new WeakMap,pt=function(){G(this,Y,Te).call(this,n=>{const a=window.getComputedStyle(n);this.style.height=a.height,this.style.width=a.width,n.clientHeight!==this.clientHeight&&(this.style.height=`calc(${a.height} + ${n.clientHeight-this.clientHeight}px)`),n.clientWidth!==this.clientWidth&&(this.style.width=`calc(${a.width} + ${n.clientWidth-this.clientWidth}px)`);const r=n.getBoundingClientRect(),m=this.getBoundingClientRect();de(this,ze,B(this,ze)+r.left-m.left),de(this,Se,B(this,Se)+r.top-m.top),this.style.transform=`translate(${B(this,ze)}px, ${B(this,Se)}px)`,this.scrollTop=n.scrollTop,this.scrollLeft=n.scrollLeft,this.dispatchEvent(new Dn)})},Ae=new WeakMap,Ge=function(){B(this,Ae)||(de(this,Ae,!0),requestAnimationFrame(()=>{G(this,Y,pt).call(this),de(this,Ae,!1)}))},Ye=function(){G(this,Y,Te).call(this,n=>{const a=window.getComputedStyle(n);for(const r of jn)this.style[r]=a[r];G(this,Y,Ge).call(this)})},Ze=function(){G(this,Y,Te).call(this,n=>{this.textContent=n.value,G(this,Y,pt).call(this)})},Pe=new WeakMap,Fe=new WeakMap;let Je=xt;const jn=["direction","writingMode","unicodeBidi","textOrientation","boxSizing","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","borderStyle","paddingTop","paddingRight","paddingBottom","paddingLeft","fontStyle","fontVariant","fontWeight","fontStretch","fontSize","fontSizeAdjust","lineHeight","fontFamily","textAlign","textTransform","textIndent","textDecoration","letterSpacing","wordSpacing","tabSize","MozTabSize"];try{customElements.define("input-style-clone",Je)}catch(s){if(!(s instanceof DOMException&&s.name==="NotSupportedError"))throw s}var pe,Ie,Me,ce,gt,qt,ft,Be;const Xe=class Xe{constructor(e,n=0,a=n){re(this,ce);re(this,pe);re(this,Ie);re(this,Me);de(this,pe,e),de(this,Ie,n),de(this,Me,a)}static fromSelection(e){const{selectionStart:n,selectionEnd:a}=e;return new Xe(e,n??void 0,a??void 0)}get collapsed(){return this.startOffset===this.endOffset}get commonAncestorContainer(){return B(this,pe)}get endContainer(){return B(this,pe)}get startContainer(){return B(this,pe)}get startOffset(){return B(this,Ie)}get endOffset(){return B(this,Me)}setStartOffset(e){de(this,Ie,G(this,ce,ft).call(this,e))}setEndOffset(e){de(this,Me,G(this,ce,ft).call(this,e))}collapse(e=!1){e?this.setEndOffset(this.startOffset):this.setStartOffset(this.endOffset)}cloneContents(){return G(this,ce,Be).call(this).cloneContents()}cloneRange(){return new Xe(B(this,pe),this.startOffset,this.endOffset)}getBoundingClientRect(){return G(this,ce,Be).call(this).getBoundingClientRect()}getClientRects(){return G(this,ce,Be).call(this).getClientRects()}toString(){return G(this,ce,Be).call(this).toString()}getStyleClone(){return B(this,ce,gt)}};pe=new WeakMap,Ie=new WeakMap,Me=new WeakMap,ce=new WeakSet,gt=function(){return Je.for(B(this,pe))},qt=function(){return B(this,ce,gt)},ft=function(e){return Math.max(0,Math.min(e,B(this,pe).value.length))},Be=function(){const e=document.createRange(),n=B(this,ce,qt).childNodes[0];return n&&(e.setStart(n,this.startOffset),e.setEnd(n,this.endOffset)),e};let mt=Xe;const qe=new WeakMap;class Pn{constructor(e,n){this.expander=e,this.input=n,this.combobox=null,this.menu=null,this.match=null,this.justPasted=!1,this.lookBackIndex=0,this.oninput=this.onInput.bind(this),this.onpaste=this.onPaste.bind(this),this.onkeydown=this.onKeydown.bind(this),this.oncommit=this.onCommit.bind(this),this.onmousedown=this.onMousedown.bind(this),this.onblur=this.onBlur.bind(this),this.interactingWithList=!1,n.addEventListener("paste",this.onpaste),n.addEventListener("input",this.oninput),n.addEventListener("keydown",this.onkeydown),n.addEventListener("blur",this.onblur)}destroy(){this.input.removeEventListener("paste",this.onpaste),this.input.removeEventListener("input",this.oninput),this.input.removeEventListener("keydown",this.onkeydown),this.input.removeEventListener("blur",this.onblur)}dismissMenu(){this.deactivate()&&(this.lookBackIndex=this.input.selectionEnd||this.lookBackIndex)}activate(e,n){var a,r;this.input!==document.activeElement&&this.input!==((r=(a=document.activeElement)===null||a===void 0?void 0:a.shadowRoot)===null||r===void 0?void 0:r.activeElement)||(this.deactivate(),this.menu=n,n.id||(n.id=`text-expander-${Math.floor(Math.random()*1e5).toString()}`),this.expander.append(n),this.combobox=new Sn(this.input,n),this.expander.dispatchEvent(new Event("text-expander-activate")),this.positionMenu(n,e.position),this.combobox.start(),n.addEventListener("combobox-commit",this.oncommit),n.addEventListener("mousedown",this.onmousedown),this.combobox.navigate(1))}positionMenu(e,n){const a=new mt(this.input,n).getBoundingClientRect(),r={left:a.left,top:a.top+a.height},m=e.getBoundingClientRect(),u={left:r.left-m.left,top:r.top-m.top};if(u.left!==0||u.top!==0){const v=getComputedStyle(e);e.style.left=v.left?`calc(${v.left} + ${u.left}px)`:`${u.left}px`,e.style.top=v.top?`calc(${v.top} + ${u.top}px)`:`${u.top}px`}}deactivate(){const e=this.menu;return!e||!this.combobox?!1:(this.expander.dispatchEvent(new Event("text-expander-deactivate")),this.menu=null,e.removeEventListener("combobox-commit",this.oncommit),e.removeEventListener("mousedown",this.onmousedown),this.combobox.destroy(),this.combobox=null,e.remove(),!0)}onCommit({target:e}){var n;const a=e;if(!(a instanceof HTMLElement)||!this.combobox)return;const r=this.match;if(!r)return;const m=this.input.value.substring(0,r.position-r.key.length),u=this.input.value.substring(r.position+r.text.length),v={item:a,key:r.key,value:null,continue:!1};if(!this.expander.dispatchEvent(new CustomEvent("text-expander-value",{cancelable:!0,detail:v}))||!v.value)return;let R=(n=this.expander.getAttribute("suffix"))!==null&&n!==void 0?n:" ";v.continue&&(R="");const C=`${v.value}${R}`;this.input.value=m+C+u;const k=m.length+C.length;this.deactivate(),this.input.focus({preventScroll:!0}),this.input.selectionStart=k,this.input.selectionEnd=k,v.continue||(this.lookBackIndex=k,this.match=null),this.expander.dispatchEvent(new CustomEvent("text-expander-committed",{cancelable:!1,detail:{input:this.input}}))}onBlur(){if(this.interactingWithList){this.interactingWithList=!1;return}this.deactivate()}onPaste(){this.justPasted=!0}async onInput(){if(this.justPasted){this.justPasted=!1;return}const e=this.findMatch();if(e){this.match=e;const n=await this.notifyProviders(e);if(!this.match)return;n?this.activate(e,n):this.deactivate()}else this.match=null,this.deactivate()}findMatch(){const e=this.input.selectionEnd||0,n=this.input.value;e<=this.lookBackIndex&&(this.lookBackIndex=e-1);for(const{key:a,multiWord:r}of this.expander.keys){const m=_n(n,a,e,{multiWord:r,lookBackIndex:this.lookBackIndex,lastMatchPosition:this.match?this.match.position:null});if(m)return{text:m.text,key:a,position:m.position}}}async notifyProviders(e){const n=[],a=v=>n.push(v);return this.expander.dispatchEvent(new CustomEvent("text-expander-change",{cancelable:!0,detail:{provide:a,text:e.text,key:e.key}}))?(await Promise.all(n)).filter(v=>v.matched).map(v=>v.fragment)[0]:void 0}onMousedown(){this.interactingWithList=!0}onKeydown(e){e.key==="Escape"&&(this.match=null,this.deactivate()&&(this.lookBackIndex=this.input.selectionEnd||this.lookBackIndex,e.stopImmediatePropagation(),e.preventDefault()))}}class Tt extends HTMLElement{get keys(){const e=this.getAttribute("keys"),n=e?e.split(" "):[],a=this.getAttribute("multiword"),r=a?a.split(" "):[],m=r.length===0&&this.hasAttribute("multiword");return n.map(u=>({key:u,multiWord:m||r.includes(u)}))}connectedCallback(){const e=this.querySelector('input[type="text"], textarea');if(!(e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement))return;const n=new Pn(this,e);qe.set(this,n)}disconnectedCallback(){const e=qe.get(this);e&&(e.destroy(),qe.delete(this))}dismiss(){const e=qe.get(this);e&&e.dismissMenu()}}window.customElements.get("text-expander")||(window.TextExpanderElement=Tt,window.customElements.define("text-expander",Tt));function On({onlyFirst:s=!1}={}){const e=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(e,s?void 0:"g")}const Hn=On();function Nn(s){if(typeof s!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof s}\``);return s.replace(Hn,"")}const Un=new Intl.Segmenter;function Bt(s,{countAnsiEscapeCodes:e=!1}={}){if(s===""||(e||(s=Nn(s)),s===""))return 0;let n=0;for(const a of Un.segment(s))n++;return n}const Wn="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",yt=[["aa","Afar","Afaraf"],["ab","Abkhaz","аҧсуа бызшәа"],["ae","Avestan","avesta"],["af","Afrikaans","Afrikaans"],["ak","Akan","Akan"],["am","Amharic","አማርኛ"],["an","Aragonese","aragonés"],["ar","Arabic","اللغة العربية"],["as","Assamese","অসমীয়া"],["av","Avaric","авар мацӀ"],["ay","Aymara","aymar aru"],["az","Azerbaijani","azərbaycan dili"],["ba","Bashkir","башҡорт теле"],["be","Belarusian","беларуская мова"],["bg","Bulgarian","български език"],["bh","Bihari","भोजपुरी"],["bi","Bislama","Bislama"],["bm","Bambara","bamanankan"],["bn","Bengali","বাংলা"],["bo","Tibetan","བོད་ཡིག"],["br","Breton","brezhoneg"],["bs","Bosnian","bosanski jezik"],["ca","Catalan","Català"],["ce","Chechen","нохчийн мотт"],["ch","Chamorro","Chamoru"],["co","Corsican","corsu"],["cr","Cree","ᓀᐦᐃᔭᐍᐏᐣ"],["cs","Czech","čeština"],["cu","Old Church Slavonic","ѩзыкъ словѣньскъ"],["cv","Chuvash","чӑваш чӗлхи"],["cy","Welsh","Cymraeg"],["da","Danish","dansk"],["de","German","Deutsch"],["dv","Divehi","Dhivehi"],["dz","Dzongkha","རྫོང་ཁ"],["ee","Ewe","Eʋegbe"],["el","Greek","Ελληνικά"],["en","English","English"],["eo","Esperanto","Esperanto"],["es","Spanish","Español"],["et","Estonian","eesti"],["eu","Basque","euskara"],["fa","Persian","فارسی"],["ff","Fula","Fulfulde"],["fi","Finnish","suomi"],["fj","Fijian","Vakaviti"],["fo","Faroese","føroyskt"],["fr","French","Français"],["fy","Western Frisian","Frysk"],["ga","Irish","Gaeilge"],["gd","Scottish Gaelic","Gàidhlig"],["gl","Galician","galego"],["gu","Gujarati","ગુજરાતી"],["gv","Manx","Gaelg"],["ha","Hausa","هَوُسَ"],["he","Hebrew","עברית"],["hi","Hindi","हिन्दी"],["ho","Hiri Motu","Hiri Motu"],["hr","Croatian","Hrvatski"],["ht","Haitian","Kreyòl ayisyen"],["hu","Hungarian","magyar"],["hy","Armenian","Հայերեն"],["hz","Herero","Otjiherero"],["ia","Interlingua","Interlingua"],["id","Indonesian","Bahasa Indonesia"],["ie","Interlingue","Interlingue"],["ig","Igbo","Asụsụ Igbo"],["ii","Nuosu","ꆈꌠ꒿ Nuosuhxop"],["ik","Inupiaq","Iñupiaq"],["io","Ido","Ido"],["is","Icelandic","Íslenska"],["it","Italian","Italiano"],["iu","Inuktitut","ᐃᓄᒃᑎᑐᑦ"],["ja","Japanese","日本語"],["jv","Javanese","basa Jawa"],["ka","Georgian","ქართული"],["kg","Kongo","Kikongo"],["ki","Kikuyu","Gĩkũyũ"],["kj","Kwanyama","Kuanyama"],["kk","Kazakh","қазақ тілі"],["kl","Kalaallisut","kalaallisut"],["km","Khmer","ខេមរភាសា"],["kn","Kannada","ಕನ್ನಡ"],["ko","Korean","한국어"],["kr","Kanuri","Kanuri"],["ks","Kashmiri","कश्मीरी"],["ku","Kurmanji (Kurdish)","Kurmancî"],["kv","Komi","коми кыв"],["kw","Cornish","Kernewek"],["ky","Kyrgyz","Кыргызча"],["la","Latin","latine"],["lb","Luxembourgish","Lëtzebuergesch"],["lg","Ganda","Luganda"],["li","Limburgish","Limburgs"],["ln","Lingala","Lingála"],["lo","Lao","ລາວ"],["lt","Lithuanian","lietuvių kalba"],["lu","Luba-Katanga","Tshiluba"],["lv","Latvian","latviešu valoda"],["mg","Malagasy","fiteny malagasy"],["mh","Marshallese","Kajin M̧ajeļ"],["mi","Māori","te reo Māori"],["mk","Macedonian","македонски јазик"],["ml","Malayalam","മലയാളം"],["mn","Mongolian","Монгол хэл"],["mr","Marathi","मराठी"],["ms","Malay","Bahasa Melayu"],["mt","Maltese","Malti"],["my","Burmese","ဗမာစာ"],["na","Nauru","Ekakairũ Naoero"],["nb","Norwegian Bokmål","Norsk bokmål"],["nd","Northern Ndebele","isiNdebele"],["ne","Nepali","नेपाली"],["ng","Ndonga","Owambo"],["nl","Dutch","Nederlands"],["nn","Norwegian Nynorsk","Norsk Nynorsk"],["no","Norwegian","Norsk"],["nr","Southern Ndebele","isiNdebele"],["nv","Navajo","Diné bizaad"],["ny","Chichewa","chiCheŵa"],["oc","Occitan","occitan"],["oj","Ojibwe","ᐊᓂᔑᓈᐯᒧᐎᓐ"],["om","Oromo","Afaan Oromoo"],["or","Oriya","ଓଡ଼ିଆ"],["os","Ossetian","ирон æвзаг"],["pa","Panjabi","ਪੰਜਾਬੀ"],["pi","Pāli","पाऴि"],["pl","Polish","Polski"],["ps","Pashto","پښتو"],["pt","Portuguese","Português"],["qu","Quechua","Runa Simi"],["rm","Romansh","rumantsch grischun"],["rn","Kirundi","Ikirundi"],["ro","Romanian","Română"],["ru","Russian","Русский"],["rw","Kinyarwanda","Ikinyarwanda"],["sa","Sanskrit","संस्कृतम्"],["sc","Sardinian","sardu"],["sd","Sindhi","सिन्धी"],["se","Northern Sami","Davvisámegiella"],["sg","Sango","yângâ tî sängö"],["si","Sinhala","සිංහල"],["sk","Slovak","slovenčina"],["sl","Slovenian","slovenščina"],["sn","Shona","chiShona"],["so","Somali","Soomaaliga"],["sq","Albanian","Shqip"],["sr","Serbian","српски језик"],["ss","Swati","SiSwati"],["st","Southern Sotho","Sesotho"],["su","Sundanese","Basa Sunda"],["sv","Swedish","Svenska"],["sw","Swahili","Kiswahili"],["ta","Tamil","தமிழ்"],["te","Telugu","తెలుగు"],["tg","Tajik","тоҷикӣ"],["th","Thai","ไทย"],["ti","Tigrinya","ትግርኛ"],["tk","Turkmen","Türkmen"],["tl","Tagalog","Wikang Tagalog"],["tn","Tswana","Setswana"],["to","Tonga","faka Tonga"],["tr","Turkish","Türkçe"],["ts","Tsonga","Xitsonga"],["tt","Tatar","татар теле"],["tw","Twi","Twi"],["ty","Tahitian","Reo Tahiti"],["ug","Uyghur","ئۇيغۇرچە‎"],["uk","Ukrainian","Українська"],["ur","Urdu","اردو"],["uz","Uzbek","Ўзбек"],["ve","Venda","Tshivenḓa"],["vi","Vietnamese","Tiếng Việt"],["vo","Volapük","Volapük"],["wa","Walloon","walon"],["wo","Wolof","Wollof"],["xh","Xhosa","isiXhosa"],["yi","Yiddish","ייִדיש"],["yo","Yoruba","Yorùbá"],["za","Zhuang","Saɯ cueŋƅ"],["zh","Chinese","中文"],["zu","Zulu","isiZulu"],["zh-CN","Chinese (China)","简体中文"],["zh-HK","Chinese (Hong Kong)","繁體中文(香港)"],["zh-TW","Chinese (Taiwan)","繁體中文(臺灣)"],["zh-YUE","Cantonese","廣東話"],["ast","Asturian","Asturianu"],["chr","Cherokee","ᏣᎳᎩ ᎦᏬᏂᎯᏍᏗ"],["ckb","Sorani (Kurdish)","سۆرانی"],["cnr","Montenegrin","crnogorski"],["jbo","Lojban","la .lojban."],["kab","Kabyle","Taqbaylit"],["ldn","Láadan","Láadan"],["lfn","Lingua Franca Nova","lingua franca nova"],["sco","Scots","Scots"],["sma","Southern Sami","Åarjelsaemien Gïele"],["smj","Lule Sami","Julevsámegiella"],["szl","Silesian","ślůnsko godka"],["tok","Toki Pona","toki pona"],["xal","Kalmyk","Хальмг келн"],["zba","Balaibalan","باليبلن"],["zgh","Standard Moroccan Tamazight","ⵜⴰⵎⴰⵣⵉⵖⵜ"]],qn="(((?:[^A-Za-z0-9@@$##\\uFFFE\\uFEFF\\uFFFF]|[\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069]|^))((https?:\\/\\/)((?:(?:(?:[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/](?:[_-]|[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/])*)?[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/]\\.)*(?:(?:[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/](?:-|[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/])*)?[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/]\\.)(?:(?:(?:삼성|닷컴|닷넷|香格里拉|餐厅|食品|飞利浦|電訊盈科|集团|通販|购物|谷歌|诺基亚|联通|网络|网站|网店|网址|组织机构|移动|珠宝|点看|游戏|淡马锡|机构|書籍|时尚|新闻|政府|政务|招聘|手表|手机|我爱你|慈善|微博|广东|工行|家電|娱乐|天主教|大拿|大众汽车|在线|嘉里大酒店|嘉里|商标|商店|商城|公益|公司|八卦|健康|信息|佛山|企业|中文网|中信|世界|ポイント|ファッション|セール|ストア|コム|グーグル|クラウド|みんな|คอม|संगठन|नेट|कॉम|همراه|موقع|موبايلي|كوم|كاثوليك|عرب|شبكة|بيتك|بازار|العليان|ارامكو|اتصالات|ابوظبي|קום|сайт|рус|орг|онлайн|москва|ком|католик|дети|zuerich|zone|zippo|zip|zero|zara|zappos|yun|youtube|you|yokohama|yoga|yodobashi|yandex|yamaxun|yahoo|yachts|xyz|xxx|xperia|xin|xihuan|xfinity|xerox|xbox|wtf|wtc|wow|world|works|work|woodside|wolterskluwer|wme|winners|wine|windows|win|williamhill|wiki|wien|whoswho|weir|weibo|wedding|wed|website|weber|webcam|weatherchannel|weather|watches|watch|warman|wanggou|wang|walter|walmart|wales|vuelos|voyage|voto|voting|vote|volvo|volkswagen|vodka|vlaanderen|vivo|viva|vistaprint|vista|vision|visa|virgin|vip|vin|villas|viking|vig|video|viajes|vet|versicherung|vermögensberatung|vermögensberater|verisign|ventures|vegas|vanguard|vana|vacations|ups|uol|uno|university|unicom|uconnect|ubs|ubank|tvs|tushu|tunes|tui|tube|trv|trust|travelersinsurance|travelers|travelchannel|travel|training|trading|trade|toys|toyota|town|tours|total|toshiba|toray|top|tools|tokyo|today|tmall|tkmaxx|tjx|tjmaxx|tirol|tires|tips|tiffany|tienda|tickets|tiaa|theatre|theater|thd|teva|tennis|temasek|telefonica|telecity|tel|technology|tech|team|tdk|tci|taxi|tax|tattoo|tatar|tatamotors|target|taobao|talk|taipei|tab|systems|symantec|sydney|swiss|swiftcover|swatch|suzuki|surgery|surf|support|supply|supplies|sucks|style|study|studio|stream|store|storage|stockholm|stcgroup|stc|statoil|statefarm|statebank|starhub|star|staples|stada|srt|srl|spreadbetting|spot|sport|spiegel|space|soy|sony|song|solutions|solar|sohu|software|softbank|social|soccer|sncf|smile|smart|sling|skype|sky|skin|ski|site|singles|sina|silk|shriram|showtime|show|shouji|shopping|shop|shoes|shiksha|shia|shell|shaw|sharp|shangrila|sfr|sexy|sex|sew|seven|ses|services|sener|select|seek|security|secure|seat|search|scot|scor|scjohnson|science|schwarz|schule|school|scholarships|schmidt|schaeffler|scb|sca|sbs|sbi|saxo|save|sas|sarl|sapo|sap|sanofi|sandvikcoromant|sandvik|samsung|samsclub|salon|sale|sakura|safety|safe|saarland|ryukyu|rwe|run|ruhr|rugby|rsvp|room|rogers|rodeo|rocks|rocher|rmit|rip|rio|ril|rightathome|ricoh|richardli|rich|rexroth|reviews|review|restaurant|rest|republican|report|repair|rentals|rent|ren|reliance|reit|reisen|reise|rehab|redumbrella|redstone|red|recipes|realty|realtor|realestate|read|raid|radio|racing|qvc|quest|quebec|qpon|pwc|pub|prudential|pru|protection|property|properties|promo|progressive|prof|productions|prod|pro|prime|press|praxi|pramerica|post|porn|politie|poker|pohl|pnc|plus|plumbing|playstation|play|place|pizza|pioneer|pink|ping|pin|pid|pictures|pictet|pics|piaget|physio|photos|photography|photo|phone|philips|phd|pharmacy|pfizer|pet|pccw|pay|passagens|party|parts|partners|pars|paris|panerai|panasonic|pamperedchef|page|ovh|ott|otsuka|osaka|origins|orientexpress|organic|org|orange|oracle|open|ooo|onyourside|online|onl|ong|one|omega|ollo|oldnavy|olayangroup|olayan|okinawa|office|off|observer|obi|nyc|ntt|nrw|nra|nowtv|nowruz|now|norton|northwesternmutual|nokia|nissay|nissan|ninja|nikon|nike|nico|nhk|ngo|nfl|nexus|nextdirect|next|news|newholland|new|neustar|network|netflix|netbank|net|nec|nba|navy|natura|nationwide|name|nagoya|nadex|nab|mutuelle|mutual|museum|mtr|mtpc|mtn|msd|movistar|movie|mov|motorcycles|moto|moscow|mortgage|mormon|mopar|montblanc|monster|money|monash|mom|moi|moe|moda|mobily|mobile|mobi|mma|mls|mlb|mitsubishi|mit|mint|mini|mil|microsoft|miami|metlife|merckmsd|meo|menu|men|memorial|meme|melbourne|meet|media|med|mckinsey|mcdonalds|mcd|mba|mattel|maserati|marshalls|marriott|markets|marketing|market|map|mango|management|man|makeup|maison|maif|madrid|macys|luxury|luxe|lupin|lundbeck|ltda|ltd|lplfinancial|lpl|love|lotto|lotte|london|lol|loft|locus|locker|loans|loan|llp|llc|lixil|living|live|lipsy|link|linde|lincoln|limo|limited|lilly|like|lighting|lifestyle|lifeinsurance|life|lidl|liaison|lgbt|lexus|lego|legal|lefrak|leclerc|lease|lds|lawyer|law|latrobe|latino|lat|lasalle|lanxess|landrover|land|lancome|lancia|lancaster|lamer|lamborghini|ladbrokes|lacaixa|kyoto|kuokgroup|kred|krd|kpn|kpmg|kosher|komatsu|koeln|kiwi|kitchen|kindle|kinder|kim|kia|kfh|kerryproperties|kerrylogistics|kerryhotels|kddi|kaufen|juniper|juegos|jprs|jpmorgan|joy|jot|joburg|jobs|jnj|jmp|jll|jlc|jio|jewelry|jetzt|jeep|jcp|jcb|java|jaguar|iwc|iveco|itv|itau|istanbul|ist|ismaili|iselect|irish|ipiranga|investments|intuit|international|intel|int|insure|insurance|institute|ink|ing|info|infiniti|industries|inc|immobilien|immo|imdb|imamat|ikano|iinet|ifm|ieee|icu|ice|icbc|ibm|hyundai|hyatt|hughes|htc|hsbc|how|house|hotmail|hotels|hoteles|hot|hosting|host|hospital|horse|honeywell|honda|homesense|homes|homegoods|homedepot|holiday|holdings|hockey|hkt|hiv|hitachi|hisamitsu|hiphop|hgtv|hermes|here|helsinki|help|healthcare|health|hdfcbank|hdfc|hbo|haus|hangout|hamburg|hair|guru|guitars|guide|guge|gucci|guardian|group|grocery|gripe|green|gratis|graphics|grainger|gov|got|gop|google|goog|goodyear|goodhands|goo|golf|goldpoint|gold|godaddy|gmx|gmo|gmbh|gmail|globo|global|gle|glass|glade|giving|gives|gifts|gift|ggee|george|genting|gent|gea|gdn|gbiz|gay|garden|gap|games|game|gallup|gallo|gallery|gal|fyi|futbol|furniture|fund|fun|fujixerox|fujitsu|ftr|frontier|frontdoor|frogans|frl|fresenius|free|fox|foundation|forum|forsale|forex|ford|football|foodnetwork|food|foo|fly|flsmidth|flowers|florist|flir|flights|flickr|fitness|fit|fishing|fish|firmdale|firestone|fire|financial|finance|final|film|fido|fidelity|fiat|ferrero|ferrari|feedback|fedex|fast|fashion|farmers|farm|fans|fan|family|faith|fairwinds|fail|fage|extraspace|express|exposed|expert|exchange|everbank|events|eus|eurovision|etisalat|esurance|estate|esq|erni|ericsson|equipment|epson|epost|enterprises|engineering|engineer|energy|emerck|email|education|edu|edeka|eco|eat|earth|dvr|dvag|durban|dupont|duns|dunlop|duck|dubai|dtv|drive|download|dot|doosan|domains|doha|dog|dodge|doctor|docs|dnp|diy|dish|discover|discount|directory|direct|digital|diet|diamonds|dhl|dev|design|desi|dentist|dental|democrat|delta|deloitte|dell|delivery|degree|deals|dealer|deal|dds|dclk|day|datsun|dating|date|data|dance|dad|dabur|cyou|cymru|cuisinella|csc|cruises|cruise|crs|crown|cricket|creditunion|creditcard|credit|cpa|courses|coupons|coupon|country|corsica|coop|cool|cookingchannel|cooking|contractors|contact|consulting|construction|condos|comsec|computer|compare|company|community|commbank|comcast|com|cologne|college|coffee|codes|coach|clubmed|club|cloud|clothing|clinique|clinic|click|cleaning|claims|cityeats|city|citic|citi|citadel|cisco|circle|cipriani|church|chrysler|chrome|christmas|chloe|chintai|cheap|chat|chase|charity|channel|chanel|cfd|cfa|cern|ceo|center|ceb|cbs|cbre|cbn|cba|catholic|catering|cat|casino|cash|caseih|case|casa|cartier|cars|careers|career|care|cards|caravan|car|capitalone|capital|capetown|canon|cancerresearch|camp|camera|cam|calvinklein|call|cal|cafe|cab|bzh|buzz|buy|business|builders|build|bugatti|budapest|brussels|brother|broker|broadway|bridgestone|bradesco|box|boutique|bot|boston|bostik|bosch|boots|booking|book|boo|bond|bom|bofa|boehringer|boats|bnpparibas|bnl|bmw|bms|blue|bloomberg|blog|blockbuster|blanco|blackfriday|black|biz|bio|bingo|bing|bike|bid|bible|bharti|bet|bestbuy|best|berlin|bentley|beer|beauty|beats|bcn|bcg|bbva|bbt|bbc|bayern|bauhaus|basketball|baseball|bargains|barefoot|barclays|barclaycard|barcelona|bar|bank|band|bananarepublic|banamex|baidu|baby|azure|axa|aws|avianca|autos|auto|author|auspost|audio|audible|audi|auction|attorney|athleta|associates|asia|asda|arte|art|arpa|army|archi|aramco|arab|aquarelle|apple|app|apartments|aol|anz|anquan|android|analytics|amsterdam|amica|amfam|amex|americanfamily|americanexpress|alstom|alsace|ally|allstate|allfinanz|alipay|alibaba|alfaromeo|akdn|airtel|airforce|airbus|aigo|aig|agency|agakhan|africa|afl|afamilycompany|aetna|aero|aeg|adult|ads|adac|actor|active|aco|accountants|accountant|accenture|academy|abudhabi|abogado|able|abc|abbvie|abbott|abb|abarth|aarp|aaa|onion)(?=[^0-9a-zA-Z@+-]|$))|(?:(?:한국|香港|澳門|新加坡|台灣|台湾|中國|中国|გე|ລາວ|ไทย|ලංකා|ഭാരതം|ಭಾರತ|భారత్|சிங்கப்பூர்|இலங்கை|இந்தியா|ଭାରତ|ભારત|ਭਾਰਤ|ভাৰত|ভারত|বাংলা|भारोत|भारतम्|भारत|ڀارت|پاکستان|موريتانيا|مليسيا|مصر|قطر|فلسطين|عمان|عراق|سورية|سودان|تونس|بھارت|بارت|ایران|امارات|المغرب|السعودية|الجزائر|البحرين|الاردن|հայ|қаз|укр|срб|рф|мон|мкд|ею|бел|бг|ευ|ελ|zw|zm|za|yt|ye|ws|wf|vu|vn|vi|vg|ve|vc|va|uz|uy|us|um|uk|ug|ua|tz|tw|tv|tt|tr|tp|to|tn|tm|tl|tk|tj|th|tg|tf|td|tc|sz|sy|sx|sv|su|st|ss|sr|so|sn|sm|sl|sk|sj|si|sh|sg|se|sd|sc|sb|sa|rw|ru|rs|ro|re|qa|py|pw|pt|ps|pr|pn|pm|pl|pk|ph|pg|pf|pe|pa|om|nz|nu|nr|np|no|nl|ni|ng|nf|ne|nc|na|mz|my|mx|mw|mv|mu|mt|ms|mr|mq|mp|mo|mn|mm|ml|mk|mh|mg|mf|me|md|mc|ma|ly|lv|lu|lt|ls|lr|lk|li|lc|lb|la|kz|ky|kw|kr|kp|kn|km|ki|kh|kg|ke|jp|jo|jm|je|it|is|ir|iq|io|in|im|il|ie|id|hu|ht|hr|hn|hm|hk|gy|gw|gu|gt|gs|gr|gq|gp|gn|gm|gl|gi|gh|gg|gf|ge|gd|gb|ga|fr|fo|fm|fk|fj|fi|eu|et|es|er|eh|eg|ee|ec|dz|do|dm|dk|dj|de|cz|cy|cx|cw|cv|cu|cr|co|cn|cm|cl|ck|ci|ch|cg|cf|cd|cc|ca|bz|by|bw|bv|bt|bs|br|bq|bo|bn|bm|bl|bj|bi|bh|bg|bf|be|bd|bb|ba|az|ax|aw|au|at|as|ar|aq|ao|an|am|al|ai|ag|af|ae|ad|ac)(?=[^0-9a-zA-Z@+-]|$))|(?:xn--[\\-0-9a-z]+))))(?::([0-9]+))?(\\/(?:(?:[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*(?:\\((?:[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]+|(?:[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*\\([a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]+\\)[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*))\\)[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*)*[\\+\\-a-z\\u0400-\\u04FF0-9=_#\\/\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]|(?:\\((?:[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]+|(?:[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*\\([a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]+\\)[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*))\\)))|(?:@[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]+\\/))*)?(\\?[a-z0-9!?\\*'@\\(\\);:&=\\+\\$\\/%#\\[\\]\\-_\\.,~|]*[a-z0-9\\-_&=#\\/])?))",Kn="gi",_t={source:qn,flags:Kn};var Vn={BASE_URL:"./",DEV:!1,MODE:"production",PHANPY_CLIENT_NAME:"Phanpy",PHANPY_LINGVA_INSTANCES:"lingva.phanpy.social lingva.lunar.icu lingva.garudalinux.org translate.plausibility.cloud",PHANPY_PRIVACY_POLICY_URL:"https://github.com/cheeaun/phanpy/blob/main/PRIVACY.MD",PHANPY_WEBSITE:"https://phanpy.social",PROD:!0,SSR:!1,VITE_APP_ENV:"production"};const{PHANPY_IMG_ALT_API_URL:ut,PHANPY_GIPHY_API_KEY:Gn}=Vn,Yn=yt.reduce((s,e)=>{const[n,a,r]=e;return s[n]={common:a,native:r},s},{}),Kt={"5 minutes":5*60,"30 minutes":30*60,"1 hour":60*60,"6 hours":6*60*60,"12 hours":12*60*60,"1 day":24*60*60,"3 days":3*24*60*60,"7 days":7*24*60*60},Zn=Object.values(Kt),Rt=24*60*60,Dt=s=>{if(!s)return Rt;const e=(new Date(s).getTime()-Date.now())/1e3;return Zn.find(n=>n>=e)||Rt},ye=document.createElement("ul");ye.role="listbox";ye.className="text-expander-menu";const Jn=16,Xn=new IntersectionObserver(s=>{s.forEach(e=>{if(e.isIntersecting){const{left:n,width:a}=e.boundingClientRect,{innerWidth:r}=window;if(n+a>r){const m=on()?"right":"left";ye.style[m]=r-a-Jn+"px"}}})});Xn.observe(ye);const we=rn([new Intl.DateTimeFormat().resolvedOptions().locale,...navigator.languages],yt.map(s=>s[0]),"en"),Vt=new RegExp(_t.source,_t.flags),Qn=/(^|[^\/\w])@(([a-z0-9_]+)@[a-z0-9\.\-]+[a-z0-9]+)/gi,ei="$2xxxxxxxxxxxxxxxxxxxxxxx";function ti(s){return s.replace(Vt,ei).replace(Qn,"$1@$3")}const ni=/[a-z0-9_]+([a-z0-9_.-]+[a-z0-9_]+)?/i,ii=new RegExp(`(^|[^=\\/\\w])(@${ni.source}(?:@[\\p{L}\\w.-]+[\\w]+)?)`,"uig"),si=new RegExp("(^|[^=\\/\\w])(#[a-z0-9_]+([a-z0-9_.]+[a-z0-9_]+)?)(?![\\/\\w])","ig"),ai="[a-zA-Z0-9_]{2,}",oi=new RegExp(`(^|[^=\\/\\w])(:${ai}:)(?=[^A-Za-z0-9_:]|$)`,"g"),ri=new Intl.Segmenter;function dt(s){return s.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function li(s,{maxCharacters:e=1/0}){const{composerCharacterCount:n}=le;if(n>e){let a="",r="";const m=ri.segment(s);for(const{segment:u,index:v}of m)v"),dt(a)+r}return dt(s).replace(Vt,'$2$3').replace(ii,'$1$2').replace(si,'$1$2').replace(oi,'$1$2')}const ci=new Intl.RelativeTimeFormat,vt=100;function Ci({onClose:s,replyToStatus:e,editStatus:n,draftStatus:a,standalone:r,hasOpener:m}){var Ct;const{masto:u,instance:v}=bt(),[g,R]=H("default"),C=W((a==null?void 0:a.uid)||ln()),k=xn(),z=k.info,Z=Ut(),{statuses:{maxCharacters:D,maxMediaAttachments:I,charactersReservedPerUrl:se}={},mediaAttachments:{supportedMimeTypes:J=[],imageSizeLimit:c,imageMatrixLimit:h,videoSizeLimit:p,videoMatrixLimit:f,videoFrameRateLimit:E}={},polls:{maxOptions:y,maxCharactersPerOption:T,maxExpiration:q,minExpiration:ue}={}}=Z||{},S=W(),X=W(),[V,U]=H("public"),[j,te]=H(!1),[O,ie]=H(Le.session.get("currentLanguage")||we),ae=W(O),[M,A]=H([]),[$,L]=H(null),N=Le.account.get("preferences")||{},Q=()=>{S.current&&S.current.dispatchEvent(new Event("input"))},oe=()=>{setTimeout(()=>{var o,l,b;S.current&&((l=(o=a==null?void 0:a.status)==null?void 0:o.startsWith)!=null&&l.call(o,` -`)&&(S.current.selectionStart=0,S.current.selectionEnd=0),(b=S.current)==null||b.focus())},300)};ee(()=>{if(e){const{spoilerText:o,visibility:l,language:b,sensitive:d}=e;o&&X.current&&(X.current.value=o);const x=[...new Set([e.account.acct,...e.mentions.map(w=>w.acct)])].filter(w=>w!==z.acct);x.length>0&&(S.current.value=`${x.map(w=>`@${w}`).join(" ")} `,Q()),oe(),U(l==="public"&&N["posting:default:visibility"]?N["posting:default:visibility"]:l),ie(b||N.postingDefaultLanguage||we),te(d&&!!o)}else if(n){const{visibility:o,language:l,sensitive:b,poll:d,mediaAttachments:_}=n,x=!!(d!=null&&d.options)&&{...d,options:d.options.map(w=>(w==null?void 0:w.title)||w),expiresIn:(d==null?void 0:d.expiresIn)||Dt(d.expiresAt)};R("loading"),(async()=>{try{const w=await u.v1.statuses.$select(n.id).source.fetch(),{text:F,spoilerText:P}=w;S.current.value=F,S.current.dataset.source=F,Q(),oe(),X.current.value=P,U(o),ie(l||presf.postingDefaultLanguage||we),te(b),x&&L(x),A(_),R("default")}catch(w){alert((w==null?void 0:w.reason)||w),R("error")}})()}else oe(),N["posting:default:visibility"]&&U(N["posting:default:visibility"]),N["posting:default:language"]&&ie(N["posting:default:language"]),N["posting:default:sensitive"]&&te(N["posting:default:sensitive"]);if(a){const{status:o,spoilerText:l,visibility:b,language:d,sensitive:_,poll:x,mediaAttachments:w}=a,F=!!(x!=null&&x.options)&&{...x,options:x.options.map(P=>(P==null?void 0:P.title)||P),expiresIn:(x==null?void 0:x.expiresIn)||Dt(x.expiresAt)};S.current.value=o,Q(),oe(),l&&(X.current.value=l),b&&U(b),ie(d||N.postingDefaultLanguage||we),_!==null&&te(_),F&&L(F),w&&A(w)}},[a,n,e]);const he=W(),ve="You have unsaved changes. Discard this post?",xe=()=>{const{value:o,dataset:l}=S.current;if(g==="loading")return!1;const b=(o||"").trim().replace(new RegExp("^\\p{White_Space}+|\\p{White_Space}+$","gu"),""),d=M.length>0;if(!b&&!d||M.length>0&&M.every(P=>P.id))return!0;const x=(e==null?void 0:e.account.id)===z.id,w=e&&o.trim()===`@${e.account.acct}`;return!!(!x&&w||o===(l==null?void 0:l.source))},Oe=()=>xe()?!0:confirm(ve);ee(()=>{const o=l=>{xe()||(l.preventDefault(),l.returnValue=ve)};return window.addEventListener("beforeunload",o,{capture:!0}),()=>window.removeEventListener("beforeunload",o,{capture:!0})},[]);const Zt=()=>{const{value:o}=S.current,{value:l}=X.current;return Bt(ti(o))+Bt(l)},tt=()=>{const o=Zt();le.composerCharacterCount=o};ee(tt,[]);const wt=window.CloseWatcher,nt=W(!1);_e("esc",()=>{nt.current=!0},{enabled:!wt,enableOnFormTags:!0}),_e("esc",()=>{!r&&nt.current&&Oe()&&s(),nt.current=!1},{enabled:!wt,enableOnFormTags:!0,keyup:!0,ignoreEventWhen:o=>{const l=document.querySelectorAll("#modal-container > *"),b=!!l,d=l.length===1&&l[0].querySelector("#compose-container");return b&&!d}}),cn(()=>{!r&&Oe()&&s()},[r,Oe,s]);const kt=W({}),Et=()=>`${wn()}#${C.current}`,it=()=>{if(n||le.composerState.minimized)return;const o=Et(),l={key:o,replyTo:e?{id:e.id,account:{id:e.account.id,username:e.account.username,acct:e.account.acct}}:null,draftStatus:{uid:C.current,status:S.current.value,spoilerText:X.current.value,visibility:V,language:O,sensitive:j,poll:$,mediaAttachments:M}};!kn(l,kt.current)&&!xe()&&(zt.drafts.set(o,{...l,state:"unsaved",updatedAt:Date.now()}).then(()=>{}).catch(b=>{}),kt.current=structuredClone(l))};un(it,5e3),ee(()=>(it(),()=>{zt.drafts.del(Et())}),[]),ee(()=>{const o=b=>{const{items:d}=b.clipboardData||b.dataTransfer,_=[];for(let x=0;x0&&M.length>=I){alert(`You can only attach up to ${I} files.`);return}if(_.length>0){b.preventDefault(),b.stopPropagation();const x=I-M.length,w=_.slice(0,x);if(w.length<=0){alert(`You can only attach up to ${I} files.`);return}const F=w.map(P=>({file:P,type:P.type,size:P.size,url:URL.createObjectURL(P),id:null,description:null}));A([...M,...F])}};window.addEventListener("paste",o);const l=b=>{b.dataTransfer.items.length>0&&(b.preventDefault(),b.stopPropagation())};return window.addEventListener("dragover",l),window.addEventListener("drop",o),()=>{window.removeEventListener("paste",o),window.removeEventListener("dragover",l),window.removeEventListener("drop",o)}},[M]);const[He,st]=H(!1),[Ne,Ue]=H(!1),[Jt,at]=H(!1),[me,Xt]=H(null),[Qt,en]=Re(()=>{const o=[],l=[],{contentTranslationHideLanguages:b=[]}=le.settings;return yt.forEach(d=>{const[_]=d;_===O||_===ae.current||_===we||b.includes(_)||me!=null&&me.length&&me.includes(_)?o.push(d):l.push(d)}),o.sort(([d,_],[x,w])=>d===O?-1:x===O?1:_.localeCompare(w)),l.sort(([d,_],[x,w])=>_.localeCompare(w)),[o,l]},[O,me]),Ft=Re(()=>!!(e!=null&&e.createdAt)&&Math.floor((Date.now()-new Date(e.createdAt))/(1e3*60*60*24*30)),[e]),tn=()=>{it(),le.composerState.minimized=!0};return t("div",{id:"compose-container-outer",children:[t("div",{id:"compose-container",class:r?"standalone":"",children:[t("div",{class:"compose-top",children:[(z==null?void 0:z.avatarStatic)&&t(Ht,{account:z,accountInstance:k.instanceURL,hideDisplayName:!0,useAvatarStatic:!0}),r?m&&t("button",{type:"button",class:"light pop-button",disabled:g==="loading",onClick:()=>{var o;if(!window.opener){alert("Looks like you closed the parent window.");return}if(window.opener.__STATES__.showCompose){if((o=window.opener.__STATES__.composerState)!=null&&o.publishing){alert("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.");return}if(!confirm("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?"))return}s({fn:()=>{const l={editStatus:n,replyToStatus:e,draftStatus:{uid:C.current,status:S.current.value,spoilerText:X.current.value,visibility:V,language:O,sensitive:j,poll:$,mediaAttachments:M}};window.opener.__COMPOSE__=l,window.opener.__STATES__.showCompose?(window.opener.__STATES__.showCompose=!1,setTimeout(()=>{window.opener.__STATES__.showCompose=!0},10)):window.opener.__STATES__.showCompose=!0,window.opener.__STATES__.composerState.minimized&&(window.opener.__STATES__.composerState.minimized=!1)}})},children:t(K,{icon:"popin",alt:"Pop in"})}):t("span",{class:"compose-controls",children:[t("button",{type:"button",class:"plain4 pop-button",disabled:g==="loading",onClick:()=>{dn({editStatus:n,replyToStatus:e,draftStatus:{uid:C.current,status:S.current.value,spoilerText:X.current.value,visibility:V,language:O,sensitive:j,poll:$,mediaAttachments:M}})&&s()},children:t(K,{icon:"popout",alt:"Pop out"})}),t("button",{type:"button",class:"plain4 min-button",onClick:tn,children:t(K,{icon:"minimize",alt:"Minimize"})})," ",t("button",{type:"button",class:"light close-button",disabled:g==="loading",onClick:()=>{Oe()&&s()},children:t(K,{icon:"x"})})]})]}),!!e&&t("div",{class:"status-preview",children:[t(St,{status:e,size:"s",previewMode:!0}),t("div",{class:"status-preview-legend reply-to",children:["Replying to @",e.account.acct||e.account.username,"’s post",Ft>=3&&t(Ce,{children:[" ","(",t("strong",{children:ci.format(-Ft,"month")}),")"]})]})]}),!!n&&t("div",{class:"status-preview",children:[t(St,{status:n,size:"s",previewMode:!0}),t("div",{class:"status-preview-legend",children:"Editing source post"})]}),t("form",{ref:he,class:`form-visibility-${V}`,style:{pointerEvents:g==="loading"?"none":"auto",opacity:g==="loading"?.5:1},onKeyDown:o=>{o.key==="Enter"&&(o.ctrlKey||o.metaKey)&&he.current.dispatchEvent(new Event("submit",{cancelable:!0}))},onSubmit:o=>{o.preventDefault();const l=new FormData(o.target),b=Object.fromEntries(l.entries());let{status:d,visibility:_,sensitive:x,spoilerText:w}=b;if(x=x==="on",$){if($.options.length<2){alert("Poll must have at least 2 options");return}if($.options.some(F=>F==="")){alert("Some poll choices are empty");return}}M.length>0&&M.some(P=>{var ne,$e;return!(($e=(ne=P.description)==null?void 0:ne.trim)!=null&&$e.call(ne))})&&!confirm("Some media have no descriptions. Continue?")||(w=x&&w||void 0,d=d===""?void 0:d,le.composerState.publishing=!0,R("loading"),(async()=>{try{if(M.length>0){const ne=M.map(ge=>{const{file:We,description:nn,id:sn}=ge;if(sn)return ge;{const an=Ot({file:We,description:nn});return u.v2.media.create(an).then(ot=>(ot.id&&(ge.id=ot.id),ot))}}),$e=await Promise.allSettled(ne);if($e.some(ge=>{var We;return ge.status==="rejected"||!((We=ge.value)!=null&&We.id)})){le.composerState.publishing=!1,le.composerState.publishingError=!0,R("error"),$e.forEach(ge=>{ge.status==="rejected"&&alert(ge.reason||`Attachment #${i} failed`)});return}}let F={status:d,spoiler_text:w,language:O,sensitive:x,poll:$,media_ids:M.map(ne=>ne.id)};n&&Nt("@mastodon/edit-media-attributes")?F.media_attributes=M.map(ne=>({id:ne.id,description:ne.description})):n||(F.visibility=_,F.in_reply_to_id=(e==null?void 0:e.id)||void 0),F=Ot(F);let P;if(n)P=await u.v1.statuses.$select(n.id).update(F),En(P,v,{skipThreading:!0});else try{P=await u.v1.statuses.create(F,{requestInit:{headers:{"Idempotency-Key":C.current}}})}catch{P=await u.v1.statuses.create(F)}le.composerState.minimized=!1,le.composerState.publishing=!1,R("default"),s({type:n?"edit":e?"reply":"post",newStatus:P,instance:v})}catch(F){le.composerState.publishing=!1,le.composerState.publishingError=!0,alert((F==null?void 0:F.reason)||F),R("error")}})())},children:[t("div",{class:"toolbar stretch",children:[t("input",{ref:X,type:"text",name:"spoilerText",placeholder:"Content warning",disabled:g==="loading",class:"spoiler-text-field",lang:O,spellCheck:"true",dir:"auto",style:{opacity:j?1:0,pointerEvents:j?"auto":"none"},onInput:()=>{tt()}}),t("label",{class:`toolbar-button ${j?"highlight":""}`,title:"Content warning or sensitive media",children:[t("input",{name:"sensitive",type:"checkbox",checked:j,disabled:g==="loading",onChange:o=>{var b,d;const l=o.target.checked;te(l),l?(b=X.current)==null||b.focus():(d=S.current)==null||d.focus()}}),t(K,{icon:`eye-${j?"close":"open"}`})]})," ",t("label",{class:`toolbar-button ${V!=="public"&&!j?"show-field":""} ${V!=="public"?"highlight":""}`,title:`Visibility: ${V}`,children:[t(K,{icon:hn[V],alt:V}),t("select",{name:"visibility",value:V,onChange:o=>{U(o.target.value)},disabled:g==="loading"||!!n,dir:"auto",children:[t("option",{value:"public",children:["Public ",t(K,{icon:"earth"})]}),t("option",{value:"unlisted",children:"Unlisted"}),t("option",{value:"private",children:"Followers only"}),t("option",{value:"direct",children:"Private mention"})]})]})," "]}),t(hi,{ref:S,placeholder:e?"Post your reply":n?"Edit your post":"What are you doing?",required:(M==null?void 0:M.length)===0,disabled:g==="loading",lang:O,onInput:()=>{tt()},maxCharacters:D,performSearch:o=>{const{type:l,q:b,limit:d}=o;return l==="accounts"?u.v1.accounts.search.list({q:b,limit:d,resolve:!1}):u.v2.search.fetch(o)},onTrigger:o=>{(o==null?void 0:o.name)==="custom-emojis"?Ue({defaultSearchTerm:(o==null?void 0:o.defaultSearchTerm)||null}):(o==null?void 0:o.name)==="mention"?st({defaultSearchTerm:(o==null?void 0:o.defaultSearchTerm)||null}):(o==null?void 0:o.name)==="auto-detect-language"&&(o!=null&&o.languages)&&Xt(o.languages)}}),(M==null?void 0:M.length)>0&&t("div",{class:"media-attachments",children:[M.map((o,l)=>{const{id:b,file:d}=o,_=(d==null?void 0:d.size)+(d==null?void 0:d.type)+(d==null?void 0:d.name);return t(mi,{attachment:o,disabled:g==="loading",lang:O,onDescriptionChange:x=>{A(w=>{const F=[...w];return F[l].description=x,F})},onRemove:()=>{A(x=>x.filter((w,F)=>F!==l))}},b||_||l)}),t("label",{class:"media-sensitive",children:[t("input",{name:"sensitive",type:"checkbox",checked:j,disabled:g==="loading",onChange:o=>{const l=o.target.checked;te(l)}})," ",t("span",{children:"Mark media as sensitive"})," ",t(K,{icon:`eye-${j?"close":"open"}`})]})]}),!!$&&t(gi,{lang:O,maxOptions:y,maxExpiration:q,minExpiration:ue,maxCharactersPerOption:T,poll:$,disabled:g==="loading",onInput:o=>{if(o){const l={...o};L(l)}else L(null)}}),t("div",{class:"toolbar wrap",style:{justifyContent:"flex-end"},children:[t("span",{children:[t("label",{class:"toolbar-button",children:[t("input",{type:"file",accept:J.join(","),multiple:M.length=I||!!$,onChange:o=>{const l=o.target.files;if(!l)return;const b=Array.from(l).map(d=>({file:d,type:d.type,size:d.size,url:URL.createObjectURL(d),id:null,description:null}));M.length+b.length>I?alert(`You can only attach up to ${I} files.`):A(d=>d.concat(b)),o.target.value=""}}),t(K,{icon:"attachment"})]}),y==null||y>1&&t(Ce,{children:t("button",{type:"button",class:"toolbar-button",disabled:g==="loading"||!!$||!!M.length,onClick:()=>{L({options:["",""],expiresIn:24*60*60,multiple:!1})},children:t(K,{icon:"poll",alt:"Add poll"})})}),t("button",{type:"button",class:"toolbar-button",disabled:g==="loading",onClick:()=>{Ue(!0)},children:t(K,{icon:"emoji2"})}),!!le.settings.composerGIFPicker&&t("button",{type:"button",class:"toolbar-button gif-picker-button",disabled:g==="loading"||M.length>=I||!!$,onClick:()=>{at(!0)},children:t("span",{children:"GIF"})})]}),t("div",{class:"spacer"}),g==="loading"?t(et,{abrupt:!0}):t(pi,{maxCharacters:D,hidden:g==="loading"}),t("label",{class:`toolbar-button ${O!==ae.current||me!=null&&me.length&&!me.includes(O)?"highlight":""}`,children:[t("span",{class:"icon-text",children:(Ct=Yn[O])==null?void 0:Ct.native}),t("select",{name:"language",value:O,onChange:o=>{const{value:l}=o.target;ie(l||we),Le.session.set("currentLanguage",l||we)},disabled:g==="loading",dir:"auto",children:[Qt.map(([o,l,b])=>t("option",{value:o,children:[l," (",b,")"]},o)),t("hr",{}),en.map(([o,l,b])=>t("option",{value:o,children:[l," (",b,")"]},o))]})]})," ",t("button",{type:"submit",class:"large",disabled:g==="loading",children:e?"Reply":n?"Update":"Post"})]})]})]}),He&&t(Ve,{onClick:o=>{o.target===o.currentTarget&&st(!1)},children:t(fi,{masto:u,instance:v,onClose:()=>{st(!1)},defaultSearchTerm:He==null?void 0:He.defaultSearchTerm,onSelect:o=>{const l=S.current;if(!l)return;const{selectionStart:b,selectionEnd:d}=l,_=l.value,x=_.slice(0,b),w=x?/[\s\t\n\r]$/.test(x)?"":" ":"",F=_.slice(d),P=/^[\s\t\n\r]/.test(F)?"":" ",ne=x+w+"@"+o+P+F;l.value=ne,l.selectionStart=l.selectionEnd=d+1+o.length+P.length,l.focus(),l.dispatchEvent(new Event("input"))}})}),Ne&&t(Ve,{onClick:o=>{o.target===o.currentTarget&&Ue(!1)},children:t(vi,{masto:u,instance:v,onClose:()=>{Ue(!1)},defaultSearchTerm:Ne==null?void 0:Ne.defaultSearchTerm,onSelect:o=>{const l=S.current;if(!l)return;const{selectionStart:b,selectionEnd:d}=l,_=l.value,x=_.slice(0,b),w=x?/[\s\t\n\r]$/.test(x)?"":" ":"",F=_.slice(d),P=/^[\s\t\n\r]/.test(F)?"":" ",ne=x+w+o+P+F;l.value=ne,l.selectionStart=l.selectionEnd=d+o.length+P.length,l.focus(),l.dispatchEvent(new Event("input"))}})}),Jt&&t(Ve,{onClick:o=>{o.target===o.currentTarget&&at(!1)},children:t(yi,{onClose:()=>at(!1),onSelect:({url:o,type:l,alt_text:b})=>{if(M.length>=I){alert(`You can only attach up to ${I} files.`);return}(async()=>{var _,x;let d;try{d=ke({text:"Downloading GIF…",duration:-1});const w=await fetch(o,{referrerPolicy:"no-referrer"}).then(ne=>ne.blob()),F=new File([w],l==="video/mp4"?"video.mp4":"image.gif",{type:l}),P=[...M,{file:F,type:l,size:F.size,id:null,description:b||""}];A(P),(_=d==null?void 0:d.hideToast)==null||_.call(d)}catch{(x=d==null?void 0:d.hideToast)==null||x.call(d),ke("Failed to download GIF")}})()}})})]})}function jt(s){if(!s)return;const{value:e,offsetHeight:n,scrollHeight:a,clientHeight:r}=s;if(nm.visibleInPicker),r=new pn(a,{keys:["shortcode"],findAllMatches:!0});return[a,r]}const Gt=Fn(ui,{matchesArg:(s,e)=>s.instance===e.instance,maxAge:30*60*1e3}),di=s=>{const e=zn(s);return e!=null&&e.length?e.slice(0,2).map(n=>n.lang):null},hi=Cn((s,e)=>{var J;const{masto:n,instance:a}=bt(),[r,m]=H(((J=e.current)==null?void 0:J.value)||""),{maxCharacters:u,performSearch:v=()=>{},onTrigger:g=()=>{},...R}=s,C=W();ee(()=>{Gt(a,n).then(c=>{const[h,p]=c;C.current=p}).catch(c=>{})},[]);const k=W(),z=W("");ee(()=>{let c,h,p;return k.current&&(c=f=>{var ue;const{key:E,provide:y,text:T}=f.detail;if(z.current=T,T===""){y(Promise.resolve({matched:!1}));return}if(E===":"){const S=(ue=C.current)==null?void 0:ue.search(T,{limit:5});let X="";S.forEach(({item:V})=>{const{shortcode:U,url:j}=V;X+=` -
  • - - ${be(U)} -
  • `}),X+=`
  • More…
  • `,ye.innerHTML=X,y(Promise.resolve({matched:S.length>0,fragment:ye}));return}const q={"@":"accounts","#":"hashtags"}[E];y(new Promise(S=>{v({type:q,q:T,limit:5}).then(V=>{if(T!==z.current)return;const U=V[q]||V;let j="";U.forEach(te=>{var Q;const{name:O,avatarStatic:ie,displayName:ae,username:M,acct:A,emojis:$,history:L}=te,N=mn(ae,$);if(A)j+=` -
  • - - - - - ${N||M} -
    @${be(A)} -
    -
  • - `;else{const oe=(Q=L==null?void 0:L.reduce)==null?void 0:Q.call(L,(he,ve)=>he+ +ve.uses,0);j+=` -
  • - #${be(O)} - ${oe?`${gn(oe)}`:""} -
  • - `}}),q==="accounts"&&(j+=`
  • More…
  • `),ye.innerHTML=j,S({matched:U.length>0,fragment:ye})})}))},k.current.addEventListener("text-expander-change",c),h=f=>{const{key:E,item:y}=f.detail,{value:T,more:q}=y.dataset;E===":"?(f.detail.value=T?`:${T}:`:"​",q&&(f.detail.continue=!0,setTimeout(()=>{g==null||g({name:"custom-emojis",defaultSearchTerm:q})},300))):E==="@"?(f.detail.value=T?`@${T} `:"​",q&&(f.detail.continue=!0,setTimeout(()=>{g==null||g({name:"mention",defaultSearchTerm:q})},300))):f.detail.value=`${E}${T}`},k.current.addEventListener("text-expander-value",h),p=f=>{const{input:E}=f.detail;if(m(E.value),e.current){const y=new Event("input",{bubbles:!0});e.current.dispatchEvent(y)}},k.current.addEventListener("text-expander-committed",p)),()=>{k.current&&(k.current.removeEventListener("text-expander-change",c),k.current.removeEventListener("text-expander-value",h),k.current.removeEventListener("text-expander-committed",p))}},[]),ee(()=>{const c=e.current;if(!c)return;new ResizeObserver(()=>{if(k.current){const{height:p}=c.getBoundingClientRect();k.current.style.height=p+"px"}}).observe(c)},[]);const Z=W(0),D=W(),I=fn(c=>{var f;if(!D.current)return;if(Z.current>3){D.current.innerHTML="",D.current=null,(f=I==null?void 0:I.cancel)==null||f.call(I);return}let h,p;Z.current<=3&&(h=Date.now()),D.current.innerHTML=li(c,{maxCharacters:u})+` -`,Z.current<=3&&(p=Date.now()),h&&p&&p-h>50&&Z.current++},500),se=Qe(()=>{var f,E;const c=(f=D.current)==null?void 0:f.cloneNode(!0);if(!c)return;c.querySelectorAll("mark").forEach(y=>{y.remove()});const h=(E=c.innerText)==null?void 0:E.trim();if(!h)return;const p=di(h);p!=null&&p.length&&(g==null||g({name:"auto-detect-language",languages:p}))},2e3);return t("text-expander",{ref:k,keys:"@ # :",class:"compose-field-container",children:[t("textarea",{class:"compose-field",autoCapitalize:"sentences",autoComplete:"on",autoCorrect:"on",spellCheck:"true",dir:"auto",rows:"6",cols:"50",...R,ref:e,name:"status",value:r,onKeyDown:c=>{const{key:h,target:p}=c;if(h==="Enter"&&!(c.ctrlKey||c.metaKey))try{const{value:f,selectionStart:E}=p,T=f.slice(0,E).split(` -`).slice(-1)[0];if(T&&/^\s*(-|\d+\.)\s/.test(T)){const[q,ue,S,X,V]=T.match(/^(\s*)(-|\d+\.)(\s+)(.+)?/)||[];if(V){c.preventDefault();const[U]=S.match(/\d+/)||[],j=U?`${+U+1}.`:"-",te=` -${ue}${j}${X}`;p.setRangeText(te,E,E);const O=E+te.length;p.setSelectionRange(O,O)}else{const U=E-T.length;p.setRangeText("",U,E)}jt(p),p.dispatchEvent(new Event("input"))}}catch{}D.current&&(D.current.scrollTop=p.scrollTop)},onInput:c=>{var f;const{target:h}=c,p=h.value.replace(/\u200b/g,"");m(p),jt(h),(f=s.onInput)==null||f.call(s,c),I(p),se()},style:{width:"100%",height:"4em"},onScroll:c=>{if(D.current){const{scrollTop:h}=c.target;D.current.scrollTop=h}}}),t("div",{ref:D,class:"compose-highlight","aria-hidden":"true"})]})});function pi({maxCharacters:s=500,hidden:e}){const a=Ln(le).composerCharacterCount,r=s-a;return e?t("span",{class:"char-counter",hidden:!0}):t("span",{class:"char-counter",title:`${r}/${s}`,style:{"--percentage":a/s*100},children:[t("meter",{class:`${r<=-10?"explode":r<=0?"danger":r<=20?"warning":""}`,value:a,max:s}),t("span",{class:"counter",children:r})]})}function Ke(s){const e=["bytes","KB","MB","GB","TB","PB","EB","ZB","YB"];let n=0;for(;s>=1024;)s/=1024,n++;return`${s.toFixed(0).toLocaleString()} ${e[n]}`}function Pt(s,e,n,a){const r=Math.sqrt(e/s),m=Math.floor(n*r),u=Math.floor(a*r);return{newWidth:m,newHeight:u}}function mi({attachment:s,disabled:e,lang:n,onDescriptionChange:a=()=>{},onRemove:r=()=>{}}){const[m,u]=H("default"),v=Nt("@mastodon/edit-media-attributes"),{type:g,id:R,file:C}=s,k=Re(()=>C?URL.createObjectURL(C):s.url,[C,s.url]),z=!!(C!=null&&C.size),Z=z?Ut():{},{mediaAttachments:{imageSizeLimit:D,imageMatrixLimit:I,videoSizeLimit:se,videoMatrixLimit:J,videoFrameRateLimit:c}={}}=Z||{},[h,p]=H(()=>z?g.startsWith("image")&&D&&C.size>D?{type:"imageSizeLimit",details:{imageSize:C.size,imageSizeLimit:D}}:g.startsWith("video")&&se&&C.size>se?{type:"videoSizeLimit",details:{videoSize:C.size,videoSizeLimit:se}}:null:null),[f,E]=H({});ee(()=>{!z||!I||(f==null?void 0:f.matrix)>I&&p({type:"imageMatrixLimit",details:{imageMatrix:f==null?void 0:f.matrix,imageMatrixLimit:I,width:f==null?void 0:f.width,height:f==null?void 0:f.height}})},[f,I,z]);const[y,T]=H({});ee(()=>{!z||!J||(y==null?void 0:y.matrix)>J&&p({type:"videoMatrixLimit",details:{videoMatrix:y==null?void 0:y.matrix,videoMatrixLimit:J,width:y==null?void 0:y.width,height:y==null?void 0:y.height}})},[y,J,z]);const[q,ue]=H(s.description),[S,X]=g.split("/"),V=Qe(a,250);ee(()=>{V(q)},[q,V]);const[U,j]=H(!1),te=W(null);ee(()=>{let A;return U&&te.current&&(A=setTimeout(()=>{te.current.focus()},100)),()=>{clearTimeout(A)}},[U]);const O=t(Ce,{children:R&&!v?t("div",{class:"media-desc",children:[t("span",{class:"tag",children:"Uploaded"}),t("p",{title:q,children:s.description||t("i",{children:"No description"})})]}):t("textarea",{ref:te,value:q||"",lang:n,placeholder:{image:"Image description",video:"Video description",audio:"Audio description"}[S],autoCapitalize:"sentences",autoComplete:"on",autoCorrect:"on",spellCheck:"true",dir:"auto",disabled:e||m==="loading",class:m==="loading"?"loading":"",maxlength:"1500",onInput:A=>{const{value:$}=A.target;ue($)}})}),ie=W(null);ee(()=>()=>{var A,$;($=(A=ie.current)==null?void 0:A.hideToast)==null||$.call(A)},[]);const ae=W(null),M=A=>{const{type:$,details:L}=A;switch($){case"imageSizeLimit":{const{imageSize:N,imageSizeLimit:Q}=L;return`File size too large. Uploading might encounter issues. Try reduce the file size from ${Ke(N)} to ${Ke(Q)} or lower.`}case"imageMatrixLimit":{const{imageMatrix:N,imageMatrixLimit:Q,width:oe,height:he}=L,{newWidth:ve,newHeight:xe}=Pt(N,Q,oe,he);return`Dimension too large. Uploading might encounter issues. Try reduce dimension from ${oe.toLocaleString()}×${he.toLocaleString()}px to ${ve.toLocaleString()}×${xe.toLocaleString()}px.`}case"videoSizeLimit":{const{videoSize:N,videoSizeLimit:Q}=L;return`File size too large. Uploading might encounter issues. Try reduce the file size from ${Ke(N)} to ${Ke(Q)} or lower.`}case"videoMatrixLimit":{const{videoMatrix:N,videoMatrixLimit:Q,width:oe,height:he}=L,{newWidth:ve,newHeight:xe}=Pt(N,Q,oe,he);return`Dimension too large. Uploading might encounter issues. Try reduce dimension from ${oe.toLocaleString()}×${he.toLocaleString()}px to ${ve.toLocaleString()}×${xe.toLocaleString()}px.`}case"videoFrameRateLimit":return"Frame rate too high. Uploading might encounter issues."}};return t(Ce,{children:[t("div",{class:"media-attachment",children:[t("div",{class:"media-preview",tabIndex:"0",onClick:()=>{j(!0)},children:S==="image"?t("img",{src:k,alt:"",onLoad:A=>{if(!z)return;const{naturalWidth:$,naturalHeight:L}=A.target;E({matrix:$*L,width:$,height:L})}}):S==="video"||S==="gifv"?t("video",{src:k+"#t=0.1",playsinline:!0,muted:!0,disablePictureInPicture:!0,preload:"metadata",onLoadedMetadata:A=>{if(!z)return;const{videoWidth:$,videoHeight:L}=A.target;$&&L&&T({matrix:$*L,width:$,height:L})}}):S==="audio"?t("audio",{src:k,controls:!0}):null}),O,t("div",{class:"media-aside",children:[t("button",{type:"button",class:"plain close-button",disabled:e,onClick:r,children:t(K,{icon:"x"})}),!!h&&t("button",{type:"button",class:"media-error",title:M(h),onClick:()=>{ae.current&&ae.current.hideToast(),ae.current=ke({text:M(h),duration:1e4})},children:t(K,{icon:"alert"})})]})]}),U&&t(Ve,{onClose:()=>{j(!1)},children:t("div",{id:"media-sheet",class:"sheet sheet-max",children:[t("button",{type:"button",class:"sheet-close",onClick:()=>{j(!1)},children:t(K,{icon:"x"})}),t("header",{children:t("h2",{children:{image:"Edit image description",video:"Edit video description",audio:"Edit audio description"}[S]})}),t("main",{tabIndex:"-1",children:[t("div",{class:"media-preview",children:S==="image"?t("img",{src:k,alt:""}):S==="video"||S==="gifv"?t("video",{src:k,playsinline:!0,controls:!0}):S==="audio"?t("audio",{src:k,controls:!0}):null}),t("div",{class:"media-form",children:[O,t("footer",{children:[S==="image"&&/^(png|jpe?g|gif|webp)$/i.test(X)&&!!le.settings.mediaAltGenerator&&!!ut&&t(vn,{portal:{target:document.body},containerProps:{style:{zIndex:1001}},align:"center",position:"anchor",overflow:"auto",menuButton:t("button",{type:"button",title:"More",class:"plain",children:t(K,{icon:"more",size:"l",alt:"More"})}),children:[t(At,{disabled:m==="loading",onClick:()=>{u("loading"),ie.current=ke({text:"Generating description. Please wait...",duration:-1}),async function(){var A,$;try{const L=new FormData;L.append("image",C);const N=await fetch(ut,{method:"POST",body:L}).then(Q=>Q.json());if(N.error)throw new Error(N.error);ue(N.description)}catch(L){ke(`Failed to generate description${L!=null&&L.message?`: ${L.message}`:""}`)}finally{u("default"),($=(A=ie.current)==null?void 0:A.hideToast)==null||$.call(A)}}()},children:[t(K,{icon:"sparkles2"}),n&&n!=="en"?t("small",{children:["Generate description…",t("br",{}),"(English)"]}):t("span",{children:"Generate description…"})]}),!!n&&n!=="en"&&t(At,{disabled:m==="loading",onClick:()=>{u("loading"),ie.current=ke({text:"Generating description. Please wait...",duration:-1}),async function(){var A,$;try{const L=new FormData;L.append("image",C);const N=`?lang=${n}`,Q=await fetch(ut+N,{method:"POST",body:L}).then(oe=>oe.json());if(Q.error)throw new Error(Q.error);ue(Q.description)}catch(L){ke(`Failed to generate description${L!=null&&L.message?`: ${L.message}`:""}`)}finally{u("default"),($=(A=ie.current)==null?void 0:A.hideToast)==null||$.call(A)}}()},children:[t(K,{icon:"sparkles2"}),t("small",{children:["Generate description…",t("br",{}),"(",bn(n),")"," ",t("span",{class:"more-insignificant",children:"— experimental"})]})]})]}),t("button",{type:"button",class:"light block",onClick:()=>{j(!1)},disabled:m==="loading",children:"Done"})]})]})]})]})})]})}function gi({lang:s,poll:e,disabled:n,onInput:a=()=>{},maxOptions:r,maxExpiration:m,minExpiration:u,maxCharactersPerOption:v}){const{options:g,expiresIn:R,multiple:C}=e;return t("div",{class:`poll ${C?"multiple":""}`,children:[t("div",{class:"poll-choices",children:g.map((k,z)=>t("div",{class:"poll-choice",children:[t("input",{required:!0,type:"text",value:k,disabled:n,maxlength:v,placeholder:`Choice ${z+1}`,lang:s,spellCheck:"true",dir:"auto",onInput:Z=>{const{value:D}=Z.target;g[z]=D,a(e)}}),t("button",{type:"button",class:"plain2 poll-button",disabled:n||g.length<=1,onClick:()=>{g.splice(z,1),a(e)},children:t(K,{icon:"x",size:"s"})})]},z))}),t("div",{class:"poll-toolbar",children:[t("button",{type:"button",class:"plain2 poll-button",disabled:n||g.length>=r,onClick:()=>{g.push(""),a(e)},children:"+"})," ",t("label",{class:"multiple-choices",children:[t("input",{type:"checkbox",checked:C,disabled:n,onChange:k=>{const{checked:z}=k.target;e.multiple=z,a(e)}})," ","Multiple choices"]}),t("label",{class:"expires-in",children:["Duration"," ",t("select",{value:R,disabled:n,onChange:k=>{const{value:z}=k.target;e.expiresIn=z,a(e)},children:Object.entries(Kt).filter(([k,z])=>z>=u&&z<=m).map(([k,z])=>t("option",{value:z,children:k},z))})]})]}),t("div",{class:"poll-toolbar",children:t("button",{type:"button",class:"plain remove-poll-button",disabled:n,onClick:()=>{a(null)},children:"Remove poll"})})]})}function be(s){return s.replace(/[&<>"']/g,function(e){return"&#"+e.charCodeAt(0)+";"})}function Ot(s){for(let e in s)(s[e]===null||s[e]===void 0)&&delete s[e];return s}function fi({onClose:s=()=>{},onSelect:e=()=>{},defaultSearchTerm:n}){const{masto:a}=bt(),[r,m]=H("default"),[u,v]=H([]),[g,R]=H({}),[C,k]=H(0),z=async c=>{if(!(c!=null&&c.length))return;const h=await yn(c,g);h&&R({...g,...h})},Z=c=>{c&&(m("loading"),(async()=>{try{const h=await a.v1.accounts.search.list({q:c,limit:40,resolve:!1});v(h),z(h),m("default")}catch{m("error")}})())},D=Qe(Z,1e3);ee(()=>{Z()},[Z]);const I=W();ee(()=>{I.current&&(I.current.focus(),I.current.value&&(I.current.selectionStart=I.current.value.length,I.current.selectionEnd=I.current.value.length))},[]),ee(()=>{n&&Z(n)},[n]);const se=c=>{const h=c.acct;e(h),s()};_e("enter",()=>{const c=u[C];c&&se(c)},{preventDefault:!0,enableOnFormTags:["input"]});const J=W();return _e("down",()=>{C{const c=J.current.querySelector(".selected");c&&c.scrollIntoView({behavior:"smooth",block:"center",inline:"center"})},1)},{preventDefault:!0,enableOnFormTags:["input"]}),_e("up",()=>{C>0?k(C-1):k(u.length-1),setTimeout(()=>{const c=J.current.querySelector(".selected");c&&c.scrollIntoView({behavior:"smooth",block:"center",inline:"center"})},1)},{preventDefault:!0,enableOnFormTags:["input"]}),t("div",{id:"mention-sheet",class:"sheet",children:[!!s&&t("button",{type:"button",class:"sheet-close",onClick:s,children:t(K,{icon:"x"})}),t("header",{children:t("form",{onSubmit:c=>{var h;c.preventDefault(),(h=D.flush)==null||h.call(D)},children:t("input",{ref:I,required:!0,type:"search",class:"block",placeholder:"Search accounts",onInput:c=>{const{value:h}=c.target;D(h)},autocomplete:"off",autocorrect:"off",autocapitalize:"off",spellCheck:"false",dir:"auto",defaultValue:n||""})})}),t("main",{children:(u==null?void 0:u.length)>0?t("ul",{ref:J,class:`accounts-list ${r==="loading"?"loading":""}`,children:u.map((c,h)=>{const p=g[c.id];return t("li",{class:h===C?"selected":"",children:[t(Ht,{avatarSize:"xxl",account:c,relationship:p,showStats:!0,showActivity:!0}),t("button",{type:"button",class:"plain2",onClick:()=>{se(c)},children:t(K,{icon:"plus",size:"xl"})})]},c.id)})}):r==="loading"?t("div",{class:"ui-state",children:t(et,{abrupt:!0})}):r==="error"?t("div",{class:"ui-state",children:t("p",{children:"Error loading accounts"})}):null})]})}function vi({masto:s,instance:e,onClose:n=()=>{},onSelect:a=()=>{},defaultSearchTerm:r}){const[m,u]=H("default"),v=W([]),[g,R]=H([]),C=Re(()=>Le.account.get("recentlyUsedCustomEmojis")||[]),k=W();ee(()=>{u("loading"),(async()=>{try{const[h,p]=await Gt(e,s);k.current=p,R(h),u("default")}catch{u("error")}})()},[]);const z=Re(()=>{const h={"--recent--":C.filter(f=>g.find(E=>E.shortcode===f.shortcode))},p=[];return g.forEach(f=>{var E,y;if((y=(E=v.current)==null?void 0:E.push)==null||y.call(E,f),!f.category){p.push(f);return}h[f.category]||(h[f.category]=[]),h[f.category].push(f)}),p.length&&(h["--others--"]=p),h},[g]),Z=W(),[D,I]=H(null),se=It(h=>{var f,E,y;const{value:p}=h.target;if(p){const T=(f=k.current)==null?void 0:f.search(p,{limit:vt});I(T.map(q=>q.item)),(y=(E=Z.current)==null?void 0:E.scrollTo)==null||y.call(E,0,0)}else I(null)},[g]);ee(()=>{r&&(g!=null&&g.length)&&se({target:{value:r}})},[r,se,g]);const J=It(h=>{a==null||a(h),n==null||n(),queueMicrotask(()=>{let p=Le.account.get("recentlyUsedCustomEmojis")||[];const f=p.findIndex(E=>E.shortcode===h.shortcode);f!==-1?(p.splice(f,1),p.unshift(h)):(p.unshift(h),p=p.filter(E=>{var y,T;return(T=(y=v.current)==null?void 0:y.find)==null?void 0:T.call(y,q=>q.shortcode===E.shortcode)}),p=p.slice(0,10)),Le.account.set("recentlyUsedCustomEmojis",p)})},[a]),c=W();return ee(()=>{c.current&&(c.current.focus(),c.current.value&&(c.current.selectionStart=c.current.value.length,c.current.selectionEnd=c.current.value.length))},[]),t("div",{id:"custom-emojis-sheet",class:"sheet",children:[!!n&&t("button",{type:"button",class:"sheet-close",onClick:n,children:t(K,{icon:"x"})}),t("header",{children:[t("div",{children:[t("b",{children:"Custom emojis"})," ",m==="loading"?t(et,{}):t("small",{class:"insignificant",children:[" • ",e]})]}),t("form",{onSubmit:h=>{h.preventDefault();const p=D[0];p&&J(`:${p.shortcode}:`)},children:t("input",{ref:c,type:"search",placeholder:"Search emoji",onInput:se,autocomplete:"off",autocorrect:"off",autocapitalize:"off",spellCheck:"false",dir:"auto",defaultValue:r||""})})]}),t("main",{ref:Z,children:D!==null?t("ul",{class:"custom-emojis-matches custom-emojis-list",children:D.map(h=>t("li",{class:"custom-emojis-match",children:t(Yt,{emoji:h,onClick:()=>{J(`:${h.shortcode}:`)},showCode:!0})},h.shortcode))}):t("div",{class:"custom-emojis-list",children:[m==="error"&&t("div",{class:"ui-state",children:t("p",{children:"Error loading custom emojis"})}),m==="default"&&Object.entries(z).map(([h,p])=>!!(p!=null&&p.length)&&t(Ce,{children:[t("div",{class:"section-header",children:{"--recent--":"Recently used","--others--":"Others"}[h]||h}),t(bi,{emojis:p,onSelect:J})]}))]})})]})}const bi=Wt(({emojis:s,onSelect:e})=>{const[n,a]=H(vt),r=s.length>n;return t("section",{children:[s.slice(0,n).map(m=>t(Yt,{emoji:m,onClick:()=>{e(`:${m.shortcode}:`)}},m.shortcode)),r&&t("button",{type:"button",class:"plain small",onClick:()=>a(n+vt),children:[(s.length-n).toLocaleString()," more…"]})]})}),Yt=Wt(({emoji:s,onClick:e,showCode:n})=>{const a=r=>{const u=r.currentTarget.closest("main");if(u){const v=u.getBoundingClientRect(),g=r.currentTarget.getBoundingClientRect(),R=r.currentTarget.classList;g.leftv.right-88?(R.add("edge-right"),R.remove("edge-left")):R.remove("edge-left","edge-right")}};return t("button",{type:"button",className:"plain4",onClick:e,"data-title":n?void 0:s.shortcode,onPointerEnter:a,onFocus:a,children:[t("picture",{children:[!!s.staticUrl&&t("source",{srcSet:s.staticUrl,media:"(prefers-reduced-motion: reduce)"}),t("img",{className:"shortcode-emoji",src:s.url||s.staticUrl,alt:s.shortcode,width:"24",height:"24",loading:"lazy",decoding:"async"})]}),n&&t(Ce,{children:[" ",t("code",{children:s.shortcode})]})]})}),ht=20;function yi({onClose:s=()=>{},onSelect:e=()=>{}}){var z,Z,D,I,se,J;const[n,a]=H("default"),[r,m]=H([]),u=W(null),v=W(null),g=W(0),R=W(null);function C({offset:c}){var h,p,f;(h=v.current)!=null&&h.value&&(a("loading"),(f=(p=R.current)==null?void 0:p.scrollTo)==null||f.call(p,{top:0,left:0,behavior:"smooth"}),(async()=>{var E;try{const y={api_key:Gn,q:v.current.value,rating:"g",limit:ht,bundle:"messaging_non_clips",offset:c},T=await fetch("https://api.giphy.com/v1/gifs/search?"+new URLSearchParams(y),{referrerPolicy:"no-referrer"}).then(q=>q.json());g.current=((E=T.pagination)==null?void 0:E.offset)||0,m(T),a("results")}catch{a("error")}})())}ee(()=>{var c;(c=v.current)==null||c.focus()},[]);const k=Qe(()=>{C({offset:0})},1e3);return t("div",{id:"gif-picker-sheet",class:"sheet",children:[!!s&&t("button",{type:"button",class:"sheet-close",onClick:s,children:t(K,{icon:"x"})}),t("header",{children:t("form",{ref:u,onSubmit:c=>{c.preventDefault(),C({offset:0})},children:[t("input",{ref:v,type:"search",name:"q",placeholder:"Search GIFs",required:!0,autocomplete:"off",autocorrect:"off",autocapitalize:"off",spellCheck:"false",dir:"auto",onInput:k}),t("input",{type:"image",class:"powered-button",src:Wn,width:"86",height:"30"})]})}),t("main",{ref:R,class:n==="loading"?"loading":"",children:[n==="default"&&t("div",{class:"ui-state",children:t("p",{class:"insignificant",children:"Type to search GIFs"})}),n==="loading"&&!((z=r==null?void 0:r.data)!=null&&z.length)&&t("div",{class:"ui-state",children:t(et,{abrupt:!0})}),((Z=r==null?void 0:r.data)==null?void 0:Z.length)>0?t(Ce,{children:[t("ul",{children:r.data.map(c=>{const{id:h,images:p,title:f,alt_text:E}=c,{fixed_height_small:y,fixed_height_downsampled:T,fixed_height:q,original:ue}=p,S=y!=null&&y.url?y:T!=null&&T.url?T:q;let{url:X,webp:V,width:U,height:j}=S;+j>100&&(U=U/j*100,j=100);const te=URL.parse(X),O=te.origin+te.pathname;let ie;if(V){const ae=URL.parse(V);ie=ae.origin+ae.pathname}return t("li",{children:t("button",{type:"button",onClick:()=>{const{mp4:ae,url:M}=ue,A=ae||M,$=URL.parse(A),L=$.origin+$.pathname;s(),e({url:L,type:ae?"video/mp4":"image/gif",alt_text:E||f})},children:t("figure",{style:{"--figure-width":U+"px"},children:[t("picture",{children:[ie&&t("source",{srcset:ie,type:"image/webp"}),t("img",{src:O,width:U,height:j,loading:"lazy",decoding:"async",alt:E,referrerpolicy:"no-referrer",onLoad:ae=>{ae.target.style.backgroundColor="transparent"}})]}),t("figcaption",{children:E||f})]})})},h)})}),t("p",{class:"pagination",children:[((D=r.pagination)==null?void 0:D.offset)>0&&t("button",{type:"button",class:"light small",disabled:n==="loading",onClick:()=>{var c;C({offset:((c=r.pagination)==null?void 0:c.offset)-ht})},children:[t(K,{icon:"chevron-left"}),t("span",{children:"Previous"})]}),t("span",{}),((I=r.pagination)==null?void 0:I.offset)+((se=r.pagination)==null?void 0:se.count)<((J=r.pagination)==null?void 0:J.total_count)&&t("button",{type:"button",class:"light small",disabled:n==="loading",onClick:()=>{var c;C({offset:((c=r.pagination)==null?void 0:c.offset)+ht})},children:[t("span",{children:"Next"})," ",t(K,{icon:"chevron-right"})]})]})]}):n==="results"&&t("div",{class:"ui-state",children:t("p",{children:"No results"})}),n==="error"&&t("div",{class:"ui-state",children:t("p",{children:"Error loading GIFs"})})]})]})}export{Ci as default}; -//# sourceMappingURL=compose-IeRiPb7Z.js.map diff --git a/assets/compose-IeRiPb7Z.js.map b/assets/compose-IeRiPb7Z.js.map deleted file mode 100644 index 1cd1acd..0000000 --- a/assets/compose-IeRiPb7Z.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"compose-IeRiPb7Z.js","sources":["../../node_modules/@github/combobox-nav/dist/index.js","../../node_modules/@github/text-expander-element/dist/index.js","../../node_modules/ansi-regex/index.js","../../node_modules/strip-ansi/index.js","../../node_modules/string-length/index.js","../../src/assets/powered-by-giphy.svg","../../src/components/compose.jsx"],"sourcesContent":["export default class Combobox {\n constructor(input, list, { tabInsertsSuggestions, defaultFirstOption } = {}) {\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.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 scrollTo(this.list, target);\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);\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) {\n target.dispatchEvent(new CustomEvent('combobox-commit', { 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}\nfunction scrollTo(container, target) {\n if (!inViewport(container, target)) {\n container.scrollTop = target.offsetTop;\n }\n}\nfunction inViewport(container, element) {\n const scrollTop = container.scrollTop;\n const containerBottom = scrollTop + container.clientHeight;\n const top = element.offsetTop;\n const bottom = top + element.clientHeight;\n return top >= scrollTop && bottom <= containerBottom;\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\n/**\n * A custom element is implemented as a class which extends HTMLElement (in the\n * case of autonomous elements) or the interface you want to customize (in the\n * case of customized built-in elements).\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Web_components/Using_custom_elements#custom_element_lifecycle_callbacks\n */\nclass CustomHTMLElement extends HTMLElement {\n}\n\nclass InputStyleCloneUpdateEvent extends Event {\n constructor() {\n super(\"update\");\n }\n}\nconst CloneRegistry = new WeakMap();\n/**\n * Create 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 InputStyleCloneElement extends CustomHTMLElement {\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;\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.\n *\n * Upon initial creation the clone element will automatically be inserted into the DOM and begin observing the\n * linked input. Only one clone per input can ever exist at a time.\n * @param input The target input to clone.\n */\n static for(input) {\n const clone = CloneRegistry.get(input) ?? new InputStyleCloneElement(input);\n CloneRegistry.set(input, clone);\n return clone;\n }\n /**\n * Avoid constructing directly: Use `InputStyleCloneElement.for` instead.\n * @private\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 = document.createElement(\"div\");\n this.#container.style.position = \"absolute\";\n this.#container.style.pointerEvents = \"none\";\n input.after(this.#container);\n this.#container.appendChild(this);\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 /** @private */\n connectedCallback() {\n const input = this.#inputRef.deref();\n if (!input)\n return this.remove();\n this.style.pointerEvents = \"none\";\n this.style.userSelect = \"none\";\n this.style.overflow = \"hidden\";\n this.style.display = \"block\";\n // Important not to use display:none which would not render the content at all\n this.style.visibility = \"hidden\";\n if (input instanceof HTMLTextAreaElement) {\n this.style.whiteSpace = \"pre-wrap\";\n this.style.wordWrap = \"break-word\";\n }\n else {\n this.style.whiteSpace = \"nowrap\";\n // text in single-line inputs is vertically centered\n this.style.display = \"table-cell\";\n this.style.verticalAlign = \"middle\";\n }\n this.setAttribute(\"aria-hidden\", \"true\");\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 /** @private */\n disconnectedCallback() {\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 const input = this.#inputRef.deref();\n if (input) {\n input.removeEventListener(\"input\", this.#onInput, { capture: true });\n CloneRegistry.delete(input);\n }\n }\n // --- private ---\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.#inputRef.deref();\n if (!input)\n return this.remove();\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.style.height = inputStyle.height;\n this.style.width = inputStyle.width;\n // Immediately re-adjust for browser inconsistencies in scrollbar handling, if necessary\n if (input.clientHeight !== this.clientHeight)\n this.style.height = `calc(${inputStyle.height} + ${input.clientHeight - this.clientHeight}px)`;\n if (input.clientWidth !== this.clientWidth)\n this.style.width = `calc(${inputStyle.width} + ${input.clientWidth - this.clientWidth}px)`;\n // Position on top of the input\n const inputRect = input.getBoundingClientRect();\n const cloneRect = this.getBoundingClientRect();\n this.#xOffset = this.#xOffset + inputRect.left - cloneRect.left;\n this.#yOffset = this.#yOffset + inputRect.top - cloneRect.top;\n this.style.transform = `translate(${this.#xOffset}px, ${this.#yOffset}px)`;\n this.scrollTop = input.scrollTop;\n this.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.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.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// Inspired by https://github.com/github/catalyst/blob/dc284dcf4f82329a9cac5c867462a8fa529b6c40/src/register.ts\ntry {\n customElements.define(\"input-style-clone\", InputStyleCloneElement);\n}\ncatch (e) {\n // Throws DOMException with NotSupportedError if already defined\n if (!(e instanceof DOMException && e.name === \"NotSupportedError\"))\n throw e;\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 InputStyleCloneElement.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.childNodes[0];\n if (textNode) {\n range.setStart(textNode, this.startOffset);\n range.setEnd(textNode, this.endOffset);\n }\n return range;\n }\n}\n\nconst states = new WeakMap();\nclass TextExpander {\n constructor(expander, input) {\n this.expander = expander;\n this.input = input;\n this.combobox = null;\n this.menu = null;\n this.match = null;\n this.justPasted = false;\n this.lookBackIndex = 0;\n this.oninput = this.onInput.bind(this);\n this.onpaste = this.onPaste.bind(this);\n this.onkeydown = this.onKeydown.bind(this);\n this.oncommit = this.onCommit.bind(this);\n this.onmousedown = this.onMousedown.bind(this);\n this.onblur = this.onBlur.bind(this);\n this.interactingWithList = false;\n input.addEventListener('paste', this.onpaste);\n input.addEventListener('input', this.oninput);\n input.addEventListener('keydown', this.onkeydown);\n input.addEventListener('blur', this.onblur);\n }\n destroy() {\n this.input.removeEventListener('paste', this.onpaste);\n this.input.removeEventListener('input', this.oninput);\n this.input.removeEventListener('keydown', this.onkeydown);\n this.input.removeEventListener('blur', this.onblur);\n }\n dismissMenu() {\n if (this.deactivate()) {\n this.lookBackIndex = this.input.selectionEnd || this.lookBackIndex;\n }\n }\n activate(match, menu) {\n var _a, _b;\n if (this.input !== document.activeElement && this.input !== ((_b = (_a = document.activeElement) === null || _a === void 0 ? void 0 : _a.shadowRoot) === null || _b === void 0 ? void 0 : _b.activeElement)) {\n return;\n }\n this.deactivate();\n this.menu = menu;\n if (!menu.id)\n menu.id = `text-expander-${Math.floor(Math.random() * 100000).toString()}`;\n this.expander.append(menu);\n this.combobox = new Combobox(this.input, menu);\n this.expander.dispatchEvent(new Event('text-expander-activate'));\n this.positionMenu(menu, match.position);\n this.combobox.start();\n menu.addEventListener('combobox-commit', this.oncommit);\n menu.addEventListener('mousedown', this.onmousedown);\n this.combobox.navigate(1);\n }\n positionMenu(menu, position) {\n const caretRect = new InputRange(this.input, position).getBoundingClientRect();\n const targetPosition = { left: caretRect.left, top: caretRect.top + caretRect.height };\n const currentPosition = menu.getBoundingClientRect();\n const delta = {\n left: targetPosition.left - currentPosition.left,\n top: targetPosition.top - currentPosition.top\n };\n if (delta.left !== 0 || delta.top !== 0) {\n const currentStyle = getComputedStyle(menu);\n menu.style.left = currentStyle.left ? `calc(${currentStyle.left} + ${delta.left}px)` : `${delta.left}px`;\n menu.style.top = currentStyle.top ? `calc(${currentStyle.top} + ${delta.top}px)` : `${delta.top}px`;\n }\n }\n deactivate() {\n const menu = this.menu;\n if (!menu || !this.combobox)\n return false;\n this.expander.dispatchEvent(new Event('text-expander-deactivate'));\n this.menu = null;\n menu.removeEventListener('combobox-commit', this.oncommit);\n menu.removeEventListener('mousedown', this.onmousedown);\n this.combobox.destroy();\n this.combobox = null;\n menu.remove();\n return true;\n }\n onCommit({ target }) {\n var _a;\n const item = target;\n if (!(item instanceof HTMLElement))\n return;\n if (!this.combobox)\n return;\n const match = this.match;\n if (!match)\n return;\n const beginning = this.input.value.substring(0, match.position - match.key.length);\n const remaining = this.input.value.substring(match.position + match.text.length);\n const detail = { item, key: match.key, value: null, continue: false };\n const canceled = !this.expander.dispatchEvent(new CustomEvent('text-expander-value', { cancelable: true, detail }));\n if (canceled)\n return;\n if (!detail.value)\n return;\n let suffix = (_a = this.expander.getAttribute('suffix')) !== null && _a !== void 0 ? _a : ' ';\n if (detail.continue) {\n suffix = '';\n }\n const value = `${detail.value}${suffix}`;\n this.input.value = beginning + value + remaining;\n const cursor = beginning.length + value.length;\n this.deactivate();\n this.input.focus({\n preventScroll: true\n });\n this.input.selectionStart = cursor;\n this.input.selectionEnd = cursor;\n if (!detail.continue) {\n this.lookBackIndex = cursor;\n this.match = null;\n }\n this.expander.dispatchEvent(new CustomEvent('text-expander-committed', { cancelable: false, detail: { input: this.input } }));\n }\n onBlur() {\n if (this.interactingWithList) {\n this.interactingWithList = false;\n return;\n }\n this.deactivate();\n }\n onPaste() {\n this.justPasted = true;\n }\n async onInput() {\n if (this.justPasted) {\n this.justPasted = false;\n return;\n }\n const match = this.findMatch();\n if (match) {\n this.match = match;\n const menu = await this.notifyProviders(match);\n if (!this.match)\n return;\n if (menu) {\n this.activate(match, menu);\n }\n else {\n this.deactivate();\n }\n }\n else {\n this.match = null;\n this.deactivate();\n }\n }\n findMatch() {\n const cursor = this.input.selectionEnd || 0;\n const text = this.input.value;\n if (cursor <= this.lookBackIndex) {\n this.lookBackIndex = cursor - 1;\n }\n for (const { key, multiWord } of this.expander.keys) {\n const found = query(text, key, cursor, {\n multiWord,\n lookBackIndex: this.lookBackIndex,\n lastMatchPosition: this.match ? this.match.position : null\n });\n if (found) {\n return { text: found.text, key, position: found.position };\n }\n }\n }\n async notifyProviders(match) {\n const providers = [];\n const provide = (result) => providers.push(result);\n const canceled = !this.expander.dispatchEvent(new CustomEvent('text-expander-change', { cancelable: true, detail: { provide, text: match.text, key: match.key } }));\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 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 default TextExpanderElement;\n","export default function ansiRegex({onlyFirst = false} = {}) {\n\tconst pattern = [\n\t '[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)',\n\t\t'(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-ntqry=><~]))'\n\t].join('|');\n\n\treturn new RegExp(pattern, onlyFirst ? undefined : 'g');\n}\n","import ansiRegex from 'ansi-regex';\n\nconst regex = ansiRegex();\n\nexport default function stripAnsi(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError(`Expected a \\`string\\`, got \\`${typeof string}\\``);\n\t}\n\n\t// Even though the regex is global, we don't need to reset the `.lastIndex`\n\t// because unlike `.exec()` and `.test()`, `.replace()` does it automatically\n\t// and doing it manually has a performance penalty.\n\treturn string.replace(regex, '');\n}\n","import stripAnsi from 'strip-ansi';\n\nconst segmenter = new Intl.Segmenter();\n\nexport default function stringLength(string, {countAnsiEscapeCodes = false} = {}) {\n\tif (string === '') {\n\t\treturn 0;\n\t}\n\n\tif (!countAnsiEscapeCodes) {\n\t\tstring = stripAnsi(string);\n\t}\n\n\tif (string === '') {\n\t\treturn 0;\n\t}\n\n\tlet length = 0;\n\n\tfor (const _ of segmenter.segment(string)) { // eslint-disable-line no-unused-vars\n\t\tlength++;\n\t}\n\n\treturn length;\n}\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 './compose.css';\nimport '@github/text-expander-element';\n\nimport { MenuItem } from '@szhsin/react-menu';\nimport { deepEqual } from 'fast-equals';\nimport Fuse from 'fuse.js';\nimport { forwardRef, memo } from 'preact/compat';\nimport {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'preact/hooks';\nimport { useHotkeys } from 'react-hotkeys-hook';\nimport stringLength from 'string-length';\nimport { detectAll } from 'tinyld/light';\nimport { uid } from 'uid/single';\nimport { useDebouncedCallback, useThrottledCallback } from 'use-debounce';\nimport { useSnapshot } from 'valtio';\n\nimport poweredByGiphyURL from '../assets/powered-by-giphy.svg';\n\nimport Menu2 from '../components/menu2';\nimport supportedLanguages from '../data/status-supported-languages';\nimport urlRegex from '../data/url-regex';\nimport { api } from '../utils/api';\nimport db from '../utils/db';\nimport emojifyText from '../utils/emojify-text';\nimport isRTL from '../utils/is-rtl';\nimport localeMatch from '../utils/locale-match';\nimport localeCode2Text from '../utils/localeCode2Text';\nimport openCompose from '../utils/open-compose';\nimport pmem from '../utils/pmem';\nimport { fetchRelationships } from '../utils/relationships';\nimport shortenNumber from '../utils/shorten-number';\nimport showToast from '../utils/show-toast';\nimport states, { saveStatus } from '../utils/states';\nimport store from '../utils/store';\nimport {\n getCurrentAccount,\n getCurrentAccountNS,\n getCurrentInstance,\n getCurrentInstanceConfiguration,\n} from '../utils/store-utils';\nimport supports from '../utils/supports';\nimport useCloseWatcher from '../utils/useCloseWatcher';\nimport useInterval from '../utils/useInterval';\nimport visibilityIconsMap from '../utils/visibility-icons-map';\n\nimport AccountBlock from './account-block';\n// import Avatar from './avatar';\nimport Icon from './icon';\nimport Loader from './loader';\nimport Modal from './modal';\nimport Status from './status';\n\nconst {\n PHANPY_IMG_ALT_API_URL: IMG_ALT_API_URL,\n PHANPY_GIPHY_API_KEY: GIPHY_API_KEY,\n} = import.meta.env;\n\nconst supportedLanguagesMap = supportedLanguages.reduce((acc, l) => {\n const [code, common, native] = l;\n acc[code] = {\n common,\n native,\n };\n return acc;\n}, {});\n\n/* NOTES:\n - Max character limit includes BOTH status text and Content Warning text\n*/\n\nconst expiryOptions = {\n '5 minutes': 5 * 60,\n '30 minutes': 30 * 60,\n '1 hour': 60 * 60,\n '6 hours': 6 * 60 * 60,\n '12 hours': 12 * 60 * 60,\n '1 day': 24 * 60 * 60,\n '3 days': 3 * 24 * 60 * 60,\n '7 days': 7 * 24 * 60 * 60,\n};\nconst expirySeconds = Object.values(expiryOptions);\nconst oneDay = 24 * 60 * 60;\n\nconst expiresInFromExpiresAt = (expiresAt) => {\n if (!expiresAt) return oneDay;\n const delta = (new Date(expiresAt).getTime() - Date.now()) / 1000;\n return expirySeconds.find((s) => s >= delta) || oneDay;\n};\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\nconst DEFAULT_LANG = localeMatch(\n [new Intl.DateTimeFormat().resolvedOptions().locale, ...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 urlRegexObj = new RegExp(urlRegex.source, urlRegex.flags);\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// 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])(#[a-z0-9_]+([a-z0-9_.]+[a-z0-9_]+)?)(?![\\\\/\\\\w])`,\n 'ig',\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();\nfunction escapeHTML(text) {\n return text\n .replace(/&/g, '&')\n .replace(//g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\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 '' +\n escapeHTML(exceedLimitHTML) +\n '';\n }\n return escapeHTML(withinLimitHTML) + exceedLimitHTML;\n }\n\n return escapeHTML(text)\n .replace(urlRegexObj, '$2$3') // URLs\n .replace(MENTION_RE, '$1$2') // Mentions\n .replace(HASHTAG_RE, '$1$2') // Hashtags\n .replace(\n SCAN_RE,\n '$1$2',\n ); // Emoji shortcodes\n}\n\nconst rtf = new Intl.RelativeTimeFormat();\n\nconst CUSTOM_EMOJIS_COUNT = 100;\n\nfunction Compose({\n onClose,\n replyToStatus,\n editStatus,\n draftStatus,\n standalone,\n hasOpener,\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 = 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,\n charactersReservedPerUrl,\n } = {},\n mediaAttachments: {\n supportedMimeTypes = [],\n imageSizeLimit,\n imageMatrixLimit,\n videoSizeLimit,\n videoMatrixLimit,\n videoFrameRateLimit,\n } = {},\n polls: {\n maxOptions,\n maxCharactersPerOption,\n maxExpiration,\n minExpiration,\n } = {},\n } = configuration || {};\n\n const textareaRef = useRef();\n const spoilerTextRef = useRef();\n const [visibility, setVisibility] = useState('public');\n const [sensitive, setSensitive] = 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\n const prefs = store.account.get('preferences') || {};\n\n const oninputTextarea = () => {\n if (!textareaRef.current) return;\n textareaRef.current.dispatchEvent(new Event('input'));\n };\n const focusTextarea = () => {\n setTimeout(() => {\n if (!textareaRef.current) return;\n // status starts with newline, focus on first position\n if (draftStatus?.status?.startsWith?.('\\n')) {\n textareaRef.current.selectionStart = 0;\n textareaRef.current.selectionEnd = 0;\n }\n console.debug('FOCUS textarea');\n textareaRef.current?.focus();\n }, 300);\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 if (allMentions.length > 0) {\n textareaRef.current.value = `${allMentions\n .map((m) => `@${m}`)\n .join(' ')} `;\n oninputTextarea();\n }\n focusTextarea();\n setVisibility(\n visibility === 'public' && prefs['posting:default:visibility']\n ? prefs['posting:default:visibility']\n : visibility,\n );\n setLanguage(language || prefs.postingDefaultLanguage || DEFAULT_LANG);\n setSensitive(sensitive && !!spoilerText);\n } else if (editStatus) {\n const { visibility, language, sensitive, poll, mediaAttachments } =\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(language || presf.postingDefaultLanguage || DEFAULT_LANG);\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']);\n }\n if (prefs['posting:default:language']) {\n setLanguage(prefs['posting:default:language']);\n }\n if (prefs['posting:default:sensitive']) {\n setSensitive(prefs['posting:default:sensitive']);\n }\n }\n if (draftStatus) {\n const {\n status,\n spoilerText,\n visibility,\n language,\n sensitive,\n poll,\n mediaAttachments,\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 focusTextarea();\n if (spoilerText) spoilerTextRef.current.value = spoilerText;\n if (visibility) setVisibility(visibility);\n setLanguage(language || prefs.postingDefaultLanguage || DEFAULT_LANG);\n if (sensitive !== null) setSensitive(sensitive);\n if (composablePoll) setPoll(composablePoll);\n if (mediaAttachments) setMediaAttachments(mediaAttachments);\n }\n }, [draftStatus, editStatus, replyToStatus]);\n\n const formRef = useRef();\n\n const beforeUnloadCopy = '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\", including multiple mentions like \"@username1@username2\"\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 },\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 hasModal && !hasOnlyComposer;\n },\n },\n );\n useCloseWatcher(() => {\n if (!standalone && confirmClose()) {\n onClose();\n }\n }, [standalone, confirmClose, onClose]);\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 poll,\n mediaAttachments,\n },\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 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 const file = item.getAsFile();\n if (file && supportedMimeTypes.includes(file.type)) {\n files.push(file);\n }\n }\n }\n if (files.length > 0 && mediaAttachments.length >= maxMediaAttachments) {\n alert(`You can only attach up to ${maxMediaAttachments} files.`);\n return;\n }\n console.log({ files });\n if (files.length > 0) {\n e.preventDefault();\n e.stopPropagation();\n // Auto-cut-off files to avoid exceeding maxMediaAttachments\n const max = maxMediaAttachments - mediaAttachments.length;\n const allowedFiles = files.slice(0, max);\n if (allowedFiles.length <= 0) {\n alert(`You can only attach up to ${maxMediaAttachments} files.`);\n return;\n }\n const mediaFiles = allowedFiles.map((file) => ({\n file,\n type: file.type,\n size: file.size,\n url: URL.createObjectURL(file),\n id: null,\n description: null,\n }));\n setMediaAttachments([...mediaAttachments, ...mediaFiles]);\n }\n };\n window.addEventListener('paste', handleItems);\n const handleDragover = (e) => {\n // Prevent default if there's files\n if (e.dataTransfer.items.length > 0) {\n e.preventDefault();\n e.stopPropagation();\n }\n };\n window.addEventListener('dragover', handleDragover);\n window.addEventListener('drop', handleItems);\n return () => {\n window.removeEventListener('paste', handleItems);\n window.removeEventListener('dragover', handleDragover);\n window.removeEventListener('drop', handleItems);\n };\n }, [mediaAttachments]);\n\n const [showMentionPicker, setShowMentionPicker] = useState(false);\n const [showEmoji2Picker, setShowEmoji2Picker] = useState(false);\n const [showGIFPicker, setShowGIFPicker] = useState(false);\n\n const [autoDetectedLanguages, setAutoDetectedLanguages] = useState(null);\n const [topSupportedLanguages, restSupportedLanguages] = useMemo(() => {\n const topLanguages = [];\n const restLanguages = [];\n const { contentTranslationHideLanguages = [] } = states.settings;\n supportedLanguages.forEach((l) => {\n const [code] = l;\n if (\n code === language ||\n code === prevLanguage.current ||\n code === DEFAULT_LANG ||\n contentTranslationHideLanguages.includes(code) ||\n (autoDetectedLanguages?.length && autoDetectedLanguages.includes(code))\n ) {\n topLanguages.push(l);\n } else {\n restLanguages.push(l);\n }\n });\n topLanguages.sort(([codeA, commonA], [codeB, commonB]) => {\n if (codeA === language) return -1;\n if (codeB === language) return 1;\n return commonA.localeCompare(commonB);\n });\n restLanguages.sort(([codeA, commonA], [codeB, commonB]) =>\n commonA.localeCompare(commonB),\n );\n return [topLanguages, restLanguages];\n }, [language, autoDetectedLanguages]);\n\n const replyToStatusMonthsAgo = useMemo(\n () =>\n !!replyToStatus?.createdAt &&\n Math.floor(\n (Date.now() - new Date(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 return (\n
    \n
    \n
    \n {currentAccountInfo?.avatarStatic && (\n // \n \n )}\n {!standalone ? (\n \n {\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 },\n });\n\n if (!newWin) {\n return;\n }\n\n onClose();\n }}\n >\n \n \n \n \n {' '}\n {\n if (confirmClose()) {\n onClose();\n }\n }}\n >\n \n \n \n ) : (\n hasOpener && (\n {\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('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 '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 =\n '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 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 },\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 \n \n )\n )}\n
    \n {!!replyToStatus && (\n
    \n \n
    \n Replying to @\n {replyToStatus.account.acct || replyToStatus.account.username}\n ’s post\n {replyToStatusMonthsAgo >= 3 && (\n <>\n {' '}\n (\n \n {rtf.format(-replyToStatusMonthsAgo, 'month')}\n \n )\n \n )}\n
    \n
    \n )}\n {!!editStatus && (\n
    \n \n
    Editing source post
    \n
    \n )}\n {\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 { status, visibility, sensitive, spoilerText } = entries;\n\n // Pre-cleanup\n sensitive = sensitive === 'on'; // checkboxes return \"on\" if checked\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('Poll must have at least 2 options');\n return;\n }\n if (poll.options.some((option) => option === '')) {\n alert('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 'Some media have no descriptions. Continue?',\n );\n if (!yes) return;\n }\n }\n\n // Post-cleanup\n spoilerText = (sensitive && spoilerText) || undefined;\n status = status === '' ? undefined : status;\n\n // states.composerState.minimized = true;\n states.composerState.publishing = true;\n setUIState('loading');\n (async () => {\n try {\n console.log('MEDIA ATTACHMENTS', mediaAttachments);\n if (mediaAttachments.length > 0) {\n // Upload media attachments first\n const mediaPromises = mediaAttachments.map((attachment) => {\n const { file, description, id } = attachment;\n console.log('UPLOADING', attachment);\n if (id) {\n // If already uploaded\n return attachment;\n } else {\n const params = removeNullUndefined({\n file,\n description,\n });\n return masto.v2.media.create(params).then((res) => {\n if (res.id) {\n attachment.id = res.id;\n }\n return res;\n });\n }\n });\n const results = await Promise.allSettled(mediaPromises);\n\n // If any failed, return\n if (\n results.some((result) => {\n return result.status === 'rejected' || !result.value?.id;\n })\n ) {\n states.composerState.publishing = false;\n states.composerState.publishingError = true;\n setUIState('error');\n // Alert all the reasons\n results.forEach((result) => {\n if (result.status === 'rejected') {\n console.error(result);\n alert(result.reason || `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,\n poll,\n // mediaIds: mediaAttachments.map((attachment) => attachment.id),\n media_ids: mediaAttachments.map(\n (attachment) => attachment.id,\n ),\n };\n if (editStatus && supports('@mastodon/edit-media-attributes')) {\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 } else if (!editStatus) {\n params.visibility = visibility;\n // params.inReplyToId = replyToStatus?.id || undefined;\n params.in_reply_to_id = replyToStatus?.id || undefined;\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 });\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
    \n {\n updateCharCount();\n }}\n />\n \n {\n const sensitive = e.target.checked;\n setSensitive(sensitive);\n if (sensitive) {\n spoilerTextRef.current?.focus();\n } else {\n textareaRef.current?.focus();\n }\n }}\n />\n \n {' '}\n \n \n {\n setVisibility(e.target.value);\n }}\n disabled={uiState === 'loading' || !!editStatus}\n dir=\"auto\"\n >\n \n \n \n \n \n {' '}\n
    \n {\n updateCharCount();\n }}\n maxCharacters={maxCharacters}\n performSearch={(params) => {\n const { type, q, limit } = params;\n if (type === 'accounts') {\n return masto.v1.accounts.search.list({\n q,\n limit,\n resolve: false,\n });\n }\n return masto.v2.search.fetch(params);\n }}\n onTrigger={(action) => {\n if (action?.name === 'custom-emojis') {\n setShowEmoji2Picker({\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 }\n }}\n />\n {mediaAttachments?.length > 0 && (\n
    \n {mediaAttachments.map((attachment, i) => {\n const { id, file } = attachment;\n const fileID = file?.size + file?.type + file?.name;\n return (\n {\n setMediaAttachments((attachments) => {\n const newAttachments = [...attachments];\n newAttachments[i].description = value;\n return newAttachments;\n });\n }}\n onRemove={() => {\n setMediaAttachments((attachments) => {\n return attachments.filter((_, j) => j !== i);\n });\n }}\n />\n );\n })}\n \n
    \n )}\n {!!poll && (\n {\n if (poll) {\n const newPoll = { ...poll };\n setPoll(newPoll);\n } else {\n setPoll(null);\n }\n }}\n />\n )}\n \n \n \n {/* If maxOptions is not defined or defined and is greater than 1, show poll button */}\n {maxOptions == null ||\n (maxOptions > 1 && (\n <>\n {\n setPoll({\n options: ['', ''],\n expiresIn: 24 * 60 * 60, // 1 day\n multiple: false,\n });\n }}\n >\n \n \n \n ))}\n {/* {\n setShowMentionPicker(true);\n }}\n >\n \n */}\n {\n setShowEmoji2Picker(true);\n }}\n >\n \n \n {!!states.settings.composerGIFPicker && (\n = maxMediaAttachments ||\n !!poll\n }\n onClick={() => {\n setShowGIFPicker(true);\n }}\n >\n GIF\n \n )}\n \n
    \n {uiState === 'loading' ? (\n \n ) : (\n
    \n \n
    \n {showMentionPicker && (\n {\n if (e.target === e.currentTarget) {\n setShowMentionPicker(false);\n }\n }}\n >\n {\n setShowMentionPicker(false);\n }}\n defaultSearchTerm={showMentionPicker?.defaultSearchTerm}\n onSelect={(socialAddress) => {\n const textarea = textareaRef.current;\n if (!textarea) return;\n const { selectionStart, selectionEnd } = textarea;\n const text = textarea.value;\n const textBeforeMention = text.slice(0, selectionStart);\n const spaceBeforeMention = textBeforeMention\n ? /[\\s\\t\\n\\r]$/.test(textBeforeMention)\n ? ''\n : ' '\n : '';\n const textAfterMention = text.slice(selectionEnd);\n const spaceAfterMention = /^[\\s\\t\\n\\r]/.test(textAfterMention)\n ? ''\n : ' ';\n const newText =\n textBeforeMention +\n spaceBeforeMention +\n '@' +\n socialAddress +\n spaceAfterMention +\n textAfterMention;\n textarea.value = newText;\n textarea.selectionStart = textarea.selectionEnd =\n selectionEnd +\n 1 +\n socialAddress.length +\n spaceAfterMention.length;\n textarea.focus();\n textarea.dispatchEvent(new Event('input'));\n }}\n />\n \n )}\n {showEmoji2Picker && (\n {\n if (e.target === e.currentTarget) {\n setShowEmoji2Picker(false);\n }\n }}\n >\n {\n setShowEmoji2Picker(false);\n }}\n defaultSearchTerm={showEmoji2Picker?.defaultSearchTerm}\n onSelect={(emojiShortcode) => {\n const textarea = textareaRef.current;\n if (!textarea) return;\n const { selectionStart, selectionEnd } = textarea;\n const text = textarea.value;\n const textBeforeEmoji = text.slice(0, selectionStart);\n const spaceBeforeEmoji = textBeforeEmoji\n ? /[\\s\\t\\n\\r]$/.test(textBeforeEmoji)\n ? ''\n : ' '\n : '';\n const textAfterEmoji = text.slice(selectionEnd);\n const spaceAfterEmoji = /^[\\s\\t\\n\\r]/.test(textAfterEmoji)\n ? ''\n : ' ';\n const newText =\n textBeforeEmoji +\n spaceBeforeEmoji +\n emojiShortcode +\n spaceAfterEmoji +\n textAfterEmoji;\n textarea.value = newText;\n textarea.selectionStart = textarea.selectionEnd =\n selectionEnd + emojiShortcode.length + spaceAfterEmoji.length;\n textarea.focus();\n textarea.dispatchEvent(new Event('input'));\n }}\n />\n \n )}\n {showGIFPicker && (\n {\n if (e.target === e.currentTarget) {\n setShowGIFPicker(false);\n }\n }}\n >\n setShowGIFPicker(false)}\n onSelect={({ url, type, alt_text }) => {\n console.log('GIF URL', url);\n if (mediaAttachments.length >= maxMediaAttachments) {\n alert(\n `You can only attach up to ${maxMediaAttachments} files.`,\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: 'Downloading GIF…',\n duration: -1,\n });\n const blob = await fetch(url, {\n referrerPolicy: 'no-referrer',\n }).then((res) => res.blob());\n const file = new File(\n [blob],\n type === 'video/mp4' ? 'video.mp4' : 'image.gif',\n {\n type,\n },\n );\n const newMediaAttachments = [\n ...mediaAttachments,\n {\n file,\n type,\n size: file.size,\n id: null,\n description: alt_text || '',\n },\n ];\n setMediaAttachments(newMediaAttachments);\n theToast?.hideToast?.();\n } catch (err) {\n console.error(err);\n theToast?.hideToast?.();\n showToast('Failed to download GIF');\n }\n })();\n }}\n />\n \n )}\n
    \n );\n}\n\nfunction autoResizeTextarea(textarea) {\n if (!textarea) return;\n const { value, offsetHeight, scrollHeight, clientHeight } = textarea;\n if (offsetHeight < window.innerHeight) {\n // NOTE: This check is needed because the offsetHeight return 50000 (really large number) on first render\n // No idea why it does that, will re-investigate in far future\n const offset = offsetHeight - clientHeight;\n const height = value ? scrollHeight + offset + 'px' : null;\n textarea.style.height = height;\n }\n}\n\nasync function _getCustomEmojis(instance, masto) {\n const emojis = await masto.v1.customEmojis.list();\n const visibleEmojis = emojis.filter((e) => e.visibleInPicker);\n const searcher = new Fuse(visibleEmojis, {\n keys: ['shortcode'],\n findAllMatches: true,\n });\n return [visibleEmojis, searcher];\n}\nconst getCustomEmojis = pmem(_getCustomEmojis, {\n // Limit by time to reduce memory usage\n // Cached by instance\n matchesArg: (cacheKeyArg, keyArg) => cacheKeyArg.instance === keyArg.instance,\n maxAge: 30 * 60 * 1000, // 30 minutes\n});\n\nconst detectLangs = (text) => {\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 { masto, instance } = api();\n const [text, setText] = useState(ref.current?.value || '');\n const {\n maxCharacters,\n performSearch = () => {},\n onTrigger = () => {},\n ...textareaProps\n } = props;\n // const snapStates = useSnapshot(states);\n // const charCount = snapStates.composerCharacterCount;\n\n // const customEmojis = useRef();\n const searcherRef = useRef();\n useEffect(() => {\n getCustomEmojis(instance, masto)\n .then((r) => {\n const [emojis, searcher] = r;\n searcherRef.current = searcher;\n })\n .catch((e) => {\n console.error(e);\n });\n }, []);\n\n const textExpanderRef = useRef();\n const textExpanderTextRef = useRef('');\n useEffect(() => {\n let handleChange, handleValue, handleCommited;\n if (textExpanderRef.current) {\n handleChange = (e) => {\n // console.log('text-expander-change', 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 emojis = customEmojis.current.filter((emoji) =>\n // emoji.shortcode.startsWith(text),\n // );\n // const emojis = filterShortcodes(customEmojis.current, text);\n const results = searcherRef.current?.search(text, {\n limit: 5,\n });\n let html = '';\n results.forEach(({ item: emoji }) => {\n const { shortcode, url } = emoji;\n html += `\n
  • \n \"\" \n ${encodeHTML(shortcode)}\n
  • `;\n });\n html += `
  • More…
  • `;\n // console.log({ emojis, html });\n menu.innerHTML = html;\n provide(\n Promise.resolve({\n matched: results.length > 0,\n fragment: menu,\n }),\n );\n return;\n }\n\n const type = {\n '@': 'accounts',\n '#': 'hashtags',\n }[key];\n provide(\n new Promise((resolve) => {\n const searchResults = performSearch({\n type,\n q: text,\n limit: 5,\n });\n searchResults.then((value) => {\n if (text !== textExpanderTextRef.current) {\n return;\n }\n console.log({ value, type, v: value[type] });\n const results = value[type] || value;\n console.log('RESULTS', value, results);\n let html = '';\n results.forEach((result) => {\n const {\n name,\n avatarStatic,\n displayName,\n username,\n acct,\n emojis,\n history,\n } = result;\n const displayNameWithEmoji = emojifyText(displayName, emojis);\n // const item = menuItem.cloneNode();\n if (acct) {\n html += `\n
  • \n \n \"\"\n \n \n ${displayNameWithEmoji || username}\n
    @${encodeHTML(\n acct,\n )}\n
    \n
  • \n `;\n } else {\n const total = history?.reduce?.(\n (acc, cur) => acc + +cur.uses,\n 0,\n );\n html += `\n
  • \n #${encodeHTML(name)}\n ${\n total\n ? `${shortenNumber(total)}`\n : ''\n }\n
  • \n `;\n }\n });\n if (type === 'accounts') {\n html += `
  • More…
  • `;\n }\n menu.innerHTML = html;\n console.log('MENU', results, menu);\n resolve({\n matched: results.length > 0,\n fragment: menu,\n });\n });\n }),\n );\n };\n\n textExpanderRef.current.addEventListener(\n 'text-expander-change',\n handleChange,\n );\n\n handleValue = (e) => {\n const { key, item } = e.detail;\n const { value, more } = item.dataset;\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 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 textExpanderRef.current.addEventListener(\n 'text-expander-value',\n handleValue,\n );\n\n handleCommited = (e) => {\n const { input } = e.detail;\n setText(input.value);\n // fire input event\n if (ref.current) {\n const event = new Event('input', { bubbles: true });\n ref.current.dispatchEvent(event);\n }\n };\n\n textExpanderRef.current.addEventListener(\n 'text-expander-committed',\n handleCommited,\n );\n }\n\n return () => {\n if (textExpanderRef.current) {\n textExpanderRef.current.removeEventListener(\n 'text-expander-change',\n handleChange,\n );\n textExpanderRef.current.removeEventListener(\n 'text-expander-value',\n handleValue,\n );\n textExpanderRef.current.removeEventListener(\n 'text-expander-committed',\n handleCommited,\n );\n }\n };\n }, []);\n\n useEffect(() => {\n // Resize observer for textarea\n const textarea = ref.current;\n if (!textarea) return;\n const resizeObserver = new ResizeObserver(() => {\n // Get height of textarea, set height to textExpander\n if (textExpanderRef.current) {\n const { height } = textarea.getBoundingClientRect();\n textExpanderRef.current.style.height = height + 'px';\n }\n });\n resizeObserver.observe(textarea);\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 const langs = detectLangs(text);\n if (langs?.length) {\n onTrigger?.({\n name: 'auto-detect-language',\n languages: langs,\n });\n }\n }, 2000);\n\n return (\n \n {\n // Get line before cursor position after pressing 'Enter'\n const { key, target } = e;\n if (key === 'Enter' && !(e.ctrlKey || e.metaKey)) {\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 // Replace zero-width space\n const text = target.value.replace(/\\u200b/g, '');\n setText(text);\n autoResizeTextarea(target);\n props.onInput?.(e);\n throttleHighlightText(text);\n debouncedAutoDetectLanguage();\n }}\n style={{\n width: '100%',\n height: '4em',\n // '--text-weight': (1 + charCount / 140).toFixed(1) || 1,\n }}\n onScroll={(e) => {\n if (composeHighlightRef.current) {\n const { scrollTop } = e.target;\n composeHighlightRef.current.scrollTop = scrollTop;\n }\n }}\n />\n \n \n );\n});\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 \n );\n}\n\nfunction prettyBytes(bytes) {\n const units = ['bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n let unitIndex = 0;\n while (bytes >= 1024) {\n bytes /= 1024;\n unitIndex++;\n }\n return `${bytes.toFixed(0).toLocaleString()} ${units[unitIndex]}`;\n}\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 onDescriptionChange = () => {},\n onRemove = () => {},\n}) {\n const [uiState, setUIState] = useState('default');\n const supportsEdit = supports('@mastodon/edit-media-attributes');\n const { type, id, file } = attachment;\n const url = useMemo(\n () => (file ? URL.createObjectURL(file) : attachment.url),\n [file, attachment.url],\n );\n console.log({ attachment });\n\n const checkMaxError = !!file?.size;\n const configuration = checkMaxError ? getCurrentInstanceConfiguration() : {};\n const {\n mediaAttachments: {\n imageSizeLimit,\n imageMatrixLimit,\n videoSizeLimit,\n videoMatrixLimit,\n videoFrameRateLimit,\n } = {},\n } = configuration || {};\n\n const [maxError, setMaxError] = useState(() => {\n if (!checkMaxError) return null;\n if (\n type.startsWith('image') &&\n imageSizeLimit &&\n file.size > imageSizeLimit\n ) {\n return {\n type: 'imageSizeLimit',\n details: {\n imageSize: file.size,\n imageSizeLimit,\n },\n };\n } else if (\n type.startsWith('video') &&\n videoSizeLimit &&\n file.size > videoSizeLimit\n ) {\n return {\n type: 'videoSizeLimit',\n details: {\n videoSize: file.size,\n videoSizeLimit,\n },\n };\n }\n return null;\n });\n\n const [imageMatrix, setImageMatrix] = useState({});\n useEffect(() => {\n if (!checkMaxError || !imageMatrixLimit) return;\n if (imageMatrix?.matrix > imageMatrixLimit) {\n setMaxError({\n type: 'imageMatrixLimit',\n details: {\n imageMatrix: imageMatrix?.matrix,\n imageMatrixLimit,\n width: imageMatrix?.width,\n height: imageMatrix?.height,\n },\n });\n }\n }, [imageMatrix, imageMatrixLimit, checkMaxError]);\n\n const [videoMatrix, setVideoMatrix] = useState({});\n useEffect(() => {\n if (!checkMaxError || !videoMatrixLimit) return;\n if (videoMatrix?.matrix > videoMatrixLimit) {\n setMaxError({\n type: 'videoMatrixLimit',\n details: {\n videoMatrix: videoMatrix?.matrix,\n videoMatrixLimit,\n width: videoMatrix?.width,\n height: videoMatrix?.height,\n },\n });\n }\n }, [videoMatrix, videoMatrixLimit, checkMaxError]);\n\n const [description, setDescription] = useState(attachment.description);\n const [suffixType, subtype] = type.split('/');\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
    \n Uploaded\n

    \n {attachment.description || No description}\n

    \n
    \n ) : (\n {\n const { value } = e.target;\n setDescription(value);\n // debouncedOnDescriptionChange(value);\n }}\n >\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 `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 `Dimension too large. Uploading might encounter issues. Try reduce dimension from ${width.toLocaleString()}×${height.toLocaleString()}px to ${newWidth.toLocaleString()}×${newHeight.toLocaleString()}px.`;\n }\n case 'videoSizeLimit': {\n const { videoSize, videoSizeLimit } = details;\n return `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 `Dimension too large. Uploading might encounter issues. Try reduce dimension from ${width.toLocaleString()}×${height.toLocaleString()}px to ${newWidth.toLocaleString()}×${newHeight.toLocaleString()}px.`;\n }\n case 'videoFrameRateLimit': {\n // Not possible to detect this on client-side for now\n return 'Frame rate too high. Uploading might encounter issues.';\n }\n }\n };\n\n return (\n <>\n
    \n {\n setShowModal(true);\n }}\n >\n {suffixType === 'image' ? (\n {\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 {\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
    \n {descTextarea}\n
    \n \n \n \n {!!maxError && (\n {\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 \n \n )}\n
    \n \n {showModal && (\n {\n setShowModal(false);\n }}\n >\n
    \n {\n setShowModal(false);\n }}\n >\n \n \n
    \n

    \n {\n {\n image: 'Edit image description',\n video: 'Edit video description',\n audio: 'Edit audio description',\n }[suffixType]\n }\n

    \n
    \n
    \n
    \n {suffixType === 'image' ? (\n \"\"\n ) : suffixType === 'video' || suffixType === 'gifv' ? (\n
    \n
    \n {descTextarea}\n
    \n {suffixType === 'image' &&\n /^(png|jpe?g|gif|webp)$/i.test(subtype) &&\n !!states.settings.mediaAltGenerator &&\n !!IMG_ALT_API_URL && (\n \n \n \n }\n >\n {\n setUIState('loading');\n toastRef.current = showToast({\n text: 'Generating description. Please wait...',\n duration: -1,\n });\n // POST with multipart\n (async function () {\n try {\n const body = new FormData();\n body.append('image', file);\n const response = await fetch(IMG_ALT_API_URL, {\n method: 'POST',\n body,\n }).then((r) => r.json());\n if (response.error) {\n throw new Error(response.error);\n }\n setDescription(response.description);\n } catch (e) {\n console.error(e);\n showToast(\n `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 \n {lang && lang !== 'en' ? (\n \n Generate description…\n
    \n (English)\n
    \n ) : (\n Generate description…\n )}\n \n {!!lang && lang !== 'en' && (\n {\n setUIState('loading');\n toastRef.current = showToast({\n text: 'Generating description. Please wait...',\n duration: -1,\n });\n // POST with multipart\n (async function () {\n try {\n const body = new FormData();\n body.append('image', file);\n const params = `?lang=${lang}`;\n const response = await fetch(\n IMG_ALT_API_URL + params,\n {\n method: 'POST',\n body,\n },\n ).then((r) => r.json());\n if (response.error) {\n throw new Error(response.error);\n }\n setDescription(response.description);\n } catch (e) {\n console.error(e);\n showToast(\n `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 \n \n Generate description…\n
    ({localeCode2Text(lang)}){' '}\n \n — experimental\n \n
    \n \n )}\n \n )}\n {\n setShowModal(false);\n }}\n disabled={uiState === 'loading'}\n >\n Done\n \n
    \n
    \n
    \n
    \n \n )}\n \n );\n}\n\nfunction Poll({\n lang,\n poll,\n disabled,\n onInput = () => {},\n maxOptions,\n maxExpiration,\n minExpiration,\n maxCharactersPerOption,\n}) {\n const { options, expiresIn, multiple } = poll;\n\n return (\n
    \n
    \n {options.map((option, i) => (\n
    \n {\n const { value } = e.target;\n options[i] = value;\n onInput(poll);\n }}\n />\n {\n options.splice(i, 1);\n onInput(poll);\n }}\n >\n \n \n
    \n ))}\n
    \n
    \n = maxOptions}\n onClick={() => {\n options.push('');\n onInput(poll);\n }}\n >\n +\n {' '}\n \n \n
    \n
    \n {\n onInput(null);\n }}\n >\n Remove poll\n \n
    \n
    \n );\n}\n\nfunction filterShortcodes(emojis, searchTerm) {\n searchTerm = searchTerm.toLowerCase();\n\n // Return an array of shortcodes that start with or contain the search term, sorted by relevance and limited to the first 5\n return emojis\n .sort((a, b) => {\n let aLower = a.shortcode.toLowerCase();\n let bLower = b.shortcode.toLowerCase();\n\n let aStartsWith = aLower.startsWith(searchTerm);\n let bStartsWith = bLower.startsWith(searchTerm);\n let aContains = aLower.includes(searchTerm);\n let bContains = bLower.includes(searchTerm);\n let bothStartWith = aStartsWith && bStartsWith;\n let bothContain = aContains && bContains;\n\n return bothStartWith\n ? a.length - b.length\n : aStartsWith\n ? -1\n : bStartsWith\n ? 1\n : bothContain\n ? a.length - b.length\n : aContains\n ? -1\n : bContains\n ? 1\n : 0;\n })\n .slice(0, 5);\n}\n\nfunction encodeHTML(str) {\n return str.replace(/[&<>\"']/g, function (char) {\n return '&#' + char.charCodeAt(0) + ';';\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\nfunction MentionModal({\n onClose = () => {},\n onSelect = () => {},\n defaultSearchTerm,\n}) {\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 },\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 },\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 },\n );\n\n return (\n
    \n {!!onClose && (\n \n )}\n
    \n {\n e.preventDefault();\n debouncedLoadAccounts.flush?.();\n // const searchTerm = inputRef.current.value;\n // debouncedLoadAccounts(searchTerm);\n }}\n >\n {\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 defaultValue={defaultSearchTerm || ''}\n />\n \n
    \n
    \n {accounts?.length > 0 ? (\n \n {accounts.map((account, i) => {\n const relationship = relationshipsMap[account.id];\n return (\n \n \n {\n selectAccount(account);\n }}\n >\n \n \n \n );\n })}\n \n ) : uiState === 'loading' ? (\n
    \n \n
    \n ) : uiState === 'error' ? (\n
    \n

    Error loading accounts

    \n
    \n ) : null}\n
    \n
    \n );\n}\n\nfunction CustomEmojisModal({\n masto,\n instance,\n onClose = () => {},\n onSelect = () => {},\n defaultSearchTerm,\n}) {\n const [uiState, setUIState] = useState('default');\n const customEmojisList = useRef([]);\n const [customEmojis, setCustomEmojis] = useState([]);\n const recentlyUsedCustomEmojis = useMemo(\n () => store.account.get('recentlyUsedCustomEmojis') || [],\n );\n const searcherRef = useRef();\n useEffect(() => {\n setUIState('loading');\n (async () => {\n try {\n const [emojis, searcher] = await getCustomEmojis(instance, masto);\n console.log('emojis', emojis);\n searcherRef.current = searcher;\n setCustomEmojis(emojis);\n setUIState('default');\n } catch (e) {\n setUIState('error');\n console.error(e);\n }\n })();\n }, []);\n\n const customEmojisCatList = useMemo(() => {\n // Group emojis by category\n const emojisCat = {\n '--recent--': recentlyUsedCustomEmojis.filter((emoji) =>\n customEmojis.find((e) => e.shortcode === emoji.shortcode),\n ),\n };\n const othersCat = [];\n customEmojis.forEach((emoji) => {\n customEmojisList.current?.push?.(emoji);\n if (!emoji.category) {\n othersCat.push(emoji);\n return;\n }\n if (!emojisCat[emoji.category]) {\n emojisCat[emoji.category] = [];\n }\n emojisCat[emoji.category].push(emoji);\n });\n if (othersCat.length) {\n emojisCat['--others--'] = othersCat;\n }\n return emojisCat;\n }, [customEmojis]);\n\n const scrollableRef = useRef();\n const [matches, setMatches] = useState(null);\n const 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 return (\n
    \n {!!onClose && (\n \n )}\n
    \n
    \n Custom emojis{' '}\n {uiState === 'loading' ? (\n \n ) : (\n • {instance}\n )}\n
    \n {\n e.preventDefault();\n const emoji = matches[0];\n if (emoji) {\n onSelectEmoji(`:${emoji.shortcode}:`);\n }\n }}\n >\n \n \n
    \n
    \n {matches !== null ? (\n
      \n {matches.map((emoji) => (\n
    • \n {\n onSelectEmoji(`:${emoji.shortcode}:`);\n }}\n showCode\n />\n
    • \n ))}\n
    \n ) : (\n
    \n {uiState === 'error' && (\n
    \n

    Error loading custom emojis

    \n
    \n )}\n {uiState === 'default' &&\n Object.entries(customEmojisCatList).map(\n ([category, emojis]) =>\n !!emojis?.length && (\n <>\n
    \n {{\n '--recent--': 'Recently used',\n '--others--': 'Others',\n }[category] || category}\n
    \n \n \n ),\n )}\n
    \n )}\n
    \n
    \n );\n}\n\nconst CustomEmojisList = memo(({ emojis, onSelect }) => {\n const [max, setMax] = useState(CUSTOM_EMOJIS_COUNT);\n const showMore = emojis.length > max;\n return (\n
    \n {emojis.slice(0, max).map((emoji) => (\n {\n onSelect(`:${emoji.shortcode}:`);\n }}\n />\n ))}\n {showMore && (\n setMax(max + CUSTOM_EMOJIS_COUNT)}\n >\n {(emojis.length - max).toLocaleString()} more…\n \n )}\n
    \n );\n});\n\nconst CustomEmojiButton = memo(({ emoji, onClick, showCode }) => {\n const addEdges = (e) => {\n // Add edge-left or edge-right class based on self position relative to scrollable parent\n // If near left edge, add edge-left, if near right edge, add edge-right\n const buffer = 88;\n const parent = e.currentTarget.closest('main');\n if (parent) {\n const rect = parent.getBoundingClientRect();\n const selfRect = e.currentTarget.getBoundingClientRect();\n const targetClassList = e.currentTarget.classList;\n if (selfRect.left < rect.left + buffer) {\n targetClassList.add('edge-left');\n targetClassList.remove('edge-right');\n } else if (selfRect.right > rect.right - buffer) {\n targetClassList.add('edge-right');\n targetClassList.remove('edge-left');\n } else {\n targetClassList.remove('edge-left', 'edge-right');\n }\n }\n };\n\n return (\n \n \n {!!emoji.staticUrl && (\n \n )}\n \n \n {showCode && (\n <>\n {' '}\n {emoji.shortcode}\n \n )}\n \n );\n});\n\nconst GIFS_PER_PAGE = 20;\nfunction GIFPickerModal({ onClose = () => {}, onSelect = () => {} }) {\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 };\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
    \n {!!onClose && (\n \n )}\n
    \n {\n e.preventDefault();\n fetchGIFs({ offset: 0 });\n }}\n >\n \n \n \n
    \n
    \n {uiState === 'default' && (\n
    \n

    Type to search GIFs

    \n
    \n )}\n {uiState === 'loading' && !results?.data?.length && (\n
    \n \n
    \n )}\n {results?.data?.length > 0 ? (\n <>\n
      \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
    • \n {\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 \n \n {strippedWebP && (\n \n )}\n {\n e.target.style.backgroundColor = 'transparent';\n }}\n />\n \n
      {alt_text || title}
      \n \n \n
    • \n );\n })}\n
    \n

    \n {results.pagination?.offset > 0 && (\n {\n fetchGIFs({\n offset: results.pagination?.offset - GIFS_PER_PAGE,\n });\n }}\n >\n \n Previous\n \n )}\n \n {results.pagination?.offset + results.pagination?.count <\n results.pagination?.total_count && (\n {\n fetchGIFs({\n offset: results.pagination?.offset + GIFS_PER_PAGE,\n });\n }}\n >\n Next \n \n )}\n

    \n \n ) : (\n uiState === 'results' && (\n
    \n

    No results

    \n
    \n )\n )}\n {uiState === 'error' && (\n
    \n

    Error loading GIFs

    \n
    \n )}\n
    \n
    \n );\n}\n\nexport default Compose;\n"],"names":["Combobox","input","list","tabInsertsSuggestions","defaultFirstOption","event","keyboardBindings","trackComposition","commitWithElement","_a","visible","indexDiff","focusEl","els","focusIndex","indexOfItem","newIndex","target","el","scrollTo","combobox","commit","fireCommitEvent","container","inViewport","element","scrollTop","containerBottom","top","bottom","boundary","query","text","key","cursor","multiWord","lookBackIndex","lastMatchPosition","keyIndex","pre","CustomHTMLElement","InputStyleCloneUpdateEvent","CloneRegistry","_InputStyleCloneElement","__privateAdd","_InputStyleCloneElement_instances","_styleObserver","__privateMethod","updateStyles_fn","_resizeObserver","requestUpdateLayout_fn","_inputRef","_container","_xOffset","_yOffset","_isLayoutUpdating","_onInput","updateText_fn","_onDocumentScrollOrResize","usingInput_fn","__privateSet","__privateGet","clone","fn","updateLayout_fn","inputStyle","inputRect","cloneRect","prop","propertiesToCopy","InputStyleCloneElement","e","_InputRange","startOffset","endOffset","_InputRange_instances","_inputElement","_startOffset","_endOffset","selectionStart","selectionEnd","offset","clampOffset_fn","toStart","createCloneRange_fn","styleClone_get","cloneElement_get","range","textNode","InputRange","states","TextExpander","expander","match","menu","_b","position","caretRect","targetPosition","currentPosition","delta","currentStyle","item","beginning","remaining","detail","suffix","value","found","providers","provide","result","x","TextExpanderElement","keysAttr","keys","multiWordAttr","globalMultiWord","state","ansiRegex","onlyFirst","pattern","regex","stripAnsi","string","segmenter","stringLength","countAnsiEscapeCodes","length","_","poweredByGiphyURL","PHANPY_IMG_ALT_API_URL","IMG_ALT_API_URL","PHANPY_GIPHY_API_KEY","GIPHY_API_KEY","import","supportedLanguagesMap","supportedLanguages","reduce","acc","l","code","common","native","expiryOptions","expirySeconds","Object","values","oneDay","expiresInFromExpiresAt","expiresAt","Date","getTime","now","find","s","document","createElement","role","className","windowMargin","observer","IntersectionObserver","entries","forEach","entry","isIntersecting","left","width","boundingClientRect","innerWidth","window","insetInlineStart","isRTL","style","observe","DEFAULT_LANG","localeMatch","Intl","DateTimeFormat","resolvedOptions","locale","navigator","languages","map","urlRegexObj","RegExp","urlRegex","source","flags","usernameRegex","urlPlaceholder","countableText","inputText","replace","USERNAME_RE","MENTION_RE","HASHTAG_RE","SHORTCODE_RE_FRAGMENT","SCAN_RE","Segmenter","escapeHTML","highlightText","maxCharacters","Infinity","composerCharacterCount","withinLimitHTML","exceedLimitHTML","htmlSegments","segment","index","rtf","RelativeTimeFormat","CUSTOM_EMOJIS_COUNT","Compose","onClose","replyToStatus","editStatus","draftStatus","standalone","hasOpener","console","masto","instance","uiState","setUIState","useState","UID","uid","log","currentAccount","currentAccountInfo","maxMediaAttachments","charactersReservedPerUrl","imageMatrixLimit","supportedMimeTypes","imageSizeLimit","videoSizeLimit","videoMatrixLimit","videoFrameRateLimit","maxExpiration","maxOptions","maxCharactersPerOption","minExpiration","spoilerTextRef","useRef","textareaRef","store","prevLanguage","language","sensitive","setMediaAttachments","setLanguage","oninputTextarea","poll","account","focusTextarea","dispatchEvent","setTimeout","spoilerText","useEffect","visibility2","language2","sensitive2","visibility","current","m","allMentions","prefs","setSensitive","poll2","mediaAttachments","options","expiresIn","statusSource","dataset","mediaAttachments2","setVisibility","composablePoll","status","o","formRef","hasValue","hasMediaAttachments","isSelf","hasOnlyAcct","confirmClose","hasIDMediaAttachments","beforeUnloadCopy","id","handleBeforeUnload","sameWithSource","getCharCount","updateCharCount","supportsCloseWatcher","useHotkeys","yes","addEventListener","capture","modals","hasModal","hasOnlyComposer","prevBackgroundDraft","count","escDownRef","ignoreEventWhen","useCloseWatcher","canClose","draftKey","getCurrentAccountNS","backgroundDraft","useInterval","db","handleItems","username","acct","items","i2","file","files","drafts","allowedFiles","updatedAt","then","debug","error","mediaFiles","handleDragover","includes","showMentionPicker","setShowMentionPicker","showEmoji2Picker","setShowEmoji2Picker","showGIFPicker","autoDetectedLanguages","setAutoDetectedLanguages","topSupportedLanguages","restSupportedLanguages","useMemo","topLanguages","contentTranslationHideLanguages","max","restLanguages","commonB","type","size","url","codeA","commonA","codeB","onMinimize","saveUnsavedDraft","_jsxs","dataTransfer","_jsx","children","passData","Icon","alert","settings","sort","class","avatarStatic","instanceURL","onClick","opener","composerState","Status","replyToStatusMonthsAgo","_Fragment","formData","previewMode","option","media","pointerEvents","opacity","mediaPromises","attachment","description","params2","removeNullUndefined","res","results","some","hasNoDescriptions","params","saveStatus","newStatus","allSettled","e2","media_attributes","in_reply_to_id","onInput","onChange","limit","focus","q","title","icon","action","disabled","MediaAttachment","attachments","newAttachments","required","fileID","performSearch","v1","search","resolve","v2","fetch","onTrigger","defaultSearchTerm","newPoll","setPoll","onDescriptionChange","i","accept","multiple","setShowGIFPicker","Array","Loader","CharCountMeter","Modal","MentionModal","socialAddress","textarea","abrupt","textBeforeMention","textAfterMention","newText","spaceBeforeMention","spaceAfterMention","set","CustomEmojisModal","emojiShortcode","textBeforeEmoji","spaceBeforeEmoji","spaceAfterEmoji","textAfterEmoji","GIFPickerModal","alt_text","showToast","blob","onSelect","theToast","offsetHeight","scrollHeight","clientHeight","height","visibleEmojis","searcher","getCustomEmojis","pmem","_getCustomEmojis","cacheKeyArg","keyArg","detectLangs","langs","lang","newMediaAttachments","setText","ref","props","searcherRef","r","emojis","textExpanderRef","textExpanderTextRef","text2","emoji","shortcode","encodeHTML","forwardRef","html","textareaProps","handleChange","total","history","cur","matched","handleValue","more","searchResults","v","name","displayName","handleCommited","shortenNumber","slowHighlightPerf","composeHighlightRef","start","end","debouncedAutoDetectLanguage","useDebouncedCallback","dom","mark","Event","resizeObserver","throttleHighlightText","bullet","postSpaces","anything","lastLine","innerHTML","number","preSpaces","newBullet","pos","innerText","autoResizeTextarea","dir","rows","cols","onKeyDown","hidden","charCount","leftChars","ctrlKey","setRangeText","setSelectionRange","prettyBytes","bytes","unitIndex","units","scaleDimension","newWidth","scalingFactor","newHeight","onRemove","supportsEdit","supports","onScroll","checkMaxError","configuration","getCurrentInstanceConfiguration","snapStates","setImageMatrix","imageMatrix","setMaxError","matrix","Math","videoMatrix","setDescription","suffixType","subtype","debouncedOnDescriptionChange","timer","maxError","details","toastRef","maxErrorText","err","type2","imageSizeLimit2","imageSize","imageMatrixLimit2","showModal","videoSize","clearTimeout","videoSizeLimit2","descTextarea","videoMatrix2","videoMatrixLimit2","autoCapitalize","autoComplete","naturalWidth","naturalHeight","maxErrorToast","setVideoMatrix","videoWidth","videoHeight","setShowModal","tabIndex","src","onLoad","playsinline","onLoadedMetadata","Menu2","body","response","MenuItem","menuButton","localeCode2Text","append","Poll","checked","label","maxlength","placeholder","str","char","obj","accounts2","relationships","fetchRelationships","relationshipsMap","setRelationshipsMap","filter","setAccounts","loadRelationships","loadAccounts","inputRef","filterShortcodes","searchTerm","bLower","aStartsWith","bStartsWith","aContains","bothContain","bContains","selectedAccount","accounts","selectedIndex","selectAccount","listRef","setSelectedIndex","selectedItem","term","debouncedLoadAccounts","enableOnFormTags","AccountBlock","relationship","inline","customEmojis","setCustomEmojis","onSubmit","recentlyUsedCustomEmojis","autocorrect","customEmojisList","othersCat","emojisCat","useCallback","_c","scrollableRef","setMatches","onFind","onSelectEmoji","recentlyUsedCustomEmojis2","recentlyUsedEmojiIndex","emoji2","customEmojisCatList","category","matches","CustomEmojiButton","queueMicrotask","splice","CustomEmojisList","setMax","showMore","memo","showCode","parent","rect","selfRect","targetClassList","addEdges","GIFS_PER_PAGE","setResults","qRef","closest","getBoundingClientRect","remove","staticUrl","loading","debouncedOnInput","currentOffset","gif","fixed_height_downsampled","original","pagination","fixed_height_small","fixed_height","theImage","urlObj","strippedWebP","webp","webpObj","url2","theURL","mp4","urlObj2","strippedURL2","strippedURL","images","fetchGIFs","parse"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4]} \ No newline at end of file diff --git a/assets/compose-Q2Nvocbp.js b/assets/compose-Q2Nvocbp.js deleted file mode 100644 index 7aa9dff..0000000 --- a/assets/compose-Q2Nvocbp.js +++ /dev/null @@ -1,2 +0,0 @@ -import{h as w,I as p,U as S,y as i,c as e,C as f,Y as h}from"./useTitle-v86HJIox.js";window.opener&&(console=window.opener.console);function m(){var s,a;const[t,d]=w("default"),{editStatus:n,replyToStatus:o,draftStatus:l}=window.__COMPOSE__||{};return p(n?"Editing source status":o?`Replying to @${((s=o.account)==null?void 0:s.acct)||((a=o.account)==null?void 0:a.username)}`:"Compose"),i(()=>{S()},[]),i(()=>{if(t==="closed"){try{window.opener.focus()}catch{}window.close()}},[t]),t==="closed"?e("div",{class:"box",children:[e("p",{children:"You may close this page now."}),e("p",{children:e("button",{onClick:()=>{window.close()},children:"Close window"})})]}):e(f,{editStatus:n,replyToStatus:o,draftStatus:l,standalone:!0,hasOpener:window.opener,onClose:c=>{const{newStatus:r,fn:u=()=>{}}=c||{};try{r&&window.opener.__STATES__.reloadStatusPage++,u(),d("closed")}catch{}}})}h(e(m,{}),document.getElementById("app-standalone")); -//# sourceMappingURL=compose-Q2Nvocbp.js.map diff --git a/assets/compose-Q2Nvocbp.js.map b/assets/compose-Q2Nvocbp.js.map deleted file mode 100644 index a2e6d8a..0000000 --- a/assets/compose-Q2Nvocbp.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"compose-Q2Nvocbp.js","sources":["../../src/compose.jsx"],"sourcesContent":["import './index.css';\nimport './app.css';\nimport './polyfills';\n\nimport { render } from 'preact';\nimport { useEffect, useState } from 'preact/hooks';\n\nimport ComposeSuspense from './components/compose-suspense';\nimport { initStates } from './utils/states';\nimport useTitle from './utils/useTitle';\n\nif (window.opener) {\n console = window.opener.console;\n}\n\nfunction App() {\n const [uiState, setUIState] = useState('default');\n\n const { editStatus, replyToStatus, draftStatus } = window.__COMPOSE__ || {};\n\n useTitle(\n editStatus\n ? 'Editing source status'\n : replyToStatus\n ? `Replying to @${\n replyToStatus.account?.acct || replyToStatus.account?.username\n }`\n : 'Compose',\n );\n\n useEffect(() => {\n initStates();\n }, []);\n\n useEffect(() => {\n if (uiState === 'closed') {\n try {\n // Focus parent window\n window.opener.focus();\n } catch (e) {}\n window.close();\n }\n }, [uiState]);\n\n if (uiState === 'closed') {\n return (\n
    \n

    You may close this page now.

    \n

    \n {\n window.close();\n }}\n >\n Close window\n \n

    \n
    \n );\n }\n\n console.debug('OPEN COMPOSE');\n\n return (\n {\n const { newStatus, fn = () => {} } = results || {};\n try {\n if (newStatus) {\n window.opener.__STATES__.reloadStatusPage++;\n }\n fn();\n setUIState('closed');\n } catch (e) {}\n }}\n />\n );\n}\n\nrender(, document.getElementById('app-standalone'));\n"],"names":["window","opener","console","App","uiState","setUIState","useState","editStatus","replyToStatus","draftStatus","__COMPOSE__","account","acct","username","useEffect","initStates","focus","close","_jsxs","class","children","_jsx","onClick","standalone","hasOpener","newStatus","results","fn","render"],"mappings":"qFAWIA,OAAOC,SACTC,QAAUF,OAAOC,OAAOC,SAG1B,SAASC,GAAM,SACb,KAAM,CAACC,EAASC,CAAU,EAAIC,EAAS,SAAS,EAE1C,CAAEC,WAAAA,EAAYC,cAAAA,EAAeC,YAAAA,CAAAA,EAAgBT,OAAOU,aAAe,GA0BzE,OAvBEH,EAAAA,EACI,wBACAC,EACA,kBACEA,EAAAA,EAAcG,UAAdH,YAAAA,EAAuBI,SAAQJ,EAAAA,EAAcG,UAAdH,YAAAA,EAAuBK,SAAQ,GAEhE,SACN,EAEAC,EAAU,IAAM,CACHC,GACb,EAAG,CAAE,CAAA,EAELD,EAAU,IAAM,CACd,GAAIV,IAAY,SAAU,CACpB,GAAA,CAEFJ,OAAOC,OAAOe,aACJ,CAAC,CACbhB,OAAOiB,MAAM,CACf,CAAA,EACC,CAACb,CAAO,CAAC,EAERA,IAAY,SAEZc,EAAA,MAAA,CAAKC,MAAM,MAAKC,UACdC,EAAA,IAAA,CAAAD,SAAG,8BAAA,CAA+B,EAClCC,EAAA,IAAA,CAAAD,SACEC,EAAA,SAAA,CACEC,QAASA,IAAM,CACbtB,OAAOiB,MAAM,CACf,EAAEG,SACH,cAAA,CAEO,CAAA,CACP,CAAC,CAAA,CACD,EAITlB,IAA4B,CAE5B,WAAAK,EAEIA,cAAAA,EACAC,YAAAA,EACAC,WAAAA,GACAc,UAAU,OAAA,OACVC,WAAkBvB,OAEV,UAAAwB,EAAEA,GAAAA,EAAAA,IAAAA,EAAsB,EAACC,GAAA,CAAA,EAAE,GAAIA,CACjCD,GACF,OAAe,OAAA,WAAA,mBAEfE,IACGtB,EAAA,QAAA,CACHA,MAAAA,EACW,CAAA,CACf,CAAA,CAGNuB,EAAAP,EAAAlB,EAAA,CAAA,CAAA,EAAA,SAAA,eAAA,gBAAA,CAAA"} \ No newline at end of file diff --git a/assets/compose-SFPeyg8r.js b/assets/compose-SFPeyg8r.js deleted file mode 100644 index 239804d..0000000 --- a/assets/compose-SFPeyg8r.js +++ /dev/null @@ -1,2 +0,0 @@ -import{h as w,I as p,U as S,y as i,c as e,C as f,Y as h}from"./useTitle-4zhrJw0D.js";window.opener&&(console=window.opener.console);function m(){var s,a;const[t,d]=w("default"),{editStatus:n,replyToStatus:o,draftStatus:l}=window.__COMPOSE__||{};return p(n?"Editing source status":o?`Replying to @${((s=o.account)==null?void 0:s.acct)||((a=o.account)==null?void 0:a.username)}`:"Compose"),i(()=>{S()},[]),i(()=>{if(t==="closed"){try{window.opener.focus()}catch{}window.close()}},[t]),t==="closed"?e("div",{class:"box",children:[e("p",{children:"You may close this page now."}),e("p",{children:e("button",{onClick:()=>{window.close()},children:"Close window"})})]}):e(f,{editStatus:n,replyToStatus:o,draftStatus:l,standalone:!0,hasOpener:window.opener,onClose:c=>{const{newStatus:r,fn:u=()=>{}}=c||{};try{r&&window.opener.__STATES__.reloadStatusPage++,u(),d("closed")}catch{}}})}h(e(m,{}),document.getElementById("app-standalone")); -//# sourceMappingURL=compose-SFPeyg8r.js.map diff --git a/assets/compose-SFPeyg8r.js.map b/assets/compose-SFPeyg8r.js.map deleted file mode 100644 index abd56a8..0000000 --- a/assets/compose-SFPeyg8r.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"compose-SFPeyg8r.js","sources":["../../src/compose.jsx"],"sourcesContent":["import './index.css';\nimport './app.css';\nimport './polyfills';\n\nimport { render } from 'preact';\nimport { useEffect, useState } from 'preact/hooks';\n\nimport ComposeSuspense from './components/compose-suspense';\nimport { initStates } from './utils/states';\nimport useTitle from './utils/useTitle';\n\nif (window.opener) {\n console = window.opener.console;\n}\n\nfunction App() {\n const [uiState, setUIState] = useState('default');\n\n const { editStatus, replyToStatus, draftStatus } = window.__COMPOSE__ || {};\n\n useTitle(\n editStatus\n ? 'Editing source status'\n : replyToStatus\n ? `Replying to @${\n replyToStatus.account?.acct || replyToStatus.account?.username\n }`\n : 'Compose',\n );\n\n useEffect(() => {\n initStates();\n }, []);\n\n useEffect(() => {\n if (uiState === 'closed') {\n try {\n // Focus parent window\n window.opener.focus();\n } catch (e) {}\n window.close();\n }\n }, [uiState]);\n\n if (uiState === 'closed') {\n return (\n
    \n

    You may close this page now.

    \n

    \n {\n window.close();\n }}\n >\n Close window\n \n

    \n
    \n );\n }\n\n console.debug('OPEN COMPOSE');\n\n return (\n {\n const { newStatus, fn = () => {} } = results || {};\n try {\n if (newStatus) {\n window.opener.__STATES__.reloadStatusPage++;\n }\n fn();\n setUIState('closed');\n } catch (e) {}\n }}\n />\n );\n}\n\nrender(, document.getElementById('app-standalone'));\n"],"names":["window","opener","console","App","uiState","setUIState","useState","editStatus","replyToStatus","draftStatus","__COMPOSE__","account","acct","username","useEffect","initStates","focus","close","_jsxs","class","children","_jsx","onClick","standalone","hasOpener","newStatus","results","fn","render"],"mappings":"qFAWIA,OAAOC,SACTC,QAAUF,OAAOC,OAAOC,SAG1B,SAASC,GAAM,SACb,KAAM,CAACC,EAASC,CAAU,EAAIC,EAAS,SAAS,EAE1C,CAAEC,WAAAA,EAAYC,cAAAA,EAAeC,YAAAA,CAAAA,EAAgBT,OAAOU,aAAe,GA0BzE,OAvBEH,EAAAA,EACI,wBACAC,EACA,kBACEA,EAAAA,EAAcG,UAAdH,YAAAA,EAAuBI,SAAQJ,EAAAA,EAAcG,UAAdH,YAAAA,EAAuBK,SAAQ,GAEhE,SACN,EAEAC,EAAU,IAAM,CACHC,GACb,EAAG,CAAE,CAAA,EAELD,EAAU,IAAM,CACd,GAAIV,IAAY,SAAU,CACpB,GAAA,CAEFJ,OAAOC,OAAOe,aACJ,CAAC,CACbhB,OAAOiB,MAAM,CACf,CAAA,EACC,CAACb,CAAO,CAAC,EAERA,IAAY,SAEZc,EAAA,MAAA,CAAKC,MAAM,MAAKC,UACdC,EAAA,IAAA,CAAAD,SAAG,8BAAA,CAA+B,EAClCC,EAAA,IAAA,CAAAD,SACEC,EAAA,SAAA,CACEC,QAASA,IAAM,CACbtB,OAAOiB,MAAM,CACf,EAAEG,SACH,cAAA,CAEO,CAAA,CACP,CAAC,CAAA,CACD,EAITlB,IAA4B,CAE5B,WAAAK,EAEIA,cAAAA,EACAC,YAAAA,EACAC,WAAAA,GACAc,UAAU,OAAA,OACVC,WAAkBvB,OAEV,UAAAwB,EAAEA,GAAAA,EAAAA,IAAAA,EAAsB,EAACC,GAAA,CAAA,EAAE,GAAIA,CACjCD,GACF,OAAe,OAAA,WAAA,mBAEfE,IACGtB,EAAA,QAAA,CACHA,MAAAA,EACW,CAAA,CACf,CAAA,CAGNuB,EAAAP,EAAAlB,EAAA,CAAA,CAAA,EAAA,SAAA,eAAA,gBAAA,CAAA"} \ No newline at end of file diff --git a/assets/compose-W5mt71Ut.js b/assets/compose-W5mt71Ut.js deleted file mode 100644 index dfcfca3..0000000 --- a/assets/compose-W5mt71Ut.js +++ /dev/null @@ -1,26 +0,0 @@ -var mt=(s,e,n)=>{if(!e.has(s))throw TypeError("Cannot "+n)};var T=(s,e,n)=>(mt(s,e,"read from private field"),n?n.call(s):e.get(s)),G=(s,e,n)=>{if(e.has(s))throw TypeError("Cannot add the same private member more than once");e instanceof WeakSet?e.add(s):e.set(s,n)},ce=(s,e,n,o)=>(mt(s,e,"write to private field"),o?o.call(s,n):e.set(s,n),n);var Y=(s,e,n)=>(mt(s,e,"access private method"),n);import{p as H,t as dn,F as W,_ as ee,u as je,Z as hn,q as Pe,b as t,k as Ce,E as pn,ao as mn,n as gn,o as ot,m as fn,a as vn,M as $t,g as Bt,x as Kt}from"./vendor-GrW-f9CX.js";import{v as bn,P as yn,p as Tt,u as xn,e as Vt,a as wn,I as K,r as _t,d as Gt,Q as kn,M as Qe,s as xe,K as En,j as Fn,b as Cn,l as zn,q as Ln}from"./status-FORkhePO.js";import{s as re,a as Ft,e as An,A as Yt,c as ze,f as Sn,b as In,L as rt,p as Mn}from"./useTitle-dCp14HlU.js";class $n{constructor(e,n,{tabInsertsSuggestions:o,defaultFirstOption:r}={}){this.input=e,this.list=n,this.tabInsertsSuggestions=o??!0,this.defaultFirstOption=r??!1,this.isComposing=!1,n.id||(n.id=`combobox-${Math.random().toString().slice(2,6)}`),this.ctrlBindings=!!navigator.userAgent.match(/Macintosh/),this.keyboardEventHandler=p=>Bn(p,this),this.compositionEventHandler=p=>_n(p,this),this.inputHandler=this.clearSelection.bind(this),e.setAttribute("role","combobox"),e.setAttribute("aria-controls",n.id),e.setAttribute("aria-expanded","false"),e.setAttribute("aria-autocomplete","list"),e.setAttribute("aria-haspopup","listbox")}destroy(){this.clearSelection(),this.stop(),this.input.removeAttribute("role"),this.input.removeAttribute("aria-controls"),this.input.removeAttribute("aria-expanded"),this.input.removeAttribute("aria-autocomplete"),this.input.removeAttribute("aria-haspopup")}start(){this.input.setAttribute("aria-expanded","true"),this.input.addEventListener("compositionstart",this.compositionEventHandler),this.input.addEventListener("compositionend",this.compositionEventHandler),this.input.addEventListener("input",this.inputHandler),this.input.addEventListener("keydown",this.keyboardEventHandler),this.list.addEventListener("click",Rt),this.indicateDefaultOption()}stop(){this.clearSelection(),this.input.setAttribute("aria-expanded","false"),this.input.removeEventListener("compositionstart",this.compositionEventHandler),this.input.removeEventListener("compositionend",this.compositionEventHandler),this.input.removeEventListener("input",this.inputHandler),this.input.removeEventListener("keydown",this.keyboardEventHandler),this.list.removeEventListener("click",Rt)}indicateDefaultOption(){var e;this.defaultFirstOption&&((e=Array.from(this.list.querySelectorAll('[role="option"]:not([aria-disabled="true"])')).filter(gt)[0])===null||e===void 0||e.setAttribute("data-combobox-option-default","true"))}navigate(e=1){const n=Array.from(this.list.querySelectorAll('[aria-selected="true"]')).filter(gt)[0],o=Array.from(this.list.querySelectorAll('[role="option"]')).filter(gt),r=o.indexOf(n);if(r===o.length-1&&e===1||r===0&&e===-1){this.clearSelection(),this.input.focus();return}let p=e===1?0:o.length-1;if(n&&r>=0){const v=r+e;v>=0&&v0||s.offsetHeight>0)}function _n(s,e){e.isComposing=s.type==="compositionstart",document.getElementById(e.input.getAttribute("aria-controls")||"")&&e.clearSelection()}function Rn(s,e){Dn(s,e)||(s.scrollTop=e.offsetTop)}function Dn(s,e){const n=s.scrollTop,o=n+s.clientHeight,r=e.offsetTop,p=r+e.clientHeight;return r>=n&&p<=o}const jn=/\s|\(|\[/;function Pn(s,e,n,{multiWord:o,lookBackIndex:r,lastMatchPosition:p}={multiWord:!1,lookBackIndex:0,lastMatchPosition:null}){let u=s.lastIndexOf(e,n-1);if(u===-1||u=u+e.length+1||s.lastIndexOf(` -`,n-1)>u||s.lastIndexOf(".",n-1)>u)return}else if(s.lastIndexOf(" ",n-1)>u)return;const v=s[u-1];return v&&!jn.test(v)?void 0:{text:s.substring(u+e.length,n),position:u+e.length}}class On extends HTMLElement{}class Hn extends Event{constructor(){super("update")}}const ft=new WeakMap;var Oe,He,we,me,ke,Re,Le,Ae,Ne,yt,Se,Ie,et,Me,tt,$e,nt,Ue,Ee;const zt=class zt extends On{constructor(n){super();G(this,ke);G(this,Ne);G(this,Ie);G(this,Me);G(this,$e);G(this,Oe,new MutationObserver(()=>Y(this,Me,tt).call(this)));G(this,He,new ResizeObserver(()=>Y(this,Ie,et).call(this)));G(this,we,void 0);G(this,me,void 0);G(this,Le,0);G(this,Ae,0);G(this,Se,!1);G(this,Ue,()=>Y(this,$e,nt).call(this));G(this,Ee,n=>{Y(this,ke,Re).call(this,o=>{(n.target===document||n.target===window||n.target instanceof Node&&n.target.contains(o))&&Y(this,Ie,et).call(this)})});ce(this,we,new WeakRef(n)),ce(this,me,document.createElement("div")),T(this,me).style.position="absolute",T(this,me).style.pointerEvents="none",n.after(T(this,me)),T(this,me).appendChild(this)}static for(n){const o=ft.get(n)??new zt(n);return ft.set(n,o),o}forceUpdate(){Y(this,Me,tt).call(this),Y(this,$e,nt).call(this)}connectedCallback(){const n=T(this,we).deref();if(!n)return this.remove();this.style.pointerEvents="none",this.style.userSelect="none",this.style.overflow="hidden",this.style.display="block",this.style.visibility="hidden",n instanceof HTMLTextAreaElement?(this.style.whiteSpace="pre-wrap",this.style.wordWrap="break-word"):(this.style.whiteSpace="nowrap",this.style.display="table-cell",this.style.verticalAlign="middle"),this.setAttribute("aria-hidden","true"),Y(this,Me,tt).call(this),Y(this,$e,nt).call(this),T(this,Oe).observe(n,{attributeFilter:["style","dir"]}),T(this,He).observe(n),document.addEventListener("scroll",T(this,Ee),{capture:!0}),window.addEventListener("resize",T(this,Ee),{capture:!0}),n.addEventListener("input",T(this,Ue),{capture:!0})}disconnectedCallback(){T(this,me).remove(),T(this,Oe).disconnect(),T(this,He).disconnect(),document.removeEventListener("scroll",T(this,Ee),{capture:!0}),window.removeEventListener("resize",T(this,Ee),{capture:!0});const n=T(this,we).deref();n&&(n.removeEventListener("input",T(this,Ue),{capture:!0}),ft.delete(n))}};Oe=new WeakMap,He=new WeakMap,we=new WeakMap,me=new WeakMap,ke=new WeakSet,Re=function(n){const o=T(this,we).deref();return o?n(o):this.remove()},Le=new WeakMap,Ae=new WeakMap,Ne=new WeakSet,yt=function(){Y(this,ke,Re).call(this,n=>{const o=window.getComputedStyle(n);this.style.height=o.height,this.style.width=o.width,n.clientHeight!==this.clientHeight&&(this.style.height=`calc(${o.height} + ${n.clientHeight-this.clientHeight}px)`),n.clientWidth!==this.clientWidth&&(this.style.width=`calc(${o.width} + ${n.clientWidth-this.clientWidth}px)`);const r=n.getBoundingClientRect(),p=this.getBoundingClientRect();ce(this,Le,T(this,Le)+r.left-p.left),ce(this,Ae,T(this,Ae)+r.top-p.top),this.style.transform=`translate(${T(this,Le)}px, ${T(this,Ae)}px)`,this.scrollTop=n.scrollTop,this.scrollLeft=n.scrollLeft,this.dispatchEvent(new Hn)})},Se=new WeakMap,Ie=new WeakSet,et=function(){T(this,Se)||(ce(this,Se,!0),requestAnimationFrame(()=>{Y(this,Ne,yt).call(this),ce(this,Se,!1)}))},Me=new WeakSet,tt=function(){Y(this,ke,Re).call(this,n=>{const o=window.getComputedStyle(n);for(const r of Nn)this.style[r]=o[r];Y(this,Ie,et).call(this)})},$e=new WeakSet,nt=function(){Y(this,ke,Re).call(this,n=>{this.textContent=n.value,Y(this,Ne,yt).call(this)})},Ue=new WeakMap,Ee=new WeakMap;let it=zt;const Nn=["direction","writingMode","unicodeBidi","textOrientation","boxSizing","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","borderStyle","paddingTop","paddingRight","paddingBottom","paddingLeft","fontStyle","fontVariant","fontWeight","fontStretch","fontSize","fontSizeAdjust","lineHeight","fontFamily","textAlign","textTransform","textIndent","textDecoration","letterSpacing","wordSpacing","tabSize","MozTabSize"];try{customElements.define("input-style-clone",it)}catch(s){if(!(s instanceof DOMException&&s.name==="NotSupportedError"))throw s}var de,Be,Te,We,wt,st,Zt,qe,kt,Fe,De;const at=class at{constructor(e,n=0,o=n){G(this,We);G(this,st);G(this,qe);G(this,Fe);G(this,de,void 0);G(this,Be,void 0);G(this,Te,void 0);ce(this,de,e),ce(this,Be,n),ce(this,Te,o)}static fromSelection(e){const{selectionStart:n,selectionEnd:o}=e;return new at(e,n??void 0,o??void 0)}get collapsed(){return this.startOffset===this.endOffset}get commonAncestorContainer(){return T(this,de)}get endContainer(){return T(this,de)}get startContainer(){return T(this,de)}get startOffset(){return T(this,Be)}get endOffset(){return T(this,Te)}setStartOffset(e){ce(this,Be,Y(this,qe,kt).call(this,e))}setEndOffset(e){ce(this,Te,Y(this,qe,kt).call(this,e))}collapse(e=!1){e?this.setEndOffset(this.startOffset):this.setStartOffset(this.endOffset)}cloneContents(){return Y(this,Fe,De).call(this).cloneContents()}cloneRange(){return new at(T(this,de),this.startOffset,this.endOffset)}getBoundingClientRect(){return Y(this,Fe,De).call(this).getBoundingClientRect()}getClientRects(){return Y(this,Fe,De).call(this).getClientRects()}toString(){return Y(this,Fe,De).call(this).toString()}getStyleClone(){return T(this,We,wt)}};de=new WeakMap,Be=new WeakMap,Te=new WeakMap,We=new WeakSet,wt=function(){return it.for(T(this,de))},st=new WeakSet,Zt=function(){return T(this,We,wt)},qe=new WeakSet,kt=function(e){return Math.max(0,Math.min(e,T(this,de).value.length))},Fe=new WeakSet,De=function(){const e=document.createRange(),n=T(this,st,Zt).childNodes[0];return n&&(e.setStart(n,this.startOffset),e.setEnd(n,this.endOffset)),e};let xt=at;const Je=new WeakMap;class Un{constructor(e,n){this.expander=e,this.input=n,this.combobox=null,this.menu=null,this.match=null,this.justPasted=!1,this.lookBackIndex=0,this.oninput=this.onInput.bind(this),this.onpaste=this.onPaste.bind(this),this.onkeydown=this.onKeydown.bind(this),this.oncommit=this.onCommit.bind(this),this.onmousedown=this.onMousedown.bind(this),this.onblur=this.onBlur.bind(this),this.interactingWithList=!1,n.addEventListener("paste",this.onpaste),n.addEventListener("input",this.oninput),n.addEventListener("keydown",this.onkeydown),n.addEventListener("blur",this.onblur)}destroy(){this.input.removeEventListener("paste",this.onpaste),this.input.removeEventListener("input",this.oninput),this.input.removeEventListener("keydown",this.onkeydown),this.input.removeEventListener("blur",this.onblur)}dismissMenu(){this.deactivate()&&(this.lookBackIndex=this.input.selectionEnd||this.lookBackIndex)}activate(e,n){var o,r;this.input!==document.activeElement&&this.input!==((r=(o=document.activeElement)===null||o===void 0?void 0:o.shadowRoot)===null||r===void 0?void 0:r.activeElement)||(this.deactivate(),this.menu=n,n.id||(n.id=`text-expander-${Math.floor(Math.random()*1e5).toString()}`),this.expander.append(n),this.combobox=new $n(this.input,n),this.expander.dispatchEvent(new Event("text-expander-activate")),this.positionMenu(n,e.position),this.combobox.start(),n.addEventListener("combobox-commit",this.oncommit),n.addEventListener("mousedown",this.onmousedown),this.combobox.navigate(1))}positionMenu(e,n){const o=new xt(this.input,n).getBoundingClientRect(),r={left:o.left,top:o.top+o.height},p=e.getBoundingClientRect(),u={left:r.left-p.left,top:r.top-p.top};if(u.left!==0||u.top!==0){const v=getComputedStyle(e);e.style.left=v.left?`calc(${v.left} + ${u.left}px)`:`${u.left}px`,e.style.top=v.top?`calc(${v.top} + ${u.top}px)`:`${u.top}px`}}deactivate(){const e=this.menu;return!e||!this.combobox?!1:(this.expander.dispatchEvent(new Event("text-expander-deactivate")),this.menu=null,e.removeEventListener("combobox-commit",this.oncommit),e.removeEventListener("mousedown",this.onmousedown),this.combobox.destroy(),this.combobox=null,e.remove(),!0)}onCommit({target:e}){var n;const o=e;if(!(o instanceof HTMLElement)||!this.combobox)return;const r=this.match;if(!r)return;const p=this.input.value.substring(0,r.position-r.key.length),u=this.input.value.substring(r.position+r.text.length),v={item:o,key:r.key,value:null,continue:!1};if(!this.expander.dispatchEvent(new CustomEvent("text-expander-value",{cancelable:!0,detail:v}))||!v.value)return;let R=(n=this.expander.getAttribute("suffix"))!==null&&n!==void 0?n:" ";v.continue&&(R="");const C=`${v.value}${R}`;this.input.value=p+C+u;const k=p.length+C.length;this.deactivate(),this.input.focus({preventScroll:!0}),this.input.selectionStart=k,this.input.selectionEnd=k,v.continue||(this.lookBackIndex=k,this.match=null),this.expander.dispatchEvent(new CustomEvent("text-expander-committed",{cancelable:!1,detail:{input:this.input}}))}onBlur(){if(this.interactingWithList){this.interactingWithList=!1;return}this.deactivate()}onPaste(){this.justPasted=!0}async onInput(){if(this.justPasted){this.justPasted=!1;return}const e=this.findMatch();if(e){this.match=e;const n=await this.notifyProviders(e);if(!this.match)return;n?this.activate(e,n):this.deactivate()}else this.match=null,this.deactivate()}findMatch(){const e=this.input.selectionEnd||0,n=this.input.value;e<=this.lookBackIndex&&(this.lookBackIndex=e-1);for(const{key:o,multiWord:r}of this.expander.keys){const p=Pn(n,o,e,{multiWord:r,lookBackIndex:this.lookBackIndex,lastMatchPosition:this.match?this.match.position:null});if(p)return{text:p.text,key:o,position:p.position}}}async notifyProviders(e){const n=[],o=v=>n.push(v);return this.expander.dispatchEvent(new CustomEvent("text-expander-change",{cancelable:!0,detail:{provide:o,text:e.text,key:e.key}}))?(await Promise.all(n)).filter(v=>v.matched).map(v=>v.fragment)[0]:void 0}onMousedown(){this.interactingWithList=!0}onKeydown(e){e.key==="Escape"&&(this.match=null,this.deactivate()&&(this.lookBackIndex=this.input.selectionEnd||this.lookBackIndex,e.stopImmediatePropagation(),e.preventDefault()))}}class jt extends HTMLElement{get keys(){const e=this.getAttribute("keys"),n=e?e.split(" "):[],o=this.getAttribute("multiword"),r=o?o.split(" "):[],p=r.length===0&&this.hasAttribute("multiword");return n.map(u=>({key:u,multiWord:p||r.includes(u)}))}connectedCallback(){const e=this.querySelector('input[type="text"], textarea');if(!(e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement))return;const n=new Un(this,e);Je.set(this,n)}disconnectedCallback(){const e=Je.get(this);e&&(e.destroy(),Je.delete(this))}dismiss(){const e=Je.get(this);e&&e.dismissMenu()}}window.customElements.get("text-expander")||(window.TextExpanderElement=jt,window.customElements.define("text-expander",jt));function Wn({onlyFirst:s=!1}={}){const e=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(e,s?void 0:"g")}const qn=Wn();function Kn(s){if(typeof s!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof s}\``);return s.replace(qn,"")}const Vn=new Intl.Segmenter;function Pt(s,{countAnsiEscapeCodes:e=!1}={}){if(s===""||(e||(s=Kn(s)),s===""))return 0;let n=0;for(const o of Vn.segment(s))n++;return n}const Gn="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",Ct=[["aa","Afar","Afaraf"],["ab","Abkhaz","аҧсуа бызшәа"],["ae","Avestan","avesta"],["af","Afrikaans","Afrikaans"],["ak","Akan","Akan"],["am","Amharic","አማርኛ"],["an","Aragonese","aragonés"],["ar","Arabic","اللغة العربية"],["as","Assamese","অসমীয়া"],["av","Avaric","авар мацӀ"],["ay","Aymara","aymar aru"],["az","Azerbaijani","azərbaycan dili"],["ba","Bashkir","башҡорт теле"],["be","Belarusian","беларуская мова"],["bg","Bulgarian","български език"],["bh","Bihari","भोजपुरी"],["bi","Bislama","Bislama"],["bm","Bambara","bamanankan"],["bn","Bengali","বাংলা"],["bo","Tibetan","བོད་ཡིག"],["br","Breton","brezhoneg"],["bs","Bosnian","bosanski jezik"],["ca","Catalan","Català"],["ce","Chechen","нохчийн мотт"],["ch","Chamorro","Chamoru"],["co","Corsican","corsu"],["cr","Cree","ᓀᐦᐃᔭᐍᐏᐣ"],["cs","Czech","čeština"],["cu","Old Church Slavonic","ѩзыкъ словѣньскъ"],["cv","Chuvash","чӑваш чӗлхи"],["cy","Welsh","Cymraeg"],["da","Danish","dansk"],["de","German","Deutsch"],["dv","Divehi","Dhivehi"],["dz","Dzongkha","རྫོང་ཁ"],["ee","Ewe","Eʋegbe"],["el","Greek","Ελληνικά"],["en","English","English"],["eo","Esperanto","Esperanto"],["es","Spanish","Español"],["et","Estonian","eesti"],["eu","Basque","euskara"],["fa","Persian","فارسی"],["ff","Fula","Fulfulde"],["fi","Finnish","suomi"],["fj","Fijian","Vakaviti"],["fo","Faroese","føroyskt"],["fr","French","Français"],["fy","Western Frisian","Frysk"],["ga","Irish","Gaeilge"],["gd","Scottish Gaelic","Gàidhlig"],["gl","Galician","galego"],["gu","Gujarati","ગુજરાતી"],["gv","Manx","Gaelg"],["ha","Hausa","هَوُسَ"],["he","Hebrew","עברית"],["hi","Hindi","हिन्दी"],["ho","Hiri Motu","Hiri Motu"],["hr","Croatian","Hrvatski"],["ht","Haitian","Kreyòl ayisyen"],["hu","Hungarian","magyar"],["hy","Armenian","Հայերեն"],["hz","Herero","Otjiherero"],["ia","Interlingua","Interlingua"],["id","Indonesian","Bahasa Indonesia"],["ie","Interlingue","Interlingue"],["ig","Igbo","Asụsụ Igbo"],["ii","Nuosu","ꆈꌠ꒿ Nuosuhxop"],["ik","Inupiaq","Iñupiaq"],["io","Ido","Ido"],["is","Icelandic","Íslenska"],["it","Italian","Italiano"],["iu","Inuktitut","ᐃᓄᒃᑎᑐᑦ"],["ja","Japanese","日本語"],["jv","Javanese","basa Jawa"],["ka","Georgian","ქართული"],["kg","Kongo","Kikongo"],["ki","Kikuyu","Gĩkũyũ"],["kj","Kwanyama","Kuanyama"],["kk","Kazakh","қазақ тілі"],["kl","Kalaallisut","kalaallisut"],["km","Khmer","ខេមរភាសា"],["kn","Kannada","ಕನ್ನಡ"],["ko","Korean","한국어"],["kr","Kanuri","Kanuri"],["ks","Kashmiri","कश्मीरी"],["ku","Kurmanji (Kurdish)","Kurmancî"],["kv","Komi","коми кыв"],["kw","Cornish","Kernewek"],["ky","Kyrgyz","Кыргызча"],["la","Latin","latine"],["lb","Luxembourgish","Lëtzebuergesch"],["lg","Ganda","Luganda"],["li","Limburgish","Limburgs"],["ln","Lingala","Lingála"],["lo","Lao","ລາວ"],["lt","Lithuanian","lietuvių kalba"],["lu","Luba-Katanga","Tshiluba"],["lv","Latvian","latviešu valoda"],["mg","Malagasy","fiteny malagasy"],["mh","Marshallese","Kajin M̧ajeļ"],["mi","Māori","te reo Māori"],["mk","Macedonian","македонски јазик"],["ml","Malayalam","മലയാളം"],["mn","Mongolian","Монгол хэл"],["mr","Marathi","मराठी"],["ms","Malay","Bahasa Melayu"],["mt","Maltese","Malti"],["my","Burmese","ဗမာစာ"],["na","Nauru","Ekakairũ Naoero"],["nb","Norwegian Bokmål","Norsk bokmål"],["nd","Northern Ndebele","isiNdebele"],["ne","Nepali","नेपाली"],["ng","Ndonga","Owambo"],["nl","Dutch","Nederlands"],["nn","Norwegian Nynorsk","Norsk Nynorsk"],["no","Norwegian","Norsk"],["nr","Southern Ndebele","isiNdebele"],["nv","Navajo","Diné bizaad"],["ny","Chichewa","chiCheŵa"],["oc","Occitan","occitan"],["oj","Ojibwe","ᐊᓂᔑᓈᐯᒧᐎᓐ"],["om","Oromo","Afaan Oromoo"],["or","Oriya","ଓଡ଼ିଆ"],["os","Ossetian","ирон æвзаг"],["pa","Panjabi","ਪੰਜਾਬੀ"],["pi","Pāli","पाऴि"],["pl","Polish","Polski"],["ps","Pashto","پښتو"],["pt","Portuguese","Português"],["qu","Quechua","Runa Simi"],["rm","Romansh","rumantsch grischun"],["rn","Kirundi","Ikirundi"],["ro","Romanian","Română"],["ru","Russian","Русский"],["rw","Kinyarwanda","Ikinyarwanda"],["sa","Sanskrit","संस्कृतम्"],["sc","Sardinian","sardu"],["sd","Sindhi","सिन्धी"],["se","Northern Sami","Davvisámegiella"],["sg","Sango","yângâ tî sängö"],["si","Sinhala","සිංහල"],["sk","Slovak","slovenčina"],["sl","Slovenian","slovenščina"],["sn","Shona","chiShona"],["so","Somali","Soomaaliga"],["sq","Albanian","Shqip"],["sr","Serbian","српски језик"],["ss","Swati","SiSwati"],["st","Southern Sotho","Sesotho"],["su","Sundanese","Basa Sunda"],["sv","Swedish","Svenska"],["sw","Swahili","Kiswahili"],["ta","Tamil","தமிழ்"],["te","Telugu","తెలుగు"],["tg","Tajik","тоҷикӣ"],["th","Thai","ไทย"],["ti","Tigrinya","ትግርኛ"],["tk","Turkmen","Türkmen"],["tl","Tagalog","Wikang Tagalog"],["tn","Tswana","Setswana"],["to","Tonga","faka Tonga"],["tr","Turkish","Türkçe"],["ts","Tsonga","Xitsonga"],["tt","Tatar","татар теле"],["tw","Twi","Twi"],["ty","Tahitian","Reo Tahiti"],["ug","Uyghur","ئۇيغۇرچە‎"],["uk","Ukrainian","Українська"],["ur","Urdu","اردو"],["uz","Uzbek","Ўзбек"],["ve","Venda","Tshivenḓa"],["vi","Vietnamese","Tiếng Việt"],["vo","Volapük","Volapük"],["wa","Walloon","walon"],["wo","Wolof","Wollof"],["xh","Xhosa","isiXhosa"],["yi","Yiddish","ייִדיש"],["yo","Yoruba","Yorùbá"],["za","Zhuang","Saɯ cueŋƅ"],["zh","Chinese","中文"],["zu","Zulu","isiZulu"],["zh-CN","Chinese (China)","简体中文"],["zh-HK","Chinese (Hong Kong)","繁體中文(香港)"],["zh-TW","Chinese (Taiwan)","繁體中文(臺灣)"],["zh-YUE","Cantonese","廣東話"],["ast","Asturian","Asturianu"],["chr","Cherokee","ᏣᎳᎩ ᎦᏬᏂᎯᏍᏗ"],["ckb","Sorani (Kurdish)","سۆرانی"],["cnr","Montenegrin","crnogorski"],["jbo","Lojban","la .lojban."],["kab","Kabyle","Taqbaylit"],["ldn","Láadan","Láadan"],["lfn","Lingua Franca Nova","lingua franca nova"],["sco","Scots","Scots"],["sma","Southern Sami","Åarjelsaemien Gïele"],["smj","Lule Sami","Julevsámegiella"],["szl","Silesian","ślůnsko godka"],["tok","Toki Pona","toki pona"],["xal","Kalmyk","Хальмг келн"],["zba","Balaibalan","باليبلن"],["zgh","Standard Moroccan Tamazight","ⵜⴰⵎⴰⵣⵉⵖⵜ"]],Yn="(((?:[^A-Za-z0-9@@$##\\uFFFE\\uFEFF\\uFFFF]|[\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069]|^))((https?:\\/\\/)((?:(?:(?:[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/](?:[_-]|[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/])*)?[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/]\\.)*(?:(?:[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/](?:-|[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/])*)?[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/]\\.)(?:(?:(?:삼성|닷컴|닷넷|香格里拉|餐厅|食品|飞利浦|電訊盈科|集团|通販|购物|谷歌|诺基亚|联通|网络|网站|网店|网址|组织机构|移动|珠宝|点看|游戏|淡马锡|机构|書籍|时尚|新闻|政府|政务|招聘|手表|手机|我爱你|慈善|微博|广东|工行|家電|娱乐|天主教|大拿|大众汽车|在线|嘉里大酒店|嘉里|商标|商店|商城|公益|公司|八卦|健康|信息|佛山|企业|中文网|中信|世界|ポイント|ファッション|セール|ストア|コム|グーグル|クラウド|みんな|คอม|संगठन|नेट|कॉम|همراه|موقع|موبايلي|كوم|كاثوليك|عرب|شبكة|بيتك|بازار|العليان|ارامكو|اتصالات|ابوظبي|קום|сайт|рус|орг|онлайн|москва|ком|католик|дети|zuerich|zone|zippo|zip|zero|zara|zappos|yun|youtube|you|yokohama|yoga|yodobashi|yandex|yamaxun|yahoo|yachts|xyz|xxx|xperia|xin|xihuan|xfinity|xerox|xbox|wtf|wtc|wow|world|works|work|woodside|wolterskluwer|wme|winners|wine|windows|win|williamhill|wiki|wien|whoswho|weir|weibo|wedding|wed|website|weber|webcam|weatherchannel|weather|watches|watch|warman|wanggou|wang|walter|walmart|wales|vuelos|voyage|voto|voting|vote|volvo|volkswagen|vodka|vlaanderen|vivo|viva|vistaprint|vista|vision|visa|virgin|vip|vin|villas|viking|vig|video|viajes|vet|versicherung|vermögensberatung|vermögensberater|verisign|ventures|vegas|vanguard|vana|vacations|ups|uol|uno|university|unicom|uconnect|ubs|ubank|tvs|tushu|tunes|tui|tube|trv|trust|travelersinsurance|travelers|travelchannel|travel|training|trading|trade|toys|toyota|town|tours|total|toshiba|toray|top|tools|tokyo|today|tmall|tkmaxx|tjx|tjmaxx|tirol|tires|tips|tiffany|tienda|tickets|tiaa|theatre|theater|thd|teva|tennis|temasek|telefonica|telecity|tel|technology|tech|team|tdk|tci|taxi|tax|tattoo|tatar|tatamotors|target|taobao|talk|taipei|tab|systems|symantec|sydney|swiss|swiftcover|swatch|suzuki|surgery|surf|support|supply|supplies|sucks|style|study|studio|stream|store|storage|stockholm|stcgroup|stc|statoil|statefarm|statebank|starhub|star|staples|stada|srt|srl|spreadbetting|spot|sport|spiegel|space|soy|sony|song|solutions|solar|sohu|software|softbank|social|soccer|sncf|smile|smart|sling|skype|sky|skin|ski|site|singles|sina|silk|shriram|showtime|show|shouji|shopping|shop|shoes|shiksha|shia|shell|shaw|sharp|shangrila|sfr|sexy|sex|sew|seven|ses|services|sener|select|seek|security|secure|seat|search|scot|scor|scjohnson|science|schwarz|schule|school|scholarships|schmidt|schaeffler|scb|sca|sbs|sbi|saxo|save|sas|sarl|sapo|sap|sanofi|sandvikcoromant|sandvik|samsung|samsclub|salon|sale|sakura|safety|safe|saarland|ryukyu|rwe|run|ruhr|rugby|rsvp|room|rogers|rodeo|rocks|rocher|rmit|rip|rio|ril|rightathome|ricoh|richardli|rich|rexroth|reviews|review|restaurant|rest|republican|report|repair|rentals|rent|ren|reliance|reit|reisen|reise|rehab|redumbrella|redstone|red|recipes|realty|realtor|realestate|read|raid|radio|racing|qvc|quest|quebec|qpon|pwc|pub|prudential|pru|protection|property|properties|promo|progressive|prof|productions|prod|pro|prime|press|praxi|pramerica|post|porn|politie|poker|pohl|pnc|plus|plumbing|playstation|play|place|pizza|pioneer|pink|ping|pin|pid|pictures|pictet|pics|piaget|physio|photos|photography|photo|phone|philips|phd|pharmacy|pfizer|pet|pccw|pay|passagens|party|parts|partners|pars|paris|panerai|panasonic|pamperedchef|page|ovh|ott|otsuka|osaka|origins|orientexpress|organic|org|orange|oracle|open|ooo|onyourside|online|onl|ong|one|omega|ollo|oldnavy|olayangroup|olayan|okinawa|office|off|observer|obi|nyc|ntt|nrw|nra|nowtv|nowruz|now|norton|northwesternmutual|nokia|nissay|nissan|ninja|nikon|nike|nico|nhk|ngo|nfl|nexus|nextdirect|next|news|newholland|new|neustar|network|netflix|netbank|net|nec|nba|navy|natura|nationwide|name|nagoya|nadex|nab|mutuelle|mutual|museum|mtr|mtpc|mtn|msd|movistar|movie|mov|motorcycles|moto|moscow|mortgage|mormon|mopar|montblanc|monster|money|monash|mom|moi|moe|moda|mobily|mobile|mobi|mma|mls|mlb|mitsubishi|mit|mint|mini|mil|microsoft|miami|metlife|merckmsd|meo|menu|men|memorial|meme|melbourne|meet|media|med|mckinsey|mcdonalds|mcd|mba|mattel|maserati|marshalls|marriott|markets|marketing|market|map|mango|management|man|makeup|maison|maif|madrid|macys|luxury|luxe|lupin|lundbeck|ltda|ltd|lplfinancial|lpl|love|lotto|lotte|london|lol|loft|locus|locker|loans|loan|llp|llc|lixil|living|live|lipsy|link|linde|lincoln|limo|limited|lilly|like|lighting|lifestyle|lifeinsurance|life|lidl|liaison|lgbt|lexus|lego|legal|lefrak|leclerc|lease|lds|lawyer|law|latrobe|latino|lat|lasalle|lanxess|landrover|land|lancome|lancia|lancaster|lamer|lamborghini|ladbrokes|lacaixa|kyoto|kuokgroup|kred|krd|kpn|kpmg|kosher|komatsu|koeln|kiwi|kitchen|kindle|kinder|kim|kia|kfh|kerryproperties|kerrylogistics|kerryhotels|kddi|kaufen|juniper|juegos|jprs|jpmorgan|joy|jot|joburg|jobs|jnj|jmp|jll|jlc|jio|jewelry|jetzt|jeep|jcp|jcb|java|jaguar|iwc|iveco|itv|itau|istanbul|ist|ismaili|iselect|irish|ipiranga|investments|intuit|international|intel|int|insure|insurance|institute|ink|ing|info|infiniti|industries|inc|immobilien|immo|imdb|imamat|ikano|iinet|ifm|ieee|icu|ice|icbc|ibm|hyundai|hyatt|hughes|htc|hsbc|how|house|hotmail|hotels|hoteles|hot|hosting|host|hospital|horse|honeywell|honda|homesense|homes|homegoods|homedepot|holiday|holdings|hockey|hkt|hiv|hitachi|hisamitsu|hiphop|hgtv|hermes|here|helsinki|help|healthcare|health|hdfcbank|hdfc|hbo|haus|hangout|hamburg|hair|guru|guitars|guide|guge|gucci|guardian|group|grocery|gripe|green|gratis|graphics|grainger|gov|got|gop|google|goog|goodyear|goodhands|goo|golf|goldpoint|gold|godaddy|gmx|gmo|gmbh|gmail|globo|global|gle|glass|glade|giving|gives|gifts|gift|ggee|george|genting|gent|gea|gdn|gbiz|gay|garden|gap|games|game|gallup|gallo|gallery|gal|fyi|futbol|furniture|fund|fun|fujixerox|fujitsu|ftr|frontier|frontdoor|frogans|frl|fresenius|free|fox|foundation|forum|forsale|forex|ford|football|foodnetwork|food|foo|fly|flsmidth|flowers|florist|flir|flights|flickr|fitness|fit|fishing|fish|firmdale|firestone|fire|financial|finance|final|film|fido|fidelity|fiat|ferrero|ferrari|feedback|fedex|fast|fashion|farmers|farm|fans|fan|family|faith|fairwinds|fail|fage|extraspace|express|exposed|expert|exchange|everbank|events|eus|eurovision|etisalat|esurance|estate|esq|erni|ericsson|equipment|epson|epost|enterprises|engineering|engineer|energy|emerck|email|education|edu|edeka|eco|eat|earth|dvr|dvag|durban|dupont|duns|dunlop|duck|dubai|dtv|drive|download|dot|doosan|domains|doha|dog|dodge|doctor|docs|dnp|diy|dish|discover|discount|directory|direct|digital|diet|diamonds|dhl|dev|design|desi|dentist|dental|democrat|delta|deloitte|dell|delivery|degree|deals|dealer|deal|dds|dclk|day|datsun|dating|date|data|dance|dad|dabur|cyou|cymru|cuisinella|csc|cruises|cruise|crs|crown|cricket|creditunion|creditcard|credit|cpa|courses|coupons|coupon|country|corsica|coop|cool|cookingchannel|cooking|contractors|contact|consulting|construction|condos|comsec|computer|compare|company|community|commbank|comcast|com|cologne|college|coffee|codes|coach|clubmed|club|cloud|clothing|clinique|clinic|click|cleaning|claims|cityeats|city|citic|citi|citadel|cisco|circle|cipriani|church|chrysler|chrome|christmas|chloe|chintai|cheap|chat|chase|charity|channel|chanel|cfd|cfa|cern|ceo|center|ceb|cbs|cbre|cbn|cba|catholic|catering|cat|casino|cash|caseih|case|casa|cartier|cars|careers|career|care|cards|caravan|car|capitalone|capital|capetown|canon|cancerresearch|camp|camera|cam|calvinklein|call|cal|cafe|cab|bzh|buzz|buy|business|builders|build|bugatti|budapest|brussels|brother|broker|broadway|bridgestone|bradesco|box|boutique|bot|boston|bostik|bosch|boots|booking|book|boo|bond|bom|bofa|boehringer|boats|bnpparibas|bnl|bmw|bms|blue|bloomberg|blog|blockbuster|blanco|blackfriday|black|biz|bio|bingo|bing|bike|bid|bible|bharti|bet|bestbuy|best|berlin|bentley|beer|beauty|beats|bcn|bcg|bbva|bbt|bbc|bayern|bauhaus|basketball|baseball|bargains|barefoot|barclays|barclaycard|barcelona|bar|bank|band|bananarepublic|banamex|baidu|baby|azure|axa|aws|avianca|autos|auto|author|auspost|audio|audible|audi|auction|attorney|athleta|associates|asia|asda|arte|art|arpa|army|archi|aramco|arab|aquarelle|apple|app|apartments|aol|anz|anquan|android|analytics|amsterdam|amica|amfam|amex|americanfamily|americanexpress|alstom|alsace|ally|allstate|allfinanz|alipay|alibaba|alfaromeo|akdn|airtel|airforce|airbus|aigo|aig|agency|agakhan|africa|afl|afamilycompany|aetna|aero|aeg|adult|ads|adac|actor|active|aco|accountants|accountant|accenture|academy|abudhabi|abogado|able|abc|abbvie|abbott|abb|abarth|aarp|aaa|onion)(?=[^0-9a-zA-Z@+-]|$))|(?:(?:한국|香港|澳門|新加坡|台灣|台湾|中國|中国|გე|ລາວ|ไทย|ලංකා|ഭാരതം|ಭಾರತ|భారత్|சிங்கப்பூர்|இலங்கை|இந்தியா|ଭାରତ|ભારત|ਭਾਰਤ|ভাৰত|ভারত|বাংলা|भारोत|भारतम्|भारत|ڀارت|پاکستان|موريتانيا|مليسيا|مصر|قطر|فلسطين|عمان|عراق|سورية|سودان|تونس|بھارت|بارت|ایران|امارات|المغرب|السعودية|الجزائر|البحرين|الاردن|հայ|қаз|укр|срб|рф|мон|мкд|ею|бел|бг|ευ|ελ|zw|zm|za|yt|ye|ws|wf|vu|vn|vi|vg|ve|vc|va|uz|uy|us|um|uk|ug|ua|tz|tw|tv|tt|tr|tp|to|tn|tm|tl|tk|tj|th|tg|tf|td|tc|sz|sy|sx|sv|su|st|ss|sr|so|sn|sm|sl|sk|sj|si|sh|sg|se|sd|sc|sb|sa|rw|ru|rs|ro|re|qa|py|pw|pt|ps|pr|pn|pm|pl|pk|ph|pg|pf|pe|pa|om|nz|nu|nr|np|no|nl|ni|ng|nf|ne|nc|na|mz|my|mx|mw|mv|mu|mt|ms|mr|mq|mp|mo|mn|mm|ml|mk|mh|mg|mf|me|md|mc|ma|ly|lv|lu|lt|ls|lr|lk|li|lc|lb|la|kz|ky|kw|kr|kp|kn|km|ki|kh|kg|ke|jp|jo|jm|je|it|is|ir|iq|io|in|im|il|ie|id|hu|ht|hr|hn|hm|hk|gy|gw|gu|gt|gs|gr|gq|gp|gn|gm|gl|gi|gh|gg|gf|ge|gd|gb|ga|fr|fo|fm|fk|fj|fi|eu|et|es|er|eh|eg|ee|ec|dz|do|dm|dk|dj|de|cz|cy|cx|cw|cv|cu|cr|co|cn|cm|cl|ck|ci|ch|cg|cf|cd|cc|ca|bz|by|bw|bv|bt|bs|br|bq|bo|bn|bm|bl|bj|bi|bh|bg|bf|be|bd|bb|ba|az|ax|aw|au|at|as|ar|aq|ao|an|am|al|ai|ag|af|ae|ad|ac)(?=[^0-9a-zA-Z@+-]|$))|(?:xn--[\\-0-9a-z]+))))(?::([0-9]+))?(\\/(?:(?:[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*(?:\\((?:[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]+|(?:[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*\\([a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]+\\)[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*))\\)[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*)*[\\+\\-a-z\\u0400-\\u04FF0-9=_#\\/\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]|(?:\\((?:[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]+|(?:[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*\\([a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]+\\)[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*))\\)))|(?:@[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]+\\/))*)?(\\?[a-z0-9!?\\*'@\\(\\);:&=\\+\\$\\/%#\\[\\]\\-_\\.,~|]*[a-z0-9\\-_&=#\\/])?))",Zn="gi",Ot={source:Yn,flags:Zn};var Jn={PHANPY_CLIENT_NAME:"Phanpy",PHANPY_WEBSITE:"https://phanpy.social",PHANPY_LINGVA_INSTANCES:"lingva.phanpy.social lingva.lunar.icu lingva.garudalinux.org translate.plausibility.cloud",PHANPY_PRIVACY_POLICY_URL:"https://github.com/cheeaun/phanpy/blob/main/PRIVACY.MD",VITE_APP_ENV:"production",BASE_URL:"./",MODE:"production",DEV:!1,PROD:!0,SSR:!1};const{PHANPY_IMG_ALT_API_URL:vt,PHANPY_GIPHY_API_KEY:Xn}=Jn,Qn=Ct.reduce((s,e)=>{const[n,o,r]=e;return s[n]={common:o,native:r},s},{}),Jt={"5 minutes":5*60,"30 minutes":30*60,"1 hour":60*60,"6 hours":6*60*60,"12 hours":12*60*60,"1 day":24*60*60,"3 days":3*24*60*60,"7 days":7*24*60*60},ei=Object.values(Jt),Ht=24*60*60,Nt=s=>{if(!s)return Ht;const e=(new Date(s).getTime()-Date.now())/1e3;return ei.find(n=>n>=e)||Ht},ve=document.createElement("ul");ve.role="listbox";ve.className="text-expander-menu";const ti=16,ni=new IntersectionObserver(s=>{s.forEach(e=>{if(e.isIntersecting){const{left:n,width:o}=e.boundingClientRect,{innerWidth:r}=window;n+o>r&&(ve.style.left=r-o-ti+"px")}})});ni.observe(ve);const ye=bn([new Intl.DateTimeFormat().resolvedOptions().locale,...navigator.languages],Ct.map(s=>s[0]),"en"),Xt=new RegExp(Ot.source,Ot.flags),ii=/(^|[^\/\w])@(([a-z0-9_]+)@[a-z0-9\.\-]+[a-z0-9]+)/gi,si="$2xxxxxxxxxxxxxxxxxxxxxxx";function ai(s){return s.replace(Xt,si).replace(ii,"$1@$3")}const oi=/[a-z0-9_]+([a-z0-9_.-]+[a-z0-9_]+)?/i,ri=new RegExp(`(^|[^=\\/\\w])(@${oi.source}(?:@[\\p{L}\\w.-]+[\\w]+)?)`,"uig"),li=new RegExp("(^|[^=\\/\\w])(#[a-z0-9_]+([a-z0-9_.]+[a-z0-9_]+)?)(?![\\/\\w])","ig"),ci="[a-zA-Z0-9_]{2,}",ui=new RegExp(`(^|[^=\\/\\w])(:${ci}:)(?=[^A-Za-z0-9_:]|$)`,"g"),di=new Intl.Segmenter;function hi(s,{maxCharacters:e=1/0}){let n=s.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'");const{composerCharacterCount:o}=re;if(o>e){let r="",p="";const u=di.segment(n);for(const{segment:v,index:g}of u)g"),r+p}return n.replace(Xt,'$2$3').replace(ri,'$1$2').replace(li,'$1$2').replace(ui,'$1$2')}const pi=new Intl.RelativeTimeFormat,Et=100;function Ai({onClose:s,replyToStatus:e,editStatus:n,draftStatus:o,standalone:r,hasOpener:p}){var Mt;const{masto:u,instance:v}=Ft(),[g,R]=H("default"),C=W((o==null?void 0:o.uid)||dn()),k=An(),A=k.info,Z=Yt(),{statuses:{maxCharacters:D,maxMediaAttachments:I,charactersReservedPerUrl:se}={},mediaAttachments:{supportedMimeTypes:J=[],imageSizeLimit:c,imageMatrixLimit:h,videoSizeLimit:m,videoMatrixLimit:f,videoFrameRateLimit:E}={},polls:{maxOptions:y,maxCharactersPerOption:B,maxExpiration:q,minExpiration:le}={}}=Z||{},S=W(),X=W(),[V,U]=H("public"),[j,te]=H(!1),[O,ie]=H(ze.session.get("currentLanguage")||ye),ae=W(O),[M,z]=H([]),[$,L]=H(null),N=ze.account.get("preferences")||{},Q=()=>{S.current&&S.current.dispatchEvent(new Event("input"))},oe=()=>{setTimeout(()=>{var a,l,b;S.current&&((l=(a=o==null?void 0:o.status)==null?void 0:a.startsWith)!=null&&l.call(a,` -`)&&(S.current.selectionStart=0,S.current.selectionEnd=0),(b=S.current)==null||b.focus())},300)};ee(()=>{if(e){const{spoilerText:a,visibility:l,language:b,sensitive:d}=e;a&&X.current&&(X.current.value=a);const x=[...new Set([e.account.acct,...e.mentions.map(w=>w.acct)])].filter(w=>w!==A.acct);x.length>0&&(S.current.value=`${x.map(w=>`@${w}`).join(" ")} `,Q()),oe(),U(l==="public"&&N["posting:default:visibility"]?N["posting:default:visibility"]:l),ie(b||N.postingDefaultLanguage||ye),te(d&&!!a)}else if(n){const{visibility:a,language:l,sensitive:b,poll:d,mediaAttachments:_}=n,x=!!(d!=null&&d.options)&&{...d,options:d.options.map(w=>(w==null?void 0:w.title)||w),expiresIn:(d==null?void 0:d.expiresIn)||Nt(d.expiresAt)};R("loading"),(async()=>{try{const w=await u.v1.statuses.$select(n.id).source.fetch(),{text:F,spoilerText:P}=w;S.current.value=F,S.current.dataset.source=F,Q(),oe(),X.current.value=P,U(a),ie(l||presf.postingDefaultLanguage||ye),te(b),x&&L(x),z(_),R("default")}catch(w){alert((w==null?void 0:w.reason)||w),R("error")}})()}else oe(),N["posting:default:visibility"]&&U(N["posting:default:visibility"]),N["posting:default:language"]&&ie(N["posting:default:language"]),N["posting:default:sensitive"]&&te(N["posting:default:sensitive"]);if(o){const{status:a,spoilerText:l,visibility:b,language:d,sensitive:_,poll:x,mediaAttachments:w}=o,F=!!(x!=null&&x.options)&&{...x,options:x.options.map(P=>(P==null?void 0:P.title)||P),expiresIn:(x==null?void 0:x.expiresIn)||Nt(x.expiresAt)};S.current.value=a,Q(),oe(),l&&(X.current.value=l),b&&U(b),ie(d||N.postingDefaultLanguage||ye),_!==null&&te(_),F&&L(F),w&&z(w)}},[o,n,e]);const ue=W(),ge="You have unsaved changes. Discard this post?",be=()=>{const{value:a,dataset:l}=S.current;if(g==="loading")return!1;const b=(a||"").trim().replace(new RegExp("^\\p{White_Space}+|\\p{White_Space}+$","gu"),""),d=M.length>0;if(!b&&!d||M.length>0&&M.every(P=>P.id))return!0;const x=(e==null?void 0:e.account.id)===A.id,w=e&&a.trim()===`@${e.account.acct}`;return!!(!x&&w||a===(l==null?void 0:l.source))},Ke=()=>be()?!0:confirm(ge);ee(()=>{const a=l=>{be()||(l.preventDefault(),l.returnValue=ge)};return window.addEventListener("beforeunload",a,{capture:!0}),()=>window.removeEventListener("beforeunload",a,{capture:!0})},[]);const tn=()=>{const{value:a}=S.current,{value:l}=X.current;return Pt(ai(a))+Pt(l)},lt=()=>{const a=tn();re.composerCharacterCount=a};ee(lt,[]);const Lt=window.CloseWatcher,ct=W(!1);je("esc",()=>{ct.current=!0},{enabled:!Lt,enableOnFormTags:!0}),je("esc",()=>{!r&&ct.current&&Ke()&&s(),ct.current=!1},{enabled:!Lt,enableOnFormTags:!0,keyup:!0,ignoreEventWhen:a=>{const l=document.querySelectorAll("#modal-container > *"),b=!!l,d=l.length===1&&l[0].querySelector("#compose-container");return b&&!d}}),yn(()=>{!r&&Ke()&&s()},[r,Ke,s]);const At=W({}),St=()=>`${Sn()}#${C.current}`,ut=()=>{if(n||re.composerState.minimized)return;const a=St(),l={key:a,replyTo:e?{id:e.id,account:{id:e.account.id,username:e.account.username,acct:e.account.acct}}:null,draftStatus:{uid:C.current,status:S.current.value,spoilerText:X.current.value,visibility:V,language:O,sensitive:j,poll:$,mediaAttachments:M}};!hn(l,At.current)&&!be()&&(Tt.drafts.set(a,{...l,state:"unsaved",updatedAt:Date.now()}).then(()=>{}).catch(b=>{}),At.current=structuredClone(l))};xn(ut,5e3),ee(()=>(ut(),()=>{Tt.drafts.del(St())}),[]),ee(()=>{const a=b=>{const{items:d}=b.clipboardData||b.dataTransfer,_=[];for(let x=0;x0&&M.length>=I){alert(`You can only attach up to ${I} files.`);return}if(_.length>0){b.preventDefault(),b.stopPropagation();const x=I-M.length,w=_.slice(0,x);if(w.length<=0){alert(`You can only attach up to ${I} files.`);return}const F=w.map(P=>({file:P,type:P.type,size:P.size,url:URL.createObjectURL(P),id:null,description:null}));z([...M,...F])}};window.addEventListener("paste",a);const l=b=>{b.dataTransfer.items.length>0&&(b.preventDefault(),b.stopPropagation())};return window.addEventListener("dragover",l),window.addEventListener("drop",a),()=>{window.removeEventListener("paste",a),window.removeEventListener("dragover",l),window.removeEventListener("drop",a)}},[M]);const[Ve,dt]=H(!1),[Ge,Ye]=H(!1),[nn,ht]=H(!1),[he,sn]=H(null),[an,on]=Pe(()=>{const a=[],l=[],{contentTranslationHideLanguages:b=[]}=re.settings;return Ct.forEach(d=>{const[_]=d;_===O||_===ae.current||_===ye||b.includes(_)||he!=null&&he.length&&he.includes(_)?a.push(d):l.push(d)}),a.sort(([d,_],[x,w])=>d===O?-1:x===O?1:_.localeCompare(w)),l.sort(([d,_],[x,w])=>_.localeCompare(w)),[a,l]},[O,he]),It=Pe(()=>!!(e!=null&&e.createdAt)&&Math.floor((Date.now()-new Date(e.createdAt))/(1e3*60*60*24*30)),[e]),rn=()=>{ut(),re.composerState.minimized=!0};return t("div",{id:"compose-container-outer",children:[t("div",{id:"compose-container",class:r?"standalone":"",children:[t("div",{class:"compose-top",children:[(A==null?void 0:A.avatarStatic)&&t(Vt,{account:A,accountInstance:k.instanceURL,hideDisplayName:!0,useAvatarStatic:!0}),r?p&&t("button",{type:"button",class:"light pop-button",disabled:g==="loading",onClick:()=>{var a;if(!window.opener){alert("Looks like you closed the parent window.");return}if(window.opener.__STATES__.showCompose){if((a=window.opener.__STATES__.composerState)!=null&&a.publishing){alert("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.");return}if(!confirm("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?"))return}s({fn:()=>{const l={editStatus:n,replyToStatus:e,draftStatus:{uid:C.current,status:S.current.value,spoilerText:X.current.value,visibility:V,language:O,sensitive:j,poll:$,mediaAttachments:M}};window.opener.__COMPOSE__=l,window.opener.__STATES__.showCompose?(window.opener.__STATES__.showCompose=!1,setTimeout(()=>{window.opener.__STATES__.showCompose=!0},10)):window.opener.__STATES__.showCompose=!0,window.opener.__STATES__.composerState.minimized&&(window.opener.__STATES__.composerState.minimized=!1)}})},children:t(K,{icon:"popin",alt:"Pop in"})}):t("span",{class:"compose-controls",children:[t("button",{type:"button",class:"plain4 pop-button",disabled:g==="loading",onClick:()=>{wn({editStatus:n,replyToStatus:e,draftStatus:{uid:C.current,status:S.current.value,spoilerText:X.current.value,visibility:V,language:O,sensitive:j,poll:$,mediaAttachments:M}})&&s()},children:t(K,{icon:"popout",alt:"Pop out"})}),t("button",{type:"button",class:"plain4 min-button",onClick:rn,children:t(K,{icon:"minimize",alt:"Minimize"})})," ",t("button",{type:"button",class:"light close-button",disabled:g==="loading",onClick:()=>{Ke()&&s()},children:t(K,{icon:"x"})})]})]}),!!e&&t("div",{class:"status-preview",children:[t(_t,{status:e,size:"s",previewMode:!0}),t("div",{class:"status-preview-legend reply-to",children:["Replying to @",e.account.acct||e.account.username,"’s post",It>=3&&t(Ce,{children:[" ","(",t("strong",{children:pi.format(-It,"month")}),")"]})]})]}),!!n&&t("div",{class:"status-preview",children:[t(_t,{status:n,size:"s",previewMode:!0}),t("div",{class:"status-preview-legend",children:"Editing source post"})]}),t("form",{ref:ue,class:`form-visibility-${V}`,style:{pointerEvents:g==="loading"?"none":"auto",opacity:g==="loading"?.5:1},onKeyDown:a=>{a.key==="Enter"&&(a.ctrlKey||a.metaKey)&&ue.current.dispatchEvent(new Event("submit",{cancelable:!0}))},onSubmit:a=>{a.preventDefault();const l=new FormData(a.target),b=Object.fromEntries(l.entries());let{status:d,visibility:_,sensitive:x,spoilerText:w}=b;if(x=x==="on",$){if($.options.length<2){alert("Poll must have at least 2 options");return}if($.options.some(F=>F==="")){alert("Some poll choices are empty");return}}M.length>0&&M.some(P=>{var ne,_e;return!((_e=(ne=P.description)==null?void 0:ne.trim)!=null&&_e.call(ne))})&&!confirm("Some media have no descriptions. Continue?")||(w=x&&w||void 0,d=d===""?void 0:d,re.composerState.publishing=!0,R("loading"),(async()=>{try{if(M.length>0){const ne=M.map(pe=>{const{file:Ze,description:ln,id:cn}=pe;if(cn)return pe;{const un=qt({file:Ze,description:ln});return u.v2.media.create(un).then(pt=>(pt.id&&(pe.id=pt.id),pt))}}),_e=await Promise.allSettled(ne);if(_e.some(pe=>{var Ze;return pe.status==="rejected"||!((Ze=pe.value)!=null&&Ze.id)})){re.composerState.publishing=!1,re.composerState.publishingError=!0,R("error"),_e.forEach(pe=>{pe.status==="rejected"&&alert(pe.reason||`Attachment #${i} failed`)});return}}let F={status:d,spoiler_text:w,language:O,sensitive:x,poll:$,media_ids:M.map(ne=>ne.id)};n&&Gt("@mastodon/edit-media-attributes")?F.media_attributes=M.map(ne=>({id:ne.id,description:ne.description})):n||(F.visibility=_,F.in_reply_to_id=(e==null?void 0:e.id)||void 0),F=qt(F);let P;if(n)P=await u.v1.statuses.$select(n.id).update(F),In(P,v,{skipThreading:!0});else try{P=await u.v1.statuses.create(F,{requestInit:{headers:{"Idempotency-Key":C.current}}})}catch{P=await u.v1.statuses.create(F)}re.composerState.minimized=!1,re.composerState.publishing=!1,R("default"),s({type:n?"edit":e?"reply":"post",newStatus:P,instance:v})}catch(F){re.composerState.publishing=!1,re.composerState.publishingError=!0,alert((F==null?void 0:F.reason)||F),R("error")}})())},children:[t("div",{class:"toolbar stretch",children:[t("input",{ref:X,type:"text",name:"spoilerText",placeholder:"Content warning",disabled:g==="loading",class:"spoiler-text-field",lang:O,spellCheck:"true",dir:"auto",style:{opacity:j?1:0,pointerEvents:j?"auto":"none"},onInput:()=>{lt()}}),t("label",{class:`toolbar-button ${j?"highlight":""}`,title:"Content warning or sensitive media",children:[t("input",{name:"sensitive",type:"checkbox",checked:j,disabled:g==="loading",onChange:a=>{var b,d;const l=a.target.checked;te(l),l?(b=X.current)==null||b.focus():(d=S.current)==null||d.focus()}}),t(K,{icon:`eye-${j?"close":"open"}`})]})," ",t("label",{class:`toolbar-button ${V!=="public"&&!j?"show-field":""} ${V!=="public"?"highlight":""}`,title:`Visibility: ${V}`,children:[t(K,{icon:kn[V],alt:V}),t("select",{name:"visibility",value:V,onChange:a=>{U(a.target.value)},disabled:g==="loading"||!!n,children:[t("option",{value:"public",children:["Public ",t(K,{icon:"earth"})]}),t("option",{value:"unlisted",children:"Unlisted"}),t("option",{value:"private",children:"Followers only"}),t("option",{value:"direct",children:"Private mention"})]})]})," "]}),t(fi,{ref:S,placeholder:e?"Post your reply":n?"Edit your post":"What are you doing?",required:(M==null?void 0:M.length)===0,disabled:g==="loading",lang:O,onInput:()=>{lt()},maxCharacters:D,performSearch:a=>{const{type:l,q:b,limit:d}=a;return l==="accounts"?u.v1.accounts.search.list({q:b,limit:d,resolve:!1}):u.v2.search.fetch(a)},onTrigger:a=>{(a==null?void 0:a.name)==="custom-emojis"?Ye({defaultSearchTerm:(a==null?void 0:a.defaultSearchTerm)||null}):(a==null?void 0:a.name)==="mention"?dt({defaultSearchTerm:(a==null?void 0:a.defaultSearchTerm)||null}):(a==null?void 0:a.name)==="auto-detect-language"&&(a!=null&&a.languages)&&sn(a.languages)}}),(M==null?void 0:M.length)>0&&t("div",{class:"media-attachments",children:[M.map((a,l)=>{const{id:b,file:d}=a,_=(d==null?void 0:d.size)+(d==null?void 0:d.type)+(d==null?void 0:d.name);return t(bi,{attachment:a,disabled:g==="loading",lang:O,onDescriptionChange:x=>{z(w=>{const F=[...w];return F[l].description=x,F})},onRemove:()=>{z(x=>x.filter((w,F)=>F!==l))}},b||_||l)}),t("label",{class:"media-sensitive",children:[t("input",{name:"sensitive",type:"checkbox",checked:j,disabled:g==="loading",onChange:a=>{const l=a.target.checked;te(l)}})," ",t("span",{children:"Mark media as sensitive"})," ",t(K,{icon:`eye-${j?"close":"open"}`})]})]}),!!$&&t(yi,{lang:O,maxOptions:y,maxExpiration:q,minExpiration:le,maxCharactersPerOption:B,poll:$,disabled:g==="loading",onInput:a=>{if(a){const l={...a};L(l)}else L(null)}}),t("div",{class:"toolbar wrap",style:{justifyContent:"flex-end"},children:[t("span",{children:[t("label",{class:"toolbar-button",children:[t("input",{type:"file",accept:J.join(","),multiple:M.length=I||!!$,onChange:a=>{const l=a.target.files;if(!l)return;const b=Array.from(l).map(d=>({file:d,type:d.type,size:d.size,url:URL.createObjectURL(d),id:null,description:null}));M.length+b.length>I?alert(`You can only attach up to ${I} files.`):z(d=>d.concat(b)),a.target.value=""}}),t(K,{icon:"attachment"})]}),y==null||y>1&&t(Ce,{children:t("button",{type:"button",class:"toolbar-button",disabled:g==="loading"||!!$||!!M.length,onClick:()=>{L({options:["",""],expiresIn:24*60*60,multiple:!1})},children:t(K,{icon:"poll",alt:"Add poll"})})}),t("button",{type:"button",class:"toolbar-button",disabled:g==="loading",onClick:()=>{Ye(!0)},children:t(K,{icon:"emoji2"})}),!!re.settings.composerGIFPicker&&t("button",{type:"button",class:"toolbar-button gif-picker-button",disabled:g==="loading"||M.length>=I||!!$,onClick:()=>{ht(!0)},children:t("span",{children:"GIF"})})]}),t("div",{class:"spacer"}),g==="loading"?t(rt,{abrupt:!0}):t(vi,{maxCharacters:D,hidden:g==="loading"}),t("label",{class:`toolbar-button ${O!==ae.current||he!=null&&he.length&&!he.includes(O)?"highlight":""}`,children:[t("span",{class:"icon-text",children:(Mt=Qn[O])==null?void 0:Mt.native}),t("select",{name:"language",value:O,onChange:a=>{const{value:l}=a.target;ie(l||ye),ze.session.set("currentLanguage",l||ye)},disabled:g==="loading",children:[an.map(([a,l,b])=>t("option",{value:a,children:[l," (",b,")"]},a)),t("hr",{}),on.map(([a,l,b])=>t("option",{value:a,children:[l," (",b,")"]},a))]})]})," ",t("button",{type:"submit",class:"large",disabled:g==="loading",children:e?"Reply":n?"Update":"Post"})]})]})]}),Ve&&t(Qe,{onClick:a=>{a.target===a.currentTarget&&dt(!1)},children:t(xi,{masto:u,instance:v,onClose:()=>{dt(!1)},defaultSearchTerm:Ve==null?void 0:Ve.defaultSearchTerm,onSelect:a=>{const l=S.current;if(!l)return;const{selectionStart:b,selectionEnd:d}=l,_=l.value,x=_.slice(0,b),w=x?/[\s\t\n\r]$/.test(x)?"":" ":"",F=_.slice(d),P=/^[\s\t\n\r]/.test(F)?"":" ",ne=x+w+"@"+a+P+F;l.value=ne,l.selectionStart=l.selectionEnd=d+1+a.length+P.length,l.focus(),l.dispatchEvent(new Event("input"))}})}),Ge&&t(Qe,{onClick:a=>{a.target===a.currentTarget&&Ye(!1)},children:t(wi,{masto:u,instance:v,onClose:()=>{Ye(!1)},defaultSearchTerm:Ge==null?void 0:Ge.defaultSearchTerm,onSelect:a=>{const l=S.current;if(!l)return;const{selectionStart:b,selectionEnd:d}=l,_=l.value,x=_.slice(0,b),w=x?/[\s\t\n\r]$/.test(x)?"":" ":"",F=_.slice(d),P=/^[\s\t\n\r]/.test(F)?"":" ",ne=x+w+a+P+F;l.value=ne,l.selectionStart=l.selectionEnd=d+a.length+P.length,l.focus(),l.dispatchEvent(new Event("input"))}})}),nn&&t(Qe,{onClick:a=>{a.target===a.currentTarget&&ht(!1)},children:t(Ei,{onClose:()=>ht(!1),onSelect:({url:a,type:l,alt_text:b})=>{if(M.length>=I){alert(`You can only attach up to ${I} files.`);return}(async()=>{var _,x;let d;try{d=xe({text:"Downloading GIF…",duration:-1});const w=await fetch(a,{referrerPolicy:"no-referrer"}).then(ne=>ne.blob()),F=new File([w],l==="video/mp4"?"video.mp4":"image.gif",{type:l}),P=[...M,{file:F,type:l,size:F.size,id:null,description:b||""}];z(P),(_=d==null?void 0:d.hideToast)==null||_.call(d)}catch{(x=d==null?void 0:d.hideToast)==null||x.call(d),xe("Failed to download GIF")}})()}})})]})}function Ut(s){if(!s)return;const{value:e,offsetHeight:n,scrollHeight:o,clientHeight:r}=s;if(np.visibleInPicker),r=new pn(o,{keys:["shortcode"],findAllMatches:!0});return[o,r]}const Qt=Mn(mi,{matchesArg:(s,e)=>s.instance===e.instance,maxAge:30*60*1e3}),gi=s=>{const e=mn(s);return e!=null&&e.length?e.slice(0,2).map(n=>n.lang):null},fi=fn((s,e)=>{var J;const{masto:n,instance:o}=Ft(),[r,p]=H(((J=e.current)==null?void 0:J.value)||""),{maxCharacters:u,performSearch:v=()=>{},onTrigger:g=()=>{},...R}=s,C=W();ee(()=>{Qt(o,n).then(c=>{const[h,m]=c;C.current=m}).catch(c=>{})},[]);const k=W(),A=W("");ee(()=>{let c,h,m;return k.current&&(c=f=>{var le;const{key:E,provide:y,text:B}=f.detail;if(A.current=B,B===""){y(Promise.resolve({matched:!1}));return}if(E===":"){const S=(le=C.current)==null?void 0:le.search(B,{limit:5});let X="";S.forEach(({item:V})=>{const{shortcode:U,url:j}=V;X+=` -
  • - - ${fe(U)} -
  • `}),X+=`
  • More…
  • `,ve.innerHTML=X,y(Promise.resolve({matched:S.length>0,fragment:ve}));return}const q={"@":"accounts","#":"hashtags"}[E];y(new Promise(S=>{v({type:q,q:B,limit:5}).then(V=>{if(B!==A.current)return;const U=V[q]||V;let j="";U.forEach(te=>{var Q;const{name:O,avatarStatic:ie,displayName:ae,username:M,acct:z,emojis:$,history:L}=te,N=En(ae,$);if(z)j+=` -
  • - - - - - ${N||M} -
    @${fe(z)} -
    -
  • - `;else{const oe=(Q=L==null?void 0:L.reduce)==null?void 0:Q.call(L,(ue,ge)=>ue+ +ge.uses,0);j+=` -
  • - #${fe(O)} - ${oe?`${Fn(oe)}`:""} -
  • - `}}),q==="accounts"&&(j+=`
  • More…
  • `),ve.innerHTML=j,S({matched:U.length>0,fragment:ve})})}))},k.current.addEventListener("text-expander-change",c),h=f=>{const{key:E,item:y}=f.detail,{value:B,more:q}=y.dataset;E===":"?(f.detail.value=B?`:${B}:`:"​",q&&(f.detail.continue=!0,setTimeout(()=>{g==null||g({name:"custom-emojis",defaultSearchTerm:q})},300))):E==="@"?(f.detail.value=B?`@${B} `:"​",q&&(f.detail.continue=!0,setTimeout(()=>{g==null||g({name:"mention",defaultSearchTerm:q})},300))):f.detail.value=`${E}${B}`},k.current.addEventListener("text-expander-value",h),m=f=>{const{input:E}=f.detail;if(p(E.value),e.current){const y=new Event("input",{bubbles:!0});e.current.dispatchEvent(y)}},k.current.addEventListener("text-expander-committed",m)),()=>{k.current&&(k.current.removeEventListener("text-expander-change",c),k.current.removeEventListener("text-expander-value",h),k.current.removeEventListener("text-expander-committed",m))}},[]),ee(()=>{const c=e.current;if(!c)return;new ResizeObserver(()=>{if(k.current){const{height:m}=c.getBoundingClientRect();k.current.style.height=m+"px"}}).observe(c)},[]);const Z=W(0),D=W(),I=gn(c=>{var f;if(!D.current)return;if(Z.current>3){D.current.innerHTML="",D.current=null,(f=I==null?void 0:I.cancel)==null||f.call(I);return}let h,m;Z.current<=3&&(h=Date.now()),D.current.innerHTML=hi(c,{maxCharacters:u})+` -`,Z.current<=3&&(m=Date.now()),h&&m&&m-h>50&&Z.current++},500),se=ot(()=>{var f,E;const c=(f=D.current)==null?void 0:f.cloneNode(!0);if(!c)return;c.querySelectorAll("mark").forEach(y=>{y.remove()});const h=(E=c.innerText)==null?void 0:E.trim();if(!h)return;const m=gi(h);m!=null&&m.length&&(g==null||g({name:"auto-detect-language",languages:m}))},2e3);return t("text-expander",{ref:k,keys:"@ # :",class:"compose-field-container",children:[t("textarea",{class:"compose-field",autoCapitalize:"sentences",autoComplete:"on",autoCorrect:"on",spellCheck:"true",dir:"auto",rows:"6",cols:"50",...R,ref:e,name:"status",value:r,onKeyDown:c=>{const{key:h,target:m}=c;if(h==="Enter"&&!(c.ctrlKey||c.metaKey))try{const{value:f,selectionStart:E}=m,B=f.slice(0,E).split(` -`).slice(-1)[0];if(B&&/^\s*(-|\d+\.)\s/.test(B)){const[q,le,S,X,V]=B.match(/^(\s*)(-|\d+\.)(\s+)(.+)?/)||[];if(V){c.preventDefault();const[U]=S.match(/\d+/)||[],j=U?`${+U+1}.`:"-",te=` -${le}${j}${X}`;m.setRangeText(te,E,E);const O=E+te.length;m.setSelectionRange(O,O)}else{const U=E-B.length;m.setRangeText("",U,E)}Ut(m),m.dispatchEvent(new Event("input"))}}catch{}D.current&&(D.current.scrollTop=m.scrollTop)},onInput:c=>{var f;const{target:h}=c,m=h.value.replace(/\u200b/g,"");p(m),Ut(h),(f=s.onInput)==null||f.call(s,c),I(m),se()},style:{width:"100%",height:"4em"},onScroll:c=>{if(D.current){const{scrollTop:h}=c.target;D.current.scrollTop=h}}}),t("div",{ref:D,class:"compose-highlight","aria-hidden":"true"})]})});function vi({maxCharacters:s=500,hidden:e}){const o=vn(re).composerCharacterCount,r=s-o;return e?t("span",{class:"char-counter",hidden:!0}):t("span",{class:"char-counter",title:`${r}/${s}`,style:{"--percentage":o/s*100},children:[t("meter",{class:`${r<=-10?"explode":r<=0?"danger":r<=20?"warning":""}`,value:o,max:s}),t("span",{class:"counter",children:r})]})}function Xe(s){const e=["bytes","KB","MB","GB","TB","PB","EB","ZB","YB"];let n=0;for(;s>=1024;)s/=1024,n++;return`${s.toFixed(0).toLocaleString()} ${e[n]}`}function Wt(s,e,n,o){const r=Math.sqrt(e/s),p=Math.floor(n*r),u=Math.floor(o*r);return{newWidth:p,newHeight:u}}function bi({attachment:s,disabled:e,lang:n,onDescriptionChange:o=()=>{},onRemove:r=()=>{}}){const[p,u]=H("default"),v=Gt("@mastodon/edit-media-attributes"),{type:g,id:R,file:C}=s,k=Pe(()=>C?URL.createObjectURL(C):s.url,[C,s.url]),A=!!(C!=null&&C.size),Z=A?Yt():{},{mediaAttachments:{imageSizeLimit:D,imageMatrixLimit:I,videoSizeLimit:se,videoMatrixLimit:J,videoFrameRateLimit:c}={}}=Z||{},[h,m]=H(()=>A?g.startsWith("image")&&D&&C.size>D?{type:"imageSizeLimit",details:{imageSize:C.size,imageSizeLimit:D}}:g.startsWith("video")&&se&&C.size>se?{type:"videoSizeLimit",details:{videoSize:C.size,videoSizeLimit:se}}:null:null),[f,E]=H({});ee(()=>{!A||!I||(f==null?void 0:f.matrix)>I&&m({type:"imageMatrixLimit",details:{imageMatrix:f==null?void 0:f.matrix,imageMatrixLimit:I,width:f==null?void 0:f.width,height:f==null?void 0:f.height}})},[f,I,A]);const[y,B]=H({});ee(()=>{!A||!J||(y==null?void 0:y.matrix)>J&&m({type:"videoMatrixLimit",details:{videoMatrix:y==null?void 0:y.matrix,videoMatrixLimit:J,width:y==null?void 0:y.width,height:y==null?void 0:y.height}})},[y,J,A]);const[q,le]=H(s.description),[S,X]=g.split("/"),V=ot(o,250);ee(()=>{V(q)},[q,V]);const[U,j]=H(!1),te=W(null);ee(()=>{let z;return U&&te.current&&(z=setTimeout(()=>{te.current.focus()},100)),()=>{clearTimeout(z)}},[U]);const O=t(Ce,{children:R&&!v?t("div",{class:"media-desc",children:[t("span",{class:"tag",children:"Uploaded"}),t("p",{title:q,children:s.description||t("i",{children:"No description"})})]}):t("textarea",{ref:te,value:q||"",lang:n,placeholder:{image:"Image description",video:"Video description",audio:"Audio description"}[S],autoCapitalize:"sentences",autoComplete:"on",autoCorrect:"on",spellCheck:"true",dir:"auto",disabled:e||p==="loading",class:p==="loading"?"loading":"",maxlength:"1500",onInput:z=>{const{value:$}=z.target;le($)}})}),ie=W(null);ee(()=>()=>{var z,$;($=(z=ie.current)==null?void 0:z.hideToast)==null||$.call(z)},[]);const ae=W(null),M=z=>{const{type:$,details:L}=z;switch($){case"imageSizeLimit":{const{imageSize:N,imageSizeLimit:Q}=L;return`File size too large. Uploading might encounter issues. Try reduce the file size from ${Xe(N)} to ${Xe(Q)} or lower.`}case"imageMatrixLimit":{const{imageMatrix:N,imageMatrixLimit:Q,width:oe,height:ue}=L,{newWidth:ge,newHeight:be}=Wt(N,Q,oe,ue);return`Dimension too large. Uploading might encounter issues. Try reduce dimension from ${oe.toLocaleString()}×${ue.toLocaleString()}px to ${ge.toLocaleString()}×${be.toLocaleString()}px.`}case"videoSizeLimit":{const{videoSize:N,videoSizeLimit:Q}=L;return`File size too large. Uploading might encounter issues. Try reduce the file size from ${Xe(N)} to ${Xe(Q)} or lower.`}case"videoMatrixLimit":{const{videoMatrix:N,videoMatrixLimit:Q,width:oe,height:ue}=L,{newWidth:ge,newHeight:be}=Wt(N,Q,oe,ue);return`Dimension too large. Uploading might encounter issues. Try reduce dimension from ${oe.toLocaleString()}×${ue.toLocaleString()}px to ${ge.toLocaleString()}×${be.toLocaleString()}px.`}case"videoFrameRateLimit":return"Frame rate too high. Uploading might encounter issues."}};return t(Ce,{children:[t("div",{class:"media-attachment",children:[t("div",{class:"media-preview",tabIndex:"0",onClick:()=>{j(!0)},children:S==="image"?t("img",{src:k,alt:"",onLoad:z=>{if(!A)return;const{naturalWidth:$,naturalHeight:L}=z.target;E({matrix:$*L,width:$,height:L})}}):S==="video"||S==="gifv"?t("video",{src:k+"#t=0.1",playsinline:!0,muted:!0,disablePictureInPicture:!0,preload:"metadata",onLoadedMetadata:z=>{if(!A)return;const{videoWidth:$,videoHeight:L}=z.target;$&&L&&B({matrix:$*L,width:$,height:L})}}):S==="audio"?t("audio",{src:k,controls:!0}):null}),O,t("div",{class:"media-aside",children:[t("button",{type:"button",class:"plain close-button",disabled:e,onClick:r,children:t(K,{icon:"x"})}),!!h&&t("button",{type:"button",class:"media-error",title:M(h),onClick:()=>{ae.current&&ae.current.hideToast(),ae.current=xe({text:M(h),duration:1e4})},children:t(K,{icon:"alert"})})]})]}),U&&t(Qe,{onClick:z=>{z.target===z.currentTarget&&j(!1)},children:t("div",{id:"media-sheet",class:"sheet sheet-max",children:[t("button",{type:"button",class:"sheet-close",onClick:()=>{j(!1)},children:t(K,{icon:"x"})}),t("header",{children:t("h2",{children:{image:"Edit image description",video:"Edit video description",audio:"Edit audio description"}[S]})}),t("main",{tabIndex:"-1",children:[t("div",{class:"media-preview",children:S==="image"?t("img",{src:k,alt:""}):S==="video"||S==="gifv"?t("video",{src:k,playsinline:!0,controls:!0}):S==="audio"?t("audio",{src:k,controls:!0}):null}),t("div",{class:"media-form",children:[O,t("footer",{children:[S==="image"&&/^(png|jpe?g|gif|webp)$/i.test(X)&&!!re.settings.mediaAltGenerator&&!!vt&&t(Cn,{portal:{target:document.body},containerProps:{style:{zIndex:1001}},align:"center",position:"anchor",overflow:"auto",menuButton:t("button",{type:"button",title:"More",class:"plain",children:t(K,{icon:"more",size:"l",alt:"More"})}),children:[t($t,{disabled:p==="loading",onClick:()=>{u("loading"),ie.current=xe({text:"Generating description. Please wait...",duration:-1}),async function(){var z,$;try{const L=new FormData;L.append("image",C);const N=await fetch(vt,{method:"POST",body:L}).then(Q=>Q.json());if(N.error)throw new Error(N.error);le(N.description)}catch(L){xe(`Failed to generate description${L!=null&&L.message?`: ${L.message}`:""}`)}finally{u("default"),($=(z=ie.current)==null?void 0:z.hideToast)==null||$.call(z)}}()},children:[t(K,{icon:"sparkles2"}),n&&n!=="en"?t("small",{children:["Generate description…",t("br",{}),"(English)"]}):t("span",{children:"Generate description…"})]}),!!n&&n!=="en"&&t($t,{disabled:p==="loading",onClick:()=>{u("loading"),ie.current=xe({text:"Generating description. Please wait...",duration:-1}),async function(){var z,$;try{const L=new FormData;L.append("image",C);const N=`?lang=${n}`,Q=await fetch(vt+N,{method:"POST",body:L}).then(oe=>oe.json());if(Q.error)throw new Error(Q.error);le(Q.description)}catch(L){xe(`Failed to generate description${L!=null&&L.message?`: ${L.message}`:""}`)}finally{u("default"),($=(z=ie.current)==null?void 0:z.hideToast)==null||$.call(z)}}()},children:[t(K,{icon:"sparkles2"}),t("small",{children:["Generate description…",t("br",{}),"(",zn(n),")"," ",t("span",{class:"more-insignificant",children:"— experimental"})]})]})]}),t("button",{type:"button",class:"light block",onClick:()=>{j(!1)},disabled:p==="loading",children:"Done"})]})]})]})]})})]})}function yi({lang:s,poll:e,disabled:n,onInput:o=()=>{},maxOptions:r,maxExpiration:p,minExpiration:u,maxCharactersPerOption:v}){const{options:g,expiresIn:R,multiple:C}=e;return t("div",{class:`poll ${C?"multiple":""}`,children:[t("div",{class:"poll-choices",children:g.map((k,A)=>t("div",{class:"poll-choice",children:[t("input",{required:!0,type:"text",value:k,disabled:n,maxlength:v,placeholder:`Choice ${A+1}`,lang:s,spellCheck:"true",dir:"auto",onInput:Z=>{const{value:D}=Z.target;g[A]=D,o(e)}}),t("button",{type:"button",class:"plain2 poll-button",disabled:n||g.length<=1,onClick:()=>{g.splice(A,1),o(e)},children:t(K,{icon:"x",size:"s"})})]},A))}),t("div",{class:"poll-toolbar",children:[t("button",{type:"button",class:"plain2 poll-button",disabled:n||g.length>=r,onClick:()=>{g.push(""),o(e)},children:"+"})," ",t("label",{class:"multiple-choices",children:[t("input",{type:"checkbox",checked:C,disabled:n,onChange:k=>{const{checked:A}=k.target;e.multiple=A,o(e)}})," ","Multiple choices"]}),t("label",{class:"expires-in",children:["Duration"," ",t("select",{value:R,disabled:n,onChange:k=>{const{value:A}=k.target;e.expiresIn=A,o(e)},children:Object.entries(Jt).filter(([k,A])=>A>=u&&A<=p).map(([k,A])=>t("option",{value:A,children:k},A))})]})]}),t("div",{class:"poll-toolbar",children:t("button",{type:"button",class:"plain remove-poll-button",disabled:n,onClick:()=>{o(null)},children:"Remove poll"})})]})}function fe(s){return s.replace(/[&<>"']/g,function(e){return"&#"+e.charCodeAt(0)+";"})}function qt(s){for(let e in s)(s[e]===null||s[e]===void 0)&&delete s[e];return s}function xi({onClose:s=()=>{},onSelect:e=()=>{},defaultSearchTerm:n}){const{masto:o}=Ft(),[r,p]=H("default"),[u,v]=H([]),[g,R]=H({}),[C,k]=H(0),A=async c=>{if(!(c!=null&&c.length))return;const h=await Ln(c,g);h&&R({...g,...h})},Z=c=>{c&&(p("loading"),(async()=>{try{const h=await o.v1.accounts.search.list({q:c,limit:40,resolve:!1});v(h),A(h),p("default")}catch{p("error")}})())},D=ot(Z,1e3);ee(()=>{Z()},[Z]);const I=W();ee(()=>{I.current&&(I.current.focus(),I.current.value&&(I.current.selectionStart=I.current.value.length,I.current.selectionEnd=I.current.value.length))},[]),ee(()=>{n&&Z(n)},[n]);const se=c=>{const h=c.acct;e(h),s()};je("enter",()=>{const c=u[C];c&&se(c)},{preventDefault:!0,enableOnFormTags:["input"]});const J=W();return je("down",()=>{C{const c=J.current.querySelector(".selected");c&&c.scrollIntoView({behavior:"smooth",block:"center",inline:"center"})},1)},{preventDefault:!0,enableOnFormTags:["input"]}),je("up",()=>{C>0?k(C-1):k(u.length-1),setTimeout(()=>{const c=J.current.querySelector(".selected");c&&c.scrollIntoView({behavior:"smooth",block:"center",inline:"center"})},1)},{preventDefault:!0,enableOnFormTags:["input"]}),t("div",{id:"mention-sheet",class:"sheet",children:[!!s&&t("button",{type:"button",class:"sheet-close",onClick:s,children:t(K,{icon:"x"})}),t("header",{children:t("form",{onSubmit:c=>{var h;c.preventDefault(),(h=D.flush)==null||h.call(D)},children:t("input",{ref:I,required:!0,type:"search",class:"block",placeholder:"Search accounts",onInput:c=>{const{value:h}=c.target;D(h)},autocomplete:"off",autocorrect:"off",autocapitalize:"off",spellCheck:"false",dir:"auto",defaultValue:n||""})})}),t("main",{children:(u==null?void 0:u.length)>0?t("ul",{ref:J,class:`accounts-list ${r==="loading"?"loading":""}`,children:u.map((c,h)=>{const m=g[c.id];return t("li",{class:h===C?"selected":"",children:[t(Vt,{avatarSize:"xxl",account:c,relationship:m,showStats:!0,showActivity:!0}),t("button",{type:"button",class:"plain2",onClick:()=>{se(c)},children:t(K,{icon:"plus",size:"xl"})})]},c.id)})}):r==="loading"?t("div",{class:"ui-state",children:t(rt,{abrupt:!0})}):r==="error"?t("div",{class:"ui-state",children:t("p",{children:"Error loading accounts"})}):null})]})}function wi({masto:s,instance:e,onClose:n=()=>{},onSelect:o=()=>{},defaultSearchTerm:r}){const[p,u]=H("default"),v=W([]),[g,R]=H([]),C=Pe(()=>ze.account.get("recentlyUsedCustomEmojis")||[]),k=W();ee(()=>{u("loading"),(async()=>{try{const[h,m]=await Qt(e,s);k.current=m,R(h),u("default")}catch{u("error")}})()},[]);const A=Pe(()=>{const h={"--recent--":C.filter(f=>g.find(E=>E.shortcode===f.shortcode))},m=[];return g.forEach(f=>{var E,y;if((y=(E=v.current)==null?void 0:E.push)==null||y.call(E,f),!f.category){m.push(f);return}h[f.category]||(h[f.category]=[]),h[f.category].push(f)}),m.length&&(h["--others--"]=m),h},[g]),Z=W(),[D,I]=H(null),se=Bt(h=>{var f,E,y;const{value:m}=h.target;if(m){const B=(f=k.current)==null?void 0:f.search(m,{limit:Et});I(B.map(q=>q.item)),(y=(E=Z.current)==null?void 0:E.scrollTo)==null||y.call(E,0,0)}else I(null)},[g]);ee(()=>{r&&(g!=null&&g.length)&&se({target:{value:r}})},[r,se,g]);const J=Bt(h=>{o==null||o(h),n==null||n(),queueMicrotask(()=>{let m=ze.account.get("recentlyUsedCustomEmojis")||[];const f=m.findIndex(E=>E.shortcode===h.shortcode);f!==-1?(m.splice(f,1),m.unshift(h)):(m.unshift(h),m=m.filter(E=>{var y,B;return(B=(y=v.current)==null?void 0:y.find)==null?void 0:B.call(y,q=>q.shortcode===E.shortcode)}),m=m.slice(0,10)),ze.account.set("recentlyUsedCustomEmojis",m)})},[o]),c=W();return ee(()=>{c.current&&(c.current.focus(),c.current.value&&(c.current.selectionStart=c.current.value.length,c.current.selectionEnd=c.current.value.length))},[]),t("div",{id:"custom-emojis-sheet",class:"sheet",children:[!!n&&t("button",{type:"button",class:"sheet-close",onClick:n,children:t(K,{icon:"x"})}),t("header",{children:[t("div",{children:[t("b",{children:"Custom emojis"})," ",p==="loading"?t(rt,{}):t("small",{class:"insignificant",children:[" • ",e]})]}),t("form",{onSubmit:h=>{h.preventDefault();const m=D[0];m&&J(`:${m.shortcode}:`)},children:t("input",{ref:c,type:"search",placeholder:"Search emoji",onInput:se,autocomplete:"off",autocorrect:"off",autocapitalize:"off",spellCheck:"false",dir:"auto",defaultValue:r||""})})]}),t("main",{ref:Z,children:D!==null?t("ul",{class:"custom-emojis-matches custom-emojis-list",children:D.map(h=>t("li",{class:"custom-emojis-match",children:t(en,{emoji:h,onClick:()=>{J(`:${h.shortcode}:`)},showCode:!0})},h.shortcode))}):t("div",{class:"custom-emojis-list",children:[p==="error"&&t("div",{class:"ui-state",children:t("p",{children:"Error loading custom emojis"})}),p==="default"&&Object.entries(A).map(([h,m])=>!!(m!=null&&m.length)&&t(Ce,{children:[t("div",{class:"section-header",children:{"--recent--":"Recently used","--others--":"Others"}[h]||h}),t(ki,{emojis:m,onSelect:J})]}))]})})]})}const ki=Kt(({emojis:s,onSelect:e})=>{const[n,o]=H(Et),r=s.length>n;return t("section",{children:[s.slice(0,n).map(p=>t(en,{emoji:p,onClick:()=>{e(`:${p.shortcode}:`)}},p.shortcode)),r&&t("button",{type:"button",class:"plain small",onClick:()=>o(n+Et),children:[(s.length-n).toLocaleString()," more…"]})]})}),en=Kt(({emoji:s,onClick:e,showCode:n})=>{const o=r=>{const u=r.currentTarget.closest("main");if(u){const v=u.getBoundingClientRect(),g=r.currentTarget.getBoundingClientRect(),R=r.currentTarget.classList;g.leftv.right-88?(R.add("edge-right"),R.remove("edge-left")):R.remove("edge-left","edge-right")}};return t("button",{type:"button",className:"plain4",onClick:e,"data-title":n?void 0:s.shortcode,onPointerEnter:o,onFocus:o,children:[t("picture",{children:[!!s.staticUrl&&t("source",{srcSet:s.staticUrl,media:"(prefers-reduced-motion: reduce)"}),t("img",{className:"shortcode-emoji",src:s.url||s.staticUrl,alt:s.shortcode,width:"24",height:"24",loading:"lazy",decoding:"async"})]}),n&&t(Ce,{children:[" ",t("code",{children:s.shortcode})]})]})}),bt=20;function Ei({onClose:s=()=>{},onSelect:e=()=>{}}){var A,Z,D,I,se,J;const[n,o]=H("default"),[r,p]=H([]),u=W(null),v=W(null),g=W(0),R=W(null);function C({offset:c}){var h,m,f;(h=v.current)!=null&&h.value&&(o("loading"),(f=(m=R.current)==null?void 0:m.scrollTo)==null||f.call(m,{top:0,left:0,behavior:"smooth"}),(async()=>{var E;try{const y={api_key:Xn,q:v.current.value,rating:"g",limit:bt,bundle:"messaging_non_clips",offset:c},B=await fetch("https://api.giphy.com/v1/gifs/search?"+new URLSearchParams(y),{referrerPolicy:"no-referrer"}).then(q=>q.json());g.current=((E=B.pagination)==null?void 0:E.offset)||0,p(B),o("results")}catch{o("error")}})())}ee(()=>{var c;(c=v.current)==null||c.focus()},[]);const k=ot(()=>{C({offset:0})},1e3);return t("div",{id:"gif-picker-sheet",class:"sheet",children:[!!s&&t("button",{type:"button",class:"sheet-close",onClick:s,children:t(K,{icon:"x"})}),t("header",{children:t("form",{ref:u,onSubmit:c=>{c.preventDefault(),C({offset:0})},children:[t("input",{ref:v,type:"search",name:"q",placeholder:"Search GIFs",required:!0,autocomplete:"off",autocorrect:"off",autocapitalize:"off",spellCheck:"false",dir:"auto",onInput:k}),t("input",{type:"image",class:"powered-button",src:Gn,width:"86",height:"30"})]})}),t("main",{ref:R,class:n==="loading"?"loading":"",children:[n==="default"&&t("div",{class:"ui-state",children:t("p",{class:"insignificant",children:"Type to search GIFs"})}),n==="loading"&&!((A=r==null?void 0:r.data)!=null&&A.length)&&t("div",{class:"ui-state",children:t(rt,{abrupt:!0})}),((Z=r==null?void 0:r.data)==null?void 0:Z.length)>0?t(Ce,{children:[t("ul",{children:r.data.map(c=>{const{id:h,images:m,title:f,alt_text:E}=c,{fixed_height_small:y,fixed_height_downsampled:B,fixed_height:q,original:le}=m,S=y!=null&&y.url?y:B!=null&&B.url?B:q;let{url:X,webp:V,width:U,height:j}=S;+j>100&&(U=U/j*100,j=100);const te=new URL(X),O=te.origin+te.pathname;let ie;if(V){const ae=new URL(V);ie=ae.origin+ae.pathname}return t("li",{children:t("button",{type:"button",onClick:()=>{const{mp4:ae,url:M}=le,z=ae||M,$=new URL(z),L=$.origin+$.pathname;s(),e({url:L,type:ae?"video/mp4":"image/gif",alt_text:E||f})},children:t("figure",{style:{"--figure-width":U+"px"},children:[t("picture",{children:[ie&&t("source",{srcset:ie,type:"image/webp"}),t("img",{src:O,width:U,height:j,loading:"lazy",decoding:"async",alt:E,referrerpolicy:"no-referrer",onLoad:ae=>{ae.target.style.backgroundColor="transparent"}})]}),t("figcaption",{children:E||f})]})})},h)})}),t("p",{class:"pagination",children:[((D=r.pagination)==null?void 0:D.offset)>0&&t("button",{type:"button",class:"light small",disabled:n==="loading",onClick:()=>{var c;C({offset:((c=r.pagination)==null?void 0:c.offset)-bt})},children:[t(K,{icon:"chevron-left"}),t("span",{children:"Previous"})]}),t("span",{}),((I=r.pagination)==null?void 0:I.offset)+((se=r.pagination)==null?void 0:se.count)<((J=r.pagination)==null?void 0:J.total_count)&&t("button",{type:"button",class:"light small",disabled:n==="loading",onClick:()=>{var c;C({offset:((c=r.pagination)==null?void 0:c.offset)+bt})},children:[t("span",{children:"Next"})," ",t(K,{icon:"chevron-right"})]})]})]}):n==="results"&&t("div",{class:"ui-state",children:t("p",{children:"No results"})}),n==="error"&&t("div",{class:"ui-state",children:t("p",{children:"Error loading GIFs"})})]})]})}export{Ai as default}; -//# sourceMappingURL=compose-W5mt71Ut.js.map diff --git a/assets/compose-W5mt71Ut.js.map b/assets/compose-W5mt71Ut.js.map deleted file mode 100644 index 4b3eb2c..0000000 --- a/assets/compose-W5mt71Ut.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"compose-W5mt71Ut.js","sources":["../../node_modules/@github/combobox-nav/dist/index.js","../../node_modules/@github/text-expander-element/dist/index.js","../../node_modules/ansi-regex/index.js","../../node_modules/strip-ansi/index.js","../../node_modules/string-length/index.js","../../src/assets/powered-by-giphy.svg","../../src/components/compose.jsx"],"sourcesContent":["export default class Combobox {\n constructor(input, list, { tabInsertsSuggestions, defaultFirstOption } = {}) {\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.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 scrollTo(this.list, target);\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);\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) {\n target.dispatchEvent(new CustomEvent('combobox-commit', { 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}\nfunction scrollTo(container, target) {\n if (!inViewport(container, target)) {\n container.scrollTop = target.offsetTop;\n }\n}\nfunction inViewport(container, element) {\n const scrollTop = container.scrollTop;\n const containerBottom = scrollTop + container.clientHeight;\n const top = element.offsetTop;\n const bottom = top + element.clientHeight;\n return top >= scrollTop && bottom <= containerBottom;\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\n/**\n * A custom element is implemented as a class which extends HTMLElement (in the\n * case of autonomous elements) or the interface you want to customize (in the\n * case of customized built-in elements).\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Web_components/Using_custom_elements#custom_element_lifecycle_callbacks\n */\nclass CustomHTMLElement extends HTMLElement {\n}\n\nclass InputStyleCloneUpdateEvent extends Event {\n constructor() {\n super(\"update\");\n }\n}\nconst CloneRegistry = new WeakMap();\n/**\n * Create 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 InputStyleCloneElement extends CustomHTMLElement {\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;\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.\n *\n * Upon initial creation the clone element will automatically be inserted into the DOM and begin observing the\n * linked input. Only one clone per input can ever exist at a time.\n * @param input The target input to clone.\n */\n static for(input) {\n const clone = CloneRegistry.get(input) ?? new InputStyleCloneElement(input);\n CloneRegistry.set(input, clone);\n return clone;\n }\n /**\n * Avoid constructing directly: Use `InputStyleCloneElement.for` instead.\n * @private\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 = document.createElement(\"div\");\n this.#container.style.position = \"absolute\";\n this.#container.style.pointerEvents = \"none\";\n input.after(this.#container);\n this.#container.appendChild(this);\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 /** @private */\n connectedCallback() {\n const input = this.#inputRef.deref();\n if (!input)\n return this.remove();\n this.style.pointerEvents = \"none\";\n this.style.userSelect = \"none\";\n this.style.overflow = \"hidden\";\n this.style.display = \"block\";\n // Important not to use display:none which would not render the content at all\n this.style.visibility = \"hidden\";\n if (input instanceof HTMLTextAreaElement) {\n this.style.whiteSpace = \"pre-wrap\";\n this.style.wordWrap = \"break-word\";\n }\n else {\n this.style.whiteSpace = \"nowrap\";\n // text in single-line inputs is vertically centered\n this.style.display = \"table-cell\";\n this.style.verticalAlign = \"middle\";\n }\n this.setAttribute(\"aria-hidden\", \"true\");\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 /** @private */\n disconnectedCallback() {\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 const input = this.#inputRef.deref();\n if (input) {\n input.removeEventListener(\"input\", this.#onInput, { capture: true });\n CloneRegistry.delete(input);\n }\n }\n // --- private ---\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.#inputRef.deref();\n if (!input)\n return this.remove();\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.style.height = inputStyle.height;\n this.style.width = inputStyle.width;\n // Immediately re-adjust for browser inconsistencies in scrollbar handling, if necessary\n if (input.clientHeight !== this.clientHeight)\n this.style.height = `calc(${inputStyle.height} + ${input.clientHeight - this.clientHeight}px)`;\n if (input.clientWidth !== this.clientWidth)\n this.style.width = `calc(${inputStyle.width} + ${input.clientWidth - this.clientWidth}px)`;\n // Position on top of the input\n const inputRect = input.getBoundingClientRect();\n const cloneRect = this.getBoundingClientRect();\n this.#xOffset = this.#xOffset + inputRect.left - cloneRect.left;\n this.#yOffset = this.#yOffset + inputRect.top - cloneRect.top;\n this.style.transform = `translate(${this.#xOffset}px, ${this.#yOffset}px)`;\n this.scrollTop = input.scrollTop;\n this.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.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.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// Inspired by https://github.com/github/catalyst/blob/dc284dcf4f82329a9cac5c867462a8fa529b6c40/src/register.ts\ntry {\n customElements.define(\"input-style-clone\", InputStyleCloneElement);\n}\ncatch (e) {\n // Throws DOMException with NotSupportedError if already defined\n if (!(e instanceof DOMException && e.name === \"NotSupportedError\"))\n throw e;\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 InputStyleCloneElement.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.childNodes[0];\n if (textNode) {\n range.setStart(textNode, this.startOffset);\n range.setEnd(textNode, this.endOffset);\n }\n return range;\n }\n}\n\nconst states = new WeakMap();\nclass TextExpander {\n constructor(expander, input) {\n this.expander = expander;\n this.input = input;\n this.combobox = null;\n this.menu = null;\n this.match = null;\n this.justPasted = false;\n this.lookBackIndex = 0;\n this.oninput = this.onInput.bind(this);\n this.onpaste = this.onPaste.bind(this);\n this.onkeydown = this.onKeydown.bind(this);\n this.oncommit = this.onCommit.bind(this);\n this.onmousedown = this.onMousedown.bind(this);\n this.onblur = this.onBlur.bind(this);\n this.interactingWithList = false;\n input.addEventListener('paste', this.onpaste);\n input.addEventListener('input', this.oninput);\n input.addEventListener('keydown', this.onkeydown);\n input.addEventListener('blur', this.onblur);\n }\n destroy() {\n this.input.removeEventListener('paste', this.onpaste);\n this.input.removeEventListener('input', this.oninput);\n this.input.removeEventListener('keydown', this.onkeydown);\n this.input.removeEventListener('blur', this.onblur);\n }\n dismissMenu() {\n if (this.deactivate()) {\n this.lookBackIndex = this.input.selectionEnd || this.lookBackIndex;\n }\n }\n activate(match, menu) {\n var _a, _b;\n if (this.input !== document.activeElement && this.input !== ((_b = (_a = document.activeElement) === null || _a === void 0 ? void 0 : _a.shadowRoot) === null || _b === void 0 ? void 0 : _b.activeElement)) {\n return;\n }\n this.deactivate();\n this.menu = menu;\n if (!menu.id)\n menu.id = `text-expander-${Math.floor(Math.random() * 100000).toString()}`;\n this.expander.append(menu);\n this.combobox = new Combobox(this.input, menu);\n this.expander.dispatchEvent(new Event('text-expander-activate'));\n this.positionMenu(menu, match.position);\n this.combobox.start();\n menu.addEventListener('combobox-commit', this.oncommit);\n menu.addEventListener('mousedown', this.onmousedown);\n this.combobox.navigate(1);\n }\n positionMenu(menu, position) {\n const caretRect = new InputRange(this.input, position).getBoundingClientRect();\n const targetPosition = { left: caretRect.left, top: caretRect.top + caretRect.height };\n const currentPosition = menu.getBoundingClientRect();\n const delta = {\n left: targetPosition.left - currentPosition.left,\n top: targetPosition.top - currentPosition.top\n };\n if (delta.left !== 0 || delta.top !== 0) {\n const currentStyle = getComputedStyle(menu);\n menu.style.left = currentStyle.left ? `calc(${currentStyle.left} + ${delta.left}px)` : `${delta.left}px`;\n menu.style.top = currentStyle.top ? `calc(${currentStyle.top} + ${delta.top}px)` : `${delta.top}px`;\n }\n }\n deactivate() {\n const menu = this.menu;\n if (!menu || !this.combobox)\n return false;\n this.expander.dispatchEvent(new Event('text-expander-deactivate'));\n this.menu = null;\n menu.removeEventListener('combobox-commit', this.oncommit);\n menu.removeEventListener('mousedown', this.onmousedown);\n this.combobox.destroy();\n this.combobox = null;\n menu.remove();\n return true;\n }\n onCommit({ target }) {\n var _a;\n const item = target;\n if (!(item instanceof HTMLElement))\n return;\n if (!this.combobox)\n return;\n const match = this.match;\n if (!match)\n return;\n const beginning = this.input.value.substring(0, match.position - match.key.length);\n const remaining = this.input.value.substring(match.position + match.text.length);\n const detail = { item, key: match.key, value: null, continue: false };\n const canceled = !this.expander.dispatchEvent(new CustomEvent('text-expander-value', { cancelable: true, detail }));\n if (canceled)\n return;\n if (!detail.value)\n return;\n let suffix = (_a = this.expander.getAttribute('suffix')) !== null && _a !== void 0 ? _a : ' ';\n if (detail.continue) {\n suffix = '';\n }\n const value = `${detail.value}${suffix}`;\n this.input.value = beginning + value + remaining;\n const cursor = beginning.length + value.length;\n this.deactivate();\n this.input.focus({\n preventScroll: true\n });\n this.input.selectionStart = cursor;\n this.input.selectionEnd = cursor;\n if (!detail.continue) {\n this.lookBackIndex = cursor;\n this.match = null;\n }\n this.expander.dispatchEvent(new CustomEvent('text-expander-committed', { cancelable: false, detail: { input: this.input } }));\n }\n onBlur() {\n if (this.interactingWithList) {\n this.interactingWithList = false;\n return;\n }\n this.deactivate();\n }\n onPaste() {\n this.justPasted = true;\n }\n async onInput() {\n if (this.justPasted) {\n this.justPasted = false;\n return;\n }\n const match = this.findMatch();\n if (match) {\n this.match = match;\n const menu = await this.notifyProviders(match);\n if (!this.match)\n return;\n if (menu) {\n this.activate(match, menu);\n }\n else {\n this.deactivate();\n }\n }\n else {\n this.match = null;\n this.deactivate();\n }\n }\n findMatch() {\n const cursor = this.input.selectionEnd || 0;\n const text = this.input.value;\n if (cursor <= this.lookBackIndex) {\n this.lookBackIndex = cursor - 1;\n }\n for (const { key, multiWord } of this.expander.keys) {\n const found = query(text, key, cursor, {\n multiWord,\n lookBackIndex: this.lookBackIndex,\n lastMatchPosition: this.match ? this.match.position : null\n });\n if (found) {\n return { text: found.text, key, position: found.position };\n }\n }\n }\n async notifyProviders(match) {\n const providers = [];\n const provide = (result) => providers.push(result);\n const canceled = !this.expander.dispatchEvent(new CustomEvent('text-expander-change', { cancelable: true, detail: { provide, text: match.text, key: match.key } }));\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 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 default TextExpanderElement;\n","export default function ansiRegex({onlyFirst = false} = {}) {\n\tconst pattern = [\n\t '[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)',\n\t\t'(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-ntqry=><~]))'\n\t].join('|');\n\n\treturn new RegExp(pattern, onlyFirst ? undefined : 'g');\n}\n","import ansiRegex from 'ansi-regex';\n\nconst regex = ansiRegex();\n\nexport default function stripAnsi(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError(`Expected a \\`string\\`, got \\`${typeof string}\\``);\n\t}\n\n\t// Even though the regex is global, we don't need to reset the `.lastIndex`\n\t// because unlike `.exec()` and `.test()`, `.replace()` does it automatically\n\t// and doing it manually has a performance penalty.\n\treturn string.replace(regex, '');\n}\n","import stripAnsi from 'strip-ansi';\n\nconst segmenter = new Intl.Segmenter();\n\nexport default function stringLength(string, {countAnsiEscapeCodes = false} = {}) {\n\tif (string === '') {\n\t\treturn 0;\n\t}\n\n\tif (!countAnsiEscapeCodes) {\n\t\tstring = stripAnsi(string);\n\t}\n\n\tif (string === '') {\n\t\treturn 0;\n\t}\n\n\tlet length = 0;\n\n\tfor (const _ of segmenter.segment(string)) { // eslint-disable-line no-unused-vars\n\t\tlength++;\n\t}\n\n\treturn length;\n}\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 './compose.css';\n\nimport '@github/text-expander-element';\nimport { MenuItem } from '@szhsin/react-menu';\nimport { deepEqual } from 'fast-equals';\nimport Fuse from 'fuse.js';\nimport { memo } from 'preact/compat';\nimport { forwardRef } from 'preact/compat';\nimport {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'preact/hooks';\nimport { useHotkeys } from 'react-hotkeys-hook';\nimport stringLength from 'string-length';\nimport { detectAll } from 'tinyld/light';\nimport { uid } from 'uid/single';\nimport { useDebouncedCallback, useThrottledCallback } from 'use-debounce';\nimport { useSnapshot } from 'valtio';\n\nimport poweredByGiphyURL from '../assets/powered-by-giphy.svg';\n\nimport Menu2 from '../components/menu2';\nimport supportedLanguages from '../data/status-supported-languages';\nimport urlRegex from '../data/url-regex';\nimport { api } from '../utils/api';\nimport db from '../utils/db';\nimport emojifyText from '../utils/emojify-text';\nimport localeMatch from '../utils/locale-match';\nimport localeCode2Text from '../utils/localeCode2Text';\nimport openCompose from '../utils/open-compose';\nimport pmem from '../utils/pmem';\nimport { fetchRelationships } from '../utils/relationships';\nimport shortenNumber from '../utils/shorten-number';\nimport showToast from '../utils/show-toast';\nimport states, { saveStatus } from '../utils/states';\nimport store from '../utils/store';\nimport {\n getCurrentAccount,\n getCurrentAccountNS,\n getCurrentInstance,\n getCurrentInstanceConfiguration,\n} from '../utils/store-utils';\nimport supports from '../utils/supports';\nimport useCloseWatcher from '../utils/useCloseWatcher';\nimport useInterval from '../utils/useInterval';\nimport visibilityIconsMap from '../utils/visibility-icons-map';\n\nimport AccountBlock from './account-block';\n// import Avatar from './avatar';\nimport Icon from './icon';\nimport Loader from './loader';\nimport Modal from './modal';\nimport Status from './status';\n\nconst {\n PHANPY_IMG_ALT_API_URL: IMG_ALT_API_URL,\n PHANPY_GIPHY_API_KEY: GIPHY_API_KEY,\n} = import.meta.env;\n\nconst supportedLanguagesMap = supportedLanguages.reduce((acc, l) => {\n const [code, common, native] = l;\n acc[code] = {\n common,\n native,\n };\n return acc;\n}, {});\n\n/* NOTES:\n - Max character limit includes BOTH status text and Content Warning text\n*/\n\nconst expiryOptions = {\n '5 minutes': 5 * 60,\n '30 minutes': 30 * 60,\n '1 hour': 60 * 60,\n '6 hours': 6 * 60 * 60,\n '12 hours': 12 * 60 * 60,\n '1 day': 24 * 60 * 60,\n '3 days': 3 * 24 * 60 * 60,\n '7 days': 7 * 24 * 60 * 60,\n};\nconst expirySeconds = Object.values(expiryOptions);\nconst oneDay = 24 * 60 * 60;\n\nconst expiresInFromExpiresAt = (expiresAt) => {\n if (!expiresAt) return oneDay;\n const delta = (new Date(expiresAt).getTime() - Date.now()) / 1000;\n return expirySeconds.find((s) => s >= delta) || oneDay;\n};\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 menu.style.left = innerWidth - width - windowMargin + 'px';\n }\n }\n });\n});\nobserver.observe(menu);\n\nconst DEFAULT_LANG = localeMatch(\n [new Intl.DateTimeFormat().resolvedOptions().locale, ...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 urlRegexObj = new RegExp(urlRegex.source, urlRegex.flags);\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// 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])(#[a-z0-9_]+([a-z0-9_.]+[a-z0-9_]+)?)(?![\\\\/\\\\w])`,\n 'ig',\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();\nfunction highlightText(text, { maxCharacters = Infinity }) {\n // Accept text string, return formatted HTML string\n // Escape all HTML special characters\n let html = text\n .replace(/&/g, '&')\n .replace(//g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n\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(html);\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 '' +\n exceedLimitHTML +\n '';\n }\n return withinLimitHTML + exceedLimitHTML;\n }\n\n return html\n .replace(urlRegexObj, '$2$3') // URLs\n .replace(MENTION_RE, '$1$2') // Mentions\n .replace(HASHTAG_RE, '$1$2') // Hashtags\n .replace(\n SCAN_RE,\n '$1$2',\n ); // Emoji shortcodes\n}\n\nconst rtf = new Intl.RelativeTimeFormat();\n\nconst CUSTOM_EMOJIS_COUNT = 100;\n\nfunction Compose({\n onClose,\n replyToStatus,\n editStatus,\n draftStatus,\n standalone,\n hasOpener,\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 = 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,\n charactersReservedPerUrl,\n } = {},\n mediaAttachments: {\n supportedMimeTypes = [],\n imageSizeLimit,\n imageMatrixLimit,\n videoSizeLimit,\n videoMatrixLimit,\n videoFrameRateLimit,\n } = {},\n polls: {\n maxOptions,\n maxCharactersPerOption,\n maxExpiration,\n minExpiration,\n } = {},\n } = configuration || {};\n\n const textareaRef = useRef();\n const spoilerTextRef = useRef();\n const [visibility, setVisibility] = useState('public');\n const [sensitive, setSensitive] = 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\n const prefs = store.account.get('preferences') || {};\n\n const oninputTextarea = () => {\n if (!textareaRef.current) return;\n textareaRef.current.dispatchEvent(new Event('input'));\n };\n const focusTextarea = () => {\n setTimeout(() => {\n if (!textareaRef.current) return;\n // status starts with newline, focus on first position\n if (draftStatus?.status?.startsWith?.('\\n')) {\n textareaRef.current.selectionStart = 0;\n textareaRef.current.selectionEnd = 0;\n }\n console.debug('FOCUS textarea');\n textareaRef.current?.focus();\n }, 300);\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 if (allMentions.length > 0) {\n textareaRef.current.value = `${allMentions\n .map((m) => `@${m}`)\n .join(' ')} `;\n oninputTextarea();\n }\n focusTextarea();\n setVisibility(\n visibility === 'public' && prefs['posting:default:visibility']\n ? prefs['posting:default:visibility']\n : visibility,\n );\n setLanguage(language || prefs.postingDefaultLanguage || DEFAULT_LANG);\n setSensitive(sensitive && !!spoilerText);\n } else if (editStatus) {\n const { visibility, language, sensitive, poll, mediaAttachments } =\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(language || presf.postingDefaultLanguage || DEFAULT_LANG);\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']);\n }\n if (prefs['posting:default:language']) {\n setLanguage(prefs['posting:default:language']);\n }\n if (prefs['posting:default:sensitive']) {\n setSensitive(prefs['posting:default:sensitive']);\n }\n }\n if (draftStatus) {\n const {\n status,\n spoilerText,\n visibility,\n language,\n sensitive,\n poll,\n mediaAttachments,\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 focusTextarea();\n if (spoilerText) spoilerTextRef.current.value = spoilerText;\n if (visibility) setVisibility(visibility);\n setLanguage(language || prefs.postingDefaultLanguage || DEFAULT_LANG);\n if (sensitive !== null) setSensitive(sensitive);\n if (composablePoll) setPoll(composablePoll);\n if (mediaAttachments) setMediaAttachments(mediaAttachments);\n }\n }, [draftStatus, editStatus, replyToStatus]);\n\n const formRef = useRef();\n\n const beforeUnloadCopy = '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\", including multiple mentions like \"@username1@username2\"\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 },\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 hasModal && !hasOnlyComposer;\n },\n },\n );\n useCloseWatcher(() => {\n if (!standalone && confirmClose()) {\n onClose();\n }\n }, [standalone, confirmClose, onClose]);\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 poll,\n mediaAttachments,\n },\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 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 const file = item.getAsFile();\n if (file && supportedMimeTypes.includes(file.type)) {\n files.push(file);\n }\n }\n }\n if (files.length > 0 && mediaAttachments.length >= maxMediaAttachments) {\n alert(`You can only attach up to ${maxMediaAttachments} files.`);\n return;\n }\n console.log({ files });\n if (files.length > 0) {\n e.preventDefault();\n e.stopPropagation();\n // Auto-cut-off files to avoid exceeding maxMediaAttachments\n const max = maxMediaAttachments - mediaAttachments.length;\n const allowedFiles = files.slice(0, max);\n if (allowedFiles.length <= 0) {\n alert(`You can only attach up to ${maxMediaAttachments} files.`);\n return;\n }\n const mediaFiles = allowedFiles.map((file) => ({\n file,\n type: file.type,\n size: file.size,\n url: URL.createObjectURL(file),\n id: null,\n description: null,\n }));\n setMediaAttachments([...mediaAttachments, ...mediaFiles]);\n }\n };\n window.addEventListener('paste', handleItems);\n const handleDragover = (e) => {\n // Prevent default if there's files\n if (e.dataTransfer.items.length > 0) {\n e.preventDefault();\n e.stopPropagation();\n }\n };\n window.addEventListener('dragover', handleDragover);\n window.addEventListener('drop', handleItems);\n return () => {\n window.removeEventListener('paste', handleItems);\n window.removeEventListener('dragover', handleDragover);\n window.removeEventListener('drop', handleItems);\n };\n }, [mediaAttachments]);\n\n const [showMentionPicker, setShowMentionPicker] = useState(false);\n const [showEmoji2Picker, setShowEmoji2Picker] = useState(false);\n const [showGIFPicker, setShowGIFPicker] = useState(false);\n\n const [autoDetectedLanguages, setAutoDetectedLanguages] = useState(null);\n const [topSupportedLanguages, restSupportedLanguages] = useMemo(() => {\n const topLanguages = [];\n const restLanguages = [];\n const { contentTranslationHideLanguages = [] } = states.settings;\n supportedLanguages.forEach((l) => {\n const [code] = l;\n if (\n code === language ||\n code === prevLanguage.current ||\n code === DEFAULT_LANG ||\n contentTranslationHideLanguages.includes(code) ||\n (autoDetectedLanguages?.length && autoDetectedLanguages.includes(code))\n ) {\n topLanguages.push(l);\n } else {\n restLanguages.push(l);\n }\n });\n topLanguages.sort(([codeA, commonA], [codeB, commonB]) => {\n if (codeA === language) return -1;\n if (codeB === language) return 1;\n return commonA.localeCompare(commonB);\n });\n restLanguages.sort(([codeA, commonA], [codeB, commonB]) =>\n commonA.localeCompare(commonB),\n );\n return [topLanguages, restLanguages];\n }, [language, autoDetectedLanguages]);\n\n const replyToStatusMonthsAgo = useMemo(\n () =>\n !!replyToStatus?.createdAt &&\n Math.floor(\n (Date.now() - new Date(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 return (\n
    \n
    \n
    \n {currentAccountInfo?.avatarStatic && (\n // \n \n )}\n {!standalone ? (\n \n {\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 },\n });\n\n if (!newWin) {\n return;\n }\n\n onClose();\n }}\n >\n \n \n \n \n {' '}\n {\n if (confirmClose()) {\n onClose();\n }\n }}\n >\n \n \n \n ) : (\n hasOpener && (\n {\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('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 '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 =\n '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 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 },\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 \n \n )\n )}\n
    \n {!!replyToStatus && (\n
    \n \n
    \n Replying to @\n {replyToStatus.account.acct || replyToStatus.account.username}\n ’s post\n {replyToStatusMonthsAgo >= 3 && (\n <>\n {' '}\n (\n \n {rtf.format(-replyToStatusMonthsAgo, 'month')}\n \n )\n \n )}\n
    \n
    \n )}\n {!!editStatus && (\n
    \n \n
    Editing source post
    \n
    \n )}\n {\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 { status, visibility, sensitive, spoilerText } = entries;\n\n // Pre-cleanup\n sensitive = sensitive === 'on'; // checkboxes return \"on\" if checked\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('Poll must have at least 2 options');\n return;\n }\n if (poll.options.some((option) => option === '')) {\n alert('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 'Some media have no descriptions. Continue?',\n );\n if (!yes) return;\n }\n }\n\n // Post-cleanup\n spoilerText = (sensitive && spoilerText) || undefined;\n status = status === '' ? undefined : status;\n\n // states.composerState.minimized = true;\n states.composerState.publishing = true;\n setUIState('loading');\n (async () => {\n try {\n console.log('MEDIA ATTACHMENTS', mediaAttachments);\n if (mediaAttachments.length > 0) {\n // Upload media attachments first\n const mediaPromises = mediaAttachments.map((attachment) => {\n const { file, description, id } = attachment;\n console.log('UPLOADING', attachment);\n if (id) {\n // If already uploaded\n return attachment;\n } else {\n const params = removeNullUndefined({\n file,\n description,\n });\n return masto.v2.media.create(params).then((res) => {\n if (res.id) {\n attachment.id = res.id;\n }\n return res;\n });\n }\n });\n const results = await Promise.allSettled(mediaPromises);\n\n // If any failed, return\n if (\n results.some((result) => {\n return result.status === 'rejected' || !result.value?.id;\n })\n ) {\n states.composerState.publishing = false;\n states.composerState.publishingError = true;\n setUIState('error');\n // Alert all the reasons\n results.forEach((result) => {\n if (result.status === 'rejected') {\n console.error(result);\n alert(result.reason || `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,\n poll,\n // mediaIds: mediaAttachments.map((attachment) => attachment.id),\n media_ids: mediaAttachments.map(\n (attachment) => attachment.id,\n ),\n };\n if (editStatus && supports('@mastodon/edit-media-attributes')) {\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 } else if (!editStatus) {\n params.visibility = visibility;\n // params.inReplyToId = replyToStatus?.id || undefined;\n params.in_reply_to_id = replyToStatus?.id || undefined;\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 });\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
    \n {\n updateCharCount();\n }}\n />\n \n {\n const sensitive = e.target.checked;\n setSensitive(sensitive);\n if (sensitive) {\n spoilerTextRef.current?.focus();\n } else {\n textareaRef.current?.focus();\n }\n }}\n />\n \n {' '}\n \n \n {\n setVisibility(e.target.value);\n }}\n disabled={uiState === 'loading' || !!editStatus}\n >\n \n \n \n \n \n {' '}\n
    \n {\n updateCharCount();\n }}\n maxCharacters={maxCharacters}\n performSearch={(params) => {\n const { type, q, limit } = params;\n if (type === 'accounts') {\n return masto.v1.accounts.search.list({\n q,\n limit,\n resolve: false,\n });\n }\n return masto.v2.search.fetch(params);\n }}\n onTrigger={(action) => {\n if (action?.name === 'custom-emojis') {\n setShowEmoji2Picker({\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 }\n }}\n />\n {mediaAttachments?.length > 0 && (\n
    \n {mediaAttachments.map((attachment, i) => {\n const { id, file } = attachment;\n const fileID = file?.size + file?.type + file?.name;\n return (\n {\n setMediaAttachments((attachments) => {\n const newAttachments = [...attachments];\n newAttachments[i].description = value;\n return newAttachments;\n });\n }}\n onRemove={() => {\n setMediaAttachments((attachments) => {\n return attachments.filter((_, j) => j !== i);\n });\n }}\n />\n );\n })}\n \n
    \n )}\n {!!poll && (\n {\n if (poll) {\n const newPoll = { ...poll };\n setPoll(newPoll);\n } else {\n setPoll(null);\n }\n }}\n />\n )}\n \n \n \n {/* If maxOptions is not defined or defined and is greater than 1, show poll button */}\n {maxOptions == null ||\n (maxOptions > 1 && (\n <>\n {\n setPoll({\n options: ['', ''],\n expiresIn: 24 * 60 * 60, // 1 day\n multiple: false,\n });\n }}\n >\n \n \n \n ))}\n {/* {\n setShowMentionPicker(true);\n }}\n >\n \n */}\n {\n setShowEmoji2Picker(true);\n }}\n >\n \n \n {!!states.settings.composerGIFPicker && (\n = maxMediaAttachments ||\n !!poll\n }\n onClick={() => {\n setShowGIFPicker(true);\n }}\n >\n GIF\n \n )}\n \n
    \n {uiState === 'loading' ? (\n \n ) : (\n
    \n \n
    \n {showMentionPicker && (\n {\n if (e.target === e.currentTarget) {\n setShowMentionPicker(false);\n }\n }}\n >\n {\n setShowMentionPicker(false);\n }}\n defaultSearchTerm={showMentionPicker?.defaultSearchTerm}\n onSelect={(socialAddress) => {\n const textarea = textareaRef.current;\n if (!textarea) return;\n const { selectionStart, selectionEnd } = textarea;\n const text = textarea.value;\n const textBeforeMention = text.slice(0, selectionStart);\n const spaceBeforeMention = textBeforeMention\n ? /[\\s\\t\\n\\r]$/.test(textBeforeMention)\n ? ''\n : ' '\n : '';\n const textAfterMention = text.slice(selectionEnd);\n const spaceAfterMention = /^[\\s\\t\\n\\r]/.test(textAfterMention)\n ? ''\n : ' ';\n const newText =\n textBeforeMention +\n spaceBeforeMention +\n '@' +\n socialAddress +\n spaceAfterMention +\n textAfterMention;\n textarea.value = newText;\n textarea.selectionStart = textarea.selectionEnd =\n selectionEnd +\n 1 +\n socialAddress.length +\n spaceAfterMention.length;\n textarea.focus();\n textarea.dispatchEvent(new Event('input'));\n }}\n />\n \n )}\n {showEmoji2Picker && (\n {\n if (e.target === e.currentTarget) {\n setShowEmoji2Picker(false);\n }\n }}\n >\n {\n setShowEmoji2Picker(false);\n }}\n defaultSearchTerm={showEmoji2Picker?.defaultSearchTerm}\n onSelect={(emojiShortcode) => {\n const textarea = textareaRef.current;\n if (!textarea) return;\n const { selectionStart, selectionEnd } = textarea;\n const text = textarea.value;\n const textBeforeEmoji = text.slice(0, selectionStart);\n const spaceBeforeEmoji = textBeforeEmoji\n ? /[\\s\\t\\n\\r]$/.test(textBeforeEmoji)\n ? ''\n : ' '\n : '';\n const textAfterEmoji = text.slice(selectionEnd);\n const spaceAfterEmoji = /^[\\s\\t\\n\\r]/.test(textAfterEmoji)\n ? ''\n : ' ';\n const newText =\n textBeforeEmoji +\n spaceBeforeEmoji +\n emojiShortcode +\n spaceAfterEmoji +\n textAfterEmoji;\n textarea.value = newText;\n textarea.selectionStart = textarea.selectionEnd =\n selectionEnd + emojiShortcode.length + spaceAfterEmoji.length;\n textarea.focus();\n textarea.dispatchEvent(new Event('input'));\n }}\n />\n \n )}\n {showGIFPicker && (\n {\n if (e.target === e.currentTarget) {\n setShowGIFPicker(false);\n }\n }}\n >\n setShowGIFPicker(false)}\n onSelect={({ url, type, alt_text }) => {\n console.log('GIF URL', url);\n if (mediaAttachments.length >= maxMediaAttachments) {\n alert(\n `You can only attach up to ${maxMediaAttachments} files.`,\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: 'Downloading GIF…',\n duration: -1,\n });\n const blob = await fetch(url, {\n referrerPolicy: 'no-referrer',\n }).then((res) => res.blob());\n const file = new File(\n [blob],\n type === 'video/mp4' ? 'video.mp4' : 'image.gif',\n {\n type,\n },\n );\n const newMediaAttachments = [\n ...mediaAttachments,\n {\n file,\n type,\n size: file.size,\n id: null,\n description: alt_text || '',\n },\n ];\n setMediaAttachments(newMediaAttachments);\n theToast?.hideToast?.();\n } catch (err) {\n console.error(err);\n theToast?.hideToast?.();\n showToast('Failed to download GIF');\n }\n })();\n }}\n />\n \n )}\n
    \n );\n}\n\nfunction autoResizeTextarea(textarea) {\n if (!textarea) return;\n const { value, offsetHeight, scrollHeight, clientHeight } = textarea;\n if (offsetHeight < window.innerHeight) {\n // NOTE: This check is needed because the offsetHeight return 50000 (really large number) on first render\n // No idea why it does that, will re-investigate in far future\n const offset = offsetHeight - clientHeight;\n const height = value ? scrollHeight + offset + 'px' : null;\n textarea.style.height = height;\n }\n}\n\nasync function _getCustomEmojis(instance, masto) {\n const emojis = await masto.v1.customEmojis.list();\n const visibleEmojis = emojis.filter((e) => e.visibleInPicker);\n const searcher = new Fuse(visibleEmojis, {\n keys: ['shortcode'],\n findAllMatches: true,\n });\n return [visibleEmojis, searcher];\n}\nconst getCustomEmojis = pmem(_getCustomEmojis, {\n // Limit by time to reduce memory usage\n // Cached by instance\n matchesArg: (cacheKeyArg, keyArg) => cacheKeyArg.instance === keyArg.instance,\n maxAge: 30 * 60 * 1000, // 30 minutes\n});\n\nconst detectLangs = (text) => {\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 { masto, instance } = api();\n const [text, setText] = useState(ref.current?.value || '');\n const {\n maxCharacters,\n performSearch = () => {},\n onTrigger = () => {},\n ...textareaProps\n } = props;\n // const snapStates = useSnapshot(states);\n // const charCount = snapStates.composerCharacterCount;\n\n // const customEmojis = useRef();\n const searcherRef = useRef();\n useEffect(() => {\n getCustomEmojis(instance, masto)\n .then((r) => {\n const [emojis, searcher] = r;\n searcherRef.current = searcher;\n })\n .catch((e) => {\n console.error(e);\n });\n }, []);\n\n const textExpanderRef = useRef();\n const textExpanderTextRef = useRef('');\n useEffect(() => {\n let handleChange, handleValue, handleCommited;\n if (textExpanderRef.current) {\n handleChange = (e) => {\n // console.log('text-expander-change', 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 emojis = customEmojis.current.filter((emoji) =>\n // emoji.shortcode.startsWith(text),\n // );\n // const emojis = filterShortcodes(customEmojis.current, text);\n const results = searcherRef.current?.search(text, {\n limit: 5,\n });\n let html = '';\n results.forEach(({ item: emoji }) => {\n const { shortcode, url } = emoji;\n html += `\n
  • \n \"\" \n ${encodeHTML(shortcode)}\n
  • `;\n });\n html += `
  • More…
  • `;\n // console.log({ emojis, html });\n menu.innerHTML = html;\n provide(\n Promise.resolve({\n matched: results.length > 0,\n fragment: menu,\n }),\n );\n return;\n }\n\n const type = {\n '@': 'accounts',\n '#': 'hashtags',\n }[key];\n provide(\n new Promise((resolve) => {\n const searchResults = performSearch({\n type,\n q: text,\n limit: 5,\n });\n searchResults.then((value) => {\n if (text !== textExpanderTextRef.current) {\n return;\n }\n console.log({ value, type, v: value[type] });\n const results = value[type] || value;\n console.log('RESULTS', value, results);\n let html = '';\n results.forEach((result) => {\n const {\n name,\n avatarStatic,\n displayName,\n username,\n acct,\n emojis,\n history,\n } = result;\n const displayNameWithEmoji = emojifyText(displayName, emojis);\n // const item = menuItem.cloneNode();\n if (acct) {\n html += `\n
  • \n \n \"\"\n \n \n ${displayNameWithEmoji || username}\n
    @${encodeHTML(acct)}\n
    \n
  • \n `;\n } else {\n const total = history?.reduce?.(\n (acc, cur) => acc + +cur.uses,\n 0,\n );\n html += `\n
  • \n #${encodeHTML(name)}\n ${\n total\n ? `${shortenNumber(total)}`\n : ''\n }\n
  • \n `;\n }\n });\n if (type === 'accounts') {\n html += `
  • More…
  • `;\n }\n menu.innerHTML = html;\n console.log('MENU', results, menu);\n resolve({\n matched: results.length > 0,\n fragment: menu,\n });\n });\n }),\n );\n };\n\n textExpanderRef.current.addEventListener(\n 'text-expander-change',\n handleChange,\n );\n\n handleValue = (e) => {\n const { key, item } = e.detail;\n const { value, more } = item.dataset;\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 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 textExpanderRef.current.addEventListener(\n 'text-expander-value',\n handleValue,\n );\n\n handleCommited = (e) => {\n const { input } = e.detail;\n setText(input.value);\n // fire input event\n if (ref.current) {\n const event = new Event('input', { bubbles: true });\n ref.current.dispatchEvent(event);\n }\n };\n\n textExpanderRef.current.addEventListener(\n 'text-expander-committed',\n handleCommited,\n );\n }\n\n return () => {\n if (textExpanderRef.current) {\n textExpanderRef.current.removeEventListener(\n 'text-expander-change',\n handleChange,\n );\n textExpanderRef.current.removeEventListener(\n 'text-expander-value',\n handleValue,\n );\n textExpanderRef.current.removeEventListener(\n 'text-expander-committed',\n handleCommited,\n );\n }\n };\n }, []);\n\n useEffect(() => {\n // Resize observer for textarea\n const textarea = ref.current;\n if (!textarea) return;\n const resizeObserver = new ResizeObserver(() => {\n // Get height of textarea, set height to textExpander\n if (textExpanderRef.current) {\n const { height } = textarea.getBoundingClientRect();\n textExpanderRef.current.style.height = height + 'px';\n }\n });\n resizeObserver.observe(textarea);\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 const langs = detectLangs(text);\n if (langs?.length) {\n onTrigger?.({\n name: 'auto-detect-language',\n languages: langs,\n });\n }\n }, 2000);\n\n return (\n \n {\n // Get line before cursor position after pressing 'Enter'\n const { key, target } = e;\n if (key === 'Enter' && !(e.ctrlKey || e.metaKey)) {\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 // Replace zero-width space\n const text = target.value.replace(/\\u200b/g, '');\n setText(text);\n autoResizeTextarea(target);\n props.onInput?.(e);\n throttleHighlightText(text);\n debouncedAutoDetectLanguage();\n }}\n style={{\n width: '100%',\n height: '4em',\n // '--text-weight': (1 + charCount / 140).toFixed(1) || 1,\n }}\n onScroll={(e) => {\n if (composeHighlightRef.current) {\n const { scrollTop } = e.target;\n composeHighlightRef.current.scrollTop = scrollTop;\n }\n }}\n />\n \n \n );\n});\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 \n );\n}\n\nfunction prettyBytes(bytes) {\n const units = ['bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n let unitIndex = 0;\n while (bytes >= 1024) {\n bytes /= 1024;\n unitIndex++;\n }\n return `${bytes.toFixed(0).toLocaleString()} ${units[unitIndex]}`;\n}\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 onDescriptionChange = () => {},\n onRemove = () => {},\n}) {\n const [uiState, setUIState] = useState('default');\n const supportsEdit = supports('@mastodon/edit-media-attributes');\n const { type, id, file } = attachment;\n const url = useMemo(\n () => (file ? URL.createObjectURL(file) : attachment.url),\n [file, attachment.url],\n );\n console.log({ attachment });\n\n const checkMaxError = !!file?.size;\n const configuration = checkMaxError ? getCurrentInstanceConfiguration() : {};\n const {\n mediaAttachments: {\n imageSizeLimit,\n imageMatrixLimit,\n videoSizeLimit,\n videoMatrixLimit,\n videoFrameRateLimit,\n } = {},\n } = configuration || {};\n\n const [maxError, setMaxError] = useState(() => {\n if (!checkMaxError) return null;\n if (\n type.startsWith('image') &&\n imageSizeLimit &&\n file.size > imageSizeLimit\n ) {\n return {\n type: 'imageSizeLimit',\n details: {\n imageSize: file.size,\n imageSizeLimit,\n },\n };\n } else if (\n type.startsWith('video') &&\n videoSizeLimit &&\n file.size > videoSizeLimit\n ) {\n return {\n type: 'videoSizeLimit',\n details: {\n videoSize: file.size,\n videoSizeLimit,\n },\n };\n }\n return null;\n });\n\n const [imageMatrix, setImageMatrix] = useState({});\n useEffect(() => {\n if (!checkMaxError || !imageMatrixLimit) return;\n if (imageMatrix?.matrix > imageMatrixLimit) {\n setMaxError({\n type: 'imageMatrixLimit',\n details: {\n imageMatrix: imageMatrix?.matrix,\n imageMatrixLimit,\n width: imageMatrix?.width,\n height: imageMatrix?.height,\n },\n });\n }\n }, [imageMatrix, imageMatrixLimit, checkMaxError]);\n\n const [videoMatrix, setVideoMatrix] = useState({});\n useEffect(() => {\n if (!checkMaxError || !videoMatrixLimit) return;\n if (videoMatrix?.matrix > videoMatrixLimit) {\n setMaxError({\n type: 'videoMatrixLimit',\n details: {\n videoMatrix: videoMatrix?.matrix,\n videoMatrixLimit,\n width: videoMatrix?.width,\n height: videoMatrix?.height,\n },\n });\n }\n }, [videoMatrix, videoMatrixLimit, checkMaxError]);\n\n const [description, setDescription] = useState(attachment.description);\n const [suffixType, subtype] = type.split('/');\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
    \n Uploaded\n

    \n {attachment.description || No description}\n

    \n
    \n ) : (\n {\n const { value } = e.target;\n setDescription(value);\n // debouncedOnDescriptionChange(value);\n }}\n >\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 `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 `Dimension too large. Uploading might encounter issues. Try reduce dimension from ${width.toLocaleString()}×${height.toLocaleString()}px to ${newWidth.toLocaleString()}×${newHeight.toLocaleString()}px.`;\n }\n case 'videoSizeLimit': {\n const { videoSize, videoSizeLimit } = details;\n return `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 `Dimension too large. Uploading might encounter issues. Try reduce dimension from ${width.toLocaleString()}×${height.toLocaleString()}px to ${newWidth.toLocaleString()}×${newHeight.toLocaleString()}px.`;\n }\n case 'videoFrameRateLimit': {\n // Not possible to detect this on client-side for now\n return 'Frame rate too high. Uploading might encounter issues.';\n }\n }\n };\n\n return (\n <>\n
    \n {\n setShowModal(true);\n }}\n >\n {suffixType === 'image' ? (\n {\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 {\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
    \n {descTextarea}\n
    \n \n \n \n {!!maxError && (\n {\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 \n \n )}\n
    \n \n {showModal && (\n {\n if (e.target === e.currentTarget) {\n setShowModal(false);\n }\n }}\n >\n
    \n {\n setShowModal(false);\n }}\n >\n \n \n
    \n

    \n {\n {\n image: 'Edit image description',\n video: 'Edit video description',\n audio: 'Edit audio description',\n }[suffixType]\n }\n

    \n
    \n
    \n
    \n {suffixType === 'image' ? (\n \"\"\n ) : suffixType === 'video' || suffixType === 'gifv' ? (\n
    \n
    \n {descTextarea}\n
    \n {suffixType === 'image' &&\n /^(png|jpe?g|gif|webp)$/i.test(subtype) &&\n !!states.settings.mediaAltGenerator &&\n !!IMG_ALT_API_URL && (\n \n \n \n }\n >\n {\n setUIState('loading');\n toastRef.current = showToast({\n text: 'Generating description. Please wait...',\n duration: -1,\n });\n // POST with multipart\n (async function () {\n try {\n const body = new FormData();\n body.append('image', file);\n const response = await fetch(IMG_ALT_API_URL, {\n method: 'POST',\n body,\n }).then((r) => r.json());\n if (response.error) {\n throw new Error(response.error);\n }\n setDescription(response.description);\n } catch (e) {\n console.error(e);\n showToast(\n `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 \n {lang && lang !== 'en' ? (\n \n Generate description…\n
    \n (English)\n
    \n ) : (\n Generate description…\n )}\n \n {!!lang && lang !== 'en' && (\n {\n setUIState('loading');\n toastRef.current = showToast({\n text: 'Generating description. Please wait...',\n duration: -1,\n });\n // POST with multipart\n (async function () {\n try {\n const body = new FormData();\n body.append('image', file);\n const params = `?lang=${lang}`;\n const response = await fetch(\n IMG_ALT_API_URL + params,\n {\n method: 'POST',\n body,\n },\n ).then((r) => r.json());\n if (response.error) {\n throw new Error(response.error);\n }\n setDescription(response.description);\n } catch (e) {\n console.error(e);\n showToast(\n `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 \n \n Generate description…\n
    ({localeCode2Text(lang)}){' '}\n \n — experimental\n \n
    \n \n )}\n \n )}\n {\n setShowModal(false);\n }}\n disabled={uiState === 'loading'}\n >\n Done\n \n
    \n
    \n
    \n
    \n \n )}\n \n );\n}\n\nfunction Poll({\n lang,\n poll,\n disabled,\n onInput = () => {},\n maxOptions,\n maxExpiration,\n minExpiration,\n maxCharactersPerOption,\n}) {\n const { options, expiresIn, multiple } = poll;\n\n return (\n
    \n
    \n {options.map((option, i) => (\n
    \n {\n const { value } = e.target;\n options[i] = value;\n onInput(poll);\n }}\n />\n {\n options.splice(i, 1);\n onInput(poll);\n }}\n >\n \n \n
    \n ))}\n
    \n
    \n = maxOptions}\n onClick={() => {\n options.push('');\n onInput(poll);\n }}\n >\n +\n {' '}\n \n \n
    \n
    \n {\n onInput(null);\n }}\n >\n Remove poll\n \n
    \n
    \n );\n}\n\nfunction filterShortcodes(emojis, searchTerm) {\n searchTerm = searchTerm.toLowerCase();\n\n // Return an array of shortcodes that start with or contain the search term, sorted by relevance and limited to the first 5\n return emojis\n .sort((a, b) => {\n let aLower = a.shortcode.toLowerCase();\n let bLower = b.shortcode.toLowerCase();\n\n let aStartsWith = aLower.startsWith(searchTerm);\n let bStartsWith = bLower.startsWith(searchTerm);\n let aContains = aLower.includes(searchTerm);\n let bContains = bLower.includes(searchTerm);\n let bothStartWith = aStartsWith && bStartsWith;\n let bothContain = aContains && bContains;\n\n return bothStartWith\n ? a.length - b.length\n : aStartsWith\n ? -1\n : bStartsWith\n ? 1\n : bothContain\n ? a.length - b.length\n : aContains\n ? -1\n : bContains\n ? 1\n : 0;\n })\n .slice(0, 5);\n}\n\nfunction encodeHTML(str) {\n return str.replace(/[&<>\"']/g, function (char) {\n return '&#' + char.charCodeAt(0) + ';';\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\nfunction MentionModal({\n onClose = () => {},\n onSelect = () => {},\n defaultSearchTerm,\n}) {\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 },\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 },\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 },\n );\n\n return (\n
    \n {!!onClose && (\n \n )}\n
    \n {\n e.preventDefault();\n debouncedLoadAccounts.flush?.();\n // const searchTerm = inputRef.current.value;\n // debouncedLoadAccounts(searchTerm);\n }}\n >\n {\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 defaultValue={defaultSearchTerm || ''}\n />\n \n
    \n
    \n {accounts?.length > 0 ? (\n \n {accounts.map((account, i) => {\n const relationship = relationshipsMap[account.id];\n return (\n \n \n {\n selectAccount(account);\n }}\n >\n \n \n \n );\n })}\n \n ) : uiState === 'loading' ? (\n
    \n \n
    \n ) : uiState === 'error' ? (\n
    \n

    Error loading accounts

    \n
    \n ) : null}\n
    \n
    \n );\n}\n\nfunction CustomEmojisModal({\n masto,\n instance,\n onClose = () => {},\n onSelect = () => {},\n defaultSearchTerm,\n}) {\n const [uiState, setUIState] = useState('default');\n const customEmojisList = useRef([]);\n const [customEmojis, setCustomEmojis] = useState([]);\n const recentlyUsedCustomEmojis = useMemo(\n () => store.account.get('recentlyUsedCustomEmojis') || [],\n );\n const searcherRef = useRef();\n useEffect(() => {\n setUIState('loading');\n (async () => {\n try {\n const [emojis, searcher] = await getCustomEmojis(instance, masto);\n console.log('emojis', emojis);\n searcherRef.current = searcher;\n setCustomEmojis(emojis);\n setUIState('default');\n } catch (e) {\n setUIState('error');\n console.error(e);\n }\n })();\n }, []);\n\n const customEmojisCatList = useMemo(() => {\n // Group emojis by category\n const emojisCat = {\n '--recent--': recentlyUsedCustomEmojis.filter((emoji) =>\n customEmojis.find((e) => e.shortcode === emoji.shortcode),\n ),\n };\n const othersCat = [];\n customEmojis.forEach((emoji) => {\n customEmojisList.current?.push?.(emoji);\n if (!emoji.category) {\n othersCat.push(emoji);\n return;\n }\n if (!emojisCat[emoji.category]) {\n emojisCat[emoji.category] = [];\n }\n emojisCat[emoji.category].push(emoji);\n });\n if (othersCat.length) {\n emojisCat['--others--'] = othersCat;\n }\n return emojisCat;\n }, [customEmojis]);\n\n const scrollableRef = useRef();\n const [matches, setMatches] = useState(null);\n const 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 return (\n
    \n {!!onClose && (\n \n )}\n
    \n
    \n Custom emojis{' '}\n {uiState === 'loading' ? (\n \n ) : (\n • {instance}\n )}\n
    \n {\n e.preventDefault();\n const emoji = matches[0];\n if (emoji) {\n onSelectEmoji(`:${emoji.shortcode}:`);\n }\n }}\n >\n \n \n
    \n
    \n {matches !== null ? (\n
      \n {matches.map((emoji) => (\n
    • \n {\n onSelectEmoji(`:${emoji.shortcode}:`);\n }}\n showCode\n />\n
    • \n ))}\n
    \n ) : (\n
    \n {uiState === 'error' && (\n
    \n

    Error loading custom emojis

    \n
    \n )}\n {uiState === 'default' &&\n Object.entries(customEmojisCatList).map(\n ([category, emojis]) =>\n !!emojis?.length && (\n <>\n
    \n {{\n '--recent--': 'Recently used',\n '--others--': 'Others',\n }[category] || category}\n
    \n \n \n ),\n )}\n
    \n )}\n
    \n
    \n );\n}\n\nconst CustomEmojisList = memo(({ emojis, onSelect }) => {\n const [max, setMax] = useState(CUSTOM_EMOJIS_COUNT);\n const showMore = emojis.length > max;\n return (\n
    \n {emojis.slice(0, max).map((emoji) => (\n {\n onSelect(`:${emoji.shortcode}:`);\n }}\n />\n ))}\n {showMore && (\n setMax(max + CUSTOM_EMOJIS_COUNT)}\n >\n {(emojis.length - max).toLocaleString()} more…\n \n )}\n
    \n );\n});\n\nconst CustomEmojiButton = memo(({ emoji, onClick, showCode }) => {\n const addEdges = (e) => {\n // Add edge-left or edge-right class based on self position relative to scrollable parent\n // If near left edge, add edge-left, if near right edge, add edge-right\n const buffer = 88;\n const parent = e.currentTarget.closest('main');\n if (parent) {\n const rect = parent.getBoundingClientRect();\n const selfRect = e.currentTarget.getBoundingClientRect();\n const targetClassList = e.currentTarget.classList;\n if (selfRect.left < rect.left + buffer) {\n targetClassList.add('edge-left');\n targetClassList.remove('edge-right');\n } else if (selfRect.right > rect.right - buffer) {\n targetClassList.add('edge-right');\n targetClassList.remove('edge-left');\n } else {\n targetClassList.remove('edge-left', 'edge-right');\n }\n }\n };\n\n return (\n \n \n {!!emoji.staticUrl && (\n \n )}\n \n \n {showCode && (\n <>\n {' '}\n {emoji.shortcode}\n \n )}\n \n );\n});\n\nconst GIFS_PER_PAGE = 20;\nfunction GIFPickerModal({ onClose = () => {}, onSelect = () => {} }) {\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 };\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
    \n {!!onClose && (\n \n )}\n
    \n {\n e.preventDefault();\n fetchGIFs({ offset: 0 });\n }}\n >\n \n \n \n
    \n
    \n {uiState === 'default' && (\n
    \n

    Type to search GIFs

    \n
    \n )}\n {uiState === 'loading' && !results?.data?.length && (\n
    \n \n
    \n )}\n {results?.data?.length > 0 ? (\n <>\n
      \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 = new URL(url);\n const strippedURL = urlObj.origin + urlObj.pathname;\n let strippedWebP;\n if (webp) {\n const webpObj = new URL(webp);\n strippedWebP = webpObj.origin + webpObj.pathname;\n }\n return (\n
    • \n {\n const { mp4, url } = original;\n const theURL = mp4 || url;\n const urlObj = new URL(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 \n \n {strippedWebP && (\n \n )}\n {\n e.target.style.backgroundColor = 'transparent';\n }}\n />\n \n
      {alt_text || title}
      \n \n \n
    • \n );\n })}\n
    \n

    \n {results.pagination?.offset > 0 && (\n {\n fetchGIFs({\n offset: results.pagination?.offset - GIFS_PER_PAGE,\n });\n }}\n >\n \n Previous\n \n )}\n \n {results.pagination?.offset + results.pagination?.count <\n results.pagination?.total_count && (\n {\n fetchGIFs({\n offset: results.pagination?.offset + GIFS_PER_PAGE,\n });\n }}\n >\n Next \n \n )}\n

    \n \n ) : (\n uiState === 'results' && (\n
    \n

    No results

    \n
    \n )\n )}\n {uiState === 'error' && (\n
    \n

    Error loading GIFs

    \n
    \n )}\n
    \n
    \n );\n}\n\nexport default Compose;\n"],"names":["Combobox","input","list","tabInsertsSuggestions","defaultFirstOption","event","keyboardBindings","trackComposition","commitWithElement","_a","visible","indexDiff","focusEl","els","focusIndex","indexOfItem","newIndex","target","el","scrollTo","combobox","commit","fireCommitEvent","container","inViewport","element","scrollTop","containerBottom","top","bottom","boundary","query","text","key","cursor","multiWord","lookBackIndex","lastMatchPosition","keyIndex","pre","CustomHTMLElement","InputStyleCloneUpdateEvent","CloneRegistry","_InputStyleCloneElement","__privateAdd","_usingInput","_updateLayout","_requestUpdateLayout","_updateStyles","_updateText","_styleObserver","__privateMethod","updateStyles_fn","_resizeObserver","requestUpdateLayout_fn","_inputRef","_container","_xOffset","_yOffset","_isLayoutUpdating","_onInput","updateText_fn","_onDocumentScrollOrResize","usingInput_fn","__privateSet","__privateGet","clone","fn","updateLayout_fn","inputStyle","inputRect","cloneRect","prop","propertiesToCopy","InputStyleCloneElement","e","_InputRange","startOffset","endOffset","_styleClone","_cloneElement","_clampOffset","_createCloneRange","_inputElement","_startOffset","_endOffset","selectionStart","selectionEnd","offset","clampOffset_fn","toStart","createCloneRange_fn","styleClone_get","cloneElement_get","range","textNode","InputRange","states","TextExpander","expander","match","menu","_b","position","caretRect","targetPosition","currentPosition","delta","currentStyle","item","beginning","remaining","detail","suffix","value","found","providers","provide","result","x","TextExpanderElement","keysAttr","keys","multiWordAttr","globalMultiWord","state","ansiRegex","onlyFirst","pattern","regex","stripAnsi","string","segmenter","stringLength","countAnsiEscapeCodes","length","_","poweredByGiphyURL","PHANPY_IMG_ALT_API_URL","IMG_ALT_API_URL","PHANPY_GIPHY_API_KEY","GIPHY_API_KEY","import","supportedLanguagesMap","supportedLanguages","reduce","acc","l","code","common","native","expiryOptions","expirySeconds","Object","values","oneDay","expiresInFromExpiresAt","expiresAt","Date","getTime","now","find","s","document","createElement","role","className","windowMargin","observer","IntersectionObserver","entries","forEach","entry","isIntersecting","left","width","boundingClientRect","innerWidth","window","style","observe","DEFAULT_LANG","localeMatch","Intl","DateTimeFormat","resolvedOptions","locale","navigator","languages","map","urlRegexObj","RegExp","urlRegex","source","flags","usernameRegex","urlPlaceholder","countableText","inputText","replace","USERNAME_RE","MENTION_RE","HASHTAG_RE","SHORTCODE_RE_FRAGMENT","SCAN_RE","Segmenter","highlightText","maxCharacters","Infinity","html","composerCharacterCount","withinLimitHTML","exceedLimitHTML","htmlSegments","segment","index","rtf","RelativeTimeFormat","CUSTOM_EMOJIS_COUNT","Compose","onClose","replyToStatus","editStatus","draftStatus","standalone","hasOpener","console","masto","instance","uiState","setUIState","useState","UID","uid","log","currentAccount","currentAccountInfo","maxMediaAttachments","charactersReservedPerUrl","imageMatrixLimit","supportedMimeTypes","imageSizeLimit","videoSizeLimit","videoMatrixLimit","videoFrameRateLimit","maxExpiration","maxOptions","maxCharactersPerOption","minExpiration","spoilerTextRef","useRef","textareaRef","store","prevLanguage","language","sensitive","setMediaAttachments","setLanguage","oninputTextarea","poll","focusTextarea","dispatchEvent","setTimeout","current","spoilerText","useEffect","visibility2","language2","sensitive2","visibility","m","allMentions","prefs","setSensitive","poll2","mediaAttachments","options","expiresIn","statusSource","setPoll","composablePoll","mediaAttachments2","setVisibility","status","beforeUnloadCopy","hasValue","hasMediaAttachments","isSelf","hasOnlyAcct","dataset","confirmClose","hasIDMediaAttachments","id","handleBeforeUnload","sameWithSource","getCharCount","updateCharCount","supportsCloseWatcher","useHotkeys","yes","addEventListener","capture","modals","hasModal","hasOnlyComposer","prevBackgroundDraft","count","escDownRef","draftKey","ignoreEventWhen","useCloseWatcher","canClose","db","backgroundDraft","saveUnsavedDraft","useInterval","handleItems","account","username","acct","items","i2","file","files","drafts","allowedFiles","updatedAt","then","debug","error","mediaFiles","handleDragover","includes","showMentionPicker","setShowMentionPicker","showEmoji2Picker","setShowEmoji2Picker","showGIFPicker","autoDetectedLanguages","setAutoDetectedLanguages","topSupportedLanguages","restSupportedLanguages","useMemo","topLanguages","contentTranslationHideLanguages","max","restLanguages","commonB","size","URL","commonA","codeA","codeB","replyToStatusMonthsAgo","dataTransfer","_jsxs","removeEventListener","_jsx","children","icon","passData","onMinimize","alert","Icon","settings","push","openCompose","sort","class","avatarStatic","instanceURL","type","onClick","Status","confirmText","_Fragment","opener","formRef","composerState","formData","previewMode","option","media","pointerEvents","opacity","mediaPromises","attachment","onKeyDown","params2","removeNullUndefined","res","results","some","params","description","saveStatus","newStatus","allSettled","e2","media_attributes","in_reply_to_id","Textarea","onChange","limit","action","title","name","MediaAttachment","attachments","newAttachments","required","fileID","performSearch","q","v1","search","resolve","v2","fetch","onTrigger","defaultSearchTerm","newPoll","onDescriptionChange","i","checked","onInput","accept","multiple","disabled","setShowGIFPicker","Array","url","Loader","CharCountMeter","MentionModal","socialAddress","textarea","abrupt","textBeforeMention","textAfterMention","newText","spaceBeforeMention","spaceAfterMention","set","emojiShortcode","Modal","spaceBeforeEmoji","textBeforeEmoji","textAfterEmoji","spaceAfterEmoji","onSelect","GIFPickerModal","alt_text","slice","theToast","showToast","currentTarget","blob","offsetHeight","scrollHeight","clientHeight","height","searcher","Fuse","visibleEmojis","getCustomEmojis","pmem","_getCustomEmojis","keyArg","cacheKeyArg","langs","referrerPolicy","lang","newMediaAttachments","api","setText","ref","textareaProps","props","searcherRef","r","emojis","textExpanderRef","textExpanderTextRef","text2","emoji","shortcode","detectLangs","encodeHTML","forwardRef","handleChange","total","history","cur","matched","handleValue","more","searchResults","v","displayName","handleCommited","shortenNumber","throttleHighlightText","composeHighlightRef","slowHighlightPerf","end","start","debouncedAutoDetectLanguage","useDebouncedCallback","dom","mark","resizeObserver","lastLine","bullet","postSpaces","anything","pos","querySelectorAll","innerText","autoResizeTextarea","dir","rows","cols","hidden","charCount","leftChars","ctrlKey","setRangeText","setSelectionRange","prettyBytes","bytes","unitIndex","units","scaleDimension","newWidth","scalingFactor","newHeight","onRemove","supportsEdit","supports","onScroll","checkMaxError","configuration","getCurrentInstanceConfiguration","snapStates","imageMatrix","setImageMatrix","setMaxError","Math","matrixLimit","videoMatrix","setDescription","debouncedOnDescriptionChange","showModal","maxError","details","suffixType","matrix","toastRef","maxErrorToast","maxErrorText","err","type2","imageSizeLimit2","imageSize","subtype","imageMatrixLimit2","timer","videoSize","clearTimeout","videoSizeLimit2","descTextarea","videoMatrix2","videoMatrixLimit2","autoCapitalize","autoComplete","naturalWidth","naturalHeight","videoHeight","videoWidth","setVideoMatrix","setShowModal","onLoad","disablePictureInPicture","preload","onLoadedMetadata","Menu2","body","response","MenuItem","menuButton","localeCode2Text","append","Poll","label","maxlength","placeholder","str","char","obj","accounts2","fetchRelationships","relationshipsMap","setRelationshipsMap","setAccounts","loadAccounts","inputRef","filterShortcodes","searchTerm","b","aLower","a","bStartsWith","aContains","bContains","selectAccount","selectedAccount","accounts","selectedIndex","listRef","setSelectedIndex","selectedItem","relationships","term","loadRelationships","debouncedLoadAccounts","enableOnFormTags","AccountBlock","relationship","inline","customEmojis","setCustomEmojis","onSubmit","recentlyUsedCustomEmojis","autocorrect","customEmojisList","othersCat","emojisCat","useCallback","_c","scrollableRef","setMatches","onFind","onSelectEmoji","recentlyUsedCustomEmojis2","recentlyUsedEmojiIndex","emoji2","customEmojisCatList","category","matches","CustomEmojiButton","queueMicrotask","splice","CustomEmojisList","setMax","showMore","memo","showCode","parent","rect","selfRect","targetClassList","addEdges","GIFS_PER_PAGE","setResults","qRef","currentOffset","closest","fetchGIFs","remove","srcSet","staticUrl","src","decoding","debouncedOnInput","gif","fixed_height_downsampled","original","pagination","fixed_height_small","fixed_height","theImage","urlObj","strippedWebP","webp","webpObj","url2","theURL","mp4","urlObj2","strippedURL2","strippedURL","images"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4]} \ No newline at end of file diff --git a/assets/compose-Z2yW_miJ.js b/assets/compose-Z2yW_miJ.js deleted file mode 100644 index 6bdc189..0000000 --- a/assets/compose-Z2yW_miJ.js +++ /dev/null @@ -1,2 +0,0 @@ -import{h as w,I as p,U as S,y as i,c as e,C as f,Y as h}from"./useTitle-KlNTnsJV.js";window.opener&&(console=window.opener.console);function m(){var s,a;const[t,d]=w("default"),{editStatus:n,replyToStatus:o,draftStatus:l}=window.__COMPOSE__||{};return p(n?"Editing source status":o?`Replying to @${((s=o.account)==null?void 0:s.acct)||((a=o.account)==null?void 0:a.username)}`:"Compose"),i(()=>{S()},[]),i(()=>{if(t==="closed"){try{window.opener.focus()}catch{}window.close()}},[t]),t==="closed"?e("div",{class:"box",children:[e("p",{children:"You may close this page now."}),e("p",{children:e("button",{onClick:()=>{window.close()},children:"Close window"})})]}):e(f,{editStatus:n,replyToStatus:o,draftStatus:l,standalone:!0,hasOpener:window.opener,onClose:c=>{const{newStatus:r,fn:u=()=>{}}=c||{};try{r&&window.opener.__STATES__.reloadStatusPage++,u(),d("closed")}catch{}}})}h(e(m,{}),document.getElementById("app-standalone")); -//# sourceMappingURL=compose-Z2yW_miJ.js.map diff --git a/assets/compose-Z2yW_miJ.js.map b/assets/compose-Z2yW_miJ.js.map deleted file mode 100644 index 31d8b65..0000000 --- a/assets/compose-Z2yW_miJ.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"compose-Z2yW_miJ.js","sources":["../../src/compose.jsx"],"sourcesContent":["import './index.css';\nimport './app.css';\nimport './polyfills';\n\nimport { render } from 'preact';\nimport { useEffect, useState } from 'preact/hooks';\n\nimport ComposeSuspense from './components/compose-suspense';\nimport { initStates } from './utils/states';\nimport useTitle from './utils/useTitle';\n\nif (window.opener) {\n console = window.opener.console;\n}\n\nfunction App() {\n const [uiState, setUIState] = useState('default');\n\n const { editStatus, replyToStatus, draftStatus } = window.__COMPOSE__ || {};\n\n useTitle(\n editStatus\n ? 'Editing source status'\n : replyToStatus\n ? `Replying to @${\n replyToStatus.account?.acct || replyToStatus.account?.username\n }`\n : 'Compose',\n );\n\n useEffect(() => {\n initStates();\n }, []);\n\n useEffect(() => {\n if (uiState === 'closed') {\n try {\n // Focus parent window\n window.opener.focus();\n } catch (e) {}\n window.close();\n }\n }, [uiState]);\n\n if (uiState === 'closed') {\n return (\n
    \n

    You may close this page now.

    \n

    \n {\n window.close();\n }}\n >\n Close window\n \n

    \n
    \n );\n }\n\n console.debug('OPEN COMPOSE');\n\n return (\n {\n const { newStatus, fn = () => {} } = results || {};\n try {\n if (newStatus) {\n window.opener.__STATES__.reloadStatusPage++;\n }\n fn();\n setUIState('closed');\n } catch (e) {}\n }}\n />\n );\n}\n\nrender(, document.getElementById('app-standalone'));\n"],"names":["window","opener","console","App","uiState","setUIState","useState","editStatus","replyToStatus","draftStatus","__COMPOSE__","account","acct","username","useEffect","initStates","focus","close","_jsxs","class","children","_jsx","onClick","standalone","hasOpener","newStatus","results","fn","render"],"mappings":"qFAWIA,OAAOC,SACTC,QAAUF,OAAOC,OAAOC,SAG1B,SAASC,GAAM,SACb,KAAM,CAACC,EAASC,CAAU,EAAIC,EAAS,SAAS,EAE1C,CAAEC,WAAAA,EAAYC,cAAAA,EAAeC,YAAAA,CAAAA,EAAgBT,OAAOU,aAAe,GA0BzE,OAvBEH,EAAAA,EACI,wBACAC,EACA,kBACEA,EAAAA,EAAcG,UAAdH,YAAAA,EAAuBI,SAAQJ,EAAAA,EAAcG,UAAdH,YAAAA,EAAuBK,SAAQ,GAEhE,SACN,EAEAC,EAAU,IAAM,CACHC,GACb,EAAG,CAAE,CAAA,EAELD,EAAU,IAAM,CACd,GAAIV,IAAY,SAAU,CACpB,GAAA,CAEFJ,OAAOC,OAAOe,aACJ,CAAC,CACbhB,OAAOiB,MAAM,CACf,CAAA,EACC,CAACb,CAAO,CAAC,EAERA,IAAY,SAEZc,EAAA,MAAA,CAAKC,MAAM,MAAKC,UACdC,EAAA,IAAA,CAAAD,SAAG,8BAAA,CAA+B,EAClCC,EAAA,IAAA,CAAAD,SACEC,EAAA,SAAA,CACEC,QAASA,IAAM,CACbtB,OAAOiB,MAAM,CACf,EAAEG,SACH,cAAA,CAEO,CAAA,CACP,CAAC,CAAA,CACD,EAITlB,IAA4B,CAE5B,WAAAK,EAEIA,cAAAA,EACAC,YAAAA,EACAC,WAAAA,GACAc,UAAU,OAAA,OACVC,WAAkBvB,OAEV,UAAAwB,EAAEA,GAAAA,EAAAA,IAAAA,EAAsB,EAACC,GAAA,CAAA,EAAE,GAAIA,CACjCD,GACF,OAAe,OAAA,WAAA,mBAEfE,IACGtB,EAAA,QAAA,CACHA,MAAAA,EACW,CAAA,CACf,CAAA,CAGNuB,EAAAP,EAAAlB,EAAA,CAAA,CAAA,EAAA,SAAA,eAAA,gBAAA,CAAA"} \ No newline at end of file diff --git a/assets/compose-feY08m5z.js b/assets/compose-feY08m5z.js deleted file mode 100644 index 5c19a73..0000000 --- a/assets/compose-feY08m5z.js +++ /dev/null @@ -1,26 +0,0 @@ -var Lt=s=>{throw TypeError(s)};var rt=(s,e,n)=>e.has(s)||Lt("Cannot "+n);var _=(s,e,n)=>(rt(s,e,"read from private field"),n?n.call(s):e.get(s)),re=(s,e,n)=>e.has(s)?Lt("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(s):e.set(s,n),he=(s,e,n,a)=>(rt(s,e,"write to private field"),a?a.call(s,n):e.set(s,n),n),Y=(s,e,n)=>(rt(s,e,"access private method"),n);import{F as on,B as rn,_ as ln,a as _e,a8 as cn,w as zt,u as un,i as Ht,b as dn,I as V,y as At,h as Nt,a9 as hn,M as Ve,s as Ee,a4 as pn,a0 as mn,n as gn,O as fn,X as Qe,c as vn,d as St,l as bn,x as yn}from"./fuse-7xj_Hrid.js";import{s as le,a as bt,h as U,A as q,f as xn,al as Ut,d as ze,y as te,m as wn,am as kn,T as Re,c as t,k as Le,b as En,L as et,j as Fn,D as Cn,u as Ln,q as It,x as Wt}from"./useTitle-4zhrJw0D.js";import{e as zn}from"./tinyld-light-PxOyhYWY.js";import"./index-ELVm98zU.js";class An{constructor(e,n,{tabInsertsSuggestions:a,defaultFirstOption:r}={}){this.input=e,this.list=n,this.tabInsertsSuggestions=a??!0,this.defaultFirstOption=r??!1,this.isComposing=!1,n.id||(n.id=`combobox-${Math.random().toString().slice(2,6)}`),this.ctrlBindings=!!navigator.userAgent.match(/Macintosh/),this.keyboardEventHandler=p=>Sn(p,this),this.compositionEventHandler=p=>Mn(p,this),this.inputHandler=this.clearSelection.bind(this),e.setAttribute("role","combobox"),e.setAttribute("aria-controls",n.id),e.setAttribute("aria-expanded","false"),e.setAttribute("aria-autocomplete","list"),e.setAttribute("aria-haspopup","listbox")}destroy(){this.clearSelection(),this.stop(),this.input.removeAttribute("role"),this.input.removeAttribute("aria-controls"),this.input.removeAttribute("aria-expanded"),this.input.removeAttribute("aria-autocomplete"),this.input.removeAttribute("aria-haspopup")}start(){this.input.setAttribute("aria-expanded","true"),this.input.addEventListener("compositionstart",this.compositionEventHandler),this.input.addEventListener("compositionend",this.compositionEventHandler),this.input.addEventListener("input",this.inputHandler),this.input.addEventListener("keydown",this.keyboardEventHandler),this.list.addEventListener("click",Mt),this.indicateDefaultOption()}stop(){this.clearSelection(),this.input.setAttribute("aria-expanded","false"),this.input.removeEventListener("compositionstart",this.compositionEventHandler),this.input.removeEventListener("compositionend",this.compositionEventHandler),this.input.removeEventListener("input",this.inputHandler),this.input.removeEventListener("keydown",this.keyboardEventHandler),this.list.removeEventListener("click",Mt)}indicateDefaultOption(){var e;this.defaultFirstOption&&((e=Array.from(this.list.querySelectorAll('[role="option"]:not([aria-disabled="true"])')).filter(lt)[0])===null||e===void 0||e.setAttribute("data-combobox-option-default","true"))}navigate(e=1){const n=Array.from(this.list.querySelectorAll('[aria-selected="true"]')).filter(lt)[0],a=Array.from(this.list.querySelectorAll('[role="option"]')).filter(lt),r=a.indexOf(n);if(r===a.length-1&&e===1||r===0&&e===-1){this.clearSelection(),this.input.focus();return}let p=e===1?0:a.length-1;if(n&&r>=0){const v=r+e;v>=0&&v0||s.offsetHeight>0)}function Mn(s,e){e.isComposing=s.type==="compositionstart",document.getElementById(e.input.getAttribute("aria-controls")||"")&&e.clearSelection()}function $n(s,e){Tn(s,e)||(s.scrollTop=e.offsetTop)}function Tn(s,e){const n=s.scrollTop,a=n+s.clientHeight,r=e.offsetTop,p=r+e.clientHeight;return r>=n&&p<=a}const Bn=/\s|\(|\[/;function _n(s,e,n,{multiWord:a,lookBackIndex:r,lastMatchPosition:p}={multiWord:!1,lookBackIndex:0,lastMatchPosition:null}){let u=s.lastIndexOf(e,n-1);if(u===-1||u=u+e.length+1||s.lastIndexOf(` -`,n-1)>u||s.lastIndexOf(".",n-1)>u)return}else if(s.lastIndexOf(" ",n-1)>u)return;const v=s[u-1];return v&&!Bn.test(v)?void 0:{text:s.substring(u+e.length,n),position:u+e.length}}class Rn extends HTMLElement{}class Dn extends Event{constructor(){super("update")}}const ct=new WeakMap;var De,je,Fe,ve,Z,Te,Ae,Se,pt,Ie,Ge,Ye,Ze,Pe,Ce;const xt=class xt extends Rn{constructor(n){super();re(this,Z);re(this,De,new MutationObserver(()=>Y(this,Z,Ye).call(this)));re(this,je,new ResizeObserver(()=>Y(this,Z,Ge).call(this)));re(this,Fe);re(this,ve);re(this,Ae,0);re(this,Se,0);re(this,Ie,!1);re(this,Pe,()=>Y(this,Z,Ze).call(this));re(this,Ce,n=>{Y(this,Z,Te).call(this,a=>{(n.target===document||n.target===window||n.target instanceof Node&&n.target.contains(a))&&Y(this,Z,Ge).call(this)})});he(this,Fe,new WeakRef(n)),he(this,ve,document.createElement("div")),_(this,ve).style.position="absolute",_(this,ve).style.pointerEvents="none",n.after(_(this,ve)),_(this,ve).appendChild(this)}static for(n){const a=ct.get(n)??new xt(n);return ct.set(n,a),a}forceUpdate(){Y(this,Z,Ye).call(this),Y(this,Z,Ze).call(this)}connectedCallback(){const n=_(this,Fe).deref();if(!n)return this.remove();this.style.pointerEvents="none",this.style.userSelect="none",this.style.overflow="hidden",this.style.display="block",this.style.visibility="hidden",n instanceof HTMLTextAreaElement?(this.style.whiteSpace="pre-wrap",this.style.wordWrap="break-word"):(this.style.whiteSpace="nowrap",this.style.display="table-cell",this.style.verticalAlign="middle"),this.setAttribute("aria-hidden","true"),Y(this,Z,Ye).call(this),Y(this,Z,Ze).call(this),_(this,De).observe(n,{attributeFilter:["style","dir"]}),_(this,je).observe(n),document.addEventListener("scroll",_(this,Ce),{capture:!0}),window.addEventListener("resize",_(this,Ce),{capture:!0}),n.addEventListener("input",_(this,Pe),{capture:!0})}disconnectedCallback(){_(this,ve).remove(),_(this,De).disconnect(),_(this,je).disconnect(),document.removeEventListener("scroll",_(this,Ce),{capture:!0}),window.removeEventListener("resize",_(this,Ce),{capture:!0});const n=_(this,Fe).deref();n&&(n.removeEventListener("input",_(this,Pe),{capture:!0}),ct.delete(n))}};De=new WeakMap,je=new WeakMap,Fe=new WeakMap,ve=new WeakMap,Z=new WeakSet,Te=function(n){const a=_(this,Fe).deref();return a?n(a):this.remove()},Ae=new WeakMap,Se=new WeakMap,pt=function(){Y(this,Z,Te).call(this,n=>{const a=window.getComputedStyle(n);this.style.height=a.height,this.style.width=a.width,n.clientHeight!==this.clientHeight&&(this.style.height=`calc(${a.height} + ${n.clientHeight-this.clientHeight}px)`),n.clientWidth!==this.clientWidth&&(this.style.width=`calc(${a.width} + ${n.clientWidth-this.clientWidth}px)`);const r=n.getBoundingClientRect(),p=this.getBoundingClientRect();he(this,Ae,_(this,Ae)+r.left-p.left),he(this,Se,_(this,Se)+r.top-p.top),this.style.transform=`translate(${_(this,Ae)}px, ${_(this,Se)}px)`,this.scrollTop=n.scrollTop,this.scrollLeft=n.scrollLeft,this.dispatchEvent(new Dn)})},Ie=new WeakMap,Ge=function(){_(this,Ie)||(he(this,Ie,!0),requestAnimationFrame(()=>{Y(this,Z,pt).call(this),he(this,Ie,!1)}))},Ye=function(){Y(this,Z,Te).call(this,n=>{const a=window.getComputedStyle(n);for(const r of jn)this.style[r]=a[r];Y(this,Z,Ge).call(this)})},Ze=function(){Y(this,Z,Te).call(this,n=>{this.textContent=n.value,Y(this,Z,pt).call(this)})},Pe=new WeakMap,Ce=new WeakMap;let Je=xt;const jn=["direction","writingMode","unicodeBidi","textOrientation","boxSizing","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","borderStyle","paddingTop","paddingRight","paddingBottom","paddingLeft","fontStyle","fontVariant","fontWeight","fontStretch","fontSize","fontSizeAdjust","lineHeight","fontFamily","textAlign","textTransform","textIndent","textDecoration","letterSpacing","wordSpacing","tabSize","MozTabSize"];try{customElements.define("input-style-clone",Je)}catch(s){if(!(s instanceof DOMException&&s.name==="NotSupportedError"))throw s}var ge,Me,$e,ce,gt,qt,ft,Be;const Xe=class Xe{constructor(e,n=0,a=n){re(this,ce);re(this,ge);re(this,Me);re(this,$e);he(this,ge,e),he(this,Me,n),he(this,$e,a)}static fromSelection(e){const{selectionStart:n,selectionEnd:a}=e;return new Xe(e,n??void 0,a??void 0)}get collapsed(){return this.startOffset===this.endOffset}get commonAncestorContainer(){return _(this,ge)}get endContainer(){return _(this,ge)}get startContainer(){return _(this,ge)}get startOffset(){return _(this,Me)}get endOffset(){return _(this,$e)}setStartOffset(e){he(this,Me,Y(this,ce,ft).call(this,e))}setEndOffset(e){he(this,$e,Y(this,ce,ft).call(this,e))}collapse(e=!1){e?this.setEndOffset(this.startOffset):this.setStartOffset(this.endOffset)}cloneContents(){return Y(this,ce,Be).call(this).cloneContents()}cloneRange(){return new Xe(_(this,ge),this.startOffset,this.endOffset)}getBoundingClientRect(){return Y(this,ce,Be).call(this).getBoundingClientRect()}getClientRects(){return Y(this,ce,Be).call(this).getClientRects()}toString(){return Y(this,ce,Be).call(this).toString()}getStyleClone(){return _(this,ce,gt)}};ge=new WeakMap,Me=new WeakMap,$e=new WeakMap,ce=new WeakSet,gt=function(){return Je.for(_(this,ge))},qt=function(){return _(this,ce,gt)},ft=function(e){return Math.max(0,Math.min(e,_(this,ge).value.length))},Be=function(){const e=document.createRange(),n=_(this,ce,qt).childNodes[0];return n&&(e.setStart(n,this.startOffset),e.setEnd(n,this.endOffset)),e};let mt=Xe;const qe=new WeakMap;class Pn{constructor(e,n){this.expander=e,this.input=n,this.combobox=null,this.menu=null,this.match=null,this.justPasted=!1,this.lookBackIndex=0,this.oninput=this.onInput.bind(this),this.onpaste=this.onPaste.bind(this),this.onkeydown=this.onKeydown.bind(this),this.oncommit=this.onCommit.bind(this),this.onmousedown=this.onMousedown.bind(this),this.onblur=this.onBlur.bind(this),this.interactingWithList=!1,n.addEventListener("paste",this.onpaste),n.addEventListener("input",this.oninput),n.addEventListener("keydown",this.onkeydown),n.addEventListener("blur",this.onblur)}destroy(){this.input.removeEventListener("paste",this.onpaste),this.input.removeEventListener("input",this.oninput),this.input.removeEventListener("keydown",this.onkeydown),this.input.removeEventListener("blur",this.onblur)}dismissMenu(){this.deactivate()&&(this.lookBackIndex=this.input.selectionEnd||this.lookBackIndex)}activate(e,n){var a,r;this.input!==document.activeElement&&this.input!==((r=(a=document.activeElement)===null||a===void 0?void 0:a.shadowRoot)===null||r===void 0?void 0:r.activeElement)||(this.deactivate(),this.menu=n,n.id||(n.id=`text-expander-${Math.floor(Math.random()*1e5).toString()}`),this.expander.append(n),this.combobox=new An(this.input,n),this.expander.dispatchEvent(new Event("text-expander-activate")),this.positionMenu(n,e.position),this.combobox.start(),n.addEventListener("combobox-commit",this.oncommit),n.addEventListener("mousedown",this.onmousedown),this.combobox.navigate(1))}positionMenu(e,n){const a=new mt(this.input,n).getBoundingClientRect(),r={left:a.left,top:a.top+a.height},p=e.getBoundingClientRect(),u={left:r.left-p.left,top:r.top-p.top};if(u.left!==0||u.top!==0){const v=getComputedStyle(e);e.style.left=v.left?`calc(${v.left} + ${u.left}px)`:`${u.left}px`,e.style.top=v.top?`calc(${v.top} + ${u.top}px)`:`${u.top}px`}}deactivate(){const e=this.menu;return!e||!this.combobox?!1:(this.expander.dispatchEvent(new Event("text-expander-deactivate")),this.menu=null,e.removeEventListener("combobox-commit",this.oncommit),e.removeEventListener("mousedown",this.onmousedown),this.combobox.destroy(),this.combobox=null,e.remove(),!0)}onCommit({target:e}){var n;const a=e;if(!(a instanceof HTMLElement)||!this.combobox)return;const r=this.match;if(!r)return;const p=this.input.value.substring(0,r.position-r.key.length),u=this.input.value.substring(r.position+r.text.length),v={item:a,key:r.key,value:null,continue:!1};if(!this.expander.dispatchEvent(new CustomEvent("text-expander-value",{cancelable:!0,detail:v}))||!v.value)return;let R=(n=this.expander.getAttribute("suffix"))!==null&&n!==void 0?n:" ";v.continue&&(R="");const F=`${v.value}${R}`;this.input.value=p+F+u;const w=p.length+F.length;this.deactivate(),this.input.focus({preventScroll:!0}),this.input.selectionStart=w,this.input.selectionEnd=w,v.continue||(this.lookBackIndex=w,this.match=null),this.expander.dispatchEvent(new CustomEvent("text-expander-committed",{cancelable:!1,detail:{input:this.input}}))}onBlur(){if(this.interactingWithList){this.interactingWithList=!1;return}this.deactivate()}onPaste(){this.justPasted=!0}async onInput(){if(this.justPasted){this.justPasted=!1;return}const e=this.findMatch();if(e){this.match=e;const n=await this.notifyProviders(e);if(!this.match)return;n?this.activate(e,n):this.deactivate()}else this.match=null,this.deactivate()}findMatch(){const e=this.input.selectionEnd||0,n=this.input.value;e<=this.lookBackIndex&&(this.lookBackIndex=e-1);for(const{key:a,multiWord:r}of this.expander.keys){const p=_n(n,a,e,{multiWord:r,lookBackIndex:this.lookBackIndex,lastMatchPosition:this.match?this.match.position:null});if(p)return{text:p.text,key:a,position:p.position}}}async notifyProviders(e){const n=[],a=v=>n.push(v);return this.expander.dispatchEvent(new CustomEvent("text-expander-change",{cancelable:!0,detail:{provide:a,text:e.text,key:e.key}}))?(await Promise.all(n)).filter(v=>v.matched).map(v=>v.fragment)[0]:void 0}onMousedown(){this.interactingWithList=!0}onKeydown(e){e.key==="Escape"&&(this.match=null,this.deactivate()&&(this.lookBackIndex=this.input.selectionEnd||this.lookBackIndex,e.stopImmediatePropagation(),e.preventDefault()))}}class Tt extends HTMLElement{get keys(){const e=this.getAttribute("keys"),n=e?e.split(" "):[],a=this.getAttribute("multiword"),r=a?a.split(" "):[],p=r.length===0&&this.hasAttribute("multiword");return n.map(u=>({key:u,multiWord:p||r.includes(u)}))}connectedCallback(){const e=this.querySelector('input[type="text"], textarea');if(!(e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement))return;const n=new Pn(this,e);qe.set(this,n)}disconnectedCallback(){const e=qe.get(this);e&&(e.destroy(),qe.delete(this))}dismiss(){const e=qe.get(this);e&&e.dismissMenu()}}window.customElements.get("text-expander")||(window.TextExpanderElement=Tt,window.customElements.define("text-expander",Tt));function On({onlyFirst:s=!1}={}){const e=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(e,s?void 0:"g")}const Hn=On();function Nn(s){if(typeof s!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof s}\``);return s.replace(Hn,"")}const Un=new Intl.Segmenter;function Bt(s,{countAnsiEscapeCodes:e=!1}={}){if(s===""||(e||(s=Nn(s)),s===""))return 0;let n=0;for(const a of Un.segment(s))n++;return n}const Wn="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",yt=[["aa","Afar","Afaraf"],["ab","Abkhaz","аҧсуа бызшәа"],["ae","Avestan","avesta"],["af","Afrikaans","Afrikaans"],["ak","Akan","Akan"],["am","Amharic","አማርኛ"],["an","Aragonese","aragonés"],["ar","Arabic","اللغة العربية"],["as","Assamese","অসমীয়া"],["av","Avaric","авар мацӀ"],["ay","Aymara","aymar aru"],["az","Azerbaijani","azərbaycan dili"],["ba","Bashkir","башҡорт теле"],["be","Belarusian","беларуская мова"],["bg","Bulgarian","български език"],["bh","Bihari","भोजपुरी"],["bi","Bislama","Bislama"],["bm","Bambara","bamanankan"],["bn","Bengali","বাংলা"],["bo","Tibetan","བོད་ཡིག"],["br","Breton","brezhoneg"],["bs","Bosnian","bosanski jezik"],["ca","Catalan","Català"],["ce","Chechen","нохчийн мотт"],["ch","Chamorro","Chamoru"],["co","Corsican","corsu"],["cr","Cree","ᓀᐦᐃᔭᐍᐏᐣ"],["cs","Czech","čeština"],["cu","Old Church Slavonic","ѩзыкъ словѣньскъ"],["cv","Chuvash","чӑваш чӗлхи"],["cy","Welsh","Cymraeg"],["da","Danish","dansk"],["de","German","Deutsch"],["dv","Divehi","Dhivehi"],["dz","Dzongkha","རྫོང་ཁ"],["ee","Ewe","Eʋegbe"],["el","Greek","Ελληνικά"],["en","English","English"],["eo","Esperanto","Esperanto"],["es","Spanish","Español"],["et","Estonian","eesti"],["eu","Basque","euskara"],["fa","Persian","فارسی"],["ff","Fula","Fulfulde"],["fi","Finnish","suomi"],["fj","Fijian","Vakaviti"],["fo","Faroese","føroyskt"],["fr","French","Français"],["fy","Western Frisian","Frysk"],["ga","Irish","Gaeilge"],["gd","Scottish Gaelic","Gàidhlig"],["gl","Galician","galego"],["gu","Gujarati","ગુજરાતી"],["gv","Manx","Gaelg"],["ha","Hausa","هَوُسَ"],["he","Hebrew","עברית"],["hi","Hindi","हिन्दी"],["ho","Hiri Motu","Hiri Motu"],["hr","Croatian","Hrvatski"],["ht","Haitian","Kreyòl ayisyen"],["hu","Hungarian","magyar"],["hy","Armenian","Հայերեն"],["hz","Herero","Otjiherero"],["ia","Interlingua","Interlingua"],["id","Indonesian","Bahasa Indonesia"],["ie","Interlingue","Interlingue"],["ig","Igbo","Asụsụ Igbo"],["ii","Nuosu","ꆈꌠ꒿ Nuosuhxop"],["ik","Inupiaq","Iñupiaq"],["io","Ido","Ido"],["is","Icelandic","Íslenska"],["it","Italian","Italiano"],["iu","Inuktitut","ᐃᓄᒃᑎᑐᑦ"],["ja","Japanese","日本語"],["jv","Javanese","basa Jawa"],["ka","Georgian","ქართული"],["kg","Kongo","Kikongo"],["ki","Kikuyu","Gĩkũyũ"],["kj","Kwanyama","Kuanyama"],["kk","Kazakh","қазақ тілі"],["kl","Kalaallisut","kalaallisut"],["km","Khmer","ខេមរភាសា"],["kn","Kannada","ಕನ್ನಡ"],["ko","Korean","한국어"],["kr","Kanuri","Kanuri"],["ks","Kashmiri","कश्मीरी"],["ku","Kurmanji (Kurdish)","Kurmancî"],["kv","Komi","коми кыв"],["kw","Cornish","Kernewek"],["ky","Kyrgyz","Кыргызча"],["la","Latin","latine"],["lb","Luxembourgish","Lëtzebuergesch"],["lg","Ganda","Luganda"],["li","Limburgish","Limburgs"],["ln","Lingala","Lingála"],["lo","Lao","ລາວ"],["lt","Lithuanian","lietuvių kalba"],["lu","Luba-Katanga","Tshiluba"],["lv","Latvian","latviešu valoda"],["mg","Malagasy","fiteny malagasy"],["mh","Marshallese","Kajin M̧ajeļ"],["mi","Māori","te reo Māori"],["mk","Macedonian","македонски јазик"],["ml","Malayalam","മലയാളം"],["mn","Mongolian","Монгол хэл"],["mr","Marathi","मराठी"],["ms","Malay","Bahasa Melayu"],["ms-Arab","Jawi Malay","بهاس ملايو"],["mt","Maltese","Malti"],["my","Burmese","ဗမာစာ"],["na","Nauru","Ekakairũ Naoero"],["nb","Norwegian Bokmål","Norsk bokmål"],["nd","Northern Ndebele","isiNdebele"],["ne","Nepali","नेपाली"],["ng","Ndonga","Owambo"],["nl","Dutch","Nederlands"],["nn","Norwegian Nynorsk","Norsk Nynorsk"],["no","Norwegian","Norsk"],["nr","Southern Ndebele","isiNdebele"],["nv","Navajo","Diné bizaad"],["ny","Chichewa","chiCheŵa"],["oc","Occitan","occitan"],["oj","Ojibwe","ᐊᓂᔑᓈᐯᒧᐎᓐ"],["om","Oromo","Afaan Oromoo"],["or","Oriya","ଓଡ଼ିଆ"],["os","Ossetian","ирон æвзаг"],["pa","Punjabi","ਪੰਜਾਬੀ"],["pi","Pāli","पाऴि"],["pl","Polish","Polski"],["ps","Pashto","پښتو"],["pt","Portuguese","Português"],["qu","Quechua","Runa Simi"],["rm","Romansh","rumantsch grischun"],["rn","Kirundi","Ikirundi"],["ro","Romanian","Română"],["ru","Russian","Русский"],["rw","Kinyarwanda","Ikinyarwanda"],["sa","Sanskrit","संस्कृतम्"],["sc","Sardinian","sardu"],["sd","Sindhi","सिन्धी"],["se","Northern Sami","Davvisámegiella"],["sg","Sango","yângâ tî sängö"],["si","Sinhala","සිංහල"],["sk","Slovak","slovenčina"],["sl","Slovenian","slovenščina"],["sn","Shona","chiShona"],["so","Somali","Soomaaliga"],["sq","Albanian","Shqip"],["sr","Serbian","српски језик"],["ss","Swati","SiSwati"],["st","Southern Sotho","Sesotho"],["su","Sundanese","Basa Sunda"],["sv","Swedish","Svenska"],["sw","Swahili","Kiswahili"],["ta","Tamil","தமிழ்"],["te","Telugu","తెలుగు"],["tg","Tajik","тоҷикӣ"],["th","Thai","ไทย"],["ti","Tigrinya","ትግርኛ"],["tk","Turkmen","Türkmen"],["tl","Tagalog","Wikang Tagalog"],["tn","Tswana","Setswana"],["to","Tonga","faka Tonga"],["tr","Turkish","Türkçe"],["ts","Tsonga","Xitsonga"],["tt","Tatar","татар теле"],["tw","Twi","Twi"],["ty","Tahitian","Reo Tahiti"],["ug","Uyghur","ئۇيغۇرچە‎"],["uk","Ukrainian","Українська"],["ur","Urdu","اردو"],["uz","Uzbek","Ўзбек"],["ve","Venda","Tshivenḓa"],["vi","Vietnamese","Tiếng Việt"],["vo","Volapük","Volapük"],["wa","Walloon","walon"],["wo","Wolof","Wollof"],["xh","Xhosa","isiXhosa"],["yi","Yiddish","ייִדיש"],["yo","Yoruba","Yorùbá"],["za","Zhuang","Saɯ cueŋƅ"],["zh","Chinese","中文"],["zu","Zulu","isiZulu"],["zh-CN","Chinese (China)","简体中文"],["zh-HK","Chinese (Hong Kong)","繁體中文(香港)"],["zh-TW","Chinese (Taiwan)","繁體中文(臺灣)"],["zh-YUE","Cantonese","廣東話"],["ast","Asturian","Asturianu"],["chr","Cherokee","ᏣᎳᎩ ᎦᏬᏂᎯᏍᏗ"],["ckb","Sorani (Kurdish)","سۆرانی"],["cnr","Montenegrin","crnogorski"],["csb","Kashubian","Kaszëbsczi"],["jbo","Lojban","la .lojban."],["kab","Kabyle","Taqbaylit"],["ldn","Láadan","Láadan"],["lfn","Lingua Franca Nova","lingua franca nova"],["moh","Mohawk","Kanienʼkéha"],["nds","Low German","Plattdüütsch"],["pdc","Pennsylvania Dutch","Pennsilfaani-Deitsch"],["sco","Scots","Scots"],["sma","Southern Sami","Åarjelsaemien Gïele"],["smj","Lule Sami","Julevsámegiella"],["szl","Silesian","ślůnsko godka"],["tok","Toki Pona","toki pona"],["vai","Vai","ꕙꔤ"],["xal","Kalmyk","Хальмг келн"],["zba","Balaibalan","باليبلن"],["zgh","Standard Moroccan Tamazight","ⵜⴰⵎⴰⵣⵉⵖⵜ"]],qn="(((?:[^A-Za-z0-9@@$##\\uFFFE\\uFEFF\\uFFFF]|[\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069]|^))((https?:\\/\\/)((?:(?:(?:[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/](?:[_-]|[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/])*)?[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/]\\.)*(?:(?:[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/](?:-|[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/])*)?[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/]\\.)(?:(?:(?:삼성|닷컴|닷넷|香格里拉|餐厅|食品|飞利浦|電訊盈科|集团|通販|购物|谷歌|诺基亚|联通|网络|网站|网店|网址|组织机构|移动|珠宝|点看|游戏|淡马锡|机构|書籍|时尚|新闻|政府|政务|招聘|手表|手机|我爱你|慈善|微博|广东|工行|家電|娱乐|天主教|大拿|大众汽车|在线|嘉里大酒店|嘉里|商标|商店|商城|公益|公司|八卦|健康|信息|佛山|企业|中文网|中信|世界|ポイント|ファッション|セール|ストア|コム|グーグル|クラウド|みんな|คอม|संगठन|नेट|कॉम|همراه|موقع|موبايلي|كوم|كاثوليك|عرب|شبكة|بيتك|بازار|العليان|ارامكو|اتصالات|ابوظبي|קום|сайт|рус|орг|онлайн|москва|ком|католик|дети|zuerich|zone|zippo|zip|zero|zara|zappos|yun|youtube|you|yokohama|yoga|yodobashi|yandex|yamaxun|yahoo|yachts|xyz|xxx|xperia|xin|xihuan|xfinity|xerox|xbox|wtf|wtc|wow|world|works|work|woodside|wolterskluwer|wme|winners|wine|windows|win|williamhill|wiki|wien|whoswho|weir|weibo|wedding|wed|website|weber|webcam|weatherchannel|weather|watches|watch|warman|wanggou|wang|walter|walmart|wales|vuelos|voyage|voto|voting|vote|volvo|volkswagen|vodka|vlaanderen|vivo|viva|vistaprint|vista|vision|visa|virgin|vip|vin|villas|viking|vig|video|viajes|vet|versicherung|vermögensberatung|vermögensberater|verisign|ventures|vegas|vanguard|vana|vacations|ups|uol|uno|university|unicom|uconnect|ubs|ubank|tvs|tushu|tunes|tui|tube|trv|trust|travelersinsurance|travelers|travelchannel|travel|training|trading|trade|toys|toyota|town|tours|total|toshiba|toray|top|tools|tokyo|today|tmall|tkmaxx|tjx|tjmaxx|tirol|tires|tips|tiffany|tienda|tickets|tiaa|theatre|theater|thd|teva|tennis|temasek|telefonica|telecity|tel|technology|tech|team|tdk|tci|taxi|tax|tattoo|tatar|tatamotors|target|taobao|talk|taipei|tab|systems|symantec|sydney|swiss|swiftcover|swatch|suzuki|surgery|surf|support|supply|supplies|sucks|style|study|studio|stream|store|storage|stockholm|stcgroup|stc|statoil|statefarm|statebank|starhub|star|staples|stada|srt|srl|spreadbetting|spot|sport|spiegel|space|soy|sony|song|solutions|solar|sohu|software|softbank|social|soccer|sncf|smile|smart|sling|skype|sky|skin|ski|site|singles|sina|silk|shriram|showtime|show|shouji|shopping|shop|shoes|shiksha|shia|shell|shaw|sharp|shangrila|sfr|sexy|sex|sew|seven|ses|services|sener|select|seek|security|secure|seat|search|scot|scor|scjohnson|science|schwarz|schule|school|scholarships|schmidt|schaeffler|scb|sca|sbs|sbi|saxo|save|sas|sarl|sapo|sap|sanofi|sandvikcoromant|sandvik|samsung|samsclub|salon|sale|sakura|safety|safe|saarland|ryukyu|rwe|run|ruhr|rugby|rsvp|room|rogers|rodeo|rocks|rocher|rmit|rip|rio|ril|rightathome|ricoh|richardli|rich|rexroth|reviews|review|restaurant|rest|republican|report|repair|rentals|rent|ren|reliance|reit|reisen|reise|rehab|redumbrella|redstone|red|recipes|realty|realtor|realestate|read|raid|radio|racing|qvc|quest|quebec|qpon|pwc|pub|prudential|pru|protection|property|properties|promo|progressive|prof|productions|prod|pro|prime|press|praxi|pramerica|post|porn|politie|poker|pohl|pnc|plus|plumbing|playstation|play|place|pizza|pioneer|pink|ping|pin|pid|pictures|pictet|pics|piaget|physio|photos|photography|photo|phone|philips|phd|pharmacy|pfizer|pet|pccw|pay|passagens|party|parts|partners|pars|paris|panerai|panasonic|pamperedchef|page|ovh|ott|otsuka|osaka|origins|orientexpress|organic|org|orange|oracle|open|ooo|onyourside|online|onl|ong|one|omega|ollo|oldnavy|olayangroup|olayan|okinawa|office|off|observer|obi|nyc|ntt|nrw|nra|nowtv|nowruz|now|norton|northwesternmutual|nokia|nissay|nissan|ninja|nikon|nike|nico|nhk|ngo|nfl|nexus|nextdirect|next|news|newholland|new|neustar|network|netflix|netbank|net|nec|nba|navy|natura|nationwide|name|nagoya|nadex|nab|mutuelle|mutual|museum|mtr|mtpc|mtn|msd|movistar|movie|mov|motorcycles|moto|moscow|mortgage|mormon|mopar|montblanc|monster|money|monash|mom|moi|moe|moda|mobily|mobile|mobi|mma|mls|mlb|mitsubishi|mit|mint|mini|mil|microsoft|miami|metlife|merckmsd|meo|menu|men|memorial|meme|melbourne|meet|media|med|mckinsey|mcdonalds|mcd|mba|mattel|maserati|marshalls|marriott|markets|marketing|market|map|mango|management|man|makeup|maison|maif|madrid|macys|luxury|luxe|lupin|lundbeck|ltda|ltd|lplfinancial|lpl|love|lotto|lotte|london|lol|loft|locus|locker|loans|loan|llp|llc|lixil|living|live|lipsy|link|linde|lincoln|limo|limited|lilly|like|lighting|lifestyle|lifeinsurance|life|lidl|liaison|lgbt|lexus|lego|legal|lefrak|leclerc|lease|lds|lawyer|law|latrobe|latino|lat|lasalle|lanxess|landrover|land|lancome|lancia|lancaster|lamer|lamborghini|ladbrokes|lacaixa|kyoto|kuokgroup|kred|krd|kpn|kpmg|kosher|komatsu|koeln|kiwi|kitchen|kindle|kinder|kim|kia|kfh|kerryproperties|kerrylogistics|kerryhotels|kddi|kaufen|juniper|juegos|jprs|jpmorgan|joy|jot|joburg|jobs|jnj|jmp|jll|jlc|jio|jewelry|jetzt|jeep|jcp|jcb|java|jaguar|iwc|iveco|itv|itau|istanbul|ist|ismaili|iselect|irish|ipiranga|investments|intuit|international|intel|int|insure|insurance|institute|ink|ing|info|infiniti|industries|inc|immobilien|immo|imdb|imamat|ikano|iinet|ifm|ieee|icu|ice|icbc|ibm|hyundai|hyatt|hughes|htc|hsbc|how|house|hotmail|hotels|hoteles|hot|hosting|host|hospital|horse|honeywell|honda|homesense|homes|homegoods|homedepot|holiday|holdings|hockey|hkt|hiv|hitachi|hisamitsu|hiphop|hgtv|hermes|here|helsinki|help|healthcare|health|hdfcbank|hdfc|hbo|haus|hangout|hamburg|hair|guru|guitars|guide|guge|gucci|guardian|group|grocery|gripe|green|gratis|graphics|grainger|gov|got|gop|google|goog|goodyear|goodhands|goo|golf|goldpoint|gold|godaddy|gmx|gmo|gmbh|gmail|globo|global|gle|glass|glade|giving|gives|gifts|gift|ggee|george|genting|gent|gea|gdn|gbiz|gay|garden|gap|games|game|gallup|gallo|gallery|gal|fyi|futbol|furniture|fund|fun|fujixerox|fujitsu|ftr|frontier|frontdoor|frogans|frl|fresenius|free|fox|foundation|forum|forsale|forex|ford|football|foodnetwork|food|foo|fly|flsmidth|flowers|florist|flir|flights|flickr|fitness|fit|fishing|fish|firmdale|firestone|fire|financial|finance|final|film|fido|fidelity|fiat|ferrero|ferrari|feedback|fedex|fast|fashion|farmers|farm|fans|fan|family|faith|fairwinds|fail|fage|extraspace|express|exposed|expert|exchange|everbank|events|eus|eurovision|etisalat|esurance|estate|esq|erni|ericsson|equipment|epson|epost|enterprises|engineering|engineer|energy|emerck|email|education|edu|edeka|eco|eat|earth|dvr|dvag|durban|dupont|duns|dunlop|duck|dubai|dtv|drive|download|dot|doosan|domains|doha|dog|dodge|doctor|docs|dnp|diy|dish|discover|discount|directory|direct|digital|diet|diamonds|dhl|dev|design|desi|dentist|dental|democrat|delta|deloitte|dell|delivery|degree|deals|dealer|deal|dds|dclk|day|datsun|dating|date|data|dance|dad|dabur|cyou|cymru|cuisinella|csc|cruises|cruise|crs|crown|cricket|creditunion|creditcard|credit|cpa|courses|coupons|coupon|country|corsica|coop|cool|cookingchannel|cooking|contractors|contact|consulting|construction|condos|comsec|computer|compare|company|community|commbank|comcast|com|cologne|college|coffee|codes|coach|clubmed|club|cloud|clothing|clinique|clinic|click|cleaning|claims|cityeats|city|citic|citi|citadel|cisco|circle|cipriani|church|chrysler|chrome|christmas|chloe|chintai|cheap|chat|chase|charity|channel|chanel|cfd|cfa|cern|ceo|center|ceb|cbs|cbre|cbn|cba|catholic|catering|cat|casino|cash|caseih|case|casa|cartier|cars|careers|career|care|cards|caravan|car|capitalone|capital|capetown|canon|cancerresearch|camp|camera|cam|calvinklein|call|cal|cafe|cab|bzh|buzz|buy|business|builders|build|bugatti|budapest|brussels|brother|broker|broadway|bridgestone|bradesco|box|boutique|bot|boston|bostik|bosch|boots|booking|book|boo|bond|bom|bofa|boehringer|boats|bnpparibas|bnl|bmw|bms|blue|bloomberg|blog|blockbuster|blanco|blackfriday|black|biz|bio|bingo|bing|bike|bid|bible|bharti|bet|bestbuy|best|berlin|bentley|beer|beauty|beats|bcn|bcg|bbva|bbt|bbc|bayern|bauhaus|basketball|baseball|bargains|barefoot|barclays|barclaycard|barcelona|bar|bank|band|bananarepublic|banamex|baidu|baby|azure|axa|aws|avianca|autos|auto|author|auspost|audio|audible|audi|auction|attorney|athleta|associates|asia|asda|arte|art|arpa|army|archi|aramco|arab|aquarelle|apple|app|apartments|aol|anz|anquan|android|analytics|amsterdam|amica|amfam|amex|americanfamily|americanexpress|alstom|alsace|ally|allstate|allfinanz|alipay|alibaba|alfaromeo|akdn|airtel|airforce|airbus|aigo|aig|agency|agakhan|africa|afl|afamilycompany|aetna|aero|aeg|adult|ads|adac|actor|active|aco|accountants|accountant|accenture|academy|abudhabi|abogado|able|abc|abbvie|abbott|abb|abarth|aarp|aaa|onion)(?=[^0-9a-zA-Z@+-]|$))|(?:(?:한국|香港|澳門|新加坡|台灣|台湾|中國|中国|გე|ລາວ|ไทย|ලංකා|ഭാരതം|ಭಾರತ|భారత్|சிங்கப்பூர்|இலங்கை|இந்தியா|ଭାରତ|ભારત|ਭਾਰਤ|ভাৰত|ভারত|বাংলা|भारोत|भारतम्|भारत|ڀارت|پاکستان|موريتانيا|مليسيا|مصر|قطر|فلسطين|عمان|عراق|سورية|سودان|تونس|بھارت|بارت|ایران|امارات|المغرب|السعودية|الجزائر|البحرين|الاردن|հայ|қаз|укр|срб|рф|мон|мкд|ею|бел|бг|ευ|ελ|zw|zm|za|yt|ye|ws|wf|vu|vn|vi|vg|ve|vc|va|uz|uy|us|um|uk|ug|ua|tz|tw|tv|tt|tr|tp|to|tn|tm|tl|tk|tj|th|tg|tf|td|tc|sz|sy|sx|sv|su|st|ss|sr|so|sn|sm|sl|sk|sj|si|sh|sg|se|sd|sc|sb|sa|rw|ru|rs|ro|re|qa|py|pw|pt|ps|pr|pn|pm|pl|pk|ph|pg|pf|pe|pa|om|nz|nu|nr|np|no|nl|ni|ng|nf|ne|nc|na|mz|my|mx|mw|mv|mu|mt|ms|mr|mq|mp|mo|mn|mm|ml|mk|mh|mg|mf|me|md|mc|ma|ly|lv|lu|lt|ls|lr|lk|li|lc|lb|la|kz|ky|kw|kr|kp|kn|km|ki|kh|kg|ke|jp|jo|jm|je|it|is|ir|iq|io|in|im|il|ie|id|hu|ht|hr|hn|hm|hk|gy|gw|gu|gt|gs|gr|gq|gp|gn|gm|gl|gi|gh|gg|gf|ge|gd|gb|ga|fr|fo|fm|fk|fj|fi|eu|et|es|er|eh|eg|ee|ec|dz|do|dm|dk|dj|de|cz|cy|cx|cw|cv|cu|cr|co|cn|cm|cl|ck|ci|ch|cg|cf|cd|cc|ca|bz|by|bw|bv|bt|bs|br|bq|bo|bn|bm|bl|bj|bi|bh|bg|bf|be|bd|bb|ba|az|ax|aw|au|at|as|ar|aq|ao|an|am|al|ai|ag|af|ae|ad|ac)(?=[^0-9a-zA-Z@+-]|$))|(?:xn--[\\-0-9a-z]+))))(?::([0-9]+))?(\\/(?:(?:[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*(?:\\((?:[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]+|(?:[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*\\([a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]+\\)[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*))\\)[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*)*[\\+\\-a-z\\u0400-\\u04FF0-9=_#\\/\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]|(?:\\((?:[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]+|(?:[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*\\([a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]+\\)[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*))\\)))|(?:@[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]+\\/))*)?(\\?[a-z0-9!?\\*'@\\(\\);:&=\\+\\$\\/%#\\[\\]\\-_\\.,~|]*[a-z0-9\\-_&=#\\/])?))",Kn="gi",_t={source:qn,flags:Kn};var Vn={BASE_URL:"./",DEV:!1,MODE:"production",PHANPY_CLIENT_NAME:"Phanpy",PHANPY_LINGVA_INSTANCES:"lingva.phanpy.social lingva.lunar.icu lingva.garudalinux.org translate.plausibility.cloud",PHANPY_PRIVACY_POLICY_URL:"https://github.com/cheeaun/phanpy/blob/main/PRIVACY.MD",PHANPY_WEBSITE:"https://phanpy.social",PROD:!0,SSR:!1,VITE_APP_ENV:"production"};const{PHANPY_IMG_ALT_API_URL:ut,PHANPY_GIPHY_API_KEY:Gn}=Vn,Yn=yt.reduce((s,e)=>{const[n,a,r]=e;return s[n]={common:a,native:r},s},{}),Kt={"5 minutes":5*60,"30 minutes":30*60,"1 hour":60*60,"6 hours":6*60*60,"12 hours":12*60*60,"1 day":24*60*60,"3 days":3*24*60*60,"7 days":7*24*60*60},Zn=Object.values(Kt),Rt=24*60*60,Dt=s=>{if(!s)return Rt;const e=(new Date(s).getTime()-Date.now())/1e3;return Zn.find(n=>n>=e)||Rt},xe=document.createElement("ul");xe.role="listbox";xe.className="text-expander-menu";const Jn=16,Xn=new IntersectionObserver(s=>{s.forEach(e=>{if(e.isIntersecting){const{left:n,width:a}=e.boundingClientRect,{innerWidth:r}=window;if(n+a>r){const p=on()?"right":"left";xe.style[p]=r-a-Jn+"px"}}})});Xn.observe(xe);const ke=rn([new Intl.DateTimeFormat().resolvedOptions().locale,...navigator.languages],yt.map(s=>s[0]),"en"),Vt=new RegExp(_t.source,_t.flags),Qn=/(^|[^\/\w])@(([a-z0-9_]+)@[a-z0-9\.\-]+[a-z0-9]+)/gi,ei="$2xxxxxxxxxxxxxxxxxxxxxxx";function ti(s){return s.replace(Vt,ei).replace(Qn,"$1@$3")}const ni=/[a-z0-9_]+([a-z0-9_.-]+[a-z0-9_]+)?/i,ii=new RegExp(`(^|[^=\\/\\w])(@${ni.source}(?:@[\\p{L}\\w.-]+[\\w]+)?)`,"uig"),si=new RegExp("(^|[^=\\/\\w])(#[a-z0-9_]+([a-z0-9_.]+[a-z0-9_]+)?)(?![\\/\\w])","ig"),ai="[a-zA-Z0-9_]{2,}",oi=new RegExp(`(^|[^=\\/\\w])(:${ai}:)(?=[^A-Za-z0-9_:]|$)`,"g"),ri=new Intl.Segmenter;function dt(s){return s.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function li(s,{maxCharacters:e=1/0}){const{composerCharacterCount:n}=le;if(n>e){let a="",r="";const p=ri.segment(s);for(const{segment:u,index:v}of p)v"),dt(a)+r}return dt(s).replace(Vt,'$2$3').replace(ii,'$1$2').replace(si,'$1$2').replace(oi,'$1$2')}const ci=new Intl.RelativeTimeFormat,vt=100;function Ci({onClose:s,replyToStatus:e,editStatus:n,draftStatus:a,standalone:r,hasOpener:p}){var Ct;const{masto:u,instance:v}=bt(),[g,R]=U("default"),F=q((a==null?void 0:a.uid)||ln()),w=xn(),L=w.info,J=Ut(),{statuses:{maxCharacters:D,maxMediaAttachments:I,charactersReservedPerUrl:se}={},mediaAttachments:{supportedMimeTypes:X=[],imageSizeLimit:l,imageMatrixLimit:d,videoSizeLimit:h,videoMatrixLimit:f,videoFrameRateLimit:k}={},polls:{maxOptions:x,maxCharactersPerOption:T,maxExpiration:K,minExpiration:de}={}}=J||{},z=q(),Q=q(),[G,W]=U("public"),[P,ne]=U(!1),[O,ie]=U(ze.session.get("currentLanguage")||ke),ae=q(O),[M,S]=U([]),[$,C]=U(null),N=ze.account.get("preferences")||{},ee=()=>{z.current&&z.current.dispatchEvent(new Event("input"))},oe=()=>{setTimeout(()=>{var o,c,y;z.current&&((c=(o=a==null?void 0:a.status)==null?void 0:o.startsWith)!=null&&c.call(o,` -`)&&(z.current.selectionStart=0,z.current.selectionEnd=0),(y=z.current)==null||y.focus())},300)};te(()=>{var o,c;if(e){const{spoilerText:y,visibility:m,language:B,sensitive:E}=e;y&&Q.current&&(Q.current.value=y);const b=[...new Set([e.account.acct,...e.mentions.map(A=>A.acct)])].filter(A=>A!==L.acct);b.length>0&&(z.current.value=`${b.map(A=>`@${A}`).join(" ")} `,ee()),oe(),W(m==="public"&&N["posting:default:visibility"]?N["posting:default:visibility"].toLowerCase():m),ie(B||((o=N["posting:default:language"])==null?void 0:o.toLowerCase())||ke),ne(E&&!!y)}else if(n){const{visibility:y,language:m,sensitive:B,poll:E,mediaAttachments:j}=n,b=!!(E!=null&&E.options)&&{...E,options:E.options.map(A=>(A==null?void 0:A.title)||A),expiresIn:(E==null?void 0:E.expiresIn)||Dt(E.expiresAt)};R("loading"),(async()=>{var A;try{const H=await u.v1.statuses.$select(n.id).source.fetch(),{text:ue,spoilerText:pe}=H;z.current.value=ue,z.current.dataset.source=ue,ee(),oe(),Q.current.value=pe,W(y),ie(m||((A=N["posting:default:language"])==null?void 0:A.toLowerCase())||ke),ne(B),b&&C(b),S(j),R("default")}catch(H){alert((H==null?void 0:H.reason)||H),R("error")}})()}else oe(),N["posting:default:visibility"]&&W(N["posting:default:visibility"].toLowerCase()),N["posting:default:language"]&&ie(N["posting:default:language"].toLowerCase()),N["posting:default:sensitive"]&&ne(!!N["posting:default:sensitive"]);if(a){const{status:y,spoilerText:m,visibility:B,language:E,sensitive:j,poll:b,mediaAttachments:A}=a,H=!!(b!=null&&b.options)&&{...b,options:b.options.map(ue=>(ue==null?void 0:ue.title)||ue),expiresIn:(b==null?void 0:b.expiresIn)||Dt(b.expiresAt)};z.current.value=y,ee(),oe(),m&&(Q.current.value=m),B&&W(B),ie(E||((c=N["posting:default:language"])==null?void 0:c.toLowerCase())||ke),j!==null&&ne(j),H&&C(H),A&&S(A)}},[a,n,e]);const me=q(),be="You have unsaved changes. Discard this post?",we=()=>{const{value:o,dataset:c}=z.current;if(g==="loading")return!1;const y=(o||"").trim().replace(new RegExp("^\\p{White_Space}+|\\p{White_Space}+$","gu"),""),m=M.length>0;if(!y&&!m||M.length>0&&M.every(A=>A.id))return!0;const E=(e==null?void 0:e.account.id)===L.id,j=e&&o.trim()===`@${e.account.acct}`;return!!(!E&&j||o===(c==null?void 0:c.source))},Oe=()=>we()?!0:confirm(be);te(()=>{const o=c=>{we()||(c.preventDefault(),c.returnValue=be)};return window.addEventListener("beforeunload",o,{capture:!0}),()=>window.removeEventListener("beforeunload",o,{capture:!0})},[]);const Zt=()=>{const{value:o}=z.current,{value:c}=Q.current;return Bt(ti(o))+Bt(c)},tt=()=>{const o=Zt();le.composerCharacterCount=o};te(tt,[]);const wt=window.CloseWatcher,nt=q(!1);_e("esc",()=>{nt.current=!0},{enabled:!wt,enableOnFormTags:!0}),_e("esc",()=>{!r&&nt.current&&Oe()&&s(),nt.current=!1},{enabled:!wt,enableOnFormTags:!0,keyup:!0,ignoreEventWhen:o=>{const c=document.querySelectorAll("#modal-container > *"),y=!!c,m=c.length===1&&c[0].querySelector("#compose-container");return y&&!m}}),cn(()=>{!r&&Oe()&&s()},[r,Oe,s]);const kt=q({}),Et=()=>`${wn()}#${F.current}`,it=()=>{if(n||le.composerState.minimized)return;const o=Et(),c={key:o,replyTo:e?{id:e.id,account:{id:e.account.id,username:e.account.username,acct:e.account.acct}}:null,draftStatus:{uid:F.current,status:z.current.value,spoilerText:Q.current.value,visibility:G,language:O,sensitive:P,poll:$,mediaAttachments:M}};!kn(c,kt.current)&&!we()&&(zt.drafts.set(o,{...c,state:"unsaved",updatedAt:Date.now()}).then(()=>{}).catch(y=>{}),kt.current=structuredClone(c))};un(it,5e3),te(()=>(it(),()=>{zt.drafts.del(Et())}),[]),te(()=>{const o=y=>{const{items:m}=y.clipboardData||y.dataTransfer,B=[];for(let E=0;E0&&M.length>=I){alert(`You can only attach up to ${I} files.`);return}if(B.length>0){y.preventDefault(),y.stopPropagation();const E=I-M.length,j=B.slice(0,E);if(j.length<=0){alert(`You can only attach up to ${I} files.`);return}const b=j.map(A=>({file:A,type:A.type,size:A.size,url:URL.createObjectURL(A),id:null,description:null}));S([...M,...b])}};window.addEventListener("paste",o);const c=y=>{y.dataTransfer.items.length>0&&(y.preventDefault(),y.stopPropagation())};return window.addEventListener("dragover",c),window.addEventListener("drop",o),()=>{window.removeEventListener("paste",o),window.removeEventListener("dragover",c),window.removeEventListener("drop",o)}},[M]);const[He,st]=U(!1),[Ne,Ue]=U(!1),[Jt,at]=U(!1),[fe,Xt]=U(null),[Qt,en]=Re(()=>{const o=[],c=[],{contentTranslationHideLanguages:y=[]}=le.settings;return yt.forEach(m=>{const[B]=m;B===O||B===ae.current||B===ke||y.includes(B)||fe!=null&&fe.length&&fe.includes(B)?o.push(m):c.push(m)}),o.sort(([m,B],[E,j])=>m===O?-1:E===O?1:B.localeCompare(j)),c.sort(([m,B],[E,j])=>B.localeCompare(j)),[o,c]},[O,fe]),Ft=Re(()=>!!(e!=null&&e.createdAt)&&Math.floor((Date.now()-new Date(e.createdAt))/(1e3*60*60*24*30)),[e]),tn=()=>{it(),le.composerState.minimized=!0};return t("div",{id:"compose-container-outer",children:[t("div",{id:"compose-container",class:r?"standalone":"",children:[t("div",{class:"compose-top",children:[(L==null?void 0:L.avatarStatic)&&t(Ht,{account:L,accountInstance:w.instanceURL,hideDisplayName:!0,useAvatarStatic:!0}),r?p&&t("button",{type:"button",class:"light pop-button",disabled:g==="loading",onClick:()=>{var o;if(!window.opener){alert("Looks like you closed the parent window.");return}if(window.opener.__STATES__.showCompose){if((o=window.opener.__STATES__.composerState)!=null&&o.publishing){alert("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.");return}if(!confirm("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?"))return}s({fn:()=>{const c={editStatus:n,replyToStatus:e,draftStatus:{uid:F.current,status:z.current.value,spoilerText:Q.current.value,visibility:G,language:O,sensitive:P,poll:$,mediaAttachments:M}};window.opener.__COMPOSE__=c,window.opener.__STATES__.showCompose?(window.opener.__STATES__.showCompose=!1,setTimeout(()=>{window.opener.__STATES__.showCompose=!0},10)):window.opener.__STATES__.showCompose=!0,window.opener.__STATES__.composerState.minimized&&(window.opener.__STATES__.composerState.minimized=!1)}})},children:t(V,{icon:"popin",alt:"Pop in"})}):t("span",{class:"compose-controls",children:[t("button",{type:"button",class:"plain4 pop-button",disabled:g==="loading",onClick:()=>{dn({editStatus:n,replyToStatus:e,draftStatus:{uid:F.current,status:z.current.value,spoilerText:Q.current.value,visibility:G,language:O,sensitive:P,poll:$,mediaAttachments:M}})&&s()},children:t(V,{icon:"popout",alt:"Pop out"})}),t("button",{type:"button",class:"plain4 min-button",onClick:tn,children:t(V,{icon:"minimize",alt:"Minimize"})})," ",t("button",{type:"button",class:"light close-button",disabled:g==="loading",onClick:()=>{Oe()&&s()},children:t(V,{icon:"x"})})]})]}),!!e&&t("div",{class:"status-preview",children:[t(At,{status:e,size:"s",previewMode:!0}),t("div",{class:"status-preview-legend reply-to",children:["Replying to @",e.account.acct||e.account.username,"’s post",Ft>=3&&t(Le,{children:[" ","(",t("strong",{children:ci.format(-Ft,"month")}),")"]})]})]}),!!n&&t("div",{class:"status-preview",children:[t(At,{status:n,size:"s",previewMode:!0}),t("div",{class:"status-preview-legend",children:"Editing source post"})]}),t("form",{ref:me,class:`form-visibility-${G}`,style:{pointerEvents:g==="loading"?"none":"auto",opacity:g==="loading"?.5:1},onKeyDown:o=>{o.key==="Enter"&&(o.ctrlKey||o.metaKey)&&me.current.dispatchEvent(new Event("submit",{cancelable:!0}))},onSubmit:o=>{o.preventDefault();const c=new FormData(o.target),y=Object.fromEntries(c.entries());let{status:m,visibility:B,sensitive:E,spoilerText:j}=y;if(E=E==="on",$){if($.options.length<2){alert("Poll must have at least 2 options");return}if($.options.some(b=>b==="")){alert("Some poll choices are empty");return}}M.length>0&&M.some(A=>{var H,ue;return!((ue=(H=A.description)==null?void 0:H.trim)!=null&&ue.call(H))})&&!confirm("Some media have no descriptions. Continue?")||(j=E&&j||void 0,m=m===""?void 0:m,le.composerState.publishing=!0,R("loading"),(async()=>{try{if(M.length>0){const H=M.map(pe=>{const{file:We,description:nn,id:sn}=pe;if(sn)return pe;{const an=Ot({file:We,description:nn});return u.v2.media.create(an).then(ot=>(ot.id&&(pe.id=ot.id),ot))}}),ue=await Promise.allSettled(H);if(ue.some(pe=>{var We;return pe.status==="rejected"||!((We=pe.value)!=null&&We.id)})){le.composerState.publishing=!1,le.composerState.publishingError=!0,R("error"),ue.forEach(pe=>{pe.status==="rejected"&&alert(pe.reason||`Attachment #${i} failed`)});return}}let b={status:m,spoiler_text:j,language:O,sensitive:E,poll:$,media_ids:M.map(H=>H.id)};n&&Nt("@mastodon/edit-media-attributes")?b.media_attributes=M.map(H=>({id:H.id,description:H.description})):n||(b.visibility=B,b.in_reply_to_id=(e==null?void 0:e.id)||void 0),b=Ot(b);let A;if(n)A=await u.v1.statuses.$select(n.id).update(b),En(A,v,{skipThreading:!0});else try{A=await u.v1.statuses.create(b,{requestInit:{headers:{"Idempotency-Key":F.current}}})}catch{A=await u.v1.statuses.create(b)}le.composerState.minimized=!1,le.composerState.publishing=!1,R("default"),s({type:n?"edit":e?"reply":"post",newStatus:A,instance:v})}catch(b){le.composerState.publishing=!1,le.composerState.publishingError=!0,alert((b==null?void 0:b.reason)||b),R("error")}})())},children:[t("div",{class:"toolbar stretch",children:[t("input",{ref:Q,type:"text",name:"spoilerText",placeholder:"Content warning",disabled:g==="loading",class:"spoiler-text-field",lang:O,spellCheck:"true",dir:"auto",style:{opacity:P?1:0,pointerEvents:P?"auto":"none"},onInput:()=>{tt()}}),t("label",{class:`toolbar-button ${P?"highlight":""}`,title:"Content warning or sensitive media",children:[t("input",{name:"sensitive",type:"checkbox",checked:P,disabled:g==="loading",onChange:o=>{var y,m;const c=o.target.checked;ne(c),c?(y=Q.current)==null||y.focus():(m=z.current)==null||m.focus()}}),t(V,{icon:`eye-${P?"close":"open"}`})]})," ",t("label",{class:`toolbar-button ${G!=="public"&&!P?"show-field":""} ${G!=="public"?"highlight":""}`,title:`Visibility: ${G}`,children:[t(V,{icon:hn[G],alt:G}),t("select",{name:"visibility",value:G,onChange:o=>{W(o.target.value)},disabled:g==="loading"||!!n,dir:"auto",children:[t("option",{value:"public",children:["Public ",t(V,{icon:"earth"})]}),t("option",{value:"unlisted",children:"Unlisted"}),t("option",{value:"private",children:"Followers only"}),t("option",{value:"direct",children:"Private mention"})]})]})," "]}),t(hi,{ref:z,placeholder:e?"Post your reply":n?"Edit your post":"What are you doing?",required:(M==null?void 0:M.length)===0,disabled:g==="loading",lang:O,onInput:()=>{tt()},maxCharacters:D,performSearch:o=>{const{type:c,q:y,limit:m}=o;return c==="accounts"?u.v1.accounts.search.list({q:y,limit:m,resolve:!1}):u.v2.search.fetch(o)},onTrigger:o=>{(o==null?void 0:o.name)==="custom-emojis"?Ue({defaultSearchTerm:(o==null?void 0:o.defaultSearchTerm)||null}):(o==null?void 0:o.name)==="mention"?st({defaultSearchTerm:(o==null?void 0:o.defaultSearchTerm)||null}):(o==null?void 0:o.name)==="auto-detect-language"&&(o!=null&&o.languages)&&Xt(o.languages)}}),(M==null?void 0:M.length)>0&&t("div",{class:"media-attachments",children:[M.map((o,c)=>{const{id:y,file:m}=o,B=(m==null?void 0:m.size)+(m==null?void 0:m.type)+(m==null?void 0:m.name);return t(mi,{attachment:o,disabled:g==="loading",lang:O,onDescriptionChange:E=>{S(j=>{const b=[...j];return b[c].description=E,b})},onRemove:()=>{S(E=>E.filter((j,b)=>b!==c))}},y||B||c)}),t("label",{class:"media-sensitive",children:[t("input",{name:"sensitive",type:"checkbox",checked:P,disabled:g==="loading",onChange:o=>{const c=o.target.checked;ne(c)}})," ",t("span",{children:"Mark media as sensitive"})," ",t(V,{icon:`eye-${P?"close":"open"}`})]})]}),!!$&&t(gi,{lang:O,maxOptions:x,maxExpiration:K,minExpiration:de,maxCharactersPerOption:T,poll:$,disabled:g==="loading",onInput:o=>{if(o){const c={...o};C(c)}else C(null)}}),t("div",{class:"toolbar wrap",style:{justifyContent:"flex-end"},children:[t("span",{children:[t("label",{class:"toolbar-button",children:[t("input",{type:"file",accept:X.join(","),multiple:M.length=I||!!$,onChange:o=>{const c=o.target.files;if(!c)return;const y=Array.from(c).map(m=>({file:m,type:m.type,size:m.size,url:URL.createObjectURL(m),id:null,description:null}));M.length+y.length>I?alert(`You can only attach up to ${I} files.`):S(m=>m.concat(y)),o.target.value=""}}),t(V,{icon:"attachment"})]}),x==null||x>1&&t(Le,{children:t("button",{type:"button",class:"toolbar-button",disabled:g==="loading"||!!$||!!M.length,onClick:()=>{C({options:["",""],expiresIn:24*60*60,multiple:!1})},children:t(V,{icon:"poll",alt:"Add poll"})})}),t("button",{type:"button",class:"toolbar-button",disabled:g==="loading",onClick:()=>{Ue(!0)},children:t(V,{icon:"emoji2"})}),!!le.settings.composerGIFPicker&&t("button",{type:"button",class:"toolbar-button gif-picker-button",disabled:g==="loading"||M.length>=I||!!$,onClick:()=>{at(!0)},children:t("span",{children:"GIF"})})]}),t("div",{class:"spacer"}),g==="loading"?t(et,{abrupt:!0}):t(pi,{maxCharacters:D,hidden:g==="loading"}),t("label",{class:`toolbar-button ${O!==ae.current||fe!=null&&fe.length&&!fe.includes(O)?"highlight":""}`,children:[t("span",{class:"icon-text",children:(Ct=Yn[O])==null?void 0:Ct.native}),t("select",{name:"language",value:O,onChange:o=>{const{value:c}=o.target;ie(c||ke),ze.session.set("currentLanguage",c||ke)},disabled:g==="loading",dir:"auto",children:[Qt.map(([o,c,y])=>t("option",{value:o,children:[c," (",y,")"]},o)),t("hr",{}),en.map(([o,c,y])=>t("option",{value:o,children:[c," (",y,")"]},o))]})]})," ",t("button",{type:"submit",class:"large",disabled:g==="loading",children:e?"Reply":n?"Update":"Post"})]})]})]}),He&&t(Ve,{onClick:o=>{o.target===o.currentTarget&&st(!1)},children:t(fi,{masto:u,instance:v,onClose:()=>{st(!1)},defaultSearchTerm:He==null?void 0:He.defaultSearchTerm,onSelect:o=>{const c=z.current;if(!c)return;const{selectionStart:y,selectionEnd:m}=c,B=c.value,E=B.slice(0,y),j=E?/[\s\t\n\r]$/.test(E)?"":" ":"",b=B.slice(m),A=/^[\s\t\n\r]/.test(b)?"":" ",H=E+j+"@"+o+A+b;c.value=H,c.selectionStart=c.selectionEnd=m+1+o.length+A.length,c.focus(),c.dispatchEvent(new Event("input"))}})}),Ne&&t(Ve,{onClick:o=>{o.target===o.currentTarget&&Ue(!1)},children:t(vi,{masto:u,instance:v,onClose:()=>{Ue(!1)},defaultSearchTerm:Ne==null?void 0:Ne.defaultSearchTerm,onSelect:o=>{const c=z.current;if(!c)return;const{selectionStart:y,selectionEnd:m}=c,B=c.value,E=B.slice(0,y),j=E?/[\s\t\n\r]$/.test(E)?"":" ":"",b=B.slice(m),A=/^[\s\t\n\r]/.test(b)?"":" ",H=E+j+o+A+b;c.value=H,c.selectionStart=c.selectionEnd=m+o.length+A.length,c.focus(),c.dispatchEvent(new Event("input"))}})}),Jt&&t(Ve,{onClick:o=>{o.target===o.currentTarget&&at(!1)},children:t(yi,{onClose:()=>at(!1),onSelect:({url:o,type:c,alt_text:y})=>{if(M.length>=I){alert(`You can only attach up to ${I} files.`);return}(async()=>{var B,E;let m;try{m=Ee({text:"Downloading GIF…",duration:-1});const j=await fetch(o,{referrerPolicy:"no-referrer"}).then(H=>H.blob()),b=new File([j],c==="video/mp4"?"video.mp4":"image.gif",{type:c}),A=[...M,{file:b,type:c,size:b.size,id:null,description:y||""}];S(A),(B=m==null?void 0:m.hideToast)==null||B.call(m)}catch{(E=m==null?void 0:m.hideToast)==null||E.call(m),Ee("Failed to download GIF")}})()}})})]})}function jt(s){if(!s)return;const{value:e,offsetHeight:n,scrollHeight:a,clientHeight:r}=s;if(np.visibleInPicker),r=new pn(a,{keys:["shortcode"],findAllMatches:!0});return[a,r]}const Gt=Fn(ui,{matchesArg:(s,e)=>s.instance===e.instance,maxAge:30*60*1e3}),di=s=>{const e=zn(s);return e!=null&&e.length?e.slice(0,2).map(n=>n.lang):null},hi=Cn((s,e)=>{var X;const{masto:n,instance:a}=bt(),[r,p]=U(((X=e.current)==null?void 0:X.value)||""),{maxCharacters:u,performSearch:v=()=>{},onTrigger:g=()=>{},...R}=s,F=q();te(()=>{Gt(a,n).then(l=>{const[d,h]=l;F.current=h}).catch(l=>{})},[]);const w=q(),L=q("");te(()=>{let l,d,h;return w.current&&(l=f=>{var de;const{key:k,provide:x,text:T}=f.detail;if(L.current=T,T===""){x(Promise.resolve({matched:!1}));return}if(k===":"){const z=(de=F.current)==null?void 0:de.search(T,{limit:5});let Q="";z.forEach(({item:G})=>{const{shortcode:W,url:P}=G;Q+=` -
  • - - ${ye(W)} -
  • `}),Q+=`
  • More…
  • `,xe.innerHTML=Q,x(Promise.resolve({matched:z.length>0,fragment:xe}));return}const K={"@":"accounts","#":"hashtags"}[k];x(new Promise(z=>{v({type:K,q:T,limit:5}).then(G=>{if(T!==L.current)return;const W=G[K]||G;let P="";W.forEach(ne=>{var ee;const{name:O,avatarStatic:ie,displayName:ae,username:M,acct:S,emojis:$,history:C}=ne,N=mn(ae,$);if(S)P+=` -
  • - - - - - ${N||M} -
    @${ye(S)} -
    -
  • - `;else{const oe=(ee=C==null?void 0:C.reduce)==null?void 0:ee.call(C,(me,be)=>me+ +be.uses,0);P+=` -
  • - #${ye(O)} - ${oe?`${gn(oe)}`:""} -
  • - `}}),K==="accounts"&&(P+=`
  • More…
  • `),xe.innerHTML=P,z({matched:W.length>0,fragment:xe})})}))},w.current.addEventListener("text-expander-change",l),d=f=>{const{key:k,item:x}=f.detail,{value:T,more:K}=x.dataset;k===":"?(f.detail.value=T?`:${T}:`:"​",K&&(f.detail.continue=!0,setTimeout(()=>{g==null||g({name:"custom-emojis",defaultSearchTerm:K})},300))):k==="@"?(f.detail.value=T?`@${T} `:"​",K&&(f.detail.continue=!0,setTimeout(()=>{g==null||g({name:"mention",defaultSearchTerm:K})},300))):f.detail.value=`${k}${T}`},w.current.addEventListener("text-expander-value",d),h=f=>{const{input:k}=f.detail;if(p(k.value),e.current){const x=new Event("input",{bubbles:!0});e.current.dispatchEvent(x)}},w.current.addEventListener("text-expander-committed",h)),()=>{w.current&&(w.current.removeEventListener("text-expander-change",l),w.current.removeEventListener("text-expander-value",d),w.current.removeEventListener("text-expander-committed",h))}},[]),te(()=>{const l=e.current;if(!l)return;new ResizeObserver(()=>{if(w.current){const{height:h}=l.getBoundingClientRect();w.current.style.height=h+"px"}}).observe(l)},[]);const J=q(0),D=q(),I=fn(l=>{var f;if(!D.current)return;if(J.current>3){D.current.innerHTML="",D.current=null,(f=I==null?void 0:I.cancel)==null||f.call(I);return}let d,h;J.current<=3&&(d=Date.now()),D.current.innerHTML=li(l,{maxCharacters:u})+` -`,J.current<=3&&(h=Date.now()),d&&h&&h-d>50&&J.current++},500),se=Qe(()=>{var f,k;const l=(f=D.current)==null?void 0:f.cloneNode(!0);if(!l)return;l.querySelectorAll("mark").forEach(x=>{x.remove()});const d=(k=l.innerText)==null?void 0:k.trim();if(!d)return;const h=di(d);h!=null&&h.length&&(g==null||g({name:"auto-detect-language",languages:h}))},2e3);return t("text-expander",{ref:w,keys:"@ # :",class:"compose-field-container",children:[t("textarea",{class:"compose-field",autoCapitalize:"sentences",autoComplete:"on",autoCorrect:"on",spellCheck:"true",dir:"auto",rows:"6",cols:"50",...R,ref:e,name:"status",value:r,onKeyDown:l=>{const{key:d,target:h}=l;if(d==="Enter"&&!(l.ctrlKey||l.metaKey))try{const{value:f,selectionStart:k}=h,T=f.slice(0,k).split(` -`).slice(-1)[0];if(T&&/^\s*(-|\d+\.)\s/.test(T)){const[K,de,z,Q,G]=T.match(/^(\s*)(-|\d+\.)(\s+)(.+)?/)||[];if(G){l.preventDefault();const[W]=z.match(/\d+/)||[],P=W?`${+W+1}.`:"-",ne=` -${de}${P}${Q}`;h.setRangeText(ne,k,k);const O=k+ne.length;h.setSelectionRange(O,O)}else{const W=k-T.length;h.setRangeText("",W,k)}jt(h),h.dispatchEvent(new Event("input"))}}catch{}D.current&&(D.current.scrollTop=h.scrollTop)},onInput:l=>{var f;const{target:d}=l,h=d.value.replace(/\u200b/g,"");p(h),jt(d),(f=s.onInput)==null||f.call(s,l),I(h),se()},style:{width:"100%",height:"4em"},onScroll:l=>{if(D.current){const{scrollTop:d}=l.target;D.current.scrollTop=d}}}),t("div",{ref:D,class:"compose-highlight","aria-hidden":"true"})]})});function pi({maxCharacters:s=500,hidden:e}){const a=Ln(le).composerCharacterCount,r=s-a;return e?t("span",{class:"char-counter",hidden:!0}):t("span",{class:"char-counter",title:`${r}/${s}`,style:{"--percentage":a/s*100},children:[t("meter",{class:`${r<=-10?"explode":r<=0?"danger":r<=20?"warning":""}`,value:a,max:s}),t("span",{class:"counter",children:r})]})}function Ke(s){const e=["bytes","KB","MB","GB","TB","PB","EB","ZB","YB"];let n=0;for(;s>=1024;)s/=1024,n++;return`${s.toFixed(0).toLocaleString()} ${e[n]}`}function Pt(s,e,n,a){const r=Math.sqrt(e/s),p=Math.floor(n*r),u=Math.floor(a*r);return{newWidth:p,newHeight:u}}function mi({attachment:s,disabled:e,lang:n,onDescriptionChange:a=()=>{},onRemove:r=()=>{}}){const[p,u]=U("default"),v=Nt("@mastodon/edit-media-attributes"),{type:g,id:R,file:F}=s,w=Re(()=>F?URL.createObjectURL(F):s.url,[F,s.url]),L=!!(F!=null&&F.size),J=L?Ut():{},{mediaAttachments:{imageSizeLimit:D,imageMatrixLimit:I,videoSizeLimit:se,videoMatrixLimit:X,videoFrameRateLimit:l}={}}=J||{},[d,h]=U(()=>L?g.startsWith("image")&&D&&F.size>D?{type:"imageSizeLimit",details:{imageSize:F.size,imageSizeLimit:D}}:g.startsWith("video")&&se&&F.size>se?{type:"videoSizeLimit",details:{videoSize:F.size,videoSizeLimit:se}}:null:null),[f,k]=U({});te(()=>{!L||!I||(f==null?void 0:f.matrix)>I&&h({type:"imageMatrixLimit",details:{imageMatrix:f==null?void 0:f.matrix,imageMatrixLimit:I,width:f==null?void 0:f.width,height:f==null?void 0:f.height}})},[f,I,L]);const[x,T]=U({});te(()=>{!L||!X||(x==null?void 0:x.matrix)>X&&h({type:"videoMatrixLimit",details:{videoMatrix:x==null?void 0:x.matrix,videoMatrixLimit:X,width:x==null?void 0:x.width,height:x==null?void 0:x.height}})},[x,X,L]);const[K,de]=U(s.description),[z,Q]=g.split("/"),G=Qe(a,250);te(()=>{G(K)},[K,G]);const[W,P]=U(!1),ne=q(null);te(()=>{let S;return W&&ne.current&&(S=setTimeout(()=>{ne.current.focus()},100)),()=>{clearTimeout(S)}},[W]);const O=t(Le,{children:R&&!v?t("div",{class:"media-desc",children:[t("span",{class:"tag",children:"Uploaded"}),t("p",{title:K,children:s.description||t("i",{children:"No description"})})]}):t("textarea",{ref:ne,value:K||"",lang:n,placeholder:{image:"Image description",video:"Video description",audio:"Audio description"}[z],autoCapitalize:"sentences",autoComplete:"on",autoCorrect:"on",spellCheck:"true",dir:"auto",disabled:e||p==="loading",class:p==="loading"?"loading":"",maxlength:"1500",onInput:S=>{const{value:$}=S.target;de($)}})}),ie=q(null);te(()=>()=>{var S,$;($=(S=ie.current)==null?void 0:S.hideToast)==null||$.call(S)},[]);const ae=q(null),M=S=>{const{type:$,details:C}=S;switch($){case"imageSizeLimit":{const{imageSize:N,imageSizeLimit:ee}=C;return`File size too large. Uploading might encounter issues. Try reduce the file size from ${Ke(N)} to ${Ke(ee)} or lower.`}case"imageMatrixLimit":{const{imageMatrix:N,imageMatrixLimit:ee,width:oe,height:me}=C,{newWidth:be,newHeight:we}=Pt(N,ee,oe,me);return`Dimension too large. Uploading might encounter issues. Try reduce dimension from ${oe.toLocaleString()}×${me.toLocaleString()}px to ${be.toLocaleString()}×${we.toLocaleString()}px.`}case"videoSizeLimit":{const{videoSize:N,videoSizeLimit:ee}=C;return`File size too large. Uploading might encounter issues. Try reduce the file size from ${Ke(N)} to ${Ke(ee)} or lower.`}case"videoMatrixLimit":{const{videoMatrix:N,videoMatrixLimit:ee,width:oe,height:me}=C,{newWidth:be,newHeight:we}=Pt(N,ee,oe,me);return`Dimension too large. Uploading might encounter issues. Try reduce dimension from ${oe.toLocaleString()}×${me.toLocaleString()}px to ${be.toLocaleString()}×${we.toLocaleString()}px.`}case"videoFrameRateLimit":return"Frame rate too high. Uploading might encounter issues."}};return t(Le,{children:[t("div",{class:"media-attachment",children:[t("div",{class:"media-preview",tabIndex:"0",onClick:()=>{P(!0)},children:z==="image"?t("img",{src:w,alt:"",onLoad:S=>{if(!L)return;const{naturalWidth:$,naturalHeight:C}=S.target;k({matrix:$*C,width:$,height:C})}}):z==="video"||z==="gifv"?t("video",{src:w+"#t=0.1",playsinline:!0,muted:!0,disablePictureInPicture:!0,preload:"metadata",onLoadedMetadata:S=>{if(!L)return;const{videoWidth:$,videoHeight:C}=S.target;$&&C&&T({matrix:$*C,width:$,height:C})}}):z==="audio"?t("audio",{src:w,controls:!0}):null}),O,t("div",{class:"media-aside",children:[t("button",{type:"button",class:"plain close-button",disabled:e,onClick:r,children:t(V,{icon:"x"})}),!!d&&t("button",{type:"button",class:"media-error",title:M(d),onClick:()=>{ae.current&&ae.current.hideToast(),ae.current=Ee({text:M(d),duration:1e4})},children:t(V,{icon:"alert"})})]})]}),W&&t(Ve,{onClose:()=>{P(!1)},children:t("div",{id:"media-sheet",class:"sheet sheet-max",children:[t("button",{type:"button",class:"sheet-close",onClick:()=>{P(!1)},children:t(V,{icon:"x"})}),t("header",{children:t("h2",{children:{image:"Edit image description",video:"Edit video description",audio:"Edit audio description"}[z]})}),t("main",{tabIndex:"-1",children:[t("div",{class:"media-preview",children:z==="image"?t("img",{src:w,alt:""}):z==="video"||z==="gifv"?t("video",{src:w,playsinline:!0,controls:!0}):z==="audio"?t("audio",{src:w,controls:!0}):null}),t("div",{class:"media-form",children:[O,t("footer",{children:[z==="image"&&/^(png|jpe?g|gif|webp)$/i.test(Q)&&!!le.settings.mediaAltGenerator&&!!ut&&t(vn,{portal:{target:document.body},containerProps:{style:{zIndex:1001}},align:"center",position:"anchor",overflow:"auto",menuButton:t("button",{type:"button",title:"More",class:"plain",children:t(V,{icon:"more",size:"l",alt:"More"})}),children:[t(St,{disabled:p==="loading",onClick:()=>{u("loading"),ie.current=Ee({text:"Generating description. Please wait...",duration:-1}),async function(){var S,$;try{const C=new FormData;C.append("image",F);const N=await fetch(ut,{method:"POST",body:C}).then(ee=>ee.json());if(N.error)throw new Error(N.error);de(N.description)}catch(C){Ee(`Failed to generate description${C!=null&&C.message?`: ${C.message}`:""}`)}finally{u("default"),($=(S=ie.current)==null?void 0:S.hideToast)==null||$.call(S)}}()},children:[t(V,{icon:"sparkles2"}),n&&n!=="en"?t("small",{children:["Generate description…",t("br",{}),"(English)"]}):t("span",{children:"Generate description…"})]}),!!n&&n!=="en"&&t(St,{disabled:p==="loading",onClick:()=>{u("loading"),ie.current=Ee({text:"Generating description. Please wait...",duration:-1}),async function(){var S,$;try{const C=new FormData;C.append("image",F);const N=`?lang=${n}`,ee=await fetch(ut+N,{method:"POST",body:C}).then(oe=>oe.json());if(ee.error)throw new Error(ee.error);de(ee.description)}catch(C){Ee(`Failed to generate description${C!=null&&C.message?`: ${C.message}`:""}`)}finally{u("default"),($=(S=ie.current)==null?void 0:S.hideToast)==null||$.call(S)}}()},children:[t(V,{icon:"sparkles2"}),t("small",{children:["Generate description…",t("br",{}),"(",bn(n),")"," ",t("span",{class:"more-insignificant",children:"— experimental"})]})]})]}),t("button",{type:"button",class:"light block",onClick:()=>{P(!1)},disabled:p==="loading",children:"Done"})]})]})]})]})})]})}function gi({lang:s,poll:e,disabled:n,onInput:a=()=>{},maxOptions:r,maxExpiration:p,minExpiration:u,maxCharactersPerOption:v}){const{options:g,expiresIn:R,multiple:F}=e;return t("div",{class:`poll ${F?"multiple":""}`,children:[t("div",{class:"poll-choices",children:g.map((w,L)=>t("div",{class:"poll-choice",children:[t("input",{required:!0,type:"text",value:w,disabled:n,maxlength:v,placeholder:`Choice ${L+1}`,lang:s,spellCheck:"true",dir:"auto",onInput:J=>{const{value:D}=J.target;g[L]=D,a(e)}}),t("button",{type:"button",class:"plain2 poll-button",disabled:n||g.length<=1,onClick:()=>{g.splice(L,1),a(e)},children:t(V,{icon:"x",size:"s"})})]},L))}),t("div",{class:"poll-toolbar",children:[t("button",{type:"button",class:"plain2 poll-button",disabled:n||g.length>=r,onClick:()=>{g.push(""),a(e)},children:"+"})," ",t("label",{class:"multiple-choices",children:[t("input",{type:"checkbox",checked:F,disabled:n,onChange:w=>{const{checked:L}=w.target;e.multiple=L,a(e)}})," ","Multiple choices"]}),t("label",{class:"expires-in",children:["Duration"," ",t("select",{value:R,disabled:n,onChange:w=>{const{value:L}=w.target;e.expiresIn=L,a(e)},children:Object.entries(Kt).filter(([w,L])=>L>=u&&L<=p).map(([w,L])=>t("option",{value:L,children:w},L))})]})]}),t("div",{class:"poll-toolbar",children:t("button",{type:"button",class:"plain remove-poll-button",disabled:n,onClick:()=>{a(null)},children:"Remove poll"})})]})}function ye(s){return s.replace(/[&<>"']/g,function(e){return"&#"+e.charCodeAt(0)+";"})}function Ot(s){for(let e in s)(s[e]===null||s[e]===void 0)&&delete s[e];return s}function fi({onClose:s=()=>{},onSelect:e=()=>{},defaultSearchTerm:n}){const{masto:a}=bt(),[r,p]=U("default"),[u,v]=U([]),[g,R]=U({}),[F,w]=U(0),L=async l=>{if(!(l!=null&&l.length))return;const d=await yn(l,g);d&&R({...g,...d})},J=l=>{l&&(p("loading"),(async()=>{try{const d=await a.v1.accounts.search.list({q:l,limit:40,resolve:!1});v(d),L(d),p("default")}catch{p("error")}})())},D=Qe(J,1e3);te(()=>{J()},[J]);const I=q();te(()=>{I.current&&(I.current.focus(),I.current.value&&(I.current.selectionStart=I.current.value.length,I.current.selectionEnd=I.current.value.length))},[]),te(()=>{n&&J(n)},[n]);const se=l=>{const d=l.acct;e(d),s()};_e("enter",()=>{const l=u[F];l&&se(l)},{preventDefault:!0,enableOnFormTags:["input"]});const X=q();return _e("down",()=>{F{const l=X.current.querySelector(".selected");l&&l.scrollIntoView({behavior:"smooth",block:"center",inline:"center"})},1)},{preventDefault:!0,enableOnFormTags:["input"]}),_e("up",()=>{F>0?w(F-1):w(u.length-1),setTimeout(()=>{const l=X.current.querySelector(".selected");l&&l.scrollIntoView({behavior:"smooth",block:"center",inline:"center"})},1)},{preventDefault:!0,enableOnFormTags:["input"]}),t("div",{id:"mention-sheet",class:"sheet",children:[!!s&&t("button",{type:"button",class:"sheet-close",onClick:s,children:t(V,{icon:"x"})}),t("header",{children:t("form",{onSubmit:l=>{var d;l.preventDefault(),(d=D.flush)==null||d.call(D)},children:t("input",{ref:I,required:!0,type:"search",class:"block",placeholder:"Search accounts",onInput:l=>{const{value:d}=l.target;D(d)},autocomplete:"off",autocorrect:"off",autocapitalize:"off",spellCheck:"false",dir:"auto",defaultValue:n||""})})}),t("main",{children:(u==null?void 0:u.length)>0?t("ul",{ref:X,class:`accounts-list ${r==="loading"?"loading":""}`,children:u.map((l,d)=>{const h=g[l.id];return t("li",{class:d===F?"selected":"",children:[t(Ht,{avatarSize:"xxl",account:l,relationship:h,showStats:!0,showActivity:!0}),t("button",{type:"button",class:"plain2",onClick:()=>{se(l)},children:t(V,{icon:"plus",size:"xl"})})]},l.id)})}):r==="loading"?t("div",{class:"ui-state",children:t(et,{abrupt:!0})}):r==="error"?t("div",{class:"ui-state",children:t("p",{children:"Error loading accounts"})}):null})]})}function vi({masto:s,instance:e,onClose:n=()=>{},onSelect:a=()=>{},defaultSearchTerm:r}){const[p,u]=U("default"),v=q([]),[g,R]=U([]),F=Re(()=>ze.account.get("recentlyUsedCustomEmojis")||[]),w=q();te(()=>{u("loading"),(async()=>{try{const[d,h]=await Gt(e,s);w.current=h,R(d),u("default")}catch{u("error")}})()},[]);const L=Re(()=>{const d={"--recent--":F.filter(f=>g.find(k=>k.shortcode===f.shortcode))},h=[];return g.forEach(f=>{var k,x;if((x=(k=v.current)==null?void 0:k.push)==null||x.call(k,f),!f.category){h.push(f);return}d[f.category]||(d[f.category]=[]),d[f.category].push(f)}),h.length&&(d["--others--"]=h),d},[g]),J=q(),[D,I]=U(null),se=It(d=>{var f,k,x;const{value:h}=d.target;if(h){const T=(f=w.current)==null?void 0:f.search(h,{limit:vt});I(T.map(K=>K.item)),(x=(k=J.current)==null?void 0:k.scrollTo)==null||x.call(k,0,0)}else I(null)},[g]);te(()=>{r&&(g!=null&&g.length)&&se({target:{value:r}})},[r,se,g]);const X=It(d=>{a==null||a(d),n==null||n(),queueMicrotask(()=>{let h=ze.account.get("recentlyUsedCustomEmojis")||[];const f=h.findIndex(k=>k.shortcode===d.shortcode);f!==-1?(h.splice(f,1),h.unshift(d)):(h.unshift(d),h=h.filter(k=>{var x,T;return(T=(x=v.current)==null?void 0:x.find)==null?void 0:T.call(x,K=>K.shortcode===k.shortcode)}),h=h.slice(0,10)),ze.account.set("recentlyUsedCustomEmojis",h)})},[a]),l=q();return te(()=>{l.current&&(l.current.focus(),l.current.value&&(l.current.selectionStart=l.current.value.length,l.current.selectionEnd=l.current.value.length))},[]),t("div",{id:"custom-emojis-sheet",class:"sheet",children:[!!n&&t("button",{type:"button",class:"sheet-close",onClick:n,children:t(V,{icon:"x"})}),t("header",{children:[t("div",{children:[t("b",{children:"Custom emojis"})," ",p==="loading"?t(et,{}):t("small",{class:"insignificant",children:[" • ",e]})]}),t("form",{onSubmit:d=>{d.preventDefault();const h=D[0];h&&X(`:${h.shortcode}:`)},children:t("input",{ref:l,type:"search",placeholder:"Search emoji",onInput:se,autocomplete:"off",autocorrect:"off",autocapitalize:"off",spellCheck:"false",dir:"auto",defaultValue:r||""})})]}),t("main",{ref:J,children:D!==null?t("ul",{class:"custom-emojis-matches custom-emojis-list",children:D.map(d=>t("li",{class:"custom-emojis-match",children:t(Yt,{emoji:d,onClick:()=>{X(`:${d.shortcode}:`)},showCode:!0})},d.shortcode))}):t("div",{class:"custom-emojis-list",children:[p==="error"&&t("div",{class:"ui-state",children:t("p",{children:"Error loading custom emojis"})}),p==="default"&&Object.entries(L).map(([d,h])=>!!(h!=null&&h.length)&&t(Le,{children:[t("div",{class:"section-header",children:{"--recent--":"Recently used","--others--":"Others"}[d]||d}),t(bi,{emojis:h,onSelect:X})]}))]})})]})}const bi=Wt(({emojis:s,onSelect:e})=>{const[n,a]=U(vt),r=s.length>n;return t("section",{children:[s.slice(0,n).map(p=>t(Yt,{emoji:p,onClick:()=>{e(`:${p.shortcode}:`)}},p.shortcode)),r&&t("button",{type:"button",class:"plain small",onClick:()=>a(n+vt),children:[(s.length-n).toLocaleString()," more…"]})]})}),Yt=Wt(({emoji:s,onClick:e,showCode:n})=>{const a=r=>{const u=r.currentTarget.closest("main");if(u){const v=u.getBoundingClientRect(),g=r.currentTarget.getBoundingClientRect(),R=r.currentTarget.classList;g.leftv.right-88?(R.add("edge-right"),R.remove("edge-left")):R.remove("edge-left","edge-right")}};return t("button",{type:"button",className:"plain4",onClick:e,"data-title":n?void 0:s.shortcode,onPointerEnter:a,onFocus:a,children:[t("picture",{children:[!!s.staticUrl&&t("source",{srcSet:s.staticUrl,media:"(prefers-reduced-motion: reduce)"}),t("img",{className:"shortcode-emoji",src:s.url||s.staticUrl,alt:s.shortcode,width:"24",height:"24",loading:"lazy",decoding:"async"})]}),n&&t(Le,{children:[" ",t("code",{children:s.shortcode})]})]})}),ht=20;function yi({onClose:s=()=>{},onSelect:e=()=>{}}){var L,J,D,I,se,X;const[n,a]=U("default"),[r,p]=U([]),u=q(null),v=q(null),g=q(0),R=q(null);function F({offset:l}){var d,h,f;(d=v.current)!=null&&d.value&&(a("loading"),(f=(h=R.current)==null?void 0:h.scrollTo)==null||f.call(h,{top:0,left:0,behavior:"smooth"}),(async()=>{var k;try{const x={api_key:Gn,q:v.current.value,rating:"g",limit:ht,bundle:"messaging_non_clips",offset:l},T=await fetch("https://api.giphy.com/v1/gifs/search?"+new URLSearchParams(x),{referrerPolicy:"no-referrer"}).then(K=>K.json());g.current=((k=T.pagination)==null?void 0:k.offset)||0,p(T),a("results")}catch{a("error")}})())}te(()=>{var l;(l=v.current)==null||l.focus()},[]);const w=Qe(()=>{F({offset:0})},1e3);return t("div",{id:"gif-picker-sheet",class:"sheet",children:[!!s&&t("button",{type:"button",class:"sheet-close",onClick:s,children:t(V,{icon:"x"})}),t("header",{children:t("form",{ref:u,onSubmit:l=>{l.preventDefault(),F({offset:0})},children:[t("input",{ref:v,type:"search",name:"q",placeholder:"Search GIFs",required:!0,autocomplete:"off",autocorrect:"off",autocapitalize:"off",spellCheck:"false",dir:"auto",onInput:w}),t("input",{type:"image",class:"powered-button",src:Wn,width:"86",height:"30"})]})}),t("main",{ref:R,class:n==="loading"?"loading":"",children:[n==="default"&&t("div",{class:"ui-state",children:t("p",{class:"insignificant",children:"Type to search GIFs"})}),n==="loading"&&!((L=r==null?void 0:r.data)!=null&&L.length)&&t("div",{class:"ui-state",children:t(et,{abrupt:!0})}),((J=r==null?void 0:r.data)==null?void 0:J.length)>0?t(Le,{children:[t("ul",{children:r.data.map(l=>{const{id:d,images:h,title:f,alt_text:k}=l,{fixed_height_small:x,fixed_height_downsampled:T,fixed_height:K,original:de}=h,z=x!=null&&x.url?x:T!=null&&T.url?T:K;let{url:Q,webp:G,width:W,height:P}=z;+P>100&&(W=W/P*100,P=100);const ne=URL.parse(Q),O=ne.origin+ne.pathname;let ie;if(G){const ae=URL.parse(G);ie=ae.origin+ae.pathname}return t("li",{children:t("button",{type:"button",onClick:()=>{const{mp4:ae,url:M}=de,S=ae||M,$=URL.parse(S),C=$.origin+$.pathname;s(),e({url:C,type:ae?"video/mp4":"image/gif",alt_text:k||f})},children:t("figure",{style:{"--figure-width":W+"px"},children:[t("picture",{children:[ie&&t("source",{srcset:ie,type:"image/webp"}),t("img",{src:O,width:W,height:P,loading:"lazy",decoding:"async",alt:k,referrerpolicy:"no-referrer",onLoad:ae=>{ae.target.style.backgroundColor="transparent"}})]}),t("figcaption",{children:k||f})]})})},d)})}),t("p",{class:"pagination",children:[((D=r.pagination)==null?void 0:D.offset)>0&&t("button",{type:"button",class:"light small",disabled:n==="loading",onClick:()=>{var l;F({offset:((l=r.pagination)==null?void 0:l.offset)-ht})},children:[t(V,{icon:"chevron-left"}),t("span",{children:"Previous"})]}),t("span",{}),((I=r.pagination)==null?void 0:I.offset)+((se=r.pagination)==null?void 0:se.count)<((X=r.pagination)==null?void 0:X.total_count)&&t("button",{type:"button",class:"light small",disabled:n==="loading",onClick:()=>{var l;F({offset:((l=r.pagination)==null?void 0:l.offset)+ht})},children:[t("span",{children:"Next"})," ",t(V,{icon:"chevron-right"})]})]})]}):n==="results"&&t("div",{class:"ui-state",children:t("p",{children:"No results"})}),n==="error"&&t("div",{class:"ui-state",children:t("p",{children:"Error loading GIFs"})})]})]})}export{Ci as default}; -//# sourceMappingURL=compose-feY08m5z.js.map diff --git a/assets/compose-feY08m5z.js.map b/assets/compose-feY08m5z.js.map deleted file mode 100644 index b35c7f3..0000000 --- a/assets/compose-feY08m5z.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"compose-feY08m5z.js","sources":["../../node_modules/@github/combobox-nav/dist/index.js","../../node_modules/@github/text-expander-element/dist/index.js","../../node_modules/ansi-regex/index.js","../../node_modules/strip-ansi/index.js","../../node_modules/string-length/index.js","../../src/assets/powered-by-giphy.svg","../../src/components/compose.jsx"],"sourcesContent":["export default class Combobox {\n constructor(input, list, { tabInsertsSuggestions, defaultFirstOption } = {}) {\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.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 scrollTo(this.list, target);\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);\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) {\n target.dispatchEvent(new CustomEvent('combobox-commit', { 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}\nfunction scrollTo(container, target) {\n if (!inViewport(container, target)) {\n container.scrollTop = target.offsetTop;\n }\n}\nfunction inViewport(container, element) {\n const scrollTop = container.scrollTop;\n const containerBottom = scrollTop + container.clientHeight;\n const top = element.offsetTop;\n const bottom = top + element.clientHeight;\n return top >= scrollTop && bottom <= containerBottom;\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\n/**\n * A custom element is implemented as a class which extends HTMLElement (in the\n * case of autonomous elements) or the interface you want to customize (in the\n * case of customized built-in elements).\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Web_components/Using_custom_elements#custom_element_lifecycle_callbacks\n */\nclass CustomHTMLElement extends HTMLElement {\n}\n\nclass InputStyleCloneUpdateEvent extends Event {\n constructor() {\n super(\"update\");\n }\n}\nconst CloneRegistry = new WeakMap();\n/**\n * Create 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 InputStyleCloneElement extends CustomHTMLElement {\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;\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.\n *\n * Upon initial creation the clone element will automatically be inserted into the DOM and begin observing the\n * linked input. Only one clone per input can ever exist at a time.\n * @param input The target input to clone.\n */\n static for(input) {\n const clone = CloneRegistry.get(input) ?? new InputStyleCloneElement(input);\n CloneRegistry.set(input, clone);\n return clone;\n }\n /**\n * Avoid constructing directly: Use `InputStyleCloneElement.for` instead.\n * @private\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 = document.createElement(\"div\");\n this.#container.style.position = \"absolute\";\n this.#container.style.pointerEvents = \"none\";\n input.after(this.#container);\n this.#container.appendChild(this);\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 /** @private */\n connectedCallback() {\n const input = this.#inputRef.deref();\n if (!input)\n return this.remove();\n this.style.pointerEvents = \"none\";\n this.style.userSelect = \"none\";\n this.style.overflow = \"hidden\";\n this.style.display = \"block\";\n // Important not to use display:none which would not render the content at all\n this.style.visibility = \"hidden\";\n if (input instanceof HTMLTextAreaElement) {\n this.style.whiteSpace = \"pre-wrap\";\n this.style.wordWrap = \"break-word\";\n }\n else {\n this.style.whiteSpace = \"nowrap\";\n // text in single-line inputs is vertically centered\n this.style.display = \"table-cell\";\n this.style.verticalAlign = \"middle\";\n }\n this.setAttribute(\"aria-hidden\", \"true\");\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 /** @private */\n disconnectedCallback() {\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 const input = this.#inputRef.deref();\n if (input) {\n input.removeEventListener(\"input\", this.#onInput, { capture: true });\n CloneRegistry.delete(input);\n }\n }\n // --- private ---\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.#inputRef.deref();\n if (!input)\n return this.remove();\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.style.height = inputStyle.height;\n this.style.width = inputStyle.width;\n // Immediately re-adjust for browser inconsistencies in scrollbar handling, if necessary\n if (input.clientHeight !== this.clientHeight)\n this.style.height = `calc(${inputStyle.height} + ${input.clientHeight - this.clientHeight}px)`;\n if (input.clientWidth !== this.clientWidth)\n this.style.width = `calc(${inputStyle.width} + ${input.clientWidth - this.clientWidth}px)`;\n // Position on top of the input\n const inputRect = input.getBoundingClientRect();\n const cloneRect = this.getBoundingClientRect();\n this.#xOffset = this.#xOffset + inputRect.left - cloneRect.left;\n this.#yOffset = this.#yOffset + inputRect.top - cloneRect.top;\n this.style.transform = `translate(${this.#xOffset}px, ${this.#yOffset}px)`;\n this.scrollTop = input.scrollTop;\n this.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.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.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// Inspired by https://github.com/github/catalyst/blob/dc284dcf4f82329a9cac5c867462a8fa529b6c40/src/register.ts\ntry {\n customElements.define(\"input-style-clone\", InputStyleCloneElement);\n}\ncatch (e) {\n // Throws DOMException with NotSupportedError if already defined\n if (!(e instanceof DOMException && e.name === \"NotSupportedError\"))\n throw e;\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 InputStyleCloneElement.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.childNodes[0];\n if (textNode) {\n range.setStart(textNode, this.startOffset);\n range.setEnd(textNode, this.endOffset);\n }\n return range;\n }\n}\n\nconst states = new WeakMap();\nclass TextExpander {\n constructor(expander, input) {\n this.expander = expander;\n this.input = input;\n this.combobox = null;\n this.menu = null;\n this.match = null;\n this.justPasted = false;\n this.lookBackIndex = 0;\n this.oninput = this.onInput.bind(this);\n this.onpaste = this.onPaste.bind(this);\n this.onkeydown = this.onKeydown.bind(this);\n this.oncommit = this.onCommit.bind(this);\n this.onmousedown = this.onMousedown.bind(this);\n this.onblur = this.onBlur.bind(this);\n this.interactingWithList = false;\n input.addEventListener('paste', this.onpaste);\n input.addEventListener('input', this.oninput);\n input.addEventListener('keydown', this.onkeydown);\n input.addEventListener('blur', this.onblur);\n }\n destroy() {\n this.input.removeEventListener('paste', this.onpaste);\n this.input.removeEventListener('input', this.oninput);\n this.input.removeEventListener('keydown', this.onkeydown);\n this.input.removeEventListener('blur', this.onblur);\n }\n dismissMenu() {\n if (this.deactivate()) {\n this.lookBackIndex = this.input.selectionEnd || this.lookBackIndex;\n }\n }\n activate(match, menu) {\n var _a, _b;\n if (this.input !== document.activeElement && this.input !== ((_b = (_a = document.activeElement) === null || _a === void 0 ? void 0 : _a.shadowRoot) === null || _b === void 0 ? void 0 : _b.activeElement)) {\n return;\n }\n this.deactivate();\n this.menu = menu;\n if (!menu.id)\n menu.id = `text-expander-${Math.floor(Math.random() * 100000).toString()}`;\n this.expander.append(menu);\n this.combobox = new Combobox(this.input, menu);\n this.expander.dispatchEvent(new Event('text-expander-activate'));\n this.positionMenu(menu, match.position);\n this.combobox.start();\n menu.addEventListener('combobox-commit', this.oncommit);\n menu.addEventListener('mousedown', this.onmousedown);\n this.combobox.navigate(1);\n }\n positionMenu(menu, position) {\n const caretRect = new InputRange(this.input, position).getBoundingClientRect();\n const targetPosition = { left: caretRect.left, top: caretRect.top + caretRect.height };\n const currentPosition = menu.getBoundingClientRect();\n const delta = {\n left: targetPosition.left - currentPosition.left,\n top: targetPosition.top - currentPosition.top\n };\n if (delta.left !== 0 || delta.top !== 0) {\n const currentStyle = getComputedStyle(menu);\n menu.style.left = currentStyle.left ? `calc(${currentStyle.left} + ${delta.left}px)` : `${delta.left}px`;\n menu.style.top = currentStyle.top ? `calc(${currentStyle.top} + ${delta.top}px)` : `${delta.top}px`;\n }\n }\n deactivate() {\n const menu = this.menu;\n if (!menu || !this.combobox)\n return false;\n this.expander.dispatchEvent(new Event('text-expander-deactivate'));\n this.menu = null;\n menu.removeEventListener('combobox-commit', this.oncommit);\n menu.removeEventListener('mousedown', this.onmousedown);\n this.combobox.destroy();\n this.combobox = null;\n menu.remove();\n return true;\n }\n onCommit({ target }) {\n var _a;\n const item = target;\n if (!(item instanceof HTMLElement))\n return;\n if (!this.combobox)\n return;\n const match = this.match;\n if (!match)\n return;\n const beginning = this.input.value.substring(0, match.position - match.key.length);\n const remaining = this.input.value.substring(match.position + match.text.length);\n const detail = { item, key: match.key, value: null, continue: false };\n const canceled = !this.expander.dispatchEvent(new CustomEvent('text-expander-value', { cancelable: true, detail }));\n if (canceled)\n return;\n if (!detail.value)\n return;\n let suffix = (_a = this.expander.getAttribute('suffix')) !== null && _a !== void 0 ? _a : ' ';\n if (detail.continue) {\n suffix = '';\n }\n const value = `${detail.value}${suffix}`;\n this.input.value = beginning + value + remaining;\n const cursor = beginning.length + value.length;\n this.deactivate();\n this.input.focus({\n preventScroll: true\n });\n this.input.selectionStart = cursor;\n this.input.selectionEnd = cursor;\n if (!detail.continue) {\n this.lookBackIndex = cursor;\n this.match = null;\n }\n this.expander.dispatchEvent(new CustomEvent('text-expander-committed', { cancelable: false, detail: { input: this.input } }));\n }\n onBlur() {\n if (this.interactingWithList) {\n this.interactingWithList = false;\n return;\n }\n this.deactivate();\n }\n onPaste() {\n this.justPasted = true;\n }\n async onInput() {\n if (this.justPasted) {\n this.justPasted = false;\n return;\n }\n const match = this.findMatch();\n if (match) {\n this.match = match;\n const menu = await this.notifyProviders(match);\n if (!this.match)\n return;\n if (menu) {\n this.activate(match, menu);\n }\n else {\n this.deactivate();\n }\n }\n else {\n this.match = null;\n this.deactivate();\n }\n }\n findMatch() {\n const cursor = this.input.selectionEnd || 0;\n const text = this.input.value;\n if (cursor <= this.lookBackIndex) {\n this.lookBackIndex = cursor - 1;\n }\n for (const { key, multiWord } of this.expander.keys) {\n const found = query(text, key, cursor, {\n multiWord,\n lookBackIndex: this.lookBackIndex,\n lastMatchPosition: this.match ? this.match.position : null\n });\n if (found) {\n return { text: found.text, key, position: found.position };\n }\n }\n }\n async notifyProviders(match) {\n const providers = [];\n const provide = (result) => providers.push(result);\n const canceled = !this.expander.dispatchEvent(new CustomEvent('text-expander-change', { cancelable: true, detail: { provide, text: match.text, key: match.key } }));\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 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 default TextExpanderElement;\n","export default function ansiRegex({onlyFirst = false} = {}) {\n\tconst pattern = [\n\t '[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)',\n\t\t'(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-ntqry=><~]))'\n\t].join('|');\n\n\treturn new RegExp(pattern, onlyFirst ? undefined : 'g');\n}\n","import ansiRegex from 'ansi-regex';\n\nconst regex = ansiRegex();\n\nexport default function stripAnsi(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError(`Expected a \\`string\\`, got \\`${typeof string}\\``);\n\t}\n\n\t// Even though the regex is global, we don't need to reset the `.lastIndex`\n\t// because unlike `.exec()` and `.test()`, `.replace()` does it automatically\n\t// and doing it manually has a performance penalty.\n\treturn string.replace(regex, '');\n}\n","import stripAnsi from 'strip-ansi';\n\nconst segmenter = new Intl.Segmenter();\n\nexport default function stringLength(string, {countAnsiEscapeCodes = false} = {}) {\n\tif (string === '') {\n\t\treturn 0;\n\t}\n\n\tif (!countAnsiEscapeCodes) {\n\t\tstring = stripAnsi(string);\n\t}\n\n\tif (string === '') {\n\t\treturn 0;\n\t}\n\n\tlet length = 0;\n\n\tfor (const _ of segmenter.segment(string)) { // eslint-disable-line no-unused-vars\n\t\tlength++;\n\t}\n\n\treturn length;\n}\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 './compose.css';\nimport '@github/text-expander-element';\n\nimport { MenuItem } from '@szhsin/react-menu';\nimport { deepEqual } from 'fast-equals';\nimport Fuse from 'fuse.js';\nimport { forwardRef, memo } from 'preact/compat';\nimport {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'preact/hooks';\nimport { useHotkeys } from 'react-hotkeys-hook';\nimport stringLength from 'string-length';\nimport { detectAll } from 'tinyld/light';\nimport { uid } from 'uid/single';\nimport { useDebouncedCallback, useThrottledCallback } from 'use-debounce';\nimport { useSnapshot } from 'valtio';\n\nimport poweredByGiphyURL from '../assets/powered-by-giphy.svg';\n\nimport Menu2 from '../components/menu2';\nimport supportedLanguages from '../data/status-supported-languages';\nimport urlRegex from '../data/url-regex';\nimport { api } from '../utils/api';\nimport db from '../utils/db';\nimport emojifyText from '../utils/emojify-text';\nimport isRTL from '../utils/is-rtl';\nimport localeMatch from '../utils/locale-match';\nimport localeCode2Text from '../utils/localeCode2Text';\nimport openCompose from '../utils/open-compose';\nimport pmem from '../utils/pmem';\nimport { fetchRelationships } from '../utils/relationships';\nimport shortenNumber from '../utils/shorten-number';\nimport showToast from '../utils/show-toast';\nimport states, { saveStatus } from '../utils/states';\nimport store from '../utils/store';\nimport {\n getCurrentAccount,\n getCurrentAccountNS,\n getCurrentInstance,\n getCurrentInstanceConfiguration,\n} from '../utils/store-utils';\nimport supports from '../utils/supports';\nimport useCloseWatcher from '../utils/useCloseWatcher';\nimport useInterval from '../utils/useInterval';\nimport visibilityIconsMap from '../utils/visibility-icons-map';\n\nimport AccountBlock from './account-block';\n// import Avatar from './avatar';\nimport Icon from './icon';\nimport Loader from './loader';\nimport Modal from './modal';\nimport Status from './status';\n\nconst {\n PHANPY_IMG_ALT_API_URL: IMG_ALT_API_URL,\n PHANPY_GIPHY_API_KEY: GIPHY_API_KEY,\n} = import.meta.env;\n\nconst supportedLanguagesMap = supportedLanguages.reduce((acc, l) => {\n const [code, common, native] = l;\n acc[code] = {\n common,\n native,\n };\n return acc;\n}, {});\n\n/* NOTES:\n - Max character limit includes BOTH status text and Content Warning text\n*/\n\nconst expiryOptions = {\n '5 minutes': 5 * 60,\n '30 minutes': 30 * 60,\n '1 hour': 60 * 60,\n '6 hours': 6 * 60 * 60,\n '12 hours': 12 * 60 * 60,\n '1 day': 24 * 60 * 60,\n '3 days': 3 * 24 * 60 * 60,\n '7 days': 7 * 24 * 60 * 60,\n};\nconst expirySeconds = Object.values(expiryOptions);\nconst oneDay = 24 * 60 * 60;\n\nconst expiresInFromExpiresAt = (expiresAt) => {\n if (!expiresAt) return oneDay;\n const delta = (new Date(expiresAt).getTime() - Date.now()) / 1000;\n return expirySeconds.find((s) => s >= delta) || oneDay;\n};\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\nconst DEFAULT_LANG = localeMatch(\n [new Intl.DateTimeFormat().resolvedOptions().locale, ...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 urlRegexObj = new RegExp(urlRegex.source, urlRegex.flags);\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// 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])(#[a-z0-9_]+([a-z0-9_.]+[a-z0-9_]+)?)(?![\\\\/\\\\w])`,\n 'ig',\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();\nfunction escapeHTML(text) {\n return text\n .replace(/&/g, '&')\n .replace(//g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\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 '' +\n escapeHTML(exceedLimitHTML) +\n '';\n }\n return escapeHTML(withinLimitHTML) + exceedLimitHTML;\n }\n\n return escapeHTML(text)\n .replace(urlRegexObj, '$2$3') // URLs\n .replace(MENTION_RE, '$1$2') // Mentions\n .replace(HASHTAG_RE, '$1$2') // Hashtags\n .replace(\n SCAN_RE,\n '$1$2',\n ); // Emoji shortcodes\n}\n\nconst rtf = new Intl.RelativeTimeFormat();\n\nconst CUSTOM_EMOJIS_COUNT = 100;\n\nfunction Compose({\n onClose,\n replyToStatus,\n editStatus,\n draftStatus,\n standalone,\n hasOpener,\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 = 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,\n charactersReservedPerUrl,\n } = {},\n mediaAttachments: {\n supportedMimeTypes = [],\n imageSizeLimit,\n imageMatrixLimit,\n videoSizeLimit,\n videoMatrixLimit,\n videoFrameRateLimit,\n } = {},\n polls: {\n maxOptions,\n maxCharactersPerOption,\n maxExpiration,\n minExpiration,\n } = {},\n } = configuration || {};\n\n const textareaRef = useRef();\n const spoilerTextRef = useRef();\n const [visibility, setVisibility] = useState('public');\n const [sensitive, setSensitive] = 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\n const prefs = store.account.get('preferences') || {};\n\n const oninputTextarea = () => {\n if (!textareaRef.current) return;\n textareaRef.current.dispatchEvent(new Event('input'));\n };\n const focusTextarea = () => {\n setTimeout(() => {\n if (!textareaRef.current) return;\n // status starts with newline, focus on first position\n if (draftStatus?.status?.startsWith?.('\\n')) {\n textareaRef.current.selectionStart = 0;\n textareaRef.current.selectionEnd = 0;\n }\n console.debug('FOCUS textarea');\n textareaRef.current?.focus();\n }, 300);\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 if (allMentions.length > 0) {\n textareaRef.current.value = `${allMentions\n .map((m) => `@${m}`)\n .join(' ')} `;\n oninputTextarea();\n }\n focusTextarea();\n setVisibility(\n visibility === 'public' && prefs['posting:default:visibility']\n ? prefs['posting:default:visibility'].toLowerCase()\n : visibility,\n );\n setLanguage(\n language ||\n prefs['posting:default:language']?.toLowerCase() ||\n DEFAULT_LANG,\n );\n setSensitive(sensitive && !!spoilerText);\n } else if (editStatus) {\n const { visibility, language, sensitive, poll, mediaAttachments } =\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 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 }\n if (draftStatus) {\n const {\n status,\n spoilerText,\n visibility,\n language,\n sensitive,\n poll,\n mediaAttachments,\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 focusTextarea();\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 (sensitive !== null) setSensitive(sensitive);\n if (composablePoll) setPoll(composablePoll);\n if (mediaAttachments) setMediaAttachments(mediaAttachments);\n }\n }, [draftStatus, editStatus, replyToStatus]);\n\n const formRef = useRef();\n\n const beforeUnloadCopy = '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\", including multiple mentions like \"@username1@username2\"\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 },\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 hasModal && !hasOnlyComposer;\n },\n },\n );\n useCloseWatcher(() => {\n if (!standalone && confirmClose()) {\n onClose();\n }\n }, [standalone, confirmClose, onClose]);\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 poll,\n mediaAttachments,\n },\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 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 const file = item.getAsFile();\n if (file && supportedMimeTypes.includes(file.type)) {\n files.push(file);\n }\n }\n }\n if (files.length > 0 && mediaAttachments.length >= maxMediaAttachments) {\n alert(`You can only attach up to ${maxMediaAttachments} files.`);\n return;\n }\n console.log({ files });\n if (files.length > 0) {\n e.preventDefault();\n e.stopPropagation();\n // Auto-cut-off files to avoid exceeding maxMediaAttachments\n const max = maxMediaAttachments - mediaAttachments.length;\n const allowedFiles = files.slice(0, max);\n if (allowedFiles.length <= 0) {\n alert(`You can only attach up to ${maxMediaAttachments} files.`);\n return;\n }\n const mediaFiles = allowedFiles.map((file) => ({\n file,\n type: file.type,\n size: file.size,\n url: URL.createObjectURL(file),\n id: null,\n description: null,\n }));\n setMediaAttachments([...mediaAttachments, ...mediaFiles]);\n }\n };\n window.addEventListener('paste', handleItems);\n const handleDragover = (e) => {\n // Prevent default if there's files\n if (e.dataTransfer.items.length > 0) {\n e.preventDefault();\n e.stopPropagation();\n }\n };\n window.addEventListener('dragover', handleDragover);\n window.addEventListener('drop', handleItems);\n return () => {\n window.removeEventListener('paste', handleItems);\n window.removeEventListener('dragover', handleDragover);\n window.removeEventListener('drop', handleItems);\n };\n }, [mediaAttachments]);\n\n const [showMentionPicker, setShowMentionPicker] = useState(false);\n const [showEmoji2Picker, setShowEmoji2Picker] = useState(false);\n const [showGIFPicker, setShowGIFPicker] = useState(false);\n\n const [autoDetectedLanguages, setAutoDetectedLanguages] = useState(null);\n const [topSupportedLanguages, restSupportedLanguages] = useMemo(() => {\n const topLanguages = [];\n const restLanguages = [];\n const { contentTranslationHideLanguages = [] } = states.settings;\n supportedLanguages.forEach((l) => {\n const [code] = l;\n if (\n code === language ||\n code === prevLanguage.current ||\n code === DEFAULT_LANG ||\n contentTranslationHideLanguages.includes(code) ||\n (autoDetectedLanguages?.length && autoDetectedLanguages.includes(code))\n ) {\n topLanguages.push(l);\n } else {\n restLanguages.push(l);\n }\n });\n topLanguages.sort(([codeA, commonA], [codeB, commonB]) => {\n if (codeA === language) return -1;\n if (codeB === language) return 1;\n return commonA.localeCompare(commonB);\n });\n restLanguages.sort(([codeA, commonA], [codeB, commonB]) =>\n commonA.localeCompare(commonB),\n );\n return [topLanguages, restLanguages];\n }, [language, autoDetectedLanguages]);\n\n const replyToStatusMonthsAgo = useMemo(\n () =>\n !!replyToStatus?.createdAt &&\n Math.floor(\n (Date.now() - new Date(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 return (\n
    \n
    \n
    \n {currentAccountInfo?.avatarStatic && (\n // \n \n )}\n {!standalone ? (\n \n {\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 },\n });\n\n if (!newWin) {\n return;\n }\n\n onClose();\n }}\n >\n \n \n \n \n {' '}\n {\n if (confirmClose()) {\n onClose();\n }\n }}\n >\n \n \n \n ) : (\n hasOpener && (\n {\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('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 '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 =\n '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 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 },\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 \n \n )\n )}\n
    \n {!!replyToStatus && (\n
    \n \n
    \n Replying to @\n {replyToStatus.account.acct || replyToStatus.account.username}\n ’s post\n {replyToStatusMonthsAgo >= 3 && (\n <>\n {' '}\n (\n \n {rtf.format(-replyToStatusMonthsAgo, 'month')}\n \n )\n \n )}\n
    \n
    \n )}\n {!!editStatus && (\n
    \n \n
    Editing source post
    \n
    \n )}\n {\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 { status, visibility, sensitive, spoilerText } = entries;\n\n // Pre-cleanup\n sensitive = sensitive === 'on'; // checkboxes return \"on\" if checked\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('Poll must have at least 2 options');\n return;\n }\n if (poll.options.some((option) => option === '')) {\n alert('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 'Some media have no descriptions. Continue?',\n );\n if (!yes) return;\n }\n }\n\n // Post-cleanup\n spoilerText = (sensitive && spoilerText) || undefined;\n status = status === '' ? undefined : status;\n\n // states.composerState.minimized = true;\n states.composerState.publishing = true;\n setUIState('loading');\n (async () => {\n try {\n console.log('MEDIA ATTACHMENTS', mediaAttachments);\n if (mediaAttachments.length > 0) {\n // Upload media attachments first\n const mediaPromises = mediaAttachments.map((attachment) => {\n const { file, description, id } = attachment;\n console.log('UPLOADING', attachment);\n if (id) {\n // If already uploaded\n return attachment;\n } else {\n const params = removeNullUndefined({\n file,\n description,\n });\n return masto.v2.media.create(params).then((res) => {\n if (res.id) {\n attachment.id = res.id;\n }\n return res;\n });\n }\n });\n const results = await Promise.allSettled(mediaPromises);\n\n // If any failed, return\n if (\n results.some((result) => {\n return result.status === 'rejected' || !result.value?.id;\n })\n ) {\n states.composerState.publishing = false;\n states.composerState.publishingError = true;\n setUIState('error');\n // Alert all the reasons\n results.forEach((result) => {\n if (result.status === 'rejected') {\n console.error(result);\n alert(result.reason || `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,\n poll,\n // mediaIds: mediaAttachments.map((attachment) => attachment.id),\n media_ids: mediaAttachments.map(\n (attachment) => attachment.id,\n ),\n };\n if (editStatus && supports('@mastodon/edit-media-attributes')) {\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 } else if (!editStatus) {\n params.visibility = visibility;\n // params.inReplyToId = replyToStatus?.id || undefined;\n params.in_reply_to_id = replyToStatus?.id || undefined;\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 });\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
    \n {\n updateCharCount();\n }}\n />\n \n {\n const sensitive = e.target.checked;\n setSensitive(sensitive);\n if (sensitive) {\n spoilerTextRef.current?.focus();\n } else {\n textareaRef.current?.focus();\n }\n }}\n />\n \n {' '}\n \n \n {\n setVisibility(e.target.value);\n }}\n disabled={uiState === 'loading' || !!editStatus}\n dir=\"auto\"\n >\n \n \n \n \n \n {' '}\n
    \n {\n updateCharCount();\n }}\n maxCharacters={maxCharacters}\n performSearch={(params) => {\n const { type, q, limit } = params;\n if (type === 'accounts') {\n return masto.v1.accounts.search.list({\n q,\n limit,\n resolve: false,\n });\n }\n return masto.v2.search.fetch(params);\n }}\n onTrigger={(action) => {\n if (action?.name === 'custom-emojis') {\n setShowEmoji2Picker({\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 }\n }}\n />\n {mediaAttachments?.length > 0 && (\n
    \n {mediaAttachments.map((attachment, i) => {\n const { id, file } = attachment;\n const fileID = file?.size + file?.type + file?.name;\n return (\n {\n setMediaAttachments((attachments) => {\n const newAttachments = [...attachments];\n newAttachments[i].description = value;\n return newAttachments;\n });\n }}\n onRemove={() => {\n setMediaAttachments((attachments) => {\n return attachments.filter((_, j) => j !== i);\n });\n }}\n />\n );\n })}\n \n
    \n )}\n {!!poll && (\n {\n if (poll) {\n const newPoll = { ...poll };\n setPoll(newPoll);\n } else {\n setPoll(null);\n }\n }}\n />\n )}\n \n \n \n {/* If maxOptions is not defined or defined and is greater than 1, show poll button */}\n {maxOptions == null ||\n (maxOptions > 1 && (\n <>\n {\n setPoll({\n options: ['', ''],\n expiresIn: 24 * 60 * 60, // 1 day\n multiple: false,\n });\n }}\n >\n \n \n \n ))}\n {/* {\n setShowMentionPicker(true);\n }}\n >\n \n */}\n {\n setShowEmoji2Picker(true);\n }}\n >\n \n \n {!!states.settings.composerGIFPicker && (\n = maxMediaAttachments ||\n !!poll\n }\n onClick={() => {\n setShowGIFPicker(true);\n }}\n >\n GIF\n \n )}\n \n
    \n {uiState === 'loading' ? (\n \n ) : (\n
    \n \n
    \n {showMentionPicker && (\n {\n if (e.target === e.currentTarget) {\n setShowMentionPicker(false);\n }\n }}\n >\n {\n setShowMentionPicker(false);\n }}\n defaultSearchTerm={showMentionPicker?.defaultSearchTerm}\n onSelect={(socialAddress) => {\n const textarea = textareaRef.current;\n if (!textarea) return;\n const { selectionStart, selectionEnd } = textarea;\n const text = textarea.value;\n const textBeforeMention = text.slice(0, selectionStart);\n const spaceBeforeMention = textBeforeMention\n ? /[\\s\\t\\n\\r]$/.test(textBeforeMention)\n ? ''\n : ' '\n : '';\n const textAfterMention = text.slice(selectionEnd);\n const spaceAfterMention = /^[\\s\\t\\n\\r]/.test(textAfterMention)\n ? ''\n : ' ';\n const newText =\n textBeforeMention +\n spaceBeforeMention +\n '@' +\n socialAddress +\n spaceAfterMention +\n textAfterMention;\n textarea.value = newText;\n textarea.selectionStart = textarea.selectionEnd =\n selectionEnd +\n 1 +\n socialAddress.length +\n spaceAfterMention.length;\n textarea.focus();\n textarea.dispatchEvent(new Event('input'));\n }}\n />\n \n )}\n {showEmoji2Picker && (\n {\n if (e.target === e.currentTarget) {\n setShowEmoji2Picker(false);\n }\n }}\n >\n {\n setShowEmoji2Picker(false);\n }}\n defaultSearchTerm={showEmoji2Picker?.defaultSearchTerm}\n onSelect={(emojiShortcode) => {\n const textarea = textareaRef.current;\n if (!textarea) return;\n const { selectionStart, selectionEnd } = textarea;\n const text = textarea.value;\n const textBeforeEmoji = text.slice(0, selectionStart);\n const spaceBeforeEmoji = textBeforeEmoji\n ? /[\\s\\t\\n\\r]$/.test(textBeforeEmoji)\n ? ''\n : ' '\n : '';\n const textAfterEmoji = text.slice(selectionEnd);\n const spaceAfterEmoji = /^[\\s\\t\\n\\r]/.test(textAfterEmoji)\n ? ''\n : ' ';\n const newText =\n textBeforeEmoji +\n spaceBeforeEmoji +\n emojiShortcode +\n spaceAfterEmoji +\n textAfterEmoji;\n textarea.value = newText;\n textarea.selectionStart = textarea.selectionEnd =\n selectionEnd + emojiShortcode.length + spaceAfterEmoji.length;\n textarea.focus();\n textarea.dispatchEvent(new Event('input'));\n }}\n />\n \n )}\n {showGIFPicker && (\n {\n if (e.target === e.currentTarget) {\n setShowGIFPicker(false);\n }\n }}\n >\n setShowGIFPicker(false)}\n onSelect={({ url, type, alt_text }) => {\n console.log('GIF URL', url);\n if (mediaAttachments.length >= maxMediaAttachments) {\n alert(\n `You can only attach up to ${maxMediaAttachments} files.`,\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: 'Downloading GIF…',\n duration: -1,\n });\n const blob = await fetch(url, {\n referrerPolicy: 'no-referrer',\n }).then((res) => res.blob());\n const file = new File(\n [blob],\n type === 'video/mp4' ? 'video.mp4' : 'image.gif',\n {\n type,\n },\n );\n const newMediaAttachments = [\n ...mediaAttachments,\n {\n file,\n type,\n size: file.size,\n id: null,\n description: alt_text || '',\n },\n ];\n setMediaAttachments(newMediaAttachments);\n theToast?.hideToast?.();\n } catch (err) {\n console.error(err);\n theToast?.hideToast?.();\n showToast('Failed to download GIF');\n }\n })();\n }}\n />\n \n )}\n
    \n );\n}\n\nfunction autoResizeTextarea(textarea) {\n if (!textarea) return;\n const { value, offsetHeight, scrollHeight, clientHeight } = textarea;\n if (offsetHeight < window.innerHeight) {\n // NOTE: This check is needed because the offsetHeight return 50000 (really large number) on first render\n // No idea why it does that, will re-investigate in far future\n const offset = offsetHeight - clientHeight;\n const height = value ? scrollHeight + offset + 'px' : null;\n textarea.style.height = height;\n }\n}\n\nasync function _getCustomEmojis(instance, masto) {\n const emojis = await masto.v1.customEmojis.list();\n const visibleEmojis = emojis.filter((e) => e.visibleInPicker);\n const searcher = new Fuse(visibleEmojis, {\n keys: ['shortcode'],\n findAllMatches: true,\n });\n return [visibleEmojis, searcher];\n}\nconst getCustomEmojis = pmem(_getCustomEmojis, {\n // Limit by time to reduce memory usage\n // Cached by instance\n matchesArg: (cacheKeyArg, keyArg) => cacheKeyArg.instance === keyArg.instance,\n maxAge: 30 * 60 * 1000, // 30 minutes\n});\n\nconst detectLangs = (text) => {\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 { masto, instance } = api();\n const [text, setText] = useState(ref.current?.value || '');\n const {\n maxCharacters,\n performSearch = () => {},\n onTrigger = () => {},\n ...textareaProps\n } = props;\n // const snapStates = useSnapshot(states);\n // const charCount = snapStates.composerCharacterCount;\n\n // const customEmojis = useRef();\n const searcherRef = useRef();\n useEffect(() => {\n getCustomEmojis(instance, masto)\n .then((r) => {\n const [emojis, searcher] = r;\n searcherRef.current = searcher;\n })\n .catch((e) => {\n console.error(e);\n });\n }, []);\n\n const textExpanderRef = useRef();\n const textExpanderTextRef = useRef('');\n useEffect(() => {\n let handleChange, handleValue, handleCommited;\n if (textExpanderRef.current) {\n handleChange = (e) => {\n // console.log('text-expander-change', 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 emojis = customEmojis.current.filter((emoji) =>\n // emoji.shortcode.startsWith(text),\n // );\n // const emojis = filterShortcodes(customEmojis.current, text);\n const results = searcherRef.current?.search(text, {\n limit: 5,\n });\n let html = '';\n results.forEach(({ item: emoji }) => {\n const { shortcode, url } = emoji;\n html += `\n
  • \n \"\" \n ${encodeHTML(shortcode)}\n
  • `;\n });\n html += `
  • More…
  • `;\n // console.log({ emojis, html });\n menu.innerHTML = html;\n provide(\n Promise.resolve({\n matched: results.length > 0,\n fragment: menu,\n }),\n );\n return;\n }\n\n const type = {\n '@': 'accounts',\n '#': 'hashtags',\n }[key];\n provide(\n new Promise((resolve) => {\n const searchResults = performSearch({\n type,\n q: text,\n limit: 5,\n });\n searchResults.then((value) => {\n if (text !== textExpanderTextRef.current) {\n return;\n }\n console.log({ value, type, v: value[type] });\n const results = value[type] || value;\n console.log('RESULTS', value, results);\n let html = '';\n results.forEach((result) => {\n const {\n name,\n avatarStatic,\n displayName,\n username,\n acct,\n emojis,\n history,\n } = result;\n const displayNameWithEmoji = emojifyText(displayName, emojis);\n // const item = menuItem.cloneNode();\n if (acct) {\n html += `\n
  • \n \n \"\"\n \n \n ${displayNameWithEmoji || username}\n
    @${encodeHTML(\n acct,\n )}\n
    \n
  • \n `;\n } else {\n const total = history?.reduce?.(\n (acc, cur) => acc + +cur.uses,\n 0,\n );\n html += `\n
  • \n #${encodeHTML(name)}\n ${\n total\n ? `${shortenNumber(total)}`\n : ''\n }\n
  • \n `;\n }\n });\n if (type === 'accounts') {\n html += `
  • More…
  • `;\n }\n menu.innerHTML = html;\n console.log('MENU', results, menu);\n resolve({\n matched: results.length > 0,\n fragment: menu,\n });\n });\n }),\n );\n };\n\n textExpanderRef.current.addEventListener(\n 'text-expander-change',\n handleChange,\n );\n\n handleValue = (e) => {\n const { key, item } = e.detail;\n const { value, more } = item.dataset;\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 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 textExpanderRef.current.addEventListener(\n 'text-expander-value',\n handleValue,\n );\n\n handleCommited = (e) => {\n const { input } = e.detail;\n setText(input.value);\n // fire input event\n if (ref.current) {\n const event = new Event('input', { bubbles: true });\n ref.current.dispatchEvent(event);\n }\n };\n\n textExpanderRef.current.addEventListener(\n 'text-expander-committed',\n handleCommited,\n );\n }\n\n return () => {\n if (textExpanderRef.current) {\n textExpanderRef.current.removeEventListener(\n 'text-expander-change',\n handleChange,\n );\n textExpanderRef.current.removeEventListener(\n 'text-expander-value',\n handleValue,\n );\n textExpanderRef.current.removeEventListener(\n 'text-expander-committed',\n handleCommited,\n );\n }\n };\n }, []);\n\n useEffect(() => {\n // Resize observer for textarea\n const textarea = ref.current;\n if (!textarea) return;\n const resizeObserver = new ResizeObserver(() => {\n // Get height of textarea, set height to textExpander\n if (textExpanderRef.current) {\n const { height } = textarea.getBoundingClientRect();\n textExpanderRef.current.style.height = height + 'px';\n }\n });\n resizeObserver.observe(textarea);\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 const langs = detectLangs(text);\n if (langs?.length) {\n onTrigger?.({\n name: 'auto-detect-language',\n languages: langs,\n });\n }\n }, 2000);\n\n return (\n \n {\n // Get line before cursor position after pressing 'Enter'\n const { key, target } = e;\n if (key === 'Enter' && !(e.ctrlKey || e.metaKey)) {\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 // Replace zero-width space\n const text = target.value.replace(/\\u200b/g, '');\n setText(text);\n autoResizeTextarea(target);\n props.onInput?.(e);\n throttleHighlightText(text);\n debouncedAutoDetectLanguage();\n }}\n style={{\n width: '100%',\n height: '4em',\n // '--text-weight': (1 + charCount / 140).toFixed(1) || 1,\n }}\n onScroll={(e) => {\n if (composeHighlightRef.current) {\n const { scrollTop } = e.target;\n composeHighlightRef.current.scrollTop = scrollTop;\n }\n }}\n />\n \n \n );\n});\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 \n );\n}\n\nfunction prettyBytes(bytes) {\n const units = ['bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n let unitIndex = 0;\n while (bytes >= 1024) {\n bytes /= 1024;\n unitIndex++;\n }\n return `${bytes.toFixed(0).toLocaleString()} ${units[unitIndex]}`;\n}\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 onDescriptionChange = () => {},\n onRemove = () => {},\n}) {\n const [uiState, setUIState] = useState('default');\n const supportsEdit = supports('@mastodon/edit-media-attributes');\n const { type, id, file } = attachment;\n const url = useMemo(\n () => (file ? URL.createObjectURL(file) : attachment.url),\n [file, attachment.url],\n );\n console.log({ attachment });\n\n const checkMaxError = !!file?.size;\n const configuration = checkMaxError ? getCurrentInstanceConfiguration() : {};\n const {\n mediaAttachments: {\n imageSizeLimit,\n imageMatrixLimit,\n videoSizeLimit,\n videoMatrixLimit,\n videoFrameRateLimit,\n } = {},\n } = configuration || {};\n\n const [maxError, setMaxError] = useState(() => {\n if (!checkMaxError) return null;\n if (\n type.startsWith('image') &&\n imageSizeLimit &&\n file.size > imageSizeLimit\n ) {\n return {\n type: 'imageSizeLimit',\n details: {\n imageSize: file.size,\n imageSizeLimit,\n },\n };\n } else if (\n type.startsWith('video') &&\n videoSizeLimit &&\n file.size > videoSizeLimit\n ) {\n return {\n type: 'videoSizeLimit',\n details: {\n videoSize: file.size,\n videoSizeLimit,\n },\n };\n }\n return null;\n });\n\n const [imageMatrix, setImageMatrix] = useState({});\n useEffect(() => {\n if (!checkMaxError || !imageMatrixLimit) return;\n if (imageMatrix?.matrix > imageMatrixLimit) {\n setMaxError({\n type: 'imageMatrixLimit',\n details: {\n imageMatrix: imageMatrix?.matrix,\n imageMatrixLimit,\n width: imageMatrix?.width,\n height: imageMatrix?.height,\n },\n });\n }\n }, [imageMatrix, imageMatrixLimit, checkMaxError]);\n\n const [videoMatrix, setVideoMatrix] = useState({});\n useEffect(() => {\n if (!checkMaxError || !videoMatrixLimit) return;\n if (videoMatrix?.matrix > videoMatrixLimit) {\n setMaxError({\n type: 'videoMatrixLimit',\n details: {\n videoMatrix: videoMatrix?.matrix,\n videoMatrixLimit,\n width: videoMatrix?.width,\n height: videoMatrix?.height,\n },\n });\n }\n }, [videoMatrix, videoMatrixLimit, checkMaxError]);\n\n const [description, setDescription] = useState(attachment.description);\n const [suffixType, subtype] = type.split('/');\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
    \n Uploaded\n

    \n {attachment.description || No description}\n

    \n
    \n ) : (\n {\n const { value } = e.target;\n setDescription(value);\n // debouncedOnDescriptionChange(value);\n }}\n >\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 `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 `Dimension too large. Uploading might encounter issues. Try reduce dimension from ${width.toLocaleString()}×${height.toLocaleString()}px to ${newWidth.toLocaleString()}×${newHeight.toLocaleString()}px.`;\n }\n case 'videoSizeLimit': {\n const { videoSize, videoSizeLimit } = details;\n return `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 `Dimension too large. Uploading might encounter issues. Try reduce dimension from ${width.toLocaleString()}×${height.toLocaleString()}px to ${newWidth.toLocaleString()}×${newHeight.toLocaleString()}px.`;\n }\n case 'videoFrameRateLimit': {\n // Not possible to detect this on client-side for now\n return 'Frame rate too high. Uploading might encounter issues.';\n }\n }\n };\n\n return (\n <>\n
    \n {\n setShowModal(true);\n }}\n >\n {suffixType === 'image' ? (\n {\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 {\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
    \n {descTextarea}\n
    \n \n \n \n {!!maxError && (\n {\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 \n \n )}\n
    \n \n {showModal && (\n {\n setShowModal(false);\n }}\n >\n
    \n {\n setShowModal(false);\n }}\n >\n \n \n
    \n

    \n {\n {\n image: 'Edit image description',\n video: 'Edit video description',\n audio: 'Edit audio description',\n }[suffixType]\n }\n

    \n
    \n
    \n
    \n {suffixType === 'image' ? (\n \"\"\n ) : suffixType === 'video' || suffixType === 'gifv' ? (\n
    \n
    \n {descTextarea}\n
    \n {suffixType === 'image' &&\n /^(png|jpe?g|gif|webp)$/i.test(subtype) &&\n !!states.settings.mediaAltGenerator &&\n !!IMG_ALT_API_URL && (\n \n \n \n }\n >\n {\n setUIState('loading');\n toastRef.current = showToast({\n text: 'Generating description. Please wait...',\n duration: -1,\n });\n // POST with multipart\n (async function () {\n try {\n const body = new FormData();\n body.append('image', file);\n const response = await fetch(IMG_ALT_API_URL, {\n method: 'POST',\n body,\n }).then((r) => r.json());\n if (response.error) {\n throw new Error(response.error);\n }\n setDescription(response.description);\n } catch (e) {\n console.error(e);\n showToast(\n `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 \n {lang && lang !== 'en' ? (\n \n Generate description…\n
    \n (English)\n
    \n ) : (\n Generate description…\n )}\n \n {!!lang && lang !== 'en' && (\n {\n setUIState('loading');\n toastRef.current = showToast({\n text: 'Generating description. Please wait...',\n duration: -1,\n });\n // POST with multipart\n (async function () {\n try {\n const body = new FormData();\n body.append('image', file);\n const params = `?lang=${lang}`;\n const response = await fetch(\n IMG_ALT_API_URL + params,\n {\n method: 'POST',\n body,\n },\n ).then((r) => r.json());\n if (response.error) {\n throw new Error(response.error);\n }\n setDescription(response.description);\n } catch (e) {\n console.error(e);\n showToast(\n `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 \n \n Generate description…\n
    ({localeCode2Text(lang)}){' '}\n \n — experimental\n \n
    \n \n )}\n \n )}\n {\n setShowModal(false);\n }}\n disabled={uiState === 'loading'}\n >\n Done\n \n
    \n
    \n
    \n
    \n \n )}\n \n );\n}\n\nfunction Poll({\n lang,\n poll,\n disabled,\n onInput = () => {},\n maxOptions,\n maxExpiration,\n minExpiration,\n maxCharactersPerOption,\n}) {\n const { options, expiresIn, multiple } = poll;\n\n return (\n
    \n
    \n {options.map((option, i) => (\n
    \n {\n const { value } = e.target;\n options[i] = value;\n onInput(poll);\n }}\n />\n {\n options.splice(i, 1);\n onInput(poll);\n }}\n >\n \n \n
    \n ))}\n
    \n
    \n = maxOptions}\n onClick={() => {\n options.push('');\n onInput(poll);\n }}\n >\n +\n {' '}\n \n \n
    \n
    \n {\n onInput(null);\n }}\n >\n Remove poll\n \n
    \n
    \n );\n}\n\nfunction filterShortcodes(emojis, searchTerm) {\n searchTerm = searchTerm.toLowerCase();\n\n // Return an array of shortcodes that start with or contain the search term, sorted by relevance and limited to the first 5\n return emojis\n .sort((a, b) => {\n let aLower = a.shortcode.toLowerCase();\n let bLower = b.shortcode.toLowerCase();\n\n let aStartsWith = aLower.startsWith(searchTerm);\n let bStartsWith = bLower.startsWith(searchTerm);\n let aContains = aLower.includes(searchTerm);\n let bContains = bLower.includes(searchTerm);\n let bothStartWith = aStartsWith && bStartsWith;\n let bothContain = aContains && bContains;\n\n return bothStartWith\n ? a.length - b.length\n : aStartsWith\n ? -1\n : bStartsWith\n ? 1\n : bothContain\n ? a.length - b.length\n : aContains\n ? -1\n : bContains\n ? 1\n : 0;\n })\n .slice(0, 5);\n}\n\nfunction encodeHTML(str) {\n return str.replace(/[&<>\"']/g, function (char) {\n return '&#' + char.charCodeAt(0) + ';';\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\nfunction MentionModal({\n onClose = () => {},\n onSelect = () => {},\n defaultSearchTerm,\n}) {\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 },\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 },\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 },\n );\n\n return (\n
    \n {!!onClose && (\n \n )}\n
    \n {\n e.preventDefault();\n debouncedLoadAccounts.flush?.();\n // const searchTerm = inputRef.current.value;\n // debouncedLoadAccounts(searchTerm);\n }}\n >\n {\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 defaultValue={defaultSearchTerm || ''}\n />\n \n
    \n
    \n {accounts?.length > 0 ? (\n \n {accounts.map((account, i) => {\n const relationship = relationshipsMap[account.id];\n return (\n \n \n {\n selectAccount(account);\n }}\n >\n \n \n \n );\n })}\n \n ) : uiState === 'loading' ? (\n
    \n \n
    \n ) : uiState === 'error' ? (\n
    \n

    Error loading accounts

    \n
    \n ) : null}\n
    \n
    \n );\n}\n\nfunction CustomEmojisModal({\n masto,\n instance,\n onClose = () => {},\n onSelect = () => {},\n defaultSearchTerm,\n}) {\n const [uiState, setUIState] = useState('default');\n const customEmojisList = useRef([]);\n const [customEmojis, setCustomEmojis] = useState([]);\n const recentlyUsedCustomEmojis = useMemo(\n () => store.account.get('recentlyUsedCustomEmojis') || [],\n );\n const searcherRef = useRef();\n useEffect(() => {\n setUIState('loading');\n (async () => {\n try {\n const [emojis, searcher] = await getCustomEmojis(instance, masto);\n console.log('emojis', emojis);\n searcherRef.current = searcher;\n setCustomEmojis(emojis);\n setUIState('default');\n } catch (e) {\n setUIState('error');\n console.error(e);\n }\n })();\n }, []);\n\n const customEmojisCatList = useMemo(() => {\n // Group emojis by category\n const emojisCat = {\n '--recent--': recentlyUsedCustomEmojis.filter((emoji) =>\n customEmojis.find((e) => e.shortcode === emoji.shortcode),\n ),\n };\n const othersCat = [];\n customEmojis.forEach((emoji) => {\n customEmojisList.current?.push?.(emoji);\n if (!emoji.category) {\n othersCat.push(emoji);\n return;\n }\n if (!emojisCat[emoji.category]) {\n emojisCat[emoji.category] = [];\n }\n emojisCat[emoji.category].push(emoji);\n });\n if (othersCat.length) {\n emojisCat['--others--'] = othersCat;\n }\n return emojisCat;\n }, [customEmojis]);\n\n const scrollableRef = useRef();\n const [matches, setMatches] = useState(null);\n const 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 return (\n
    \n {!!onClose && (\n \n )}\n
    \n
    \n Custom emojis{' '}\n {uiState === 'loading' ? (\n \n ) : (\n • {instance}\n )}\n
    \n {\n e.preventDefault();\n const emoji = matches[0];\n if (emoji) {\n onSelectEmoji(`:${emoji.shortcode}:`);\n }\n }}\n >\n \n \n
    \n
    \n {matches !== null ? (\n
      \n {matches.map((emoji) => (\n
    • \n {\n onSelectEmoji(`:${emoji.shortcode}:`);\n }}\n showCode\n />\n
    • \n ))}\n
    \n ) : (\n
    \n {uiState === 'error' && (\n
    \n

    Error loading custom emojis

    \n
    \n )}\n {uiState === 'default' &&\n Object.entries(customEmojisCatList).map(\n ([category, emojis]) =>\n !!emojis?.length && (\n <>\n
    \n {{\n '--recent--': 'Recently used',\n '--others--': 'Others',\n }[category] || category}\n
    \n \n \n ),\n )}\n
    \n )}\n
    \n
    \n );\n}\n\nconst CustomEmojisList = memo(({ emojis, onSelect }) => {\n const [max, setMax] = useState(CUSTOM_EMOJIS_COUNT);\n const showMore = emojis.length > max;\n return (\n
    \n {emojis.slice(0, max).map((emoji) => (\n {\n onSelect(`:${emoji.shortcode}:`);\n }}\n />\n ))}\n {showMore && (\n setMax(max + CUSTOM_EMOJIS_COUNT)}\n >\n {(emojis.length - max).toLocaleString()} more…\n \n )}\n
    \n );\n});\n\nconst CustomEmojiButton = memo(({ emoji, onClick, showCode }) => {\n const addEdges = (e) => {\n // Add edge-left or edge-right class based on self position relative to scrollable parent\n // If near left edge, add edge-left, if near right edge, add edge-right\n const buffer = 88;\n const parent = e.currentTarget.closest('main');\n if (parent) {\n const rect = parent.getBoundingClientRect();\n const selfRect = e.currentTarget.getBoundingClientRect();\n const targetClassList = e.currentTarget.classList;\n if (selfRect.left < rect.left + buffer) {\n targetClassList.add('edge-left');\n targetClassList.remove('edge-right');\n } else if (selfRect.right > rect.right - buffer) {\n targetClassList.add('edge-right');\n targetClassList.remove('edge-left');\n } else {\n targetClassList.remove('edge-left', 'edge-right');\n }\n }\n };\n\n return (\n \n \n {!!emoji.staticUrl && (\n \n )}\n \n \n {showCode && (\n <>\n {' '}\n {emoji.shortcode}\n \n )}\n \n );\n});\n\nconst GIFS_PER_PAGE = 20;\nfunction GIFPickerModal({ onClose = () => {}, onSelect = () => {} }) {\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 };\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
    \n {!!onClose && (\n \n )}\n
    \n {\n e.preventDefault();\n fetchGIFs({ offset: 0 });\n }}\n >\n \n \n \n
    \n
    \n {uiState === 'default' && (\n
    \n

    Type to search GIFs

    \n
    \n )}\n {uiState === 'loading' && !results?.data?.length && (\n
    \n \n
    \n )}\n {results?.data?.length > 0 ? (\n <>\n
      \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
    • \n {\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 \n \n {strippedWebP && (\n \n )}\n {\n e.target.style.backgroundColor = 'transparent';\n }}\n />\n \n
      {alt_text || title}
      \n \n \n
    • \n );\n })}\n
    \n

    \n {results.pagination?.offset > 0 && (\n {\n fetchGIFs({\n offset: results.pagination?.offset - GIFS_PER_PAGE,\n });\n }}\n >\n \n Previous\n \n )}\n \n {results.pagination?.offset + results.pagination?.count <\n results.pagination?.total_count && (\n {\n fetchGIFs({\n offset: results.pagination?.offset + GIFS_PER_PAGE,\n });\n }}\n >\n Next \n \n )}\n

    \n \n ) : (\n uiState === 'results' && (\n
    \n

    No results

    \n
    \n )\n )}\n {uiState === 'error' && (\n
    \n

    Error loading GIFs

    \n
    \n )}\n
    \n
    \n );\n}\n\nexport default Compose;\n"],"names":["Combobox","input","list","tabInsertsSuggestions","defaultFirstOption","event","keyboardBindings","trackComposition","commitWithElement","_a","visible","indexDiff","focusEl","els","focusIndex","indexOfItem","newIndex","target","el","scrollTo","combobox","commit","fireCommitEvent","container","inViewport","element","scrollTop","containerBottom","top","bottom","boundary","query","text","key","cursor","multiWord","lookBackIndex","lastMatchPosition","keyIndex","pre","CustomHTMLElement","InputStyleCloneUpdateEvent","CloneRegistry","_InputStyleCloneElement","__privateAdd","_InputStyleCloneElement_instances","_styleObserver","__privateMethod","updateStyles_fn","_resizeObserver","requestUpdateLayout_fn","_inputRef","_container","_xOffset","_yOffset","_isLayoutUpdating","_onInput","updateText_fn","_onDocumentScrollOrResize","usingInput_fn","__privateSet","__privateGet","clone","fn","updateLayout_fn","inputStyle","inputRect","cloneRect","prop","propertiesToCopy","InputStyleCloneElement","e","_InputRange","startOffset","endOffset","_InputRange_instances","_inputElement","_startOffset","_endOffset","selectionStart","selectionEnd","offset","clampOffset_fn","toStart","createCloneRange_fn","styleClone_get","cloneElement_get","range","textNode","InputRange","states","TextExpander","expander","match","menu","_b","position","caretRect","targetPosition","currentPosition","delta","currentStyle","item","beginning","remaining","detail","suffix","value","found","providers","provide","result","x","TextExpanderElement","keysAttr","keys","multiWordAttr","globalMultiWord","state","ansiRegex","onlyFirst","pattern","regex","stripAnsi","string","segmenter","stringLength","countAnsiEscapeCodes","length","_","poweredByGiphyURL","PHANPY_IMG_ALT_API_URL","IMG_ALT_API_URL","PHANPY_GIPHY_API_KEY","GIPHY_API_KEY","import","supportedLanguagesMap","supportedLanguages","reduce","acc","l","code","common","native","expiryOptions","expirySeconds","Object","values","oneDay","expiresInFromExpiresAt","expiresAt","Date","getTime","now","find","s","document","createElement","role","className","windowMargin","observer","IntersectionObserver","entries","forEach","entry","isIntersecting","left","width","boundingClientRect","innerWidth","window","insetInlineStart","isRTL","style","observe","DEFAULT_LANG","localeMatch","Intl","DateTimeFormat","resolvedOptions","locale","navigator","languages","map","urlRegexObj","RegExp","urlRegex","source","flags","usernameRegex","urlPlaceholder","countableText","inputText","replace","USERNAME_RE","MENTION_RE","HASHTAG_RE","SHORTCODE_RE_FRAGMENT","SCAN_RE","Segmenter","escapeHTML","highlightText","maxCharacters","Infinity","composerCharacterCount","withinLimitHTML","exceedLimitHTML","htmlSegments","segment","index","rtf","RelativeTimeFormat","CUSTOM_EMOJIS_COUNT","Compose","onClose","replyToStatus","editStatus","draftStatus","standalone","hasOpener","console","masto","instance","uiState","setUIState","useState","UID","uid","log","currentAccount","currentAccountInfo","maxMediaAttachments","charactersReservedPerUrl","imageMatrixLimit","supportedMimeTypes","imageSizeLimit","videoSizeLimit","videoMatrixLimit","videoFrameRateLimit","maxExpiration","maxOptions","maxCharactersPerOption","minExpiration","spoilerTextRef","useRef","textareaRef","store","prevLanguage","language","sensitive","setMediaAttachments","setLanguage","oninputTextarea","poll","account","focusTextarea","dispatchEvent","setTimeout","spoilerText","useEffect","visibility2","language2","sensitive2","visibility","current","m","allMentions","prefs","setSensitive","poll2","mediaAttachments","options","expiresIn","statusSource","dataset","mediaAttachments2","setVisibility","composablePoll","status","o","formRef","hasValue","hasMediaAttachments","isSelf","hasOnlyAcct","confirmClose","hasIDMediaAttachments","beforeUnloadCopy","id","handleBeforeUnload","sameWithSource","getCharCount","updateCharCount","supportsCloseWatcher","useHotkeys","yes","addEventListener","capture","modals","hasModal","hasOnlyComposer","prevBackgroundDraft","count","escDownRef","ignoreEventWhen","useCloseWatcher","canClose","draftKey","getCurrentAccountNS","backgroundDraft","useInterval","db","handleItems","username","acct","items","i2","file","files","drafts","allowedFiles","updatedAt","then","debug","error","mediaFiles","handleDragover","includes","showMentionPicker","setShowMentionPicker","showEmoji2Picker","setShowEmoji2Picker","showGIFPicker","autoDetectedLanguages","setAutoDetectedLanguages","topSupportedLanguages","restSupportedLanguages","useMemo","topLanguages","contentTranslationHideLanguages","max","restLanguages","commonB","type","size","url","codeA","commonA","codeB","onMinimize","saveUnsavedDraft","_jsxs","dataTransfer","_jsx","children","passData","Icon","alert","settings","sort","class","avatarStatic","instanceURL","onClick","opener","composerState","Status","replyToStatusMonthsAgo","_Fragment","formData","previewMode","option","media","pointerEvents","opacity","mediaPromises","attachment","description","params2","removeNullUndefined","res","results","some","hasNoDescriptions","params","saveStatus","newStatus","allSettled","e2","media_attributes","in_reply_to_id","onInput","onChange","limit","focus","q","title","icon","action","disabled","MediaAttachment","attachments","newAttachments","required","fileID","performSearch","v1","search","resolve","v2","fetch","onTrigger","defaultSearchTerm","newPoll","setPoll","onDescriptionChange","i","accept","multiple","setShowGIFPicker","Array","Loader","CharCountMeter","Modal","MentionModal","socialAddress","textarea","abrupt","textBeforeMention","textAfterMention","newText","spaceBeforeMention","spaceAfterMention","set","CustomEmojisModal","emojiShortcode","textBeforeEmoji","spaceBeforeEmoji","spaceAfterEmoji","textAfterEmoji","GIFPickerModal","alt_text","showToast","blob","onSelect","theToast","offsetHeight","scrollHeight","clientHeight","height","visibleEmojis","searcher","getCustomEmojis","pmem","_getCustomEmojis","cacheKeyArg","keyArg","detectLangs","langs","lang","newMediaAttachments","setText","ref","props","searcherRef","r","emojis","textExpanderRef","textExpanderTextRef","text2","emoji","shortcode","encodeHTML","forwardRef","html","textareaProps","handleChange","total","history","cur","matched","handleValue","more","searchResults","v","name","displayName","handleCommited","shortenNumber","slowHighlightPerf","composeHighlightRef","start","end","debouncedAutoDetectLanguage","useDebouncedCallback","dom","mark","Event","resizeObserver","throttleHighlightText","bullet","postSpaces","anything","lastLine","innerHTML","number","preSpaces","newBullet","pos","innerText","autoResizeTextarea","dir","rows","cols","onKeyDown","hidden","charCount","leftChars","ctrlKey","setRangeText","setSelectionRange","prettyBytes","bytes","unitIndex","units","scaleDimension","newWidth","scalingFactor","newHeight","onRemove","supportsEdit","supports","onScroll","checkMaxError","configuration","getCurrentInstanceConfiguration","snapStates","setImageMatrix","imageMatrix","setMaxError","matrix","Math","videoMatrix","setDescription","suffixType","subtype","debouncedOnDescriptionChange","timer","maxError","details","toastRef","maxErrorText","err","type2","imageSizeLimit2","imageSize","imageMatrixLimit2","showModal","videoSize","clearTimeout","videoSizeLimit2","descTextarea","videoMatrix2","videoMatrixLimit2","autoCapitalize","autoComplete","naturalWidth","naturalHeight","maxErrorToast","setVideoMatrix","videoWidth","videoHeight","setShowModal","tabIndex","src","onLoad","playsinline","onLoadedMetadata","Menu2","body","response","MenuItem","menuButton","localeCode2Text","append","Poll","checked","label","maxlength","placeholder","str","char","obj","accounts2","relationships","fetchRelationships","relationshipsMap","setRelationshipsMap","filter","setAccounts","loadRelationships","loadAccounts","inputRef","filterShortcodes","searchTerm","bLower","aStartsWith","bStartsWith","aContains","bothContain","bContains","selectedAccount","accounts","selectedIndex","selectAccount","listRef","setSelectedIndex","selectedItem","term","debouncedLoadAccounts","enableOnFormTags","AccountBlock","relationship","inline","customEmojis","setCustomEmojis","onSubmit","recentlyUsedCustomEmojis","autocorrect","customEmojisList","othersCat","emojisCat","useCallback","_c","scrollableRef","setMatches","onFind","onSelectEmoji","recentlyUsedCustomEmojis2","recentlyUsedEmojiIndex","emoji2","customEmojisCatList","category","matches","CustomEmojiButton","queueMicrotask","splice","CustomEmojisList","setMax","showMore","memo","showCode","parent","rect","selfRect","targetClassList","addEdges","GIFS_PER_PAGE","setResults","qRef","closest","getBoundingClientRect","remove","staticUrl","loading","debouncedOnInput","currentOffset","gif","fixed_height_downsampled","original","pagination","fixed_height_small","fixed_height","theImage","urlObj","strippedWebP","webp","webpObj","url2","theURL","mp4","urlObj2","strippedURL2","strippedURL","images","fetchGIFs","parse"],"mappings":"o3BAAe,MAAMA,EAAS,CAC1B,YAAYC,EAAOC,EAAM,CAAE,sBAAAC,EAAuB,mBAAAC,CAAoB,EAAG,GAAI,CACzE,KAAK,MAAQH,EACb,KAAK,KAAOC,EACZ,KAAK,sBAAwBC,GAA6F,GAC1H,KAAK,mBAAqBC,GAAoF,GAC9G,KAAK,YAAc,GACdF,EAAK,KACNA,EAAK,GAAK,YAAY,KAAK,OAAM,EAAG,SAAQ,EAAG,MAAM,EAAG,CAAC,CAAC,IAE9D,KAAK,aAAe,CAAC,CAAC,UAAU,UAAU,MAAM,WAAW,EAC3D,KAAK,qBAAuBG,GAASC,GAAiBD,EAAO,IAAI,EACjE,KAAK,wBAA0BA,GAASE,GAAiBF,EAAO,IAAI,EACpE,KAAK,aAAe,KAAK,eAAe,KAAK,IAAI,EACjDJ,EAAM,aAAa,OAAQ,UAAU,EACrCA,EAAM,aAAa,gBAAiBC,EAAK,EAAE,EAC3CD,EAAM,aAAa,gBAAiB,OAAO,EAC3CA,EAAM,aAAa,oBAAqB,MAAM,EAC9CA,EAAM,aAAa,gBAAiB,SAAS,CAChD,CACD,SAAU,CACN,KAAK,eAAc,EACnB,KAAK,KAAI,EACT,KAAK,MAAM,gBAAgB,MAAM,EACjC,KAAK,MAAM,gBAAgB,eAAe,EAC1C,KAAK,MAAM,gBAAgB,eAAe,EAC1C,KAAK,MAAM,gBAAgB,mBAAmB,EAC9C,KAAK,MAAM,gBAAgB,eAAe,CAC7C,CACD,OAAQ,CACJ,KAAK,MAAM,aAAa,gBAAiB,MAAM,EAC/C,KAAK,MAAM,iBAAiB,mBAAoB,KAAK,uBAAuB,EAC5E,KAAK,MAAM,iBAAiB,iBAAkB,KAAK,uBAAuB,EAC1E,KAAK,MAAM,iBAAiB,QAAS,KAAK,YAAY,EACtD,KAAK,MAAM,iBAAiB,UAAW,KAAK,oBAAoB,EAChE,KAAK,KAAK,iBAAiB,QAASO,EAAiB,EACrD,KAAK,sBAAqB,CAC7B,CACD,MAAO,CACH,KAAK,eAAc,EACnB,KAAK,MAAM,aAAa,gBAAiB,OAAO,EAChD,KAAK,MAAM,oBAAoB,mBAAoB,KAAK,uBAAuB,EAC/E,KAAK,MAAM,oBAAoB,iBAAkB,KAAK,uBAAuB,EAC7E,KAAK,MAAM,oBAAoB,QAAS,KAAK,YAAY,EACzD,KAAK,MAAM,oBAAoB,UAAW,KAAK,oBAAoB,EACnE,KAAK,KAAK,oBAAoB,QAASA,EAAiB,CAC3D,CACD,uBAAwB,CACpB,IAAIC,EACA,KAAK,sBACJA,EAAK,MAAM,KAAK,KAAK,KAAK,iBAAiB,6CAA6C,CAAC,EACrF,OAAOC,EAAO,EAAE,CAAC,KAAO,MAAQD,IAAO,QAAkBA,EAAG,aAAa,+BAAgC,MAAM,EAE3H,CACD,SAASE,EAAY,EAAG,CACpB,MAAMC,EAAU,MAAM,KAAK,KAAK,KAAK,iBAAiB,wBAAwB,CAAC,EAAE,OAAOF,EAAO,EAAE,CAAC,EAC5FG,EAAM,MAAM,KAAK,KAAK,KAAK,iBAAiB,iBAAiB,CAAC,EAAE,OAAOH,EAAO,EAC9EI,EAAaD,EAAI,QAAQD,CAAO,EACtC,GAAKE,IAAeD,EAAI,OAAS,GAAKF,IAAc,GAAOG,IAAe,GAAKH,IAAc,GAAK,CAC9F,KAAK,eAAc,EACnB,KAAK,MAAM,QACX,MACH,CACD,IAAII,EAAcJ,IAAc,EAAI,EAAIE,EAAI,OAAS,EACrD,GAAID,GAAWE,GAAc,EAAG,CAC5B,MAAME,EAAWF,EAAaH,EAC1BK,GAAY,GAAKA,EAAWH,EAAI,SAChCE,EAAcC,EACrB,CACD,MAAMC,EAASJ,EAAIE,CAAW,EAC9B,GAAKE,EAEL,UAAWC,KAAML,EACbK,EAAG,gBAAgB,8BAA8B,EAC7CD,IAAWC,GACX,KAAK,MAAM,aAAa,wBAAyBD,EAAO,EAAE,EAC1DA,EAAO,aAAa,gBAAiB,MAAM,EAC3CE,GAAS,KAAK,KAAMF,CAAM,GAG1BC,EAAG,gBAAgB,eAAe,CAG7C,CACD,gBAAiB,CACb,KAAK,MAAM,gBAAgB,uBAAuB,EAClD,UAAWA,KAAM,KAAK,KAAK,iBAAiB,wBAAwB,EAChEA,EAAG,gBAAgB,eAAe,EAEtC,KAAK,sBAAqB,CAC7B,CACL,CACA,SAASZ,GAAiBD,EAAOe,EAAU,CACvC,GAAI,EAAAf,EAAM,UAAYA,EAAM,SAAWA,EAAM,SAEzC,GAACe,EAAS,cAAgBf,EAAM,UAEhC,CAAAe,EAAS,YAEb,OAAQf,EAAM,IAAG,CACb,IAAK,QACGgB,GAAOD,EAAS,MAAOA,EAAS,IAAI,GACpCf,EAAM,eAAc,EAExB,MACJ,IAAK,MACGe,EAAS,uBAAyBC,GAAOD,EAAS,MAAOA,EAAS,IAAI,GACtEf,EAAM,eAAc,EAExB,MACJ,IAAK,SACDe,EAAS,eAAc,EACvB,MACJ,IAAK,YACDA,EAAS,SAAS,CAAC,EACnBf,EAAM,eAAc,EACpB,MACJ,IAAK,UACDe,EAAS,SAAS,EAAE,EACpBf,EAAM,eAAc,EACpB,MACJ,IAAK,IACGe,EAAS,cAAgBf,EAAM,UAC/Be,EAAS,SAAS,CAAC,EACnBf,EAAM,eAAc,GAExB,MACJ,IAAK,IACGe,EAAS,cAAgBf,EAAM,UAC/Be,EAAS,SAAS,EAAE,EACpBf,EAAM,eAAc,GAExB,MACJ,QACI,GAAIA,EAAM,QACN,MACJe,EAAS,eAAc,CAC9B,CACL,CACA,SAASZ,GAAkBH,EAAO,CAC9B,GAAI,EAAEA,EAAM,kBAAkB,SAC1B,OACJ,MAAMY,EAASZ,EAAM,OAAO,QAAQ,iBAAiB,EAChDY,GAEDA,EAAO,aAAa,eAAe,IAAM,QAE7CK,GAAgBL,CAAM,CAC1B,CACA,SAASI,GAAOpB,EAAOC,EAAM,CACzB,MAAMe,EAASf,EAAK,cAAc,+DAA+D,EACjG,OAAKe,GAEDA,EAAO,aAAa,eAAe,IAAM,QAE7CA,EAAO,MAAK,EACL,IAJI,EAKf,CACA,SAASK,GAAgBL,EAAQ,CAC7BA,EAAO,cAAc,IAAI,YAAY,kBAAmB,CAAE,QAAS,EAAM,CAAA,CAAC,CAC9E,CACA,SAASP,GAAQQ,EAAI,CACjB,MAAQ,CAACA,EAAG,QACR,EAAEA,aAAc,kBAAoBA,EAAG,OAAS,YAC/CA,EAAG,YAAc,GAAKA,EAAG,aAAe,EACjD,CACA,SAASX,GAAiBF,EAAOe,EAAU,CACvCA,EAAS,YAAcf,EAAM,OAAS,mBACzB,SAAS,eAAee,EAAS,MAAM,aAAa,eAAe,GAAK,EAAE,GAGvFA,EAAS,eAAc,CAC3B,CACA,SAASD,GAASI,EAAWN,EAAQ,CAC5BO,GAAWD,EAAWN,CAAM,IAC7BM,EAAU,UAAYN,EAAO,UAErC,CACA,SAASO,GAAWD,EAAWE,EAAS,CACpC,MAAMC,EAAYH,EAAU,UACtBI,EAAkBD,EAAYH,EAAU,aACxCK,EAAMH,EAAQ,UACdI,EAASD,EAAMH,EAAQ,aAC7B,OAAOG,GAAOF,GAAaG,GAAUF,CACzC,CCtLA,MAAMG,GAAW,WACjB,SAASC,GAAMC,EAAMC,EAAKC,EAAQ,CAAE,UAAAC,EAAW,cAAAC,EAAe,kBAAAC,GAAsB,CAChF,UAAW,GACX,cAAe,EACf,kBAAmB,IACvB,EAAG,CACC,IAAIC,EAAWN,EAAK,YAAYC,EAAKC,EAAS,CAAC,EAG/C,GAFII,IAAa,IAEbA,EAAWF,EACX,OACJ,GAAID,EAAW,CACX,GAAIE,GAAqB,KAAM,CAC3B,GAAIA,IAAsBC,EACtB,OACJA,EAAWD,EAAoBJ,EAAI,MACtC,CAQD,GAPqBD,EAAKM,EAAW,CAAC,IACjB,KAAOJ,GAAUI,EAAWL,EAAI,OAAS,GAEzCD,EAAK,YAAY;AAAA,EAAME,EAAS,CAAC,EACnCI,GAEFN,EAAK,YAAY,IAAKE,EAAS,CAAC,EAClCI,EACX,MACP,SAEsBN,EAAK,YAAY,IAAKE,EAAS,CAAC,EAClCI,EACb,OAER,MAAMC,EAAMP,EAAKM,EAAW,CAAC,EAC7B,OAAIC,GAAO,CAACT,GAAS,KAAKS,CAAG,EACzB,OAEG,CACH,KAFgBP,EAAK,UAAUM,EAAWL,EAAI,OAAQC,CAAM,EAG5D,SAAUI,EAAWL,EAAI,MACjC,CACA,CAQA,MAAMO,WAA0B,WAAY,CAC5C,CAEA,MAAMC,WAAmC,KAAM,CAC3C,aAAc,CACV,MAAM,QAAQ,CACjB,CACL,CACA,MAAMC,GAAgB,IAAI,wDAmB1B,MAAMC,GAAN,MAAMA,WAA+BH,EAAkB,CA2BnD,YAAYvC,EAAO,CACf,QA5BR2C,GAAA,KAAAC,GACID,GAAA,KAAAE,GAAiB,IAAI,iBAAiB,IAAMC,EAAA,KAAKF,EAAAG,IAAL,UAAoB,GAChEJ,GAAA,KAAAK,GAAkB,IAAI,eAAe,IAAMF,EAAA,KAAKF,EAAAK,IAAL,UAA2B,GAKtEN,GAAA,KAAAO,IACAP,GAAA,KAAAQ,IAgGAR,GAAA,KAAAS,GAAW,GAEXT,GAAA,KAAAU,GAAW,GA2BXV,GAAA,KAAAW,GAAoB,IAkCpBX,GAAA,KAAAY,GAAW,IAAMT,EAAA,KAAKF,EAAAY,IAAL,YACjBb,GAAA,KAAAc,GAA6BrD,GAAU,CACnC0C,EAAA,KAAKF,EAAAc,IAAL,UAAkB1D,GAAU,EACpBI,EAAM,SAAW,UACjBA,EAAM,SAAW,QAChBA,EAAM,kBAAkB,MAAQA,EAAM,OAAO,SAASJ,CAAK,IAC5D8C,EAAA,KAAKF,EAAAK,IAAL,UAChB,EACA,GAlJQU,GAAA,KAAKT,GAAY,IAAI,QAAQlD,CAAK,GAGlC2D,GAAA,KAAKR,GAAa,SAAS,cAAc,KAAK,GAC9CS,EAAA,KAAKT,IAAW,MAAM,SAAW,WACjCS,EAAA,KAAKT,IAAW,MAAM,cAAgB,OACtCnD,EAAM,MAAM4D,EAAA,KAAKT,GAAU,EAC3BS,EAAA,KAAKT,IAAW,YAAY,IAAI,CACnC,CAnBD,OAAO,IAAInD,EAAO,CACd,MAAM6D,EAAQpB,GAAc,IAAIzC,CAAK,GAAK,IAAI0C,GAAuB1C,CAAK,EAC1E,OAAAyC,GAAc,IAAIzC,EAAO6D,CAAK,EACvBA,CACV,CAoBD,aAAc,CACVf,EAAA,KAAKF,EAAAG,IAAL,WACAD,EAAA,KAAKF,EAAAY,IAAL,UACH,CAED,mBAAoB,CAChB,MAAMxD,EAAQ4D,EAAA,KAAKV,IAAU,MAAK,EAClC,GAAI,CAAClD,EACD,OAAO,KAAK,SAChB,KAAK,MAAM,cAAgB,OAC3B,KAAK,MAAM,WAAa,OACxB,KAAK,MAAM,SAAW,SACtB,KAAK,MAAM,QAAU,QAErB,KAAK,MAAM,WAAa,SACpBA,aAAiB,qBACjB,KAAK,MAAM,WAAa,WACxB,KAAK,MAAM,SAAW,eAGtB,KAAK,MAAM,WAAa,SAExB,KAAK,MAAM,QAAU,aACrB,KAAK,MAAM,cAAgB,UAE/B,KAAK,aAAa,cAAe,MAAM,EACvC8C,EAAA,KAAKF,EAAAG,IAAL,WACAD,EAAA,KAAKF,EAAAY,IAAL,WACAI,EAAA,KAAKf,IAAe,QAAQ7C,EAAO,CAC/B,gBAAiB,CACb,QACA,KACH,CACb,CAAS,EACD4D,EAAA,KAAKZ,IAAgB,QAAQhD,CAAK,EAClC,SAAS,iBAAiB,SAAU4D,EAAA,KAAKH,IAA2B,CAAE,QAAS,EAAI,CAAE,EACrF,OAAO,iBAAiB,SAAUG,EAAA,KAAKH,IAA2B,CAAE,QAAS,EAAI,CAAE,EAEnFzD,EAAM,iBAAiB,QAAS4D,EAAA,KAAKL,IAAU,CAAE,QAAS,EAAI,CAAE,CACnE,CAED,sBAAuB,CACnBK,EAAA,KAAKT,IAAW,SAChBS,EAAA,KAAKf,IAAe,aACpBe,EAAA,KAAKZ,IAAgB,aACrB,SAAS,oBAAoB,SAAUY,EAAA,KAAKH,IAA2B,CAAE,QAAS,EAAI,CAAE,EACxF,OAAO,oBAAoB,SAAUG,EAAA,KAAKH,IAA2B,CAAE,QAAS,EAAI,CAAE,EACtF,MAAMzD,EAAQ4D,EAAA,KAAKV,IAAU,MAAK,EAC9BlD,IACAA,EAAM,oBAAoB,QAAS4D,EAAA,KAAKL,IAAU,CAAE,QAAS,EAAI,CAAE,EACnEd,GAAc,OAAOzC,CAAK,EAEjC,CAkFL,EA/KI6C,GAAA,YACAG,GAAA,YAKAE,GAAA,YACAC,GAAA,YARJP,EAAA,YAiGIc,GAAW,SAACI,EAAI,CACZ,MAAM9D,EAAQ4D,EAAA,KAAKV,IAAU,MAAK,EAClC,OAAKlD,EAEE8D,EAAG9D,CAAK,EADJ,KAAK,QAEnB,EAEDoD,GAAA,YAEAC,GAAA,YAKAU,GAAa,UAAG,CAEZjB,EAAA,KAAKF,EAAAc,IAAL,UAAkB1D,GAAU,CACxB,MAAMgE,EAAa,OAAO,iBAAiBhE,CAAK,EAChD,KAAK,MAAM,OAASgE,EAAW,OAC/B,KAAK,MAAM,MAAQA,EAAW,MAE1BhE,EAAM,eAAiB,KAAK,eAC5B,KAAK,MAAM,OAAS,QAAQgE,EAAW,MAAM,MAAMhE,EAAM,aAAe,KAAK,YAAY,OACzFA,EAAM,cAAgB,KAAK,cAC3B,KAAK,MAAM,MAAQ,QAAQgE,EAAW,KAAK,MAAMhE,EAAM,YAAc,KAAK,WAAW,OAEzF,MAAMiE,EAAYjE,EAAM,wBAClBkE,EAAY,KAAK,wBACvBP,GAAA,KAAKP,GAAWQ,EAAA,KAAKR,IAAWa,EAAU,KAAOC,EAAU,MAC3DP,GAAA,KAAKN,GAAWO,EAAA,KAAKP,IAAWY,EAAU,IAAMC,EAAU,KAC1D,KAAK,MAAM,UAAY,aAAaN,EAAA,KAAKR,GAAQ,OAAOQ,EAAA,KAAKP,GAAQ,MACrE,KAAK,UAAYrD,EAAM,UACvB,KAAK,WAAaA,EAAM,WACxB,KAAK,cAAc,IAAIwC,EAA4B,CAC/D,EACK,EACDc,GAAA,YAEAL,GAAoB,UAAG,CACfW,EAAA,KAAKN,MAETK,GAAA,KAAKL,GAAoB,IACzB,sBAAsB,IAAM,CACxBR,EAAA,KAAKF,EAAAmB,IAAL,WACAJ,GAAA,KAAKL,GAAoB,GACrC,CAAS,EACJ,EAEDP,GAAa,UAAG,CACZD,EAAA,KAAKF,EAAAc,IAAL,UAAkB1D,GAAU,CACxB,MAAMgE,EAAa,OAAO,iBAAiBhE,CAAK,EAChD,UAAWmE,KAAQC,GACf,KAAK,MAAMD,CAAI,EAAIH,EAAWG,CAAI,EACtCrB,EAAA,KAAKF,EAAAK,IAAL,UACZ,EACK,EAKDO,GAAW,UAAG,CACVV,EAAA,KAAKF,EAAAc,IAAL,UAAkB1D,GAAU,CACxB,KAAK,YAAcA,EAAM,MAKzB8C,EAAA,KAAKF,EAAAmB,IAAL,UACZ,EACK,EACDR,GAAA,YACAE,GAAA,YAxKJ,IAAMY,GAAN3B,GAoLA,MAAM0B,GAAmB,CAErB,YACA,cACA,cACA,kBACA,YACA,iBACA,mBACA,oBACA,kBACA,cACA,aACA,eACA,gBACA,cAEA,YACA,cACA,aACA,cACA,WACA,iBACA,aACA,aACA,YACA,gBACA,aACA,iBACA,gBACA,cACA,UACA,YACJ,EAEA,GAAI,CACA,eAAe,OAAO,oBAAqBC,EAAsB,CACrE,OACOC,EAAG,CAEN,GAAI,EAAEA,aAAa,cAAgBA,EAAE,OAAS,qBAC1C,MAAMA,CACd,6BAEA,MAAMC,GAAN,MAAMA,EAAW,CAUb,YAAY/C,EAASgD,EAAc,EAAGC,EAAYD,EAAa,CAVnE7B,GAAA,KAAA+B,IACI/B,GAAA,KAAAgC,IACAhC,GAAA,KAAAiC,IACAjC,GAAA,KAAAkC,IAQIlB,GAAA,KAAKgB,GAAgBnD,GACrBmC,GAAA,KAAKiB,GAAeJ,GACpBb,GAAA,KAAKkB,GAAaJ,EACrB,CASD,OAAO,cAAczE,EAAO,CACxB,KAAM,CAAE,eAAA8E,EAAgB,aAAAC,CAAc,EAAG/E,EACzC,OAAO,IAAIuE,GAAWvE,EAAO8E,GAAkB,OAAWC,GAAgB,MAAS,CACtF,CAED,IAAI,WAAY,CACZ,OAAO,KAAK,cAAgB,KAAK,SACpC,CAED,IAAI,yBAA0B,CAC1B,OAAOnB,EAAA,KAAKe,GACf,CAED,IAAI,cAAe,CACf,OAAOf,EAAA,KAAKe,GACf,CAED,IAAI,gBAAiB,CACjB,OAAOf,EAAA,KAAKe,GACf,CACD,IAAI,aAAc,CACd,OAAOf,EAAA,KAAKgB,GACf,CACD,IAAI,WAAY,CACZ,OAAOhB,EAAA,KAAKiB,GACf,CAED,eAAeG,EAAQ,CACnBrB,GAAA,KAAKiB,GAAe9B,EAAA,KAAK4B,GAAAO,IAAL,UAAkBD,GACzC,CAED,aAAaA,EAAQ,CACjBrB,GAAA,KAAKkB,GAAa/B,EAAA,KAAK4B,GAAAO,IAAL,UAAkBD,GACvC,CAKD,SAASE,EAAU,GAAO,CAClBA,EACA,KAAK,aAAa,KAAK,WAAW,EAElC,KAAK,eAAe,KAAK,SAAS,CACzC,CAED,eAAgB,CACZ,OAAOpC,EAAA,KAAK4B,GAAAS,IAAL,WAAyB,eACnC,CAED,YAAa,CACT,OAAO,IAAIZ,GAAWX,EAAA,KAAKe,IAAe,KAAK,YAAa,KAAK,SAAS,CAC7E,CAMD,uBAAwB,CACpB,OAAO7B,EAAA,KAAK4B,GAAAS,IAAL,WAAyB,uBACnC,CAMD,gBAAiB,CACb,OAAOrC,EAAA,KAAK4B,GAAAS,IAAL,WAAyB,gBACnC,CAED,UAAW,CACP,OAAOrC,EAAA,KAAK4B,GAAAS,IAAL,WAAyB,UACnC,CAKD,eAAgB,CACZ,OAAOvB,EAAA,KAAKc,GAAAU,GACf,CAuBL,EA3HIT,GAAA,YACAC,GAAA,YACAC,GAAA,YAHJH,GAAA,YAuGQU,GAAW,UAAG,CACd,OAAOf,GAAuB,IAAIT,EAAA,KAAKe,GAAa,CACvD,EACGU,GAAa,UAAG,CAChB,OAAOzB,EAAA,KAAKc,GAAAU,GACf,EACDH,GAAY,SAACD,EAAQ,CACjB,OAAO,KAAK,IAAI,EAAG,KAAK,IAAIA,EAAQpB,EAAA,KAAKe,IAAc,MAAM,MAAM,CAAC,CACvE,EACDQ,GAAiB,UAAG,CAIhB,MAAMG,EAAQ,SAAS,cACjBC,EAAW3B,EAAA,KAAKc,GAAAW,IAAc,WAAW,CAAC,EAChD,OAAIE,IACAD,EAAM,SAASC,EAAU,KAAK,WAAW,EACzCD,EAAM,OAAOC,EAAU,KAAK,SAAS,GAElCD,CACV,EA3HL,IAAME,GAANjB,GA8HA,MAAMkB,GAAS,IAAI,QACnB,MAAMC,EAAa,CACf,YAAYC,EAAU3F,EAAO,CACzB,KAAK,SAAW2F,EAChB,KAAK,MAAQ3F,EACb,KAAK,SAAW,KAChB,KAAK,KAAO,KACZ,KAAK,MAAQ,KACb,KAAK,WAAa,GAClB,KAAK,cAAgB,EACrB,KAAK,QAAU,KAAK,QAAQ,KAAK,IAAI,EACrC,KAAK,QAAU,KAAK,QAAQ,KAAK,IAAI,EACrC,KAAK,UAAY,KAAK,UAAU,KAAK,IAAI,EACzC,KAAK,SAAW,KAAK,SAAS,KAAK,IAAI,EACvC,KAAK,YAAc,KAAK,YAAY,KAAK,IAAI,EAC7C,KAAK,OAAS,KAAK,OAAO,KAAK,IAAI,EACnC,KAAK,oBAAsB,GAC3BA,EAAM,iBAAiB,QAAS,KAAK,OAAO,EAC5CA,EAAM,iBAAiB,QAAS,KAAK,OAAO,EAC5CA,EAAM,iBAAiB,UAAW,KAAK,SAAS,EAChDA,EAAM,iBAAiB,OAAQ,KAAK,MAAM,CAC7C,CACD,SAAU,CACN,KAAK,MAAM,oBAAoB,QAAS,KAAK,OAAO,EACpD,KAAK,MAAM,oBAAoB,QAAS,KAAK,OAAO,EACpD,KAAK,MAAM,oBAAoB,UAAW,KAAK,SAAS,EACxD,KAAK,MAAM,oBAAoB,OAAQ,KAAK,MAAM,CACrD,CACD,aAAc,CACN,KAAK,eACL,KAAK,cAAgB,KAAK,MAAM,cAAgB,KAAK,cAE5D,CACD,SAAS4F,EAAOC,EAAM,CAClB,IAAIrF,EAAIsF,EACJ,KAAK,QAAU,SAAS,eAAiB,KAAK,UAAYA,GAAMtF,EAAK,SAAS,iBAAmB,MAAQA,IAAO,OAAS,OAASA,EAAG,cAAgB,MAAQsF,IAAO,OAAS,OAASA,EAAG,iBAG7L,KAAK,WAAU,EACf,KAAK,KAAOD,EACPA,EAAK,KACNA,EAAK,GAAK,iBAAiB,KAAK,MAAM,KAAK,OAAQ,EAAG,GAAM,EAAE,SAAQ,CAAE,IAC5E,KAAK,SAAS,OAAOA,CAAI,EACzB,KAAK,SAAW,IAAI9F,GAAS,KAAK,MAAO8F,CAAI,EAC7C,KAAK,SAAS,cAAc,IAAI,MAAM,wBAAwB,CAAC,EAC/D,KAAK,aAAaA,EAAMD,EAAM,QAAQ,EACtC,KAAK,SAAS,QACdC,EAAK,iBAAiB,kBAAmB,KAAK,QAAQ,EACtDA,EAAK,iBAAiB,YAAa,KAAK,WAAW,EACnD,KAAK,SAAS,SAAS,CAAC,EAC3B,CACD,aAAaA,EAAME,EAAU,CACzB,MAAMC,EAAY,IAAIR,GAAW,KAAK,MAAOO,CAAQ,EAAE,wBACjDE,EAAiB,CAAE,KAAMD,EAAU,KAAM,IAAKA,EAAU,IAAMA,EAAU,QACxEE,EAAkBL,EAAK,wBACvBM,EAAQ,CACV,KAAMF,EAAe,KAAOC,EAAgB,KAC5C,IAAKD,EAAe,IAAMC,EAAgB,GACtD,EACQ,GAAIC,EAAM,OAAS,GAAKA,EAAM,MAAQ,EAAG,CACrC,MAAMC,EAAe,iBAAiBP,CAAI,EAC1CA,EAAK,MAAM,KAAOO,EAAa,KAAO,QAAQA,EAAa,IAAI,MAAMD,EAAM,IAAI,MAAQ,GAAGA,EAAM,IAAI,KACpGN,EAAK,MAAM,IAAMO,EAAa,IAAM,QAAQA,EAAa,GAAG,MAAMD,EAAM,GAAG,MAAQ,GAAGA,EAAM,GAAG,IAClG,CACJ,CACD,YAAa,CACT,MAAMN,EAAO,KAAK,KAClB,MAAI,CAACA,GAAQ,CAAC,KAAK,SACR,IACX,KAAK,SAAS,cAAc,IAAI,MAAM,0BAA0B,CAAC,EACjE,KAAK,KAAO,KACZA,EAAK,oBAAoB,kBAAmB,KAAK,QAAQ,EACzDA,EAAK,oBAAoB,YAAa,KAAK,WAAW,EACtD,KAAK,SAAS,UACd,KAAK,SAAW,KAChBA,EAAK,OAAM,EACJ,GACV,CACD,SAAS,CAAE,OAAA7E,GAAU,CACjB,IAAIR,EACJ,MAAM6F,EAAOrF,EAGb,GAFI,EAAEqF,aAAgB,cAElB,CAAC,KAAK,SACN,OACJ,MAAMT,EAAQ,KAAK,MACnB,GAAI,CAACA,EACD,OACJ,MAAMU,EAAY,KAAK,MAAM,MAAM,UAAU,EAAGV,EAAM,SAAWA,EAAM,IAAI,MAAM,EAC3EW,EAAY,KAAK,MAAM,MAAM,UAAUX,EAAM,SAAWA,EAAM,KAAK,MAAM,EACzEY,EAAS,CAAE,KAAAH,EAAM,IAAKT,EAAM,IAAK,MAAO,KAAM,SAAU,IAI9D,GAHiB,CAAC,KAAK,SAAS,cAAc,IAAI,YAAY,sBAAuB,CAAE,WAAY,GAAM,OAAAY,CAAM,CAAE,CAAC,GAG9G,CAACA,EAAO,MACR,OACJ,IAAIC,GAAUjG,EAAK,KAAK,SAAS,aAAa,QAAQ,KAAO,MAAQA,IAAO,OAASA,EAAK,IACtFgG,EAAO,WACPC,EAAS,IAEb,MAAMC,EAAQ,GAAGF,EAAO,KAAK,GAAGC,CAAM,GACtC,KAAK,MAAM,MAAQH,EAAYI,EAAQH,EACvC,MAAMtE,EAASqE,EAAU,OAASI,EAAM,OACxC,KAAK,WAAU,EACf,KAAK,MAAM,MAAM,CACb,cAAe,EAC3B,CAAS,EACD,KAAK,MAAM,eAAiBzE,EAC5B,KAAK,MAAM,aAAeA,EACrBuE,EAAO,WACR,KAAK,cAAgBvE,EACrB,KAAK,MAAQ,MAEjB,KAAK,SAAS,cAAc,IAAI,YAAY,0BAA2B,CAAE,WAAY,GAAO,OAAQ,CAAE,MAAO,KAAK,KAAO,CAAA,CAAE,CAAC,CAC/H,CACD,QAAS,CACL,GAAI,KAAK,oBAAqB,CAC1B,KAAK,oBAAsB,GAC3B,MACH,CACD,KAAK,WAAU,CAClB,CACD,SAAU,CACN,KAAK,WAAa,EACrB,CACD,MAAM,SAAU,CACZ,GAAI,KAAK,WAAY,CACjB,KAAK,WAAa,GAClB,MACH,CACD,MAAM2D,EAAQ,KAAK,YACnB,GAAIA,EAAO,CACP,KAAK,MAAQA,EACb,MAAMC,EAAO,MAAM,KAAK,gBAAgBD,CAAK,EAC7C,GAAI,CAAC,KAAK,MACN,OACAC,EACA,KAAK,SAASD,EAAOC,CAAI,EAGzB,KAAK,WAAU,CAEtB,MAEG,KAAK,MAAQ,KACb,KAAK,WAAU,CAEtB,CACD,WAAY,CACR,MAAM5D,EAAS,KAAK,MAAM,cAAgB,EACpCF,EAAO,KAAK,MAAM,MACpBE,GAAU,KAAK,gBACf,KAAK,cAAgBA,EAAS,GAElC,SAAW,CAAE,IAAAD,EAAK,UAAAE,CAAW,IAAI,KAAK,SAAS,KAAM,CACjD,MAAMyE,EAAQ7E,GAAMC,EAAMC,EAAKC,EAAQ,CACnC,UAAAC,EACA,cAAe,KAAK,cACpB,kBAAmB,KAAK,MAAQ,KAAK,MAAM,SAAW,IACtE,CAAa,EACD,GAAIyE,EACA,MAAO,CAAE,KAAMA,EAAM,KAAM,IAAA3E,EAAK,SAAU2E,EAAM,SAEvD,CACJ,CACD,MAAM,gBAAgBf,EAAO,CACzB,MAAMgB,EAAY,CAAA,EACZC,EAAWC,GAAWF,EAAU,KAAKE,CAAM,EAEjD,OADkB,KAAK,SAAS,cAAc,IAAI,YAAY,uBAAwB,CAAE,WAAY,GAAM,OAAQ,CAAE,QAAAD,EAAS,KAAMjB,EAAM,KAAM,IAAKA,EAAM,IAAO,CAAA,CAAC,GAGtJ,MAAM,QAAQ,IAAIgB,CAAS,GACjB,OAAOG,GAAKA,EAAE,OAAO,EAAE,IAAIA,GAAKA,EAAE,QAAQ,EAC/C,CAAC,EAHd,MAIP,CACD,aAAc,CACV,KAAK,oBAAsB,EAC9B,CACD,UAAU3G,EAAO,CACTA,EAAM,MAAQ,WACd,KAAK,MAAQ,KACT,KAAK,eACL,KAAK,cAAgB,KAAK,MAAM,cAAgB,KAAK,cACrDA,EAAM,yBAAwB,EAC9BA,EAAM,eAAc,GAG/B,CACL,CACA,MAAM4G,WAA4B,WAAY,CAC1C,IAAI,MAAO,CACP,MAAMC,EAAW,KAAK,aAAa,MAAM,EACnCC,EAAOD,EAAWA,EAAS,MAAM,GAAG,EAAI,GACxCE,EAAgB,KAAK,aAAa,WAAW,EAC7CjF,EAAYiF,EAAgBA,EAAc,MAAM,GAAG,EAAI,GACvDC,EAAkBlF,EAAU,SAAW,GAAK,KAAK,aAAa,WAAW,EAC/E,OAAOgF,EAAK,IAAIlF,IAAQ,CAAE,IAAAA,EAAK,UAAWoF,GAAmBlF,EAAU,SAASF,CAAG,CAAC,EAAG,CAC1F,CACD,mBAAoB,CAChB,MAAMhC,EAAQ,KAAK,cAAc,8BAA8B,EAC/D,GAAI,EAAEA,aAAiB,kBAAoBA,aAAiB,qBACxD,OACJ,MAAMqH,EAAQ,IAAI3B,GAAa,KAAM1F,CAAK,EAC1CyF,GAAO,IAAI,KAAM4B,CAAK,CACzB,CACD,sBAAuB,CACnB,MAAMA,EAAQ5B,GAAO,IAAI,IAAI,EACxB4B,IAELA,EAAM,QAAO,EACb5B,GAAO,OAAO,IAAI,EACrB,CACD,SAAU,CACN,MAAM4B,EAAQ5B,GAAO,IAAI,IAAI,EACxB4B,GAELA,EAAM,YAAW,CACpB,CACL,CAEK,OAAO,eAAe,IAAI,eAAe,IAC1C,OAAO,oBAAsBL,GAC7B,OAAO,eAAe,OAAO,gBAAiBA,EAAmB,GCzoBtD,SAASM,GAAU,CAAC,UAAAC,EAAY,EAAK,EAAI,CAAA,EAAI,CAC3D,MAAMC,EAAU,CACZ,+HACH,0DACF,EAAG,KAAK,GAAG,EAEV,OAAO,IAAI,OAAOA,EAASD,EAAY,OAAY,GAAG,CACvD,CCLA,MAAME,GAAQH,GAAS,EAER,SAASI,GAAUC,EAAQ,CACzC,GAAI,OAAOA,GAAW,SACrB,MAAM,IAAI,UAAU,gCAAgC,OAAOA,CAAM,IAAI,EAMtE,OAAOA,EAAO,QAAQF,GAAO,EAAE,CAChC,CCXA,MAAMG,GAAY,IAAI,KAAK,UAEZ,SAASC,GAAaF,EAAQ,CAAC,qBAAAG,EAAuB,EAAK,EAAI,CAAA,EAAI,CASjF,GARIH,IAAW,KAIVG,IACJH,EAASD,GAAUC,CAAM,GAGtBA,IAAW,IACd,MAAO,GAGR,IAAII,EAAS,EAEb,UAAWC,KAAKJ,GAAU,QAAQD,CAAM,EACvCI,IAGD,OAAOA,CACR,CCxBA,MAAeE,GAAA,k+sBCyDf,KAAM,CACJC,uBAAwBC,GACxBC,qBAAsBC,EACxB,EAAIC,GAEEC,GAAwBC,GAAmBC,OAAO,CAACC,EAAKC,IAAM,CAClE,KAAM,CAACC,EAAMC,EAAQC,CAAM,EAAIH,EAC/BD,OAAAA,EAAIE,CAAI,EAAI,CACVC,OAAAA,EACAC,OAAAA,CAAAA,EAEKJ,CACT,EAAG,CAAE,CAAA,EAMCK,GAAgB,CACpB,YAAa,EAAI,GACjB,aAAc,GAAK,GACnB,SAAU,GAAK,GACf,UAAW,EAAI,GAAK,GACpB,WAAY,GAAK,GAAK,GACtB,QAAS,GAAK,GAAK,GACnB,SAAU,EAAI,GAAK,GAAK,GACxB,SAAU,EAAI,GAAK,GAAK,EAC1B,EACMC,GAAgBC,OAAOC,OAAOH,EAAa,EAC3CI,GAAS,GAAK,GAAK,GAEnBC,GAAwCC,GAAA,CACxC,GAAA,CAACA,EAAkBF,OAAAA,GACjBhD,MAAAA,GAAS,IAAImD,KAAKD,CAAS,EAAEE,QAAQ,EAAID,KAAKE,IAAS,GAAA,IAC7D,OAAOR,GAAcS,KAAYC,GAAAA,GAAKvD,CAAK,GAAKgD,EAClD,EAEMtD,GAAO8D,SAASC,cAAc,IAAI,EACxC/D,GAAKgE,KAAO,UACZhE,GAAKiE,UAAY,qBAGjB,MAAMC,GAAe,GACfC,GAAW,IAAIC,qBAAkCC,GAAA,CAC7CC,EAAAA,QAAmBC,GAAA,CACzB,GAAIA,EAAMC,eAAgB,CAClB,KAAA,CAAEC,KAAAA,EAAMC,MAAAA,CAAAA,EAAUH,EAAMI,mBACxB,CAAEC,WAAAA,CAAeC,EAAAA,OACnBJ,GAAAA,EAAOC,EAAQE,EAAY,CACvBE,MAAAA,EAAmBC,KAAU,QAAU,OAC7C/E,GAAKgF,MAAMF,CAAgB,EAAIF,EAAaF,EAAQR,GAAe,IACrE,CACF,CAAA,CACD,CACH,CAAC,EACDC,GAASc,QAAQjF,EAAI,EAErB,MAAMkF,GAAeC,GACnB,CAAC,IAAIC,KAAKC,eAAe,EAAEC,gBAAgB,EAAEC,OAAQ,GAAGC,UAAUC,SAAS,EAC3E9C,GAAmB+C,OAAW5C,EAAE,CAAC,CAAC,EAClC,IACF,EAGM6C,GAAc,IAAIC,OAAOC,GAASC,OAAQD,GAASE,KAAK,EACxDC,GAAgB,sDAChBC,GAAiB,4BACvB,SAASC,GAAcC,EAAW,CAChC,OAAOA,EACJC,QAAQT,GAAaM,EAAc,EACnCG,QAAQJ,GAAe,OAAO,CACnC,CAGA,MAAMK,GAAc,uCACdC,GAAa,IAAIV,OACrB,mBAAmBS,GAAYP,MAAM,8BACrC,KACF,EAGMS,GAAa,IAAIX,OACrB,kEACA,IACF,EAGMY,GAAwB,mBACxBC,GAAU,IAAIb,OAClB,mBAAmBY,EAAqB,yBACxC,GACF,EAEMzE,GAAY,IAAIqD,KAAKsB,UAC3B,SAASC,GAAWzK,EAAM,CACxB,OAAOA,EACJkK,QAAQ,KAAM,OAAO,EACrBA,QAAQ,KAAM,MAAM,EACpBA,QAAQ,KAAM,MAAM,EACpBA,QAAQ,KAAM,QAAQ,EACtBA,QAAQ,KAAM,QAAQ,CAC3B,CACA,SAASQ,GAAc1K,EAAM,CAAE2K,cAAAA,EAAgBC,GAAS,EAAG,CAEnD,KAAA,CAAEC,uBAAAA,CAA2BnH,EAAAA,GACnC,GAAImH,EAAyBF,EAAe,CAEtCG,IAAAA,EAAkB,GACpBC,EAAkB,GACdC,MAAAA,EAAenF,GAAUoF,QAAQjL,CAAI,EAChC,SAAA,CAAEiL,QAAAA,EAASC,MAAAA,KAAWF,EAC3BE,EAAQP,EACSM,GAAAA,EAEAA,GAAAA,EAGvB,OAAIF,IAEAA,EAAA,4CACAN,GAAWM,CAAe,EAC1B,WAEGN,GAAWK,CAAe,EAAIC,CACvC,CAEA,OAAON,GAAWzK,CAAI,EACnBkK,QAAQT,GAAa,iDAAiD,EACtES,QAAQE,GAAY,qDAAqD,EACzEF,QAAQG,GAAY,qDAAqD,EACzEH,QACCK,GACA,6DACF,CACJ,CAEA,MAAMY,GAAM,IAAIjC,KAAKkC,mBAEfC,GAAsB,IAE5B,SAASC,GAAQ,CACfC,QAAAA,EACAC,cAAAA,EACAC,WAAAA,EACAC,YAAAA,EACAC,WAAAA,EACAC,UAAAA,CACF,EAAG,QACDC,KAAAA,CACM,MAAAC,EAAEA,SAAAA,CAAOC,EAAAA,GAAAA,EAAiB,CAAAC,EAAAC,CAAA,EAAAC,EAAA,SAAA,EAC1BC,EAACH,GAAmBN,GAAA,YAAAA,QAAaU,GAAS,CAAA,EAC1CD,EAA0BC,KACxBC,EAAmBF,EAAW,KAEhCG,OACAC,CAEN,UACQF,cAAAA,EAEF,oBAAAG,EACM,yBAAAC,EAAA,EACR9B,CAAAA,EACA6B,iBAAAA,CACAC,mBAAAA,EAAAA,CAAAA,mBAEgB,iBAAAC,EAChBC,eAAAA,EACAC,iBAAAA,EACAF,oBAAAA,CAAAA,EACAG,CAAAA,EACAC,MAAAA,CACAC,WAAAA,2BAEK,cAAAC,EACLC,cAAAA,EAAAA,EACAC,CAAAA,CAAAA,EACAF,GAAAA,CAAAA,EACAG,EAAAA,IACEC,EAACC,QACe,EAAAnB,EAAA,QAAA,EAEhBoB,KAAqB,EAAApB,EAAA,EAAA,EACrBkB,KAAwB,EAAAlB,EAAAqB,GAAA,QAAA,IAAA,iBAAA,GAAAvE,EAAA,EACxBwE,GAA0BH,EAAAI,CAAIvB,EAC9B,CAACwB,EAAuBC,CAAkB,EAAAzB,EAAA,CAAA,CAAA,EAC1C,CAACuB,EAAUG,CAAAA,EAAAA,EAAe1B,IAAAA,EAG1BsB,EAAAA,GAAAA,QAAsBC,IAAQ,aAAA,GAAA,GAC9BI,GAAmBF,IAAAA,CAClBG,EAAa,SAEpBR,EAAcC,QAAMQ,cAAY,IAAA,aAAmB,CAAA,CAEnD,EACMC,GAAsB,IAAA,CAC1BV,WAAAA,IAAoBW,WACtBX,EAAA,wDAC4B,4BAAA;AAAA,KAC1BY,EAAiB,QAAA,eAAA,EACXZ,UAAsB,aAAA,IAGxBA,EAAAA,EAAAA,UAAAA,MAAAA,UACAA,EAAAA,GAAAA,CAAmC,EAErCzB,GAAAA,aACAyB,GAAAA,QACI,CACR,YAAAa,EAEAC,WAAgBC,EACV7C,SAAe8C,EACX,UAAAC,CAAEJ,EAAAA,EAAaK,GAAAA,EAAAA,UAAYf,EAAAA,QAAAA,MAAAA,GAC7BU,MAAAA,MADqD3C,IAAAA,IAAAA,CAAAA,EAAAA,QAAAA,KAAAA,GAAAA,EAAAA,SAAAA,IAAAA,GAAAA,EAAAA,IAAAA,CAAAA,CAAAA,GACvBiD,OAASC,GAAAA,IAAAnC,EAAA,IAAA,EACzCa,EAAAA,OAAuBzI,IACzB2I,EAAA,QAAA,MAAA,GAAAqB,EAAA,IAAAD,GAAA,IAAAA,CAAA,EAAA,EAAA,KAAA,GAAA,CAAA,IACAb,MAOIc,KACFrB,EAAYmB,IAAgB,UAAGE,EACvBD,4BACI,EAAAE,EAAA,4BAAA,EAAA,YAAA,EAAAP,CAAA,EACIT,GAAAU,KAAA7P,EAAAmQ,EAAA,0BAAA,IAAA,YAAAnQ,EAAA,gBAAAuK,EAAA,EAClB6F,GAAAN,GAAA,CAAA,CAAAJ,CAAA,CACc,SAAA1C,EAAA,CAEZ+C,KAAAA,CAIFZ,aAKaF,SAAAA,YACQa,EACf,KAAAO,EAAEN,iBAAAA,CAAAA,EAAYf,EAAUC,EAAAA,CAAAA,EAAAA,GAAAA,MAAAA,EAAAA,UAAAA,CAAWI,GAAAA,EAAMiB,QAAAA,EAAAA,QAAAA,IAAAA,IAAAA,GAAAA,YAAAA,EAAAA,QAAAA,CAAAA,EAC7CtD,WAAAA,GAAAA,YAAAA,EAAAA,YAAAA,GAAAA,EAAAA,SAAAA,CACF,EAA0CQ,EACrC6B,SAAAA,GACHkB,gBACAC,GAAWnB,CACb,MAAAoB,EAAA,MAAApD,EAAA,GAAA,SAAA,QAAAL,EAAA,EAAA,EAAA,OAAA,MAAA,EACAQ,CACa,KAAAjM,GACP,YAAAmO,EACIe,EAAAA,EAGNrD,EAAY,QAAA,MAAA7L,GAAEkP,EAAAA,QAAAA,QAAAA,OAAAA,GAAarB,KACrBG,KAAEhO,EAAAA,QAAAA,MAAAA,GAAMmO,EAAAA,CAAAA,EAAYP,GAAIsB,KAAAA,EAAAA,EAAAA,0BAAAA,IAAAA,YAAAA,EAAAA,gBAAAA,EAAAA,EAC9B5B,IAA4BtN,EAChByO,GAAQU,EAAQvF,CAAS5J,EACrB2N,EAAAyB,CAAA,EACFnD,EAAA,SAAA,CACdmB,OAAAA,EAAAA,CACAiC,OAAAA,GAAAA,YAAAA,EAAAA,SAAwB9M,CAAA,EACxBqL,EAAAA,QAKAiB,CACIS,IACJ3B,MACA1B,mCACU,GACVJ,IAAe,4BAAA,EAAA,YAAA,CAAA,EAEfI,EAAAA,0BAAkB,GACpB2B,GAAAgB,EAAA,0BAAA,EAAA,YAAA,CAAA,EAEGA,EAAA,2BAAA,GACSC,GAAA,CAAA,CAAAD,EAAA,2BAAA,CAAA,EAGZS,GAAAA,EAAAA,CACF,KAAA,CACIT,OAAAA,EACFhB,YAAAA,EACF,WAAAS,EACIO,WACFC,UAAAA,EACF,KAAAC,EACF,iBAAAM,CACA,EAAiB1D,EACT4D,EAAA,CAAA,EAAAR,GAAA,MAAAA,EAAA,UAAA,CACJS,GAAAA,EACApB,QAAAA,EAAAA,QAAAA,IAAAA,KAAAA,IAAAA,YAAAA,GAAAA,QAAAA,EAAAA,EACAK,WAAAA,GAAAA,YAAAA,EAAAA,YAAAA,GAAAA,EAAAA,SAAAA,CAAAA,EACAf,EACAC,QAAAA,MAAAA,EAAAA,KACAI,KAEEpC,IAAAA,EAAAA,QAAAA,MAAAA,GACJ2C,GAAuBgB,EAAEvB,CAAiB,EAAAF,GACrCE,KAAAA,EAAAA,EAAAA,0BAAAA,IAAAA,YAAAA,EAAAA,gBAAAA,EAAAA,EACHkB,IAAsBxF,MAAAA,GAAWgG,CAAYA,EAClC1B,GAAMmB,EAAa5H,CAAAA,EAChC+H,GAAAzB,EAAAyB,CAAA,CACA9B,CACgB,EAAA,CAAA5B,EAAAD,EAAAD,CAAA,CAAA,EACF,MAAAiE,GAAApC,IACVc,GAA4BM,+CAC5BD,GAAAA,KACJZ,KAAAA,CAKIF,MAAAA,EACA4B,QAAAA,CACAP,EAAAA,EAAAA,QACN,GAAA/C,IAAA,UACEN,MAAaD,GAIjB,MAAyBiE,GAAA/K,GAAA,IAAA,KAAA,EAAA,QAAA,uDAAA,EAAA,EAAA,IACFoK,EAAA,OAAA,EAIrB,GAHM,CAAAW,GAAA,CAAAC,GAAiClB,EAAAA,OAAAA,GAAAA,EAAAA,MAAAA,GAAAA,EAAAA,EAAAA,EAIrC5C,MAAAA,GAA0BG,MAAS4D,GAAApE,GAAA,YAAAA,EAAA,QAAA,MAAAe,EAAA,GAC5BsD,EAAArE,GAAA7G,EAAA,KAAA,IAAA,IAAA6G,EAAA,QAAA,IAAA,GASPK,MARF,IAAA+D,GAAAC,GAOuClL,KAAAwK,GAAA,YAAAA,EAAA,QAE9B,EACTW,GAAA,IAGMC,GAAAA,EAI6C,GADxB,QAAAC,EAAA,EAG3B5B,GAAA,IAAA,CAGA,MAAMwB,EAASpE,GAAuByE,CAChCJ,GAAAA,IAGFtN,iBAAwB,EAC1BsJ,EAAAA,YAAwBmE,GAAEJ,EAAQC,cAAa,iBAAA,eAAAK,EAAA,CACxC,QAAA,EAAA,CACT,EAGMC,IAAAA,OAAAA,oBAAoCvG,eAAAA,EAAAA,CAC1C,QAAoB,EAClBiC,CAAAA,CAA0BsE,EAAAA,CAAAA,CAAAA,EAAAA,MAAgBC,GAAA,IAAA,CACnC,KAAA,CACT,MAAAzL,CAEAkH,EAAAA,EAAwB,QACtBlH,CACAgL,MAAAA,CAAAA,EACAI,EAAAA,QACAjC,OAAAA,GAAAA,GAAAA,CAAAA,CAAAA,EAAAA,GAAAA,CAAAA,CAAAA,EAEA+B,GAAAA,IAAAA,CACAM,MAAAA,EAAAA,KACAnE,GAAAA,uBAAAA,CAAAA,EAGKoC,GAAAiC,GAAA,CAAA,CAAA,EACT,MAAAC,GAAA,OAAA,aAEMR,KAAqB,EAAA,EACrBS,SAAa,IAAA,CACTC,GAAAA,UACCA,EAAAA,CACT,QAAA,CAAAF,GACO,iBAAA,EAAA,CACT,EAEAlC,GAAgB,MAAA,IAAA,CAER8B,CAAAA,GAAAA,GAA4B,SAAAJ,GAAA,GAC5BvE,IAEFhJ,GAAgByN,QAAAA,EAAAA,EAClB,CACF,QAAA,CAAAM,GACOG,iBAAAA,GAEP,MAAC,GACD,gBACE9H,GAA2B,CACzB+H,MAASC,EAAA,SAAA,iBAAA,sBAAA,EACVC,EAAA,CAAA,CAAAD,EACAE,EAAAF,EAAA,SAAA,GAAAA,EAAA,CAAA,EAAA,cAAA,oBAAA,EAEL,UAA2B,CAAAE,CACnB,CAAA,CAAElM,EAAAA,GAAsB8J,IAAAA,CACxB,CAAA9C,GAAAmE,MAAEnL,GACR,EAAA,CAAAgH,KAAkChH,CAAAA,CAAAA,EACpC,MAAAmM,GAAAzD,EAAA,CAAA,CAAA,EACMgD,OAEGxF,OAAyBkG,IAAAA,EAAAA,OAAAA,GAExBV,GAAAA,IAAmB,CAGvBW,GADAV,GACAU,GAAAA,cAAyB,UAAA,OAC/BT,MAAAA,OAGIS,EAAqB,CAGvB,IAAA/Q,UACYqQ,EAAAA,CASV,GAAA9E,EAAA,GACAwF,QAAqB,CAEvB,GAAAxF,EAAA,QAAA,YACY8E,EAAAA,QAAAA,SACQ,KAAA9E,EAAA,QAAA,IAAA,CAAA,EAEX,KACPyF,YAAAA,CACQN,IAAAA,EAAAA,QACAC,OAAAA,EAAaD,QAAAA,MACbE,YAAAA,UACc,MACpB,WAAArC,EACF,SAAAf,EAEJ,UAAAC,EACAwD,KAAAA,EACM,iBAAAnC,CACM,CAAA,EAEIe,CAAAA,GAAAA,KAAsB,OAAA,GAAA,CAAAqB,OAEhCL,GAAAA,OAAAA,IAAAA,EAAAA,CACAM,KACJ,MAAWC,UACX,UAAgBlF,KAAIsC,IAAO,CAAA,CAC7B,EAAA,KAAA,IAAA,CAAA,CAAA,EAAA,MAAAlM,GAAA,CAAA,CAAA,EACAuO,WAA+B,gBAAAQ,CAAA,EAKzB5N,EACJ6N,MAAqB,GAAA,EACrBnD,GAAwB,KACtBnO,SAEI,CAAAuR,GAAA,OAAA,IAAAJ,GAAA,CAAA,CAAA,GAAA,CAAA,CAAA,EAAAhD,GAAA,IAAA,CAAA,MAAAqD,EAAAlP,GAAA,CAAA,KAMMiJ,CACJuC,MAAAA,CACEkC,EAAAA,EAAAA,eAA0BA,EAAAA,aAC1ByB,EAAUlG,CAAAA,EACVmG,QAAAA,QAA4BA,OAAAA,IAAAA,CAC9B,MAAArN,EAAAsN,EAAAC,CAAA,EAEF,GAAAvN,EAAA,OAAA,OAAA,CACS,MAAAwN,EAAAxN,EAAA,YACFmK,GAAAA,EAAAA,SAAAA,EAAAA,IAAAA,GACTc,SAEAf,CACAf,CACAC,GAAAA,EAAAA,OAAAA,GAAAA,EAAAA,QAAAA,EAAAA,CACAI,MAAAA,6BAAAA,CAAAA,SAAAA,EACAiB,MACF,CACF,GAAAgD,EAAA,OAAA,EAAA,CAEExP,iBAA4BuO,EAG5BjF,EAAAA,gBAAc,EACXmG,MAAAA,EACI/R,EAAK8O,EAAA,OACLuC,EAAAA,EAAAA,MAAAA,EAAAA,CAAAA,EACHhM,GAAO2M,EAAA,QAAA,EAAA,CACPC,MAAAA,6BAAoB1F,CAAA,SAAA,EAErB2F,MACSC,CACT,MACO7P,EAAM0P,EAAA,IAAAH,IAAA,CACJO,KAAAA,EACT,KAAAP,EAAA,KACiBrD,KAAAA,EAAAA,KACtB,IAAA,IAAA,gBAAAqD,CAAA,EACF,GAAA,KACAP,gBACAnD,EAAAA,EACmBT,EAAA,CAAA,GAAAoB,EAAA,GAAAuD,CAAA,CAAA,CAGjB,CACKN,EACL,OAAA,iBAAA,QAAAP,CAAA,EACF,MAAKc,EAAAhQ,GAAA,CAEL6L,EAAU,aAAM,MAAA,OAAA,IACRqD,EAAAA,eAAelP,EACbA,EAAA,gBAAA,EAAEqP,EACR,cAAA,iBAAgB,WAAAW,CAAA,EAChB,OAAA,iBAAoBX,QAAmB,EAC/BtN,IAAAA,CACFA,OAAAA,oBAAsB,QAAAmN,CAAA,EAClBK,OAAAA,oBAAsB,WAAAS,CAAA,EAC5B,OAAA,oBAAY5F,OAAmB6F,CAASV,CACtCC,CAAe,EACjB,CAAAhD,CAAA,CAAA,EACF,KAAA,CAAA0D,GAAAC,EAAA,EAAAxG,EAAA,EAAA,EACF,CAAAyG,GAAAC,EAAA,EAAA1G,EAAA,EAAA,EACA,CAAA2G,GAAU7M,EAAc+I,EAAAA,IAAgD,EAChE,CAAA+D,GAAAC,MAAyD,IAAA,EAC/D,CAAAC,GAAAC,EAAA,EAAAC,GAAA,IAAA,CACF,MAAAC,EAAA,CAAA,EACAtH,EAAY,CAAA,EAAEkG,CAAM,gCAAAqB,EAAC,CAAA,CACjBrB,EAAAA,GAAAA,SACFxP,OAAAA,GAAiB,QAAAqE,GAAA,CACjBrE,KAAkB,CAAAsE,CAAA,EAAAD,EAEZyM,IAAAA,UAA6CrN,SAAAA,IAAAA,IAAAA,EAAAA,SAAAA,CAAAA,GAAAA,IAAAA,MAAAA,GAAAA,QAAAA,GAAAA,SAAAA,CAAAA,EACnDmN,EAAqBpB,KAAAA,CAAAA,EAEbuB,EAAA,KAAA1M,CAAA,CACN,CACF,EACM0L,EAAaL,KAAAA,CAAAA,CAAAA,EAAAA,CAAAA,EAAkBH,CAAAA,EAAUyB,CAAA,IAC7CzB,IAAAA,EAAAA,GACA0B,IAAWA,EAAAA,IACAC,cAAAA,CAAAA,CACXC,EAA6BJ,EACzB,KAAA,CAAA,CAAAK,EAAAC,CAAA,EAAA,CAAAC,EAAAN,CAAA,IAAAK,EAAA,cAAAL,CAAA,CAAA,EACS,CAAAJ,EAAAG,CAAA,CAAA,EAAA,CAAA7F,EACbqF,EAAA,CAAA,EACFnF,GAA0CuF,GAAA,IAAA,CAAA,EAAA1H,GAAA,MAAAA,EAAc,YAAA,KAAA,OAAA,KAAA,IAAA,EAAA,IAAA,KAAAA,EAAA,SAAA,IAAA,IAAA,GAAA,GAAA,GAAA,GAAA,EAAA,CAAAA,CAAA,CAAA,EAC1DsI,GAAA,IAAA,CACFC,KACOtD,GAAAA,cAAAA,UAA0BgB,EACjC,EAEE,OAAAuC,EAAMC,MAAAA,CACJ1R,GAAAA,0BACAA,SAAkB,CAAAyR,EAAA,MAAA,CACpB,GAAA,oBACF,MAAArI,EAAA,aAAA,GACO8E,SAAAA,CAAAA,EAAAA,OACAA,MAAAA,cACP,SAAa,EAAAlE,GAAA,YAAAA,EAAA,eAOT2H,EAACzB,GAAAA,CACAE,QAAAA,EACAE,gBAA+BvG,EAAA,YAE/BwG,gBAAAA,GACAE,gBAAAA,EACL,CAAA,IAqFcpH,KAA2B,SAAA,CACzBH,KAAAA,SACAD,MAAAA,mBAAAA,SACaQ,IAAA,UAAA,YACFyC,OACTc,GAAAA,CAAAA,OAAAA,QACApB,MAAAA,0CAAoCxJ,EACpC6J,MACAf,CACAC,GAAAA,OAAAA,OAAAA,WAAAA,YAAAA,CACAI,IAAAA,EAAAA,OAAAA,OAAAA,WAAAA,gBAAAA,MAAAA,EAAAA,WAAAA,CACAiB,MAAAA,oJAAAA,EACF,MACD,CAID,GAAA,CADE,QADW,iKACX,EACF,MAEQ,CACVxD,EAAA,CAAE4I,GAAAA,KAES,MAAAC,EAAA,CAAa,WAAA3I,EAAW,cAAAD,EAErC0I,YAAA,CACO,IAAA/H,EAAA,QACC,OAAAmB,EAAA,QAAA,MACGwG,YAAAA,EAAAA,QAAAA,MAAWK,WAAAA,EAET,SAAA1G,EAAe,UAAAC,EAAY,KAAAI,EAExCoG,iBAAAA,CACO,CAAA,SAEiB,OAAA,YAAAE,SACP,OAAA,WAAA,aACTtE,cAAgB,WAAA,YAAA,GACV,WAAA,IAAA,CACV,OAAA,OAAA,WAAA,YAAA,EACF,EAAA,EAAA,GAEW,OAAA,OAAA,WAAA,YAAA,GACJ,OAAA,OAAA,WAAA,cAAA,YAIToE,OAAAA,OAAA,WAAA,cAAA,UAAA,GAEQ,CAAA,IAgBA,WAAgBG,EAAA,CAClBC,KAAAA,QACA,IAAA,QAAA,CACF,CAEI3L,CAAAA,EA1JKqL,EAAA,OAAA,CACjBV,yBACA,SAAA,CAAAY,EAAA,SAAA,eAAkDK,MAAAA,oBACrCnM,SAAAA,IAAe,UAC1B,QAASxB,IAAAA,CAGbC,GAAsB4H,CAKtB0E,WAAAA,EACK,cAAA3H,EACL8H,YAAoB,CACtB,IAAAnH,EAAA,QACD,OAAAmB,EAAA,QAAA,MACYkH,YAAcZ,EAAkBL,QAAAA,MACvCI,WAAAA,EACAE,SAAAA,EACGD,UAAAA,EACR,KAAA9F,EACa0G,iBAAAA,EAGqB,CACvB1B,MAed,WAGEoB,EAAAG,EAAA,CAAQ,KAAA,aACNL,SAAA,CAAQ,CAAA,CAAoBS,aAAmC,CAAGN,KAChEH,SAAW,MAAA,oBAAaG,QACDO,GAAAA,SAAAA,EAAAA,EAAAA,CAAAA,KAAAA,WAAAA,IAAAA,UAAAA,CAAAA,CAAAA,CAAAA,EAAAA,IAAAA,EAAAA,SAAAA,MAON,SACFnI,MAAAA,kCACuBoI,UACjB,QAAA,IAAA,CACA7E,GAAA,GAGjBnE,GAC8BwI,EAE1BX,SAAKU,EAAAG,EAAA,CACC,KAAA,GAAA,EACgB,CAAA,CACtBO,CAkBE,CAAA,CAqEIjM,CACF,CAAA,EAAA,CAAA,CAAA6C,GAAWqJ,EAAkBC,MAAAA,CAC3BR,MAAAA,iBAGA,SAAA,CAAAJ,EAAAa,GAAA,CACF,OAAAvJ,EAEA,KAAA,IAEMgF,YAAAA,EACN,CAAA,EAAAwD,EAAI,MAAM,CACZ,MAAA,iCAMQ,SAAA,CAAA,gBAAAxI,EAAA,QAAA,MAAAA,EAAA,QAAA,SAAA,UAAAwJ,IAAA,GAAAhB,EAAAiB,GAAA,CAAA,SACI,CAAA,IAAA,IAAAf,EAAA,SAAA,CACR,SAAiB/I,GAAA,OAAA,CAAA6J,GAAA,OAAA,CACfvJ,CAAAA,EAAAA,GAAAA,CAAAA,CACAD,CAAAA,CAAAA,CAAAA,CAAAA,CACa,CAAA,EAAA,CAAA,CAAAC,GACFgD,EAAAA,MAAAA,CACTc,MAAAA,iBACApB,SAAAA,CAAAA,EAAAA,GAAAA,CACAK,OAAAA,EACAf,KAAAA,IACAC,YAAAA,EAAAA,CACAI,EAAAA,EAAAA,MAAAA,CACAiB,MAAAA,wBACF,SAAA,qBAAA,CACF,CAAA,CACApG,CAAAA,EAAAA,EAAAA,QACIA,IAAAA,GACKkM,MAAAA,oBAAgC,GACvC3G,MAAAA,CACS2G,cAAAA,cAAgC,OAAA,OAAA,YACpC,UAAA,GAAA,CAAA,EAEEA,UAAAA,GAAAA,CACTtS,EAAA,MAAA,UAAAA,EAAA,SAAAA,EAAA,UACAkN,GAAI9G,QAAOkM,cAAkBC,IAAAA,MAAAA,SAAyB,CAE7CD,WAAAA,EACT,CAAA,CAAA,CACF,EAEJ,SAAAtS,GAAA,CAAE4R,EAAAA,eAEG,EAAA,MAAMe,EAAA,IAAA,SAAA3S,EAAA,MAAA,EAAY4F,EAAA,OAAA,YAAA+M,EAAA,QAAA,CAAA,EAAQ,GAAE,CAGtC,OAAA3F,EAEA/D,WAAAA,EACU,UAAA+C,EAAgB4F,YAAAA,CACT3I,EAAAA,EAAwB2J,GAAT1B,EAAKlF,IAAA,KAAeT,EAAA,CACnDkG,GAAAA,EAAA,QAAA,OAAA,EAAA,CAAW,MAAA,mCAAA,EAAgC,MAMpC,CAED,GACG7I,EAAAA,QAAW,KAAAiK,WAAgC,OAGhD,6BAAA,EACD,MACG,CAGR,CACWrG,EAAA,OAAA,GACFA,EAAA,KAAAsG,GAAA,UAAA,SAAAtR,IAAAtF,EAAA4W,EAAA,cAAA,YAAA5W,EAAA,OAAA,MAAAsF,GAAA,KAAAtF,IAAA,GAAyC,CAAf,QAAA,4CAAA,IACC0V,EAAC5F,GAAAJ,GAAA,OAAyBoB,EAAAA,IAAA,GAAA,OAAAA,EAGhEyE,GAAA,cAAA,WAAA,GACOvE,EAAAA,SAAAA,GACLgF,UACO,GAAA,CACLa,GAAAA,EAA2B,OAAA,EAAA,CAC3BC,MAAqBC,EAAAzG,EAAkB,IAAA0G,IAAA,CACzC,KAAA,CACkB,KAAA3D,GACF,YAAA4D,GACJjH,GAAAA,EAC4B,EAAAgH,GACpC,GAAAxF,GACF,OAAAwF,GACF,CACiB,MAAAE,GAAAC,GAAA,CACE,KAAA9D,GAEA,YAAA4D,EACjB,CAAgBxO,EACRmF,SAAelE,GAAO,MAAA,OAAAwN,EAAA,EAAA,KAAAE,KAC1BA,GAAA,KAAEtG,GAAAA,GAAAA,GAAAA,IAAoB7B,GAAWS,CAAgBhG,CAGrDuF,CAAAA,EAkBUoI,GAAA,MAAA,QAAA,WAAAN,CAAA,EACJ1H,GAAAA,GAAa9H,KAAAA,IAAY,QAC3BsO,OAAyCvP,GAAA,SAAA,YAAA,GAAAtG,GAAAsG,GAAA,QAAA,MAAAtG,GAAA,GACzC,CAAA,EAAA,CACFiF,GAAA,cAAA,WAAA,MACiBqS,cAAiBX,gBAAW,GAC3Cd,EAAmC,OAAA,EACnCwB,GAAA,QAAA/Q,IAAA,CACFA,GAAA,SAAA,YACF,MAAAA,GAAA,QAAA,eAAA,CAAA,SAAA,CAKQiR,CAAAA,EAGiB,MACfxF,CAGN,CACF,IAAAyF,EAAA,CACF,OAAA1G,EAISA,aAAWpB,EAGpBzK,SAAAA,EACAuI,UAAoBsC,EACP,KAAAT,EAEDzB,gBAAyCoJ,GAAAA,EAAA,EAAA,CAC7C1G,EAEIyG,GAAgBzG,GAAAA,iCAAqC,EACnDkH,EAAA,iBAAAlH,EAAA,IAAA0G,IAAE3D,CAAM4D,GAAAA,EAAAA,GAAazF,YAAAA,EAAAA,WAE3B,EAESwF,EACFhK,IACLwK,EAAA,WAAeL,EACb9D,EAAAA,gBAAAA,GAAAA,YAAAA,EAAAA,KAAAA,QACA4D,EACDE,GAAAK,CAAA,EACMnK,IAAAA,EACL,GAAAL,EACEgK,EAAAA,MAAAA,EAAgBI,GAAI5F,SAAAA,QAAAA,EAAAA,EAAAA,EAAAA,OAAAA,CAAAA,EACtBiG,GAAAC,EAAApK,EAAA,CACO8J,cAAAA,EAAAA,CAAAA,MAGb,IAAC,CACDM,EAAgB,MAAArK,EAAcsK,GAAAA,SAAAA,OAAwBH,EAAA,CAIpDH,YAAc/Q,CACZ,QAAcwK,CAEhB,kBAAApD,EAAA,OACAzI,CACAA,CACAuI,CAAAA,CAEQ7D,MAAAA,CACFrD,EAAAA,QAAkB,GAAY,SAAA,OAAAkR,CAAA,CAChCpK,CAEFnI,GAAA,cAAA,UAAA,GAAAA,GACD,cAAA,WAAA,GACDuI,EAAA,SAAA,EACFV,EAAA,CAEcuK,KAAAA,EAAAA,OAAAA,EAAAA,QAAAA,OAAS/G,UAAAA,EAAiB,SAAAhD,CAAC,CAC3C,CAQA,OAAasK,EAAA,CACX9G,GAAAA,cAAAA,WAAAA,GAAAA,GAAAA,cAAAA,gBAAAA,GAAAA,OAEcpB,GAAAA,YAAAA,EAAAA,SAAAA,CAAAA,EACdV,EAAAA,OAAAA,CAAAA,CACAC,KACAI,EAAAA,kBAE4BtE,CAG9B,MAAA,kBACIiC,SAAAA,CAAAA,EAAAA,QAAuB,CAClB6K,IAAAA,EAEI,KAAA,OAAA,KAAA,cACUrG,8BACSyF,SAAAA,IAAAA,UAAAA,MAAAA,qBAG1B,KAAAjI,EAAA,WAEJ,OACF,IAAA,OACEwI,MAAAA,CAEOM,QAAAA,EAAAA,EAAAA,EACT,cAAA7I,EAAA,OAAA,MACAuI,EACQ5J,QAAAA,KAEJ8J,IACJ,CACc,CAAA,EAAAnC,EAAA,QAAA,CAGZkC,MAAAA,oBAAgC,YAAA,EAAA,GAAA,MACf,qCAAA,SAChB,CAAAhC,EAAA,QAAA,CACH,KAAO,YACD,KAAA,WACFiC,QAAAA,EAAmD,SACpCnK,IAAA,UAAA,SACFzJ,GAAA,SAAA,MAAAgM,WACgBE,QACzBI,GAAAN,CAAA,EACFA,GACF9P,EAAA2O,EAAC,UAAD,MAAA3O,EAAC,SAGD0X,EAAAA,EAAY,UAAZA,MAAAA,EAAkBrK,OAEtB,CACApI,CAAAA,EAAAA,EAAOoR,GACPpR,KAAAA,SAAkC,QAAA,MAAA,EAClCuI,CAAAA,CAAAA,CAGQ,CAAA,EAAA,IAAA+H,EAAA,QAAA,CAAA,MAAA,kBAAAxF,IAAA,UAAA,CAAAd,EAAA,aAAA,EAAA,IAAAc,IAAA,SAAA,YAAA,EAAA,GAAA,MAEA/C,eAAAA,CAAsBD,GAC5B2K,SAAAA,CAAAA,EAAAA,EAAAA,CACApK,KAAAA,GAAAA,CAAAA,EACF,IAACyC,CAAA,KACS,SAAA,CACV9K,KAAAA,aACAA,MAAOoR,EACPjJ,YAAe,CACTtJ,WAAc,KAAA,CACpB0J,EACF,SAAAD,IAAA,WAAA,CAAA,CAAAP,EACC,IAAA,OACL,SAAA,CAAAuI,EAAA,SAAA,CAAEG,MAEFH,SAAW,SAAA,CAAA,UAAAE,EAAAG,EAAA,CAAiBF,KAC1BD,OAAA,CACO9G,CAAAA,CAAAA,CACA,EAAA8G,EAAA,SAAA,CACA,MAAA,WACO,SAAA,UAAA,KACU,SAAA,CAChB,MAAA,UACAzG,SAAAA,gBAAAA,CACK,EAAAyG,EAAA,SAAA,CACP,MAAA,SACG,SAAA,iBAAA,CACLqB,CAAAA,CAAyB,CACzBD,CAAAA,CACF,CAAA,EAAA,GAAA,CAAA,CAAA,EACAkB,KAAe,CACG,IAAAlJ,EAClB,YAAA9B,EAAA,kBAAAC,EAAA,iBAAA,sBAAE,UAEJsD,GAAA,YAAAA,EAAA,UAAA,EAAA,SACS/C,IAAA,UAA8C,KAC/CyB,EAAoC0G,QAAAA,IAE1CD,CAAA7D,IACO,EACA,cAAA1F,EACI+C,cACauI,GAAA,CACtBQ,KAAAA,CACQ/I,KAAAA,EACNmB,EAAAA,EACA,MAAA6H,CACEtJ,EAAAA,EAA8B,OAChCoG,IAAO,WACLlG,EAAAA,GAAYmB,SAASkI,OAAM,KAAA,CAC7B,EAAAC,EACF,MAAAF,EAEFxC,QAAK,EAAA,CAAO,EAEdF,EAAA,GAAA,OAAA,MAAAiC,CAAA,CAAA,EAIEY,eAAmC1C,GAAAA,YAAAA,EAEnCD,QAAK,gBAAC4C,IAA2CtI,mBAAAA,GAAAA,YAAAA,EAAAA,oBAAAA,IAAAA,CACjDwF,GACO+C,GAAA,YAAAA,EAAA,QAAA,UACLpS,GAAO6J,CACPiI,mBAAiBM,GAAA,YAAAA,EAAA,oBAAA,IACDxU,CAAAA,GAChBwU,GAAA,YAAAA,EAAA,QAAA,yBAAAA,GAAA,MAAAA,EAAA,YACAC,GAAmCD,EAAA,SAAEtL,CAC3B0I,CAEV,CAAA,GAAApF,GAAA,YAAAA,EAAc,QAAA,GAAAiF,EAAA,MAAA,CAAA,MAAS,oBACT,SAAM,CAAAjF,EAAA,IAAA,CAAA0G,EAAA5D,IAAA,CAAA,KAAU,CAAA,GAAA5B,EAE9B,KAAA6B,CAAc,EAAUqC,EACxBD,GAAApC,GAAA,YAAAA,EAAA,OAAAA,GAAA,YAAAA,EAAA,OAAAA,GAAA,YAAAA,EAAA,MAAA,OAAcoC,EAAA+C,GAAA,CAAA,WAAAxB,EAAwB,SACtCzJ,IAAA,UAAA,KAAcyB,EAAA,oBAAS9I,GAAA,CAAwBgJ,EAAAuJ,GAAA,CACxC,MAAAC,EAAA,CAAA,GAAAD,CAAA,EACC,OAAAC,EAAAtF,CAAA,EAAA,YAAAlN,EAELwS,CAAA,CACF7J,CAEH9B,EAMF4L,gBACsBF,GAChBzJ,EAAAA,OAAAA,CAAAA,EAAAA,IAAAA,IAAAA,CAAAA,EAEY,CAAA,EAClBwC,GAAAoH,GAAAxF,CAAA,CAAA,CACAlH,EAAAA,EAAAA,QAAAA,CACA2M,MAAAA,kBACQ,SAAA,CAAApD,EAAA,QAAA,CAAEV,KAAAA,YAAMoD,KAAAA,WAAGF,QAAAA,EAAUT,SAAAA,IAAAA,UAC3B,SAAa1T,GAAY,CACvB,MAAagV,EAAYC,EAAAA,OAAAA,QACvBZ,GAAAA,CAAAA,CACAF,CAAAA,CAAAA,EACAe,IAASvD,EAAA,OAAA,CACX,SAAC,yBAAA,CACH,EAAA,IAAAA,EAAAG,EAAA,CACA,KAAaqD,OAAAA,EAAUC,QAAY,MAAA,EAAA,CACrC,CAAA,CAAA,CACAC,CAAAA,CACMb,CAAAA,EAAAA,CAAAA,CAAAA,GAAAA,KAAiB,CACC,KAAAtJ,EAClBoK,WAAAA,EAAgD,cAAA7K,EAEpD,cAAAG,GACuB,uBAAAD,EACnB2K,KAAAA,EAAgD,SACjD7L,IAAA,UAAA,QAED+K,GAAAA,CAGAhE,GAAAA,EAAAA,CACF,MAAA+E,EAAA,CACF,GAAAhJ,CAAA,EAGWiJ,EAAAD,CAAA,CAAA,MAEDC,EAAA,IAAA,CAAMjG,CAAAA,CAAAA,EAAKkC,EAAIyB,MAAAA,CACrB,MAAA,eACA,MAAA,CAGIA,eAAAA,UAAAA,EACsB,SAChBhI,CAAAA,EAAAA,OAAAA,CACNuK,SAAAA,CAAAA,EAAAA,QAAgC,CAC9BrK,MAAAA,iBACQwJ,SAAAA,CAAAA,EAAAA,QAAAA,CACSc,KAAAA,OACRd,OAAAA,EAAAA,KAAAA,GAAAA,EACT,SAACpI,EAAA,OAAAvC,EAAA,EACH,SAAAR,IAAA,WAAA+C,EAAA,QAAAvC,GAAA,CAAA,CAAAsB,WACgBvL,GAAA,CACdoL,MAAAA,EAAAA,EAAAA,OAAqC,MACnC,GAAA,CAAAoE,SACD,MAAAO,EAAA,MAAA,KAAAP,CAAA,EAAA,IAAAD,IAAA,CACH,KAAAA,EAfWuF,KAAAA,EAAUY,KAmB3B,KAAAnG,EAAA,KAAa,IAAA,IAAA,gBAAAA,CAAA,EAAiBqC,GAC5BD,KAEO,YAAA,IACIxG,EAAAA,IACa,OAAA4E,EAAA,OAAA9F,EACtBiK,MAAiB,6BAAAjK,CAAA,SAAA,EAEfqC,EAAsBqI,GACxBA,EAAA,OAAA5E,CAAA,CAEF4B,EACAA,EAAAA,OAAK,MAAA,EAAO,CAAmC,CAAM,EAAAA,EAAAG,EAAA,CAC/C,KAAA,YAAA,CAGTvG,CAAAA,CACI,CACGL,EAAAA,GAAAA,MAAAA,EAAAA,GAAAA,EAAAA,GAAAA,CACNR,SAAAA,EAAAA,SAAAA,CACAD,KAAAA,SACAG,MAAAA,iBACAD,SAAAA,IAAAA,WAAAA,CAAAA,CAAAA,GAAAA,CAAAA,CAAAA,EAAAA,OACAY,QAAAA,IAAAA,GACsB,CACZA,QAAS,CAAA,GAAA,EAAA,EACP,UAAA,GAAA,GAAA,GACaA,SAAAA,EAAAA,CAAK,CAC1BiK,EACK,SAAA7D,EAAAG,EAAA,CACL0D,KAAY,OACd,IAAA,UAAA,CACF,CAAA,CAGJ/D,CAAA,CACQ,EAAAE,EAAA,SAAA,CACC,KAAA,SACW,MAAA,iBAClB,SAAAlI,IAAA,UAAEmI,QAEFH,IAAA,CAAAG,GACE,EAAA,CAAa,EAAgBA,WAC3BD,EAAA,CACEV,KAAK,QAAA,CACL0E,CAAmC,CACnCC,EAAAA,CAAAA,CAAAA,GAAAA,SAA2BnS,mBAA+BkO,EAAA,SAAA,CAAA,cAM1DuC,MAAAA,mCACQ1E,SAAAA,IAAiBA,WAAAA,EAAAA,QAAAA,GAAAA,CAAAA,CAAAA,EACvB,QAAKA,IAAO,CAEZqG,KAAmBC,CACjBvG,EAAAA,WACW0B,OAAAA,CAAAA,SACL1B,KAAK2B,CACXC,CAA6B,CAAA,CAAA,CACzB,CAAA,EAAAQ,EAAA,MAAA,CAAA,MAAA,QACS,CAAA,EAAAlI,IACb,UAAAkI,EAAAoE,GAAA,CACMjM,OAAAA,EAGR,CAAA,EAAA6H,EAAAqE,GACmBvS,CAIf,cAAA2E,EACF,OACKqB,IAAA,SACL2B,CAAAA,EAAAA,EAAAA,QAAAA,CACSuJ,MAAAA,kBAAAA,IAA6B1J,GAAA,SAAAsF,IAAA,MAAAA,GAAA,QAAA,CAAAA,GAAA,SAAArF,CAAA,EAAA,YAAA,EAAA,GAAA,SACrC,CAAAyG,EAAA,OAAA,CACH,MAAA,YAEA3R,gBAAiBkL,CAAA,mBAAA,MAAA,CACnB,EAAAuG,EAAA,SAAA,CAAE,KAEJE,WAAK,MAAMzG,EAAY,SAAGlL,GAAA,CAG3B0K,KAAAA,CAEGkH,MAAAA,CACE,EACO5R,EAAA,OACLkS,GAAM9P,GAAAqE,EAAA,EACNgO,GAAAA,8BAEIlJ,GACD9E,EAAkBhD,CAAAA,EAGX,SAAAgG,IAAA,UACNgD,IAAAA,OACAC,SAAAA,CAAAA,GAAqB,IAAA,CAAA,CAAApI,EAAAC,EAAAC,CAAA,IAAAiN,EAAA,SAAA,CAAA,MAAAnN,EAAA,SACX,CAAAC,EAAA,KAAAC,EAAA,GAAA,CAAA,EAAAF,CACX,CAAA,EAAAqN,EAAA,KAAA,CAAA,CAAA,EAAAjB,GAAA,IAAA,CAAA,CAAApM,EAAAC,EAAAC,CAAA,IAAAiN,EAAA,SAAA,CACH,MAAAnN,EAAEsN,SAEFD,GAAK,KAAAnN,EAAA,GAAA,CAAA,EAAAF,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAA,EAAA,IAAYqN,EAAA,SAAA,CAAA,KAC5B,SAAC,MAafA,QAAA,SACOlI,IAAA,UAAA,SACCR,EAAA,QAAAC,EAAA,SAAA,MAAA,CAAA,CAAA,CACgB,CAAA,CAAA,CAEpBmH,CAAAA,CAAAA,CAAwB,CAC1B,EAAAH,IAAAyB,EAAAsE,GAAA,CAAErE,QAAAA,GAAAA,CAEG5R,EAAA,SAAMA,EAAA,eAAAmQ,GAAU,EAAA,CAGrB,EACO,SACCwB,EAAAuE,GAAA,CAAA,MAAA3M,EAIFgC,SAAAA,EAGFsK,QAAAA,IAAAA,CACF1F,GAAA,EAAA,CAAEyB,EAEF,kBAAM1B,IAAA,YAAAA,GAAA,kBAAA,SAASiG,GAAA,CAAA,MAElBC,EAAArL,EAAA,QAAA,GAEH4G,CAAAA,EAAA,OAAA,KAAW,CAAU,eAAAnR,EAEX6V,aAAAA,CAAQ,EAEhB1E,EACEvJ,EAAAA,EAAAA,QACoB3K,EAAA,MAAA,EAAA+C,CAAA,EAGxBiR,EAAA6E,EAAA,cAAA,KAAAA,CAAA,EAAA,GAAA,IAAA,GACSC,EAAA9Y,EACQwN,MAAAA,CAAAA,EAKZ2G,EAEH,cAAA,KAAA2E,CAAA,EAAA,GAAA,IAAYC,EAAAF,EAAAG,EAAA,IAAAN,EAAAO,EAAAH,EAAW3E,EAAAA,MACE1G,EAAiBkL,EAE1C3E,eAAA2E,EAAA,aAAA3V,EAAA,EAAA0V,EAAA,OAAAO,EAAA,OAAAN,EACO,MAAA,EAAAA,EACElL,cAAAA,IAAAA,MAAAA,OAAAA,CAAAA,CACPgJ,CACQ,CAAA,CAAA,CAAE9R,EAAAA,IAAAA,EAAAA,GAAAA,CAAAA,QAAMpC,GAAMtD,CACpB2O,EAAAA,SAAAA,EAAAA,eACAL,GAAc2L,EAAuBvU,CACvC,EACsB,SAClBuP,EAAAiF,GAAA,CAAMhF,MAAAA,EAGR,SAAApI,EAAelF,aAEf+L,GAEG,EAAA,CAEH,EAAe/L,kBACZC,IAAAA,YAAAA,qBACH,SAAQsS,GACR,CAAA,MACKT,EAAArL,EAAA,QAAA,GACF,CACT4G,EAAA,OAAA,KACO,CACLO,eAAAA,EACAuC,aAAAA,CAAsB,EAErBxL,EACMxL,EAAA2Y,EAAA,MACLU,EAAArZ,EAAA,MAAA,EAAA+C,CAAA,EACDuW,EAAAD,EAAA,cAAA,KAAAA,CAAA,EAAA,GAAA,IAAA,GAGPnF,EAAAA,EAAM,MAAAlR,CAAA,EACYuW,EAAA,cAAA,KAAAC,CAAA,EAAA,GAAA,IACGjX,EAAAA,EAAiB+W,EAAAF,EAAAG,EAAAC,EAChC9G,EAAAA,MAAAA,EACFiG,EAAA,eAAAA,EAAA,aAAA3V,EAAAoW,EAAA,OAAAG,EAAA,OACFZ,EAAA,MAAA,EAAExE,gBAEW,IAAA,MAAA,OAAA,CAAA,CACXrI,CAAAA,CACAC,CAAAA,CAAAA,EACAR,IAAe2I,EAAAsE,GAAA,CACb9F,QAAAA,GAAAA,CACFnQ,EAAA,SAAAA,EAAA,kBACmBkQ,EAAmBoF,CAEpC,EACA,SAAe3D,EAAAuF,GAAA,CACT,QAAA,IAAArB,GAAA,EAAA,EAAErV,SAAAA,CAAAA,CAAgBC,IAAAA,EAAa,KAAAwQ,EACrC,SAAAkG,CACA,IAAA,CACA,GAAA3K,UACIvC,EAAA,CAIEsM,MAAAA,6BAA0CtM,CAAA,SAAA,EAChD,MAGA,EAOAmM,SAAiBI,SACjBJ,IAAAA,EAKAA,GAAAA,CACAA,EAAuBgB,GAAA,CACzB,KAAA,mBACD,SAAA,EAAA,CAIHzF,EACEU,MAAgBgF,EAAA,MAAA,MAAAlG,EAAA,CACGnR,eAAiB,aAChCqQ,CAAAA,EAAAA,KAAAA,GAAyBiD,EAAA,KAAA,CAAA,EAC3B/D,EAAA,IAAA,KAAA,CAAA8H,CAAA,EAAApG,IAAA,YAAA,YAAA,YAAA,CACF,KAAAA,CAAA,CAAEW,EAGArI,EAAAA,CAAAA,GAAAA,EAAAA,CACAC,KAAAA,SAEE6G,KAAAA,EAAAA,KACF,GAAA,iBACqCiF,GAAAA,EAAAA,CACrCgC,EACElM,EAA6Bc,CAAAA,GACzBhQ,EAAAqb,GAAA,YAAAA,EAAW,YAAX,MAAArb,EAAA,KAAAqb,EACE,MAAA,EAAE/W,EAAAA,GAAAA,YAAAA,EAAAA,YAAAA,MAAAA,EAAAA,KAAAA,GAAgBC,GAAAA,wBAAAA,CAAiB2V,CACzC,IACA,CACA,CAAA,CAKMa,CAAAA,CAAAA,CACN,CAAA,CAGA,CAMAb,SAAAA,GAAiBI,EAAAA,CACjBJ,GAAAA,CAAAA,EAAAA,OAEAA,KAAAA,CACAA,MAAAA,EACF,aAAAoB,EAAA,aAAAC,EACA,aAAAC,CAKFrF,EAAAA,EACMrS,GAAAA,EAAaA,OAAiB,YAAA,CAChC6V,MAAAA,EAAAA,EAAsB6B,EACxBC,EAAAvV,EAAAqV,EAAA/W,EAAA,KAAA,KACF0V,EAAA,MAAA,OAAAuB,CAAE/F,CAEa,CACwB,kBAC1BpI,EAAAD,EAAA,CAAO0H,MAAAA,GAALE,MAAAA,EAAAA,GAAAA,aAAAA,KAAAA,GAAKF,OAAAA,GAAAA,EAAAA,eAAAA,EAAMkG,EAAAA,IAAAA,GAAAA,EAAAA,CAAAA,KAAe,CAAA,WAAA,EAC7BrN,eAAAA,EACJ0C,CAAAA,EAEA,MAAA,CAAAoL,EAAAC,CAAA,CAEF,CAAA,MACFC,GAAAC,GAAAC,GAAA,CAIM,WAAA,CAAAC,EAAAC,IAAAD,EAAA,WAAAC,EAAA,SACFX,OAAAA,GAAAA,GAAAA,GACQ,CAAA,EACIY,GACX1a,GAAA,CACK4Z,MAAAA,EAAAA,GAAAA,CAAajC,EAAW,OAAAgD,GAAA,MAAAA,EAAA,OACZA,EACfxI,MAAc0D,EAAAA,CAAAA,EAAAA,IAAAA,GAAU+E,EAAA,IAAA,EAKvBpH,IAAAA,EAGEqH,GAAAA,GAAAA,CAAAA,EAAAA,IACJ,OAEE/I,KAAAA,CACA0B,MAAAA,EAAAA,SAAAA,CACWC,EAAAA,GAAAA,EACP,CAAAzT,EAAA8a,OACqBrc,EAAAsc,EAAA,UAAA,YAAAtc,EAAA,QAAA,EAAA,EAAA,CAG7BkP,cAAAA,EACAmM,cAAAA,EAAAA,IAAsB,CAAA,EAEtBjO,UAAAA,EAAAA,IAAQwG,CACRyH,EACAH,GAAAA,CACF,EAAAqB,EAAAC,EACC5N,IACLe,GAAA,IAAA,CAAAiM,GACDtO,EAAAD,CAAA,EAAA,KAAAoP,GAAA,CAEJ,KAAA,CAAAC,EAAAf,CAAA,EAAAc,EACED,EAAA,QAAAb,CAET,CAAA,EAAA,MAAA7X,GAAA,CAAA,CAAA,CAEA,EAAA,CAAA,CAAA,EACE,MAAe6Y,EAAA/N,IACTgO,EAAAhO,EAAA,EAAA,EAAE1I,GAAAA,IAAAA,CAAOoV,IAAAA,EAAAA,EAAAA,EAAcC,OAAAA,EAAAA,UAAcC,EAAAA,GAAAA,QAAiBtB,KAAAA,CACxDoB,IAAAA,EAGI9W,QAAAA,EACAiX,KAASvV,CACfgU,EAAAA,SAEJ,GADE0C,EAAA,QAAAC,EACFA,IAAA,GAAA,CAEef,EAAAA,QAAAA,SACE,QAAA,MAETH,MACJjV,CACgB,GAAAlF,IAAA,IAAA,CACjB,MAAA6V,GAAArX,GAAAwc,EAAA,UAAA,YAAAxc,GAAA,OAAA6c,EAAA,QAEH,GACMjB,IAAAA,EAAAA,GAAyCvE,EAAA,QAAA,CAAA,CAAA,KAAAyF,CAAA,IAGhCf,MACK,CAAA,UAAAgB,EACnB,IAAA9H,CAEKgH,EAAAA,EACEC;gDACac,GAAAD,CAAA,CAAA;AAAA,+BAEsBZ,CAAAA,CAAAA;AAAAA,kBACzCa,GAAAD,CAAA,CAAA;AAAA,oBAEF,CAAA,EAEiBE,GAAAA,8CAA2BJ,CAAA,eACpCxX,GAAA,UAAA6X,EAAE7P,EAAAA,QAAAA,QAAAA,CAAOC,QAAAA,EAAAA,OAAAA,EAAiB,SAAAjI,MAE1B,MACJ6G,SACsB,CAAC,IAAA,yBACJ,EAAA1K,CAAA,EAChB2b,EAAAA,IAAAA,QAAAA,GAAAA,CACDZ,EAAAA,QAMM,EAAMM,EACdjB,MAAAA,CAEU,CAAA,EACgBD,KAAAA,GAAAA,CAEhB7X,GAAM+Y,IAAAD,EAAA,QACJhJ,OAET,MAAAyD,EAAAnR,EAAA6O,CAAA,GAAA7O,WAGC0W,EAAAA,QAAAA,IAA+B,QACrB,KAAA,wBAGZQ,YAAAA,GAEQ,SAAAnK,EAAEzR,KAAAA,EAAK6E,OAAAA,EAAS9E,QAAAA,CAAWyE,EAAAA,GACjC4W,EAA8Brb,GAAAA,GAAAA,CAAAA,OAG5B8E;oDAEa2W,GAAA9J,CAAA,CAAA;AAAA;AAAA,oCAGb8J,GAAA/G,EAAA,CAAA;AAAA;AAAA;AAAA,6BAQgBuG,GAAqBzD,CAAa;AAAA,0DACzCiE,GAAA9J,CAAA,CAAA;AAAA;AAAA;AAAA,wBAGgB4J,CAAY,MAAAO,IAAArd,GAAAsd,GAAA,YAAAA,EAAA,SAAA,YAAAtd,GAAA,KAAAsd,EAAA,CAAApV,GAAAqV,KAAArV,IAAA,CAAAqV,GAAA,KAAA,GAC7BL,GAAA;AAAA,oDAAEH,GAAAA,CAAAA,CAAAA;AAAAA,+CAAW9H,GAAAA,CAAAA,CAAAA;AAAAA,wBAAQ6H,GAAAA,uBAAAA,GAAAA,EAAAA,CAAAA,UAAAA,EAAAA;AAAAA;AAAAA,mBAGXE,CAEX,CACCA,EAAqBjI,IAAA,aAE5BmI,GAAA,8CAAAL,CAAA,gBAGDxX,GAAiB6X,UAAAA,EACjB7W,GAEImX,UAA0B,OAAA,EAChBnY,SAAAA,EAAAA,CAEd,CACA,CAAA,CACF,CAAA,CAAA,CAEA,EAAasX,EACN,QAAA,iBAAA,uBAAAS,CAAA,EAAAK,EACA3Z,GAAA,CACP,KAAK,CAEH,IAAAtC,EACE,KAAAqE,CAAoC,EAClCkP,EAAAA,OACGxT,CAAAA,MAAAA,EAEL,KAAAmc,CACAC,EAAcjK,EAAAA,QACRnS,IAAAA,KACFuC,EAAA,OAAA,MAAAoC,EAAA,IAAAA,CAAA,IAAA,IACFwX,IACAtQ,EAAAA,OAAY,SAAA,GAAElH,WAAAA,IAAAA,CAAO6O,GAAAA,MAAAA,EAAAA,CAAM6I,qBAAgB,kBAAAF,CACrCrG,EACEzJ,EAAAA,GAAAA,IAEAjE,IAAAA,KACA7F,EAAA,OAAA,MAAAoC,EAAA,IAAAA,CAAA,IAAA,IACJ2X,IACA5H,EAAAA,OAAAA,SAAAA,GACA6H,WAAAA,IAAAA,CACA7K,GAAAA,MAAAA,EAAAA,CACAC,KAAAA,UACAwJ,kBAAAA,CAAAA,EACAY,EACEhX,GAAAA,IAIMxC,EAAA,OAAA,MAAA,GAAAtC,CAAA,GAAA0E,CAAA,EAC0C,EAEhC8W,EAAAA,QAAAA,iBACV/G,sBACDwH,CAAA,EAAAM,EAAAja,GAAA,CAAA,KAAA,CAAA,MAAAtE,CAGoC,EACHwd,EAAAA,OAEjC,GAAAX,EAAA7c,EAAA,KAAA,EAAA8c,EAAA,QAAA,CAAA,MAAA1c,EAAA,IAAA,MAAA,QAAA,CAAA,QAIF,EACCyd,CAAAA,EAIEf,EAAA,QAAA,cAAA1c,CAAA,CAC0Bod,CAAgB,EACLL,EAAA,yBAGZqB,0BAAmBD,CACxC,GAAA,IAAA,CAIdpB,EAAA,UAAAA,EACD,QAAA,oBAAA,uBAAAS,CAAA,EACDT,UAAyB,oBAAA,sBAAAc,CAAA,EACvBP,wDAA0Da,CAAA,EAE5D1Y,CACQuI,EAAAA,CAAAA,CAAAA,EACA+B,GAAA,IAAA,CACN6N,MAAAA,EAAAA,UAA0B,GAAA,CAAAtD,EAChB7U,OACX,IAAA,eAAA,IAAA,CAAA,GACHsX,EAAC,QAAA,CACH,KACF,CACF,OAAAlB,CAEgBzL,EAAAA,EAAAA,wBAKhByN,EAAqB,QAAA,MAAA,OAAAhC,EAAA,IACb,CAAA,CAAEja,EAAKqE,QAAAA,CAAAA,CAAAA,EAAAA,CAAAA,CAAAA,EACP,MAAAoY,EAAArP,EAAA,CAAA,EAAE1I,EAAAA,IAAOwX,EAAAA,GAAAA,GAAAA,OAAAA,GAAK,GAAShN,QAAAA,OAC7B,GAAAuN,EAAiB,QAAA,EAAA,CACfna,EAASoC,QAAgB,UAAe,GACxCgY,EAAU,QAAA,MAERpa,EAAAA,GAAAA,YAAAA,EAAoB,SAApBA,MAAAA,EAAAA,KAAAA,GAEA2L,MACc,CAAA,IAAA0O,EACJC,EACaV,EACpB,SAAA,IAAAS,EAAA,KAAA,OAAAD,EACG,QAAA,UAAAjS,GAAA4Q,EAAA,CACR,cAAA3Q,CACF,CAAA,EAAA;AAAA,EACEpI,EAASoC,SAAgB,MAAe,KAAA,OACxCiY,GAAUC,GAAAA,EAAAD,EAAA,IACRra,EAAoB,SAEN,EAAA,GAAA,EAAAua,GACJC,GAAA,IAAA,SAAA,MAAAC,GACNnF,EAAAA,EAAmBsE,UAAnBtE,YAAAA,EAAmBsE,UAAAA,IAAAA,GAAAA,CAAAA,EACrB,OAACa,EAAA,iBACG,MAAA,EAAA,QAAAC,GAAA,CACRA,EAAA,OAAA,CAAA,CAAA,EAEA1a,MAAAA,GAASoC,EAAAA,EAAAA,YAAAA,YAAAA,EAAc,OACzB,GAAA,CAAA2W,EAAA,OACF,MAAAX,EAAAD,GAAAY,CAAA,EAEgB7M,GAAAA,MAAAA,EAAAA,SAKhB+N,GAAAA,MAAAA,EAAAA,CACQ,KAAA,uBAAEve,UAAAA,CAAAA,GAGR,EAAA,GAAA,EACQI,OAAAA,EAAAA,gBAAY6e,CAAe,IAAA9B,EAAW,KAAK,QAC7C3M,MAAAA,0BACN,SAAA,CAAAyF,EAAA,WAAA,CACF,MAAA,gBAEgBzF,eAAAA,YAIlB,aAAA,KAEA,YAAa,KACX,kBACkBA,IAAAA,OAIAA,KAAAA,IAIAA,KAAAA,KAIlB,GAAAmN,EACF,IAAAb,OACG,SAEL3M,MAAgBpO,EAEd,aAAqByO,CACjB,KAAW,CACT0O,IAAAA,EAEA/B,OAAAA,CACI,EAAA7Y,EAAE2X,GAAAA,IAAAA,SAAAA,EAAAA,EAAAA,SAAAA,EAAAA,SAAO,IACCzL,KAAAA,CAClB,MAAA9J,EACD,eAAA5B,CACDoa,EAAAA,EAGIT,EAFD/X,EAAA,MAAA,EAAA5B,CAAA,EAE6B,MAAA;AAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,QAE5Bqa,kBAA8Cpd,KAAAA,CAAAA,EAAAA,YAChBqd,EAAAC,EAAAC,CAAA,EAAAC,EAAA,MAAA,2BAAA,GAAA,CAAA,EAC9Bd,GAAAA,GAEFC,EAAAA,eAA4Bc,EAC5Bd,KAAAA,CAAAA,CAA8B,EAAAU,EAAA,MAAA,KAAA,GAAA,GAC9BD,EAAgCM,EAAA,GAAA,CAAAA,EAAA,CAAA,IAAA,IAChCpC,GAAA;AAAA,EACFqC,EAAA,GAAAC,CAAA,GAAAN,CAAA,GACIV,EAAAA,aAAAA,GAAAA,EAAAA,CAAAA,EACAC,MAAAA,EAAAA,EAAAA,GAAAA,OACkBpO,EAAAA,kBAAcmO,EAAQrV,EACxBkH,KAAAA,CAEhB9D,MAAAA,EAAAA,EAAAA,EAAAA,OACG1L,EAAA,aAAA,GAAA4e,EAAA9a,CAAA,CACe0L,IACUxP,CAAA,EAAE2d,EAAAA,cAAAA,IAAAA,MAAAA,OAAAA,CAAAA,CAAOC,CAAiBD,MAAO,CAAA,CAG7CnO,EAAAA,UACpBkO,EAAA,QAAA,UAAA1d,EAAA,UAII6d,EAGJ,QAAYH,GAAAA,OACR,KAAM,CAEW,OAAA1d,CACnBge,EAAY1a,EACb+Y,EAAArc,EAAA,MAAA,QAAA,UAAA,EAAA,EACKe,EAAAA,CAAW8d,EACbC,GAAO9e,CAAA,GACL0b,EAAAA,EAAAA,UAAAA,MAAAA,EAAAA,KAAAA,KACFA,EAAeW,CAAA,EACLwB,IAAA,EACJ,MACKnC,CACZ,MAAA,OACH,OAAA,KAGF,EAESS,SAAAA,GAAAA,CACA,GAAAuB,EAAA,QAAA,CACC,KAAA,CAAyBxI,UAAAA,CAE/B,EACQ5R,EAAA,OACSoa,EAAA,QAAA,UAAAjd,CACF,CACD,CAAA,CAAA,EACDwU,EAAA,MAAA,CACX8J,IAAIrB,EACJsB,MAAK,oBACLC,cAAK,MAAA,CAAA,CAAI,CACLtC,CACJb,CAAAA,CAAAA,EACK,SACE/a,GAAAA,CACPme,cAAAA,EAAkB,IAEV,OAAAC,CAAA,EAAEne,CAAKhB,MAAOof,EAAPpf,GAAAA,EAAAA,EAAWsD,uBACxB+b,EAAY3T,EAAe4T,EACrB,OAAAH,EACIlK,EAAA,OAAA,CAAEvP,MAAAA,eAAO5B,OAAAA,EAAAA,CAAAA,EAETya,EAAAA,OAAAA,CACN,MAAA,eAEM,MAAA,GAAAc,CAAA,IAAA3T,CAAuB6S,GAEnB,MAAA,CAEN,eAAca,EAAA1T,EAAA,GACZpI,EACA,SAAA,CAAA2R,EAAA,QAAa,CACb,MAAA,GAAAoK,iBAA2BA,GAAoB,EAAA,SAAAA,GAAA,GAAA,UAAA,EAAA,GAC/C,MAAAD,EAA2B,IAAA1T,CACpB6T,CAAAA,EAAAA,EAAAA,OAAAA,CACDX,MAAAA,UACCY,SAAAA,CAA0B,CAAA,CAAA,CAG3BZ,CAAAA,CACCW,CAAoC,SAC7CE,GAAAC,EAAA,CACAZ,MAAAA,EAAAA,CAAAA,QAAAA,KAAAA,KAAyB,KAAA,KAAA,KAAA,KAAA,KAAA,IAAA,EACzB9e,IAAAA,EAAAA,EACF,KAAA0f,GAAA,MACFA,GAAA,KAAAC,IAIF,MAAA,GAAAD,EAAA,QAAA,CAAA,EAAA,eAAA,CAAA,IAAAE,EAAAD,CAAA,CAAA,EAAA,CAEF,SAAAE,KAAwBrQ,EAASjG,EAAA0R,EAAA,CACXzL,MAAAA,EAAAA,KAAAA,KAAAA,GAA2B/O,EACjDqf,EAAA,KAAA,MAAAvW,EAAAwW,CAAA,EACFC,EAAA,KAAA,MAAA/E,EAAA8E,CAAA,EACAxI,MAAAA,CACQ,SAAAuI,EAAE9f,UAAAA,CAAAA,CAER,CACA6b,SAAAA,GAAY,CACZiD,WAAAA,EACA/C,SAAAA,EACAoC,KAAAA,EAC4B,oBAAApF,EAAA,IAAA,CAC9B,EAAA,SAAAkH,EACO,IAAA,CAAA,CACE,EAAA,CACC,KAAA,CAAAlT,EAAAC,CAAA,EAAAC,EAAA,SAAA,EAEViT,EAAAC,GAAA,iCAAA,EACAC,CACE,KAAA7L,EACQ,GAAAvD,EAAEvQ,KAAAA,CAAAA,EAAAA,EACRid,EAAAA,GAAAA,IAAAA,MAAwCjd,gBAAAA,CAAAA,EAAAA,EAAAA,IAAAA,CAAAA,EAAAA,EAAAA,GAAAA,CAAAA,EAC1C4f,EAAA,CAAA,EAAAxN,GAAA,MAAAA,EAAA,MACFyN,EAAAD,EAAAE,GAAA,EAAA,CAAA,EAEFtL,CAAA,iBACOyI,CACLlI,eAAAA,EACA,iBAAA/H,EACA,eAAAG,GACW,iBAAAC,EAElB,oBAAAC,CAED,EAAA,CAAwB,CAAA,EAAkBwS,GAAA,CAAA,EAAKnB,CAAAA,EAAAA,CAAAA,EAAAA,EAAAA,IAAUkB,EACjDG,EAAAA,qBAA+B7S,GAAAkF,EAAA,KAAAlF,GAE/B0R,sBACM,QAAA,CACV,UAAOxM,EAAA,KAAY,eAAAlF,CAAqB,CAAA,EAC1C4G,EAAA,WAAA,OAAA,GAAA3G,IAAAiF,EAAA,KAAAjF,IAGU,KAAA,iBACC,QAAY,CACZ,UAAAiF,EAAA,KACL,eAAAjF,EACF,CAAA,EAYSwR,KAzB0C,IAyB1CA,EAGTnK,CAAAA,EAAAwL,CAAA,EAAAxT,EAAA,CAAA,CAAA,EAAAkC,GAAY,IAAA,CAAWkQ,CAAAA,GAAAA,CAAAA,IAAiBqB,GAAA,YAAAA,EAAA,QAAAjT,GACpCkT,EAAA,CAEV,KAAA,mBAEA,SACQf,YAASc,GAAA,YAAAA,EAAe,OACd,iBAAAjT,yBACM,MACX,OAAAiT,GAAA,YAAAA,EAAA,MACTf,CAAAA,CACF,CAEF,EAAA,CAAAe,EAAAjT,EAAA4S,CAAA,CAAA,EAEA,KAAA,CAASR,EAAee,CAAqBrX,EAAAA,EAAAA,CAAAA,CAAAA,EAI3C4F,GAAsB0R,IAAAA,CAChBf,CAAWe,GAAWtX,CAAAA,IACtByW,GAAAA,YAAAA,EAAYa,QAAW5F,GACtB0F,EAAA,CAAEb,KAAAA,mBAAUE,QAAAA,CAAU,YAAAc,GAAA,YAAAA,EAAA,OAC/B,iBAAAjT,EAEyB,MAAAiT,GAAA,YAAAA,EAAA,MACvBtK,OAAAA,GAAAA,YAAAA,EAAAA,MACAuB,CAAAA,CACA4D,CAC6B,EAAA,CAAAmF,EAAAjT,EAAAwS,CAAA,CAAA,EAC7BJ,QAAiBc,EAAA,EAAA9T,EAAAuJ,EAAA,WAAA,EAAC,CAAAwK,EAAAC,CAAA,EAAA1M,EAAA,MAAA,GAAA,EACjB2M,EAAApD,GAAA/E,EAAA,GAAA,EACD5J,GAAOpC,IAASC,CACVkT,EAAyDzJ,CAAA,CACzD,EAAA,CAAAA,EAAAyK,CAAA,CAAA,EAAE3M,KAAAA,CAAAA,EAAAA,CAAAA,EAAAA,EAAAA,EAAAA,EAAMvD,GAAAA,EAAAA,IAAAA,EAAI6B,GAAAA,IAAAA,CAAS2D,IAAAA,EAC3B,OAAM/B,GAAMR,GACHpB,UAGTjG,EAAY,WAAA,IAAA,CAAE4J,GAAAA,QAAAA,OAAY,EAAA,GAAA,GAGJ6J,IAAAA,CAChB,aAAAc,CAAA,CAAA,CACc,EAChBxT,CAAAA,CAAAA,CAAAA,EACAF,MAAAA,EAAAA,EAAAA,GAAAA,CACAG,SAAAA,GAAAA,CAAAA,EAAAA,EAAAA,MAAAA,CACAC,MAAAA,aACAC,SAAAA,CAAAA,EAAAA,OAAAA,CACE,MAAC,yBAGP,CAAA,EAAOsT,EAAAA,IAAqB,CACtB,QAEF7M,SAAgBiC,EAAA,aAEhB3D,EAAAA,IAAAA,CAEO,SAAA,gBAAA,CACC,CAAA,CAAA,CACNwO,CAAS,CAAA,EAAApM,aACST,CAChB7G,IAAAA,GACF,MAAA8I,GAAA,GACF,KAAAkF,EACF,aAKS,MAAA,oBACLpH,MAAM,oBACN8M,MAAS,mBAAA,EAAAL,GAEPpT,eAAAA,YACF,aAAA,KACF,YAAA,KACF,WAAA,OACO,IAAA,OACR,SAAAmK,GAAAhL,IAAA,UAED,MAAoB0T,IAAAA,UAAkBxT,UAAS,GAC/CkC,UAAgB,OACV,QAAkB7L,GAAA,CAClBod,KAAAA,CACU,MAAAhb,CAAA,EACJpC,EAAA,OACN+d,GAAS3b,CAAA,CAAA,CACmBkb,CAC1BnT,CAAAA,CAAAA,EACoBlE,GACC0R,EAAAA,IAAAA,EACvB9L,GAAA,IACD,IAAA,UACHrK,GAAAtF,EAAA8hB,GAAA,UAAA,YAAA9hB,EAAA,YAAA,MAAAsF,EAAA,KAAAtF,EAAA,EAGF,CAAA,CAAA,EACA2P,MAAAA,GAAgBf,EAAA,IAAA,EACVmT,EAAkBC,GAAmB,CACrCV,KAAAA,CACU,KAAAW,EAAA,QAAAJ,CACJ,EACNA,EAAS,UAEPxT,IAAAA,iBAAAA,CAAAA,MAEAoN,UAAAA,EACF,eAAAyG,EACD,EAAAL,EACH,MAAA,wFAAA5B,GAAAkC,CAAA,CAAA,OAAAlC,GAAAiC,EAAA,CAAA,YACe7T,CAEjB,IAAoBkT,mBAAAA,CACd,KAAaE,CACbC,YAAAA,EAIN/R,iBAAgByS,GACdV,MAAAA,GACeA,OAAAA,EAEVW,EAAAA,EACDxT,CACNc,SAAAA,GACMgS,UAAAA,EACAU,EAAAA,KAAkCD,GAAArY,GAAA0R,EAAA,EACpCkG,0FAAyB5X,GAAA,eAAA,CAAA,IAAA0R,GAAA,eAAA,CAAA,SAAA6E,GAAA,eAAA,CAAA,IAAAE,GAAA,eAAA,CAAA,KACvB3R,CACF,IAAM,iBAAA,CACR,KAAA,CACA,UAAAyT,EACEC,eAAkBC,EACpB,EAAAX,EACEQ,MAAS,wFAACpC,GAAAqC,CAAA,CAAA,OAAArC,GAAAuC,EAAA,CAAA,YAERC,wBAEQ/B,CACG,KAAA,CAAYhL,YACrBgN,EAAY,iBAAAC,GAAM,MAAA5Y,GAClB0L,OAAAA,EAAUwB,EAAAA,EACPD,CAA0BtB,SAAAA,GAAoB,UAAA8K,EAC7C,EAAAH,GAAAqC,EAAAC,GAAA5Y,GAAA0R,EAAA,EAGNhG,MAAA,oFAAA1L,GAAA,eAAA,CAAA,IAAA0R,GAAA,eAAA,CAAA,SAAA6E,GAAA,eAAA,CAAA,IAAAE,GAAA,eAAA,CAAA,KACO3R,CACL3I,0BACAiW,MAAAA,wDAEE,CACS,EACA,OACA5G,EAAAiB,GAAA,CAAA,SACG,CAAAjB,EAAA,MAAA,CAEdqN,MAAe,mBACfC,SAAa,CAAApN,EAAA,MAAA,CACD,MAAA,gBACD,SAAA,IACP,QAAA,IAAA,CACJ8C,KACAvC,EACU,SAAAwL,IAAA,QAAA/L,EAAA,MAAA,CAEVsC,IAAUjU,EACF,IAAA,GAAEoC,OAAAA,GAAAA,CAAUpC,GAAEtD,CAAAA,EAAAA,OACpB+gB,KAAAA,CAEF,aAAAuB,EACS,cAAAC,CAAA,EAEbjf,EAAA,OAGEge,EAAsB,CACZ,OAAAgB,EAAAC,EACD,MAAAD,EACXhB,QAA8B,CAChC,CACG,CAECkB,CAAAA,EAAAA,aAA2BxB,IAAA,OAAA/L,EAAA,QAAA,CAE3BsM,IAAAA,EAAAA,SACE,YAAA,GAAEhN,MAAAA,GAAM8M,wBAAAA,GAAYG,QAAAA,WAC1B,iBAAYle,GAAA,CACa,GAAA,CAAA+c,EAAA,OACf,KAAA,CAAEsB,WAAAA,EAAWhU,YAAAA,CAAAA,EAAmB0T,EAAAA,aAIxCoB,EAAA,CACyB,OAAAC,EAAAC,EACjB,MAAAD,EAAEhC,OAAAA,CAAAA,CAAajT,CAAyBwN,CAAWoG,CAAAA,EAAAA,IAAAA,QAAAA,EAAAA,QAAAA,CACnD,IAAA5M,EAAEqL,SAAAA,EAAUE,CAAAA,EAAAA,IAAAA,CAAAA,EAAcH,EAAAA,EAE9BpS,MAAAA,CAIF,MAAO,cACT,SAAA,CAAAwH,EAAA,SAAA,MACuB,SACf,MAAA,qBAAE6M,SAAAA,EAAWlU,QAAAA,EAAmByT,SAAAA,EAAAA,EAAAA,CACtC,QAEmC,CACrC,IACyB,CAAA,CAAAD,GAAAnM,EAAA,SAAA,CACjB,KAAA,SAAE6L,MAAAA,cAAajT,MAAAA,EAAAA,CAAAA,EAAkBtE,QAAAA,IAAAA,CAAO0R,GAAAA,SAAWoG,GAAAA,QAAAA,YACjDvB,GAAAA,QAAAA,GAAAA,CAAUE,KAAAA,EAAAA,CAAAA,EAAcH,SAAAA,GAMhC,CAAA,CACF,WAC4B5K,EAAAG,EAAA,CAEnB,KAAA,OAAA,CACT,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAEA,CAAA,EAAAyM,GACE5M,EAAAsE,GAAA,CAAArE,QACEH,IAAA,CAAW6N,EAAA,EAAA,CAAkB1N,EAC3B,SACQH,EAAA,MAAA,CACN8N,GAAS,cACTlN,wBACEiN,SAAAA,CAAAA,EAAiB,SAAA,CACnB,KAAA,SAEC5B,MAAAA,cAEG8B,QAAKrO,IAAAA,CACDmO,EAAA,EAAA,CACJG,EACE,SAAoB9N,EAAAG,EAAA,CACd,KAAA,GAAA,CAAEkN,CAAAA,CAAcC,EAAAA,EAAAA,SAAAA,CAAAA,SAAoBviB,EAAAA,KAAAA,CAC3B,SAAA,CACb4gB,+BACArX,MAAO+Y,yBACPrH,MAAQsH,wBACT,EAAAvB,CAAA,CAAA,CACH,CAAA,CACD,EACCA,EAAAA,OAAAA,CAEA8B,SAAW,KACXE,SAAW,CAAA/N,EAAA,MAAA,CACN,MAAA,gBACkB,SAAA+L,IAAA,QAAA/L,EAAA,MAAA,CACf,IAAAR,EACRwO,IAAAA,EACE,CAAA,EAAK5C,IAAe,SAAAW,IAAA,OAAA/L,EAAA,QAAA,CACd,IAAAR,EAAEiO,YAAAA,GAAYC,SAAAA,KAAkB3iB,IAAAA,QAAAA,EAAAA,QAAAA,CACtC,MACiB,SAAA,EAAA,CAAA,MACQ2iB,CAAAA,EAAAA,EACdD,MAAAA,CAAAA,MACCC,aAAAA,SACT,CAAAV,EAAAlN,EAAA,SAAA,CACH,SAAA,CAAAiM,IAAA,SAAA,0BAAA,KAAAC,CAAA,GAAA,CAAA,CAAAxc,GAAA,SAAA,mBAAA,CAAA,CAAA0C,IAAA4N,EAAAmO,GAAA,CACF,OAAA,CAEe,OAAA,SAAA,IACLzO,EAAa,eAAA,CACvB,MAAA,CAGNM,OAAAA,IAAW,CAAaG,EAEf,MAAA,SACC,SAAA,SACN6C,SAAAA,OACSkI,WAAAA,EAAAA,SAAAA,CAAS/K,cAEP,MAAA,OAAK,MAAA,QAEfkM,WACDhM,EAAA,CACO,KAAA,OACC,KAAA,cACsB,CACnBO,CACP,GACE6M,SAAAA,CAAAA,KAAgC,CAClC,SAAAzV,IAAA,UACAyV,aACQjB,WAAqB,EACjBD,GAAA,QAAA5G,GAAA,CACX,KAAA,yCACH,SAAA,EAAA,GAEW,gBAAA,SAAS,GAAA,CAEvB,MAAAyI,EAAA,IAAA,SACGA,EAAA,OAAA,QAAAtQ,CAAA,EAGNoC,MAAMmO,EAAA,MAAA,MAAAjc,GAAA,CACW,OAAA,OACK,KAAAgc,CAAA,CACpB,EAAA,KAAAlH,IAAAA,GAAA,KAAA,CAAA,EAEA,GAAAmH,EAAA,MAAQ,MAAA,IAAA,MAAAA,EAAA,KAAA,EACNrC,GAAAqC,EAAA,WAAA,CACO,OAAA9f,EAAA,CACCoX,GAAA,iCAAApX,GAAA,MAAAA,EAAA,QAAA,KAAAA,EAAA,OAAA,GAAA,EAAA,EAAA,CAAA,QACS,CACbsf,EAAkB,SAAA,GACpB9d,GAAAtF,EAAA8hB,GAAA,UAAA,YAAA9hB,EAAA,YAAA,MAAAsF,EAAA,KAAAtF,GAEK,GAAW,EAElB,SAAA,CAAAyV,EAAAG,EAAA,CACEH,KAAA,WAEI,CAAA,EAAA0G,GAAAA,IAAA,KAAA5G,EAAA,QAAA,CACS,SAAA,CAAA,wBAAAE,EAAA,KAAA,CAAA,CAAA,EAAA,WAAA,CAAA,CACA,EAAAA,EAAA,OAAA,CACA,SAAA,uBAAA,CACG,CAAA,CAAA,CAEZ,EAAA,CAAA,CAAA0G,GAAAA,IAAA,MAAA5G,EAAAsO,GAAA,CAEN,SAAAtW,IAAA,UAAe,QAAA,IAAA,GACb,SAAA,EAAWuU,GAAA,QAAA5G,GAAA,CACRsG,KAAAA,yCACWvM,SAAAA,EAAAA,CAAS,EACjBuM,yBACUvM,GAAAA,CAAgB,MAAA0O,EAAA,IAAA,SAASA,EAAA,OAAA,QAAAtQ,CAAA,EACpB,MAAAmE,EAAA,SACjB2E,CAAA,GAAYlH,GAAAA,MAAAA,MAAAA,GAAAA,EAAAA,CAAa,OAAA,OACvB,KAAA0O,CAAA,CAEN,EAAA,KAAAlH,IAAAA,GAAA,KAAA,CAAA,EAAW,GAAAmH,GAAA,MAETrO,MAAAA,IAAAA,MAAAA,GAAA,KAAA,EAMgBgM,GAAAqC,GAAA,WAAA,QACWD,EAAAA,CACnBzI,GAAA,iCAAApX,GAAA,MAAAA,EAAA,QAAA,KAAAA,EAAA,OAAA,GAAA,EAAA,EAAA,CAAA,QACgB,CACP0J,EAAA,SAAA,GACGlI,GAAAtF,EAAA8hB,GAAA,UAAA,YAAA9hB,EAAA,YAAA,MAAAsF,EAAA,KAAAtF,EACV,CAAA,GAEI,EACG,SAAA,CAAAyV,EAAAG,EAAA,CACA,KAAA,WAAA,CACTkO,EAAAA,EACErO,QAAA,CAAa,SAAA,CAAA,wBAAAA,EAAA,KAAA,CAAA,CAAA,EAAA,IAAAsO,GAAA5H,CAAA,EAAA,IAAA,IAAA1G,EAAA,OAAA,CAAe,MAAA,qBAAa,SAAA,gBAAA,CAAOC,CAAAA,CACzC,CAAA,CAAC2C,CAAK,CAAA,CAAA,CAAY,CAAA,EAAA5C,EAAQ,SAAA,CAAA,KAAQ,SAAC,MAClC,cACTC,QAAAA,IAEDH,CACEgD,EAAsB,EAAA,CAAA,EAEpB/K,SAAAA,IAAoB,UACpBsU,SAAAA,MAA6B,CAAA,CAAA,CACrB,CAAA,CAAA,CACI,CAAA,CAAA,CAGZ,CAAA,CAAA,CACM,CAAA,CACI6B,CAAAA,CAAAA,CACDK,CAAAA,CACCJ,CAAwC,SAAAK,GAAA,CAE5CN,KAAAA,EAAAA,KAAAA,EAEF,SAAApL,EACQ,QAAAR,EAAA,IAAA,CACR,EACAwJ,WAAAA,EAAmC,cAAAhT,EAEnCnB,cAAAA,EAEE,uBAAAqB,CAGF,EAAA,CAEAjB,KAAAA,CACAsU,QAAAA,EACF,UAAAtR,EAAA,SAAAkJ,CAEJ,EAAArK,EAAEqG,OAAAA,EAAAA,MAAAA,CAEG,MAAA,QAAAgE,EAAM,WAAA,EAAA,GAAA,SAAA,CAAAjE,EACV0G,MAAAA,CACCzG,MAAAA,eAIA,SAAAnF,EAEAkF,IAAA,CAAAkB,EAAAvD,IAAAmC,EAAA,MAAA,CAAA,MAAA,cAAM,SAAqB,CAAME,EAClC,QAAA,CAAA,SAEF,GACU,KAAA,OACe,MAAAkB,EAEpBnJ,SAAAA,EACAsU,UAAAA,EAA6B,YACrB,UAAA1O,EAAA,CAAA,GAAA,KAAA+I,EACI,WACX,OAED,IAAA,OACM,QAAArY,GAAA,CACI6f,KAAAA,CACDK,MAAAA,CACCxM,EAAAA,EAAAA,OACNjH,EAAA6C,CAAA,EAAAlN,EAEE6R,EAAA1I,CAAA,CAEEsU,CAAAA,CAAAA,EAAAA,EAAAA,SAEFjQ,CACF,KAAA,SACQ,MAAA,qBACR,SAAA6E,GAAAhI,EAAA,QAAA,EACAgR,QAAAA,IAAAA,CAAmChR,EAAA,SAC5BzM,CAAG,EACVsJ,EAAAA,CAAAA,CAEE,EAGF,SAAAqI,EACQG,EAAA,CACRpI,KAAAA,IACAsU,KAAAA,GAA8B,CAChC,CAAA,CAAA,CAAA,CAEJ,EAAA1O,CAAA,CAAA,CAAA,CAAEsC,EAAAA,EAAAA,MAAAA,CAEG,MAAA,eAAiB,SAAA,CAAAD,EACtBF,SAAA,CAAA,KAAA,SAGE,MAAA,qBAAY,SAAAgD,GAAqBhI,EAAA,QAAA/B,EAAA,QAAA,IAE1B,CAAA+B,EAAA,KACD,EAAA,EAAAwH,EAEX1I,CAAA,CAAA,EAGP,SACO,GAAA,CAAA,EAAA,IAAAkG,EACC,QAAA,CAAA,MAAA,mBAEJ6N,SAAAA,CAAAA,EAAAA,QAAkB,CACpB,KAAA,WAAA,UACsB,SAAA7K,EACvB,SAEQzU,GAAA,CAAA,KACF,CACL,QAAAogB,CAAA,EACDpgB,EAAA,OACJuL,EAAA,SAAA6U,EAERnM,EAAA1I,CAAA,CACD,CAEN,CAAA,EAAA,IAAA,kBAAA,CAEA,CAAA,EAAckG,EAAA,QAAA,CACZ4G,MAAAA,aACA9M,SAAAA,CAAAA,WAAAA,IAAAA,EAAAA,SAAAA,CACAkJ,MAAAA,aACiB,SAAAzU,GAAA,CACjB0K,KAAAA,CACAD,MAAAA,CAAAA,EACAG,EAAAA,OACAD,EAAAA,UAAAA,EACCsJ,EAAA1I,CAAA,CACK,EAAEkB,SAAAA,OAAAA,QAAAA,EAAAA,EAAAA,OAAAA,CAAAA,CAAAA,EAAAA,CAAAA,IAASC,GAAAA,GAAAA,GAAAA,CAAWkJ,EAAAA,IAAAA,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,EAAAA,SAAAA,CAAarK,MAAAA,WAGvC8U,CAAY,EAAAje,CAAA,CAAQwT,CAA0B,CAAGhE,CAAAA,CAC/C,CAAW,CAAA,CAAA,CAAA,UACA3K,CACP,MAAW,eAAa2K,SAAAA,EACtBD,SAAA,CAAA,KACU,SAAA,MACH,2BAAA,SAAA8C,EAELA,QAAAA,IAAAA,CACA6L,EAAW3V,IAAAA,CACX4V,EACAlI,SAAAA,aAAAA,CAAAA,CACW,CAAA,CAAA,CACP,CACJpE,CACQ,CAcH,SAAAiF,GAAMsH,EAAA,CAAA,OAAAA,EAAS,QAAA,WAAA,SAAAC,EAAA,CAAA,MAAK,KAAAA,EAAA,WAAA,CAAA,EAAA,GAAA,CAAA,CAClB,CAEZ,SAEHhP,GAAAiP,EAAA,CAAA,QAAWhjB,KAAAgjB,GAAc9O,EAAAA,CAAAA,IACvBD,MAAA+O,EAAAhjB,CAAA,IAAA,SAAA,OACOgjB,EAAAhjB,CAAA,EAEmCgN,QAEtC+B,CACAwH,SAAAA,GAAY,CACd,QAAAjL,EAAA,IAAA,CAAA,EACD,SAAAsO,EAGD7F,IAAAA,CAAA,EAA+BG,kBAAAA,CAC7B,EAAA,CACO,KAAA,CAEL6C,MAAAA,CACAP,EAAAA,GAAAA,EACQ,CAAAzK,EAAAC,CAAA,EAAAC,EAAA,SAAA,EAAEyW,CAAAA,EAAAA,CAAAA,EAAAA,EAAAA,CAAAA,CAAAA,EAAAA,CAAAA,EAAc1jB,CAAAA,EAAAA,EAAAA,CAAAA,CAAAA,EACtB6O,CAAAA,EAAgB6U,CAAAA,EAAAA,EAAAA,CAAAA,EAChBnM,EAAY,MAAA0M,GAAA,CACd,GAAA,EAAAA,GAAA,MAAAA,EAAA,QAAA,OAAE,MACDC,EAEL,MAAAC,GAAAF,EAAAG,CAAA,EACArP,GAAAsP,EAAa,CAAYnP,GAACkP,EAExB,GACSpU,CAAAA,CACP+H,CAEQ,EAAErS,EAAAA,GAAAA,CAAAA,IACRmJ,EAAAA,SAAiBnJ,GACjB6R,SAAAA,CACF,GAAA,CAAErC,MAAAA,EAEMhM,MAAAA,EAAqB,GAAA,SAC1Bob,OAAO,KAAS5e,CACRA,EAAAA,EACT,MACK,GACKA,QAAAA,EAAAA,CAAAA,EACA6e,EAETN,CAAA,EAACO,EACGP,CAAA,EACHjX,EAAA,SAAA,CAEViI,MAAA,CAAWjI,EAAA,OAAA,CAAckI,CACvB,KACO,EAEL6C,EAAAA,GAAAA,EAAAA,GAAAA,EAAAA,OACe,CACbR,GAAY,EACd,CAAAkN,CAAA,CAAA,EAAA,MAAEvP,EACH9G,IAAAe,GAEO,IAAA,CACJuV,EAAA,UACHA,EAAA,QAAA,QAETA,EAAA,QAAA,QAESC,EAAAA,QAAAA,eAAqCD,EAAA,QAAA,MAAA,OAC5CE,uBAAoCF,EAAA,QAAA,MAAA,QAM5BG,EAAAA,CAAAA,CAAAA,EAEAC,GAAAA,IAAAA,CACAC,GACAC,EAAAA,CAA4BJ,CAEhC,EAAA,CAAAhM,EAAoBkM,EACpB,MAAIG,GAA2BC,GAAAA,CAE/B,MAAAzL,IACM1S,KAYP6T,EACMnB,CAAI,EACfnN,GAEA,EACEgF,GAAWrG,QAAoB,IAAA,CAC7B,MAAAka,EAA8BC,EAAKC,CAAA,EACpCF,GACHG,GAAAH,CAAA,CAGE,EAAA,CACE,eAAW,GACT,iBAAc,CAAA,OAAA,CAAA,CAChB,EACF,MAAAI,EAAAnX,IACO4V,OAAAA,GAAAA,OAAAA,IAAAA,CACTqB,EAAAD,EAAA,OAAA,EAEAI,EAAsBH,EAAA,CAAA,EACHG,EAAA,CAAA,EACC,WAAA,IAAA,CAClB5M,MAAAA,EAAAA,EAAAA,QAAAA,cAAAA,WAAAA,EACC6M,GACKA,EAAA,eAAA,CAAE5Y,SAAAA,SAAc,MAAA,SACfE,OAASC,QAChB,CAAOoY,CAGP,EAAA,CAAM,CAEAZ,EAAAA,CACA,eAAWzd,GACf,iBAAsB,CAAA,OAAA,CACtB,CAAA,EACsBuK,GAAA,KAAA,IAAA,CAClB+T,EAAGjB,EAAAA,EACAF,EAAAA,CAAAA,EAEPsB,EAAAJ,EAAA,OAAA,CAAA,EAGIX,WAAAA,IAAAA,CACJ,MAAWgB,EAAAF,EAAA,QAAA,cAAA,WAAA,EACXvY,GACayY,EAAA,eAAA,CACP,SAAA,SACF,eACE9N,OAAG+N,QAAAA,CAAAA,CAEM,EAAA,CACX,CACAnB,EAAAA,CACAC,eAAAA,GACAxX,iBAAoB,CAAA,OAAA,CAAA,CAAA,EAEpBA,EAAAA,MAAkB,CAClBJ,GAAAA,gBACF,MAAA,QACF,SAAG,CAAA,CAAA,CAAAN,GAAA2I,EAAA,SAAA,CACL,KAAA,SAEM0Q,MAAAA,cAENxW,QAAgB7C,EACD,SAAA2I,EAAAG,EAAA,CACXqP,KAAAA,GAEJ,CAAA,CACAtV,CAAAA,EAAAA,EAAgB,SAAA,CACd,WAAsB,OAAA,CACpBuV,YAAuB,OAEnBA,EAAAA,kBACFA,EAAAA,EAAiB5gB,QAAjB4gB,MAAAA,EAAAA,KAAAA,EACAA,EACF,SAAAzP,EAAA,QAAA,CACF,IAAAyP,EACG,SAAA,GAELvV,KAAgB,SACS,MAAA,QACrBsV,YAA8B,kBAChC,QAAAnhB,GAAA,CACEsV,KAAAA,CAEE0M,MAAAA,CACJ,WACA1K,EAAsBlV,CAAA,CACd,EACV,aAAA,MAEA4L,YAEQ,MACE6T,eAAAA,MACe,WAAA,QACnBG,IAAAA,OACF,aAAA1M,GAAA,EAAA,CAEF,CAAA,CACkB,CAAA,CAChBgN,EAAAA,EAAAA,OAAAA,CAEJ,UAAAR,GAAA,YAAAA,EAAA,QAAA,EAAAnQ,EAAA,KAAA,CAEMsQ,MACNjU,uBAEQvE,IAAA,UAAA,UAAA,EAAA,GACAsY,SAAAA,EAAyBte,IAAAA,CAAAA,EAAAA,IAAY,CACvCye,MAAAA,IAAkC1W,EAAA,EAAA,EAC7B,OAAAiG,EAAA,KAAA,CACLyQ,MAAAA,IAAkBH,EAAA,WAAA,GACpB,SAAA,CAAApQ,EAAA4Q,GAAA,CACA5W,WAAiB,MACMsW,QAAAA,EACH,aAAAO,EAChBL,UAA4B,GAChB,aAAA,EAAA,CACH,EAAAxQ,EAAA,SAAA,CACC,KAAA,SACT,MAAA,SACH,QAAA,IAAA,CACEqQ,GAAAxW,CAAA,CAEN,EACkB,SAAAmG,EAAAG,EAAA,CAChBwQ,KAAkB,OAEtB,KAAA,IAEAtU,EAGI,GACEkU,EAAAA,EAAAA,EAAiBH,CAAiB,CAC7B,CACYD,CAAAA,EAAAA,IAAAA,kBAAmB,CACtC,MAAA,WACAnW,SAAiBgG,EAAAoE,GAAA,CACf,OAAqBkM,EACrB,CAAA,CACEE,CAAAA,EAAAA,IAA4B,QAAAxQ,EAAA,MAAA,CAAA,MAChB,WAAA,SACHA,EAAA,IAAA,CACP8Q,SAAQ,wBAAA,CACT,CACH,CAAA,EAAA,IAAA,GACE,CAEN,CAAA,CACkB,SAChBH,GAA0B,CAC5B,MAAA/Y,EAGF,SAAAC,EACE,QAAAR,EAAQ,IAAA,CAAA,EAAsB,SAAAsO,MACzBtO,CACD,EAAa,kBAAAsM,CAAe,EAAA,CAA+B1D,KAAAA,CAAAA,GACpD,EAAAjI,EAAA,SAAA,EAAC4K,EAAKzJ,EAAA,CAAA,CAAA,EAAK,CAAA4X,EAAAC,CAAA,EAAAhZ,EAAA,CAAA,CAAA,EAGpBgI,EAAAhB,GAAA,IAAA3F,GAAA,QAAA,IAAA,0BAAA,GAAA,CAAA,CAAA,EAAA4G,EACE9G,IACE8X,GAAAA,IAAW5iB,CACTA,EAAiB,SAAA,GACjBqiB,SAAAA,CAGF,GAAA,CAAEzQ,KAAAA,CAAAA,EAEFiG,CAAA,EAAA,MAAAC,GAAAtO,EAAAD,CAAA,EAAAmP,EACO0I,QAAAA,EAAAA,EACGxI,CAAA,EAAAlP,EACH,SAAA,CAAA,MACC,CAAAA,EACM,OAAA,CACZuK,CACQ,IAAE7R,EAAAA,CAAAA,CAAAA,EAAAA,MAAAA,EAAY1F,GAAAA,IAAAA,CACpB2lB,MAAAA,EAAAA,CACF,aAAAQ,EAAA,OAAA7J,GAAA0J,EAAA,KAAA1iB,GAAAA,EAAA,YAAAgZ,EAAA,SAAA,CAAA,CAAA,EAEA8J,EAAY,CAAA,EAAA,OAAAJ,EACG,QAAA1J,GAAA,SACJ,IADIxX,GAAAtF,EAAA6mB,EACJ,UADI,YAAA7mB,EACJ,OADI,MAAAsF,EAAA,KAAAtF,EACJ8c,GACXyC,CAAIzC,EAAA,SAAA,CAAAgK,QAC+B,EAAG,MAEpC,CAERrR,EAAAqH,EAAA,QAAA,IACG8I,EAAAA,EAAAA,QAAmB,EAAA,IAEXG,EACEjJ,EAAA,QAAA,EAAiBvP,KAAYuP,CAAA,CAA0B,CAAA,EAGtDwJ,EAAAA,SACNS,EAAA,YACE,EAAAD,GAE+CpR,CAEhC,EAAA,CAAA8Q,CACA,CAAA,EACXlX,EAAAA,IACAgX,CAAAA,EAAAA,CAAAA,EAAAA,EAAAA,IAAAA,EAAAA,GACSU,GAAAljB,GAAA,WAAA,KAAA,CACG,MAAAoC,CAEd,EAAApC,EAAA,OACO,GAAAoC,EACC,CAAA,MAAAmR,OACS,wBAAA,OAAAnR,EAAA,CACb4f,MAAAA,EAAqB,GACrBpQ,EAAAA,MAEG+G,GAAAA,EAAA,IAAA,CAAA,GAAAwK,GAAA3hB,EAAA4hB,EAAM,UAAN,YAAA5hB,EAAM,WAAN,MAAA2hB,EAAA,KAAA3hB,EAAM,EAAA,EAAA,MAAY6hB,EAAM,IAAA,CACtB,EAAA,CAAAX,IACP7W,GAEP,IAAA,CACCyJ,IACUoN,GAAA,MAAAA,EACd,SAAAY,GAAW,CAAU1R,OAAAA,CACXyE,MAAMf,CAAE,CAAA,CACb,CAEgB1D,EAAAA,CAAAA,EACnB0R,GAAAZ,CAAA,CAAA,EAAA,MAAAa,EAAGL,GAAAlK,GAAA,CAAA1B,GAAA,MAAAA,EAAyB0B,GAAAhQ,GAAA,MAAAA,IAExB,eACH,IAAA,CACJ,IAAAwa,EAAAxY,GAAA,QAAA,IAAA,0BAAA,GAAA,GAET,MAAAyY,EAAAD,EAAA,UAAAxjB,GAAAA,EAAA,YAAAgZ,EAAA,SAAA,EAE2ByK,IAAA,IACzBla,EAAAA,OAAAA,EAAAA,CAAAA,EACAC,EAAAA,QAAAA,CAAAA,IACiBga,EAAA,QAAAxK,CAAA,IACAwK,EAAA,OAAAxjB,GAAA,SAAA,OAAAwB,GAAAtF,EAAA6mB,EAAA,UAAA,YAAA7mB,EAAA,OAAA,YAAAsF,EAAA,KAAAtF,EAAAwnB,GAAAA,EAAA,YAAA1jB,EAAA,WAAA,EAACwjB,EAAAA,EAAA,MAAA,EAAA,EAAA,GAEjBxY,GAAA,QAAA,IAAA,2BAAAwY,CAAA,CACD,CAAA,CACMT,EAAAA,CAAAA,CAAAA,CAAAA,EACA3B,EAAeuB,IACfE,OAAAA,GAAAA,IAAAA,CAGAnK,YACN7M,EAAgB,QAAA,QACdnC,EAAoB,QAAA,QACP0X,EAAA,QAAA,eAAAA,EAAA,QAAA,MAAA,OACPA,EAAA,QAAA,aAAAA,EAAA,QAAA,MAAA,QAGF1I,EAAAA,CAAAA,CAAAA,EACAiK,EAAAA,MAAAA,CACAjZ,GAAAA,sBAAoB,cAEpBA,SAAAA,CAAAA,CAAAA,CAAAA,GAAkBiI,EAAA,SAAA,CAClBrI,KAAAA,SACF,MAAA,cACC,QAAAN,WACA2I,EAAAG,EAAA,CAEC6R,KAAAA,GAEJ,CAAA,CAAkB,CAAA,EACFd,EAAAA,SAAAA,CAGhB,SAAA,CAAApR,EAAA,MAAA,CACA,YAAoB,IAAA,CACP5L,SAAAA,eACMqG,CAAAA,EAAAA,IAAAA,IAAAA,UAAqByF,EAAAoE,GAAA,CAAA,CAAA,EAAAtE,EAAA,QAAA,CAClC,MAAOmS,gBACTZ,gBAAoBxZ,CAAA,CACpB,CAAA,CAAA,CAAA,CACF,EAAAmI,EAAA,OAAA,CACA,SAAKsR,GAAgBW,CACT5K,EAAAA,eAAc,EAC1B,MAAAA,EAAA6K,EAAA,CAAA,EACAZ,GACDM,EAAA,IAAAvK,EAAA,SAAA,GAAA,CAECiK,EACF,SAAAtR,EAAA,QAAA,CACOsR,IAAAA,EACLP,KAAAA,oCAGGmB,QAAmBP,GACpBA,aACHtjB,MACO,YAAA,MAAEoC,eAAAA,MAAY1F,WAAAA,QACT,IAAA,OACT,aAAgBgc,GAAqBzD,EAAc,CAC1CnM,CAAAA,CACR,CAAA,CACDua,CAAAA,EAAAA,EAAAA,QACcnX,IAAAA,EACT,SAAA2X,IAAA,KAAAlS,EAAA,KAAA,CACL0R,MAAAA,2CACF,SAAAQ,EAAA,IAAA7K,GAAArH,EAAA,KAAA,CAED+Q,MAAAA,sBAEH7W,SAAgB8F,EAAAmS,GAAA,CACVxO,MAAAA,EACK,QAAA,IAAA,CAAUiO,EAAA,IAAAvK,EAAA,SAAA,GAAA,CAAS1D,EAAkB,SAAA,EAAA,CAAG,CAAA,EACjD0D,EAAA,SAAA,CAAA,CAAA,CACqBsK,EAAAA,EAAAA,MAAAA,CAEjBC,MAAAA,qBAEFjM,SAAgB,CAAA7N,IAAA,SAAAkI,EAAA,MAAA,CACN,MAAA,WAEVoS,SAAqBpS,EAAA,IAAA,uCAGnB,CAAM8R,CAGN,CAAA,iBAA+B,OAAI,QAAAE,CAAA,EAAA,IAAA,CAAA,CAAAC,EAAAhL,CAAA,IAAA,CAAA,EAAAA,GAAA,MAAAA,EAAA,SAAAnH,EAAAiB,GAAA,CAERsR,SAAAA,CAAAA,EAAAA,MAAAA,CACzBnB,MAAAA,iBACK,SAAA,CACLA,aAAAA,gBAEAA,aAAAA,QAMAA,EAA2BA,CAAAA,GAAAA,CAAoC,CACjE,EAAAlR,EAAAsS,GAAA,CAGMzY,OAAAA,EACP,SAAA+X,CAAA,CAEFjM,CAAAA,KAIHzL,CAAAA,CACE,CAAA,CAAA,CACEuV,CAAAA,CAEIA,CACFA,MAAAA,GAAiB5gB,GAAAA,CAAAA,CACjB4gB,OAAAA,EACF,SAAA9J,CAAA,IACF,CACF,KAAK,CAAAxG,EAAAoT,CAAA,EAAAva,EAAAb,EAAA,EAELqb,EACEvL,EAAA,OAAA9H,EAAA,OAAQW,EAAA,UAAA,CAAsBS,SAAM,CAAA0G,EAAA,MAAA,EAAA9H,CAAA,EAAA,IAAAkI,GAAArH,EAAAmS,GAAA,SAExB7S,QAAK,IAAA,CAAeqG,EAAA,IAAA0B,EAAA,SAAA,GAAA,CAAuBhQ,CAAAA,EAAQ4I,EAAAA,SACpD,CAAA,EAAAuS,GAAA1S,EAAA,SAAA,CAAA,KAAM,SAAG,MAAE,cAGpBA,QAAA,IAAAyS,EAAApT,EAAAhI,EAAA,EAAA8I,WACEH,EAAA,OAAAX,GAAA,eAAA,EAAA,QAAA,CAAA,CAAAc,CAAAA,CACE,CAAA,CAAG,CAAa,EAIdkS,GAAaM,GAAA,CAAA,CAAexS,MAAAA,EAAa,QAAAS,EAC1C,SAAAgS,CAEH,IACEzB,CACE5iB,MAAAA,EAAiBA,GAAA,CAEjB,MAAAskB,EAAWtkB,EAAA,cAAA,QAAA,MAAA,EACK,GAAAskB,EAAA,CAChB,MAAAC,EAAAD,EAAA,wBACFE,EAAAxkB,EAAA,cAAA,sBAAA,EAAE4R,EAEF5R,EAAA,cAAA,UACEwY,EAAK4I,KAAAA,EAAAA,KAAAA,IAAAA,EACA,IAAA,WAAA,EAAAqD,EACO,OAAA,YAAA,GACHnB,EAAAA,MAAAA,EAAAA,MAAAA,IAAAA,EACI,IAAA,YAAA,EAAAmB,EACD,OAAA,WAAA,GACGA,EACJ,OAAA,YAAA,YAAA,CACP,CAC+B,EACpC,OACIhT,EAAA,SAAA,CAAA,KAETE,SAAA,UAAWyR,SAAAA,QAAAA,EAEP,aAAUiB,EAAA,OAAArL,EAAA,UAAA,eACC/R,EACP,QAAgCyd,EAAqB9S,SAAAA,CAAAA,YACjC,CAChBoH,SAAAA,CAAAA,CAAAA,CAAAA,EAAAA,WAAAA,EAAAA,SAAAA,CAAAA,SACe,UACC,MAAA,kCAAsB,CACtC,EAAArH,EAAA,MAAA,CAAA,UACQ,kBAAA,IACTqH,EAAA,KAAAA,EAAA,UAAC,IAPWC,EAAAA,UAYnBxH,MAAAA,KAAKS,OAAM,KAAoBN,QAC5BnI,OACC,SAAW,OAAA,CAAUmI,CAAAA,CACnB,CAAA,EAAAyS,GAAG5S,EAAAiB,GAAA,CAAA,SAA8B,CAAA,IAAAf,EAAA,OAAA,CAAC,SAGrClI,EAAY,SAIL,CAAAmI,CAAAA,CACE,CAAA,CAAA,CAAW,CAAA,CACR,CAAA,EACe+S,GACA,GAAA,SAChBzN,GAAe0M,CAAQ,QAAA5a,EAEzB2I,IAAAA,CACEiH,EAAAA,SAAAA,EACU2K,IAAAA,CAAAA,CACV,EAAA,kBAGT,KACA,CAAA9Z,EAAAC,CAAA,EAAAC,EAAA,SAAA,EAEF,CAAA4J,EAAAqR,CAAA,EAAAjb,EAAA,CAAA,CAAA,EACJuD,EAAApC,EAAA,IAAA,EAET+Z,EAAA/Z,EAAA,IAAA,EAEMmZ,EAAAA,EAAyB,CAAA,EAAErL,EAAAA,EAAAA,IAAAA,EAAQtB,SAAAA,EAAAA,CAAe,OAAA5W,CACtD,EAAA,YACMyjB,EAAAA,EAAAA,UAAAA,MAAAA,UACNza,EACE,SAAA,GAAAkI,GAAAA,EAAAA,EACGgH,UADHhH,YAAAA,EACgB,WADhBA,MAAAA,EAAAA,KAAAA,EAC6BoH,CAGvBA,IAAAA,EACA3G,OACW,SAAA,QAAsB,aAHtB4G,OASXhI,GAAK,CACC,MAAAzT,EAAA,CACG6U,QAAAA,OAEPuG,cAEL,OAAA,IACM,MAAA+L,GAEZ,OAAA,sBAEKb,OAAAA,CAA0B,EAASzR,EAAAA,MAAAA,MAAAA,wCAAAA,IAAAA,gBAAAA,CAAAA,EAAAA,CAASgS,eAAAA,aAAS,CAAM,EAAA,KAAA1L,GAAAA,EAAA,KAAA,CAAA,EACzD+L,EAAkB,UAAAxoB,EAAA4jB,EAAA,aAAA,YAAA5jB,EAAA,SAAA,EAGtB0oB,EAAe9E,CAAA,EACfpW,EAAe1J,SAAgB8kB,CAC/B,MAAY,CACJP,EAAOD,OAAOS,CACdP,CACAC,KACN,CACEA,GAAAA,IAAAA,QACAA,EAAAA,EAAAA,UAAAA,MAAAA,EAAAA,OAAmC,EAAA,CAC1BD,CAAAA,EACTC,MAAAA,KAAgC,IAAA,CAChCA,EAAAA,CACF,OAAO,CACWO,CAAAA,CAClB,EAAA,GAAA,EACF,OAAAvT,EAAA,MAAA,CACF,GAAA,mBAEA,cAEIR,SAAK,CAAA,CAAA,CAAAjI,GAAA2I,EAAA,SAAA,CACK,KAAA,SACVU,MAAAA,cACA,QAAArJ,EACgB0b,SAAAA,EAAAA,EAAAA,CACPA,KAAAA,GAAAA,CAAS9S,CAElB,CAAA,aACWqT,CACP,SACUjM,EAAMiM,OAAAA,CACdnS,IAAM5F,EAGVyE,SAAA3R,GAAA,CACYA,EAAA,eAAA,EACVwf,EAAWrO,QACA8H,CAAAA,CACL,CACC,EACPiM,SAAQ,CAAAvT,EAAA,QAAA,CACC,IAAAkT,EACT,KAAA,SAGFpT,KAAAA,IAAA,YAEEE,uBAAasH,GAAiB,aAAA,MAEjC,YAAA,MACK,eAAA,MAEX,WAAA,QAEqB,IAAA,OACE,QAAAkM,CAAA,GAAYnc,EAAM,QAAA,CAAC,KAAA,cAAoB,iBAAC,IAAArF,GAAK,MAAA,KAC5D8F,OAASC,IAChB,CAAO6J,CAASqR,CACV1X,CAAAA,CACA2X,CAAAA,EAAAA,EAAAA,OAAc,CACdO,IAAAA,EACAhC,MAAAA,cAA2B,UAAA,GAEjC,SAAmB,CAAA3Z,IAAA,WAAAkI,EAAA,MAAA,CAAEjR,MAAAA,WAAU,SAAAiR,EAAA,IAAA,CAC7BrI,MAAyB,gBAAE5I,SAAAA,qBAAAA,CAAQ,CAC/B,CAAA,EAAMwL,IAAAA,WAAgB,GAAAhQ,EAAAqX,GAAA,YAAAA,EAAA,OAAA,MAAArX,EAAA,SAAAyV,EAAA,MAAA,CAC1BjI,MAAW,WACX0Z,SAAclX,KAAoB,CAC3B,OAAA,EAAA,CACC,CAAA,CACI,IAAA1K,EAAA+R,GAAA,YAAAA,EAAA,OAAA,YAAA/R,EAAA,QAAA,EAAAiQ,EAAAiB,GAAA,CACX,SAAA,CAAAf,EAAA,KAAA,CACY,SAAA4B,EAAA,KAAA,IAAA8R,GAAA,CACP,KAAA,CACI7nB,GAAAA,EACKuG,OAAAA,UAED,SAAAoT,CACDwN,EAAAA,EACC,CACRjkB,mBAAAA,EACF,yBAAA4kB,EACMxF,aAAAA,EAGc,SAAAyF,EAElB3V,EAAM+I,EACMzM,EAAAA,GAAAA,MAAAA,EAAmBsZ,IAAsBC,EAAAH,GAAA,MAAAA,EAAA,IAAAA,EAAAI,EACvDd,GAAAA,CACAlb,IAAAA,SAEAA,MAAAA,EACAJ,OAAAA,CACF,EAAAqc,EACC,CAAAhO,EAAA,MACL1R,EAAAA,EAAA0R,EAAA,IAEgBA,EAAA,KAEX,MAAAiO,GAAA,IAAA,MAAAzU,CAAA,EAECgU,YAAwCS,GAAM,SACxC,IAAAC,GAAU,GAAAC,EAAA,CAAG,MAAAC,GAAA,IAAA,MAAAD,CAAA,EAClBD,GAAAE,GAAA,OAAAA,GAAA,SAGG,OAAApU,EAAA,KAAA,CAAyB,SAAAA,EAAA,SAAA,CAC7B,KAAC3I,SACY,QAAA,IAAA,CAAe,KAAA,CAAuBA,IAAAA,OAC5Cgd,CAAM,EAAAT,GAAKU,EAAAC,IAAAF,EAGpBG,EAAA,IAAA,MAAAF,CAAA,EACEG,EAAAD,EAAA,OAAAA,EAAA,SACOjZ,IACMlN,EAAM,CACE,IAAAomB,EACP,KAAAF,GAAA,YAAA,YAAU,SAAA/O,GAAA7C,CAAA,CAAG,CACzB,EAAE1C,SAEFH,EAAA,SAAA,CACOoT,MAAAA,CACA,iBAAA5e,EAAA,IAEO,EACJ,SAAA,CAAAwL,EAAA,UAAA,CACK,SAAA,CAAAoU,IAAAlU,EAAA,SAAA,CACD,OAAAkU,GACG,KAAA,YAAA,CACJ,EAAAlU,EAAA,MAAA,CACP,IAAA0U,EACKlB,MAAAA,EAEX,OAAAxN,EACO,QAAA,OACC,SAAA,QACDhU,IAAAA,EACC,eAAA,cACC,OAAA3D,IAAA,CACPA,GAAA,OAAA,MAAA,gBAAA,aACE,CAAA,CAER,CAAA,CAAA,CAAWojB,EAAAA,EAAAA,aAAAA,CAAkC,SAAAjM,GAAwB7C,CAAA,CACtD,CAAA,CACX,CAAW,CAAA,CAAU1C,CACV,EAAAlE,CAAA,CAAA,CAAgB,CAAA,CAAsB,EAAA+D,EAAA,IAAA,CAGlDhI,MAAY,aACA,SAAA,GAAA0Z,EAAA5P,EAAA,aAAA,YAAA4P,EAAA,QAAA,GAAA1R,EAAA,SAAA,CAAUG,KACnBD,SAAc,MAAA,cAAE,SAAAlI,IAAA,UAGnB8J,YAAwB,OACvB3B,EACE,CACG2B,SAAAA,EAAAA,EAAatM,aAAbsM,YAAAA,EAA0B,QAAAoR,EACnB,CAAA,CAAEjX,EAAI4Y,SAAAA,CAAAA,EAAAA,EAAAA,CAAQhS,KAAAA,cAAAA,CAAO6C,EAAAA,EAAAA,OAAAA,CAAakO,SAAAA,UAClC,CAAA,CAAA,CAAA,CACJI,EAAAA,EAAAA,OAAAA,CAAAA,CAAAA,IAAAA,EAAAA,EAAAA,aAAAA,YAAAA,EAAAA,UAAAA,GAAAA,EAAAA,aAAAA,YAAAA,GAAAA,SAAAA,EAAAA,EAAAA,aAAAA,YAAAA,EAAAA,cAAAA,EAAAA,SAAAA,CACAH,KAAAA,SACAI,MAAAA,cACAH,SAAAA,IAAAA,UACF,QAAIe,IAAAA,OACJC,GAKI,SAAArqB,EAAAqX,EAAA,aAAA,YAAArX,EAAA,QAAAyoB,EAAA,CAAExT,CAAK2U,EAAM7f,SAAAA,CAAAA,EAAAA,OAAAA,CAAO0R,SAAAA,MAAAA,CAAWgO,EAAAA,IAAAA,EAAAA,EAAAA,CAC/B,oBACF1f,CAAAA,CAAAA,CACS,CAAA,CAAA,CAAA,CACX,CAAA,CACM2f,CAAAA,EAAAA,IAAAA,WAAaY,EAAS,MAAA,CACtBH,MAAAA,WACFR,SAAAA,EAAAA,IAAAA,CACJ,SAAU,YACFE,CAAAA,CACSA,CAAAA,EAAAA,IAAAA,SAAAA,SACjB,MAAA,WACA,SAAApU,MACE,CAAAC,SAAAA,oBACE,CAAA,CACO,CAAA,CAAA,CAEG,CAAA,CAAA,CAAA,CAAEsU,CAAAA","x_google_ignoreList":[0,1,2,3,4]} \ No newline at end of file diff --git a/assets/compose-hDlR2o-x.js b/assets/compose-hDlR2o-x.js new file mode 100644 index 0000000..36f4ea5 --- /dev/null +++ b/assets/compose-hDlR2o-x.js @@ -0,0 +1,26 @@ +var Rt=s=>{throw TypeError(s)};var mt=(s,t,n)=>t.has(s)||Rt("Cannot "+n);var I=(s,t,n)=>(mt(s,t,"read from private field"),n?n.call(s):t.get(s)),re=(s,t,n)=>t.has(s)?Rt("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(s):t.set(s,n),me=(s,t,n,a)=>(mt(s,t,"write to private field"),a?a.call(s,n):t.set(s,n),n),X=(s,t,n)=>(mt(s,t,"access private method"),n);import{i as ge,z as gn,s as oe,V as fn,j as Ke,a as _t,h as U,A as Y,M as vn,aC as Xt,d as Se,y as ne,x as bn,aD as yn,l as je,c as e,T as V,b as xn,f as Oe,w as at,r as wn,af as kn,P as En,u as Fn,t as Dt,C as Jt}from"./useTitle-6AJYXxJy.js";import{j as Ee,F as Cn,_ as zn,a as $e,a8 as _n,x as $t,u as Ln,k as Qt,b as An,I as J,z as jt,i as Je,a9 as Sn,l as xt,M as Qe,s as Ce,a4 as In,a0 as Mn,q as Tn,O as Bn,X as rt,c as Rn,d as Ot,y as Dn}from"./fuse-uYeGZ3ik.js";class $n{constructor(t,n,{tabInsertsSuggestions:a,defaultFirstOption:c}={}){this.input=t,this.list=n,this.tabInsertsSuggestions=a??!0,this.defaultFirstOption=c??!1,this.isComposing=!1,n.id||(n.id=`combobox-${Math.random().toString().slice(2,6)}`),this.ctrlBindings=!!navigator.userAgent.match(/Macintosh/),this.keyboardEventHandler=o=>jn(o,this),this.compositionEventHandler=o=>Pn(o,this),this.inputHandler=this.clearSelection.bind(this),t.setAttribute("role","combobox"),t.setAttribute("aria-controls",n.id),t.setAttribute("aria-expanded","false"),t.setAttribute("aria-autocomplete","list"),t.setAttribute("aria-haspopup","listbox")}destroy(){this.clearSelection(),this.stop(),this.input.removeAttribute("role"),this.input.removeAttribute("aria-controls"),this.input.removeAttribute("aria-expanded"),this.input.removeAttribute("aria-autocomplete"),this.input.removeAttribute("aria-haspopup")}start(){this.input.setAttribute("aria-expanded","true"),this.input.addEventListener("compositionstart",this.compositionEventHandler),this.input.addEventListener("compositionend",this.compositionEventHandler),this.input.addEventListener("input",this.inputHandler),this.input.addEventListener("keydown",this.keyboardEventHandler),this.list.addEventListener("click",Pt),this.indicateDefaultOption()}stop(){this.clearSelection(),this.input.setAttribute("aria-expanded","false"),this.input.removeEventListener("compositionstart",this.compositionEventHandler),this.input.removeEventListener("compositionend",this.compositionEventHandler),this.input.removeEventListener("input",this.inputHandler),this.input.removeEventListener("keydown",this.keyboardEventHandler),this.list.removeEventListener("click",Pt)}indicateDefaultOption(){var t;this.defaultFirstOption&&((t=Array.from(this.list.querySelectorAll('[role="option"]:not([aria-disabled="true"])')).filter(gt)[0])===null||t===void 0||t.setAttribute("data-combobox-option-default","true"))}navigate(t=1){const n=Array.from(this.list.querySelectorAll('[aria-selected="true"]')).filter(gt)[0],a=Array.from(this.list.querySelectorAll('[role="option"]')).filter(gt),c=a.indexOf(n);if(c===a.length-1&&t===1||c===0&&t===-1){this.clearSelection(),this.input.focus();return}let o=t===1?0:a.length-1;if(n&&c>=0){const x=c+t;x>=0&&x0||s.offsetHeight>0)}function Pn(s,t){t.isComposing=s.type==="compositionstart",document.getElementById(t.input.getAttribute("aria-controls")||"")&&t.clearSelection()}function Hn(s,t){Nn(s,t)||(s.scrollTop=t.offsetTop)}function Nn(s,t){const n=s.scrollTop,a=n+s.clientHeight,c=t.offsetTop,o=c+t.clientHeight;return c>=n&&o<=a}const qn=/\s|\(|\[/;function Kn(s,t,n,{multiWord:a,lookBackIndex:c,lastMatchPosition:o}={multiWord:!1,lookBackIndex:0,lastMatchPosition:null}){let l=s.lastIndexOf(t,n-1);if(l===-1||l=l+t.length+1||s.lastIndexOf(` +`,n-1)>l||s.lastIndexOf(".",n-1)>l)return}else if(s.lastIndexOf(" ",n-1)>l)return;const x=s[l-1];return x&&!qn.test(x)?void 0:{text:s.substring(l+t.length,n),position:l+t.length}}class Wn extends HTMLElement{}class Un extends Event{constructor(){super("update")}}const ft=new WeakMap;var Pe,He,Ne,xe,G,wt,Ae,Ie,Me,kt,Te,et,tt,nt,qe,ze;const At=class At extends Wn{constructor(){super(...arguments);re(this,G);re(this,Pe,new MutationObserver(()=>X(this,G,tt).call(this)));re(this,He,new ResizeObserver(()=>X(this,G,et).call(this)));re(this,Ne);re(this,xe);re(this,Ie,0);re(this,Me,0);re(this,Te,!1);re(this,qe,()=>X(this,G,nt).call(this));re(this,ze,n=>{X(this,G,Ae).call(this,a=>{(n.target===document||n.target===window||n.target instanceof Node&&n.target.contains(a))&&X(this,G,et).call(this)})})}static for(n){let a=ft.get(n);return a||(a=new At,a.connect(n),ft.set(n,a)),a}connect(n){me(this,Ne,new WeakRef(n)),me(this,xe,document.createElement("div")),I(this,xe).style.position="absolute",I(this,xe).style.pointerEvents="none",n.after(I(this,xe)),I(this,xe).appendChild(this)}forceUpdate(){X(this,G,tt).call(this),X(this,G,nt).call(this)}connectedCallback(){X(this,G,Ae).call(this,n=>{this.style.pointerEvents="none",this.style.userSelect="none",this.style.overflow="hidden",this.style.display="block",this.style.visibility="hidden",n instanceof HTMLTextAreaElement?(this.style.whiteSpace="pre-wrap",this.style.wordWrap="break-word"):(this.style.whiteSpace="nowrap",this.style.display="table-cell",this.style.verticalAlign="middle"),this.setAttribute("aria-hidden","true"),X(this,G,tt).call(this),X(this,G,nt).call(this),I(this,Pe).observe(n,{attributeFilter:["style","dir"]}),I(this,He).observe(n),document.addEventListener("scroll",I(this,ze),{capture:!0}),window.addEventListener("resize",I(this,ze),{capture:!0}),n.addEventListener("input",I(this,qe),{capture:!0})})}disconnectedCallback(){var a;(a=I(this,xe))==null||a.remove(),I(this,Pe).disconnect(),I(this,He).disconnect(),document.removeEventListener("scroll",I(this,ze),{capture:!0}),window.removeEventListener("resize",I(this,ze),{capture:!0});const n=I(this,G,wt);n&&(n.removeEventListener("input",I(this,qe),{capture:!0}),ft.delete(n))}};Pe=new WeakMap,He=new WeakMap,Ne=new WeakMap,xe=new WeakMap,G=new WeakSet,wt=function(){var n;return(n=I(this,Ne))==null?void 0:n.deref()},Ae=function(n){const a=I(this,G,wt);return a?n(a):this.remove()},Ie=new WeakMap,Me=new WeakMap,kt=function(){X(this,G,Ae).call(this,n=>{const a=window.getComputedStyle(n);this.style.height=a.height,this.style.width=a.width,n.clientHeight!==this.clientHeight&&(this.style.height=`calc(${a.height} + ${n.clientHeight-this.clientHeight}px)`),n.clientWidth!==this.clientWidth&&(this.style.width=`calc(${a.width} + ${n.clientWidth-this.clientWidth}px)`);const c=n.getBoundingClientRect(),o=this.getBoundingClientRect();me(this,Ie,I(this,Ie)+c.left-o.left),me(this,Me,I(this,Me)+c.top-o.top),this.style.transform=`translate(${I(this,Ie)}px, ${I(this,Me)}px)`,this.scrollTop=n.scrollTop,this.scrollLeft=n.scrollLeft,this.dispatchEvent(new Un)})},Te=new WeakMap,et=function(){I(this,Te)||(me(this,Te,!0),requestAnimationFrame(()=>{X(this,G,kt).call(this),me(this,Te,!1)}))},tt=function(){X(this,G,Ae).call(this,n=>{const a=window.getComputedStyle(n);for(const c of Vn)this.style[c]=a[c];X(this,G,et).call(this)})},nt=function(){X(this,G,Ae).call(this,n=>{this.textContent=n.value,X(this,G,kt).call(this)})},qe=new WeakMap,ze=new WeakMap;let it=At;const Vn=["direction","writingMode","unicodeBidi","textOrientation","boxSizing","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","borderStyle","paddingTop","paddingRight","paddingBottom","paddingLeft","fontStyle","fontVariant","fontWeight","fontStretch","fontSize","fontSizeAdjust","lineHeight","fontFamily","textAlign","textTransform","textIndent","textDecoration","letterSpacing","wordSpacing","tabSize","MozTabSize"];try{customElements.define("input-style-clone",it)}catch(s){if(!(s instanceof DOMException&&s.name==="NotSupportedError"))throw s}var be,Be,Re,le,Ft,en,Ct,De;const st=class st{constructor(t,n=0,a=n){re(this,le);re(this,be);re(this,Be);re(this,Re);me(this,be,t),me(this,Be,n),me(this,Re,a)}static fromSelection(t){const{selectionStart:n,selectionEnd:a}=t;return new st(t,n??void 0,a??void 0)}get collapsed(){return this.startOffset===this.endOffset}get commonAncestorContainer(){return I(this,be)}get endContainer(){return I(this,be)}get startContainer(){return I(this,be)}get startOffset(){return I(this,Be)}get endOffset(){return I(this,Re)}setStartOffset(t){me(this,Be,X(this,le,Ct).call(this,t))}setEndOffset(t){me(this,Re,X(this,le,Ct).call(this,t))}collapse(t=!1){t?this.setEndOffset(this.startOffset):this.setStartOffset(this.endOffset)}cloneContents(){return X(this,le,De).call(this).cloneContents()}cloneRange(){return new st(I(this,be),this.startOffset,this.endOffset)}getBoundingClientRect(){return X(this,le,De).call(this).getBoundingClientRect()}getClientRects(){return X(this,le,De).call(this).getClientRects()}toString(){return X(this,le,De).call(this).toString()}getStyleClone(){return I(this,le,Ft)}};be=new WeakMap,Be=new WeakMap,Re=new WeakMap,le=new WeakSet,Ft=function(){return it.for(I(this,be))},en=function(){return I(this,le,Ft)},Ct=function(t){return Math.max(0,Math.min(t,I(this,be).value.length))},De=function(){const t=document.createRange(),n=I(this,le,en).childNodes[0];return n&&(t.setStart(n,this.startOffset),t.setEnd(n,this.endOffset)),t};let Et=st;const Ze=new WeakMap;class Gn{constructor(t,n){this.expander=t,this.input=n,this.combobox=null,this.menu=null,this.match=null,this.justPasted=!1,this.lookBackIndex=0,this.oninput=this.onInput.bind(this),this.onpaste=this.onPaste.bind(this),this.onkeydown=this.onKeydown.bind(this),this.oncommit=this.onCommit.bind(this),this.onmousedown=this.onMousedown.bind(this),this.onblur=this.onBlur.bind(this),this.interactingWithList=!1,n.addEventListener("paste",this.onpaste),n.addEventListener("input",this.oninput),n.addEventListener("keydown",this.onkeydown),n.addEventListener("blur",this.onblur)}destroy(){this.input.removeEventListener("paste",this.onpaste),this.input.removeEventListener("input",this.oninput),this.input.removeEventListener("keydown",this.onkeydown),this.input.removeEventListener("blur",this.onblur)}dismissMenu(){this.deactivate()&&(this.lookBackIndex=this.input.selectionEnd||this.lookBackIndex)}activate(t,n){var a,c;this.input!==document.activeElement&&this.input!==((c=(a=document.activeElement)===null||a===void 0?void 0:a.shadowRoot)===null||c===void 0?void 0:c.activeElement)||(this.deactivate(),this.menu=n,n.id||(n.id=`text-expander-${Math.floor(Math.random()*1e5).toString()}`),this.expander.append(n),this.combobox=new $n(this.input,n),this.expander.dispatchEvent(new Event("text-expander-activate")),this.positionMenu(n,t.position),this.combobox.start(),n.addEventListener("combobox-commit",this.oncommit),n.addEventListener("mousedown",this.onmousedown),this.combobox.navigate(1))}positionMenu(t,n){const a=new Et(this.input,n).getBoundingClientRect(),c={left:a.left,top:a.top+a.height},o=t.getBoundingClientRect(),l={left:c.left-o.left,top:c.top-o.top};if(l.left!==0||l.top!==0){const x=getComputedStyle(t);t.style.left=x.left?`calc(${x.left} + ${l.left}px)`:`${l.left}px`,t.style.top=x.top?`calc(${x.top} + ${l.top}px)`:`${l.top}px`}}deactivate(){const t=this.menu;return!t||!this.combobox?!1:(this.expander.dispatchEvent(new Event("text-expander-deactivate")),this.menu=null,t.removeEventListener("combobox-commit",this.oncommit),t.removeEventListener("mousedown",this.onmousedown),this.combobox.destroy(),this.combobox=null,t.remove(),!0)}onCommit({target:t}){var n;const a=t;if(!(a instanceof HTMLElement)||!this.combobox)return;const c=this.match;if(!c)return;const o=this.input.value.substring(0,c.position-c.key.length),l=this.input.value.substring(c.position+c.text.length),x={item:a,key:c.key,value:null,continue:!1};if(!this.expander.dispatchEvent(new CustomEvent("text-expander-value",{cancelable:!0,detail:x}))||!x.value)return;let M=(n=this.expander.getAttribute("suffix"))!==null&&n!==void 0?n:" ";x.continue&&(M="");const F=`${x.value}${M}`;this.input.value=o+F+l;const b=o.length+F.length;this.deactivate(),this.input.focus({preventScroll:!0}),this.input.selectionStart=b,this.input.selectionEnd=b,x.continue||(this.lookBackIndex=b,this.match=null),this.expander.dispatchEvent(new CustomEvent("text-expander-committed",{cancelable:!1,detail:{input:this.input}}))}onBlur(){if(this.interactingWithList){this.interactingWithList=!1;return}this.deactivate()}onPaste(){this.justPasted=!0}async onInput(){if(this.justPasted){this.justPasted=!1;return}const t=this.findMatch();if(t){this.match=t;const n=await this.notifyProviders(t);if(!this.match)return;n?this.activate(t,n):this.deactivate()}else this.match=null,this.deactivate()}findMatch(){const t=this.input.selectionEnd||0,n=this.input.value;t<=this.lookBackIndex&&(this.lookBackIndex=t-1);for(const{key:a,multiWord:c}of this.expander.keys){const o=Kn(n,a,t,{multiWord:c,lookBackIndex:this.lookBackIndex,lastMatchPosition:this.match?this.match.position:null});if(o)return{text:o.text,key:a,position:o.position}}}async notifyProviders(t){const n=[],a=x=>n.push(x);return this.expander.dispatchEvent(new CustomEvent("text-expander-change",{cancelable:!0,detail:{provide:a,text:t.text,key:t.key}}))?(await Promise.all(n)).filter(x=>x.matched).map(x=>x.fragment)[0]:void 0}onMousedown(){this.interactingWithList=!0}onKeydown(t){t.key==="Escape"&&(this.match=null,this.deactivate()&&(this.lookBackIndex=this.input.selectionEnd||this.lookBackIndex,t.stopImmediatePropagation(),t.preventDefault()))}}class Nt extends HTMLElement{get keys(){const t=this.getAttribute("keys"),n=t?t.split(" "):[],a=this.getAttribute("multiword"),c=a?a.split(" "):[],o=c.length===0&&this.hasAttribute("multiword");return n.map(l=>({key:l,multiWord:o||c.includes(l)}))}connectedCallback(){const t=this.querySelector('input[type="text"], textarea');if(!(t instanceof HTMLInputElement||t instanceof HTMLTextAreaElement))return;const n=new Gn(this,t);Ze.set(this,n)}disconnectedCallback(){const t=Ze.get(this);t&&(t.destroy(),Ze.delete(this))}dismiss(){const t=Ze.get(this);t&&t.dismissMenu()}}window.customElements.get("text-expander")||(window.TextExpanderElement=Nt,window.customElements.define("text-expander",Nt));function Yn({onlyFirst:s=!1}={}){const t=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(t,s?void 0:"g")}const Zn=Yn();function Xn(s){if(typeof s!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof s}\``);return s.replace(Zn,"")}const Jn=new Intl.Segmenter;function qt(s,{countAnsiEscapeCodes:t=!1}={}){if(s===""||(t||(s=Xn(s)),s===""))return 0;let n=0;for(const a of Jn.segment(s))n++;return n}const Qn="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",Lt=[["aa","Afar","Afaraf"],["ab","Abkhaz","аҧсуа бызшәа"],["ae","Avestan","avesta"],["af","Afrikaans","Afrikaans"],["ak","Akan","Akan"],["am","Amharic","አማርኛ"],["an","Aragonese","aragonés"],["ar","Arabic","اللغة العربية"],["as","Assamese","অসমীয়া"],["av","Avaric","авар мацӀ"],["ay","Aymara","aymar aru"],["az","Azerbaijani","azərbaycan dili"],["ba","Bashkir","башҡорт теле"],["be","Belarusian","беларуская мова"],["bg","Bulgarian","български език"],["bh","Bihari","भोजपुरी"],["bi","Bislama","Bislama"],["bm","Bambara","bamanankan"],["bn","Bengali","বাংলা"],["bo","Tibetan","བོད་ཡིག"],["br","Breton","brezhoneg"],["bs","Bosnian","bosanski jezik"],["ca","Catalan","Català"],["ce","Chechen","нохчийн мотт"],["ch","Chamorro","Chamoru"],["co","Corsican","corsu"],["cr","Cree","ᓀᐦᐃᔭᐍᐏᐣ"],["cs","Czech","čeština"],["cu","Old Church Slavonic","ѩзыкъ словѣньскъ"],["cv","Chuvash","чӑваш чӗлхи"],["cy","Welsh","Cymraeg"],["da","Danish","dansk"],["de","German","Deutsch"],["dv","Divehi","Dhivehi"],["dz","Dzongkha","རྫོང་ཁ"],["ee","Ewe","Eʋegbe"],["el","Greek","Ελληνικά"],["en","English","English"],["eo","Esperanto","Esperanto"],["es","Spanish","Español"],["et","Estonian","eesti"],["eu","Basque","euskara"],["fa","Persian","فارسی"],["ff","Fula","Fulfulde"],["fi","Finnish","suomi"],["fj","Fijian","Vakaviti"],["fo","Faroese","føroyskt"],["fr","French","Français"],["fy","Western Frisian","Frysk"],["ga","Irish","Gaeilge"],["gd","Scottish Gaelic","Gàidhlig"],["gl","Galician","galego"],["gu","Gujarati","ગુજરાતી"],["gv","Manx","Gaelg"],["ha","Hausa","هَوُسَ"],["he","Hebrew","עברית"],["hi","Hindi","हिन्दी"],["ho","Hiri Motu","Hiri Motu"],["hr","Croatian","Hrvatski"],["ht","Haitian","Kreyòl ayisyen"],["hu","Hungarian","magyar"],["hy","Armenian","Հայերեն"],["hz","Herero","Otjiherero"],["ia","Interlingua","Interlingua"],["id","Indonesian","Bahasa Indonesia"],["ie","Interlingue","Interlingue"],["ig","Igbo","Asụsụ Igbo"],["ii","Nuosu","ꆈꌠ꒿ Nuosuhxop"],["ik","Inupiaq","Iñupiaq"],["io","Ido","Ido"],["is","Icelandic","Íslenska"],["it","Italian","Italiano"],["iu","Inuktitut","ᐃᓄᒃᑎᑐᑦ"],["ja","Japanese","日本語"],["jv","Javanese","basa Jawa"],["ka","Georgian","ქართული"],["kg","Kongo","Kikongo"],["ki","Kikuyu","Gĩkũyũ"],["kj","Kwanyama","Kuanyama"],["kk","Kazakh","қазақ тілі"],["kl","Kalaallisut","kalaallisut"],["km","Khmer","ខេមរភាសា"],["kn","Kannada","ಕನ್ನಡ"],["ko","Korean","한국어"],["kr","Kanuri","Kanuri"],["ks","Kashmiri","कश्मीरी"],["ku","Kurmanji (Kurdish)","Kurmancî"],["kv","Komi","коми кыв"],["kw","Cornish","Kernewek"],["ky","Kyrgyz","Кыргызча"],["la","Latin","latine"],["lb","Luxembourgish","Lëtzebuergesch"],["lg","Ganda","Luganda"],["li","Limburgish","Limburgs"],["ln","Lingala","Lingála"],["lo","Lao","ລາວ"],["lt","Lithuanian","lietuvių kalba"],["lu","Luba-Katanga","Tshiluba"],["lv","Latvian","latviešu valoda"],["mg","Malagasy","fiteny malagasy"],["mh","Marshallese","Kajin M̧ajeļ"],["mi","Māori","te reo Māori"],["mk","Macedonian","македонски јазик"],["ml","Malayalam","മലയാളം"],["mn","Mongolian","Монгол хэл"],["mr","Marathi","मराठी"],["ms","Malay","Bahasa Melayu"],["ms-Arab","Jawi Malay","بهاس ملايو"],["mt","Maltese","Malti"],["my","Burmese","ဗမာစာ"],["na","Nauru","Ekakairũ Naoero"],["nb","Norwegian Bokmål","Norsk bokmål"],["nd","Northern Ndebele","isiNdebele"],["ne","Nepali","नेपाली"],["ng","Ndonga","Owambo"],["nl","Dutch","Nederlands"],["nn","Norwegian Nynorsk","Norsk Nynorsk"],["no","Norwegian","Norsk"],["nr","Southern Ndebele","isiNdebele"],["nv","Navajo","Diné bizaad"],["ny","Chichewa","chiCheŵa"],["oc","Occitan","occitan"],["oj","Ojibwe","ᐊᓂᔑᓈᐯᒧᐎᓐ"],["om","Oromo","Afaan Oromoo"],["or","Oriya","ଓଡ଼ିଆ"],["os","Ossetian","ирон æвзаг"],["pa","Punjabi","ਪੰਜਾਬੀ"],["pi","Pāli","पाऴि"],["pl","Polish","Polski"],["ps","Pashto","پښتو"],["pt","Portuguese","Português"],["qu","Quechua","Runa Simi"],["rm","Romansh","rumantsch grischun"],["rn","Kirundi","Ikirundi"],["ro","Romanian","Română"],["ru","Russian","Русский"],["rw","Kinyarwanda","Ikinyarwanda"],["sa","Sanskrit","संस्कृतम्"],["sc","Sardinian","sardu"],["sd","Sindhi","सिन्धी"],["se","Northern Sami","Davvisámegiella"],["sg","Sango","yângâ tî sängö"],["si","Sinhala","සිංහල"],["sk","Slovak","slovenčina"],["sl","Slovenian","slovenščina"],["sn","Shona","chiShona"],["so","Somali","Soomaaliga"],["sq","Albanian","Shqip"],["sr","Serbian","српски језик"],["ss","Swati","SiSwati"],["st","Southern Sotho","Sesotho"],["su","Sundanese","Basa Sunda"],["sv","Swedish","Svenska"],["sw","Swahili","Kiswahili"],["ta","Tamil","தமிழ்"],["te","Telugu","తెలుగు"],["tg","Tajik","тоҷикӣ"],["th","Thai","ไทย"],["ti","Tigrinya","ትግርኛ"],["tk","Turkmen","Türkmen"],["tl","Tagalog","Wikang Tagalog"],["tn","Tswana","Setswana"],["to","Tonga","faka Tonga"],["tr","Turkish","Türkçe"],["ts","Tsonga","Xitsonga"],["tt","Tatar","татар теле"],["tw","Twi","Twi"],["ty","Tahitian","Reo Tahiti"],["ug","Uyghur","ئۇيغۇرچە‎"],["uk","Ukrainian","Українська"],["ur","Urdu","اردو"],["uz","Uzbek","Ўзбек"],["ve","Venda","Tshivenḓa"],["vi","Vietnamese","Tiếng Việt"],["vo","Volapük","Volapük"],["wa","Walloon","walon"],["wo","Wolof","Wollof"],["xh","Xhosa","isiXhosa"],["yi","Yiddish","ייִדיש"],["yo","Yoruba","Yorùbá"],["za","Zhuang","Saɯ cueŋƅ"],["zh","Chinese","中文"],["zu","Zulu","isiZulu"],["zh-CN","Chinese (China)","简体中文"],["zh-HK","Chinese (Hong Kong)","繁體中文(香港)"],["zh-TW","Chinese (Taiwan)","繁體中文(臺灣)"],["zh-YUE","Cantonese","廣東話"],["ast","Asturian","Asturianu"],["chr","Cherokee","ᏣᎳᎩ ᎦᏬᏂᎯᏍᏗ"],["ckb","Sorani (Kurdish)","سۆرانی"],["cnr","Montenegrin","crnogorski"],["csb","Kashubian","Kaszëbsczi"],["jbo","Lojban","la .lojban."],["kab","Kabyle","Taqbaylit"],["ldn","Láadan","Láadan"],["lfn","Lingua Franca Nova","lingua franca nova"],["moh","Mohawk","Kanienʼkéha"],["nds","Low German","Plattdüütsch"],["pdc","Pennsylvania Dutch","Pennsilfaani-Deitsch"],["sco","Scots","Scots"],["sma","Southern Sami","Åarjelsaemien Gïele"],["smj","Lule Sami","Julevsámegiella"],["szl","Silesian","ślůnsko godka"],["tok","Toki Pona","toki pona"],["vai","Vai","ꕙꔤ"],["xal","Kalmyk","Хальмг келн"],["zba","Balaibalan","باليبلن"],["zgh","Standard Moroccan Tamazight","ⵜⴰⵎⴰⵣⵉⵖⵜ"]],ei="(((?:[^A-Za-z0-9@@$##\\uFFFE\\uFEFF\\uFFFF]|[\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069]|^))((https?:\\/\\/)((?:(?:(?:[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/](?:[_-]|[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/])*)?[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/]\\.)*(?:(?:[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/](?:-|[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/])*)?[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/]\\.)(?:(?:(?:삼성|닷컴|닷넷|香格里拉|餐厅|食品|飞利浦|電訊盈科|集团|通販|购物|谷歌|诺基亚|联通|网络|网站|网店|网址|组织机构|移动|珠宝|点看|游戏|淡马锡|机构|書籍|时尚|新闻|政府|政务|招聘|手表|手机|我爱你|慈善|微博|广东|工行|家電|娱乐|天主教|大拿|大众汽车|在线|嘉里大酒店|嘉里|商标|商店|商城|公益|公司|八卦|健康|信息|佛山|企业|中文网|中信|世界|ポイント|ファッション|セール|ストア|コム|グーグル|クラウド|みんな|คอม|संगठन|नेट|कॉम|همراه|موقع|موبايلي|كوم|كاثوليك|عرب|شبكة|بيتك|بازار|العليان|ارامكو|اتصالات|ابوظبي|קום|сайт|рус|орг|онлайн|москва|ком|католик|дети|zuerich|zone|zippo|zip|zero|zara|zappos|yun|youtube|you|yokohama|yoga|yodobashi|yandex|yamaxun|yahoo|yachts|xyz|xxx|xperia|xin|xihuan|xfinity|xerox|xbox|wtf|wtc|wow|world|works|work|woodside|wolterskluwer|wme|winners|wine|windows|win|williamhill|wiki|wien|whoswho|weir|weibo|wedding|wed|website|weber|webcam|weatherchannel|weather|watches|watch|warman|wanggou|wang|walter|walmart|wales|vuelos|voyage|voto|voting|vote|volvo|volkswagen|vodka|vlaanderen|vivo|viva|vistaprint|vista|vision|visa|virgin|vip|vin|villas|viking|vig|video|viajes|vet|versicherung|vermögensberatung|vermögensberater|verisign|ventures|vegas|vanguard|vana|vacations|ups|uol|uno|university|unicom|uconnect|ubs|ubank|tvs|tushu|tunes|tui|tube|trv|trust|travelersinsurance|travelers|travelchannel|travel|training|trading|trade|toys|toyota|town|tours|total|toshiba|toray|top|tools|tokyo|today|tmall|tkmaxx|tjx|tjmaxx|tirol|tires|tips|tiffany|tienda|tickets|tiaa|theatre|theater|thd|teva|tennis|temasek|telefonica|telecity|tel|technology|tech|team|tdk|tci|taxi|tax|tattoo|tatar|tatamotors|target|taobao|talk|taipei|tab|systems|symantec|sydney|swiss|swiftcover|swatch|suzuki|surgery|surf|support|supply|supplies|sucks|style|study|studio|stream|store|storage|stockholm|stcgroup|stc|statoil|statefarm|statebank|starhub|star|staples|stada|srt|srl|spreadbetting|spot|sport|spiegel|space|soy|sony|song|solutions|solar|sohu|software|softbank|social|soccer|sncf|smile|smart|sling|skype|sky|skin|ski|site|singles|sina|silk|shriram|showtime|show|shouji|shopping|shop|shoes|shiksha|shia|shell|shaw|sharp|shangrila|sfr|sexy|sex|sew|seven|ses|services|sener|select|seek|security|secure|seat|search|scot|scor|scjohnson|science|schwarz|schule|school|scholarships|schmidt|schaeffler|scb|sca|sbs|sbi|saxo|save|sas|sarl|sapo|sap|sanofi|sandvikcoromant|sandvik|samsung|samsclub|salon|sale|sakura|safety|safe|saarland|ryukyu|rwe|run|ruhr|rugby|rsvp|room|rogers|rodeo|rocks|rocher|rmit|rip|rio|ril|rightathome|ricoh|richardli|rich|rexroth|reviews|review|restaurant|rest|republican|report|repair|rentals|rent|ren|reliance|reit|reisen|reise|rehab|redumbrella|redstone|red|recipes|realty|realtor|realestate|read|raid|radio|racing|qvc|quest|quebec|qpon|pwc|pub|prudential|pru|protection|property|properties|promo|progressive|prof|productions|prod|pro|prime|press|praxi|pramerica|post|porn|politie|poker|pohl|pnc|plus|plumbing|playstation|play|place|pizza|pioneer|pink|ping|pin|pid|pictures|pictet|pics|piaget|physio|photos|photography|photo|phone|philips|phd|pharmacy|pfizer|pet|pccw|pay|passagens|party|parts|partners|pars|paris|panerai|panasonic|pamperedchef|page|ovh|ott|otsuka|osaka|origins|orientexpress|organic|org|orange|oracle|open|ooo|onyourside|online|onl|ong|one|omega|ollo|oldnavy|olayangroup|olayan|okinawa|office|off|observer|obi|nyc|ntt|nrw|nra|nowtv|nowruz|now|norton|northwesternmutual|nokia|nissay|nissan|ninja|nikon|nike|nico|nhk|ngo|nfl|nexus|nextdirect|next|news|newholland|new|neustar|network|netflix|netbank|net|nec|nba|navy|natura|nationwide|name|nagoya|nadex|nab|mutuelle|mutual|museum|mtr|mtpc|mtn|msd|movistar|movie|mov|motorcycles|moto|moscow|mortgage|mormon|mopar|montblanc|monster|money|monash|mom|moi|moe|moda|mobily|mobile|mobi|mma|mls|mlb|mitsubishi|mit|mint|mini|mil|microsoft|miami|metlife|merckmsd|meo|menu|men|memorial|meme|melbourne|meet|media|med|mckinsey|mcdonalds|mcd|mba|mattel|maserati|marshalls|marriott|markets|marketing|market|map|mango|management|man|makeup|maison|maif|madrid|macys|luxury|luxe|lupin|lundbeck|ltda|ltd|lplfinancial|lpl|love|lotto|lotte|london|lol|loft|locus|locker|loans|loan|llp|llc|lixil|living|live|lipsy|link|linde|lincoln|limo|limited|lilly|like|lighting|lifestyle|lifeinsurance|life|lidl|liaison|lgbt|lexus|lego|legal|lefrak|leclerc|lease|lds|lawyer|law|latrobe|latino|lat|lasalle|lanxess|landrover|land|lancome|lancia|lancaster|lamer|lamborghini|ladbrokes|lacaixa|kyoto|kuokgroup|kred|krd|kpn|kpmg|kosher|komatsu|koeln|kiwi|kitchen|kindle|kinder|kim|kia|kfh|kerryproperties|kerrylogistics|kerryhotels|kddi|kaufen|juniper|juegos|jprs|jpmorgan|joy|jot|joburg|jobs|jnj|jmp|jll|jlc|jio|jewelry|jetzt|jeep|jcp|jcb|java|jaguar|iwc|iveco|itv|itau|istanbul|ist|ismaili|iselect|irish|ipiranga|investments|intuit|international|intel|int|insure|insurance|institute|ink|ing|info|infiniti|industries|inc|immobilien|immo|imdb|imamat|ikano|iinet|ifm|ieee|icu|ice|icbc|ibm|hyundai|hyatt|hughes|htc|hsbc|how|house|hotmail|hotels|hoteles|hot|hosting|host|hospital|horse|honeywell|honda|homesense|homes|homegoods|homedepot|holiday|holdings|hockey|hkt|hiv|hitachi|hisamitsu|hiphop|hgtv|hermes|here|helsinki|help|healthcare|health|hdfcbank|hdfc|hbo|haus|hangout|hamburg|hair|guru|guitars|guide|guge|gucci|guardian|group|grocery|gripe|green|gratis|graphics|grainger|gov|got|gop|google|goog|goodyear|goodhands|goo|golf|goldpoint|gold|godaddy|gmx|gmo|gmbh|gmail|globo|global|gle|glass|glade|giving|gives|gifts|gift|ggee|george|genting|gent|gea|gdn|gbiz|gay|garden|gap|games|game|gallup|gallo|gallery|gal|fyi|futbol|furniture|fund|fun|fujixerox|fujitsu|ftr|frontier|frontdoor|frogans|frl|fresenius|free|fox|foundation|forum|forsale|forex|ford|football|foodnetwork|food|foo|fly|flsmidth|flowers|florist|flir|flights|flickr|fitness|fit|fishing|fish|firmdale|firestone|fire|financial|finance|final|film|fido|fidelity|fiat|ferrero|ferrari|feedback|fedex|fast|fashion|farmers|farm|fans|fan|family|faith|fairwinds|fail|fage|extraspace|express|exposed|expert|exchange|everbank|events|eus|eurovision|etisalat|esurance|estate|esq|erni|ericsson|equipment|epson|epost|enterprises|engineering|engineer|energy|emerck|email|education|edu|edeka|eco|eat|earth|dvr|dvag|durban|dupont|duns|dunlop|duck|dubai|dtv|drive|download|dot|doosan|domains|doha|dog|dodge|doctor|docs|dnp|diy|dish|discover|discount|directory|direct|digital|diet|diamonds|dhl|dev|design|desi|dentist|dental|democrat|delta|deloitte|dell|delivery|degree|deals|dealer|deal|dds|dclk|day|datsun|dating|date|data|dance|dad|dabur|cyou|cymru|cuisinella|csc|cruises|cruise|crs|crown|cricket|creditunion|creditcard|credit|cpa|courses|coupons|coupon|country|corsica|coop|cool|cookingchannel|cooking|contractors|contact|consulting|construction|condos|comsec|computer|compare|company|community|commbank|comcast|com|cologne|college|coffee|codes|coach|clubmed|club|cloud|clothing|clinique|clinic|click|cleaning|claims|cityeats|city|citic|citi|citadel|cisco|circle|cipriani|church|chrysler|chrome|christmas|chloe|chintai|cheap|chat|chase|charity|channel|chanel|cfd|cfa|cern|ceo|center|ceb|cbs|cbre|cbn|cba|catholic|catering|cat|casino|cash|caseih|case|casa|cartier|cars|careers|career|care|cards|caravan|car|capitalone|capital|capetown|canon|cancerresearch|camp|camera|cam|calvinklein|call|cal|cafe|cab|bzh|buzz|buy|business|builders|build|bugatti|budapest|brussels|brother|broker|broadway|bridgestone|bradesco|box|boutique|bot|boston|bostik|bosch|boots|booking|book|boo|bond|bom|bofa|boehringer|boats|bnpparibas|bnl|bmw|bms|blue|bloomberg|blog|blockbuster|blanco|blackfriday|black|biz|bio|bingo|bing|bike|bid|bible|bharti|bet|bestbuy|best|berlin|bentley|beer|beauty|beats|bcn|bcg|bbva|bbt|bbc|bayern|bauhaus|basketball|baseball|bargains|barefoot|barclays|barclaycard|barcelona|bar|bank|band|bananarepublic|banamex|baidu|baby|azure|axa|aws|avianca|autos|auto|author|auspost|audio|audible|audi|auction|attorney|athleta|associates|asia|asda|arte|art|arpa|army|archi|aramco|arab|aquarelle|apple|app|apartments|aol|anz|anquan|android|analytics|amsterdam|amica|amfam|amex|americanfamily|americanexpress|alstom|alsace|ally|allstate|allfinanz|alipay|alibaba|alfaromeo|akdn|airtel|airforce|airbus|aigo|aig|agency|agakhan|africa|afl|afamilycompany|aetna|aero|aeg|adult|ads|adac|actor|active|aco|accountants|accountant|accenture|academy|abudhabi|abogado|able|abc|abbvie|abbott|abb|abarth|aarp|aaa|onion)(?=[^0-9a-zA-Z@+-]|$))|(?:(?:한국|香港|澳門|新加坡|台灣|台湾|中國|中国|გე|ລາວ|ไทย|ලංකා|ഭാരതം|ಭಾರತ|భారత్|சிங்கப்பூர்|இலங்கை|இந்தியா|ଭାରତ|ભારત|ਭਾਰਤ|ভাৰত|ভারত|বাংলা|भारोत|भारतम्|भारत|ڀارت|پاکستان|موريتانيا|مليسيا|مصر|قطر|فلسطين|عمان|عراق|سورية|سودان|تونس|بھارت|بارت|ایران|امارات|المغرب|السعودية|الجزائر|البحرين|الاردن|հայ|қаз|укр|срб|рф|мон|мкд|ею|бел|бг|ευ|ελ|zw|zm|za|yt|ye|ws|wf|vu|vn|vi|vg|ve|vc|va|uz|uy|us|um|uk|ug|ua|tz|tw|tv|tt|tr|tp|to|tn|tm|tl|tk|tj|th|tg|tf|td|tc|sz|sy|sx|sv|su|st|ss|sr|so|sn|sm|sl|sk|sj|si|sh|sg|se|sd|sc|sb|sa|rw|ru|rs|ro|re|qa|py|pw|pt|ps|pr|pn|pm|pl|pk|ph|pg|pf|pe|pa|om|nz|nu|nr|np|no|nl|ni|ng|nf|ne|nc|na|mz|my|mx|mw|mv|mu|mt|ms|mr|mq|mp|mo|mn|mm|ml|mk|mh|mg|mf|me|md|mc|ma|ly|lv|lu|lt|ls|lr|lk|li|lc|lb|la|kz|ky|kw|kr|kp|kn|km|ki|kh|kg|ke|jp|jo|jm|je|it|is|ir|iq|io|in|im|il|ie|id|hu|ht|hr|hn|hm|hk|gy|gw|gu|gt|gs|gr|gq|gp|gn|gm|gl|gi|gh|gg|gf|ge|gd|gb|ga|fr|fo|fm|fk|fj|fi|eu|et|es|er|eh|eg|ee|ec|dz|do|dm|dk|dj|de|cz|cy|cx|cw|cv|cu|cr|co|cn|cm|cl|ck|ci|ch|cg|cf|cd|cc|ca|bz|by|bw|bv|bt|bs|br|bq|bo|bn|bm|bl|bj|bi|bh|bg|bf|be|bd|bb|ba|az|ax|aw|au|at|as|ar|aq|ao|an|am|al|ai|ag|af|ae|ad|ac)(?=[^0-9a-zA-Z@+-]|$))|(?:xn--[\\-0-9a-z]+))))(?::([0-9]+))?(\\/(?:(?:[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*(?:\\((?:[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]+|(?:[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*\\([a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]+\\)[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*))\\)[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*)*[\\+\\-a-z\\u0400-\\u04FF0-9=_#\\/\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]|(?:\\((?:[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]+|(?:[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*\\([a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]+\\)[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*))\\)))|(?:@[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]+\\/))*)?(\\?[a-z0-9!?\\*'@\\(\\);:&=\\+\\$\\/%#\\[\\]\\-_\\.,~|]*[a-z0-9\\-_&=#\\/])?))",ti="gi",Kt={source:ei,flags:ti},Wt=["byte","kilobyte","megabyte","gigabyte","terabyte","petabyte"];function Xe(s){const t=Math.min(Math.floor(Math.log2(s)/10),Wt.length-1),n=s/1024**t;return ge.number(n,{style:"unit",unit:Wt[t],unitDisplay:"narrow",maximumFractionDigits:0})}const ni={BASE_URL:"./",DEV:!1,MODE:"production",PHANPY_CLIENT_NAME:"Phanpy",PHANPY_LINGVA_INSTANCES:"lingva.phanpy.social lingva.lunar.icu lingva.garudalinux.org translate.plausibility.cloud",PHANPY_PRIVACY_POLICY_URL:"https://github.com/cheeaun/phanpy/blob/main/PRIVACY.MD",PHANPY_WEBSITE:"https://phanpy.social",PROD:!0,SSR:!1,VITE_APP_ENV:"production"},{PHANPY_IMG_ALT_API_URL:vt,PHANPY_GIPHY_API_KEY:ii}=ni,si=Lt.reduce((s,t)=>{const[n,a,c]=t;return s[n]={common:a,native:c},s},{}),tn={300:Ee(5,"minute"),1800:Ee(30,"minute"),3600:Ee(1,"hour"),21600:Ee(6,"hour"),86400:Ee(1,"day"),259200:Ee(3,"day"),604800:Ee(1,"week")},ai=Object.keys(tn),Ut=24*60*60,Vt=s=>{if(!s)return Ut;const t=(new Date(s).getTime()-Date.now())/1e3;return ai.find(n=>n>=t)||Ut},ke=document.createElement("ul");ke.role="listbox";ke.className="text-expander-menu";const ri=16,oi=new IntersectionObserver(s=>{s.forEach(t=>{if(t.isIntersecting){const{left:n,width:a}=t.boundingClientRect,{innerWidth:c}=window;if(n+a>c){const o=Cn()?"right":"left";ke.style[o]=c-a-ri+"px"}}})});oi.observe(ke);const Fe=gn([new Intl.DateTimeFormat().resolvedOptions().locale,...navigator.languages],Lt.map(s=>s[0]),"en"),nn=new RegExp(Kt.source,Kt.flags),li=/(^|[^\/\w])@(([a-z0-9_]+)@[a-z0-9\.\-]+[a-z0-9]+)/gi,ci="$2xxxxxxxxxxxxxxxxxxxxxxx";function ui(s){return s.replace(nn,ci).replace(li,"$1@$3")}const di=/[a-z0-9_]+([a-z0-9_.-]+[a-z0-9_]+)?/i,hi=new RegExp(`(^|[^=\\/\\w])(@${di.source}(?:@[\\p{L}\\w.-]+[\\w]+)?)`,"uig"),pi=new RegExp("(^|[^=\\/\\w])(#[a-z0-9_]+([a-z0-9_.]+[a-z0-9_]+)?)(?![\\/\\w])","ig"),mi="[a-zA-Z0-9_]{2,}",gi=new RegExp(`(^|[^=\\/\\w])(:${mi}:)(?=[^A-Za-z0-9_:]|$)`,"g"),fi=new Intl.Segmenter;function bt(s){return s.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function vi(s,{maxCharacters:t=1/0}){const{composerCharacterCount:n}=oe;if(n>t){let a="",c="";const o=fi.segment(s);for(const{segment:l,index:x}of o)x"),bt(a)+c}return bt(s).replace(nn,'$2$3').replace(hi,'$1$2').replace(pi,'$1$2').replace(gi,'$1$2')}const bi=fn(s=>new Intl.RelativeTimeFormat(s||void 0)),zt=100;function Mi({onClose:s,replyToStatus:t,editStatus:n,draftStatus:a,standalone:c,hasOpener:o}){var Bt;const{i18n:l}=Ke(),x=bi(l.locale),{masto:E,instance:M}=_t(),[F,b]=U("default"),T=Y((a==null?void 0:a.uid)||zn()),L=vn(),B=L.info,$=Xt(),{statuses:{maxCharacters:ie,maxMediaAttachments:j,charactersReservedPerUrl:p}={},mediaAttachments:{supportedMimeTypes:d=[],imageSizeLimit:m,imageMatrixLimit:w,videoSizeLimit:f,videoMatrixLimit:O,videoFrameRateLimit:k}={},polls:{maxOptions:K,maxCharactersPerOption:ae,maxExpiration:ce,minExpiration:Q}={}}=$||{},D=Y(),W=Y(),[H,te]=U("public"),[Z,ue]=U(!1),[P,se]=U(Se.session.get("currentLanguage")||Fe),fe=Y(P),[g,S]=U([]),[z,ee]=U(null),N=Se.account.get("preferences")||{},de=()=>{D.current&&D.current.dispatchEvent(new Event("input"))},pe=()=>{setTimeout(()=>{var r,u,y;D.current&&((u=(r=a==null?void 0:a.status)==null?void 0:r.startsWith)!=null&&u.call(r,` +`)&&(D.current.selectionStart=0,D.current.selectionEnd=0),(y=D.current)==null||y.focus())},300)};ne(()=>{var r,u;if(t){const{spoilerText:y,visibility:h,language:A,sensitive:C}=t;y&&W.current&&(W.current.value=y);const v=[...new Set([t.account.acct,...t.mentions.map(_=>_.acct)])].filter(_=>_!==B.acct);v.length>0&&(D.current.value=`${v.map(_=>`@${_}`).join(" ")} `,de()),pe(),te(h==="public"&&N["posting:default:visibility"]?N["posting:default:visibility"].toLowerCase():h),se(A||((r=N["posting:default:language"])==null?void 0:r.toLowerCase())||Fe),ue(C&&!!y)}else if(n){const{visibility:y,language:h,sensitive:A,poll:C,mediaAttachments:R}=n,v=!!(C!=null&&C.options)&&{...C,options:C.options.map(_=>(_==null?void 0:_.title)||_),expiresIn:(C==null?void 0:C.expiresIn)||Vt(C.expiresAt)};b("loading"),(async()=>{var _;try{const q=await E.v1.statuses.$select(n.id).source.fetch(),{text:he,spoilerText:ve}=q;D.current.value=he,D.current.dataset.source=he,de(),pe(),W.current.value=ve,te(y),se(h||((_=N["posting:default:language"])==null?void 0:_.toLowerCase())||Fe),ue(A),v&&ee(v),S(R),b("default")}catch(q){alert((q==null?void 0:q.reason)||q),b("error")}})()}else pe(),N["posting:default:visibility"]&&te(N["posting:default:visibility"].toLowerCase()),N["posting:default:language"]&&se(N["posting:default:language"].toLowerCase()),N["posting:default:sensitive"]&&ue(!!N["posting:default:sensitive"]);if(a){const{status:y,spoilerText:h,visibility:A,language:C,sensitive:R,poll:v,mediaAttachments:_}=a,q=!!(v!=null&&v.options)&&{...v,options:v.options.map(he=>(he==null?void 0:he.title)||he),expiresIn:(v==null?void 0:v.expiresIn)||Vt(v.expiresAt)};D.current.value=y,de(),pe(),h&&(W.current.value=h),A&&te(A),se(C||((u=N["posting:default:language"])==null?void 0:u.toLowerCase())||Fe),R!==null&&ue(R),q&&ee(q),_&&S(_)}},[a,n,t]);const _e=Y(),Le=l._({id:"hR9gtK"}),ot=()=>{const{value:r,dataset:u}=D.current;if(F==="loading")return!1;const y=(r||"").trim().replace(new RegExp("^\\p{White_Space}+|\\p{White_Space}+$","gu"),""),h=g.length>0;if(!y&&!h||g.length>0&&g.every(_=>_.id))return!0;const C=(t==null?void 0:t.account.id)===B.id,R=t&&r.trim()===`@${t.account.acct}`;return!!(!C&&R||r===(u==null?void 0:u.source))},We=()=>ot()?!0:confirm(Le);ne(()=>{const r=u=>{ot()||(u.preventDefault(),u.returnValue=Le)};return window.addEventListener("beforeunload",r,{capture:!0}),()=>window.removeEventListener("beforeunload",r,{capture:!0})},[]);const rn=()=>{const{value:r}=D.current,{value:u}=W.current;return qt(ui(r))+qt(u)},lt=()=>{const r=rn();oe.composerCharacterCount=r};ne(lt,[]);const St=window.CloseWatcher,ct=Y(!1);$e("esc",()=>{ct.current=!0},{enabled:!St,enableOnFormTags:!0}),$e("esc",()=>{!c&&ct.current&&We()&&s(),ct.current=!1},{enabled:!St,enableOnFormTags:!0,keyup:!0,ignoreEventWhen:r=>{const u=document.querySelectorAll("#modal-container > *"),y=!!u,h=u.length===1&&u[0].querySelector("#compose-container");return y&&!h}}),_n(()=>{!c&&We()&&s()},[c,We,s]);const It=Y({}),Mt=()=>`${bn()}#${T.current}`,ut=()=>{if(n||oe.composerState.minimized)return;const r=Mt(),u={key:r,replyTo:t?{id:t.id,account:{id:t.account.id,username:t.account.username,acct:t.account.acct}}:null,draftStatus:{uid:T.current,status:D.current.value,spoilerText:W.current.value,visibility:H,language:P,sensitive:Z,poll:z,mediaAttachments:g}};!yn(u,It.current)&&!ot()&&($t.drafts.set(r,{...u,state:"unsaved",updatedAt:Date.now()}).then(()=>{}).catch(y=>{}),It.current=structuredClone(u))};Ln(ut,5e3),ne(()=>(ut(),()=>{$t.drafts.del(Mt())}),[]),ne(()=>{const r=y=>{const{items:h}=y.clipboardData||y.dataTransfer,A=[];for(let C=0;C0&&g.length>=j){alert(l._({id:"ctFhjs",values:{maxMediaAttachments:j}}));return}if(A.length>0){y.preventDefault(),y.stopPropagation();const C=j-g.length,R=A.slice(0,C);if(R.length<=0){alert(l._({id:"ctFhjs",values:{maxMediaAttachments:j}}));return}const v=R.map(_=>({file:_,type:_.type,size:_.size,url:URL.createObjectURL(_),id:null,description:null}));S([...g,...v])}};window.addEventListener("paste",r);const u=y=>{y.dataTransfer.items.length>0&&(y.preventDefault(),y.stopPropagation())};return window.addEventListener("dragover",u),window.addEventListener("drop",r),()=>{window.removeEventListener("paste",r),window.removeEventListener("dragover",u),window.removeEventListener("drop",r)}},[g]);const[Ue,dt]=U(!1),[Ve,Ge]=U(!1),[on,ht]=U(!1),[ye,ln]=U(null),[cn,un]=je(()=>{const r=[],u=[],{contentTranslationHideLanguages:y=[]}=oe.settings;return Lt.forEach(h=>{const[A]=h;A===P||A===fe.current||A===Fe||y.includes(A)||ye!=null&&ye.length&&ye.includes(A)?r.push(h):u.push(h)}),r.sort(([h,A],[C,R])=>h===P?-1:C===P?1:A.localeCompare(R)),u.sort(([h,A],[C,R])=>A.localeCompare(R)),[r,u]},[P,ye]),Tt=je(()=>!!(t!=null&&t.createdAt)&&Math.floor((Date.now()-new Date(t.createdAt))/(1e3*60*60*24*30)),[t]),dn=()=>{ut(),oe.composerState.minimized=!0};return e("div",{id:"compose-container-outer",children:[e("div",{id:"compose-container",class:c?"standalone":"",children:[e("div",{class:"compose-top",children:[(B==null?void 0:B.avatarStatic)&&e(Qt,{account:B,accountInstance:L.instanceURL,hideDisplayName:!0,useAvatarStatic:!0}),c?o&&e("button",{type:"button",class:"light pop-button",disabled:F==="loading",onClick:()=>{var r;if(!window.opener){alert(l._({id:"qiPXgY"}));return}if(window.opener.__STATES__.showCompose){if((r=window.opener.__STATES__.composerState)!=null&&r.publishing){alert(l._({id:"Z2l5Bt"}));return}let u=l._({id:"AB/GtR"});if(!confirm(u))return}s({fn:()=>{const u={editStatus:n,replyToStatus:t,draftStatus:{uid:T.current,status:D.current.value,spoilerText:W.current.value,visibility:H,language:P,sensitive:Z,poll:z,mediaAttachments:g}};window.opener.__COMPOSE__=u,window.opener.__STATES__.showCompose?(window.opener.__STATES__.showCompose=!1,setTimeout(()=>{window.opener.__STATES__.showCompose=!0},10)):window.opener.__STATES__.showCompose=!0,window.opener.__STATES__.composerState.minimized&&(window.opener.__STATES__.composerState.minimized=!1)}})},children:e(J,{icon:"popin",alt:l._({id:"/5ZKeE"})})}):e("span",{class:"compose-controls",children:[e("button",{type:"button",class:"plain4 pop-button",disabled:F==="loading",onClick:()=>{An({editStatus:n,replyToStatus:t,draftStatus:{uid:T.current,status:D.current.value,spoilerText:W.current.value,visibility:H,language:P,sensitive:Z,poll:z,mediaAttachments:g}})&&s()},children:e(J,{icon:"popout",alt:l._({id:"JsU2En"})})}),e("button",{type:"button",class:"plain4 min-button",onClick:dn,children:e(J,{icon:"minimize",alt:l._({id:"3TSz9S"})})})," ",e("button",{type:"button",class:"light close-button",disabled:F==="loading",onClick:()=>{We()&&s()},children:e(J,{icon:"x",alt:l._({id:"yz7wBu"})})})]})]}),!!t&&e("div",{class:"status-preview",children:[e(jt,{status:t,size:"s",previewMode:!0}),e("div",{class:"status-preview-legend reply-to",children:Tt>0?e(V,{id:"Q1Huya",values:{0:t.account.acct||t.account.username,1:x.format(-Tt,"month")},components:{0:e("strong",{})}}):e(V,{id:"dwLCPZ",values:{0:t.account.acct||t.account.username}})})]}),!!n&&e("div",{class:"status-preview",children:[e(jt,{status:n,size:"s",previewMode:!0}),e("div",{class:"status-preview-legend",children:e(V,{id:"wKtOLH"})})]}),e("form",{ref:_e,class:`form-visibility-${H}`,style:{pointerEvents:F==="loading"?"none":"auto",opacity:F==="loading"?.5:1},onKeyDown:r=>{r.key==="Enter"&&(r.ctrlKey||r.metaKey)&&_e.current.dispatchEvent(new Event("submit",{cancelable:!0}))},onSubmit:r=>{r.preventDefault();const u=new FormData(r.target),y=Object.fromEntries(u.entries());let{status:h,visibility:A,sensitive:C,spoilerText:R}=y;if(C=C==="on",z){if(z.options.length<2){alert(l._({id:"zhrMYj"}));return}if(z.options.some(v=>v==="")){alert(l._({id:"uNVxXX"}));return}}g.length>0&&g.some(_=>{var q,he;return!((he=(q=_.description)==null?void 0:q.trim)!=null&&he.call(q))})&&!confirm(l._({id:"MQYucx"}))||(R=C&&R||void 0,h=h===""?void 0:h,oe.composerState.publishing=!0,b("loading"),(async()=>{try{if(g.length>0){const q=g.map(ve=>{const{file:Ye,description:hn,id:pn}=ve;if(pn)return ve;{const mn=Zt({file:Ye,description:hn});return E.v2.media.create(mn).then(pt=>(pt.id&&(ve.id=pt.id),pt))}}),he=await Promise.allSettled(q);if(he.some(ve=>{var Ye;return ve.status==="rejected"||!((Ye=ve.value)!=null&&Ye.id)})){oe.composerState.publishing=!1,oe.composerState.publishingError=!0,b("error"),he.forEach(ve=>{ve.status==="rejected"&&alert(ve.reason||l._({id:"eIiurD",values:{i}}))});return}}let v={status:h,spoiler_text:R,language:P,sensitive:C,poll:z,media_ids:g.map(q=>q.id)};n&&Je("@mastodon/edit-media-attributes")?v.media_attributes=g.map(q=>({id:q.id,description:q.description})):n||(v.visibility=A,v.in_reply_to_id=(t==null?void 0:t.id)||void 0),v=Zt(v);let _;if(n)_=await E.v1.statuses.$select(n.id).update(v),xn(_,M,{skipThreading:!0});else try{_=await E.v1.statuses.create(v,{requestInit:{headers:{"Idempotency-Key":T.current}}})}catch{_=await E.v1.statuses.create(v)}oe.composerState.minimized=!1,oe.composerState.publishing=!1,b("default"),s({type:n?"edit":t?"reply":"post",newStatus:_,instance:M})}catch(v){oe.composerState.publishing=!1,oe.composerState.publishingError=!0,alert((v==null?void 0:v.reason)||v),b("error")}})())},children:[e("div",{class:"toolbar stretch",children:[e("input",{ref:W,type:"text",name:"spoilerText",placeholder:l._({id:"gnKo7f"}),disabled:F==="loading",class:"spoiler-text-field",lang:P,spellCheck:"true",dir:"auto",style:{opacity:Z?1:0,pointerEvents:Z?"auto":"none"},onInput:()=>{lt()}}),e("label",{class:`toolbar-button ${Z?"highlight":""}`,title:l._({id:"zKu2Aq"}),children:[e("input",{name:"sensitive",type:"checkbox",checked:Z,disabled:F==="loading",onChange:r=>{var y,h;const u=r.target.checked;ue(u),u?(y=W.current)==null||y.focus():(h=D.current)==null||h.focus()}}),e(J,{icon:`eye-${Z?"close":"open"}`})]})," ",e("label",{class:`toolbar-button ${H!=="public"&&!Z?"show-field":""} ${H!=="public"?"highlight":""}`,title:H,children:[e(J,{icon:Sn[H],alt:H}),e("select",{name:"visibility",value:H,onChange:r=>{te(r.target.value)},disabled:F==="loading"||!!n,dir:"auto",children:[e("option",{value:"public",children:e(V,{id:"7d1a0d"})}),(Je("@pleroma/local-visibility-post")||Je("@akkoma/local-visibility-post"))&&e("option",{value:"local",children:e(V,{id:"d5zxa4"})}),e("option",{value:"unlisted",children:e(V,{id:"WDcQq9"})}),e("option",{value:"private",children:e(V,{id:"o34OrG"})}),e("option",{value:"direct",children:e(V,{id:"IV4QaU"})})]})]})," "]}),e(wi,{ref:D,placeholder:t?l._({id:"Sjj+EN"}):n?l._({id:"qzVesX"}):l._({id:"owpNF1"}),required:(g==null?void 0:g.length)===0,disabled:F==="loading",lang:P,onInput:()=>{lt()},maxCharacters:ie,performSearch:r=>{const{type:u,q:y,limit:h}=r;return u==="accounts"?E.v1.accounts.search.list({q:y,limit:h,resolve:!1}):E.v2.search.fetch(r)},onTrigger:r=>{(r==null?void 0:r.name)==="custom-emojis"?Ge({defaultSearchTerm:(r==null?void 0:r.defaultSearchTerm)||null}):(r==null?void 0:r.name)==="mention"?dt({defaultSearchTerm:(r==null?void 0:r.defaultSearchTerm)||null}):(r==null?void 0:r.name)==="auto-detect-language"&&(r!=null&&r.languages)&&ln(r.languages)}}),(g==null?void 0:g.length)>0&&e("div",{class:"media-attachments",children:[g.map((r,u)=>{const{id:y,file:h}=r,A=(h==null?void 0:h.size)+(h==null?void 0:h.type)+(h==null?void 0:h.name);return e(Ei,{attachment:r,disabled:F==="loading",lang:P,onDescriptionChange:C=>{S(R=>{const v=[...R];return v[u]={...v[u],description:C},v})},onRemove:()=>{S(C=>C.filter((R,v)=>v!==u))}},y||A||u)}),e("label",{class:"media-sensitive",children:[e("input",{name:"sensitive",type:"checkbox",checked:Z,disabled:F==="loading",onChange:r=>{const u=r.target.checked;ue(u)}})," ",e("span",{children:e(V,{id:"jER18a"})})," ",e(J,{icon:`eye-${Z?"close":"open"}`})]})]}),!!z&&e(Fi,{lang:P,maxOptions:K,maxExpiration:ce,minExpiration:Q,maxCharactersPerOption:ae,poll:z,disabled:F==="loading",onInput:r=>{if(r){const u={...r};ee(u)}else ee(null)}}),e("div",{class:"toolbar wrap",style:{justifyContent:"flex-end"},children:[e("span",{children:[e("label",{class:"toolbar-button",children:[e("input",{type:"file",accept:d.join(","),multiple:g.length=j||!!z,onChange:r=>{const u=r.target.files;if(!u)return;const y=Array.from(u).map(h=>({file:h,type:h.type,size:h.size,url:URL.createObjectURL(h),id:null,description:null}));g.length+y.length>j?alert(l._({id:"ctFhjs",values:{maxMediaAttachments:j}})):S(h=>h.concat(y)),r.target.value=""}}),e(J,{icon:"attachment"})]}),K==null||K>1&&e(Oe,{children:e("button",{type:"button",class:"toolbar-button",disabled:F==="loading"||!!z||!!g.length,onClick:()=>{ee({options:["",""],expiresIn:24*60*60,multiple:!1})},children:e(J,{icon:"poll",alt:l._({id:"cZJ92q"})})})}),e("button",{type:"button",class:"toolbar-button",disabled:F==="loading",onClick:()=>{Ge(!0)},children:e(J,{icon:"emoji2",alt:l._({id:"ggiJLM"})})}),!!oe.settings.composerGIFPicker&&e("button",{type:"button",class:"toolbar-button gif-picker-button",disabled:F==="loading"||g.length>=j||!!z,onClick:()=>{ht(!0)},children:e("span",{children:"GIF"})})]}),e("div",{class:"spacer"}),F==="loading"?e(at,{abrupt:!0}):e(ki,{maxCharacters:ie,hidden:F==="loading"}),e("label",{class:`toolbar-button ${P!==fe.current||ye!=null&&ye.length&&!ye.includes(P)?"highlight":""}`,children:[e("span",{class:"icon-text",children:(Bt=si[P])==null?void 0:Bt.native}),e("select",{name:"language",value:P,onChange:r=>{const{value:u}=r.target;se(u||Fe),Se.session.set("currentLanguage",u||Fe)},disabled:F==="loading",dir:"auto",children:[cn.map(([r,u,y])=>{const h=xt({code:r,fallback:u});return e("option",{value:r,children:h!==y?`${y} - ${h}`:h},r)}),e("hr",{}),un.map(([r,u,y])=>{const h=xt({code:r,fallback:u});return e("option",{value:r,children:h!==y?`${y} - ${h}`:h},r)})]})]})," ",e("button",{type:"submit",class:"large",disabled:F==="loading",children:t?l._({id:"ImOQa9"}):n?l._({id:"EkH9pt"}):l._({id:"GMe2XV"})})]})]})]}),Ue&&e(Qe,{onClick:r=>{r.target===r.currentTarget&&dt(!1)},children:e(Ci,{masto:E,instance:M,onClose:()=>{dt(!1)},defaultSearchTerm:Ue==null?void 0:Ue.defaultSearchTerm,onSelect:r=>{const u=D.current;if(!u)return;const{selectionStart:y,selectionEnd:h}=u,A=u.value,C=A.slice(0,y),R=C?/[\s\t\n\r]$/.test(C)?"":" ":"",v=A.slice(h),_=/^[\s\t\n\r]/.test(v)?"":" ",q=C+R+"@"+r+_+v;u.value=q,u.selectionStart=u.selectionEnd=h+1+r.length+_.length,u.focus(),u.dispatchEvent(new Event("input"))}})}),Ve&&e(Qe,{onClick:r=>{r.target===r.currentTarget&&Ge(!1)},children:e(zi,{masto:E,instance:M,onClose:()=>{Ge(!1)},defaultSearchTerm:Ve==null?void 0:Ve.defaultSearchTerm,onSelect:r=>{const u=D.current;if(!u)return;const{selectionStart:y,selectionEnd:h}=u,A=u.value,C=A.slice(0,y),R=C?/[\s\t\n\r]$/.test(C)?"":" ":"",v=A.slice(h),_=/^[\s\t\n\r]/.test(v)?"":" ",q=C+R+r+_+v;u.value=q,u.selectionStart=u.selectionEnd=h+r.length+_.length,u.focus(),u.dispatchEvent(new Event("input"))}})}),on&&e(Qe,{onClick:r=>{r.target===r.currentTarget&&ht(!1)},children:e(Li,{onClose:()=>ht(!1),onSelect:({url:r,type:u,alt_text:y})=>{if(g.length>=j){alert(l._({id:"ctFhjs",values:{maxMediaAttachments:j}}));return}(async()=>{var A,C;let h;try{h=Ce({text:l._({id:"/Cw4Tx"}),duration:-1});const R=await fetch(r,{referrerPolicy:"no-referrer"}).then(q=>q.blob()),v=new File([R],u==="video/mp4"?"video.mp4":"image.gif",{type:u}),_=[...g,{file:v,type:u,size:v.size,id:null,description:y||""}];S(_),(A=h==null?void 0:h.hideToast)==null||A.call(h)}catch{(C=h==null?void 0:h.hideToast)==null||C.call(h),Ce(l._({id:"VKDnAx"}))}})()}})})]})}function Gt(s){if(!s)return;const{value:t,offsetHeight:n,scrollHeight:a,clientHeight:c}=s;if(no.visibleInPicker),c=new In(a,{keys:["shortcode"],findAllMatches:!0});return[a,c]}const sn=wn(yi,{matchesArg:(s,t)=>s.instance===t.instance,maxAge:30*60*1e3}),xi=async s=>{const{detectAll:t}=await kn(async()=>{const{detectAll:a}=await import("./tinyld-light-tbgyvj3S.js");return{detectAll:a}},[],import.meta.url),n=t(s);return n!=null&&n.length?n.slice(0,2).map(a=>a.lang):null},wi=En((s,t)=>{var j;const{masto:n,instance:a}=_t(),[c,o]=U(((j=t.current)==null?void 0:j.value)||""),{maxCharacters:l,performSearch:x=()=>{},onTrigger:E=()=>{},...M}=s,F=Y();ne(()=>{sn(a,n).then(p=>{const[d,m]=p;F.current=m}).catch(p=>{})},[]);const b=Y(),T=Y("");ne(()=>{let p,d,m;return b.current&&(p=w=>{var ae;const{key:f,provide:O,text:k}=w.detail;if(T.current=k,k===""){O(Promise.resolve({matched:!1}));return}if(f===":"){const ce=(ae=F.current)==null?void 0:ae.search(k,{limit:5});let Q="";ce.forEach(({item:D})=>{const{shortcode:W,url:H}=D;Q+=` +
  • + + ${we(W)} +
  • `}),Q+=`
  • ${ge._({id:"24misb"})}
  • `,ke.innerHTML=Q,O(Promise.resolve({matched:ce.length>0,fragment:ke}));return}const K={"@":"accounts","#":"hashtags"}[f];O(new Promise(ce=>{x({type:K,q:k,limit:5}).then(D=>{if(k!==T.current)return;const W=D[K]||D;let H="";W.forEach(te=>{var ee;const{name:Z,avatarStatic:ue,displayName:P,username:se,acct:fe,emojis:g,history:S}=te,z=Mn(P,g);if(fe)H+=` +
  • + + + + + ${z||se} +
    @${we(fe)} +
    +
  • + `;else{const N=(ee=S==null?void 0:S.reduce)==null?void 0:ee.call(S,(de,pe)=>de+ +pe.uses,0);H+=` +
  • + #${we(Z)} + ${N?`${Tn(N)}`:""} +
  • + `}}),K==="accounts"&&(H+=`
  • ${ge._({id:"24misb"})}
  • `),ke.innerHTML=H,ce({matched:W.length>0,fragment:ke})})}))},b.current.addEventListener("text-expander-change",p),d=w=>{const{key:f,item:O}=w.detail,{value:k,more:K}=O.dataset;f===":"?(w.detail.value=k?`:${k}:`:"​",K&&(w.detail.continue=!0,setTimeout(()=>{E==null||E({name:"custom-emojis",defaultSearchTerm:K})},300))):f==="@"?(w.detail.value=k?`@${k} `:"​",K&&(w.detail.continue=!0,setTimeout(()=>{E==null||E({name:"mention",defaultSearchTerm:K})},300))):w.detail.value=`${f}${k}`},b.current.addEventListener("text-expander-value",d),m=w=>{const{input:f}=w.detail;if(o(f.value),t.current){const O=new Event("input",{bubbles:!0});t.current.dispatchEvent(O)}},b.current.addEventListener("text-expander-committed",m)),()=>{b.current&&(b.current.removeEventListener("text-expander-change",p),b.current.removeEventListener("text-expander-value",d),b.current.removeEventListener("text-expander-committed",m))}},[]),ne(()=>{const p=t.current;if(!p)return;new ResizeObserver(()=>{if(b.current){const{height:m}=p.getBoundingClientRect();b.current.style.height=m+"px"}}).observe(p)},[]);const L=Y(0),B=Y(),$=Bn(p=>{var w;if(!B.current)return;if(L.current>3){B.current.innerHTML="",B.current=null,(w=$==null?void 0:$.cancel)==null||w.call($);return}let d,m;L.current<=3&&(d=Date.now()),B.current.innerHTML=vi(p,{maxCharacters:l})+` +`,L.current<=3&&(m=Date.now()),d&&m&&m-d>50&&L.current++},500),ie=rt(()=>{var m,w;const p=(m=B.current)==null?void 0:m.cloneNode(!0);if(!p)return;p.querySelectorAll("mark").forEach(f=>{f.remove()});const d=(w=p.innerText)==null?void 0:w.trim();d&&(async()=>{const f=await xi(d);f!=null&&f.length&&(E==null||E({name:"auto-detect-language",languages:f}))})()},2e3);return e("text-expander",{ref:b,keys:"@ # :",class:"compose-field-container",children:[e("textarea",{class:"compose-field",autoCapitalize:"sentences",autoComplete:"on",autoCorrect:"on",spellCheck:"true",dir:"auto",rows:"6",cols:"50",...M,ref:t,name:"status",value:c,onKeyDown:p=>{const{key:d,target:m}=p;if(d==="Enter"&&!(p.ctrlKey||p.metaKey))try{const{value:w,selectionStart:f}=m,k=w.slice(0,f).split(` +`).slice(-1)[0];if(k&&/^\s*(-|\d+\.)\s/.test(k)){const[K,ae,ce,Q,D]=k.match(/^(\s*)(-|\d+\.)(\s+)(.+)?/)||[];if(D){p.preventDefault();const[W]=ce.match(/\d+/)||[],H=W?`${+W+1}.`:"-",te=` +${ae}${H}${Q}`;m.setRangeText(te,f,f);const Z=f+te.length;m.setSelectionRange(Z,Z)}else{const W=f-k.length;m.setRangeText("",W,f)}Gt(m),m.dispatchEvent(new Event("input"))}}catch{}B.current&&(B.current.scrollTop=m.scrollTop)},onInput:p=>{var w;const{target:d}=p,m=d.value.replace(/\u200b/g,"");o(m),Gt(d),(w=s.onInput)==null||w.call(s,p),$(m),ie()},style:{width:"100%",height:"4em"},onScroll:p=>{if(B.current){const{scrollTop:d}=p.target;B.current.scrollTop=d}}}),e("div",{ref:B,class:"compose-highlight","aria-hidden":"true"})]})});function ki({maxCharacters:s=500,hidden:t}){const a=Fn(oe).composerCharacterCount,c=s-a;return t?e("span",{class:"char-counter",hidden:!0}):e("span",{class:"char-counter",title:`${c}/${s}`,style:{"--percentage":a/s*100},children:[e("meter",{class:`${c<=-10?"explode":c<=0?"danger":c<=20?"warning":""}`,value:a,max:s}),e("span",{class:"counter",children:c})]})}function Yt(s,t,n,a){const c=Math.sqrt(t/s),o=Math.floor(n*c),l=Math.floor(a*c);return{newWidth:o,newHeight:l}}function Ei({attachment:s,disabled:t,lang:n,onDescriptionChange:a=()=>{},onRemove:c=()=>{}}){const{i18n:o}=Ke(),[l,x]=U("default"),E=Je("@mastodon/edit-media-attributes"),{type:M,id:F,file:b}=s,T=je(()=>b?URL.createObjectURL(b):s.url,[b,s.url]),L=!!(b!=null&&b.size),B=L?Xt():{},{mediaAttachments:{imageSizeLimit:$,imageMatrixLimit:ie,videoSizeLimit:j,videoMatrixLimit:p,videoFrameRateLimit:d}={}}=B||{},[m,w]=U(()=>L?M.startsWith("image")&&$&&b.size>$?{type:"imageSizeLimit",details:{imageSize:b.size,imageSizeLimit:$}}:M.startsWith("video")&&j&&b.size>j?{type:"videoSizeLimit",details:{videoSize:b.size,videoSizeLimit:j}}:null:null),[f,O]=U({});ne(()=>{!L||!ie||(f==null?void 0:f.matrix)>ie&&w({type:"imageMatrixLimit",details:{imageMatrix:f==null?void 0:f.matrix,imageMatrixLimit:ie,width:f==null?void 0:f.width,height:f==null?void 0:f.height}})},[f,ie,L]);const[k,K]=U({});ne(()=>{!L||!p||(k==null?void 0:k.matrix)>p&&w({type:"videoMatrixLimit",details:{videoMatrix:k==null?void 0:k.matrix,videoMatrixLimit:p,width:k==null?void 0:k.width,height:k==null?void 0:k.height}})},[k,p,L]);const[ae,ce]=U(s.description),[Q,D]=M.split("/"),W=rt(a,250);ne(()=>{W(ae)},[ae,W]);const[H,te]=U(!1),Z=Y(null);ne(()=>{let g;return H&&Z.current&&(g=setTimeout(()=>{Z.current.focus()},100)),()=>{clearTimeout(g)}},[H]);const ue=e(Oe,{children:F&&!E?e("div",{class:"media-desc",children:[e("span",{class:"tag",children:e(V,{id:"3wG7HI"})}),e("p",{title:ae,children:s.description||e("i",{children:"No description"})})]}):e("textarea",{ref:Z,value:ae||"",lang:n,placeholder:{image:o._({id:"Lh8B0N"}),video:o._({id:"mN4S+e"}),audio:o._({id:"ieZytw"})}[Q],autoCapitalize:"sentences",autoComplete:"on",autoCorrect:"on",spellCheck:"true",dir:"auto",disabled:t||l==="loading",class:l==="loading"?"loading":"",maxlength:"1500",onInput:g=>{const{value:S}=g.target;ce(S)}})}),P=Y(null);ne(()=>()=>{var g,S;(S=(g=P.current)==null?void 0:g.hideToast)==null||S.call(g)},[]);const se=Y(null),fe=g=>{const{type:S,details:z}=g;switch(S){case"imageSizeLimit":{const{imageSize:ee,imageSizeLimit:N}=z;return o._({id:"d83/LB",values:{0:Xe(ee),1:Xe(N)}})}case"imageMatrixLimit":{const{imageMatrix:ee,imageMatrixLimit:N,width:de,height:pe}=z,{newWidth:_e,newHeight:Le}=Yt(ee,N,de,pe);return o._({id:"DuvOX/",values:{0:o.number(de),1:o.number(pe),2:o.number(_e),3:o.number(Le)}})}case"videoSizeLimit":{const{videoSize:ee,videoSizeLimit:N}=z;return o._({id:"d83/LB",values:{0:Xe(ee),1:Xe(N)}})}case"videoMatrixLimit":{const{videoMatrix:ee,videoMatrixLimit:N,width:de,height:pe}=z,{newWidth:_e,newHeight:Le}=Yt(ee,N,de,pe);return o._({id:"DuvOX/",values:{0:o.number(de),1:o.number(pe),2:o.number(_e),3:o.number(Le)}})}case"videoFrameRateLimit":return o._({id:"S1fBwy"})}};return e(Oe,{children:[e("div",{class:"media-attachment",children:[e("div",{class:"media-preview",tabIndex:"0",onClick:()=>{te(!0)},children:Q==="image"?e("img",{src:T,alt:"",onLoad:g=>{if(!L)return;const{naturalWidth:S,naturalHeight:z}=g.target;O({matrix:S*z,width:S,height:z})}}):Q==="video"||Q==="gifv"?e("video",{src:T+"#t=0.1",playsinline:!0,muted:!0,disablePictureInPicture:!0,preload:"metadata",onLoadedMetadata:g=>{if(!L)return;const{videoWidth:S,videoHeight:z}=g.target;S&&z&&K({matrix:S*z,width:S,height:z})}}):Q==="audio"?e("audio",{src:T,controls:!0}):null}),ue,e("div",{class:"media-aside",children:[e("button",{type:"button",class:"plain close-button",disabled:t,onClick:c,children:e(J,{icon:"x",alt:o._({id:"t/YqKh"})})}),!!m&&e("button",{type:"button",class:"media-error",title:fe(m),onClick:()=>{se.current&&se.current.hideToast(),se.current=Ce({text:fe(m),duration:1e4})},children:e(J,{icon:"alert",alt:o._({id:"SlfejT"})})})]})]}),H&&e(Qe,{onClose:()=>{te(!1)},children:e("div",{id:"media-sheet",class:"sheet sheet-max",children:[e("button",{type:"button",class:"sheet-close",onClick:()=>{te(!1)},children:e(J,{icon:"x",alt:o._({id:"yz7wBu"})})}),e("header",{children:e("h2",{children:{image:o._({id:"oMslIB"}),video:o._({id:"WZw+zB"}),audio:o._({id:"KMtgtM"})}[Q]})}),e("main",{tabIndex:"-1",children:[e("div",{class:"media-preview",children:Q==="image"?e("img",{src:T,alt:""}):Q==="video"||Q==="gifv"?e("video",{src:T,playsinline:!0,controls:!0}):Q==="audio"?e("audio",{src:T,controls:!0}):null}),e("div",{class:"media-form",children:[ue,e("footer",{children:[Q==="image"&&/^(png|jpe?g|gif|webp)$/i.test(D)&&!!oe.settings.mediaAltGenerator&&!!vt&&e(Rn,{portal:{target:document.body},containerProps:{style:{zIndex:1001}},align:"center",position:"anchor",overflow:"auto",menuButton:e("button",{type:"button",class:"plain",children:e(J,{icon:"more",size:"l",alt:o._({id:"2FYpfJ"})})}),children:[e(Ot,{disabled:l==="loading",onClick:()=>{x("loading"),P.current=Ce({text:o._({id:"8zsp51"}),duration:-1}),async function(){var g,S;try{const z=new FormData;z.append("image",b);const ee=await fetch(vt,{method:"POST",body:z}).then(N=>N.json());if(ee.error)throw new Error(ee.error);ce(ee.description)}catch(z){Ce(z.message?o._({id:"wy0Iwj",values:{0:z.message}}):o._({id:"xhYfVj"}))}finally{x("default"),(S=(g=P.current)==null?void 0:g.hideToast)==null||S.call(g)}}()},children:[e(J,{icon:"sparkles2"}),n&&n!=="en"?e("small",{children:[e(V,{id:"o5sTJw"}),e("br",{}),"(English)"]}):e("span",{children:e(V,{id:"o5sTJw"})})]}),!!n&&n!=="en"&&e(Ot,{disabled:l==="loading",onClick:()=>{x("loading"),P.current=Ce({text:o._({id:"8zsp51"}),duration:-1}),async function(){var g,S;try{const z=new FormData;z.append("image",b);const ee=`?lang=${n}`,N=await fetch(vt+ee,{method:"POST",body:z}).then(de=>de.json());if(N.error)throw new Error(N.error);ce(N.description)}catch(z){Ce(o._({id:"eNTGfp",values:{0:z!=null&&z.message?`: ${z.message}`:""}}))}finally{x("default"),(S=(g=P.current)==null?void 0:g.hideToast)==null||S.call(g)}}()},children:[e(J,{icon:"sparkles2"}),e("small",{children:[e(V,{id:"o5sTJw"}),e("br",{}),e(V,{id:"m+pAEQ",values:{0:xt(n)},components:{0:e("span",{class:"more-insignificant"})}})]})]})]}),e("button",{type:"button",class:"light block",onClick:()=>{te(!1)},disabled:l==="loading",children:e(V,{id:"DPfwMq"})})]})]})]})]})})]})}function Fi({lang:s,poll:t,disabled:n,onInput:a=()=>{},maxOptions:c,maxExpiration:o,minExpiration:l,maxCharactersPerOption:x}){const{_:E}=Ke(),{options:M,expiresIn:F,multiple:b}=t;return e("div",{class:`poll ${b?"multiple":""}`,children:[e("div",{class:"poll-choices",children:M.map((T,L)=>e("div",{class:"poll-choice",children:[e("input",{required:!0,type:"text",value:T,disabled:n,maxlength:x,placeholder:ge._({id:"LDUSXg",values:{0:L+1}}),lang:s,spellCheck:"true",dir:"auto",onInput:B=>{const{value:$}=B.target;M[L]=$,a(t)}}),e("button",{type:"button",class:"plain2 poll-button",disabled:n||M.length<=1,onClick:()=>{M.splice(L,1),a(t)},children:e(J,{icon:"x",size:"s",alt:ge._({id:"t/YqKh"})})})]},L))}),e("div",{class:"poll-toolbar",children:[e("button",{type:"button",class:"plain2 poll-button",disabled:n||M.length>=c,onClick:()=>{M.push(""),a(t)},children:"+"})," ",e("label",{class:"multiple-choices",children:[e("input",{type:"checkbox",checked:b,disabled:n,onChange:T=>{const{checked:L}=T.target;t.multiple=L,a(t)}})," ",e(V,{id:"T57mm9"})]}),e("label",{class:"expires-in",children:[e(V,{id:"lkz6PL"})," ",e("select",{value:F,disabled:n,onChange:T=>{const{value:L}=T.target;t.expiresIn=L,a(t)},children:Object.entries(tn).filter(([T])=>T>=l&&T<=o).map(([T,L])=>e("option",{value:T,children:L()},T))})]})]}),e("div",{class:"poll-toolbar",children:e("button",{type:"button",class:"plain remove-poll-button",disabled:n,onClick:()=>{a(null)},children:e(V,{id:"CDpQAX"})})})]})}function we(s){return s.replace(/[&<>"']/g,function(t){return"&#"+t.charCodeAt(0)+";"})}function Zt(s){for(let t in s)(s[t]===null||s[t]===void 0)&&delete s[t];return s}function Ci({onClose:s=()=>{},onSelect:t=()=>{},defaultSearchTerm:n}){const{masto:a}=_t(),[c,o]=U("default"),[l,x]=U([]),[E,M]=U({}),[F,b]=U(0),T=async p=>{if(!(p!=null&&p.length))return;const d=await Dn(p,E);d&&M({...E,...d})},L=p=>{p&&(o("loading"),(async()=>{try{const d=await a.v1.accounts.search.list({q:p,limit:40,resolve:!1});x(d),T(d),o("default")}catch{o("error")}})())},B=rt(L,1e3);ne(()=>{L()},[L]);const $=Y();ne(()=>{$.current&&($.current.focus(),$.current.value&&($.current.selectionStart=$.current.value.length,$.current.selectionEnd=$.current.value.length))},[]),ne(()=>{n&&L(n)},[n]);const ie=p=>{const d=p.acct;t(d),s()};$e("enter",()=>{const p=l[F];p&&ie(p)},{preventDefault:!0,enableOnFormTags:["input"]});const j=Y();return $e("down",()=>{F{const p=j.current.querySelector(".selected");p&&p.scrollIntoView({behavior:"smooth",block:"center",inline:"center"})},1)},{preventDefault:!0,enableOnFormTags:["input"]}),$e("up",()=>{F>0?b(F-1):b(l.length-1),setTimeout(()=>{const p=j.current.querySelector(".selected");p&&p.scrollIntoView({behavior:"smooth",block:"center",inline:"center"})},1)},{preventDefault:!0,enableOnFormTags:["input"]}),e("div",{id:"mention-sheet",class:"sheet",children:[!!s&&e("button",{type:"button",class:"sheet-close",onClick:s,children:e(J,{icon:"x",alt:ge._({id:"yz7wBu"})})}),e("header",{children:e("form",{onSubmit:p=>{var d;p.preventDefault(),(d=B.flush)==null||d.call(B)},children:e("input",{ref:$,required:!0,type:"search",class:"block",placeholder:ge._({id:"eH1bqp"}),onInput:p=>{const{value:d}=p.target;B(d)},autocomplete:"off",autocorrect:"off",autocapitalize:"off",spellCheck:"false",dir:"auto",defaultValue:n||""})})}),e("main",{children:(l==null?void 0:l.length)>0?e("ul",{ref:j,class:`accounts-list ${c==="loading"?"loading":""}`,children:l.map((p,d)=>{const m=E[p.id];return e("li",{class:d===F?"selected":"",children:[e(Qt,{avatarSize:"xxl",account:p,relationship:m,showStats:!0,showActivity:!0}),e("button",{type:"button",class:"plain2",onClick:()=>{ie(p)},children:e(J,{icon:"plus",size:"xl",alt:ge._({id:"m16xKo"})})})]},p.id)})}):c==="loading"?e("div",{class:"ui-state",children:e(at,{abrupt:!0})}):c==="error"?e("div",{class:"ui-state",children:e("p",{children:e(V,{id:"AThL/k"})})}):null})]})}function zi({masto:s,instance:t,onClose:n=()=>{},onSelect:a=()=>{},defaultSearchTerm:c}){const[o,l]=U("default"),x=Y([]),[E,M]=U([]),F=je(()=>Se.account.get("recentlyUsedCustomEmojis")||[]),b=Y();ne(()=>{l("loading"),(async()=>{try{const[d,m]=await sn(t,s);b.current=m,M(d),l("default")}catch{l("error")}})()},[]);const T=je(()=>{const d={"--recent--":F.filter(w=>E.find(f=>f.shortcode===w.shortcode))},m=[];return E.forEach(w=>{var f,O;if((O=(f=x.current)==null?void 0:f.push)==null||O.call(f,w),!w.category){m.push(w);return}d[w.category]||(d[w.category]=[]),d[w.category].push(w)}),m.length&&(d["--others--"]=m),d},[E]),L=Y(),[B,$]=U(null),ie=Dt(d=>{var w,f,O;const{value:m}=d.target;if(m){const k=(w=b.current)==null?void 0:w.search(m,{limit:zt});$(k.map(K=>K.item)),(O=(f=L.current)==null?void 0:f.scrollTo)==null||O.call(f,0,0)}else $(null)},[E]);ne(()=>{c&&(E!=null&&E.length)&&ie({target:{value:c}})},[c,ie,E]);const j=Dt(d=>{a==null||a(d),n==null||n(),queueMicrotask(()=>{let m=Se.account.get("recentlyUsedCustomEmojis")||[];const w=m.findIndex(f=>f.shortcode===d.shortcode);w!==-1?(m.splice(w,1),m.unshift(d)):(m.unshift(d),m=m.filter(f=>{var O,k;return(k=(O=x.current)==null?void 0:O.find)==null?void 0:k.call(O,K=>K.shortcode===f.shortcode)}),m=m.slice(0,10)),Se.account.set("recentlyUsedCustomEmojis",m)})},[a]),p=Y();return ne(()=>{p.current&&(p.current.focus(),p.current.value&&(p.current.selectionStart=p.current.value.length,p.current.selectionEnd=p.current.value.length))},[]),e("div",{id:"custom-emojis-sheet",class:"sheet",children:[!!n&&e("button",{type:"button",class:"sheet-close",onClick:n,children:e(J,{icon:"x",alt:ge._({id:"yz7wBu"})})}),e("header",{children:[e("div",{children:[e("b",{children:e(V,{id:"8i6Ueo"})})," ",o==="loading"?e(at,{}):e("small",{class:"insignificant",children:[" • ",t]})]}),e("form",{onSubmit:d=>{d.preventDefault();const m=B[0];m&&j(`:${m.shortcode}:`)},children:e("input",{ref:p,type:"search",placeholder:ge._({id:"EarrCe"}),onInput:ie,autocomplete:"off",autocorrect:"off",autocapitalize:"off",spellCheck:"false",dir:"auto",defaultValue:c||""})})]}),e("main",{ref:L,children:B!==null?e("ul",{class:"custom-emojis-matches custom-emojis-list",children:B.map(d=>e("li",{class:"custom-emojis-match",children:e(an,{emoji:d,onClick:()=>{j(`:${d.shortcode}:`)},showCode:!0})},d.shortcode))}):e("div",{class:"custom-emojis-list",children:[o==="error"&&e("div",{class:"ui-state",children:e("p",{children:e(V,{id:"Kzwsg2"})})}),o==="default"&&Object.entries(T).map(([d,m])=>!!(m!=null&&m.length)&&e("div",{class:"section-container",children:[e("div",{class:"section-header",children:{"--recent--":ge._({id:"uabU9X"}),"--others--":ge._({id:"NuKR0h"})}[d]||d}),e(_i,{emojis:m,onSelect:j})]}))]})})]})}const _i=Jt(({emojis:s,onSelect:t})=>{const{i18n:n}=Ke(),[a,c]=U(zt),o=s.length>a;return e("section",{children:[s.slice(0,a).map(l=>e(an,{emoji:l,onClick:()=>{t(`:${l.shortcode}:`)}},l.shortcode)),o&&e("button",{type:"button",class:"plain small",onClick:()=>c(a+zt),children:e(V,{id:"iAB71E",values:{0:n.number(s.length-a)}})})]})}),an=Jt(({emoji:s,onClick:t,showCode:n})=>{const a=c=>{const l=c.currentTarget.closest("main");if(l){const x=l.getBoundingClientRect(),E=c.currentTarget.getBoundingClientRect(),M=c.currentTarget.classList;E.leftx.right-88?(M.add("edge-right"),M.remove("edge-left")):M.remove("edge-left","edge-right")}};return e("button",{type:"button",className:"plain4",onClick:t,"data-title":n?void 0:s.shortcode,onPointerEnter:a,onFocus:a,children:[e("picture",{children:[!!s.staticUrl&&e("source",{srcSet:s.staticUrl,media:"(prefers-reduced-motion: reduce)"}),e("img",{className:"shortcode-emoji",src:s.url||s.staticUrl,alt:s.shortcode,width:"24",height:"24",loading:"lazy",decoding:"async"})]}),n&&e(Oe,{children:[" ",e("code",{children:s.shortcode})]})]})}),yt=20;function Li({onClose:s=()=>{},onSelect:t=()=>{}}){var L,B,$,ie,j,p;const{i18n:n}=Ke(),[a,c]=U("default"),[o,l]=U([]),x=Y(null),E=Y(null),M=Y(0),F=Y(null);function b({offset:d}){var m,w,f;(m=E.current)!=null&&m.value&&(c("loading"),(f=(w=F.current)==null?void 0:w.scrollTo)==null||f.call(w,{top:0,left:0,behavior:"smooth"}),(async()=>{var O;try{const k={api_key:ii,q:E.current.value,rating:"g",limit:yt,bundle:"messaging_non_clips",offset:d,lang:n.locale||"en"},K=await fetch("https://api.giphy.com/v1/gifs/search?"+new URLSearchParams(k),{referrerPolicy:"no-referrer"}).then(ae=>ae.json());M.current=((O=K.pagination)==null?void 0:O.offset)||0,l(K),c("results")}catch{c("error")}})())}ne(()=>{var d;(d=E.current)==null||d.focus()},[]);const T=rt(()=>{b({offset:0})},1e3);return e("div",{id:"gif-picker-sheet",class:"sheet",children:[!!s&&e("button",{type:"button",class:"sheet-close",onClick:s,children:e(J,{icon:"x",alt:n._({id:"yz7wBu"})})}),e("header",{children:e("form",{ref:x,onSubmit:d=>{d.preventDefault(),b({offset:0})},children:[e("input",{ref:E,type:"search",name:"q",placeholder:n._({id:"wxlF9B"}),required:!0,autocomplete:"off",autocorrect:"off",autocapitalize:"off",spellCheck:"false",dir:"auto",onInput:T}),e("input",{type:"image",class:"powered-button",src:Qn,width:"86",height:"30",alt:n._({id:"c1Q/eU"})})]})}),e("main",{ref:F,class:a==="loading"?"loading":"",children:[a==="default"&&e("div",{class:"ui-state",children:e("p",{class:"insignificant",children:e(V,{id:"9KEidY"})})}),a==="loading"&&!((L=o==null?void 0:o.data)!=null&&L.length)&&e("div",{class:"ui-state",children:e(at,{abrupt:!0})}),((B=o==null?void 0:o.data)==null?void 0:B.length)>0?e(Oe,{children:[e("ul",{children:o.data.map(d=>{const{id:m,images:w,title:f,alt_text:O}=d,{fixed_height_small:k,fixed_height_downsampled:K,fixed_height:ae,original:ce}=w,Q=k!=null&&k.url?k:K!=null&&K.url?K:ae;let{url:D,webp:W,width:H,height:te}=Q;+te>100&&(H=H/te*100,te=100);const Z=URL.parse(D),ue=Z.origin+Z.pathname;let P;if(W){const se=URL.parse(W);P=se.origin+se.pathname}return e("li",{children:e("button",{type:"button",onClick:()=>{const{mp4:se,url:fe}=ce,g=se||fe,S=URL.parse(g),z=S.origin+S.pathname;s(),t({url:z,type:se?"video/mp4":"image/gif",alt_text:O||f})},children:e("figure",{style:{"--figure-width":H+"px"},children:[e("picture",{children:[P&&e("source",{srcset:P,type:"image/webp"}),e("img",{src:ue,width:H,height:te,loading:"lazy",decoding:"async",alt:O,referrerpolicy:"no-referrer",onLoad:se=>{se.target.style.backgroundColor="transparent"}})]}),e("figcaption",{children:O||f})]})})},m)})}),e("p",{class:"pagination",children:[(($=o.pagination)==null?void 0:$.offset)>0&&e("button",{type:"button",class:"light small",disabled:a==="loading",onClick:()=>{var d;b({offset:((d=o.pagination)==null?void 0:d.offset)-yt})},children:[e(J,{icon:"chevron-left"}),e("span",{children:e(V,{id:"DHhJ7s"})})]}),e("span",{}),((ie=o.pagination)==null?void 0:ie.offset)+((j=o.pagination)==null?void 0:j.count)<((p=o.pagination)==null?void 0:p.total_count)&&e("button",{type:"button",class:"light small",disabled:a==="loading",onClick:()=>{var d;b({offset:((d=o.pagination)==null?void 0:d.offset)+yt})},children:[e("span",{children:e(V,{id:"hXzOVo"})})," ",e(J,{icon:"chevron-right"})]})]})]}):a==="results"&&e("div",{class:"ui-state",children:e("p",{children:"No results"})}),a==="error"&&e("div",{class:"ui-state",children:e("p",{children:e(V,{id:"PbFw9n"})})})]})]})}export{Mi as default}; +//# sourceMappingURL=compose-hDlR2o-x.js.map diff --git a/assets/compose-hDlR2o-x.js.map b/assets/compose-hDlR2o-x.js.map new file mode 100644 index 0000000..2cf2d7a --- /dev/null +++ b/assets/compose-hDlR2o-x.js.map @@ -0,0 +1 @@ +{"version":3,"mappings":"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","names":["Combobox","input","list","tabInsertsSuggestions","defaultFirstOption","event","keyboardBindings","trackComposition","commitWithElement","_a","visible","indexDiff","focusEl","els","focusIndex","indexOfItem","newIndex","target","el","scrollTo","combobox","commit","fireCommitEvent","container","inViewport","element","scrollTop","containerBottom","top","bottom","boundary","query","text","key","cursor","multiWord","lookBackIndex","lastMatchPosition","keyIndex","pre","CustomHTMLElement","InputStyleCloneUpdateEvent","CloneRegistry","_InputStyleCloneElement","__privateAdd","_InputStyleCloneElement_instances","_styleObserver","__privateMethod","updateStyles_fn","_resizeObserver","requestUpdateLayout_fn","_inputRef","_container","_xOffset","_yOffset","_isLayoutUpdating","_onInput","updateText_fn","_onDocumentScrollOrResize","usingInput_fn","clone","__privateSet","__privateGet","input_get","fn","updateLayout_fn","inputStyle","inputRect","cloneRect","prop","propertiesToCopy","InputStyleCloneElement","e","_InputRange","startOffset","endOffset","_InputRange_instances","_inputElement","_startOffset","_endOffset","selectionStart","selectionEnd","offset","clampOffset_fn","toStart","createCloneRange_fn","styleClone_get","cloneElement_get","range","textNode","InputRange","states","TextExpander","expander","match","menu","_b","position","caretRect","targetPosition","currentPosition","delta","currentStyle","item","beginning","remaining","detail","suffix","value","found","providers","provide","result","TextExpanderElement","keysAttr","keys","multiWordAttr","globalMultiWord","state","ansiRegex","onlyFirst","pattern","regex","stripAnsi","string","segmenter","stringLength","countAnsiEscapeCodes","length","_","poweredByGiphyURL","BYTES_UNITS","prettyBytes","bytes","unitIndex","Math","min","floor","log2","i18n","number","style","unit","unitDisplay","maximumFractionDigits","PHANPY_IMG_ALT_API_URL","IMG_ALT_API_URL","PHANPY_GIPHY_API_KEY","GIPHY_API_KEY","import","supportedLanguagesMap","supportedLanguages","reduce","acc","l","code","common","native","expiryOptions","i18nDuration","expirySeconds","Object","oneDay","expiresInFromExpiresAt","expiresAt","Date","getTime","now","find","s","document","createElement","role","className","windowMargin","observer","IntersectionObserver","entries","forEach","entry","isIntersecting","left","width","boundingClientRect","innerWidth","window","insetInlineStart","isRTL","observe","DEFAULT_LANG","localeMatch","Intl","DateTimeFormat","resolvedOptions","locale","navigator","languages","map","urlRegexObj","RegExp","urlRegex","source","flags","usernameRegex","urlPlaceholder","countableText","inputText","replace","USERNAME_RE","MENTION_RE","HASHTAG_RE","SHORTCODE_RE_FRAGMENT","SCAN_RE","Segmenter","escapeHTML","highlightText","maxCharacters","Infinity","composerCharacterCount","withinLimitHTML","exceedLimitHTML","htmlSegments","segment","index","RTF","mem","RelativeTimeFormat","undefined","CUSTOM_EMOJIS_COUNT","Compose","onClose","replyToStatus","editStatus","draftStatus","standalone","hasOpener","useLingui","rtf","console","masto","instance","uiState","setUIState","useState","UID","uid","log","currentAccount","currentAccountInfo","maxMediaAttachments","charactersReservedPerUrl","imageMatrixLimit","supportedMimeTypes","imageSizeLimit","videoSizeLimit","videoMatrixLimit","videoFrameRateLimit","maxExpiration","maxOptions","maxCharactersPerOption","minExpiration","spoilerTextRef","useRef","textareaRef","store","prevLanguage","language","sensitive","setMediaAttachments","setLanguage","oninputTextarea","poll","account","focusTextarea","dispatchEvent","setTimeout","spoilerText","useEffect","visibility2","language2","sensitive2","visibility","current","m","allMentions","prefs","setSensitive","poll2","mediaAttachments","options","expiresIn","statusSource","dataset","mediaAttachments2","setVisibility","composablePoll","status","o","formRef","canClose","id","hasValue","hasMediaAttachments","isSelf","hasOnlyAcct","confirmClose","hasIDMediaAttachments","beforeUnloadCopy","handleBeforeUnload","sameWithSource","getCharCount","updateCharCount","supportsCloseWatcher","useHotkeys","yes","addEventListener","capture","modals","hasModal","hasOnlyComposer","prevBackgroundDraft","count","escDownRef","ignoreEventWhen","useCloseWatcher","draftKey","getCurrentAccountNS","backgroundDraft","useInterval","db","handleItems","username","acct","items","i2","file","debug","drafts","updatedAt","error","max","allowedFiles","i18n2","del","files","mediaFiles","alert","handleDragover","showMentionPicker","setShowMentionPicker","setShowEmoji2Picker","setShowGIFPicker","setAutoDetectedLanguages","topLanguages","restLanguages","commonB","type","size","url","codeA","commonA","codeB","autoDetectedLanguages","useMemo","onMinimize","saveUnsavedDraft","_jsxs","dataTransfer","_jsx","showEmoji2Picker","showGIFPicker","topSupportedLanguages","children","class","confirmText","passData","__STATES__","opener","composerState","Icon","settings","sort","avatarStatic","disabled","onClick","Status","replyToStatusMonthsAgo","Trans","formData","components","0","media","onKeyDown","onSubmit","description","params2","res","attachment","results","mediaPromises","hasNoDescriptions","params","removeNullUndefined","newStatus","saveStatus","i","e2","media_attributes","in_reply_to_id","statuses","visibilityIconsMap","opacity","pointerEvents","checked","onChange","icon","title","limit","action","Textarea","ref","placeholder","fileID","newAttachments","attachments","j","performSearch","q","v1","resolve","v2","fetch","onTrigger","defaultSearchTerm","Poll","newPoll","setPoll","onDescriptionChange","onInput","_Fragment","accept","multiple","Loader","CharCountMeter","commonText","localeCode2Text","restSupportedLanguages","textarea","textBeforeMention","spaceAfterMention","textAfterMention","newText","Modal","CustomEmojisModal","emojiShortcode","textBeforeEmoji","spaceBeforeEmoji","spaceAfterEmoji","textAfterEmoji","GIFPickerModal","alt_text","theToast","showToast","onSelect","autoResizeTextarea","scrollHeight","clientHeight","offsetHeight","height","_getCustomEmojis","visibleEmojis","searcher","getCustomEmojis","pmem","blob","keyArg","newMediaAttachments","lang","props","textareaProps","searcherRef","r","handleChange","text2","emojis","filter","Fuse","matchesArg","cacheKeyArg","emoji","detectLangs","shortcode","detectAll","langs","encodeHTML","forwardRef","html","textExpanderTextRef","history","displayNameWithEmoji","emojifyText","displayName","search","total","cur","name","shortenNumber","Promise","matched","then","v","more","textExpanderRef","handleValue","handleCommited","setText","slowHighlightPerf","composeHighlightRef","start","end","debouncedAutoDetectLanguage","useDebouncedCallback","dom","mark","resizeObserver","throttleHighlightText","lastLine","bullet","postSpaces","anything","newBullet","pos","dir","rows","cols","hidden","charCount","leftChars","ctrlKey","setRangeText","setSelectionRange","scaleDimension","matrix","matrixLimit","scalingFactor","newHeight","newWidth","MediaAttachment","supportsEdit","supports","onScroll","configuration","getCurrentInstanceConfiguration","maxError","setMaxError","checkMaxError","snapStates","imageMatrix","videoMatrix","setDescription","debouncedOnDescriptionChange","timer","details","setImageMatrix","setVideoMatrix","toastRef","showModal","imageSizeLimit2","descTextarea","videoSize","videoSizeLimit2","videoMatrixLimit2","videoMatrix2","maxErrorToast","maxErrorText","err","imageSize","suffixType","naturalWidth","naturalHeight","1","2","3","videoWidth","videoHeight","values","setShowModal","src","onLoad","onLoadedMetadata","onRemove","alt","subtype","Menu2","MenuItem","body","response","zIndex","menuButton","append","option","required","label","splice","str","char","obj","push","MentionModal","api","accounts","setAccounts","relationshipsMap","setRelationshipsMap","setSelectedIndex","accounts2","fetchRelationships","relationships","loadAccounts","inputRef","filterShortcodes","searchTerm","bLower","aStartsWith","bStartsWith","aContains","bothContain","bContains","socialAddress","selectedAccount","selectedIndex","selectAccount","listRef","selectedItem","loadRelationships","term","debouncedLoadAccounts","enableOnFormTags","relationship","AccountBlock","customEmojisList","recentlyUsedCustomEmojis","customEmojisCatList","emojisCat","customEmojis","othersCat","matches","setMatches","_c","scrollableRef","onFind","onSelectEmoji","useCallback","recentlyUsedCustomEmojis2","recentlyUsedEmojiIndex","emoji2","setCustomEmojis","category","queueMicrotask","CustomEmojisList","memo","setMax","CustomEmojiButton","showMore","showCode","parent","selfRect","rect","targetClassList","addEdges","GIFS_PER_PAGE","slice","fetchGIFs","qRef","closest","currentTarget","remove","debouncedOnInput","onPointerEnter","staticUrl","decoding","setResults","currentOffset","gif","images","fixed_height_small","fixed_height_downsampled","fixed_height","theImage","webp","urlObj","strippedURL","strippedWebP","preventDefault","original","theURL","mp4","url2","strippedURL2","webpObj","parse"],"ignoreList":[0,1,2,3,4],"sources":["../../node_modules/@github/combobox-nav/dist/index.js","../../node_modules/@github/text-expander-element/dist/index.js","../../node_modules/ansi-regex/index.js","../../node_modules/strip-ansi/index.js","../../node_modules/string-length/index.js","../../src/assets/powered-by-giphy.svg","../../src/utils/pretty-bytes.js","../../src/components/compose.jsx"],"sourcesContent":["export default class Combobox {\n constructor(input, list, { tabInsertsSuggestions, defaultFirstOption } = {}) {\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.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 scrollTo(this.list, target);\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);\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) {\n target.dispatchEvent(new CustomEvent('combobox-commit', { 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}\nfunction scrollTo(container, target) {\n if (!inViewport(container, target)) {\n container.scrollTop = target.offsetTop;\n }\n}\nfunction inViewport(container, element) {\n const scrollTop = container.scrollTop;\n const containerBottom = scrollTop + container.clientHeight;\n const top = element.offsetTop;\n const bottom = top + element.clientHeight;\n return top >= scrollTop && bottom <= containerBottom;\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\n/**\n * A custom element is implemented as a class which extends HTMLElement (in the\n * case of autonomous elements) or the interface you want to customize (in the\n * case of customized built-in elements).\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Web_components/Using_custom_elements#custom_element_lifecycle_callbacks\n */\nclass CustomHTMLElement extends HTMLElement {\n}\n\nclass InputStyleCloneUpdateEvent extends Event {\n constructor() {\n super(\"update\");\n }\n}\nconst CloneRegistry = new WeakMap();\n/**\n * Create 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 InputStyleCloneElement extends CustomHTMLElement {\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;\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.\n *\n * Upon initial creation the clone element will automatically be inserted into the DOM and begin observing the\n * linked input. Only one clone per input can ever exist at a time.\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 InputStyleCloneElement();\n clone.connect(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 nearly always 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 InputStyleCloneElement()` and then bound to an input and inserted into the DOM with\n * `clone.connect(target)`.\n */\n connect(input) {\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 = document.createElement(\"div\");\n this.#container.style.position = \"absolute\";\n this.#container.style.pointerEvents = \"none\";\n input.after(this.#container);\n this.#container.appendChild(this);\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 /** @private */\n connectedCallback() {\n this.#usingInput((input) => {\n this.style.pointerEvents = \"none\";\n this.style.userSelect = \"none\";\n this.style.overflow = \"hidden\";\n this.style.display = \"block\";\n // Important not to use display:none which would not render the content at all\n this.style.visibility = \"hidden\";\n if (input instanceof HTMLTextAreaElement) {\n this.style.whiteSpace = \"pre-wrap\";\n this.style.wordWrap = \"break-word\";\n }\n else {\n this.style.whiteSpace = \"nowrap\";\n // text in single-line inputs is vertically centered\n this.style.display = \"table-cell\";\n this.style.verticalAlign = \"middle\";\n }\n this.setAttribute(\"aria-hidden\", \"true\");\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 }\n /** @private */\n disconnectedCallback() {\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.remove();\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.style.height = inputStyle.height;\n this.style.width = inputStyle.width;\n // Immediately re-adjust for browser inconsistencies in scrollbar handling, if necessary\n if (input.clientHeight !== this.clientHeight)\n this.style.height = `calc(${inputStyle.height} + ${input.clientHeight - this.clientHeight}px)`;\n if (input.clientWidth !== this.clientWidth)\n this.style.width = `calc(${inputStyle.width} + ${input.clientWidth - this.clientWidth}px)`;\n // Position on top of the input\n const inputRect = input.getBoundingClientRect();\n const cloneRect = this.getBoundingClientRect();\n this.#xOffset = this.#xOffset + inputRect.left - cloneRect.left;\n this.#yOffset = this.#yOffset + inputRect.top - cloneRect.top;\n this.style.transform = `translate(${this.#xOffset}px, ${this.#yOffset}px)`;\n this.scrollTop = input.scrollTop;\n this.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.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.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// Inspired by https://github.com/github/catalyst/blob/dc284dcf4f82329a9cac5c867462a8fa529b6c40/src/register.ts\ntry {\n customElements.define(\"input-style-clone\", InputStyleCloneElement);\n}\ncatch (e) {\n // Throws DOMException with NotSupportedError if already defined\n if (!(e instanceof DOMException && e.name === \"NotSupportedError\"))\n throw e;\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 InputStyleCloneElement.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.childNodes[0];\n if (textNode) {\n range.setStart(textNode, this.startOffset);\n range.setEnd(textNode, this.endOffset);\n }\n return range;\n }\n}\n\nconst states = new WeakMap();\nclass TextExpander {\n constructor(expander, input) {\n this.expander = expander;\n this.input = input;\n this.combobox = null;\n this.menu = null;\n this.match = null;\n this.justPasted = false;\n this.lookBackIndex = 0;\n this.oninput = this.onInput.bind(this);\n this.onpaste = this.onPaste.bind(this);\n this.onkeydown = this.onKeydown.bind(this);\n this.oncommit = this.onCommit.bind(this);\n this.onmousedown = this.onMousedown.bind(this);\n this.onblur = this.onBlur.bind(this);\n this.interactingWithList = false;\n input.addEventListener('paste', this.onpaste);\n input.addEventListener('input', this.oninput);\n input.addEventListener('keydown', this.onkeydown);\n input.addEventListener('blur', this.onblur);\n }\n destroy() {\n this.input.removeEventListener('paste', this.onpaste);\n this.input.removeEventListener('input', this.oninput);\n this.input.removeEventListener('keydown', this.onkeydown);\n this.input.removeEventListener('blur', this.onblur);\n }\n dismissMenu() {\n if (this.deactivate()) {\n this.lookBackIndex = this.input.selectionEnd || this.lookBackIndex;\n }\n }\n activate(match, menu) {\n var _a, _b;\n if (this.input !== document.activeElement && this.input !== ((_b = (_a = document.activeElement) === null || _a === void 0 ? void 0 : _a.shadowRoot) === null || _b === void 0 ? void 0 : _b.activeElement)) {\n return;\n }\n this.deactivate();\n this.menu = menu;\n if (!menu.id)\n menu.id = `text-expander-${Math.floor(Math.random() * 100000).toString()}`;\n this.expander.append(menu);\n this.combobox = new Combobox(this.input, menu);\n this.expander.dispatchEvent(new Event('text-expander-activate'));\n this.positionMenu(menu, match.position);\n this.combobox.start();\n menu.addEventListener('combobox-commit', this.oncommit);\n menu.addEventListener('mousedown', this.onmousedown);\n this.combobox.navigate(1);\n }\n positionMenu(menu, position) {\n const caretRect = new InputRange(this.input, position).getBoundingClientRect();\n const targetPosition = { left: caretRect.left, top: caretRect.top + caretRect.height };\n const currentPosition = menu.getBoundingClientRect();\n const delta = {\n left: targetPosition.left - currentPosition.left,\n top: targetPosition.top - currentPosition.top\n };\n if (delta.left !== 0 || delta.top !== 0) {\n const currentStyle = getComputedStyle(menu);\n menu.style.left = currentStyle.left ? `calc(${currentStyle.left} + ${delta.left}px)` : `${delta.left}px`;\n menu.style.top = currentStyle.top ? `calc(${currentStyle.top} + ${delta.top}px)` : `${delta.top}px`;\n }\n }\n deactivate() {\n const menu = this.menu;\n if (!menu || !this.combobox)\n return false;\n this.expander.dispatchEvent(new Event('text-expander-deactivate'));\n this.menu = null;\n menu.removeEventListener('combobox-commit', this.oncommit);\n menu.removeEventListener('mousedown', this.onmousedown);\n this.combobox.destroy();\n this.combobox = null;\n menu.remove();\n return true;\n }\n onCommit({ target }) {\n var _a;\n const item = target;\n if (!(item instanceof HTMLElement))\n return;\n if (!this.combobox)\n return;\n const match = this.match;\n if (!match)\n return;\n const beginning = this.input.value.substring(0, match.position - match.key.length);\n const remaining = this.input.value.substring(match.position + match.text.length);\n const detail = { item, key: match.key, value: null, continue: false };\n const canceled = !this.expander.dispatchEvent(new CustomEvent('text-expander-value', { cancelable: true, detail }));\n if (canceled)\n return;\n if (!detail.value)\n return;\n let suffix = (_a = this.expander.getAttribute('suffix')) !== null && _a !== void 0 ? _a : ' ';\n if (detail.continue) {\n suffix = '';\n }\n const value = `${detail.value}${suffix}`;\n this.input.value = beginning + value + remaining;\n const cursor = beginning.length + value.length;\n this.deactivate();\n this.input.focus({\n preventScroll: true\n });\n this.input.selectionStart = cursor;\n this.input.selectionEnd = cursor;\n if (!detail.continue) {\n this.lookBackIndex = cursor;\n this.match = null;\n }\n this.expander.dispatchEvent(new CustomEvent('text-expander-committed', { cancelable: false, detail: { input: this.input } }));\n }\n onBlur() {\n if (this.interactingWithList) {\n this.interactingWithList = false;\n return;\n }\n this.deactivate();\n }\n onPaste() {\n this.justPasted = true;\n }\n async onInput() {\n if (this.justPasted) {\n this.justPasted = false;\n return;\n }\n const match = this.findMatch();\n if (match) {\n this.match = match;\n const menu = await this.notifyProviders(match);\n if (!this.match)\n return;\n if (menu) {\n this.activate(match, menu);\n }\n else {\n this.deactivate();\n }\n }\n else {\n this.match = null;\n this.deactivate();\n }\n }\n findMatch() {\n const cursor = this.input.selectionEnd || 0;\n const text = this.input.value;\n if (cursor <= this.lookBackIndex) {\n this.lookBackIndex = cursor - 1;\n }\n for (const { key, multiWord } of this.expander.keys) {\n const found = query(text, key, cursor, {\n multiWord,\n lookBackIndex: this.lookBackIndex,\n lastMatchPosition: this.match ? this.match.position : null\n });\n if (found) {\n return { text: found.text, key, position: found.position };\n }\n }\n }\n async notifyProviders(match) {\n const providers = [];\n const provide = (result) => providers.push(result);\n const canceled = !this.expander.dispatchEvent(new CustomEvent('text-expander-change', { cancelable: true, detail: { provide, text: match.text, key: match.key } }));\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 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 default TextExpanderElement;\n","export default function ansiRegex({onlyFirst = false} = {}) {\n\tconst pattern = [\n\t '[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)',\n\t\t'(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-ntqry=><~]))'\n\t].join('|');\n\n\treturn new RegExp(pattern, onlyFirst ? undefined : 'g');\n}\n","import ansiRegex from 'ansi-regex';\n\nconst regex = ansiRegex();\n\nexport default function stripAnsi(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError(`Expected a \\`string\\`, got \\`${typeof string}\\``);\n\t}\n\n\t// Even though the regex is global, we don't need to reset the `.lastIndex`\n\t// because unlike `.exec()` and `.test()`, `.replace()` does it automatically\n\t// and doing it manually has a performance penalty.\n\treturn string.replace(regex, '');\n}\n","import stripAnsi from 'strip-ansi';\n\nconst segmenter = new Intl.Segmenter();\n\nexport default function stringLength(string, {countAnsiEscapeCodes = false} = {}) {\n\tif (string === '') {\n\t\treturn 0;\n\t}\n\n\tif (!countAnsiEscapeCodes) {\n\t\tstring = stripAnsi(string);\n\t}\n\n\tif (string === '') {\n\t\treturn 0;\n\t}\n\n\tlet length = 0;\n\n\tfor (const _ of segmenter.segment(string)) { // eslint-disable-line no-unused-vars\n\t\tlength++;\n\t}\n\n\treturn length;\n}\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 { i18n } from '@lingui/core';\n\n// https://tc39.es/ecma402/#table-sanctioned-single-unit-identifiers\nconst BYTES_UNITS = [\n 'byte',\n 'kilobyte',\n 'megabyte',\n 'gigabyte',\n 'terabyte',\n 'petabyte',\n];\nexport default function prettyBytes(bytes) {\n const unitIndex = Math.min(\n Math.floor(Math.log2(bytes) / 10),\n BYTES_UNITS.length - 1,\n );\n const value = bytes / 1024 ** unitIndex;\n return i18n.number(value, {\n style: 'unit',\n unit: BYTES_UNITS[unitIndex],\n unitDisplay: 'narrow',\n maximumFractionDigits: 0,\n });\n}\n","import './compose.css';\nimport '@github/text-expander-element';\n\nimport { msg, plural, t, Trans } from '@lingui/macro';\nimport { useLingui } from '@lingui/react';\nimport { MenuItem } from '@szhsin/react-menu';\nimport { deepEqual } from 'fast-equals';\nimport Fuse from 'fuse.js';\nimport { forwardRef, memo } from 'preact/compat';\nimport {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'preact/hooks';\nimport { useHotkeys } from 'react-hotkeys-hook';\nimport stringLength from 'string-length';\n// import { detectAll } from 'tinyld/light';\nimport { uid } from 'uid/single';\nimport { useDebouncedCallback, useThrottledCallback } from 'use-debounce';\nimport { useSnapshot } from 'valtio';\n\nimport poweredByGiphyURL from '../assets/powered-by-giphy.svg';\n\nimport Menu2 from '../components/menu2';\nimport supportedLanguages from '../data/status-supported-languages';\nimport urlRegex from '../data/url-regex';\nimport { api } from '../utils/api';\nimport db from '../utils/db';\nimport emojifyText from '../utils/emojify-text';\nimport i18nDuration from '../utils/i18n-duration';\nimport isRTL from '../utils/is-rtl';\nimport localeMatch from '../utils/locale-match';\nimport localeCode2Text from '../utils/localeCode2Text';\nimport mem from '../utils/mem';\nimport openCompose from '../utils/open-compose';\nimport pmem from '../utils/pmem';\nimport prettyBytes from '../utils/pretty-bytes';\nimport { fetchRelationships } from '../utils/relationships';\nimport shortenNumber from '../utils/shorten-number';\nimport showToast from '../utils/show-toast';\nimport states, { saveStatus } from '../utils/states';\nimport store from '../utils/store';\nimport {\n getCurrentAccount,\n getCurrentAccountNS,\n getCurrentInstance,\n getCurrentInstanceConfiguration,\n} from '../utils/store-utils';\nimport supports from '../utils/supports';\nimport useCloseWatcher from '../utils/useCloseWatcher';\nimport useInterval from '../utils/useInterval';\nimport visibilityIconsMap from '../utils/visibility-icons-map';\n\nimport AccountBlock from './account-block';\n// import Avatar from './avatar';\nimport Icon from './icon';\nimport Loader from './loader';\nimport Modal from './modal';\nimport Status from './status';\n\nconst {\n PHANPY_IMG_ALT_API_URL: IMG_ALT_API_URL,\n PHANPY_GIPHY_API_KEY: GIPHY_API_KEY,\n} = import.meta.env;\n\nconst supportedLanguagesMap = supportedLanguages.reduce((acc, l) => {\n const [code, common, native] = l;\n acc[code] = {\n common,\n native,\n };\n return acc;\n}, {});\n\n/* NOTES:\n - Max character limit includes BOTH status text and Content Warning text\n*/\n\nconst 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};\nconst expirySeconds = Object.keys(expiryOptions);\nconst oneDay = 24 * 60 * 60;\n\nconst expiresInFromExpiresAt = (expiresAt) => {\n if (!expiresAt) return oneDay;\n const delta = (new Date(expiresAt).getTime() - Date.now()) / 1000;\n return expirySeconds.find((s) => s >= delta) || oneDay;\n};\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\nconst DEFAULT_LANG = localeMatch(\n [new Intl.DateTimeFormat().resolvedOptions().locale, ...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 urlRegexObj = new RegExp(urlRegex.source, urlRegex.flags);\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// 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])(#[a-z0-9_]+([a-z0-9_.]+[a-z0-9_]+)?)(?![\\\\/\\\\w])`,\n 'ig',\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();\nfunction escapeHTML(text) {\n return text\n .replace(/&/g, '&')\n .replace(//g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\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 '' +\n escapeHTML(exceedLimitHTML) +\n '';\n }\n return escapeHTML(withinLimitHTML) + exceedLimitHTML;\n }\n\n return escapeHTML(text)\n .replace(urlRegexObj, '$2$3') // URLs\n .replace(MENTION_RE, '$1$2') // Mentions\n .replace(HASHTAG_RE, '$1$2') // Hashtags\n .replace(\n SCAN_RE,\n '$1$2',\n ); // Emoji shortcodes\n}\n\n// const rtf = new Intl.RelativeTimeFormat();\nconst RTF = mem((locale) => new Intl.RelativeTimeFormat(locale || undefined));\n\nconst CUSTOM_EMOJIS_COUNT = 100;\n\nfunction Compose({\n onClose,\n replyToStatus,\n editStatus,\n draftStatus,\n standalone,\n hasOpener,\n}) {\n const { i18n } = useLingui();\n const rtf = RTF(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 = 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,\n charactersReservedPerUrl,\n } = {},\n mediaAttachments: {\n supportedMimeTypes = [],\n imageSizeLimit,\n imageMatrixLimit,\n videoSizeLimit,\n videoMatrixLimit,\n videoFrameRateLimit,\n } = {},\n polls: {\n maxOptions,\n maxCharactersPerOption,\n maxExpiration,\n minExpiration,\n } = {},\n } = configuration || {};\n\n const textareaRef = useRef();\n const spoilerTextRef = useRef();\n const [visibility, setVisibility] = useState('public');\n const [sensitive, setSensitive] = 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\n const prefs = store.account.get('preferences') || {};\n\n const oninputTextarea = () => {\n if (!textareaRef.current) return;\n textareaRef.current.dispatchEvent(new Event('input'));\n };\n const focusTextarea = () => {\n setTimeout(() => {\n if (!textareaRef.current) return;\n // status starts with newline, focus on first position\n if (draftStatus?.status?.startsWith?.('\\n')) {\n textareaRef.current.selectionStart = 0;\n textareaRef.current.selectionEnd = 0;\n }\n console.debug('FOCUS textarea');\n textareaRef.current?.focus();\n }, 300);\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 if (allMentions.length > 0) {\n textareaRef.current.value = `${allMentions\n .map((m) => `@${m}`)\n .join(' ')} `;\n oninputTextarea();\n }\n focusTextarea();\n setVisibility(\n visibility === 'public' && prefs['posting:default:visibility']\n ? prefs['posting:default:visibility'].toLowerCase()\n : visibility,\n );\n setLanguage(\n language ||\n prefs['posting:default:language']?.toLowerCase() ||\n DEFAULT_LANG,\n );\n setSensitive(sensitive && !!spoilerText);\n } else if (editStatus) {\n const { visibility, language, sensitive, poll, mediaAttachments } =\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 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 }\n if (draftStatus) {\n const {\n status,\n spoilerText,\n visibility,\n language,\n sensitive,\n poll,\n mediaAttachments,\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 focusTextarea();\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 (sensitive !== null) setSensitive(sensitive);\n if (composablePoll) setPoll(composablePoll);\n if (mediaAttachments) setMediaAttachments(mediaAttachments);\n }\n }, [draftStatus, editStatus, replyToStatus]);\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\", including multiple mentions like \"@username1@username2\"\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 },\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 hasModal && !hasOnlyComposer;\n },\n },\n );\n useCloseWatcher(() => {\n if (!standalone && confirmClose()) {\n onClose();\n }\n }, [standalone, confirmClose, onClose]);\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 poll,\n mediaAttachments,\n },\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 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 const file = item.getAsFile();\n if (file && supportedMimeTypes.includes(file.type)) {\n files.push(file);\n }\n }\n }\n if (files.length > 0 && mediaAttachments.length >= maxMediaAttachments) {\n alert(\n plural(maxMediaAttachments, {\n one: 'You can only attach up to 1 file.',\n other: 'You can only attach up to # files.',\n }),\n );\n return;\n }\n console.log({ files });\n if (files.length > 0) {\n e.preventDefault();\n e.stopPropagation();\n // Auto-cut-off files to avoid exceeding maxMediaAttachments\n const max = maxMediaAttachments - mediaAttachments.length;\n const allowedFiles = files.slice(0, max);\n if (allowedFiles.length <= 0) {\n alert(\n plural(maxMediaAttachments, {\n one: 'You can only attach up to 1 file.',\n other: 'You can only attach up to # files.',\n }),\n );\n return;\n }\n const mediaFiles = allowedFiles.map((file) => ({\n file,\n type: file.type,\n size: file.size,\n url: URL.createObjectURL(file),\n id: null,\n description: null,\n }));\n setMediaAttachments([...mediaAttachments, ...mediaFiles]);\n }\n };\n window.addEventListener('paste', handleItems);\n const handleDragover = (e) => {\n // Prevent default if there's files\n if (e.dataTransfer.items.length > 0) {\n e.preventDefault();\n e.stopPropagation();\n }\n };\n window.addEventListener('dragover', handleDragover);\n window.addEventListener('drop', handleItems);\n return () => {\n window.removeEventListener('paste', handleItems);\n window.removeEventListener('dragover', handleDragover);\n window.removeEventListener('drop', handleItems);\n };\n }, [mediaAttachments]);\n\n const [showMentionPicker, setShowMentionPicker] = useState(false);\n const [showEmoji2Picker, setShowEmoji2Picker] = useState(false);\n const [showGIFPicker, setShowGIFPicker] = useState(false);\n\n const [autoDetectedLanguages, setAutoDetectedLanguages] = useState(null);\n const [topSupportedLanguages, restSupportedLanguages] = useMemo(() => {\n const topLanguages = [];\n const restLanguages = [];\n const { contentTranslationHideLanguages = [] } = states.settings;\n supportedLanguages.forEach((l) => {\n const [code] = l;\n if (\n code === language ||\n code === prevLanguage.current ||\n code === DEFAULT_LANG ||\n contentTranslationHideLanguages.includes(code) ||\n (autoDetectedLanguages?.length && autoDetectedLanguages.includes(code))\n ) {\n topLanguages.push(l);\n } else {\n restLanguages.push(l);\n }\n });\n topLanguages.sort(([codeA, commonA], [codeB, commonB]) => {\n if (codeA === language) return -1;\n if (codeB === language) return 1;\n return commonA.localeCompare(commonB);\n });\n restLanguages.sort(([codeA, commonA], [codeB, commonB]) =>\n commonA.localeCompare(commonB),\n );\n return [topLanguages, restLanguages];\n }, [language, autoDetectedLanguages]);\n\n const replyToStatusMonthsAgo = useMemo(\n () =>\n !!replyToStatus?.createdAt &&\n Math.floor(\n (Date.now() - new Date(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 return (\n
    \n
    \n
    \n {currentAccountInfo?.avatarStatic && (\n // \n \n )}\n {!standalone ? (\n \n {\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 },\n });\n\n if (!newWin) {\n return;\n }\n\n onClose();\n }}\n >\n \n \n \n \n {' '}\n {\n if (confirmClose()) {\n onClose();\n }\n }}\n >\n \n \n \n ) : (\n hasOpener && (\n {\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 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 },\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 \n \n )\n )}\n
    \n {!!replyToStatus && (\n
    \n \n
    \n {replyToStatusMonthsAgo > 0 ? (\n \n Replying to @\n {replyToStatus.account.acct || replyToStatus.account.username}\n ’s post (\n \n {rtf.format(-replyToStatusMonthsAgo, 'month')}\n \n )\n \n ) : (\n \n Replying to @\n {replyToStatus.account.acct || replyToStatus.account.username}\n ’s post\n \n )}\n
    \n
    \n )}\n {!!editStatus && (\n
    \n \n
    \n Editing source post\n
    \n
    \n )}\n {\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 { status, visibility, sensitive, spoilerText } = entries;\n\n // Pre-cleanup\n sensitive = sensitive === 'on'; // checkboxes return \"on\" if checked\n\n // Validation\n /* Let the backend validate this\n if (stringLength(status) > maxCharacters) {\n alert(`Status is too long! Max characters: ${maxCharacters}`);\n return;\n }\n if (\n sensitive &&\n stringLength(status) + stringLength(spoilerText) > maxCharacters\n ) {\n alert(\n `Status and content warning is too long! Max characters: ${maxCharacters}`,\n );\n return;\n }\n */\n if (poll) {\n if (poll.options.length < 2) {\n alert(t`Poll must have at least 2 options`);\n return;\n }\n if (poll.options.some((option) => option === '')) {\n alert(t`Some poll choices are empty`);\n return;\n }\n }\n // TODO: check for URLs and use `charactersReservedPerUrl` to calculate max characters\n\n if (mediaAttachments.length > 0) {\n // If there are media attachments, check if they have no descriptions\n const hasNoDescriptions = mediaAttachments.some(\n (media) => !media.description?.trim?.(),\n );\n if (hasNoDescriptions) {\n const yes = confirm(\n t`Some media have no descriptions. Continue?`,\n );\n if (!yes) return;\n }\n }\n\n // Post-cleanup\n spoilerText = (sensitive && spoilerText) || undefined;\n status = status === '' ? undefined : status;\n\n // states.composerState.minimized = true;\n states.composerState.publishing = true;\n setUIState('loading');\n (async () => {\n try {\n console.log('MEDIA ATTACHMENTS', mediaAttachments);\n if (mediaAttachments.length > 0) {\n // Upload media attachments first\n const mediaPromises = mediaAttachments.map((attachment) => {\n const { file, description, id } = attachment;\n console.log('UPLOADING', attachment);\n if (id) {\n // If already uploaded\n return attachment;\n } else {\n const params = removeNullUndefined({\n file,\n description,\n });\n return masto.v2.media.create(params).then((res) => {\n if (res.id) {\n attachment.id = res.id;\n }\n return res;\n });\n }\n });\n const results = await Promise.allSettled(mediaPromises);\n\n // If any failed, return\n if (\n results.some((result) => {\n return result.status === 'rejected' || !result.value?.id;\n })\n ) {\n states.composerState.publishing = false;\n states.composerState.publishingError = true;\n setUIState('error');\n // Alert all the reasons\n results.forEach((result) => {\n if (result.status === 'rejected') {\n console.error(result);\n alert(result.reason || t`Attachment #${i} failed`);\n }\n });\n return;\n }\n\n console.log({ results, mediaAttachments });\n }\n\n /* NOTE:\n Using snakecase here because masto.js's `isObject` returns false for `params`, ONLY happens when opening in pop-out window. This is maybe due to `window.masto` variable being passed from the parent window. The check that failed is `x.constructor === Object`, so maybe the `Object` in new window is different than parent window's?\n Code: https://github.com/neet/masto.js/blob/dd0d649067b6a2b6e60fbb0a96597c373a255b00/src/serializers/is-object.ts#L2\n\n // TODO: Note above is no longer true in Masto.js v6. Revisit this.\n */\n let params = {\n status,\n // spoilerText,\n spoiler_text: spoilerText,\n language,\n sensitive,\n poll,\n // mediaIds: mediaAttachments.map((attachment) => attachment.id),\n media_ids: mediaAttachments.map(\n (attachment) => attachment.id,\n ),\n };\n if (editStatus && supports('@mastodon/edit-media-attributes')) {\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 } else if (!editStatus) {\n params.visibility = visibility;\n // params.inReplyToId = replyToStatus?.id || undefined;\n params.in_reply_to_id = replyToStatus?.id || undefined;\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 });\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
    \n {\n updateCharCount();\n }}\n />\n \n {\n const sensitive = e.target.checked;\n setSensitive(sensitive);\n if (sensitive) {\n spoilerTextRef.current?.focus();\n } else {\n textareaRef.current?.focus();\n }\n }}\n />\n \n {' '}\n \n \n {\n setVisibility(e.target.value);\n }}\n disabled={uiState === 'loading' || !!editStatus}\n dir=\"auto\"\n >\n \n {(supports('@pleroma/local-visibility-post') ||\n supports('@akkoma/local-visibility-post')) && (\n \n )}\n \n \n \n \n {' '}\n
    \n {\n updateCharCount();\n }}\n maxCharacters={maxCharacters}\n performSearch={(params) => {\n const { type, q, limit } = params;\n if (type === 'accounts') {\n return masto.v1.accounts.search.list({\n q,\n limit,\n resolve: false,\n });\n }\n return masto.v2.search.fetch(params);\n }}\n onTrigger={(action) => {\n if (action?.name === 'custom-emojis') {\n setShowEmoji2Picker({\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 }\n }}\n />\n {mediaAttachments?.length > 0 && (\n
    \n {mediaAttachments.map((attachment, i) => {\n const { id, file } = attachment;\n const fileID = file?.size + file?.type + file?.name;\n return (\n {\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 \n
    \n )}\n {!!poll && (\n {\n if (poll) {\n const newPoll = { ...poll };\n setPoll(newPoll);\n } else {\n setPoll(null);\n }\n }}\n />\n )}\n \n \n \n {/* If maxOptions is not defined or defined and is greater than 1, show poll button */}\n {maxOptions == null ||\n (maxOptions > 1 && (\n <>\n {\n setPoll({\n options: ['', ''],\n expiresIn: 24 * 60 * 60, // 1 day\n multiple: false,\n });\n }}\n >\n \n \n \n ))}\n {/* {\n setShowMentionPicker(true);\n }}\n >\n \n */}\n {\n setShowEmoji2Picker(true);\n }}\n >\n \n \n {!!states.settings.composerGIFPicker && (\n = maxMediaAttachments ||\n !!poll\n }\n onClick={() => {\n setShowGIFPicker(true);\n }}\n >\n GIF\n \n )}\n \n
    \n {uiState === 'loading' ? (\n \n ) : (\n
    \n \n
    \n {showMentionPicker && (\n {\n if (e.target === e.currentTarget) {\n setShowMentionPicker(false);\n }\n }}\n >\n {\n setShowMentionPicker(false);\n }}\n defaultSearchTerm={showMentionPicker?.defaultSearchTerm}\n onSelect={(socialAddress) => {\n const textarea = textareaRef.current;\n if (!textarea) return;\n const { selectionStart, selectionEnd } = textarea;\n const text = textarea.value;\n const textBeforeMention = text.slice(0, selectionStart);\n const spaceBeforeMention = textBeforeMention\n ? /[\\s\\t\\n\\r]$/.test(textBeforeMention)\n ? ''\n : ' '\n : '';\n const textAfterMention = text.slice(selectionEnd);\n const spaceAfterMention = /^[\\s\\t\\n\\r]/.test(textAfterMention)\n ? ''\n : ' ';\n const newText =\n textBeforeMention +\n spaceBeforeMention +\n '@' +\n socialAddress +\n spaceAfterMention +\n textAfterMention;\n textarea.value = newText;\n textarea.selectionStart = textarea.selectionEnd =\n selectionEnd +\n 1 +\n socialAddress.length +\n spaceAfterMention.length;\n textarea.focus();\n textarea.dispatchEvent(new Event('input'));\n }}\n />\n \n )}\n {showEmoji2Picker && (\n {\n if (e.target === e.currentTarget) {\n setShowEmoji2Picker(false);\n }\n }}\n >\n {\n setShowEmoji2Picker(false);\n }}\n defaultSearchTerm={showEmoji2Picker?.defaultSearchTerm}\n onSelect={(emojiShortcode) => {\n const textarea = textareaRef.current;\n if (!textarea) return;\n const { selectionStart, selectionEnd } = textarea;\n const text = textarea.value;\n const textBeforeEmoji = text.slice(0, selectionStart);\n const spaceBeforeEmoji = textBeforeEmoji\n ? /[\\s\\t\\n\\r]$/.test(textBeforeEmoji)\n ? ''\n : ' '\n : '';\n const textAfterEmoji = text.slice(selectionEnd);\n const spaceAfterEmoji = /^[\\s\\t\\n\\r]/.test(textAfterEmoji)\n ? ''\n : ' ';\n const newText =\n textBeforeEmoji +\n spaceBeforeEmoji +\n emojiShortcode +\n spaceAfterEmoji +\n textAfterEmoji;\n textarea.value = newText;\n textarea.selectionStart = textarea.selectionEnd =\n selectionEnd + emojiShortcode.length + spaceAfterEmoji.length;\n textarea.focus();\n textarea.dispatchEvent(new Event('input'));\n }}\n />\n \n )}\n {showGIFPicker && (\n {\n if (e.target === e.currentTarget) {\n setShowGIFPicker(false);\n }\n }}\n >\n setShowGIFPicker(false)}\n onSelect={({ url, type, alt_text }) => {\n console.log('GIF URL', url);\n if (mediaAttachments.length >= maxMediaAttachments) {\n alert(\n plural(maxMediaAttachments, {\n one: 'You can only attach up to 1 file.',\n other: 'You can only attach up to # files.',\n }),\n );\n return;\n }\n // Download the GIF and insert it as media attachment\n (async () => {\n let theToast;\n try {\n theToast = showToast({\n text: t`Downloading GIF…`,\n duration: -1,\n });\n const blob = await fetch(url, {\n referrerPolicy: 'no-referrer',\n }).then((res) => res.blob());\n const file = new File(\n [blob],\n type === 'video/mp4' ? 'video.mp4' : 'image.gif',\n {\n type,\n },\n );\n const newMediaAttachments = [\n ...mediaAttachments,\n {\n file,\n type,\n size: file.size,\n id: null,\n description: alt_text || '',\n },\n ];\n setMediaAttachments(newMediaAttachments);\n theToast?.hideToast?.();\n } catch (err) {\n console.error(err);\n theToast?.hideToast?.();\n showToast(t`Failed to download GIF`);\n }\n })();\n }}\n />\n \n )}\n
    \n );\n}\n\nfunction autoResizeTextarea(textarea) {\n if (!textarea) return;\n const { value, offsetHeight, scrollHeight, clientHeight } = textarea;\n if (offsetHeight < window.innerHeight) {\n // NOTE: This check is needed because the offsetHeight return 50000 (really large number) on first render\n // No idea why it does that, will re-investigate in far future\n const offset = offsetHeight - clientHeight;\n const height = value ? scrollHeight + offset + 'px' : null;\n textarea.style.height = height;\n }\n}\n\nasync function _getCustomEmojis(instance, masto) {\n const emojis = await masto.v1.customEmojis.list();\n const visibleEmojis = emojis.filter((e) => e.visibleInPicker);\n const searcher = new Fuse(visibleEmojis, {\n keys: ['shortcode'],\n findAllMatches: true,\n });\n return [visibleEmojis, searcher];\n}\nconst getCustomEmojis = pmem(_getCustomEmojis, {\n // Limit by time to reduce memory usage\n // Cached by instance\n matchesArg: (cacheKeyArg, keyArg) => cacheKeyArg.instance === keyArg.instance,\n maxAge: 30 * 60 * 1000, // 30 minutes\n});\n\nconst detectLangs = async (text) => {\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 { masto, instance } = api();\n const [text, setText] = useState(ref.current?.value || '');\n const {\n maxCharacters,\n performSearch = () => {},\n onTrigger = () => {},\n ...textareaProps\n } = props;\n // const snapStates = useSnapshot(states);\n // const charCount = snapStates.composerCharacterCount;\n\n // const customEmojis = useRef();\n const searcherRef = useRef();\n useEffect(() => {\n getCustomEmojis(instance, masto)\n .then((r) => {\n const [emojis, searcher] = r;\n searcherRef.current = searcher;\n })\n .catch((e) => {\n console.error(e);\n });\n }, []);\n\n const textExpanderRef = useRef();\n const textExpanderTextRef = useRef('');\n useEffect(() => {\n let handleChange, handleValue, handleCommited;\n if (textExpanderRef.current) {\n handleChange = (e) => {\n // console.log('text-expander-change', 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 emojis = customEmojis.current.filter((emoji) =>\n // emoji.shortcode.startsWith(text),\n // );\n // const emojis = filterShortcodes(customEmojis.current, text);\n const results = searcherRef.current?.search(text, {\n limit: 5,\n });\n let html = '';\n results.forEach(({ item: emoji }) => {\n const { shortcode, url } = emoji;\n html += `\n
  • \n \"\" \n ${encodeHTML(shortcode)}\n
  • `;\n });\n html += `
  • ${t`More…`}
  • `;\n // console.log({ emojis, html });\n menu.innerHTML = html;\n provide(\n Promise.resolve({\n matched: results.length > 0,\n fragment: menu,\n }),\n );\n return;\n }\n\n const type = {\n '@': 'accounts',\n '#': 'hashtags',\n }[key];\n provide(\n new Promise((resolve) => {\n const searchResults = performSearch({\n type,\n q: text,\n limit: 5,\n });\n searchResults.then((value) => {\n if (text !== textExpanderTextRef.current) {\n return;\n }\n console.log({ value, type, v: value[type] });\n const results = value[type] || value;\n console.log('RESULTS', value, results);\n let html = '';\n results.forEach((result) => {\n const {\n name,\n avatarStatic,\n displayName,\n username,\n acct,\n emojis,\n history,\n } = result;\n const displayNameWithEmoji = emojifyText(displayName, emojis);\n // const item = menuItem.cloneNode();\n if (acct) {\n html += `\n
  • \n \n \"\"\n \n \n ${displayNameWithEmoji || username}\n
    @${encodeHTML(\n acct,\n )}\n
    \n
  • \n `;\n } else {\n const total = history?.reduce?.(\n (acc, cur) => acc + +cur.uses,\n 0,\n );\n html += `\n
  • \n #${encodeHTML(name)}\n ${\n total\n ? `${shortenNumber(total)}`\n : ''\n }\n
  • \n `;\n }\n });\n if (type === 'accounts') {\n html += `
  • ${t`More…`}
  • `;\n }\n menu.innerHTML = html;\n console.log('MENU', results, menu);\n resolve({\n matched: results.length > 0,\n fragment: menu,\n });\n });\n }),\n );\n };\n\n textExpanderRef.current.addEventListener(\n 'text-expander-change',\n handleChange,\n );\n\n handleValue = (e) => {\n const { key, item } = e.detail;\n const { value, more } = item.dataset;\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 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 textExpanderRef.current.addEventListener(\n 'text-expander-value',\n handleValue,\n );\n\n handleCommited = (e) => {\n const { input } = e.detail;\n setText(input.value);\n // fire input event\n if (ref.current) {\n const event = new Event('input', { bubbles: true });\n ref.current.dispatchEvent(event);\n }\n };\n\n textExpanderRef.current.addEventListener(\n 'text-expander-committed',\n handleCommited,\n );\n }\n\n return () => {\n if (textExpanderRef.current) {\n textExpanderRef.current.removeEventListener(\n 'text-expander-change',\n handleChange,\n );\n textExpanderRef.current.removeEventListener(\n 'text-expander-value',\n handleValue,\n );\n textExpanderRef.current.removeEventListener(\n 'text-expander-committed',\n handleCommited,\n );\n }\n };\n }, []);\n\n useEffect(() => {\n // Resize observer for textarea\n const textarea = ref.current;\n if (!textarea) return;\n const resizeObserver = new ResizeObserver(() => {\n // Get height of textarea, set height to textExpander\n if (textExpanderRef.current) {\n const { height } = textarea.getBoundingClientRect();\n textExpanderRef.current.style.height = height + 'px';\n }\n });\n resizeObserver.observe(textarea);\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 \n {\n // Get line before cursor position after pressing 'Enter'\n const { key, target } = e;\n if (key === 'Enter' && !(e.ctrlKey || e.metaKey)) {\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 // Replace zero-width space\n const text = target.value.replace(/\\u200b/g, '');\n setText(text);\n autoResizeTextarea(target);\n props.onInput?.(e);\n throttleHighlightText(text);\n debouncedAutoDetectLanguage();\n }}\n style={{\n width: '100%',\n height: '4em',\n // '--text-weight': (1 + charCount / 140).toFixed(1) || 1,\n }}\n onScroll={(e) => {\n if (composeHighlightRef.current) {\n const { scrollTop } = e.target;\n composeHighlightRef.current.scrollTop = scrollTop;\n }\n }}\n />\n \n \n );\n});\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 \n );\n}\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 onDescriptionChange = () => {},\n onRemove = () => {},\n}) {\n const { i18n } = useLingui();\n const [uiState, setUIState] = useState('default');\n const supportsEdit = supports('@mastodon/edit-media-attributes');\n const { type, id, file } = attachment;\n const url = useMemo(\n () => (file ? URL.createObjectURL(file) : attachment.url),\n [file, attachment.url],\n );\n console.log({ attachment });\n\n const checkMaxError = !!file?.size;\n const configuration = checkMaxError ? getCurrentInstanceConfiguration() : {};\n const {\n mediaAttachments: {\n imageSizeLimit,\n imageMatrixLimit,\n videoSizeLimit,\n videoMatrixLimit,\n videoFrameRateLimit,\n } = {},\n } = configuration || {};\n\n const [maxError, setMaxError] = useState(() => {\n if (!checkMaxError) return null;\n if (\n type.startsWith('image') &&\n imageSizeLimit &&\n file.size > imageSizeLimit\n ) {\n return {\n type: 'imageSizeLimit',\n details: {\n imageSize: file.size,\n imageSizeLimit,\n },\n };\n } else if (\n type.startsWith('video') &&\n videoSizeLimit &&\n file.size > videoSizeLimit\n ) {\n return {\n type: 'videoSizeLimit',\n details: {\n videoSize: file.size,\n videoSizeLimit,\n },\n };\n }\n return null;\n });\n\n const [imageMatrix, setImageMatrix] = useState({});\n useEffect(() => {\n if (!checkMaxError || !imageMatrixLimit) return;\n if (imageMatrix?.matrix > imageMatrixLimit) {\n setMaxError({\n type: 'imageMatrixLimit',\n details: {\n imageMatrix: imageMatrix?.matrix,\n imageMatrixLimit,\n width: imageMatrix?.width,\n height: imageMatrix?.height,\n },\n });\n }\n }, [imageMatrix, imageMatrixLimit, checkMaxError]);\n\n const [videoMatrix, setVideoMatrix] = useState({});\n useEffect(() => {\n if (!checkMaxError || !videoMatrixLimit) return;\n if (videoMatrix?.matrix > videoMatrixLimit) {\n setMaxError({\n type: 'videoMatrixLimit',\n details: {\n videoMatrix: videoMatrix?.matrix,\n videoMatrixLimit,\n width: videoMatrix?.width,\n height: videoMatrix?.height,\n },\n });\n }\n }, [videoMatrix, videoMatrixLimit, checkMaxError]);\n\n const [description, setDescription] = useState(attachment.description);\n const [suffixType, subtype] = type.split('/');\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
    \n \n Uploaded\n \n

    \n {attachment.description || No description}\n

    \n
    \n ) : (\n {\n const { value } = e.target;\n setDescription(value);\n // debouncedOnDescriptionChange(value);\n }}\n >\n )}\n \n );\n\n const toastRef = useRef(null);\n useEffect(() => {\n return () => {\n toastRef.current?.hideToast?.();\n };\n }, []);\n\n const maxErrorToast = useRef(null);\n\n const maxErrorText = (err) => {\n const { type, details } = err;\n switch (type) {\n case 'imageSizeLimit': {\n const { imageSize, imageSizeLimit } = details;\n return t`File size too large. Uploading might encounter issues. Try reduce the file size from ${prettyBytes(\n imageSize,\n )} to ${prettyBytes(imageSizeLimit)} or lower.`;\n }\n case 'imageMatrixLimit': {\n const { imageMatrix, imageMatrixLimit, width, height } = details;\n const { newWidth, newHeight } = scaleDimension(\n imageMatrix,\n imageMatrixLimit,\n width,\n height,\n );\n return t`Dimension too large. Uploading might encounter issues. Try reduce dimension from ${i18n.number(\n width,\n )}×${i18n.number(height)}px to ${i18n.number(newWidth)}×${i18n.number(\n newHeight,\n )}px.`;\n }\n case 'videoSizeLimit': {\n const { videoSize, videoSizeLimit } = details;\n return t`File size too large. Uploading might encounter issues. Try reduce the file size from ${prettyBytes(\n videoSize,\n )} to ${prettyBytes(videoSizeLimit)} or lower.`;\n }\n case 'videoMatrixLimit': {\n const { videoMatrix, videoMatrixLimit, width, height } = details;\n const { newWidth, newHeight } = scaleDimension(\n videoMatrix,\n videoMatrixLimit,\n width,\n height,\n );\n return t`Dimension too large. Uploading might encounter issues. Try reduce dimension from ${i18n.number(\n width,\n )}×${i18n.number(height)}px to ${i18n.number(newWidth)}×${i18n.number(\n newHeight,\n )}px.`;\n }\n case 'videoFrameRateLimit': {\n // Not possible to detect this on client-side for now\n return t`Frame rate too high. Uploading might encounter issues.`;\n }\n }\n };\n\n return (\n <>\n
    \n {\n setShowModal(true);\n }}\n >\n {suffixType === 'image' ? (\n {\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 {\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
    \n {descTextarea}\n
    \n \n \n \n {!!maxError && (\n {\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 \n \n )}\n
    \n \n {showModal && (\n {\n setShowModal(false);\n }}\n >\n
    \n {\n setShowModal(false);\n }}\n >\n \n \n
    \n

    \n {\n {\n image: t`Edit image description`,\n video: t`Edit video description`,\n audio: t`Edit audio description`,\n }[suffixType]\n }\n

    \n
    \n
    \n
    \n {suffixType === 'image' ? (\n \"\"\n ) : suffixType === 'video' || suffixType === 'gifv' ? (\n
    \n
    \n {descTextarea}\n
    \n {suffixType === 'image' &&\n /^(png|jpe?g|gif|webp)$/i.test(subtype) &&\n !!states.settings.mediaAltGenerator &&\n !!IMG_ALT_API_URL && (\n \n \n \n }\n >\n {\n setUIState('loading');\n toastRef.current = showToast({\n text: t`Generating description. Please wait…`,\n duration: -1,\n });\n // POST with multipart\n (async function () {\n try {\n const body = new FormData();\n body.append('image', file);\n const response = await fetch(IMG_ALT_API_URL, {\n method: 'POST',\n body,\n }).then((r) => r.json());\n if (response.error) {\n throw new Error(response.error);\n }\n setDescription(response.description);\n } catch (e) {\n console.error(e);\n showToast(\n e.message\n ? t`Failed to generate description: ${e.message}`\n : t`Failed to generate description`,\n );\n } finally {\n setUIState('default');\n toastRef.current?.hideToast?.();\n }\n })();\n }}\n >\n \n {lang && lang !== 'en' ? (\n \n Generate description…\n
    \n (English)\n
    \n ) : (\n \n Generate description…\n \n )}\n \n {!!lang && lang !== 'en' && (\n {\n setUIState('loading');\n toastRef.current = showToast({\n text: t`Generating description. Please wait…`,\n duration: -1,\n });\n // POST with multipart\n (async function () {\n try {\n const body = new FormData();\n body.append('image', file);\n const params = `?lang=${lang}`;\n const response = await fetch(\n IMG_ALT_API_URL + params,\n {\n method: 'POST',\n body,\n },\n ).then((r) => r.json());\n if (response.error) {\n throw new Error(response.error);\n }\n setDescription(response.description);\n } catch (e) {\n console.error(e);\n showToast(\n t`Failed to generate description${\n e?.message ? `: ${e.message}` : ''\n }`,\n );\n } finally {\n setUIState('default');\n toastRef.current?.hideToast?.();\n }\n })();\n }}\n >\n \n \n Generate description…\n
    \n \n ({localeCode2Text(lang)}){' '}\n \n — experimental\n \n \n
    \n \n )}\n \n )}\n {\n setShowModal(false);\n }}\n disabled={uiState === 'loading'}\n >\n Done\n \n
    \n
    \n
    \n
    \n \n )}\n \n );\n}\n\nfunction Poll({\n lang,\n poll,\n disabled,\n onInput = () => {},\n maxOptions,\n maxExpiration,\n minExpiration,\n maxCharactersPerOption,\n}) {\n const { _ } = useLingui();\n const { options, expiresIn, multiple } = poll;\n\n return (\n
    \n
    \n {options.map((option, i) => (\n
    \n {\n const { value } = e.target;\n options[i] = value;\n onInput(poll);\n }}\n />\n {\n options.splice(i, 1);\n onInput(poll);\n }}\n >\n \n \n
    \n ))}\n
    \n
    \n = maxOptions}\n onClick={() => {\n options.push('');\n onInput(poll);\n }}\n >\n +\n {' '}\n \n \n
    \n
    \n {\n onInput(null);\n }}\n >\n Remove poll\n \n
    \n
    \n );\n}\n\nfunction filterShortcodes(emojis, searchTerm) {\n searchTerm = searchTerm.toLowerCase();\n\n // Return an array of shortcodes that start with or contain the search term, sorted by relevance and limited to the first 5\n return emojis\n .sort((a, b) => {\n let aLower = a.shortcode.toLowerCase();\n let bLower = b.shortcode.toLowerCase();\n\n let aStartsWith = aLower.startsWith(searchTerm);\n let bStartsWith = bLower.startsWith(searchTerm);\n let aContains = aLower.includes(searchTerm);\n let bContains = bLower.includes(searchTerm);\n let bothStartWith = aStartsWith && bStartsWith;\n let bothContain = aContains && bContains;\n\n return bothStartWith\n ? a.length - b.length\n : aStartsWith\n ? -1\n : bStartsWith\n ? 1\n : bothContain\n ? a.length - b.length\n : aContains\n ? -1\n : bContains\n ? 1\n : 0;\n })\n .slice(0, 5);\n}\n\nfunction encodeHTML(str) {\n return str.replace(/[&<>\"']/g, function (char) {\n return '&#' + char.charCodeAt(0) + ';';\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\nfunction MentionModal({\n onClose = () => {},\n onSelect = () => {},\n defaultSearchTerm,\n}) {\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 },\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 },\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 },\n );\n\n return (\n
    \n {!!onClose && (\n \n )}\n
    \n {\n e.preventDefault();\n debouncedLoadAccounts.flush?.();\n // const searchTerm = inputRef.current.value;\n // debouncedLoadAccounts(searchTerm);\n }}\n >\n {\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 defaultValue={defaultSearchTerm || ''}\n />\n \n
    \n
    \n {accounts?.length > 0 ? (\n \n {accounts.map((account, i) => {\n const relationship = relationshipsMap[account.id];\n return (\n \n \n {\n selectAccount(account);\n }}\n >\n \n \n \n );\n })}\n \n ) : uiState === 'loading' ? (\n
    \n \n
    \n ) : uiState === 'error' ? (\n
    \n

    \n Error loading accounts\n

    \n
    \n ) : null}\n
    \n
    \n );\n}\n\nfunction CustomEmojisModal({\n masto,\n instance,\n onClose = () => {},\n onSelect = () => {},\n defaultSearchTerm,\n}) {\n const [uiState, setUIState] = useState('default');\n const customEmojisList = useRef([]);\n const [customEmojis, setCustomEmojis] = useState([]);\n const recentlyUsedCustomEmojis = useMemo(\n () => store.account.get('recentlyUsedCustomEmojis') || [],\n );\n const searcherRef = useRef();\n useEffect(() => {\n setUIState('loading');\n (async () => {\n try {\n const [emojis, searcher] = await getCustomEmojis(instance, masto);\n console.log('emojis', emojis);\n searcherRef.current = searcher;\n setCustomEmojis(emojis);\n setUIState('default');\n } catch (e) {\n setUIState('error');\n console.error(e);\n }\n })();\n }, []);\n\n const customEmojisCatList = useMemo(() => {\n // Group emojis by category\n const emojisCat = {\n '--recent--': recentlyUsedCustomEmojis.filter((emoji) =>\n customEmojis.find((e) => e.shortcode === emoji.shortcode),\n ),\n };\n const othersCat = [];\n customEmojis.forEach((emoji) => {\n customEmojisList.current?.push?.(emoji);\n if (!emoji.category) {\n othersCat.push(emoji);\n return;\n }\n if (!emojisCat[emoji.category]) {\n emojisCat[emoji.category] = [];\n }\n emojisCat[emoji.category].push(emoji);\n });\n if (othersCat.length) {\n emojisCat['--others--'] = othersCat;\n }\n return emojisCat;\n }, [customEmojis]);\n\n const scrollableRef = useRef();\n const [matches, setMatches] = useState(null);\n const 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 return (\n
    \n {!!onClose && (\n \n )}\n
    \n
    \n \n Custom emojis\n {' '}\n {uiState === 'loading' ? (\n \n ) : (\n • {instance}\n )}\n
    \n {\n e.preventDefault();\n const emoji = matches[0];\n if (emoji) {\n onSelectEmoji(`:${emoji.shortcode}:`);\n }\n }}\n >\n \n \n
    \n
    \n {matches !== null ? (\n
      \n {matches.map((emoji) => (\n
    • \n {\n onSelectEmoji(`:${emoji.shortcode}:`);\n }}\n showCode\n />\n
    • \n ))}\n
    \n ) : (\n
    \n {uiState === 'error' && (\n
    \n

    \n Error loading custom emojis\n

    \n
    \n )}\n {uiState === 'default' &&\n Object.entries(customEmojisCatList).map(\n ([category, emojis]) =>\n !!emojis?.length && (\n
    \n
    \n {{\n '--recent--': t`Recently used`,\n '--others--': t`Others`,\n }[category] || category}\n
    \n \n
    \n ),\n )}\n
    \n )}\n
    \n
    \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
    \n {emojis.slice(0, max).map((emoji) => (\n {\n onSelect(`:${emoji.shortcode}:`);\n }}\n />\n ))}\n {showMore && (\n setMax(max + CUSTOM_EMOJIS_COUNT)}\n >\n {i18n.number(emojis.length - max)} more…\n \n )}\n
    \n );\n});\n\nconst CustomEmojiButton = memo(({ emoji, onClick, showCode }) => {\n const addEdges = (e) => {\n // Add edge-left or edge-right class based on self position relative to scrollable parent\n // If near left edge, add edge-left, if near right edge, add edge-right\n const buffer = 88;\n const parent = e.currentTarget.closest('main');\n if (parent) {\n const rect = parent.getBoundingClientRect();\n const selfRect = e.currentTarget.getBoundingClientRect();\n const targetClassList = e.currentTarget.classList;\n if (selfRect.left < rect.left + buffer) {\n targetClassList.add('edge-left');\n targetClassList.remove('edge-right');\n } else if (selfRect.right > rect.right - buffer) {\n targetClassList.add('edge-right');\n targetClassList.remove('edge-left');\n } else {\n targetClassList.remove('edge-left', 'edge-right');\n }\n }\n };\n\n return (\n \n \n {!!emoji.staticUrl && (\n \n )}\n \n \n {showCode && (\n <>\n {' '}\n {emoji.shortcode}\n \n )}\n \n );\n});\n\nconst GIFS_PER_PAGE = 20;\nfunction GIFPickerModal({ onClose = () => {}, onSelect = () => {} }) {\n const { i18n } = 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
    \n {!!onClose && (\n \n )}\n
    \n {\n e.preventDefault();\n fetchGIFs({ offset: 0 });\n }}\n >\n \n \n \n
    \n
    \n {uiState === 'default' && (\n
    \n

    \n Type to search GIFs\n

    \n
    \n )}\n {uiState === 'loading' && !results?.data?.length && (\n
    \n \n
    \n )}\n {results?.data?.length > 0 ? (\n <>\n
      \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
    • \n {\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 \n \n {strippedWebP && (\n \n )}\n {\n e.target.style.backgroundColor = 'transparent';\n }}\n />\n \n
      {alt_text || title}
      \n \n \n
    • \n );\n })}\n
    \n

    \n {results.pagination?.offset > 0 && (\n {\n fetchGIFs({\n offset: results.pagination?.offset - GIFS_PER_PAGE,\n });\n }}\n >\n \n \n Previous\n \n \n )}\n \n {results.pagination?.offset + results.pagination?.count <\n results.pagination?.total_count && (\n {\n fetchGIFs({\n offset: results.pagination?.offset + GIFS_PER_PAGE,\n });\n }}\n >\n \n Next\n {' '}\n \n \n )}\n

    \n \n ) : (\n uiState === 'results' && (\n
    \n

    No results

    \n
    \n )\n )}\n {uiState === 'error' && (\n
    \n

    \n Error loading GIFs\n

    \n
    \n )}\n
    \n
    \n );\n}\n\nexport default Compose;\n"],"file":"assets/compose-hDlR2o-x.js"} \ No newline at end of file diff --git a/assets/compose-nqnue7DX.js b/assets/compose-nqnue7DX.js deleted file mode 100644 index db1f8b6..0000000 --- a/assets/compose-nqnue7DX.js +++ /dev/null @@ -1,26 +0,0 @@ -var Ct=s=>{throw TypeError(s)};var rt=(s,e,n)=>e.has(s)||Ct("Cannot "+n);var T=(s,e,n)=>(rt(s,e,"read from private field"),n?n.call(s):e.get(s)),re=(s,e,n)=>e.has(s)?Ct("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(s):e.set(s,n),de=(s,e,n,o)=>(rt(s,e,"write to private field"),o?o.call(s,n):e.set(s,n),n),G=(s,e,n)=>(rt(s,e,"access private method"),n);import{B as an,Z as on,a as _e,a7 as rn,w as zt,u as ln,i as Ot,b as cn,I as K,y as Lt,h as Ht,a8 as un,M as Ve,s as ke,a3 as dn,$ as hn,n as pn,K as mn,W as Qe,c as gn,d as St,l as fn,x as vn}from"./fuse-sLNor9NY.js";import{s as le,a as vt,p as H,F as U,f as bn,am as Nt,d as ze,_ as ee,m as yn,an as xn,q as Re,c as t,k as Ce,b as wn,L as et,i as kn,D as En,u as Fn,j as At,x as Wt}from"./useTitle-TOnOofzE.js";import{e as Cn}from"./tinyld-light-PxOyhYWY.js";import"./index-gNUvm9kb.js";class zn{constructor(e,n,{tabInsertsSuggestions:o,defaultFirstOption:r}={}){this.input=e,this.list=n,this.tabInsertsSuggestions=o??!0,this.defaultFirstOption=r??!1,this.isComposing=!1,n.id||(n.id=`combobox-${Math.random().toString().slice(2,6)}`),this.ctrlBindings=!!navigator.userAgent.match(/Macintosh/),this.keyboardEventHandler=p=>Ln(p,this),this.compositionEventHandler=p=>An(p,this),this.inputHandler=this.clearSelection.bind(this),e.setAttribute("role","combobox"),e.setAttribute("aria-controls",n.id),e.setAttribute("aria-expanded","false"),e.setAttribute("aria-autocomplete","list"),e.setAttribute("aria-haspopup","listbox")}destroy(){this.clearSelection(),this.stop(),this.input.removeAttribute("role"),this.input.removeAttribute("aria-controls"),this.input.removeAttribute("aria-expanded"),this.input.removeAttribute("aria-autocomplete"),this.input.removeAttribute("aria-haspopup")}start(){this.input.setAttribute("aria-expanded","true"),this.input.addEventListener("compositionstart",this.compositionEventHandler),this.input.addEventListener("compositionend",this.compositionEventHandler),this.input.addEventListener("input",this.inputHandler),this.input.addEventListener("keydown",this.keyboardEventHandler),this.list.addEventListener("click",It),this.indicateDefaultOption()}stop(){this.clearSelection(),this.input.setAttribute("aria-expanded","false"),this.input.removeEventListener("compositionstart",this.compositionEventHandler),this.input.removeEventListener("compositionend",this.compositionEventHandler),this.input.removeEventListener("input",this.inputHandler),this.input.removeEventListener("keydown",this.keyboardEventHandler),this.list.removeEventListener("click",It)}indicateDefaultOption(){var e;this.defaultFirstOption&&((e=Array.from(this.list.querySelectorAll('[role="option"]:not([aria-disabled="true"])')).filter(lt)[0])===null||e===void 0||e.setAttribute("data-combobox-option-default","true"))}navigate(e=1){const n=Array.from(this.list.querySelectorAll('[aria-selected="true"]')).filter(lt)[0],o=Array.from(this.list.querySelectorAll('[role="option"]')).filter(lt),r=o.indexOf(n);if(r===o.length-1&&e===1||r===0&&e===-1){this.clearSelection(),this.input.focus();return}let p=e===1?0:o.length-1;if(n&&r>=0){const v=r+e;v>=0&&v0||s.offsetHeight>0)}function An(s,e){e.isComposing=s.type==="compositionstart",document.getElementById(e.input.getAttribute("aria-controls")||"")&&e.clearSelection()}function In(s,e){$n(s,e)||(s.scrollTop=e.offsetTop)}function $n(s,e){const n=s.scrollTop,o=n+s.clientHeight,r=e.offsetTop,p=r+e.clientHeight;return r>=n&&p<=o}const Mn=/\s|\(|\[/;function Bn(s,e,n,{multiWord:o,lookBackIndex:r,lastMatchPosition:p}={multiWord:!1,lookBackIndex:0,lastMatchPosition:null}){let u=s.lastIndexOf(e,n-1);if(u===-1||u=u+e.length+1||s.lastIndexOf(` -`,n-1)>u||s.lastIndexOf(".",n-1)>u)return}else if(s.lastIndexOf(" ",n-1)>u)return;const v=s[u-1];return v&&!Mn.test(v)?void 0:{text:s.substring(u+e.length,n),position:u+e.length}}class Tn extends HTMLElement{}class _n extends Event{constructor(){super("update")}}const ct=new WeakMap;var De,je,Ee,fe,Y,Be,Le,Se,ht,Ae,Ge,Ye,Ze,Pe,Fe;const yt=class yt extends Tn{constructor(n){super();re(this,Y);re(this,De,new MutationObserver(()=>G(this,Y,Ye).call(this)));re(this,je,new ResizeObserver(()=>G(this,Y,Ge).call(this)));re(this,Ee);re(this,fe);re(this,Le,0);re(this,Se,0);re(this,Ae,!1);re(this,Pe,()=>G(this,Y,Ze).call(this));re(this,Fe,n=>{G(this,Y,Be).call(this,o=>{(n.target===document||n.target===window||n.target instanceof Node&&n.target.contains(o))&&G(this,Y,Ge).call(this)})});de(this,Ee,new WeakRef(n)),de(this,fe,document.createElement("div")),T(this,fe).style.position="absolute",T(this,fe).style.pointerEvents="none",n.after(T(this,fe)),T(this,fe).appendChild(this)}static for(n){const o=ct.get(n)??new yt(n);return ct.set(n,o),o}forceUpdate(){G(this,Y,Ye).call(this),G(this,Y,Ze).call(this)}connectedCallback(){const n=T(this,Ee).deref();if(!n)return this.remove();this.style.pointerEvents="none",this.style.userSelect="none",this.style.overflow="hidden",this.style.display="block",this.style.visibility="hidden",n instanceof HTMLTextAreaElement?(this.style.whiteSpace="pre-wrap",this.style.wordWrap="break-word"):(this.style.whiteSpace="nowrap",this.style.display="table-cell",this.style.verticalAlign="middle"),this.setAttribute("aria-hidden","true"),G(this,Y,Ye).call(this),G(this,Y,Ze).call(this),T(this,De).observe(n,{attributeFilter:["style","dir"]}),T(this,je).observe(n),document.addEventListener("scroll",T(this,Fe),{capture:!0}),window.addEventListener("resize",T(this,Fe),{capture:!0}),n.addEventListener("input",T(this,Pe),{capture:!0})}disconnectedCallback(){T(this,fe).remove(),T(this,De).disconnect(),T(this,je).disconnect(),document.removeEventListener("scroll",T(this,Fe),{capture:!0}),window.removeEventListener("resize",T(this,Fe),{capture:!0});const n=T(this,Ee).deref();n&&(n.removeEventListener("input",T(this,Pe),{capture:!0}),ct.delete(n))}};De=new WeakMap,je=new WeakMap,Ee=new WeakMap,fe=new WeakMap,Y=new WeakSet,Be=function(n){const o=T(this,Ee).deref();return o?n(o):this.remove()},Le=new WeakMap,Se=new WeakMap,ht=function(){G(this,Y,Be).call(this,n=>{const o=window.getComputedStyle(n);this.style.height=o.height,this.style.width=o.width,n.clientHeight!==this.clientHeight&&(this.style.height=`calc(${o.height} + ${n.clientHeight-this.clientHeight}px)`),n.clientWidth!==this.clientWidth&&(this.style.width=`calc(${o.width} + ${n.clientWidth-this.clientWidth}px)`);const r=n.getBoundingClientRect(),p=this.getBoundingClientRect();de(this,Le,T(this,Le)+r.left-p.left),de(this,Se,T(this,Se)+r.top-p.top),this.style.transform=`translate(${T(this,Le)}px, ${T(this,Se)}px)`,this.scrollTop=n.scrollTop,this.scrollLeft=n.scrollLeft,this.dispatchEvent(new _n)})},Ae=new WeakMap,Ge=function(){T(this,Ae)||(de(this,Ae,!0),requestAnimationFrame(()=>{G(this,Y,ht).call(this),de(this,Ae,!1)}))},Ye=function(){G(this,Y,Be).call(this,n=>{const o=window.getComputedStyle(n);for(const r of Rn)this.style[r]=o[r];G(this,Y,Ge).call(this)})},Ze=function(){G(this,Y,Be).call(this,n=>{this.textContent=n.value,G(this,Y,ht).call(this)})},Pe=new WeakMap,Fe=new WeakMap;let Je=yt;const Rn=["direction","writingMode","unicodeBidi","textOrientation","boxSizing","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","borderStyle","paddingTop","paddingRight","paddingBottom","paddingLeft","fontStyle","fontVariant","fontWeight","fontStretch","fontSize","fontSizeAdjust","lineHeight","fontFamily","textAlign","textTransform","textIndent","textDecoration","letterSpacing","wordSpacing","tabSize","MozTabSize"];try{customElements.define("input-style-clone",Je)}catch(s){if(!(s instanceof DOMException&&s.name==="NotSupportedError"))throw s}var pe,Ie,$e,ce,mt,Ut,gt,Te;const Xe=class Xe{constructor(e,n=0,o=n){re(this,ce);re(this,pe);re(this,Ie);re(this,$e);de(this,pe,e),de(this,Ie,n),de(this,$e,o)}static fromSelection(e){const{selectionStart:n,selectionEnd:o}=e;return new Xe(e,n??void 0,o??void 0)}get collapsed(){return this.startOffset===this.endOffset}get commonAncestorContainer(){return T(this,pe)}get endContainer(){return T(this,pe)}get startContainer(){return T(this,pe)}get startOffset(){return T(this,Ie)}get endOffset(){return T(this,$e)}setStartOffset(e){de(this,Ie,G(this,ce,gt).call(this,e))}setEndOffset(e){de(this,$e,G(this,ce,gt).call(this,e))}collapse(e=!1){e?this.setEndOffset(this.startOffset):this.setStartOffset(this.endOffset)}cloneContents(){return G(this,ce,Te).call(this).cloneContents()}cloneRange(){return new Xe(T(this,pe),this.startOffset,this.endOffset)}getBoundingClientRect(){return G(this,ce,Te).call(this).getBoundingClientRect()}getClientRects(){return G(this,ce,Te).call(this).getClientRects()}toString(){return G(this,ce,Te).call(this).toString()}getStyleClone(){return T(this,ce,mt)}};pe=new WeakMap,Ie=new WeakMap,$e=new WeakMap,ce=new WeakSet,mt=function(){return Je.for(T(this,pe))},Ut=function(){return T(this,ce,mt)},gt=function(e){return Math.max(0,Math.min(e,T(this,pe).value.length))},Te=function(){const e=document.createRange(),n=T(this,ce,Ut).childNodes[0];return n&&(e.setStart(n,this.startOffset),e.setEnd(n,this.endOffset)),e};let pt=Xe;const qe=new WeakMap;class Dn{constructor(e,n){this.expander=e,this.input=n,this.combobox=null,this.menu=null,this.match=null,this.justPasted=!1,this.lookBackIndex=0,this.oninput=this.onInput.bind(this),this.onpaste=this.onPaste.bind(this),this.onkeydown=this.onKeydown.bind(this),this.oncommit=this.onCommit.bind(this),this.onmousedown=this.onMousedown.bind(this),this.onblur=this.onBlur.bind(this),this.interactingWithList=!1,n.addEventListener("paste",this.onpaste),n.addEventListener("input",this.oninput),n.addEventListener("keydown",this.onkeydown),n.addEventListener("blur",this.onblur)}destroy(){this.input.removeEventListener("paste",this.onpaste),this.input.removeEventListener("input",this.oninput),this.input.removeEventListener("keydown",this.onkeydown),this.input.removeEventListener("blur",this.onblur)}dismissMenu(){this.deactivate()&&(this.lookBackIndex=this.input.selectionEnd||this.lookBackIndex)}activate(e,n){var o,r;this.input!==document.activeElement&&this.input!==((r=(o=document.activeElement)===null||o===void 0?void 0:o.shadowRoot)===null||r===void 0?void 0:r.activeElement)||(this.deactivate(),this.menu=n,n.id||(n.id=`text-expander-${Math.floor(Math.random()*1e5).toString()}`),this.expander.append(n),this.combobox=new zn(this.input,n),this.expander.dispatchEvent(new Event("text-expander-activate")),this.positionMenu(n,e.position),this.combobox.start(),n.addEventListener("combobox-commit",this.oncommit),n.addEventListener("mousedown",this.onmousedown),this.combobox.navigate(1))}positionMenu(e,n){const o=new pt(this.input,n).getBoundingClientRect(),r={left:o.left,top:o.top+o.height},p=e.getBoundingClientRect(),u={left:r.left-p.left,top:r.top-p.top};if(u.left!==0||u.top!==0){const v=getComputedStyle(e);e.style.left=v.left?`calc(${v.left} + ${u.left}px)`:`${u.left}px`,e.style.top=v.top?`calc(${v.top} + ${u.top}px)`:`${u.top}px`}}deactivate(){const e=this.menu;return!e||!this.combobox?!1:(this.expander.dispatchEvent(new Event("text-expander-deactivate")),this.menu=null,e.removeEventListener("combobox-commit",this.oncommit),e.removeEventListener("mousedown",this.onmousedown),this.combobox.destroy(),this.combobox=null,e.remove(),!0)}onCommit({target:e}){var n;const o=e;if(!(o instanceof HTMLElement)||!this.combobox)return;const r=this.match;if(!r)return;const p=this.input.value.substring(0,r.position-r.key.length),u=this.input.value.substring(r.position+r.text.length),v={item:o,key:r.key,value:null,continue:!1};if(!this.expander.dispatchEvent(new CustomEvent("text-expander-value",{cancelable:!0,detail:v}))||!v.value)return;let R=(n=this.expander.getAttribute("suffix"))!==null&&n!==void 0?n:" ";v.continue&&(R="");const C=`${v.value}${R}`;this.input.value=p+C+u;const k=p.length+C.length;this.deactivate(),this.input.focus({preventScroll:!0}),this.input.selectionStart=k,this.input.selectionEnd=k,v.continue||(this.lookBackIndex=k,this.match=null),this.expander.dispatchEvent(new CustomEvent("text-expander-committed",{cancelable:!1,detail:{input:this.input}}))}onBlur(){if(this.interactingWithList){this.interactingWithList=!1;return}this.deactivate()}onPaste(){this.justPasted=!0}async onInput(){if(this.justPasted){this.justPasted=!1;return}const e=this.findMatch();if(e){this.match=e;const n=await this.notifyProviders(e);if(!this.match)return;n?this.activate(e,n):this.deactivate()}else this.match=null,this.deactivate()}findMatch(){const e=this.input.selectionEnd||0,n=this.input.value;e<=this.lookBackIndex&&(this.lookBackIndex=e-1);for(const{key:o,multiWord:r}of this.expander.keys){const p=Bn(n,o,e,{multiWord:r,lookBackIndex:this.lookBackIndex,lastMatchPosition:this.match?this.match.position:null});if(p)return{text:p.text,key:o,position:p.position}}}async notifyProviders(e){const n=[],o=v=>n.push(v);return this.expander.dispatchEvent(new CustomEvent("text-expander-change",{cancelable:!0,detail:{provide:o,text:e.text,key:e.key}}))?(await Promise.all(n)).filter(v=>v.matched).map(v=>v.fragment)[0]:void 0}onMousedown(){this.interactingWithList=!0}onKeydown(e){e.key==="Escape"&&(this.match=null,this.deactivate()&&(this.lookBackIndex=this.input.selectionEnd||this.lookBackIndex,e.stopImmediatePropagation(),e.preventDefault()))}}class Mt extends HTMLElement{get keys(){const e=this.getAttribute("keys"),n=e?e.split(" "):[],o=this.getAttribute("multiword"),r=o?o.split(" "):[],p=r.length===0&&this.hasAttribute("multiword");return n.map(u=>({key:u,multiWord:p||r.includes(u)}))}connectedCallback(){const e=this.querySelector('input[type="text"], textarea');if(!(e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement))return;const n=new Dn(this,e);qe.set(this,n)}disconnectedCallback(){const e=qe.get(this);e&&(e.destroy(),qe.delete(this))}dismiss(){const e=qe.get(this);e&&e.dismissMenu()}}window.customElements.get("text-expander")||(window.TextExpanderElement=Mt,window.customElements.define("text-expander",Mt));function jn({onlyFirst:s=!1}={}){const e=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(e,s?void 0:"g")}const Pn=jn();function On(s){if(typeof s!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof s}\``);return s.replace(Pn,"")}const Hn=new Intl.Segmenter;function Bt(s,{countAnsiEscapeCodes:e=!1}={}){if(s===""||(e||(s=On(s)),s===""))return 0;let n=0;for(const o of Hn.segment(s))n++;return n}const Nn="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",bt=[["aa","Afar","Afaraf"],["ab","Abkhaz","аҧсуа бызшәа"],["ae","Avestan","avesta"],["af","Afrikaans","Afrikaans"],["ak","Akan","Akan"],["am","Amharic","አማርኛ"],["an","Aragonese","aragonés"],["ar","Arabic","اللغة العربية"],["as","Assamese","অসমীয়া"],["av","Avaric","авар мацӀ"],["ay","Aymara","aymar aru"],["az","Azerbaijani","azərbaycan dili"],["ba","Bashkir","башҡорт теле"],["be","Belarusian","беларуская мова"],["bg","Bulgarian","български език"],["bh","Bihari","भोजपुरी"],["bi","Bislama","Bislama"],["bm","Bambara","bamanankan"],["bn","Bengali","বাংলা"],["bo","Tibetan","བོད་ཡིག"],["br","Breton","brezhoneg"],["bs","Bosnian","bosanski jezik"],["ca","Catalan","Català"],["ce","Chechen","нохчийн мотт"],["ch","Chamorro","Chamoru"],["co","Corsican","corsu"],["cr","Cree","ᓀᐦᐃᔭᐍᐏᐣ"],["cs","Czech","čeština"],["cu","Old Church Slavonic","ѩзыкъ словѣньскъ"],["cv","Chuvash","чӑваш чӗлхи"],["cy","Welsh","Cymraeg"],["da","Danish","dansk"],["de","German","Deutsch"],["dv","Divehi","Dhivehi"],["dz","Dzongkha","རྫོང་ཁ"],["ee","Ewe","Eʋegbe"],["el","Greek","Ελληνικά"],["en","English","English"],["eo","Esperanto","Esperanto"],["es","Spanish","Español"],["et","Estonian","eesti"],["eu","Basque","euskara"],["fa","Persian","فارسی"],["ff","Fula","Fulfulde"],["fi","Finnish","suomi"],["fj","Fijian","Vakaviti"],["fo","Faroese","føroyskt"],["fr","French","Français"],["fy","Western Frisian","Frysk"],["ga","Irish","Gaeilge"],["gd","Scottish Gaelic","Gàidhlig"],["gl","Galician","galego"],["gu","Gujarati","ગુજરાતી"],["gv","Manx","Gaelg"],["ha","Hausa","هَوُسَ"],["he","Hebrew","עברית"],["hi","Hindi","हिन्दी"],["ho","Hiri Motu","Hiri Motu"],["hr","Croatian","Hrvatski"],["ht","Haitian","Kreyòl ayisyen"],["hu","Hungarian","magyar"],["hy","Armenian","Հայերեն"],["hz","Herero","Otjiherero"],["ia","Interlingua","Interlingua"],["id","Indonesian","Bahasa Indonesia"],["ie","Interlingue","Interlingue"],["ig","Igbo","Asụsụ Igbo"],["ii","Nuosu","ꆈꌠ꒿ Nuosuhxop"],["ik","Inupiaq","Iñupiaq"],["io","Ido","Ido"],["is","Icelandic","Íslenska"],["it","Italian","Italiano"],["iu","Inuktitut","ᐃᓄᒃᑎᑐᑦ"],["ja","Japanese","日本語"],["jv","Javanese","basa Jawa"],["ka","Georgian","ქართული"],["kg","Kongo","Kikongo"],["ki","Kikuyu","Gĩkũyũ"],["kj","Kwanyama","Kuanyama"],["kk","Kazakh","қазақ тілі"],["kl","Kalaallisut","kalaallisut"],["km","Khmer","ខេមរភាសា"],["kn","Kannada","ಕನ್ನಡ"],["ko","Korean","한국어"],["kr","Kanuri","Kanuri"],["ks","Kashmiri","कश्मीरी"],["ku","Kurmanji (Kurdish)","Kurmancî"],["kv","Komi","коми кыв"],["kw","Cornish","Kernewek"],["ky","Kyrgyz","Кыргызча"],["la","Latin","latine"],["lb","Luxembourgish","Lëtzebuergesch"],["lg","Ganda","Luganda"],["li","Limburgish","Limburgs"],["ln","Lingala","Lingála"],["lo","Lao","ລາວ"],["lt","Lithuanian","lietuvių kalba"],["lu","Luba-Katanga","Tshiluba"],["lv","Latvian","latviešu valoda"],["mg","Malagasy","fiteny malagasy"],["mh","Marshallese","Kajin M̧ajeļ"],["mi","Māori","te reo Māori"],["mk","Macedonian","македонски јазик"],["ml","Malayalam","മലയാളം"],["mn","Mongolian","Монгол хэл"],["mr","Marathi","मराठी"],["ms","Malay","Bahasa Melayu"],["mt","Maltese","Malti"],["my","Burmese","ဗမာစာ"],["na","Nauru","Ekakairũ Naoero"],["nb","Norwegian Bokmål","Norsk bokmål"],["nd","Northern Ndebele","isiNdebele"],["ne","Nepali","नेपाली"],["ng","Ndonga","Owambo"],["nl","Dutch","Nederlands"],["nn","Norwegian Nynorsk","Norsk Nynorsk"],["no","Norwegian","Norsk"],["nr","Southern Ndebele","isiNdebele"],["nv","Navajo","Diné bizaad"],["ny","Chichewa","chiCheŵa"],["oc","Occitan","occitan"],["oj","Ojibwe","ᐊᓂᔑᓈᐯᒧᐎᓐ"],["om","Oromo","Afaan Oromoo"],["or","Oriya","ଓଡ଼ିଆ"],["os","Ossetian","ирон æвзаг"],["pa","Panjabi","ਪੰਜਾਬੀ"],["pi","Pāli","पाऴि"],["pl","Polish","Polski"],["ps","Pashto","پښتو"],["pt","Portuguese","Português"],["qu","Quechua","Runa Simi"],["rm","Romansh","rumantsch grischun"],["rn","Kirundi","Ikirundi"],["ro","Romanian","Română"],["ru","Russian","Русский"],["rw","Kinyarwanda","Ikinyarwanda"],["sa","Sanskrit","संस्कृतम्"],["sc","Sardinian","sardu"],["sd","Sindhi","सिन्धी"],["se","Northern Sami","Davvisámegiella"],["sg","Sango","yângâ tî sängö"],["si","Sinhala","සිංහල"],["sk","Slovak","slovenčina"],["sl","Slovenian","slovenščina"],["sn","Shona","chiShona"],["so","Somali","Soomaaliga"],["sq","Albanian","Shqip"],["sr","Serbian","српски језик"],["ss","Swati","SiSwati"],["st","Southern Sotho","Sesotho"],["su","Sundanese","Basa Sunda"],["sv","Swedish","Svenska"],["sw","Swahili","Kiswahili"],["ta","Tamil","தமிழ்"],["te","Telugu","తెలుగు"],["tg","Tajik","тоҷикӣ"],["th","Thai","ไทย"],["ti","Tigrinya","ትግርኛ"],["tk","Turkmen","Türkmen"],["tl","Tagalog","Wikang Tagalog"],["tn","Tswana","Setswana"],["to","Tonga","faka Tonga"],["tr","Turkish","Türkçe"],["ts","Tsonga","Xitsonga"],["tt","Tatar","татар теле"],["tw","Twi","Twi"],["ty","Tahitian","Reo Tahiti"],["ug","Uyghur","ئۇيغۇرچە‎"],["uk","Ukrainian","Українська"],["ur","Urdu","اردو"],["uz","Uzbek","Ўзбек"],["ve","Venda","Tshivenḓa"],["vi","Vietnamese","Tiếng Việt"],["vo","Volapük","Volapük"],["wa","Walloon","walon"],["wo","Wolof","Wollof"],["xh","Xhosa","isiXhosa"],["yi","Yiddish","ייִדיש"],["yo","Yoruba","Yorùbá"],["za","Zhuang","Saɯ cueŋƅ"],["zh","Chinese","中文"],["zu","Zulu","isiZulu"],["zh-CN","Chinese (China)","简体中文"],["zh-HK","Chinese (Hong Kong)","繁體中文(香港)"],["zh-TW","Chinese (Taiwan)","繁體中文(臺灣)"],["zh-YUE","Cantonese","廣東話"],["ast","Asturian","Asturianu"],["chr","Cherokee","ᏣᎳᎩ ᎦᏬᏂᎯᏍᏗ"],["ckb","Sorani (Kurdish)","سۆرانی"],["cnr","Montenegrin","crnogorski"],["jbo","Lojban","la .lojban."],["kab","Kabyle","Taqbaylit"],["ldn","Láadan","Láadan"],["lfn","Lingua Franca Nova","lingua franca nova"],["sco","Scots","Scots"],["sma","Southern Sami","Åarjelsaemien Gïele"],["smj","Lule Sami","Julevsámegiella"],["szl","Silesian","ślůnsko godka"],["tok","Toki Pona","toki pona"],["xal","Kalmyk","Хальмг келн"],["zba","Balaibalan","باليبلن"],["zgh","Standard Moroccan Tamazight","ⵜⴰⵎⴰⵣⵉⵖⵜ"]],Wn="(((?:[^A-Za-z0-9@@$##\\uFFFE\\uFEFF\\uFFFF]|[\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069]|^))((https?:\\/\\/)((?:(?:(?:[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/](?:[_-]|[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/])*)?[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/]\\.)*(?:(?:[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/](?:-|[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/])*)?[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/]\\.)(?:(?:(?:삼성|닷컴|닷넷|香格里拉|餐厅|食品|飞利浦|電訊盈科|集团|通販|购物|谷歌|诺基亚|联通|网络|网站|网店|网址|组织机构|移动|珠宝|点看|游戏|淡马锡|机构|書籍|时尚|新闻|政府|政务|招聘|手表|手机|我爱你|慈善|微博|广东|工行|家電|娱乐|天主教|大拿|大众汽车|在线|嘉里大酒店|嘉里|商标|商店|商城|公益|公司|八卦|健康|信息|佛山|企业|中文网|中信|世界|ポイント|ファッション|セール|ストア|コム|グーグル|クラウド|みんな|คอม|संगठन|नेट|कॉम|همراه|موقع|موبايلي|كوم|كاثوليك|عرب|شبكة|بيتك|بازار|العليان|ارامكو|اتصالات|ابوظبي|קום|сайт|рус|орг|онлайн|москва|ком|католик|дети|zuerich|zone|zippo|zip|zero|zara|zappos|yun|youtube|you|yokohama|yoga|yodobashi|yandex|yamaxun|yahoo|yachts|xyz|xxx|xperia|xin|xihuan|xfinity|xerox|xbox|wtf|wtc|wow|world|works|work|woodside|wolterskluwer|wme|winners|wine|windows|win|williamhill|wiki|wien|whoswho|weir|weibo|wedding|wed|website|weber|webcam|weatherchannel|weather|watches|watch|warman|wanggou|wang|walter|walmart|wales|vuelos|voyage|voto|voting|vote|volvo|volkswagen|vodka|vlaanderen|vivo|viva|vistaprint|vista|vision|visa|virgin|vip|vin|villas|viking|vig|video|viajes|vet|versicherung|vermögensberatung|vermögensberater|verisign|ventures|vegas|vanguard|vana|vacations|ups|uol|uno|university|unicom|uconnect|ubs|ubank|tvs|tushu|tunes|tui|tube|trv|trust|travelersinsurance|travelers|travelchannel|travel|training|trading|trade|toys|toyota|town|tours|total|toshiba|toray|top|tools|tokyo|today|tmall|tkmaxx|tjx|tjmaxx|tirol|tires|tips|tiffany|tienda|tickets|tiaa|theatre|theater|thd|teva|tennis|temasek|telefonica|telecity|tel|technology|tech|team|tdk|tci|taxi|tax|tattoo|tatar|tatamotors|target|taobao|talk|taipei|tab|systems|symantec|sydney|swiss|swiftcover|swatch|suzuki|surgery|surf|support|supply|supplies|sucks|style|study|studio|stream|store|storage|stockholm|stcgroup|stc|statoil|statefarm|statebank|starhub|star|staples|stada|srt|srl|spreadbetting|spot|sport|spiegel|space|soy|sony|song|solutions|solar|sohu|software|softbank|social|soccer|sncf|smile|smart|sling|skype|sky|skin|ski|site|singles|sina|silk|shriram|showtime|show|shouji|shopping|shop|shoes|shiksha|shia|shell|shaw|sharp|shangrila|sfr|sexy|sex|sew|seven|ses|services|sener|select|seek|security|secure|seat|search|scot|scor|scjohnson|science|schwarz|schule|school|scholarships|schmidt|schaeffler|scb|sca|sbs|sbi|saxo|save|sas|sarl|sapo|sap|sanofi|sandvikcoromant|sandvik|samsung|samsclub|salon|sale|sakura|safety|safe|saarland|ryukyu|rwe|run|ruhr|rugby|rsvp|room|rogers|rodeo|rocks|rocher|rmit|rip|rio|ril|rightathome|ricoh|richardli|rich|rexroth|reviews|review|restaurant|rest|republican|report|repair|rentals|rent|ren|reliance|reit|reisen|reise|rehab|redumbrella|redstone|red|recipes|realty|realtor|realestate|read|raid|radio|racing|qvc|quest|quebec|qpon|pwc|pub|prudential|pru|protection|property|properties|promo|progressive|prof|productions|prod|pro|prime|press|praxi|pramerica|post|porn|politie|poker|pohl|pnc|plus|plumbing|playstation|play|place|pizza|pioneer|pink|ping|pin|pid|pictures|pictet|pics|piaget|physio|photos|photography|photo|phone|philips|phd|pharmacy|pfizer|pet|pccw|pay|passagens|party|parts|partners|pars|paris|panerai|panasonic|pamperedchef|page|ovh|ott|otsuka|osaka|origins|orientexpress|organic|org|orange|oracle|open|ooo|onyourside|online|onl|ong|one|omega|ollo|oldnavy|olayangroup|olayan|okinawa|office|off|observer|obi|nyc|ntt|nrw|nra|nowtv|nowruz|now|norton|northwesternmutual|nokia|nissay|nissan|ninja|nikon|nike|nico|nhk|ngo|nfl|nexus|nextdirect|next|news|newholland|new|neustar|network|netflix|netbank|net|nec|nba|navy|natura|nationwide|name|nagoya|nadex|nab|mutuelle|mutual|museum|mtr|mtpc|mtn|msd|movistar|movie|mov|motorcycles|moto|moscow|mortgage|mormon|mopar|montblanc|monster|money|monash|mom|moi|moe|moda|mobily|mobile|mobi|mma|mls|mlb|mitsubishi|mit|mint|mini|mil|microsoft|miami|metlife|merckmsd|meo|menu|men|memorial|meme|melbourne|meet|media|med|mckinsey|mcdonalds|mcd|mba|mattel|maserati|marshalls|marriott|markets|marketing|market|map|mango|management|man|makeup|maison|maif|madrid|macys|luxury|luxe|lupin|lundbeck|ltda|ltd|lplfinancial|lpl|love|lotto|lotte|london|lol|loft|locus|locker|loans|loan|llp|llc|lixil|living|live|lipsy|link|linde|lincoln|limo|limited|lilly|like|lighting|lifestyle|lifeinsurance|life|lidl|liaison|lgbt|lexus|lego|legal|lefrak|leclerc|lease|lds|lawyer|law|latrobe|latino|lat|lasalle|lanxess|landrover|land|lancome|lancia|lancaster|lamer|lamborghini|ladbrokes|lacaixa|kyoto|kuokgroup|kred|krd|kpn|kpmg|kosher|komatsu|koeln|kiwi|kitchen|kindle|kinder|kim|kia|kfh|kerryproperties|kerrylogistics|kerryhotels|kddi|kaufen|juniper|juegos|jprs|jpmorgan|joy|jot|joburg|jobs|jnj|jmp|jll|jlc|jio|jewelry|jetzt|jeep|jcp|jcb|java|jaguar|iwc|iveco|itv|itau|istanbul|ist|ismaili|iselect|irish|ipiranga|investments|intuit|international|intel|int|insure|insurance|institute|ink|ing|info|infiniti|industries|inc|immobilien|immo|imdb|imamat|ikano|iinet|ifm|ieee|icu|ice|icbc|ibm|hyundai|hyatt|hughes|htc|hsbc|how|house|hotmail|hotels|hoteles|hot|hosting|host|hospital|horse|honeywell|honda|homesense|homes|homegoods|homedepot|holiday|holdings|hockey|hkt|hiv|hitachi|hisamitsu|hiphop|hgtv|hermes|here|helsinki|help|healthcare|health|hdfcbank|hdfc|hbo|haus|hangout|hamburg|hair|guru|guitars|guide|guge|gucci|guardian|group|grocery|gripe|green|gratis|graphics|grainger|gov|got|gop|google|goog|goodyear|goodhands|goo|golf|goldpoint|gold|godaddy|gmx|gmo|gmbh|gmail|globo|global|gle|glass|glade|giving|gives|gifts|gift|ggee|george|genting|gent|gea|gdn|gbiz|gay|garden|gap|games|game|gallup|gallo|gallery|gal|fyi|futbol|furniture|fund|fun|fujixerox|fujitsu|ftr|frontier|frontdoor|frogans|frl|fresenius|free|fox|foundation|forum|forsale|forex|ford|football|foodnetwork|food|foo|fly|flsmidth|flowers|florist|flir|flights|flickr|fitness|fit|fishing|fish|firmdale|firestone|fire|financial|finance|final|film|fido|fidelity|fiat|ferrero|ferrari|feedback|fedex|fast|fashion|farmers|farm|fans|fan|family|faith|fairwinds|fail|fage|extraspace|express|exposed|expert|exchange|everbank|events|eus|eurovision|etisalat|esurance|estate|esq|erni|ericsson|equipment|epson|epost|enterprises|engineering|engineer|energy|emerck|email|education|edu|edeka|eco|eat|earth|dvr|dvag|durban|dupont|duns|dunlop|duck|dubai|dtv|drive|download|dot|doosan|domains|doha|dog|dodge|doctor|docs|dnp|diy|dish|discover|discount|directory|direct|digital|diet|diamonds|dhl|dev|design|desi|dentist|dental|democrat|delta|deloitte|dell|delivery|degree|deals|dealer|deal|dds|dclk|day|datsun|dating|date|data|dance|dad|dabur|cyou|cymru|cuisinella|csc|cruises|cruise|crs|crown|cricket|creditunion|creditcard|credit|cpa|courses|coupons|coupon|country|corsica|coop|cool|cookingchannel|cooking|contractors|contact|consulting|construction|condos|comsec|computer|compare|company|community|commbank|comcast|com|cologne|college|coffee|codes|coach|clubmed|club|cloud|clothing|clinique|clinic|click|cleaning|claims|cityeats|city|citic|citi|citadel|cisco|circle|cipriani|church|chrysler|chrome|christmas|chloe|chintai|cheap|chat|chase|charity|channel|chanel|cfd|cfa|cern|ceo|center|ceb|cbs|cbre|cbn|cba|catholic|catering|cat|casino|cash|caseih|case|casa|cartier|cars|careers|career|care|cards|caravan|car|capitalone|capital|capetown|canon|cancerresearch|camp|camera|cam|calvinklein|call|cal|cafe|cab|bzh|buzz|buy|business|builders|build|bugatti|budapest|brussels|brother|broker|broadway|bridgestone|bradesco|box|boutique|bot|boston|bostik|bosch|boots|booking|book|boo|bond|bom|bofa|boehringer|boats|bnpparibas|bnl|bmw|bms|blue|bloomberg|blog|blockbuster|blanco|blackfriday|black|biz|bio|bingo|bing|bike|bid|bible|bharti|bet|bestbuy|best|berlin|bentley|beer|beauty|beats|bcn|bcg|bbva|bbt|bbc|bayern|bauhaus|basketball|baseball|bargains|barefoot|barclays|barclaycard|barcelona|bar|bank|band|bananarepublic|banamex|baidu|baby|azure|axa|aws|avianca|autos|auto|author|auspost|audio|audible|audi|auction|attorney|athleta|associates|asia|asda|arte|art|arpa|army|archi|aramco|arab|aquarelle|apple|app|apartments|aol|anz|anquan|android|analytics|amsterdam|amica|amfam|amex|americanfamily|americanexpress|alstom|alsace|ally|allstate|allfinanz|alipay|alibaba|alfaromeo|akdn|airtel|airforce|airbus|aigo|aig|agency|agakhan|africa|afl|afamilycompany|aetna|aero|aeg|adult|ads|adac|actor|active|aco|accountants|accountant|accenture|academy|abudhabi|abogado|able|abc|abbvie|abbott|abb|abarth|aarp|aaa|onion)(?=[^0-9a-zA-Z@+-]|$))|(?:(?:한국|香港|澳門|新加坡|台灣|台湾|中國|中国|გე|ລາວ|ไทย|ලංකා|ഭാരതം|ಭಾರತ|భారత్|சிங்கப்பூர்|இலங்கை|இந்தியா|ଭାରତ|ભારત|ਭਾਰਤ|ভাৰত|ভারত|বাংলা|भारोत|भारतम्|भारत|ڀارت|پاکستان|موريتانيا|مليسيا|مصر|قطر|فلسطين|عمان|عراق|سورية|سودان|تونس|بھارت|بارت|ایران|امارات|المغرب|السعودية|الجزائر|البحرين|الاردن|հայ|қаз|укр|срб|рф|мон|мкд|ею|бел|бг|ευ|ελ|zw|zm|za|yt|ye|ws|wf|vu|vn|vi|vg|ve|vc|va|uz|uy|us|um|uk|ug|ua|tz|tw|tv|tt|tr|tp|to|tn|tm|tl|tk|tj|th|tg|tf|td|tc|sz|sy|sx|sv|su|st|ss|sr|so|sn|sm|sl|sk|sj|si|sh|sg|se|sd|sc|sb|sa|rw|ru|rs|ro|re|qa|py|pw|pt|ps|pr|pn|pm|pl|pk|ph|pg|pf|pe|pa|om|nz|nu|nr|np|no|nl|ni|ng|nf|ne|nc|na|mz|my|mx|mw|mv|mu|mt|ms|mr|mq|mp|mo|mn|mm|ml|mk|mh|mg|mf|me|md|mc|ma|ly|lv|lu|lt|ls|lr|lk|li|lc|lb|la|kz|ky|kw|kr|kp|kn|km|ki|kh|kg|ke|jp|jo|jm|je|it|is|ir|iq|io|in|im|il|ie|id|hu|ht|hr|hn|hm|hk|gy|gw|gu|gt|gs|gr|gq|gp|gn|gm|gl|gi|gh|gg|gf|ge|gd|gb|ga|fr|fo|fm|fk|fj|fi|eu|et|es|er|eh|eg|ee|ec|dz|do|dm|dk|dj|de|cz|cy|cx|cw|cv|cu|cr|co|cn|cm|cl|ck|ci|ch|cg|cf|cd|cc|ca|bz|by|bw|bv|bt|bs|br|bq|bo|bn|bm|bl|bj|bi|bh|bg|bf|be|bd|bb|ba|az|ax|aw|au|at|as|ar|aq|ao|an|am|al|ai|ag|af|ae|ad|ac)(?=[^0-9a-zA-Z@+-]|$))|(?:xn--[\\-0-9a-z]+))))(?::([0-9]+))?(\\/(?:(?:[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*(?:\\((?:[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]+|(?:[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*\\([a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]+\\)[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*))\\)[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*)*[\\+\\-a-z\\u0400-\\u04FF0-9=_#\\/\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]|(?:\\((?:[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]+|(?:[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*\\([a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]+\\)[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*))\\)))|(?:@[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]+\\/))*)?(\\?[a-z0-9!?\\*'@\\(\\);:&=\\+\\$\\/%#\\[\\]\\-_\\.,~|]*[a-z0-9\\-_&=#\\/])?))",Un="gi",Tt={source:Wn,flags:Un};var qn={PHANPY_CLIENT_NAME:"Phanpy",PHANPY_WEBSITE:"https://phanpy.social",PHANPY_LINGVA_INSTANCES:"lingva.phanpy.social lingva.lunar.icu lingva.garudalinux.org translate.plausibility.cloud",PHANPY_PRIVACY_POLICY_URL:"https://github.com/cheeaun/phanpy/blob/main/PRIVACY.MD",VITE_APP_ENV:"production",BASE_URL:"./",MODE:"production",DEV:!1,PROD:!0,SSR:!1};const{PHANPY_IMG_ALT_API_URL:ut,PHANPY_GIPHY_API_KEY:Kn}=qn,Vn=bt.reduce((s,e)=>{const[n,o,r]=e;return s[n]={common:o,native:r},s},{}),qt={"5 minutes":5*60,"30 minutes":30*60,"1 hour":60*60,"6 hours":6*60*60,"12 hours":12*60*60,"1 day":24*60*60,"3 days":3*24*60*60,"7 days":7*24*60*60},Gn=Object.values(qt),_t=24*60*60,Rt=s=>{if(!s)return _t;const e=(new Date(s).getTime()-Date.now())/1e3;return Gn.find(n=>n>=e)||_t},ye=document.createElement("ul");ye.role="listbox";ye.className="text-expander-menu";const Yn=16,Zn=new IntersectionObserver(s=>{s.forEach(e=>{if(e.isIntersecting){const{left:n,width:o}=e.boundingClientRect,{innerWidth:r}=window;n+o>r&&(ye.style.left=r-o-Yn+"px")}})});Zn.observe(ye);const we=an([new Intl.DateTimeFormat().resolvedOptions().locale,...navigator.languages],bt.map(s=>s[0]),"en"),Kt=new RegExp(Tt.source,Tt.flags),Jn=/(^|[^\/\w])@(([a-z0-9_]+)@[a-z0-9\.\-]+[a-z0-9]+)/gi,Xn="$2xxxxxxxxxxxxxxxxxxxxxxx";function Qn(s){return s.replace(Kt,Xn).replace(Jn,"$1@$3")}const ei=/[a-z0-9_]+([a-z0-9_.-]+[a-z0-9_]+)?/i,ti=new RegExp(`(^|[^=\\/\\w])(@${ei.source}(?:@[\\p{L}\\w.-]+[\\w]+)?)`,"uig"),ni=new RegExp("(^|[^=\\/\\w])(#[a-z0-9_]+([a-z0-9_.]+[a-z0-9_]+)?)(?![\\/\\w])","ig"),ii="[a-zA-Z0-9_]{2,}",si=new RegExp(`(^|[^=\\/\\w])(:${ii}:)(?=[^A-Za-z0-9_:]|$)`,"g"),ai=new Intl.Segmenter;function oi(s,{maxCharacters:e=1/0}){let n=s.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'");const{composerCharacterCount:o}=le;if(o>e){let r="",p="";const u=ai.segment(n);for(const{segment:v,index:g}of u)g"),r+p}return n.replace(Kt,'$2$3').replace(ti,'$1$2').replace(ni,'$1$2').replace(si,'$1$2')}const ri=new Intl.RelativeTimeFormat,ft=100;function Ei({onClose:s,replyToStatus:e,editStatus:n,draftStatus:o,standalone:r,hasOpener:p}){var Ft;const{masto:u,instance:v}=vt(),[g,R]=H("default"),C=U((o==null?void 0:o.uid)||on()),k=bn(),S=k.info,Z=Nt(),{statuses:{maxCharacters:D,maxMediaAttachments:I,charactersReservedPerUrl:se}={},mediaAttachments:{supportedMimeTypes:J=[],imageSizeLimit:c,imageMatrixLimit:h,videoSizeLimit:m,videoMatrixLimit:f,videoFrameRateLimit:E}={},polls:{maxOptions:y,maxCharactersPerOption:B,maxExpiration:q,minExpiration:ue}={}}=Z||{},A=U(),X=U(),[V,W]=H("public"),[j,te]=H(!1),[O,ie]=H(ze.session.get("currentLanguage")||we),ae=U(O),[$,z]=H([]),[M,L]=H(null),N=ze.account.get("preferences")||{},Q=()=>{A.current&&A.current.dispatchEvent(new Event("input"))},oe=()=>{setTimeout(()=>{var a,l,b;A.current&&((l=(a=o==null?void 0:o.status)==null?void 0:a.startsWith)!=null&&l.call(a,` -`)&&(A.current.selectionStart=0,A.current.selectionEnd=0),(b=A.current)==null||b.focus())},300)};ee(()=>{if(e){const{spoilerText:a,visibility:l,language:b,sensitive:d}=e;a&&X.current&&(X.current.value=a);const x=[...new Set([e.account.acct,...e.mentions.map(w=>w.acct)])].filter(w=>w!==S.acct);x.length>0&&(A.current.value=`${x.map(w=>`@${w}`).join(" ")} `,Q()),oe(),W(l==="public"&&N["posting:default:visibility"]?N["posting:default:visibility"]:l),ie(b||N.postingDefaultLanguage||we),te(d&&!!a)}else if(n){const{visibility:a,language:l,sensitive:b,poll:d,mediaAttachments:_}=n,x=!!(d!=null&&d.options)&&{...d,options:d.options.map(w=>(w==null?void 0:w.title)||w),expiresIn:(d==null?void 0:d.expiresIn)||Rt(d.expiresAt)};R("loading"),(async()=>{try{const w=await u.v1.statuses.$select(n.id).source.fetch(),{text:F,spoilerText:P}=w;A.current.value=F,A.current.dataset.source=F,Q(),oe(),X.current.value=P,W(a),ie(l||presf.postingDefaultLanguage||we),te(b),x&&L(x),z(_),R("default")}catch(w){alert((w==null?void 0:w.reason)||w),R("error")}})()}else oe(),N["posting:default:visibility"]&&W(N["posting:default:visibility"]),N["posting:default:language"]&&ie(N["posting:default:language"]),N["posting:default:sensitive"]&&te(N["posting:default:sensitive"]);if(o){const{status:a,spoilerText:l,visibility:b,language:d,sensitive:_,poll:x,mediaAttachments:w}=o,F=!!(x!=null&&x.options)&&{...x,options:x.options.map(P=>(P==null?void 0:P.title)||P),expiresIn:(x==null?void 0:x.expiresIn)||Rt(x.expiresAt)};A.current.value=a,Q(),oe(),l&&(X.current.value=l),b&&W(b),ie(d||N.postingDefaultLanguage||we),_!==null&&te(_),F&&L(F),w&&z(w)}},[o,n,e]);const he=U(),ve="You have unsaved changes. Discard this post?",xe=()=>{const{value:a,dataset:l}=A.current;if(g==="loading")return!1;const b=(a||"").trim().replace(new RegExp("^\\p{White_Space}+|\\p{White_Space}+$","gu"),""),d=$.length>0;if(!b&&!d||$.length>0&&$.every(P=>P.id))return!0;const x=(e==null?void 0:e.account.id)===S.id,w=e&&a.trim()===`@${e.account.acct}`;return!!(!x&&w||a===(l==null?void 0:l.source))},Oe=()=>xe()?!0:confirm(ve);ee(()=>{const a=l=>{xe()||(l.preventDefault(),l.returnValue=ve)};return window.addEventListener("beforeunload",a,{capture:!0}),()=>window.removeEventListener("beforeunload",a,{capture:!0})},[]);const Yt=()=>{const{value:a}=A.current,{value:l}=X.current;return Bt(Qn(a))+Bt(l)},tt=()=>{const a=Yt();le.composerCharacterCount=a};ee(tt,[]);const xt=window.CloseWatcher,nt=U(!1);_e("esc",()=>{nt.current=!0},{enabled:!xt,enableOnFormTags:!0}),_e("esc",()=>{!r&&nt.current&&Oe()&&s(),nt.current=!1},{enabled:!xt,enableOnFormTags:!0,keyup:!0,ignoreEventWhen:a=>{const l=document.querySelectorAll("#modal-container > *"),b=!!l,d=l.length===1&&l[0].querySelector("#compose-container");return b&&!d}}),rn(()=>{!r&&Oe()&&s()},[r,Oe,s]);const wt=U({}),kt=()=>`${yn()}#${C.current}`,it=()=>{if(n||le.composerState.minimized)return;const a=kt(),l={key:a,replyTo:e?{id:e.id,account:{id:e.account.id,username:e.account.username,acct:e.account.acct}}:null,draftStatus:{uid:C.current,status:A.current.value,spoilerText:X.current.value,visibility:V,language:O,sensitive:j,poll:M,mediaAttachments:$}};!xn(l,wt.current)&&!xe()&&(zt.drafts.set(a,{...l,state:"unsaved",updatedAt:Date.now()}).then(()=>{}).catch(b=>{}),wt.current=structuredClone(l))};ln(it,5e3),ee(()=>(it(),()=>{zt.drafts.del(kt())}),[]),ee(()=>{const a=b=>{const{items:d}=b.clipboardData||b.dataTransfer,_=[];for(let x=0;x0&&$.length>=I){alert(`You can only attach up to ${I} files.`);return}if(_.length>0){b.preventDefault(),b.stopPropagation();const x=I-$.length,w=_.slice(0,x);if(w.length<=0){alert(`You can only attach up to ${I} files.`);return}const F=w.map(P=>({file:P,type:P.type,size:P.size,url:URL.createObjectURL(P),id:null,description:null}));z([...$,...F])}};window.addEventListener("paste",a);const l=b=>{b.dataTransfer.items.length>0&&(b.preventDefault(),b.stopPropagation())};return window.addEventListener("dragover",l),window.addEventListener("drop",a),()=>{window.removeEventListener("paste",a),window.removeEventListener("dragover",l),window.removeEventListener("drop",a)}},[$]);const[He,st]=H(!1),[Ne,We]=H(!1),[Zt,at]=H(!1),[me,Jt]=H(null),[Xt,Qt]=Re(()=>{const a=[],l=[],{contentTranslationHideLanguages:b=[]}=le.settings;return bt.forEach(d=>{const[_]=d;_===O||_===ae.current||_===we||b.includes(_)||me!=null&&me.length&&me.includes(_)?a.push(d):l.push(d)}),a.sort(([d,_],[x,w])=>d===O?-1:x===O?1:_.localeCompare(w)),l.sort(([d,_],[x,w])=>_.localeCompare(w)),[a,l]},[O,me]),Et=Re(()=>!!(e!=null&&e.createdAt)&&Math.floor((Date.now()-new Date(e.createdAt))/(1e3*60*60*24*30)),[e]),en=()=>{it(),le.composerState.minimized=!0};return t("div",{id:"compose-container-outer",children:[t("div",{id:"compose-container",class:r?"standalone":"",children:[t("div",{class:"compose-top",children:[(S==null?void 0:S.avatarStatic)&&t(Ot,{account:S,accountInstance:k.instanceURL,hideDisplayName:!0,useAvatarStatic:!0}),r?p&&t("button",{type:"button",class:"light pop-button",disabled:g==="loading",onClick:()=>{var a;if(!window.opener){alert("Looks like you closed the parent window.");return}if(window.opener.__STATES__.showCompose){if((a=window.opener.__STATES__.composerState)!=null&&a.publishing){alert("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.");return}if(!confirm("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?"))return}s({fn:()=>{const l={editStatus:n,replyToStatus:e,draftStatus:{uid:C.current,status:A.current.value,spoilerText:X.current.value,visibility:V,language:O,sensitive:j,poll:M,mediaAttachments:$}};window.opener.__COMPOSE__=l,window.opener.__STATES__.showCompose?(window.opener.__STATES__.showCompose=!1,setTimeout(()=>{window.opener.__STATES__.showCompose=!0},10)):window.opener.__STATES__.showCompose=!0,window.opener.__STATES__.composerState.minimized&&(window.opener.__STATES__.composerState.minimized=!1)}})},children:t(K,{icon:"popin",alt:"Pop in"})}):t("span",{class:"compose-controls",children:[t("button",{type:"button",class:"plain4 pop-button",disabled:g==="loading",onClick:()=>{cn({editStatus:n,replyToStatus:e,draftStatus:{uid:C.current,status:A.current.value,spoilerText:X.current.value,visibility:V,language:O,sensitive:j,poll:M,mediaAttachments:$}})&&s()},children:t(K,{icon:"popout",alt:"Pop out"})}),t("button",{type:"button",class:"plain4 min-button",onClick:en,children:t(K,{icon:"minimize",alt:"Minimize"})})," ",t("button",{type:"button",class:"light close-button",disabled:g==="loading",onClick:()=>{Oe()&&s()},children:t(K,{icon:"x"})})]})]}),!!e&&t("div",{class:"status-preview",children:[t(Lt,{status:e,size:"s",previewMode:!0}),t("div",{class:"status-preview-legend reply-to",children:["Replying to @",e.account.acct||e.account.username,"’s post",Et>=3&&t(Ce,{children:[" ","(",t("strong",{children:ri.format(-Et,"month")}),")"]})]})]}),!!n&&t("div",{class:"status-preview",children:[t(Lt,{status:n,size:"s",previewMode:!0}),t("div",{class:"status-preview-legend",children:"Editing source post"})]}),t("form",{ref:he,class:`form-visibility-${V}`,style:{pointerEvents:g==="loading"?"none":"auto",opacity:g==="loading"?.5:1},onKeyDown:a=>{a.key==="Enter"&&(a.ctrlKey||a.metaKey)&&he.current.dispatchEvent(new Event("submit",{cancelable:!0}))},onSubmit:a=>{a.preventDefault();const l=new FormData(a.target),b=Object.fromEntries(l.entries());let{status:d,visibility:_,sensitive:x,spoilerText:w}=b;if(x=x==="on",M){if(M.options.length<2){alert("Poll must have at least 2 options");return}if(M.options.some(F=>F==="")){alert("Some poll choices are empty");return}}$.length>0&&$.some(P=>{var ne,Me;return!((Me=(ne=P.description)==null?void 0:ne.trim)!=null&&Me.call(ne))})&&!confirm("Some media have no descriptions. Continue?")||(w=x&&w||void 0,d=d===""?void 0:d,le.composerState.publishing=!0,R("loading"),(async()=>{try{if($.length>0){const ne=$.map(ge=>{const{file:Ue,description:tn,id:nn}=ge;if(nn)return ge;{const sn=Pt({file:Ue,description:tn});return u.v2.media.create(sn).then(ot=>(ot.id&&(ge.id=ot.id),ot))}}),Me=await Promise.allSettled(ne);if(Me.some(ge=>{var Ue;return ge.status==="rejected"||!((Ue=ge.value)!=null&&Ue.id)})){le.composerState.publishing=!1,le.composerState.publishingError=!0,R("error"),Me.forEach(ge=>{ge.status==="rejected"&&alert(ge.reason||`Attachment #${i} failed`)});return}}let F={status:d,spoiler_text:w,language:O,sensitive:x,poll:M,media_ids:$.map(ne=>ne.id)};n&&Ht("@mastodon/edit-media-attributes")?F.media_attributes=$.map(ne=>({id:ne.id,description:ne.description})):n||(F.visibility=_,F.in_reply_to_id=(e==null?void 0:e.id)||void 0),F=Pt(F);let P;if(n)P=await u.v1.statuses.$select(n.id).update(F),wn(P,v,{skipThreading:!0});else try{P=await u.v1.statuses.create(F,{requestInit:{headers:{"Idempotency-Key":C.current}}})}catch{P=await u.v1.statuses.create(F)}le.composerState.minimized=!1,le.composerState.publishing=!1,R("default"),s({type:n?"edit":e?"reply":"post",newStatus:P,instance:v})}catch(F){le.composerState.publishing=!1,le.composerState.publishingError=!0,alert((F==null?void 0:F.reason)||F),R("error")}})())},children:[t("div",{class:"toolbar stretch",children:[t("input",{ref:X,type:"text",name:"spoilerText",placeholder:"Content warning",disabled:g==="loading",class:"spoiler-text-field",lang:O,spellCheck:"true",dir:"auto",style:{opacity:j?1:0,pointerEvents:j?"auto":"none"},onInput:()=>{tt()}}),t("label",{class:`toolbar-button ${j?"highlight":""}`,title:"Content warning or sensitive media",children:[t("input",{name:"sensitive",type:"checkbox",checked:j,disabled:g==="loading",onChange:a=>{var b,d;const l=a.target.checked;te(l),l?(b=X.current)==null||b.focus():(d=A.current)==null||d.focus()}}),t(K,{icon:`eye-${j?"close":"open"}`})]})," ",t("label",{class:`toolbar-button ${V!=="public"&&!j?"show-field":""} ${V!=="public"?"highlight":""}`,title:`Visibility: ${V}`,children:[t(K,{icon:un[V],alt:V}),t("select",{name:"visibility",value:V,onChange:a=>{W(a.target.value)},disabled:g==="loading"||!!n,children:[t("option",{value:"public",children:["Public ",t(K,{icon:"earth"})]}),t("option",{value:"unlisted",children:"Unlisted"}),t("option",{value:"private",children:"Followers only"}),t("option",{value:"direct",children:"Private mention"})]})]})," "]}),t(ui,{ref:A,placeholder:e?"Post your reply":n?"Edit your post":"What are you doing?",required:($==null?void 0:$.length)===0,disabled:g==="loading",lang:O,onInput:()=>{tt()},maxCharacters:D,performSearch:a=>{const{type:l,q:b,limit:d}=a;return l==="accounts"?u.v1.accounts.search.list({q:b,limit:d,resolve:!1}):u.v2.search.fetch(a)},onTrigger:a=>{(a==null?void 0:a.name)==="custom-emojis"?We({defaultSearchTerm:(a==null?void 0:a.defaultSearchTerm)||null}):(a==null?void 0:a.name)==="mention"?st({defaultSearchTerm:(a==null?void 0:a.defaultSearchTerm)||null}):(a==null?void 0:a.name)==="auto-detect-language"&&(a!=null&&a.languages)&&Jt(a.languages)}}),($==null?void 0:$.length)>0&&t("div",{class:"media-attachments",children:[$.map((a,l)=>{const{id:b,file:d}=a,_=(d==null?void 0:d.size)+(d==null?void 0:d.type)+(d==null?void 0:d.name);return t(hi,{attachment:a,disabled:g==="loading",lang:O,onDescriptionChange:x=>{z(w=>{const F=[...w];return F[l].description=x,F})},onRemove:()=>{z(x=>x.filter((w,F)=>F!==l))}},b||_||l)}),t("label",{class:"media-sensitive",children:[t("input",{name:"sensitive",type:"checkbox",checked:j,disabled:g==="loading",onChange:a=>{const l=a.target.checked;te(l)}})," ",t("span",{children:"Mark media as sensitive"})," ",t(K,{icon:`eye-${j?"close":"open"}`})]})]}),!!M&&t(pi,{lang:O,maxOptions:y,maxExpiration:q,minExpiration:ue,maxCharactersPerOption:B,poll:M,disabled:g==="loading",onInput:a=>{if(a){const l={...a};L(l)}else L(null)}}),t("div",{class:"toolbar wrap",style:{justifyContent:"flex-end"},children:[t("span",{children:[t("label",{class:"toolbar-button",children:[t("input",{type:"file",accept:J.join(","),multiple:$.length=I||!!M,onChange:a=>{const l=a.target.files;if(!l)return;const b=Array.from(l).map(d=>({file:d,type:d.type,size:d.size,url:URL.createObjectURL(d),id:null,description:null}));$.length+b.length>I?alert(`You can only attach up to ${I} files.`):z(d=>d.concat(b)),a.target.value=""}}),t(K,{icon:"attachment"})]}),y==null||y>1&&t(Ce,{children:t("button",{type:"button",class:"toolbar-button",disabled:g==="loading"||!!M||!!$.length,onClick:()=>{L({options:["",""],expiresIn:24*60*60,multiple:!1})},children:t(K,{icon:"poll",alt:"Add poll"})})}),t("button",{type:"button",class:"toolbar-button",disabled:g==="loading",onClick:()=>{We(!0)},children:t(K,{icon:"emoji2"})}),!!le.settings.composerGIFPicker&&t("button",{type:"button",class:"toolbar-button gif-picker-button",disabled:g==="loading"||$.length>=I||!!M,onClick:()=>{at(!0)},children:t("span",{children:"GIF"})})]}),t("div",{class:"spacer"}),g==="loading"?t(et,{abrupt:!0}):t(di,{maxCharacters:D,hidden:g==="loading"}),t("label",{class:`toolbar-button ${O!==ae.current||me!=null&&me.length&&!me.includes(O)?"highlight":""}`,children:[t("span",{class:"icon-text",children:(Ft=Vn[O])==null?void 0:Ft.native}),t("select",{name:"language",value:O,onChange:a=>{const{value:l}=a.target;ie(l||we),ze.session.set("currentLanguage",l||we)},disabled:g==="loading",children:[Xt.map(([a,l,b])=>t("option",{value:a,children:[l," (",b,")"]},a)),t("hr",{}),Qt.map(([a,l,b])=>t("option",{value:a,children:[l," (",b,")"]},a))]})]})," ",t("button",{type:"submit",class:"large",disabled:g==="loading",children:e?"Reply":n?"Update":"Post"})]})]})]}),He&&t(Ve,{onClick:a=>{a.target===a.currentTarget&&st(!1)},children:t(mi,{masto:u,instance:v,onClose:()=>{st(!1)},defaultSearchTerm:He==null?void 0:He.defaultSearchTerm,onSelect:a=>{const l=A.current;if(!l)return;const{selectionStart:b,selectionEnd:d}=l,_=l.value,x=_.slice(0,b),w=x?/[\s\t\n\r]$/.test(x)?"":" ":"",F=_.slice(d),P=/^[\s\t\n\r]/.test(F)?"":" ",ne=x+w+"@"+a+P+F;l.value=ne,l.selectionStart=l.selectionEnd=d+1+a.length+P.length,l.focus(),l.dispatchEvent(new Event("input"))}})}),Ne&&t(Ve,{onClick:a=>{a.target===a.currentTarget&&We(!1)},children:t(gi,{masto:u,instance:v,onClose:()=>{We(!1)},defaultSearchTerm:Ne==null?void 0:Ne.defaultSearchTerm,onSelect:a=>{const l=A.current;if(!l)return;const{selectionStart:b,selectionEnd:d}=l,_=l.value,x=_.slice(0,b),w=x?/[\s\t\n\r]$/.test(x)?"":" ":"",F=_.slice(d),P=/^[\s\t\n\r]/.test(F)?"":" ",ne=x+w+a+P+F;l.value=ne,l.selectionStart=l.selectionEnd=d+a.length+P.length,l.focus(),l.dispatchEvent(new Event("input"))}})}),Zt&&t(Ve,{onClick:a=>{a.target===a.currentTarget&&at(!1)},children:t(vi,{onClose:()=>at(!1),onSelect:({url:a,type:l,alt_text:b})=>{if($.length>=I){alert(`You can only attach up to ${I} files.`);return}(async()=>{var _,x;let d;try{d=ke({text:"Downloading GIF…",duration:-1});const w=await fetch(a,{referrerPolicy:"no-referrer"}).then(ne=>ne.blob()),F=new File([w],l==="video/mp4"?"video.mp4":"image.gif",{type:l}),P=[...$,{file:F,type:l,size:F.size,id:null,description:b||""}];z(P),(_=d==null?void 0:d.hideToast)==null||_.call(d)}catch{(x=d==null?void 0:d.hideToast)==null||x.call(d),ke("Failed to download GIF")}})()}})})]})}function Dt(s){if(!s)return;const{value:e,offsetHeight:n,scrollHeight:o,clientHeight:r}=s;if(np.visibleInPicker),r=new dn(o,{keys:["shortcode"],findAllMatches:!0});return[o,r]}const Vt=kn(li,{matchesArg:(s,e)=>s.instance===e.instance,maxAge:30*60*1e3}),ci=s=>{const e=Cn(s);return e!=null&&e.length?e.slice(0,2).map(n=>n.lang):null},ui=En((s,e)=>{var J;const{masto:n,instance:o}=vt(),[r,p]=H(((J=e.current)==null?void 0:J.value)||""),{maxCharacters:u,performSearch:v=()=>{},onTrigger:g=()=>{},...R}=s,C=U();ee(()=>{Vt(o,n).then(c=>{const[h,m]=c;C.current=m}).catch(c=>{})},[]);const k=U(),S=U("");ee(()=>{let c,h,m;return k.current&&(c=f=>{var ue;const{key:E,provide:y,text:B}=f.detail;if(S.current=B,B===""){y(Promise.resolve({matched:!1}));return}if(E===":"){const A=(ue=C.current)==null?void 0:ue.search(B,{limit:5});let X="";A.forEach(({item:V})=>{const{shortcode:W,url:j}=V;X+=` -
  • - - ${be(W)} -
  • `}),X+=`
  • More…
  • `,ye.innerHTML=X,y(Promise.resolve({matched:A.length>0,fragment:ye}));return}const q={"@":"accounts","#":"hashtags"}[E];y(new Promise(A=>{v({type:q,q:B,limit:5}).then(V=>{if(B!==S.current)return;const W=V[q]||V;let j="";W.forEach(te=>{var Q;const{name:O,avatarStatic:ie,displayName:ae,username:$,acct:z,emojis:M,history:L}=te,N=hn(ae,M);if(z)j+=` -
  • - - - - - ${N||$} -
    @${be(z)} -
    -
  • - `;else{const oe=(Q=L==null?void 0:L.reduce)==null?void 0:Q.call(L,(he,ve)=>he+ +ve.uses,0);j+=` -
  • - #${be(O)} - ${oe?`${pn(oe)}`:""} -
  • - `}}),q==="accounts"&&(j+=`
  • More…
  • `),ye.innerHTML=j,A({matched:W.length>0,fragment:ye})})}))},k.current.addEventListener("text-expander-change",c),h=f=>{const{key:E,item:y}=f.detail,{value:B,more:q}=y.dataset;E===":"?(f.detail.value=B?`:${B}:`:"​",q&&(f.detail.continue=!0,setTimeout(()=>{g==null||g({name:"custom-emojis",defaultSearchTerm:q})},300))):E==="@"?(f.detail.value=B?`@${B} `:"​",q&&(f.detail.continue=!0,setTimeout(()=>{g==null||g({name:"mention",defaultSearchTerm:q})},300))):f.detail.value=`${E}${B}`},k.current.addEventListener("text-expander-value",h),m=f=>{const{input:E}=f.detail;if(p(E.value),e.current){const y=new Event("input",{bubbles:!0});e.current.dispatchEvent(y)}},k.current.addEventListener("text-expander-committed",m)),()=>{k.current&&(k.current.removeEventListener("text-expander-change",c),k.current.removeEventListener("text-expander-value",h),k.current.removeEventListener("text-expander-committed",m))}},[]),ee(()=>{const c=e.current;if(!c)return;new ResizeObserver(()=>{if(k.current){const{height:m}=c.getBoundingClientRect();k.current.style.height=m+"px"}}).observe(c)},[]);const Z=U(0),D=U(),I=mn(c=>{var f;if(!D.current)return;if(Z.current>3){D.current.innerHTML="",D.current=null,(f=I==null?void 0:I.cancel)==null||f.call(I);return}let h,m;Z.current<=3&&(h=Date.now()),D.current.innerHTML=oi(c,{maxCharacters:u})+` -`,Z.current<=3&&(m=Date.now()),h&&m&&m-h>50&&Z.current++},500),se=Qe(()=>{var f,E;const c=(f=D.current)==null?void 0:f.cloneNode(!0);if(!c)return;c.querySelectorAll("mark").forEach(y=>{y.remove()});const h=(E=c.innerText)==null?void 0:E.trim();if(!h)return;const m=ci(h);m!=null&&m.length&&(g==null||g({name:"auto-detect-language",languages:m}))},2e3);return t("text-expander",{ref:k,keys:"@ # :",class:"compose-field-container",children:[t("textarea",{class:"compose-field",autoCapitalize:"sentences",autoComplete:"on",autoCorrect:"on",spellCheck:"true",dir:"auto",rows:"6",cols:"50",...R,ref:e,name:"status",value:r,onKeyDown:c=>{const{key:h,target:m}=c;if(h==="Enter"&&!(c.ctrlKey||c.metaKey))try{const{value:f,selectionStart:E}=m,B=f.slice(0,E).split(` -`).slice(-1)[0];if(B&&/^\s*(-|\d+\.)\s/.test(B)){const[q,ue,A,X,V]=B.match(/^(\s*)(-|\d+\.)(\s+)(.+)?/)||[];if(V){c.preventDefault();const[W]=A.match(/\d+/)||[],j=W?`${+W+1}.`:"-",te=` -${ue}${j}${X}`;m.setRangeText(te,E,E);const O=E+te.length;m.setSelectionRange(O,O)}else{const W=E-B.length;m.setRangeText("",W,E)}Dt(m),m.dispatchEvent(new Event("input"))}}catch{}D.current&&(D.current.scrollTop=m.scrollTop)},onInput:c=>{var f;const{target:h}=c,m=h.value.replace(/\u200b/g,"");p(m),Dt(h),(f=s.onInput)==null||f.call(s,c),I(m),se()},style:{width:"100%",height:"4em"},onScroll:c=>{if(D.current){const{scrollTop:h}=c.target;D.current.scrollTop=h}}}),t("div",{ref:D,class:"compose-highlight","aria-hidden":"true"})]})});function di({maxCharacters:s=500,hidden:e}){const o=Fn(le).composerCharacterCount,r=s-o;return e?t("span",{class:"char-counter",hidden:!0}):t("span",{class:"char-counter",title:`${r}/${s}`,style:{"--percentage":o/s*100},children:[t("meter",{class:`${r<=-10?"explode":r<=0?"danger":r<=20?"warning":""}`,value:o,max:s}),t("span",{class:"counter",children:r})]})}function Ke(s){const e=["bytes","KB","MB","GB","TB","PB","EB","ZB","YB"];let n=0;for(;s>=1024;)s/=1024,n++;return`${s.toFixed(0).toLocaleString()} ${e[n]}`}function jt(s,e,n,o){const r=Math.sqrt(e/s),p=Math.floor(n*r),u=Math.floor(o*r);return{newWidth:p,newHeight:u}}function hi({attachment:s,disabled:e,lang:n,onDescriptionChange:o=()=>{},onRemove:r=()=>{}}){const[p,u]=H("default"),v=Ht("@mastodon/edit-media-attributes"),{type:g,id:R,file:C}=s,k=Re(()=>C?URL.createObjectURL(C):s.url,[C,s.url]),S=!!(C!=null&&C.size),Z=S?Nt():{},{mediaAttachments:{imageSizeLimit:D,imageMatrixLimit:I,videoSizeLimit:se,videoMatrixLimit:J,videoFrameRateLimit:c}={}}=Z||{},[h,m]=H(()=>S?g.startsWith("image")&&D&&C.size>D?{type:"imageSizeLimit",details:{imageSize:C.size,imageSizeLimit:D}}:g.startsWith("video")&&se&&C.size>se?{type:"videoSizeLimit",details:{videoSize:C.size,videoSizeLimit:se}}:null:null),[f,E]=H({});ee(()=>{!S||!I||(f==null?void 0:f.matrix)>I&&m({type:"imageMatrixLimit",details:{imageMatrix:f==null?void 0:f.matrix,imageMatrixLimit:I,width:f==null?void 0:f.width,height:f==null?void 0:f.height}})},[f,I,S]);const[y,B]=H({});ee(()=>{!S||!J||(y==null?void 0:y.matrix)>J&&m({type:"videoMatrixLimit",details:{videoMatrix:y==null?void 0:y.matrix,videoMatrixLimit:J,width:y==null?void 0:y.width,height:y==null?void 0:y.height}})},[y,J,S]);const[q,ue]=H(s.description),[A,X]=g.split("/"),V=Qe(o,250);ee(()=>{V(q)},[q,V]);const[W,j]=H(!1),te=U(null);ee(()=>{let z;return W&&te.current&&(z=setTimeout(()=>{te.current.focus()},100)),()=>{clearTimeout(z)}},[W]);const O=t(Ce,{children:R&&!v?t("div",{class:"media-desc",children:[t("span",{class:"tag",children:"Uploaded"}),t("p",{title:q,children:s.description||t("i",{children:"No description"})})]}):t("textarea",{ref:te,value:q||"",lang:n,placeholder:{image:"Image description",video:"Video description",audio:"Audio description"}[A],autoCapitalize:"sentences",autoComplete:"on",autoCorrect:"on",spellCheck:"true",dir:"auto",disabled:e||p==="loading",class:p==="loading"?"loading":"",maxlength:"1500",onInput:z=>{const{value:M}=z.target;ue(M)}})}),ie=U(null);ee(()=>()=>{var z,M;(M=(z=ie.current)==null?void 0:z.hideToast)==null||M.call(z)},[]);const ae=U(null),$=z=>{const{type:M,details:L}=z;switch(M){case"imageSizeLimit":{const{imageSize:N,imageSizeLimit:Q}=L;return`File size too large. Uploading might encounter issues. Try reduce the file size from ${Ke(N)} to ${Ke(Q)} or lower.`}case"imageMatrixLimit":{const{imageMatrix:N,imageMatrixLimit:Q,width:oe,height:he}=L,{newWidth:ve,newHeight:xe}=jt(N,Q,oe,he);return`Dimension too large. Uploading might encounter issues. Try reduce dimension from ${oe.toLocaleString()}×${he.toLocaleString()}px to ${ve.toLocaleString()}×${xe.toLocaleString()}px.`}case"videoSizeLimit":{const{videoSize:N,videoSizeLimit:Q}=L;return`File size too large. Uploading might encounter issues. Try reduce the file size from ${Ke(N)} to ${Ke(Q)} or lower.`}case"videoMatrixLimit":{const{videoMatrix:N,videoMatrixLimit:Q,width:oe,height:he}=L,{newWidth:ve,newHeight:xe}=jt(N,Q,oe,he);return`Dimension too large. Uploading might encounter issues. Try reduce dimension from ${oe.toLocaleString()}×${he.toLocaleString()}px to ${ve.toLocaleString()}×${xe.toLocaleString()}px.`}case"videoFrameRateLimit":return"Frame rate too high. Uploading might encounter issues."}};return t(Ce,{children:[t("div",{class:"media-attachment",children:[t("div",{class:"media-preview",tabIndex:"0",onClick:()=>{j(!0)},children:A==="image"?t("img",{src:k,alt:"",onLoad:z=>{if(!S)return;const{naturalWidth:M,naturalHeight:L}=z.target;E({matrix:M*L,width:M,height:L})}}):A==="video"||A==="gifv"?t("video",{src:k+"#t=0.1",playsinline:!0,muted:!0,disablePictureInPicture:!0,preload:"metadata",onLoadedMetadata:z=>{if(!S)return;const{videoWidth:M,videoHeight:L}=z.target;M&&L&&B({matrix:M*L,width:M,height:L})}}):A==="audio"?t("audio",{src:k,controls:!0}):null}),O,t("div",{class:"media-aside",children:[t("button",{type:"button",class:"plain close-button",disabled:e,onClick:r,children:t(K,{icon:"x"})}),!!h&&t("button",{type:"button",class:"media-error",title:$(h),onClick:()=>{ae.current&&ae.current.hideToast(),ae.current=ke({text:$(h),duration:1e4})},children:t(K,{icon:"alert"})})]})]}),W&&t(Ve,{onClick:z=>{z.target===z.currentTarget&&j(!1)},children:t("div",{id:"media-sheet",class:"sheet sheet-max",children:[t("button",{type:"button",class:"sheet-close",onClick:()=>{j(!1)},children:t(K,{icon:"x"})}),t("header",{children:t("h2",{children:{image:"Edit image description",video:"Edit video description",audio:"Edit audio description"}[A]})}),t("main",{tabIndex:"-1",children:[t("div",{class:"media-preview",children:A==="image"?t("img",{src:k,alt:""}):A==="video"||A==="gifv"?t("video",{src:k,playsinline:!0,controls:!0}):A==="audio"?t("audio",{src:k,controls:!0}):null}),t("div",{class:"media-form",children:[O,t("footer",{children:[A==="image"&&/^(png|jpe?g|gif|webp)$/i.test(X)&&!!le.settings.mediaAltGenerator&&!!ut&&t(gn,{portal:{target:document.body},containerProps:{style:{zIndex:1001}},align:"center",position:"anchor",overflow:"auto",menuButton:t("button",{type:"button",title:"More",class:"plain",children:t(K,{icon:"more",size:"l",alt:"More"})}),children:[t(St,{disabled:p==="loading",onClick:()=>{u("loading"),ie.current=ke({text:"Generating description. Please wait...",duration:-1}),async function(){var z,M;try{const L=new FormData;L.append("image",C);const N=await fetch(ut,{method:"POST",body:L}).then(Q=>Q.json());if(N.error)throw new Error(N.error);ue(N.description)}catch(L){ke(`Failed to generate description${L!=null&&L.message?`: ${L.message}`:""}`)}finally{u("default"),(M=(z=ie.current)==null?void 0:z.hideToast)==null||M.call(z)}}()},children:[t(K,{icon:"sparkles2"}),n&&n!=="en"?t("small",{children:["Generate description…",t("br",{}),"(English)"]}):t("span",{children:"Generate description…"})]}),!!n&&n!=="en"&&t(St,{disabled:p==="loading",onClick:()=>{u("loading"),ie.current=ke({text:"Generating description. Please wait...",duration:-1}),async function(){var z,M;try{const L=new FormData;L.append("image",C);const N=`?lang=${n}`,Q=await fetch(ut+N,{method:"POST",body:L}).then(oe=>oe.json());if(Q.error)throw new Error(Q.error);ue(Q.description)}catch(L){ke(`Failed to generate description${L!=null&&L.message?`: ${L.message}`:""}`)}finally{u("default"),(M=(z=ie.current)==null?void 0:z.hideToast)==null||M.call(z)}}()},children:[t(K,{icon:"sparkles2"}),t("small",{children:["Generate description…",t("br",{}),"(",fn(n),")"," ",t("span",{class:"more-insignificant",children:"— experimental"})]})]})]}),t("button",{type:"button",class:"light block",onClick:()=>{j(!1)},disabled:p==="loading",children:"Done"})]})]})]})]})})]})}function pi({lang:s,poll:e,disabled:n,onInput:o=()=>{},maxOptions:r,maxExpiration:p,minExpiration:u,maxCharactersPerOption:v}){const{options:g,expiresIn:R,multiple:C}=e;return t("div",{class:`poll ${C?"multiple":""}`,children:[t("div",{class:"poll-choices",children:g.map((k,S)=>t("div",{class:"poll-choice",children:[t("input",{required:!0,type:"text",value:k,disabled:n,maxlength:v,placeholder:`Choice ${S+1}`,lang:s,spellCheck:"true",dir:"auto",onInput:Z=>{const{value:D}=Z.target;g[S]=D,o(e)}}),t("button",{type:"button",class:"plain2 poll-button",disabled:n||g.length<=1,onClick:()=>{g.splice(S,1),o(e)},children:t(K,{icon:"x",size:"s"})})]},S))}),t("div",{class:"poll-toolbar",children:[t("button",{type:"button",class:"plain2 poll-button",disabled:n||g.length>=r,onClick:()=>{g.push(""),o(e)},children:"+"})," ",t("label",{class:"multiple-choices",children:[t("input",{type:"checkbox",checked:C,disabled:n,onChange:k=>{const{checked:S}=k.target;e.multiple=S,o(e)}})," ","Multiple choices"]}),t("label",{class:"expires-in",children:["Duration"," ",t("select",{value:R,disabled:n,onChange:k=>{const{value:S}=k.target;e.expiresIn=S,o(e)},children:Object.entries(qt).filter(([k,S])=>S>=u&&S<=p).map(([k,S])=>t("option",{value:S,children:k},S))})]})]}),t("div",{class:"poll-toolbar",children:t("button",{type:"button",class:"plain remove-poll-button",disabled:n,onClick:()=>{o(null)},children:"Remove poll"})})]})}function be(s){return s.replace(/[&<>"']/g,function(e){return"&#"+e.charCodeAt(0)+";"})}function Pt(s){for(let e in s)(s[e]===null||s[e]===void 0)&&delete s[e];return s}function mi({onClose:s=()=>{},onSelect:e=()=>{},defaultSearchTerm:n}){const{masto:o}=vt(),[r,p]=H("default"),[u,v]=H([]),[g,R]=H({}),[C,k]=H(0),S=async c=>{if(!(c!=null&&c.length))return;const h=await vn(c,g);h&&R({...g,...h})},Z=c=>{c&&(p("loading"),(async()=>{try{const h=await o.v1.accounts.search.list({q:c,limit:40,resolve:!1});v(h),S(h),p("default")}catch{p("error")}})())},D=Qe(Z,1e3);ee(()=>{Z()},[Z]);const I=U();ee(()=>{I.current&&(I.current.focus(),I.current.value&&(I.current.selectionStart=I.current.value.length,I.current.selectionEnd=I.current.value.length))},[]),ee(()=>{n&&Z(n)},[n]);const se=c=>{const h=c.acct;e(h),s()};_e("enter",()=>{const c=u[C];c&&se(c)},{preventDefault:!0,enableOnFormTags:["input"]});const J=U();return _e("down",()=>{C{const c=J.current.querySelector(".selected");c&&c.scrollIntoView({behavior:"smooth",block:"center",inline:"center"})},1)},{preventDefault:!0,enableOnFormTags:["input"]}),_e("up",()=>{C>0?k(C-1):k(u.length-1),setTimeout(()=>{const c=J.current.querySelector(".selected");c&&c.scrollIntoView({behavior:"smooth",block:"center",inline:"center"})},1)},{preventDefault:!0,enableOnFormTags:["input"]}),t("div",{id:"mention-sheet",class:"sheet",children:[!!s&&t("button",{type:"button",class:"sheet-close",onClick:s,children:t(K,{icon:"x"})}),t("header",{children:t("form",{onSubmit:c=>{var h;c.preventDefault(),(h=D.flush)==null||h.call(D)},children:t("input",{ref:I,required:!0,type:"search",class:"block",placeholder:"Search accounts",onInput:c=>{const{value:h}=c.target;D(h)},autocomplete:"off",autocorrect:"off",autocapitalize:"off",spellCheck:"false",dir:"auto",defaultValue:n||""})})}),t("main",{children:(u==null?void 0:u.length)>0?t("ul",{ref:J,class:`accounts-list ${r==="loading"?"loading":""}`,children:u.map((c,h)=>{const m=g[c.id];return t("li",{class:h===C?"selected":"",children:[t(Ot,{avatarSize:"xxl",account:c,relationship:m,showStats:!0,showActivity:!0}),t("button",{type:"button",class:"plain2",onClick:()=>{se(c)},children:t(K,{icon:"plus",size:"xl"})})]},c.id)})}):r==="loading"?t("div",{class:"ui-state",children:t(et,{abrupt:!0})}):r==="error"?t("div",{class:"ui-state",children:t("p",{children:"Error loading accounts"})}):null})]})}function gi({masto:s,instance:e,onClose:n=()=>{},onSelect:o=()=>{},defaultSearchTerm:r}){const[p,u]=H("default"),v=U([]),[g,R]=H([]),C=Re(()=>ze.account.get("recentlyUsedCustomEmojis")||[]),k=U();ee(()=>{u("loading"),(async()=>{try{const[h,m]=await Vt(e,s);k.current=m,R(h),u("default")}catch{u("error")}})()},[]);const S=Re(()=>{const h={"--recent--":C.filter(f=>g.find(E=>E.shortcode===f.shortcode))},m=[];return g.forEach(f=>{var E,y;if((y=(E=v.current)==null?void 0:E.push)==null||y.call(E,f),!f.category){m.push(f);return}h[f.category]||(h[f.category]=[]),h[f.category].push(f)}),m.length&&(h["--others--"]=m),h},[g]),Z=U(),[D,I]=H(null),se=At(h=>{var f,E,y;const{value:m}=h.target;if(m){const B=(f=k.current)==null?void 0:f.search(m,{limit:ft});I(B.map(q=>q.item)),(y=(E=Z.current)==null?void 0:E.scrollTo)==null||y.call(E,0,0)}else I(null)},[g]);ee(()=>{r&&(g!=null&&g.length)&&se({target:{value:r}})},[r,se,g]);const J=At(h=>{o==null||o(h),n==null||n(),queueMicrotask(()=>{let m=ze.account.get("recentlyUsedCustomEmojis")||[];const f=m.findIndex(E=>E.shortcode===h.shortcode);f!==-1?(m.splice(f,1),m.unshift(h)):(m.unshift(h),m=m.filter(E=>{var y,B;return(B=(y=v.current)==null?void 0:y.find)==null?void 0:B.call(y,q=>q.shortcode===E.shortcode)}),m=m.slice(0,10)),ze.account.set("recentlyUsedCustomEmojis",m)})},[o]),c=U();return ee(()=>{c.current&&(c.current.focus(),c.current.value&&(c.current.selectionStart=c.current.value.length,c.current.selectionEnd=c.current.value.length))},[]),t("div",{id:"custom-emojis-sheet",class:"sheet",children:[!!n&&t("button",{type:"button",class:"sheet-close",onClick:n,children:t(K,{icon:"x"})}),t("header",{children:[t("div",{children:[t("b",{children:"Custom emojis"})," ",p==="loading"?t(et,{}):t("small",{class:"insignificant",children:[" • ",e]})]}),t("form",{onSubmit:h=>{h.preventDefault();const m=D[0];m&&J(`:${m.shortcode}:`)},children:t("input",{ref:c,type:"search",placeholder:"Search emoji",onInput:se,autocomplete:"off",autocorrect:"off",autocapitalize:"off",spellCheck:"false",dir:"auto",defaultValue:r||""})})]}),t("main",{ref:Z,children:D!==null?t("ul",{class:"custom-emojis-matches custom-emojis-list",children:D.map(h=>t("li",{class:"custom-emojis-match",children:t(Gt,{emoji:h,onClick:()=>{J(`:${h.shortcode}:`)},showCode:!0})},h.shortcode))}):t("div",{class:"custom-emojis-list",children:[p==="error"&&t("div",{class:"ui-state",children:t("p",{children:"Error loading custom emojis"})}),p==="default"&&Object.entries(S).map(([h,m])=>!!(m!=null&&m.length)&&t(Ce,{children:[t("div",{class:"section-header",children:{"--recent--":"Recently used","--others--":"Others"}[h]||h}),t(fi,{emojis:m,onSelect:J})]}))]})})]})}const fi=Wt(({emojis:s,onSelect:e})=>{const[n,o]=H(ft),r=s.length>n;return t("section",{children:[s.slice(0,n).map(p=>t(Gt,{emoji:p,onClick:()=>{e(`:${p.shortcode}:`)}},p.shortcode)),r&&t("button",{type:"button",class:"plain small",onClick:()=>o(n+ft),children:[(s.length-n).toLocaleString()," more…"]})]})}),Gt=Wt(({emoji:s,onClick:e,showCode:n})=>{const o=r=>{const u=r.currentTarget.closest("main");if(u){const v=u.getBoundingClientRect(),g=r.currentTarget.getBoundingClientRect(),R=r.currentTarget.classList;g.leftv.right-88?(R.add("edge-right"),R.remove("edge-left")):R.remove("edge-left","edge-right")}};return t("button",{type:"button",className:"plain4",onClick:e,"data-title":n?void 0:s.shortcode,onPointerEnter:o,onFocus:o,children:[t("picture",{children:[!!s.staticUrl&&t("source",{srcSet:s.staticUrl,media:"(prefers-reduced-motion: reduce)"}),t("img",{className:"shortcode-emoji",src:s.url||s.staticUrl,alt:s.shortcode,width:"24",height:"24",loading:"lazy",decoding:"async"})]}),n&&t(Ce,{children:[" ",t("code",{children:s.shortcode})]})]})}),dt=20;function vi({onClose:s=()=>{},onSelect:e=()=>{}}){var S,Z,D,I,se,J;const[n,o]=H("default"),[r,p]=H([]),u=U(null),v=U(null),g=U(0),R=U(null);function C({offset:c}){var h,m,f;(h=v.current)!=null&&h.value&&(o("loading"),(f=(m=R.current)==null?void 0:m.scrollTo)==null||f.call(m,{top:0,left:0,behavior:"smooth"}),(async()=>{var E;try{const y={api_key:Kn,q:v.current.value,rating:"g",limit:dt,bundle:"messaging_non_clips",offset:c},B=await fetch("https://api.giphy.com/v1/gifs/search?"+new URLSearchParams(y),{referrerPolicy:"no-referrer"}).then(q=>q.json());g.current=((E=B.pagination)==null?void 0:E.offset)||0,p(B),o("results")}catch{o("error")}})())}ee(()=>{var c;(c=v.current)==null||c.focus()},[]);const k=Qe(()=>{C({offset:0})},1e3);return t("div",{id:"gif-picker-sheet",class:"sheet",children:[!!s&&t("button",{type:"button",class:"sheet-close",onClick:s,children:t(K,{icon:"x"})}),t("header",{children:t("form",{ref:u,onSubmit:c=>{c.preventDefault(),C({offset:0})},children:[t("input",{ref:v,type:"search",name:"q",placeholder:"Search GIFs",required:!0,autocomplete:"off",autocorrect:"off",autocapitalize:"off",spellCheck:"false",dir:"auto",onInput:k}),t("input",{type:"image",class:"powered-button",src:Nn,width:"86",height:"30"})]})}),t("main",{ref:R,class:n==="loading"?"loading":"",children:[n==="default"&&t("div",{class:"ui-state",children:t("p",{class:"insignificant",children:"Type to search GIFs"})}),n==="loading"&&!((S=r==null?void 0:r.data)!=null&&S.length)&&t("div",{class:"ui-state",children:t(et,{abrupt:!0})}),((Z=r==null?void 0:r.data)==null?void 0:Z.length)>0?t(Ce,{children:[t("ul",{children:r.data.map(c=>{const{id:h,images:m,title:f,alt_text:E}=c,{fixed_height_small:y,fixed_height_downsampled:B,fixed_height:q,original:ue}=m,A=y!=null&&y.url?y:B!=null&&B.url?B:q;let{url:X,webp:V,width:W,height:j}=A;+j>100&&(W=W/j*100,j=100);const te=URL.parse(X),O=te.origin+te.pathname;let ie;if(V){const ae=URL.parse(V);ie=ae.origin+ae.pathname}return t("li",{children:t("button",{type:"button",onClick:()=>{const{mp4:ae,url:$}=ue,z=ae||$,M=URL.parse(z),L=M.origin+M.pathname;s(),e({url:L,type:ae?"video/mp4":"image/gif",alt_text:E||f})},children:t("figure",{style:{"--figure-width":W+"px"},children:[t("picture",{children:[ie&&t("source",{srcset:ie,type:"image/webp"}),t("img",{src:O,width:W,height:j,loading:"lazy",decoding:"async",alt:E,referrerpolicy:"no-referrer",onLoad:ae=>{ae.target.style.backgroundColor="transparent"}})]}),t("figcaption",{children:E||f})]})})},h)})}),t("p",{class:"pagination",children:[((D=r.pagination)==null?void 0:D.offset)>0&&t("button",{type:"button",class:"light small",disabled:n==="loading",onClick:()=>{var c;C({offset:((c=r.pagination)==null?void 0:c.offset)-dt})},children:[t(K,{icon:"chevron-left"}),t("span",{children:"Previous"})]}),t("span",{}),((I=r.pagination)==null?void 0:I.offset)+((se=r.pagination)==null?void 0:se.count)<((J=r.pagination)==null?void 0:J.total_count)&&t("button",{type:"button",class:"light small",disabled:n==="loading",onClick:()=>{var c;C({offset:((c=r.pagination)==null?void 0:c.offset)+dt})},children:[t("span",{children:"Next"})," ",t(K,{icon:"chevron-right"})]})]})]}):n==="results"&&t("div",{class:"ui-state",children:t("p",{children:"No results"})}),n==="error"&&t("div",{class:"ui-state",children:t("p",{children:"Error loading GIFs"})})]})]})}export{Ei as default}; -//# sourceMappingURL=compose-nqnue7DX.js.map diff --git a/assets/compose-nqnue7DX.js.map b/assets/compose-nqnue7DX.js.map deleted file mode 100644 index 0505965..0000000 --- a/assets/compose-nqnue7DX.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"compose-nqnue7DX.js","sources":["../../node_modules/@github/combobox-nav/dist/index.js","../../node_modules/@github/text-expander-element/dist/index.js","../../node_modules/ansi-regex/index.js","../../node_modules/strip-ansi/index.js","../../node_modules/string-length/index.js","../../src/assets/powered-by-giphy.svg","../../src/components/compose.jsx"],"sourcesContent":["export default class Combobox {\n constructor(input, list, { tabInsertsSuggestions, defaultFirstOption } = {}) {\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.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 scrollTo(this.list, target);\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);\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) {\n target.dispatchEvent(new CustomEvent('combobox-commit', { 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}\nfunction scrollTo(container, target) {\n if (!inViewport(container, target)) {\n container.scrollTop = target.offsetTop;\n }\n}\nfunction inViewport(container, element) {\n const scrollTop = container.scrollTop;\n const containerBottom = scrollTop + container.clientHeight;\n const top = element.offsetTop;\n const bottom = top + element.clientHeight;\n return top >= scrollTop && bottom <= containerBottom;\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\n/**\n * A custom element is implemented as a class which extends HTMLElement (in the\n * case of autonomous elements) or the interface you want to customize (in the\n * case of customized built-in elements).\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Web_components/Using_custom_elements#custom_element_lifecycle_callbacks\n */\nclass CustomHTMLElement extends HTMLElement {\n}\n\nclass InputStyleCloneUpdateEvent extends Event {\n constructor() {\n super(\"update\");\n }\n}\nconst CloneRegistry = new WeakMap();\n/**\n * Create 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 InputStyleCloneElement extends CustomHTMLElement {\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;\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.\n *\n * Upon initial creation the clone element will automatically be inserted into the DOM and begin observing the\n * linked input. Only one clone per input can ever exist at a time.\n * @param input The target input to clone.\n */\n static for(input) {\n const clone = CloneRegistry.get(input) ?? new InputStyleCloneElement(input);\n CloneRegistry.set(input, clone);\n return clone;\n }\n /**\n * Avoid constructing directly: Use `InputStyleCloneElement.for` instead.\n * @private\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 = document.createElement(\"div\");\n this.#container.style.position = \"absolute\";\n this.#container.style.pointerEvents = \"none\";\n input.after(this.#container);\n this.#container.appendChild(this);\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 /** @private */\n connectedCallback() {\n const input = this.#inputRef.deref();\n if (!input)\n return this.remove();\n this.style.pointerEvents = \"none\";\n this.style.userSelect = \"none\";\n this.style.overflow = \"hidden\";\n this.style.display = \"block\";\n // Important not to use display:none which would not render the content at all\n this.style.visibility = \"hidden\";\n if (input instanceof HTMLTextAreaElement) {\n this.style.whiteSpace = \"pre-wrap\";\n this.style.wordWrap = \"break-word\";\n }\n else {\n this.style.whiteSpace = \"nowrap\";\n // text in single-line inputs is vertically centered\n this.style.display = \"table-cell\";\n this.style.verticalAlign = \"middle\";\n }\n this.setAttribute(\"aria-hidden\", \"true\");\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 /** @private */\n disconnectedCallback() {\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 const input = this.#inputRef.deref();\n if (input) {\n input.removeEventListener(\"input\", this.#onInput, { capture: true });\n CloneRegistry.delete(input);\n }\n }\n // --- private ---\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.#inputRef.deref();\n if (!input)\n return this.remove();\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.style.height = inputStyle.height;\n this.style.width = inputStyle.width;\n // Immediately re-adjust for browser inconsistencies in scrollbar handling, if necessary\n if (input.clientHeight !== this.clientHeight)\n this.style.height = `calc(${inputStyle.height} + ${input.clientHeight - this.clientHeight}px)`;\n if (input.clientWidth !== this.clientWidth)\n this.style.width = `calc(${inputStyle.width} + ${input.clientWidth - this.clientWidth}px)`;\n // Position on top of the input\n const inputRect = input.getBoundingClientRect();\n const cloneRect = this.getBoundingClientRect();\n this.#xOffset = this.#xOffset + inputRect.left - cloneRect.left;\n this.#yOffset = this.#yOffset + inputRect.top - cloneRect.top;\n this.style.transform = `translate(${this.#xOffset}px, ${this.#yOffset}px)`;\n this.scrollTop = input.scrollTop;\n this.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.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.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// Inspired by https://github.com/github/catalyst/blob/dc284dcf4f82329a9cac5c867462a8fa529b6c40/src/register.ts\ntry {\n customElements.define(\"input-style-clone\", InputStyleCloneElement);\n}\ncatch (e) {\n // Throws DOMException with NotSupportedError if already defined\n if (!(e instanceof DOMException && e.name === \"NotSupportedError\"))\n throw e;\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 InputStyleCloneElement.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.childNodes[0];\n if (textNode) {\n range.setStart(textNode, this.startOffset);\n range.setEnd(textNode, this.endOffset);\n }\n return range;\n }\n}\n\nconst states = new WeakMap();\nclass TextExpander {\n constructor(expander, input) {\n this.expander = expander;\n this.input = input;\n this.combobox = null;\n this.menu = null;\n this.match = null;\n this.justPasted = false;\n this.lookBackIndex = 0;\n this.oninput = this.onInput.bind(this);\n this.onpaste = this.onPaste.bind(this);\n this.onkeydown = this.onKeydown.bind(this);\n this.oncommit = this.onCommit.bind(this);\n this.onmousedown = this.onMousedown.bind(this);\n this.onblur = this.onBlur.bind(this);\n this.interactingWithList = false;\n input.addEventListener('paste', this.onpaste);\n input.addEventListener('input', this.oninput);\n input.addEventListener('keydown', this.onkeydown);\n input.addEventListener('blur', this.onblur);\n }\n destroy() {\n this.input.removeEventListener('paste', this.onpaste);\n this.input.removeEventListener('input', this.oninput);\n this.input.removeEventListener('keydown', this.onkeydown);\n this.input.removeEventListener('blur', this.onblur);\n }\n dismissMenu() {\n if (this.deactivate()) {\n this.lookBackIndex = this.input.selectionEnd || this.lookBackIndex;\n }\n }\n activate(match, menu) {\n var _a, _b;\n if (this.input !== document.activeElement && this.input !== ((_b = (_a = document.activeElement) === null || _a === void 0 ? void 0 : _a.shadowRoot) === null || _b === void 0 ? void 0 : _b.activeElement)) {\n return;\n }\n this.deactivate();\n this.menu = menu;\n if (!menu.id)\n menu.id = `text-expander-${Math.floor(Math.random() * 100000).toString()}`;\n this.expander.append(menu);\n this.combobox = new Combobox(this.input, menu);\n this.expander.dispatchEvent(new Event('text-expander-activate'));\n this.positionMenu(menu, match.position);\n this.combobox.start();\n menu.addEventListener('combobox-commit', this.oncommit);\n menu.addEventListener('mousedown', this.onmousedown);\n this.combobox.navigate(1);\n }\n positionMenu(menu, position) {\n const caretRect = new InputRange(this.input, position).getBoundingClientRect();\n const targetPosition = { left: caretRect.left, top: caretRect.top + caretRect.height };\n const currentPosition = menu.getBoundingClientRect();\n const delta = {\n left: targetPosition.left - currentPosition.left,\n top: targetPosition.top - currentPosition.top\n };\n if (delta.left !== 0 || delta.top !== 0) {\n const currentStyle = getComputedStyle(menu);\n menu.style.left = currentStyle.left ? `calc(${currentStyle.left} + ${delta.left}px)` : `${delta.left}px`;\n menu.style.top = currentStyle.top ? `calc(${currentStyle.top} + ${delta.top}px)` : `${delta.top}px`;\n }\n }\n deactivate() {\n const menu = this.menu;\n if (!menu || !this.combobox)\n return false;\n this.expander.dispatchEvent(new Event('text-expander-deactivate'));\n this.menu = null;\n menu.removeEventListener('combobox-commit', this.oncommit);\n menu.removeEventListener('mousedown', this.onmousedown);\n this.combobox.destroy();\n this.combobox = null;\n menu.remove();\n return true;\n }\n onCommit({ target }) {\n var _a;\n const item = target;\n if (!(item instanceof HTMLElement))\n return;\n if (!this.combobox)\n return;\n const match = this.match;\n if (!match)\n return;\n const beginning = this.input.value.substring(0, match.position - match.key.length);\n const remaining = this.input.value.substring(match.position + match.text.length);\n const detail = { item, key: match.key, value: null, continue: false };\n const canceled = !this.expander.dispatchEvent(new CustomEvent('text-expander-value', { cancelable: true, detail }));\n if (canceled)\n return;\n if (!detail.value)\n return;\n let suffix = (_a = this.expander.getAttribute('suffix')) !== null && _a !== void 0 ? _a : ' ';\n if (detail.continue) {\n suffix = '';\n }\n const value = `${detail.value}${suffix}`;\n this.input.value = beginning + value + remaining;\n const cursor = beginning.length + value.length;\n this.deactivate();\n this.input.focus({\n preventScroll: true\n });\n this.input.selectionStart = cursor;\n this.input.selectionEnd = cursor;\n if (!detail.continue) {\n this.lookBackIndex = cursor;\n this.match = null;\n }\n this.expander.dispatchEvent(new CustomEvent('text-expander-committed', { cancelable: false, detail: { input: this.input } }));\n }\n onBlur() {\n if (this.interactingWithList) {\n this.interactingWithList = false;\n return;\n }\n this.deactivate();\n }\n onPaste() {\n this.justPasted = true;\n }\n async onInput() {\n if (this.justPasted) {\n this.justPasted = false;\n return;\n }\n const match = this.findMatch();\n if (match) {\n this.match = match;\n const menu = await this.notifyProviders(match);\n if (!this.match)\n return;\n if (menu) {\n this.activate(match, menu);\n }\n else {\n this.deactivate();\n }\n }\n else {\n this.match = null;\n this.deactivate();\n }\n }\n findMatch() {\n const cursor = this.input.selectionEnd || 0;\n const text = this.input.value;\n if (cursor <= this.lookBackIndex) {\n this.lookBackIndex = cursor - 1;\n }\n for (const { key, multiWord } of this.expander.keys) {\n const found = query(text, key, cursor, {\n multiWord,\n lookBackIndex: this.lookBackIndex,\n lastMatchPosition: this.match ? this.match.position : null\n });\n if (found) {\n return { text: found.text, key, position: found.position };\n }\n }\n }\n async notifyProviders(match) {\n const providers = [];\n const provide = (result) => providers.push(result);\n const canceled = !this.expander.dispatchEvent(new CustomEvent('text-expander-change', { cancelable: true, detail: { provide, text: match.text, key: match.key } }));\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 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 default TextExpanderElement;\n","export default function ansiRegex({onlyFirst = false} = {}) {\n\tconst pattern = [\n\t '[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)',\n\t\t'(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-ntqry=><~]))'\n\t].join('|');\n\n\treturn new RegExp(pattern, onlyFirst ? undefined : 'g');\n}\n","import ansiRegex from 'ansi-regex';\n\nconst regex = ansiRegex();\n\nexport default function stripAnsi(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError(`Expected a \\`string\\`, got \\`${typeof string}\\``);\n\t}\n\n\t// Even though the regex is global, we don't need to reset the `.lastIndex`\n\t// because unlike `.exec()` and `.test()`, `.replace()` does it automatically\n\t// and doing it manually has a performance penalty.\n\treturn string.replace(regex, '');\n}\n","import stripAnsi from 'strip-ansi';\n\nconst segmenter = new Intl.Segmenter();\n\nexport default function stringLength(string, {countAnsiEscapeCodes = false} = {}) {\n\tif (string === '') {\n\t\treturn 0;\n\t}\n\n\tif (!countAnsiEscapeCodes) {\n\t\tstring = stripAnsi(string);\n\t}\n\n\tif (string === '') {\n\t\treturn 0;\n\t}\n\n\tlet length = 0;\n\n\tfor (const _ of segmenter.segment(string)) { // eslint-disable-line no-unused-vars\n\t\tlength++;\n\t}\n\n\treturn length;\n}\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 './compose.css';\n\nimport '@github/text-expander-element';\nimport { MenuItem } from '@szhsin/react-menu';\nimport { deepEqual } from 'fast-equals';\nimport Fuse from 'fuse.js';\nimport { memo } from 'preact/compat';\nimport { forwardRef } from 'preact/compat';\nimport {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'preact/hooks';\nimport { useHotkeys } from 'react-hotkeys-hook';\nimport stringLength from 'string-length';\nimport { detectAll } from 'tinyld/light';\nimport { uid } from 'uid/single';\nimport { useDebouncedCallback, useThrottledCallback } from 'use-debounce';\nimport { useSnapshot } from 'valtio';\n\nimport poweredByGiphyURL from '../assets/powered-by-giphy.svg';\n\nimport Menu2 from '../components/menu2';\nimport supportedLanguages from '../data/status-supported-languages';\nimport urlRegex from '../data/url-regex';\nimport { api } from '../utils/api';\nimport db from '../utils/db';\nimport emojifyText from '../utils/emojify-text';\nimport localeMatch from '../utils/locale-match';\nimport localeCode2Text from '../utils/localeCode2Text';\nimport openCompose from '../utils/open-compose';\nimport pmem from '../utils/pmem';\nimport { fetchRelationships } from '../utils/relationships';\nimport shortenNumber from '../utils/shorten-number';\nimport showToast from '../utils/show-toast';\nimport states, { saveStatus } from '../utils/states';\nimport store from '../utils/store';\nimport {\n getCurrentAccount,\n getCurrentAccountNS,\n getCurrentInstance,\n getCurrentInstanceConfiguration,\n} from '../utils/store-utils';\nimport supports from '../utils/supports';\nimport useCloseWatcher from '../utils/useCloseWatcher';\nimport useInterval from '../utils/useInterval';\nimport visibilityIconsMap from '../utils/visibility-icons-map';\n\nimport AccountBlock from './account-block';\n// import Avatar from './avatar';\nimport Icon from './icon';\nimport Loader from './loader';\nimport Modal from './modal';\nimport Status from './status';\n\nconst {\n PHANPY_IMG_ALT_API_URL: IMG_ALT_API_URL,\n PHANPY_GIPHY_API_KEY: GIPHY_API_KEY,\n} = import.meta.env;\n\nconst supportedLanguagesMap = supportedLanguages.reduce((acc, l) => {\n const [code, common, native] = l;\n acc[code] = {\n common,\n native,\n };\n return acc;\n}, {});\n\n/* NOTES:\n - Max character limit includes BOTH status text and Content Warning text\n*/\n\nconst expiryOptions = {\n '5 minutes': 5 * 60,\n '30 minutes': 30 * 60,\n '1 hour': 60 * 60,\n '6 hours': 6 * 60 * 60,\n '12 hours': 12 * 60 * 60,\n '1 day': 24 * 60 * 60,\n '3 days': 3 * 24 * 60 * 60,\n '7 days': 7 * 24 * 60 * 60,\n};\nconst expirySeconds = Object.values(expiryOptions);\nconst oneDay = 24 * 60 * 60;\n\nconst expiresInFromExpiresAt = (expiresAt) => {\n if (!expiresAt) return oneDay;\n const delta = (new Date(expiresAt).getTime() - Date.now()) / 1000;\n return expirySeconds.find((s) => s >= delta) || oneDay;\n};\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 menu.style.left = innerWidth - width - windowMargin + 'px';\n }\n }\n });\n});\nobserver.observe(menu);\n\nconst DEFAULT_LANG = localeMatch(\n [new Intl.DateTimeFormat().resolvedOptions().locale, ...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 urlRegexObj = new RegExp(urlRegex.source, urlRegex.flags);\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// 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])(#[a-z0-9_]+([a-z0-9_.]+[a-z0-9_]+)?)(?![\\\\/\\\\w])`,\n 'ig',\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();\nfunction highlightText(text, { maxCharacters = Infinity }) {\n // Accept text string, return formatted HTML string\n // Escape all HTML special characters\n let html = text\n .replace(/&/g, '&')\n .replace(//g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n\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(html);\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 '' +\n exceedLimitHTML +\n '';\n }\n return withinLimitHTML + exceedLimitHTML;\n }\n\n return html\n .replace(urlRegexObj, '$2$3') // URLs\n .replace(MENTION_RE, '$1$2') // Mentions\n .replace(HASHTAG_RE, '$1$2') // Hashtags\n .replace(\n SCAN_RE,\n '$1$2',\n ); // Emoji shortcodes\n}\n\nconst rtf = new Intl.RelativeTimeFormat();\n\nconst CUSTOM_EMOJIS_COUNT = 100;\n\nfunction Compose({\n onClose,\n replyToStatus,\n editStatus,\n draftStatus,\n standalone,\n hasOpener,\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 = 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,\n charactersReservedPerUrl,\n } = {},\n mediaAttachments: {\n supportedMimeTypes = [],\n imageSizeLimit,\n imageMatrixLimit,\n videoSizeLimit,\n videoMatrixLimit,\n videoFrameRateLimit,\n } = {},\n polls: {\n maxOptions,\n maxCharactersPerOption,\n maxExpiration,\n minExpiration,\n } = {},\n } = configuration || {};\n\n const textareaRef = useRef();\n const spoilerTextRef = useRef();\n const [visibility, setVisibility] = useState('public');\n const [sensitive, setSensitive] = 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\n const prefs = store.account.get('preferences') || {};\n\n const oninputTextarea = () => {\n if (!textareaRef.current) return;\n textareaRef.current.dispatchEvent(new Event('input'));\n };\n const focusTextarea = () => {\n setTimeout(() => {\n if (!textareaRef.current) return;\n // status starts with newline, focus on first position\n if (draftStatus?.status?.startsWith?.('\\n')) {\n textareaRef.current.selectionStart = 0;\n textareaRef.current.selectionEnd = 0;\n }\n console.debug('FOCUS textarea');\n textareaRef.current?.focus();\n }, 300);\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 if (allMentions.length > 0) {\n textareaRef.current.value = `${allMentions\n .map((m) => `@${m}`)\n .join(' ')} `;\n oninputTextarea();\n }\n focusTextarea();\n setVisibility(\n visibility === 'public' && prefs['posting:default:visibility']\n ? prefs['posting:default:visibility']\n : visibility,\n );\n setLanguage(language || prefs.postingDefaultLanguage || DEFAULT_LANG);\n setSensitive(sensitive && !!spoilerText);\n } else if (editStatus) {\n const { visibility, language, sensitive, poll, mediaAttachments } =\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(language || presf.postingDefaultLanguage || DEFAULT_LANG);\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']);\n }\n if (prefs['posting:default:language']) {\n setLanguage(prefs['posting:default:language']);\n }\n if (prefs['posting:default:sensitive']) {\n setSensitive(prefs['posting:default:sensitive']);\n }\n }\n if (draftStatus) {\n const {\n status,\n spoilerText,\n visibility,\n language,\n sensitive,\n poll,\n mediaAttachments,\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 focusTextarea();\n if (spoilerText) spoilerTextRef.current.value = spoilerText;\n if (visibility) setVisibility(visibility);\n setLanguage(language || prefs.postingDefaultLanguage || DEFAULT_LANG);\n if (sensitive !== null) setSensitive(sensitive);\n if (composablePoll) setPoll(composablePoll);\n if (mediaAttachments) setMediaAttachments(mediaAttachments);\n }\n }, [draftStatus, editStatus, replyToStatus]);\n\n const formRef = useRef();\n\n const beforeUnloadCopy = '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\", including multiple mentions like \"@username1@username2\"\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 },\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 hasModal && !hasOnlyComposer;\n },\n },\n );\n useCloseWatcher(() => {\n if (!standalone && confirmClose()) {\n onClose();\n }\n }, [standalone, confirmClose, onClose]);\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 poll,\n mediaAttachments,\n },\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 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 const file = item.getAsFile();\n if (file && supportedMimeTypes.includes(file.type)) {\n files.push(file);\n }\n }\n }\n if (files.length > 0 && mediaAttachments.length >= maxMediaAttachments) {\n alert(`You can only attach up to ${maxMediaAttachments} files.`);\n return;\n }\n console.log({ files });\n if (files.length > 0) {\n e.preventDefault();\n e.stopPropagation();\n // Auto-cut-off files to avoid exceeding maxMediaAttachments\n const max = maxMediaAttachments - mediaAttachments.length;\n const allowedFiles = files.slice(0, max);\n if (allowedFiles.length <= 0) {\n alert(`You can only attach up to ${maxMediaAttachments} files.`);\n return;\n }\n const mediaFiles = allowedFiles.map((file) => ({\n file,\n type: file.type,\n size: file.size,\n url: URL.createObjectURL(file),\n id: null,\n description: null,\n }));\n setMediaAttachments([...mediaAttachments, ...mediaFiles]);\n }\n };\n window.addEventListener('paste', handleItems);\n const handleDragover = (e) => {\n // Prevent default if there's files\n if (e.dataTransfer.items.length > 0) {\n e.preventDefault();\n e.stopPropagation();\n }\n };\n window.addEventListener('dragover', handleDragover);\n window.addEventListener('drop', handleItems);\n return () => {\n window.removeEventListener('paste', handleItems);\n window.removeEventListener('dragover', handleDragover);\n window.removeEventListener('drop', handleItems);\n };\n }, [mediaAttachments]);\n\n const [showMentionPicker, setShowMentionPicker] = useState(false);\n const [showEmoji2Picker, setShowEmoji2Picker] = useState(false);\n const [showGIFPicker, setShowGIFPicker] = useState(false);\n\n const [autoDetectedLanguages, setAutoDetectedLanguages] = useState(null);\n const [topSupportedLanguages, restSupportedLanguages] = useMemo(() => {\n const topLanguages = [];\n const restLanguages = [];\n const { contentTranslationHideLanguages = [] } = states.settings;\n supportedLanguages.forEach((l) => {\n const [code] = l;\n if (\n code === language ||\n code === prevLanguage.current ||\n code === DEFAULT_LANG ||\n contentTranslationHideLanguages.includes(code) ||\n (autoDetectedLanguages?.length && autoDetectedLanguages.includes(code))\n ) {\n topLanguages.push(l);\n } else {\n restLanguages.push(l);\n }\n });\n topLanguages.sort(([codeA, commonA], [codeB, commonB]) => {\n if (codeA === language) return -1;\n if (codeB === language) return 1;\n return commonA.localeCompare(commonB);\n });\n restLanguages.sort(([codeA, commonA], [codeB, commonB]) =>\n commonA.localeCompare(commonB),\n );\n return [topLanguages, restLanguages];\n }, [language, autoDetectedLanguages]);\n\n const replyToStatusMonthsAgo = useMemo(\n () =>\n !!replyToStatus?.createdAt &&\n Math.floor(\n (Date.now() - new Date(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 return (\n
    \n
    \n
    \n {currentAccountInfo?.avatarStatic && (\n // \n \n )}\n {!standalone ? (\n \n {\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 },\n });\n\n if (!newWin) {\n return;\n }\n\n onClose();\n }}\n >\n \n \n \n \n {' '}\n {\n if (confirmClose()) {\n onClose();\n }\n }}\n >\n \n \n \n ) : (\n hasOpener && (\n {\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('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 '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 =\n '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 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 },\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 \n \n )\n )}\n
    \n {!!replyToStatus && (\n
    \n \n
    \n Replying to @\n {replyToStatus.account.acct || replyToStatus.account.username}\n ’s post\n {replyToStatusMonthsAgo >= 3 && (\n <>\n {' '}\n (\n \n {rtf.format(-replyToStatusMonthsAgo, 'month')}\n \n )\n \n )}\n
    \n
    \n )}\n {!!editStatus && (\n
    \n \n
    Editing source post
    \n
    \n )}\n {\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 { status, visibility, sensitive, spoilerText } = entries;\n\n // Pre-cleanup\n sensitive = sensitive === 'on'; // checkboxes return \"on\" if checked\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('Poll must have at least 2 options');\n return;\n }\n if (poll.options.some((option) => option === '')) {\n alert('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 'Some media have no descriptions. Continue?',\n );\n if (!yes) return;\n }\n }\n\n // Post-cleanup\n spoilerText = (sensitive && spoilerText) || undefined;\n status = status === '' ? undefined : status;\n\n // states.composerState.minimized = true;\n states.composerState.publishing = true;\n setUIState('loading');\n (async () => {\n try {\n console.log('MEDIA ATTACHMENTS', mediaAttachments);\n if (mediaAttachments.length > 0) {\n // Upload media attachments first\n const mediaPromises = mediaAttachments.map((attachment) => {\n const { file, description, id } = attachment;\n console.log('UPLOADING', attachment);\n if (id) {\n // If already uploaded\n return attachment;\n } else {\n const params = removeNullUndefined({\n file,\n description,\n });\n return masto.v2.media.create(params).then((res) => {\n if (res.id) {\n attachment.id = res.id;\n }\n return res;\n });\n }\n });\n const results = await Promise.allSettled(mediaPromises);\n\n // If any failed, return\n if (\n results.some((result) => {\n return result.status === 'rejected' || !result.value?.id;\n })\n ) {\n states.composerState.publishing = false;\n states.composerState.publishingError = true;\n setUIState('error');\n // Alert all the reasons\n results.forEach((result) => {\n if (result.status === 'rejected') {\n console.error(result);\n alert(result.reason || `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,\n poll,\n // mediaIds: mediaAttachments.map((attachment) => attachment.id),\n media_ids: mediaAttachments.map(\n (attachment) => attachment.id,\n ),\n };\n if (editStatus && supports('@mastodon/edit-media-attributes')) {\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 } else if (!editStatus) {\n params.visibility = visibility;\n // params.inReplyToId = replyToStatus?.id || undefined;\n params.in_reply_to_id = replyToStatus?.id || undefined;\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 });\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
    \n {\n updateCharCount();\n }}\n />\n \n {\n const sensitive = e.target.checked;\n setSensitive(sensitive);\n if (sensitive) {\n spoilerTextRef.current?.focus();\n } else {\n textareaRef.current?.focus();\n }\n }}\n />\n \n {' '}\n \n \n {\n setVisibility(e.target.value);\n }}\n disabled={uiState === 'loading' || !!editStatus}\n >\n \n \n \n \n \n {' '}\n
    \n {\n updateCharCount();\n }}\n maxCharacters={maxCharacters}\n performSearch={(params) => {\n const { type, q, limit } = params;\n if (type === 'accounts') {\n return masto.v1.accounts.search.list({\n q,\n limit,\n resolve: false,\n });\n }\n return masto.v2.search.fetch(params);\n }}\n onTrigger={(action) => {\n if (action?.name === 'custom-emojis') {\n setShowEmoji2Picker({\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 }\n }}\n />\n {mediaAttachments?.length > 0 && (\n
    \n {mediaAttachments.map((attachment, i) => {\n const { id, file } = attachment;\n const fileID = file?.size + file?.type + file?.name;\n return (\n {\n setMediaAttachments((attachments) => {\n const newAttachments = [...attachments];\n newAttachments[i].description = value;\n return newAttachments;\n });\n }}\n onRemove={() => {\n setMediaAttachments((attachments) => {\n return attachments.filter((_, j) => j !== i);\n });\n }}\n />\n );\n })}\n \n
    \n )}\n {!!poll && (\n {\n if (poll) {\n const newPoll = { ...poll };\n setPoll(newPoll);\n } else {\n setPoll(null);\n }\n }}\n />\n )}\n \n \n \n {/* If maxOptions is not defined or defined and is greater than 1, show poll button */}\n {maxOptions == null ||\n (maxOptions > 1 && (\n <>\n {\n setPoll({\n options: ['', ''],\n expiresIn: 24 * 60 * 60, // 1 day\n multiple: false,\n });\n }}\n >\n \n \n \n ))}\n {/* {\n setShowMentionPicker(true);\n }}\n >\n \n */}\n {\n setShowEmoji2Picker(true);\n }}\n >\n \n \n {!!states.settings.composerGIFPicker && (\n = maxMediaAttachments ||\n !!poll\n }\n onClick={() => {\n setShowGIFPicker(true);\n }}\n >\n GIF\n \n )}\n \n
    \n {uiState === 'loading' ? (\n \n ) : (\n
    \n \n
    \n {showMentionPicker && (\n {\n if (e.target === e.currentTarget) {\n setShowMentionPicker(false);\n }\n }}\n >\n {\n setShowMentionPicker(false);\n }}\n defaultSearchTerm={showMentionPicker?.defaultSearchTerm}\n onSelect={(socialAddress) => {\n const textarea = textareaRef.current;\n if (!textarea) return;\n const { selectionStart, selectionEnd } = textarea;\n const text = textarea.value;\n const textBeforeMention = text.slice(0, selectionStart);\n const spaceBeforeMention = textBeforeMention\n ? /[\\s\\t\\n\\r]$/.test(textBeforeMention)\n ? ''\n : ' '\n : '';\n const textAfterMention = text.slice(selectionEnd);\n const spaceAfterMention = /^[\\s\\t\\n\\r]/.test(textAfterMention)\n ? ''\n : ' ';\n const newText =\n textBeforeMention +\n spaceBeforeMention +\n '@' +\n socialAddress +\n spaceAfterMention +\n textAfterMention;\n textarea.value = newText;\n textarea.selectionStart = textarea.selectionEnd =\n selectionEnd +\n 1 +\n socialAddress.length +\n spaceAfterMention.length;\n textarea.focus();\n textarea.dispatchEvent(new Event('input'));\n }}\n />\n \n )}\n {showEmoji2Picker && (\n {\n if (e.target === e.currentTarget) {\n setShowEmoji2Picker(false);\n }\n }}\n >\n {\n setShowEmoji2Picker(false);\n }}\n defaultSearchTerm={showEmoji2Picker?.defaultSearchTerm}\n onSelect={(emojiShortcode) => {\n const textarea = textareaRef.current;\n if (!textarea) return;\n const { selectionStart, selectionEnd } = textarea;\n const text = textarea.value;\n const textBeforeEmoji = text.slice(0, selectionStart);\n const spaceBeforeEmoji = textBeforeEmoji\n ? /[\\s\\t\\n\\r]$/.test(textBeforeEmoji)\n ? ''\n : ' '\n : '';\n const textAfterEmoji = text.slice(selectionEnd);\n const spaceAfterEmoji = /^[\\s\\t\\n\\r]/.test(textAfterEmoji)\n ? ''\n : ' ';\n const newText =\n textBeforeEmoji +\n spaceBeforeEmoji +\n emojiShortcode +\n spaceAfterEmoji +\n textAfterEmoji;\n textarea.value = newText;\n textarea.selectionStart = textarea.selectionEnd =\n selectionEnd + emojiShortcode.length + spaceAfterEmoji.length;\n textarea.focus();\n textarea.dispatchEvent(new Event('input'));\n }}\n />\n \n )}\n {showGIFPicker && (\n {\n if (e.target === e.currentTarget) {\n setShowGIFPicker(false);\n }\n }}\n >\n setShowGIFPicker(false)}\n onSelect={({ url, type, alt_text }) => {\n console.log('GIF URL', url);\n if (mediaAttachments.length >= maxMediaAttachments) {\n alert(\n `You can only attach up to ${maxMediaAttachments} files.`,\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: 'Downloading GIF…',\n duration: -1,\n });\n const blob = await fetch(url, {\n referrerPolicy: 'no-referrer',\n }).then((res) => res.blob());\n const file = new File(\n [blob],\n type === 'video/mp4' ? 'video.mp4' : 'image.gif',\n {\n type,\n },\n );\n const newMediaAttachments = [\n ...mediaAttachments,\n {\n file,\n type,\n size: file.size,\n id: null,\n description: alt_text || '',\n },\n ];\n setMediaAttachments(newMediaAttachments);\n theToast?.hideToast?.();\n } catch (err) {\n console.error(err);\n theToast?.hideToast?.();\n showToast('Failed to download GIF');\n }\n })();\n }}\n />\n \n )}\n
    \n );\n}\n\nfunction autoResizeTextarea(textarea) {\n if (!textarea) return;\n const { value, offsetHeight, scrollHeight, clientHeight } = textarea;\n if (offsetHeight < window.innerHeight) {\n // NOTE: This check is needed because the offsetHeight return 50000 (really large number) on first render\n // No idea why it does that, will re-investigate in far future\n const offset = offsetHeight - clientHeight;\n const height = value ? scrollHeight + offset + 'px' : null;\n textarea.style.height = height;\n }\n}\n\nasync function _getCustomEmojis(instance, masto) {\n const emojis = await masto.v1.customEmojis.list();\n const visibleEmojis = emojis.filter((e) => e.visibleInPicker);\n const searcher = new Fuse(visibleEmojis, {\n keys: ['shortcode'],\n findAllMatches: true,\n });\n return [visibleEmojis, searcher];\n}\nconst getCustomEmojis = pmem(_getCustomEmojis, {\n // Limit by time to reduce memory usage\n // Cached by instance\n matchesArg: (cacheKeyArg, keyArg) => cacheKeyArg.instance === keyArg.instance,\n maxAge: 30 * 60 * 1000, // 30 minutes\n});\n\nconst detectLangs = (text) => {\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 { masto, instance } = api();\n const [text, setText] = useState(ref.current?.value || '');\n const {\n maxCharacters,\n performSearch = () => {},\n onTrigger = () => {},\n ...textareaProps\n } = props;\n // const snapStates = useSnapshot(states);\n // const charCount = snapStates.composerCharacterCount;\n\n // const customEmojis = useRef();\n const searcherRef = useRef();\n useEffect(() => {\n getCustomEmojis(instance, masto)\n .then((r) => {\n const [emojis, searcher] = r;\n searcherRef.current = searcher;\n })\n .catch((e) => {\n console.error(e);\n });\n }, []);\n\n const textExpanderRef = useRef();\n const textExpanderTextRef = useRef('');\n useEffect(() => {\n let handleChange, handleValue, handleCommited;\n if (textExpanderRef.current) {\n handleChange = (e) => {\n // console.log('text-expander-change', 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 emojis = customEmojis.current.filter((emoji) =>\n // emoji.shortcode.startsWith(text),\n // );\n // const emojis = filterShortcodes(customEmojis.current, text);\n const results = searcherRef.current?.search(text, {\n limit: 5,\n });\n let html = '';\n results.forEach(({ item: emoji }) => {\n const { shortcode, url } = emoji;\n html += `\n
  • \n \"\" \n ${encodeHTML(shortcode)}\n
  • `;\n });\n html += `
  • More…
  • `;\n // console.log({ emojis, html });\n menu.innerHTML = html;\n provide(\n Promise.resolve({\n matched: results.length > 0,\n fragment: menu,\n }),\n );\n return;\n }\n\n const type = {\n '@': 'accounts',\n '#': 'hashtags',\n }[key];\n provide(\n new Promise((resolve) => {\n const searchResults = performSearch({\n type,\n q: text,\n limit: 5,\n });\n searchResults.then((value) => {\n if (text !== textExpanderTextRef.current) {\n return;\n }\n console.log({ value, type, v: value[type] });\n const results = value[type] || value;\n console.log('RESULTS', value, results);\n let html = '';\n results.forEach((result) => {\n const {\n name,\n avatarStatic,\n displayName,\n username,\n acct,\n emojis,\n history,\n } = result;\n const displayNameWithEmoji = emojifyText(displayName, emojis);\n // const item = menuItem.cloneNode();\n if (acct) {\n html += `\n
  • \n \n \"\"\n \n \n ${displayNameWithEmoji || username}\n
    @${encodeHTML(acct)}\n
    \n
  • \n `;\n } else {\n const total = history?.reduce?.(\n (acc, cur) => acc + +cur.uses,\n 0,\n );\n html += `\n
  • \n #${encodeHTML(name)}\n ${\n total\n ? `${shortenNumber(total)}`\n : ''\n }\n
  • \n `;\n }\n });\n if (type === 'accounts') {\n html += `
  • More…
  • `;\n }\n menu.innerHTML = html;\n console.log('MENU', results, menu);\n resolve({\n matched: results.length > 0,\n fragment: menu,\n });\n });\n }),\n );\n };\n\n textExpanderRef.current.addEventListener(\n 'text-expander-change',\n handleChange,\n );\n\n handleValue = (e) => {\n const { key, item } = e.detail;\n const { value, more } = item.dataset;\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 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 textExpanderRef.current.addEventListener(\n 'text-expander-value',\n handleValue,\n );\n\n handleCommited = (e) => {\n const { input } = e.detail;\n setText(input.value);\n // fire input event\n if (ref.current) {\n const event = new Event('input', { bubbles: true });\n ref.current.dispatchEvent(event);\n }\n };\n\n textExpanderRef.current.addEventListener(\n 'text-expander-committed',\n handleCommited,\n );\n }\n\n return () => {\n if (textExpanderRef.current) {\n textExpanderRef.current.removeEventListener(\n 'text-expander-change',\n handleChange,\n );\n textExpanderRef.current.removeEventListener(\n 'text-expander-value',\n handleValue,\n );\n textExpanderRef.current.removeEventListener(\n 'text-expander-committed',\n handleCommited,\n );\n }\n };\n }, []);\n\n useEffect(() => {\n // Resize observer for textarea\n const textarea = ref.current;\n if (!textarea) return;\n const resizeObserver = new ResizeObserver(() => {\n // Get height of textarea, set height to textExpander\n if (textExpanderRef.current) {\n const { height } = textarea.getBoundingClientRect();\n textExpanderRef.current.style.height = height + 'px';\n }\n });\n resizeObserver.observe(textarea);\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 const langs = detectLangs(text);\n if (langs?.length) {\n onTrigger?.({\n name: 'auto-detect-language',\n languages: langs,\n });\n }\n }, 2000);\n\n return (\n \n {\n // Get line before cursor position after pressing 'Enter'\n const { key, target } = e;\n if (key === 'Enter' && !(e.ctrlKey || e.metaKey)) {\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 // Replace zero-width space\n const text = target.value.replace(/\\u200b/g, '');\n setText(text);\n autoResizeTextarea(target);\n props.onInput?.(e);\n throttleHighlightText(text);\n debouncedAutoDetectLanguage();\n }}\n style={{\n width: '100%',\n height: '4em',\n // '--text-weight': (1 + charCount / 140).toFixed(1) || 1,\n }}\n onScroll={(e) => {\n if (composeHighlightRef.current) {\n const { scrollTop } = e.target;\n composeHighlightRef.current.scrollTop = scrollTop;\n }\n }}\n />\n \n \n );\n});\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 \n );\n}\n\nfunction prettyBytes(bytes) {\n const units = ['bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n let unitIndex = 0;\n while (bytes >= 1024) {\n bytes /= 1024;\n unitIndex++;\n }\n return `${bytes.toFixed(0).toLocaleString()} ${units[unitIndex]}`;\n}\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 onDescriptionChange = () => {},\n onRemove = () => {},\n}) {\n const [uiState, setUIState] = useState('default');\n const supportsEdit = supports('@mastodon/edit-media-attributes');\n const { type, id, file } = attachment;\n const url = useMemo(\n () => (file ? URL.createObjectURL(file) : attachment.url),\n [file, attachment.url],\n );\n console.log({ attachment });\n\n const checkMaxError = !!file?.size;\n const configuration = checkMaxError ? getCurrentInstanceConfiguration() : {};\n const {\n mediaAttachments: {\n imageSizeLimit,\n imageMatrixLimit,\n videoSizeLimit,\n videoMatrixLimit,\n videoFrameRateLimit,\n } = {},\n } = configuration || {};\n\n const [maxError, setMaxError] = useState(() => {\n if (!checkMaxError) return null;\n if (\n type.startsWith('image') &&\n imageSizeLimit &&\n file.size > imageSizeLimit\n ) {\n return {\n type: 'imageSizeLimit',\n details: {\n imageSize: file.size,\n imageSizeLimit,\n },\n };\n } else if (\n type.startsWith('video') &&\n videoSizeLimit &&\n file.size > videoSizeLimit\n ) {\n return {\n type: 'videoSizeLimit',\n details: {\n videoSize: file.size,\n videoSizeLimit,\n },\n };\n }\n return null;\n });\n\n const [imageMatrix, setImageMatrix] = useState({});\n useEffect(() => {\n if (!checkMaxError || !imageMatrixLimit) return;\n if (imageMatrix?.matrix > imageMatrixLimit) {\n setMaxError({\n type: 'imageMatrixLimit',\n details: {\n imageMatrix: imageMatrix?.matrix,\n imageMatrixLimit,\n width: imageMatrix?.width,\n height: imageMatrix?.height,\n },\n });\n }\n }, [imageMatrix, imageMatrixLimit, checkMaxError]);\n\n const [videoMatrix, setVideoMatrix] = useState({});\n useEffect(() => {\n if (!checkMaxError || !videoMatrixLimit) return;\n if (videoMatrix?.matrix > videoMatrixLimit) {\n setMaxError({\n type: 'videoMatrixLimit',\n details: {\n videoMatrix: videoMatrix?.matrix,\n videoMatrixLimit,\n width: videoMatrix?.width,\n height: videoMatrix?.height,\n },\n });\n }\n }, [videoMatrix, videoMatrixLimit, checkMaxError]);\n\n const [description, setDescription] = useState(attachment.description);\n const [suffixType, subtype] = type.split('/');\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
    \n Uploaded\n

    \n {attachment.description || No description}\n

    \n
    \n ) : (\n {\n const { value } = e.target;\n setDescription(value);\n // debouncedOnDescriptionChange(value);\n }}\n >\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 `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 `Dimension too large. Uploading might encounter issues. Try reduce dimension from ${width.toLocaleString()}×${height.toLocaleString()}px to ${newWidth.toLocaleString()}×${newHeight.toLocaleString()}px.`;\n }\n case 'videoSizeLimit': {\n const { videoSize, videoSizeLimit } = details;\n return `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 `Dimension too large. Uploading might encounter issues. Try reduce dimension from ${width.toLocaleString()}×${height.toLocaleString()}px to ${newWidth.toLocaleString()}×${newHeight.toLocaleString()}px.`;\n }\n case 'videoFrameRateLimit': {\n // Not possible to detect this on client-side for now\n return 'Frame rate too high. Uploading might encounter issues.';\n }\n }\n };\n\n return (\n <>\n
    \n {\n setShowModal(true);\n }}\n >\n {suffixType === 'image' ? (\n {\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 {\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
    \n {descTextarea}\n
    \n \n \n \n {!!maxError && (\n {\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 \n \n )}\n
    \n \n {showModal && (\n {\n if (e.target === e.currentTarget) {\n setShowModal(false);\n }\n }}\n >\n
    \n {\n setShowModal(false);\n }}\n >\n \n \n
    \n

    \n {\n {\n image: 'Edit image description',\n video: 'Edit video description',\n audio: 'Edit audio description',\n }[suffixType]\n }\n

    \n
    \n
    \n
    \n {suffixType === 'image' ? (\n \"\"\n ) : suffixType === 'video' || suffixType === 'gifv' ? (\n
    \n
    \n {descTextarea}\n
    \n {suffixType === 'image' &&\n /^(png|jpe?g|gif|webp)$/i.test(subtype) &&\n !!states.settings.mediaAltGenerator &&\n !!IMG_ALT_API_URL && (\n \n \n \n }\n >\n {\n setUIState('loading');\n toastRef.current = showToast({\n text: 'Generating description. Please wait...',\n duration: -1,\n });\n // POST with multipart\n (async function () {\n try {\n const body = new FormData();\n body.append('image', file);\n const response = await fetch(IMG_ALT_API_URL, {\n method: 'POST',\n body,\n }).then((r) => r.json());\n if (response.error) {\n throw new Error(response.error);\n }\n setDescription(response.description);\n } catch (e) {\n console.error(e);\n showToast(\n `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 \n {lang && lang !== 'en' ? (\n \n Generate description…\n
    \n (English)\n
    \n ) : (\n Generate description…\n )}\n \n {!!lang && lang !== 'en' && (\n {\n setUIState('loading');\n toastRef.current = showToast({\n text: 'Generating description. Please wait...',\n duration: -1,\n });\n // POST with multipart\n (async function () {\n try {\n const body = new FormData();\n body.append('image', file);\n const params = `?lang=${lang}`;\n const response = await fetch(\n IMG_ALT_API_URL + params,\n {\n method: 'POST',\n body,\n },\n ).then((r) => r.json());\n if (response.error) {\n throw new Error(response.error);\n }\n setDescription(response.description);\n } catch (e) {\n console.error(e);\n showToast(\n `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 \n \n Generate description…\n
    ({localeCode2Text(lang)}){' '}\n \n — experimental\n \n
    \n \n )}\n \n )}\n {\n setShowModal(false);\n }}\n disabled={uiState === 'loading'}\n >\n Done\n \n
    \n
    \n
    \n
    \n \n )}\n \n );\n}\n\nfunction Poll({\n lang,\n poll,\n disabled,\n onInput = () => {},\n maxOptions,\n maxExpiration,\n minExpiration,\n maxCharactersPerOption,\n}) {\n const { options, expiresIn, multiple } = poll;\n\n return (\n
    \n
    \n {options.map((option, i) => (\n
    \n {\n const { value } = e.target;\n options[i] = value;\n onInput(poll);\n }}\n />\n {\n options.splice(i, 1);\n onInput(poll);\n }}\n >\n \n \n
    \n ))}\n
    \n
    \n = maxOptions}\n onClick={() => {\n options.push('');\n onInput(poll);\n }}\n >\n +\n {' '}\n \n \n
    \n
    \n {\n onInput(null);\n }}\n >\n Remove poll\n \n
    \n
    \n );\n}\n\nfunction filterShortcodes(emojis, searchTerm) {\n searchTerm = searchTerm.toLowerCase();\n\n // Return an array of shortcodes that start with or contain the search term, sorted by relevance and limited to the first 5\n return emojis\n .sort((a, b) => {\n let aLower = a.shortcode.toLowerCase();\n let bLower = b.shortcode.toLowerCase();\n\n let aStartsWith = aLower.startsWith(searchTerm);\n let bStartsWith = bLower.startsWith(searchTerm);\n let aContains = aLower.includes(searchTerm);\n let bContains = bLower.includes(searchTerm);\n let bothStartWith = aStartsWith && bStartsWith;\n let bothContain = aContains && bContains;\n\n return bothStartWith\n ? a.length - b.length\n : aStartsWith\n ? -1\n : bStartsWith\n ? 1\n : bothContain\n ? a.length - b.length\n : aContains\n ? -1\n : bContains\n ? 1\n : 0;\n })\n .slice(0, 5);\n}\n\nfunction encodeHTML(str) {\n return str.replace(/[&<>\"']/g, function (char) {\n return '&#' + char.charCodeAt(0) + ';';\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\nfunction MentionModal({\n onClose = () => {},\n onSelect = () => {},\n defaultSearchTerm,\n}) {\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 },\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 },\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 },\n );\n\n return (\n
    \n {!!onClose && (\n \n )}\n
    \n {\n e.preventDefault();\n debouncedLoadAccounts.flush?.();\n // const searchTerm = inputRef.current.value;\n // debouncedLoadAccounts(searchTerm);\n }}\n >\n {\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 defaultValue={defaultSearchTerm || ''}\n />\n \n
    \n
    \n {accounts?.length > 0 ? (\n \n {accounts.map((account, i) => {\n const relationship = relationshipsMap[account.id];\n return (\n \n \n {\n selectAccount(account);\n }}\n >\n \n \n \n );\n })}\n \n ) : uiState === 'loading' ? (\n
    \n \n
    \n ) : uiState === 'error' ? (\n
    \n

    Error loading accounts

    \n
    \n ) : null}\n
    \n
    \n );\n}\n\nfunction CustomEmojisModal({\n masto,\n instance,\n onClose = () => {},\n onSelect = () => {},\n defaultSearchTerm,\n}) {\n const [uiState, setUIState] = useState('default');\n const customEmojisList = useRef([]);\n const [customEmojis, setCustomEmojis] = useState([]);\n const recentlyUsedCustomEmojis = useMemo(\n () => store.account.get('recentlyUsedCustomEmojis') || [],\n );\n const searcherRef = useRef();\n useEffect(() => {\n setUIState('loading');\n (async () => {\n try {\n const [emojis, searcher] = await getCustomEmojis(instance, masto);\n console.log('emojis', emojis);\n searcherRef.current = searcher;\n setCustomEmojis(emojis);\n setUIState('default');\n } catch (e) {\n setUIState('error');\n console.error(e);\n }\n })();\n }, []);\n\n const customEmojisCatList = useMemo(() => {\n // Group emojis by category\n const emojisCat = {\n '--recent--': recentlyUsedCustomEmojis.filter((emoji) =>\n customEmojis.find((e) => e.shortcode === emoji.shortcode),\n ),\n };\n const othersCat = [];\n customEmojis.forEach((emoji) => {\n customEmojisList.current?.push?.(emoji);\n if (!emoji.category) {\n othersCat.push(emoji);\n return;\n }\n if (!emojisCat[emoji.category]) {\n emojisCat[emoji.category] = [];\n }\n emojisCat[emoji.category].push(emoji);\n });\n if (othersCat.length) {\n emojisCat['--others--'] = othersCat;\n }\n return emojisCat;\n }, [customEmojis]);\n\n const scrollableRef = useRef();\n const [matches, setMatches] = useState(null);\n const 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 return (\n
    \n {!!onClose && (\n \n )}\n
    \n
    \n Custom emojis{' '}\n {uiState === 'loading' ? (\n \n ) : (\n • {instance}\n )}\n
    \n {\n e.preventDefault();\n const emoji = matches[0];\n if (emoji) {\n onSelectEmoji(`:${emoji.shortcode}:`);\n }\n }}\n >\n \n \n
    \n
    \n {matches !== null ? (\n
      \n {matches.map((emoji) => (\n
    • \n {\n onSelectEmoji(`:${emoji.shortcode}:`);\n }}\n showCode\n />\n
    • \n ))}\n
    \n ) : (\n
    \n {uiState === 'error' && (\n
    \n

    Error loading custom emojis

    \n
    \n )}\n {uiState === 'default' &&\n Object.entries(customEmojisCatList).map(\n ([category, emojis]) =>\n !!emojis?.length && (\n <>\n
    \n {{\n '--recent--': 'Recently used',\n '--others--': 'Others',\n }[category] || category}\n
    \n \n \n ),\n )}\n
    \n )}\n
    \n
    \n );\n}\n\nconst CustomEmojisList = memo(({ emojis, onSelect }) => {\n const [max, setMax] = useState(CUSTOM_EMOJIS_COUNT);\n const showMore = emojis.length > max;\n return (\n
    \n {emojis.slice(0, max).map((emoji) => (\n {\n onSelect(`:${emoji.shortcode}:`);\n }}\n />\n ))}\n {showMore && (\n setMax(max + CUSTOM_EMOJIS_COUNT)}\n >\n {(emojis.length - max).toLocaleString()} more…\n \n )}\n
    \n );\n});\n\nconst CustomEmojiButton = memo(({ emoji, onClick, showCode }) => {\n const addEdges = (e) => {\n // Add edge-left or edge-right class based on self position relative to scrollable parent\n // If near left edge, add edge-left, if near right edge, add edge-right\n const buffer = 88;\n const parent = e.currentTarget.closest('main');\n if (parent) {\n const rect = parent.getBoundingClientRect();\n const selfRect = e.currentTarget.getBoundingClientRect();\n const targetClassList = e.currentTarget.classList;\n if (selfRect.left < rect.left + buffer) {\n targetClassList.add('edge-left');\n targetClassList.remove('edge-right');\n } else if (selfRect.right > rect.right - buffer) {\n targetClassList.add('edge-right');\n targetClassList.remove('edge-left');\n } else {\n targetClassList.remove('edge-left', 'edge-right');\n }\n }\n };\n\n return (\n \n \n {!!emoji.staticUrl && (\n \n )}\n \n \n {showCode && (\n <>\n {' '}\n {emoji.shortcode}\n \n )}\n \n );\n});\n\nconst GIFS_PER_PAGE = 20;\nfunction GIFPickerModal({ onClose = () => {}, onSelect = () => {} }) {\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 };\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
    \n {!!onClose && (\n \n )}\n
    \n {\n e.preventDefault();\n fetchGIFs({ offset: 0 });\n }}\n >\n \n \n \n
    \n
    \n {uiState === 'default' && (\n
    \n

    Type to search GIFs

    \n
    \n )}\n {uiState === 'loading' && !results?.data?.length && (\n
    \n \n
    \n )}\n {results?.data?.length > 0 ? (\n <>\n
      \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
    • \n {\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 \n \n {strippedWebP && (\n \n )}\n {\n e.target.style.backgroundColor = 'transparent';\n }}\n />\n \n
      {alt_text || title}
      \n \n \n
    • \n );\n })}\n
    \n

    \n {results.pagination?.offset > 0 && (\n {\n fetchGIFs({\n offset: results.pagination?.offset - GIFS_PER_PAGE,\n });\n }}\n >\n \n Previous\n \n )}\n \n {results.pagination?.offset + results.pagination?.count <\n results.pagination?.total_count && (\n {\n fetchGIFs({\n offset: results.pagination?.offset + GIFS_PER_PAGE,\n });\n }}\n >\n Next \n \n )}\n

    \n \n ) : (\n uiState === 'results' && (\n
    \n

    No results

    \n
    \n )\n )}\n {uiState === 'error' && (\n
    \n

    Error loading GIFs

    \n
    \n )}\n
    \n
    \n );\n}\n\nexport default Compose;\n"],"names":["Combobox","input","list","tabInsertsSuggestions","defaultFirstOption","event","keyboardBindings","trackComposition","commitWithElement","_a","visible","indexDiff","focusEl","els","focusIndex","indexOfItem","newIndex","target","el","scrollTo","combobox","commit","fireCommitEvent","container","inViewport","element","scrollTop","containerBottom","top","bottom","boundary","query","text","key","cursor","multiWord","lookBackIndex","lastMatchPosition","keyIndex","pre","CustomHTMLElement","InputStyleCloneUpdateEvent","CloneRegistry","_InputStyleCloneElement","__privateAdd","_InputStyleCloneElement_instances","_styleObserver","__privateMethod","updateStyles_fn","_resizeObserver","requestUpdateLayout_fn","_inputRef","_container","_xOffset","_yOffset","_isLayoutUpdating","_onInput","updateText_fn","_onDocumentScrollOrResize","usingInput_fn","__privateSet","__privateGet","clone","fn","updateLayout_fn","inputStyle","inputRect","cloneRect","prop","propertiesToCopy","InputStyleCloneElement","e","_InputRange","startOffset","endOffset","_InputRange_instances","_inputElement","_startOffset","_endOffset","selectionStart","selectionEnd","offset","clampOffset_fn","toStart","createCloneRange_fn","styleClone_get","cloneElement_get","range","textNode","InputRange","states","TextExpander","expander","match","menu","_b","position","caretRect","targetPosition","currentPosition","delta","currentStyle","item","beginning","remaining","detail","suffix","value","found","providers","provide","result","x","TextExpanderElement","keysAttr","keys","multiWordAttr","globalMultiWord","state","ansiRegex","onlyFirst","pattern","regex","stripAnsi","string","segmenter","stringLength","countAnsiEscapeCodes","length","_","poweredByGiphyURL","PHANPY_IMG_ALT_API_URL","IMG_ALT_API_URL","PHANPY_GIPHY_API_KEY","GIPHY_API_KEY","import","supportedLanguagesMap","supportedLanguages","reduce","acc","l","code","common","native","expiryOptions","expirySeconds","Object","values","oneDay","expiresInFromExpiresAt","expiresAt","Date","getTime","now","find","s","document","createElement","role","className","windowMargin","observer","IntersectionObserver","entries","forEach","entry","isIntersecting","left","width","boundingClientRect","innerWidth","window","style","observe","DEFAULT_LANG","localeMatch","Intl","DateTimeFormat","resolvedOptions","locale","navigator","languages","map","urlRegexObj","RegExp","urlRegex","source","flags","usernameRegex","urlPlaceholder","countableText","inputText","replace","USERNAME_RE","MENTION_RE","HASHTAG_RE","SHORTCODE_RE_FRAGMENT","SCAN_RE","Segmenter","highlightText","maxCharacters","Infinity","html","composerCharacterCount","withinLimitHTML","exceedLimitHTML","htmlSegments","segment","index","rtf","RelativeTimeFormat","CUSTOM_EMOJIS_COUNT","Compose","onClose","replyToStatus","editStatus","draftStatus","standalone","hasOpener","console","masto","instance","uiState","setUIState","useState","UID","uid","log","currentAccount","currentAccountInfo","maxMediaAttachments","charactersReservedPerUrl","imageMatrixLimit","supportedMimeTypes","imageSizeLimit","videoSizeLimit","videoMatrixLimit","videoFrameRateLimit","maxExpiration","maxOptions","maxCharactersPerOption","minExpiration","spoilerTextRef","useRef","textareaRef","store","prevLanguage","language","sensitive","setMediaAttachments","setLanguage","oninputTextarea","poll","account","focusTextarea","dispatchEvent","setTimeout","spoilerText","useEffect","visibility2","language2","sensitive2","visibility","current","m","allMentions","prefs","setSensitive","poll2","mediaAttachments","options","expiresIn","statusSource","dataset","mediaAttachments2","setVisibility","composablePoll","status","o","formRef","hasValue","hasMediaAttachments","isSelf","hasOnlyAcct","confirmClose","hasIDMediaAttachments","beforeUnloadCopy","id","handleBeforeUnload","sameWithSource","getCharCount","updateCharCount","supportsCloseWatcher","useHotkeys","yes","addEventListener","capture","modals","hasModal","hasOnlyComposer","prevBackgroundDraft","count","escDownRef","ignoreEventWhen","useCloseWatcher","canClose","draftKey","getCurrentAccountNS","backgroundDraft","useInterval","db","handleItems","username","acct","items","i2","file","files","drafts","allowedFiles","updatedAt","then","debug","error","mediaFiles","handleDragover","includes","showMentionPicker","setShowMentionPicker","showEmoji2Picker","setShowEmoji2Picker","showGIFPicker","autoDetectedLanguages","setAutoDetectedLanguages","topSupportedLanguages","restSupportedLanguages","useMemo","topLanguages","contentTranslationHideLanguages","max","restLanguages","commonB","type","size","url","codeA","commonA","codeB","onMinimize","saveUnsavedDraft","_jsxs","dataTransfer","_jsx","children","passData","Icon","alert","settings","sort","class","avatarStatic","instanceURL","onClick","opener","composerState","Status","replyToStatusMonthsAgo","_Fragment","formData","previewMode","option","media","pointerEvents","opacity","mediaPromises","attachment","description","params2","removeNullUndefined","res","results","some","hasNoDescriptions","params","saveStatus","newStatus","allSettled","e2","media_attributes","in_reply_to_id","Textarea","onChange","limit","action","title","icon","name","MediaAttachment","attachments","newAttachments","required","fileID","performSearch","q","v1","search","resolve","v2","fetch","onTrigger","defaultSearchTerm","newPoll","setPoll","onDescriptionChange","i","accept","multiple","setShowGIFPicker","Array","Loader","CharCountMeter","disabled","MentionModal","socialAddress","textarea","textBeforeMention","spaceAfterMention","spaceBeforeMention","textAfterMention","newText","Modal","emojiShortcode","textBeforeEmoji","spaceBeforeEmoji","spaceAfterEmoji","textAfterEmoji","GIFPickerModal","alt_text","showToast","blob","onSelect","theToast","offsetHeight","scrollHeight","clientHeight","height","visibleEmojis","searcher","getCustomEmojis","pmem","_getCustomEmojis","cacheKeyArg","keyArg","detectLangs","langs","lang","newMediaAttachments","setText","ref","props","searcherRef","r","emojis","textExpanderRef","textExpanderTextRef","text2","emoji","shortcode","encodeHTML","forwardRef","textareaProps","handleChange","total","history","cur","matched","handleValue","more","searchResults","v","displayName","handleCommited","shortenNumber","slowHighlightPerf","composeHighlightRef","start","end","debouncedAutoDetectLanguage","useDebouncedCallback","dom","mark","Event","resizeObserver","throttleHighlightText","bullet","postSpaces","anything","lastLine","innerHTML","number","preSpaces","newBullet","pos","innerText","autoResizeTextarea","dir","rows","cols","onKeyDown","hidden","charCount","leftChars","ctrlKey","setRangeText","setSelectionRange","prettyBytes","bytes","unitIndex","units","scaleDimension","newWidth","scalingFactor","newHeight","onInput","onRemove","supportsEdit","supports","onScroll","checkMaxError","configuration","getCurrentInstanceConfiguration","snapStates","setImageMatrix","imageMatrix","setMaxError","matrix","Math","videoMatrix","setDescription","suffixType","subtype","debouncedOnDescriptionChange","timer","maxError","details","toastRef","maxErrorText","err","type2","imageSizeLimit2","imageSize","imageMatrixLimit2","showModal","videoSize","clearTimeout","videoSizeLimit2","descTextarea","videoMatrix2","videoMatrixLimit2","autoCapitalize","autoComplete","naturalWidth","naturalHeight","maxErrorToast","setVideoMatrix","videoWidth","videoHeight","setShowModal","src","alt","onLoad","muted","disablePictureInPicture","onLoadedMetadata","Menu2","body","response","MenuItem","menuButton","localeCode2Text","append","Poll","checked","label","maxlength","placeholder","str","char","obj","accounts2","relationships","fetchRelationships","relationshipsMap","setRelationshipsMap","filter","setAccounts","loadRelationships","loadAccounts","inputRef","filterShortcodes","searchTerm","bLower","aStartsWith","bStartsWith","aContains","bothContain","bContains","selectedAccount","accounts","selectedIndex","selectAccount","listRef","setSelectedIndex","selectedItem","term","debouncedLoadAccounts","enableOnFormTags","AccountBlock","relationship","inline","customEmojis","setCustomEmojis","onSubmit","recentlyUsedCustomEmojis","autocorrect","customEmojisList","othersCat","emojisCat","useCallback","_c","scrollableRef","setMatches","onFind","abrupt","onSelectEmoji","recentlyUsedCustomEmojis2","recentlyUsedEmojiIndex","emoji2","customEmojisCatList","category","matches","CustomEmojiButton","queueMicrotask","splice","CustomEmojisList","setMax","showMore","memo","showCode","parent","rect","selfRect","targetClassList","addEdges","GIFS_PER_PAGE","setResults","qRef","closest","getBoundingClientRect","remove","staticUrl","loading","debouncedOnInput","currentOffset","gif","fixed_height_downsampled","original","pagination","fixed_height_small","fixed_height","theImage","urlObj","strippedWebP","webp","webpObj","url2","theURL","mp4","urlObj2","strippedURL2","strippedURL","images","fetchGIFs","parse"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4]} \ No newline at end of file diff --git a/assets/compose-oSeoicVc.js b/assets/compose-oSeoicVc.js deleted file mode 100644 index b17fee2..0000000 --- a/assets/compose-oSeoicVc.js +++ /dev/null @@ -1,26 +0,0 @@ -var Bt=s=>{throw TypeError(s)};var pt=(s,t,n)=>t.has(s)||Bt("Cannot "+n);var I=(s,t,n)=>(pt(s,t,"read from private field"),n?n.call(s):t.get(s)),re=(s,t,n)=>t.has(s)?Bt("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(s):t.set(s,n),me=(s,t,n,a)=>(pt(s,t,"write to private field"),a?a.call(s,n):t.set(s,n),n),Q=(s,t,n)=>(pt(s,t,"access private method"),n);import{i as ge,z as mn,s as oe,V as gn,f as Ke,a as Ct,h as U,A as G,M as fn,aA as Yt,d as Se,y as ne,w as vn,aB as bn,j as Pe,c as e,T as V,b as xn,k as De,v as st,q as yn,P as wn,u as kn,r as Tt,x as Zt}from"./useTitle-SRT6j-GL.js";import{j as Ee,F as En,_ as Fn,a as Oe,a8 as Cn,x as Rt,u as zn,k as Xt,b as _n,I as Z,z as Dt,i as Jt,a9 as Ln,l as xt,M as Je,s as Ce,a4 as An,a0 as Sn,q as In,O as Mn,X as at,c as Bn,d as $t,y as Tn}from"./fuse-MwQ_F2cO.js";import{e as Rn}from"./tinyld-light-PxOyhYWY.js";class Dn{constructor(t,n,{tabInsertsSuggestions:a,defaultFirstOption:c}={}){this.input=t,this.list=n,this.tabInsertsSuggestions=a??!0,this.defaultFirstOption=c??!1,this.isComposing=!1,n.id||(n.id=`combobox-${Math.random().toString().slice(2,6)}`),this.ctrlBindings=!!navigator.userAgent.match(/Macintosh/),this.keyboardEventHandler=o=>$n(o,this),this.compositionEventHandler=o=>On(o,this),this.inputHandler=this.clearSelection.bind(this),t.setAttribute("role","combobox"),t.setAttribute("aria-controls",n.id),t.setAttribute("aria-expanded","false"),t.setAttribute("aria-autocomplete","list"),t.setAttribute("aria-haspopup","listbox")}destroy(){this.clearSelection(),this.stop(),this.input.removeAttribute("role"),this.input.removeAttribute("aria-controls"),this.input.removeAttribute("aria-expanded"),this.input.removeAttribute("aria-autocomplete"),this.input.removeAttribute("aria-haspopup")}start(){this.input.setAttribute("aria-expanded","true"),this.input.addEventListener("compositionstart",this.compositionEventHandler),this.input.addEventListener("compositionend",this.compositionEventHandler),this.input.addEventListener("input",this.inputHandler),this.input.addEventListener("keydown",this.keyboardEventHandler),this.list.addEventListener("click",jt),this.indicateDefaultOption()}stop(){this.clearSelection(),this.input.setAttribute("aria-expanded","false"),this.input.removeEventListener("compositionstart",this.compositionEventHandler),this.input.removeEventListener("compositionend",this.compositionEventHandler),this.input.removeEventListener("input",this.inputHandler),this.input.removeEventListener("keydown",this.keyboardEventHandler),this.list.removeEventListener("click",jt)}indicateDefaultOption(){var t;this.defaultFirstOption&&((t=Array.from(this.list.querySelectorAll('[role="option"]:not([aria-disabled="true"])')).filter(mt)[0])===null||t===void 0||t.setAttribute("data-combobox-option-default","true"))}navigate(t=1){const n=Array.from(this.list.querySelectorAll('[aria-selected="true"]')).filter(mt)[0],a=Array.from(this.list.querySelectorAll('[role="option"]')).filter(mt),c=a.indexOf(n);if(c===a.length-1&&t===1||c===0&&t===-1){this.clearSelection(),this.input.focus();return}let o=t===1?0:a.length-1;if(n&&c>=0){const y=c+t;y>=0&&y0||s.offsetHeight>0)}function On(s,t){t.isComposing=s.type==="compositionstart",document.getElementById(t.input.getAttribute("aria-controls")||"")&&t.clearSelection()}function Pn(s,t){Hn(s,t)||(s.scrollTop=t.offsetTop)}function Hn(s,t){const n=s.scrollTop,a=n+s.clientHeight,c=t.offsetTop,o=c+t.clientHeight;return c>=n&&o<=a}const Nn=/\s|\(|\[/;function qn(s,t,n,{multiWord:a,lookBackIndex:c,lastMatchPosition:o}={multiWord:!1,lookBackIndex:0,lastMatchPosition:null}){let l=s.lastIndexOf(t,n-1);if(l===-1||l=l+t.length+1||s.lastIndexOf(` -`,n-1)>l||s.lastIndexOf(".",n-1)>l)return}else if(s.lastIndexOf(" ",n-1)>l)return;const y=s[l-1];return y&&!Nn.test(y)?void 0:{text:s.substring(l+t.length,n),position:l+t.length}}class Kn extends HTMLElement{}class Wn extends Event{constructor(){super("update")}}const gt=new WeakMap;var He,Ne,ze,ye,ee,$e,Ie,Me,yt,Be,Qe,et,tt,qe,_e;const _t=class _t extends Kn{constructor(n){super();re(this,ee);re(this,He,new MutationObserver(()=>Q(this,ee,et).call(this)));re(this,Ne,new ResizeObserver(()=>Q(this,ee,Qe).call(this)));re(this,ze);re(this,ye);re(this,Ie,0);re(this,Me,0);re(this,Be,!1);re(this,qe,()=>Q(this,ee,tt).call(this));re(this,_e,n=>{Q(this,ee,$e).call(this,a=>{(n.target===document||n.target===window||n.target instanceof Node&&n.target.contains(a))&&Q(this,ee,Qe).call(this)})});me(this,ze,new WeakRef(n)),me(this,ye,document.createElement("div")),I(this,ye).style.position="absolute",I(this,ye).style.pointerEvents="none",n.after(I(this,ye)),I(this,ye).appendChild(this)}static for(n){const a=gt.get(n)??new _t(n);return gt.set(n,a),a}forceUpdate(){Q(this,ee,et).call(this),Q(this,ee,tt).call(this)}connectedCallback(){const n=I(this,ze).deref();if(!n)return this.remove();this.style.pointerEvents="none",this.style.userSelect="none",this.style.overflow="hidden",this.style.display="block",this.style.visibility="hidden",n instanceof HTMLTextAreaElement?(this.style.whiteSpace="pre-wrap",this.style.wordWrap="break-word"):(this.style.whiteSpace="nowrap",this.style.display="table-cell",this.style.verticalAlign="middle"),this.setAttribute("aria-hidden","true"),Q(this,ee,et).call(this),Q(this,ee,tt).call(this),I(this,He).observe(n,{attributeFilter:["style","dir"]}),I(this,Ne).observe(n),document.addEventListener("scroll",I(this,_e),{capture:!0}),window.addEventListener("resize",I(this,_e),{capture:!0}),n.addEventListener("input",I(this,qe),{capture:!0})}disconnectedCallback(){I(this,ye).remove(),I(this,He).disconnect(),I(this,Ne).disconnect(),document.removeEventListener("scroll",I(this,_e),{capture:!0}),window.removeEventListener("resize",I(this,_e),{capture:!0});const n=I(this,ze).deref();n&&(n.removeEventListener("input",I(this,qe),{capture:!0}),gt.delete(n))}};He=new WeakMap,Ne=new WeakMap,ze=new WeakMap,ye=new WeakMap,ee=new WeakSet,$e=function(n){const a=I(this,ze).deref();return a?n(a):this.remove()},Ie=new WeakMap,Me=new WeakMap,yt=function(){Q(this,ee,$e).call(this,n=>{const a=window.getComputedStyle(n);this.style.height=a.height,this.style.width=a.width,n.clientHeight!==this.clientHeight&&(this.style.height=`calc(${a.height} + ${n.clientHeight-this.clientHeight}px)`),n.clientWidth!==this.clientWidth&&(this.style.width=`calc(${a.width} + ${n.clientWidth-this.clientWidth}px)`);const c=n.getBoundingClientRect(),o=this.getBoundingClientRect();me(this,Ie,I(this,Ie)+c.left-o.left),me(this,Me,I(this,Me)+c.top-o.top),this.style.transform=`translate(${I(this,Ie)}px, ${I(this,Me)}px)`,this.scrollTop=n.scrollTop,this.scrollLeft=n.scrollLeft,this.dispatchEvent(new Wn)})},Be=new WeakMap,Qe=function(){I(this,Be)||(me(this,Be,!0),requestAnimationFrame(()=>{Q(this,ee,yt).call(this),me(this,Be,!1)}))},et=function(){Q(this,ee,$e).call(this,n=>{const a=window.getComputedStyle(n);for(const c of Un)this.style[c]=a[c];Q(this,ee,Qe).call(this)})},tt=function(){Q(this,ee,$e).call(this,n=>{this.textContent=n.value,Q(this,ee,yt).call(this)})},qe=new WeakMap,_e=new WeakMap;let nt=_t;const Un=["direction","writingMode","unicodeBidi","textOrientation","boxSizing","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","borderStyle","paddingTop","paddingRight","paddingBottom","paddingLeft","fontStyle","fontVariant","fontWeight","fontStretch","fontSize","fontSizeAdjust","lineHeight","fontFamily","textAlign","textTransform","textIndent","textDecoration","letterSpacing","wordSpacing","tabSize","MozTabSize"];try{customElements.define("input-style-clone",nt)}catch(s){if(!(s instanceof DOMException&&s.name==="NotSupportedError"))throw s}var be,Te,Re,le,kt,Qt,Et,je;const it=class it{constructor(t,n=0,a=n){re(this,le);re(this,be);re(this,Te);re(this,Re);me(this,be,t),me(this,Te,n),me(this,Re,a)}static fromSelection(t){const{selectionStart:n,selectionEnd:a}=t;return new it(t,n??void 0,a??void 0)}get collapsed(){return this.startOffset===this.endOffset}get commonAncestorContainer(){return I(this,be)}get endContainer(){return I(this,be)}get startContainer(){return I(this,be)}get startOffset(){return I(this,Te)}get endOffset(){return I(this,Re)}setStartOffset(t){me(this,Te,Q(this,le,Et).call(this,t))}setEndOffset(t){me(this,Re,Q(this,le,Et).call(this,t))}collapse(t=!1){t?this.setEndOffset(this.startOffset):this.setStartOffset(this.endOffset)}cloneContents(){return Q(this,le,je).call(this).cloneContents()}cloneRange(){return new it(I(this,be),this.startOffset,this.endOffset)}getBoundingClientRect(){return Q(this,le,je).call(this).getBoundingClientRect()}getClientRects(){return Q(this,le,je).call(this).getClientRects()}toString(){return Q(this,le,je).call(this).toString()}getStyleClone(){return I(this,le,kt)}};be=new WeakMap,Te=new WeakMap,Re=new WeakMap,le=new WeakSet,kt=function(){return nt.for(I(this,be))},Qt=function(){return I(this,le,kt)},Et=function(t){return Math.max(0,Math.min(t,I(this,be).value.length))},je=function(){const t=document.createRange(),n=I(this,le,Qt).childNodes[0];return n&&(t.setStart(n,this.startOffset),t.setEnd(n,this.endOffset)),t};let wt=it;const Ze=new WeakMap;class Vn{constructor(t,n){this.expander=t,this.input=n,this.combobox=null,this.menu=null,this.match=null,this.justPasted=!1,this.lookBackIndex=0,this.oninput=this.onInput.bind(this),this.onpaste=this.onPaste.bind(this),this.onkeydown=this.onKeydown.bind(this),this.oncommit=this.onCommit.bind(this),this.onmousedown=this.onMousedown.bind(this),this.onblur=this.onBlur.bind(this),this.interactingWithList=!1,n.addEventListener("paste",this.onpaste),n.addEventListener("input",this.oninput),n.addEventListener("keydown",this.onkeydown),n.addEventListener("blur",this.onblur)}destroy(){this.input.removeEventListener("paste",this.onpaste),this.input.removeEventListener("input",this.oninput),this.input.removeEventListener("keydown",this.onkeydown),this.input.removeEventListener("blur",this.onblur)}dismissMenu(){this.deactivate()&&(this.lookBackIndex=this.input.selectionEnd||this.lookBackIndex)}activate(t,n){var a,c;this.input!==document.activeElement&&this.input!==((c=(a=document.activeElement)===null||a===void 0?void 0:a.shadowRoot)===null||c===void 0?void 0:c.activeElement)||(this.deactivate(),this.menu=n,n.id||(n.id=`text-expander-${Math.floor(Math.random()*1e5).toString()}`),this.expander.append(n),this.combobox=new Dn(this.input,n),this.expander.dispatchEvent(new Event("text-expander-activate")),this.positionMenu(n,t.position),this.combobox.start(),n.addEventListener("combobox-commit",this.oncommit),n.addEventListener("mousedown",this.onmousedown),this.combobox.navigate(1))}positionMenu(t,n){const a=new wt(this.input,n).getBoundingClientRect(),c={left:a.left,top:a.top+a.height},o=t.getBoundingClientRect(),l={left:c.left-o.left,top:c.top-o.top};if(l.left!==0||l.top!==0){const y=getComputedStyle(t);t.style.left=y.left?`calc(${y.left} + ${l.left}px)`:`${l.left}px`,t.style.top=y.top?`calc(${y.top} + ${l.top}px)`:`${l.top}px`}}deactivate(){const t=this.menu;return!t||!this.combobox?!1:(this.expander.dispatchEvent(new Event("text-expander-deactivate")),this.menu=null,t.removeEventListener("combobox-commit",this.oncommit),t.removeEventListener("mousedown",this.onmousedown),this.combobox.destroy(),this.combobox=null,t.remove(),!0)}onCommit({target:t}){var n;const a=t;if(!(a instanceof HTMLElement)||!this.combobox)return;const c=this.match;if(!c)return;const o=this.input.value.substring(0,c.position-c.key.length),l=this.input.value.substring(c.position+c.text.length),y={item:a,key:c.key,value:null,continue:!1};if(!this.expander.dispatchEvent(new CustomEvent("text-expander-value",{cancelable:!0,detail:y}))||!y.value)return;let M=(n=this.expander.getAttribute("suffix"))!==null&&n!==void 0?n:" ";y.continue&&(M="");const F=`${y.value}${M}`;this.input.value=o+F+l;const v=o.length+F.length;this.deactivate(),this.input.focus({preventScroll:!0}),this.input.selectionStart=v,this.input.selectionEnd=v,y.continue||(this.lookBackIndex=v,this.match=null),this.expander.dispatchEvent(new CustomEvent("text-expander-committed",{cancelable:!1,detail:{input:this.input}}))}onBlur(){if(this.interactingWithList){this.interactingWithList=!1;return}this.deactivate()}onPaste(){this.justPasted=!0}async onInput(){if(this.justPasted){this.justPasted=!1;return}const t=this.findMatch();if(t){this.match=t;const n=await this.notifyProviders(t);if(!this.match)return;n?this.activate(t,n):this.deactivate()}else this.match=null,this.deactivate()}findMatch(){const t=this.input.selectionEnd||0,n=this.input.value;t<=this.lookBackIndex&&(this.lookBackIndex=t-1);for(const{key:a,multiWord:c}of this.expander.keys){const o=qn(n,a,t,{multiWord:c,lookBackIndex:this.lookBackIndex,lastMatchPosition:this.match?this.match.position:null});if(o)return{text:o.text,key:a,position:o.position}}}async notifyProviders(t){const n=[],a=y=>n.push(y);return this.expander.dispatchEvent(new CustomEvent("text-expander-change",{cancelable:!0,detail:{provide:a,text:t.text,key:t.key}}))?(await Promise.all(n)).filter(y=>y.matched).map(y=>y.fragment)[0]:void 0}onMousedown(){this.interactingWithList=!0}onKeydown(t){t.key==="Escape"&&(this.match=null,this.deactivate()&&(this.lookBackIndex=this.input.selectionEnd||this.lookBackIndex,t.stopImmediatePropagation(),t.preventDefault()))}}class Pt extends HTMLElement{get keys(){const t=this.getAttribute("keys"),n=t?t.split(" "):[],a=this.getAttribute("multiword"),c=a?a.split(" "):[],o=c.length===0&&this.hasAttribute("multiword");return n.map(l=>({key:l,multiWord:o||c.includes(l)}))}connectedCallback(){const t=this.querySelector('input[type="text"], textarea');if(!(t instanceof HTMLInputElement||t instanceof HTMLTextAreaElement))return;const n=new Vn(this,t);Ze.set(this,n)}disconnectedCallback(){const t=Ze.get(this);t&&(t.destroy(),Ze.delete(this))}dismiss(){const t=Ze.get(this);t&&t.dismissMenu()}}window.customElements.get("text-expander")||(window.TextExpanderElement=Pt,window.customElements.define("text-expander",Pt));function Gn({onlyFirst:s=!1}={}){const t=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(t,s?void 0:"g")}const Yn=Gn();function Zn(s){if(typeof s!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof s}\``);return s.replace(Yn,"")}const Xn=new Intl.Segmenter;function Ht(s,{countAnsiEscapeCodes:t=!1}={}){if(s===""||(t||(s=Zn(s)),s===""))return 0;let n=0;for(const a of Xn.segment(s))n++;return n}const Jn="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",zt=[["aa","Afar","Afaraf"],["ab","Abkhaz","аҧсуа бызшәа"],["ae","Avestan","avesta"],["af","Afrikaans","Afrikaans"],["ak","Akan","Akan"],["am","Amharic","አማርኛ"],["an","Aragonese","aragonés"],["ar","Arabic","اللغة العربية"],["as","Assamese","অসমীয়া"],["av","Avaric","авар мацӀ"],["ay","Aymara","aymar aru"],["az","Azerbaijani","azərbaycan dili"],["ba","Bashkir","башҡорт теле"],["be","Belarusian","беларуская мова"],["bg","Bulgarian","български език"],["bh","Bihari","भोजपुरी"],["bi","Bislama","Bislama"],["bm","Bambara","bamanankan"],["bn","Bengali","বাংলা"],["bo","Tibetan","བོད་ཡིག"],["br","Breton","brezhoneg"],["bs","Bosnian","bosanski jezik"],["ca","Catalan","Català"],["ce","Chechen","нохчийн мотт"],["ch","Chamorro","Chamoru"],["co","Corsican","corsu"],["cr","Cree","ᓀᐦᐃᔭᐍᐏᐣ"],["cs","Czech","čeština"],["cu","Old Church Slavonic","ѩзыкъ словѣньскъ"],["cv","Chuvash","чӑваш чӗлхи"],["cy","Welsh","Cymraeg"],["da","Danish","dansk"],["de","German","Deutsch"],["dv","Divehi","Dhivehi"],["dz","Dzongkha","རྫོང་ཁ"],["ee","Ewe","Eʋegbe"],["el","Greek","Ελληνικά"],["en","English","English"],["eo","Esperanto","Esperanto"],["es","Spanish","Español"],["et","Estonian","eesti"],["eu","Basque","euskara"],["fa","Persian","فارسی"],["ff","Fula","Fulfulde"],["fi","Finnish","suomi"],["fj","Fijian","Vakaviti"],["fo","Faroese","føroyskt"],["fr","French","Français"],["fy","Western Frisian","Frysk"],["ga","Irish","Gaeilge"],["gd","Scottish Gaelic","Gàidhlig"],["gl","Galician","galego"],["gu","Gujarati","ગુજરાતી"],["gv","Manx","Gaelg"],["ha","Hausa","هَوُسَ"],["he","Hebrew","עברית"],["hi","Hindi","हिन्दी"],["ho","Hiri Motu","Hiri Motu"],["hr","Croatian","Hrvatski"],["ht","Haitian","Kreyòl ayisyen"],["hu","Hungarian","magyar"],["hy","Armenian","Հայերեն"],["hz","Herero","Otjiherero"],["ia","Interlingua","Interlingua"],["id","Indonesian","Bahasa Indonesia"],["ie","Interlingue","Interlingue"],["ig","Igbo","Asụsụ Igbo"],["ii","Nuosu","ꆈꌠ꒿ Nuosuhxop"],["ik","Inupiaq","Iñupiaq"],["io","Ido","Ido"],["is","Icelandic","Íslenska"],["it","Italian","Italiano"],["iu","Inuktitut","ᐃᓄᒃᑎᑐᑦ"],["ja","Japanese","日本語"],["jv","Javanese","basa Jawa"],["ka","Georgian","ქართული"],["kg","Kongo","Kikongo"],["ki","Kikuyu","Gĩkũyũ"],["kj","Kwanyama","Kuanyama"],["kk","Kazakh","қазақ тілі"],["kl","Kalaallisut","kalaallisut"],["km","Khmer","ខេមរភាសា"],["kn","Kannada","ಕನ್ನಡ"],["ko","Korean","한국어"],["kr","Kanuri","Kanuri"],["ks","Kashmiri","कश्मीरी"],["ku","Kurmanji (Kurdish)","Kurmancî"],["kv","Komi","коми кыв"],["kw","Cornish","Kernewek"],["ky","Kyrgyz","Кыргызча"],["la","Latin","latine"],["lb","Luxembourgish","Lëtzebuergesch"],["lg","Ganda","Luganda"],["li","Limburgish","Limburgs"],["ln","Lingala","Lingála"],["lo","Lao","ລາວ"],["lt","Lithuanian","lietuvių kalba"],["lu","Luba-Katanga","Tshiluba"],["lv","Latvian","latviešu valoda"],["mg","Malagasy","fiteny malagasy"],["mh","Marshallese","Kajin M̧ajeļ"],["mi","Māori","te reo Māori"],["mk","Macedonian","македонски јазик"],["ml","Malayalam","മലയാളം"],["mn","Mongolian","Монгол хэл"],["mr","Marathi","मराठी"],["ms","Malay","Bahasa Melayu"],["ms-Arab","Jawi Malay","بهاس ملايو"],["mt","Maltese","Malti"],["my","Burmese","ဗမာစာ"],["na","Nauru","Ekakairũ Naoero"],["nb","Norwegian Bokmål","Norsk bokmål"],["nd","Northern Ndebele","isiNdebele"],["ne","Nepali","नेपाली"],["ng","Ndonga","Owambo"],["nl","Dutch","Nederlands"],["nn","Norwegian Nynorsk","Norsk Nynorsk"],["no","Norwegian","Norsk"],["nr","Southern Ndebele","isiNdebele"],["nv","Navajo","Diné bizaad"],["ny","Chichewa","chiCheŵa"],["oc","Occitan","occitan"],["oj","Ojibwe","ᐊᓂᔑᓈᐯᒧᐎᓐ"],["om","Oromo","Afaan Oromoo"],["or","Oriya","ଓଡ଼ିଆ"],["os","Ossetian","ирон æвзаг"],["pa","Punjabi","ਪੰਜਾਬੀ"],["pi","Pāli","पाऴि"],["pl","Polish","Polski"],["ps","Pashto","پښتو"],["pt","Portuguese","Português"],["qu","Quechua","Runa Simi"],["rm","Romansh","rumantsch grischun"],["rn","Kirundi","Ikirundi"],["ro","Romanian","Română"],["ru","Russian","Русский"],["rw","Kinyarwanda","Ikinyarwanda"],["sa","Sanskrit","संस्कृतम्"],["sc","Sardinian","sardu"],["sd","Sindhi","सिन्धी"],["se","Northern Sami","Davvisámegiella"],["sg","Sango","yângâ tî sängö"],["si","Sinhala","සිංහල"],["sk","Slovak","slovenčina"],["sl","Slovenian","slovenščina"],["sn","Shona","chiShona"],["so","Somali","Soomaaliga"],["sq","Albanian","Shqip"],["sr","Serbian","српски језик"],["ss","Swati","SiSwati"],["st","Southern Sotho","Sesotho"],["su","Sundanese","Basa Sunda"],["sv","Swedish","Svenska"],["sw","Swahili","Kiswahili"],["ta","Tamil","தமிழ்"],["te","Telugu","తెలుగు"],["tg","Tajik","тоҷикӣ"],["th","Thai","ไทย"],["ti","Tigrinya","ትግርኛ"],["tk","Turkmen","Türkmen"],["tl","Tagalog","Wikang Tagalog"],["tn","Tswana","Setswana"],["to","Tonga","faka Tonga"],["tr","Turkish","Türkçe"],["ts","Tsonga","Xitsonga"],["tt","Tatar","татар теле"],["tw","Twi","Twi"],["ty","Tahitian","Reo Tahiti"],["ug","Uyghur","ئۇيغۇرچە‎"],["uk","Ukrainian","Українська"],["ur","Urdu","اردو"],["uz","Uzbek","Ўзбек"],["ve","Venda","Tshivenḓa"],["vi","Vietnamese","Tiếng Việt"],["vo","Volapük","Volapük"],["wa","Walloon","walon"],["wo","Wolof","Wollof"],["xh","Xhosa","isiXhosa"],["yi","Yiddish","ייִדיש"],["yo","Yoruba","Yorùbá"],["za","Zhuang","Saɯ cueŋƅ"],["zh","Chinese","中文"],["zu","Zulu","isiZulu"],["zh-CN","Chinese (China)","简体中文"],["zh-HK","Chinese (Hong Kong)","繁體中文(香港)"],["zh-TW","Chinese (Taiwan)","繁體中文(臺灣)"],["zh-YUE","Cantonese","廣東話"],["ast","Asturian","Asturianu"],["chr","Cherokee","ᏣᎳᎩ ᎦᏬᏂᎯᏍᏗ"],["ckb","Sorani (Kurdish)","سۆرانی"],["cnr","Montenegrin","crnogorski"],["csb","Kashubian","Kaszëbsczi"],["jbo","Lojban","la .lojban."],["kab","Kabyle","Taqbaylit"],["ldn","Láadan","Láadan"],["lfn","Lingua Franca Nova","lingua franca nova"],["moh","Mohawk","Kanienʼkéha"],["nds","Low German","Plattdüütsch"],["pdc","Pennsylvania Dutch","Pennsilfaani-Deitsch"],["sco","Scots","Scots"],["sma","Southern Sami","Åarjelsaemien Gïele"],["smj","Lule Sami","Julevsámegiella"],["szl","Silesian","ślůnsko godka"],["tok","Toki Pona","toki pona"],["vai","Vai","ꕙꔤ"],["xal","Kalmyk","Хальмг келн"],["zba","Balaibalan","باليبلن"],["zgh","Standard Moroccan Tamazight","ⵜⴰⵎⴰⵣⵉⵖⵜ"]],Qn="(((?:[^A-Za-z0-9@@$##\\uFFFE\\uFEFF\\uFFFF]|[\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069]|^))((https?:\\/\\/)((?:(?:(?:[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/](?:[_-]|[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/])*)?[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/]\\.)*(?:(?:[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/](?:-|[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/])*)?[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/]\\.)(?:(?:(?:삼성|닷컴|닷넷|香格里拉|餐厅|食品|飞利浦|電訊盈科|集团|通販|购物|谷歌|诺基亚|联通|网络|网站|网店|网址|组织机构|移动|珠宝|点看|游戏|淡马锡|机构|書籍|时尚|新闻|政府|政务|招聘|手表|手机|我爱你|慈善|微博|广东|工行|家電|娱乐|天主教|大拿|大众汽车|在线|嘉里大酒店|嘉里|商标|商店|商城|公益|公司|八卦|健康|信息|佛山|企业|中文网|中信|世界|ポイント|ファッション|セール|ストア|コム|グーグル|クラウド|みんな|คอม|संगठन|नेट|कॉम|همراه|موقع|موبايلي|كوم|كاثوليك|عرب|شبكة|بيتك|بازار|العليان|ارامكو|اتصالات|ابوظبي|קום|сайт|рус|орг|онлайн|москва|ком|католик|дети|zuerich|zone|zippo|zip|zero|zara|zappos|yun|youtube|you|yokohama|yoga|yodobashi|yandex|yamaxun|yahoo|yachts|xyz|xxx|xperia|xin|xihuan|xfinity|xerox|xbox|wtf|wtc|wow|world|works|work|woodside|wolterskluwer|wme|winners|wine|windows|win|williamhill|wiki|wien|whoswho|weir|weibo|wedding|wed|website|weber|webcam|weatherchannel|weather|watches|watch|warman|wanggou|wang|walter|walmart|wales|vuelos|voyage|voto|voting|vote|volvo|volkswagen|vodka|vlaanderen|vivo|viva|vistaprint|vista|vision|visa|virgin|vip|vin|villas|viking|vig|video|viajes|vet|versicherung|vermögensberatung|vermögensberater|verisign|ventures|vegas|vanguard|vana|vacations|ups|uol|uno|university|unicom|uconnect|ubs|ubank|tvs|tushu|tunes|tui|tube|trv|trust|travelersinsurance|travelers|travelchannel|travel|training|trading|trade|toys|toyota|town|tours|total|toshiba|toray|top|tools|tokyo|today|tmall|tkmaxx|tjx|tjmaxx|tirol|tires|tips|tiffany|tienda|tickets|tiaa|theatre|theater|thd|teva|tennis|temasek|telefonica|telecity|tel|technology|tech|team|tdk|tci|taxi|tax|tattoo|tatar|tatamotors|target|taobao|talk|taipei|tab|systems|symantec|sydney|swiss|swiftcover|swatch|suzuki|surgery|surf|support|supply|supplies|sucks|style|study|studio|stream|store|storage|stockholm|stcgroup|stc|statoil|statefarm|statebank|starhub|star|staples|stada|srt|srl|spreadbetting|spot|sport|spiegel|space|soy|sony|song|solutions|solar|sohu|software|softbank|social|soccer|sncf|smile|smart|sling|skype|sky|skin|ski|site|singles|sina|silk|shriram|showtime|show|shouji|shopping|shop|shoes|shiksha|shia|shell|shaw|sharp|shangrila|sfr|sexy|sex|sew|seven|ses|services|sener|select|seek|security|secure|seat|search|scot|scor|scjohnson|science|schwarz|schule|school|scholarships|schmidt|schaeffler|scb|sca|sbs|sbi|saxo|save|sas|sarl|sapo|sap|sanofi|sandvikcoromant|sandvik|samsung|samsclub|salon|sale|sakura|safety|safe|saarland|ryukyu|rwe|run|ruhr|rugby|rsvp|room|rogers|rodeo|rocks|rocher|rmit|rip|rio|ril|rightathome|ricoh|richardli|rich|rexroth|reviews|review|restaurant|rest|republican|report|repair|rentals|rent|ren|reliance|reit|reisen|reise|rehab|redumbrella|redstone|red|recipes|realty|realtor|realestate|read|raid|radio|racing|qvc|quest|quebec|qpon|pwc|pub|prudential|pru|protection|property|properties|promo|progressive|prof|productions|prod|pro|prime|press|praxi|pramerica|post|porn|politie|poker|pohl|pnc|plus|plumbing|playstation|play|place|pizza|pioneer|pink|ping|pin|pid|pictures|pictet|pics|piaget|physio|photos|photography|photo|phone|philips|phd|pharmacy|pfizer|pet|pccw|pay|passagens|party|parts|partners|pars|paris|panerai|panasonic|pamperedchef|page|ovh|ott|otsuka|osaka|origins|orientexpress|organic|org|orange|oracle|open|ooo|onyourside|online|onl|ong|one|omega|ollo|oldnavy|olayangroup|olayan|okinawa|office|off|observer|obi|nyc|ntt|nrw|nra|nowtv|nowruz|now|norton|northwesternmutual|nokia|nissay|nissan|ninja|nikon|nike|nico|nhk|ngo|nfl|nexus|nextdirect|next|news|newholland|new|neustar|network|netflix|netbank|net|nec|nba|navy|natura|nationwide|name|nagoya|nadex|nab|mutuelle|mutual|museum|mtr|mtpc|mtn|msd|movistar|movie|mov|motorcycles|moto|moscow|mortgage|mormon|mopar|montblanc|monster|money|monash|mom|moi|moe|moda|mobily|mobile|mobi|mma|mls|mlb|mitsubishi|mit|mint|mini|mil|microsoft|miami|metlife|merckmsd|meo|menu|men|memorial|meme|melbourne|meet|media|med|mckinsey|mcdonalds|mcd|mba|mattel|maserati|marshalls|marriott|markets|marketing|market|map|mango|management|man|makeup|maison|maif|madrid|macys|luxury|luxe|lupin|lundbeck|ltda|ltd|lplfinancial|lpl|love|lotto|lotte|london|lol|loft|locus|locker|loans|loan|llp|llc|lixil|living|live|lipsy|link|linde|lincoln|limo|limited|lilly|like|lighting|lifestyle|lifeinsurance|life|lidl|liaison|lgbt|lexus|lego|legal|lefrak|leclerc|lease|lds|lawyer|law|latrobe|latino|lat|lasalle|lanxess|landrover|land|lancome|lancia|lancaster|lamer|lamborghini|ladbrokes|lacaixa|kyoto|kuokgroup|kred|krd|kpn|kpmg|kosher|komatsu|koeln|kiwi|kitchen|kindle|kinder|kim|kia|kfh|kerryproperties|kerrylogistics|kerryhotels|kddi|kaufen|juniper|juegos|jprs|jpmorgan|joy|jot|joburg|jobs|jnj|jmp|jll|jlc|jio|jewelry|jetzt|jeep|jcp|jcb|java|jaguar|iwc|iveco|itv|itau|istanbul|ist|ismaili|iselect|irish|ipiranga|investments|intuit|international|intel|int|insure|insurance|institute|ink|ing|info|infiniti|industries|inc|immobilien|immo|imdb|imamat|ikano|iinet|ifm|ieee|icu|ice|icbc|ibm|hyundai|hyatt|hughes|htc|hsbc|how|house|hotmail|hotels|hoteles|hot|hosting|host|hospital|horse|honeywell|honda|homesense|homes|homegoods|homedepot|holiday|holdings|hockey|hkt|hiv|hitachi|hisamitsu|hiphop|hgtv|hermes|here|helsinki|help|healthcare|health|hdfcbank|hdfc|hbo|haus|hangout|hamburg|hair|guru|guitars|guide|guge|gucci|guardian|group|grocery|gripe|green|gratis|graphics|grainger|gov|got|gop|google|goog|goodyear|goodhands|goo|golf|goldpoint|gold|godaddy|gmx|gmo|gmbh|gmail|globo|global|gle|glass|glade|giving|gives|gifts|gift|ggee|george|genting|gent|gea|gdn|gbiz|gay|garden|gap|games|game|gallup|gallo|gallery|gal|fyi|futbol|furniture|fund|fun|fujixerox|fujitsu|ftr|frontier|frontdoor|frogans|frl|fresenius|free|fox|foundation|forum|forsale|forex|ford|football|foodnetwork|food|foo|fly|flsmidth|flowers|florist|flir|flights|flickr|fitness|fit|fishing|fish|firmdale|firestone|fire|financial|finance|final|film|fido|fidelity|fiat|ferrero|ferrari|feedback|fedex|fast|fashion|farmers|farm|fans|fan|family|faith|fairwinds|fail|fage|extraspace|express|exposed|expert|exchange|everbank|events|eus|eurovision|etisalat|esurance|estate|esq|erni|ericsson|equipment|epson|epost|enterprises|engineering|engineer|energy|emerck|email|education|edu|edeka|eco|eat|earth|dvr|dvag|durban|dupont|duns|dunlop|duck|dubai|dtv|drive|download|dot|doosan|domains|doha|dog|dodge|doctor|docs|dnp|diy|dish|discover|discount|directory|direct|digital|diet|diamonds|dhl|dev|design|desi|dentist|dental|democrat|delta|deloitte|dell|delivery|degree|deals|dealer|deal|dds|dclk|day|datsun|dating|date|data|dance|dad|dabur|cyou|cymru|cuisinella|csc|cruises|cruise|crs|crown|cricket|creditunion|creditcard|credit|cpa|courses|coupons|coupon|country|corsica|coop|cool|cookingchannel|cooking|contractors|contact|consulting|construction|condos|comsec|computer|compare|company|community|commbank|comcast|com|cologne|college|coffee|codes|coach|clubmed|club|cloud|clothing|clinique|clinic|click|cleaning|claims|cityeats|city|citic|citi|citadel|cisco|circle|cipriani|church|chrysler|chrome|christmas|chloe|chintai|cheap|chat|chase|charity|channel|chanel|cfd|cfa|cern|ceo|center|ceb|cbs|cbre|cbn|cba|catholic|catering|cat|casino|cash|caseih|case|casa|cartier|cars|careers|career|care|cards|caravan|car|capitalone|capital|capetown|canon|cancerresearch|camp|camera|cam|calvinklein|call|cal|cafe|cab|bzh|buzz|buy|business|builders|build|bugatti|budapest|brussels|brother|broker|broadway|bridgestone|bradesco|box|boutique|bot|boston|bostik|bosch|boots|booking|book|boo|bond|bom|bofa|boehringer|boats|bnpparibas|bnl|bmw|bms|blue|bloomberg|blog|blockbuster|blanco|blackfriday|black|biz|bio|bingo|bing|bike|bid|bible|bharti|bet|bestbuy|best|berlin|bentley|beer|beauty|beats|bcn|bcg|bbva|bbt|bbc|bayern|bauhaus|basketball|baseball|bargains|barefoot|barclays|barclaycard|barcelona|bar|bank|band|bananarepublic|banamex|baidu|baby|azure|axa|aws|avianca|autos|auto|author|auspost|audio|audible|audi|auction|attorney|athleta|associates|asia|asda|arte|art|arpa|army|archi|aramco|arab|aquarelle|apple|app|apartments|aol|anz|anquan|android|analytics|amsterdam|amica|amfam|amex|americanfamily|americanexpress|alstom|alsace|ally|allstate|allfinanz|alipay|alibaba|alfaromeo|akdn|airtel|airforce|airbus|aigo|aig|agency|agakhan|africa|afl|afamilycompany|aetna|aero|aeg|adult|ads|adac|actor|active|aco|accountants|accountant|accenture|academy|abudhabi|abogado|able|abc|abbvie|abbott|abb|abarth|aarp|aaa|onion)(?=[^0-9a-zA-Z@+-]|$))|(?:(?:한국|香港|澳門|新加坡|台灣|台湾|中國|中国|გე|ລາວ|ไทย|ලංකා|ഭാരതം|ಭಾರತ|భారత్|சிங்கப்பூர்|இலங்கை|இந்தியா|ଭାରତ|ભારત|ਭਾਰਤ|ভাৰত|ভারত|বাংলা|भारोत|भारतम्|भारत|ڀارت|پاکستان|موريتانيا|مليسيا|مصر|قطر|فلسطين|عمان|عراق|سورية|سودان|تونس|بھارت|بارت|ایران|امارات|المغرب|السعودية|الجزائر|البحرين|الاردن|հայ|қаз|укр|срб|рф|мон|мкд|ею|бел|бг|ευ|ελ|zw|zm|za|yt|ye|ws|wf|vu|vn|vi|vg|ve|vc|va|uz|uy|us|um|uk|ug|ua|tz|tw|tv|tt|tr|tp|to|tn|tm|tl|tk|tj|th|tg|tf|td|tc|sz|sy|sx|sv|su|st|ss|sr|so|sn|sm|sl|sk|sj|si|sh|sg|se|sd|sc|sb|sa|rw|ru|rs|ro|re|qa|py|pw|pt|ps|pr|pn|pm|pl|pk|ph|pg|pf|pe|pa|om|nz|nu|nr|np|no|nl|ni|ng|nf|ne|nc|na|mz|my|mx|mw|mv|mu|mt|ms|mr|mq|mp|mo|mn|mm|ml|mk|mh|mg|mf|me|md|mc|ma|ly|lv|lu|lt|ls|lr|lk|li|lc|lb|la|kz|ky|kw|kr|kp|kn|km|ki|kh|kg|ke|jp|jo|jm|je|it|is|ir|iq|io|in|im|il|ie|id|hu|ht|hr|hn|hm|hk|gy|gw|gu|gt|gs|gr|gq|gp|gn|gm|gl|gi|gh|gg|gf|ge|gd|gb|ga|fr|fo|fm|fk|fj|fi|eu|et|es|er|eh|eg|ee|ec|dz|do|dm|dk|dj|de|cz|cy|cx|cw|cv|cu|cr|co|cn|cm|cl|ck|ci|ch|cg|cf|cd|cc|ca|bz|by|bw|bv|bt|bs|br|bq|bo|bn|bm|bl|bj|bi|bh|bg|bf|be|bd|bb|ba|az|ax|aw|au|at|as|ar|aq|ao|an|am|al|ai|ag|af|ae|ad|ac)(?=[^0-9a-zA-Z@+-]|$))|(?:xn--[\\-0-9a-z]+))))(?::([0-9]+))?(\\/(?:(?:[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*(?:\\((?:[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]+|(?:[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*\\([a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]+\\)[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*))\\)[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*)*[\\+\\-a-z\\u0400-\\u04FF0-9=_#\\/\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]|(?:\\((?:[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]+|(?:[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*\\([a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]+\\)[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*))\\)))|(?:@[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]+\\/))*)?(\\?[a-z0-9!?\\*'@\\(\\);:&=\\+\\$\\/%#\\[\\]\\-_\\.,~|]*[a-z0-9\\-_&=#\\/])?))",ei="gi",Nt={source:Qn,flags:ei},qt=["byte","kilobyte","megabyte","gigabyte","terabyte","petabyte"];function Xe(s){const t=Math.min(Math.floor(Math.log2(s)/10),qt.length-1),n=s/1024**t;return ge.number(n,{style:"unit",unit:qt[t],unitDisplay:"narrow",maximumFractionDigits:0})}const ti={BASE_URL:"./",DEV:!1,MODE:"production",PHANPY_CLIENT_NAME:"Phanpy",PHANPY_LINGVA_INSTANCES:"lingva.phanpy.social lingva.lunar.icu lingva.garudalinux.org translate.plausibility.cloud",PHANPY_PRIVACY_POLICY_URL:"https://github.com/cheeaun/phanpy/blob/main/PRIVACY.MD",PHANPY_WEBSITE:"https://phanpy.social",PROD:!0,SSR:!1,VITE_APP_ENV:"production"},{PHANPY_IMG_ALT_API_URL:ft,PHANPY_GIPHY_API_KEY:ni}=ti,ii=zt.reduce((s,t)=>{const[n,a,c]=t;return s[n]={common:a,native:c},s},{}),en={300:Ee(5,"minute"),1800:Ee(30,"minute"),3600:Ee(1,"hour"),21600:Ee(6,"hour"),86400:Ee(1,"day"),259200:Ee(3,"day"),604800:Ee(1,"week")},si=Object.keys(en),Kt=24*60*60,Wt=s=>{if(!s)return Kt;const t=(new Date(s).getTime()-Date.now())/1e3;return si.find(n=>n>=t)||Kt},ke=document.createElement("ul");ke.role="listbox";ke.className="text-expander-menu";const ai=16,ri=new IntersectionObserver(s=>{s.forEach(t=>{if(t.isIntersecting){const{left:n,width:a}=t.boundingClientRect,{innerWidth:c}=window;if(n+a>c){const o=En()?"right":"left";ke.style[o]=c-a-ai+"px"}}})});ri.observe(ke);const Fe=mn([new Intl.DateTimeFormat().resolvedOptions().locale,...navigator.languages],zt.map(s=>s[0]),"en"),tn=new RegExp(Nt.source,Nt.flags),oi=/(^|[^\/\w])@(([a-z0-9_]+)@[a-z0-9\.\-]+[a-z0-9]+)/gi,li="$2xxxxxxxxxxxxxxxxxxxxxxx";function ci(s){return s.replace(tn,li).replace(oi,"$1@$3")}const ui=/[a-z0-9_]+([a-z0-9_.-]+[a-z0-9_]+)?/i,di=new RegExp(`(^|[^=\\/\\w])(@${ui.source}(?:@[\\p{L}\\w.-]+[\\w]+)?)`,"uig"),hi=new RegExp("(^|[^=\\/\\w])(#[a-z0-9_]+([a-z0-9_.]+[a-z0-9_]+)?)(?![\\/\\w])","ig"),pi="[a-zA-Z0-9_]{2,}",mi=new RegExp(`(^|[^=\\/\\w])(:${pi}:)(?=[^A-Za-z0-9_:]|$)`,"g"),gi=new Intl.Segmenter;function vt(s){return s.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function fi(s,{maxCharacters:t=1/0}){const{composerCharacterCount:n}=oe;if(n>t){let a="",c="";const o=gi.segment(s);for(const{segment:l,index:y}of o)y"),vt(a)+c}return vt(s).replace(tn,'$2$3').replace(di,'$1$2').replace(hi,'$1$2').replace(mi,'$1$2')}const vi=gn(s=>new Intl.RelativeTimeFormat(s||void 0)),Ft=100;function Mi({onClose:s,replyToStatus:t,editStatus:n,draftStatus:a,standalone:c,hasOpener:o}){var Mt;const{i18n:l}=Ke(),y=vi(l.locale),{masto:E,instance:M}=Ct(),[F,v]=U("default"),B=G((a==null?void 0:a.uid)||Fn()),L=fn(),T=L.info,j=Yt(),{statuses:{maxCharacters:ie,maxMediaAttachments:O,charactersReservedPerUrl:p}={},mediaAttachments:{supportedMimeTypes:d=[],imageSizeLimit:m,imageMatrixLimit:w,videoSizeLimit:f,videoMatrixLimit:R,videoFrameRateLimit:k}={},polls:{maxOptions:K,maxCharactersPerOption:ae,maxExpiration:ce,minExpiration:X}={}}=j||{},$=G(),W=G(),[H,te]=U("public"),[Y,ue]=U(!1),[P,se]=U(Se.session.get("currentLanguage")||Fe),fe=G(P),[g,S]=U([]),[z,J]=U(null),N=Se.account.get("preferences")||{},de=()=>{$.current&&$.current.dispatchEvent(new Event("input"))},pe=()=>{setTimeout(()=>{var r,u,x;$.current&&((u=(r=a==null?void 0:a.status)==null?void 0:r.startsWith)!=null&&u.call(r,` -`)&&($.current.selectionStart=0,$.current.selectionEnd=0),(x=$.current)==null||x.focus())},300)};ne(()=>{var r,u;if(t){const{spoilerText:x,visibility:h,language:A,sensitive:C}=t;x&&W.current&&(W.current.value=x);const b=[...new Set([t.account.acct,...t.mentions.map(_=>_.acct)])].filter(_=>_!==T.acct);b.length>0&&($.current.value=`${b.map(_=>`@${_}`).join(" ")} `,de()),pe(),te(h==="public"&&N["posting:default:visibility"]?N["posting:default:visibility"].toLowerCase():h),se(A||((r=N["posting:default:language"])==null?void 0:r.toLowerCase())||Fe),ue(C&&!!x)}else if(n){const{visibility:x,language:h,sensitive:A,poll:C,mediaAttachments:D}=n,b=!!(C!=null&&C.options)&&{...C,options:C.options.map(_=>(_==null?void 0:_.title)||_),expiresIn:(C==null?void 0:C.expiresIn)||Wt(C.expiresAt)};v("loading"),(async()=>{var _;try{const q=await E.v1.statuses.$select(n.id).source.fetch(),{text:he,spoilerText:ve}=q;$.current.value=he,$.current.dataset.source=he,de(),pe(),W.current.value=ve,te(x),se(h||((_=N["posting:default:language"])==null?void 0:_.toLowerCase())||Fe),ue(A),b&&J(b),S(D),v("default")}catch(q){alert((q==null?void 0:q.reason)||q),v("error")}})()}else pe(),N["posting:default:visibility"]&&te(N["posting:default:visibility"].toLowerCase()),N["posting:default:language"]&&se(N["posting:default:language"].toLowerCase()),N["posting:default:sensitive"]&&ue(!!N["posting:default:sensitive"]);if(a){const{status:x,spoilerText:h,visibility:A,language:C,sensitive:D,poll:b,mediaAttachments:_}=a,q=!!(b!=null&&b.options)&&{...b,options:b.options.map(he=>(he==null?void 0:he.title)||he),expiresIn:(b==null?void 0:b.expiresIn)||Wt(b.expiresAt)};$.current.value=x,de(),pe(),h&&(W.current.value=h),A&&te(A),se(C||((u=N["posting:default:language"])==null?void 0:u.toLowerCase())||Fe),D!==null&&ue(D),q&&J(q),_&&S(_)}},[a,n,t]);const Le=G(),Ae=l._({id:"hR9gtK"}),rt=()=>{const{value:r,dataset:u}=$.current;if(F==="loading")return!1;const x=(r||"").trim().replace(new RegExp("^\\p{White_Space}+|\\p{White_Space}+$","gu"),""),h=g.length>0;if(!x&&!h||g.length>0&&g.every(_=>_.id))return!0;const C=(t==null?void 0:t.account.id)===T.id,D=t&&r.trim()===`@${t.account.acct}`;return!!(!C&&D||r===(u==null?void 0:u.source))},We=()=>rt()?!0:confirm(Ae);ne(()=>{const r=u=>{rt()||(u.preventDefault(),u.returnValue=Ae)};return window.addEventListener("beforeunload",r,{capture:!0}),()=>window.removeEventListener("beforeunload",r,{capture:!0})},[]);const an=()=>{const{value:r}=$.current,{value:u}=W.current;return Ht(ci(r))+Ht(u)},ot=()=>{const r=an();oe.composerCharacterCount=r};ne(ot,[]);const Lt=window.CloseWatcher,lt=G(!1);Oe("esc",()=>{lt.current=!0},{enabled:!Lt,enableOnFormTags:!0}),Oe("esc",()=>{!c&<.current&&We()&&s(),lt.current=!1},{enabled:!Lt,enableOnFormTags:!0,keyup:!0,ignoreEventWhen:r=>{const u=document.querySelectorAll("#modal-container > *"),x=!!u,h=u.length===1&&u[0].querySelector("#compose-container");return x&&!h}}),Cn(()=>{!c&&We()&&s()},[c,We,s]);const At=G({}),St=()=>`${vn()}#${B.current}`,ct=()=>{if(n||oe.composerState.minimized)return;const r=St(),u={key:r,replyTo:t?{id:t.id,account:{id:t.account.id,username:t.account.username,acct:t.account.acct}}:null,draftStatus:{uid:B.current,status:$.current.value,spoilerText:W.current.value,visibility:H,language:P,sensitive:Y,poll:z,mediaAttachments:g}};!bn(u,At.current)&&!rt()&&(Rt.drafts.set(r,{...u,state:"unsaved",updatedAt:Date.now()}).then(()=>{}).catch(x=>{}),At.current=structuredClone(u))};zn(ct,5e3),ne(()=>(ct(),()=>{Rt.drafts.del(St())}),[]),ne(()=>{const r=x=>{const{items:h}=x.clipboardData||x.dataTransfer,A=[];for(let C=0;C0&&g.length>=O){alert(l._({id:"ctFhjs",values:{maxMediaAttachments:O}}));return}if(A.length>0){x.preventDefault(),x.stopPropagation();const C=O-g.length,D=A.slice(0,C);if(D.length<=0){alert(l._({id:"ctFhjs",values:{maxMediaAttachments:O}}));return}const b=D.map(_=>({file:_,type:_.type,size:_.size,url:URL.createObjectURL(_),id:null,description:null}));S([...g,...b])}};window.addEventListener("paste",r);const u=x=>{x.dataTransfer.items.length>0&&(x.preventDefault(),x.stopPropagation())};return window.addEventListener("dragover",u),window.addEventListener("drop",r),()=>{window.removeEventListener("paste",r),window.removeEventListener("dragover",u),window.removeEventListener("drop",r)}},[g]);const[Ue,ut]=U(!1),[Ve,Ge]=U(!1),[rn,dt]=U(!1),[xe,on]=U(null),[ln,cn]=Pe(()=>{const r=[],u=[],{contentTranslationHideLanguages:x=[]}=oe.settings;return zt.forEach(h=>{const[A]=h;A===P||A===fe.current||A===Fe||x.includes(A)||xe!=null&&xe.length&&xe.includes(A)?r.push(h):u.push(h)}),r.sort(([h,A],[C,D])=>h===P?-1:C===P?1:A.localeCompare(D)),u.sort(([h,A],[C,D])=>A.localeCompare(D)),[r,u]},[P,xe]),It=Pe(()=>!!(t!=null&&t.createdAt)&&Math.floor((Date.now()-new Date(t.createdAt))/(1e3*60*60*24*30)),[t]),un=()=>{ct(),oe.composerState.minimized=!0};return e("div",{id:"compose-container-outer",children:[e("div",{id:"compose-container",class:c?"standalone":"",children:[e("div",{class:"compose-top",children:[(T==null?void 0:T.avatarStatic)&&e(Xt,{account:T,accountInstance:L.instanceURL,hideDisplayName:!0,useAvatarStatic:!0}),c?o&&e("button",{type:"button",class:"light pop-button",disabled:F==="loading",onClick:()=>{var r;if(!window.opener){alert(l._({id:"qiPXgY"}));return}if(window.opener.__STATES__.showCompose){if((r=window.opener.__STATES__.composerState)!=null&&r.publishing){alert(l._({id:"Z2l5Bt"}));return}let u=l._({id:"AB/GtR"});if(!confirm(u))return}s({fn:()=>{const u={editStatus:n,replyToStatus:t,draftStatus:{uid:B.current,status:$.current.value,spoilerText:W.current.value,visibility:H,language:P,sensitive:Y,poll:z,mediaAttachments:g}};window.opener.__COMPOSE__=u,window.opener.__STATES__.showCompose?(window.opener.__STATES__.showCompose=!1,setTimeout(()=>{window.opener.__STATES__.showCompose=!0},10)):window.opener.__STATES__.showCompose=!0,window.opener.__STATES__.composerState.minimized&&(window.opener.__STATES__.composerState.minimized=!1)}})},children:e(Z,{icon:"popin",alt:l._({id:"/5ZKeE"})})}):e("span",{class:"compose-controls",children:[e("button",{type:"button",class:"plain4 pop-button",disabled:F==="loading",onClick:()=>{_n({editStatus:n,replyToStatus:t,draftStatus:{uid:B.current,status:$.current.value,spoilerText:W.current.value,visibility:H,language:P,sensitive:Y,poll:z,mediaAttachments:g}})&&s()},children:e(Z,{icon:"popout",alt:l._({id:"JsU2En"})})}),e("button",{type:"button",class:"plain4 min-button",onClick:un,children:e(Z,{icon:"minimize",alt:l._({id:"3TSz9S"})})})," ",e("button",{type:"button",class:"light close-button",disabled:F==="loading",onClick:()=>{We()&&s()},children:e(Z,{icon:"x",alt:l._({id:"yz7wBu"})})})]})]}),!!t&&e("div",{class:"status-preview",children:[e(Dt,{status:t,size:"s",previewMode:!0}),e("div",{class:"status-preview-legend reply-to",children:It>0?e(V,{id:"Q1Huya",values:{0:t.account.acct||t.account.username,1:y.format(-It,"month")},components:{0:e("strong",{})}}):e(V,{id:"dwLCPZ",values:{0:t.account.acct||t.account.username}})})]}),!!n&&e("div",{class:"status-preview",children:[e(Dt,{status:n,size:"s",previewMode:!0}),e("div",{class:"status-preview-legend",children:e(V,{id:"wKtOLH"})})]}),e("form",{ref:Le,class:`form-visibility-${H}`,style:{pointerEvents:F==="loading"?"none":"auto",opacity:F==="loading"?.5:1},onKeyDown:r=>{r.key==="Enter"&&(r.ctrlKey||r.metaKey)&&Le.current.dispatchEvent(new Event("submit",{cancelable:!0}))},onSubmit:r=>{r.preventDefault();const u=new FormData(r.target),x=Object.fromEntries(u.entries());let{status:h,visibility:A,sensitive:C,spoilerText:D}=x;if(C=C==="on",z){if(z.options.length<2){alert(l._({id:"zhrMYj"}));return}if(z.options.some(b=>b==="")){alert(l._({id:"uNVxXX"}));return}}g.length>0&&g.some(_=>{var q,he;return!((he=(q=_.description)==null?void 0:q.trim)!=null&&he.call(q))})&&!confirm(l._({id:"MQYucx"}))||(D=C&&D||void 0,h=h===""?void 0:h,oe.composerState.publishing=!0,v("loading"),(async()=>{try{if(g.length>0){const q=g.map(ve=>{const{file:Ye,description:dn,id:hn}=ve;if(hn)return ve;{const pn=Gt({file:Ye,description:dn});return E.v2.media.create(pn).then(ht=>(ht.id&&(ve.id=ht.id),ht))}}),he=await Promise.allSettled(q);if(he.some(ve=>{var Ye;return ve.status==="rejected"||!((Ye=ve.value)!=null&&Ye.id)})){oe.composerState.publishing=!1,oe.composerState.publishingError=!0,v("error"),he.forEach(ve=>{ve.status==="rejected"&&alert(ve.reason||l._({id:"eIiurD",values:{i}}))});return}}let b={status:h,spoiler_text:D,language:P,sensitive:C,poll:z,media_ids:g.map(q=>q.id)};n&&Jt("@mastodon/edit-media-attributes")?b.media_attributes=g.map(q=>({id:q.id,description:q.description})):n||(b.visibility=A,b.in_reply_to_id=(t==null?void 0:t.id)||void 0),b=Gt(b);let _;if(n)_=await E.v1.statuses.$select(n.id).update(b),xn(_,M,{skipThreading:!0});else try{_=await E.v1.statuses.create(b,{requestInit:{headers:{"Idempotency-Key":B.current}}})}catch{_=await E.v1.statuses.create(b)}oe.composerState.minimized=!1,oe.composerState.publishing=!1,v("default"),s({type:n?"edit":t?"reply":"post",newStatus:_,instance:M})}catch(b){oe.composerState.publishing=!1,oe.composerState.publishingError=!0,alert((b==null?void 0:b.reason)||b),v("error")}})())},children:[e("div",{class:"toolbar stretch",children:[e("input",{ref:W,type:"text",name:"spoilerText",placeholder:l._({id:"gnKo7f"}),disabled:F==="loading",class:"spoiler-text-field",lang:P,spellCheck:"true",dir:"auto",style:{opacity:Y?1:0,pointerEvents:Y?"auto":"none"},onInput:()=>{ot()}}),e("label",{class:`toolbar-button ${Y?"highlight":""}`,title:l._({id:"zKu2Aq"}),children:[e("input",{name:"sensitive",type:"checkbox",checked:Y,disabled:F==="loading",onChange:r=>{var x,h;const u=r.target.checked;ue(u),u?(x=W.current)==null||x.focus():(h=$.current)==null||h.focus()}}),e(Z,{icon:`eye-${Y?"close":"open"}`})]})," ",e("label",{class:`toolbar-button ${H!=="public"&&!Y?"show-field":""} ${H!=="public"?"highlight":""}`,title:`Visibility: ${H}`,children:[e(Z,{icon:Ln[H],alt:H}),e("select",{name:"visibility",value:H,onChange:r=>{te(r.target.value)},disabled:F==="loading"||!!n,dir:"auto",children:[e("option",{value:"public",children:e(V,{id:"7d1a0d"})}),e("option",{value:"unlisted",children:e(V,{id:"WDcQq9"})}),e("option",{value:"private",children:e(V,{id:"o34OrG"})}),e("option",{value:"direct",children:e(V,{id:"IV4QaU"})})]})]})," "]}),e(yi,{ref:$,placeholder:t?l._({id:"Sjj+EN"}):n?l._({id:"qzVesX"}):l._({id:"owpNF1"}),required:(g==null?void 0:g.length)===0,disabled:F==="loading",lang:P,onInput:()=>{ot()},maxCharacters:ie,performSearch:r=>{const{type:u,q:x,limit:h}=r;return u==="accounts"?E.v1.accounts.search.list({q:x,limit:h,resolve:!1}):E.v2.search.fetch(r)},onTrigger:r=>{(r==null?void 0:r.name)==="custom-emojis"?Ge({defaultSearchTerm:(r==null?void 0:r.defaultSearchTerm)||null}):(r==null?void 0:r.name)==="mention"?ut({defaultSearchTerm:(r==null?void 0:r.defaultSearchTerm)||null}):(r==null?void 0:r.name)==="auto-detect-language"&&(r!=null&&r.languages)&&on(r.languages)}}),(g==null?void 0:g.length)>0&&e("div",{class:"media-attachments",children:[g.map((r,u)=>{const{id:x,file:h}=r,A=(h==null?void 0:h.size)+(h==null?void 0:h.type)+(h==null?void 0:h.name);return e(ki,{attachment:r,disabled:F==="loading",lang:P,onDescriptionChange:C=>{S(D=>{const b=[...D];return b[u].description=C,b})},onRemove:()=>{S(C=>C.filter((D,b)=>b!==u))}},x||A||u)}),e("label",{class:"media-sensitive",children:[e("input",{name:"sensitive",type:"checkbox",checked:Y,disabled:F==="loading",onChange:r=>{const u=r.target.checked;ue(u)}})," ",e("span",{children:e(V,{id:"jER18a"})})," ",e(Z,{icon:`eye-${Y?"close":"open"}`})]})]}),!!z&&e(Ei,{lang:P,maxOptions:K,maxExpiration:ce,minExpiration:X,maxCharactersPerOption:ae,poll:z,disabled:F==="loading",onInput:r=>{if(r){const u={...r};J(u)}else J(null)}}),e("div",{class:"toolbar wrap",style:{justifyContent:"flex-end"},children:[e("span",{children:[e("label",{class:"toolbar-button",children:[e("input",{type:"file",accept:d.join(","),multiple:g.length=O||!!z,onChange:r=>{const u=r.target.files;if(!u)return;const x=Array.from(u).map(h=>({file:h,type:h.type,size:h.size,url:URL.createObjectURL(h),id:null,description:null}));g.length+x.length>O?alert(l._({id:"ctFhjs",values:{maxMediaAttachments:O}})):S(h=>h.concat(x)),r.target.value=""}}),e(Z,{icon:"attachment"})]}),K==null||K>1&&e(De,{children:e("button",{type:"button",class:"toolbar-button",disabled:F==="loading"||!!z||!!g.length,onClick:()=>{J({options:["",""],expiresIn:24*60*60,multiple:!1})},children:e(Z,{icon:"poll",alt:l._({id:"cZJ92q"})})})}),e("button",{type:"button",class:"toolbar-button",disabled:F==="loading",onClick:()=>{Ge(!0)},children:e(Z,{icon:"emoji2",alt:l._({id:"ggiJLM"})})}),!!oe.settings.composerGIFPicker&&e("button",{type:"button",class:"toolbar-button gif-picker-button",disabled:F==="loading"||g.length>=O||!!z,onClick:()=>{dt(!0)},children:e("span",{children:"GIF"})})]}),e("div",{class:"spacer"}),F==="loading"?e(st,{abrupt:!0}):e(wi,{maxCharacters:ie,hidden:F==="loading"}),e("label",{class:`toolbar-button ${P!==fe.current||xe!=null&&xe.length&&!xe.includes(P)?"highlight":""}`,children:[e("span",{class:"icon-text",children:(Mt=ii[P])==null?void 0:Mt.native}),e("select",{name:"language",value:P,onChange:r=>{const{value:u}=r.target;se(u||Fe),Se.session.set("currentLanguage",u||Fe)},disabled:F==="loading",dir:"auto",children:[ln.map(([r,u,x])=>{const h=xt({code:r,fallback:u});return e("option",{value:r,children:h!==x?`${x} - ${h}`:h},r)}),e("hr",{}),cn.map(([r,u,x])=>{const h=xt({code:r,fallback:u});return e("option",{value:r,children:h!==x?`${x} - ${h}`:h},r)})]})]})," ",e("button",{type:"submit",class:"large",disabled:F==="loading",children:t?l._({id:"ImOQa9"}):n?l._({id:"EkH9pt"}):l._({id:"GMe2XV"})})]})]})]}),Ue&&e(Je,{onClick:r=>{r.target===r.currentTarget&&ut(!1)},children:e(Fi,{masto:E,instance:M,onClose:()=>{ut(!1)},defaultSearchTerm:Ue==null?void 0:Ue.defaultSearchTerm,onSelect:r=>{const u=$.current;if(!u)return;const{selectionStart:x,selectionEnd:h}=u,A=u.value,C=A.slice(0,x),D=C?/[\s\t\n\r]$/.test(C)?"":" ":"",b=A.slice(h),_=/^[\s\t\n\r]/.test(b)?"":" ",q=C+D+"@"+r+_+b;u.value=q,u.selectionStart=u.selectionEnd=h+1+r.length+_.length,u.focus(),u.dispatchEvent(new Event("input"))}})}),Ve&&e(Je,{onClick:r=>{r.target===r.currentTarget&&Ge(!1)},children:e(Ci,{masto:E,instance:M,onClose:()=>{Ge(!1)},defaultSearchTerm:Ve==null?void 0:Ve.defaultSearchTerm,onSelect:r=>{const u=$.current;if(!u)return;const{selectionStart:x,selectionEnd:h}=u,A=u.value,C=A.slice(0,x),D=C?/[\s\t\n\r]$/.test(C)?"":" ":"",b=A.slice(h),_=/^[\s\t\n\r]/.test(b)?"":" ",q=C+D+r+_+b;u.value=q,u.selectionStart=u.selectionEnd=h+r.length+_.length,u.focus(),u.dispatchEvent(new Event("input"))}})}),rn&&e(Je,{onClick:r=>{r.target===r.currentTarget&&dt(!1)},children:e(_i,{onClose:()=>dt(!1),onSelect:({url:r,type:u,alt_text:x})=>{if(g.length>=O){alert(l._({id:"ctFhjs",values:{maxMediaAttachments:O}}));return}(async()=>{var A,C;let h;try{h=Ce({text:l._({id:"/Cw4Tx"}),duration:-1});const D=await fetch(r,{referrerPolicy:"no-referrer"}).then(q=>q.blob()),b=new File([D],u==="video/mp4"?"video.mp4":"image.gif",{type:u}),_=[...g,{file:b,type:u,size:b.size,id:null,description:x||""}];S(_),(A=h==null?void 0:h.hideToast)==null||A.call(h)}catch{(C=h==null?void 0:h.hideToast)==null||C.call(h),Ce(l._({id:"VKDnAx"}))}})()}})})]})}function Ut(s){if(!s)return;const{value:t,offsetHeight:n,scrollHeight:a,clientHeight:c}=s;if(no.visibleInPicker),c=new An(a,{keys:["shortcode"],findAllMatches:!0});return[a,c]}const nn=yn(bi,{matchesArg:(s,t)=>s.instance===t.instance,maxAge:30*60*1e3}),xi=s=>{const t=Rn(s);return t!=null&&t.length?t.slice(0,2).map(n=>n.lang):null},yi=wn((s,t)=>{var O;const{masto:n,instance:a}=Ct(),[c,o]=U(((O=t.current)==null?void 0:O.value)||""),{maxCharacters:l,performSearch:y=()=>{},onTrigger:E=()=>{},...M}=s,F=G();ne(()=>{nn(a,n).then(p=>{const[d,m]=p;F.current=m}).catch(p=>{})},[]);const v=G(),B=G("");ne(()=>{let p,d,m;return v.current&&(p=w=>{var ae;const{key:f,provide:R,text:k}=w.detail;if(B.current=k,k===""){R(Promise.resolve({matched:!1}));return}if(f===":"){const ce=(ae=F.current)==null?void 0:ae.search(k,{limit:5});let X="";ce.forEach(({item:$})=>{const{shortcode:W,url:H}=$;X+=` -
  • - - ${we(W)} -
  • `}),X+=`
  • ${ge._({id:"24misb"})}
  • `,ke.innerHTML=X,R(Promise.resolve({matched:ce.length>0,fragment:ke}));return}const K={"@":"accounts","#":"hashtags"}[f];R(new Promise(ce=>{y({type:K,q:k,limit:5}).then($=>{if(k!==B.current)return;const W=$[K]||$;let H="";W.forEach(te=>{var J;const{name:Y,avatarStatic:ue,displayName:P,username:se,acct:fe,emojis:g,history:S}=te,z=Sn(P,g);if(fe)H+=` -
  • - - - - - ${z||se} -
    @${we(fe)} -
    -
  • - `;else{const N=(J=S==null?void 0:S.reduce)==null?void 0:J.call(S,(de,pe)=>de+ +pe.uses,0);H+=` -
  • - #${we(Y)} - ${N?`${In(N)}`:""} -
  • - `}}),K==="accounts"&&(H+=`
  • ${ge._({id:"24misb"})}
  • `),ke.innerHTML=H,ce({matched:W.length>0,fragment:ke})})}))},v.current.addEventListener("text-expander-change",p),d=w=>{const{key:f,item:R}=w.detail,{value:k,more:K}=R.dataset;f===":"?(w.detail.value=k?`:${k}:`:"​",K&&(w.detail.continue=!0,setTimeout(()=>{E==null||E({name:"custom-emojis",defaultSearchTerm:K})},300))):f==="@"?(w.detail.value=k?`@${k} `:"​",K&&(w.detail.continue=!0,setTimeout(()=>{E==null||E({name:"mention",defaultSearchTerm:K})},300))):w.detail.value=`${f}${k}`},v.current.addEventListener("text-expander-value",d),m=w=>{const{input:f}=w.detail;if(o(f.value),t.current){const R=new Event("input",{bubbles:!0});t.current.dispatchEvent(R)}},v.current.addEventListener("text-expander-committed",m)),()=>{v.current&&(v.current.removeEventListener("text-expander-change",p),v.current.removeEventListener("text-expander-value",d),v.current.removeEventListener("text-expander-committed",m))}},[]),ne(()=>{const p=t.current;if(!p)return;new ResizeObserver(()=>{if(v.current){const{height:m}=p.getBoundingClientRect();v.current.style.height=m+"px"}}).observe(p)},[]);const L=G(0),T=G(),j=Mn(p=>{var w;if(!T.current)return;if(L.current>3){T.current.innerHTML="",T.current=null,(w=j==null?void 0:j.cancel)==null||w.call(j);return}let d,m;L.current<=3&&(d=Date.now()),T.current.innerHTML=fi(p,{maxCharacters:l})+` -`,L.current<=3&&(m=Date.now()),d&&m&&m-d>50&&L.current++},500),ie=at(()=>{var w,f;const p=(w=T.current)==null?void 0:w.cloneNode(!0);if(!p)return;p.querySelectorAll("mark").forEach(R=>{R.remove()});const d=(f=p.innerText)==null?void 0:f.trim();if(!d)return;const m=xi(d);m!=null&&m.length&&(E==null||E({name:"auto-detect-language",languages:m}))},2e3);return e("text-expander",{ref:v,keys:"@ # :",class:"compose-field-container",children:[e("textarea",{class:"compose-field",autoCapitalize:"sentences",autoComplete:"on",autoCorrect:"on",spellCheck:"true",dir:"auto",rows:"6",cols:"50",...M,ref:t,name:"status",value:c,onKeyDown:p=>{const{key:d,target:m}=p;if(d==="Enter"&&!(p.ctrlKey||p.metaKey))try{const{value:w,selectionStart:f}=m,k=w.slice(0,f).split(` -`).slice(-1)[0];if(k&&/^\s*(-|\d+\.)\s/.test(k)){const[K,ae,ce,X,$]=k.match(/^(\s*)(-|\d+\.)(\s+)(.+)?/)||[];if($){p.preventDefault();const[W]=ce.match(/\d+/)||[],H=W?`${+W+1}.`:"-",te=` -${ae}${H}${X}`;m.setRangeText(te,f,f);const Y=f+te.length;m.setSelectionRange(Y,Y)}else{const W=f-k.length;m.setRangeText("",W,f)}Ut(m),m.dispatchEvent(new Event("input"))}}catch{}T.current&&(T.current.scrollTop=m.scrollTop)},onInput:p=>{var w;const{target:d}=p,m=d.value.replace(/\u200b/g,"");o(m),Ut(d),(w=s.onInput)==null||w.call(s,p),j(m),ie()},style:{width:"100%",height:"4em"},onScroll:p=>{if(T.current){const{scrollTop:d}=p.target;T.current.scrollTop=d}}}),e("div",{ref:T,class:"compose-highlight","aria-hidden":"true"})]})});function wi({maxCharacters:s=500,hidden:t}){const a=kn(oe).composerCharacterCount,c=s-a;return t?e("span",{class:"char-counter",hidden:!0}):e("span",{class:"char-counter",title:`${c}/${s}`,style:{"--percentage":a/s*100},children:[e("meter",{class:`${c<=-10?"explode":c<=0?"danger":c<=20?"warning":""}`,value:a,max:s}),e("span",{class:"counter",children:c})]})}function Vt(s,t,n,a){const c=Math.sqrt(t/s),o=Math.floor(n*c),l=Math.floor(a*c);return{newWidth:o,newHeight:l}}function ki({attachment:s,disabled:t,lang:n,onDescriptionChange:a=()=>{},onRemove:c=()=>{}}){const{i18n:o}=Ke(),[l,y]=U("default"),E=Jt("@mastodon/edit-media-attributes"),{type:M,id:F,file:v}=s,B=Pe(()=>v?URL.createObjectURL(v):s.url,[v,s.url]),L=!!(v!=null&&v.size),T=L?Yt():{},{mediaAttachments:{imageSizeLimit:j,imageMatrixLimit:ie,videoSizeLimit:O,videoMatrixLimit:p,videoFrameRateLimit:d}={}}=T||{},[m,w]=U(()=>L?M.startsWith("image")&&j&&v.size>j?{type:"imageSizeLimit",details:{imageSize:v.size,imageSizeLimit:j}}:M.startsWith("video")&&O&&v.size>O?{type:"videoSizeLimit",details:{videoSize:v.size,videoSizeLimit:O}}:null:null),[f,R]=U({});ne(()=>{!L||!ie||(f==null?void 0:f.matrix)>ie&&w({type:"imageMatrixLimit",details:{imageMatrix:f==null?void 0:f.matrix,imageMatrixLimit:ie,width:f==null?void 0:f.width,height:f==null?void 0:f.height}})},[f,ie,L]);const[k,K]=U({});ne(()=>{!L||!p||(k==null?void 0:k.matrix)>p&&w({type:"videoMatrixLimit",details:{videoMatrix:k==null?void 0:k.matrix,videoMatrixLimit:p,width:k==null?void 0:k.width,height:k==null?void 0:k.height}})},[k,p,L]);const[ae,ce]=U(s.description),[X,$]=M.split("/"),W=at(a,250);ne(()=>{W(ae)},[ae,W]);const[H,te]=U(!1),Y=G(null);ne(()=>{let g;return H&&Y.current&&(g=setTimeout(()=>{Y.current.focus()},100)),()=>{clearTimeout(g)}},[H]);const ue=e(De,{children:F&&!E?e("div",{class:"media-desc",children:[e("span",{class:"tag",children:e(V,{id:"3wG7HI"})}),e("p",{title:ae,children:s.description||e("i",{children:"No description"})})]}):e("textarea",{ref:Y,value:ae||"",lang:n,placeholder:{image:o._({id:"Lh8B0N"}),video:o._({id:"mN4S+e"}),audio:o._({id:"ieZytw"})}[X],autoCapitalize:"sentences",autoComplete:"on",autoCorrect:"on",spellCheck:"true",dir:"auto",disabled:t||l==="loading",class:l==="loading"?"loading":"",maxlength:"1500",onInput:g=>{const{value:S}=g.target;ce(S)}})}),P=G(null);ne(()=>()=>{var g,S;(S=(g=P.current)==null?void 0:g.hideToast)==null||S.call(g)},[]);const se=G(null),fe=g=>{const{type:S,details:z}=g;switch(S){case"imageSizeLimit":{const{imageSize:J,imageSizeLimit:N}=z;return o._({id:"d83/LB",values:{0:Xe(J),1:Xe(N)}})}case"imageMatrixLimit":{const{imageMatrix:J,imageMatrixLimit:N,width:de,height:pe}=z,{newWidth:Le,newHeight:Ae}=Vt(J,N,de,pe);return o._({id:"DuvOX/",values:{0:o.number(de),1:o.number(pe),2:o.number(Le),3:o.number(Ae)}})}case"videoSizeLimit":{const{videoSize:J,videoSizeLimit:N}=z;return o._({id:"d83/LB",values:{0:Xe(J),1:Xe(N)}})}case"videoMatrixLimit":{const{videoMatrix:J,videoMatrixLimit:N,width:de,height:pe}=z,{newWidth:Le,newHeight:Ae}=Vt(J,N,de,pe);return o._({id:"DuvOX/",values:{0:o.number(de),1:o.number(pe),2:o.number(Le),3:o.number(Ae)}})}case"videoFrameRateLimit":return o._({id:"S1fBwy"})}};return e(De,{children:[e("div",{class:"media-attachment",children:[e("div",{class:"media-preview",tabIndex:"0",onClick:()=>{te(!0)},children:X==="image"?e("img",{src:B,alt:"",onLoad:g=>{if(!L)return;const{naturalWidth:S,naturalHeight:z}=g.target;R({matrix:S*z,width:S,height:z})}}):X==="video"||X==="gifv"?e("video",{src:B+"#t=0.1",playsinline:!0,muted:!0,disablePictureInPicture:!0,preload:"metadata",onLoadedMetadata:g=>{if(!L)return;const{videoWidth:S,videoHeight:z}=g.target;S&&z&&K({matrix:S*z,width:S,height:z})}}):X==="audio"?e("audio",{src:B,controls:!0}):null}),ue,e("div",{class:"media-aside",children:[e("button",{type:"button",class:"plain close-button",disabled:t,onClick:c,children:e(Z,{icon:"x",alt:o._({id:"t/YqKh"})})}),!!m&&e("button",{type:"button",class:"media-error",title:fe(m),onClick:()=>{se.current&&se.current.hideToast(),se.current=Ce({text:fe(m),duration:1e4})},children:e(Z,{icon:"alert",alt:o._({id:"SlfejT"})})})]})]}),H&&e(Je,{onClose:()=>{te(!1)},children:e("div",{id:"media-sheet",class:"sheet sheet-max",children:[e("button",{type:"button",class:"sheet-close",onClick:()=>{te(!1)},children:e(Z,{icon:"x",alt:o._({id:"yz7wBu"})})}),e("header",{children:e("h2",{children:{image:o._({id:"oMslIB"}),video:o._({id:"WZw+zB"}),audio:o._({id:"KMtgtM"})}[X]})}),e("main",{tabIndex:"-1",children:[e("div",{class:"media-preview",children:X==="image"?e("img",{src:B,alt:""}):X==="video"||X==="gifv"?e("video",{src:B,playsinline:!0,controls:!0}):X==="audio"?e("audio",{src:B,controls:!0}):null}),e("div",{class:"media-form",children:[ue,e("footer",{children:[X==="image"&&/^(png|jpe?g|gif|webp)$/i.test($)&&!!oe.settings.mediaAltGenerator&&!!ft&&e(Bn,{portal:{target:document.body},containerProps:{style:{zIndex:1001}},align:"center",position:"anchor",overflow:"auto",menuButton:e("button",{type:"button",class:"plain",children:e(Z,{icon:"more",size:"l",alt:o._({id:"2FYpfJ"})})}),children:[e($t,{disabled:l==="loading",onClick:()=>{y("loading"),P.current=Ce({text:o._({id:"8zsp51"}),duration:-1}),async function(){var g,S;try{const z=new FormData;z.append("image",v);const J=await fetch(ft,{method:"POST",body:z}).then(N=>N.json());if(J.error)throw new Error(J.error);ce(J.description)}catch(z){Ce(z.message?o._({id:"wy0Iwj",values:{0:z.message}}):o._({id:"xhYfVj"}))}finally{y("default"),(S=(g=P.current)==null?void 0:g.hideToast)==null||S.call(g)}}()},children:[e(Z,{icon:"sparkles2"}),n&&n!=="en"?e("small",{children:[e(V,{id:"o5sTJw"}),e("br",{}),"(English)"]}):e("span",{children:e(V,{id:"o5sTJw"})})]}),!!n&&n!=="en"&&e($t,{disabled:l==="loading",onClick:()=>{y("loading"),P.current=Ce({text:o._({id:"8zsp51"}),duration:-1}),async function(){var g,S;try{const z=new FormData;z.append("image",v);const J=`?lang=${n}`,N=await fetch(ft+J,{method:"POST",body:z}).then(de=>de.json());if(N.error)throw new Error(N.error);ce(N.description)}catch(z){Ce(o._({id:"eNTGfp",values:{0:z!=null&&z.message?`: ${z.message}`:""}}))}finally{y("default"),(S=(g=P.current)==null?void 0:g.hideToast)==null||S.call(g)}}()},children:[e(Z,{icon:"sparkles2"}),e("small",{children:[e(V,{id:"o5sTJw"}),e("br",{}),e(V,{id:"m+pAEQ",values:{0:xt(n)},components:{0:e("span",{class:"more-insignificant"})}})]})]})]}),e("button",{type:"button",class:"light block",onClick:()=>{te(!1)},disabled:l==="loading",children:e(V,{id:"DPfwMq"})})]})]})]})]})})]})}function Ei({lang:s,poll:t,disabled:n,onInput:a=()=>{},maxOptions:c,maxExpiration:o,minExpiration:l,maxCharactersPerOption:y}){const{_:E}=Ke(),{options:M,expiresIn:F,multiple:v}=t;return e("div",{class:`poll ${v?"multiple":""}`,children:[e("div",{class:"poll-choices",children:M.map((B,L)=>e("div",{class:"poll-choice",children:[e("input",{required:!0,type:"text",value:B,disabled:n,maxlength:y,placeholder:ge._({id:"LDUSXg",values:{0:L+1}}),lang:s,spellCheck:"true",dir:"auto",onInput:T=>{const{value:j}=T.target;M[L]=j,a(t)}}),e("button",{type:"button",class:"plain2 poll-button",disabled:n||M.length<=1,onClick:()=>{M.splice(L,1),a(t)},children:e(Z,{icon:"x",size:"s",alt:ge._({id:"t/YqKh"})})})]},L))}),e("div",{class:"poll-toolbar",children:[e("button",{type:"button",class:"plain2 poll-button",disabled:n||M.length>=c,onClick:()=>{M.push(""),a(t)},children:"+"})," ",e("label",{class:"multiple-choices",children:[e("input",{type:"checkbox",checked:v,disabled:n,onChange:B=>{const{checked:L}=B.target;t.multiple=L,a(t)}})," ",e(V,{id:"T57mm9"})]}),e("label",{class:"expires-in",children:[e(V,{id:"lkz6PL"})," ",e("select",{value:F,disabled:n,onChange:B=>{const{value:L}=B.target;t.expiresIn=L,a(t)},children:Object.entries(en).filter(([B])=>B>=l&&B<=o).map(([B,L])=>e("option",{value:B,children:L()},B))})]})]}),e("div",{class:"poll-toolbar",children:e("button",{type:"button",class:"plain remove-poll-button",disabled:n,onClick:()=>{a(null)},children:e(V,{id:"CDpQAX"})})})]})}function we(s){return s.replace(/[&<>"']/g,function(t){return"&#"+t.charCodeAt(0)+";"})}function Gt(s){for(let t in s)(s[t]===null||s[t]===void 0)&&delete s[t];return s}function Fi({onClose:s=()=>{},onSelect:t=()=>{},defaultSearchTerm:n}){const{masto:a}=Ct(),[c,o]=U("default"),[l,y]=U([]),[E,M]=U({}),[F,v]=U(0),B=async p=>{if(!(p!=null&&p.length))return;const d=await Tn(p,E);d&&M({...E,...d})},L=p=>{p&&(o("loading"),(async()=>{try{const d=await a.v1.accounts.search.list({q:p,limit:40,resolve:!1});y(d),B(d),o("default")}catch{o("error")}})())},T=at(L,1e3);ne(()=>{L()},[L]);const j=G();ne(()=>{j.current&&(j.current.focus(),j.current.value&&(j.current.selectionStart=j.current.value.length,j.current.selectionEnd=j.current.value.length))},[]),ne(()=>{n&&L(n)},[n]);const ie=p=>{const d=p.acct;t(d),s()};Oe("enter",()=>{const p=l[F];p&&ie(p)},{preventDefault:!0,enableOnFormTags:["input"]});const O=G();return Oe("down",()=>{F{const p=O.current.querySelector(".selected");p&&p.scrollIntoView({behavior:"smooth",block:"center",inline:"center"})},1)},{preventDefault:!0,enableOnFormTags:["input"]}),Oe("up",()=>{F>0?v(F-1):v(l.length-1),setTimeout(()=>{const p=O.current.querySelector(".selected");p&&p.scrollIntoView({behavior:"smooth",block:"center",inline:"center"})},1)},{preventDefault:!0,enableOnFormTags:["input"]}),e("div",{id:"mention-sheet",class:"sheet",children:[!!s&&e("button",{type:"button",class:"sheet-close",onClick:s,children:e(Z,{icon:"x",alt:ge._({id:"yz7wBu"})})}),e("header",{children:e("form",{onSubmit:p=>{var d;p.preventDefault(),(d=T.flush)==null||d.call(T)},children:e("input",{ref:j,required:!0,type:"search",class:"block",placeholder:ge._({id:"eH1bqp"}),onInput:p=>{const{value:d}=p.target;T(d)},autocomplete:"off",autocorrect:"off",autocapitalize:"off",spellCheck:"false",dir:"auto",defaultValue:n||""})})}),e("main",{children:(l==null?void 0:l.length)>0?e("ul",{ref:O,class:`accounts-list ${c==="loading"?"loading":""}`,children:l.map((p,d)=>{const m=E[p.id];return e("li",{class:d===F?"selected":"",children:[e(Xt,{avatarSize:"xxl",account:p,relationship:m,showStats:!0,showActivity:!0}),e("button",{type:"button",class:"plain2",onClick:()=>{ie(p)},children:e(Z,{icon:"plus",size:"xl",alt:ge._({id:"m16xKo"})})})]},p.id)})}):c==="loading"?e("div",{class:"ui-state",children:e(st,{abrupt:!0})}):c==="error"?e("div",{class:"ui-state",children:e("p",{children:e(V,{id:"AThL/k"})})}):null})]})}function Ci({masto:s,instance:t,onClose:n=()=>{},onSelect:a=()=>{},defaultSearchTerm:c}){const[o,l]=U("default"),y=G([]),[E,M]=U([]),F=Pe(()=>Se.account.get("recentlyUsedCustomEmojis")||[]),v=G();ne(()=>{l("loading"),(async()=>{try{const[d,m]=await nn(t,s);v.current=m,M(d),l("default")}catch{l("error")}})()},[]);const B=Pe(()=>{const d={"--recent--":F.filter(w=>E.find(f=>f.shortcode===w.shortcode))},m=[];return E.forEach(w=>{var f,R;if((R=(f=y.current)==null?void 0:f.push)==null||R.call(f,w),!w.category){m.push(w);return}d[w.category]||(d[w.category]=[]),d[w.category].push(w)}),m.length&&(d["--others--"]=m),d},[E]),L=G(),[T,j]=U(null),ie=Tt(d=>{var w,f,R;const{value:m}=d.target;if(m){const k=(w=v.current)==null?void 0:w.search(m,{limit:Ft});j(k.map(K=>K.item)),(R=(f=L.current)==null?void 0:f.scrollTo)==null||R.call(f,0,0)}else j(null)},[E]);ne(()=>{c&&(E!=null&&E.length)&&ie({target:{value:c}})},[c,ie,E]);const O=Tt(d=>{a==null||a(d),n==null||n(),queueMicrotask(()=>{let m=Se.account.get("recentlyUsedCustomEmojis")||[];const w=m.findIndex(f=>f.shortcode===d.shortcode);w!==-1?(m.splice(w,1),m.unshift(d)):(m.unshift(d),m=m.filter(f=>{var R,k;return(k=(R=y.current)==null?void 0:R.find)==null?void 0:k.call(R,K=>K.shortcode===f.shortcode)}),m=m.slice(0,10)),Se.account.set("recentlyUsedCustomEmojis",m)})},[a]),p=G();return ne(()=>{p.current&&(p.current.focus(),p.current.value&&(p.current.selectionStart=p.current.value.length,p.current.selectionEnd=p.current.value.length))},[]),e("div",{id:"custom-emojis-sheet",class:"sheet",children:[!!n&&e("button",{type:"button",class:"sheet-close",onClick:n,children:e(Z,{icon:"x",alt:ge._({id:"yz7wBu"})})}),e("header",{children:[e("div",{children:[e("b",{children:e(V,{id:"8i6Ueo"})})," ",o==="loading"?e(st,{}):e("small",{class:"insignificant",children:[" • ",t]})]}),e("form",{onSubmit:d=>{d.preventDefault();const m=T[0];m&&O(`:${m.shortcode}:`)},children:e("input",{ref:p,type:"search",placeholder:ge._({id:"EarrCe"}),onInput:ie,autocomplete:"off",autocorrect:"off",autocapitalize:"off",spellCheck:"false",dir:"auto",defaultValue:c||""})})]}),e("main",{ref:L,children:T!==null?e("ul",{class:"custom-emojis-matches custom-emojis-list",children:T.map(d=>e("li",{class:"custom-emojis-match",children:e(sn,{emoji:d,onClick:()=>{O(`:${d.shortcode}:`)},showCode:!0})},d.shortcode))}):e("div",{class:"custom-emojis-list",children:[o==="error"&&e("div",{class:"ui-state",children:e("p",{children:e(V,{id:"Kzwsg2"})})}),o==="default"&&Object.entries(B).map(([d,m])=>!!(m!=null&&m.length)&&e(De,{children:[e("div",{class:"section-header",children:{"--recent--":ge._({id:"uabU9X"}),"--others--":ge._({id:"NuKR0h"})}[d]||d}),e(zi,{emojis:m,onSelect:O})]}))]})})]})}const zi=Zt(({emojis:s,onSelect:t})=>{const{i18n:n}=Ke(),[a,c]=U(Ft),o=s.length>a;return e("section",{children:[s.slice(0,a).map(l=>e(sn,{emoji:l,onClick:()=>{t(`:${l.shortcode}:`)}},l.shortcode)),o&&e("button",{type:"button",class:"plain small",onClick:()=>c(a+Ft),children:e(V,{id:"iAB71E",values:{0:n.number(s.length-a)}})})]})}),sn=Zt(({emoji:s,onClick:t,showCode:n})=>{const a=c=>{const l=c.currentTarget.closest("main");if(l){const y=l.getBoundingClientRect(),E=c.currentTarget.getBoundingClientRect(),M=c.currentTarget.classList;E.lefty.right-88?(M.add("edge-right"),M.remove("edge-left")):M.remove("edge-left","edge-right")}};return e("button",{type:"button",className:"plain4",onClick:t,"data-title":n?void 0:s.shortcode,onPointerEnter:a,onFocus:a,children:[e("picture",{children:[!!s.staticUrl&&e("source",{srcSet:s.staticUrl,media:"(prefers-reduced-motion: reduce)"}),e("img",{className:"shortcode-emoji",src:s.url||s.staticUrl,alt:s.shortcode,width:"24",height:"24",loading:"lazy",decoding:"async"})]}),n&&e(De,{children:[" ",e("code",{children:s.shortcode})]})]})}),bt=20;function _i({onClose:s=()=>{},onSelect:t=()=>{}}){var L,T,j,ie,O,p;const{i18n:n}=Ke(),[a,c]=U("default"),[o,l]=U([]),y=G(null),E=G(null),M=G(0),F=G(null);function v({offset:d}){var m,w,f;(m=E.current)!=null&&m.value&&(c("loading"),(f=(w=F.current)==null?void 0:w.scrollTo)==null||f.call(w,{top:0,left:0,behavior:"smooth"}),(async()=>{var R;try{const k={api_key:ni,q:E.current.value,rating:"g",limit:bt,bundle:"messaging_non_clips",offset:d,lang:n.locale||"en"},K=await fetch("https://api.giphy.com/v1/gifs/search?"+new URLSearchParams(k),{referrerPolicy:"no-referrer"}).then(ae=>ae.json());M.current=((R=K.pagination)==null?void 0:R.offset)||0,l(K),c("results")}catch{c("error")}})())}ne(()=>{var d;(d=E.current)==null||d.focus()},[]);const B=at(()=>{v({offset:0})},1e3);return e("div",{id:"gif-picker-sheet",class:"sheet",children:[!!s&&e("button",{type:"button",class:"sheet-close",onClick:s,children:e(Z,{icon:"x",alt:n._({id:"yz7wBu"})})}),e("header",{children:e("form",{ref:y,onSubmit:d=>{d.preventDefault(),v({offset:0})},children:[e("input",{ref:E,type:"search",name:"q",placeholder:n._({id:"wxlF9B"}),required:!0,autocomplete:"off",autocorrect:"off",autocapitalize:"off",spellCheck:"false",dir:"auto",onInput:B}),e("input",{type:"image",class:"powered-button",src:Jn,width:"86",height:"30",alt:n._({id:"c1Q/eU"})})]})}),e("main",{ref:F,class:a==="loading"?"loading":"",children:[a==="default"&&e("div",{class:"ui-state",children:e("p",{class:"insignificant",children:e(V,{id:"9KEidY"})})}),a==="loading"&&!((L=o==null?void 0:o.data)!=null&&L.length)&&e("div",{class:"ui-state",children:e(st,{abrupt:!0})}),((T=o==null?void 0:o.data)==null?void 0:T.length)>0?e(De,{children:[e("ul",{children:o.data.map(d=>{const{id:m,images:w,title:f,alt_text:R}=d,{fixed_height_small:k,fixed_height_downsampled:K,fixed_height:ae,original:ce}=w,X=k!=null&&k.url?k:K!=null&&K.url?K:ae;let{url:$,webp:W,width:H,height:te}=X;+te>100&&(H=H/te*100,te=100);const Y=URL.parse($),ue=Y.origin+Y.pathname;let P;if(W){const se=URL.parse(W);P=se.origin+se.pathname}return e("li",{children:e("button",{type:"button",onClick:()=>{const{mp4:se,url:fe}=ce,g=se||fe,S=URL.parse(g),z=S.origin+S.pathname;s(),t({url:z,type:se?"video/mp4":"image/gif",alt_text:R||f})},children:e("figure",{style:{"--figure-width":H+"px"},children:[e("picture",{children:[P&&e("source",{srcset:P,type:"image/webp"}),e("img",{src:ue,width:H,height:te,loading:"lazy",decoding:"async",alt:R,referrerpolicy:"no-referrer",onLoad:se=>{se.target.style.backgroundColor="transparent"}})]}),e("figcaption",{children:R||f})]})})},m)})}),e("p",{class:"pagination",children:[((j=o.pagination)==null?void 0:j.offset)>0&&e("button",{type:"button",class:"light small",disabled:a==="loading",onClick:()=>{var d;v({offset:((d=o.pagination)==null?void 0:d.offset)-bt})},children:[e(Z,{icon:"chevron-left"}),e("span",{children:e(V,{id:"DHhJ7s"})})]}),e("span",{}),((ie=o.pagination)==null?void 0:ie.offset)+((O=o.pagination)==null?void 0:O.count)<((p=o.pagination)==null?void 0:p.total_count)&&e("button",{type:"button",class:"light small",disabled:a==="loading",onClick:()=>{var d;v({offset:((d=o.pagination)==null?void 0:d.offset)+bt})},children:[e("span",{children:e(V,{id:"hXzOVo"})})," ",e(Z,{icon:"chevron-right"})]})]})]}):a==="results"&&e("div",{class:"ui-state",children:e("p",{children:"No results"})}),a==="error"&&e("div",{class:"ui-state",children:e("p",{children:e(V,{id:"PbFw9n"})})})]})]})}export{Mi as default}; -//# sourceMappingURL=compose-oSeoicVc.js.map diff --git a/assets/compose-oSeoicVc.js.map b/assets/compose-oSeoicVc.js.map deleted file mode 100644 index eddf714..0000000 --- a/assets/compose-oSeoicVc.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"compose-oSeoicVc.js","sources":["../../node_modules/@github/combobox-nav/dist/index.js","../../node_modules/@github/text-expander-element/dist/index.js","../../node_modules/ansi-regex/index.js","../../node_modules/strip-ansi/index.js","../../node_modules/string-length/index.js","../../src/assets/powered-by-giphy.svg","../../src/utils/pretty-bytes.js","../../src/components/compose.jsx"],"sourcesContent":["export default class Combobox {\n constructor(input, list, { tabInsertsSuggestions, defaultFirstOption } = {}) {\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.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 scrollTo(this.list, target);\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);\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) {\n target.dispatchEvent(new CustomEvent('combobox-commit', { 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}\nfunction scrollTo(container, target) {\n if (!inViewport(container, target)) {\n container.scrollTop = target.offsetTop;\n }\n}\nfunction inViewport(container, element) {\n const scrollTop = container.scrollTop;\n const containerBottom = scrollTop + container.clientHeight;\n const top = element.offsetTop;\n const bottom = top + element.clientHeight;\n return top >= scrollTop && bottom <= containerBottom;\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\n/**\n * A custom element is implemented as a class which extends HTMLElement (in the\n * case of autonomous elements) or the interface you want to customize (in the\n * case of customized built-in elements).\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Web_components/Using_custom_elements#custom_element_lifecycle_callbacks\n */\nclass CustomHTMLElement extends HTMLElement {\n}\n\nclass InputStyleCloneUpdateEvent extends Event {\n constructor() {\n super(\"update\");\n }\n}\nconst CloneRegistry = new WeakMap();\n/**\n * Create 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 InputStyleCloneElement extends CustomHTMLElement {\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;\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.\n *\n * Upon initial creation the clone element will automatically be inserted into the DOM and begin observing the\n * linked input. Only one clone per input can ever exist at a time.\n * @param input The target input to clone.\n */\n static for(input) {\n const clone = CloneRegistry.get(input) ?? new InputStyleCloneElement(input);\n CloneRegistry.set(input, clone);\n return clone;\n }\n /**\n * Avoid constructing directly: Use `InputStyleCloneElement.for` instead.\n * @private\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 = document.createElement(\"div\");\n this.#container.style.position = \"absolute\";\n this.#container.style.pointerEvents = \"none\";\n input.after(this.#container);\n this.#container.appendChild(this);\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 /** @private */\n connectedCallback() {\n const input = this.#inputRef.deref();\n if (!input)\n return this.remove();\n this.style.pointerEvents = \"none\";\n this.style.userSelect = \"none\";\n this.style.overflow = \"hidden\";\n this.style.display = \"block\";\n // Important not to use display:none which would not render the content at all\n this.style.visibility = \"hidden\";\n if (input instanceof HTMLTextAreaElement) {\n this.style.whiteSpace = \"pre-wrap\";\n this.style.wordWrap = \"break-word\";\n }\n else {\n this.style.whiteSpace = \"nowrap\";\n // text in single-line inputs is vertically centered\n this.style.display = \"table-cell\";\n this.style.verticalAlign = \"middle\";\n }\n this.setAttribute(\"aria-hidden\", \"true\");\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 /** @private */\n disconnectedCallback() {\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 const input = this.#inputRef.deref();\n if (input) {\n input.removeEventListener(\"input\", this.#onInput, { capture: true });\n CloneRegistry.delete(input);\n }\n }\n // --- private ---\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.#inputRef.deref();\n if (!input)\n return this.remove();\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.style.height = inputStyle.height;\n this.style.width = inputStyle.width;\n // Immediately re-adjust for browser inconsistencies in scrollbar handling, if necessary\n if (input.clientHeight !== this.clientHeight)\n this.style.height = `calc(${inputStyle.height} + ${input.clientHeight - this.clientHeight}px)`;\n if (input.clientWidth !== this.clientWidth)\n this.style.width = `calc(${inputStyle.width} + ${input.clientWidth - this.clientWidth}px)`;\n // Position on top of the input\n const inputRect = input.getBoundingClientRect();\n const cloneRect = this.getBoundingClientRect();\n this.#xOffset = this.#xOffset + inputRect.left - cloneRect.left;\n this.#yOffset = this.#yOffset + inputRect.top - cloneRect.top;\n this.style.transform = `translate(${this.#xOffset}px, ${this.#yOffset}px)`;\n this.scrollTop = input.scrollTop;\n this.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.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.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// Inspired by https://github.com/github/catalyst/blob/dc284dcf4f82329a9cac5c867462a8fa529b6c40/src/register.ts\ntry {\n customElements.define(\"input-style-clone\", InputStyleCloneElement);\n}\ncatch (e) {\n // Throws DOMException with NotSupportedError if already defined\n if (!(e instanceof DOMException && e.name === \"NotSupportedError\"))\n throw e;\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 InputStyleCloneElement.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.childNodes[0];\n if (textNode) {\n range.setStart(textNode, this.startOffset);\n range.setEnd(textNode, this.endOffset);\n }\n return range;\n }\n}\n\nconst states = new WeakMap();\nclass TextExpander {\n constructor(expander, input) {\n this.expander = expander;\n this.input = input;\n this.combobox = null;\n this.menu = null;\n this.match = null;\n this.justPasted = false;\n this.lookBackIndex = 0;\n this.oninput = this.onInput.bind(this);\n this.onpaste = this.onPaste.bind(this);\n this.onkeydown = this.onKeydown.bind(this);\n this.oncommit = this.onCommit.bind(this);\n this.onmousedown = this.onMousedown.bind(this);\n this.onblur = this.onBlur.bind(this);\n this.interactingWithList = false;\n input.addEventListener('paste', this.onpaste);\n input.addEventListener('input', this.oninput);\n input.addEventListener('keydown', this.onkeydown);\n input.addEventListener('blur', this.onblur);\n }\n destroy() {\n this.input.removeEventListener('paste', this.onpaste);\n this.input.removeEventListener('input', this.oninput);\n this.input.removeEventListener('keydown', this.onkeydown);\n this.input.removeEventListener('blur', this.onblur);\n }\n dismissMenu() {\n if (this.deactivate()) {\n this.lookBackIndex = this.input.selectionEnd || this.lookBackIndex;\n }\n }\n activate(match, menu) {\n var _a, _b;\n if (this.input !== document.activeElement && this.input !== ((_b = (_a = document.activeElement) === null || _a === void 0 ? void 0 : _a.shadowRoot) === null || _b === void 0 ? void 0 : _b.activeElement)) {\n return;\n }\n this.deactivate();\n this.menu = menu;\n if (!menu.id)\n menu.id = `text-expander-${Math.floor(Math.random() * 100000).toString()}`;\n this.expander.append(menu);\n this.combobox = new Combobox(this.input, menu);\n this.expander.dispatchEvent(new Event('text-expander-activate'));\n this.positionMenu(menu, match.position);\n this.combobox.start();\n menu.addEventListener('combobox-commit', this.oncommit);\n menu.addEventListener('mousedown', this.onmousedown);\n this.combobox.navigate(1);\n }\n positionMenu(menu, position) {\n const caretRect = new InputRange(this.input, position).getBoundingClientRect();\n const targetPosition = { left: caretRect.left, top: caretRect.top + caretRect.height };\n const currentPosition = menu.getBoundingClientRect();\n const delta = {\n left: targetPosition.left - currentPosition.left,\n top: targetPosition.top - currentPosition.top\n };\n if (delta.left !== 0 || delta.top !== 0) {\n const currentStyle = getComputedStyle(menu);\n menu.style.left = currentStyle.left ? `calc(${currentStyle.left} + ${delta.left}px)` : `${delta.left}px`;\n menu.style.top = currentStyle.top ? `calc(${currentStyle.top} + ${delta.top}px)` : `${delta.top}px`;\n }\n }\n deactivate() {\n const menu = this.menu;\n if (!menu || !this.combobox)\n return false;\n this.expander.dispatchEvent(new Event('text-expander-deactivate'));\n this.menu = null;\n menu.removeEventListener('combobox-commit', this.oncommit);\n menu.removeEventListener('mousedown', this.onmousedown);\n this.combobox.destroy();\n this.combobox = null;\n menu.remove();\n return true;\n }\n onCommit({ target }) {\n var _a;\n const item = target;\n if (!(item instanceof HTMLElement))\n return;\n if (!this.combobox)\n return;\n const match = this.match;\n if (!match)\n return;\n const beginning = this.input.value.substring(0, match.position - match.key.length);\n const remaining = this.input.value.substring(match.position + match.text.length);\n const detail = { item, key: match.key, value: null, continue: false };\n const canceled = !this.expander.dispatchEvent(new CustomEvent('text-expander-value', { cancelable: true, detail }));\n if (canceled)\n return;\n if (!detail.value)\n return;\n let suffix = (_a = this.expander.getAttribute('suffix')) !== null && _a !== void 0 ? _a : ' ';\n if (detail.continue) {\n suffix = '';\n }\n const value = `${detail.value}${suffix}`;\n this.input.value = beginning + value + remaining;\n const cursor = beginning.length + value.length;\n this.deactivate();\n this.input.focus({\n preventScroll: true\n });\n this.input.selectionStart = cursor;\n this.input.selectionEnd = cursor;\n if (!detail.continue) {\n this.lookBackIndex = cursor;\n this.match = null;\n }\n this.expander.dispatchEvent(new CustomEvent('text-expander-committed', { cancelable: false, detail: { input: this.input } }));\n }\n onBlur() {\n if (this.interactingWithList) {\n this.interactingWithList = false;\n return;\n }\n this.deactivate();\n }\n onPaste() {\n this.justPasted = true;\n }\n async onInput() {\n if (this.justPasted) {\n this.justPasted = false;\n return;\n }\n const match = this.findMatch();\n if (match) {\n this.match = match;\n const menu = await this.notifyProviders(match);\n if (!this.match)\n return;\n if (menu) {\n this.activate(match, menu);\n }\n else {\n this.deactivate();\n }\n }\n else {\n this.match = null;\n this.deactivate();\n }\n }\n findMatch() {\n const cursor = this.input.selectionEnd || 0;\n const text = this.input.value;\n if (cursor <= this.lookBackIndex) {\n this.lookBackIndex = cursor - 1;\n }\n for (const { key, multiWord } of this.expander.keys) {\n const found = query(text, key, cursor, {\n multiWord,\n lookBackIndex: this.lookBackIndex,\n lastMatchPosition: this.match ? this.match.position : null\n });\n if (found) {\n return { text: found.text, key, position: found.position };\n }\n }\n }\n async notifyProviders(match) {\n const providers = [];\n const provide = (result) => providers.push(result);\n const canceled = !this.expander.dispatchEvent(new CustomEvent('text-expander-change', { cancelable: true, detail: { provide, text: match.text, key: match.key } }));\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 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 default TextExpanderElement;\n","export default function ansiRegex({onlyFirst = false} = {}) {\n\tconst pattern = [\n\t '[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)',\n\t\t'(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-ntqry=><~]))'\n\t].join('|');\n\n\treturn new RegExp(pattern, onlyFirst ? undefined : 'g');\n}\n","import ansiRegex from 'ansi-regex';\n\nconst regex = ansiRegex();\n\nexport default function stripAnsi(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError(`Expected a \\`string\\`, got \\`${typeof string}\\``);\n\t}\n\n\t// Even though the regex is global, we don't need to reset the `.lastIndex`\n\t// because unlike `.exec()` and `.test()`, `.replace()` does it automatically\n\t// and doing it manually has a performance penalty.\n\treturn string.replace(regex, '');\n}\n","import stripAnsi from 'strip-ansi';\n\nconst segmenter = new Intl.Segmenter();\n\nexport default function stringLength(string, {countAnsiEscapeCodes = false} = {}) {\n\tif (string === '') {\n\t\treturn 0;\n\t}\n\n\tif (!countAnsiEscapeCodes) {\n\t\tstring = stripAnsi(string);\n\t}\n\n\tif (string === '') {\n\t\treturn 0;\n\t}\n\n\tlet length = 0;\n\n\tfor (const _ of segmenter.segment(string)) { // eslint-disable-line no-unused-vars\n\t\tlength++;\n\t}\n\n\treturn length;\n}\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 { i18n } from '@lingui/core';\n\n// https://tc39.es/ecma402/#table-sanctioned-single-unit-identifiers\nconst BYTES_UNITS = [\n 'byte',\n 'kilobyte',\n 'megabyte',\n 'gigabyte',\n 'terabyte',\n 'petabyte',\n];\nexport default function prettyBytes(bytes) {\n const unitIndex = Math.min(\n Math.floor(Math.log2(bytes) / 10),\n BYTES_UNITS.length - 1,\n );\n const value = bytes / 1024 ** unitIndex;\n return i18n.number(value, {\n style: 'unit',\n unit: BYTES_UNITS[unitIndex],\n unitDisplay: 'narrow',\n maximumFractionDigits: 0,\n });\n}\n","import './compose.css';\nimport '@github/text-expander-element';\n\nimport { msg, plural, t, Trans } from '@lingui/macro';\nimport { useLingui } from '@lingui/react';\nimport { MenuItem } from '@szhsin/react-menu';\nimport { deepEqual } from 'fast-equals';\nimport Fuse from 'fuse.js';\nimport { forwardRef, memo } from 'preact/compat';\nimport {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'preact/hooks';\nimport { useHotkeys } from 'react-hotkeys-hook';\nimport stringLength from 'string-length';\nimport { detectAll } from 'tinyld/light';\nimport { uid } from 'uid/single';\nimport { useDebouncedCallback, useThrottledCallback } from 'use-debounce';\nimport { useSnapshot } from 'valtio';\n\nimport poweredByGiphyURL from '../assets/powered-by-giphy.svg';\n\nimport Menu2 from '../components/menu2';\nimport supportedLanguages from '../data/status-supported-languages';\nimport urlRegex from '../data/url-regex';\nimport { api } from '../utils/api';\nimport db from '../utils/db';\nimport emojifyText from '../utils/emojify-text';\nimport i18nDuration from '../utils/i18n-duration';\nimport isRTL from '../utils/is-rtl';\nimport localeMatch from '../utils/locale-match';\nimport localeCode2Text from '../utils/localeCode2Text';\nimport mem from '../utils/mem';\nimport openCompose from '../utils/open-compose';\nimport pmem from '../utils/pmem';\nimport prettyBytes from '../utils/pretty-bytes';\nimport { fetchRelationships } from '../utils/relationships';\nimport shortenNumber from '../utils/shorten-number';\nimport showToast from '../utils/show-toast';\nimport states, { saveStatus } from '../utils/states';\nimport store from '../utils/store';\nimport {\n getCurrentAccount,\n getCurrentAccountNS,\n getCurrentInstance,\n getCurrentInstanceConfiguration,\n} from '../utils/store-utils';\nimport supports from '../utils/supports';\nimport useCloseWatcher from '../utils/useCloseWatcher';\nimport useInterval from '../utils/useInterval';\nimport visibilityIconsMap from '../utils/visibility-icons-map';\n\nimport AccountBlock from './account-block';\n// import Avatar from './avatar';\nimport Icon from './icon';\nimport Loader from './loader';\nimport Modal from './modal';\nimport Status from './status';\n\nconst {\n PHANPY_IMG_ALT_API_URL: IMG_ALT_API_URL,\n PHANPY_GIPHY_API_KEY: GIPHY_API_KEY,\n} = import.meta.env;\n\nconst supportedLanguagesMap = supportedLanguages.reduce((acc, l) => {\n const [code, common, native] = l;\n acc[code] = {\n common,\n native,\n };\n return acc;\n}, {});\n\n/* NOTES:\n - Max character limit includes BOTH status text and Content Warning text\n*/\n\nconst 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};\nconst expirySeconds = Object.keys(expiryOptions);\nconst oneDay = 24 * 60 * 60;\n\nconst expiresInFromExpiresAt = (expiresAt) => {\n if (!expiresAt) return oneDay;\n const delta = (new Date(expiresAt).getTime() - Date.now()) / 1000;\n return expirySeconds.find((s) => s >= delta) || oneDay;\n};\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\nconst DEFAULT_LANG = localeMatch(\n [new Intl.DateTimeFormat().resolvedOptions().locale, ...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 urlRegexObj = new RegExp(urlRegex.source, urlRegex.flags);\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// 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])(#[a-z0-9_]+([a-z0-9_.]+[a-z0-9_]+)?)(?![\\\\/\\\\w])`,\n 'ig',\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();\nfunction escapeHTML(text) {\n return text\n .replace(/&/g, '&')\n .replace(//g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\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 '' +\n escapeHTML(exceedLimitHTML) +\n '';\n }\n return escapeHTML(withinLimitHTML) + exceedLimitHTML;\n }\n\n return escapeHTML(text)\n .replace(urlRegexObj, '$2$3') // URLs\n .replace(MENTION_RE, '$1$2') // Mentions\n .replace(HASHTAG_RE, '$1$2') // Hashtags\n .replace(\n SCAN_RE,\n '$1$2',\n ); // Emoji shortcodes\n}\n\n// const rtf = new Intl.RelativeTimeFormat();\nconst RTF = mem((locale) => new Intl.RelativeTimeFormat(locale || undefined));\n\nconst CUSTOM_EMOJIS_COUNT = 100;\n\nfunction Compose({\n onClose,\n replyToStatus,\n editStatus,\n draftStatus,\n standalone,\n hasOpener,\n}) {\n const { i18n } = useLingui();\n const rtf = RTF(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 = 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,\n charactersReservedPerUrl,\n } = {},\n mediaAttachments: {\n supportedMimeTypes = [],\n imageSizeLimit,\n imageMatrixLimit,\n videoSizeLimit,\n videoMatrixLimit,\n videoFrameRateLimit,\n } = {},\n polls: {\n maxOptions,\n maxCharactersPerOption,\n maxExpiration,\n minExpiration,\n } = {},\n } = configuration || {};\n\n const textareaRef = useRef();\n const spoilerTextRef = useRef();\n const [visibility, setVisibility] = useState('public');\n const [sensitive, setSensitive] = 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\n const prefs = store.account.get('preferences') || {};\n\n const oninputTextarea = () => {\n if (!textareaRef.current) return;\n textareaRef.current.dispatchEvent(new Event('input'));\n };\n const focusTextarea = () => {\n setTimeout(() => {\n if (!textareaRef.current) return;\n // status starts with newline, focus on first position\n if (draftStatus?.status?.startsWith?.('\\n')) {\n textareaRef.current.selectionStart = 0;\n textareaRef.current.selectionEnd = 0;\n }\n console.debug('FOCUS textarea');\n textareaRef.current?.focus();\n }, 300);\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 if (allMentions.length > 0) {\n textareaRef.current.value = `${allMentions\n .map((m) => `@${m}`)\n .join(' ')} `;\n oninputTextarea();\n }\n focusTextarea();\n setVisibility(\n visibility === 'public' && prefs['posting:default:visibility']\n ? prefs['posting:default:visibility'].toLowerCase()\n : visibility,\n );\n setLanguage(\n language ||\n prefs['posting:default:language']?.toLowerCase() ||\n DEFAULT_LANG,\n );\n setSensitive(sensitive && !!spoilerText);\n } else if (editStatus) {\n const { visibility, language, sensitive, poll, mediaAttachments } =\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 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 }\n if (draftStatus) {\n const {\n status,\n spoilerText,\n visibility,\n language,\n sensitive,\n poll,\n mediaAttachments,\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 focusTextarea();\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 (sensitive !== null) setSensitive(sensitive);\n if (composablePoll) setPoll(composablePoll);\n if (mediaAttachments) setMediaAttachments(mediaAttachments);\n }\n }, [draftStatus, editStatus, replyToStatus]);\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\", including multiple mentions like \"@username1@username2\"\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 },\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 hasModal && !hasOnlyComposer;\n },\n },\n );\n useCloseWatcher(() => {\n if (!standalone && confirmClose()) {\n onClose();\n }\n }, [standalone, confirmClose, onClose]);\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 poll,\n mediaAttachments,\n },\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 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 const file = item.getAsFile();\n if (file && supportedMimeTypes.includes(file.type)) {\n files.push(file);\n }\n }\n }\n if (files.length > 0 && mediaAttachments.length >= maxMediaAttachments) {\n alert(\n plural(maxMediaAttachments, {\n one: 'You can only attach up to 1 file.',\n other: 'You can only attach up to # files.',\n }),\n );\n return;\n }\n console.log({ files });\n if (files.length > 0) {\n e.preventDefault();\n e.stopPropagation();\n // Auto-cut-off files to avoid exceeding maxMediaAttachments\n const max = maxMediaAttachments - mediaAttachments.length;\n const allowedFiles = files.slice(0, max);\n if (allowedFiles.length <= 0) {\n alert(\n plural(maxMediaAttachments, {\n one: 'You can only attach up to 1 file.',\n other: 'You can only attach up to # files.',\n }),\n );\n return;\n }\n const mediaFiles = allowedFiles.map((file) => ({\n file,\n type: file.type,\n size: file.size,\n url: URL.createObjectURL(file),\n id: null,\n description: null,\n }));\n setMediaAttachments([...mediaAttachments, ...mediaFiles]);\n }\n };\n window.addEventListener('paste', handleItems);\n const handleDragover = (e) => {\n // Prevent default if there's files\n if (e.dataTransfer.items.length > 0) {\n e.preventDefault();\n e.stopPropagation();\n }\n };\n window.addEventListener('dragover', handleDragover);\n window.addEventListener('drop', handleItems);\n return () => {\n window.removeEventListener('paste', handleItems);\n window.removeEventListener('dragover', handleDragover);\n window.removeEventListener('drop', handleItems);\n };\n }, [mediaAttachments]);\n\n const [showMentionPicker, setShowMentionPicker] = useState(false);\n const [showEmoji2Picker, setShowEmoji2Picker] = useState(false);\n const [showGIFPicker, setShowGIFPicker] = useState(false);\n\n const [autoDetectedLanguages, setAutoDetectedLanguages] = useState(null);\n const [topSupportedLanguages, restSupportedLanguages] = useMemo(() => {\n const topLanguages = [];\n const restLanguages = [];\n const { contentTranslationHideLanguages = [] } = states.settings;\n supportedLanguages.forEach((l) => {\n const [code] = l;\n if (\n code === language ||\n code === prevLanguage.current ||\n code === DEFAULT_LANG ||\n contentTranslationHideLanguages.includes(code) ||\n (autoDetectedLanguages?.length && autoDetectedLanguages.includes(code))\n ) {\n topLanguages.push(l);\n } else {\n restLanguages.push(l);\n }\n });\n topLanguages.sort(([codeA, commonA], [codeB, commonB]) => {\n if (codeA === language) return -1;\n if (codeB === language) return 1;\n return commonA.localeCompare(commonB);\n });\n restLanguages.sort(([codeA, commonA], [codeB, commonB]) =>\n commonA.localeCompare(commonB),\n );\n return [topLanguages, restLanguages];\n }, [language, autoDetectedLanguages]);\n\n const replyToStatusMonthsAgo = useMemo(\n () =>\n !!replyToStatus?.createdAt &&\n Math.floor(\n (Date.now() - new Date(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 return (\n
    \n
    \n
    \n {currentAccountInfo?.avatarStatic && (\n // \n \n )}\n {!standalone ? (\n \n {\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 },\n });\n\n if (!newWin) {\n return;\n }\n\n onClose();\n }}\n >\n \n \n \n \n {' '}\n {\n if (confirmClose()) {\n onClose();\n }\n }}\n >\n \n \n \n ) : (\n hasOpener && (\n {\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 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 },\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 \n \n )\n )}\n
    \n {!!replyToStatus && (\n
    \n \n
    \n {replyToStatusMonthsAgo > 0 ? (\n \n Replying to @\n {replyToStatus.account.acct || replyToStatus.account.username}\n ’s post (\n \n {rtf.format(-replyToStatusMonthsAgo, 'month')}\n \n )\n \n ) : (\n \n Replying to @\n {replyToStatus.account.acct || replyToStatus.account.username}\n ’s post\n \n )}\n
    \n
    \n )}\n {!!editStatus && (\n
    \n \n
    \n Editing source post\n
    \n
    \n )}\n {\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 { status, visibility, sensitive, spoilerText } = entries;\n\n // Pre-cleanup\n sensitive = sensitive === 'on'; // checkboxes return \"on\" if checked\n\n // Validation\n /* Let the backend validate this\n if (stringLength(status) > maxCharacters) {\n alert(`Status is too long! Max characters: ${maxCharacters}`);\n return;\n }\n if (\n sensitive &&\n stringLength(status) + stringLength(spoilerText) > maxCharacters\n ) {\n alert(\n `Status and content warning is too long! Max characters: ${maxCharacters}`,\n );\n return;\n }\n */\n if (poll) {\n if (poll.options.length < 2) {\n alert(t`Poll must have at least 2 options`);\n return;\n }\n if (poll.options.some((option) => option === '')) {\n alert(t`Some poll choices are empty`);\n return;\n }\n }\n // TODO: check for URLs and use `charactersReservedPerUrl` to calculate max characters\n\n if (mediaAttachments.length > 0) {\n // If there are media attachments, check if they have no descriptions\n const hasNoDescriptions = mediaAttachments.some(\n (media) => !media.description?.trim?.(),\n );\n if (hasNoDescriptions) {\n const yes = confirm(\n t`Some media have no descriptions. Continue?`,\n );\n if (!yes) return;\n }\n }\n\n // Post-cleanup\n spoilerText = (sensitive && spoilerText) || undefined;\n status = status === '' ? undefined : status;\n\n // states.composerState.minimized = true;\n states.composerState.publishing = true;\n setUIState('loading');\n (async () => {\n try {\n console.log('MEDIA ATTACHMENTS', mediaAttachments);\n if (mediaAttachments.length > 0) {\n // Upload media attachments first\n const mediaPromises = mediaAttachments.map((attachment) => {\n const { file, description, id } = attachment;\n console.log('UPLOADING', attachment);\n if (id) {\n // If already uploaded\n return attachment;\n } else {\n const params = removeNullUndefined({\n file,\n description,\n });\n return masto.v2.media.create(params).then((res) => {\n if (res.id) {\n attachment.id = res.id;\n }\n return res;\n });\n }\n });\n const results = await Promise.allSettled(mediaPromises);\n\n // If any failed, return\n if (\n results.some((result) => {\n return result.status === 'rejected' || !result.value?.id;\n })\n ) {\n states.composerState.publishing = false;\n states.composerState.publishingError = true;\n setUIState('error');\n // Alert all the reasons\n results.forEach((result) => {\n if (result.status === 'rejected') {\n console.error(result);\n alert(result.reason || t`Attachment #${i} failed`);\n }\n });\n return;\n }\n\n console.log({ results, mediaAttachments });\n }\n\n /* NOTE:\n Using snakecase here because masto.js's `isObject` returns false for `params`, ONLY happens when opening in pop-out window. This is maybe due to `window.masto` variable being passed from the parent window. The check that failed is `x.constructor === Object`, so maybe the `Object` in new window is different than parent window's?\n Code: https://github.com/neet/masto.js/blob/dd0d649067b6a2b6e60fbb0a96597c373a255b00/src/serializers/is-object.ts#L2\n\n // TODO: Note above is no longer true in Masto.js v6. Revisit this.\n */\n let params = {\n status,\n // spoilerText,\n spoiler_text: spoilerText,\n language,\n sensitive,\n poll,\n // mediaIds: mediaAttachments.map((attachment) => attachment.id),\n media_ids: mediaAttachments.map(\n (attachment) => attachment.id,\n ),\n };\n if (editStatus && supports('@mastodon/edit-media-attributes')) {\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 } else if (!editStatus) {\n params.visibility = visibility;\n // params.inReplyToId = replyToStatus?.id || undefined;\n params.in_reply_to_id = replyToStatus?.id || undefined;\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 });\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
    \n {\n updateCharCount();\n }}\n />\n \n {\n const sensitive = e.target.checked;\n setSensitive(sensitive);\n if (sensitive) {\n spoilerTextRef.current?.focus();\n } else {\n textareaRef.current?.focus();\n }\n }}\n />\n \n {' '}\n \n \n {\n setVisibility(e.target.value);\n }}\n disabled={uiState === 'loading' || !!editStatus}\n dir=\"auto\"\n >\n \n \n \n \n \n {' '}\n
    \n {\n updateCharCount();\n }}\n maxCharacters={maxCharacters}\n performSearch={(params) => {\n const { type, q, limit } = params;\n if (type === 'accounts') {\n return masto.v1.accounts.search.list({\n q,\n limit,\n resolve: false,\n });\n }\n return masto.v2.search.fetch(params);\n }}\n onTrigger={(action) => {\n if (action?.name === 'custom-emojis') {\n setShowEmoji2Picker({\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 }\n }}\n />\n {mediaAttachments?.length > 0 && (\n
    \n {mediaAttachments.map((attachment, i) => {\n const { id, file } = attachment;\n const fileID = file?.size + file?.type + file?.name;\n return (\n {\n setMediaAttachments((attachments) => {\n const newAttachments = [...attachments];\n newAttachments[i].description = value;\n return newAttachments;\n });\n }}\n onRemove={() => {\n setMediaAttachments((attachments) => {\n return attachments.filter((_, j) => j !== i);\n });\n }}\n />\n );\n })}\n \n
    \n )}\n {!!poll && (\n {\n if (poll) {\n const newPoll = { ...poll };\n setPoll(newPoll);\n } else {\n setPoll(null);\n }\n }}\n />\n )}\n \n \n \n {/* If maxOptions is not defined or defined and is greater than 1, show poll button */}\n {maxOptions == null ||\n (maxOptions > 1 && (\n <>\n {\n setPoll({\n options: ['', ''],\n expiresIn: 24 * 60 * 60, // 1 day\n multiple: false,\n });\n }}\n >\n \n \n \n ))}\n {/* {\n setShowMentionPicker(true);\n }}\n >\n \n */}\n {\n setShowEmoji2Picker(true);\n }}\n >\n \n \n {!!states.settings.composerGIFPicker && (\n = maxMediaAttachments ||\n !!poll\n }\n onClick={() => {\n setShowGIFPicker(true);\n }}\n >\n GIF\n \n )}\n \n
    \n {uiState === 'loading' ? (\n \n ) : (\n
    \n \n
    \n {showMentionPicker && (\n {\n if (e.target === e.currentTarget) {\n setShowMentionPicker(false);\n }\n }}\n >\n {\n setShowMentionPicker(false);\n }}\n defaultSearchTerm={showMentionPicker?.defaultSearchTerm}\n onSelect={(socialAddress) => {\n const textarea = textareaRef.current;\n if (!textarea) return;\n const { selectionStart, selectionEnd } = textarea;\n const text = textarea.value;\n const textBeforeMention = text.slice(0, selectionStart);\n const spaceBeforeMention = textBeforeMention\n ? /[\\s\\t\\n\\r]$/.test(textBeforeMention)\n ? ''\n : ' '\n : '';\n const textAfterMention = text.slice(selectionEnd);\n const spaceAfterMention = /^[\\s\\t\\n\\r]/.test(textAfterMention)\n ? ''\n : ' ';\n const newText =\n textBeforeMention +\n spaceBeforeMention +\n '@' +\n socialAddress +\n spaceAfterMention +\n textAfterMention;\n textarea.value = newText;\n textarea.selectionStart = textarea.selectionEnd =\n selectionEnd +\n 1 +\n socialAddress.length +\n spaceAfterMention.length;\n textarea.focus();\n textarea.dispatchEvent(new Event('input'));\n }}\n />\n \n )}\n {showEmoji2Picker && (\n {\n if (e.target === e.currentTarget) {\n setShowEmoji2Picker(false);\n }\n }}\n >\n {\n setShowEmoji2Picker(false);\n }}\n defaultSearchTerm={showEmoji2Picker?.defaultSearchTerm}\n onSelect={(emojiShortcode) => {\n const textarea = textareaRef.current;\n if (!textarea) return;\n const { selectionStart, selectionEnd } = textarea;\n const text = textarea.value;\n const textBeforeEmoji = text.slice(0, selectionStart);\n const spaceBeforeEmoji = textBeforeEmoji\n ? /[\\s\\t\\n\\r]$/.test(textBeforeEmoji)\n ? ''\n : ' '\n : '';\n const textAfterEmoji = text.slice(selectionEnd);\n const spaceAfterEmoji = /^[\\s\\t\\n\\r]/.test(textAfterEmoji)\n ? ''\n : ' ';\n const newText =\n textBeforeEmoji +\n spaceBeforeEmoji +\n emojiShortcode +\n spaceAfterEmoji +\n textAfterEmoji;\n textarea.value = newText;\n textarea.selectionStart = textarea.selectionEnd =\n selectionEnd + emojiShortcode.length + spaceAfterEmoji.length;\n textarea.focus();\n textarea.dispatchEvent(new Event('input'));\n }}\n />\n \n )}\n {showGIFPicker && (\n {\n if (e.target === e.currentTarget) {\n setShowGIFPicker(false);\n }\n }}\n >\n setShowGIFPicker(false)}\n onSelect={({ url, type, alt_text }) => {\n console.log('GIF URL', url);\n if (mediaAttachments.length >= maxMediaAttachments) {\n alert(\n plural(maxMediaAttachments, {\n one: 'You can only attach up to 1 file.',\n other: 'You can only attach up to # files.',\n }),\n );\n return;\n }\n // Download the GIF and insert it as media attachment\n (async () => {\n let theToast;\n try {\n theToast = showToast({\n text: t`Downloading GIF…`,\n duration: -1,\n });\n const blob = await fetch(url, {\n referrerPolicy: 'no-referrer',\n }).then((res) => res.blob());\n const file = new File(\n [blob],\n type === 'video/mp4' ? 'video.mp4' : 'image.gif',\n {\n type,\n },\n );\n const newMediaAttachments = [\n ...mediaAttachments,\n {\n file,\n type,\n size: file.size,\n id: null,\n description: alt_text || '',\n },\n ];\n setMediaAttachments(newMediaAttachments);\n theToast?.hideToast?.();\n } catch (err) {\n console.error(err);\n theToast?.hideToast?.();\n showToast(t`Failed to download GIF`);\n }\n })();\n }}\n />\n \n )}\n
    \n );\n}\n\nfunction autoResizeTextarea(textarea) {\n if (!textarea) return;\n const { value, offsetHeight, scrollHeight, clientHeight } = textarea;\n if (offsetHeight < window.innerHeight) {\n // NOTE: This check is needed because the offsetHeight return 50000 (really large number) on first render\n // No idea why it does that, will re-investigate in far future\n const offset = offsetHeight - clientHeight;\n const height = value ? scrollHeight + offset + 'px' : null;\n textarea.style.height = height;\n }\n}\n\nasync function _getCustomEmojis(instance, masto) {\n const emojis = await masto.v1.customEmojis.list();\n const visibleEmojis = emojis.filter((e) => e.visibleInPicker);\n const searcher = new Fuse(visibleEmojis, {\n keys: ['shortcode'],\n findAllMatches: true,\n });\n return [visibleEmojis, searcher];\n}\nconst getCustomEmojis = pmem(_getCustomEmojis, {\n // Limit by time to reduce memory usage\n // Cached by instance\n matchesArg: (cacheKeyArg, keyArg) => cacheKeyArg.instance === keyArg.instance,\n maxAge: 30 * 60 * 1000, // 30 minutes\n});\n\nconst detectLangs = (text) => {\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 { masto, instance } = api();\n const [text, setText] = useState(ref.current?.value || '');\n const {\n maxCharacters,\n performSearch = () => {},\n onTrigger = () => {},\n ...textareaProps\n } = props;\n // const snapStates = useSnapshot(states);\n // const charCount = snapStates.composerCharacterCount;\n\n // const customEmojis = useRef();\n const searcherRef = useRef();\n useEffect(() => {\n getCustomEmojis(instance, masto)\n .then((r) => {\n const [emojis, searcher] = r;\n searcherRef.current = searcher;\n })\n .catch((e) => {\n console.error(e);\n });\n }, []);\n\n const textExpanderRef = useRef();\n const textExpanderTextRef = useRef('');\n useEffect(() => {\n let handleChange, handleValue, handleCommited;\n if (textExpanderRef.current) {\n handleChange = (e) => {\n // console.log('text-expander-change', 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 emojis = customEmojis.current.filter((emoji) =>\n // emoji.shortcode.startsWith(text),\n // );\n // const emojis = filterShortcodes(customEmojis.current, text);\n const results = searcherRef.current?.search(text, {\n limit: 5,\n });\n let html = '';\n results.forEach(({ item: emoji }) => {\n const { shortcode, url } = emoji;\n html += `\n
  • \n \"\" \n ${encodeHTML(shortcode)}\n
  • `;\n });\n html += `
  • ${t`More…`}
  • `;\n // console.log({ emojis, html });\n menu.innerHTML = html;\n provide(\n Promise.resolve({\n matched: results.length > 0,\n fragment: menu,\n }),\n );\n return;\n }\n\n const type = {\n '@': 'accounts',\n '#': 'hashtags',\n }[key];\n provide(\n new Promise((resolve) => {\n const searchResults = performSearch({\n type,\n q: text,\n limit: 5,\n });\n searchResults.then((value) => {\n if (text !== textExpanderTextRef.current) {\n return;\n }\n console.log({ value, type, v: value[type] });\n const results = value[type] || value;\n console.log('RESULTS', value, results);\n let html = '';\n results.forEach((result) => {\n const {\n name,\n avatarStatic,\n displayName,\n username,\n acct,\n emojis,\n history,\n } = result;\n const displayNameWithEmoji = emojifyText(displayName, emojis);\n // const item = menuItem.cloneNode();\n if (acct) {\n html += `\n
  • \n \n \"\"\n \n \n ${displayNameWithEmoji || username}\n
    @${encodeHTML(\n acct,\n )}\n
    \n
  • \n `;\n } else {\n const total = history?.reduce?.(\n (acc, cur) => acc + +cur.uses,\n 0,\n );\n html += `\n
  • \n #${encodeHTML(name)}\n ${\n total\n ? `${shortenNumber(total)}`\n : ''\n }\n
  • \n `;\n }\n });\n if (type === 'accounts') {\n html += `
  • ${t`More…`}
  • `;\n }\n menu.innerHTML = html;\n console.log('MENU', results, menu);\n resolve({\n matched: results.length > 0,\n fragment: menu,\n });\n });\n }),\n );\n };\n\n textExpanderRef.current.addEventListener(\n 'text-expander-change',\n handleChange,\n );\n\n handleValue = (e) => {\n const { key, item } = e.detail;\n const { value, more } = item.dataset;\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 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 textExpanderRef.current.addEventListener(\n 'text-expander-value',\n handleValue,\n );\n\n handleCommited = (e) => {\n const { input } = e.detail;\n setText(input.value);\n // fire input event\n if (ref.current) {\n const event = new Event('input', { bubbles: true });\n ref.current.dispatchEvent(event);\n }\n };\n\n textExpanderRef.current.addEventListener(\n 'text-expander-committed',\n handleCommited,\n );\n }\n\n return () => {\n if (textExpanderRef.current) {\n textExpanderRef.current.removeEventListener(\n 'text-expander-change',\n handleChange,\n );\n textExpanderRef.current.removeEventListener(\n 'text-expander-value',\n handleValue,\n );\n textExpanderRef.current.removeEventListener(\n 'text-expander-committed',\n handleCommited,\n );\n }\n };\n }, []);\n\n useEffect(() => {\n // Resize observer for textarea\n const textarea = ref.current;\n if (!textarea) return;\n const resizeObserver = new ResizeObserver(() => {\n // Get height of textarea, set height to textExpander\n if (textExpanderRef.current) {\n const { height } = textarea.getBoundingClientRect();\n textExpanderRef.current.style.height = height + 'px';\n }\n });\n resizeObserver.observe(textarea);\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 const langs = detectLangs(text);\n if (langs?.length) {\n onTrigger?.({\n name: 'auto-detect-language',\n languages: langs,\n });\n }\n }, 2000);\n\n return (\n \n {\n // Get line before cursor position after pressing 'Enter'\n const { key, target } = e;\n if (key === 'Enter' && !(e.ctrlKey || e.metaKey)) {\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 // Replace zero-width space\n const text = target.value.replace(/\\u200b/g, '');\n setText(text);\n autoResizeTextarea(target);\n props.onInput?.(e);\n throttleHighlightText(text);\n debouncedAutoDetectLanguage();\n }}\n style={{\n width: '100%',\n height: '4em',\n // '--text-weight': (1 + charCount / 140).toFixed(1) || 1,\n }}\n onScroll={(e) => {\n if (composeHighlightRef.current) {\n const { scrollTop } = e.target;\n composeHighlightRef.current.scrollTop = scrollTop;\n }\n }}\n />\n \n \n );\n});\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 \n );\n}\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 onDescriptionChange = () => {},\n onRemove = () => {},\n}) {\n const { i18n } = useLingui();\n const [uiState, setUIState] = useState('default');\n const supportsEdit = supports('@mastodon/edit-media-attributes');\n const { type, id, file } = attachment;\n const url = useMemo(\n () => (file ? URL.createObjectURL(file) : attachment.url),\n [file, attachment.url],\n );\n console.log({ attachment });\n\n const checkMaxError = !!file?.size;\n const configuration = checkMaxError ? getCurrentInstanceConfiguration() : {};\n const {\n mediaAttachments: {\n imageSizeLimit,\n imageMatrixLimit,\n videoSizeLimit,\n videoMatrixLimit,\n videoFrameRateLimit,\n } = {},\n } = configuration || {};\n\n const [maxError, setMaxError] = useState(() => {\n if (!checkMaxError) return null;\n if (\n type.startsWith('image') &&\n imageSizeLimit &&\n file.size > imageSizeLimit\n ) {\n return {\n type: 'imageSizeLimit',\n details: {\n imageSize: file.size,\n imageSizeLimit,\n },\n };\n } else if (\n type.startsWith('video') &&\n videoSizeLimit &&\n file.size > videoSizeLimit\n ) {\n return {\n type: 'videoSizeLimit',\n details: {\n videoSize: file.size,\n videoSizeLimit,\n },\n };\n }\n return null;\n });\n\n const [imageMatrix, setImageMatrix] = useState({});\n useEffect(() => {\n if (!checkMaxError || !imageMatrixLimit) return;\n if (imageMatrix?.matrix > imageMatrixLimit) {\n setMaxError({\n type: 'imageMatrixLimit',\n details: {\n imageMatrix: imageMatrix?.matrix,\n imageMatrixLimit,\n width: imageMatrix?.width,\n height: imageMatrix?.height,\n },\n });\n }\n }, [imageMatrix, imageMatrixLimit, checkMaxError]);\n\n const [videoMatrix, setVideoMatrix] = useState({});\n useEffect(() => {\n if (!checkMaxError || !videoMatrixLimit) return;\n if (videoMatrix?.matrix > videoMatrixLimit) {\n setMaxError({\n type: 'videoMatrixLimit',\n details: {\n videoMatrix: videoMatrix?.matrix,\n videoMatrixLimit,\n width: videoMatrix?.width,\n height: videoMatrix?.height,\n },\n });\n }\n }, [videoMatrix, videoMatrixLimit, checkMaxError]);\n\n const [description, setDescription] = useState(attachment.description);\n const [suffixType, subtype] = type.split('/');\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
    \n \n Uploaded\n \n

    \n {attachment.description || No description}\n

    \n
    \n ) : (\n {\n const { value } = e.target;\n setDescription(value);\n // debouncedOnDescriptionChange(value);\n }}\n >\n )}\n \n );\n\n const toastRef = useRef(null);\n useEffect(() => {\n return () => {\n toastRef.current?.hideToast?.();\n };\n }, []);\n\n const maxErrorToast = useRef(null);\n\n const maxErrorText = (err) => {\n const { type, details } = err;\n switch (type) {\n case 'imageSizeLimit': {\n const { imageSize, imageSizeLimit } = details;\n return t`File size too large. Uploading might encounter issues. Try reduce the file size from ${prettyBytes(\n imageSize,\n )} to ${prettyBytes(imageSizeLimit)} or lower.`;\n }\n case 'imageMatrixLimit': {\n const { imageMatrix, imageMatrixLimit, width, height } = details;\n const { newWidth, newHeight } = scaleDimension(\n imageMatrix,\n imageMatrixLimit,\n width,\n height,\n );\n return t`Dimension too large. Uploading might encounter issues. Try reduce dimension from ${i18n.number(\n width,\n )}×${i18n.number(height)}px to ${i18n.number(newWidth)}×${i18n.number(\n newHeight,\n )}px.`;\n }\n case 'videoSizeLimit': {\n const { videoSize, videoSizeLimit } = details;\n return t`File size too large. Uploading might encounter issues. Try reduce the file size from ${prettyBytes(\n videoSize,\n )} to ${prettyBytes(videoSizeLimit)} or lower.`;\n }\n case 'videoMatrixLimit': {\n const { videoMatrix, videoMatrixLimit, width, height } = details;\n const { newWidth, newHeight } = scaleDimension(\n videoMatrix,\n videoMatrixLimit,\n width,\n height,\n );\n return t`Dimension too large. Uploading might encounter issues. Try reduce dimension from ${i18n.number(\n width,\n )}×${i18n.number(height)}px to ${i18n.number(newWidth)}×${i18n.number(\n newHeight,\n )}px.`;\n }\n case 'videoFrameRateLimit': {\n // Not possible to detect this on client-side for now\n return t`Frame rate too high. Uploading might encounter issues.`;\n }\n }\n };\n\n return (\n <>\n
    \n {\n setShowModal(true);\n }}\n >\n {suffixType === 'image' ? (\n {\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 {\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
    \n {descTextarea}\n
    \n \n \n \n {!!maxError && (\n {\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 \n \n )}\n
    \n \n {showModal && (\n {\n setShowModal(false);\n }}\n >\n
    \n {\n setShowModal(false);\n }}\n >\n \n \n
    \n

    \n {\n {\n image: t`Edit image description`,\n video: t`Edit video description`,\n audio: t`Edit audio description`,\n }[suffixType]\n }\n

    \n
    \n
    \n
    \n {suffixType === 'image' ? (\n \"\"\n ) : suffixType === 'video' || suffixType === 'gifv' ? (\n
    \n
    \n {descTextarea}\n
    \n {suffixType === 'image' &&\n /^(png|jpe?g|gif|webp)$/i.test(subtype) &&\n !!states.settings.mediaAltGenerator &&\n !!IMG_ALT_API_URL && (\n \n \n \n }\n >\n {\n setUIState('loading');\n toastRef.current = showToast({\n text: t`Generating description. Please wait…`,\n duration: -1,\n });\n // POST with multipart\n (async function () {\n try {\n const body = new FormData();\n body.append('image', file);\n const response = await fetch(IMG_ALT_API_URL, {\n method: 'POST',\n body,\n }).then((r) => r.json());\n if (response.error) {\n throw new Error(response.error);\n }\n setDescription(response.description);\n } catch (e) {\n console.error(e);\n showToast(\n e.message\n ? t`Failed to generate description: ${e.message}`\n : t`Failed to generate description`,\n );\n } finally {\n setUIState('default');\n toastRef.current?.hideToast?.();\n }\n })();\n }}\n >\n \n {lang && lang !== 'en' ? (\n \n Generate description…\n
    \n (English)\n
    \n ) : (\n \n Generate description…\n \n )}\n \n {!!lang && lang !== 'en' && (\n {\n setUIState('loading');\n toastRef.current = showToast({\n text: t`Generating description. Please wait…`,\n duration: -1,\n });\n // POST with multipart\n (async function () {\n try {\n const body = new FormData();\n body.append('image', file);\n const params = `?lang=${lang}`;\n const response = await fetch(\n IMG_ALT_API_URL + params,\n {\n method: 'POST',\n body,\n },\n ).then((r) => r.json());\n if (response.error) {\n throw new Error(response.error);\n }\n setDescription(response.description);\n } catch (e) {\n console.error(e);\n showToast(\n t`Failed to generate description${\n e?.message ? `: ${e.message}` : ''\n }`,\n );\n } finally {\n setUIState('default');\n toastRef.current?.hideToast?.();\n }\n })();\n }}\n >\n \n \n Generate description…\n
    \n \n ({localeCode2Text(lang)}){' '}\n \n — experimental\n \n \n
    \n \n )}\n \n )}\n {\n setShowModal(false);\n }}\n disabled={uiState === 'loading'}\n >\n Done\n \n
    \n
    \n
    \n
    \n \n )}\n \n );\n}\n\nfunction Poll({\n lang,\n poll,\n disabled,\n onInput = () => {},\n maxOptions,\n maxExpiration,\n minExpiration,\n maxCharactersPerOption,\n}) {\n const { _ } = useLingui();\n const { options, expiresIn, multiple } = poll;\n\n return (\n
    \n
    \n {options.map((option, i) => (\n
    \n {\n const { value } = e.target;\n options[i] = value;\n onInput(poll);\n }}\n />\n {\n options.splice(i, 1);\n onInput(poll);\n }}\n >\n \n \n
    \n ))}\n
    \n
    \n = maxOptions}\n onClick={() => {\n options.push('');\n onInput(poll);\n }}\n >\n +\n {' '}\n \n \n
    \n
    \n {\n onInput(null);\n }}\n >\n Remove poll\n \n
    \n
    \n );\n}\n\nfunction filterShortcodes(emojis, searchTerm) {\n searchTerm = searchTerm.toLowerCase();\n\n // Return an array of shortcodes that start with or contain the search term, sorted by relevance and limited to the first 5\n return emojis\n .sort((a, b) => {\n let aLower = a.shortcode.toLowerCase();\n let bLower = b.shortcode.toLowerCase();\n\n let aStartsWith = aLower.startsWith(searchTerm);\n let bStartsWith = bLower.startsWith(searchTerm);\n let aContains = aLower.includes(searchTerm);\n let bContains = bLower.includes(searchTerm);\n let bothStartWith = aStartsWith && bStartsWith;\n let bothContain = aContains && bContains;\n\n return bothStartWith\n ? a.length - b.length\n : aStartsWith\n ? -1\n : bStartsWith\n ? 1\n : bothContain\n ? a.length - b.length\n : aContains\n ? -1\n : bContains\n ? 1\n : 0;\n })\n .slice(0, 5);\n}\n\nfunction encodeHTML(str) {\n return str.replace(/[&<>\"']/g, function (char) {\n return '&#' + char.charCodeAt(0) + ';';\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\nfunction MentionModal({\n onClose = () => {},\n onSelect = () => {},\n defaultSearchTerm,\n}) {\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 },\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 },\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 },\n );\n\n return (\n
    \n {!!onClose && (\n \n )}\n
    \n {\n e.preventDefault();\n debouncedLoadAccounts.flush?.();\n // const searchTerm = inputRef.current.value;\n // debouncedLoadAccounts(searchTerm);\n }}\n >\n {\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 defaultValue={defaultSearchTerm || ''}\n />\n \n
    \n
    \n {accounts?.length > 0 ? (\n \n {accounts.map((account, i) => {\n const relationship = relationshipsMap[account.id];\n return (\n \n \n {\n selectAccount(account);\n }}\n >\n \n \n \n );\n })}\n \n ) : uiState === 'loading' ? (\n
    \n \n
    \n ) : uiState === 'error' ? (\n
    \n

    \n Error loading accounts\n

    \n
    \n ) : null}\n
    \n
    \n );\n}\n\nfunction CustomEmojisModal({\n masto,\n instance,\n onClose = () => {},\n onSelect = () => {},\n defaultSearchTerm,\n}) {\n const [uiState, setUIState] = useState('default');\n const customEmojisList = useRef([]);\n const [customEmojis, setCustomEmojis] = useState([]);\n const recentlyUsedCustomEmojis = useMemo(\n () => store.account.get('recentlyUsedCustomEmojis') || [],\n );\n const searcherRef = useRef();\n useEffect(() => {\n setUIState('loading');\n (async () => {\n try {\n const [emojis, searcher] = await getCustomEmojis(instance, masto);\n console.log('emojis', emojis);\n searcherRef.current = searcher;\n setCustomEmojis(emojis);\n setUIState('default');\n } catch (e) {\n setUIState('error');\n console.error(e);\n }\n })();\n }, []);\n\n const customEmojisCatList = useMemo(() => {\n // Group emojis by category\n const emojisCat = {\n '--recent--': recentlyUsedCustomEmojis.filter((emoji) =>\n customEmojis.find((e) => e.shortcode === emoji.shortcode),\n ),\n };\n const othersCat = [];\n customEmojis.forEach((emoji) => {\n customEmojisList.current?.push?.(emoji);\n if (!emoji.category) {\n othersCat.push(emoji);\n return;\n }\n if (!emojisCat[emoji.category]) {\n emojisCat[emoji.category] = [];\n }\n emojisCat[emoji.category].push(emoji);\n });\n if (othersCat.length) {\n emojisCat['--others--'] = othersCat;\n }\n return emojisCat;\n }, [customEmojis]);\n\n const scrollableRef = useRef();\n const [matches, setMatches] = useState(null);\n const 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 return (\n
    \n {!!onClose && (\n \n )}\n
    \n
    \n \n Custom emojis\n {' '}\n {uiState === 'loading' ? (\n \n ) : (\n • {instance}\n )}\n
    \n {\n e.preventDefault();\n const emoji = matches[0];\n if (emoji) {\n onSelectEmoji(`:${emoji.shortcode}:`);\n }\n }}\n >\n \n \n
    \n
    \n {matches !== null ? (\n
      \n {matches.map((emoji) => (\n
    • \n {\n onSelectEmoji(`:${emoji.shortcode}:`);\n }}\n showCode\n />\n
    • \n ))}\n
    \n ) : (\n
    \n {uiState === 'error' && (\n
    \n

    \n Error loading custom emojis\n

    \n
    \n )}\n {uiState === 'default' &&\n Object.entries(customEmojisCatList).map(\n ([category, emojis]) =>\n !!emojis?.length && (\n <>\n
    \n {{\n '--recent--': t`Recently used`,\n '--others--': t`Others`,\n }[category] || category}\n
    \n \n \n ),\n )}\n
    \n )}\n
    \n
    \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
    \n {emojis.slice(0, max).map((emoji) => (\n {\n onSelect(`:${emoji.shortcode}:`);\n }}\n />\n ))}\n {showMore && (\n setMax(max + CUSTOM_EMOJIS_COUNT)}\n >\n {i18n.number(emojis.length - max)} more…\n \n )}\n
    \n );\n});\n\nconst CustomEmojiButton = memo(({ emoji, onClick, showCode }) => {\n const addEdges = (e) => {\n // Add edge-left or edge-right class based on self position relative to scrollable parent\n // If near left edge, add edge-left, if near right edge, add edge-right\n const buffer = 88;\n const parent = e.currentTarget.closest('main');\n if (parent) {\n const rect = parent.getBoundingClientRect();\n const selfRect = e.currentTarget.getBoundingClientRect();\n const targetClassList = e.currentTarget.classList;\n if (selfRect.left < rect.left + buffer) {\n targetClassList.add('edge-left');\n targetClassList.remove('edge-right');\n } else if (selfRect.right > rect.right - buffer) {\n targetClassList.add('edge-right');\n targetClassList.remove('edge-left');\n } else {\n targetClassList.remove('edge-left', 'edge-right');\n }\n }\n };\n\n return (\n \n \n {!!emoji.staticUrl && (\n \n )}\n \n \n {showCode && (\n <>\n {' '}\n {emoji.shortcode}\n \n )}\n \n );\n});\n\nconst GIFS_PER_PAGE = 20;\nfunction GIFPickerModal({ onClose = () => {}, onSelect = () => {} }) {\n const { i18n } = 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
    \n {!!onClose && (\n \n )}\n
    \n {\n e.preventDefault();\n fetchGIFs({ offset: 0 });\n }}\n >\n \n \n \n
    \n
    \n {uiState === 'default' && (\n
    \n

    \n Type to search GIFs\n

    \n
    \n )}\n {uiState === 'loading' && !results?.data?.length && (\n
    \n \n
    \n )}\n {results?.data?.length > 0 ? (\n <>\n
      \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
    • \n {\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 \n \n {strippedWebP && (\n \n )}\n {\n e.target.style.backgroundColor = 'transparent';\n }}\n />\n \n
      {alt_text || title}
      \n \n \n
    • \n );\n })}\n
    \n

    \n {results.pagination?.offset > 0 && (\n {\n fetchGIFs({\n offset: results.pagination?.offset - GIFS_PER_PAGE,\n });\n }}\n >\n \n \n Previous\n \n \n )}\n \n {results.pagination?.offset + results.pagination?.count <\n results.pagination?.total_count && (\n {\n fetchGIFs({\n offset: results.pagination?.offset + GIFS_PER_PAGE,\n });\n }}\n >\n \n Next\n {' '}\n \n \n )}\n

    \n \n ) : (\n uiState === 'results' && (\n
    \n

    No results

    \n
    \n )\n )}\n {uiState === 'error' && (\n
    \n

    \n Error loading GIFs\n

    \n
    \n )}\n
    \n
    \n );\n}\n\nexport default Compose;\n"],"names":["Combobox","input","list","tabInsertsSuggestions","defaultFirstOption","event","keyboardBindings","trackComposition","commitWithElement","_a","visible","indexDiff","focusEl","els","focusIndex","indexOfItem","newIndex","target","el","scrollTo","combobox","commit","fireCommitEvent","container","inViewport","element","scrollTop","containerBottom","top","bottom","boundary","query","text","key","cursor","multiWord","lookBackIndex","lastMatchPosition","keyIndex","pre","CustomHTMLElement","InputStyleCloneUpdateEvent","CloneRegistry","_InputStyleCloneElement","__privateAdd","_InputStyleCloneElement_instances","_styleObserver","__privateMethod","updateStyles_fn","_resizeObserver","requestUpdateLayout_fn","_inputRef","_container","_xOffset","_yOffset","_isLayoutUpdating","_onInput","updateText_fn","_onDocumentScrollOrResize","usingInput_fn","__privateSet","__privateGet","clone","fn","updateLayout_fn","inputStyle","inputRect","cloneRect","prop","propertiesToCopy","InputStyleCloneElement","e","_InputRange","startOffset","endOffset","_InputRange_instances","_inputElement","_startOffset","_endOffset","selectionStart","selectionEnd","offset","clampOffset_fn","toStart","createCloneRange_fn","styleClone_get","cloneElement_get","range","textNode","InputRange","states","TextExpander","expander","match","menu","_b","position","caretRect","targetPosition","currentPosition","delta","currentStyle","item","beginning","remaining","detail","suffix","value","found","providers","provide","result","x","TextExpanderElement","keysAttr","keys","multiWordAttr","globalMultiWord","state","ansiRegex","onlyFirst","pattern","regex","stripAnsi","string","segmenter","stringLength","countAnsiEscapeCodes","length","_","poweredByGiphyURL","BYTES_UNITS","prettyBytes","bytes","unitIndex","Math","min","floor","log2","i18n","number","style","unit","unitDisplay","maximumFractionDigits","PHANPY_IMG_ALT_API_URL","IMG_ALT_API_URL","PHANPY_GIPHY_API_KEY","GIPHY_API_KEY","import","supportedLanguagesMap","supportedLanguages","reduce","acc","l","code","common","native","expiryOptions","i18nDuration","expirySeconds","Object","oneDay","expiresInFromExpiresAt","expiresAt","Date","getTime","now","find","s","document","createElement","role","className","windowMargin","observer","IntersectionObserver","entries","forEach","entry","isIntersecting","left","width","boundingClientRect","innerWidth","window","insetInlineStart","isRTL","observe","DEFAULT_LANG","localeMatch","Intl","DateTimeFormat","resolvedOptions","locale","navigator","languages","map","urlRegexObj","RegExp","urlRegex","source","flags","usernameRegex","urlPlaceholder","countableText","inputText","replace","USERNAME_RE","MENTION_RE","HASHTAG_RE","SHORTCODE_RE_FRAGMENT","SCAN_RE","Segmenter","escapeHTML","highlightText","maxCharacters","Infinity","composerCharacterCount","withinLimitHTML","exceedLimitHTML","htmlSegments","segment","index","RTF","mem","RelativeTimeFormat","undefined","CUSTOM_EMOJIS_COUNT","Compose","onClose","replyToStatus","editStatus","draftStatus","standalone","hasOpener","useLingui","rtf","console","masto","instance","uiState","setUIState","useState","UID","uid","log","currentAccount","currentAccountInfo","maxMediaAttachments","charactersReservedPerUrl","imageMatrixLimit","supportedMimeTypes","imageSizeLimit","videoSizeLimit","videoMatrixLimit","videoFrameRateLimit","maxExpiration","maxOptions","maxCharactersPerOption","minExpiration","spoilerTextRef","useRef","textareaRef","store","prevLanguage","language","sensitive","setMediaAttachments","setLanguage","oninputTextarea","poll","account","focusTextarea","dispatchEvent","setTimeout","spoilerText","useEffect","visibility2","language2","sensitive2","visibility","current","m","allMentions","prefs","setSensitive","poll2","mediaAttachments","options","expiresIn","statusSource","dataset","mediaAttachments2","setVisibility","composablePoll","status","o","formRef","canClose","id","hasValue","hasMediaAttachments","isSelf","hasOnlyAcct","confirmClose","hasIDMediaAttachments","beforeUnloadCopy","handleBeforeUnload","sameWithSource","getCharCount","updateCharCount","supportsCloseWatcher","useHotkeys","yes","addEventListener","capture","modals","hasModal","hasOnlyComposer","prevBackgroundDraft","count","escDownRef","ignoreEventWhen","useCloseWatcher","draftKey","getCurrentAccountNS","backgroundDraft","useInterval","db","handleItems","username","acct","items","i2","file","debug","drafts","updatedAt","error","max","allowedFiles","i18n2","del","files","mediaFiles","alert","handleDragover","showMentionPicker","setShowMentionPicker","setShowEmoji2Picker","setShowGIFPicker","setAutoDetectedLanguages","topLanguages","restLanguages","commonB","type","size","url","codeA","commonA","codeB","autoDetectedLanguages","useMemo","onMinimize","saveUnsavedDraft","_jsxs","dataTransfer","_jsx","showEmoji2Picker","showGIFPicker","topSupportedLanguages","children","class","confirmText","passData","__STATES__","opener","composerState","Icon","settings","sort","avatarStatic","disabled","onClick","Status","replyToStatusMonthsAgo","Trans","formData","components","0","media","onKeyDown","onSubmit","description","params2","res","attachment","results","mediaPromises","hasNoDescriptions","params","removeNullUndefined","newStatus","saveStatus","i","e2","media_attributes","in_reply_to_id","statuses","visibilityIconsMap","opacity","pointerEvents","onChange","icon","title","q","limit","action","Textarea","ref","placeholder","fileID","newAttachments","required","attachments","performSearch","v1","search","resolve","onTrigger","defaultSearchTerm","setPoll","newPoll","onDescriptionChange","checked","onInput","_Fragment","accept","multiple","Loader","CharCountMeter","commonText","localeCode2Text","restSupportedLanguages","textarea","textBeforeMention","spaceAfterMention","textAfterMention","newText","Modal","CustomEmojisModal","emojiShortcode","textBeforeEmoji","spaceBeforeEmoji","spaceAfterEmoji","textAfterEmoji","GIFPickerModal","alt_text","theToast","showToast","onSelect","autoResizeTextarea","scrollHeight","clientHeight","offsetHeight","height","_getCustomEmojis","visibleEmojis","searcher","getCustomEmojis","pmem","blob","fetch","keyArg","detectAll","newMediaAttachments","api","textareaProps","props","searcherRef","r","emojis","textExpanderRef","textExpanderTextRef","text2","emoji","cacheKeyArg","shortcode","detectLangs","langs","encodeHTML","lang","forwardRef","html","handleChange","history","displayNameWithEmoji","emojifyText","displayName","total","cur","name","shortenNumber","Promise","matched","then","v","more","handleValue","handleCommited","setText","slowHighlightPerf","composeHighlightRef","start","end","debouncedAutoDetectLanguage","useDebouncedCallback","dom","mark","Event","resizeObserver","throttleHighlightText","bullet","postSpaces","anything","lastLine","innerHTML","preSpaces","newBullet","pos","innerText","dir","rows","cols","hidden","charCount","leftChars","ctrlKey","setRangeText","setSelectionRange","scaleDimension","matrix","matrixLimit","scalingFactor","newHeight","newWidth","MediaAttachment","supportsEdit","supports","onScroll","configuration","getCurrentInstanceConfiguration","maxError","setMaxError","checkMaxError","snapStates","imageMatrix","videoMatrix","setDescription","debouncedOnDescriptionChange","timer","details","setImageMatrix","setVideoMatrix","toastRef","showModal","imageSizeLimit2","descTextarea","videoSize","videoSizeLimit2","videoMatrixLimit2","videoMatrix2","maxErrorToast","maxErrorText","err","imageSize","suffixType","naturalWidth","naturalHeight","1","2","3","videoWidth","videoHeight","values","setShowModal","src","onLoad","onLoadedMetadata","onRemove","alt","subtype","Menu2","MenuItem","body","response","zIndex","menuButton","append","Poll","option","label","splice","str","char","obj","push","MentionModal","accounts","setAccounts","relationshipsMap","setRelationshipsMap","setSelectedIndex","accounts2","fetchRelationships","relationships","loadAccounts","inputRef","filterShortcodes","searchTerm","bLower","aStartsWith","bStartsWith","aContains","bothContain","bContains","socialAddress","selectedAccount","selectedIndex","selectAccount","listRef","selectedItem","loadRelationships","term","debouncedLoadAccounts","enableOnFormTags","relationship","AccountBlock","customEmojisList","recentlyUsedCustomEmojis","customEmojisCatList","emojisCat","customEmojis","othersCat","matches","setMatches","_c","scrollableRef","onFind","onSelectEmoji","useCallback","recentlyUsedCustomEmojis2","recentlyUsedEmojiIndex","emoji2","setCustomEmojis","category","queueMicrotask","CustomEmojisList","memo","CustomEmojiButton","showCode","parent","rect","targetClassList","selfRect","addEdges","GIFS_PER_PAGE","showMore","slice","fetchGIFs","qRef","closest","currentTarget","remove","debouncedOnInput","onPointerEnter","staticUrl","decoding","setResults","currentOffset","gif","images","fixed_height_small","fixed_height_downsampled","fixed_height","theImage","webp","urlObj","strippedURL","strippedWebP","preventDefault","original","theURL","mp4","url2","strippedURL2","webpObj","parse"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4]} \ No newline at end of file diff --git a/assets/compose-sEmGhv2s.js b/assets/compose-sEmGhv2s.js deleted file mode 100644 index d64bafe..0000000 --- a/assets/compose-sEmGhv2s.js +++ /dev/null @@ -1,26 +0,0 @@ -var Lt=s=>{throw TypeError(s)};var rt=(s,e,n)=>e.has(s)||Lt("Cannot "+n);var B=(s,e,n)=>(rt(s,e,"read from private field"),n?n.call(s):e.get(s)),re=(s,e,n)=>e.has(s)?Lt("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(s):e.set(s,n),de=(s,e,n,a)=>(rt(s,e,"write to private field"),a?a.call(s,n):e.set(s,n),n),G=(s,e,n)=>(rt(s,e,"access private method"),n);import{F as on,B as rn,_ as ln,a as _e,a8 as cn,w as zt,u as un,i as Ht,b as dn,I as K,y as St,h as Nt,a9 as hn,M as Ve,s as ke,a4 as pn,a0 as mn,n as gn,O as fn,X as Qe,c as vn,d as At,l as bn,x as yn}from"./fuse-rEcEZtAj.js";import{s as le,a as bt,h as H,A as W,f as xn,al as Ut,d as Le,y as ee,m as wn,am as kn,T as Re,c as t,k as Ce,b as En,L as et,j as Fn,D as Cn,u as Ln,q as It,x as Wt}from"./useTitle-v86HJIox.js";import{e as zn}from"./tinyld-light-PxOyhYWY.js";import"./index-5wlk767u.js";class Sn{constructor(e,n,{tabInsertsSuggestions:a,defaultFirstOption:r}={}){this.input=e,this.list=n,this.tabInsertsSuggestions=a??!0,this.defaultFirstOption=r??!1,this.isComposing=!1,n.id||(n.id=`combobox-${Math.random().toString().slice(2,6)}`),this.ctrlBindings=!!navigator.userAgent.match(/Macintosh/),this.keyboardEventHandler=m=>An(m,this),this.compositionEventHandler=m=>Mn(m,this),this.inputHandler=this.clearSelection.bind(this),e.setAttribute("role","combobox"),e.setAttribute("aria-controls",n.id),e.setAttribute("aria-expanded","false"),e.setAttribute("aria-autocomplete","list"),e.setAttribute("aria-haspopup","listbox")}destroy(){this.clearSelection(),this.stop(),this.input.removeAttribute("role"),this.input.removeAttribute("aria-controls"),this.input.removeAttribute("aria-expanded"),this.input.removeAttribute("aria-autocomplete"),this.input.removeAttribute("aria-haspopup")}start(){this.input.setAttribute("aria-expanded","true"),this.input.addEventListener("compositionstart",this.compositionEventHandler),this.input.addEventListener("compositionend",this.compositionEventHandler),this.input.addEventListener("input",this.inputHandler),this.input.addEventListener("keydown",this.keyboardEventHandler),this.list.addEventListener("click",Mt),this.indicateDefaultOption()}stop(){this.clearSelection(),this.input.setAttribute("aria-expanded","false"),this.input.removeEventListener("compositionstart",this.compositionEventHandler),this.input.removeEventListener("compositionend",this.compositionEventHandler),this.input.removeEventListener("input",this.inputHandler),this.input.removeEventListener("keydown",this.keyboardEventHandler),this.list.removeEventListener("click",Mt)}indicateDefaultOption(){var e;this.defaultFirstOption&&((e=Array.from(this.list.querySelectorAll('[role="option"]:not([aria-disabled="true"])')).filter(lt)[0])===null||e===void 0||e.setAttribute("data-combobox-option-default","true"))}navigate(e=1){const n=Array.from(this.list.querySelectorAll('[aria-selected="true"]')).filter(lt)[0],a=Array.from(this.list.querySelectorAll('[role="option"]')).filter(lt),r=a.indexOf(n);if(r===a.length-1&&e===1||r===0&&e===-1){this.clearSelection(),this.input.focus();return}let m=e===1?0:a.length-1;if(n&&r>=0){const v=r+e;v>=0&&v0||s.offsetHeight>0)}function Mn(s,e){e.isComposing=s.type==="compositionstart",document.getElementById(e.input.getAttribute("aria-controls")||"")&&e.clearSelection()}function $n(s,e){Tn(s,e)||(s.scrollTop=e.offsetTop)}function Tn(s,e){const n=s.scrollTop,a=n+s.clientHeight,r=e.offsetTop,m=r+e.clientHeight;return r>=n&&m<=a}const Bn=/\s|\(|\[/;function _n(s,e,n,{multiWord:a,lookBackIndex:r,lastMatchPosition:m}={multiWord:!1,lookBackIndex:0,lastMatchPosition:null}){let u=s.lastIndexOf(e,n-1);if(u===-1||u=u+e.length+1||s.lastIndexOf(` -`,n-1)>u||s.lastIndexOf(".",n-1)>u)return}else if(s.lastIndexOf(" ",n-1)>u)return;const v=s[u-1];return v&&!Bn.test(v)?void 0:{text:s.substring(u+e.length,n),position:u+e.length}}class Rn extends HTMLElement{}class Dn extends Event{constructor(){super("update")}}const ct=new WeakMap;var De,je,Ee,fe,Y,Te,ze,Se,pt,Ae,Ge,Ye,Ze,Pe,Fe;const xt=class xt extends Rn{constructor(n){super();re(this,Y);re(this,De,new MutationObserver(()=>G(this,Y,Ye).call(this)));re(this,je,new ResizeObserver(()=>G(this,Y,Ge).call(this)));re(this,Ee);re(this,fe);re(this,ze,0);re(this,Se,0);re(this,Ae,!1);re(this,Pe,()=>G(this,Y,Ze).call(this));re(this,Fe,n=>{G(this,Y,Te).call(this,a=>{(n.target===document||n.target===window||n.target instanceof Node&&n.target.contains(a))&&G(this,Y,Ge).call(this)})});de(this,Ee,new WeakRef(n)),de(this,fe,document.createElement("div")),B(this,fe).style.position="absolute",B(this,fe).style.pointerEvents="none",n.after(B(this,fe)),B(this,fe).appendChild(this)}static for(n){const a=ct.get(n)??new xt(n);return ct.set(n,a),a}forceUpdate(){G(this,Y,Ye).call(this),G(this,Y,Ze).call(this)}connectedCallback(){const n=B(this,Ee).deref();if(!n)return this.remove();this.style.pointerEvents="none",this.style.userSelect="none",this.style.overflow="hidden",this.style.display="block",this.style.visibility="hidden",n instanceof HTMLTextAreaElement?(this.style.whiteSpace="pre-wrap",this.style.wordWrap="break-word"):(this.style.whiteSpace="nowrap",this.style.display="table-cell",this.style.verticalAlign="middle"),this.setAttribute("aria-hidden","true"),G(this,Y,Ye).call(this),G(this,Y,Ze).call(this),B(this,De).observe(n,{attributeFilter:["style","dir"]}),B(this,je).observe(n),document.addEventListener("scroll",B(this,Fe),{capture:!0}),window.addEventListener("resize",B(this,Fe),{capture:!0}),n.addEventListener("input",B(this,Pe),{capture:!0})}disconnectedCallback(){B(this,fe).remove(),B(this,De).disconnect(),B(this,je).disconnect(),document.removeEventListener("scroll",B(this,Fe),{capture:!0}),window.removeEventListener("resize",B(this,Fe),{capture:!0});const n=B(this,Ee).deref();n&&(n.removeEventListener("input",B(this,Pe),{capture:!0}),ct.delete(n))}};De=new WeakMap,je=new WeakMap,Ee=new WeakMap,fe=new WeakMap,Y=new WeakSet,Te=function(n){const a=B(this,Ee).deref();return a?n(a):this.remove()},ze=new WeakMap,Se=new WeakMap,pt=function(){G(this,Y,Te).call(this,n=>{const a=window.getComputedStyle(n);this.style.height=a.height,this.style.width=a.width,n.clientHeight!==this.clientHeight&&(this.style.height=`calc(${a.height} + ${n.clientHeight-this.clientHeight}px)`),n.clientWidth!==this.clientWidth&&(this.style.width=`calc(${a.width} + ${n.clientWidth-this.clientWidth}px)`);const r=n.getBoundingClientRect(),m=this.getBoundingClientRect();de(this,ze,B(this,ze)+r.left-m.left),de(this,Se,B(this,Se)+r.top-m.top),this.style.transform=`translate(${B(this,ze)}px, ${B(this,Se)}px)`,this.scrollTop=n.scrollTop,this.scrollLeft=n.scrollLeft,this.dispatchEvent(new Dn)})},Ae=new WeakMap,Ge=function(){B(this,Ae)||(de(this,Ae,!0),requestAnimationFrame(()=>{G(this,Y,pt).call(this),de(this,Ae,!1)}))},Ye=function(){G(this,Y,Te).call(this,n=>{const a=window.getComputedStyle(n);for(const r of jn)this.style[r]=a[r];G(this,Y,Ge).call(this)})},Ze=function(){G(this,Y,Te).call(this,n=>{this.textContent=n.value,G(this,Y,pt).call(this)})},Pe=new WeakMap,Fe=new WeakMap;let Je=xt;const jn=["direction","writingMode","unicodeBidi","textOrientation","boxSizing","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","borderStyle","paddingTop","paddingRight","paddingBottom","paddingLeft","fontStyle","fontVariant","fontWeight","fontStretch","fontSize","fontSizeAdjust","lineHeight","fontFamily","textAlign","textTransform","textIndent","textDecoration","letterSpacing","wordSpacing","tabSize","MozTabSize"];try{customElements.define("input-style-clone",Je)}catch(s){if(!(s instanceof DOMException&&s.name==="NotSupportedError"))throw s}var pe,Ie,Me,ce,gt,qt,ft,Be;const Xe=class Xe{constructor(e,n=0,a=n){re(this,ce);re(this,pe);re(this,Ie);re(this,Me);de(this,pe,e),de(this,Ie,n),de(this,Me,a)}static fromSelection(e){const{selectionStart:n,selectionEnd:a}=e;return new Xe(e,n??void 0,a??void 0)}get collapsed(){return this.startOffset===this.endOffset}get commonAncestorContainer(){return B(this,pe)}get endContainer(){return B(this,pe)}get startContainer(){return B(this,pe)}get startOffset(){return B(this,Ie)}get endOffset(){return B(this,Me)}setStartOffset(e){de(this,Ie,G(this,ce,ft).call(this,e))}setEndOffset(e){de(this,Me,G(this,ce,ft).call(this,e))}collapse(e=!1){e?this.setEndOffset(this.startOffset):this.setStartOffset(this.endOffset)}cloneContents(){return G(this,ce,Be).call(this).cloneContents()}cloneRange(){return new Xe(B(this,pe),this.startOffset,this.endOffset)}getBoundingClientRect(){return G(this,ce,Be).call(this).getBoundingClientRect()}getClientRects(){return G(this,ce,Be).call(this).getClientRects()}toString(){return G(this,ce,Be).call(this).toString()}getStyleClone(){return B(this,ce,gt)}};pe=new WeakMap,Ie=new WeakMap,Me=new WeakMap,ce=new WeakSet,gt=function(){return Je.for(B(this,pe))},qt=function(){return B(this,ce,gt)},ft=function(e){return Math.max(0,Math.min(e,B(this,pe).value.length))},Be=function(){const e=document.createRange(),n=B(this,ce,qt).childNodes[0];return n&&(e.setStart(n,this.startOffset),e.setEnd(n,this.endOffset)),e};let mt=Xe;const qe=new WeakMap;class Pn{constructor(e,n){this.expander=e,this.input=n,this.combobox=null,this.menu=null,this.match=null,this.justPasted=!1,this.lookBackIndex=0,this.oninput=this.onInput.bind(this),this.onpaste=this.onPaste.bind(this),this.onkeydown=this.onKeydown.bind(this),this.oncommit=this.onCommit.bind(this),this.onmousedown=this.onMousedown.bind(this),this.onblur=this.onBlur.bind(this),this.interactingWithList=!1,n.addEventListener("paste",this.onpaste),n.addEventListener("input",this.oninput),n.addEventListener("keydown",this.onkeydown),n.addEventListener("blur",this.onblur)}destroy(){this.input.removeEventListener("paste",this.onpaste),this.input.removeEventListener("input",this.oninput),this.input.removeEventListener("keydown",this.onkeydown),this.input.removeEventListener("blur",this.onblur)}dismissMenu(){this.deactivate()&&(this.lookBackIndex=this.input.selectionEnd||this.lookBackIndex)}activate(e,n){var a,r;this.input!==document.activeElement&&this.input!==((r=(a=document.activeElement)===null||a===void 0?void 0:a.shadowRoot)===null||r===void 0?void 0:r.activeElement)||(this.deactivate(),this.menu=n,n.id||(n.id=`text-expander-${Math.floor(Math.random()*1e5).toString()}`),this.expander.append(n),this.combobox=new Sn(this.input,n),this.expander.dispatchEvent(new Event("text-expander-activate")),this.positionMenu(n,e.position),this.combobox.start(),n.addEventListener("combobox-commit",this.oncommit),n.addEventListener("mousedown",this.onmousedown),this.combobox.navigate(1))}positionMenu(e,n){const a=new mt(this.input,n).getBoundingClientRect(),r={left:a.left,top:a.top+a.height},m=e.getBoundingClientRect(),u={left:r.left-m.left,top:r.top-m.top};if(u.left!==0||u.top!==0){const v=getComputedStyle(e);e.style.left=v.left?`calc(${v.left} + ${u.left}px)`:`${u.left}px`,e.style.top=v.top?`calc(${v.top} + ${u.top}px)`:`${u.top}px`}}deactivate(){const e=this.menu;return!e||!this.combobox?!1:(this.expander.dispatchEvent(new Event("text-expander-deactivate")),this.menu=null,e.removeEventListener("combobox-commit",this.oncommit),e.removeEventListener("mousedown",this.onmousedown),this.combobox.destroy(),this.combobox=null,e.remove(),!0)}onCommit({target:e}){var n;const a=e;if(!(a instanceof HTMLElement)||!this.combobox)return;const r=this.match;if(!r)return;const m=this.input.value.substring(0,r.position-r.key.length),u=this.input.value.substring(r.position+r.text.length),v={item:a,key:r.key,value:null,continue:!1};if(!this.expander.dispatchEvent(new CustomEvent("text-expander-value",{cancelable:!0,detail:v}))||!v.value)return;let R=(n=this.expander.getAttribute("suffix"))!==null&&n!==void 0?n:" ";v.continue&&(R="");const C=`${v.value}${R}`;this.input.value=m+C+u;const k=m.length+C.length;this.deactivate(),this.input.focus({preventScroll:!0}),this.input.selectionStart=k,this.input.selectionEnd=k,v.continue||(this.lookBackIndex=k,this.match=null),this.expander.dispatchEvent(new CustomEvent("text-expander-committed",{cancelable:!1,detail:{input:this.input}}))}onBlur(){if(this.interactingWithList){this.interactingWithList=!1;return}this.deactivate()}onPaste(){this.justPasted=!0}async onInput(){if(this.justPasted){this.justPasted=!1;return}const e=this.findMatch();if(e){this.match=e;const n=await this.notifyProviders(e);if(!this.match)return;n?this.activate(e,n):this.deactivate()}else this.match=null,this.deactivate()}findMatch(){const e=this.input.selectionEnd||0,n=this.input.value;e<=this.lookBackIndex&&(this.lookBackIndex=e-1);for(const{key:a,multiWord:r}of this.expander.keys){const m=_n(n,a,e,{multiWord:r,lookBackIndex:this.lookBackIndex,lastMatchPosition:this.match?this.match.position:null});if(m)return{text:m.text,key:a,position:m.position}}}async notifyProviders(e){const n=[],a=v=>n.push(v);return this.expander.dispatchEvent(new CustomEvent("text-expander-change",{cancelable:!0,detail:{provide:a,text:e.text,key:e.key}}))?(await Promise.all(n)).filter(v=>v.matched).map(v=>v.fragment)[0]:void 0}onMousedown(){this.interactingWithList=!0}onKeydown(e){e.key==="Escape"&&(this.match=null,this.deactivate()&&(this.lookBackIndex=this.input.selectionEnd||this.lookBackIndex,e.stopImmediatePropagation(),e.preventDefault()))}}class Tt extends HTMLElement{get keys(){const e=this.getAttribute("keys"),n=e?e.split(" "):[],a=this.getAttribute("multiword"),r=a?a.split(" "):[],m=r.length===0&&this.hasAttribute("multiword");return n.map(u=>({key:u,multiWord:m||r.includes(u)}))}connectedCallback(){const e=this.querySelector('input[type="text"], textarea');if(!(e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement))return;const n=new Pn(this,e);qe.set(this,n)}disconnectedCallback(){const e=qe.get(this);e&&(e.destroy(),qe.delete(this))}dismiss(){const e=qe.get(this);e&&e.dismissMenu()}}window.customElements.get("text-expander")||(window.TextExpanderElement=Tt,window.customElements.define("text-expander",Tt));function On({onlyFirst:s=!1}={}){const e=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(e,s?void 0:"g")}const Hn=On();function Nn(s){if(typeof s!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof s}\``);return s.replace(Hn,"")}const Un=new Intl.Segmenter;function Bt(s,{countAnsiEscapeCodes:e=!1}={}){if(s===""||(e||(s=Nn(s)),s===""))return 0;let n=0;for(const a of Un.segment(s))n++;return n}const Wn="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",yt=[["aa","Afar","Afaraf"],["ab","Abkhaz","аҧсуа бызшәа"],["ae","Avestan","avesta"],["af","Afrikaans","Afrikaans"],["ak","Akan","Akan"],["am","Amharic","አማርኛ"],["an","Aragonese","aragonés"],["ar","Arabic","اللغة العربية"],["as","Assamese","অসমীয়া"],["av","Avaric","авар мацӀ"],["ay","Aymara","aymar aru"],["az","Azerbaijani","azərbaycan dili"],["ba","Bashkir","башҡорт теле"],["be","Belarusian","беларуская мова"],["bg","Bulgarian","български език"],["bh","Bihari","भोजपुरी"],["bi","Bislama","Bislama"],["bm","Bambara","bamanankan"],["bn","Bengali","বাংলা"],["bo","Tibetan","བོད་ཡིག"],["br","Breton","brezhoneg"],["bs","Bosnian","bosanski jezik"],["ca","Catalan","Català"],["ce","Chechen","нохчийн мотт"],["ch","Chamorro","Chamoru"],["co","Corsican","corsu"],["cr","Cree","ᓀᐦᐃᔭᐍᐏᐣ"],["cs","Czech","čeština"],["cu","Old Church Slavonic","ѩзыкъ словѣньскъ"],["cv","Chuvash","чӑваш чӗлхи"],["cy","Welsh","Cymraeg"],["da","Danish","dansk"],["de","German","Deutsch"],["dv","Divehi","Dhivehi"],["dz","Dzongkha","རྫོང་ཁ"],["ee","Ewe","Eʋegbe"],["el","Greek","Ελληνικά"],["en","English","English"],["eo","Esperanto","Esperanto"],["es","Spanish","Español"],["et","Estonian","eesti"],["eu","Basque","euskara"],["fa","Persian","فارسی"],["ff","Fula","Fulfulde"],["fi","Finnish","suomi"],["fj","Fijian","Vakaviti"],["fo","Faroese","føroyskt"],["fr","French","Français"],["fy","Western Frisian","Frysk"],["ga","Irish","Gaeilge"],["gd","Scottish Gaelic","Gàidhlig"],["gl","Galician","galego"],["gu","Gujarati","ગુજરાતી"],["gv","Manx","Gaelg"],["ha","Hausa","هَوُسَ"],["he","Hebrew","עברית"],["hi","Hindi","हिन्दी"],["ho","Hiri Motu","Hiri Motu"],["hr","Croatian","Hrvatski"],["ht","Haitian","Kreyòl ayisyen"],["hu","Hungarian","magyar"],["hy","Armenian","Հայերեն"],["hz","Herero","Otjiherero"],["ia","Interlingua","Interlingua"],["id","Indonesian","Bahasa Indonesia"],["ie","Interlingue","Interlingue"],["ig","Igbo","Asụsụ Igbo"],["ii","Nuosu","ꆈꌠ꒿ Nuosuhxop"],["ik","Inupiaq","Iñupiaq"],["io","Ido","Ido"],["is","Icelandic","Íslenska"],["it","Italian","Italiano"],["iu","Inuktitut","ᐃᓄᒃᑎᑐᑦ"],["ja","Japanese","日本語"],["jv","Javanese","basa Jawa"],["ka","Georgian","ქართული"],["kg","Kongo","Kikongo"],["ki","Kikuyu","Gĩkũyũ"],["kj","Kwanyama","Kuanyama"],["kk","Kazakh","қазақ тілі"],["kl","Kalaallisut","kalaallisut"],["km","Khmer","ខេមរភាសា"],["kn","Kannada","ಕನ್ನಡ"],["ko","Korean","한국어"],["kr","Kanuri","Kanuri"],["ks","Kashmiri","कश्मीरी"],["ku","Kurmanji (Kurdish)","Kurmancî"],["kv","Komi","коми кыв"],["kw","Cornish","Kernewek"],["ky","Kyrgyz","Кыргызча"],["la","Latin","latine"],["lb","Luxembourgish","Lëtzebuergesch"],["lg","Ganda","Luganda"],["li","Limburgish","Limburgs"],["ln","Lingala","Lingála"],["lo","Lao","ລາວ"],["lt","Lithuanian","lietuvių kalba"],["lu","Luba-Katanga","Tshiluba"],["lv","Latvian","latviešu valoda"],["mg","Malagasy","fiteny malagasy"],["mh","Marshallese","Kajin M̧ajeļ"],["mi","Māori","te reo Māori"],["mk","Macedonian","македонски јазик"],["ml","Malayalam","മലയാളം"],["mn","Mongolian","Монгол хэл"],["mr","Marathi","मराठी"],["ms","Malay","Bahasa Melayu"],["mt","Maltese","Malti"],["my","Burmese","ဗမာစာ"],["na","Nauru","Ekakairũ Naoero"],["nb","Norwegian Bokmål","Norsk bokmål"],["nd","Northern Ndebele","isiNdebele"],["ne","Nepali","नेपाली"],["ng","Ndonga","Owambo"],["nl","Dutch","Nederlands"],["nn","Norwegian Nynorsk","Norsk Nynorsk"],["no","Norwegian","Norsk"],["nr","Southern Ndebele","isiNdebele"],["nv","Navajo","Diné bizaad"],["ny","Chichewa","chiCheŵa"],["oc","Occitan","occitan"],["oj","Ojibwe","ᐊᓂᔑᓈᐯᒧᐎᓐ"],["om","Oromo","Afaan Oromoo"],["or","Oriya","ଓଡ଼ିଆ"],["os","Ossetian","ирон æвзаг"],["pa","Panjabi","ਪੰਜਾਬੀ"],["pi","Pāli","पाऴि"],["pl","Polish","Polski"],["ps","Pashto","پښتو"],["pt","Portuguese","Português"],["qu","Quechua","Runa Simi"],["rm","Romansh","rumantsch grischun"],["rn","Kirundi","Ikirundi"],["ro","Romanian","Română"],["ru","Russian","Русский"],["rw","Kinyarwanda","Ikinyarwanda"],["sa","Sanskrit","संस्कृतम्"],["sc","Sardinian","sardu"],["sd","Sindhi","सिन्धी"],["se","Northern Sami","Davvisámegiella"],["sg","Sango","yângâ tî sängö"],["si","Sinhala","සිංහල"],["sk","Slovak","slovenčina"],["sl","Slovenian","slovenščina"],["sn","Shona","chiShona"],["so","Somali","Soomaaliga"],["sq","Albanian","Shqip"],["sr","Serbian","српски језик"],["ss","Swati","SiSwati"],["st","Southern Sotho","Sesotho"],["su","Sundanese","Basa Sunda"],["sv","Swedish","Svenska"],["sw","Swahili","Kiswahili"],["ta","Tamil","தமிழ்"],["te","Telugu","తెలుగు"],["tg","Tajik","тоҷикӣ"],["th","Thai","ไทย"],["ti","Tigrinya","ትግርኛ"],["tk","Turkmen","Türkmen"],["tl","Tagalog","Wikang Tagalog"],["tn","Tswana","Setswana"],["to","Tonga","faka Tonga"],["tr","Turkish","Türkçe"],["ts","Tsonga","Xitsonga"],["tt","Tatar","татар теле"],["tw","Twi","Twi"],["ty","Tahitian","Reo Tahiti"],["ug","Uyghur","ئۇيغۇرچە‎"],["uk","Ukrainian","Українська"],["ur","Urdu","اردو"],["uz","Uzbek","Ўзбек"],["ve","Venda","Tshivenḓa"],["vi","Vietnamese","Tiếng Việt"],["vo","Volapük","Volapük"],["wa","Walloon","walon"],["wo","Wolof","Wollof"],["xh","Xhosa","isiXhosa"],["yi","Yiddish","ייִדיש"],["yo","Yoruba","Yorùbá"],["za","Zhuang","Saɯ cueŋƅ"],["zh","Chinese","中文"],["zu","Zulu","isiZulu"],["zh-CN","Chinese (China)","简体中文"],["zh-HK","Chinese (Hong Kong)","繁體中文(香港)"],["zh-TW","Chinese (Taiwan)","繁體中文(臺灣)"],["zh-YUE","Cantonese","廣東話"],["ast","Asturian","Asturianu"],["chr","Cherokee","ᏣᎳᎩ ᎦᏬᏂᎯᏍᏗ"],["ckb","Sorani (Kurdish)","سۆرانی"],["cnr","Montenegrin","crnogorski"],["jbo","Lojban","la .lojban."],["kab","Kabyle","Taqbaylit"],["ldn","Láadan","Láadan"],["lfn","Lingua Franca Nova","lingua franca nova"],["sco","Scots","Scots"],["sma","Southern Sami","Åarjelsaemien Gïele"],["smj","Lule Sami","Julevsámegiella"],["szl","Silesian","ślůnsko godka"],["tok","Toki Pona","toki pona"],["xal","Kalmyk","Хальмг келн"],["zba","Balaibalan","باليبلن"],["zgh","Standard Moroccan Tamazight","ⵜⴰⵎⴰⵣⵉⵖⵜ"]],qn="(((?:[^A-Za-z0-9@@$##\\uFFFE\\uFEFF\\uFFFF]|[\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069]|^))((https?:\\/\\/)((?:(?:(?:[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/](?:[_-]|[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/])*)?[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/]\\.)*(?:(?:[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/](?:-|[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/])*)?[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/]\\.)(?:(?:(?:삼성|닷컴|닷넷|香格里拉|餐厅|食品|飞利浦|電訊盈科|集团|通販|购物|谷歌|诺基亚|联通|网络|网站|网店|网址|组织机构|移动|珠宝|点看|游戏|淡马锡|机构|書籍|时尚|新闻|政府|政务|招聘|手表|手机|我爱你|慈善|微博|广东|工行|家電|娱乐|天主教|大拿|大众汽车|在线|嘉里大酒店|嘉里|商标|商店|商城|公益|公司|八卦|健康|信息|佛山|企业|中文网|中信|世界|ポイント|ファッション|セール|ストア|コム|グーグル|クラウド|みんな|คอม|संगठन|नेट|कॉम|همراه|موقع|موبايلي|كوم|كاثوليك|عرب|شبكة|بيتك|بازار|العليان|ارامكو|اتصالات|ابوظبي|קום|сайт|рус|орг|онлайн|москва|ком|католик|дети|zuerich|zone|zippo|zip|zero|zara|zappos|yun|youtube|you|yokohama|yoga|yodobashi|yandex|yamaxun|yahoo|yachts|xyz|xxx|xperia|xin|xihuan|xfinity|xerox|xbox|wtf|wtc|wow|world|works|work|woodside|wolterskluwer|wme|winners|wine|windows|win|williamhill|wiki|wien|whoswho|weir|weibo|wedding|wed|website|weber|webcam|weatherchannel|weather|watches|watch|warman|wanggou|wang|walter|walmart|wales|vuelos|voyage|voto|voting|vote|volvo|volkswagen|vodka|vlaanderen|vivo|viva|vistaprint|vista|vision|visa|virgin|vip|vin|villas|viking|vig|video|viajes|vet|versicherung|vermögensberatung|vermögensberater|verisign|ventures|vegas|vanguard|vana|vacations|ups|uol|uno|university|unicom|uconnect|ubs|ubank|tvs|tushu|tunes|tui|tube|trv|trust|travelersinsurance|travelers|travelchannel|travel|training|trading|trade|toys|toyota|town|tours|total|toshiba|toray|top|tools|tokyo|today|tmall|tkmaxx|tjx|tjmaxx|tirol|tires|tips|tiffany|tienda|tickets|tiaa|theatre|theater|thd|teva|tennis|temasek|telefonica|telecity|tel|technology|tech|team|tdk|tci|taxi|tax|tattoo|tatar|tatamotors|target|taobao|talk|taipei|tab|systems|symantec|sydney|swiss|swiftcover|swatch|suzuki|surgery|surf|support|supply|supplies|sucks|style|study|studio|stream|store|storage|stockholm|stcgroup|stc|statoil|statefarm|statebank|starhub|star|staples|stada|srt|srl|spreadbetting|spot|sport|spiegel|space|soy|sony|song|solutions|solar|sohu|software|softbank|social|soccer|sncf|smile|smart|sling|skype|sky|skin|ski|site|singles|sina|silk|shriram|showtime|show|shouji|shopping|shop|shoes|shiksha|shia|shell|shaw|sharp|shangrila|sfr|sexy|sex|sew|seven|ses|services|sener|select|seek|security|secure|seat|search|scot|scor|scjohnson|science|schwarz|schule|school|scholarships|schmidt|schaeffler|scb|sca|sbs|sbi|saxo|save|sas|sarl|sapo|sap|sanofi|sandvikcoromant|sandvik|samsung|samsclub|salon|sale|sakura|safety|safe|saarland|ryukyu|rwe|run|ruhr|rugby|rsvp|room|rogers|rodeo|rocks|rocher|rmit|rip|rio|ril|rightathome|ricoh|richardli|rich|rexroth|reviews|review|restaurant|rest|republican|report|repair|rentals|rent|ren|reliance|reit|reisen|reise|rehab|redumbrella|redstone|red|recipes|realty|realtor|realestate|read|raid|radio|racing|qvc|quest|quebec|qpon|pwc|pub|prudential|pru|protection|property|properties|promo|progressive|prof|productions|prod|pro|prime|press|praxi|pramerica|post|porn|politie|poker|pohl|pnc|plus|plumbing|playstation|play|place|pizza|pioneer|pink|ping|pin|pid|pictures|pictet|pics|piaget|physio|photos|photography|photo|phone|philips|phd|pharmacy|pfizer|pet|pccw|pay|passagens|party|parts|partners|pars|paris|panerai|panasonic|pamperedchef|page|ovh|ott|otsuka|osaka|origins|orientexpress|organic|org|orange|oracle|open|ooo|onyourside|online|onl|ong|one|omega|ollo|oldnavy|olayangroup|olayan|okinawa|office|off|observer|obi|nyc|ntt|nrw|nra|nowtv|nowruz|now|norton|northwesternmutual|nokia|nissay|nissan|ninja|nikon|nike|nico|nhk|ngo|nfl|nexus|nextdirect|next|news|newholland|new|neustar|network|netflix|netbank|net|nec|nba|navy|natura|nationwide|name|nagoya|nadex|nab|mutuelle|mutual|museum|mtr|mtpc|mtn|msd|movistar|movie|mov|motorcycles|moto|moscow|mortgage|mormon|mopar|montblanc|monster|money|monash|mom|moi|moe|moda|mobily|mobile|mobi|mma|mls|mlb|mitsubishi|mit|mint|mini|mil|microsoft|miami|metlife|merckmsd|meo|menu|men|memorial|meme|melbourne|meet|media|med|mckinsey|mcdonalds|mcd|mba|mattel|maserati|marshalls|marriott|markets|marketing|market|map|mango|management|man|makeup|maison|maif|madrid|macys|luxury|luxe|lupin|lundbeck|ltda|ltd|lplfinancial|lpl|love|lotto|lotte|london|lol|loft|locus|locker|loans|loan|llp|llc|lixil|living|live|lipsy|link|linde|lincoln|limo|limited|lilly|like|lighting|lifestyle|lifeinsurance|life|lidl|liaison|lgbt|lexus|lego|legal|lefrak|leclerc|lease|lds|lawyer|law|latrobe|latino|lat|lasalle|lanxess|landrover|land|lancome|lancia|lancaster|lamer|lamborghini|ladbrokes|lacaixa|kyoto|kuokgroup|kred|krd|kpn|kpmg|kosher|komatsu|koeln|kiwi|kitchen|kindle|kinder|kim|kia|kfh|kerryproperties|kerrylogistics|kerryhotels|kddi|kaufen|juniper|juegos|jprs|jpmorgan|joy|jot|joburg|jobs|jnj|jmp|jll|jlc|jio|jewelry|jetzt|jeep|jcp|jcb|java|jaguar|iwc|iveco|itv|itau|istanbul|ist|ismaili|iselect|irish|ipiranga|investments|intuit|international|intel|int|insure|insurance|institute|ink|ing|info|infiniti|industries|inc|immobilien|immo|imdb|imamat|ikano|iinet|ifm|ieee|icu|ice|icbc|ibm|hyundai|hyatt|hughes|htc|hsbc|how|house|hotmail|hotels|hoteles|hot|hosting|host|hospital|horse|honeywell|honda|homesense|homes|homegoods|homedepot|holiday|holdings|hockey|hkt|hiv|hitachi|hisamitsu|hiphop|hgtv|hermes|here|helsinki|help|healthcare|health|hdfcbank|hdfc|hbo|haus|hangout|hamburg|hair|guru|guitars|guide|guge|gucci|guardian|group|grocery|gripe|green|gratis|graphics|grainger|gov|got|gop|google|goog|goodyear|goodhands|goo|golf|goldpoint|gold|godaddy|gmx|gmo|gmbh|gmail|globo|global|gle|glass|glade|giving|gives|gifts|gift|ggee|george|genting|gent|gea|gdn|gbiz|gay|garden|gap|games|game|gallup|gallo|gallery|gal|fyi|futbol|furniture|fund|fun|fujixerox|fujitsu|ftr|frontier|frontdoor|frogans|frl|fresenius|free|fox|foundation|forum|forsale|forex|ford|football|foodnetwork|food|foo|fly|flsmidth|flowers|florist|flir|flights|flickr|fitness|fit|fishing|fish|firmdale|firestone|fire|financial|finance|final|film|fido|fidelity|fiat|ferrero|ferrari|feedback|fedex|fast|fashion|farmers|farm|fans|fan|family|faith|fairwinds|fail|fage|extraspace|express|exposed|expert|exchange|everbank|events|eus|eurovision|etisalat|esurance|estate|esq|erni|ericsson|equipment|epson|epost|enterprises|engineering|engineer|energy|emerck|email|education|edu|edeka|eco|eat|earth|dvr|dvag|durban|dupont|duns|dunlop|duck|dubai|dtv|drive|download|dot|doosan|domains|doha|dog|dodge|doctor|docs|dnp|diy|dish|discover|discount|directory|direct|digital|diet|diamonds|dhl|dev|design|desi|dentist|dental|democrat|delta|deloitte|dell|delivery|degree|deals|dealer|deal|dds|dclk|day|datsun|dating|date|data|dance|dad|dabur|cyou|cymru|cuisinella|csc|cruises|cruise|crs|crown|cricket|creditunion|creditcard|credit|cpa|courses|coupons|coupon|country|corsica|coop|cool|cookingchannel|cooking|contractors|contact|consulting|construction|condos|comsec|computer|compare|company|community|commbank|comcast|com|cologne|college|coffee|codes|coach|clubmed|club|cloud|clothing|clinique|clinic|click|cleaning|claims|cityeats|city|citic|citi|citadel|cisco|circle|cipriani|church|chrysler|chrome|christmas|chloe|chintai|cheap|chat|chase|charity|channel|chanel|cfd|cfa|cern|ceo|center|ceb|cbs|cbre|cbn|cba|catholic|catering|cat|casino|cash|caseih|case|casa|cartier|cars|careers|career|care|cards|caravan|car|capitalone|capital|capetown|canon|cancerresearch|camp|camera|cam|calvinklein|call|cal|cafe|cab|bzh|buzz|buy|business|builders|build|bugatti|budapest|brussels|brother|broker|broadway|bridgestone|bradesco|box|boutique|bot|boston|bostik|bosch|boots|booking|book|boo|bond|bom|bofa|boehringer|boats|bnpparibas|bnl|bmw|bms|blue|bloomberg|blog|blockbuster|blanco|blackfriday|black|biz|bio|bingo|bing|bike|bid|bible|bharti|bet|bestbuy|best|berlin|bentley|beer|beauty|beats|bcn|bcg|bbva|bbt|bbc|bayern|bauhaus|basketball|baseball|bargains|barefoot|barclays|barclaycard|barcelona|bar|bank|band|bananarepublic|banamex|baidu|baby|azure|axa|aws|avianca|autos|auto|author|auspost|audio|audible|audi|auction|attorney|athleta|associates|asia|asda|arte|art|arpa|army|archi|aramco|arab|aquarelle|apple|app|apartments|aol|anz|anquan|android|analytics|amsterdam|amica|amfam|amex|americanfamily|americanexpress|alstom|alsace|ally|allstate|allfinanz|alipay|alibaba|alfaromeo|akdn|airtel|airforce|airbus|aigo|aig|agency|agakhan|africa|afl|afamilycompany|aetna|aero|aeg|adult|ads|adac|actor|active|aco|accountants|accountant|accenture|academy|abudhabi|abogado|able|abc|abbvie|abbott|abb|abarth|aarp|aaa|onion)(?=[^0-9a-zA-Z@+-]|$))|(?:(?:한국|香港|澳門|新加坡|台灣|台湾|中國|中国|გე|ລາວ|ไทย|ලංකා|ഭാരതം|ಭಾರತ|భారత్|சிங்கப்பூர்|இலங்கை|இந்தியா|ଭାରତ|ભારત|ਭਾਰਤ|ভাৰত|ভারত|বাংলা|भारोत|भारतम्|भारत|ڀارت|پاکستان|موريتانيا|مليسيا|مصر|قطر|فلسطين|عمان|عراق|سورية|سودان|تونس|بھارت|بارت|ایران|امارات|المغرب|السعودية|الجزائر|البحرين|الاردن|հայ|қаз|укр|срб|рф|мон|мкд|ею|бел|бг|ευ|ελ|zw|zm|za|yt|ye|ws|wf|vu|vn|vi|vg|ve|vc|va|uz|uy|us|um|uk|ug|ua|tz|tw|tv|tt|tr|tp|to|tn|tm|tl|tk|tj|th|tg|tf|td|tc|sz|sy|sx|sv|su|st|ss|sr|so|sn|sm|sl|sk|sj|si|sh|sg|se|sd|sc|sb|sa|rw|ru|rs|ro|re|qa|py|pw|pt|ps|pr|pn|pm|pl|pk|ph|pg|pf|pe|pa|om|nz|nu|nr|np|no|nl|ni|ng|nf|ne|nc|na|mz|my|mx|mw|mv|mu|mt|ms|mr|mq|mp|mo|mn|mm|ml|mk|mh|mg|mf|me|md|mc|ma|ly|lv|lu|lt|ls|lr|lk|li|lc|lb|la|kz|ky|kw|kr|kp|kn|km|ki|kh|kg|ke|jp|jo|jm|je|it|is|ir|iq|io|in|im|il|ie|id|hu|ht|hr|hn|hm|hk|gy|gw|gu|gt|gs|gr|gq|gp|gn|gm|gl|gi|gh|gg|gf|ge|gd|gb|ga|fr|fo|fm|fk|fj|fi|eu|et|es|er|eh|eg|ee|ec|dz|do|dm|dk|dj|de|cz|cy|cx|cw|cv|cu|cr|co|cn|cm|cl|ck|ci|ch|cg|cf|cd|cc|ca|bz|by|bw|bv|bt|bs|br|bq|bo|bn|bm|bl|bj|bi|bh|bg|bf|be|bd|bb|ba|az|ax|aw|au|at|as|ar|aq|ao|an|am|al|ai|ag|af|ae|ad|ac)(?=[^0-9a-zA-Z@+-]|$))|(?:xn--[\\-0-9a-z]+))))(?::([0-9]+))?(\\/(?:(?:[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*(?:\\((?:[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]+|(?:[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*\\([a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]+\\)[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*))\\)[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*)*[\\+\\-a-z\\u0400-\\u04FF0-9=_#\\/\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]|(?:\\((?:[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]+|(?:[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*\\([a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]+\\)[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*))\\)))|(?:@[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]+\\/))*)?(\\?[a-z0-9!?\\*'@\\(\\);:&=\\+\\$\\/%#\\[\\]\\-_\\.,~|]*[a-z0-9\\-_&=#\\/])?))",Kn="gi",_t={source:qn,flags:Kn};var Vn={BASE_URL:"./",DEV:!1,MODE:"production",PHANPY_CLIENT_NAME:"Phanpy",PHANPY_LINGVA_INSTANCES:"lingva.phanpy.social lingva.lunar.icu lingva.garudalinux.org translate.plausibility.cloud",PHANPY_PRIVACY_POLICY_URL:"https://github.com/cheeaun/phanpy/blob/main/PRIVACY.MD",PHANPY_WEBSITE:"https://phanpy.social",PROD:!0,SSR:!1,VITE_APP_ENV:"production"};const{PHANPY_IMG_ALT_API_URL:ut,PHANPY_GIPHY_API_KEY:Gn}=Vn,Yn=yt.reduce((s,e)=>{const[n,a,r]=e;return s[n]={common:a,native:r},s},{}),Kt={"5 minutes":5*60,"30 minutes":30*60,"1 hour":60*60,"6 hours":6*60*60,"12 hours":12*60*60,"1 day":24*60*60,"3 days":3*24*60*60,"7 days":7*24*60*60},Zn=Object.values(Kt),Rt=24*60*60,Dt=s=>{if(!s)return Rt;const e=(new Date(s).getTime()-Date.now())/1e3;return Zn.find(n=>n>=e)||Rt},ye=document.createElement("ul");ye.role="listbox";ye.className="text-expander-menu";const Jn=16,Xn=new IntersectionObserver(s=>{s.forEach(e=>{if(e.isIntersecting){const{left:n,width:a}=e.boundingClientRect,{innerWidth:r}=window;if(n+a>r){const m=on()?"right":"left";ye.style[m]=r-a-Jn+"px"}}})});Xn.observe(ye);const we=rn([new Intl.DateTimeFormat().resolvedOptions().locale,...navigator.languages],yt.map(s=>s[0]),"en"),Vt=new RegExp(_t.source,_t.flags),Qn=/(^|[^\/\w])@(([a-z0-9_]+)@[a-z0-9\.\-]+[a-z0-9]+)/gi,ei="$2xxxxxxxxxxxxxxxxxxxxxxx";function ti(s){return s.replace(Vt,ei).replace(Qn,"$1@$3")}const ni=/[a-z0-9_]+([a-z0-9_.-]+[a-z0-9_]+)?/i,ii=new RegExp(`(^|[^=\\/\\w])(@${ni.source}(?:@[\\p{L}\\w.-]+[\\w]+)?)`,"uig"),si=new RegExp("(^|[^=\\/\\w])(#[a-z0-9_]+([a-z0-9_.]+[a-z0-9_]+)?)(?![\\/\\w])","ig"),ai="[a-zA-Z0-9_]{2,}",oi=new RegExp(`(^|[^=\\/\\w])(:${ai}:)(?=[^A-Za-z0-9_:]|$)`,"g"),ri=new Intl.Segmenter;function dt(s){return s.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function li(s,{maxCharacters:e=1/0}){const{composerCharacterCount:n}=le;if(n>e){let a="",r="";const m=ri.segment(s);for(const{segment:u,index:v}of m)v"),dt(a)+r}return dt(s).replace(Vt,'$2$3').replace(ii,'$1$2').replace(si,'$1$2').replace(oi,'$1$2')}const ci=new Intl.RelativeTimeFormat,vt=100;function Ci({onClose:s,replyToStatus:e,editStatus:n,draftStatus:a,standalone:r,hasOpener:m}){var Ct;const{masto:u,instance:v}=bt(),[g,R]=H("default"),C=W((a==null?void 0:a.uid)||ln()),k=xn(),z=k.info,Z=Ut(),{statuses:{maxCharacters:D,maxMediaAttachments:I,charactersReservedPerUrl:se}={},mediaAttachments:{supportedMimeTypes:J=[],imageSizeLimit:c,imageMatrixLimit:h,videoSizeLimit:p,videoMatrixLimit:f,videoFrameRateLimit:E}={},polls:{maxOptions:y,maxCharactersPerOption:T,maxExpiration:q,minExpiration:ue}={}}=Z||{},S=W(),X=W(),[V,U]=H("public"),[j,te]=H(!1),[O,ie]=H(Le.session.get("currentLanguage")||we),ae=W(O),[M,A]=H([]),[$,L]=H(null),N=Le.account.get("preferences")||{},Q=()=>{S.current&&S.current.dispatchEvent(new Event("input"))},oe=()=>{setTimeout(()=>{var o,l,b;S.current&&((l=(o=a==null?void 0:a.status)==null?void 0:o.startsWith)!=null&&l.call(o,` -`)&&(S.current.selectionStart=0,S.current.selectionEnd=0),(b=S.current)==null||b.focus())},300)};ee(()=>{if(e){const{spoilerText:o,visibility:l,language:b,sensitive:d}=e;o&&X.current&&(X.current.value=o);const x=[...new Set([e.account.acct,...e.mentions.map(w=>w.acct)])].filter(w=>w!==z.acct);x.length>0&&(S.current.value=`${x.map(w=>`@${w}`).join(" ")} `,Q()),oe(),U(l==="public"&&N["posting:default:visibility"]?N["posting:default:visibility"]:l),ie(b||N.postingDefaultLanguage||we),te(d&&!!o)}else if(n){const{visibility:o,language:l,sensitive:b,poll:d,mediaAttachments:_}=n,x=!!(d!=null&&d.options)&&{...d,options:d.options.map(w=>(w==null?void 0:w.title)||w),expiresIn:(d==null?void 0:d.expiresIn)||Dt(d.expiresAt)};R("loading"),(async()=>{try{const w=await u.v1.statuses.$select(n.id).source.fetch(),{text:F,spoilerText:P}=w;S.current.value=F,S.current.dataset.source=F,Q(),oe(),X.current.value=P,U(o),ie(l||presf.postingDefaultLanguage||we),te(b),x&&L(x),A(_),R("default")}catch(w){alert((w==null?void 0:w.reason)||w),R("error")}})()}else oe(),N["posting:default:visibility"]&&U(N["posting:default:visibility"]),N["posting:default:language"]&&ie(N["posting:default:language"]),N["posting:default:sensitive"]&&te(N["posting:default:sensitive"]);if(a){const{status:o,spoilerText:l,visibility:b,language:d,sensitive:_,poll:x,mediaAttachments:w}=a,F=!!(x!=null&&x.options)&&{...x,options:x.options.map(P=>(P==null?void 0:P.title)||P),expiresIn:(x==null?void 0:x.expiresIn)||Dt(x.expiresAt)};S.current.value=o,Q(),oe(),l&&(X.current.value=l),b&&U(b),ie(d||N.postingDefaultLanguage||we),_!==null&&te(_),F&&L(F),w&&A(w)}},[a,n,e]);const he=W(),ve="You have unsaved changes. Discard this post?",xe=()=>{const{value:o,dataset:l}=S.current;if(g==="loading")return!1;const b=(o||"").trim().replace(new RegExp("^\\p{White_Space}+|\\p{White_Space}+$","gu"),""),d=M.length>0;if(!b&&!d||M.length>0&&M.every(P=>P.id))return!0;const x=(e==null?void 0:e.account.id)===z.id,w=e&&o.trim()===`@${e.account.acct}`;return!!(!x&&w||o===(l==null?void 0:l.source))},Oe=()=>xe()?!0:confirm(ve);ee(()=>{const o=l=>{xe()||(l.preventDefault(),l.returnValue=ve)};return window.addEventListener("beforeunload",o,{capture:!0}),()=>window.removeEventListener("beforeunload",o,{capture:!0})},[]);const Zt=()=>{const{value:o}=S.current,{value:l}=X.current;return Bt(ti(o))+Bt(l)},tt=()=>{const o=Zt();le.composerCharacterCount=o};ee(tt,[]);const wt=window.CloseWatcher,nt=W(!1);_e("esc",()=>{nt.current=!0},{enabled:!wt,enableOnFormTags:!0}),_e("esc",()=>{!r&&nt.current&&Oe()&&s(),nt.current=!1},{enabled:!wt,enableOnFormTags:!0,keyup:!0,ignoreEventWhen:o=>{const l=document.querySelectorAll("#modal-container > *"),b=!!l,d=l.length===1&&l[0].querySelector("#compose-container");return b&&!d}}),cn(()=>{!r&&Oe()&&s()},[r,Oe,s]);const kt=W({}),Et=()=>`${wn()}#${C.current}`,it=()=>{if(n||le.composerState.minimized)return;const o=Et(),l={key:o,replyTo:e?{id:e.id,account:{id:e.account.id,username:e.account.username,acct:e.account.acct}}:null,draftStatus:{uid:C.current,status:S.current.value,spoilerText:X.current.value,visibility:V,language:O,sensitive:j,poll:$,mediaAttachments:M}};!kn(l,kt.current)&&!xe()&&(zt.drafts.set(o,{...l,state:"unsaved",updatedAt:Date.now()}).then(()=>{}).catch(b=>{}),kt.current=structuredClone(l))};un(it,5e3),ee(()=>(it(),()=>{zt.drafts.del(Et())}),[]),ee(()=>{const o=b=>{const{items:d}=b.clipboardData||b.dataTransfer,_=[];for(let x=0;x0&&M.length>=I){alert(`You can only attach up to ${I} files.`);return}if(_.length>0){b.preventDefault(),b.stopPropagation();const x=I-M.length,w=_.slice(0,x);if(w.length<=0){alert(`You can only attach up to ${I} files.`);return}const F=w.map(P=>({file:P,type:P.type,size:P.size,url:URL.createObjectURL(P),id:null,description:null}));A([...M,...F])}};window.addEventListener("paste",o);const l=b=>{b.dataTransfer.items.length>0&&(b.preventDefault(),b.stopPropagation())};return window.addEventListener("dragover",l),window.addEventListener("drop",o),()=>{window.removeEventListener("paste",o),window.removeEventListener("dragover",l),window.removeEventListener("drop",o)}},[M]);const[He,st]=H(!1),[Ne,Ue]=H(!1),[Jt,at]=H(!1),[me,Xt]=H(null),[Qt,en]=Re(()=>{const o=[],l=[],{contentTranslationHideLanguages:b=[]}=le.settings;return yt.forEach(d=>{const[_]=d;_===O||_===ae.current||_===we||b.includes(_)||me!=null&&me.length&&me.includes(_)?o.push(d):l.push(d)}),o.sort(([d,_],[x,w])=>d===O?-1:x===O?1:_.localeCompare(w)),l.sort(([d,_],[x,w])=>_.localeCompare(w)),[o,l]},[O,me]),Ft=Re(()=>!!(e!=null&&e.createdAt)&&Math.floor((Date.now()-new Date(e.createdAt))/(1e3*60*60*24*30)),[e]),tn=()=>{it(),le.composerState.minimized=!0};return t("div",{id:"compose-container-outer",children:[t("div",{id:"compose-container",class:r?"standalone":"",children:[t("div",{class:"compose-top",children:[(z==null?void 0:z.avatarStatic)&&t(Ht,{account:z,accountInstance:k.instanceURL,hideDisplayName:!0,useAvatarStatic:!0}),r?m&&t("button",{type:"button",class:"light pop-button",disabled:g==="loading",onClick:()=>{var o;if(!window.opener){alert("Looks like you closed the parent window.");return}if(window.opener.__STATES__.showCompose){if((o=window.opener.__STATES__.composerState)!=null&&o.publishing){alert("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.");return}if(!confirm("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?"))return}s({fn:()=>{const l={editStatus:n,replyToStatus:e,draftStatus:{uid:C.current,status:S.current.value,spoilerText:X.current.value,visibility:V,language:O,sensitive:j,poll:$,mediaAttachments:M}};window.opener.__COMPOSE__=l,window.opener.__STATES__.showCompose?(window.opener.__STATES__.showCompose=!1,setTimeout(()=>{window.opener.__STATES__.showCompose=!0},10)):window.opener.__STATES__.showCompose=!0,window.opener.__STATES__.composerState.minimized&&(window.opener.__STATES__.composerState.minimized=!1)}})},children:t(K,{icon:"popin",alt:"Pop in"})}):t("span",{class:"compose-controls",children:[t("button",{type:"button",class:"plain4 pop-button",disabled:g==="loading",onClick:()=>{dn({editStatus:n,replyToStatus:e,draftStatus:{uid:C.current,status:S.current.value,spoilerText:X.current.value,visibility:V,language:O,sensitive:j,poll:$,mediaAttachments:M}})&&s()},children:t(K,{icon:"popout",alt:"Pop out"})}),t("button",{type:"button",class:"plain4 min-button",onClick:tn,children:t(K,{icon:"minimize",alt:"Minimize"})})," ",t("button",{type:"button",class:"light close-button",disabled:g==="loading",onClick:()=>{Oe()&&s()},children:t(K,{icon:"x"})})]})]}),!!e&&t("div",{class:"status-preview",children:[t(St,{status:e,size:"s",previewMode:!0}),t("div",{class:"status-preview-legend reply-to",children:["Replying to @",e.account.acct||e.account.username,"’s post",Ft>=3&&t(Ce,{children:[" ","(",t("strong",{children:ci.format(-Ft,"month")}),")"]})]})]}),!!n&&t("div",{class:"status-preview",children:[t(St,{status:n,size:"s",previewMode:!0}),t("div",{class:"status-preview-legend",children:"Editing source post"})]}),t("form",{ref:he,class:`form-visibility-${V}`,style:{pointerEvents:g==="loading"?"none":"auto",opacity:g==="loading"?.5:1},onKeyDown:o=>{o.key==="Enter"&&(o.ctrlKey||o.metaKey)&&he.current.dispatchEvent(new Event("submit",{cancelable:!0}))},onSubmit:o=>{o.preventDefault();const l=new FormData(o.target),b=Object.fromEntries(l.entries());let{status:d,visibility:_,sensitive:x,spoilerText:w}=b;if(x=x==="on",$){if($.options.length<2){alert("Poll must have at least 2 options");return}if($.options.some(F=>F==="")){alert("Some poll choices are empty");return}}M.length>0&&M.some(P=>{var ne,$e;return!(($e=(ne=P.description)==null?void 0:ne.trim)!=null&&$e.call(ne))})&&!confirm("Some media have no descriptions. Continue?")||(w=x&&w||void 0,d=d===""?void 0:d,le.composerState.publishing=!0,R("loading"),(async()=>{try{if(M.length>0){const ne=M.map(ge=>{const{file:We,description:nn,id:sn}=ge;if(sn)return ge;{const an=Ot({file:We,description:nn});return u.v2.media.create(an).then(ot=>(ot.id&&(ge.id=ot.id),ot))}}),$e=await Promise.allSettled(ne);if($e.some(ge=>{var We;return ge.status==="rejected"||!((We=ge.value)!=null&&We.id)})){le.composerState.publishing=!1,le.composerState.publishingError=!0,R("error"),$e.forEach(ge=>{ge.status==="rejected"&&alert(ge.reason||`Attachment #${i} failed`)});return}}let F={status:d,spoiler_text:w,language:O,sensitive:x,poll:$,media_ids:M.map(ne=>ne.id)};n&&Nt("@mastodon/edit-media-attributes")?F.media_attributes=M.map(ne=>({id:ne.id,description:ne.description})):n||(F.visibility=_,F.in_reply_to_id=(e==null?void 0:e.id)||void 0),F=Ot(F);let P;if(n)P=await u.v1.statuses.$select(n.id).update(F),En(P,v,{skipThreading:!0});else try{P=await u.v1.statuses.create(F,{requestInit:{headers:{"Idempotency-Key":C.current}}})}catch{P=await u.v1.statuses.create(F)}le.composerState.minimized=!1,le.composerState.publishing=!1,R("default"),s({type:n?"edit":e?"reply":"post",newStatus:P,instance:v})}catch(F){le.composerState.publishing=!1,le.composerState.publishingError=!0,alert((F==null?void 0:F.reason)||F),R("error")}})())},children:[t("div",{class:"toolbar stretch",children:[t("input",{ref:X,type:"text",name:"spoilerText",placeholder:"Content warning",disabled:g==="loading",class:"spoiler-text-field",lang:O,spellCheck:"true",dir:"auto",style:{opacity:j?1:0,pointerEvents:j?"auto":"none"},onInput:()=>{tt()}}),t("label",{class:`toolbar-button ${j?"highlight":""}`,title:"Content warning or sensitive media",children:[t("input",{name:"sensitive",type:"checkbox",checked:j,disabled:g==="loading",onChange:o=>{var b,d;const l=o.target.checked;te(l),l?(b=X.current)==null||b.focus():(d=S.current)==null||d.focus()}}),t(K,{icon:`eye-${j?"close":"open"}`})]})," ",t("label",{class:`toolbar-button ${V!=="public"&&!j?"show-field":""} ${V!=="public"?"highlight":""}`,title:`Visibility: ${V}`,children:[t(K,{icon:hn[V],alt:V}),t("select",{name:"visibility",value:V,onChange:o=>{U(o.target.value)},disabled:g==="loading"||!!n,dir:"auto",children:[t("option",{value:"public",children:["Public ",t(K,{icon:"earth"})]}),t("option",{value:"unlisted",children:"Unlisted"}),t("option",{value:"private",children:"Followers only"}),t("option",{value:"direct",children:"Private mention"})]})]})," "]}),t(hi,{ref:S,placeholder:e?"Post your reply":n?"Edit your post":"What are you doing?",required:(M==null?void 0:M.length)===0,disabled:g==="loading",lang:O,onInput:()=>{tt()},maxCharacters:D,performSearch:o=>{const{type:l,q:b,limit:d}=o;return l==="accounts"?u.v1.accounts.search.list({q:b,limit:d,resolve:!1}):u.v2.search.fetch(o)},onTrigger:o=>{(o==null?void 0:o.name)==="custom-emojis"?Ue({defaultSearchTerm:(o==null?void 0:o.defaultSearchTerm)||null}):(o==null?void 0:o.name)==="mention"?st({defaultSearchTerm:(o==null?void 0:o.defaultSearchTerm)||null}):(o==null?void 0:o.name)==="auto-detect-language"&&(o!=null&&o.languages)&&Xt(o.languages)}}),(M==null?void 0:M.length)>0&&t("div",{class:"media-attachments",children:[M.map((o,l)=>{const{id:b,file:d}=o,_=(d==null?void 0:d.size)+(d==null?void 0:d.type)+(d==null?void 0:d.name);return t(mi,{attachment:o,disabled:g==="loading",lang:O,onDescriptionChange:x=>{A(w=>{const F=[...w];return F[l].description=x,F})},onRemove:()=>{A(x=>x.filter((w,F)=>F!==l))}},b||_||l)}),t("label",{class:"media-sensitive",children:[t("input",{name:"sensitive",type:"checkbox",checked:j,disabled:g==="loading",onChange:o=>{const l=o.target.checked;te(l)}})," ",t("span",{children:"Mark media as sensitive"})," ",t(K,{icon:`eye-${j?"close":"open"}`})]})]}),!!$&&t(gi,{lang:O,maxOptions:y,maxExpiration:q,minExpiration:ue,maxCharactersPerOption:T,poll:$,disabled:g==="loading",onInput:o=>{if(o){const l={...o};L(l)}else L(null)}}),t("div",{class:"toolbar wrap",style:{justifyContent:"flex-end"},children:[t("span",{children:[t("label",{class:"toolbar-button",children:[t("input",{type:"file",accept:J.join(","),multiple:M.length=I||!!$,onChange:o=>{const l=o.target.files;if(!l)return;const b=Array.from(l).map(d=>({file:d,type:d.type,size:d.size,url:URL.createObjectURL(d),id:null,description:null}));M.length+b.length>I?alert(`You can only attach up to ${I} files.`):A(d=>d.concat(b)),o.target.value=""}}),t(K,{icon:"attachment"})]}),y==null||y>1&&t(Ce,{children:t("button",{type:"button",class:"toolbar-button",disabled:g==="loading"||!!$||!!M.length,onClick:()=>{L({options:["",""],expiresIn:24*60*60,multiple:!1})},children:t(K,{icon:"poll",alt:"Add poll"})})}),t("button",{type:"button",class:"toolbar-button",disabled:g==="loading",onClick:()=>{Ue(!0)},children:t(K,{icon:"emoji2"})}),!!le.settings.composerGIFPicker&&t("button",{type:"button",class:"toolbar-button gif-picker-button",disabled:g==="loading"||M.length>=I||!!$,onClick:()=>{at(!0)},children:t("span",{children:"GIF"})})]}),t("div",{class:"spacer"}),g==="loading"?t(et,{abrupt:!0}):t(pi,{maxCharacters:D,hidden:g==="loading"}),t("label",{class:`toolbar-button ${O!==ae.current||me!=null&&me.length&&!me.includes(O)?"highlight":""}`,children:[t("span",{class:"icon-text",children:(Ct=Yn[O])==null?void 0:Ct.native}),t("select",{name:"language",value:O,onChange:o=>{const{value:l}=o.target;ie(l||we),Le.session.set("currentLanguage",l||we)},disabled:g==="loading",dir:"auto",children:[Qt.map(([o,l,b])=>t("option",{value:o,children:[l," (",b,")"]},o)),t("hr",{}),en.map(([o,l,b])=>t("option",{value:o,children:[l," (",b,")"]},o))]})]})," ",t("button",{type:"submit",class:"large",disabled:g==="loading",children:e?"Reply":n?"Update":"Post"})]})]})]}),He&&t(Ve,{onClick:o=>{o.target===o.currentTarget&&st(!1)},children:t(fi,{masto:u,instance:v,onClose:()=>{st(!1)},defaultSearchTerm:He==null?void 0:He.defaultSearchTerm,onSelect:o=>{const l=S.current;if(!l)return;const{selectionStart:b,selectionEnd:d}=l,_=l.value,x=_.slice(0,b),w=x?/[\s\t\n\r]$/.test(x)?"":" ":"",F=_.slice(d),P=/^[\s\t\n\r]/.test(F)?"":" ",ne=x+w+"@"+o+P+F;l.value=ne,l.selectionStart=l.selectionEnd=d+1+o.length+P.length,l.focus(),l.dispatchEvent(new Event("input"))}})}),Ne&&t(Ve,{onClick:o=>{o.target===o.currentTarget&&Ue(!1)},children:t(vi,{masto:u,instance:v,onClose:()=>{Ue(!1)},defaultSearchTerm:Ne==null?void 0:Ne.defaultSearchTerm,onSelect:o=>{const l=S.current;if(!l)return;const{selectionStart:b,selectionEnd:d}=l,_=l.value,x=_.slice(0,b),w=x?/[\s\t\n\r]$/.test(x)?"":" ":"",F=_.slice(d),P=/^[\s\t\n\r]/.test(F)?"":" ",ne=x+w+o+P+F;l.value=ne,l.selectionStart=l.selectionEnd=d+o.length+P.length,l.focus(),l.dispatchEvent(new Event("input"))}})}),Jt&&t(Ve,{onClick:o=>{o.target===o.currentTarget&&at(!1)},children:t(yi,{onClose:()=>at(!1),onSelect:({url:o,type:l,alt_text:b})=>{if(M.length>=I){alert(`You can only attach up to ${I} files.`);return}(async()=>{var _,x;let d;try{d=ke({text:"Downloading GIF…",duration:-1});const w=await fetch(o,{referrerPolicy:"no-referrer"}).then(ne=>ne.blob()),F=new File([w],l==="video/mp4"?"video.mp4":"image.gif",{type:l}),P=[...M,{file:F,type:l,size:F.size,id:null,description:b||""}];A(P),(_=d==null?void 0:d.hideToast)==null||_.call(d)}catch{(x=d==null?void 0:d.hideToast)==null||x.call(d),ke("Failed to download GIF")}})()}})})]})}function jt(s){if(!s)return;const{value:e,offsetHeight:n,scrollHeight:a,clientHeight:r}=s;if(nm.visibleInPicker),r=new pn(a,{keys:["shortcode"],findAllMatches:!0});return[a,r]}const Gt=Fn(ui,{matchesArg:(s,e)=>s.instance===e.instance,maxAge:30*60*1e3}),di=s=>{const e=zn(s);return e!=null&&e.length?e.slice(0,2).map(n=>n.lang):null},hi=Cn((s,e)=>{var J;const{masto:n,instance:a}=bt(),[r,m]=H(((J=e.current)==null?void 0:J.value)||""),{maxCharacters:u,performSearch:v=()=>{},onTrigger:g=()=>{},...R}=s,C=W();ee(()=>{Gt(a,n).then(c=>{const[h,p]=c;C.current=p}).catch(c=>{})},[]);const k=W(),z=W("");ee(()=>{let c,h,p;return k.current&&(c=f=>{var ue;const{key:E,provide:y,text:T}=f.detail;if(z.current=T,T===""){y(Promise.resolve({matched:!1}));return}if(E===":"){const S=(ue=C.current)==null?void 0:ue.search(T,{limit:5});let X="";S.forEach(({item:V})=>{const{shortcode:U,url:j}=V;X+=` -
  • - - ${be(U)} -
  • `}),X+=`
  • More…
  • `,ye.innerHTML=X,y(Promise.resolve({matched:S.length>0,fragment:ye}));return}const q={"@":"accounts","#":"hashtags"}[E];y(new Promise(S=>{v({type:q,q:T,limit:5}).then(V=>{if(T!==z.current)return;const U=V[q]||V;let j="";U.forEach(te=>{var Q;const{name:O,avatarStatic:ie,displayName:ae,username:M,acct:A,emojis:$,history:L}=te,N=mn(ae,$);if(A)j+=` -
  • - - - - - ${N||M} -
    @${be(A)} -
    -
  • - `;else{const oe=(Q=L==null?void 0:L.reduce)==null?void 0:Q.call(L,(he,ve)=>he+ +ve.uses,0);j+=` -
  • - #${be(O)} - ${oe?`${gn(oe)}`:""} -
  • - `}}),q==="accounts"&&(j+=`
  • More…
  • `),ye.innerHTML=j,S({matched:U.length>0,fragment:ye})})}))},k.current.addEventListener("text-expander-change",c),h=f=>{const{key:E,item:y}=f.detail,{value:T,more:q}=y.dataset;E===":"?(f.detail.value=T?`:${T}:`:"​",q&&(f.detail.continue=!0,setTimeout(()=>{g==null||g({name:"custom-emojis",defaultSearchTerm:q})},300))):E==="@"?(f.detail.value=T?`@${T} `:"​",q&&(f.detail.continue=!0,setTimeout(()=>{g==null||g({name:"mention",defaultSearchTerm:q})},300))):f.detail.value=`${E}${T}`},k.current.addEventListener("text-expander-value",h),p=f=>{const{input:E}=f.detail;if(m(E.value),e.current){const y=new Event("input",{bubbles:!0});e.current.dispatchEvent(y)}},k.current.addEventListener("text-expander-committed",p)),()=>{k.current&&(k.current.removeEventListener("text-expander-change",c),k.current.removeEventListener("text-expander-value",h),k.current.removeEventListener("text-expander-committed",p))}},[]),ee(()=>{const c=e.current;if(!c)return;new ResizeObserver(()=>{if(k.current){const{height:p}=c.getBoundingClientRect();k.current.style.height=p+"px"}}).observe(c)},[]);const Z=W(0),D=W(),I=fn(c=>{var f;if(!D.current)return;if(Z.current>3){D.current.innerHTML="",D.current=null,(f=I==null?void 0:I.cancel)==null||f.call(I);return}let h,p;Z.current<=3&&(h=Date.now()),D.current.innerHTML=li(c,{maxCharacters:u})+` -`,Z.current<=3&&(p=Date.now()),h&&p&&p-h>50&&Z.current++},500),se=Qe(()=>{var f,E;const c=(f=D.current)==null?void 0:f.cloneNode(!0);if(!c)return;c.querySelectorAll("mark").forEach(y=>{y.remove()});const h=(E=c.innerText)==null?void 0:E.trim();if(!h)return;const p=di(h);p!=null&&p.length&&(g==null||g({name:"auto-detect-language",languages:p}))},2e3);return t("text-expander",{ref:k,keys:"@ # :",class:"compose-field-container",children:[t("textarea",{class:"compose-field",autoCapitalize:"sentences",autoComplete:"on",autoCorrect:"on",spellCheck:"true",dir:"auto",rows:"6",cols:"50",...R,ref:e,name:"status",value:r,onKeyDown:c=>{const{key:h,target:p}=c;if(h==="Enter"&&!(c.ctrlKey||c.metaKey))try{const{value:f,selectionStart:E}=p,T=f.slice(0,E).split(` -`).slice(-1)[0];if(T&&/^\s*(-|\d+\.)\s/.test(T)){const[q,ue,S,X,V]=T.match(/^(\s*)(-|\d+\.)(\s+)(.+)?/)||[];if(V){c.preventDefault();const[U]=S.match(/\d+/)||[],j=U?`${+U+1}.`:"-",te=` -${ue}${j}${X}`;p.setRangeText(te,E,E);const O=E+te.length;p.setSelectionRange(O,O)}else{const U=E-T.length;p.setRangeText("",U,E)}jt(p),p.dispatchEvent(new Event("input"))}}catch{}D.current&&(D.current.scrollTop=p.scrollTop)},onInput:c=>{var f;const{target:h}=c,p=h.value.replace(/\u200b/g,"");m(p),jt(h),(f=s.onInput)==null||f.call(s,c),I(p),se()},style:{width:"100%",height:"4em"},onScroll:c=>{if(D.current){const{scrollTop:h}=c.target;D.current.scrollTop=h}}}),t("div",{ref:D,class:"compose-highlight","aria-hidden":"true"})]})});function pi({maxCharacters:s=500,hidden:e}){const a=Ln(le).composerCharacterCount,r=s-a;return e?t("span",{class:"char-counter",hidden:!0}):t("span",{class:"char-counter",title:`${r}/${s}`,style:{"--percentage":a/s*100},children:[t("meter",{class:`${r<=-10?"explode":r<=0?"danger":r<=20?"warning":""}`,value:a,max:s}),t("span",{class:"counter",children:r})]})}function Ke(s){const e=["bytes","KB","MB","GB","TB","PB","EB","ZB","YB"];let n=0;for(;s>=1024;)s/=1024,n++;return`${s.toFixed(0).toLocaleString()} ${e[n]}`}function Pt(s,e,n,a){const r=Math.sqrt(e/s),m=Math.floor(n*r),u=Math.floor(a*r);return{newWidth:m,newHeight:u}}function mi({attachment:s,disabled:e,lang:n,onDescriptionChange:a=()=>{},onRemove:r=()=>{}}){const[m,u]=H("default"),v=Nt("@mastodon/edit-media-attributes"),{type:g,id:R,file:C}=s,k=Re(()=>C?URL.createObjectURL(C):s.url,[C,s.url]),z=!!(C!=null&&C.size),Z=z?Ut():{},{mediaAttachments:{imageSizeLimit:D,imageMatrixLimit:I,videoSizeLimit:se,videoMatrixLimit:J,videoFrameRateLimit:c}={}}=Z||{},[h,p]=H(()=>z?g.startsWith("image")&&D&&C.size>D?{type:"imageSizeLimit",details:{imageSize:C.size,imageSizeLimit:D}}:g.startsWith("video")&&se&&C.size>se?{type:"videoSizeLimit",details:{videoSize:C.size,videoSizeLimit:se}}:null:null),[f,E]=H({});ee(()=>{!z||!I||(f==null?void 0:f.matrix)>I&&p({type:"imageMatrixLimit",details:{imageMatrix:f==null?void 0:f.matrix,imageMatrixLimit:I,width:f==null?void 0:f.width,height:f==null?void 0:f.height}})},[f,I,z]);const[y,T]=H({});ee(()=>{!z||!J||(y==null?void 0:y.matrix)>J&&p({type:"videoMatrixLimit",details:{videoMatrix:y==null?void 0:y.matrix,videoMatrixLimit:J,width:y==null?void 0:y.width,height:y==null?void 0:y.height}})},[y,J,z]);const[q,ue]=H(s.description),[S,X]=g.split("/"),V=Qe(a,250);ee(()=>{V(q)},[q,V]);const[U,j]=H(!1),te=W(null);ee(()=>{let A;return U&&te.current&&(A=setTimeout(()=>{te.current.focus()},100)),()=>{clearTimeout(A)}},[U]);const O=t(Ce,{children:R&&!v?t("div",{class:"media-desc",children:[t("span",{class:"tag",children:"Uploaded"}),t("p",{title:q,children:s.description||t("i",{children:"No description"})})]}):t("textarea",{ref:te,value:q||"",lang:n,placeholder:{image:"Image description",video:"Video description",audio:"Audio description"}[S],autoCapitalize:"sentences",autoComplete:"on",autoCorrect:"on",spellCheck:"true",dir:"auto",disabled:e||m==="loading",class:m==="loading"?"loading":"",maxlength:"1500",onInput:A=>{const{value:$}=A.target;ue($)}})}),ie=W(null);ee(()=>()=>{var A,$;($=(A=ie.current)==null?void 0:A.hideToast)==null||$.call(A)},[]);const ae=W(null),M=A=>{const{type:$,details:L}=A;switch($){case"imageSizeLimit":{const{imageSize:N,imageSizeLimit:Q}=L;return`File size too large. Uploading might encounter issues. Try reduce the file size from ${Ke(N)} to ${Ke(Q)} or lower.`}case"imageMatrixLimit":{const{imageMatrix:N,imageMatrixLimit:Q,width:oe,height:he}=L,{newWidth:ve,newHeight:xe}=Pt(N,Q,oe,he);return`Dimension too large. Uploading might encounter issues. Try reduce dimension from ${oe.toLocaleString()}×${he.toLocaleString()}px to ${ve.toLocaleString()}×${xe.toLocaleString()}px.`}case"videoSizeLimit":{const{videoSize:N,videoSizeLimit:Q}=L;return`File size too large. Uploading might encounter issues. Try reduce the file size from ${Ke(N)} to ${Ke(Q)} or lower.`}case"videoMatrixLimit":{const{videoMatrix:N,videoMatrixLimit:Q,width:oe,height:he}=L,{newWidth:ve,newHeight:xe}=Pt(N,Q,oe,he);return`Dimension too large. Uploading might encounter issues. Try reduce dimension from ${oe.toLocaleString()}×${he.toLocaleString()}px to ${ve.toLocaleString()}×${xe.toLocaleString()}px.`}case"videoFrameRateLimit":return"Frame rate too high. Uploading might encounter issues."}};return t(Ce,{children:[t("div",{class:"media-attachment",children:[t("div",{class:"media-preview",tabIndex:"0",onClick:()=>{j(!0)},children:S==="image"?t("img",{src:k,alt:"",onLoad:A=>{if(!z)return;const{naturalWidth:$,naturalHeight:L}=A.target;E({matrix:$*L,width:$,height:L})}}):S==="video"||S==="gifv"?t("video",{src:k+"#t=0.1",playsinline:!0,muted:!0,disablePictureInPicture:!0,preload:"metadata",onLoadedMetadata:A=>{if(!z)return;const{videoWidth:$,videoHeight:L}=A.target;$&&L&&T({matrix:$*L,width:$,height:L})}}):S==="audio"?t("audio",{src:k,controls:!0}):null}),O,t("div",{class:"media-aside",children:[t("button",{type:"button",class:"plain close-button",disabled:e,onClick:r,children:t(K,{icon:"x"})}),!!h&&t("button",{type:"button",class:"media-error",title:M(h),onClick:()=>{ae.current&&ae.current.hideToast(),ae.current=ke({text:M(h),duration:1e4})},children:t(K,{icon:"alert"})})]})]}),U&&t(Ve,{onClose:()=>{j(!1)},children:t("div",{id:"media-sheet",class:"sheet sheet-max",children:[t("button",{type:"button",class:"sheet-close",onClick:()=>{j(!1)},children:t(K,{icon:"x"})}),t("header",{children:t("h2",{children:{image:"Edit image description",video:"Edit video description",audio:"Edit audio description"}[S]})}),t("main",{tabIndex:"-1",children:[t("div",{class:"media-preview",children:S==="image"?t("img",{src:k,alt:""}):S==="video"||S==="gifv"?t("video",{src:k,playsinline:!0,controls:!0}):S==="audio"?t("audio",{src:k,controls:!0}):null}),t("div",{class:"media-form",children:[O,t("footer",{children:[S==="image"&&/^(png|jpe?g|gif|webp)$/i.test(X)&&!!le.settings.mediaAltGenerator&&!!ut&&t(vn,{portal:{target:document.body},containerProps:{style:{zIndex:1001}},align:"center",position:"anchor",overflow:"auto",menuButton:t("button",{type:"button",title:"More",class:"plain",children:t(K,{icon:"more",size:"l",alt:"More"})}),children:[t(At,{disabled:m==="loading",onClick:()=>{u("loading"),ie.current=ke({text:"Generating description. Please wait...",duration:-1}),async function(){var A,$;try{const L=new FormData;L.append("image",C);const N=await fetch(ut,{method:"POST",body:L}).then(Q=>Q.json());if(N.error)throw new Error(N.error);ue(N.description)}catch(L){ke(`Failed to generate description${L!=null&&L.message?`: ${L.message}`:""}`)}finally{u("default"),($=(A=ie.current)==null?void 0:A.hideToast)==null||$.call(A)}}()},children:[t(K,{icon:"sparkles2"}),n&&n!=="en"?t("small",{children:["Generate description…",t("br",{}),"(English)"]}):t("span",{children:"Generate description…"})]}),!!n&&n!=="en"&&t(At,{disabled:m==="loading",onClick:()=>{u("loading"),ie.current=ke({text:"Generating description. Please wait...",duration:-1}),async function(){var A,$;try{const L=new FormData;L.append("image",C);const N=`?lang=${n}`,Q=await fetch(ut+N,{method:"POST",body:L}).then(oe=>oe.json());if(Q.error)throw new Error(Q.error);ue(Q.description)}catch(L){ke(`Failed to generate description${L!=null&&L.message?`: ${L.message}`:""}`)}finally{u("default"),($=(A=ie.current)==null?void 0:A.hideToast)==null||$.call(A)}}()},children:[t(K,{icon:"sparkles2"}),t("small",{children:["Generate description…",t("br",{}),"(",bn(n),")"," ",t("span",{class:"more-insignificant",children:"— experimental"})]})]})]}),t("button",{type:"button",class:"light block",onClick:()=>{j(!1)},disabled:m==="loading",children:"Done"})]})]})]})]})})]})}function gi({lang:s,poll:e,disabled:n,onInput:a=()=>{},maxOptions:r,maxExpiration:m,minExpiration:u,maxCharactersPerOption:v}){const{options:g,expiresIn:R,multiple:C}=e;return t("div",{class:`poll ${C?"multiple":""}`,children:[t("div",{class:"poll-choices",children:g.map((k,z)=>t("div",{class:"poll-choice",children:[t("input",{required:!0,type:"text",value:k,disabled:n,maxlength:v,placeholder:`Choice ${z+1}`,lang:s,spellCheck:"true",dir:"auto",onInput:Z=>{const{value:D}=Z.target;g[z]=D,a(e)}}),t("button",{type:"button",class:"plain2 poll-button",disabled:n||g.length<=1,onClick:()=>{g.splice(z,1),a(e)},children:t(K,{icon:"x",size:"s"})})]},z))}),t("div",{class:"poll-toolbar",children:[t("button",{type:"button",class:"plain2 poll-button",disabled:n||g.length>=r,onClick:()=>{g.push(""),a(e)},children:"+"})," ",t("label",{class:"multiple-choices",children:[t("input",{type:"checkbox",checked:C,disabled:n,onChange:k=>{const{checked:z}=k.target;e.multiple=z,a(e)}})," ","Multiple choices"]}),t("label",{class:"expires-in",children:["Duration"," ",t("select",{value:R,disabled:n,onChange:k=>{const{value:z}=k.target;e.expiresIn=z,a(e)},children:Object.entries(Kt).filter(([k,z])=>z>=u&&z<=m).map(([k,z])=>t("option",{value:z,children:k},z))})]})]}),t("div",{class:"poll-toolbar",children:t("button",{type:"button",class:"plain remove-poll-button",disabled:n,onClick:()=>{a(null)},children:"Remove poll"})})]})}function be(s){return s.replace(/[&<>"']/g,function(e){return"&#"+e.charCodeAt(0)+";"})}function Ot(s){for(let e in s)(s[e]===null||s[e]===void 0)&&delete s[e];return s}function fi({onClose:s=()=>{},onSelect:e=()=>{},defaultSearchTerm:n}){const{masto:a}=bt(),[r,m]=H("default"),[u,v]=H([]),[g,R]=H({}),[C,k]=H(0),z=async c=>{if(!(c!=null&&c.length))return;const h=await yn(c,g);h&&R({...g,...h})},Z=c=>{c&&(m("loading"),(async()=>{try{const h=await a.v1.accounts.search.list({q:c,limit:40,resolve:!1});v(h),z(h),m("default")}catch{m("error")}})())},D=Qe(Z,1e3);ee(()=>{Z()},[Z]);const I=W();ee(()=>{I.current&&(I.current.focus(),I.current.value&&(I.current.selectionStart=I.current.value.length,I.current.selectionEnd=I.current.value.length))},[]),ee(()=>{n&&Z(n)},[n]);const se=c=>{const h=c.acct;e(h),s()};_e("enter",()=>{const c=u[C];c&&se(c)},{preventDefault:!0,enableOnFormTags:["input"]});const J=W();return _e("down",()=>{C{const c=J.current.querySelector(".selected");c&&c.scrollIntoView({behavior:"smooth",block:"center",inline:"center"})},1)},{preventDefault:!0,enableOnFormTags:["input"]}),_e("up",()=>{C>0?k(C-1):k(u.length-1),setTimeout(()=>{const c=J.current.querySelector(".selected");c&&c.scrollIntoView({behavior:"smooth",block:"center",inline:"center"})},1)},{preventDefault:!0,enableOnFormTags:["input"]}),t("div",{id:"mention-sheet",class:"sheet",children:[!!s&&t("button",{type:"button",class:"sheet-close",onClick:s,children:t(K,{icon:"x"})}),t("header",{children:t("form",{onSubmit:c=>{var h;c.preventDefault(),(h=D.flush)==null||h.call(D)},children:t("input",{ref:I,required:!0,type:"search",class:"block",placeholder:"Search accounts",onInput:c=>{const{value:h}=c.target;D(h)},autocomplete:"off",autocorrect:"off",autocapitalize:"off",spellCheck:"false",dir:"auto",defaultValue:n||""})})}),t("main",{children:(u==null?void 0:u.length)>0?t("ul",{ref:J,class:`accounts-list ${r==="loading"?"loading":""}`,children:u.map((c,h)=>{const p=g[c.id];return t("li",{class:h===C?"selected":"",children:[t(Ht,{avatarSize:"xxl",account:c,relationship:p,showStats:!0,showActivity:!0}),t("button",{type:"button",class:"plain2",onClick:()=>{se(c)},children:t(K,{icon:"plus",size:"xl"})})]},c.id)})}):r==="loading"?t("div",{class:"ui-state",children:t(et,{abrupt:!0})}):r==="error"?t("div",{class:"ui-state",children:t("p",{children:"Error loading accounts"})}):null})]})}function vi({masto:s,instance:e,onClose:n=()=>{},onSelect:a=()=>{},defaultSearchTerm:r}){const[m,u]=H("default"),v=W([]),[g,R]=H([]),C=Re(()=>Le.account.get("recentlyUsedCustomEmojis")||[]),k=W();ee(()=>{u("loading"),(async()=>{try{const[h,p]=await Gt(e,s);k.current=p,R(h),u("default")}catch{u("error")}})()},[]);const z=Re(()=>{const h={"--recent--":C.filter(f=>g.find(E=>E.shortcode===f.shortcode))},p=[];return g.forEach(f=>{var E,y;if((y=(E=v.current)==null?void 0:E.push)==null||y.call(E,f),!f.category){p.push(f);return}h[f.category]||(h[f.category]=[]),h[f.category].push(f)}),p.length&&(h["--others--"]=p),h},[g]),Z=W(),[D,I]=H(null),se=It(h=>{var f,E,y;const{value:p}=h.target;if(p){const T=(f=k.current)==null?void 0:f.search(p,{limit:vt});I(T.map(q=>q.item)),(y=(E=Z.current)==null?void 0:E.scrollTo)==null||y.call(E,0,0)}else I(null)},[g]);ee(()=>{r&&(g!=null&&g.length)&&se({target:{value:r}})},[r,se,g]);const J=It(h=>{a==null||a(h),n==null||n(),queueMicrotask(()=>{let p=Le.account.get("recentlyUsedCustomEmojis")||[];const f=p.findIndex(E=>E.shortcode===h.shortcode);f!==-1?(p.splice(f,1),p.unshift(h)):(p.unshift(h),p=p.filter(E=>{var y,T;return(T=(y=v.current)==null?void 0:y.find)==null?void 0:T.call(y,q=>q.shortcode===E.shortcode)}),p=p.slice(0,10)),Le.account.set("recentlyUsedCustomEmojis",p)})},[a]),c=W();return ee(()=>{c.current&&(c.current.focus(),c.current.value&&(c.current.selectionStart=c.current.value.length,c.current.selectionEnd=c.current.value.length))},[]),t("div",{id:"custom-emojis-sheet",class:"sheet",children:[!!n&&t("button",{type:"button",class:"sheet-close",onClick:n,children:t(K,{icon:"x"})}),t("header",{children:[t("div",{children:[t("b",{children:"Custom emojis"})," ",m==="loading"?t(et,{}):t("small",{class:"insignificant",children:[" • ",e]})]}),t("form",{onSubmit:h=>{h.preventDefault();const p=D[0];p&&J(`:${p.shortcode}:`)},children:t("input",{ref:c,type:"search",placeholder:"Search emoji",onInput:se,autocomplete:"off",autocorrect:"off",autocapitalize:"off",spellCheck:"false",dir:"auto",defaultValue:r||""})})]}),t("main",{ref:Z,children:D!==null?t("ul",{class:"custom-emojis-matches custom-emojis-list",children:D.map(h=>t("li",{class:"custom-emojis-match",children:t(Yt,{emoji:h,onClick:()=>{J(`:${h.shortcode}:`)},showCode:!0})},h.shortcode))}):t("div",{class:"custom-emojis-list",children:[m==="error"&&t("div",{class:"ui-state",children:t("p",{children:"Error loading custom emojis"})}),m==="default"&&Object.entries(z).map(([h,p])=>!!(p!=null&&p.length)&&t(Ce,{children:[t("div",{class:"section-header",children:{"--recent--":"Recently used","--others--":"Others"}[h]||h}),t(bi,{emojis:p,onSelect:J})]}))]})})]})}const bi=Wt(({emojis:s,onSelect:e})=>{const[n,a]=H(vt),r=s.length>n;return t("section",{children:[s.slice(0,n).map(m=>t(Yt,{emoji:m,onClick:()=>{e(`:${m.shortcode}:`)}},m.shortcode)),r&&t("button",{type:"button",class:"plain small",onClick:()=>a(n+vt),children:[(s.length-n).toLocaleString()," more…"]})]})}),Yt=Wt(({emoji:s,onClick:e,showCode:n})=>{const a=r=>{const u=r.currentTarget.closest("main");if(u){const v=u.getBoundingClientRect(),g=r.currentTarget.getBoundingClientRect(),R=r.currentTarget.classList;g.leftv.right-88?(R.add("edge-right"),R.remove("edge-left")):R.remove("edge-left","edge-right")}};return t("button",{type:"button",className:"plain4",onClick:e,"data-title":n?void 0:s.shortcode,onPointerEnter:a,onFocus:a,children:[t("picture",{children:[!!s.staticUrl&&t("source",{srcSet:s.staticUrl,media:"(prefers-reduced-motion: reduce)"}),t("img",{className:"shortcode-emoji",src:s.url||s.staticUrl,alt:s.shortcode,width:"24",height:"24",loading:"lazy",decoding:"async"})]}),n&&t(Ce,{children:[" ",t("code",{children:s.shortcode})]})]})}),ht=20;function yi({onClose:s=()=>{},onSelect:e=()=>{}}){var z,Z,D,I,se,J;const[n,a]=H("default"),[r,m]=H([]),u=W(null),v=W(null),g=W(0),R=W(null);function C({offset:c}){var h,p,f;(h=v.current)!=null&&h.value&&(a("loading"),(f=(p=R.current)==null?void 0:p.scrollTo)==null||f.call(p,{top:0,left:0,behavior:"smooth"}),(async()=>{var E;try{const y={api_key:Gn,q:v.current.value,rating:"g",limit:ht,bundle:"messaging_non_clips",offset:c},T=await fetch("https://api.giphy.com/v1/gifs/search?"+new URLSearchParams(y),{referrerPolicy:"no-referrer"}).then(q=>q.json());g.current=((E=T.pagination)==null?void 0:E.offset)||0,m(T),a("results")}catch{a("error")}})())}ee(()=>{var c;(c=v.current)==null||c.focus()},[]);const k=Qe(()=>{C({offset:0})},1e3);return t("div",{id:"gif-picker-sheet",class:"sheet",children:[!!s&&t("button",{type:"button",class:"sheet-close",onClick:s,children:t(K,{icon:"x"})}),t("header",{children:t("form",{ref:u,onSubmit:c=>{c.preventDefault(),C({offset:0})},children:[t("input",{ref:v,type:"search",name:"q",placeholder:"Search GIFs",required:!0,autocomplete:"off",autocorrect:"off",autocapitalize:"off",spellCheck:"false",dir:"auto",onInput:k}),t("input",{type:"image",class:"powered-button",src:Wn,width:"86",height:"30"})]})}),t("main",{ref:R,class:n==="loading"?"loading":"",children:[n==="default"&&t("div",{class:"ui-state",children:t("p",{class:"insignificant",children:"Type to search GIFs"})}),n==="loading"&&!((z=r==null?void 0:r.data)!=null&&z.length)&&t("div",{class:"ui-state",children:t(et,{abrupt:!0})}),((Z=r==null?void 0:r.data)==null?void 0:Z.length)>0?t(Ce,{children:[t("ul",{children:r.data.map(c=>{const{id:h,images:p,title:f,alt_text:E}=c,{fixed_height_small:y,fixed_height_downsampled:T,fixed_height:q,original:ue}=p,S=y!=null&&y.url?y:T!=null&&T.url?T:q;let{url:X,webp:V,width:U,height:j}=S;+j>100&&(U=U/j*100,j=100);const te=URL.parse(X),O=te.origin+te.pathname;let ie;if(V){const ae=URL.parse(V);ie=ae.origin+ae.pathname}return t("li",{children:t("button",{type:"button",onClick:()=>{const{mp4:ae,url:M}=ue,A=ae||M,$=URL.parse(A),L=$.origin+$.pathname;s(),e({url:L,type:ae?"video/mp4":"image/gif",alt_text:E||f})},children:t("figure",{style:{"--figure-width":U+"px"},children:[t("picture",{children:[ie&&t("source",{srcset:ie,type:"image/webp"}),t("img",{src:O,width:U,height:j,loading:"lazy",decoding:"async",alt:E,referrerpolicy:"no-referrer",onLoad:ae=>{ae.target.style.backgroundColor="transparent"}})]}),t("figcaption",{children:E||f})]})})},h)})}),t("p",{class:"pagination",children:[((D=r.pagination)==null?void 0:D.offset)>0&&t("button",{type:"button",class:"light small",disabled:n==="loading",onClick:()=>{var c;C({offset:((c=r.pagination)==null?void 0:c.offset)-ht})},children:[t(K,{icon:"chevron-left"}),t("span",{children:"Previous"})]}),t("span",{}),((I=r.pagination)==null?void 0:I.offset)+((se=r.pagination)==null?void 0:se.count)<((J=r.pagination)==null?void 0:J.total_count)&&t("button",{type:"button",class:"light small",disabled:n==="loading",onClick:()=>{var c;C({offset:((c=r.pagination)==null?void 0:c.offset)+ht})},children:[t("span",{children:"Next"})," ",t(K,{icon:"chevron-right"})]})]})]}):n==="results"&&t("div",{class:"ui-state",children:t("p",{children:"No results"})}),n==="error"&&t("div",{class:"ui-state",children:t("p",{children:"Error loading GIFs"})})]})]})}export{Ci as default}; -//# sourceMappingURL=compose-sEmGhv2s.js.map diff --git a/assets/compose-sEmGhv2s.js.map b/assets/compose-sEmGhv2s.js.map deleted file mode 100644 index c7ea66f..0000000 --- a/assets/compose-sEmGhv2s.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"compose-sEmGhv2s.js","sources":["../../node_modules/@github/combobox-nav/dist/index.js","../../node_modules/@github/text-expander-element/dist/index.js","../../node_modules/ansi-regex/index.js","../../node_modules/strip-ansi/index.js","../../node_modules/string-length/index.js","../../src/assets/powered-by-giphy.svg","../../src/components/compose.jsx"],"sourcesContent":["export default class Combobox {\n constructor(input, list, { tabInsertsSuggestions, defaultFirstOption } = {}) {\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.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 scrollTo(this.list, target);\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);\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) {\n target.dispatchEvent(new CustomEvent('combobox-commit', { 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}\nfunction scrollTo(container, target) {\n if (!inViewport(container, target)) {\n container.scrollTop = target.offsetTop;\n }\n}\nfunction inViewport(container, element) {\n const scrollTop = container.scrollTop;\n const containerBottom = scrollTop + container.clientHeight;\n const top = element.offsetTop;\n const bottom = top + element.clientHeight;\n return top >= scrollTop && bottom <= containerBottom;\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\n/**\n * A custom element is implemented as a class which extends HTMLElement (in the\n * case of autonomous elements) or the interface you want to customize (in the\n * case of customized built-in elements).\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Web_components/Using_custom_elements#custom_element_lifecycle_callbacks\n */\nclass CustomHTMLElement extends HTMLElement {\n}\n\nclass InputStyleCloneUpdateEvent extends Event {\n constructor() {\n super(\"update\");\n }\n}\nconst CloneRegistry = new WeakMap();\n/**\n * Create 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 InputStyleCloneElement extends CustomHTMLElement {\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;\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.\n *\n * Upon initial creation the clone element will automatically be inserted into the DOM and begin observing the\n * linked input. Only one clone per input can ever exist at a time.\n * @param input The target input to clone.\n */\n static for(input) {\n const clone = CloneRegistry.get(input) ?? new InputStyleCloneElement(input);\n CloneRegistry.set(input, clone);\n return clone;\n }\n /**\n * Avoid constructing directly: Use `InputStyleCloneElement.for` instead.\n * @private\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 = document.createElement(\"div\");\n this.#container.style.position = \"absolute\";\n this.#container.style.pointerEvents = \"none\";\n input.after(this.#container);\n this.#container.appendChild(this);\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 /** @private */\n connectedCallback() {\n const input = this.#inputRef.deref();\n if (!input)\n return this.remove();\n this.style.pointerEvents = \"none\";\n this.style.userSelect = \"none\";\n this.style.overflow = \"hidden\";\n this.style.display = \"block\";\n // Important not to use display:none which would not render the content at all\n this.style.visibility = \"hidden\";\n if (input instanceof HTMLTextAreaElement) {\n this.style.whiteSpace = \"pre-wrap\";\n this.style.wordWrap = \"break-word\";\n }\n else {\n this.style.whiteSpace = \"nowrap\";\n // text in single-line inputs is vertically centered\n this.style.display = \"table-cell\";\n this.style.verticalAlign = \"middle\";\n }\n this.setAttribute(\"aria-hidden\", \"true\");\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 /** @private */\n disconnectedCallback() {\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 const input = this.#inputRef.deref();\n if (input) {\n input.removeEventListener(\"input\", this.#onInput, { capture: true });\n CloneRegistry.delete(input);\n }\n }\n // --- private ---\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.#inputRef.deref();\n if (!input)\n return this.remove();\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.style.height = inputStyle.height;\n this.style.width = inputStyle.width;\n // Immediately re-adjust for browser inconsistencies in scrollbar handling, if necessary\n if (input.clientHeight !== this.clientHeight)\n this.style.height = `calc(${inputStyle.height} + ${input.clientHeight - this.clientHeight}px)`;\n if (input.clientWidth !== this.clientWidth)\n this.style.width = `calc(${inputStyle.width} + ${input.clientWidth - this.clientWidth}px)`;\n // Position on top of the input\n const inputRect = input.getBoundingClientRect();\n const cloneRect = this.getBoundingClientRect();\n this.#xOffset = this.#xOffset + inputRect.left - cloneRect.left;\n this.#yOffset = this.#yOffset + inputRect.top - cloneRect.top;\n this.style.transform = `translate(${this.#xOffset}px, ${this.#yOffset}px)`;\n this.scrollTop = input.scrollTop;\n this.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.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.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// Inspired by https://github.com/github/catalyst/blob/dc284dcf4f82329a9cac5c867462a8fa529b6c40/src/register.ts\ntry {\n customElements.define(\"input-style-clone\", InputStyleCloneElement);\n}\ncatch (e) {\n // Throws DOMException with NotSupportedError if already defined\n if (!(e instanceof DOMException && e.name === \"NotSupportedError\"))\n throw e;\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 InputStyleCloneElement.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.childNodes[0];\n if (textNode) {\n range.setStart(textNode, this.startOffset);\n range.setEnd(textNode, this.endOffset);\n }\n return range;\n }\n}\n\nconst states = new WeakMap();\nclass TextExpander {\n constructor(expander, input) {\n this.expander = expander;\n this.input = input;\n this.combobox = null;\n this.menu = null;\n this.match = null;\n this.justPasted = false;\n this.lookBackIndex = 0;\n this.oninput = this.onInput.bind(this);\n this.onpaste = this.onPaste.bind(this);\n this.onkeydown = this.onKeydown.bind(this);\n this.oncommit = this.onCommit.bind(this);\n this.onmousedown = this.onMousedown.bind(this);\n this.onblur = this.onBlur.bind(this);\n this.interactingWithList = false;\n input.addEventListener('paste', this.onpaste);\n input.addEventListener('input', this.oninput);\n input.addEventListener('keydown', this.onkeydown);\n input.addEventListener('blur', this.onblur);\n }\n destroy() {\n this.input.removeEventListener('paste', this.onpaste);\n this.input.removeEventListener('input', this.oninput);\n this.input.removeEventListener('keydown', this.onkeydown);\n this.input.removeEventListener('blur', this.onblur);\n }\n dismissMenu() {\n if (this.deactivate()) {\n this.lookBackIndex = this.input.selectionEnd || this.lookBackIndex;\n }\n }\n activate(match, menu) {\n var _a, _b;\n if (this.input !== document.activeElement && this.input !== ((_b = (_a = document.activeElement) === null || _a === void 0 ? void 0 : _a.shadowRoot) === null || _b === void 0 ? void 0 : _b.activeElement)) {\n return;\n }\n this.deactivate();\n this.menu = menu;\n if (!menu.id)\n menu.id = `text-expander-${Math.floor(Math.random() * 100000).toString()}`;\n this.expander.append(menu);\n this.combobox = new Combobox(this.input, menu);\n this.expander.dispatchEvent(new Event('text-expander-activate'));\n this.positionMenu(menu, match.position);\n this.combobox.start();\n menu.addEventListener('combobox-commit', this.oncommit);\n menu.addEventListener('mousedown', this.onmousedown);\n this.combobox.navigate(1);\n }\n positionMenu(menu, position) {\n const caretRect = new InputRange(this.input, position).getBoundingClientRect();\n const targetPosition = { left: caretRect.left, top: caretRect.top + caretRect.height };\n const currentPosition = menu.getBoundingClientRect();\n const delta = {\n left: targetPosition.left - currentPosition.left,\n top: targetPosition.top - currentPosition.top\n };\n if (delta.left !== 0 || delta.top !== 0) {\n const currentStyle = getComputedStyle(menu);\n menu.style.left = currentStyle.left ? `calc(${currentStyle.left} + ${delta.left}px)` : `${delta.left}px`;\n menu.style.top = currentStyle.top ? `calc(${currentStyle.top} + ${delta.top}px)` : `${delta.top}px`;\n }\n }\n deactivate() {\n const menu = this.menu;\n if (!menu || !this.combobox)\n return false;\n this.expander.dispatchEvent(new Event('text-expander-deactivate'));\n this.menu = null;\n menu.removeEventListener('combobox-commit', this.oncommit);\n menu.removeEventListener('mousedown', this.onmousedown);\n this.combobox.destroy();\n this.combobox = null;\n menu.remove();\n return true;\n }\n onCommit({ target }) {\n var _a;\n const item = target;\n if (!(item instanceof HTMLElement))\n return;\n if (!this.combobox)\n return;\n const match = this.match;\n if (!match)\n return;\n const beginning = this.input.value.substring(0, match.position - match.key.length);\n const remaining = this.input.value.substring(match.position + match.text.length);\n const detail = { item, key: match.key, value: null, continue: false };\n const canceled = !this.expander.dispatchEvent(new CustomEvent('text-expander-value', { cancelable: true, detail }));\n if (canceled)\n return;\n if (!detail.value)\n return;\n let suffix = (_a = this.expander.getAttribute('suffix')) !== null && _a !== void 0 ? _a : ' ';\n if (detail.continue) {\n suffix = '';\n }\n const value = `${detail.value}${suffix}`;\n this.input.value = beginning + value + remaining;\n const cursor = beginning.length + value.length;\n this.deactivate();\n this.input.focus({\n preventScroll: true\n });\n this.input.selectionStart = cursor;\n this.input.selectionEnd = cursor;\n if (!detail.continue) {\n this.lookBackIndex = cursor;\n this.match = null;\n }\n this.expander.dispatchEvent(new CustomEvent('text-expander-committed', { cancelable: false, detail: { input: this.input } }));\n }\n onBlur() {\n if (this.interactingWithList) {\n this.interactingWithList = false;\n return;\n }\n this.deactivate();\n }\n onPaste() {\n this.justPasted = true;\n }\n async onInput() {\n if (this.justPasted) {\n this.justPasted = false;\n return;\n }\n const match = this.findMatch();\n if (match) {\n this.match = match;\n const menu = await this.notifyProviders(match);\n if (!this.match)\n return;\n if (menu) {\n this.activate(match, menu);\n }\n else {\n this.deactivate();\n }\n }\n else {\n this.match = null;\n this.deactivate();\n }\n }\n findMatch() {\n const cursor = this.input.selectionEnd || 0;\n const text = this.input.value;\n if (cursor <= this.lookBackIndex) {\n this.lookBackIndex = cursor - 1;\n }\n for (const { key, multiWord } of this.expander.keys) {\n const found = query(text, key, cursor, {\n multiWord,\n lookBackIndex: this.lookBackIndex,\n lastMatchPosition: this.match ? this.match.position : null\n });\n if (found) {\n return { text: found.text, key, position: found.position };\n }\n }\n }\n async notifyProviders(match) {\n const providers = [];\n const provide = (result) => providers.push(result);\n const canceled = !this.expander.dispatchEvent(new CustomEvent('text-expander-change', { cancelable: true, detail: { provide, text: match.text, key: match.key } }));\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 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 default TextExpanderElement;\n","export default function ansiRegex({onlyFirst = false} = {}) {\n\tconst pattern = [\n\t '[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)',\n\t\t'(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-ntqry=><~]))'\n\t].join('|');\n\n\treturn new RegExp(pattern, onlyFirst ? undefined : 'g');\n}\n","import ansiRegex from 'ansi-regex';\n\nconst regex = ansiRegex();\n\nexport default function stripAnsi(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError(`Expected a \\`string\\`, got \\`${typeof string}\\``);\n\t}\n\n\t// Even though the regex is global, we don't need to reset the `.lastIndex`\n\t// because unlike `.exec()` and `.test()`, `.replace()` does it automatically\n\t// and doing it manually has a performance penalty.\n\treturn string.replace(regex, '');\n}\n","import stripAnsi from 'strip-ansi';\n\nconst segmenter = new Intl.Segmenter();\n\nexport default function stringLength(string, {countAnsiEscapeCodes = false} = {}) {\n\tif (string === '') {\n\t\treturn 0;\n\t}\n\n\tif (!countAnsiEscapeCodes) {\n\t\tstring = stripAnsi(string);\n\t}\n\n\tif (string === '') {\n\t\treturn 0;\n\t}\n\n\tlet length = 0;\n\n\tfor (const _ of segmenter.segment(string)) { // eslint-disable-line no-unused-vars\n\t\tlength++;\n\t}\n\n\treturn length;\n}\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 './compose.css';\nimport '@github/text-expander-element';\n\nimport { MenuItem } from '@szhsin/react-menu';\nimport { deepEqual } from 'fast-equals';\nimport Fuse from 'fuse.js';\nimport { forwardRef, memo } from 'preact/compat';\nimport {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'preact/hooks';\nimport { useHotkeys } from 'react-hotkeys-hook';\nimport stringLength from 'string-length';\nimport { detectAll } from 'tinyld/light';\nimport { uid } from 'uid/single';\nimport { useDebouncedCallback, useThrottledCallback } from 'use-debounce';\nimport { useSnapshot } from 'valtio';\n\nimport poweredByGiphyURL from '../assets/powered-by-giphy.svg';\n\nimport Menu2 from '../components/menu2';\nimport supportedLanguages from '../data/status-supported-languages';\nimport urlRegex from '../data/url-regex';\nimport { api } from '../utils/api';\nimport db from '../utils/db';\nimport emojifyText from '../utils/emojify-text';\nimport isRTL from '../utils/is-rtl';\nimport localeMatch from '../utils/locale-match';\nimport localeCode2Text from '../utils/localeCode2Text';\nimport openCompose from '../utils/open-compose';\nimport pmem from '../utils/pmem';\nimport { fetchRelationships } from '../utils/relationships';\nimport shortenNumber from '../utils/shorten-number';\nimport showToast from '../utils/show-toast';\nimport states, { saveStatus } from '../utils/states';\nimport store from '../utils/store';\nimport {\n getCurrentAccount,\n getCurrentAccountNS,\n getCurrentInstance,\n getCurrentInstanceConfiguration,\n} from '../utils/store-utils';\nimport supports from '../utils/supports';\nimport useCloseWatcher from '../utils/useCloseWatcher';\nimport useInterval from '../utils/useInterval';\nimport visibilityIconsMap from '../utils/visibility-icons-map';\n\nimport AccountBlock from './account-block';\n// import Avatar from './avatar';\nimport Icon from './icon';\nimport Loader from './loader';\nimport Modal from './modal';\nimport Status from './status';\n\nconst {\n PHANPY_IMG_ALT_API_URL: IMG_ALT_API_URL,\n PHANPY_GIPHY_API_KEY: GIPHY_API_KEY,\n} = import.meta.env;\n\nconst supportedLanguagesMap = supportedLanguages.reduce((acc, l) => {\n const [code, common, native] = l;\n acc[code] = {\n common,\n native,\n };\n return acc;\n}, {});\n\n/* NOTES:\n - Max character limit includes BOTH status text and Content Warning text\n*/\n\nconst expiryOptions = {\n '5 minutes': 5 * 60,\n '30 minutes': 30 * 60,\n '1 hour': 60 * 60,\n '6 hours': 6 * 60 * 60,\n '12 hours': 12 * 60 * 60,\n '1 day': 24 * 60 * 60,\n '3 days': 3 * 24 * 60 * 60,\n '7 days': 7 * 24 * 60 * 60,\n};\nconst expirySeconds = Object.values(expiryOptions);\nconst oneDay = 24 * 60 * 60;\n\nconst expiresInFromExpiresAt = (expiresAt) => {\n if (!expiresAt) return oneDay;\n const delta = (new Date(expiresAt).getTime() - Date.now()) / 1000;\n return expirySeconds.find((s) => s >= delta) || oneDay;\n};\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\nconst DEFAULT_LANG = localeMatch(\n [new Intl.DateTimeFormat().resolvedOptions().locale, ...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 urlRegexObj = new RegExp(urlRegex.source, urlRegex.flags);\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// 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])(#[a-z0-9_]+([a-z0-9_.]+[a-z0-9_]+)?)(?![\\\\/\\\\w])`,\n 'ig',\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();\nfunction escapeHTML(text) {\n return text\n .replace(/&/g, '&')\n .replace(//g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\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 '' +\n escapeHTML(exceedLimitHTML) +\n '';\n }\n return escapeHTML(withinLimitHTML) + exceedLimitHTML;\n }\n\n return escapeHTML(text)\n .replace(urlRegexObj, '$2$3') // URLs\n .replace(MENTION_RE, '$1$2') // Mentions\n .replace(HASHTAG_RE, '$1$2') // Hashtags\n .replace(\n SCAN_RE,\n '$1$2',\n ); // Emoji shortcodes\n}\n\nconst rtf = new Intl.RelativeTimeFormat();\n\nconst CUSTOM_EMOJIS_COUNT = 100;\n\nfunction Compose({\n onClose,\n replyToStatus,\n editStatus,\n draftStatus,\n standalone,\n hasOpener,\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 = 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,\n charactersReservedPerUrl,\n } = {},\n mediaAttachments: {\n supportedMimeTypes = [],\n imageSizeLimit,\n imageMatrixLimit,\n videoSizeLimit,\n videoMatrixLimit,\n videoFrameRateLimit,\n } = {},\n polls: {\n maxOptions,\n maxCharactersPerOption,\n maxExpiration,\n minExpiration,\n } = {},\n } = configuration || {};\n\n const textareaRef = useRef();\n const spoilerTextRef = useRef();\n const [visibility, setVisibility] = useState('public');\n const [sensitive, setSensitive] = 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\n const prefs = store.account.get('preferences') || {};\n\n const oninputTextarea = () => {\n if (!textareaRef.current) return;\n textareaRef.current.dispatchEvent(new Event('input'));\n };\n const focusTextarea = () => {\n setTimeout(() => {\n if (!textareaRef.current) return;\n // status starts with newline, focus on first position\n if (draftStatus?.status?.startsWith?.('\\n')) {\n textareaRef.current.selectionStart = 0;\n textareaRef.current.selectionEnd = 0;\n }\n console.debug('FOCUS textarea');\n textareaRef.current?.focus();\n }, 300);\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 if (allMentions.length > 0) {\n textareaRef.current.value = `${allMentions\n .map((m) => `@${m}`)\n .join(' ')} `;\n oninputTextarea();\n }\n focusTextarea();\n setVisibility(\n visibility === 'public' && prefs['posting:default:visibility']\n ? prefs['posting:default:visibility']\n : visibility,\n );\n setLanguage(language || prefs.postingDefaultLanguage || DEFAULT_LANG);\n setSensitive(sensitive && !!spoilerText);\n } else if (editStatus) {\n const { visibility, language, sensitive, poll, mediaAttachments } =\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(language || presf.postingDefaultLanguage || DEFAULT_LANG);\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']);\n }\n if (prefs['posting:default:language']) {\n setLanguage(prefs['posting:default:language']);\n }\n if (prefs['posting:default:sensitive']) {\n setSensitive(prefs['posting:default:sensitive']);\n }\n }\n if (draftStatus) {\n const {\n status,\n spoilerText,\n visibility,\n language,\n sensitive,\n poll,\n mediaAttachments,\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 focusTextarea();\n if (spoilerText) spoilerTextRef.current.value = spoilerText;\n if (visibility) setVisibility(visibility);\n setLanguage(language || prefs.postingDefaultLanguage || DEFAULT_LANG);\n if (sensitive !== null) setSensitive(sensitive);\n if (composablePoll) setPoll(composablePoll);\n if (mediaAttachments) setMediaAttachments(mediaAttachments);\n }\n }, [draftStatus, editStatus, replyToStatus]);\n\n const formRef = useRef();\n\n const beforeUnloadCopy = '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\", including multiple mentions like \"@username1@username2\"\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 },\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 hasModal && !hasOnlyComposer;\n },\n },\n );\n useCloseWatcher(() => {\n if (!standalone && confirmClose()) {\n onClose();\n }\n }, [standalone, confirmClose, onClose]);\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 poll,\n mediaAttachments,\n },\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 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 const file = item.getAsFile();\n if (file && supportedMimeTypes.includes(file.type)) {\n files.push(file);\n }\n }\n }\n if (files.length > 0 && mediaAttachments.length >= maxMediaAttachments) {\n alert(`You can only attach up to ${maxMediaAttachments} files.`);\n return;\n }\n console.log({ files });\n if (files.length > 0) {\n e.preventDefault();\n e.stopPropagation();\n // Auto-cut-off files to avoid exceeding maxMediaAttachments\n const max = maxMediaAttachments - mediaAttachments.length;\n const allowedFiles = files.slice(0, max);\n if (allowedFiles.length <= 0) {\n alert(`You can only attach up to ${maxMediaAttachments} files.`);\n return;\n }\n const mediaFiles = allowedFiles.map((file) => ({\n file,\n type: file.type,\n size: file.size,\n url: URL.createObjectURL(file),\n id: null,\n description: null,\n }));\n setMediaAttachments([...mediaAttachments, ...mediaFiles]);\n }\n };\n window.addEventListener('paste', handleItems);\n const handleDragover = (e) => {\n // Prevent default if there's files\n if (e.dataTransfer.items.length > 0) {\n e.preventDefault();\n e.stopPropagation();\n }\n };\n window.addEventListener('dragover', handleDragover);\n window.addEventListener('drop', handleItems);\n return () => {\n window.removeEventListener('paste', handleItems);\n window.removeEventListener('dragover', handleDragover);\n window.removeEventListener('drop', handleItems);\n };\n }, [mediaAttachments]);\n\n const [showMentionPicker, setShowMentionPicker] = useState(false);\n const [showEmoji2Picker, setShowEmoji2Picker] = useState(false);\n const [showGIFPicker, setShowGIFPicker] = useState(false);\n\n const [autoDetectedLanguages, setAutoDetectedLanguages] = useState(null);\n const [topSupportedLanguages, restSupportedLanguages] = useMemo(() => {\n const topLanguages = [];\n const restLanguages = [];\n const { contentTranslationHideLanguages = [] } = states.settings;\n supportedLanguages.forEach((l) => {\n const [code] = l;\n if (\n code === language ||\n code === prevLanguage.current ||\n code === DEFAULT_LANG ||\n contentTranslationHideLanguages.includes(code) ||\n (autoDetectedLanguages?.length && autoDetectedLanguages.includes(code))\n ) {\n topLanguages.push(l);\n } else {\n restLanguages.push(l);\n }\n });\n topLanguages.sort(([codeA, commonA], [codeB, commonB]) => {\n if (codeA === language) return -1;\n if (codeB === language) return 1;\n return commonA.localeCompare(commonB);\n });\n restLanguages.sort(([codeA, commonA], [codeB, commonB]) =>\n commonA.localeCompare(commonB),\n );\n return [topLanguages, restLanguages];\n }, [language, autoDetectedLanguages]);\n\n const replyToStatusMonthsAgo = useMemo(\n () =>\n !!replyToStatus?.createdAt &&\n Math.floor(\n (Date.now() - new Date(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 return (\n
    \n
    \n
    \n {currentAccountInfo?.avatarStatic && (\n // \n \n )}\n {!standalone ? (\n \n {\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 },\n });\n\n if (!newWin) {\n return;\n }\n\n onClose();\n }}\n >\n \n \n \n \n {' '}\n {\n if (confirmClose()) {\n onClose();\n }\n }}\n >\n \n \n \n ) : (\n hasOpener && (\n {\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('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 '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 =\n '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 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 },\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 \n \n )\n )}\n
    \n {!!replyToStatus && (\n
    \n \n
    \n Replying to @\n {replyToStatus.account.acct || replyToStatus.account.username}\n ’s post\n {replyToStatusMonthsAgo >= 3 && (\n <>\n {' '}\n (\n \n {rtf.format(-replyToStatusMonthsAgo, 'month')}\n \n )\n \n )}\n
    \n
    \n )}\n {!!editStatus && (\n
    \n \n
    Editing source post
    \n
    \n )}\n {\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 { status, visibility, sensitive, spoilerText } = entries;\n\n // Pre-cleanup\n sensitive = sensitive === 'on'; // checkboxes return \"on\" if checked\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('Poll must have at least 2 options');\n return;\n }\n if (poll.options.some((option) => option === '')) {\n alert('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 'Some media have no descriptions. Continue?',\n );\n if (!yes) return;\n }\n }\n\n // Post-cleanup\n spoilerText = (sensitive && spoilerText) || undefined;\n status = status === '' ? undefined : status;\n\n // states.composerState.minimized = true;\n states.composerState.publishing = true;\n setUIState('loading');\n (async () => {\n try {\n console.log('MEDIA ATTACHMENTS', mediaAttachments);\n if (mediaAttachments.length > 0) {\n // Upload media attachments first\n const mediaPromises = mediaAttachments.map((attachment) => {\n const { file, description, id } = attachment;\n console.log('UPLOADING', attachment);\n if (id) {\n // If already uploaded\n return attachment;\n } else {\n const params = removeNullUndefined({\n file,\n description,\n });\n return masto.v2.media.create(params).then((res) => {\n if (res.id) {\n attachment.id = res.id;\n }\n return res;\n });\n }\n });\n const results = await Promise.allSettled(mediaPromises);\n\n // If any failed, return\n if (\n results.some((result) => {\n return result.status === 'rejected' || !result.value?.id;\n })\n ) {\n states.composerState.publishing = false;\n states.composerState.publishingError = true;\n setUIState('error');\n // Alert all the reasons\n results.forEach((result) => {\n if (result.status === 'rejected') {\n console.error(result);\n alert(result.reason || `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,\n poll,\n // mediaIds: mediaAttachments.map((attachment) => attachment.id),\n media_ids: mediaAttachments.map(\n (attachment) => attachment.id,\n ),\n };\n if (editStatus && supports('@mastodon/edit-media-attributes')) {\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 } else if (!editStatus) {\n params.visibility = visibility;\n // params.inReplyToId = replyToStatus?.id || undefined;\n params.in_reply_to_id = replyToStatus?.id || undefined;\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 });\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
    \n {\n updateCharCount();\n }}\n />\n \n {\n const sensitive = e.target.checked;\n setSensitive(sensitive);\n if (sensitive) {\n spoilerTextRef.current?.focus();\n } else {\n textareaRef.current?.focus();\n }\n }}\n />\n \n {' '}\n \n \n {\n setVisibility(e.target.value);\n }}\n disabled={uiState === 'loading' || !!editStatus}\n dir=\"auto\"\n >\n \n \n \n \n \n {' '}\n
    \n {\n updateCharCount();\n }}\n maxCharacters={maxCharacters}\n performSearch={(params) => {\n const { type, q, limit } = params;\n if (type === 'accounts') {\n return masto.v1.accounts.search.list({\n q,\n limit,\n resolve: false,\n });\n }\n return masto.v2.search.fetch(params);\n }}\n onTrigger={(action) => {\n if (action?.name === 'custom-emojis') {\n setShowEmoji2Picker({\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 }\n }}\n />\n {mediaAttachments?.length > 0 && (\n
    \n {mediaAttachments.map((attachment, i) => {\n const { id, file } = attachment;\n const fileID = file?.size + file?.type + file?.name;\n return (\n {\n setMediaAttachments((attachments) => {\n const newAttachments = [...attachments];\n newAttachments[i].description = value;\n return newAttachments;\n });\n }}\n onRemove={() => {\n setMediaAttachments((attachments) => {\n return attachments.filter((_, j) => j !== i);\n });\n }}\n />\n );\n })}\n \n
    \n )}\n {!!poll && (\n {\n if (poll) {\n const newPoll = { ...poll };\n setPoll(newPoll);\n } else {\n setPoll(null);\n }\n }}\n />\n )}\n \n \n \n {/* If maxOptions is not defined or defined and is greater than 1, show poll button */}\n {maxOptions == null ||\n (maxOptions > 1 && (\n <>\n {\n setPoll({\n options: ['', ''],\n expiresIn: 24 * 60 * 60, // 1 day\n multiple: false,\n });\n }}\n >\n \n \n \n ))}\n {/* {\n setShowMentionPicker(true);\n }}\n >\n \n */}\n {\n setShowEmoji2Picker(true);\n }}\n >\n \n \n {!!states.settings.composerGIFPicker && (\n = maxMediaAttachments ||\n !!poll\n }\n onClick={() => {\n setShowGIFPicker(true);\n }}\n >\n GIF\n \n )}\n \n
    \n {uiState === 'loading' ? (\n \n ) : (\n
    \n \n
    \n {showMentionPicker && (\n {\n if (e.target === e.currentTarget) {\n setShowMentionPicker(false);\n }\n }}\n >\n {\n setShowMentionPicker(false);\n }}\n defaultSearchTerm={showMentionPicker?.defaultSearchTerm}\n onSelect={(socialAddress) => {\n const textarea = textareaRef.current;\n if (!textarea) return;\n const { selectionStart, selectionEnd } = textarea;\n const text = textarea.value;\n const textBeforeMention = text.slice(0, selectionStart);\n const spaceBeforeMention = textBeforeMention\n ? /[\\s\\t\\n\\r]$/.test(textBeforeMention)\n ? ''\n : ' '\n : '';\n const textAfterMention = text.slice(selectionEnd);\n const spaceAfterMention = /^[\\s\\t\\n\\r]/.test(textAfterMention)\n ? ''\n : ' ';\n const newText =\n textBeforeMention +\n spaceBeforeMention +\n '@' +\n socialAddress +\n spaceAfterMention +\n textAfterMention;\n textarea.value = newText;\n textarea.selectionStart = textarea.selectionEnd =\n selectionEnd +\n 1 +\n socialAddress.length +\n spaceAfterMention.length;\n textarea.focus();\n textarea.dispatchEvent(new Event('input'));\n }}\n />\n \n )}\n {showEmoji2Picker && (\n {\n if (e.target === e.currentTarget) {\n setShowEmoji2Picker(false);\n }\n }}\n >\n {\n setShowEmoji2Picker(false);\n }}\n defaultSearchTerm={showEmoji2Picker?.defaultSearchTerm}\n onSelect={(emojiShortcode) => {\n const textarea = textareaRef.current;\n if (!textarea) return;\n const { selectionStart, selectionEnd } = textarea;\n const text = textarea.value;\n const textBeforeEmoji = text.slice(0, selectionStart);\n const spaceBeforeEmoji = textBeforeEmoji\n ? /[\\s\\t\\n\\r]$/.test(textBeforeEmoji)\n ? ''\n : ' '\n : '';\n const textAfterEmoji = text.slice(selectionEnd);\n const spaceAfterEmoji = /^[\\s\\t\\n\\r]/.test(textAfterEmoji)\n ? ''\n : ' ';\n const newText =\n textBeforeEmoji +\n spaceBeforeEmoji +\n emojiShortcode +\n spaceAfterEmoji +\n textAfterEmoji;\n textarea.value = newText;\n textarea.selectionStart = textarea.selectionEnd =\n selectionEnd + emojiShortcode.length + spaceAfterEmoji.length;\n textarea.focus();\n textarea.dispatchEvent(new Event('input'));\n }}\n />\n \n )}\n {showGIFPicker && (\n {\n if (e.target === e.currentTarget) {\n setShowGIFPicker(false);\n }\n }}\n >\n setShowGIFPicker(false)}\n onSelect={({ url, type, alt_text }) => {\n console.log('GIF URL', url);\n if (mediaAttachments.length >= maxMediaAttachments) {\n alert(\n `You can only attach up to ${maxMediaAttachments} files.`,\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: 'Downloading GIF…',\n duration: -1,\n });\n const blob = await fetch(url, {\n referrerPolicy: 'no-referrer',\n }).then((res) => res.blob());\n const file = new File(\n [blob],\n type === 'video/mp4' ? 'video.mp4' : 'image.gif',\n {\n type,\n },\n );\n const newMediaAttachments = [\n ...mediaAttachments,\n {\n file,\n type,\n size: file.size,\n id: null,\n description: alt_text || '',\n },\n ];\n setMediaAttachments(newMediaAttachments);\n theToast?.hideToast?.();\n } catch (err) {\n console.error(err);\n theToast?.hideToast?.();\n showToast('Failed to download GIF');\n }\n })();\n }}\n />\n \n )}\n
    \n );\n}\n\nfunction autoResizeTextarea(textarea) {\n if (!textarea) return;\n const { value, offsetHeight, scrollHeight, clientHeight } = textarea;\n if (offsetHeight < window.innerHeight) {\n // NOTE: This check is needed because the offsetHeight return 50000 (really large number) on first render\n // No idea why it does that, will re-investigate in far future\n const offset = offsetHeight - clientHeight;\n const height = value ? scrollHeight + offset + 'px' : null;\n textarea.style.height = height;\n }\n}\n\nasync function _getCustomEmojis(instance, masto) {\n const emojis = await masto.v1.customEmojis.list();\n const visibleEmojis = emojis.filter((e) => e.visibleInPicker);\n const searcher = new Fuse(visibleEmojis, {\n keys: ['shortcode'],\n findAllMatches: true,\n });\n return [visibleEmojis, searcher];\n}\nconst getCustomEmojis = pmem(_getCustomEmojis, {\n // Limit by time to reduce memory usage\n // Cached by instance\n matchesArg: (cacheKeyArg, keyArg) => cacheKeyArg.instance === keyArg.instance,\n maxAge: 30 * 60 * 1000, // 30 minutes\n});\n\nconst detectLangs = (text) => {\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 { masto, instance } = api();\n const [text, setText] = useState(ref.current?.value || '');\n const {\n maxCharacters,\n performSearch = () => {},\n onTrigger = () => {},\n ...textareaProps\n } = props;\n // const snapStates = useSnapshot(states);\n // const charCount = snapStates.composerCharacterCount;\n\n // const customEmojis = useRef();\n const searcherRef = useRef();\n useEffect(() => {\n getCustomEmojis(instance, masto)\n .then((r) => {\n const [emojis, searcher] = r;\n searcherRef.current = searcher;\n })\n .catch((e) => {\n console.error(e);\n });\n }, []);\n\n const textExpanderRef = useRef();\n const textExpanderTextRef = useRef('');\n useEffect(() => {\n let handleChange, handleValue, handleCommited;\n if (textExpanderRef.current) {\n handleChange = (e) => {\n // console.log('text-expander-change', 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 emojis = customEmojis.current.filter((emoji) =>\n // emoji.shortcode.startsWith(text),\n // );\n // const emojis = filterShortcodes(customEmojis.current, text);\n const results = searcherRef.current?.search(text, {\n limit: 5,\n });\n let html = '';\n results.forEach(({ item: emoji }) => {\n const { shortcode, url } = emoji;\n html += `\n
  • \n \"\" \n ${encodeHTML(shortcode)}\n
  • `;\n });\n html += `
  • More…
  • `;\n // console.log({ emojis, html });\n menu.innerHTML = html;\n provide(\n Promise.resolve({\n matched: results.length > 0,\n fragment: menu,\n }),\n );\n return;\n }\n\n const type = {\n '@': 'accounts',\n '#': 'hashtags',\n }[key];\n provide(\n new Promise((resolve) => {\n const searchResults = performSearch({\n type,\n q: text,\n limit: 5,\n });\n searchResults.then((value) => {\n if (text !== textExpanderTextRef.current) {\n return;\n }\n console.log({ value, type, v: value[type] });\n const results = value[type] || value;\n console.log('RESULTS', value, results);\n let html = '';\n results.forEach((result) => {\n const {\n name,\n avatarStatic,\n displayName,\n username,\n acct,\n emojis,\n history,\n } = result;\n const displayNameWithEmoji = emojifyText(displayName, emojis);\n // const item = menuItem.cloneNode();\n if (acct) {\n html += `\n
  • \n \n \"\"\n \n \n ${displayNameWithEmoji || username}\n
    @${encodeHTML(\n acct,\n )}\n
    \n
  • \n `;\n } else {\n const total = history?.reduce?.(\n (acc, cur) => acc + +cur.uses,\n 0,\n );\n html += `\n
  • \n #${encodeHTML(name)}\n ${\n total\n ? `${shortenNumber(total)}`\n : ''\n }\n
  • \n `;\n }\n });\n if (type === 'accounts') {\n html += `
  • More…
  • `;\n }\n menu.innerHTML = html;\n console.log('MENU', results, menu);\n resolve({\n matched: results.length > 0,\n fragment: menu,\n });\n });\n }),\n );\n };\n\n textExpanderRef.current.addEventListener(\n 'text-expander-change',\n handleChange,\n );\n\n handleValue = (e) => {\n const { key, item } = e.detail;\n const { value, more } = item.dataset;\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 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 textExpanderRef.current.addEventListener(\n 'text-expander-value',\n handleValue,\n );\n\n handleCommited = (e) => {\n const { input } = e.detail;\n setText(input.value);\n // fire input event\n if (ref.current) {\n const event = new Event('input', { bubbles: true });\n ref.current.dispatchEvent(event);\n }\n };\n\n textExpanderRef.current.addEventListener(\n 'text-expander-committed',\n handleCommited,\n );\n }\n\n return () => {\n if (textExpanderRef.current) {\n textExpanderRef.current.removeEventListener(\n 'text-expander-change',\n handleChange,\n );\n textExpanderRef.current.removeEventListener(\n 'text-expander-value',\n handleValue,\n );\n textExpanderRef.current.removeEventListener(\n 'text-expander-committed',\n handleCommited,\n );\n }\n };\n }, []);\n\n useEffect(() => {\n // Resize observer for textarea\n const textarea = ref.current;\n if (!textarea) return;\n const resizeObserver = new ResizeObserver(() => {\n // Get height of textarea, set height to textExpander\n if (textExpanderRef.current) {\n const { height } = textarea.getBoundingClientRect();\n textExpanderRef.current.style.height = height + 'px';\n }\n });\n resizeObserver.observe(textarea);\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 const langs = detectLangs(text);\n if (langs?.length) {\n onTrigger?.({\n name: 'auto-detect-language',\n languages: langs,\n });\n }\n }, 2000);\n\n return (\n \n {\n // Get line before cursor position after pressing 'Enter'\n const { key, target } = e;\n if (key === 'Enter' && !(e.ctrlKey || e.metaKey)) {\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 // Replace zero-width space\n const text = target.value.replace(/\\u200b/g, '');\n setText(text);\n autoResizeTextarea(target);\n props.onInput?.(e);\n throttleHighlightText(text);\n debouncedAutoDetectLanguage();\n }}\n style={{\n width: '100%',\n height: '4em',\n // '--text-weight': (1 + charCount / 140).toFixed(1) || 1,\n }}\n onScroll={(e) => {\n if (composeHighlightRef.current) {\n const { scrollTop } = e.target;\n composeHighlightRef.current.scrollTop = scrollTop;\n }\n }}\n />\n \n \n );\n});\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 \n );\n}\n\nfunction prettyBytes(bytes) {\n const units = ['bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n let unitIndex = 0;\n while (bytes >= 1024) {\n bytes /= 1024;\n unitIndex++;\n }\n return `${bytes.toFixed(0).toLocaleString()} ${units[unitIndex]}`;\n}\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 onDescriptionChange = () => {},\n onRemove = () => {},\n}) {\n const [uiState, setUIState] = useState('default');\n const supportsEdit = supports('@mastodon/edit-media-attributes');\n const { type, id, file } = attachment;\n const url = useMemo(\n () => (file ? URL.createObjectURL(file) : attachment.url),\n [file, attachment.url],\n );\n console.log({ attachment });\n\n const checkMaxError = !!file?.size;\n const configuration = checkMaxError ? getCurrentInstanceConfiguration() : {};\n const {\n mediaAttachments: {\n imageSizeLimit,\n imageMatrixLimit,\n videoSizeLimit,\n videoMatrixLimit,\n videoFrameRateLimit,\n } = {},\n } = configuration || {};\n\n const [maxError, setMaxError] = useState(() => {\n if (!checkMaxError) return null;\n if (\n type.startsWith('image') &&\n imageSizeLimit &&\n file.size > imageSizeLimit\n ) {\n return {\n type: 'imageSizeLimit',\n details: {\n imageSize: file.size,\n imageSizeLimit,\n },\n };\n } else if (\n type.startsWith('video') &&\n videoSizeLimit &&\n file.size > videoSizeLimit\n ) {\n return {\n type: 'videoSizeLimit',\n details: {\n videoSize: file.size,\n videoSizeLimit,\n },\n };\n }\n return null;\n });\n\n const [imageMatrix, setImageMatrix] = useState({});\n useEffect(() => {\n if (!checkMaxError || !imageMatrixLimit) return;\n if (imageMatrix?.matrix > imageMatrixLimit) {\n setMaxError({\n type: 'imageMatrixLimit',\n details: {\n imageMatrix: imageMatrix?.matrix,\n imageMatrixLimit,\n width: imageMatrix?.width,\n height: imageMatrix?.height,\n },\n });\n }\n }, [imageMatrix, imageMatrixLimit, checkMaxError]);\n\n const [videoMatrix, setVideoMatrix] = useState({});\n useEffect(() => {\n if (!checkMaxError || !videoMatrixLimit) return;\n if (videoMatrix?.matrix > videoMatrixLimit) {\n setMaxError({\n type: 'videoMatrixLimit',\n details: {\n videoMatrix: videoMatrix?.matrix,\n videoMatrixLimit,\n width: videoMatrix?.width,\n height: videoMatrix?.height,\n },\n });\n }\n }, [videoMatrix, videoMatrixLimit, checkMaxError]);\n\n const [description, setDescription] = useState(attachment.description);\n const [suffixType, subtype] = type.split('/');\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
    \n Uploaded\n

    \n {attachment.description || No description}\n

    \n
    \n ) : (\n {\n const { value } = e.target;\n setDescription(value);\n // debouncedOnDescriptionChange(value);\n }}\n >\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 `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 `Dimension too large. Uploading might encounter issues. Try reduce dimension from ${width.toLocaleString()}×${height.toLocaleString()}px to ${newWidth.toLocaleString()}×${newHeight.toLocaleString()}px.`;\n }\n case 'videoSizeLimit': {\n const { videoSize, videoSizeLimit } = details;\n return `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 `Dimension too large. Uploading might encounter issues. Try reduce dimension from ${width.toLocaleString()}×${height.toLocaleString()}px to ${newWidth.toLocaleString()}×${newHeight.toLocaleString()}px.`;\n }\n case 'videoFrameRateLimit': {\n // Not possible to detect this on client-side for now\n return 'Frame rate too high. Uploading might encounter issues.';\n }\n }\n };\n\n return (\n <>\n
    \n {\n setShowModal(true);\n }}\n >\n {suffixType === 'image' ? (\n {\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 {\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
    \n {descTextarea}\n
    \n \n \n \n {!!maxError && (\n {\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 \n \n )}\n
    \n \n {showModal && (\n {\n setShowModal(false);\n }}\n >\n
    \n {\n setShowModal(false);\n }}\n >\n \n \n
    \n

    \n {\n {\n image: 'Edit image description',\n video: 'Edit video description',\n audio: 'Edit audio description',\n }[suffixType]\n }\n

    \n
    \n
    \n
    \n {suffixType === 'image' ? (\n \"\"\n ) : suffixType === 'video' || suffixType === 'gifv' ? (\n
    \n
    \n {descTextarea}\n
    \n {suffixType === 'image' &&\n /^(png|jpe?g|gif|webp)$/i.test(subtype) &&\n !!states.settings.mediaAltGenerator &&\n !!IMG_ALT_API_URL && (\n \n \n \n }\n >\n {\n setUIState('loading');\n toastRef.current = showToast({\n text: 'Generating description. Please wait...',\n duration: -1,\n });\n // POST with multipart\n (async function () {\n try {\n const body = new FormData();\n body.append('image', file);\n const response = await fetch(IMG_ALT_API_URL, {\n method: 'POST',\n body,\n }).then((r) => r.json());\n if (response.error) {\n throw new Error(response.error);\n }\n setDescription(response.description);\n } catch (e) {\n console.error(e);\n showToast(\n `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 \n {lang && lang !== 'en' ? (\n \n Generate description…\n
    \n (English)\n
    \n ) : (\n Generate description…\n )}\n \n {!!lang && lang !== 'en' && (\n {\n setUIState('loading');\n toastRef.current = showToast({\n text: 'Generating description. Please wait...',\n duration: -1,\n });\n // POST with multipart\n (async function () {\n try {\n const body = new FormData();\n body.append('image', file);\n const params = `?lang=${lang}`;\n const response = await fetch(\n IMG_ALT_API_URL + params,\n {\n method: 'POST',\n body,\n },\n ).then((r) => r.json());\n if (response.error) {\n throw new Error(response.error);\n }\n setDescription(response.description);\n } catch (e) {\n console.error(e);\n showToast(\n `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 \n \n Generate description…\n
    ({localeCode2Text(lang)}){' '}\n \n — experimental\n \n
    \n \n )}\n \n )}\n {\n setShowModal(false);\n }}\n disabled={uiState === 'loading'}\n >\n Done\n \n
    \n
    \n
    \n
    \n \n )}\n \n );\n}\n\nfunction Poll({\n lang,\n poll,\n disabled,\n onInput = () => {},\n maxOptions,\n maxExpiration,\n minExpiration,\n maxCharactersPerOption,\n}) {\n const { options, expiresIn, multiple } = poll;\n\n return (\n
    \n
    \n {options.map((option, i) => (\n
    \n {\n const { value } = e.target;\n options[i] = value;\n onInput(poll);\n }}\n />\n {\n options.splice(i, 1);\n onInput(poll);\n }}\n >\n \n \n
    \n ))}\n
    \n
    \n = maxOptions}\n onClick={() => {\n options.push('');\n onInput(poll);\n }}\n >\n +\n {' '}\n \n \n
    \n
    \n {\n onInput(null);\n }}\n >\n Remove poll\n \n
    \n
    \n );\n}\n\nfunction filterShortcodes(emojis, searchTerm) {\n searchTerm = searchTerm.toLowerCase();\n\n // Return an array of shortcodes that start with or contain the search term, sorted by relevance and limited to the first 5\n return emojis\n .sort((a, b) => {\n let aLower = a.shortcode.toLowerCase();\n let bLower = b.shortcode.toLowerCase();\n\n let aStartsWith = aLower.startsWith(searchTerm);\n let bStartsWith = bLower.startsWith(searchTerm);\n let aContains = aLower.includes(searchTerm);\n let bContains = bLower.includes(searchTerm);\n let bothStartWith = aStartsWith && bStartsWith;\n let bothContain = aContains && bContains;\n\n return bothStartWith\n ? a.length - b.length\n : aStartsWith\n ? -1\n : bStartsWith\n ? 1\n : bothContain\n ? a.length - b.length\n : aContains\n ? -1\n : bContains\n ? 1\n : 0;\n })\n .slice(0, 5);\n}\n\nfunction encodeHTML(str) {\n return str.replace(/[&<>\"']/g, function (char) {\n return '&#' + char.charCodeAt(0) + ';';\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\nfunction MentionModal({\n onClose = () => {},\n onSelect = () => {},\n defaultSearchTerm,\n}) {\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 },\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 },\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 },\n );\n\n return (\n
    \n {!!onClose && (\n \n )}\n
    \n {\n e.preventDefault();\n debouncedLoadAccounts.flush?.();\n // const searchTerm = inputRef.current.value;\n // debouncedLoadAccounts(searchTerm);\n }}\n >\n {\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 defaultValue={defaultSearchTerm || ''}\n />\n \n
    \n
    \n {accounts?.length > 0 ? (\n \n {accounts.map((account, i) => {\n const relationship = relationshipsMap[account.id];\n return (\n \n \n {\n selectAccount(account);\n }}\n >\n \n \n \n );\n })}\n \n ) : uiState === 'loading' ? (\n
    \n \n
    \n ) : uiState === 'error' ? (\n
    \n

    Error loading accounts

    \n
    \n ) : null}\n
    \n
    \n );\n}\n\nfunction CustomEmojisModal({\n masto,\n instance,\n onClose = () => {},\n onSelect = () => {},\n defaultSearchTerm,\n}) {\n const [uiState, setUIState] = useState('default');\n const customEmojisList = useRef([]);\n const [customEmojis, setCustomEmojis] = useState([]);\n const recentlyUsedCustomEmojis = useMemo(\n () => store.account.get('recentlyUsedCustomEmojis') || [],\n );\n const searcherRef = useRef();\n useEffect(() => {\n setUIState('loading');\n (async () => {\n try {\n const [emojis, searcher] = await getCustomEmojis(instance, masto);\n console.log('emojis', emojis);\n searcherRef.current = searcher;\n setCustomEmojis(emojis);\n setUIState('default');\n } catch (e) {\n setUIState('error');\n console.error(e);\n }\n })();\n }, []);\n\n const customEmojisCatList = useMemo(() => {\n // Group emojis by category\n const emojisCat = {\n '--recent--': recentlyUsedCustomEmojis.filter((emoji) =>\n customEmojis.find((e) => e.shortcode === emoji.shortcode),\n ),\n };\n const othersCat = [];\n customEmojis.forEach((emoji) => {\n customEmojisList.current?.push?.(emoji);\n if (!emoji.category) {\n othersCat.push(emoji);\n return;\n }\n if (!emojisCat[emoji.category]) {\n emojisCat[emoji.category] = [];\n }\n emojisCat[emoji.category].push(emoji);\n });\n if (othersCat.length) {\n emojisCat['--others--'] = othersCat;\n }\n return emojisCat;\n }, [customEmojis]);\n\n const scrollableRef = useRef();\n const [matches, setMatches] = useState(null);\n const 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 return (\n
    \n {!!onClose && (\n \n )}\n
    \n
    \n Custom emojis{' '}\n {uiState === 'loading' ? (\n \n ) : (\n • {instance}\n )}\n
    \n {\n e.preventDefault();\n const emoji = matches[0];\n if (emoji) {\n onSelectEmoji(`:${emoji.shortcode}:`);\n }\n }}\n >\n \n \n
    \n
    \n {matches !== null ? (\n
      \n {matches.map((emoji) => (\n
    • \n {\n onSelectEmoji(`:${emoji.shortcode}:`);\n }}\n showCode\n />\n
    • \n ))}\n
    \n ) : (\n
    \n {uiState === 'error' && (\n
    \n

    Error loading custom emojis

    \n
    \n )}\n {uiState === 'default' &&\n Object.entries(customEmojisCatList).map(\n ([category, emojis]) =>\n !!emojis?.length && (\n <>\n
    \n {{\n '--recent--': 'Recently used',\n '--others--': 'Others',\n }[category] || category}\n
    \n \n \n ),\n )}\n
    \n )}\n
    \n
    \n );\n}\n\nconst CustomEmojisList = memo(({ emojis, onSelect }) => {\n const [max, setMax] = useState(CUSTOM_EMOJIS_COUNT);\n const showMore = emojis.length > max;\n return (\n
    \n {emojis.slice(0, max).map((emoji) => (\n {\n onSelect(`:${emoji.shortcode}:`);\n }}\n />\n ))}\n {showMore && (\n setMax(max + CUSTOM_EMOJIS_COUNT)}\n >\n {(emojis.length - max).toLocaleString()} more…\n \n )}\n
    \n );\n});\n\nconst CustomEmojiButton = memo(({ emoji, onClick, showCode }) => {\n const addEdges = (e) => {\n // Add edge-left or edge-right class based on self position relative to scrollable parent\n // If near left edge, add edge-left, if near right edge, add edge-right\n const buffer = 88;\n const parent = e.currentTarget.closest('main');\n if (parent) {\n const rect = parent.getBoundingClientRect();\n const selfRect = e.currentTarget.getBoundingClientRect();\n const targetClassList = e.currentTarget.classList;\n if (selfRect.left < rect.left + buffer) {\n targetClassList.add('edge-left');\n targetClassList.remove('edge-right');\n } else if (selfRect.right > rect.right - buffer) {\n targetClassList.add('edge-right');\n targetClassList.remove('edge-left');\n } else {\n targetClassList.remove('edge-left', 'edge-right');\n }\n }\n };\n\n return (\n \n \n {!!emoji.staticUrl && (\n \n )}\n \n \n {showCode && (\n <>\n {' '}\n {emoji.shortcode}\n \n )}\n \n );\n});\n\nconst GIFS_PER_PAGE = 20;\nfunction GIFPickerModal({ onClose = () => {}, onSelect = () => {} }) {\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 };\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
    \n {!!onClose && (\n \n )}\n
    \n {\n e.preventDefault();\n fetchGIFs({ offset: 0 });\n }}\n >\n \n \n \n
    \n
    \n {uiState === 'default' && (\n
    \n

    Type to search GIFs

    \n
    \n )}\n {uiState === 'loading' && !results?.data?.length && (\n
    \n \n
    \n )}\n {results?.data?.length > 0 ? (\n <>\n
      \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
    • \n {\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 \n \n {strippedWebP && (\n \n )}\n {\n e.target.style.backgroundColor = 'transparent';\n }}\n />\n \n
      {alt_text || title}
      \n \n \n
    • \n );\n })}\n
    \n

    \n {results.pagination?.offset > 0 && (\n {\n fetchGIFs({\n offset: results.pagination?.offset - GIFS_PER_PAGE,\n });\n }}\n >\n \n Previous\n \n )}\n \n {results.pagination?.offset + results.pagination?.count <\n results.pagination?.total_count && (\n {\n fetchGIFs({\n offset: results.pagination?.offset + GIFS_PER_PAGE,\n });\n }}\n >\n Next \n \n )}\n

    \n \n ) : (\n uiState === 'results' && (\n
    \n

    No results

    \n
    \n )\n )}\n {uiState === 'error' && (\n
    \n

    Error loading GIFs

    \n
    \n )}\n
    \n
    \n );\n}\n\nexport default Compose;\n"],"names":["Combobox","input","list","tabInsertsSuggestions","defaultFirstOption","event","keyboardBindings","trackComposition","commitWithElement","_a","visible","indexDiff","focusEl","els","focusIndex","indexOfItem","newIndex","target","el","scrollTo","combobox","commit","fireCommitEvent","container","inViewport","element","scrollTop","containerBottom","top","bottom","boundary","query","text","key","cursor","multiWord","lookBackIndex","lastMatchPosition","keyIndex","pre","CustomHTMLElement","InputStyleCloneUpdateEvent","CloneRegistry","_InputStyleCloneElement","__privateAdd","_InputStyleCloneElement_instances","_styleObserver","__privateMethod","updateStyles_fn","_resizeObserver","requestUpdateLayout_fn","_inputRef","_container","_xOffset","_yOffset","_isLayoutUpdating","_onInput","updateText_fn","_onDocumentScrollOrResize","usingInput_fn","__privateSet","__privateGet","clone","fn","updateLayout_fn","inputStyle","inputRect","cloneRect","prop","propertiesToCopy","InputStyleCloneElement","e","_InputRange","startOffset","endOffset","_InputRange_instances","_inputElement","_startOffset","_endOffset","selectionStart","selectionEnd","offset","clampOffset_fn","toStart","createCloneRange_fn","styleClone_get","cloneElement_get","range","textNode","InputRange","states","TextExpander","expander","match","menu","_b","position","caretRect","targetPosition","currentPosition","delta","currentStyle","item","beginning","remaining","detail","suffix","value","found","providers","provide","result","x","TextExpanderElement","keysAttr","keys","multiWordAttr","globalMultiWord","state","ansiRegex","onlyFirst","pattern","regex","stripAnsi","string","segmenter","stringLength","countAnsiEscapeCodes","length","_","poweredByGiphyURL","PHANPY_IMG_ALT_API_URL","IMG_ALT_API_URL","PHANPY_GIPHY_API_KEY","GIPHY_API_KEY","import","supportedLanguagesMap","supportedLanguages","reduce","acc","l","code","common","native","expiryOptions","expirySeconds","Object","values","oneDay","expiresInFromExpiresAt","expiresAt","Date","getTime","now","find","s","document","createElement","role","className","windowMargin","observer","IntersectionObserver","entries","forEach","entry","isIntersecting","left","width","boundingClientRect","innerWidth","window","insetInlineStart","isRTL","style","observe","DEFAULT_LANG","localeMatch","Intl","DateTimeFormat","resolvedOptions","locale","navigator","languages","map","urlRegexObj","RegExp","urlRegex","source","flags","usernameRegex","urlPlaceholder","countableText","inputText","replace","USERNAME_RE","MENTION_RE","HASHTAG_RE","SHORTCODE_RE_FRAGMENT","SCAN_RE","Segmenter","escapeHTML","highlightText","maxCharacters","Infinity","composerCharacterCount","withinLimitHTML","exceedLimitHTML","htmlSegments","segment","index","rtf","RelativeTimeFormat","CUSTOM_EMOJIS_COUNT","Compose","onClose","replyToStatus","editStatus","draftStatus","standalone","hasOpener","console","masto","instance","uiState","setUIState","useState","UID","uid","log","currentAccount","currentAccountInfo","maxMediaAttachments","charactersReservedPerUrl","imageMatrixLimit","supportedMimeTypes","imageSizeLimit","videoSizeLimit","videoMatrixLimit","videoFrameRateLimit","maxExpiration","maxOptions","maxCharactersPerOption","minExpiration","spoilerTextRef","useRef","textareaRef","store","prevLanguage","language","sensitive","setMediaAttachments","setLanguage","oninputTextarea","poll","account","focusTextarea","dispatchEvent","setTimeout","spoilerText","useEffect","visibility2","language2","sensitive2","visibility","current","m","allMentions","prefs","setSensitive","poll2","mediaAttachments","options","expiresIn","statusSource","dataset","mediaAttachments2","setVisibility","composablePoll","status","o","formRef","hasValue","hasMediaAttachments","isSelf","hasOnlyAcct","confirmClose","hasIDMediaAttachments","beforeUnloadCopy","id","handleBeforeUnload","sameWithSource","getCharCount","updateCharCount","supportsCloseWatcher","useHotkeys","yes","addEventListener","capture","modals","hasModal","hasOnlyComposer","prevBackgroundDraft","count","escDownRef","ignoreEventWhen","useCloseWatcher","canClose","draftKey","getCurrentAccountNS","backgroundDraft","useInterval","db","handleItems","username","acct","items","i2","file","files","drafts","allowedFiles","updatedAt","then","debug","error","mediaFiles","handleDragover","includes","showMentionPicker","setShowMentionPicker","showEmoji2Picker","setShowEmoji2Picker","showGIFPicker","autoDetectedLanguages","setAutoDetectedLanguages","topSupportedLanguages","restSupportedLanguages","useMemo","topLanguages","contentTranslationHideLanguages","max","restLanguages","commonB","type","size","url","codeA","commonA","codeB","onMinimize","saveUnsavedDraft","_jsxs","dataTransfer","_jsx","children","passData","Icon","alert","settings","sort","class","avatarStatic","instanceURL","onClick","opener","composerState","Status","replyToStatusMonthsAgo","_Fragment","formData","previewMode","option","media","pointerEvents","opacity","mediaPromises","attachment","description","params2","removeNullUndefined","res","results","some","hasNoDescriptions","params","saveStatus","newStatus","allSettled","e2","media_attributes","in_reply_to_id","onInput","onChange","limit","focus","q","title","icon","action","disabled","MediaAttachment","attachments","newAttachments","required","fileID","performSearch","v1","search","resolve","v2","fetch","onTrigger","defaultSearchTerm","newPoll","setPoll","onDescriptionChange","i","accept","multiple","setShowGIFPicker","Array","Loader","CharCountMeter","Modal","MentionModal","socialAddress","textarea","abrupt","textBeforeMention","textAfterMention","newText","spaceBeforeMention","spaceAfterMention","set","CustomEmojisModal","emojiShortcode","textBeforeEmoji","spaceBeforeEmoji","spaceAfterEmoji","textAfterEmoji","GIFPickerModal","alt_text","showToast","blob","onSelect","theToast","offsetHeight","scrollHeight","clientHeight","height","visibleEmojis","searcher","getCustomEmojis","pmem","_getCustomEmojis","cacheKeyArg","keyArg","detectLangs","langs","lang","newMediaAttachments","setText","ref","props","searcherRef","r","emojis","textExpanderRef","textExpanderTextRef","text2","emoji","shortcode","encodeHTML","forwardRef","html","textareaProps","handleChange","total","history","cur","matched","handleValue","more","searchResults","v","name","displayName","handleCommited","shortenNumber","slowHighlightPerf","composeHighlightRef","start","end","debouncedAutoDetectLanguage","useDebouncedCallback","dom","mark","Event","resizeObserver","throttleHighlightText","bullet","postSpaces","anything","lastLine","innerHTML","number","preSpaces","newBullet","pos","innerText","autoResizeTextarea","dir","rows","cols","onKeyDown","hidden","charCount","leftChars","ctrlKey","setRangeText","setSelectionRange","prettyBytes","bytes","unitIndex","units","scaleDimension","newWidth","scalingFactor","newHeight","onRemove","supportsEdit","supports","onScroll","checkMaxError","configuration","getCurrentInstanceConfiguration","snapStates","setImageMatrix","imageMatrix","setMaxError","matrix","Math","videoMatrix","setDescription","suffixType","subtype","debouncedOnDescriptionChange","timer","maxError","details","toastRef","maxErrorText","err","type2","imageSizeLimit2","imageSize","imageMatrixLimit2","showModal","videoSize","clearTimeout","videoSizeLimit2","descTextarea","videoMatrix2","videoMatrixLimit2","autoCapitalize","autoComplete","naturalWidth","naturalHeight","maxErrorToast","setVideoMatrix","videoWidth","videoHeight","setShowModal","tabIndex","src","onLoad","playsinline","onLoadedMetadata","Menu2","body","response","MenuItem","menuButton","localeCode2Text","append","Poll","checked","label","maxlength","placeholder","str","char","obj","accounts2","relationships","fetchRelationships","relationshipsMap","setRelationshipsMap","filter","setAccounts","loadRelationships","loadAccounts","inputRef","filterShortcodes","searchTerm","bLower","aStartsWith","bStartsWith","aContains","bothContain","bContains","selectedAccount","accounts","selectedIndex","selectAccount","listRef","setSelectedIndex","selectedItem","term","debouncedLoadAccounts","enableOnFormTags","AccountBlock","relationship","inline","customEmojis","setCustomEmojis","onSubmit","recentlyUsedCustomEmojis","autocorrect","customEmojisList","othersCat","emojisCat","useCallback","_c","scrollableRef","setMatches","onFind","onSelectEmoji","recentlyUsedCustomEmojis2","recentlyUsedEmojiIndex","emoji2","customEmojisCatList","category","matches","CustomEmojiButton","queueMicrotask","splice","CustomEmojisList","setMax","showMore","memo","showCode","parent","rect","selfRect","targetClassList","addEdges","GIFS_PER_PAGE","setResults","qRef","closest","getBoundingClientRect","remove","staticUrl","loading","debouncedOnInput","currentOffset","gif","fixed_height_downsampled","original","pagination","fixed_height_small","fixed_height","theImage","urlObj","strippedWebP","webp","webpObj","url2","theURL","mp4","urlObj2","strippedURL2","strippedURL","images","fetchGIFs","parse"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4]} \ No newline at end of file diff --git a/assets/compose-vcUtIZ0p.js b/assets/compose-vcUtIZ0p.js deleted file mode 100644 index ad0f63a..0000000 --- a/assets/compose-vcUtIZ0p.js +++ /dev/null @@ -1,2 +0,0 @@ -import{p,H as w,S,_ as i,c as e,C as f,X as _}from"./useTitle-KMkGka9H.js";window.opener&&(console=window.opener.console);function h(){var s,a;const[t,d]=p("default"),{editStatus:n,replyToStatus:o,draftStatus:l}=window.__COMPOSE__||{};return w(n?"Editing source status":o?`Replying to @${((s=o.account)==null?void 0:s.acct)||((a=o.account)==null?void 0:a.username)}`:"Compose"),i(()=>{S()},[]),i(()=>{if(t==="closed"){try{window.opener.focus()}catch{}window.close()}},[t]),t==="closed"?e("div",{class:"box",children:[e("p",{children:"You may close this page now."}),e("p",{children:e("button",{onClick:()=>{window.close()},children:"Close window"})})]}):e(f,{editStatus:n,replyToStatus:o,draftStatus:l,standalone:!0,hasOpener:window.opener,onClose:c=>{const{newStatus:r,fn:u=()=>{}}=c||{};try{r&&window.opener.__STATES__.reloadStatusPage++,u(),d("closed")}catch{}}})}_(e(h,{}),document.getElementById("app-standalone")); -//# sourceMappingURL=compose-vcUtIZ0p.js.map diff --git a/assets/compose-vcUtIZ0p.js.map b/assets/compose-vcUtIZ0p.js.map deleted file mode 100644 index ee36e36..0000000 --- a/assets/compose-vcUtIZ0p.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"compose-vcUtIZ0p.js","sources":["../../src/compose.jsx"],"sourcesContent":["import './index.css';\n\nimport './app.css';\n\nimport './polyfills';\n\nimport { render } from 'preact';\nimport { useEffect, useState } from 'preact/hooks';\n\nimport ComposeSuspense from './components/compose-suspense';\nimport { initStates } from './utils/states';\nimport useTitle from './utils/useTitle';\n\nif (window.opener) {\n console = window.opener.console;\n}\n\nfunction App() {\n const [uiState, setUIState] = useState('default');\n\n const { editStatus, replyToStatus, draftStatus } = window.__COMPOSE__ || {};\n\n useTitle(\n editStatus\n ? 'Editing source status'\n : replyToStatus\n ? `Replying to @${\n replyToStatus.account?.acct || replyToStatus.account?.username\n }`\n : 'Compose',\n );\n\n useEffect(() => {\n initStates();\n }, []);\n\n useEffect(() => {\n if (uiState === 'closed') {\n try {\n // Focus parent window\n window.opener.focus();\n } catch (e) {}\n window.close();\n }\n }, [uiState]);\n\n if (uiState === 'closed') {\n return (\n
    \n

    You may close this page now.

    \n

    \n {\n window.close();\n }}\n >\n Close window\n \n

    \n
    \n );\n }\n\n console.debug('OPEN COMPOSE');\n\n return (\n {\n const { newStatus, fn = () => {} } = results || {};\n try {\n if (newStatus) {\n window.opener.__STATES__.reloadStatusPage++;\n }\n fn();\n setUIState('closed');\n } catch (e) {}\n }}\n />\n );\n}\n\nrender(, document.getElementById('app-standalone'));\n"],"names":["window","opener","console","App","uiState","setUIState","useState","editStatus","replyToStatus","draftStatus","__COMPOSE__","account","acct","username","useEffect","initStates","focus","close","_jsxs","class","children","_jsx","onClick","standalone","hasOpener","newStatus","results","fn","render"],"mappings":"2EAaIA,OAAOC,SACTC,QAAUF,OAAOC,OAAOC,SAG1B,SAASC,GAAM,SACb,KAAM,CAACC,EAASC,CAAU,EAAIC,EAAS,SAAS,EAE1C,CAAEC,WAAAA,EAAYC,cAAAA,EAAeC,YAAAA,CAAAA,EAAgBT,OAAOU,aAAe,GA0BzE,OAvBEH,EAAAA,EACI,wBACAC,EACC,kBACCA,EAAAA,EAAcG,UAAdH,YAAAA,EAAuBI,SAAQJ,EAAAA,EAAcG,UAAdH,YAAAA,EAAuBK,SACvD,GACD,SACN,EAEAC,EAAU,IAAM,CACHC,GACb,EAAG,CAAE,CAAA,EAELD,EAAU,IAAM,CACd,GAAIV,IAAY,SAAU,CACpB,GAAA,CAEFJ,OAAOC,OAAOe,aACJ,CAAC,CACbhB,OAAOiB,MAAM,CACf,CAAA,EACC,CAACb,CAAO,CAAC,EAERA,IAAY,SAEZc,EAAA,MAAA,CAAKC,MAAM,MAAKC,UACdC,EAAA,IAAA,CAAAD,SAAG,8BAAA,CAA+B,EAClCC,EAAA,IAAA,CAAAD,SACEC,EAAA,SAAA,CACEC,QAASA,IAAM,CACbtB,OAAOiB,MAAM,CACf,EAAEG,SACH,cAAA,CAEO,CAAA,CACP,CAAC,CAAA,CACD,EAITlB,IAA4B,CAE5B,WAAAK,EAEIA,cAAAA,EACAC,YAAAA,EACAC,WAAAA,GACAc,UAAU,OAAA,OACVC,WAAkBvB,OAEV,UAAAwB,EAAEA,GAAAA,EAAAA,IAAAA,EAAsB,EAACC,GAAA,CAAA,EAAE,GAAIA,CACjCD,GACF,OAAe,OAAA,WAAA,mBAEfE,IACGtB,EAAA,QAAA,CACHA,MAAAA,EACW,CAAA,CACf,CAAA,CAGNuB,EAAAP,EAAAlB,EAAA,CAAA,CAAA,EAAA,SAAA,eAAA,gBAAA,CAAA"} \ No newline at end of file diff --git a/assets/compose-z10cLv8p.js b/assets/compose-z10cLv8p.js deleted file mode 100644 index 885ff2a..0000000 --- a/assets/compose-z10cLv8p.js +++ /dev/null @@ -1,26 +0,0 @@ -var zt=s=>{throw TypeError(s)};var rt=(s,e,n)=>e.has(s)||zt("Cannot "+n);var T=(s,e,n)=>(rt(s,e,"read from private field"),n?n.call(s):e.get(s)),re=(s,e,n)=>e.has(s)?zt("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(s):e.set(s,n),de=(s,e,n,a)=>(rt(s,e,"write to private field"),a?a.call(s,n):e.set(s,n),n),G=(s,e,n)=>(rt(s,e,"access private method"),n);import{B as on,Z as rn,a as _e,a7 as ln,w as Lt,u as cn,i as Ht,b as un,I as K,y as At,h as Nt,a8 as dn,M as Ve,s as ke,a3 as hn,$ as pn,n as mn,K as gn,W as Qe,c as fn,d as St,l as vn,x as bn}from"./fuse-eCqHk9H3.js";import{s as le,a as bt,h as H,A as U,f as yn,al as Wt,d as ze,y as ee,m as xn,am as wn,T as Re,c as t,k as Ce,b as kn,L as et,j as En,D as Fn,u as Cn,q as It,x as Ut}from"./useTitle-KlNTnsJV.js";import{e as zn}from"./tinyld-light-PxOyhYWY.js";import"./index-cp67bciK.js";class Ln{constructor(e,n,{tabInsertsSuggestions:a,defaultFirstOption:r}={}){this.input=e,this.list=n,this.tabInsertsSuggestions=a??!0,this.defaultFirstOption=r??!1,this.isComposing=!1,n.id||(n.id=`combobox-${Math.random().toString().slice(2,6)}`),this.ctrlBindings=!!navigator.userAgent.match(/Macintosh/),this.keyboardEventHandler=m=>An(m,this),this.compositionEventHandler=m=>In(m,this),this.inputHandler=this.clearSelection.bind(this),e.setAttribute("role","combobox"),e.setAttribute("aria-controls",n.id),e.setAttribute("aria-expanded","false"),e.setAttribute("aria-autocomplete","list"),e.setAttribute("aria-haspopup","listbox")}destroy(){this.clearSelection(),this.stop(),this.input.removeAttribute("role"),this.input.removeAttribute("aria-controls"),this.input.removeAttribute("aria-expanded"),this.input.removeAttribute("aria-autocomplete"),this.input.removeAttribute("aria-haspopup")}start(){this.input.setAttribute("aria-expanded","true"),this.input.addEventListener("compositionstart",this.compositionEventHandler),this.input.addEventListener("compositionend",this.compositionEventHandler),this.input.addEventListener("input",this.inputHandler),this.input.addEventListener("keydown",this.keyboardEventHandler),this.list.addEventListener("click",Mt),this.indicateDefaultOption()}stop(){this.clearSelection(),this.input.setAttribute("aria-expanded","false"),this.input.removeEventListener("compositionstart",this.compositionEventHandler),this.input.removeEventListener("compositionend",this.compositionEventHandler),this.input.removeEventListener("input",this.inputHandler),this.input.removeEventListener("keydown",this.keyboardEventHandler),this.list.removeEventListener("click",Mt)}indicateDefaultOption(){var e;this.defaultFirstOption&&((e=Array.from(this.list.querySelectorAll('[role="option"]:not([aria-disabled="true"])')).filter(lt)[0])===null||e===void 0||e.setAttribute("data-combobox-option-default","true"))}navigate(e=1){const n=Array.from(this.list.querySelectorAll('[aria-selected="true"]')).filter(lt)[0],a=Array.from(this.list.querySelectorAll('[role="option"]')).filter(lt),r=a.indexOf(n);if(r===a.length-1&&e===1||r===0&&e===-1){this.clearSelection(),this.input.focus();return}let m=e===1?0:a.length-1;if(n&&r>=0){const v=r+e;v>=0&&v0||s.offsetHeight>0)}function In(s,e){e.isComposing=s.type==="compositionstart",document.getElementById(e.input.getAttribute("aria-controls")||"")&&e.clearSelection()}function Mn(s,e){$n(s,e)||(s.scrollTop=e.offsetTop)}function $n(s,e){const n=s.scrollTop,a=n+s.clientHeight,r=e.offsetTop,m=r+e.clientHeight;return r>=n&&m<=a}const Bn=/\s|\(|\[/;function Tn(s,e,n,{multiWord:a,lookBackIndex:r,lastMatchPosition:m}={multiWord:!1,lookBackIndex:0,lastMatchPosition:null}){let u=s.lastIndexOf(e,n-1);if(u===-1||u=u+e.length+1||s.lastIndexOf(` -`,n-1)>u||s.lastIndexOf(".",n-1)>u)return}else if(s.lastIndexOf(" ",n-1)>u)return;const v=s[u-1];return v&&!Bn.test(v)?void 0:{text:s.substring(u+e.length,n),position:u+e.length}}class _n extends HTMLElement{}class Rn extends Event{constructor(){super("update")}}const ct=new WeakMap;var De,je,Ee,fe,Y,Be,Le,Ae,pt,Se,Ge,Ye,Ze,Pe,Fe;const xt=class xt extends _n{constructor(n){super();re(this,Y);re(this,De,new MutationObserver(()=>G(this,Y,Ye).call(this)));re(this,je,new ResizeObserver(()=>G(this,Y,Ge).call(this)));re(this,Ee);re(this,fe);re(this,Le,0);re(this,Ae,0);re(this,Se,!1);re(this,Pe,()=>G(this,Y,Ze).call(this));re(this,Fe,n=>{G(this,Y,Be).call(this,a=>{(n.target===document||n.target===window||n.target instanceof Node&&n.target.contains(a))&&G(this,Y,Ge).call(this)})});de(this,Ee,new WeakRef(n)),de(this,fe,document.createElement("div")),T(this,fe).style.position="absolute",T(this,fe).style.pointerEvents="none",n.after(T(this,fe)),T(this,fe).appendChild(this)}static for(n){const a=ct.get(n)??new xt(n);return ct.set(n,a),a}forceUpdate(){G(this,Y,Ye).call(this),G(this,Y,Ze).call(this)}connectedCallback(){const n=T(this,Ee).deref();if(!n)return this.remove();this.style.pointerEvents="none",this.style.userSelect="none",this.style.overflow="hidden",this.style.display="block",this.style.visibility="hidden",n instanceof HTMLTextAreaElement?(this.style.whiteSpace="pre-wrap",this.style.wordWrap="break-word"):(this.style.whiteSpace="nowrap",this.style.display="table-cell",this.style.verticalAlign="middle"),this.setAttribute("aria-hidden","true"),G(this,Y,Ye).call(this),G(this,Y,Ze).call(this),T(this,De).observe(n,{attributeFilter:["style","dir"]}),T(this,je).observe(n),document.addEventListener("scroll",T(this,Fe),{capture:!0}),window.addEventListener("resize",T(this,Fe),{capture:!0}),n.addEventListener("input",T(this,Pe),{capture:!0})}disconnectedCallback(){T(this,fe).remove(),T(this,De).disconnect(),T(this,je).disconnect(),document.removeEventListener("scroll",T(this,Fe),{capture:!0}),window.removeEventListener("resize",T(this,Fe),{capture:!0});const n=T(this,Ee).deref();n&&(n.removeEventListener("input",T(this,Pe),{capture:!0}),ct.delete(n))}};De=new WeakMap,je=new WeakMap,Ee=new WeakMap,fe=new WeakMap,Y=new WeakSet,Be=function(n){const a=T(this,Ee).deref();return a?n(a):this.remove()},Le=new WeakMap,Ae=new WeakMap,pt=function(){G(this,Y,Be).call(this,n=>{const a=window.getComputedStyle(n);this.style.height=a.height,this.style.width=a.width,n.clientHeight!==this.clientHeight&&(this.style.height=`calc(${a.height} + ${n.clientHeight-this.clientHeight}px)`),n.clientWidth!==this.clientWidth&&(this.style.width=`calc(${a.width} + ${n.clientWidth-this.clientWidth}px)`);const r=n.getBoundingClientRect(),m=this.getBoundingClientRect();de(this,Le,T(this,Le)+r.left-m.left),de(this,Ae,T(this,Ae)+r.top-m.top),this.style.transform=`translate(${T(this,Le)}px, ${T(this,Ae)}px)`,this.scrollTop=n.scrollTop,this.scrollLeft=n.scrollLeft,this.dispatchEvent(new Rn)})},Se=new WeakMap,Ge=function(){T(this,Se)||(de(this,Se,!0),requestAnimationFrame(()=>{G(this,Y,pt).call(this),de(this,Se,!1)}))},Ye=function(){G(this,Y,Be).call(this,n=>{const a=window.getComputedStyle(n);for(const r of Dn)this.style[r]=a[r];G(this,Y,Ge).call(this)})},Ze=function(){G(this,Y,Be).call(this,n=>{this.textContent=n.value,G(this,Y,pt).call(this)})},Pe=new WeakMap,Fe=new WeakMap;let Je=xt;const Dn=["direction","writingMode","unicodeBidi","textOrientation","boxSizing","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","borderStyle","paddingTop","paddingRight","paddingBottom","paddingLeft","fontStyle","fontVariant","fontWeight","fontStretch","fontSize","fontSizeAdjust","lineHeight","fontFamily","textAlign","textTransform","textIndent","textDecoration","letterSpacing","wordSpacing","tabSize","MozTabSize"];try{customElements.define("input-style-clone",Je)}catch(s){if(!(s instanceof DOMException&&s.name==="NotSupportedError"))throw s}var pe,Ie,Me,ce,gt,qt,ft,Te;const Xe=class Xe{constructor(e,n=0,a=n){re(this,ce);re(this,pe);re(this,Ie);re(this,Me);de(this,pe,e),de(this,Ie,n),de(this,Me,a)}static fromSelection(e){const{selectionStart:n,selectionEnd:a}=e;return new Xe(e,n??void 0,a??void 0)}get collapsed(){return this.startOffset===this.endOffset}get commonAncestorContainer(){return T(this,pe)}get endContainer(){return T(this,pe)}get startContainer(){return T(this,pe)}get startOffset(){return T(this,Ie)}get endOffset(){return T(this,Me)}setStartOffset(e){de(this,Ie,G(this,ce,ft).call(this,e))}setEndOffset(e){de(this,Me,G(this,ce,ft).call(this,e))}collapse(e=!1){e?this.setEndOffset(this.startOffset):this.setStartOffset(this.endOffset)}cloneContents(){return G(this,ce,Te).call(this).cloneContents()}cloneRange(){return new Xe(T(this,pe),this.startOffset,this.endOffset)}getBoundingClientRect(){return G(this,ce,Te).call(this).getBoundingClientRect()}getClientRects(){return G(this,ce,Te).call(this).getClientRects()}toString(){return G(this,ce,Te).call(this).toString()}getStyleClone(){return T(this,ce,gt)}};pe=new WeakMap,Ie=new WeakMap,Me=new WeakMap,ce=new WeakSet,gt=function(){return Je.for(T(this,pe))},qt=function(){return T(this,ce,gt)},ft=function(e){return Math.max(0,Math.min(e,T(this,pe).value.length))},Te=function(){const e=document.createRange(),n=T(this,ce,qt).childNodes[0];return n&&(e.setStart(n,this.startOffset),e.setEnd(n,this.endOffset)),e};let mt=Xe;const qe=new WeakMap;class jn{constructor(e,n){this.expander=e,this.input=n,this.combobox=null,this.menu=null,this.match=null,this.justPasted=!1,this.lookBackIndex=0,this.oninput=this.onInput.bind(this),this.onpaste=this.onPaste.bind(this),this.onkeydown=this.onKeydown.bind(this),this.oncommit=this.onCommit.bind(this),this.onmousedown=this.onMousedown.bind(this),this.onblur=this.onBlur.bind(this),this.interactingWithList=!1,n.addEventListener("paste",this.onpaste),n.addEventListener("input",this.oninput),n.addEventListener("keydown",this.onkeydown),n.addEventListener("blur",this.onblur)}destroy(){this.input.removeEventListener("paste",this.onpaste),this.input.removeEventListener("input",this.oninput),this.input.removeEventListener("keydown",this.onkeydown),this.input.removeEventListener("blur",this.onblur)}dismissMenu(){this.deactivate()&&(this.lookBackIndex=this.input.selectionEnd||this.lookBackIndex)}activate(e,n){var a,r;this.input!==document.activeElement&&this.input!==((r=(a=document.activeElement)===null||a===void 0?void 0:a.shadowRoot)===null||r===void 0?void 0:r.activeElement)||(this.deactivate(),this.menu=n,n.id||(n.id=`text-expander-${Math.floor(Math.random()*1e5).toString()}`),this.expander.append(n),this.combobox=new Ln(this.input,n),this.expander.dispatchEvent(new Event("text-expander-activate")),this.positionMenu(n,e.position),this.combobox.start(),n.addEventListener("combobox-commit",this.oncommit),n.addEventListener("mousedown",this.onmousedown),this.combobox.navigate(1))}positionMenu(e,n){const a=new mt(this.input,n).getBoundingClientRect(),r={left:a.left,top:a.top+a.height},m=e.getBoundingClientRect(),u={left:r.left-m.left,top:r.top-m.top};if(u.left!==0||u.top!==0){const v=getComputedStyle(e);e.style.left=v.left?`calc(${v.left} + ${u.left}px)`:`${u.left}px`,e.style.top=v.top?`calc(${v.top} + ${u.top}px)`:`${u.top}px`}}deactivate(){const e=this.menu;return!e||!this.combobox?!1:(this.expander.dispatchEvent(new Event("text-expander-deactivate")),this.menu=null,e.removeEventListener("combobox-commit",this.oncommit),e.removeEventListener("mousedown",this.onmousedown),this.combobox.destroy(),this.combobox=null,e.remove(),!0)}onCommit({target:e}){var n;const a=e;if(!(a instanceof HTMLElement)||!this.combobox)return;const r=this.match;if(!r)return;const m=this.input.value.substring(0,r.position-r.key.length),u=this.input.value.substring(r.position+r.text.length),v={item:a,key:r.key,value:null,continue:!1};if(!this.expander.dispatchEvent(new CustomEvent("text-expander-value",{cancelable:!0,detail:v}))||!v.value)return;let R=(n=this.expander.getAttribute("suffix"))!==null&&n!==void 0?n:" ";v.continue&&(R="");const C=`${v.value}${R}`;this.input.value=m+C+u;const k=m.length+C.length;this.deactivate(),this.input.focus({preventScroll:!0}),this.input.selectionStart=k,this.input.selectionEnd=k,v.continue||(this.lookBackIndex=k,this.match=null),this.expander.dispatchEvent(new CustomEvent("text-expander-committed",{cancelable:!1,detail:{input:this.input}}))}onBlur(){if(this.interactingWithList){this.interactingWithList=!1;return}this.deactivate()}onPaste(){this.justPasted=!0}async onInput(){if(this.justPasted){this.justPasted=!1;return}const e=this.findMatch();if(e){this.match=e;const n=await this.notifyProviders(e);if(!this.match)return;n?this.activate(e,n):this.deactivate()}else this.match=null,this.deactivate()}findMatch(){const e=this.input.selectionEnd||0,n=this.input.value;e<=this.lookBackIndex&&(this.lookBackIndex=e-1);for(const{key:a,multiWord:r}of this.expander.keys){const m=Tn(n,a,e,{multiWord:r,lookBackIndex:this.lookBackIndex,lastMatchPosition:this.match?this.match.position:null});if(m)return{text:m.text,key:a,position:m.position}}}async notifyProviders(e){const n=[],a=v=>n.push(v);return this.expander.dispatchEvent(new CustomEvent("text-expander-change",{cancelable:!0,detail:{provide:a,text:e.text,key:e.key}}))?(await Promise.all(n)).filter(v=>v.matched).map(v=>v.fragment)[0]:void 0}onMousedown(){this.interactingWithList=!0}onKeydown(e){e.key==="Escape"&&(this.match=null,this.deactivate()&&(this.lookBackIndex=this.input.selectionEnd||this.lookBackIndex,e.stopImmediatePropagation(),e.preventDefault()))}}class Bt extends HTMLElement{get keys(){const e=this.getAttribute("keys"),n=e?e.split(" "):[],a=this.getAttribute("multiword"),r=a?a.split(" "):[],m=r.length===0&&this.hasAttribute("multiword");return n.map(u=>({key:u,multiWord:m||r.includes(u)}))}connectedCallback(){const e=this.querySelector('input[type="text"], textarea');if(!(e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement))return;const n=new jn(this,e);qe.set(this,n)}disconnectedCallback(){const e=qe.get(this);e&&(e.destroy(),qe.delete(this))}dismiss(){const e=qe.get(this);e&&e.dismissMenu()}}window.customElements.get("text-expander")||(window.TextExpanderElement=Bt,window.customElements.define("text-expander",Bt));function Pn({onlyFirst:s=!1}={}){const e=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(e,s?void 0:"g")}const On=Pn();function Hn(s){if(typeof s!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof s}\``);return s.replace(On,"")}const Nn=new Intl.Segmenter;function Tt(s,{countAnsiEscapeCodes:e=!1}={}){if(s===""||(e||(s=Hn(s)),s===""))return 0;let n=0;for(const a of Nn.segment(s))n++;return n}const Wn="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",yt=[["aa","Afar","Afaraf"],["ab","Abkhaz","аҧсуа бызшәа"],["ae","Avestan","avesta"],["af","Afrikaans","Afrikaans"],["ak","Akan","Akan"],["am","Amharic","አማርኛ"],["an","Aragonese","aragonés"],["ar","Arabic","اللغة العربية"],["as","Assamese","অসমীয়া"],["av","Avaric","авар мацӀ"],["ay","Aymara","aymar aru"],["az","Azerbaijani","azərbaycan dili"],["ba","Bashkir","башҡорт теле"],["be","Belarusian","беларуская мова"],["bg","Bulgarian","български език"],["bh","Bihari","भोजपुरी"],["bi","Bislama","Bislama"],["bm","Bambara","bamanankan"],["bn","Bengali","বাংলা"],["bo","Tibetan","བོད་ཡིག"],["br","Breton","brezhoneg"],["bs","Bosnian","bosanski jezik"],["ca","Catalan","Català"],["ce","Chechen","нохчийн мотт"],["ch","Chamorro","Chamoru"],["co","Corsican","corsu"],["cr","Cree","ᓀᐦᐃᔭᐍᐏᐣ"],["cs","Czech","čeština"],["cu","Old Church Slavonic","ѩзыкъ словѣньскъ"],["cv","Chuvash","чӑваш чӗлхи"],["cy","Welsh","Cymraeg"],["da","Danish","dansk"],["de","German","Deutsch"],["dv","Divehi","Dhivehi"],["dz","Dzongkha","རྫོང་ཁ"],["ee","Ewe","Eʋegbe"],["el","Greek","Ελληνικά"],["en","English","English"],["eo","Esperanto","Esperanto"],["es","Spanish","Español"],["et","Estonian","eesti"],["eu","Basque","euskara"],["fa","Persian","فارسی"],["ff","Fula","Fulfulde"],["fi","Finnish","suomi"],["fj","Fijian","Vakaviti"],["fo","Faroese","føroyskt"],["fr","French","Français"],["fy","Western Frisian","Frysk"],["ga","Irish","Gaeilge"],["gd","Scottish Gaelic","Gàidhlig"],["gl","Galician","galego"],["gu","Gujarati","ગુજરાતી"],["gv","Manx","Gaelg"],["ha","Hausa","هَوُسَ"],["he","Hebrew","עברית"],["hi","Hindi","हिन्दी"],["ho","Hiri Motu","Hiri Motu"],["hr","Croatian","Hrvatski"],["ht","Haitian","Kreyòl ayisyen"],["hu","Hungarian","magyar"],["hy","Armenian","Հայերեն"],["hz","Herero","Otjiherero"],["ia","Interlingua","Interlingua"],["id","Indonesian","Bahasa Indonesia"],["ie","Interlingue","Interlingue"],["ig","Igbo","Asụsụ Igbo"],["ii","Nuosu","ꆈꌠ꒿ Nuosuhxop"],["ik","Inupiaq","Iñupiaq"],["io","Ido","Ido"],["is","Icelandic","Íslenska"],["it","Italian","Italiano"],["iu","Inuktitut","ᐃᓄᒃᑎᑐᑦ"],["ja","Japanese","日本語"],["jv","Javanese","basa Jawa"],["ka","Georgian","ქართული"],["kg","Kongo","Kikongo"],["ki","Kikuyu","Gĩkũyũ"],["kj","Kwanyama","Kuanyama"],["kk","Kazakh","қазақ тілі"],["kl","Kalaallisut","kalaallisut"],["km","Khmer","ខេមរភាសា"],["kn","Kannada","ಕನ್ನಡ"],["ko","Korean","한국어"],["kr","Kanuri","Kanuri"],["ks","Kashmiri","कश्मीरी"],["ku","Kurmanji (Kurdish)","Kurmancî"],["kv","Komi","коми кыв"],["kw","Cornish","Kernewek"],["ky","Kyrgyz","Кыргызча"],["la","Latin","latine"],["lb","Luxembourgish","Lëtzebuergesch"],["lg","Ganda","Luganda"],["li","Limburgish","Limburgs"],["ln","Lingala","Lingála"],["lo","Lao","ລາວ"],["lt","Lithuanian","lietuvių kalba"],["lu","Luba-Katanga","Tshiluba"],["lv","Latvian","latviešu valoda"],["mg","Malagasy","fiteny malagasy"],["mh","Marshallese","Kajin M̧ajeļ"],["mi","Māori","te reo Māori"],["mk","Macedonian","македонски јазик"],["ml","Malayalam","മലയാളം"],["mn","Mongolian","Монгол хэл"],["mr","Marathi","मराठी"],["ms","Malay","Bahasa Melayu"],["mt","Maltese","Malti"],["my","Burmese","ဗမာစာ"],["na","Nauru","Ekakairũ Naoero"],["nb","Norwegian Bokmål","Norsk bokmål"],["nd","Northern Ndebele","isiNdebele"],["ne","Nepali","नेपाली"],["ng","Ndonga","Owambo"],["nl","Dutch","Nederlands"],["nn","Norwegian Nynorsk","Norsk Nynorsk"],["no","Norwegian","Norsk"],["nr","Southern Ndebele","isiNdebele"],["nv","Navajo","Diné bizaad"],["ny","Chichewa","chiCheŵa"],["oc","Occitan","occitan"],["oj","Ojibwe","ᐊᓂᔑᓈᐯᒧᐎᓐ"],["om","Oromo","Afaan Oromoo"],["or","Oriya","ଓଡ଼ିଆ"],["os","Ossetian","ирон æвзаг"],["pa","Panjabi","ਪੰਜਾਬੀ"],["pi","Pāli","पाऴि"],["pl","Polish","Polski"],["ps","Pashto","پښتو"],["pt","Portuguese","Português"],["qu","Quechua","Runa Simi"],["rm","Romansh","rumantsch grischun"],["rn","Kirundi","Ikirundi"],["ro","Romanian","Română"],["ru","Russian","Русский"],["rw","Kinyarwanda","Ikinyarwanda"],["sa","Sanskrit","संस्कृतम्"],["sc","Sardinian","sardu"],["sd","Sindhi","सिन्धी"],["se","Northern Sami","Davvisámegiella"],["sg","Sango","yângâ tî sängö"],["si","Sinhala","සිංහල"],["sk","Slovak","slovenčina"],["sl","Slovenian","slovenščina"],["sn","Shona","chiShona"],["so","Somali","Soomaaliga"],["sq","Albanian","Shqip"],["sr","Serbian","српски језик"],["ss","Swati","SiSwati"],["st","Southern Sotho","Sesotho"],["su","Sundanese","Basa Sunda"],["sv","Swedish","Svenska"],["sw","Swahili","Kiswahili"],["ta","Tamil","தமிழ்"],["te","Telugu","తెలుగు"],["tg","Tajik","тоҷикӣ"],["th","Thai","ไทย"],["ti","Tigrinya","ትግርኛ"],["tk","Turkmen","Türkmen"],["tl","Tagalog","Wikang Tagalog"],["tn","Tswana","Setswana"],["to","Tonga","faka Tonga"],["tr","Turkish","Türkçe"],["ts","Tsonga","Xitsonga"],["tt","Tatar","татар теле"],["tw","Twi","Twi"],["ty","Tahitian","Reo Tahiti"],["ug","Uyghur","ئۇيغۇرچە‎"],["uk","Ukrainian","Українська"],["ur","Urdu","اردو"],["uz","Uzbek","Ўзбек"],["ve","Venda","Tshivenḓa"],["vi","Vietnamese","Tiếng Việt"],["vo","Volapük","Volapük"],["wa","Walloon","walon"],["wo","Wolof","Wollof"],["xh","Xhosa","isiXhosa"],["yi","Yiddish","ייִדיש"],["yo","Yoruba","Yorùbá"],["za","Zhuang","Saɯ cueŋƅ"],["zh","Chinese","中文"],["zu","Zulu","isiZulu"],["zh-CN","Chinese (China)","简体中文"],["zh-HK","Chinese (Hong Kong)","繁體中文(香港)"],["zh-TW","Chinese (Taiwan)","繁體中文(臺灣)"],["zh-YUE","Cantonese","廣東話"],["ast","Asturian","Asturianu"],["chr","Cherokee","ᏣᎳᎩ ᎦᏬᏂᎯᏍᏗ"],["ckb","Sorani (Kurdish)","سۆرانی"],["cnr","Montenegrin","crnogorski"],["jbo","Lojban","la .lojban."],["kab","Kabyle","Taqbaylit"],["ldn","Láadan","Láadan"],["lfn","Lingua Franca Nova","lingua franca nova"],["sco","Scots","Scots"],["sma","Southern Sami","Åarjelsaemien Gïele"],["smj","Lule Sami","Julevsámegiella"],["szl","Silesian","ślůnsko godka"],["tok","Toki Pona","toki pona"],["xal","Kalmyk","Хальмг келн"],["zba","Balaibalan","باليبلن"],["zgh","Standard Moroccan Tamazight","ⵜⴰⵎⴰⵣⵉⵖⵜ"]],Un="(((?:[^A-Za-z0-9@@$##\\uFFFE\\uFEFF\\uFFFF]|[\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069]|^))((https?:\\/\\/)((?:(?:(?:[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/](?:[_-]|[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/])*)?[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/]\\.)*(?:(?:[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/](?:-|[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/])*)?[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/]\\.)(?:(?:(?:삼성|닷컴|닷넷|香格里拉|餐厅|食品|飞利浦|電訊盈科|集团|通販|购物|谷歌|诺基亚|联通|网络|网站|网店|网址|组织机构|移动|珠宝|点看|游戏|淡马锡|机构|書籍|时尚|新闻|政府|政务|招聘|手表|手机|我爱你|慈善|微博|广东|工行|家電|娱乐|天主教|大拿|大众汽车|在线|嘉里大酒店|嘉里|商标|商店|商城|公益|公司|八卦|健康|信息|佛山|企业|中文网|中信|世界|ポイント|ファッション|セール|ストア|コム|グーグル|クラウド|みんな|คอม|संगठन|नेट|कॉम|همراه|موقع|موبايلي|كوم|كاثوليك|عرب|شبكة|بيتك|بازار|العليان|ارامكو|اتصالات|ابوظبي|קום|сайт|рус|орг|онлайн|москва|ком|католик|дети|zuerich|zone|zippo|zip|zero|zara|zappos|yun|youtube|you|yokohama|yoga|yodobashi|yandex|yamaxun|yahoo|yachts|xyz|xxx|xperia|xin|xihuan|xfinity|xerox|xbox|wtf|wtc|wow|world|works|work|woodside|wolterskluwer|wme|winners|wine|windows|win|williamhill|wiki|wien|whoswho|weir|weibo|wedding|wed|website|weber|webcam|weatherchannel|weather|watches|watch|warman|wanggou|wang|walter|walmart|wales|vuelos|voyage|voto|voting|vote|volvo|volkswagen|vodka|vlaanderen|vivo|viva|vistaprint|vista|vision|visa|virgin|vip|vin|villas|viking|vig|video|viajes|vet|versicherung|vermögensberatung|vermögensberater|verisign|ventures|vegas|vanguard|vana|vacations|ups|uol|uno|university|unicom|uconnect|ubs|ubank|tvs|tushu|tunes|tui|tube|trv|trust|travelersinsurance|travelers|travelchannel|travel|training|trading|trade|toys|toyota|town|tours|total|toshiba|toray|top|tools|tokyo|today|tmall|tkmaxx|tjx|tjmaxx|tirol|tires|tips|tiffany|tienda|tickets|tiaa|theatre|theater|thd|teva|tennis|temasek|telefonica|telecity|tel|technology|tech|team|tdk|tci|taxi|tax|tattoo|tatar|tatamotors|target|taobao|talk|taipei|tab|systems|symantec|sydney|swiss|swiftcover|swatch|suzuki|surgery|surf|support|supply|supplies|sucks|style|study|studio|stream|store|storage|stockholm|stcgroup|stc|statoil|statefarm|statebank|starhub|star|staples|stada|srt|srl|spreadbetting|spot|sport|spiegel|space|soy|sony|song|solutions|solar|sohu|software|softbank|social|soccer|sncf|smile|smart|sling|skype|sky|skin|ski|site|singles|sina|silk|shriram|showtime|show|shouji|shopping|shop|shoes|shiksha|shia|shell|shaw|sharp|shangrila|sfr|sexy|sex|sew|seven|ses|services|sener|select|seek|security|secure|seat|search|scot|scor|scjohnson|science|schwarz|schule|school|scholarships|schmidt|schaeffler|scb|sca|sbs|sbi|saxo|save|sas|sarl|sapo|sap|sanofi|sandvikcoromant|sandvik|samsung|samsclub|salon|sale|sakura|safety|safe|saarland|ryukyu|rwe|run|ruhr|rugby|rsvp|room|rogers|rodeo|rocks|rocher|rmit|rip|rio|ril|rightathome|ricoh|richardli|rich|rexroth|reviews|review|restaurant|rest|republican|report|repair|rentals|rent|ren|reliance|reit|reisen|reise|rehab|redumbrella|redstone|red|recipes|realty|realtor|realestate|read|raid|radio|racing|qvc|quest|quebec|qpon|pwc|pub|prudential|pru|protection|property|properties|promo|progressive|prof|productions|prod|pro|prime|press|praxi|pramerica|post|porn|politie|poker|pohl|pnc|plus|plumbing|playstation|play|place|pizza|pioneer|pink|ping|pin|pid|pictures|pictet|pics|piaget|physio|photos|photography|photo|phone|philips|phd|pharmacy|pfizer|pet|pccw|pay|passagens|party|parts|partners|pars|paris|panerai|panasonic|pamperedchef|page|ovh|ott|otsuka|osaka|origins|orientexpress|organic|org|orange|oracle|open|ooo|onyourside|online|onl|ong|one|omega|ollo|oldnavy|olayangroup|olayan|okinawa|office|off|observer|obi|nyc|ntt|nrw|nra|nowtv|nowruz|now|norton|northwesternmutual|nokia|nissay|nissan|ninja|nikon|nike|nico|nhk|ngo|nfl|nexus|nextdirect|next|news|newholland|new|neustar|network|netflix|netbank|net|nec|nba|navy|natura|nationwide|name|nagoya|nadex|nab|mutuelle|mutual|museum|mtr|mtpc|mtn|msd|movistar|movie|mov|motorcycles|moto|moscow|mortgage|mormon|mopar|montblanc|monster|money|monash|mom|moi|moe|moda|mobily|mobile|mobi|mma|mls|mlb|mitsubishi|mit|mint|mini|mil|microsoft|miami|metlife|merckmsd|meo|menu|men|memorial|meme|melbourne|meet|media|med|mckinsey|mcdonalds|mcd|mba|mattel|maserati|marshalls|marriott|markets|marketing|market|map|mango|management|man|makeup|maison|maif|madrid|macys|luxury|luxe|lupin|lundbeck|ltda|ltd|lplfinancial|lpl|love|lotto|lotte|london|lol|loft|locus|locker|loans|loan|llp|llc|lixil|living|live|lipsy|link|linde|lincoln|limo|limited|lilly|like|lighting|lifestyle|lifeinsurance|life|lidl|liaison|lgbt|lexus|lego|legal|lefrak|leclerc|lease|lds|lawyer|law|latrobe|latino|lat|lasalle|lanxess|landrover|land|lancome|lancia|lancaster|lamer|lamborghini|ladbrokes|lacaixa|kyoto|kuokgroup|kred|krd|kpn|kpmg|kosher|komatsu|koeln|kiwi|kitchen|kindle|kinder|kim|kia|kfh|kerryproperties|kerrylogistics|kerryhotels|kddi|kaufen|juniper|juegos|jprs|jpmorgan|joy|jot|joburg|jobs|jnj|jmp|jll|jlc|jio|jewelry|jetzt|jeep|jcp|jcb|java|jaguar|iwc|iveco|itv|itau|istanbul|ist|ismaili|iselect|irish|ipiranga|investments|intuit|international|intel|int|insure|insurance|institute|ink|ing|info|infiniti|industries|inc|immobilien|immo|imdb|imamat|ikano|iinet|ifm|ieee|icu|ice|icbc|ibm|hyundai|hyatt|hughes|htc|hsbc|how|house|hotmail|hotels|hoteles|hot|hosting|host|hospital|horse|honeywell|honda|homesense|homes|homegoods|homedepot|holiday|holdings|hockey|hkt|hiv|hitachi|hisamitsu|hiphop|hgtv|hermes|here|helsinki|help|healthcare|health|hdfcbank|hdfc|hbo|haus|hangout|hamburg|hair|guru|guitars|guide|guge|gucci|guardian|group|grocery|gripe|green|gratis|graphics|grainger|gov|got|gop|google|goog|goodyear|goodhands|goo|golf|goldpoint|gold|godaddy|gmx|gmo|gmbh|gmail|globo|global|gle|glass|glade|giving|gives|gifts|gift|ggee|george|genting|gent|gea|gdn|gbiz|gay|garden|gap|games|game|gallup|gallo|gallery|gal|fyi|futbol|furniture|fund|fun|fujixerox|fujitsu|ftr|frontier|frontdoor|frogans|frl|fresenius|free|fox|foundation|forum|forsale|forex|ford|football|foodnetwork|food|foo|fly|flsmidth|flowers|florist|flir|flights|flickr|fitness|fit|fishing|fish|firmdale|firestone|fire|financial|finance|final|film|fido|fidelity|fiat|ferrero|ferrari|feedback|fedex|fast|fashion|farmers|farm|fans|fan|family|faith|fairwinds|fail|fage|extraspace|express|exposed|expert|exchange|everbank|events|eus|eurovision|etisalat|esurance|estate|esq|erni|ericsson|equipment|epson|epost|enterprises|engineering|engineer|energy|emerck|email|education|edu|edeka|eco|eat|earth|dvr|dvag|durban|dupont|duns|dunlop|duck|dubai|dtv|drive|download|dot|doosan|domains|doha|dog|dodge|doctor|docs|dnp|diy|dish|discover|discount|directory|direct|digital|diet|diamonds|dhl|dev|design|desi|dentist|dental|democrat|delta|deloitte|dell|delivery|degree|deals|dealer|deal|dds|dclk|day|datsun|dating|date|data|dance|dad|dabur|cyou|cymru|cuisinella|csc|cruises|cruise|crs|crown|cricket|creditunion|creditcard|credit|cpa|courses|coupons|coupon|country|corsica|coop|cool|cookingchannel|cooking|contractors|contact|consulting|construction|condos|comsec|computer|compare|company|community|commbank|comcast|com|cologne|college|coffee|codes|coach|clubmed|club|cloud|clothing|clinique|clinic|click|cleaning|claims|cityeats|city|citic|citi|citadel|cisco|circle|cipriani|church|chrysler|chrome|christmas|chloe|chintai|cheap|chat|chase|charity|channel|chanel|cfd|cfa|cern|ceo|center|ceb|cbs|cbre|cbn|cba|catholic|catering|cat|casino|cash|caseih|case|casa|cartier|cars|careers|career|care|cards|caravan|car|capitalone|capital|capetown|canon|cancerresearch|camp|camera|cam|calvinklein|call|cal|cafe|cab|bzh|buzz|buy|business|builders|build|bugatti|budapest|brussels|brother|broker|broadway|bridgestone|bradesco|box|boutique|bot|boston|bostik|bosch|boots|booking|book|boo|bond|bom|bofa|boehringer|boats|bnpparibas|bnl|bmw|bms|blue|bloomberg|blog|blockbuster|blanco|blackfriday|black|biz|bio|bingo|bing|bike|bid|bible|bharti|bet|bestbuy|best|berlin|bentley|beer|beauty|beats|bcn|bcg|bbva|bbt|bbc|bayern|bauhaus|basketball|baseball|bargains|barefoot|barclays|barclaycard|barcelona|bar|bank|band|bananarepublic|banamex|baidu|baby|azure|axa|aws|avianca|autos|auto|author|auspost|audio|audible|audi|auction|attorney|athleta|associates|asia|asda|arte|art|arpa|army|archi|aramco|arab|aquarelle|apple|app|apartments|aol|anz|anquan|android|analytics|amsterdam|amica|amfam|amex|americanfamily|americanexpress|alstom|alsace|ally|allstate|allfinanz|alipay|alibaba|alfaromeo|akdn|airtel|airforce|airbus|aigo|aig|agency|agakhan|africa|afl|afamilycompany|aetna|aero|aeg|adult|ads|adac|actor|active|aco|accountants|accountant|accenture|academy|abudhabi|abogado|able|abc|abbvie|abbott|abb|abarth|aarp|aaa|onion)(?=[^0-9a-zA-Z@+-]|$))|(?:(?:한국|香港|澳門|新加坡|台灣|台湾|中國|中国|გე|ລາວ|ไทย|ලංකා|ഭാരതം|ಭಾರತ|భారత్|சிங்கப்பூர்|இலங்கை|இந்தியா|ଭାରତ|ભારત|ਭਾਰਤ|ভাৰত|ভারত|বাংলা|भारोत|भारतम्|भारत|ڀارت|پاکستان|موريتانيا|مليسيا|مصر|قطر|فلسطين|عمان|عراق|سورية|سودان|تونس|بھارت|بارت|ایران|امارات|المغرب|السعودية|الجزائر|البحرين|الاردن|հայ|қаз|укр|срб|рф|мон|мкд|ею|бел|бг|ευ|ελ|zw|zm|za|yt|ye|ws|wf|vu|vn|vi|vg|ve|vc|va|uz|uy|us|um|uk|ug|ua|tz|tw|tv|tt|tr|tp|to|tn|tm|tl|tk|tj|th|tg|tf|td|tc|sz|sy|sx|sv|su|st|ss|sr|so|sn|sm|sl|sk|sj|si|sh|sg|se|sd|sc|sb|sa|rw|ru|rs|ro|re|qa|py|pw|pt|ps|pr|pn|pm|pl|pk|ph|pg|pf|pe|pa|om|nz|nu|nr|np|no|nl|ni|ng|nf|ne|nc|na|mz|my|mx|mw|mv|mu|mt|ms|mr|mq|mp|mo|mn|mm|ml|mk|mh|mg|mf|me|md|mc|ma|ly|lv|lu|lt|ls|lr|lk|li|lc|lb|la|kz|ky|kw|kr|kp|kn|km|ki|kh|kg|ke|jp|jo|jm|je|it|is|ir|iq|io|in|im|il|ie|id|hu|ht|hr|hn|hm|hk|gy|gw|gu|gt|gs|gr|gq|gp|gn|gm|gl|gi|gh|gg|gf|ge|gd|gb|ga|fr|fo|fm|fk|fj|fi|eu|et|es|er|eh|eg|ee|ec|dz|do|dm|dk|dj|de|cz|cy|cx|cw|cv|cu|cr|co|cn|cm|cl|ck|ci|ch|cg|cf|cd|cc|ca|bz|by|bw|bv|bt|bs|br|bq|bo|bn|bm|bl|bj|bi|bh|bg|bf|be|bd|bb|ba|az|ax|aw|au|at|as|ar|aq|ao|an|am|al|ai|ag|af|ae|ad|ac)(?=[^0-9a-zA-Z@+-]|$))|(?:xn--[\\-0-9a-z]+))))(?::([0-9]+))?(\\/(?:(?:[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*(?:\\((?:[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]+|(?:[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*\\([a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]+\\)[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*))\\)[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*)*[\\+\\-a-z\\u0400-\\u04FF0-9=_#\\/\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]|(?:\\((?:[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]+|(?:[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*\\([a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]+\\)[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*))\\)))|(?:@[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]+\\/))*)?(\\?[a-z0-9!?\\*'@\\(\\);:&=\\+\\$\\/%#\\[\\]\\-_\\.,~|]*[a-z0-9\\-_&=#\\/])?))",qn="gi",_t={source:Un,flags:qn};var Kn={PHANPY_CLIENT_NAME:"Phanpy",PHANPY_WEBSITE:"https://phanpy.social",PHANPY_LINGVA_INSTANCES:"lingva.phanpy.social lingva.lunar.icu lingva.garudalinux.org translate.plausibility.cloud",PHANPY_PRIVACY_POLICY_URL:"https://github.com/cheeaun/phanpy/blob/main/PRIVACY.MD",VITE_APP_ENV:"production",BASE_URL:"./",MODE:"production",DEV:!1,PROD:!0,SSR:!1};const{PHANPY_IMG_ALT_API_URL:ut,PHANPY_GIPHY_API_KEY:Vn}=Kn,Gn=yt.reduce((s,e)=>{const[n,a,r]=e;return s[n]={common:a,native:r},s},{}),Kt={"5 minutes":5*60,"30 minutes":30*60,"1 hour":60*60,"6 hours":6*60*60,"12 hours":12*60*60,"1 day":24*60*60,"3 days":3*24*60*60,"7 days":7*24*60*60},Yn=Object.values(Kt),Rt=24*60*60,Dt=s=>{if(!s)return Rt;const e=(new Date(s).getTime()-Date.now())/1e3;return Yn.find(n=>n>=e)||Rt},ye=document.createElement("ul");ye.role="listbox";ye.className="text-expander-menu";const Zn=16,Jn=new IntersectionObserver(s=>{s.forEach(e=>{if(e.isIntersecting){const{left:n,width:a}=e.boundingClientRect,{innerWidth:r}=window;n+a>r&&(ye.style.left=r-a-Zn+"px")}})});Jn.observe(ye);const we=on([new Intl.DateTimeFormat().resolvedOptions().locale,...navigator.languages],yt.map(s=>s[0]),"en"),Vt=new RegExp(_t.source,_t.flags),Xn=/(^|[^\/\w])@(([a-z0-9_]+)@[a-z0-9\.\-]+[a-z0-9]+)/gi,Qn="$2xxxxxxxxxxxxxxxxxxxxxxx";function ei(s){return s.replace(Vt,Qn).replace(Xn,"$1@$3")}const ti=/[a-z0-9_]+([a-z0-9_.-]+[a-z0-9_]+)?/i,ni=new RegExp(`(^|[^=\\/\\w])(@${ti.source}(?:@[\\p{L}\\w.-]+[\\w]+)?)`,"uig"),ii=new RegExp("(^|[^=\\/\\w])(#[a-z0-9_]+([a-z0-9_.]+[a-z0-9_]+)?)(?![\\/\\w])","ig"),si="[a-zA-Z0-9_]{2,}",ai=new RegExp(`(^|[^=\\/\\w])(:${si}:)(?=[^A-Za-z0-9_:]|$)`,"g"),oi=new Intl.Segmenter;function dt(s){return s.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function ri(s,{maxCharacters:e=1/0}){const{composerCharacterCount:n}=le;if(n>e){let a="",r="";const m=oi.segment(s);for(const{segment:u,index:v}of m)v"),dt(a)+r}return dt(s).replace(Vt,'$2$3').replace(ni,'$1$2').replace(ii,'$1$2').replace(ai,'$1$2')}const li=new Intl.RelativeTimeFormat,vt=100;function Fi({onClose:s,replyToStatus:e,editStatus:n,draftStatus:a,standalone:r,hasOpener:m}){var Ct;const{masto:u,instance:v}=bt(),[g,R]=H("default"),C=U((a==null?void 0:a.uid)||rn()),k=yn(),L=k.info,Z=Wt(),{statuses:{maxCharacters:D,maxMediaAttachments:I,charactersReservedPerUrl:se}={},mediaAttachments:{supportedMimeTypes:J=[],imageSizeLimit:c,imageMatrixLimit:h,videoSizeLimit:p,videoMatrixLimit:f,videoFrameRateLimit:E}={},polls:{maxOptions:y,maxCharactersPerOption:B,maxExpiration:q,minExpiration:ue}={}}=Z||{},A=U(),X=U(),[V,W]=H("public"),[j,te]=H(!1),[O,ie]=H(ze.session.get("currentLanguage")||we),ae=U(O),[M,S]=H([]),[$,z]=H(null),N=ze.account.get("preferences")||{},Q=()=>{A.current&&A.current.dispatchEvent(new Event("input"))},oe=()=>{setTimeout(()=>{var o,l,b;A.current&&((l=(o=a==null?void 0:a.status)==null?void 0:o.startsWith)!=null&&l.call(o,` -`)&&(A.current.selectionStart=0,A.current.selectionEnd=0),(b=A.current)==null||b.focus())},300)};ee(()=>{if(e){const{spoilerText:o,visibility:l,language:b,sensitive:d}=e;o&&X.current&&(X.current.value=o);const x=[...new Set([e.account.acct,...e.mentions.map(w=>w.acct)])].filter(w=>w!==L.acct);x.length>0&&(A.current.value=`${x.map(w=>`@${w}`).join(" ")} `,Q()),oe(),W(l==="public"&&N["posting:default:visibility"]?N["posting:default:visibility"]:l),ie(b||N.postingDefaultLanguage||we),te(d&&!!o)}else if(n){const{visibility:o,language:l,sensitive:b,poll:d,mediaAttachments:_}=n,x=!!(d!=null&&d.options)&&{...d,options:d.options.map(w=>(w==null?void 0:w.title)||w),expiresIn:(d==null?void 0:d.expiresIn)||Dt(d.expiresAt)};R("loading"),(async()=>{try{const w=await u.v1.statuses.$select(n.id).source.fetch(),{text:F,spoilerText:P}=w;A.current.value=F,A.current.dataset.source=F,Q(),oe(),X.current.value=P,W(o),ie(l||presf.postingDefaultLanguage||we),te(b),x&&z(x),S(_),R("default")}catch(w){alert((w==null?void 0:w.reason)||w),R("error")}})()}else oe(),N["posting:default:visibility"]&&W(N["posting:default:visibility"]),N["posting:default:language"]&&ie(N["posting:default:language"]),N["posting:default:sensitive"]&&te(N["posting:default:sensitive"]);if(a){const{status:o,spoilerText:l,visibility:b,language:d,sensitive:_,poll:x,mediaAttachments:w}=a,F=!!(x!=null&&x.options)&&{...x,options:x.options.map(P=>(P==null?void 0:P.title)||P),expiresIn:(x==null?void 0:x.expiresIn)||Dt(x.expiresAt)};A.current.value=o,Q(),oe(),l&&(X.current.value=l),b&&W(b),ie(d||N.postingDefaultLanguage||we),_!==null&&te(_),F&&z(F),w&&S(w)}},[a,n,e]);const he=U(),ve="You have unsaved changes. Discard this post?",xe=()=>{const{value:o,dataset:l}=A.current;if(g==="loading")return!1;const b=(o||"").trim().replace(new RegExp("^\\p{White_Space}+|\\p{White_Space}+$","gu"),""),d=M.length>0;if(!b&&!d||M.length>0&&M.every(P=>P.id))return!0;const x=(e==null?void 0:e.account.id)===L.id,w=e&&o.trim()===`@${e.account.acct}`;return!!(!x&&w||o===(l==null?void 0:l.source))},Oe=()=>xe()?!0:confirm(ve);ee(()=>{const o=l=>{xe()||(l.preventDefault(),l.returnValue=ve)};return window.addEventListener("beforeunload",o,{capture:!0}),()=>window.removeEventListener("beforeunload",o,{capture:!0})},[]);const Zt=()=>{const{value:o}=A.current,{value:l}=X.current;return Tt(ei(o))+Tt(l)},tt=()=>{const o=Zt();le.composerCharacterCount=o};ee(tt,[]);const wt=window.CloseWatcher,nt=U(!1);_e("esc",()=>{nt.current=!0},{enabled:!wt,enableOnFormTags:!0}),_e("esc",()=>{!r&&nt.current&&Oe()&&s(),nt.current=!1},{enabled:!wt,enableOnFormTags:!0,keyup:!0,ignoreEventWhen:o=>{const l=document.querySelectorAll("#modal-container > *"),b=!!l,d=l.length===1&&l[0].querySelector("#compose-container");return b&&!d}}),ln(()=>{!r&&Oe()&&s()},[r,Oe,s]);const kt=U({}),Et=()=>`${xn()}#${C.current}`,it=()=>{if(n||le.composerState.minimized)return;const o=Et(),l={key:o,replyTo:e?{id:e.id,account:{id:e.account.id,username:e.account.username,acct:e.account.acct}}:null,draftStatus:{uid:C.current,status:A.current.value,spoilerText:X.current.value,visibility:V,language:O,sensitive:j,poll:$,mediaAttachments:M}};!wn(l,kt.current)&&!xe()&&(Lt.drafts.set(o,{...l,state:"unsaved",updatedAt:Date.now()}).then(()=>{}).catch(b=>{}),kt.current=structuredClone(l))};cn(it,5e3),ee(()=>(it(),()=>{Lt.drafts.del(Et())}),[]),ee(()=>{const o=b=>{const{items:d}=b.clipboardData||b.dataTransfer,_=[];for(let x=0;x0&&M.length>=I){alert(`You can only attach up to ${I} files.`);return}if(_.length>0){b.preventDefault(),b.stopPropagation();const x=I-M.length,w=_.slice(0,x);if(w.length<=0){alert(`You can only attach up to ${I} files.`);return}const F=w.map(P=>({file:P,type:P.type,size:P.size,url:URL.createObjectURL(P),id:null,description:null}));S([...M,...F])}};window.addEventListener("paste",o);const l=b=>{b.dataTransfer.items.length>0&&(b.preventDefault(),b.stopPropagation())};return window.addEventListener("dragover",l),window.addEventListener("drop",o),()=>{window.removeEventListener("paste",o),window.removeEventListener("dragover",l),window.removeEventListener("drop",o)}},[M]);const[He,st]=H(!1),[Ne,We]=H(!1),[Jt,at]=H(!1),[me,Xt]=H(null),[Qt,en]=Re(()=>{const o=[],l=[],{contentTranslationHideLanguages:b=[]}=le.settings;return yt.forEach(d=>{const[_]=d;_===O||_===ae.current||_===we||b.includes(_)||me!=null&&me.length&&me.includes(_)?o.push(d):l.push(d)}),o.sort(([d,_],[x,w])=>d===O?-1:x===O?1:_.localeCompare(w)),l.sort(([d,_],[x,w])=>_.localeCompare(w)),[o,l]},[O,me]),Ft=Re(()=>!!(e!=null&&e.createdAt)&&Math.floor((Date.now()-new Date(e.createdAt))/(1e3*60*60*24*30)),[e]),tn=()=>{it(),le.composerState.minimized=!0};return t("div",{id:"compose-container-outer",children:[t("div",{id:"compose-container",class:r?"standalone":"",children:[t("div",{class:"compose-top",children:[(L==null?void 0:L.avatarStatic)&&t(Ht,{account:L,accountInstance:k.instanceURL,hideDisplayName:!0,useAvatarStatic:!0}),r?m&&t("button",{type:"button",class:"light pop-button",disabled:g==="loading",onClick:()=>{var o;if(!window.opener){alert("Looks like you closed the parent window.");return}if(window.opener.__STATES__.showCompose){if((o=window.opener.__STATES__.composerState)!=null&&o.publishing){alert("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.");return}if(!confirm("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?"))return}s({fn:()=>{const l={editStatus:n,replyToStatus:e,draftStatus:{uid:C.current,status:A.current.value,spoilerText:X.current.value,visibility:V,language:O,sensitive:j,poll:$,mediaAttachments:M}};window.opener.__COMPOSE__=l,window.opener.__STATES__.showCompose?(window.opener.__STATES__.showCompose=!1,setTimeout(()=>{window.opener.__STATES__.showCompose=!0},10)):window.opener.__STATES__.showCompose=!0,window.opener.__STATES__.composerState.minimized&&(window.opener.__STATES__.composerState.minimized=!1)}})},children:t(K,{icon:"popin",alt:"Pop in"})}):t("span",{class:"compose-controls",children:[t("button",{type:"button",class:"plain4 pop-button",disabled:g==="loading",onClick:()=>{un({editStatus:n,replyToStatus:e,draftStatus:{uid:C.current,status:A.current.value,spoilerText:X.current.value,visibility:V,language:O,sensitive:j,poll:$,mediaAttachments:M}})&&s()},children:t(K,{icon:"popout",alt:"Pop out"})}),t("button",{type:"button",class:"plain4 min-button",onClick:tn,children:t(K,{icon:"minimize",alt:"Minimize"})})," ",t("button",{type:"button",class:"light close-button",disabled:g==="loading",onClick:()=>{Oe()&&s()},children:t(K,{icon:"x"})})]})]}),!!e&&t("div",{class:"status-preview",children:[t(At,{status:e,size:"s",previewMode:!0}),t("div",{class:"status-preview-legend reply-to",children:["Replying to @",e.account.acct||e.account.username,"’s post",Ft>=3&&t(Ce,{children:[" ","(",t("strong",{children:li.format(-Ft,"month")}),")"]})]})]}),!!n&&t("div",{class:"status-preview",children:[t(At,{status:n,size:"s",previewMode:!0}),t("div",{class:"status-preview-legend",children:"Editing source post"})]}),t("form",{ref:he,class:`form-visibility-${V}`,style:{pointerEvents:g==="loading"?"none":"auto",opacity:g==="loading"?.5:1},onKeyDown:o=>{o.key==="Enter"&&(o.ctrlKey||o.metaKey)&&he.current.dispatchEvent(new Event("submit",{cancelable:!0}))},onSubmit:o=>{o.preventDefault();const l=new FormData(o.target),b=Object.fromEntries(l.entries());let{status:d,visibility:_,sensitive:x,spoilerText:w}=b;if(x=x==="on",$){if($.options.length<2){alert("Poll must have at least 2 options");return}if($.options.some(F=>F==="")){alert("Some poll choices are empty");return}}M.length>0&&M.some(P=>{var ne,$e;return!(($e=(ne=P.description)==null?void 0:ne.trim)!=null&&$e.call(ne))})&&!confirm("Some media have no descriptions. Continue?")||(w=x&&w||void 0,d=d===""?void 0:d,le.composerState.publishing=!0,R("loading"),(async()=>{try{if(M.length>0){const ne=M.map(ge=>{const{file:Ue,description:nn,id:sn}=ge;if(sn)return ge;{const an=Ot({file:Ue,description:nn});return u.v2.media.create(an).then(ot=>(ot.id&&(ge.id=ot.id),ot))}}),$e=await Promise.allSettled(ne);if($e.some(ge=>{var Ue;return ge.status==="rejected"||!((Ue=ge.value)!=null&&Ue.id)})){le.composerState.publishing=!1,le.composerState.publishingError=!0,R("error"),$e.forEach(ge=>{ge.status==="rejected"&&alert(ge.reason||`Attachment #${i} failed`)});return}}let F={status:d,spoiler_text:w,language:O,sensitive:x,poll:$,media_ids:M.map(ne=>ne.id)};n&&Nt("@mastodon/edit-media-attributes")?F.media_attributes=M.map(ne=>({id:ne.id,description:ne.description})):n||(F.visibility=_,F.in_reply_to_id=(e==null?void 0:e.id)||void 0),F=Ot(F);let P;if(n)P=await u.v1.statuses.$select(n.id).update(F),kn(P,v,{skipThreading:!0});else try{P=await u.v1.statuses.create(F,{requestInit:{headers:{"Idempotency-Key":C.current}}})}catch{P=await u.v1.statuses.create(F)}le.composerState.minimized=!1,le.composerState.publishing=!1,R("default"),s({type:n?"edit":e?"reply":"post",newStatus:P,instance:v})}catch(F){le.composerState.publishing=!1,le.composerState.publishingError=!0,alert((F==null?void 0:F.reason)||F),R("error")}})())},children:[t("div",{class:"toolbar stretch",children:[t("input",{ref:X,type:"text",name:"spoilerText",placeholder:"Content warning",disabled:g==="loading",class:"spoiler-text-field",lang:O,spellCheck:"true",dir:"auto",style:{opacity:j?1:0,pointerEvents:j?"auto":"none"},onInput:()=>{tt()}}),t("label",{class:`toolbar-button ${j?"highlight":""}`,title:"Content warning or sensitive media",children:[t("input",{name:"sensitive",type:"checkbox",checked:j,disabled:g==="loading",onChange:o=>{var b,d;const l=o.target.checked;te(l),l?(b=X.current)==null||b.focus():(d=A.current)==null||d.focus()}}),t(K,{icon:`eye-${j?"close":"open"}`})]})," ",t("label",{class:`toolbar-button ${V!=="public"&&!j?"show-field":""} ${V!=="public"?"highlight":""}`,title:`Visibility: ${V}`,children:[t(K,{icon:dn[V],alt:V}),t("select",{name:"visibility",value:V,onChange:o=>{W(o.target.value)},disabled:g==="loading"||!!n,children:[t("option",{value:"public",children:["Public ",t(K,{icon:"earth"})]}),t("option",{value:"unlisted",children:"Unlisted"}),t("option",{value:"private",children:"Followers only"}),t("option",{value:"direct",children:"Private mention"})]})]})," "]}),t(di,{ref:A,placeholder:e?"Post your reply":n?"Edit your post":"What are you doing?",required:(M==null?void 0:M.length)===0,disabled:g==="loading",lang:O,onInput:()=>{tt()},maxCharacters:D,performSearch:o=>{const{type:l,q:b,limit:d}=o;return l==="accounts"?u.v1.accounts.search.list({q:b,limit:d,resolve:!1}):u.v2.search.fetch(o)},onTrigger:o=>{(o==null?void 0:o.name)==="custom-emojis"?We({defaultSearchTerm:(o==null?void 0:o.defaultSearchTerm)||null}):(o==null?void 0:o.name)==="mention"?st({defaultSearchTerm:(o==null?void 0:o.defaultSearchTerm)||null}):(o==null?void 0:o.name)==="auto-detect-language"&&(o!=null&&o.languages)&&Xt(o.languages)}}),(M==null?void 0:M.length)>0&&t("div",{class:"media-attachments",children:[M.map((o,l)=>{const{id:b,file:d}=o,_=(d==null?void 0:d.size)+(d==null?void 0:d.type)+(d==null?void 0:d.name);return t(pi,{attachment:o,disabled:g==="loading",lang:O,onDescriptionChange:x=>{S(w=>{const F=[...w];return F[l].description=x,F})},onRemove:()=>{S(x=>x.filter((w,F)=>F!==l))}},b||_||l)}),t("label",{class:"media-sensitive",children:[t("input",{name:"sensitive",type:"checkbox",checked:j,disabled:g==="loading",onChange:o=>{const l=o.target.checked;te(l)}})," ",t("span",{children:"Mark media as sensitive"})," ",t(K,{icon:`eye-${j?"close":"open"}`})]})]}),!!$&&t(mi,{lang:O,maxOptions:y,maxExpiration:q,minExpiration:ue,maxCharactersPerOption:B,poll:$,disabled:g==="loading",onInput:o=>{if(o){const l={...o};z(l)}else z(null)}}),t("div",{class:"toolbar wrap",style:{justifyContent:"flex-end"},children:[t("span",{children:[t("label",{class:"toolbar-button",children:[t("input",{type:"file",accept:J.join(","),multiple:M.length=I||!!$,onChange:o=>{const l=o.target.files;if(!l)return;const b=Array.from(l).map(d=>({file:d,type:d.type,size:d.size,url:URL.createObjectURL(d),id:null,description:null}));M.length+b.length>I?alert(`You can only attach up to ${I} files.`):S(d=>d.concat(b)),o.target.value=""}}),t(K,{icon:"attachment"})]}),y==null||y>1&&t(Ce,{children:t("button",{type:"button",class:"toolbar-button",disabled:g==="loading"||!!$||!!M.length,onClick:()=>{z({options:["",""],expiresIn:24*60*60,multiple:!1})},children:t(K,{icon:"poll",alt:"Add poll"})})}),t("button",{type:"button",class:"toolbar-button",disabled:g==="loading",onClick:()=>{We(!0)},children:t(K,{icon:"emoji2"})}),!!le.settings.composerGIFPicker&&t("button",{type:"button",class:"toolbar-button gif-picker-button",disabled:g==="loading"||M.length>=I||!!$,onClick:()=>{at(!0)},children:t("span",{children:"GIF"})})]}),t("div",{class:"spacer"}),g==="loading"?t(et,{abrupt:!0}):t(hi,{maxCharacters:D,hidden:g==="loading"}),t("label",{class:`toolbar-button ${O!==ae.current||me!=null&&me.length&&!me.includes(O)?"highlight":""}`,children:[t("span",{class:"icon-text",children:(Ct=Gn[O])==null?void 0:Ct.native}),t("select",{name:"language",value:O,onChange:o=>{const{value:l}=o.target;ie(l||we),ze.session.set("currentLanguage",l||we)},disabled:g==="loading",children:[Qt.map(([o,l,b])=>t("option",{value:o,children:[l," (",b,")"]},o)),t("hr",{}),en.map(([o,l,b])=>t("option",{value:o,children:[l," (",b,")"]},o))]})]})," ",t("button",{type:"submit",class:"large",disabled:g==="loading",children:e?"Reply":n?"Update":"Post"})]})]})]}),He&&t(Ve,{onClick:o=>{o.target===o.currentTarget&&st(!1)},children:t(gi,{masto:u,instance:v,onClose:()=>{st(!1)},defaultSearchTerm:He==null?void 0:He.defaultSearchTerm,onSelect:o=>{const l=A.current;if(!l)return;const{selectionStart:b,selectionEnd:d}=l,_=l.value,x=_.slice(0,b),w=x?/[\s\t\n\r]$/.test(x)?"":" ":"",F=_.slice(d),P=/^[\s\t\n\r]/.test(F)?"":" ",ne=x+w+"@"+o+P+F;l.value=ne,l.selectionStart=l.selectionEnd=d+1+o.length+P.length,l.focus(),l.dispatchEvent(new Event("input"))}})}),Ne&&t(Ve,{onClick:o=>{o.target===o.currentTarget&&We(!1)},children:t(fi,{masto:u,instance:v,onClose:()=>{We(!1)},defaultSearchTerm:Ne==null?void 0:Ne.defaultSearchTerm,onSelect:o=>{const l=A.current;if(!l)return;const{selectionStart:b,selectionEnd:d}=l,_=l.value,x=_.slice(0,b),w=x?/[\s\t\n\r]$/.test(x)?"":" ":"",F=_.slice(d),P=/^[\s\t\n\r]/.test(F)?"":" ",ne=x+w+o+P+F;l.value=ne,l.selectionStart=l.selectionEnd=d+o.length+P.length,l.focus(),l.dispatchEvent(new Event("input"))}})}),Jt&&t(Ve,{onClick:o=>{o.target===o.currentTarget&&at(!1)},children:t(bi,{onClose:()=>at(!1),onSelect:({url:o,type:l,alt_text:b})=>{if(M.length>=I){alert(`You can only attach up to ${I} files.`);return}(async()=>{var _,x;let d;try{d=ke({text:"Downloading GIF…",duration:-1});const w=await fetch(o,{referrerPolicy:"no-referrer"}).then(ne=>ne.blob()),F=new File([w],l==="video/mp4"?"video.mp4":"image.gif",{type:l}),P=[...M,{file:F,type:l,size:F.size,id:null,description:b||""}];S(P),(_=d==null?void 0:d.hideToast)==null||_.call(d)}catch{(x=d==null?void 0:d.hideToast)==null||x.call(d),ke("Failed to download GIF")}})()}})})]})}function jt(s){if(!s)return;const{value:e,offsetHeight:n,scrollHeight:a,clientHeight:r}=s;if(nm.visibleInPicker),r=new hn(a,{keys:["shortcode"],findAllMatches:!0});return[a,r]}const Gt=En(ci,{matchesArg:(s,e)=>s.instance===e.instance,maxAge:30*60*1e3}),ui=s=>{const e=zn(s);return e!=null&&e.length?e.slice(0,2).map(n=>n.lang):null},di=Fn((s,e)=>{var J;const{masto:n,instance:a}=bt(),[r,m]=H(((J=e.current)==null?void 0:J.value)||""),{maxCharacters:u,performSearch:v=()=>{},onTrigger:g=()=>{},...R}=s,C=U();ee(()=>{Gt(a,n).then(c=>{const[h,p]=c;C.current=p}).catch(c=>{})},[]);const k=U(),L=U("");ee(()=>{let c,h,p;return k.current&&(c=f=>{var ue;const{key:E,provide:y,text:B}=f.detail;if(L.current=B,B===""){y(Promise.resolve({matched:!1}));return}if(E===":"){const A=(ue=C.current)==null?void 0:ue.search(B,{limit:5});let X="";A.forEach(({item:V})=>{const{shortcode:W,url:j}=V;X+=` -
  • - - ${be(W)} -
  • `}),X+=`
  • More…
  • `,ye.innerHTML=X,y(Promise.resolve({matched:A.length>0,fragment:ye}));return}const q={"@":"accounts","#":"hashtags"}[E];y(new Promise(A=>{v({type:q,q:B,limit:5}).then(V=>{if(B!==L.current)return;const W=V[q]||V;let j="";W.forEach(te=>{var Q;const{name:O,avatarStatic:ie,displayName:ae,username:M,acct:S,emojis:$,history:z}=te,N=pn(ae,$);if(S)j+=` -
  • - - - - - ${N||M} -
    @${be(S)} -
    -
  • - `;else{const oe=(Q=z==null?void 0:z.reduce)==null?void 0:Q.call(z,(he,ve)=>he+ +ve.uses,0);j+=` -
  • - #${be(O)} - ${oe?`${mn(oe)}`:""} -
  • - `}}),q==="accounts"&&(j+=`
  • More…
  • `),ye.innerHTML=j,A({matched:W.length>0,fragment:ye})})}))},k.current.addEventListener("text-expander-change",c),h=f=>{const{key:E,item:y}=f.detail,{value:B,more:q}=y.dataset;E===":"?(f.detail.value=B?`:${B}:`:"​",q&&(f.detail.continue=!0,setTimeout(()=>{g==null||g({name:"custom-emojis",defaultSearchTerm:q})},300))):E==="@"?(f.detail.value=B?`@${B} `:"​",q&&(f.detail.continue=!0,setTimeout(()=>{g==null||g({name:"mention",defaultSearchTerm:q})},300))):f.detail.value=`${E}${B}`},k.current.addEventListener("text-expander-value",h),p=f=>{const{input:E}=f.detail;if(m(E.value),e.current){const y=new Event("input",{bubbles:!0});e.current.dispatchEvent(y)}},k.current.addEventListener("text-expander-committed",p)),()=>{k.current&&(k.current.removeEventListener("text-expander-change",c),k.current.removeEventListener("text-expander-value",h),k.current.removeEventListener("text-expander-committed",p))}},[]),ee(()=>{const c=e.current;if(!c)return;new ResizeObserver(()=>{if(k.current){const{height:p}=c.getBoundingClientRect();k.current.style.height=p+"px"}}).observe(c)},[]);const Z=U(0),D=U(),I=gn(c=>{var f;if(!D.current)return;if(Z.current>3){D.current.innerHTML="",D.current=null,(f=I==null?void 0:I.cancel)==null||f.call(I);return}let h,p;Z.current<=3&&(h=Date.now()),D.current.innerHTML=ri(c,{maxCharacters:u})+` -`,Z.current<=3&&(p=Date.now()),h&&p&&p-h>50&&Z.current++},500),se=Qe(()=>{var f,E;const c=(f=D.current)==null?void 0:f.cloneNode(!0);if(!c)return;c.querySelectorAll("mark").forEach(y=>{y.remove()});const h=(E=c.innerText)==null?void 0:E.trim();if(!h)return;const p=ui(h);p!=null&&p.length&&(g==null||g({name:"auto-detect-language",languages:p}))},2e3);return t("text-expander",{ref:k,keys:"@ # :",class:"compose-field-container",children:[t("textarea",{class:"compose-field",autoCapitalize:"sentences",autoComplete:"on",autoCorrect:"on",spellCheck:"true",dir:"auto",rows:"6",cols:"50",...R,ref:e,name:"status",value:r,onKeyDown:c=>{const{key:h,target:p}=c;if(h==="Enter"&&!(c.ctrlKey||c.metaKey))try{const{value:f,selectionStart:E}=p,B=f.slice(0,E).split(` -`).slice(-1)[0];if(B&&/^\s*(-|\d+\.)\s/.test(B)){const[q,ue,A,X,V]=B.match(/^(\s*)(-|\d+\.)(\s+)(.+)?/)||[];if(V){c.preventDefault();const[W]=A.match(/\d+/)||[],j=W?`${+W+1}.`:"-",te=` -${ue}${j}${X}`;p.setRangeText(te,E,E);const O=E+te.length;p.setSelectionRange(O,O)}else{const W=E-B.length;p.setRangeText("",W,E)}jt(p),p.dispatchEvent(new Event("input"))}}catch{}D.current&&(D.current.scrollTop=p.scrollTop)},onInput:c=>{var f;const{target:h}=c,p=h.value.replace(/\u200b/g,"");m(p),jt(h),(f=s.onInput)==null||f.call(s,c),I(p),se()},style:{width:"100%",height:"4em"},onScroll:c=>{if(D.current){const{scrollTop:h}=c.target;D.current.scrollTop=h}}}),t("div",{ref:D,class:"compose-highlight","aria-hidden":"true"})]})});function hi({maxCharacters:s=500,hidden:e}){const a=Cn(le).composerCharacterCount,r=s-a;return e?t("span",{class:"char-counter",hidden:!0}):t("span",{class:"char-counter",title:`${r}/${s}`,style:{"--percentage":a/s*100},children:[t("meter",{class:`${r<=-10?"explode":r<=0?"danger":r<=20?"warning":""}`,value:a,max:s}),t("span",{class:"counter",children:r})]})}function Ke(s){const e=["bytes","KB","MB","GB","TB","PB","EB","ZB","YB"];let n=0;for(;s>=1024;)s/=1024,n++;return`${s.toFixed(0).toLocaleString()} ${e[n]}`}function Pt(s,e,n,a){const r=Math.sqrt(e/s),m=Math.floor(n*r),u=Math.floor(a*r);return{newWidth:m,newHeight:u}}function pi({attachment:s,disabled:e,lang:n,onDescriptionChange:a=()=>{},onRemove:r=()=>{}}){const[m,u]=H("default"),v=Nt("@mastodon/edit-media-attributes"),{type:g,id:R,file:C}=s,k=Re(()=>C?URL.createObjectURL(C):s.url,[C,s.url]),L=!!(C!=null&&C.size),Z=L?Wt():{},{mediaAttachments:{imageSizeLimit:D,imageMatrixLimit:I,videoSizeLimit:se,videoMatrixLimit:J,videoFrameRateLimit:c}={}}=Z||{},[h,p]=H(()=>L?g.startsWith("image")&&D&&C.size>D?{type:"imageSizeLimit",details:{imageSize:C.size,imageSizeLimit:D}}:g.startsWith("video")&&se&&C.size>se?{type:"videoSizeLimit",details:{videoSize:C.size,videoSizeLimit:se}}:null:null),[f,E]=H({});ee(()=>{!L||!I||(f==null?void 0:f.matrix)>I&&p({type:"imageMatrixLimit",details:{imageMatrix:f==null?void 0:f.matrix,imageMatrixLimit:I,width:f==null?void 0:f.width,height:f==null?void 0:f.height}})},[f,I,L]);const[y,B]=H({});ee(()=>{!L||!J||(y==null?void 0:y.matrix)>J&&p({type:"videoMatrixLimit",details:{videoMatrix:y==null?void 0:y.matrix,videoMatrixLimit:J,width:y==null?void 0:y.width,height:y==null?void 0:y.height}})},[y,J,L]);const[q,ue]=H(s.description),[A,X]=g.split("/"),V=Qe(a,250);ee(()=>{V(q)},[q,V]);const[W,j]=H(!1),te=U(null);ee(()=>{let S;return W&&te.current&&(S=setTimeout(()=>{te.current.focus()},100)),()=>{clearTimeout(S)}},[W]);const O=t(Ce,{children:R&&!v?t("div",{class:"media-desc",children:[t("span",{class:"tag",children:"Uploaded"}),t("p",{title:q,children:s.description||t("i",{children:"No description"})})]}):t("textarea",{ref:te,value:q||"",lang:n,placeholder:{image:"Image description",video:"Video description",audio:"Audio description"}[A],autoCapitalize:"sentences",autoComplete:"on",autoCorrect:"on",spellCheck:"true",dir:"auto",disabled:e||m==="loading",class:m==="loading"?"loading":"",maxlength:"1500",onInput:S=>{const{value:$}=S.target;ue($)}})}),ie=U(null);ee(()=>()=>{var S,$;($=(S=ie.current)==null?void 0:S.hideToast)==null||$.call(S)},[]);const ae=U(null),M=S=>{const{type:$,details:z}=S;switch($){case"imageSizeLimit":{const{imageSize:N,imageSizeLimit:Q}=z;return`File size too large. Uploading might encounter issues. Try reduce the file size from ${Ke(N)} to ${Ke(Q)} or lower.`}case"imageMatrixLimit":{const{imageMatrix:N,imageMatrixLimit:Q,width:oe,height:he}=z,{newWidth:ve,newHeight:xe}=Pt(N,Q,oe,he);return`Dimension too large. Uploading might encounter issues. Try reduce dimension from ${oe.toLocaleString()}×${he.toLocaleString()}px to ${ve.toLocaleString()}×${xe.toLocaleString()}px.`}case"videoSizeLimit":{const{videoSize:N,videoSizeLimit:Q}=z;return`File size too large. Uploading might encounter issues. Try reduce the file size from ${Ke(N)} to ${Ke(Q)} or lower.`}case"videoMatrixLimit":{const{videoMatrix:N,videoMatrixLimit:Q,width:oe,height:he}=z,{newWidth:ve,newHeight:xe}=Pt(N,Q,oe,he);return`Dimension too large. Uploading might encounter issues. Try reduce dimension from ${oe.toLocaleString()}×${he.toLocaleString()}px to ${ve.toLocaleString()}×${xe.toLocaleString()}px.`}case"videoFrameRateLimit":return"Frame rate too high. Uploading might encounter issues."}};return t(Ce,{children:[t("div",{class:"media-attachment",children:[t("div",{class:"media-preview",tabIndex:"0",onClick:()=>{j(!0)},children:A==="image"?t("img",{src:k,alt:"",onLoad:S=>{if(!L)return;const{naturalWidth:$,naturalHeight:z}=S.target;E({matrix:$*z,width:$,height:z})}}):A==="video"||A==="gifv"?t("video",{src:k+"#t=0.1",playsinline:!0,muted:!0,disablePictureInPicture:!0,preload:"metadata",onLoadedMetadata:S=>{if(!L)return;const{videoWidth:$,videoHeight:z}=S.target;$&&z&&B({matrix:$*z,width:$,height:z})}}):A==="audio"?t("audio",{src:k,controls:!0}):null}),O,t("div",{class:"media-aside",children:[t("button",{type:"button",class:"plain close-button",disabled:e,onClick:r,children:t(K,{icon:"x"})}),!!h&&t("button",{type:"button",class:"media-error",title:M(h),onClick:()=>{ae.current&&ae.current.hideToast(),ae.current=ke({text:M(h),duration:1e4})},children:t(K,{icon:"alert"})})]})]}),W&&t(Ve,{onClose:()=>{j(!1)},children:t("div",{id:"media-sheet",class:"sheet sheet-max",children:[t("button",{type:"button",class:"sheet-close",onClick:()=>{j(!1)},children:t(K,{icon:"x"})}),t("header",{children:t("h2",{children:{image:"Edit image description",video:"Edit video description",audio:"Edit audio description"}[A]})}),t("main",{tabIndex:"-1",children:[t("div",{class:"media-preview",children:A==="image"?t("img",{src:k,alt:""}):A==="video"||A==="gifv"?t("video",{src:k,playsinline:!0,controls:!0}):A==="audio"?t("audio",{src:k,controls:!0}):null}),t("div",{class:"media-form",children:[O,t("footer",{children:[A==="image"&&/^(png|jpe?g|gif|webp)$/i.test(X)&&!!le.settings.mediaAltGenerator&&!!ut&&t(fn,{portal:{target:document.body},containerProps:{style:{zIndex:1001}},align:"center",position:"anchor",overflow:"auto",menuButton:t("button",{type:"button",title:"More",class:"plain",children:t(K,{icon:"more",size:"l",alt:"More"})}),children:[t(St,{disabled:m==="loading",onClick:()=>{u("loading"),ie.current=ke({text:"Generating description. Please wait...",duration:-1}),async function(){var S,$;try{const z=new FormData;z.append("image",C);const N=await fetch(ut,{method:"POST",body:z}).then(Q=>Q.json());if(N.error)throw new Error(N.error);ue(N.description)}catch(z){ke(`Failed to generate description${z!=null&&z.message?`: ${z.message}`:""}`)}finally{u("default"),($=(S=ie.current)==null?void 0:S.hideToast)==null||$.call(S)}}()},children:[t(K,{icon:"sparkles2"}),n&&n!=="en"?t("small",{children:["Generate description…",t("br",{}),"(English)"]}):t("span",{children:"Generate description…"})]}),!!n&&n!=="en"&&t(St,{disabled:m==="loading",onClick:()=>{u("loading"),ie.current=ke({text:"Generating description. Please wait...",duration:-1}),async function(){var S,$;try{const z=new FormData;z.append("image",C);const N=`?lang=${n}`,Q=await fetch(ut+N,{method:"POST",body:z}).then(oe=>oe.json());if(Q.error)throw new Error(Q.error);ue(Q.description)}catch(z){ke(`Failed to generate description${z!=null&&z.message?`: ${z.message}`:""}`)}finally{u("default"),($=(S=ie.current)==null?void 0:S.hideToast)==null||$.call(S)}}()},children:[t(K,{icon:"sparkles2"}),t("small",{children:["Generate description…",t("br",{}),"(",vn(n),")"," ",t("span",{class:"more-insignificant",children:"— experimental"})]})]})]}),t("button",{type:"button",class:"light block",onClick:()=>{j(!1)},disabled:m==="loading",children:"Done"})]})]})]})]})})]})}function mi({lang:s,poll:e,disabled:n,onInput:a=()=>{},maxOptions:r,maxExpiration:m,minExpiration:u,maxCharactersPerOption:v}){const{options:g,expiresIn:R,multiple:C}=e;return t("div",{class:`poll ${C?"multiple":""}`,children:[t("div",{class:"poll-choices",children:g.map((k,L)=>t("div",{class:"poll-choice",children:[t("input",{required:!0,type:"text",value:k,disabled:n,maxlength:v,placeholder:`Choice ${L+1}`,lang:s,spellCheck:"true",dir:"auto",onInput:Z=>{const{value:D}=Z.target;g[L]=D,a(e)}}),t("button",{type:"button",class:"plain2 poll-button",disabled:n||g.length<=1,onClick:()=>{g.splice(L,1),a(e)},children:t(K,{icon:"x",size:"s"})})]},L))}),t("div",{class:"poll-toolbar",children:[t("button",{type:"button",class:"plain2 poll-button",disabled:n||g.length>=r,onClick:()=>{g.push(""),a(e)},children:"+"})," ",t("label",{class:"multiple-choices",children:[t("input",{type:"checkbox",checked:C,disabled:n,onChange:k=>{const{checked:L}=k.target;e.multiple=L,a(e)}})," ","Multiple choices"]}),t("label",{class:"expires-in",children:["Duration"," ",t("select",{value:R,disabled:n,onChange:k=>{const{value:L}=k.target;e.expiresIn=L,a(e)},children:Object.entries(Kt).filter(([k,L])=>L>=u&&L<=m).map(([k,L])=>t("option",{value:L,children:k},L))})]})]}),t("div",{class:"poll-toolbar",children:t("button",{type:"button",class:"plain remove-poll-button",disabled:n,onClick:()=>{a(null)},children:"Remove poll"})})]})}function be(s){return s.replace(/[&<>"']/g,function(e){return"&#"+e.charCodeAt(0)+";"})}function Ot(s){for(let e in s)(s[e]===null||s[e]===void 0)&&delete s[e];return s}function gi({onClose:s=()=>{},onSelect:e=()=>{},defaultSearchTerm:n}){const{masto:a}=bt(),[r,m]=H("default"),[u,v]=H([]),[g,R]=H({}),[C,k]=H(0),L=async c=>{if(!(c!=null&&c.length))return;const h=await bn(c,g);h&&R({...g,...h})},Z=c=>{c&&(m("loading"),(async()=>{try{const h=await a.v1.accounts.search.list({q:c,limit:40,resolve:!1});v(h),L(h),m("default")}catch{m("error")}})())},D=Qe(Z,1e3);ee(()=>{Z()},[Z]);const I=U();ee(()=>{I.current&&(I.current.focus(),I.current.value&&(I.current.selectionStart=I.current.value.length,I.current.selectionEnd=I.current.value.length))},[]),ee(()=>{n&&Z(n)},[n]);const se=c=>{const h=c.acct;e(h),s()};_e("enter",()=>{const c=u[C];c&&se(c)},{preventDefault:!0,enableOnFormTags:["input"]});const J=U();return _e("down",()=>{C{const c=J.current.querySelector(".selected");c&&c.scrollIntoView({behavior:"smooth",block:"center",inline:"center"})},1)},{preventDefault:!0,enableOnFormTags:["input"]}),_e("up",()=>{C>0?k(C-1):k(u.length-1),setTimeout(()=>{const c=J.current.querySelector(".selected");c&&c.scrollIntoView({behavior:"smooth",block:"center",inline:"center"})},1)},{preventDefault:!0,enableOnFormTags:["input"]}),t("div",{id:"mention-sheet",class:"sheet",children:[!!s&&t("button",{type:"button",class:"sheet-close",onClick:s,children:t(K,{icon:"x"})}),t("header",{children:t("form",{onSubmit:c=>{var h;c.preventDefault(),(h=D.flush)==null||h.call(D)},children:t("input",{ref:I,required:!0,type:"search",class:"block",placeholder:"Search accounts",onInput:c=>{const{value:h}=c.target;D(h)},autocomplete:"off",autocorrect:"off",autocapitalize:"off",spellCheck:"false",dir:"auto",defaultValue:n||""})})}),t("main",{children:(u==null?void 0:u.length)>0?t("ul",{ref:J,class:`accounts-list ${r==="loading"?"loading":""}`,children:u.map((c,h)=>{const p=g[c.id];return t("li",{class:h===C?"selected":"",children:[t(Ht,{avatarSize:"xxl",account:c,relationship:p,showStats:!0,showActivity:!0}),t("button",{type:"button",class:"plain2",onClick:()=>{se(c)},children:t(K,{icon:"plus",size:"xl"})})]},c.id)})}):r==="loading"?t("div",{class:"ui-state",children:t(et,{abrupt:!0})}):r==="error"?t("div",{class:"ui-state",children:t("p",{children:"Error loading accounts"})}):null})]})}function fi({masto:s,instance:e,onClose:n=()=>{},onSelect:a=()=>{},defaultSearchTerm:r}){const[m,u]=H("default"),v=U([]),[g,R]=H([]),C=Re(()=>ze.account.get("recentlyUsedCustomEmojis")||[]),k=U();ee(()=>{u("loading"),(async()=>{try{const[h,p]=await Gt(e,s);k.current=p,R(h),u("default")}catch{u("error")}})()},[]);const L=Re(()=>{const h={"--recent--":C.filter(f=>g.find(E=>E.shortcode===f.shortcode))},p=[];return g.forEach(f=>{var E,y;if((y=(E=v.current)==null?void 0:E.push)==null||y.call(E,f),!f.category){p.push(f);return}h[f.category]||(h[f.category]=[]),h[f.category].push(f)}),p.length&&(h["--others--"]=p),h},[g]),Z=U(),[D,I]=H(null),se=It(h=>{var f,E,y;const{value:p}=h.target;if(p){const B=(f=k.current)==null?void 0:f.search(p,{limit:vt});I(B.map(q=>q.item)),(y=(E=Z.current)==null?void 0:E.scrollTo)==null||y.call(E,0,0)}else I(null)},[g]);ee(()=>{r&&(g!=null&&g.length)&&se({target:{value:r}})},[r,se,g]);const J=It(h=>{a==null||a(h),n==null||n(),queueMicrotask(()=>{let p=ze.account.get("recentlyUsedCustomEmojis")||[];const f=p.findIndex(E=>E.shortcode===h.shortcode);f!==-1?(p.splice(f,1),p.unshift(h)):(p.unshift(h),p=p.filter(E=>{var y,B;return(B=(y=v.current)==null?void 0:y.find)==null?void 0:B.call(y,q=>q.shortcode===E.shortcode)}),p=p.slice(0,10)),ze.account.set("recentlyUsedCustomEmojis",p)})},[a]),c=U();return ee(()=>{c.current&&(c.current.focus(),c.current.value&&(c.current.selectionStart=c.current.value.length,c.current.selectionEnd=c.current.value.length))},[]),t("div",{id:"custom-emojis-sheet",class:"sheet",children:[!!n&&t("button",{type:"button",class:"sheet-close",onClick:n,children:t(K,{icon:"x"})}),t("header",{children:[t("div",{children:[t("b",{children:"Custom emojis"})," ",m==="loading"?t(et,{}):t("small",{class:"insignificant",children:[" • ",e]})]}),t("form",{onSubmit:h=>{h.preventDefault();const p=D[0];p&&J(`:${p.shortcode}:`)},children:t("input",{ref:c,type:"search",placeholder:"Search emoji",onInput:se,autocomplete:"off",autocorrect:"off",autocapitalize:"off",spellCheck:"false",dir:"auto",defaultValue:r||""})})]}),t("main",{ref:Z,children:D!==null?t("ul",{class:"custom-emojis-matches custom-emojis-list",children:D.map(h=>t("li",{class:"custom-emojis-match",children:t(Yt,{emoji:h,onClick:()=>{J(`:${h.shortcode}:`)},showCode:!0})},h.shortcode))}):t("div",{class:"custom-emojis-list",children:[m==="error"&&t("div",{class:"ui-state",children:t("p",{children:"Error loading custom emojis"})}),m==="default"&&Object.entries(L).map(([h,p])=>!!(p!=null&&p.length)&&t(Ce,{children:[t("div",{class:"section-header",children:{"--recent--":"Recently used","--others--":"Others"}[h]||h}),t(vi,{emojis:p,onSelect:J})]}))]})})]})}const vi=Ut(({emojis:s,onSelect:e})=>{const[n,a]=H(vt),r=s.length>n;return t("section",{children:[s.slice(0,n).map(m=>t(Yt,{emoji:m,onClick:()=>{e(`:${m.shortcode}:`)}},m.shortcode)),r&&t("button",{type:"button",class:"plain small",onClick:()=>a(n+vt),children:[(s.length-n).toLocaleString()," more…"]})]})}),Yt=Ut(({emoji:s,onClick:e,showCode:n})=>{const a=r=>{const u=r.currentTarget.closest("main");if(u){const v=u.getBoundingClientRect(),g=r.currentTarget.getBoundingClientRect(),R=r.currentTarget.classList;g.leftv.right-88?(R.add("edge-right"),R.remove("edge-left")):R.remove("edge-left","edge-right")}};return t("button",{type:"button",className:"plain4",onClick:e,"data-title":n?void 0:s.shortcode,onPointerEnter:a,onFocus:a,children:[t("picture",{children:[!!s.staticUrl&&t("source",{srcSet:s.staticUrl,media:"(prefers-reduced-motion: reduce)"}),t("img",{className:"shortcode-emoji",src:s.url||s.staticUrl,alt:s.shortcode,width:"24",height:"24",loading:"lazy",decoding:"async"})]}),n&&t(Ce,{children:[" ",t("code",{children:s.shortcode})]})]})}),ht=20;function bi({onClose:s=()=>{},onSelect:e=()=>{}}){var L,Z,D,I,se,J;const[n,a]=H("default"),[r,m]=H([]),u=U(null),v=U(null),g=U(0),R=U(null);function C({offset:c}){var h,p,f;(h=v.current)!=null&&h.value&&(a("loading"),(f=(p=R.current)==null?void 0:p.scrollTo)==null||f.call(p,{top:0,left:0,behavior:"smooth"}),(async()=>{var E;try{const y={api_key:Vn,q:v.current.value,rating:"g",limit:ht,bundle:"messaging_non_clips",offset:c},B=await fetch("https://api.giphy.com/v1/gifs/search?"+new URLSearchParams(y),{referrerPolicy:"no-referrer"}).then(q=>q.json());g.current=((E=B.pagination)==null?void 0:E.offset)||0,m(B),a("results")}catch{a("error")}})())}ee(()=>{var c;(c=v.current)==null||c.focus()},[]);const k=Qe(()=>{C({offset:0})},1e3);return t("div",{id:"gif-picker-sheet",class:"sheet",children:[!!s&&t("button",{type:"button",class:"sheet-close",onClick:s,children:t(K,{icon:"x"})}),t("header",{children:t("form",{ref:u,onSubmit:c=>{c.preventDefault(),C({offset:0})},children:[t("input",{ref:v,type:"search",name:"q",placeholder:"Search GIFs",required:!0,autocomplete:"off",autocorrect:"off",autocapitalize:"off",spellCheck:"false",dir:"auto",onInput:k}),t("input",{type:"image",class:"powered-button",src:Wn,width:"86",height:"30"})]})}),t("main",{ref:R,class:n==="loading"?"loading":"",children:[n==="default"&&t("div",{class:"ui-state",children:t("p",{class:"insignificant",children:"Type to search GIFs"})}),n==="loading"&&!((L=r==null?void 0:r.data)!=null&&L.length)&&t("div",{class:"ui-state",children:t(et,{abrupt:!0})}),((Z=r==null?void 0:r.data)==null?void 0:Z.length)>0?t(Ce,{children:[t("ul",{children:r.data.map(c=>{const{id:h,images:p,title:f,alt_text:E}=c,{fixed_height_small:y,fixed_height_downsampled:B,fixed_height:q,original:ue}=p,A=y!=null&&y.url?y:B!=null&&B.url?B:q;let{url:X,webp:V,width:W,height:j}=A;+j>100&&(W=W/j*100,j=100);const te=URL.parse(X),O=te.origin+te.pathname;let ie;if(V){const ae=URL.parse(V);ie=ae.origin+ae.pathname}return t("li",{children:t("button",{type:"button",onClick:()=>{const{mp4:ae,url:M}=ue,S=ae||M,$=URL.parse(S),z=$.origin+$.pathname;s(),e({url:z,type:ae?"video/mp4":"image/gif",alt_text:E||f})},children:t("figure",{style:{"--figure-width":W+"px"},children:[t("picture",{children:[ie&&t("source",{srcset:ie,type:"image/webp"}),t("img",{src:O,width:W,height:j,loading:"lazy",decoding:"async",alt:E,referrerpolicy:"no-referrer",onLoad:ae=>{ae.target.style.backgroundColor="transparent"}})]}),t("figcaption",{children:E||f})]})})},h)})}),t("p",{class:"pagination",children:[((D=r.pagination)==null?void 0:D.offset)>0&&t("button",{type:"button",class:"light small",disabled:n==="loading",onClick:()=>{var c;C({offset:((c=r.pagination)==null?void 0:c.offset)-ht})},children:[t(K,{icon:"chevron-left"}),t("span",{children:"Previous"})]}),t("span",{}),((I=r.pagination)==null?void 0:I.offset)+((se=r.pagination)==null?void 0:se.count)<((J=r.pagination)==null?void 0:J.total_count)&&t("button",{type:"button",class:"light small",disabled:n==="loading",onClick:()=>{var c;C({offset:((c=r.pagination)==null?void 0:c.offset)+ht})},children:[t("span",{children:"Next"})," ",t(K,{icon:"chevron-right"})]})]})]}):n==="results"&&t("div",{class:"ui-state",children:t("p",{children:"No results"})}),n==="error"&&t("div",{class:"ui-state",children:t("p",{children:"Error loading GIFs"})})]})]})}export{Fi as default}; -//# sourceMappingURL=compose-z10cLv8p.js.map diff --git a/assets/compose-z10cLv8p.js.map b/assets/compose-z10cLv8p.js.map deleted file mode 100644 index 1d4bcff..0000000 --- a/assets/compose-z10cLv8p.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"compose-z10cLv8p.js","sources":["../../node_modules/@github/combobox-nav/dist/index.js","../../node_modules/@github/text-expander-element/dist/index.js","../../node_modules/ansi-regex/index.js","../../node_modules/strip-ansi/index.js","../../node_modules/string-length/index.js","../../src/assets/powered-by-giphy.svg","../../src/components/compose.jsx"],"sourcesContent":["export default class Combobox {\n constructor(input, list, { tabInsertsSuggestions, defaultFirstOption } = {}) {\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.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 scrollTo(this.list, target);\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);\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) {\n target.dispatchEvent(new CustomEvent('combobox-commit', { 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}\nfunction scrollTo(container, target) {\n if (!inViewport(container, target)) {\n container.scrollTop = target.offsetTop;\n }\n}\nfunction inViewport(container, element) {\n const scrollTop = container.scrollTop;\n const containerBottom = scrollTop + container.clientHeight;\n const top = element.offsetTop;\n const bottom = top + element.clientHeight;\n return top >= scrollTop && bottom <= containerBottom;\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\n/**\n * A custom element is implemented as a class which extends HTMLElement (in the\n * case of autonomous elements) or the interface you want to customize (in the\n * case of customized built-in elements).\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Web_components/Using_custom_elements#custom_element_lifecycle_callbacks\n */\nclass CustomHTMLElement extends HTMLElement {\n}\n\nclass InputStyleCloneUpdateEvent extends Event {\n constructor() {\n super(\"update\");\n }\n}\nconst CloneRegistry = new WeakMap();\n/**\n * Create 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 InputStyleCloneElement extends CustomHTMLElement {\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;\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.\n *\n * Upon initial creation the clone element will automatically be inserted into the DOM and begin observing the\n * linked input. Only one clone per input can ever exist at a time.\n * @param input The target input to clone.\n */\n static for(input) {\n const clone = CloneRegistry.get(input) ?? new InputStyleCloneElement(input);\n CloneRegistry.set(input, clone);\n return clone;\n }\n /**\n * Avoid constructing directly: Use `InputStyleCloneElement.for` instead.\n * @private\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 = document.createElement(\"div\");\n this.#container.style.position = \"absolute\";\n this.#container.style.pointerEvents = \"none\";\n input.after(this.#container);\n this.#container.appendChild(this);\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 /** @private */\n connectedCallback() {\n const input = this.#inputRef.deref();\n if (!input)\n return this.remove();\n this.style.pointerEvents = \"none\";\n this.style.userSelect = \"none\";\n this.style.overflow = \"hidden\";\n this.style.display = \"block\";\n // Important not to use display:none which would not render the content at all\n this.style.visibility = \"hidden\";\n if (input instanceof HTMLTextAreaElement) {\n this.style.whiteSpace = \"pre-wrap\";\n this.style.wordWrap = \"break-word\";\n }\n else {\n this.style.whiteSpace = \"nowrap\";\n // text in single-line inputs is vertically centered\n this.style.display = \"table-cell\";\n this.style.verticalAlign = \"middle\";\n }\n this.setAttribute(\"aria-hidden\", \"true\");\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 /** @private */\n disconnectedCallback() {\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 const input = this.#inputRef.deref();\n if (input) {\n input.removeEventListener(\"input\", this.#onInput, { capture: true });\n CloneRegistry.delete(input);\n }\n }\n // --- private ---\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.#inputRef.deref();\n if (!input)\n return this.remove();\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.style.height = inputStyle.height;\n this.style.width = inputStyle.width;\n // Immediately re-adjust for browser inconsistencies in scrollbar handling, if necessary\n if (input.clientHeight !== this.clientHeight)\n this.style.height = `calc(${inputStyle.height} + ${input.clientHeight - this.clientHeight}px)`;\n if (input.clientWidth !== this.clientWidth)\n this.style.width = `calc(${inputStyle.width} + ${input.clientWidth - this.clientWidth}px)`;\n // Position on top of the input\n const inputRect = input.getBoundingClientRect();\n const cloneRect = this.getBoundingClientRect();\n this.#xOffset = this.#xOffset + inputRect.left - cloneRect.left;\n this.#yOffset = this.#yOffset + inputRect.top - cloneRect.top;\n this.style.transform = `translate(${this.#xOffset}px, ${this.#yOffset}px)`;\n this.scrollTop = input.scrollTop;\n this.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.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.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// Inspired by https://github.com/github/catalyst/blob/dc284dcf4f82329a9cac5c867462a8fa529b6c40/src/register.ts\ntry {\n customElements.define(\"input-style-clone\", InputStyleCloneElement);\n}\ncatch (e) {\n // Throws DOMException with NotSupportedError if already defined\n if (!(e instanceof DOMException && e.name === \"NotSupportedError\"))\n throw e;\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 InputStyleCloneElement.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.childNodes[0];\n if (textNode) {\n range.setStart(textNode, this.startOffset);\n range.setEnd(textNode, this.endOffset);\n }\n return range;\n }\n}\n\nconst states = new WeakMap();\nclass TextExpander {\n constructor(expander, input) {\n this.expander = expander;\n this.input = input;\n this.combobox = null;\n this.menu = null;\n this.match = null;\n this.justPasted = false;\n this.lookBackIndex = 0;\n this.oninput = this.onInput.bind(this);\n this.onpaste = this.onPaste.bind(this);\n this.onkeydown = this.onKeydown.bind(this);\n this.oncommit = this.onCommit.bind(this);\n this.onmousedown = this.onMousedown.bind(this);\n this.onblur = this.onBlur.bind(this);\n this.interactingWithList = false;\n input.addEventListener('paste', this.onpaste);\n input.addEventListener('input', this.oninput);\n input.addEventListener('keydown', this.onkeydown);\n input.addEventListener('blur', this.onblur);\n }\n destroy() {\n this.input.removeEventListener('paste', this.onpaste);\n this.input.removeEventListener('input', this.oninput);\n this.input.removeEventListener('keydown', this.onkeydown);\n this.input.removeEventListener('blur', this.onblur);\n }\n dismissMenu() {\n if (this.deactivate()) {\n this.lookBackIndex = this.input.selectionEnd || this.lookBackIndex;\n }\n }\n activate(match, menu) {\n var _a, _b;\n if (this.input !== document.activeElement && this.input !== ((_b = (_a = document.activeElement) === null || _a === void 0 ? void 0 : _a.shadowRoot) === null || _b === void 0 ? void 0 : _b.activeElement)) {\n return;\n }\n this.deactivate();\n this.menu = menu;\n if (!menu.id)\n menu.id = `text-expander-${Math.floor(Math.random() * 100000).toString()}`;\n this.expander.append(menu);\n this.combobox = new Combobox(this.input, menu);\n this.expander.dispatchEvent(new Event('text-expander-activate'));\n this.positionMenu(menu, match.position);\n this.combobox.start();\n menu.addEventListener('combobox-commit', this.oncommit);\n menu.addEventListener('mousedown', this.onmousedown);\n this.combobox.navigate(1);\n }\n positionMenu(menu, position) {\n const caretRect = new InputRange(this.input, position).getBoundingClientRect();\n const targetPosition = { left: caretRect.left, top: caretRect.top + caretRect.height };\n const currentPosition = menu.getBoundingClientRect();\n const delta = {\n left: targetPosition.left - currentPosition.left,\n top: targetPosition.top - currentPosition.top\n };\n if (delta.left !== 0 || delta.top !== 0) {\n const currentStyle = getComputedStyle(menu);\n menu.style.left = currentStyle.left ? `calc(${currentStyle.left} + ${delta.left}px)` : `${delta.left}px`;\n menu.style.top = currentStyle.top ? `calc(${currentStyle.top} + ${delta.top}px)` : `${delta.top}px`;\n }\n }\n deactivate() {\n const menu = this.menu;\n if (!menu || !this.combobox)\n return false;\n this.expander.dispatchEvent(new Event('text-expander-deactivate'));\n this.menu = null;\n menu.removeEventListener('combobox-commit', this.oncommit);\n menu.removeEventListener('mousedown', this.onmousedown);\n this.combobox.destroy();\n this.combobox = null;\n menu.remove();\n return true;\n }\n onCommit({ target }) {\n var _a;\n const item = target;\n if (!(item instanceof HTMLElement))\n return;\n if (!this.combobox)\n return;\n const match = this.match;\n if (!match)\n return;\n const beginning = this.input.value.substring(0, match.position - match.key.length);\n const remaining = this.input.value.substring(match.position + match.text.length);\n const detail = { item, key: match.key, value: null, continue: false };\n const canceled = !this.expander.dispatchEvent(new CustomEvent('text-expander-value', { cancelable: true, detail }));\n if (canceled)\n return;\n if (!detail.value)\n return;\n let suffix = (_a = this.expander.getAttribute('suffix')) !== null && _a !== void 0 ? _a : ' ';\n if (detail.continue) {\n suffix = '';\n }\n const value = `${detail.value}${suffix}`;\n this.input.value = beginning + value + remaining;\n const cursor = beginning.length + value.length;\n this.deactivate();\n this.input.focus({\n preventScroll: true\n });\n this.input.selectionStart = cursor;\n this.input.selectionEnd = cursor;\n if (!detail.continue) {\n this.lookBackIndex = cursor;\n this.match = null;\n }\n this.expander.dispatchEvent(new CustomEvent('text-expander-committed', { cancelable: false, detail: { input: this.input } }));\n }\n onBlur() {\n if (this.interactingWithList) {\n this.interactingWithList = false;\n return;\n }\n this.deactivate();\n }\n onPaste() {\n this.justPasted = true;\n }\n async onInput() {\n if (this.justPasted) {\n this.justPasted = false;\n return;\n }\n const match = this.findMatch();\n if (match) {\n this.match = match;\n const menu = await this.notifyProviders(match);\n if (!this.match)\n return;\n if (menu) {\n this.activate(match, menu);\n }\n else {\n this.deactivate();\n }\n }\n else {\n this.match = null;\n this.deactivate();\n }\n }\n findMatch() {\n const cursor = this.input.selectionEnd || 0;\n const text = this.input.value;\n if (cursor <= this.lookBackIndex) {\n this.lookBackIndex = cursor - 1;\n }\n for (const { key, multiWord } of this.expander.keys) {\n const found = query(text, key, cursor, {\n multiWord,\n lookBackIndex: this.lookBackIndex,\n lastMatchPosition: this.match ? this.match.position : null\n });\n if (found) {\n return { text: found.text, key, position: found.position };\n }\n }\n }\n async notifyProviders(match) {\n const providers = [];\n const provide = (result) => providers.push(result);\n const canceled = !this.expander.dispatchEvent(new CustomEvent('text-expander-change', { cancelable: true, detail: { provide, text: match.text, key: match.key } }));\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 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 default TextExpanderElement;\n","export default function ansiRegex({onlyFirst = false} = {}) {\n\tconst pattern = [\n\t '[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)',\n\t\t'(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-ntqry=><~]))'\n\t].join('|');\n\n\treturn new RegExp(pattern, onlyFirst ? undefined : 'g');\n}\n","import ansiRegex from 'ansi-regex';\n\nconst regex = ansiRegex();\n\nexport default function stripAnsi(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError(`Expected a \\`string\\`, got \\`${typeof string}\\``);\n\t}\n\n\t// Even though the regex is global, we don't need to reset the `.lastIndex`\n\t// because unlike `.exec()` and `.test()`, `.replace()` does it automatically\n\t// and doing it manually has a performance penalty.\n\treturn string.replace(regex, '');\n}\n","import stripAnsi from 'strip-ansi';\n\nconst segmenter = new Intl.Segmenter();\n\nexport default function stringLength(string, {countAnsiEscapeCodes = false} = {}) {\n\tif (string === '') {\n\t\treturn 0;\n\t}\n\n\tif (!countAnsiEscapeCodes) {\n\t\tstring = stripAnsi(string);\n\t}\n\n\tif (string === '') {\n\t\treturn 0;\n\t}\n\n\tlet length = 0;\n\n\tfor (const _ of segmenter.segment(string)) { // eslint-disable-line no-unused-vars\n\t\tlength++;\n\t}\n\n\treturn length;\n}\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 './compose.css';\nimport '@github/text-expander-element';\n\nimport { MenuItem } from '@szhsin/react-menu';\nimport { deepEqual } from 'fast-equals';\nimport Fuse from 'fuse.js';\nimport { forwardRef, memo } from 'preact/compat';\nimport {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'preact/hooks';\nimport { useHotkeys } from 'react-hotkeys-hook';\nimport stringLength from 'string-length';\nimport { detectAll } from 'tinyld/light';\nimport { uid } from 'uid/single';\nimport { useDebouncedCallback, useThrottledCallback } from 'use-debounce';\nimport { useSnapshot } from 'valtio';\n\nimport poweredByGiphyURL from '../assets/powered-by-giphy.svg';\n\nimport Menu2 from '../components/menu2';\nimport supportedLanguages from '../data/status-supported-languages';\nimport urlRegex from '../data/url-regex';\nimport { api } from '../utils/api';\nimport db from '../utils/db';\nimport emojifyText from '../utils/emojify-text';\nimport localeMatch from '../utils/locale-match';\nimport localeCode2Text from '../utils/localeCode2Text';\nimport openCompose from '../utils/open-compose';\nimport pmem from '../utils/pmem';\nimport { fetchRelationships } from '../utils/relationships';\nimport shortenNumber from '../utils/shorten-number';\nimport showToast from '../utils/show-toast';\nimport states, { saveStatus } from '../utils/states';\nimport store from '../utils/store';\nimport {\n getCurrentAccount,\n getCurrentAccountNS,\n getCurrentInstance,\n getCurrentInstanceConfiguration,\n} from '../utils/store-utils';\nimport supports from '../utils/supports';\nimport useCloseWatcher from '../utils/useCloseWatcher';\nimport useInterval from '../utils/useInterval';\nimport visibilityIconsMap from '../utils/visibility-icons-map';\n\nimport AccountBlock from './account-block';\n// import Avatar from './avatar';\nimport Icon from './icon';\nimport Loader from './loader';\nimport Modal from './modal';\nimport Status from './status';\n\nconst {\n PHANPY_IMG_ALT_API_URL: IMG_ALT_API_URL,\n PHANPY_GIPHY_API_KEY: GIPHY_API_KEY,\n} = import.meta.env;\n\nconst supportedLanguagesMap = supportedLanguages.reduce((acc, l) => {\n const [code, common, native] = l;\n acc[code] = {\n common,\n native,\n };\n return acc;\n}, {});\n\n/* NOTES:\n - Max character limit includes BOTH status text and Content Warning text\n*/\n\nconst expiryOptions = {\n '5 minutes': 5 * 60,\n '30 minutes': 30 * 60,\n '1 hour': 60 * 60,\n '6 hours': 6 * 60 * 60,\n '12 hours': 12 * 60 * 60,\n '1 day': 24 * 60 * 60,\n '3 days': 3 * 24 * 60 * 60,\n '7 days': 7 * 24 * 60 * 60,\n};\nconst expirySeconds = Object.values(expiryOptions);\nconst oneDay = 24 * 60 * 60;\n\nconst expiresInFromExpiresAt = (expiresAt) => {\n if (!expiresAt) return oneDay;\n const delta = (new Date(expiresAt).getTime() - Date.now()) / 1000;\n return expirySeconds.find((s) => s >= delta) || oneDay;\n};\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 menu.style.left = innerWidth - width - windowMargin + 'px';\n }\n }\n });\n});\nobserver.observe(menu);\n\nconst DEFAULT_LANG = localeMatch(\n [new Intl.DateTimeFormat().resolvedOptions().locale, ...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 urlRegexObj = new RegExp(urlRegex.source, urlRegex.flags);\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// 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])(#[a-z0-9_]+([a-z0-9_.]+[a-z0-9_]+)?)(?![\\\\/\\\\w])`,\n 'ig',\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();\nfunction escapeHTML(text) {\n return text\n .replace(/&/g, '&')\n .replace(//g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\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 '' +\n escapeHTML(exceedLimitHTML) +\n '';\n }\n return escapeHTML(withinLimitHTML) + exceedLimitHTML;\n }\n\n return escapeHTML(text)\n .replace(urlRegexObj, '$2$3') // URLs\n .replace(MENTION_RE, '$1$2') // Mentions\n .replace(HASHTAG_RE, '$1$2') // Hashtags\n .replace(\n SCAN_RE,\n '$1$2',\n ); // Emoji shortcodes\n}\n\nconst rtf = new Intl.RelativeTimeFormat();\n\nconst CUSTOM_EMOJIS_COUNT = 100;\n\nfunction Compose({\n onClose,\n replyToStatus,\n editStatus,\n draftStatus,\n standalone,\n hasOpener,\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 = 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,\n charactersReservedPerUrl,\n } = {},\n mediaAttachments: {\n supportedMimeTypes = [],\n imageSizeLimit,\n imageMatrixLimit,\n videoSizeLimit,\n videoMatrixLimit,\n videoFrameRateLimit,\n } = {},\n polls: {\n maxOptions,\n maxCharactersPerOption,\n maxExpiration,\n minExpiration,\n } = {},\n } = configuration || {};\n\n const textareaRef = useRef();\n const spoilerTextRef = useRef();\n const [visibility, setVisibility] = useState('public');\n const [sensitive, setSensitive] = 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\n const prefs = store.account.get('preferences') || {};\n\n const oninputTextarea = () => {\n if (!textareaRef.current) return;\n textareaRef.current.dispatchEvent(new Event('input'));\n };\n const focusTextarea = () => {\n setTimeout(() => {\n if (!textareaRef.current) return;\n // status starts with newline, focus on first position\n if (draftStatus?.status?.startsWith?.('\\n')) {\n textareaRef.current.selectionStart = 0;\n textareaRef.current.selectionEnd = 0;\n }\n console.debug('FOCUS textarea');\n textareaRef.current?.focus();\n }, 300);\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 if (allMentions.length > 0) {\n textareaRef.current.value = `${allMentions\n .map((m) => `@${m}`)\n .join(' ')} `;\n oninputTextarea();\n }\n focusTextarea();\n setVisibility(\n visibility === 'public' && prefs['posting:default:visibility']\n ? prefs['posting:default:visibility']\n : visibility,\n );\n setLanguage(language || prefs.postingDefaultLanguage || DEFAULT_LANG);\n setSensitive(sensitive && !!spoilerText);\n } else if (editStatus) {\n const { visibility, language, sensitive, poll, mediaAttachments } =\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(language || presf.postingDefaultLanguage || DEFAULT_LANG);\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']);\n }\n if (prefs['posting:default:language']) {\n setLanguage(prefs['posting:default:language']);\n }\n if (prefs['posting:default:sensitive']) {\n setSensitive(prefs['posting:default:sensitive']);\n }\n }\n if (draftStatus) {\n const {\n status,\n spoilerText,\n visibility,\n language,\n sensitive,\n poll,\n mediaAttachments,\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 focusTextarea();\n if (spoilerText) spoilerTextRef.current.value = spoilerText;\n if (visibility) setVisibility(visibility);\n setLanguage(language || prefs.postingDefaultLanguage || DEFAULT_LANG);\n if (sensitive !== null) setSensitive(sensitive);\n if (composablePoll) setPoll(composablePoll);\n if (mediaAttachments) setMediaAttachments(mediaAttachments);\n }\n }, [draftStatus, editStatus, replyToStatus]);\n\n const formRef = useRef();\n\n const beforeUnloadCopy = '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\", including multiple mentions like \"@username1@username2\"\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 },\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 hasModal && !hasOnlyComposer;\n },\n },\n );\n useCloseWatcher(() => {\n if (!standalone && confirmClose()) {\n onClose();\n }\n }, [standalone, confirmClose, onClose]);\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 poll,\n mediaAttachments,\n },\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 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 const file = item.getAsFile();\n if (file && supportedMimeTypes.includes(file.type)) {\n files.push(file);\n }\n }\n }\n if (files.length > 0 && mediaAttachments.length >= maxMediaAttachments) {\n alert(`You can only attach up to ${maxMediaAttachments} files.`);\n return;\n }\n console.log({ files });\n if (files.length > 0) {\n e.preventDefault();\n e.stopPropagation();\n // Auto-cut-off files to avoid exceeding maxMediaAttachments\n const max = maxMediaAttachments - mediaAttachments.length;\n const allowedFiles = files.slice(0, max);\n if (allowedFiles.length <= 0) {\n alert(`You can only attach up to ${maxMediaAttachments} files.`);\n return;\n }\n const mediaFiles = allowedFiles.map((file) => ({\n file,\n type: file.type,\n size: file.size,\n url: URL.createObjectURL(file),\n id: null,\n description: null,\n }));\n setMediaAttachments([...mediaAttachments, ...mediaFiles]);\n }\n };\n window.addEventListener('paste', handleItems);\n const handleDragover = (e) => {\n // Prevent default if there's files\n if (e.dataTransfer.items.length > 0) {\n e.preventDefault();\n e.stopPropagation();\n }\n };\n window.addEventListener('dragover', handleDragover);\n window.addEventListener('drop', handleItems);\n return () => {\n window.removeEventListener('paste', handleItems);\n window.removeEventListener('dragover', handleDragover);\n window.removeEventListener('drop', handleItems);\n };\n }, [mediaAttachments]);\n\n const [showMentionPicker, setShowMentionPicker] = useState(false);\n const [showEmoji2Picker, setShowEmoji2Picker] = useState(false);\n const [showGIFPicker, setShowGIFPicker] = useState(false);\n\n const [autoDetectedLanguages, setAutoDetectedLanguages] = useState(null);\n const [topSupportedLanguages, restSupportedLanguages] = useMemo(() => {\n const topLanguages = [];\n const restLanguages = [];\n const { contentTranslationHideLanguages = [] } = states.settings;\n supportedLanguages.forEach((l) => {\n const [code] = l;\n if (\n code === language ||\n code === prevLanguage.current ||\n code === DEFAULT_LANG ||\n contentTranslationHideLanguages.includes(code) ||\n (autoDetectedLanguages?.length && autoDetectedLanguages.includes(code))\n ) {\n topLanguages.push(l);\n } else {\n restLanguages.push(l);\n }\n });\n topLanguages.sort(([codeA, commonA], [codeB, commonB]) => {\n if (codeA === language) return -1;\n if (codeB === language) return 1;\n return commonA.localeCompare(commonB);\n });\n restLanguages.sort(([codeA, commonA], [codeB, commonB]) =>\n commonA.localeCompare(commonB),\n );\n return [topLanguages, restLanguages];\n }, [language, autoDetectedLanguages]);\n\n const replyToStatusMonthsAgo = useMemo(\n () =>\n !!replyToStatus?.createdAt &&\n Math.floor(\n (Date.now() - new Date(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 return (\n
    \n
    \n
    \n {currentAccountInfo?.avatarStatic && (\n // \n \n )}\n {!standalone ? (\n \n {\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 },\n });\n\n if (!newWin) {\n return;\n }\n\n onClose();\n }}\n >\n \n \n \n \n {' '}\n {\n if (confirmClose()) {\n onClose();\n }\n }}\n >\n \n \n \n ) : (\n hasOpener && (\n {\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('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 '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 =\n '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 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 },\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 \n \n )\n )}\n
    \n {!!replyToStatus && (\n
    \n \n
    \n Replying to @\n {replyToStatus.account.acct || replyToStatus.account.username}\n ’s post\n {replyToStatusMonthsAgo >= 3 && (\n <>\n {' '}\n (\n \n {rtf.format(-replyToStatusMonthsAgo, 'month')}\n \n )\n \n )}\n
    \n
    \n )}\n {!!editStatus && (\n
    \n \n
    Editing source post
    \n
    \n )}\n {\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 { status, visibility, sensitive, spoilerText } = entries;\n\n // Pre-cleanup\n sensitive = sensitive === 'on'; // checkboxes return \"on\" if checked\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('Poll must have at least 2 options');\n return;\n }\n if (poll.options.some((option) => option === '')) {\n alert('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 'Some media have no descriptions. Continue?',\n );\n if (!yes) return;\n }\n }\n\n // Post-cleanup\n spoilerText = (sensitive && spoilerText) || undefined;\n status = status === '' ? undefined : status;\n\n // states.composerState.minimized = true;\n states.composerState.publishing = true;\n setUIState('loading');\n (async () => {\n try {\n console.log('MEDIA ATTACHMENTS', mediaAttachments);\n if (mediaAttachments.length > 0) {\n // Upload media attachments first\n const mediaPromises = mediaAttachments.map((attachment) => {\n const { file, description, id } = attachment;\n console.log('UPLOADING', attachment);\n if (id) {\n // If already uploaded\n return attachment;\n } else {\n const params = removeNullUndefined({\n file,\n description,\n });\n return masto.v2.media.create(params).then((res) => {\n if (res.id) {\n attachment.id = res.id;\n }\n return res;\n });\n }\n });\n const results = await Promise.allSettled(mediaPromises);\n\n // If any failed, return\n if (\n results.some((result) => {\n return result.status === 'rejected' || !result.value?.id;\n })\n ) {\n states.composerState.publishing = false;\n states.composerState.publishingError = true;\n setUIState('error');\n // Alert all the reasons\n results.forEach((result) => {\n if (result.status === 'rejected') {\n console.error(result);\n alert(result.reason || `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,\n poll,\n // mediaIds: mediaAttachments.map((attachment) => attachment.id),\n media_ids: mediaAttachments.map(\n (attachment) => attachment.id,\n ),\n };\n if (editStatus && supports('@mastodon/edit-media-attributes')) {\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 } else if (!editStatus) {\n params.visibility = visibility;\n // params.inReplyToId = replyToStatus?.id || undefined;\n params.in_reply_to_id = replyToStatus?.id || undefined;\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 });\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
    \n {\n updateCharCount();\n }}\n />\n \n {\n const sensitive = e.target.checked;\n setSensitive(sensitive);\n if (sensitive) {\n spoilerTextRef.current?.focus();\n } else {\n textareaRef.current?.focus();\n }\n }}\n />\n \n {' '}\n \n \n {\n setVisibility(e.target.value);\n }}\n disabled={uiState === 'loading' || !!editStatus}\n >\n \n \n \n \n \n {' '}\n
    \n {\n updateCharCount();\n }}\n maxCharacters={maxCharacters}\n performSearch={(params) => {\n const { type, q, limit } = params;\n if (type === 'accounts') {\n return masto.v1.accounts.search.list({\n q,\n limit,\n resolve: false,\n });\n }\n return masto.v2.search.fetch(params);\n }}\n onTrigger={(action) => {\n if (action?.name === 'custom-emojis') {\n setShowEmoji2Picker({\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 }\n }}\n />\n {mediaAttachments?.length > 0 && (\n
    \n {mediaAttachments.map((attachment, i) => {\n const { id, file } = attachment;\n const fileID = file?.size + file?.type + file?.name;\n return (\n {\n setMediaAttachments((attachments) => {\n const newAttachments = [...attachments];\n newAttachments[i].description = value;\n return newAttachments;\n });\n }}\n onRemove={() => {\n setMediaAttachments((attachments) => {\n return attachments.filter((_, j) => j !== i);\n });\n }}\n />\n );\n })}\n \n
    \n )}\n {!!poll && (\n {\n if (poll) {\n const newPoll = { ...poll };\n setPoll(newPoll);\n } else {\n setPoll(null);\n }\n }}\n />\n )}\n \n \n \n {/* If maxOptions is not defined or defined and is greater than 1, show poll button */}\n {maxOptions == null ||\n (maxOptions > 1 && (\n <>\n {\n setPoll({\n options: ['', ''],\n expiresIn: 24 * 60 * 60, // 1 day\n multiple: false,\n });\n }}\n >\n \n \n \n ))}\n {/* {\n setShowMentionPicker(true);\n }}\n >\n \n */}\n {\n setShowEmoji2Picker(true);\n }}\n >\n \n \n {!!states.settings.composerGIFPicker && (\n = maxMediaAttachments ||\n !!poll\n }\n onClick={() => {\n setShowGIFPicker(true);\n }}\n >\n GIF\n \n )}\n \n
    \n {uiState === 'loading' ? (\n \n ) : (\n
    \n \n
    \n {showMentionPicker && (\n {\n if (e.target === e.currentTarget) {\n setShowMentionPicker(false);\n }\n }}\n >\n {\n setShowMentionPicker(false);\n }}\n defaultSearchTerm={showMentionPicker?.defaultSearchTerm}\n onSelect={(socialAddress) => {\n const textarea = textareaRef.current;\n if (!textarea) return;\n const { selectionStart, selectionEnd } = textarea;\n const text = textarea.value;\n const textBeforeMention = text.slice(0, selectionStart);\n const spaceBeforeMention = textBeforeMention\n ? /[\\s\\t\\n\\r]$/.test(textBeforeMention)\n ? ''\n : ' '\n : '';\n const textAfterMention = text.slice(selectionEnd);\n const spaceAfterMention = /^[\\s\\t\\n\\r]/.test(textAfterMention)\n ? ''\n : ' ';\n const newText =\n textBeforeMention +\n spaceBeforeMention +\n '@' +\n socialAddress +\n spaceAfterMention +\n textAfterMention;\n textarea.value = newText;\n textarea.selectionStart = textarea.selectionEnd =\n selectionEnd +\n 1 +\n socialAddress.length +\n spaceAfterMention.length;\n textarea.focus();\n textarea.dispatchEvent(new Event('input'));\n }}\n />\n \n )}\n {showEmoji2Picker && (\n {\n if (e.target === e.currentTarget) {\n setShowEmoji2Picker(false);\n }\n }}\n >\n {\n setShowEmoji2Picker(false);\n }}\n defaultSearchTerm={showEmoji2Picker?.defaultSearchTerm}\n onSelect={(emojiShortcode) => {\n const textarea = textareaRef.current;\n if (!textarea) return;\n const { selectionStart, selectionEnd } = textarea;\n const text = textarea.value;\n const textBeforeEmoji = text.slice(0, selectionStart);\n const spaceBeforeEmoji = textBeforeEmoji\n ? /[\\s\\t\\n\\r]$/.test(textBeforeEmoji)\n ? ''\n : ' '\n : '';\n const textAfterEmoji = text.slice(selectionEnd);\n const spaceAfterEmoji = /^[\\s\\t\\n\\r]/.test(textAfterEmoji)\n ? ''\n : ' ';\n const newText =\n textBeforeEmoji +\n spaceBeforeEmoji +\n emojiShortcode +\n spaceAfterEmoji +\n textAfterEmoji;\n textarea.value = newText;\n textarea.selectionStart = textarea.selectionEnd =\n selectionEnd + emojiShortcode.length + spaceAfterEmoji.length;\n textarea.focus();\n textarea.dispatchEvent(new Event('input'));\n }}\n />\n \n )}\n {showGIFPicker && (\n {\n if (e.target === e.currentTarget) {\n setShowGIFPicker(false);\n }\n }}\n >\n setShowGIFPicker(false)}\n onSelect={({ url, type, alt_text }) => {\n console.log('GIF URL', url);\n if (mediaAttachments.length >= maxMediaAttachments) {\n alert(\n `You can only attach up to ${maxMediaAttachments} files.`,\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: 'Downloading GIF…',\n duration: -1,\n });\n const blob = await fetch(url, {\n referrerPolicy: 'no-referrer',\n }).then((res) => res.blob());\n const file = new File(\n [blob],\n type === 'video/mp4' ? 'video.mp4' : 'image.gif',\n {\n type,\n },\n );\n const newMediaAttachments = [\n ...mediaAttachments,\n {\n file,\n type,\n size: file.size,\n id: null,\n description: alt_text || '',\n },\n ];\n setMediaAttachments(newMediaAttachments);\n theToast?.hideToast?.();\n } catch (err) {\n console.error(err);\n theToast?.hideToast?.();\n showToast('Failed to download GIF');\n }\n })();\n }}\n />\n \n )}\n
    \n );\n}\n\nfunction autoResizeTextarea(textarea) {\n if (!textarea) return;\n const { value, offsetHeight, scrollHeight, clientHeight } = textarea;\n if (offsetHeight < window.innerHeight) {\n // NOTE: This check is needed because the offsetHeight return 50000 (really large number) on first render\n // No idea why it does that, will re-investigate in far future\n const offset = offsetHeight - clientHeight;\n const height = value ? scrollHeight + offset + 'px' : null;\n textarea.style.height = height;\n }\n}\n\nasync function _getCustomEmojis(instance, masto) {\n const emojis = await masto.v1.customEmojis.list();\n const visibleEmojis = emojis.filter((e) => e.visibleInPicker);\n const searcher = new Fuse(visibleEmojis, {\n keys: ['shortcode'],\n findAllMatches: true,\n });\n return [visibleEmojis, searcher];\n}\nconst getCustomEmojis = pmem(_getCustomEmojis, {\n // Limit by time to reduce memory usage\n // Cached by instance\n matchesArg: (cacheKeyArg, keyArg) => cacheKeyArg.instance === keyArg.instance,\n maxAge: 30 * 60 * 1000, // 30 minutes\n});\n\nconst detectLangs = (text) => {\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 { masto, instance } = api();\n const [text, setText] = useState(ref.current?.value || '');\n const {\n maxCharacters,\n performSearch = () => {},\n onTrigger = () => {},\n ...textareaProps\n } = props;\n // const snapStates = useSnapshot(states);\n // const charCount = snapStates.composerCharacterCount;\n\n // const customEmojis = useRef();\n const searcherRef = useRef();\n useEffect(() => {\n getCustomEmojis(instance, masto)\n .then((r) => {\n const [emojis, searcher] = r;\n searcherRef.current = searcher;\n })\n .catch((e) => {\n console.error(e);\n });\n }, []);\n\n const textExpanderRef = useRef();\n const textExpanderTextRef = useRef('');\n useEffect(() => {\n let handleChange, handleValue, handleCommited;\n if (textExpanderRef.current) {\n handleChange = (e) => {\n // console.log('text-expander-change', 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 emojis = customEmojis.current.filter((emoji) =>\n // emoji.shortcode.startsWith(text),\n // );\n // const emojis = filterShortcodes(customEmojis.current, text);\n const results = searcherRef.current?.search(text, {\n limit: 5,\n });\n let html = '';\n results.forEach(({ item: emoji }) => {\n const { shortcode, url } = emoji;\n html += `\n
  • \n \"\" \n ${encodeHTML(shortcode)}\n
  • `;\n });\n html += `
  • More…
  • `;\n // console.log({ emojis, html });\n menu.innerHTML = html;\n provide(\n Promise.resolve({\n matched: results.length > 0,\n fragment: menu,\n }),\n );\n return;\n }\n\n const type = {\n '@': 'accounts',\n '#': 'hashtags',\n }[key];\n provide(\n new Promise((resolve) => {\n const searchResults = performSearch({\n type,\n q: text,\n limit: 5,\n });\n searchResults.then((value) => {\n if (text !== textExpanderTextRef.current) {\n return;\n }\n console.log({ value, type, v: value[type] });\n const results = value[type] || value;\n console.log('RESULTS', value, results);\n let html = '';\n results.forEach((result) => {\n const {\n name,\n avatarStatic,\n displayName,\n username,\n acct,\n emojis,\n history,\n } = result;\n const displayNameWithEmoji = emojifyText(displayName, emojis);\n // const item = menuItem.cloneNode();\n if (acct) {\n html += `\n
  • \n \n \"\"\n \n \n ${displayNameWithEmoji || username}\n
    @${encodeHTML(acct)}\n
    \n
  • \n `;\n } else {\n const total = history?.reduce?.(\n (acc, cur) => acc + +cur.uses,\n 0,\n );\n html += `\n
  • \n #${encodeHTML(name)}\n ${\n total\n ? `${shortenNumber(total)}`\n : ''\n }\n
  • \n `;\n }\n });\n if (type === 'accounts') {\n html += `
  • More…
  • `;\n }\n menu.innerHTML = html;\n console.log('MENU', results, menu);\n resolve({\n matched: results.length > 0,\n fragment: menu,\n });\n });\n }),\n );\n };\n\n textExpanderRef.current.addEventListener(\n 'text-expander-change',\n handleChange,\n );\n\n handleValue = (e) => {\n const { key, item } = e.detail;\n const { value, more } = item.dataset;\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 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 textExpanderRef.current.addEventListener(\n 'text-expander-value',\n handleValue,\n );\n\n handleCommited = (e) => {\n const { input } = e.detail;\n setText(input.value);\n // fire input event\n if (ref.current) {\n const event = new Event('input', { bubbles: true });\n ref.current.dispatchEvent(event);\n }\n };\n\n textExpanderRef.current.addEventListener(\n 'text-expander-committed',\n handleCommited,\n );\n }\n\n return () => {\n if (textExpanderRef.current) {\n textExpanderRef.current.removeEventListener(\n 'text-expander-change',\n handleChange,\n );\n textExpanderRef.current.removeEventListener(\n 'text-expander-value',\n handleValue,\n );\n textExpanderRef.current.removeEventListener(\n 'text-expander-committed',\n handleCommited,\n );\n }\n };\n }, []);\n\n useEffect(() => {\n // Resize observer for textarea\n const textarea = ref.current;\n if (!textarea) return;\n const resizeObserver = new ResizeObserver(() => {\n // Get height of textarea, set height to textExpander\n if (textExpanderRef.current) {\n const { height } = textarea.getBoundingClientRect();\n textExpanderRef.current.style.height = height + 'px';\n }\n });\n resizeObserver.observe(textarea);\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 const langs = detectLangs(text);\n if (langs?.length) {\n onTrigger?.({\n name: 'auto-detect-language',\n languages: langs,\n });\n }\n }, 2000);\n\n return (\n \n {\n // Get line before cursor position after pressing 'Enter'\n const { key, target } = e;\n if (key === 'Enter' && !(e.ctrlKey || e.metaKey)) {\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 // Replace zero-width space\n const text = target.value.replace(/\\u200b/g, '');\n setText(text);\n autoResizeTextarea(target);\n props.onInput?.(e);\n throttleHighlightText(text);\n debouncedAutoDetectLanguage();\n }}\n style={{\n width: '100%',\n height: '4em',\n // '--text-weight': (1 + charCount / 140).toFixed(1) || 1,\n }}\n onScroll={(e) => {\n if (composeHighlightRef.current) {\n const { scrollTop } = e.target;\n composeHighlightRef.current.scrollTop = scrollTop;\n }\n }}\n />\n \n \n );\n});\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 \n );\n}\n\nfunction prettyBytes(bytes) {\n const units = ['bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n let unitIndex = 0;\n while (bytes >= 1024) {\n bytes /= 1024;\n unitIndex++;\n }\n return `${bytes.toFixed(0).toLocaleString()} ${units[unitIndex]}`;\n}\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 onDescriptionChange = () => {},\n onRemove = () => {},\n}) {\n const [uiState, setUIState] = useState('default');\n const supportsEdit = supports('@mastodon/edit-media-attributes');\n const { type, id, file } = attachment;\n const url = useMemo(\n () => (file ? URL.createObjectURL(file) : attachment.url),\n [file, attachment.url],\n );\n console.log({ attachment });\n\n const checkMaxError = !!file?.size;\n const configuration = checkMaxError ? getCurrentInstanceConfiguration() : {};\n const {\n mediaAttachments: {\n imageSizeLimit,\n imageMatrixLimit,\n videoSizeLimit,\n videoMatrixLimit,\n videoFrameRateLimit,\n } = {},\n } = configuration || {};\n\n const [maxError, setMaxError] = useState(() => {\n if (!checkMaxError) return null;\n if (\n type.startsWith('image') &&\n imageSizeLimit &&\n file.size > imageSizeLimit\n ) {\n return {\n type: 'imageSizeLimit',\n details: {\n imageSize: file.size,\n imageSizeLimit,\n },\n };\n } else if (\n type.startsWith('video') &&\n videoSizeLimit &&\n file.size > videoSizeLimit\n ) {\n return {\n type: 'videoSizeLimit',\n details: {\n videoSize: file.size,\n videoSizeLimit,\n },\n };\n }\n return null;\n });\n\n const [imageMatrix, setImageMatrix] = useState({});\n useEffect(() => {\n if (!checkMaxError || !imageMatrixLimit) return;\n if (imageMatrix?.matrix > imageMatrixLimit) {\n setMaxError({\n type: 'imageMatrixLimit',\n details: {\n imageMatrix: imageMatrix?.matrix,\n imageMatrixLimit,\n width: imageMatrix?.width,\n height: imageMatrix?.height,\n },\n });\n }\n }, [imageMatrix, imageMatrixLimit, checkMaxError]);\n\n const [videoMatrix, setVideoMatrix] = useState({});\n useEffect(() => {\n if (!checkMaxError || !videoMatrixLimit) return;\n if (videoMatrix?.matrix > videoMatrixLimit) {\n setMaxError({\n type: 'videoMatrixLimit',\n details: {\n videoMatrix: videoMatrix?.matrix,\n videoMatrixLimit,\n width: videoMatrix?.width,\n height: videoMatrix?.height,\n },\n });\n }\n }, [videoMatrix, videoMatrixLimit, checkMaxError]);\n\n const [description, setDescription] = useState(attachment.description);\n const [suffixType, subtype] = type.split('/');\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
    \n Uploaded\n

    \n {attachment.description || No description}\n

    \n
    \n ) : (\n {\n const { value } = e.target;\n setDescription(value);\n // debouncedOnDescriptionChange(value);\n }}\n >\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 `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 `Dimension too large. Uploading might encounter issues. Try reduce dimension from ${width.toLocaleString()}×${height.toLocaleString()}px to ${newWidth.toLocaleString()}×${newHeight.toLocaleString()}px.`;\n }\n case 'videoSizeLimit': {\n const { videoSize, videoSizeLimit } = details;\n return `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 `Dimension too large. Uploading might encounter issues. Try reduce dimension from ${width.toLocaleString()}×${height.toLocaleString()}px to ${newWidth.toLocaleString()}×${newHeight.toLocaleString()}px.`;\n }\n case 'videoFrameRateLimit': {\n // Not possible to detect this on client-side for now\n return 'Frame rate too high. Uploading might encounter issues.';\n }\n }\n };\n\n return (\n <>\n
    \n {\n setShowModal(true);\n }}\n >\n {suffixType === 'image' ? (\n {\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 {\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
    \n {descTextarea}\n
    \n \n \n \n {!!maxError && (\n {\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 \n \n )}\n
    \n \n {showModal && (\n {\n setShowModal(false);\n }}\n >\n
    \n {\n setShowModal(false);\n }}\n >\n \n \n
    \n

    \n {\n {\n image: 'Edit image description',\n video: 'Edit video description',\n audio: 'Edit audio description',\n }[suffixType]\n }\n

    \n
    \n
    \n
    \n {suffixType === 'image' ? (\n \"\"\n ) : suffixType === 'video' || suffixType === 'gifv' ? (\n
    \n
    \n {descTextarea}\n
    \n {suffixType === 'image' &&\n /^(png|jpe?g|gif|webp)$/i.test(subtype) &&\n !!states.settings.mediaAltGenerator &&\n !!IMG_ALT_API_URL && (\n \n \n \n }\n >\n {\n setUIState('loading');\n toastRef.current = showToast({\n text: 'Generating description. Please wait...',\n duration: -1,\n });\n // POST with multipart\n (async function () {\n try {\n const body = new FormData();\n body.append('image', file);\n const response = await fetch(IMG_ALT_API_URL, {\n method: 'POST',\n body,\n }).then((r) => r.json());\n if (response.error) {\n throw new Error(response.error);\n }\n setDescription(response.description);\n } catch (e) {\n console.error(e);\n showToast(\n `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 \n {lang && lang !== 'en' ? (\n \n Generate description…\n
    \n (English)\n
    \n ) : (\n Generate description…\n )}\n \n {!!lang && lang !== 'en' && (\n {\n setUIState('loading');\n toastRef.current = showToast({\n text: 'Generating description. Please wait...',\n duration: -1,\n });\n // POST with multipart\n (async function () {\n try {\n const body = new FormData();\n body.append('image', file);\n const params = `?lang=${lang}`;\n const response = await fetch(\n IMG_ALT_API_URL + params,\n {\n method: 'POST',\n body,\n },\n ).then((r) => r.json());\n if (response.error) {\n throw new Error(response.error);\n }\n setDescription(response.description);\n } catch (e) {\n console.error(e);\n showToast(\n `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 \n \n Generate description…\n
    ({localeCode2Text(lang)}){' '}\n \n — experimental\n \n
    \n \n )}\n \n )}\n {\n setShowModal(false);\n }}\n disabled={uiState === 'loading'}\n >\n Done\n \n
    \n
    \n
    \n
    \n \n )}\n \n );\n}\n\nfunction Poll({\n lang,\n poll,\n disabled,\n onInput = () => {},\n maxOptions,\n maxExpiration,\n minExpiration,\n maxCharactersPerOption,\n}) {\n const { options, expiresIn, multiple } = poll;\n\n return (\n
    \n
    \n {options.map((option, i) => (\n
    \n {\n const { value } = e.target;\n options[i] = value;\n onInput(poll);\n }}\n />\n {\n options.splice(i, 1);\n onInput(poll);\n }}\n >\n \n \n
    \n ))}\n
    \n
    \n = maxOptions}\n onClick={() => {\n options.push('');\n onInput(poll);\n }}\n >\n +\n {' '}\n \n \n
    \n
    \n {\n onInput(null);\n }}\n >\n Remove poll\n \n
    \n
    \n );\n}\n\nfunction filterShortcodes(emojis, searchTerm) {\n searchTerm = searchTerm.toLowerCase();\n\n // Return an array of shortcodes that start with or contain the search term, sorted by relevance and limited to the first 5\n return emojis\n .sort((a, b) => {\n let aLower = a.shortcode.toLowerCase();\n let bLower = b.shortcode.toLowerCase();\n\n let aStartsWith = aLower.startsWith(searchTerm);\n let bStartsWith = bLower.startsWith(searchTerm);\n let aContains = aLower.includes(searchTerm);\n let bContains = bLower.includes(searchTerm);\n let bothStartWith = aStartsWith && bStartsWith;\n let bothContain = aContains && bContains;\n\n return bothStartWith\n ? a.length - b.length\n : aStartsWith\n ? -1\n : bStartsWith\n ? 1\n : bothContain\n ? a.length - b.length\n : aContains\n ? -1\n : bContains\n ? 1\n : 0;\n })\n .slice(0, 5);\n}\n\nfunction encodeHTML(str) {\n return str.replace(/[&<>\"']/g, function (char) {\n return '&#' + char.charCodeAt(0) + ';';\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\nfunction MentionModal({\n onClose = () => {},\n onSelect = () => {},\n defaultSearchTerm,\n}) {\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 },\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 },\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 },\n );\n\n return (\n
    \n {!!onClose && (\n \n )}\n
    \n {\n e.preventDefault();\n debouncedLoadAccounts.flush?.();\n // const searchTerm = inputRef.current.value;\n // debouncedLoadAccounts(searchTerm);\n }}\n >\n {\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 defaultValue={defaultSearchTerm || ''}\n />\n \n
    \n
    \n {accounts?.length > 0 ? (\n \n {accounts.map((account, i) => {\n const relationship = relationshipsMap[account.id];\n return (\n \n \n {\n selectAccount(account);\n }}\n >\n \n \n \n );\n })}\n \n ) : uiState === 'loading' ? (\n
    \n \n
    \n ) : uiState === 'error' ? (\n
    \n

    Error loading accounts

    \n
    \n ) : null}\n
    \n
    \n );\n}\n\nfunction CustomEmojisModal({\n masto,\n instance,\n onClose = () => {},\n onSelect = () => {},\n defaultSearchTerm,\n}) {\n const [uiState, setUIState] = useState('default');\n const customEmojisList = useRef([]);\n const [customEmojis, setCustomEmojis] = useState([]);\n const recentlyUsedCustomEmojis = useMemo(\n () => store.account.get('recentlyUsedCustomEmojis') || [],\n );\n const searcherRef = useRef();\n useEffect(() => {\n setUIState('loading');\n (async () => {\n try {\n const [emojis, searcher] = await getCustomEmojis(instance, masto);\n console.log('emojis', emojis);\n searcherRef.current = searcher;\n setCustomEmojis(emojis);\n setUIState('default');\n } catch (e) {\n setUIState('error');\n console.error(e);\n }\n })();\n }, []);\n\n const customEmojisCatList = useMemo(() => {\n // Group emojis by category\n const emojisCat = {\n '--recent--': recentlyUsedCustomEmojis.filter((emoji) =>\n customEmojis.find((e) => e.shortcode === emoji.shortcode),\n ),\n };\n const othersCat = [];\n customEmojis.forEach((emoji) => {\n customEmojisList.current?.push?.(emoji);\n if (!emoji.category) {\n othersCat.push(emoji);\n return;\n }\n if (!emojisCat[emoji.category]) {\n emojisCat[emoji.category] = [];\n }\n emojisCat[emoji.category].push(emoji);\n });\n if (othersCat.length) {\n emojisCat['--others--'] = othersCat;\n }\n return emojisCat;\n }, [customEmojis]);\n\n const scrollableRef = useRef();\n const [matches, setMatches] = useState(null);\n const 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 return (\n
    \n {!!onClose && (\n \n )}\n
    \n
    \n Custom emojis{' '}\n {uiState === 'loading' ? (\n \n ) : (\n • {instance}\n )}\n
    \n {\n e.preventDefault();\n const emoji = matches[0];\n if (emoji) {\n onSelectEmoji(`:${emoji.shortcode}:`);\n }\n }}\n >\n \n \n
    \n
    \n {matches !== null ? (\n
      \n {matches.map((emoji) => (\n
    • \n {\n onSelectEmoji(`:${emoji.shortcode}:`);\n }}\n showCode\n />\n
    • \n ))}\n
    \n ) : (\n
    \n {uiState === 'error' && (\n
    \n

    Error loading custom emojis

    \n
    \n )}\n {uiState === 'default' &&\n Object.entries(customEmojisCatList).map(\n ([category, emojis]) =>\n !!emojis?.length && (\n <>\n
    \n {{\n '--recent--': 'Recently used',\n '--others--': 'Others',\n }[category] || category}\n
    \n \n \n ),\n )}\n
    \n )}\n
    \n
    \n );\n}\n\nconst CustomEmojisList = memo(({ emojis, onSelect }) => {\n const [max, setMax] = useState(CUSTOM_EMOJIS_COUNT);\n const showMore = emojis.length > max;\n return (\n
    \n {emojis.slice(0, max).map((emoji) => (\n {\n onSelect(`:${emoji.shortcode}:`);\n }}\n />\n ))}\n {showMore && (\n setMax(max + CUSTOM_EMOJIS_COUNT)}\n >\n {(emojis.length - max).toLocaleString()} more…\n \n )}\n
    \n );\n});\n\nconst CustomEmojiButton = memo(({ emoji, onClick, showCode }) => {\n const addEdges = (e) => {\n // Add edge-left or edge-right class based on self position relative to scrollable parent\n // If near left edge, add edge-left, if near right edge, add edge-right\n const buffer = 88;\n const parent = e.currentTarget.closest('main');\n if (parent) {\n const rect = parent.getBoundingClientRect();\n const selfRect = e.currentTarget.getBoundingClientRect();\n const targetClassList = e.currentTarget.classList;\n if (selfRect.left < rect.left + buffer) {\n targetClassList.add('edge-left');\n targetClassList.remove('edge-right');\n } else if (selfRect.right > rect.right - buffer) {\n targetClassList.add('edge-right');\n targetClassList.remove('edge-left');\n } else {\n targetClassList.remove('edge-left', 'edge-right');\n }\n }\n };\n\n return (\n \n \n {!!emoji.staticUrl && (\n \n )}\n \n \n {showCode && (\n <>\n {' '}\n {emoji.shortcode}\n \n )}\n \n );\n});\n\nconst GIFS_PER_PAGE = 20;\nfunction GIFPickerModal({ onClose = () => {}, onSelect = () => {} }) {\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 };\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
    \n {!!onClose && (\n \n )}\n
    \n {\n e.preventDefault();\n fetchGIFs({ offset: 0 });\n }}\n >\n \n \n \n
    \n
    \n {uiState === 'default' && (\n
    \n

    Type to search GIFs

    \n
    \n )}\n {uiState === 'loading' && !results?.data?.length && (\n
    \n \n
    \n )}\n {results?.data?.length > 0 ? (\n <>\n
      \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
    • \n {\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 \n \n {strippedWebP && (\n \n )}\n {\n e.target.style.backgroundColor = 'transparent';\n }}\n />\n \n
      {alt_text || title}
      \n \n \n
    • \n );\n })}\n
    \n

    \n {results.pagination?.offset > 0 && (\n {\n fetchGIFs({\n offset: results.pagination?.offset - GIFS_PER_PAGE,\n });\n }}\n >\n \n Previous\n \n )}\n \n {results.pagination?.offset + results.pagination?.count <\n results.pagination?.total_count && (\n {\n fetchGIFs({\n offset: results.pagination?.offset + GIFS_PER_PAGE,\n });\n }}\n >\n Next \n \n )}\n

    \n \n ) : (\n uiState === 'results' && (\n
    \n

    No results

    \n
    \n )\n )}\n {uiState === 'error' && (\n
    \n

    Error loading GIFs

    \n
    \n )}\n
    \n
    \n );\n}\n\nexport default Compose;\n"],"names":["Combobox","input","list","tabInsertsSuggestions","defaultFirstOption","event","keyboardBindings","trackComposition","commitWithElement","_a","visible","indexDiff","focusEl","els","focusIndex","indexOfItem","newIndex","target","el","scrollTo","combobox","commit","fireCommitEvent","container","inViewport","element","scrollTop","containerBottom","top","bottom","boundary","query","text","key","cursor","multiWord","lookBackIndex","lastMatchPosition","keyIndex","pre","CustomHTMLElement","InputStyleCloneUpdateEvent","CloneRegistry","_InputStyleCloneElement","__privateAdd","_InputStyleCloneElement_instances","_styleObserver","__privateMethod","updateStyles_fn","_resizeObserver","requestUpdateLayout_fn","_inputRef","_container","_xOffset","_yOffset","_isLayoutUpdating","_onInput","updateText_fn","_onDocumentScrollOrResize","usingInput_fn","__privateSet","__privateGet","clone","fn","updateLayout_fn","inputStyle","inputRect","cloneRect","prop","propertiesToCopy","InputStyleCloneElement","e","_InputRange","startOffset","endOffset","_InputRange_instances","_inputElement","_startOffset","_endOffset","selectionStart","selectionEnd","offset","clampOffset_fn","toStart","createCloneRange_fn","styleClone_get","cloneElement_get","range","textNode","InputRange","states","TextExpander","expander","match","menu","_b","position","caretRect","targetPosition","currentPosition","delta","currentStyle","item","beginning","remaining","detail","suffix","value","found","providers","provide","result","x","TextExpanderElement","keysAttr","keys","multiWordAttr","globalMultiWord","state","ansiRegex","onlyFirst","pattern","regex","stripAnsi","string","segmenter","stringLength","countAnsiEscapeCodes","length","_","poweredByGiphyURL","PHANPY_IMG_ALT_API_URL","IMG_ALT_API_URL","PHANPY_GIPHY_API_KEY","GIPHY_API_KEY","import","supportedLanguagesMap","supportedLanguages","reduce","acc","l","code","common","native","expiryOptions","expirySeconds","Object","values","oneDay","expiresInFromExpiresAt","expiresAt","Date","getTime","now","find","s","document","createElement","role","className","windowMargin","observer","IntersectionObserver","entries","forEach","entry","isIntersecting","left","width","boundingClientRect","innerWidth","window","style","observe","DEFAULT_LANG","localeMatch","Intl","DateTimeFormat","resolvedOptions","locale","navigator","languages","map","urlRegexObj","RegExp","urlRegex","source","flags","usernameRegex","urlPlaceholder","countableText","inputText","replace","USERNAME_RE","MENTION_RE","HASHTAG_RE","SHORTCODE_RE_FRAGMENT","SCAN_RE","Segmenter","escapeHTML","highlightText","maxCharacters","Infinity","composerCharacterCount","withinLimitHTML","exceedLimitHTML","htmlSegments","segment","index","rtf","RelativeTimeFormat","CUSTOM_EMOJIS_COUNT","Compose","onClose","replyToStatus","editStatus","draftStatus","standalone","hasOpener","console","masto","instance","uiState","setUIState","useState","UID","uid","log","currentAccount","currentAccountInfo","maxMediaAttachments","charactersReservedPerUrl","imageMatrixLimit","supportedMimeTypes","imageSizeLimit","videoSizeLimit","videoMatrixLimit","videoFrameRateLimit","maxExpiration","maxOptions","maxCharactersPerOption","minExpiration","spoilerTextRef","useRef","textareaRef","store","prevLanguage","language","sensitive","setMediaAttachments","setLanguage","oninputTextarea","poll","account","focusTextarea","dispatchEvent","setTimeout","spoilerText","useEffect","visibility2","language2","sensitive2","visibility","current","m","allMentions","prefs","setSensitive","poll2","mediaAttachments","options","expiresIn","statusSource","dataset","mediaAttachments2","setVisibility","composablePoll","status","o","formRef","hasValue","hasMediaAttachments","isSelf","hasOnlyAcct","confirmClose","hasIDMediaAttachments","beforeUnloadCopy","id","handleBeforeUnload","sameWithSource","getCharCount","updateCharCount","supportsCloseWatcher","useHotkeys","yes","addEventListener","capture","modals","hasModal","hasOnlyComposer","prevBackgroundDraft","count","escDownRef","ignoreEventWhen","useCloseWatcher","canClose","draftKey","getCurrentAccountNS","backgroundDraft","useInterval","db","handleItems","username","acct","items","i2","file","files","drafts","allowedFiles","updatedAt","then","debug","error","mediaFiles","handleDragover","includes","showMentionPicker","setShowMentionPicker","showEmoji2Picker","setShowEmoji2Picker","showGIFPicker","autoDetectedLanguages","setAutoDetectedLanguages","topSupportedLanguages","restSupportedLanguages","useMemo","topLanguages","contentTranslationHideLanguages","max","restLanguages","commonB","type","size","url","codeA","commonA","codeB","onMinimize","saveUnsavedDraft","_jsxs","dataTransfer","_jsx","children","passData","Icon","alert","settings","sort","class","avatarStatic","instanceURL","onClick","opener","composerState","Status","replyToStatusMonthsAgo","_Fragment","formData","previewMode","option","media","pointerEvents","opacity","mediaPromises","attachment","description","params2","removeNullUndefined","res","results","some","hasNoDescriptions","params","saveStatus","newStatus","allSettled","e2","media_attributes","in_reply_to_id","Textarea","onChange","limit","action","title","icon","name","MediaAttachment","attachments","newAttachments","required","fileID","performSearch","q","v1","search","resolve","v2","fetch","onTrigger","defaultSearchTerm","newPoll","setPoll","onDescriptionChange","i","accept","multiple","setShowGIFPicker","Array","Loader","CharCountMeter","disabled","MentionModal","socialAddress","textarea","textBeforeMention","spaceAfterMention","spaceBeforeMention","textAfterMention","newText","Modal","emojiShortcode","textBeforeEmoji","spaceBeforeEmoji","spaceAfterEmoji","textAfterEmoji","GIFPickerModal","alt_text","showToast","blob","onSelect","theToast","offsetHeight","scrollHeight","clientHeight","height","visibleEmojis","searcher","getCustomEmojis","pmem","_getCustomEmojis","cacheKeyArg","keyArg","detectLangs","langs","lang","newMediaAttachments","setText","ref","props","searcherRef","r","emojis","textExpanderRef","textExpanderTextRef","text2","emoji","shortcode","encodeHTML","forwardRef","html","textareaProps","handleChange","total","history","cur","matched","handleValue","more","searchResults","v","displayName","handleCommited","shortenNumber","slowHighlightPerf","composeHighlightRef","start","end","debouncedAutoDetectLanguage","useDebouncedCallback","dom","mark","Event","resizeObserver","throttleHighlightText","bullet","postSpaces","anything","lastLine","innerHTML","number","preSpaces","newBullet","pos","innerText","autoResizeTextarea","dir","rows","cols","onKeyDown","hidden","charCount","leftChars","ctrlKey","setRangeText","setSelectionRange","prettyBytes","bytes","unitIndex","units","scaleDimension","newWidth","scalingFactor","newHeight","onInput","onRemove","supportsEdit","supports","onScroll","checkMaxError","configuration","getCurrentInstanceConfiguration","snapStates","setImageMatrix","imageMatrix","setMaxError","matrix","Math","videoMatrix","setDescription","suffixType","subtype","debouncedOnDescriptionChange","timer","maxError","details","toastRef","maxErrorText","err","type2","imageSizeLimit2","imageSize","imageMatrixLimit2","showModal","videoSize","clearTimeout","videoSizeLimit2","descTextarea","videoMatrix2","videoMatrixLimit2","autoCapitalize","autoComplete","naturalWidth","naturalHeight","maxErrorToast","setVideoMatrix","videoWidth","videoHeight","setShowModal","tabIndex","src","onLoad","playsinline","onLoadedMetadata","Menu2","body","response","MenuItem","menuButton","localeCode2Text","append","Poll","checked","label","maxlength","placeholder","str","char","obj","accounts2","relationships","fetchRelationships","relationshipsMap","setRelationshipsMap","filter","setAccounts","loadRelationships","loadAccounts","inputRef","filterShortcodes","searchTerm","bLower","aStartsWith","bStartsWith","aContains","bothContain","bContains","selectedAccount","accounts","selectedIndex","selectAccount","listRef","setSelectedIndex","selectedItem","term","debouncedLoadAccounts","enableOnFormTags","AccountBlock","relationship","inline","customEmojis","setCustomEmojis","onSubmit","recentlyUsedCustomEmojis","autocorrect","customEmojisList","othersCat","emojisCat","useCallback","_c","scrollableRef","setMatches","onFind","abrupt","onSelectEmoji","recentlyUsedCustomEmojis2","recentlyUsedEmojiIndex","emoji2","customEmojisCatList","category","matches","CustomEmojiButton","queueMicrotask","splice","CustomEmojisList","setMax","showMore","memo","showCode","parent","rect","selfRect","targetClassList","addEdges","GIFS_PER_PAGE","setResults","qRef","closest","getBoundingClientRect","remove","staticUrl","loading","debouncedOnInput","currentOffset","gif","fixed_height_downsampled","original","pagination","fixed_height_small","fixed_height","theImage","urlObj","strippedWebP","webp","webpObj","url2","theURL","mp4","urlObj2","strippedURL2","strippedURL","images","fetchGIFs","parse"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4]} \ No newline at end of file diff --git a/assets/fuse-4Bvpr1kU.js b/assets/fuse-4Bvpr1kU.js deleted file mode 100644 index 51f2513..0000000 --- a/assets/fuse-4Bvpr1kU.js +++ /dev/null @@ -1,183 +0,0 @@ -import{Z as ot,E as De,c as s,h as te,q as Ie,A as j,_ as pn,y as se,$ as bn,o as St,a0 as I,a1 as ma,a2 as Gn,a3 as ga,T as fe,D as kt,p as Di,a4 as va,a5 as Ri,F as Ni,k as U,x as it,K as st,i as ya,s as W,a6 as _a,a as Xn,n as ba,a7 as Fi,a8 as wa,a9 as zi,j as fo,L as Hi,g as ho,aa as Ta,ab as Pe,ac as Ea,ad as xa,ae as Dn,w as tt,u as wn,d as Zo,b as Ze,J as Vi,af as Ma,ag as Sa,ah as ka}from"./useTitle-Mh8hVeGN.js";import{e as Aa}from"./tinyld-light-PxOyhYWY.js";import{m as Ia}from"./index-CeOZgm-k.js";function Kr(){return Kr=Object.assign?Object.assign.bind():function(e){for(var t=1;t'),!0):t?e.some(function(n){return t.includes(n)})||e.includes("*"):!0}var Na=function(t,n,r){r===void 0&&(r=!1);var o=n.alt,i=n.meta,a=n.mod,u=n.shift,c=n.ctrl,l=n.keys,f=t.key,d=t.code,p=t.ctrlKey,m=t.metaKey,h=t.shiftKey,g=t.altKey,y=ht(d),T=f.toLowerCase();if(!(l!=null&&l.includes(y))&&!(l!=null&&l.includes(T))&&!["ctrl","control","unknown","meta","alt","shift","os"].includes(y))return!1;if(!r){if(o===!g&&T!=="alt"||u===!h&&T!=="shift")return!1;if(a){if(!m&&!p)return!1}else if(i===!m&&T!=="meta"&&T!=="os"||c===!p&&T!=="ctrl"&&T!=="control")return!1}return l&&l.length===1&&(l.includes(T)||l.includes(y))?!0:l?Ca(l):!l},Fa=ot(void 0),za=function(){return De(Fa)};function Ki(e,t){return e&&t&&typeof e=="object"&&typeof t=="object"?Object.keys(e).length===Object.keys(t).length&&Object.keys(e).reduce(function(n,r){return n&&Ki(e[r],t[r])},!0):e===t}var Ha=ot({hotkeys:[],enabledScopes:[],toggleScope:function(){},enableScope:function(){},disableScope:function(){}}),Va=function(){return De(Ha)};function ja(e){var t=j(void 0);return Ki(t.current,e)||(t.current=e),t.current}var Yo=function(t){t.stopPropagation(),t.preventDefault(),t.stopImmediatePropagation()},Ba=typeof window<"u"?pn:se;function Nt(e,t,n,r){var o=j(null),i=j(!1),a=n instanceof Array?r instanceof Array?void 0:r:n,u=po(e)?e.join(a==null?void 0:a.splitKey):e,c=n instanceof Array?n:r instanceof Array?r:void 0,l=Ie(t,c??[]),f=j(l);c?f.current=l:f.current=t;var d=ja(a),p=Va(),m=p.enabledScopes,h=za();return Ba(function(){if(!((d==null?void 0:d.enabled)===!1||!Ra(m,d==null?void 0:d.scopes))){var g=function(w,b){var M;if(b===void 0&&(b=!1),!(Da(w)&&!Wi(w,d==null?void 0:d.enableOnFormTags))){if(o.current!==null){var A=o.current.getRootNode();if((A instanceof Document||A instanceof ShadowRoot)&&A.activeElement!==o.current&&!o.current.contains(A.activeElement)){Yo(w);return}}(M=w.target)!=null&&M.isContentEditable&&!(d!=null&&d.enableOnContentEditable)||xr(u,d==null?void 0:d.splitKey).forEach(function(O){var P,x=Mr(O,d==null?void 0:d.combinationKey);if(Na(w,x,d==null?void 0:d.ignoreModifiers)||(P=x.keys)!=null&&P.includes("*")){if(d!=null&&d.ignoreEventWhen!=null&&d.ignoreEventWhen(w)||b&&i.current)return;if(Pa(w,x,d==null?void 0:d.preventDefault),!Oa(w,x,d==null?void 0:d.enabled)){Yo(w);return}f.current(w,x),b||(i.current=!0)}})}},y=function(w){w.key!==void 0&&(Bi(ht(w.code)),((d==null?void 0:d.keydown)===void 0&&(d==null?void 0:d.keyup)!==!0||d!=null&&d.keydown)&&g(w))},T=function(w){w.key!==void 0&&(Ui(ht(w.code)),i.current=!1,d!=null&&d.keyup&&g(w,!0))},_=o.current||(a==null?void 0:a.document)||document;return _.addEventListener("keyup",T),_.addEventListener("keydown",y),h&&xr(u,d==null?void 0:d.splitKey).forEach(function(E){return h.addHotkey(Mr(E,d==null?void 0:d.combinationKey,d==null?void 0:d.description))}),function(){_.removeEventListener("keyup",T),_.removeEventListener("keydown",y),h&&xr(u,d==null?void 0:d.splitKey).forEach(function(E){return h.removeHotkey(Mr(E,d==null?void 0:d.combinationKey,d==null?void 0:d.description))})}}},[u,d,m]),o}var mo={exports:{}};/*! - * Toastify js 1.12.0 - * https://github.com/apvarun/toastify-js - * @license MIT licensed - * - * Copyright (C) 2018 Varun A P - */var mf=mo.exports;(function(e){(function(t,n){e.exports?e.exports=n():t.Toastify=n()})(bn,function(t){var n=function(a){return new n.lib.init(a)},r="1.12.0";n.defaults={oldestFirst:!0,text:"Toastify is awesome!",node:void 0,duration:3e3,selector:void 0,callback:function(){},destination:void 0,newWindow:!1,close:!1,gravity:"toastify-top",positionLeft:!1,position:"",backgroundColor:"",avatar:"",className:"",stopOnFocus:!0,onClick:function(){},offset:{x:0,y:0},escapeMarkup:!0,ariaLive:"polite",style:{background:""}},n.lib=n.prototype={toastify:r,constructor:n,init:function(a){return a||(a={}),this.options={},this.toastElement=null,this.options.text=a.text||n.defaults.text,this.options.node=a.node||n.defaults.node,this.options.duration=a.duration===0?0:a.duration||n.defaults.duration,this.options.selector=a.selector||n.defaults.selector,this.options.callback=a.callback||n.defaults.callback,this.options.destination=a.destination||n.defaults.destination,this.options.newWindow=a.newWindow||n.defaults.newWindow,this.options.close=a.close||n.defaults.close,this.options.gravity=a.gravity==="bottom"?"toastify-bottom":n.defaults.gravity,this.options.positionLeft=a.positionLeft||n.defaults.positionLeft,this.options.position=a.position||n.defaults.position,this.options.backgroundColor=a.backgroundColor||n.defaults.backgroundColor,this.options.avatar=a.avatar||n.defaults.avatar,this.options.className=a.className||n.defaults.className,this.options.stopOnFocus=a.stopOnFocus===void 0?n.defaults.stopOnFocus:a.stopOnFocus,this.options.onClick=a.onClick||n.defaults.onClick,this.options.offset=a.offset||n.defaults.offset,this.options.escapeMarkup=a.escapeMarkup!==void 0?a.escapeMarkup:n.defaults.escapeMarkup,this.options.ariaLive=a.ariaLive||n.defaults.ariaLive,this.options.style=a.style||n.defaults.style,a.backgroundColor&&(this.options.style.background=a.backgroundColor),this},buildToast:function(){if(!this.options)throw"Toastify is not initialized";var a=document.createElement("div");a.className="toastify on "+this.options.className,this.options.position?a.className+=" toastify-"+this.options.position:this.options.positionLeft===!0?(a.className+=" toastify-left",console.warn("Property `positionLeft` will be depreciated in further versions. Please use `position` instead.")):a.className+=" toastify-right",a.className+=" "+this.options.gravity,this.options.backgroundColor&&console.warn('DEPRECATION NOTICE: "backgroundColor" is being deprecated. Please use the "style.background" property.');for(var u in this.options.style)a.style[u]=this.options.style[u];if(this.options.ariaLive&&a.setAttribute("aria-live",this.options.ariaLive),this.options.node&&this.options.node.nodeType===Node.ELEMENT_NODE)a.appendChild(this.options.node);else if(this.options.escapeMarkup?a.innerText=this.options.text:a.innerHTML=this.options.text,this.options.avatar!==""){var c=document.createElement("img");c.src=this.options.avatar,c.className="toastify-avatar",this.options.position=="left"||this.options.positionLeft===!0?a.appendChild(c):a.insertAdjacentElement("afterbegin",c)}if(this.options.close===!0){var l=document.createElement("button");l.type="button",l.setAttribute("aria-label","Close"),l.className="toast-close",l.innerHTML="✖",l.addEventListener("click",(function(y){y.stopPropagation(),this.removeElement(this.toastElement),window.clearTimeout(this.toastElement.timeOutValue)}).bind(this));var f=window.innerWidth>0?window.innerWidth:screen.width;(this.options.position=="left"||this.options.positionLeft===!0)&&f>360?a.insertAdjacentElement("afterbegin",l):a.appendChild(l)}if(this.options.stopOnFocus&&this.options.duration>0){var d=this;a.addEventListener("mouseover",function(y){window.clearTimeout(a.timeOutValue)}),a.addEventListener("mouseleave",function(){a.timeOutValue=window.setTimeout(function(){d.removeElement(a)},d.options.duration)})}if(typeof this.options.destination<"u"&&a.addEventListener("click",(function(y){y.stopPropagation(),this.options.newWindow===!0?window.open(this.options.destination,"_blank"):window.location=this.options.destination}).bind(this)),typeof this.options.onClick=="function"&&typeof this.options.destination>"u"&&a.addEventListener("click",(function(y){y.stopPropagation(),this.options.onClick()}).bind(this)),typeof this.options.offset=="object"){var p=o("x",this.options),m=o("y",this.options),h=this.options.position=="left"?p:"-"+p,g=this.options.gravity=="toastify-top"?m:"-"+m;a.style.transform="translate("+h+","+g+")"}return a},showToast:function(){this.toastElement=this.buildToast();var a;if(typeof this.options.selector=="string"?a=document.getElementById(this.options.selector):this.options.selector instanceof HTMLElement||typeof ShadowRoot<"u"&&this.options.selector instanceof ShadowRoot?a=this.options.selector:a=document.body,!a)throw"Root element is not defined";var u=n.defaults.oldestFirst?a.firstChild:a.lastChild;return a.insertBefore(this.toastElement,u),n.reposition(),this.options.duration>0&&(this.toastElement.timeOutValue=window.setTimeout((function(){this.removeElement(this.toastElement)}).bind(this),this.options.duration)),this},hideToast:function(){this.toastElement.timeOutValue&&clearTimeout(this.toastElement.timeOutValue),this.removeElement(this.toastElement)},removeElement:function(a){a.className=a.className.replace(" on",""),window.setTimeout((function(){this.options.node&&this.options.node.parentNode&&this.options.node.parentNode.removeChild(this.options.node),a.parentNode&&a.parentNode.removeChild(a),this.options.callback.call(a),n.reposition()}).bind(this),400)}},n.reposition=function(){for(var a={top:15,bottom:15},u={top:15,bottom:15},c={top:15,bottom:15},l=document.getElementsByClassName("toastify"),f,d=0;d0?window.innerWidth:screen.width;h<=360?(l[d].style[f]=c[f]+"px",c[f]+=p+m):i(l[d],"toastify-left")===!0?(l[d].style[f]=a[f]+"px",a[f]+=p+m):(l[d].style[f]=u[f]+"px",u[f]+=p+m)}return this};function o(a,u){return u.offset[a]?isNaN(u.offset[a])?u.offset[a]:u.offset[a]+"px":"0px"}function i(a,u){return!a||typeof u!="string"?!1:!!(a.className&&a.className.trim().split(/\s+/gi).indexOf(u)>-1)}return n.lib.init.prototype=n.lib,n})})(mo);var Ua=mo.exports;const Wa=St(Ua);window._showToast=$e;function $e(e){typeof e=="string"&&(e={text:e});const{onClick:t,delay:n,...r}=e,o=Wa({className:`${t||e.destination?"shiny-pill":""}`,gravity:"bottom",position:"center",...r,onClick:()=>{t==null||t(o)}});return n?setTimeout(()=>{o.showToast()},n):o.showToast(),o}function gf(e,t,n,r){const o=j(e);se(()=>{o.current=e},[e,n]),se(()=>{!r||t===null||t===!1||o.current()},[r]),se(()=>{if(t===null||t===!1)return;const a=setInterval(()=>o.current(),t);return()=>clearInterval(a)},[t])}function Ka(e){const t=URL.parse("/compose/",window.location),{width:n,height:r}=window.screen,o=Math.max(0,(n-600)/2),i=Math.max(0,(r-450)/2),a=Math.min(n,600),u=Math.min(r,450),c=(e==null?void 0:e.uid)||Math.random(),l=window.open(t,"compose"+c,`width=${a},height=${u},left=${o},top=${i}`);return l?l.__COMPOSE__=e:alert("Looks like your browser is blocking popups."),l}const Za=/^((?!chrome|android).)*safari/i.test(navigator.userAgent);function Ya(){if(Za){const e=document.createElement("input");e.style.position="absolute",e.style.top="0",e.style.left="0",e.style.opacity="0",document.body.appendChild(e),e.focus(),setTimeout(()=>{document.body.removeChild(e)},500)}}const Zi={x:()=>I(()=>import("./icons/close-line-YTE7hIJE.js"),[],import.meta.url),heart:()=>I(()=>import("./icons/heart-line-VwvWYh8h.js"),[],import.meta.url),bookmark:()=>I(()=>import("./icons/bookmark-line-D6jQ7QFs.js"),[],import.meta.url),"check-circle":()=>I(()=>import("./icons/check-circle-line-sE41WGxF.js"),[],import.meta.url),"x-circle":()=>I(()=>import("./icons/close-circle-line-qd3g541O.js"),[],import.meta.url),transfer:()=>I(()=>import("./icons/transfer-4-line-Q9QJoxz3.js"),[],import.meta.url),rocket:()=>I(()=>import("./icons/rocket-line-rZbVYYCZ.js"),[],import.meta.url),"arrow-left":{module:()=>I(()=>import("./icons/arrow-left-line-_YC6-XGG.js"),[],import.meta.url),rtl:!0},"arrow-right":{module:()=>I(()=>import("./icons/arrow-right-line-PypiEqpu.js"),[],import.meta.url),rtl:!0},"arrow-up":()=>I(()=>import("./icons/arrow-up-line-fcuKqhVE.js"),[],import.meta.url),"arrow-down":()=>I(()=>import("./icons/arrow-down-line-0TRJUP_K.js"),[],import.meta.url),earth:()=>I(()=>import("./icons/earth-line-t1Um8wpQ.js"),[],import.meta.url),lock:()=>I(()=>import("./icons/lock-line-0jNHqZpm.js"),[],import.meta.url),unlock:()=>I(()=>import("./icons/unlock-line-w3piJMVb.js"),[],import.meta.url),"eye-close":()=>I(()=>import("./icons/eye-close-line-lBiePPv9.js"),[],import.meta.url),"eye-open":()=>I(()=>import("./icons/eye-2-line-vz_Kw-rK.js"),[],import.meta.url),message:()=>I(()=>import("./icons/mail-line-5XLS6FEo.js"),[],import.meta.url),comment:{module:()=>I(()=>import("./icons/chat-3-line-F0xcdpXY.js"),[],import.meta.url),rtl:!0},comment2:{module:()=>I(()=>import("./icons/comment-2-line-xEXuT-Ip.js"),[],import.meta.url),rtl:!0},home:()=>I(()=>import("./icons/home-3-line-qJiZhXUH.js"),[],import.meta.url),notification:()=>I(()=>import("./icons/notification-line-olNPLtgS.js"),[],import.meta.url),follow:()=>I(()=>import("./icons/user-follow-line-k_GCWTtp.js"),[],import.meta.url),"follow-add":()=>I(()=>import("./icons/user-add-line-zzW9OULB.js"),[],import.meta.url),poll:[()=>I(()=>import("./icons/chart-bar-line-5r_DfN2w.js"),[],import.meta.url),"90deg"],pencil:()=>I(()=>import("./icons/pencil-line-bKXqElLR.js"),[],import.meta.url),quill:()=>I(()=>import("./icons/quill-pen-line-h_5-FsGz.js"),[],import.meta.url),at:()=>I(()=>import("./icons/at-line-9vJS_Hnl.js"),[],import.meta.url),attachment:()=>I(()=>import("./icons/attachment-line-C2PUa1Ke.js"),[],import.meta.url),upload:()=>I(()=>import("./icons/upload-3-line-Qsjvubiw.js"),[],import.meta.url),gear:()=>I(()=>import("./icons/settings-3-line-kt4MSpRv.js"),[],import.meta.url),more:()=>I(()=>import("./icons/more-3-line-wUD-Yhmj.js"),[],import.meta.url),more2:()=>I(()=>import("./icons/more-1-fill-je1-slyh.js"),[],import.meta.url),external:{module:()=>I(()=>import("./icons/external-link-line-8nOOkmFu.js"),[],import.meta.url),rtl:!0},popout:{module:()=>I(()=>import("./icons/external-link-line-8nOOkmFu.js"),[],import.meta.url),rtl:!0},popin:{module:()=>I(()=>import("./icons/external-link-line-8nOOkmFu.js"),[],import.meta.url),rotate:"180deg",rtl:!0},plus:()=>I(()=>import("./icons/add-circle-line--O-MfyNy.js"),[],import.meta.url),"chevron-left":{module:()=>I(()=>import("./icons/left-line-Jck0yVmC.js"),[],import.meta.url),rtl:!0},"chevron-right":{module:()=>I(()=>import("./icons/right-line-7VBoqLdz.js"),[],import.meta.url),rtl:!0},"chevron-down":()=>I(()=>import("./icons/down-line-9PeS5YhF.js"),[],import.meta.url),reply:{module:()=>I(()=>import("./icons/share-forward-line-4jL-2Q4u.js"),[],import.meta.url),rotate:"180deg",flip:"horizontal",rtl:!0},thread:()=>I(()=>import("./icons/route-line-2YYy3958.js"),[],import.meta.url),group:{module:()=>I(()=>import("./icons/group-line-JvhJklhQ.js"),[],import.meta.url),rtl:!0},bot:()=>I(()=>import("./icons/android-2-line-uPwvVubH.js"),[],import.meta.url),menu:()=>I(()=>import("./icons/rows-4-line-SxGPYpTa.js"),[],import.meta.url),list:{module:()=>I(()=>import("./icons/list-check-line-qNqx9Mm4.js"),[],import.meta.url),rtl:!0},search:()=>I(()=>import("./icons/search-2-line-G39AynEw.js"),[],import.meta.url),hashtag:()=>I(()=>import("./icons/hashtag-line-SS3QMu1R.js"),[],import.meta.url),info:()=>I(()=>import("./icons/information-line-8SOch6cR.js"),[],import.meta.url),shortcut:()=>I(()=>import("./icons/lightning-line-JMYUlCZM.js"),[],import.meta.url),user:()=>I(()=>import("./icons/user-4-line-zT_bpOrS.js"),[],import.meta.url),following:()=>I(()=>import("./icons/walk-line-CF7a5s4t.js"),[],import.meta.url),pin:()=>I(()=>import("./icons/pin-line-ULyRQyWZ.js"),[],import.meta.url),unpin:[()=>I(()=>import("./icons/pin-line-ULyRQyWZ.js"),[],import.meta.url),"180deg"],bus:()=>I(()=>import("./icons/bus-2-line-XuQdDZ_w.js"),[],import.meta.url),link:()=>I(()=>import("./icons/link-2-line-BUqp1EwN.js"),[],import.meta.url),history:()=>I(()=>import("./icons/history-line-yoG7K8wL.js"),[],import.meta.url),share:()=>I(()=>import("./icons/share-2-line-PYo-zN94.js"),[],import.meta.url),sparkles:()=>I(()=>import("./icons/sparkles-line-wjZWGZ1a.js"),[],import.meta.url),sparkles2:()=>I(()=>import("./icons/sparkles-2-line-g2FqdZ0R.js"),[],import.meta.url),exit:{module:()=>I(()=>import("./icons/exit-line-l-1uUgI7.js"),[],import.meta.url),rtl:!0},translate:()=>I(()=>import("./icons/translate-line-HpDtlqS2.js"),[],import.meta.url),play:()=>I(()=>import("./icons/play-fill-Ey-zv2eL.js"),[],import.meta.url),trash:()=>I(()=>import("./icons/delete-2-line-pjUduCFs.js"),[],import.meta.url),mute:{module:()=>I(()=>import("./icons/volume-mute-line-WthBoXru.js"),[],import.meta.url),rtl:!0},unmute:{module:()=>I(()=>import("./icons/volume-line-PZujbN8h.js"),[],import.meta.url),rtl:!0},block:()=>I(()=>import("./icons/forbid-circle-line-3FxopGoP.js"),[],import.meta.url),unblock:[()=>I(()=>import("./icons/forbid-circle-line-3FxopGoP.js"),[],import.meta.url),"180deg"],flag:()=>I(()=>import("./icons/flag-1-line-xvcg7G7Q.js"),[],import.meta.url),time:()=>I(()=>import("./icons/time-line-ThP0kTRr.js"),[],import.meta.url),refresh:()=>I(()=>import("./icons/refresh-2-line-t42qqclb.js"),[],import.meta.url),emoji2:()=>I(()=>import("./icons/emoji-2-line--uNVc2IC.js"),[],import.meta.url),filter:()=>I(()=>import("./icons/filter-2-line-KyjbFYlO.js"),[],import.meta.url),filters:()=>I(()=>import("./icons/filter-line-1KEfnWDm.js"),[],import.meta.url),chart:()=>I(()=>import("./icons/chart-line-line-pHaLt6yC.js"),[],import.meta.url),react:()=>I(()=>import("./icons/react-line-YfZPqZem.js"),[],import.meta.url),layout4:{module:()=>I(()=>import("./icons/layout-4-line-FOdnyEcZ.js"),[],import.meta.url),rtl:!0},layout5:()=>I(()=>import("./icons/layout-5-line-9Kks7dle.js"),[],import.meta.url),announce:{module:()=>I(()=>import("./icons/announcement-line-MSlAmDH1.js"),[],import.meta.url),rtl:!0},alert:()=>I(()=>import("./icons/alert-line-zyc6hy8V.js"),[],import.meta.url),round:()=>I(()=>import("./icons/round-fill-a0rplSmV.js"),[],import.meta.url),"arrow-up-circle":()=>I(()=>import("./icons/arrow-up-circle-line-e3kZqEZN.js"),[],import.meta.url),"arrow-down-circle":()=>I(()=>import("./icons/arrow-down-circle-line-mpqFtRtO.js"),[],import.meta.url),clipboard:{module:()=>I(()=>import("./icons/clipboard-line-9F_Yeo71.js"),[],import.meta.url),rtl:!0},"account-edit":()=>I(()=>import("./icons/user-edit-line-9VnWCh0X.js"),[],import.meta.url),"account-warning":()=>I(()=>import("./icons/user-warning-line-gL3RGb1N.js"),[],import.meta.url),keyboard:()=>I(()=>import("./icons/keyboard-line-10AZQcVH.js"),[],import.meta.url),cloud:()=>I(()=>import("./icons/cloud-line-abe0HgFS.js"),[],import.meta.url),month:{module:()=>I(()=>import("./icons/calendar-month-line-VoXZVWAe.js"),[],import.meta.url),rtl:!0},media:()=>I(()=>import("./icons/photo-album-line--GdJqjfq.js"),[],import.meta.url),speak:()=>I(()=>import("./icons/radar-line-ndI8IhOG.js"),[],import.meta.url),building:()=>I(()=>import("./icons/building-5-line-ew7lu83B.js"),[],import.meta.url),history2:{module:()=>I(()=>import("./icons/history-2-line-3yIVzoWo.js"),[],import.meta.url),rtl:!0},document:()=>I(()=>import("./icons/document-line--D6ooZg1.js"),[],import.meta.url),"arrows-right":{module:()=>I(()=>import("./icons/arrows-right-line-HF4HILdT.js"),[],import.meta.url),rtl:!0},code:()=>I(()=>import("./icons/code-line-h4RWLaak.js"),[],import.meta.url),copy:()=>I(()=>import("./icons/copy-2-line-mPSDKieb.js"),[],import.meta.url),quote:{module:()=>I(()=>import("./icons/quote-left-line-NQzeELMO.js"),[],import.meta.url),rtl:!0},settings:()=>I(()=>import("./icons/settings-6-line-ZgCBilgF.js"),[],import.meta.url),"heart-break":()=>I(()=>import("./icons/heart-crack-line-P3DoKfTT.js"),[],import.meta.url),"user-x":()=>I(()=>import("./icons/user-x-line-zIdph-gu.js"),[],import.meta.url),minimize:()=>I(()=>import("./icons/arrows-down-line-ovOF9r0o.js"),[],import.meta.url)},qa={s:12,m:16,l:20,xl:24,xxl:32},qo={},Ga=ma(function({width:e,height:t,body:n,rotate:r,flip:o}){return s("svg",{viewBox:`0 0 ${e} ${t}`,dangerouslySetInnerHTML:{__html:n},style:{transform:`${r?`rotate(${r})`:""} ${o?"scaleX(-1)":""}`}})},{isShallowEqual:!0,maxSize:Object.keys(Zi).length,matchesArg:(e,t)=>e.icon===t.icon&&e.body===t.body});function H({icon:e,size:t="m",alt:n,title:r,class:o="",style:i={}}){if(!e)return null;const a=qa[t];let u=Zi[e];if(!u)return null;let c,l,f=!1;Array.isArray(u)?[u,c,l]=u:typeof u=="object"&&({rotate:c,flip:l,rtl:f}=u,u=u.module);const[d,p]=te(qo[e]),m=j(e);return se(()=>{d&&m.current===e||((async()=>{const h=await u();p(h.default),qo[e]=h.default})(),m.current=e)},[e]),s("span",{class:`icon ${o} ${f?"rtl-flip":""}`,title:r||n,style:{width:`${a}px`,height:`${a}px`,...i},"data-icon":e,children:d&&s(Ga,{icon:e,width:d.width,height:d.height,body:d.body,rotate:c,flip:l})})}function Xa(e,t=[]){!e||typeof e!="function"||se(()=>{const n=new CloseWatcher;return n.addEventListener("close",e),()=>{n.destroy()}},t)}const Ja=window.CloseWatcher?Xa:()=>{},Qa=document.getElementById("modal-container");function Zr({children:e,onClose:t,onClick:n,class:r,minimized:o}){if(!e)return null;const i=j();se(()=>{let l=setTimeout(()=>{var d;const f=(d=i.current)==null?void 0:d.querySelector('[tabindex="-1"]');f&&f.focus()},100);return()=>clearTimeout(l)},[]);const a=window.CloseWatcher,u=Nt("esc",()=>{setTimeout(()=>{t==null||t()},0)},{enabled:!a&&!!t,keydown:!1,keyup:!0},[t]);Ja(t,[t]),se(()=>{const l=document.querySelectorAll(".deck-container");if(o){const f=l[l.length-1];f&&f.tabIndex===-1&&f.focus()}else e?l.forEach(f=>{f.setAttribute("inert","")}):l.forEach(f=>{f.removeAttribute("inert")});return()=>{l.forEach(f=>{f.removeAttribute("inert")})}},[e,o]);const c=s("div",{ref:l=>{var f;i.current=l,u.current=((f=l==null?void 0:l.querySelector)==null?void 0:f.call(l,'[tabindex="-1"]'))||l},className:r,onClick:l=>{n==null||n(l),l.target===l.currentTarget&&(t==null||t(l))},tabIndex:o?0:"-1",inert:o,onFocus:l=>{var f,d;try{if(l.target===l.currentTarget){const p=(f=i.current)==null?void 0:f.querySelector('[tabindex="-1"]'),m=!!p&&((d=getComputedStyle(p))==null?void 0:d.pointerEvents)!=="none";p&&m&&p.focus()}}catch{}},children:e});return Gn(c,Qa)}var go={exports:{}},ec="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED",tc=ec;var nc=tc;function Yi(){}function qi(){}qi.resetWarningCache=Yi;var rc=function(){function e(r,o,i,a,u,c){if(c!==nc){var l=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw l.name="Invariant Violation",l}}e.isRequired=e;function t(){return e}var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:qi,resetWarningCache:Yi};return n.PropTypes=n,n};var vf=go.exports;if(0)var yf,_f;else go.exports=rc();var G=go.exports;const vo=e=>!!e&&e[0]==="o",Yr=ga||(e=>e());const mn=(e,t)=>e===!0||!!(e&&e[t]),Fe=(e,t)=>typeof e=="function"?e(t):e,oc="_szhsinMenu",ic=e=>e[oc];const Wt=(e,t)=>(t&&Object.keys(t).forEach(n=>{const r=e[n],o=t[n];typeof o=="function"&&r?e[n]=(...i)=>{o(...i),r(...i)}:e[n]=o}),e),sc=e=>{if(typeof e!="string")return{top:0,right:0,bottom:0,left:0};const t=e.trim().split(/\s+/,4).map(parseFloat),n=isNaN(t[0])?0:t[0],r=isNaN(t[1])?n:t[1];return{top:n,right:r,bottom:isNaN(t[2])?n:t[2],left:isNaN(t[3])?r:t[3]}},Sr=e=>{for(;e;){if(e=e.parentNode,!e||e===document.body||!e.parentNode)return;const{overflow:t,overflowX:n,overflowY:r}=getComputedStyle(e);if(/auto|scroll|overlay|hidden/.test(t+r+n))return e}};function ur(e,t){return{"aria-disabled":e||void 0,tabIndex:t?0:-1}}function Go(e,t){for(let n=0;n({[e?`${e}ClassName`:"className"]:G.oneOfType([G.string,G.func])}),cc={className:G.string,...ac("menu"),arrowProps:G.object,focusProps:G.object,menuStyle:G.object,arrow:G.bool,setDownOverflow:G.bool,gap:G.number,shift:G.number,align:G.oneOf(["start","center","end"]),direction:G.oneOf(["left","right","top","bottom"]),position:G.oneOf(["auto","anchor","initial"]),overflow:G.oneOf(["auto","visible","hidden"])},bf={...cc,containerProps:G.object,initialMounted:G.bool,unmountOnClose:G.bool,transition:G.oneOfType([G.bool,G.exact({open:G.bool,close:G.bool,item:G.bool})]),transitionTimeout:G.number,boundingBoxRef:G.object,boundingBoxPadding:G.string,reposition:G.oneOf(["auto","initial"]),repositionFlag:G.oneOfType([G.string,G.number]),viewScroll:G.oneOf(["auto","close","initial"]),submenuOpenDelay:G.number,submenuCloseDelay:G.number,portal:G.oneOfType([G.bool,G.exact({target:G.object,stablePosition:G.bool})]),theming:G.string,onItemClick:G.func},wf={instanceRef:G.oneOfType([G.object,G.func]),onMenuChange:G.func},Je=({block:e,element:t,modifiers:n,className:r})=>fe(()=>{const o=t?`${e}__${t}`:e;let i=o;n&&Object.keys(n).forEach(u=>{const c=n[u];c&&(i+=` ${o}--${c===!0?u:`${u}-${c}`}`)});let a=typeof r=="function"?r(n):r;return typeof a=="string"&&(a=a.trim(),a&&(i+=` ${a}`)),i},[e,t,n,r]),lc="szh-menu-container",Xe="szh-menu";const uc="arrow",yo="item",dc="divider",fc="header",hc="group",pc="submenu";const Gi=ot(),_o=ot({}),Jn=ot({}),bo=ot({}),mc=ot({}),dr=ot({}),Oe=Object.freeze({ENTER:"Enter",ESC:"Escape",SPACE:" ",HOME:"Home",END:"End",LEFT:"ArrowLeft",RIGHT:"ArrowRight",UP:"ArrowUp",DOWN:"ArrowDown"}),Me=Object.freeze({RESET:0,SET:1,UNSET:2,INCREASE:3,DECREASE:4,FIRST:5,LAST:6,SET_INDEX:7}),gn=Object.freeze({CLICK:"click",CANCEL:"cancel",BLUR:"blur",SCROLL:"scroll"}),zt=Object.freeze({FIRST:"first",LAST:"last"}),gc=Object.freeze({entering:"opening",entered:"open",exiting:"closing",exited:"closed"}),kr="absolute",wo="presentation",fr="menuitem",Xo={"aria-hidden":!0,role:fr};const vc=({className:e,containerRef:t,containerProps:n,children:r,isOpen:o,theming:i,transition:a,onClose:u})=>{const c=mn(a,"item");return s("div",{...Wt({onKeyDown:({key:d})=>{switch(d){case Oe.ESC:Fe(u,{key:d,reason:gn.CANCEL});break}},onBlur:d=>{o&&!d.currentTarget.contains(d.relatedTarget)&&Fe(u,{reason:gn.BLUR})}},n),className:Je({block:lc,modifiers:fe(()=>({theme:i,itemTransition:c}),[i,c]),className:e}),style:{position:"absolute",...n==null?void 0:n.style},ref:t,children:r})},yc=()=>{let e,t=0;return{toggle:n=>{n?t++:t--,t=Math.max(t,0)},on:(n,r,o)=>{t?e||(e=setTimeout(()=>{e=0,r()},n)):o==null||o()},off:()=>{e&&(clearTimeout(e),e=0)}}},_c=(e,t)=>{const[n,r]=te(),i=j({items:[],hoverIndex:-1,sorted:!1}).current,a=Ie((c,l)=>{const{items:f}=i;if(!c)i.items=[];else if(l)f.push(c);else{const d=f.indexOf(c);d>-1&&(f.splice(d,1),c.contains(document.activeElement)&&(t.current.focus(),r()))}i.hoverIndex=-1,i.sorted=!1},[i,t]),u=Ie((c,l,f)=>{const{items:d,hoverIndex:p}=i,m=()=>{if(i.sorted)return;const y=e.current.querySelectorAll(".szh-menu__item");d.sort((T,_)=>Go(y,T)-Go(y,_)),i.sorted=!0};let h=-1,g;switch(c){case Me.RESET:break;case Me.SET:g=l;break;case Me.UNSET:g=y=>y===l?void 0:y;break;case Me.FIRST:m(),h=0,g=d[h];break;case Me.LAST:m(),h=d.length-1,g=d[h];break;case Me.SET_INDEX:m(),h=f,g=d[h];break;case Me.INCREASE:m(),h=p,h<0&&(h=d.indexOf(l)),h++,h>=d.length&&(h=0),g=d[h];break;case Me.DECREASE:m(),h=p,h<0&&(h=d.indexOf(l)),h--,h<0&&(h=d.length-1),g=d[h];break;default:}g||(h=-1),r(g),i.hoverIndex=h},[e,i]);return{hoverItem:n,dispatch:u,updateItems:a}},Jo=(e,t)=>Math.round(e)===t?e:t,Xi=e=>{const t=e.getBoundingClientRect();return t.width=Jo(t.width,e.offsetWidth),t.height=Jo(t.height,e.offsetHeight),t},bc=(e,t,n,r)=>{const o=Xi(t.current),i=e.current.getBoundingClientRect(),a=n===window?{left:0,top:0,right:document.documentElement.clientWidth,bottom:window.innerHeight}:n.getBoundingClientRect(),u=sc(r),c=h=>h+i.left-a.left-u.left,l=h=>h+i.left+o.width-a.right+u.right,f=h=>h+i.top-a.top-u.top,d=h=>h+i.top+o.height-a.bottom+u.bottom;return{menuRect:o,containerRect:i,getLeftOverflow:c,getRightOverflow:l,getTopOverflow:f,getBottomOverflow:d,confineHorizontally:h=>{let g=c(h);if(g<0)h-=g;else{const y=l(h);y>0&&(h-=y,g=c(h),g<0&&(h-=g))}return h},confineVertically:h=>{let g=f(h);if(g<0)h-=g;else{const y=d(h);y>0&&(h-=y,g=f(h),g<0&&(h-=g))}return h}}},wc=({arrowRef:e,menuY:t,anchorRect:n,containerRect:r,menuRect:o})=>{let i=n.top-r.top-t+n.height/2;const a=e.current.offsetHeight*1.25;return i=Math.max(a,i),i=Math.min(i,o.height-a),i},Tc=({anchorRect:e,containerRect:t,menuRect:n,placeLeftorRightY:r,placeLeftX:o,placeRightX:i,getLeftOverflow:a,getRightOverflow:u,confineHorizontally:c,confineVertically:l,arrowRef:f,arrow:d,direction:p,position:m})=>{let h=p,g=r;m!=="initial"&&(g=l(g),m==="anchor"&&(g=Math.min(g,e.bottom-t.top),g=Math.max(g,e.top-t.top-n.height)));let y,T,_;return h==="left"?(y=o,m!=="initial"&&(T=a(y),T<0&&(_=u(i),(_<=0||-T>_)&&(y=i,h="right")))):(y=i,m!=="initial"&&(_=u(y),_>0&&(T=a(o),(T>=0||-T<_)&&(y=o,h="left")))),m==="auto"&&(y=c(y)),{arrowY:d?wc({menuY:g,arrowRef:f,anchorRect:e,containerRect:t,menuRect:n}):void 0,x:y,y:g,computedDirection:h}},Ec=({arrowRef:e,menuX:t,anchorRect:n,containerRect:r,menuRect:o})=>{let i=n.left-r.left-t+n.width/2;const a=e.current.offsetWidth*1.25;return i=Math.max(a,i),i=Math.min(i,o.width-a),i},xc=({anchorRect:e,containerRect:t,menuRect:n,placeToporBottomX:r,placeTopY:o,placeBottomY:i,getTopOverflow:a,getBottomOverflow:u,confineHorizontally:c,confineVertically:l,arrowRef:f,arrow:d,direction:p,position:m})=>{let h=p==="top"?"top":"bottom",g=r;m!=="initial"&&(g=c(g),m==="anchor"&&(g=Math.min(g,e.right-t.left),g=Math.max(g,e.left-t.left-n.width)));let y,T,_;return h==="top"?(y=o,m!=="initial"&&(T=a(y),T<0&&(_=u(i),(_<=0||-T>_)&&(y=i,h="bottom")))):(y=i,m!=="initial"&&(_=u(y),_>0&&(T=a(o),(T>=0||-T<_)&&(y=o,h="top")))),m==="auto"&&(y=l(y)),{arrowX:d?Ec({menuX:g,arrowRef:f,anchorRect:e,containerRect:t,menuRect:n}):void 0,x:g,y,computedDirection:h}},Mc=({arrow:e,align:t,direction:n,gap:r,shift:o,position:i,anchorRect:a,arrowRef:u,positionHelpers:c})=>{const{menuRect:l,containerRect:f}=c,d=n==="left"||n==="right";let p=d?r:o,m=d?o:r;if(e){const b=u.current;d?p+=b.offsetWidth:m+=b.offsetHeight}const h=a.left-f.left-l.width-p,g=a.right-f.left+p,y=a.top-f.top-l.height-m,T=a.bottom-f.top+m;let _,E;t==="end"?(_=a.right-f.left-l.width,E=a.bottom-f.top-l.height):t==="center"?(_=a.left-f.left-(l.width-a.width)/2,E=a.top-f.top-(l.height-a.height)/2):(_=a.left-f.left,E=a.top-f.top),_+=p,E+=m;const w={...c,anchorRect:a,placeLeftX:h,placeRightX:g,placeLeftorRightY:E,placeTopY:y,placeBottomY:T,placeToporBottomX:_,arrowRef:u,arrow:e,direction:n,position:i};switch(n){case"left":case"right":return Tc(w);case"top":case"bottom":default:return xc(w)}},Ht=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u"?pn:se;function Qo(e,t){typeof e=="function"?e(t):e.current=t}const Kt=(e,t)=>fe(()=>e?t?n=>{Qo(e,n),Qo(t,n)}:e:t,[e,t]),ei=-9999,Ji=({ariaLabel:e,menuClassName:t,menuStyle:n,arrow:r,arrowProps:o={},anchorPoint:i,anchorRef:a,containerRef:u,containerProps:c,focusProps:l,externalRef:f,parentScrollingRef:d,align:p="start",direction:m="bottom",position:h="auto",overflow:g="visible",setDownOverflow:y,repositionFlag:T,captureFocus:_=!0,state:E,endTransition:w,isDisabled:b,menuItemFocus:M,gap:A=0,shift:O=0,children:P,onClose:x,...S})=>{const[V,B]=te({x:ei,y:ei}),[D,$]=te({}),[k,R]=te(),[L,z]=te(m),[N]=te(yc),[C,K]=Di(re=>re+1,1),{transition:Z,boundingBoxRef:ne,boundingBoxPadding:le,rootMenuRef:Te,rootAnchorRef:he,scrollNodesRef:ve,reposition:ye,viewScroll:ie,submenuCloseDelay:de}=De(dr),{submenuCtx:q,reposSubmenu:oe=T}=De(Jn),Ee=j(null),ct=j(),Y=j(),ge=j(!1),{hoverItem:ee,dispatch:J,updateItems:pe}=_c(Ee,ct),ue=vo(E),ae=mn(Z,"open"),ze=mn(Z,"close"),Le=ve.current,Ve=re=>{switch(re.key){case Oe.HOME:J(Me.FIRST);break;case Oe.END:J(Me.LAST);break;case Oe.UP:J(Me.DECREASE,ee);break;case Oe.DOWN:J(Me.INCREASE,ee);break;case Oe.SPACE:re.target&&re.target.className.indexOf(Xe)!==-1&&re.preventDefault();return;default:return}re.preventDefault(),re.stopPropagation()},Se=()=>{E==="closing"&&R(),Fe(w)},Ae=re=>{re.stopPropagation(),N.on(de,()=>{J(Me.RESET),ct.current.focus()})},Re=re=>{re.target===re.currentTarget&&N.off()},_e=Ie(re=>{var be;const He=a?(be=a.current)==null?void 0:be.getBoundingClientRect():i?{left:i.x,right:i.x,top:i.y,bottom:i.y,width:0,height:0}:null;if(!He)return;Le.menu||(Le.menu=(ne?ne.current:Sr(Te.current))||window);const Ne=bc(u,Ee,Le.menu,le);let{arrowX:xe,arrowY:vt,x:En,y:je,computedDirection:xn}=Mc({arrow:r,align:p,direction:m,gap:A,shift:O,position:h,anchorRect:He,arrowRef:Y,positionHelpers:Ne});const{menuRect:Ke}=Ne,dt=Ke.height;if(!re&&g!=="visible"){const{getTopOverflow:pr,getBottomOverflow:mr}=Ne;let me,yt;const Gt=mr(je);if(Gt>0)me=dt-Gt,yt=Gt;else{const _t=pr(je);_t<0&&(me=dt+_t,yt=0-_t,me>=0&&(je-=_t))}me>=0&&R({height:me,overflowAmt:yt})}r&&$({x:xe,y:vt}),B({x:En,y:je}),z(xn)},[r,p,le,m,A,O,h,g,i,a,u,ne,Te,Le]);Ht(()=>{ue&&(_e(),ge.current&&K()),ge.current=ue},[ue,_e,oe]),Ht(()=>{k&&!y&&(Ee.current.scrollTop=0)},[k,y]),Ht(()=>pe,[pe]),se(()=>{let{menu:re}=Le;if(!ue||!re)return;if(re=re.addEventListener?re:window,!Le.anchors){Le.anchors=[];let xe=Sr(he&&he.current);for(;xe&&xe!==re;)Le.anchors.push(xe),xe=Sr(xe)}let be=ie;if(Le.anchors.length&&be==="initial"&&(be="auto"),be==="initial")return;const He=()=>{be==="auto"?Yr(()=>_e(!0)):Fe(x,{reason:gn.SCROLL})},Ne=Le.anchors.concat(ie!=="initial"?re:[]);return Ne.forEach(xe=>xe.addEventListener("scroll",He)),()=>Ne.forEach(xe=>xe.removeEventListener("scroll",He))},[he,Le,ue,x,ie,_e]);const Zt=!!k&&k.overflowAmt>0;se(()=>{if(Zt||!ue||!d)return;const re=()=>Yr(_e),be=d.current;return be.addEventListener("scroll",re),()=>be.removeEventListener("scroll",re)},[ue,Zt,d,_e]),se(()=>{if(!ue||typeof ResizeObserver!="function"||ye==="initial")return;const re=[],be=new ResizeObserver(xe=>xe.forEach(({target:vt})=>{re.indexOf(vt)<0?re.push(vt):va(()=>{_e(),K()})})),He={box:"border-box"};be.observe(Ee.current,He);const Ne=a==null?void 0:a.current;return Ne&&be.observe(Ne,He),()=>be.disconnect()},[ue,ye,a,_e]),se(()=>{if(!ue){J(Me.RESET),ze||R();return}const{position:re,alwaysUpdate:be}=M||{},He=()=>{re===zt.FIRST?J(Me.FIRST):re===zt.LAST?J(Me.LAST):re>=-1&&J(Me.SET_INDEX,void 0,re)};if(be)He();else if(_){const Ne=setTimeout(()=>{const xe=Ee.current;xe&&!xe.contains(document.activeElement)&&(ct.current.focus(),He())},ae?170:100);return()=>clearTimeout(Ne)}},[ue,ae,ze,_,M,J]);const It=fe(()=>({isParentOpen:ue,submenuCtx:N,dispatch:J,updateItems:pe}),[ue,N,J,pe]);let $t,Yt;k&&(y?Yt=k.overflowAmt:$t=k.height);const we=fe(()=>({reposSubmenu:C,submenuCtx:N,overflow:g,overflowAmt:Yt,parentMenuRef:Ee,parentDir:L}),[C,N,g,Yt,L]),qt=$t>=0?{maxHeight:$t,overflow:g}:void 0,lt=fe(()=>({state:E,align:p,dir:L}),[E,p,L]),Qe=fe(()=>({dir:L}),[L]),hr=Je({block:Xe,element:uc,modifiers:Qe,className:o.className}),ut=s("ul",{role:"menu","aria-label":e,...ur(b),...Wt({onPointerEnter:q==null?void 0:q.off,onPointerMove:Ae,onPointerLeave:Re,onKeyDown:Ve,onAnimationEnd:Se},S),ref:Kt(f,Ee),className:Je({block:Xe,modifiers:lt,className:t}),style:{...n,...qt,margin:0,display:E==="closed"?"none":void 0,position:kr,left:V.x,top:V.y},children:[s("li",{tabIndex:-1,style:{position:kr,left:0,top:0,display:"block",outline:"none"},ref:ct,...Xo,...l}),r&&s("li",{...Xo,...o,className:hr,style:{display:"block",position:kr,left:D.x,top:D.y,...o.style},ref:Y}),s(Jn.Provider,{value:we,children:s(_o.Provider,{value:It,children:s(Gi.Provider,{value:ee,children:Fe(P,lt)})})})]});return c?s(vc,{...c,isOpen:ue,children:ut}):ut},Qi=kt(function({"aria-label":t,className:n,containerProps:r,initialMounted:o,unmountOnClose:i,transition:a,transitionTimeout:u,boundingBoxRef:c,boundingBoxPadding:l,reposition:f="auto",submenuOpenDelay:d=300,submenuCloseDelay:p=150,viewScroll:m="initial",portal:h,theming:g,onItemClick:y,...T},_){const E=j(null),w=j({}),{anchorRef:b,state:M,onClose:A}=T,O=fe(()=>({initialMounted:o,unmountOnClose:i,transition:a,transitionTimeout:u,boundingBoxRef:c,boundingBoxPadding:l,rootMenuRef:E,rootAnchorRef:b,scrollNodesRef:w,reposition:f,viewScroll:m,submenuOpenDelay:d,submenuCloseDelay:p}),[o,i,a,u,b,c,l,f,m,d,p]),P=fe(()=>({handleClick(S,V){S.stopPropagation||Fe(y,S);let B=S.keepOpen;B===void 0&&(B=V&&S.key===Oe.SPACE),B||Fe(A,{value:S.value,key:S.key,reason:gn.CLICK})},handleClose(S){Fe(A,{key:S,reason:gn.CLICK})}}),[y,A]);if(!M)return null;const x=s(dr.Provider,{value:O,children:s(bo.Provider,{value:P,children:s(Ji,{...T,ariaLabel:t||"Menu",externalRef:_,containerRef:E,containerProps:{className:n,containerRef:E,containerProps:r,theming:g,transition:a,onClose:A}})})});return h===!0&&typeof document<"u"?Gn(x,document.body):h?h.target?Gn(x,h.target):h.stablePosition?null:x:x}),qr=0,Gr=1,Qn=2,er=3,tr=4,Sc=5,es=6,kc=["preEnter","entering","entered","preExit","exiting","exited","unmounted"],ts=e=>({_s:e,status:kc[e],isEnter:etr}),Xr=e=>e?es:Sc,Ac=(e,t)=>{switch(e){case Gr:case qr:return Qn;case tr:case er:return Xr(t)}},Ic=e=>typeof e=="object"?[e.enter,e.exit]:[e,e],ti=(e,t,n,r,o)=>{clearTimeout(r.current);const i=ts(e);t(i),n.current=i,o&&o({current:i})},$c=({enter:e=!0,exit:t=!0,preEnter:n,preExit:r,timeout:o,initialEntered:i,mountOnEnter:a,unmountOnExit:u,onStateChange:c}={})=>{const[l,f]=te(()=>ts(i?Qn:Xr(a))),d=j(l),p=j(),[m,h]=Ic(o),g=Ie(()=>{const T=Ac(d.current._s,u);T&&ti(T,f,d,p,c)},[c,u]),y=Ie(T=>{const _=w=>{switch(ti(w,f,d,p,c),w){case Gr:m>=0&&(p.current=setTimeout(g,m));break;case tr:h>=0&&(p.current=setTimeout(g,h));break;case qr:case er:p.current=setTimeout(()=>_(w+1),0);break}},E=d.current.isEnter;typeof T!="boolean"&&(T=!E),T?!E&&_(e?n?qr:Gr:Qn):E&&_(t?r?er:tr:Xr(u))},[g,c,e,t,n,r,m,h,u]);return se(()=>()=>clearTimeout(p.current),[]),[l,y,g]};const Lc=({initialOpen:e,initialMounted:t,unmountOnClose:n,transition:r,transitionTimeout:o=500}={})=>{const[{status:i},a,u]=$c({initialEntered:e,mountOnEnter:!t,unmountOnExit:n,timeout:o,enter:mn(r,"open"),exit:mn(r,"close")});return[{state:gc[i],endTransition:u},a]},ns=e=>{const[t,n]=Lc(e),[r,o]=te(),i=(a,u)=>{o({position:a,alwaysUpdate:u}),n(!0)};return[{menuItemFocus:r,...t},n,i]},Cc=(e,t)=>{const[n]=te({});return{onMouseDown:()=>{n.v=e&&e!=="closed"},onClick:r=>n.v?n.v=!1:t(!0,r)}},rs=(e,t)=>{const n=j(t);se(()=>{n.current!==t&&Fe(e,{open:t}),n.current=t},[e,t])},Pc=kt(function({"aria-label":t,captureFocus:n,initialOpen:r,menuButton:o,instanceRef:i,onMenuChange:a,...u},c){const[l,f,d]=ns(u),{state:p}=l,m=vo(p),h=j(null),g=Cc(p,(b,M)=>d(M.detail?void 0:zt.FIRST)),y=Ie(b=>{f(!1),b.key&&h.current.focus()},[f]),T=b=>{switch(b.key){case Oe.UP:d(zt.LAST);break;case Oe.DOWN:d(zt.FIRST);break;default:return}b.preventDefault()},_=Fe(o,{open:m});if(!_||!_.type)throw new Error("Menu requires a menuButton prop.");const E={ref:Kt(_.ref,h),...Wt({onKeyDown:T,...g},_.props)};ic(_.type)==="MenuButton"&&(E.isOpen=m);const w=Ri(_,E);return rs(a,m),Ni(i,()=>({openMenu:d,closeMenu:()=>f(!1)})),s(U,{children:[w,s(Qi,{...u,...l,"aria-label":t||(typeof _.props.children=="string"?_.props.children:"Menu"),anchorRef:h,ref:c,onClose:y})]})}),To=(e,t)=>{const n=it(t),r=kt((o,i)=>{const a=j(null);return s(n,{...o,itemRef:a,externalRef:i,isHovering:De(Gi)===a.current})});return r.displayName=`WithHovering(${e})`,r},os=(e,t,n)=>{Ht(()=>{if(e)return;const r=t.current;return n(r,!0),()=>{n(r)}},[e,t,n])},Oc=To("SubMenu",function({"aria-label":t,className:n,disabled:r,direction:o,label:i,openTrigger:a,onMenuChange:u,isHovering:c,instanceRef:l,itemRef:f,captureFocus:d,repositionFlag:p,itemProps:m={},...h}){const g=De(dr),{rootMenuRef:y,submenuOpenDelay:T,submenuCloseDelay:_}=g,{parentMenuRef:E,parentDir:w,overflow:b}=De(Jn),{isParentOpen:M,submenuCtx:A,dispatch:O,updateItems:P}=De(_o),x=b!=="visible",[S,V,B]=ns(g),{state:D}=S,$=!!r,k=vo(D),R=j(null),[L]=te({v:0}),z=()=>{A.off(),L.v&&(clearTimeout(L.v),L.v=0)},N=(...oe)=>{z(),C(),!$&&B(...oe)},C=()=>!c&&!$&&O(Me.SET,f.current),K=oe=>{C(),a||(L.v=setTimeout(()=>Yr(N),Math.max(oe,0)))},Z=oe=>{$||(oe.stopPropagation(),!(L.v||k)&&A.on(_,()=>K(T-_),()=>K(T)))},ne=()=>{z(),k||O(Me.UNSET,f.current)},le=oe=>{if(c)switch(oe.key){case Oe.ENTER:oe.preventDefault();case Oe.SPACE:case Oe.RIGHT:a!=="none"&&N(zt.FIRST)}},Te=oe=>{let Ee=!1;switch(oe.key){case Oe.LEFT:k&&(f.current.focus(),V(!1),Ee=!0);break;case Oe.RIGHT:k||(Ee=!0);break}Ee&&(oe.preventDefault(),oe.stopPropagation())};os($,f,P),rs(u,k),se(()=>A.toggle(k),[A,k]),se(()=>()=>clearTimeout(L.v),[L]),se(()=>{c&&M?f.current.focus():V(!1)},[c,M,V,f]),Ni(l,()=>({openMenu:(...oe)=>{M&&N(...oe)},closeMenu:()=>{k&&(f.current.focus(),V(!1))}}));const he=fe(()=>({open:k,hover:c,disabled:$,submenu:!0}),[k,c,$]),{ref:ve,className:ye,...ie}=m,de=Wt({onPointerEnter:A.off,onPointerMove:Z,onPointerLeave:ne,onKeyDown:le,onClick:()=>a!=="none"&&N()},ie),q=()=>{const oe=s(Ji,{...h,...S,ariaLabel:t||(typeof i=="string"?i:"Submenu"),anchorRef:f,containerRef:x?y:R,direction:o||(w==="right"||w==="left"?w:"right"),parentScrollingRef:x&&E,isDisabled:$}),Ee=y.current;return x&&Ee?Gn(oe,Ee):oe};return s("li",{className:Je({block:Xe,element:pc,className:n}),style:{position:"relative"},role:wo,ref:R,onKeyDown:Te,children:[s("div",{role:fr,"aria-haspopup":!0,"aria-expanded":k,...ur($,c),...de,ref:Kt(ve,f),className:Je({block:Xe,element:yo,modifiers:he,className:ye}),children:fe(()=>Fe(i,he),[i,he])}),D&&q()]})}),is=(e,t,n,r)=>{const{submenuCloseDelay:o}=De(dr),{isParentOpen:i,submenuCtx:a,dispatch:u,updateItems:c}=De(_o),l=()=>{!n&&!r&&u(Me.SET,e.current)},f=()=>{!r&&u(Me.UNSET,e.current)},d=h=>{n&&!h.currentTarget.contains(h.relatedTarget)&&f()},p=h=>{r||(h.stopPropagation(),a.on(o,l,l))},m=(h,g)=>{a.off(),!g&&f()};return os(r,e,c),se(()=>{n&&i&&t.current&&t.current.focus()},[t,n,i]),{setHover:l,onBlur:d,onPointerMove:p,onPointerLeave:m}},ke=To("MenuItem",function({className:t,value:n,href:r,type:o,checked:i,disabled:a,children:u,onClick:c,isHovering:l,itemRef:f,externalRef:d,...p}){const m=!!a,{setHover:h,...g}=is(f,f,l,m),y=De(bo),T=De(mc),_=o==="radio",E=o==="checkbox",w=!!r&&!m&&!_&&!E,b=_?T.value===n:E?!!i:!1,M=S=>{if(m){S.stopPropagation(),S.preventDefault();return}const V={value:n,syntheticEvent:S};S.key!==void 0&&(V.key=S.key),E&&(V.checked=!b),_&&(V.name=T.name),Fe(c,V),_&&Fe(T.onRadioChange,V),y.handleClick(V,E||_)},A=S=>{if(l)switch(S.key){case Oe.ENTER:S.preventDefault();case Oe.SPACE:w?f.current.click():M(S)}},O=fe(()=>({type:o,disabled:m,hover:l,checked:b,anchor:w}),[o,m,l,b,w]),P=Wt({...g,onPointerDown:h,onKeyDown:A,onClick:M},p),x={role:_?"menuitemradio":E?"menuitemcheckbox":fr,"aria-checked":_||E?b:void 0,...ur(m,l),...P,ref:Kt(d,f),className:Je({block:Xe,element:yo,modifiers:O,className:t}),children:fe(()=>Fe(u,O),[u,O])};return w?s("li",{role:wo,children:s("a",{href:r,...x})}):s("li",{...x})}),Dc=To("FocusableItem",function({className:t,disabled:n,children:r,isHovering:o,itemRef:i,externalRef:a,...u}){const c=!!n,l=j(null),{setHover:f,onPointerLeave:d,...p}=is(i,l,o,c),{handleClose:m}=De(bo),h=fe(()=>({disabled:c,hover:o,focusable:!0}),[c,o]),g=fe(()=>Fe(r,{...h,ref:l,closeMenu:m}),[r,h,m]),y=Wt({...p,onPointerLeave:T=>d(T,!0),onFocus:f},u);return s("li",{role:fr,...ur(c),...y,ref:Kt(a,i),className:Je({block:Xe,element:yo,modifiers:h,className:t}),children:g})}),tn=it(kt(function({className:t,...n},r){return s("li",{role:"separator",...n,ref:r,className:Je({block:Xe,element:dc,className:t})})})),Tf=it(kt(function({className:t,...n},r){return s("li",{role:wo,...n,ref:r,className:Je({block:Xe,element:fc,className:t})})})),Ef=kt(function({className:t,style:n,takeOverflow:r,...o},i){const a=j(null),[u,c]=te(),{overflow:l,overflowAmt:f}=De(Jn);return Ht(()=>{let d;r&&f>=0&&(d=Xi(a.current).height-f,d<0&&(d=0)),c(d>=0?{maxHeight:d,overflow:l}:void 0)},[r,l,f]),Ht(()=>{u&&(a.current.scrollTop=0)},[u]),s("div",{...o,ref:Kt(i,a),className:Je({block:Xe,element:hc,className:t}),style:{...n,...u}})});const ni={s:16,m:20,l:24,xl:32,xxl:50,xxxl:64},nn={},sn=window.OffscreenCanvas?new OffscreenCanvas(1,1):document.createElement("canvas"),Kn=sn.getContext("2d",{willReadFrequently:!0});Kn.imageSmoothingEnabled=!1;function Rc({url:e,size:t,alt:n="",squircle:r,...o}){t=ni[t]||t||ni.m;const i=j(),a=/missing\.png$/.test(e);return s("span",{ref:i,class:`avatar ${r?"squircle":""} ${nn[e]?"has-alpha":""}`,style:{width:t,height:t},title:n,...o,children:!!e&&s("img",{src:e,width:t,height:t,alt:n,loading:"lazy",decoding:"async",crossOrigin:nn[e]===void 0&&!a?"anonymous":void 0,onError:u=>{u.target.crossOrigin&&(u.target.crossOrigin=null,u.target.src=e)},onLoad:u=>{i.current&&(i.current.dataset.loaded=!0),nn[e]===void 0&&(a||setTimeout(()=>{try{const{width:c,height:l}=u.target;sn.width!==c&&(sn.width=c),sn.height!==l&&(sn.height=l),Kn.drawImage(u.target,0,0);const f=Kn.getImageData(0,0,c,l),d=f.data.filter((p,m)=>m%4===3&&p<=128).length/(f.data.length/4)>.1;d&&i.current.classList.add("has-alpha"),nn[e]=d,Kn.clearRect(0,0,c,l)}catch{nn[e]=!1}},1))}})})}const nt=st(Rc),jt=kt((e,t)=>{var u;let n;try{n=ya()}catch{}let r=(location.hash||"").replace(/^#/,"").trim();r===""&&(r="/");const{to:o,...i}=e;if(r&&r!=="/"&&r.includes("?")){const c=URL.parse(r,location.origin);if((u=c==null?void 0:c.searchParams)!=null&&u.size){const l=Array.from(c.searchParams.entries()).map(([f,d])=>`${f}=${encodeURIComponent(d)}`).join("&");r=c.pathname+"?"+l}}const a=r===o||decodeURIComponent(r)===o;return s("a",{ref:t,href:`#${o}`,...i,class:`${e.class||""} ${a?"is-active":""}`,onClick:c=>{var l,f,d;(f=(l=c.currentTarget)==null?void 0:l.parentNode)!=null&&f.closest("a")&&c.stopPropagation(),n&&(W.prevLocation=n),(d=e.onClick)==null||d.call(e,c)}})});let Jr=!1;const Nc=new MutationObserver(e=>{e.forEach(t=>{if(t.type==="attributes"){const{value:n}=t.target;n==="rtl"?Jr=!0:Jr=!1}})});Nc.observe(document.documentElement,{attributes:!0,attributeFilter:["dir"]});function Qr(){return Jr}const Fc=document.documentElement,Rn=getComputedStyle(Fc),zc=8;let ss=[0,0,0,0];function as(){const e=Rn.getPropertyValue("--sai-top"),t=Rn.getPropertyValue("--sai-right"),n=Rn.getPropertyValue("--sai-bottom"),r=Rn.getPropertyValue("--sai-left");ss=[Math.max(0,parseInt(e,10)),Math.max(0,parseInt(t,10)),Math.max(0,parseInt(n,10)),Math.max(0,parseInt(r,10))]}requestAnimationFrame(as);function cs(e=[]){return ss.map((n,r)=>(n||zc)+(e[r]||0)).join(" ")}CSS.supports("top: env(safe-area-inset-top)")&&window.addEventListener("resize",as,{passive:!0});function Hc(){const[e,t]=te({width:null,height:null});return pn(()=>{const n=()=>{t({width:window.innerWidth,height:window.innerHeight})};return n(),window.addEventListener("resize",n,{passive:!0}),()=>{window.removeEventListener("resize",n)}},[]),e}function ls(e){const{containerProps:t,instanceRef:n,align:r}=e,o=Hc(),i=n!=null&&n.current?n:j(),a=Qr()?r==="end"?"start":r==="start"?"end":r:r;return s(Pc,{boundingBoxPadding:cs(),repositionFlag:`${o.width}x${o.height}`,unmountOnClose:!0,...e,align:a,instanceRef:i,containerProps:{onClick:u=>{var c,l,f;u.target===u.currentTarget&&((l=(c=i.current)==null?void 0:c.closeMenu)==null||l.call(c)),(f=t==null?void 0:t.onClick)==null||f.call(t,u)},...t}})}function Vc(e){const t=j();return s(Oc,{...e,instanceRef:t,itemProps:{onPointerMove:n=>{var r,o;n.pointerType==="touch"&&((o=(r=t.current)==null?void 0:r.openMenu)==null||o.call(r))},onPointerLeave:n=>{var r,o;n.pointerType==="touch"&&((o=(r=t.current)==null?void 0:r.openMenu)==null||o.call(r))}}})}function Ar({subMenu:e=!1,confirm:t=!0,confirmLabel:n,menuItemClassName:r,menuFooter:o,menuExtras:i,...a}){const{children:u,onClick:c,...l}=a;return t?s(e?Vc:ls,{openTrigger:"clickOnly",direction:"bottom",overflow:"auto",gap:-8,shift:8,menuClassName:"menu-emphasized",...l,menuButton:e?void 0:u,label:e?u:void 0,children:[s(ke,{className:r,onClick:c,children:n}),i,o]}):e?s(ke,{...a}):c?_a(u,{onClick:c}):u}function eo({staticUrl:e,alt:t,url:n}){return s("picture",{children:[e&&s("source",{srcset:e,media:"(prefers-reduced-motion: reduce)"}),s("img",{src:n,alt:t,class:"shortcode-emoji emoji",width:"16",height:"16",loading:"lazy",decoding:"async"},t||n)]})}function jc({text:e,emojis:t}){if(!e)return"";if(!(t!=null&&t.length)||e.indexOf(":")===-1)return e;const n=new RegExp(`:(${t.map(o=>o.shortcode).join("|")}):`,"g");return e.split(n).map(o=>{const i=t.find(a=>a.shortcode===o);if(i){const{url:a,staticUrl:u}=i;return s(eo,{staticUrl:u,alt:o,url:a})}return o})}const Bt=it(jc,(e,t)=>{var n,r;return e.text===t.text&&((n=e.emojis)==null?void 0:n.length)===((r=t.emojis)==null?void 0:r.length)}),Bc=new Intl.Collator("en",{sensitivity:"base"});function Uc({account:e,instance:t,showAvatar:n,showAcct:r,short:o,external:i,onClick:a}){const{acct:u,avatar:c,avatarStatic:l,id:f,url:d,displayName:p,emojis:m,bot:h,username:g}=e,[y,T,_]=u.match(/([^@]+)(@.+)/i)||[,u];t||(t=Xn().instance);const E=g.toLowerCase().trim(),w=(p||"").toLowerCase().trim(),b=w.replace(/(\:(\w|\+|\-)+\:)(?=|[\!\.\?]|$)/g,"").replace(/\s+/g,""),M=b.replace(/[^a-z0-9@\.]/gi,""),A=!o&&(E===w||E===b||E===M||Bc.compare(E,b)===0)||M===u.toLowerCase();return s("a",{class:`name-text ${r?"show-acct":""} ${o?"short":""}`,href:d,target:i?"_blank":null,title:p?`${p} (${_?"":"@"}${u})`:`${_?"":"@"}${u}`,onClick:O=>{if(!i&&!O.shiftKey){if(O.preventDefault(),O.stopPropagation(),a)return a(O);if(O.metaKey||O.ctrlKey||O.shiftKey||O.which===2){const P=`#/${t}/a/${f}`;window.open(P,"_blank");return}W.showAccount={account:e,instance:t}}},children:[n&&s(U,{children:[s(nt,{url:l||c,squircle:h})," "]}),p&&!o?s(U,{children:[s("b",{dir:"auto",children:s(Bt,{text:p,emojis:m})}),!r&&!A&&s(U,{children:[" ",s("i",{class:"bidi-isolate",children:["@",g]})]})]}):o?s("i",{children:g}):s("b",{children:g}),r&&s(U,{children:[s("br",{}),s("i",{class:"bidi-isolate",children:[_?"":"@",T,!!_&&s("span",{class:"ib",children:_})]})]})]})}const an=it(Uc,(e,t)=>{const{account:n}=e,{account:r}=t;return(n==null?void 0:n.acct)===(r==null?void 0:r.acct)});var nr={exports:{}},xf=nr.exports;(function(e,t){(function(n,r){e.exports=r()})(bn,function(){"use strict";var n=1e3,r=6e4,o=36e5,i="millisecond",a="second",u="minute",c="hour",l="day",f="week",d="month",p="quarter",m="year",h="date",g="Invalid Date",y=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,T=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,_={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(D){var $=["th","st","nd","rd"],k=D%100;return"["+D+($[(k-20)%10]||$[k]||$[0])+"]"}},E=function(D,$,k){var R=String(D);return!R||R.length>=$?D:""+Array($+1-R.length).join(k)+D},w={s:E,z:function(D){var $=-D.utcOffset(),k=Math.abs($),R=Math.floor(k/60),L=k%60;return($<=0?"+":"-")+E(R,2,"0")+":"+E(L,2,"0")},m:function D($,k){if($.date()1)return D(N[0])}else{var C=$.name;M[C]=$,L=C}return!R&&L&&(b=L),L||!R&&b},x=function(D,$){if(O(D))return D.clone();var k=typeof $=="object"?$:{};return k.date=D,k.args=arguments,new V(k)},S=w;S.l=P,S.i=O,S.w=function(D,$){return x(D,{locale:$.$L,utc:$.$u,x:$.$x,$offset:$.$offset})};var V=function(){function D(k){this.$L=P(k.locale,null,!0),this.parse(k),this.$x=this.$x||k.x||{},this[A]=!0}var $=D.prototype;return $.parse=function(k){this.$d=function(R){var L=R.date,z=R.utc;if(L===null)return new Date(NaN);if(S.u(L))return new Date;if(L instanceof Date)return new Date(L);if(typeof L=="string"&&!/Z$/i.test(L)){var N=L.match(y);if(N){var C=N[2]-1||0,K=(N[7]||"0").substring(0,3);return z?new Date(Date.UTC(N[1],C,N[3]||1,N[4]||0,N[5]||0,N[6]||0,K)):new Date(N[1],C,N[3]||1,N[4]||0,N[5]||0,N[6]||0,K)}}return new Date(L)}(k),this.init()},$.init=function(){var k=this.$d;this.$y=k.getFullYear(),this.$M=k.getMonth(),this.$D=k.getDate(),this.$W=k.getDay(),this.$H=k.getHours(),this.$m=k.getMinutes(),this.$s=k.getSeconds(),this.$ms=k.getMilliseconds()},$.$utils=function(){return S},$.isValid=function(){return this.$d.toString()!==g},$.isSame=function(k,R){var L=x(k);return this.startOf(R)<=L&&L<=this.endOf(R)},$.isAfter=function(k,R){return x(k)new c(l).valueOf()},c.prototype.isLessThan=function(l){return this.valueOf()-1)||(y=new a.a(h)[g]()),g==="days"||g==="years"){var T=u[m][g];return d.format(T)}return u[m][g].replace("%d",y)}(this)}}}])})})(rr,rr.exports);var Kc=rr.exports;const Zc=St(Kc);var or={exports:{}},Sf=or.exports;(function(e,t){(function(n,r){e.exports=r()})(bn,function(){"use strict";var n={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"};return function(r,o,i){var a=o.prototype,u=a.format;i.en.formats=n,a.format=function(c){c===void 0&&(c="YYYY-MM-DDTHH:mm:ssZ");var l=this.$locale().formats,f=function(d,p){return d.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,function(m,h,g){var y=g&&g.toUpperCase();return h||p[g]||n[g]||p[y].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,function(T,_,E){return _||E.slice(1)})})}(c,l===void 0?{}:l);return u.call(this,f)}}})})(or,or.exports);var Yc=or.exports;const qc=St(Yc);var ir={exports:{}},kf=ir.exports;(function(e,t){(function(n,r){e.exports=r()})(bn,function(){"use strict";return function(n,r,o){n=n||{};var i=r.prototype,a={future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function u(l,f,d,p){return i.fromToBase(l,f,d,p)}o.en.relativeTime=a,i.fromToBase=function(l,f,d,p,m){for(var h,g,y,T=d.$locale().relativeTime||a,_=n.thresholds||[{l:"s",r:44,d:"second"},{l:"m",r:89},{l:"mm",r:44,d:"minute"},{l:"h",r:89},{l:"hh",r:21,d:"hour"},{l:"d",r:35},{l:"dd",r:25,d:"day"},{l:"M",r:45},{l:"MM",r:10,d:"month"},{l:"y",r:17},{l:"yy",d:"year"}],E=_.length,w=0;w0,M<=b.r||!b.r){M<=1&&w>0&&(b=_[w-1]);var A=T[b.l];m&&(M=m(""+M)),g=typeof A=="string"?A.replace("%d",M):A(M,f,b.l,y);break}}if(f)return g;var O=y?T.future:T.past;return typeof O=="function"?O(g):O.replace("%s",g)},i.to=function(l,f){return u(l,f,this,!0)},i.from=function(l,f){return u(l,f,this)};var c=function(l){return l.$u?o.utc():o()};i.toNow=function(l){return this.to(c(this),l)},i.fromNow=function(l){return this.from(c(this),l)}}})})(ir,ir.exports);var Gc=ir.exports;const Xc=St(Gc);xt.extend(Zc);xt.extend(qc);xt.extend(Xc);const Jc=new Intl.DateTimeFormat;function Mt({datetime:e,format:t}){if(!e)return null;const[n,r]=Di(c=>c+1,0),o=fe(()=>xt(e),[e]),[i,a,u]=fe(()=>{if(!o.isValid())return[""+e,"",""];let c;if(t==="micro"){const l=xt();l.diff(o,"day")<=1||l.year()===o.year()?c=o.twitter():c=Jc.format(o.toDate())}return c||(c=o.fromNow()),[c,o.toISOString(),o.format("LLLL")]},[o,t,n]);return se(()=>{if(!o.isValid())return;let c,l;function f(){l=requestAnimationFrame(()=>{r(),d()})}function d(){o.diff(xt(),"minute",!0)<1?c=setTimeout(f,1e4):o.diff(xt(),"hour",!0)<1&&(c=setTimeout(f,6e4))}return d(),()=>{clearTimeout(c),cancelAnimationFrame(l)}},[]),s("time",{datetime:a,title:u,children:i})}const Qc=[{code:"af",name:"Afrikaans"},{code:"sq",name:"Albanian"},{code:"am",name:"Amharic"},{code:"ar",name:"Arabic"},{code:"hy",name:"Armenian"},{code:"as",name:"Assamese"},{code:"ay",name:"Aymara"},{code:"az",name:"Azerbaijani"},{code:"bm",name:"Bambara"},{code:"eu",name:"Basque"},{code:"be",name:"Belarusian"},{code:"bn",name:"Bengali"},{code:"bho",name:"Bhojpuri"},{code:"bs",name:"Bosnian"},{code:"bg",name:"Bulgarian"},{code:"ca",name:"Catalan"},{code:"ceb",name:"Cebuano"},{code:"ny",name:"Chichewa"},{code:"zh",name:"Chinese"},{code:"zh_HANT",name:"Chinese (Traditional)"},{code:"co",name:"Corsican"},{code:"hr",name:"Croatian"},{code:"cs",name:"Czech"},{code:"da",name:"Danish"},{code:"dv",name:"Dhivehi"},{code:"doi",name:"Dogri"},{code:"nl",name:"Dutch"},{code:"en",name:"English"},{code:"eo",name:"Esperanto"},{code:"et",name:"Estonian"},{code:"ee",name:"Ewe"},{code:"tl",name:"Filipino"},{code:"fi",name:"Finnish"},{code:"fr",name:"French"},{code:"fy",name:"Frisian"},{code:"gl",name:"Galician"},{code:"ka",name:"Georgian"},{code:"de",name:"German"},{code:"el",name:"Greek"},{code:"gn",name:"Guarani"},{code:"gu",name:"Gujarati"},{code:"ht",name:"Haitian Creole"},{code:"ha",name:"Hausa"},{code:"haw",name:"Hawaiian"},{code:"iw",name:"Hebrew"},{code:"hi",name:"Hindi"},{code:"hmn",name:"Hmong"},{code:"hu",name:"Hungarian"},{code:"is",name:"Icelandic"},{code:"ig",name:"Igbo"},{code:"ilo",name:"Ilocano"},{code:"id",name:"Indonesian"},{code:"ga",name:"Irish"},{code:"it",name:"Italian"},{code:"ja",name:"Japanese"},{code:"jw",name:"Javanese"},{code:"kn",name:"Kannada"},{code:"kk",name:"Kazakh"},{code:"km",name:"Khmer"},{code:"rw",name:"Kinyarwanda"},{code:"gom",name:"Konkani"},{code:"ko",name:"Korean"},{code:"kri",name:"Krio"},{code:"ku",name:"Kurdish (Kurmanji)"},{code:"ckb",name:"Kurdish (Sorani)"},{code:"ky",name:"Kyrgyz"},{code:"lo",name:"Lao"},{code:"la",name:"Latin"},{code:"lv",name:"Latvian"},{code:"ln",name:"Lingala"},{code:"lt",name:"Lithuanian"},{code:"lg",name:"Luganda"},{code:"lb",name:"Luxembourgish"},{code:"mk",name:"Macedonian"},{code:"mai",name:"Maithili"},{code:"mg",name:"Malagasy"},{code:"ms",name:"Malay"},{code:"ml",name:"Malayalam"},{code:"mt",name:"Maltese"},{code:"mi",name:"Maori"},{code:"mr",name:"Marathi"},{code:"mni-Mtei",name:"Meiteilon (Manipuri)"},{code:"lus",name:"Mizo"},{code:"mn",name:"Mongolian"},{code:"my",name:"Myanmar (Burmese)"},{code:"ne",name:"Nepali"},{code:"no",name:"Norwegian"},{code:"or",name:"Odia (Oriya)"},{code:"om",name:"Oromo"},{code:"ps",name:"Pashto"},{code:"fa",name:"Persian"},{code:"pl",name:"Polish"},{code:"pt",name:"Portuguese"},{code:"pa",name:"Punjabi"},{code:"qu",name:"Quechua"},{code:"ro",name:"Romanian"},{code:"ru",name:"Russian"},{code:"sm",name:"Samoan"},{code:"sa",name:"Sanskrit"},{code:"gd",name:"Scots Gaelic"},{code:"nso",name:"Sepedi"},{code:"sr",name:"Serbian"},{code:"st",name:"Sesotho"},{code:"sn",name:"Shona"},{code:"sd",name:"Sindhi"},{code:"si",name:"Sinhala"},{code:"sk",name:"Slovak"},{code:"sl",name:"Slovenian"},{code:"so",name:"Somali"},{code:"es",name:"Spanish"},{code:"su",name:"Sundanese"},{code:"sw",name:"Swahili"},{code:"sv",name:"Swedish"},{code:"tg",name:"Tajik"},{code:"ta",name:"Tamil"},{code:"tt",name:"Tatar"},{code:"te",name:"Telugu"},{code:"th",name:"Thai"},{code:"ti",name:"Tigrinya"},{code:"ts",name:"Tsonga"},{code:"tr",name:"Turkish"},{code:"tk",name:"Turkmen"},{code:"ak",name:"Twi"},{code:"uk",name:"Ukrainian"},{code:"ur",name:"Urdu"},{code:"ug",name:"Uyghur"},{code:"uz",name:"Uzbek"},{code:"vi",name:"Vietnamese"},{code:"cy",name:"Welsh"},{code:"xh",name:"Xhosa"},{code:"yi",name:"Yiddish"},{code:"yo",name:"Yoruba"},{code:"zu",name:"Zulu"}];function el(...e){try{return Ia(...e)}catch{return e[2]||!1}}const to=st(el),tl=[new Intl.DateTimeFormat().resolvedOptions().locale,...navigator.languages],nl=to(tl,Qc.map(e=>e.code.replace("_","-")),"en");function us(e=!1){if(e){const{contentTranslationTargetLanguage:t}=W.settings;if(t)return t}return nl}const rl=new Intl.DisplayNames(void 0,{type:"language"});function ol(e){try{return rl.of(e)}catch{return null}}const Ir=st(ol),il=/^[v^~<>=]*?(\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+))?(?:-([\da-z\-]+(?:\.[\da-z\-]+)*))?(?:\+[\da-z\-]+(?:\.[\da-z\-]+)*)?)?)?$/i,sr=e=>{if(typeof e!="string")throw new TypeError("Invalid argument expected string");const t=e.match(il);if(!t)throw new Error(`Invalid argument not valid semver ('${e}' received)`);return t.shift(),t},ri=e=>e==="*"||e==="x"||e==="X",oi=e=>{const t=parseInt(e,10);return isNaN(t)?e:t},sl=(e,t)=>typeof e!=typeof t?[String(e),String(t)]:[e,t],al=(e,t)=>{if(ri(e)||ri(t))return 0;const[n,r]=sl(oi(e),oi(t));return n>r?1:n{for(let n=0;n{const n=sr(e),r=sr(t),o=n.pop(),i=r.pop(),a=Ft(n,r);return a!==0?a:o&&i?Ft(o.split("."),i.split(".")):o||i?o?-1:1:0},ll=(e,t,n)=>{ul(n);const r=cl(e,t);return ds[n].includes(r)},ds={">":[1],">=":[0,1],"=":[0],"<=":[-1,0],"<":[-1],"!=":[-1,1]},ii=Object.keys(ds),ul=e=>{if(typeof e!="string")throw new TypeError(`Invalid operator type, expected string but got ${typeof e}`);if(ii.indexOf(e)===-1)throw new Error(`Invalid operator, expected one of ${ii.join("|")}`)},Zn=(e,t)=>{if(t=t.replace(/([><=]+)\s+/g,"$1"),t.includes("||"))return t.split("||").some(y=>Zn(e,y));if(t.includes(" - ")){const[y,T]=t.split(" - ",2);return Zn(e,`>=${y} <=${T}`)}else if(t.includes(" "))return t.trim().replace(/\s{2,}/g," ").split(" ").every(y=>Zn(e,y));const n=t.match(/^([<>=~^]+)/),r=n?n[1]:"=";if(r!=="^"&&r!=="~")return ll(e,t,r);const[o,i,a,,u]=sr(e),[c,l,f,,d]=sr(t),p=[o,i,a],m=[c,l??"x",f??"x"];if(d&&(!u||Ft(p,m)!==0||Ft(u.split("."),d.split("."))===-1))return!1;const h=m.findIndex(y=>y!=="0")+1,g=r==="~"?2:h>1?h:1;return!(Ft(p.slice(0,g),m.slice(0,g))!==0||Ft(p.slice(g),m.slice(g))===-1)};const dl={"@mastodon/edit-media-attributes":">=4.1","@mastodon/list-exclusive":">=4.2","@mastodon/filtered-notifications":"~4.3 || >=4.3","@mastodon/fetch-multiple-statuses":"~4.3 || >=4.3","@mastodon/trending-link-posts":"~4.3 || >=4.3","@mastodon/grouped-notifications":"~4.3 || >=4.3"},$r=/pixelfed/i,et=/^(?!.*pixelfed).*$/i,si={"@mastodon/lists":et,"@mastodon/filters":et,"@mastodon/mentions":et,"@mastodon/trending-hashtags":et,"@mastodon/trending-links":et,"@mastodon/post-bookmark":et,"@mastodon/post-edit":et,"@mastodon/profile-edit":et,"@mastodon/profile-private-note":et,"@pixelfed/trending":$r,"@pixelfed/home-include-reblogs":$r,"@pixelfed/global-feed":$r},Nn={};function Fn(e){try{const{version:t,domain:n}=ba(),r=`${n}-${e}`;if(Nn[r])return Nn[r];if(si[e])return Nn[r]=si[e].test(t);const o=dl[e];return o?Nn[r]=Zn(t,o,{includePrerelease:!0,loose:!0}):!1}catch{return!1}}const Vt=2147483647,Ye=36,Eo=1,vn=26,fl=38,hl=700,fs=72,hs=128,ps="-",pl=/^xn--/,ml=/[^\0-\x7F]/,gl=/[\x2E\u3002\uFF0E\uFF61]/g,vl={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},Lr=Ye-Eo,qe=Math.floor,Cr=String.fromCharCode;function ft(e){throw new RangeError(vl[e])}function yl(e,t){const n=[];let r=e.length;for(;r--;)n[r]=t(e[r]);return n}function ms(e,t){const n=e.split("@");let r="";n.length>1&&(r=n[0]+"@",e=n[1]),e=e.replace(gl,".");const o=e.split("."),i=yl(o,t).join(".");return r+i}function gs(e){const t=[];let n=0;const r=e.length;for(;n=55296&&o<=56319&&nString.fromCodePoint(...e),bl=function(e){return e>=48&&e<58?26+(e-48):e>=65&&e<91?e-65:e>=97&&e<123?e-97:Ye},ai=function(e,t){return e+22+75*(e<26)-((t!=0)<<5)},vs=function(e,t,n){let r=0;for(e=n?qe(e/hl):e>>1,e+=qe(e/t);e>Lr*vn>>1;r+=Ye)e=qe(e/Lr);return qe(r+(Lr+1)*e/(e+fl))},ys=function(e){const t=[],n=e.length;let r=0,o=hs,i=fs,a=e.lastIndexOf(ps);a<0&&(a=0);for(let u=0;u=128&&ft("not-basic"),t.push(e.charCodeAt(u));for(let u=a>0?a+1:0;u=n&&ft("invalid-input");const p=bl(e.charCodeAt(u++));p>=Ye&&ft("invalid-input"),p>qe((Vt-r)/f)&&ft("overflow"),r+=p*f;const m=d<=i?Eo:d>=i+vn?vn:d-i;if(pqe(Vt/h)&&ft("overflow"),f*=h}const l=t.length+1;i=vs(r-c,l,c==0),qe(r/l)>Vt-o&&ft("overflow"),o+=qe(r/l),r%=l,t.splice(r++,0,o)}return String.fromCodePoint(...t)},_s=function(e){const t=[];e=gs(e);const n=e.length;let r=hs,o=0,i=fs;for(const c of e)c<128&&t.push(Cr(c));const a=t.length;let u=a;for(a&&t.push(ps);u=r&&fqe((Vt-o)/l)&&ft("overflow"),o+=(c-r)*l,r=c;for(const f of e)if(fVt&&ft("overflow"),f===r){let d=o;for(let p=Ye;;p+=Ye){const m=p<=i?Eo:p>=i+vn?vn:p-i;if(d{const{shortcode:r,staticUrl:o,url:i}=n;e=e.replace(new RegExp(`:${r}:`,"g"),`:${r}:`)}),e):""}const Pt=document.createElement("div"),El=["u-url","mention","hashtag"];function xl(e,t={}){const{emojis:n,postEnhanceDOM:r=()=>{}}=t;let o=e;const i=document.createElement("div");i.innerHTML=o;const a=/{d.setAttribute("target","_blank")}),i.querySelectorAll("a[class]").forEach(d=>{d.classList.forEach(p=>{El.includes(p)||d.classList.remove(p)})})),a&&i.querySelectorAll("a[href]").forEach(f=>{/^https?:\/\//i.test(f.textContent.trim())&&(f.classList.add("has-url-text"),Al(f))}),a){const l=i.querySelectorAll("a[href]"),f=[];l.forEach(d=>{const p=d.innerText.trim(),m=d.querySelector("*");if(/^@[^@]+(@[^@]+)?$/g.test(p)){const[h,g,y]=p.split("@");m||(!f.some(([T])=>T===g)||f.some(([T,_])=>T===g&&_===y)?(d.innerHTML=`@${g}`,f.push([g,y])):d.innerHTML=`@${g}@${y}`),d.classList.add("mention")}/^#[^#]+$/g.test(p)&&(m||(d.innerHTML=`#${p.slice(1)}`),d.classList.add("mention","hashtag"))})}let c;if(o.includes(":")&&(c=Or(i),c.forEach(l=>{let f=l.nodeValue.replace(/&/g,"&").replace(//g,">");n&&(f=ar(f,n)),Pt.innerHTML=f,l.replaceWith(...Pt.childNodes)})),u&&[...i.querySelectorAll("p")].filter(f=>/^```[^]+```$/g.test(f.innerText.trim())).forEach(f=>{const d=document.createElement("pre");f.querySelectorAll("br").forEach(p=>p.replaceWith(` -`)),d.innerHTML=`${f.innerHTML.trim()}`,f.replaceWith(d)}),u&&[...i.querySelectorAll("p")].filter(d=>/^```/g.test(d.innerText)).forEach(d=>{const p=[d];let m=!1,h=d;for(;h.nextElementSibling;){const g=h.nextElementSibling;if(g&&g.tagName==="P")if(/```$/g.test(g.innerText)){p.push(g),m=!0;break}else p.push(g);else break;h=g}if(m){const g=document.createElement("pre");p.forEach(T=>{T.querySelectorAll("br").forEach(_=>_.replaceWith(` -`))});const y=p.map(T=>T.innerHTML).join(` - -`);g.innerHTML=`${y}`,d.replaceWith(g),p.forEach(T=>T.remove())}}),o.includes("`")&&(c=Or(i),c.forEach(l=>{let f=l.nodeValue.replace(/&/g,"&").replace(//g,">");/`[^`]+`/g.test(f)&&(f=f.replaceAll(/(`[^]+?`)/g,"$1")),Pt.innerHTML=f,l.replaceWith(...Pt.childNodes)})),/twitter\.com/i.test(o)&&(c=Or(i,{rejectFilter:["A"]}),c.forEach(l=>{let f=l.nodeValue.replace(/&/g,"&").replace(//g,">");/@[a-zA-Z0-9_]+@twitter\.com/g.test(f)&&(f=f.replaceAll(/(@([a-zA-Z0-9_]+)@twitter\.com)/g,'$1')),Pt.innerHTML=f,l.replaceWith(...Pt.childNodes)})),o.includes("#")){let l=null;const f=[...i.querySelectorAll("p")].filter((d,p)=>{let m=0;for(let h=0;h3||m>1&&l&&p===l+1)return l=p,!0});f!=null&&f.length&&f.forEach(d=>{d.classList.add("hashtag-stuffing"),d.title=d.innerText})}return o.includes("{const f=l.getAttribute("width")||l.naturalWidth,d=l.getAttribute("height")||l.naturalHeight;f&&d&&l.style.setProperty("--original-aspect-ratio",`${f}/${d}`)}),r&&queueMicrotask(()=>r(i)),o=i.innerHTML,o}const ws=st(xl),Ml=["STYLE","IMG","VIDEO","AUDIO","AREA","MAP","TRACK","EMBED","IFRAME","OBJECT","PICTURE","PORTAL","SOURCE","SVG","MATH","CANVAS","NOSCRIPT","SCRIPT","INPUT","OPTION","TEXTAREA","SLOT","TEMPLATE"],Sl=Object.fromEntries(Ml.map(e=>[e,!0])),kl=/^(https?:\/\/(www\.)?|xmpp:)/,Pr=30;function Al(e){var t;if(!(!e||(t=e.querySelector)!=null&&t.call(e,"*")))try{const n=e.innerText.trim(),r=(n.match(kl)||[])[0]||"";if(!r)return;const o=n.slice(r.length,r.length+Pr),i=n.slice(r.length+Pr),a=n.slice(r.length).length>Pr;e.innerHTML=`${o}`}catch{}}function Or(e,t={}){var a;const n=[],r=Object.assign({},Sl,(a=t.rejectFilter)==null?void 0:a.reduce((u,c)=>(u[c]=!0,u),{})),o=document.createTreeWalker(e,NodeFilter.SHOW_TEXT,{acceptNode(u){return r[u.parentNode.nodeName]?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}},!1);let i;for(;i=o.nextNode();)n.push(i);return n}const Ot=document.createElement("div");function Il(e,t){if(!e)return"";const{preProcess:n}=t||{};return Ot.innerHTML=e.replace(/<\/p>/g,`

    - -`).replace(/<\/li>/g,` -`),Ot.querySelectorAll("br").forEach(r=>{r.replaceWith(` -`)}),n==null||n(Ot),Ot.querySelectorAll(".invisible").forEach(r=>{r.remove()}),Ot.querySelectorAll(".ellipsis").forEach(r=>{r.append("...")}),Ot.innerText.replace(/[\r\n]{3,}/g,` - -`).trim()}const cr=st(Il);function $l(e){const{mentions:t=[],instance:n,previewMode:r,statusURL:o}=e||{};return i=>{var f,d;let{target:a}=i;if(a=a.closest("a"),!a||i.metaKey||i.ctrlKey||i.shiftKey||i.altKey||i.which===2)return;const u=(f=a.previousSibling)==null?void 0:f.textContent,c=u==null?void 0:u.endsWith("@"),l=a.innerText.startsWith("@");if((a.classList.contains("u-url")||a.classList.contains("mention"))&&l||c&&!l){const p=(a.querySelector("span")||a).innerText.trim(),m=p.replace(/^@/,""),h=a.getAttribute("href"),g=t.find(y=>y.url===h)||t.find(y=>y.acct===m||y.username===m);if(g)i.preventDefault(),i.stopPropagation(),W.showAccount={account:g.acct,instance:n};else if(!/^http/i.test(p)){i.preventDefault(),i.stopPropagation();const y=a.getAttribute("href");W.showAccount={account:y,instance:n}}}else if(!r){const p=u==null?void 0:u.endsWith("#");if(a.classList.contains("hashtag")||p){i.preventDefault(),i.stopPropagation();const m=a.innerText.replace(/^#/,"").trim(),h=n?`#/${n}/t/${m}`:`#/t/${m}`;location.hash=h}else(d=W.unfurledLinks[a.href])!=null&&d.url&&o!==a.href&&(i.preventDefault(),i.stopPropagation(),W.prevLocation={pathname:location.hash.replace(/^#/,"")},location.hash=`#${W.unfurledLinks[a.href].url}`)}}}const{locale:Ll}=new Intl.DateTimeFormat().resolvedOptions(),Cl=e=>{const{dateYear:t,hideTime:n,formatOpts:r}=e||{},o=new Date().getFullYear();return Intl.DateTimeFormat(Ll,{year:t===o?void 0:"numeric",month:"short",day:"numeric",hour:n?void 0:"numeric",minute:n?void 0:"numeric",...r})},Pl=st(Cl);function yn(e,t){return e instanceof Date||(e=new Date(e)),Pl({dateYear:e.getFullYear(),...t}).format(e)}const{locale:Ol}=Intl.NumberFormat().resolvedOptions(),mt=Intl.NumberFormat(Ol,{notation:"compact",roundingMode:"floor"}).format,ci=5e3;function zn(e){if(e||(e=!0),W.showCompose){W.composerState.minimized?$e({duration:ci,text:"A draft post is currently minimized. Post or discard it before creating a new one."}):$e({duration:ci,text:"A post is currently open. Post or discard it before creating a new one."});return}Ya(),W.showCompose=e}function Af({skeleton:e,account:t,avatarSize:n="xl",useAvatarStatic:r=!1,instance:o,external:i,internal:a,onClick:u,showActivity:c=!1,showStats:l=!1,accountInstance:f,hideDisplayName:d=!1,relationship:p={},excludeRelationshipAttrs:m=[]}){if(e)return s("div",{class:"account-block skeleton",children:[s(nt,{size:n}),s("span",{children:[s("b",{children:"████████"}),s("br",{}),s("span",{class:"account-block-acct",children:"██████"})]})]});if(!t)return null;const{id:h,acct:g,avatar:y,avatarStatic:T,displayName:_,username:E,emojis:w,url:b,statusesCount:M,lastStatusAt:A,bot:O,fields:P,note:x,group:S,followersCount:V,createdAt:B,locked:D}=t;let[$,k,R]=g.match(/([^@]+)(@.+)/i)||[,g];f&&(R=`@${f}`);const L=P==null?void 0:P.find(C=>!!C.verifiedAt&&!!C.value),z={};for(const C in p)m.includes(C)||(z[C]=p[C]);const N=z.following||z.followedBy||z.requested;return s("a",{class:"account-block",href:b,target:i?"_blank":null,title:R?g:`@${g}`,onClick:C=>{if(!i){if(C.preventDefault(),u)return u(C);a?location.hash=`/${o}/a/${h}`:W.showAccount={account:t,instance:o}}},children:[s(nt,{url:r?T:y||T,size:n,squircle:O}),s("span",{class:"account-block-content",children:[!d&&s(U,{children:_?s("b",{children:s(Bt,{text:_,emojis:w})}):s("b",{children:E})})," ",s("span",{class:"account-block-acct bidi-isolate",children:[R?"":"@",k,s("wbr",{}),R,D&&s(U,{children:[" ",s(H,{icon:"lock",size:"s",alt:"Locked"})]})]}),c&&s("div",{class:"account-block-stats",children:["Posts: ",mt(M),!!A&&s(U,{children:[" ","· Last posted:"," ",yn(A,{hideTime:!0})]})]}),l&&s("div",{class:"account-block-stats",children:[O&&s(U,{children:s("span",{class:"tag collapsed",children:[s(H,{icon:"bot"})," Automated"]})}),!!S&&s(U,{children:s("span",{class:"tag collapsed",children:[s(H,{icon:"group"})," Group"]})}),N&&s("div",{class:"shazam-container-horizontal",children:s("div",{class:"shazam-container-inner",children:z.following&&z.followedBy?s("span",{class:"tag minimal",children:"Mutual"}):z.requested?s("span",{class:"tag minimal",children:"Requested"}):z.following?s("span",{class:"tag minimal",children:"Following"}):z.followedBy?s("span",{class:"tag minimal",children:"Follows you"}):null})},p.id),!!V&&s("span",{class:"ib",children:[mt(V)," ",V===1?"follower":"followers"]}),!!L&&s("span",{class:"verified-field",children:[s(H,{icon:"check-circle",size:"s"})," ",s("span",{dangerouslySetInnerHTML:{__html:ws(L.value,{emojis:w})}})]}),!O&&!S&&!N&&!V&&!L&&!!B&&s("span",{class:"created-at",children:["Joined"," ",s("time",{datetime:B,children:yn(B,{hideTime:!0})})]})]})]})]})}function li(e){const{className:t,disabled:n,...r}=e;return s(Dc,{className:t,disabled:n,children:({ref:o,closeMenu:i})=>s(jt,{...r,ref:o,onClick:({detail:a})=>i(a===0?"Enter":void 0)})})}var Ts={};function We(e,t){typeof t=="boolean"&&(t={forever:t}),this._originalTimeouts=JSON.parse(JSON.stringify(e)),this._timeouts=e,this._options=t||{},this._maxRetryTime=t&&t.maxRetryTime||1/0,this._fn=null,this._errors=[],this._attempts=1,this._operationTimeout=null,this._operationTimeoutCb=null,this._timeout=null,this._operationStart=null,this._timer=null,this._options.forever&&(this._cachedTimeouts=this._timeouts.slice(0))}var Dl=We;We.prototype.reset=function(){this._attempts=1,this._timeouts=this._originalTimeouts.slice(0)};We.prototype.stop=function(){this._timeout&&clearTimeout(this._timeout),this._timer&&clearTimeout(this._timer),this._timeouts=[],this._cachedTimeouts=null};We.prototype.retry=function(e){if(this._timeout&&clearTimeout(this._timeout),!e)return!1;var t=new Date().getTime();if(e&&t-this._operationStart>=this._maxRetryTime)return this._errors.push(e),this._errors.unshift(new Error("RetryOperation timeout occurred")),!1;this._errors.push(e);var n=this._timeouts.shift();if(n===void 0)if(this._cachedTimeouts)this._errors.splice(0,this._errors.length-1),n=this._cachedTimeouts.slice(-1);else return!1;var r=this;return this._timer=setTimeout(function(){r._attempts++,r._operationTimeoutCb&&(r._timeout=setTimeout(function(){r._operationTimeoutCb(r._attempts)},r._operationTimeout),r._options.unref&&r._timeout.unref()),r._fn(r._attempts)},n),this._options.unref&&this._timer.unref(),!0};We.prototype.attempt=function(e,t){this._fn=e,t&&(t.timeout&&(this._operationTimeout=t.timeout),t.cb&&(this._operationTimeoutCb=t.cb));var n=this;this._operationTimeoutCb&&(this._timeout=setTimeout(function(){n._operationTimeoutCb()},n._operationTimeout)),this._operationStart=new Date().getTime(),this._fn(this._attempts)};We.prototype.try=function(e){console.log("Using RetryOperation.try() is deprecated"),this.attempt(e)};We.prototype.start=function(e){console.log("Using RetryOperation.start() is deprecated"),this.attempt(e)};We.prototype.start=We.prototype.try;We.prototype.errors=function(){return this._errors};We.prototype.attempts=function(){return this._attempts};We.prototype.mainError=function(){if(this._errors.length===0)return null;for(var e={},t=null,n=0,r=0;r=n&&(t=o,n=a)}return t};(function(e){var t=Dl;e.operation=function(n){var r=e.timeouts(n);return new t(r,{forever:n&&(n.forever||n.retries===1/0),unref:n&&n.unref,maxRetryTime:n&&n.maxRetryTime})},e.timeouts=function(n){if(n instanceof Array)return[].concat(n);var r={retries:10,factor:2,minTimeout:1*1e3,maxTimeout:1/0,randomize:!1};for(var o in n)r[o]=n[o];if(r.minTimeout>r.maxTimeout)throw new Error("minTimeout is greater than maxTimeout");for(var i=[],a=0;aFl.call(e)==="[object Error]",Hl=new Set(["Failed to fetch","NetworkError when attempting to fetch resource.","The Internet connection appears to be offline.","Load failed","Network request failed","fetch failed"]);function Vl(e){return e&&zl(e)&&e.name==="TypeError"&&typeof e.message=="string"?e.message==="Load failed"?e.stack===void 0:Hl.has(e.message):!1}class jl extends Error{constructor(t){super(),t instanceof Error?(this.originalError=t,{message:t}=t):(this.originalError=new Error(t),this.originalError.stack=this.stack),this.name="AbortError",this.message=t}}const ui=(e,t,n)=>{const r=n.retries-(t-1);return e.attemptNumber=t,e.retriesLeft=r,e};async function Bl(e,t){return new Promise((n,r)=>{t={onFailedAttempt(){},retries:10,shouldRetry:()=>!0,...t};const o=Nl.operation(t),i=()=>{var u;o.stop(),r((u=t.signal)==null?void 0:u.reason)};t.signal&&!t.signal.aborted&&t.signal.addEventListener("abort",i,{once:!0});const a=()=>{var u;(u=t.signal)==null||u.removeEventListener("abort",i),o.stop()};o.attempt(async u=>{try{const c=await e(u);a(),n(c)}catch(c){try{if(!(c instanceof Error))throw new TypeError(`Non-error was thrown: "${c}". You should only throw errors.`);if(c instanceof jl)throw c.originalError;if(c instanceof TypeError&&!Vl(c))throw c;if(ui(c,u,t),await t.shouldRetry(c)||(o.stop(),r(c)),await t.onFailedAttempt(c),!o.retry(c))throw o.mainError()}catch(l){ui(l,u,t),a(),r(l)}}})})}const Ul=[{code:"auto",name:"Detect"},{code:"af",name:"Afrikaans"},{code:"sq",name:"Albanian"},{code:"am",name:"Amharic"},{code:"ar",name:"Arabic"},{code:"hy",name:"Armenian"},{code:"as",name:"Assamese"},{code:"ay",name:"Aymara"},{code:"az",name:"Azerbaijani"},{code:"bm",name:"Bambara"},{code:"eu",name:"Basque"},{code:"be",name:"Belarusian"},{code:"bn",name:"Bengali"},{code:"bho",name:"Bhojpuri"},{code:"bs",name:"Bosnian"},{code:"bg",name:"Bulgarian"},{code:"ca",name:"Catalan"},{code:"ceb",name:"Cebuano"},{code:"ny",name:"Chichewa"},{code:"zh",name:"Chinese"},{code:"co",name:"Corsican"},{code:"hr",name:"Croatian"},{code:"cs",name:"Czech"},{code:"da",name:"Danish"},{code:"dv",name:"Dhivehi"},{code:"doi",name:"Dogri"},{code:"nl",name:"Dutch"},{code:"en",name:"English"},{code:"eo",name:"Esperanto"},{code:"et",name:"Estonian"},{code:"ee",name:"Ewe"},{code:"tl",name:"Filipino"},{code:"fi",name:"Finnish"},{code:"fr",name:"French"},{code:"fy",name:"Frisian"},{code:"gl",name:"Galician"},{code:"ka",name:"Georgian"},{code:"de",name:"German"},{code:"el",name:"Greek"},{code:"gn",name:"Guarani"},{code:"gu",name:"Gujarati"},{code:"ht",name:"Haitian Creole"},{code:"ha",name:"Hausa"},{code:"haw",name:"Hawaiian"},{code:"iw",name:"Hebrew"},{code:"hi",name:"Hindi"},{code:"hmn",name:"Hmong"},{code:"hu",name:"Hungarian"},{code:"is",name:"Icelandic"},{code:"ig",name:"Igbo"},{code:"ilo",name:"Ilocano"},{code:"id",name:"Indonesian"},{code:"ga",name:"Irish"},{code:"it",name:"Italian"},{code:"ja",name:"Japanese"},{code:"jw",name:"Javanese"},{code:"kn",name:"Kannada"},{code:"kk",name:"Kazakh"},{code:"km",name:"Khmer"},{code:"rw",name:"Kinyarwanda"},{code:"gom",name:"Konkani"},{code:"ko",name:"Korean"},{code:"kri",name:"Krio"},{code:"ku",name:"Kurdish (Kurmanji)"},{code:"ckb",name:"Kurdish (Sorani)"},{code:"ky",name:"Kyrgyz"},{code:"lo",name:"Lao"},{code:"la",name:"Latin"},{code:"lv",name:"Latvian"},{code:"ln",name:"Lingala"},{code:"lt",name:"Lithuanian"},{code:"lg",name:"Luganda"},{code:"lb",name:"Luxembourgish"},{code:"mk",name:"Macedonian"},{code:"mai",name:"Maithili"},{code:"mg",name:"Malagasy"},{code:"ms",name:"Malay"},{code:"ml",name:"Malayalam"},{code:"mt",name:"Maltese"},{code:"mi",name:"Maori"},{code:"mr",name:"Marathi"},{code:"mni-Mtei",name:"Meiteilon (Manipuri)"},{code:"lus",name:"Mizo"},{code:"mn",name:"Mongolian"},{code:"my",name:"Myanmar (Burmese)"},{code:"ne",name:"Nepali"},{code:"no",name:"Norwegian"},{code:"or",name:"Odia (Oriya)"},{code:"om",name:"Oromo"},{code:"ps",name:"Pashto"},{code:"fa",name:"Persian"},{code:"pl",name:"Polish"},{code:"pt",name:"Portuguese"},{code:"pa",name:"Punjabi"},{code:"qu",name:"Quechua"},{code:"ro",name:"Romanian"},{code:"ru",name:"Russian"},{code:"sm",name:"Samoan"},{code:"sa",name:"Sanskrit"},{code:"gd",name:"Scots Gaelic"},{code:"nso",name:"Sepedi"},{code:"sr",name:"Serbian"},{code:"st",name:"Sesotho"},{code:"sn",name:"Shona"},{code:"sd",name:"Sindhi"},{code:"si",name:"Sinhala"},{code:"sk",name:"Slovak"},{code:"sl",name:"Slovenian"},{code:"so",name:"Somali"},{code:"es",name:"Spanish"},{code:"su",name:"Sundanese"},{code:"sw",name:"Swahili"},{code:"sv",name:"Swedish"},{code:"tg",name:"Tajik"},{code:"ta",name:"Tamil"},{code:"tt",name:"Tatar"},{code:"te",name:"Telugu"},{code:"th",name:"Thai"},{code:"ti",name:"Tigrinya"},{code:"ts",name:"Tsonga"},{code:"tr",name:"Turkish"},{code:"tk",name:"Turkmen"},{code:"ak",name:"Twi"},{code:"uk",name:"Ukrainian"},{code:"ur",name:"Urdu"},{code:"ug",name:"Uyghur"},{code:"uz",name:"Uzbek"},{code:"vi",name:"Vietnamese"},{code:"cy",name:"Welsh"},{code:"xh",name:"Xhosa"},{code:"yi",name:"Yiddish"},{code:"yo",name:"Yoruba"},{code:"zu",name:"Zulu"}];var Wl=Object.defineProperty,Kl=(e,t,n)=>t in e?Wl(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Hn=(e,t,n)=>Kl(e,typeof t!="symbol"?t+"":t,n),no=new Map,Vn=new WeakMap,di=0,Zl=void 0;function Yl(e){return e?(Vn.has(e)||(di+=1,Vn.set(e,di.toString())),Vn.get(e)):"0"}function ql(e){return Object.keys(e).sort().filter(t=>e[t]!==void 0).map(t=>`${t}_${t==="root"?Yl(e.root):e[t]}`).toString()}function Gl(e){const t=ql(e);let n=no.get(t);if(!n){const r=new Map;let o;const i=new IntersectionObserver(a=>{a.forEach(u=>{var c;const l=u.isIntersecting&&o.some(f=>u.intersectionRatio>=f);e.trackVisibility&&typeof u.isVisible>"u"&&(u.isVisible=l),(c=r.get(u.target))==null||c.forEach(f=>{f(l,u)})})},e);o=i.thresholds||(Array.isArray(e.threshold)?e.threshold:[e.threshold||0]),n={id:t,observer:i,elements:r},no.set(t,n)}return n}function Es(e,t,n={},r=Zl){if(typeof window.IntersectionObserver>"u"&&r!==void 0){const c=e.getBoundingClientRect();return t(r,{isIntersecting:r,target:e,intersectionRatio:typeof n.threshold=="number"?n.threshold:0,time:0,boundingClientRect:c,intersectionRect:c,rootBounds:c}),()=>{}}const{id:o,observer:i,elements:a}=Gl(n),u=a.get(e)||[];return a.has(e)||a.set(e,u),u.push(t),i.observe(e),function(){u.splice(u.indexOf(t),1),u.length===0&&(a.delete(e),i.unobserve(e)),a.size===0&&(i.disconnect(),no.delete(o))}}function Xl(e){return typeof e.children!="function"}var If=class extends Fi{constructor(e){super(e),Hn(this,"node",null),Hn(this,"_unobserveCb",null),Hn(this,"handleNode",t=>{this.node&&(this.unobserve(),!t&&!this.props.triggerOnce&&!this.props.skip&&this.setState({inView:!!this.props.initialInView,entry:void 0})),this.node=t||null,this.observeNode()}),Hn(this,"handleChange",(t,n)=>{t&&this.props.triggerOnce&&this.unobserve(),Xl(this.props)||this.setState({inView:t,entry:n}),this.props.onChange&&this.props.onChange(t,n)}),this.state={inView:!!e.initialInView,entry:void 0}}componentDidMount(){this.unobserve(),this.observeNode()}componentDidUpdate(e){(e.rootMargin!==this.props.rootMargin||e.root!==this.props.root||e.threshold!==this.props.threshold||e.skip!==this.props.skip||e.trackVisibility!==this.props.trackVisibility||e.delay!==this.props.delay)&&(this.unobserve(),this.observeNode())}componentWillUnmount(){this.unobserve()}observeNode(){if(!this.node||this.props.skip)return;const{threshold:e,root:t,rootMargin:n,trackVisibility:r,delay:o,fallbackInView:i}=this.props;this._unobserveCb=Es(this.node,this.handleChange,{threshold:e,root:t,rootMargin:n,trackVisibility:r,delay:o},i)}unobserve(){this._unobserveCb&&(this._unobserveCb(),this._unobserveCb=null)}render(){const{children:e}=this.props;if(typeof e=="function"){const{inView:m,entry:h}=this.state;return e({inView:m,entry:h,ref:this.handleNode})}const{as:t,triggerOnce:n,threshold:r,root:o,rootMargin:i,onChange:a,skip:u,trackVisibility:c,delay:l,initialInView:f,fallbackInView:d,...p}=this.props;return wa(t||"div",{ref:this.handleNode,...p},e)}};function Jl({threshold:e,delay:t,trackVisibility:n,rootMargin:r,root:o,triggerOnce:i,skip:a,initialInView:u,fallbackInView:c,onChange:l}={}){var f;const[d,p]=te(null),m=j(),[h,g]=te({inView:!!u,entry:void 0});m.current=l,se(()=>{if(a||!d)return;let E;return E=Es(d,(w,b)=>{g({inView:w,entry:b}),m.current&&m.current(w,b),b.isIntersecting&&i&&E&&(E(),E=void 0)},{root:o,rootMargin:r,threshold:e,trackVisibility:n,delay:t},c),()=>{E&&E()}},[Array.isArray(e)?e.toString():e,d,o,r,i,a,n,c,t]);const y=(f=h.entry)==null?void 0:f.target,T=j();!d&&y&&!i&&!a&&T.current!==y&&(T.current=y,g({inView:!!u,entry:void 0}));const _=[p,h.inView,h.entry];return _.ref=_[0],_.inView=_[1],_.entry=_[2],_}const fi=48,Dr={};function xs({id:e,children:t}){const n=j(),r=!!Dr[e],[o,i]=te(!1),[a,u]=te(r||!1),{ref:c}=Jl({root:null,rootMargin:`-${fi}px 0px 0px 0px`,trackVisibility:!0,delay:1e3,onChange:l=>{l&&(i(!0),e&&(Dr[e]=!0))},triggerOnce:!0,skip:a||o});return se(()=>{if(!n.current)return;const l=n.current.getBoundingClientRect();l.bottom>fi&&(l.top{let o=fn[Rr];return fetch(`https://${o}/api/v1/${t}/${n}/${encodeURIComponent(e)}`).then(i=>{if(!i.ok)throw new Error(i.statusText);return i.json()}).then(i=>{var a;return{provider:"lingva",content:i.translation,detectedSourceLanguage:(a=i.info)==null?void 0:a.detectedSource,info:i.info}})},{retries:3,onFailedAttempt:o=>{Rr=(Rr+1)%fn.length}})}const Ms=1e3*60*60,Ss=fo(tu,{maxAge:Ms}),nu=fo(eu(Ss),{maxAge:Ms});function ru({forceTranslate:e,sourceLanguage:t,onTranslate:n,text:r="",mini:o,autoDetected:i}){const a=us(!0),[u,c]=te("default"),[l,f]=te(null),[d,p]=te(null),[m,h]=te(null),g=j(),y=t?Ir(t):null,T=Ir(a),_=j("auto");n||(n=o?nu:Ss);const E=async()=>{var w,b;c("loading");try{const{content:M,detectedSourceLanguage:A,provider:O,error:P,...x}=await n(r,_.current,a);if(M){if(A){const S=Ir(A);h(S)}if(O==="lingva"){const S=(b=(w=x==null?void 0:x.info)==null?void 0:w.pronunciation)==null?void 0:b.query;S&&f(S)}p(M),c("default"),!o&&M.trim()!==r.trim()&&(g.current.open=!0,g.current.scrollIntoView({behavior:"smooth",block:"nearest"}))}else c("error")}catch{c("error")}};return se(()=>{e&&E()},[e]),o?d&&d.trim()!==r.trim()&&m!==T?s(xs,{children:s("div",{class:"status-translation-block-mini",children:[s(H,{icon:"translate",alt:`Auto-translated from ${y}`}),s("output",{lang:a,dir:"auto",title:l||"",children:d})]})}):null:s("div",{class:"status-translation-block",onClick:w=>{w.preventDefault()},children:s("details",{ref:g,children:[s("summary",{children:s("button",{type:"button",onClick:async w=>{w.preventDefault(),w.stopPropagation(),g.current.open=!g.current.open,u!=="loading"&&(d||E())},children:[s(H,{icon:"translate"})," ",s("span",{children:u==="loading"?"Translating…":t&&y&&!m?i?`Translate from ${y} (auto-detected)`:`Translate from ${y}`:"Translate"})]})}),s("div",{class:"translated-block",children:[s("div",{class:"translation-info insignificant",children:[s("select",{class:"translated-source-select",disabled:u==="loading",onChange:w=>{_.current=w.target.value,E()},children:Ul.map(w=>s("option",{value:w.code,children:w.code==="auto"?`Auto (${m??"…"})`:w.name}))})," ",s("span",{children:["→ ",T]}),s(Hi,{abrupt:!0,hidden:u!=="loading"})]}),u==="error"?s("p",{class:"ui-state",children:"Failed to translate"}):!!d&&s(U,{children:[s("output",{class:"translated-content",lang:a,dir:"auto",children:d}),!!l&&s("output",{class:"translated-pronunciation-content",tabIndex:-1,onClick:w=>{w.target.classList.toggle("expand")},children:l})]})]})]})})}const ou=fn!=null&&fn.length?ru:()=>null;function at(e){return new Promise((t,n)=>{e.oncomplete=e.onsuccess=()=>t(e.result),e.onabort=e.onerror=()=>n(e.error)})}function ks(e,t){const n=indexedDB.open(e);n.onupgradeneeded=()=>n.result.createObjectStore(t);const r=at(n);return(o,i)=>r.then(a=>i(a.transaction(t,o).objectStore(t)))}let Nr;function At(){return Nr||(Nr=ks("keyval-store","keyval")),Nr}function iu(e,t=At()){return t("readonly",n=>at(n.get(e)))}function su(e,t,n=At()){return n("readwrite",r=>(r.put(t,e),at(r.transaction)))}function au(e,t=At()){return t("readonly",n=>Promise.all(e.map(r=>at(n.get(r)))))}function cu(e,t=At()){return t("readwrite",n=>(n.delete(e),at(n.transaction)))}function lu(e,t=At()){return t("readwrite",n=>(e.forEach(r=>n.delete(r)),at(n.transaction)))}function uu(e=At()){return e("readwrite",t=>(t.clear(),at(t.transaction)))}function du(e,t){return e.openCursor().onsuccess=function(){this.result&&(t(this.result),this.result.continue())},at(e.transaction)}function fu(e=At()){return e("readonly",t=>{if(t.getAllKeys)return at(t.getAllKeys());const n=[];return du(t,r=>n.push(r.key)).then(()=>n)})}function pi(e,t){const n=ks(e,t);return{set:(r,o)=>su(r,o,n),get:r=>iu(r,n),getMany:r=>au(r,n),del:r=>cu(r,n),delMany:r=>lu(r,n),clear:()=>uu(n),keys:()=>fu(n)}}const $f={drafts:pi("drafts-db","drafts-store"),catchup:pi("catchup-db","catchup-store")};async function Lf(e,t={}){if(!(e!=null&&e.length))return;const{masto:n}=Xn(),r=ho(),o=e.reduce((i,a)=>(!i.includes(a.id)&&!t[a.id]&&a.id!==r&&i.push(a.id),i),[]);if(!o.length)return null;try{return(await n.v1.accounts.relationships.fetch({id:o})).reduce((u,c)=>(u[c.id]=c,u),{})}catch{return null}}class Be extends HTMLElement{constructor(){super(),this.isIframeLoaded=!1,this.setupDom()}static get observedAttributes(){return["videoid","playlistid"]}connectedCallback(){this.addEventListener("pointerover",Be.warmConnections,{once:!0}),this.addEventListener("click",()=>this.addIframe())}get videoId(){return encodeURIComponent(this.getAttribute("videoid")||"")}set videoId(t){this.setAttribute("videoid",t)}get playlistId(){return encodeURIComponent(this.getAttribute("playlistid")||"")}set playlistId(t){this.setAttribute("playlistid",t)}get videoTitle(){return this.getAttribute("videotitle")||"Video"}set videoTitle(t){this.setAttribute("videotitle",t)}get videoPlay(){return this.getAttribute("videoPlay")||"Play"}set videoPlay(t){this.setAttribute("videoPlay",t)}get videoStartAt(){return this.getAttribute("videoStartAt")||"0"}get autoLoad(){return this.hasAttribute("autoload")}get noCookie(){return this.hasAttribute("nocookie")}get posterQuality(){return this.getAttribute("posterquality")||"hqdefault"}get posterLoading(){return this.getAttribute("posterloading")||"lazy"}get params(){return`start=${this.videoStartAt}&${this.getAttribute("params")}`}set params(t){this.setAttribute("params",t)}setupDom(){const t=this.attachShadow({mode:"open"});let n="";window.liteYouTubeNonce&&(n=`nonce="${window.liteYouTubeNonce}"`),t.innerHTML=` - -
    - - - - - - -
    - `,this.domRefFrame=t.querySelector("#frame"),this.domRefImg={fallback:t.querySelector("#fallbackPlaceholder"),webp:t.querySelector("#webpPlaceholder"),jpeg:t.querySelector("#jpegPlaceholder")},this.domRefPlayButton=t.querySelector("#playButton")}setupComponent(){this.initImagePlaceholder(),this.domRefPlayButton.setAttribute("aria-label",`${this.videoPlay}: ${this.videoTitle}`),this.setAttribute("title",`${this.videoPlay}: ${this.videoTitle}`),(this.autoLoad||this.isYouTubeShort())&&this.initIntersectionObserver()}attributeChangedCallback(t,n,r){switch(t){case"videoid":case"playlistid":case"videoTitle":case"videoPlay":{n!==r&&(this.setupComponent(),this.domRefFrame.classList.contains("activated")&&(this.domRefFrame.classList.remove("activated"),this.shadowRoot.querySelector("iframe").remove(),this.isIframeLoaded=!1));break}default:break}}addIframe(t=!1){if(!this.isIframeLoaded){let n=t?0:1;const r=this.noCookie?"-nocookie":"";let o;this.playlistId?o=`?listType=playlist&list=${this.playlistId}&`:o=`${this.videoId}?`,this.isYouTubeShort()&&(this.params=`loop=1&mute=1&modestbranding=1&playsinline=1&rel=0&enablejsapi=1&playlist=${this.videoId}`,n=1);const i=` -`;this.domRefFrame.insertAdjacentHTML("beforeend",i),this.domRefFrame.classList.add("activated"),this.isIframeLoaded=!0,this.attemptShortAutoPlay(),this.dispatchEvent(new CustomEvent("liteYoutubeIframeLoaded",{detail:{videoId:this.videoId},bubbles:!0,cancelable:!0}))}}initImagePlaceholder(){var r,o;const t=`https://i.ytimg.com/vi_webp/${this.videoId}/${this.posterQuality}.webp`,n=`https://i.ytimg.com/vi/${this.videoId}/${this.posterQuality}.jpg`;this.domRefImg.fallback.loading=this.posterLoading,this.domRefImg.webp.srcset=t,this.domRefImg.jpeg.srcset=n,this.domRefImg.fallback.src=n,this.domRefImg.fallback.setAttribute("aria-label",`${this.videoPlay}: ${this.videoTitle}`),(o=(r=this.domRefImg)==null?void 0:r.fallback)==null||o.setAttribute("alt",`${this.videoPlay}: ${this.videoTitle}`)}initIntersectionObserver(){const t={root:null,rootMargin:"0px",threshold:0};new IntersectionObserver((r,o)=>{r.forEach(i=>{i.isIntersecting&&!this.isIframeLoaded&&(Be.warmConnections(),this.addIframe(!0),o.unobserve(this))})},t).observe(this)}attemptShortAutoPlay(){this.isYouTubeShort()&&setTimeout(()=>{var t,n;(n=(t=this.shadowRoot.querySelector("iframe"))==null?void 0:t.contentWindow)==null||n.postMessage('{"event":"command","func":"playVideo","args":""}',"*")},2e3)}isYouTubeShort(){return this.getAttribute("short")===""&&window.matchMedia("(max-width: 40em)").matches}static addPrefetch(t,n){const r=document.createElement("link");r.rel=t,r.href=n,r.crossOrigin="true",document.head.append(r)}static warmConnections(){Be.isPreconnected||window.liteYouTubeIsPreconnected||(Be.addPrefetch("preconnect","https://i.ytimg.com/"),Be.addPrefetch("preconnect","https://s.ytimg.com"),Be.addPrefetch("preconnect","https://www.youtube.com"),Be.addPrefetch("preconnect","https://www.google.com"),Be.addPrefetch("preconnect","https://googleads.g.doubleclick.net"),Be.addPrefetch("preconnect","https://static.doubleclick.net"),Be.isPreconnected=!0,window.liteYouTubeIsPreconnected=!0)}}Be.isPreconnected=!1;customElements.define("lite-youtube",Be);const As=new Uint8Array(128);for(let e=0;e<83;e++)As["0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz#$%*+,-.:;=?@[]^_{|}~".charCodeAt(e)]=e;const Yn=(e,t,n)=>{let r=0;for(;te>10.31475?Is(e/Ls+.052132,2.4):e/$s,Fr=e=>~~(e>1227e-8?Ls*Is(e,.416666)-13.025:e*$s+1),hn=e=>(e<0?-1:1)*e*e,mi=e=>{for(e+=_n/2;e>_n;)e-=hu;const t=1.27323954*e-.405284735*hn(e);return .225*(hn(t)-t)+t};function xo(e){const t=Yn(e,2,6);return[t>>16,t>>8&255,t&255]}function mu(e,t,n,r){const o=Yn(e,0,1),i=o%9+1,a=~~(o/9)+1,u=i*a;let c=0,l=0,f=0,d=0,p=0,m=0,h=0,g=0,y=0,T=0,_=0,E=0;const w=(Yn(e,1,2)+1)/13446*(r|1),b=new Float64Array(u*3),M=xo(e);for(c=0;c<3;c++)b[c]=pu(M[c]);for(c=1;c{const n=t.char||" ",r=t.count||2;let o=0;const i=[];return e.reverse().reduce((a,u)=>{i.length&&o&&i[o]&&i[o]===u.substring(1,i[o].length+1)&&(i.splice(o,1),o--);const l=[`${n.repeat(o?o*r:0)}${u}`,...a];return u.substring(0,2)==="e.trim().replace(/(^(\s|\t)+|(( |\t)+)$)/gm,""),yu=e=>{const t=Cs(e).split(` -`),n=[];let r="";for(let o=0;o")){n.push(`${r}${i.slice(0,-2)} />`),r="";continue}if(i.endsWith(">")){n.push(`${r}${i.startsWith(">")||i.startsWith("<")?"":" "}${i}`),r="";continue}r+=r.length?` ${i}`:i}return n};var _u={mergeAttributesWithElements:yu,removeEmptyLines:Cs};const bu=vu,{mergeAttributesWithElements:wu}=_u,Tu=(e,t={})=>{const n=wu(e);return bu(n,t)};var Eu=Tu;const xu=St(Eu);var cn=(e=>(e.Mouse="mouse",e.Touch="touch",e.Pointer="pointer",e))(cn||{}),ln=(e=>(e.CancelledByMovement="cancelled-by-movement",e.CancelledByRelease="cancelled-by-release",e.CancelledOutsideElement="cancelled-outside-element",e))(ln||{});const Ps=()=>typeof window=="object"?(window==null?void 0:window.PointerEvent)??null:null,Mu=()=>typeof window=="object"?(window==null?void 0:window.TouchEvent)??null:null;function Os(e){const{nativeEvent:t}=e,n=Mu();return n&&t instanceof n||"touches"in e}function Ds(e){const t=Ps();return e.nativeEvent instanceof MouseEvent&&!(t&&e.nativeEvent instanceof t)}function Rs(e){const{nativeEvent:t}=e;if(!t)return!1;const n=Ps();return n&&t instanceof n||"pointerId"in t}function gi(e){return Ds(e)||Os(e)||Rs(e)}function vi(e){return Os(e)?{x:e.touches[0].pageX,y:e.touches[0].pageY}:Ds(e)||Rs(e)?{x:e.pageX,y:e.pageY}:null}function Su(e){return{target:e.target,currentTarget:e.currentTarget,nativeEvent:e,persist:()=>{}}}function Ns(e,{threshold:t=400,captureEvent:n=!1,detect:r=cn.Pointer,cancelOnMovement:o=!1,cancelOutsideElement:i=!0,filterEvents:a,onStart:u,onMove:c,onFinish:l,onCancel:f}={}){const d=j(!1),p=j(!1),m=j(),h=j(),g=j(e),y=j(null),T=Ie(b=>M=>{p.current||gi(M)&&(a!==void 0&&!a(M)||(n&&M.persist(),u==null||u(M,{context:b}),y.current=vi(M),p.current=!0,m.current=M.currentTarget,h.current=setTimeout(()=>{g.current&&(g.current(M,{context:b}),d.current=!0)},t)))},[n,a,u,t]),_=Ie(b=>(M,A)=>{gi(M)&&p.current&&(y.current=null,n&&M.persist(),d.current?l==null||l(M,{context:b}):p.current&&(f==null||f(M,{context:b,reason:A??ln.CancelledByRelease})),d.current=!1,p.current=!1,h.current!==void 0&&clearTimeout(h.current))},[n,l,f]),E=Ie(b=>M=>{if(c==null||c(M,{context:b}),o!==!1&&y.current){const A=vi(M);if(A){const O=o===!0?25:o,P={x:Math.abs(A.x-y.current.x),y:Math.abs(A.y-y.current.y)};(P.x>O||P.y>O)&&_(b)(M,ln.CancelledByMovement)}}},[_,o,c]),w=Ie(b=>{if(e===null)return{};switch(r){case cn.Mouse:{const M={onMouseDown:T(b),onMouseMove:E(b),onMouseUp:_(b)};return i&&(M.onMouseLeave=A=>{_(b)(A,ln.CancelledOutsideElement)}),M}case cn.Touch:return{onTouchStart:T(b),onTouchMove:E(b),onTouchEnd:_(b)};case cn.Pointer:{const M={onPointerDown:T(b),onPointerMove:E(b),onPointerUp:_(b)};return i&&(M.onPointerLeave=A=>_(b)(A,ln.CancelledOutsideElement)),M}}},[e,_,i,r,E,T]);return se(()=>{if(!window)return;function b(M){const A=Su(M);_()(A)}return window.addEventListener("mouseup",b),window.addEventListener("touchend",b),window.addEventListener("pointerup",b),()=>{window.removeEventListener("mouseup",b),window.removeEventListener("touchend",b),window.removeEventListener("pointerup",b)}},[_]),se(()=>()=>{h.current!==void 0&&clearTimeout(h.current)},[]),se(()=>{g.current=e},[e]),w}function ku({poll:e,lang:t,readOnly:n,refresh:r=()=>{},votePoll:o=()=>{}}){const[i,a]=te("default"),{expired:u,expiresAt:c,id:l,multiple:f,options:d,ownVotes:p,voted:m,votersCount:h,votesCount:g,emojis:y}=e,T=!!c&&new Date(c),_=h||g;let E=0;_<=1e3?E=0:_<=1e4?E=1:_<=1e5&&(E=2);const[w,b]=te(!1),M=d.every(A=>A.votesCount!==null);return s("div",{lang:t,dir:"auto",class:`poll ${n?"read-only":""} ${i==="loading"?"loading":""}`,children:[w&&M||m||u?s(U,{children:[s("div",{class:"poll-options",children:d.map((A,O)=>{const{title:P,votesCount:x}=A,S=_?(x/_*100).toFixed(E):0,V=x>0&&x===Math.max(...d.map(B=>B.votesCount));return s("div",{class:`poll-option poll-result ${V?"poll-option-leading":""}`,style:{"--percentage":`${S}%`},children:[s("div",{class:"poll-option-title",children:[s("span",{children:s(Bt,{text:P,emojis:y})}),m&&p.includes(O)&&s(U,{children:[" ",s(H,{icon:"check-circle"})]})]}),s("div",{class:"poll-option-votes",title:`${x} vote${x===1?"":"s"}`,children:[S,"%"]})]},`${O}-${P}-${x}`)})}),!u&&!m&&s("button",{class:"poll-vote-button plain2",disabled:i==="loading",onClick:A=>{A.preventDefault(),b(!1)},children:[s(H,{icon:"arrow-left",size:"s"})," Hide results"]})]}):s("form",{onSubmit:async A=>{A.preventDefault();const O=A.target,P=new FormData(O),x=[];P.forEach((S,V)=>{V==="poll"&&x.push(S)}),x.length&&(a("loading"),await o(x),a("default"))},children:[s("div",{class:"poll-options",children:d.map((A,O)=>{const{title:P}=A;return s("div",{class:"poll-option",children:s("label",{class:"poll-label",children:[s("input",{type:f?"checkbox":"radio",name:"poll",value:O,disabled:i==="loading",readOnly:n}),s("span",{class:"poll-option-title",children:s(Bt,{text:P,emojis:y})})]})})})}),!n&&s("button",{class:"poll-vote-button",type:"submit",disabled:i==="loading",children:"Vote"})]}),s("p",{class:"poll-meta",children:[!u&&!n&&s("button",{type:"button",class:"plain small",disabled:i==="loading",onClick:A=>{A.preventDefault(),a("loading"),(async()=>(await r(),a("default")))()},title:"Refresh",children:s(H,{icon:"refresh",alt:"Refresh"})}),!m&&!u&&!n&&M&&s("button",{type:"button",class:"plain small",disabled:i==="loading",onClick:A=>{A.preventDefault(),b(!w)},title:w?"Hide results":"Show results",children:[s(H,{icon:w?"eye-open":"eye-close",alt:w?"Hide results":"Show results"})," "]}),!u&&!n&&" ",s("span",{title:g,children:mt(g)})," vote",g===1?"":"s",!!h&&h!==g&&s(U,{children:[" ","• ",s("span",{title:h,children:mt(h)})," ","voter",h===1?"":"s"]})," ","• ",u?"Ended":"Ending"," ",!!T&&s(Mt,{datetime:T})]})," "]})}const Fs=ot();function Au(e,t){if(!(e!=null&&e.length))return!1;const n=e.filter(i=>{const{filter:a}=i,u=a.context.includes(t);return u?a.expiresAt?new Date(a.expiresAt)>new Date:u:!1});if(!n.length)return!1;if(n.some(i=>i.filter.filterAction==="hide"))return{action:"hide"};if(n.some(i=>i.filter.filterAction==="warn")){const i=n.map(a=>a.filter.title);return{action:"warn",titles:i,titlesStr:i.join(" • ")}}return!1}const Mo=st(Au);function Iu(e,t,n){var a;const{filtered:r}=e;if(!(r!=null&&r.length)||n&&((a=e.account)==null?void 0:a.id)===n)return!0;const i=Mo(r,t);return i?i.action!=="hide":!0}function Cf(e,t){if(!(e!=null&&e.length))return[];if(!t)return e;const n=ho();return e.filter(r=>Iu(r,t,n))}const zr=document.createElement("div");function Hr(e){return e?(zr.innerHTML=e,zr.querySelectorAll(".invisible").forEach(t=>{t.remove()}),zr.innerText.length):0}const un="speechSynthesis"in window;function yi(e,t){if(un)try{speechSynthesis.speaking&&speechSynthesis.cancel();const n=new SpeechSynthesisUtterance(e);t&&(n.lang=t),speechSynthesis.speak(n)}catch(n){alert(n)}}function zs(e){var a;const{spoilerText:t,content:n,poll:r,mediaAttachments:o}=e;let i="";return t!=null&&t.trim()?i+=t:i+=cr(n),i=i.trim(),(a=r==null?void 0:r.options)!=null&&a.length&&(i+=` - -📊: -${r.options.map(u=>`${r.multiple?"▪️":"•"} ${u.title}`).join(` -`)}`),o!=null&&o.length&&(i+=" "+o.map(u=>({image:"🖼️",gifv:"🎞️",video:"📹",audio:"🎵",unknown:""})[u.type]||"").join("")),i}function $u(e,t,n){var r=this,o=j(null),i=j(0),a=j(null),u=j([]),c=j(),l=j(),f=j(e),d=j(!0);f.current=e;var p=typeof window<"u",m=!t&&t!==0&&p;if(typeof e!="function")throw new TypeError("Expected a function");t=+t||0;var h=!!(n=n||{}).leading,g=!("trailing"in n)||!!n.trailing,y="maxWait"in n,T="debounceOnServer"in n&&!!n.debounceOnServer,_=y?Math.max(+n.maxWait||0,t):null;se(function(){return d.current=!0,function(){d.current=!1}},[]);var E=fe(function(){var w=function(x){var S=u.current,V=c.current;return u.current=c.current=null,i.current=x,l.current=f.current.apply(V,S)},b=function(x,S){m&&cancelAnimationFrame(a.current),a.current=m?requestAnimationFrame(x):setTimeout(x,S)},M=function(x){if(!d.current)return!1;var S=x-o.current;return!o.current||S>=t||S<0||y&&x-i.current>=_},A=function(x){return a.current=null,g&&u.current?w(x):(u.current=c.current=null,l.current)},O=function x(){var S=Date.now();if(M(S))return A(S);if(d.current){var V=t-(S-o.current),B=y?Math.min(V,_-(S-i.current)):V;b(x,B)}},P=function(){if(p||T){var x=Date.now(),S=M(x);if(u.current=[].slice.call(arguments),c.current=r,o.current=x,S){if(!a.current&&d.current)return i.current=o.current,b(O,t),h?w(o.current):l.current;if(y)return b(O,t),w(o.current)}return a.current||b(O,t),l.current}};return P.cancel=function(){a.current&&(m?cancelAnimationFrame(a.current):clearTimeout(a.current)),i.current=0,u.current=o.current=c.current=a.current=null},P.isPending=function(){return!!a.current},P.flush=function(){return a.current?A(Date.now()):l.current},P},[h,y,t,_,g,m,p,T]);return E}function Lu(e,t,n){var r=n===void 0?{}:n,o=r.leading,i=r.trailing;return $u(e,t,{maxWait:t,leading:o===void 0||o,trailing:i===void 0||i})}function Cu(e,t){var n=j(null),r=j(null);r.current=t;var o=j(null);se(function(){i()});var i=Ie(function(){var a=o.current,u=r.current,c=a||(u?u instanceof Element?u:u.current:null);n.current&&n.current.element===c&&n.current.subscriber===e||(n.current&&n.current.cleanup&&n.current.cleanup(),n.current={element:c,subscriber:e,cleanup:c?e(c):void 0})},[e]);return se(function(){return function(){n.current&&n.current.cleanup&&(n.current.cleanup(),n.current=null)}},[]),Ie(function(a){o.current=a,i()},[i])}function _i(e,t,n){return e[t]?e[t][0]?e[t][0][n]:e[t][n]:t==="contentBoxSize"?e.contentRect[n==="inlineSize"?"width":"height"]:void 0}function Pu(e){e===void 0&&(e={});var t=e.onResize,n=j(void 0);n.current=t;var r=e.round||Math.round,o=j(),i=te({width:void 0,height:void 0}),a=i[0],u=i[1],c=j(!1);se(function(){return c.current=!1,function(){c.current=!0}},[]);var l=j({width:void 0,height:void 0}),f=Cu(Ie(function(d){return(!o.current||o.current.box!==e.box||o.current.round!==r)&&(o.current={box:e.box,round:r,instance:new ResizeObserver(function(p){var m=p[0],h=e.box==="border-box"?"borderBoxSize":e.box==="device-pixel-content-box"?"devicePixelContentBoxSize":"contentBoxSize",g=_i(m,h,"inlineSize"),y=_i(m,h,"blockSize"),T=g?r(g):void 0,_=y?r(y):void 0;if(l.current.width!==T||l.current.height!==_){var E={width:T,height:_};l.current.width=T,l.current.height=_,n.current?n.current(E):c.current||u(E)}})}),o.current.instance.observe(d,{box:e.box}),function(){o.current&&o.current.instance.unobserve(d)}},[e.box,r]),e.ref);return fe(function(){return{ref:f,width:a.width,height:a.height}},[f,a.width,a.height])}function qn({className:e="truncated"}={}){const t=j(),n=Lu(({height:r})=>{if(t.current){const{scrollHeight:o}=t.current;let i=o>r;if(i){const{height:a,maxHeight:u}=getComputedStyle(t.current),c=parseInt(u||a,10);i=o>c}t.current.classList.toggle(e,i)}},300);return Pu({ref:t,box:"border-box",onResize:n}),t}const ro={public:"earth",unlisted:"group",private:"lock",direct:"message"};var Hs="kvfysmfp",Vs="ufhsfnkm",Ou=".".concat(Hs,"{overflow:hidden;touch-action:none}.").concat(Vs,"{transform-origin: 0 0}"),Du=typeof window>"u",Ru=function(){return!Du&&("ontouchstart"in window||navigator.maxTouchPoints>0)};var Nu=function(e){var t=e.x,n=e.y,r=e.scale;return"scale3d(".concat(r,",").concat(r,", 1) translate3d(").concat(t,"px, ").concat(n,"px, 0)")};var Fu=Math.min,zu=Math.max;function bi(e){var t=e.containerDimension,n=e.childDimension,r=e.padding,o=e.centerContained,i=n-t;return i+2*r<=0&&o?[i/2,i/2]:[Fu(i+r,0)-r,zu(0,i+r)]}var wi=function(e,t){return t?"".concat(e," ").concat(t):e},jn=Math.abs,Hu=Math.min,Vu=Math.sqrt,js=typeof window>"u",ju=js?!1:/(Mac)/i.test(navigator.platform),Dt=function(e){return e==="drag"},rn=function(e){return e==="zoom"},Bu=function(e){return ju&&e.ctrlKey},on=function(e){e.stopPropagation(),e.preventDefault()},Ti=function(e,t){var n=e.x-t.x,r=e.y-t.y;return Vu(n*n+r*r)},Uu=function(e,t){var n=Ti(e[0],e[1]),r=Ti(t[0],t[1]);return r/n},Wu=function(e,t){return e>t-.01&&et?t:n},qu=function(e){return!(e.ctrlKey||e.metaKey)},Gu=function(e){if(e){var t=e.offsetWidth,n=e.offsetHeight;if(t&&n)return{width:t,height:n};var r=getComputedStyle(e),o=parseFloat(r.width),i=parseFloat(r.height);if(i&&o)return{width:o,height:i}}return{width:0,height:0}},Xu=function(e,t){return{x:t.x-e.x,y:t.y-e.y}},Ju=function(e,t){return e.x===t.x&&e.y===t.y},Tt=function(){},Un={x:0,y:0},xi=function(e){Ta(t,e);function t(){var n=e!==null&&e.apply(this,arguments)||this;return n._prevDragMovePoint=null,n._containerObserver=null,n._fingers=0,n._firstMove=!0,n._initialOffset=Pe({},Un),n._interaction=null,n._isDoubleTap=!1,n._isOffsetsSet=!1,n._lastDragPosition=null,n._lastScale=1,n._lastTouchStart=0,n._lastZoomCenter=null,n._listenMouseMove=!1,n._nthZoom=0,n._offset=Pe({},Un),n._startOffset=Pe({},Un),n._startTouches=null,n._updatePlaned=!1,n._wheelTimeOut=null,n._zoomFactor=1,n._initialZoomFactor=1,n._draggingPoint=Pe({},Un),n._ignoreNextClick=!1,n._containerRef=Ea(),n._handleClick=function(r){n._ignoreNextClick&&(n._ignoreNextClick=!1,r.stopPropagation())},n._onResize=function(){var r;!((r=n._containerRef)===null||r===void 0)&&r.current&&(n._updateInitialZoomFactor(),n._setupOffsets(),n._update())},n._handlerOnTouchEnd=n._handlerIfEnable(function(r){n._fingers=r.touches.length,n.props.shouldCancelHandledTouchEndEvents&&(rn(n._interaction)||Dt(n._interaction)&&(n._startOffset.x!==n._offset.x||n._startOffset.y!==n._offset.y))&&on(r),Dt(n._interaction)&&!n._enoughToDrag()&&n._handleClick(r),n._updateInteraction(r)}),n._handlerOnTouchStart=n._handlerIfEnable(function(r){n._firstMove=!0,n._fingers=r.touches.length,n._detectDoubleTap(r)}),n._handlerOnTouchMove=n._handlerIfEnable(function(r){n._isDoubleTap||(n._collectInertia(r),n._firstMove?(n._updateInteraction(r),n._interaction&&on(r),n._startOffset=Pe({},n._offset),n._startTouches=Bn(r.touches)):(rn(n._interaction)?n._startTouches&&n._startTouches.length===2&&r.touches.length===2&&n._handleZoom(r,Uu(n._startTouches,Bn(r.touches))):Dt(n._interaction)&&n._handleDrag(r),n._interaction&&(on(r),n._update())),n._firstMove=!1)}),n._handlerWheel=function(r){if(!n.props.shouldInterceptWheel(r)){on(r);var o=r.pageX,i=r.pageY,a=r.deltaY,u=r.deltaMode,c=1;(Bu(r)||u===1)&&(c=15);var l={touches:[{pageX:o,pageY:i}]},f=n._getOffsetByFirstTouch(l),d=a*c;n._stopAnimation(),n._scaleTo(n._zoomFactor-d/n.props.wheelScaleFactor,f),n._update(),clearTimeout(n._wheelTimeOut),n._wheelTimeOut=setTimeout(function(){return n._sanitize()},100)}},n._handlers=n.props.isTouch()?[["touchstart",n._handlerOnTouchStart],["touchend",n._handlerOnTouchEnd],["touchmove",n._handlerOnTouchMove]]:[["mousemove",n.simulate(n._handlerOnTouchMove),n.props._document],["mouseup",n.simulate(n._handlerOnTouchEnd),n.props._document],["mousedown",n.simulate(n._handlerOnTouchStart)],["click",n._handleClick],["wheel",n._handlerWheel]],n}return t.prototype._handleDragStart=function(n){this._ignoreNextClick=!0,this.props.onDragStart(),this._stopAnimation(),this._resetInertia(),this._lastDragPosition=null,this._hasInteraction=!0,this._draggingPoint=this._offset,this._handleDrag(n)},t.prototype._handleDrag=function(n){var r=this._getOffsetByFirstTouch(n);this._enoughToDrag()?this._drag(r,this._lastDragPosition):this._virtualDrag(r,this._lastDragPosition),this._offset=this._sanitizeOffset(this._offset),this._lastDragPosition=r},t.prototype._resetInertia=function(){this._velocity=null,this._prevDragMovePoint=null},t.prototype._realizeInertia=function(){var n=this,r=this.props,o=r.inertiaFriction,i=r.inertia;if(!(!i||!this._velocity)){var a=this._velocity,u=a.x,c=a.y;if(u||c){this._stopAnimation(),this._resetInertia();var l=function(){if(u*=o,c*=o,!u&&!c)return n._stopAnimation();var f=Pe({},n._offset);if(n._addOffset({x:u,y:c}),n._offset=n._sanitizeOffset(n._offset),Ju(f,n._offset))return n._stopAnimation();n._update({isAnimation:!0})};this._animate(l,{duration:9999})}}},t.prototype._collectInertia=function(n){var r=n.touches;if(this.props.inertia){var o=Bn(r)[0],i=this._prevDragMovePoint;i&&(this._velocity=Xu(o,i)),this._prevDragMovePoint=o}},t.prototype._handleDragEnd=function(){this.props.onDragEnd(),this._end(),this._realizeInertia()},t.prototype._handleZoomStart=function(){this.props.onZoomStart(),this._stopAnimation(),this._lastScale=1,this._nthZoom=0,this._lastZoomCenter=null,this._hasInteraction=!0},t.prototype._handleZoom=function(n,r){var o=Yu(this._getOffsetTouches(n)),i=r/this._lastScale;this._lastScale=r,this._nthZoom+=1,this._nthZoom>3&&(this._scale(i,o),this._drag(o,this._lastZoomCenter),this.props.enforceBoundsDuringZoom&&(this._offset=this._sanitizeOffset(this._offset))),this._lastZoomCenter=o},t.prototype._handleZoomEnd=function(){this.props.onZoomEnd(),this._end()},t.prototype._handleDoubleTap=function(n){var r=this;if(!(this._hasInteraction||this.props.tapZoomFactor===0)){var o=this.props.doubleTapZoomOutOnMaxScale&&this._zoomFactor===this.props.maxZoom||this.props.doubleTapToggleZoom&&this._zoomFactor>1;this.props.onDoubleTap(),this._ignoreNextClick=!0;var i=this._zoomFactor+this.props.tapZoomFactor,a=this._zoomFactor,u=function(l){r._scaleTo(a+l*(i-a),c)},c=this._getOffsetByFirstTouch(n);this._isDoubleTap=!0,a>i&&(c=this._getCurrentZoomCenter()),o?this._zoomOutAnimation():this._animate(u)}},t.prototype._computeInitialOffset=function(){var n=this._getContainerRect(),r=this._getChildSize(),o=r.width,i=r.height,a=-jn(o*this._getInitialZoomFactor()-n.width)/2,u=-jn(i*this._getInitialZoomFactor()-n.height)/2;this._initialOffset={x:a,y:u}},t.prototype._resetOffset=function(){this._offset=Pe({},this._initialOffset)},t.prototype._setupOffsets=function(){this.props.setOffsetsOnce&&this._isOffsetsSet||(this._isOffsetsSet=!0,this._computeInitialOffset(),this._resetOffset())},t.prototype._sanitizeOffset=function(n){var r=this._getContainerRect(),o=this._getChildSize(),i=o.width,a=o.height,u=i*this._getInitialZoomFactor()*this._zoomFactor,c=a*this._getInitialZoomFactor()*this._zoomFactor,l=bi({containerDimension:r.width,childDimension:u,padding:this.props.horizontalPadding,centerContained:this.props.centerContained}),f=l[0],d=l[1],p=bi({containerDimension:r.height,childDimension:c,padding:this.props.verticalPadding,centerContained:this.props.centerContained}),m=p[0],h=p[1];return{x:Vr(f,d,n.x),y:Vr(m,h,n.y)}},t.prototype.alignCenter=function(n){var r=this,o=Pe({duration:250,animated:!0},n),i=o.x,a=o.y,u=o.scale,c=o.animated,l=o.duration,f=i*this._initialZoomFactor,d=a*this._initialZoomFactor,p=this._zoomFactor,m=Pe({},this._offset),h=this._getContainerRect(),g={x:h.width/2,y:h.height/2};if(this._zoomFactor=1,this._offset={x:-(g.x-f),y:-(g.y-d)},this._scaleTo(u,g),this._stopAnimation(),!c)return this._update();var y=this._zoomFactor-p,T={x:this._offset.x-m.x,y:this._offset.y-m.y};this._zoomFactor=p,this._offset=Pe({},m);var _=function(E){var w=m.x+T.x*E,b=m.y+T.y*E;r._zoomFactor=p+y*E,r._offset=r._sanitizeOffset({x:w,y:b}),r._update()};this._animate(_,{callback:function(){return r._sanitize()},duration:l})},t.prototype.scaleTo=function(n){var r=this,o=Pe({duration:250,animated:!0},n),i=o.x,a=o.y,u=o.scale,c=o.animated,l=o.duration,f=this._zoomFactor,d=Pe({},this._offset);if(this._zoomFactor=1,this._offset={x:0,y:0},this._scaleTo(u,{x:i,y:a}),this._stopAnimation(),!c)return this._update();var p=this._zoomFactor-f,m={x:this._offset.x-d.x,y:this._offset.y-d.y};this._zoomFactor=f,this._offset=Pe({},d);var h=function(g){var y=d.x+m.x*g,T=d.y+m.y*g;r._zoomFactor=f+p*g,r._offset={x:y,y:T},r._update()};this._animate(h,{callback:function(){return r._sanitize()},duration:l})},t.prototype._scaleTo=function(n,r){this._scale(n/this._zoomFactor,r),this._offset=this._sanitizeOffset(this._offset)},t.prototype._scale=function(n,r){n=this._scaleZoomFactor(n),this._addOffset({x:(n-1)*(r.x+this._offset.x),y:(n-1)*(r.y+this._offset.y)}),this.props.onZoomUpdate()},t.prototype._scaleZoomFactor=function(n){var r=this._zoomFactor;return this._zoomFactor*=n,this._zoomFactor=Vr(this.props.minZoom,this.props.maxZoom,this._zoomFactor),this._zoomFactor/r},t.prototype._canDrag=function(){return this.props.draggableUnZoomed||!Wu(this._zoomFactor,1)},t.prototype._drag=function(n,r){if(r){var o=-(n.y-r.y),i=-(n.x-r.x);this.props.lockDragAxis?jn(i)>jn(o)?this._addOffset({x:i,y:0}):this._addOffset({y:o,x:0}):this._addOffset({x:i,y:o}),this.props.onDragUpdate()}},t.prototype._virtualDrag=function(n,r){if(r){var o=-(n.y-r.y),i=-(n.x-r.x);this._draggingPoint={x:i+this._draggingPoint.x,y:o+this._draggingPoint.y}}},t.prototype._addOffset=function(n){var r=this._offset,o=r.x,i=r.y;this._offset={x:o+n.x,y:i+n.y}},t.prototype._sanitize=function(){this._zoomFactor=l?(n(1),o._stopAnimation(),c(),o._update()):(p=u(p),n(p),o._update({isAnimation:!0}),requestAnimationFrame(f))}};this._inAnimation=!0,requestAnimationFrame(f)},t.prototype._stopAnimation=function(){this._inAnimation=!1},t.prototype._end=function(){this._hasInteraction=!1,this._sanitize(),this._update()},t.prototype._getContainerRect=function(){var n=this._containerRef.current;return n.getBoundingClientRect()},t.prototype._getChildSize=function(){var n=this._containerRef.current;return Gu(n==null?void 0:n.firstElementChild)},t.prototype._updateInitialZoomFactor=function(){var n=this._getContainerRect(),r=this._getChildSize(),o=n.width/r.width,i=n.height/r.height;this._initialZoomFactor=Hu(o,i)},t.prototype._bindEvents=function(){var n=this,r=this._containerRef.current;window.ResizeObserver?(this._containerObserver=new ResizeObserver(this._onResize),this._containerObserver.observe(r)):window.addEventListener("resize",this._onResize),this._handlers.forEach(function(o){var i=o[0],a=o[1],u=o[2];(u||r).addEventListener(i,a,!0)}),Array.from(r.querySelectorAll("img")).forEach(function(o){return o.addEventListener("load",n._onResize)})},t.prototype._unSubscribe=function(){var n=this,r=this._containerRef.current;this._containerObserver&&(this._containerObserver.disconnect(),this._containerObserver=null),window.removeEventListener("resize",this._onResize),this._handlers.forEach(function(o){var i=o[0],a=o[1],u=o[2];(u||r).removeEventListener(i,a,!0)}),Array.from(r.querySelectorAll("img")).forEach(function(o){return o.removeEventListener("load",n._onResize)})},t.prototype._update=function(n){var r=this;if(!this._updatePlaned){var o=function(){var i=r._getInitialZoomFactor()*r._zoomFactor,a=-r._offset.x/i,u=-r._offset.y/i;r.props.onUpdate({scale:i,x:a,y:u})};if(n!=null&&n.isAnimation)return o();this._updatePlaned=!0,requestAnimationFrame(function(){r._updatePlaned=!1,o()})}},t.prototype._handlerIfEnable=function(n){var r=this;return function(){for(var o=[],i=0;ir?n-r:r-n},t.prototype._enoughToDrag=function(){return this._distanceBetweenNumbers(this._startOffset.x,this._draggingPoint.x)>5||this._distanceBetweenNumbers(this._startOffset.y,this._draggingPoint.y)>5},t.prototype._updateInteraction=function(n){var r=this._fingers;if(r===2)return this._setInteraction("zoom",n);if(r===1&&this._canDrag())return this._setInteraction("drag",n);this._setInteraction(null,n)},t.prototype._detectDoubleTap=function(n){var r=new Date().getTime();this._fingers>1&&(this._lastTouchStart=0),r-this._lastTouchStart<300?(on(n),this._handleDoubleTap(n),rn(this._interaction)?this._handleZoomEnd():Dt(this._interaction)&&this._handleDragEnd()):this._isDoubleTap=!1,this._fingers===1&&(this._lastTouchStart=r)},t.prototype.simulate=function(n){var r=this;return function(o){var i=o.pageX,a=o.pageY,u=o.type,c=u==="mouseup",l=u==="mousedown";l&&(o.preventDefault(),r._listenMouseMove=!0),r._listenMouseMove&&(o.touches=c?[]:[{pageX:i,pageY:a}],n(o)),c&&(r._listenMouseMove=!1)}},t.prototype.componentDidMount=function(){this._bindEvents(),this._update()},t.prototype.componentWillUnmount=function(){this._stopAnimation(),this._unSubscribe()},t.prototype.render=function(){var n=this.props,r=n.children,o=n.containerProps,i=xa.only(r),a=o||{};return Dn.createElement(Dn.Fragment,null,Dn.createElement("style",null,Ou),Dn.createElement("div",Pe({},a,{ref:this._containerRef,className:wi(Hs,a.className)}),Ri(i,{className:wi(Vs,i.props.className)})))},t.defaultProps={animationDuration:250,draggableUnZoomed:!0,enforceBoundsDuringZoom:!1,centerContained:!1,enabled:!0,inertia:!0,inertiaFriction:.96,horizontalPadding:0,isTouch:Ru,lockDragAxis:!1,maxZoom:5,minZoom:.5,onDoubleTap:Tt,onDragEnd:Tt,onDragStart:Tt,onDragUpdate:Tt,onZoomEnd:Tt,onZoomStart:Tt,onZoomUpdate:Tt,setOffsetsOnce:!1,shouldInterceptWheel:qu,shouldCancelHandledTouchEndEvents:!1,tapZoomFactor:1,verticalPadding:0,wheelScaleFactor:1500,zoomOutFactor:1.3,doubleTapZoomOutOnMaxScale:!1,doubleTapToggleZoom:!1,_document:js?null:window.document},t}(Fi);if(0)var Pf,Of,Df,Rf,Nf,Ff,zf;function jr(e){if(!e)return;let t=Math.floor(e/3600),n=Math.floor(e%3600/60),r=Math.round(e%60);return t===0?`${n}:${r.toString().padStart(2,"0")}`:`${t}:${n.toString().padStart(2,"0")}:${r.toString().padStart(2,"0")}`}const Qu=/^((?!chrome|android).)*safari/i.test(navigator.userAgent),ed="ALT",Br=e=>{const{alt:t,lang:n,index:r,...o}=e;return!t||!t.trim()?null:s("button",{type:"button",class:"alt-badge clickable",...o,onClick:i=>{i.stopPropagation(),i.preventDefault(),W.showMediaAlt={alt:t,lang:n}},title:"Media description",children:[ed,!!r&&s("sup",{children:r})]})},td=140,nd=280,Bs=st(e=>e!=null&&e.length?e.length>td||/[\n\r].*[\n\r]/.test(e.trim()):!1);function rd({class:e="",media:t,to:n,lang:r,showOriginal:o,autoAnimate:i,showCaption:a,allowLongerCaption:u,altIndex:c,onClick:l=()=>{}}){let{blurhash:f,description:d,meta:p,previewRemoteUrl:m,previewUrl:h,remoteUrl:g,url:y,type:T}=t;/no\-preview\./i.test(h)&&(h=null);const{original:_={},small:E,focus:w}=p||{},b=o?_==null?void 0:_.width:(E==null?void 0:E.width)||(_==null?void 0:_.width),M=o?_==null?void 0:_.height:(E==null?void 0:E.height)||(_==null?void 0:_.height),A=o?y:h||y,O=o?g:m||g,P=b&&M,x=P?b>M?"landscape":"portrait":null,S=f?xo(f):null,V=j();let B;if(w){const Y=(w.x+1)/2*100,ge=(1-w.y)/2*100;B=`${Y.toFixed(0)}% ${ge.toFixed(0)}%`}const D=j(),$=Ie(({x:Y,y:ge,scale:ee})=>{const{current:J}=D;if(J){const pe=Nu({x:Y,y:ge,scale:ee});ee===1?J.style.removeProperty("transform"):J.style.setProperty("transform",pe),J.closest(".media-zoom").style.touchAction=ee<=1.01?"pan-x":""}},[]),[k,R]=te(!1),L={enabled:k,draggableUnZoomed:!1,inertiaFriction:.9,tapZoomFactor:2,doubleTapToggleZoom:!0,containerProps:{className:"media-zoom",style:{overflow:"visible"}},onUpdate:$},z=fe(()=>n?Y=>s(jt,{to:n,...Y}):"div",[n]),N=O?od(O):null,C=T==="unknown"&&N&&/\.(mp4|m4r|m4v|mov|webm)$/i.test(N.pathname),K=T==="unknown"&&N&&/\.(mp3|ogg|wav|m4a|m4p|m4b)$/i.test(N.pathname),Z=T==="image"||T==="unknown"&&h&&!C&&!K,ne=j(),[le,Te]=te(!1);pn(()=>{if(!Z||!o||!ne.current)return;const{offsetWidth:Y,offsetHeight:ge}=ne.current,ee=b{const{children:ge,...ee}=Y;return s("figure",{...ee,children:[ge,s("figcaption",{class:"media-caption",lang:r,dir:"auto",onClick:J=>{J.preventDefault(),J.stopPropagation(),W.showMediaAlt={alt:d,lang:r}},children:d})]})}:U,[Ee,ct]=te(void 0);if(Z)return L.containerProps.style.display="inherit",pn(()=>{Qu&&o&&(async()=>{try{await fetch(A,{mode:"no-cors"}),D.current.src=A}catch{}})()},[A]),s(oe,{children:s(z,{ref:ne,class:`media media-image ${e}`,onClick:l,"data-orientation":x,"data-has-alt":!q||void 0,"data-has-natural-aspect-ratio":Ee||void 0,style:o?{backgroundImage:`url(${h})`,backgroundSize:le?`${b}px ${M}px`:void 0,...ye}:ie,children:o?s(xi,{...L,children:s("img",{ref:D,src:A,alt:d,width:b,height:M,"data-orientation":x,loading:"eager",decoding:"sync",onLoad:Y=>{Y.target.closest(".media-image").style.backgroundImage="",Y.target.closest(".media-zoom").style.display="",R(!0)},onError:Y=>{const{src:ge}=Y.target;ge===A&&O&&A!==O&&(Y.target.src=O)}})}):s(U,{children:[s("img",{src:A,alt:q?"":d,width:b,height:M,"data-orientation":x,loading:"lazy",style:{objectPosition:B||"center","--anim-duration":`${Math.min(Math.max(Math.max(b,M)/100,5),120)}s`},onLoad:Y=>{Y.target.dataset.loaded=!0;const ge=Y.target.closest(".media");if(!P&&ge){const{naturalWidth:ee,naturalHeight:J}=Y.target;ge.dataset.orientation=ee>J?"landscape":"portrait",ge.style.setProperty("--width",`${ee}px`),ge.style.setProperty("--height",`${J}px`),ge.style.aspectRatio=`${ee}/${J}`}if(ge){const{clientWidth:ee,clientHeight:J,naturalWidth:pe,naturalHeight:ue}=Y.target;if(ee&&J&&pe&&ue)if(pe<88||ue<88)ge.dataset.hasSmallDimension=!0;else{const ze=ue*ee/pe;Math.abs(ze-J)<5&&ct(!0)}}},onError:Y=>{const{src:ge}=Y.target;ge===A&&A!==O&&(Y.target.src=O)}}),!q&&s(Br,{alt:d,lang:r,index:c})]})})});if(T==="gifv"||T==="video"||C){const Y=_.duration>0,ge=_.duration<31,ee=T==="gifv"&&ge,J=_.duration<61,pe=jr(_.duration),ue=!o&&!i&&ee,ae=!o&&i&&ee,ze=_.duration>5,Le=` - - `,Ve=` - - `;return s(oe,{children:s(z,{class:`media ${e} media-${ee?"gif":"video"} ${ae?"media-contain":""} ${ue?"media-hover-animate":""}`,"data-orientation":x,"data-formatted-duration":o?void 0:pe,"data-label":ee&&!o&&!ae?"GIF":void 0,"data-has-alt":!q||void 0,style:!o&&ie,onClick:Se=>{if(ue)try{V.current.pause()}catch{}l(Se)},onMouseEnter:()=>{if(ue)try{V.current.play()}catch{}},onMouseLeave:()=>{if(ue)try{V.current.pause()}catch{}},onFocus:()=>{if(ue)try{V.current.play()}catch{}},onBlur:()=>{if(ue)try{V.current.pause()}catch{}},children:[o||ae?ee&&o?s(xi,{...L,enabled:!0,children:s("div",{ref:D,dangerouslySetInnerHTML:{__html:Le}})}):ee?s("div",{class:"video-container",dangerouslySetInnerHTML:{__html:Le}}):s("div",{class:"video-container",dangerouslySetInnerHTML:{__html:Ve}}):ee?s("video",{ref:V,src:y,poster:h,width:b,height:M,"data-orientation":x,preload:"auto",playsinline:!0,loop:!0,muted:!0,onTimeUpdate:ze?Se=>{const{target:Ae}=Se,Re=Ae==null?void 0:Ae.closest(".media-gif");if(Re){const _e=Ae.currentTime/Ae.duration*100;Re.style.setProperty("--progress",`${_e}%`)}}:void 0}):s(U,{children:[h?s("img",{src:h,alt:q?"":d,width:b,height:M,"data-orientation":x,loading:"lazy",decoding:"async",onLoad:Se=>{if(!P){const Ae=Se.target.closest(".media");if(Ae){const{naturalHeight:Re,naturalWidth:_e}=Se.target;Ae.dataset.orientation=_e>Re?"landscape":"portrait",Ae.style.setProperty("--width",`${_e}px`),Ae.style.setProperty("--height",`${Re}px`),Ae.style.aspectRatio=`${_e}/${Re}`}}}}):s("video",{src:y+"#t=0.1",width:b,height:M,"data-orientation":x,preload:"metadata",muted:!0,disablePictureInPicture:!0,onLoadedMetadata:Se=>{if(!Y){const{duration:Ae}=Se.target;if(Ae){const Re=jr(Ae),_e=Se.target.closest(".media-video");_e&&(_e.dataset.formattedDuration=Re)}}}}),s("div",{class:"media-play",children:s(H,{icon:"play",size:"xl"})})]}),!o&&!q&&s(Br,{alt:d,lang:r,index:c})]})})}else if(T==="audio"||K){const Y=jr(_.duration);return s(oe,{children:s(z,{class:`media media-audio ${e}`,"data-formatted-duration":o?void 0:Y,"data-has-alt":!q||void 0,onClick:l,style:!o&&ie,children:[o?s("audio",{src:g||y,preload:"none",controls:!0,autoPlay:!0}):h?s("img",{src:h,alt:q?"":d,width:b,height:M,"data-orientation":x,loading:"lazy",onError:ge=>{var ee,J;try{(J=(ee=ge.target)==null?void 0:ee.remove)==null||J.call(ee)}catch{}}}):null,!o&&s(U,{children:[s("div",{class:"media-play",children:s(H,{icon:"play",size:"xl"})}),!q&&s(Br,{alt:d,lang:r,index:c})]})]})})}}function od(e){return URL.parse(e,location.origin)}const oo=it(rd,(e,t)=>{const n=e.media||{},r=t.media||{};return(n==null?void 0:n.id)===(r==null?void 0:r.id)&&n.url===r.url&&e.to===t.to&&e.class===t.class}),id=280,sd=140,ad=zi({limit:1,interval:1e3});function cd(e,t){return t.v1.accounts.$select(e).fetch()}const ld=fo(ad(cd)),dn={public:"Public",unlisted:"Unlisted",private:"Followers only",direct:"Private mention"},ud=window.ontouchstart!==void 0&&/iPad|iPhone|iPod/.test(navigator.userAgent),dd=new Intl.RelativeTimeFormat,Mi=80;function fd(e){var t;return(t=e==null?void 0:e.options)!=null&&t.length?`📊: -${e.options.map(n=>`- ${n.title}${n.votesCount>=0?` (${n.votesCount})`:""}`).join(` -`)}`:""}function Ur(e){const{spoilerText:t,content:n,poll:r}=e;return(t?`${t} - -`:"")+cr(n)+fd(r)}const Si=it(({post:e,instance:t,previewMode:n})=>{const{content:r,emojis:o,language:i,mentions:a,url:u}=e;return s("div",{lang:i,dir:"auto",class:"inner-content",onClick:$l({mentions:a,instance:t,previewMode:n,statusURL:u}),dangerouslySetInnerHTML:{__html:ws(r,{emojis:o,postEnhanceDOM:c=>{c.querySelectorAll('a.u-url[target="_blank"]').forEach(l=>{/http/i.test(l.innerText.trim())||l.removeAttribute("target")})}})}})},(e,t)=>{const{post:n}=e,{post:r}=t;return n.content===r.content}),hd={s:"small",m:"medium",l:"large"},pd=st(e=>{if(e=e==null?void 0:e.trim(),(e==null?void 0:e.length)>500)return null;const n=Aa(e)[0];return n!=null&&n.lang&&(n==null?void 0:n.accuracy)>.5?n.lang:null});function Ut({statusID:e,status:t,instance:n,size:r="m",contentTextWeight:o,readOnly:i,enableCommentHint:a,withinContext:u,skeleton:c,enableTranslate:l,forceTranslate:f,previewMode:d,onMediaClick:p,quoted:m,onStatusLinkClick:h=()=>{},showFollowedTags:g,allowContextMenu:y,showActionsBar:T,showReplyParent:_,mediaFirst:E}){var Uo,Wo,Ko;if(c)return s("div",{class:`status skeleton ${E?"status-media-first small":""}`,children:[!E&&s(nt,{size:"xxl"}),s("div",{class:"container",children:[s("div",{class:"meta",children:[(r==="s"||E)&&s(nt,{size:"m"})," ███ ████████"]}),s("div",{class:"content-container",children:[E&&s("div",{class:"media-first-container"}),s("div",{class:`content ${E?"media-first-content":""}`,children:s("p",{children:"████ ████████"})})]})]})]});const{masto:w,instance:b,authenticated:M}=Xn({instance:n}),{instance:A}=Xn(),O=b===A;let P=tt(e||(t==null?void 0:t.id),b);const x=wn(W);if(t||(t=x.statuses[P]||x.statuses[e],P=tt(t==null?void 0:t.id,b)),!t)return null;const{account:{acct:S,avatar:V,avatarStatic:B,id:D,url:$,displayName:k,username:R,emojis:L,bot:z,group:N},id:C,repliesCount:K,reblogged:Z,reblogsCount:ne,favourited:le,favouritesCount:Te,bookmarked:he,poll:ve,muted:ye,sensitive:ie,spoilerText:de,visibility:q,language:oe,editedAt:Ee,filtered:ct,card:Y,createdAt:ge,inReplyToId:ee,inReplyToAccountId:J,content:pe,mentions:ue,mediaAttachments:ae,reblog:ze,uri:Le,url:Ve,emojis:Se,tags:Ae,pinned:Re,_deleted:_e,_pinned:Zt,emojiReactions:It}=t,[$t,Yt]=te(null);se(()=>{if(!pe||oe)return;let v;return v=setTimeout(()=>{let F=pd(cr(pe,{preProcess:Q=>{Q.querySelectorAll(".mention, .hashtag, pre, code, a:has(.invisible)").forEach(ce=>{ce.remove()}),Q.querySelectorAll("a").forEach(ce=>{const Ce=ce.innerText.trim();(Ce.startsWith("https://")||Ce.startsWith("http://"))&&ce.remove()})}}));Yt(F)},1e3),()=>clearTimeout(v)},[pe,oe]);const we=oe||$t,qt=!!(ae!=null&&ae.length);E&&qt&&(r="s");const lt=fe(()=>ho(),[]),Qe=fe(()=>lt&<===D,[D,lt]),hr=De(Fs),ut=!Qe&&!i&&!d&&Mo(ct,hr);if((ut==null?void 0:ut.action)==="hide")return null;const re=v=>{v.shiftKey};if(r!=="l"&&ut)return s(Td,{status:t,filterInfo:ut,instance:b,containerProps:{onMouseEnter:re},showFollowedTags:!0,quoted:m});const be=new Date(ge),He=new Date(Ee);let Ne=ue==null?void 0:ue.find(v=>v.id===J);!Ne&&J===C&&(Ne={url:$,username:R,displayName:k});const[xe,vt]=te(Ne);if(!u&&!xe&&J){const v=W.accounts[J];v?vt(v):ld(J,w).then(F=>{vt(F),W.accounts[F.id]=F}).catch(F=>{})}const En=J===lt||(ue==null?void 0:ue.find(v=>v.id===lt)),je=fe(()=>!!(Zo.account.get("preferences")||{})["reading:expand:spoilers"],[]),xn=fe(()=>(Zo.account.get("preferences")||{})["reading:expand:media"]||"default",[]),Ke=d||je||!!x.spoilers[C],dt=d||xn==="show_all"||!!x.spoilersMedia[C];if(ze)return N?s("div",{"data-state-post-id":P,class:"status-group",onMouseEnter:re,children:[s("div",{class:"status-pre-meta",children:[s(H,{icon:"group",size:"l",alt:"Group"})," ",s(an,{account:t.account,instance:b,showAvatar:!0})]}),s(Ut,{status:e?null:ze,statusID:e?ze.id:null,instance:b,size:r,contentTextWeight:o,readOnly:i,mediaFirst:E})]}):s("div",{"data-state-post-id":P,class:"status-reblog",onMouseEnter:re,children:[s("div",{class:"status-pre-meta",children:[s(H,{icon:"rocket",size:"l"})," ",s(an,{account:t.account,instance:b,showAvatar:!0})," ",s("span",{children:"boosted"})]}),s(Ut,{status:e?null:ze,statusID:e?ze.id:null,instance:b,size:r,contentTextWeight:o,readOnly:i,enableCommentHint:!0,mediaFirst:E})]});const pr=Ie(({children:v})=>s("div",{"data-state-post-id":P,class:"status-followed-tags",onMouseEnter:re,children:[s("div",{class:"status-pre-meta",children:[s(H,{icon:"hashtag",size:"l"})," ",x.statusFollowedTags[P].slice(0,3).map(F=>s(jt,{to:b?`/${b}/t/${F}`:`/t/${F}`,class:"status-followed-tag-item",children:F},F))]}),v]}),[P,b,x.statusFollowedTags[P]]),mr=g&&((Uo=x.statusFollowedTags[P])!=null&&Uo.length)?pr:U,me=r==="l",[yt,Gt]=te(f),_t=us(!0),ta=x.settings.contentTranslationHideLanguages||[],{contentTranslation:gr,contentTranslationAutoInline:ko}=x.settings;gr||(l=!1);const Ao=fe(()=>{if(!gr||!ko||i||u&&!me||d||de||ie||ve||Y||ae!=null&&ae.length)return!1;const v=Hr(pe);return v>0&&v<=sd},[gr,ko,i,u,me,d,de,ie,ve,Y,ae,pe]),[vr,Mn]=te(!1),[na,yr]=te(!1),Io=qn(),$o=qn(),ra=qn(),_r="Read more →",Lt=j(null),Xt="Sorry, your current logged-in instance can't interact with this post from another instance.",Lo=Ie(()=>Math.max(Math.round((de.length+Hr(pe))/140)||1,1),[de,pe]),Co=yn(be),Po=Ee&&yn(He);let Jt=M&&q!=="direct"&&q!=="private";q==="private"&&Qe&&(Jt=!0);const Sn=v=>{var F;if(!O||!M)return alert(Xt);(v!=null&&v.shiftKey||(F=v==null?void 0:v.syntheticEvent)!=null&&F.shiftKey)&&Ka({replyToStatus:t})||zn({replyToStatus:t})},br=fe(()=>ae.some(v=>{var F,Q;return!((Q=(F=v.description)==null?void 0:F.trim)!=null&&Q.call(F))}),[ae]),Oo=fe(()=>Math.floor((new Date-be)/(1e3*60*60*24*30)),[be]),df=async()=>{if(!O||!M)return alert(Xt),!1;try{if(!Z){let v="Boost this post?";if(br&&(v+=` - -⚠️ Some media have no descriptions.`),!confirm(v))return!1}if(W.statuses[P]={...t,reblogged:!Z,reblogsCount:ne+(Z?-1:1)},Z){const v=await w.v1.statuses.$select(C).unreblog();return Ze(v,b),!0}else{const v=await w.v1.statuses.$select(C).reblog();return Ze(v,b),!0}}catch{return W.statuses[P]=t,!1}},wr=async()=>{if(!O||!M)return alert(Xt),!1;try{if(W.statuses[P]={...t,reblogged:!Z,reblogsCount:ne+(Z?-1:1)},Z){const v=await w.v1.statuses.$select(C).unreblog();Ze(v,b)}else{const v=await w.v1.statuses.$select(C).reblog();Ze(v,b)}return!0}catch{return W.statuses[P]=t,!1}},Do=async()=>{if(!O||!M)return alert(Xt),!1;try{if(W.statuses[P]={...t,favourited:!le,favouritesCount:Te+(le?-1:1)},le){const v=await w.v1.statuses.$select(C).unfavourite();Ze(v,b)}else{const v=await w.v1.statuses.$select(C).favourite();Ze(v,b)}return!0}catch{return W.statuses[P]=t,!1}},Tr=async()=>{try{const v=await Do();!me&&v&&$e(le?`Unliked @${R||S}'s post`:`Liked @${R||S}'s post`)}catch{}},Ro=async()=>{if(Fn("@mastodon/post-bookmark")){if(!O||!M)return alert(Xt),!1;try{if(W.statuses[P]={...t,bookmarked:!he},he){const v=await w.v1.statuses.$select(C).unbookmark();Ze(v,b)}else{const v=await w.v1.statuses.$select(C).bookmark();Ze(v,b)}return!0}catch{return W.statuses[P]=t,!1}}},No=async()=>{try{const v=await Ro();!me&&v&&$e(he?`Unbookmarked @${R||S}'s post`:`Bookmarked @${R||S}'s post`)}catch{}},kn=!!we&&we!==_t&&!to([we],[_t])&&!ta.find(v=>we===v||to([we],[v])),Fo=j(),zo=j();async function oa(v){var ce,Ce,Ct,Er;v&&(Fo.current=w.v1.statuses.$select(e).rebloggedBy.list({limit:Mi}),zo.current=w.v1.statuses.$select(e).favouritedBy.list({limit:Mi}));const[{value:F},{value:Q}]=await Promise.allSettled([Fo.current.next(),zo.current.next()]);if((ce=F.value)!=null&&ce.length||(Ce=Q.value)!=null&&Ce.length){const bt=[];return(Ct=F.value)!=null&&Ct.length&&bt.push(...F.value.map(wt=>(wt._types=["reblog"],wt))),(Er=Q.value)!=null&&Er.length&&bt.push(...Q.value.map(wt=>(wt._types=["favourite"],wt))),{value:bt,done:F.done&&Q.done}}return{value:[],done:!0}}const ia=j(),Ho=["public","unlisted"].includes(q),sa=["public","unlisted","private"].includes(q),Vo=s(U,{children:[!me&&O&&s(U,{children:s("div",{class:"menu-control-group-horizontal status-menu",children:[s(ke,{onClick:Sn,children:[s(H,{icon:"comment"}),s("span",{children:K>0?mt(K):"Reply"})]}),s(Ar,{subMenu:!0,confirmLabel:s(U,{children:[s(H,{icon:"rocket"}),s("span",{children:Z?"Unboost":"Boost"})]}),className:`menu-reblog ${Z?"checked":""}`,menuExtras:s(ke,{onClick:()=>{zn({draftStatus:{status:` -${Ve}`}})},children:[s(H,{icon:"quote"}),s("span",{children:"Quote"})]}),menuFooter:br&&!Z?s("div",{class:"footer",children:[s(H,{icon:"alert"}),"Some media have no descriptions."]}):Oo>=3&&s("div",{class:"footer",children:[s(H,{icon:"info"}),s("span",{children:["Old post (",s("strong",{children:dd.format(-Oo,"month")}),")"]})]}),disabled:!Jt,onClick:async()=>{try{const v=await wr();!me&&v&&$e(Z?`Unboosted @${R||S}'s post`:`Boosted @${R||S}'s post`)}catch{}},children:[s(H,{icon:"rocket"}),s("span",{children:ne>0?mt(ne):Z?"Unboost":"Boost…"})]}),s(ke,{onClick:Tr,className:`menu-favourite ${le?"checked":""}`,children:[s(H,{icon:"heart"}),s("span",{children:Te>0?mt(Te):le?"Unlike":"Like"})]}),Fn("@mastodon/post-bookmark")&&s(ke,{onClick:No,className:`menu-bookmark ${he?"checked":""}`,children:[s(H,{icon:"bookmark"}),s("span",{children:he?"Unbookmark":"Bookmark"})]})]})}),!me&&O&&(me||T)&&s(tn,{}),(me||T)&&s(U,{children:s(ke,{onClick:()=>{W.showGenericAccounts={heading:"Boosted/Liked by…",fetchAccounts:oa,instance:b,showReactions:!0,postID:P}},children:[s(H,{icon:"react"}),s("span",{children:["Boosted/Liked by",s("span",{class:"more-insignificant",children:"…"})]})]})}),!E&&s(U,{children:[(l||!we||kn)&&s(tn,{}),l?s("div",{class:un?"menu-horizontal":"",children:[s(ke,{disabled:yt,onClick:()=>{Gt(!0)},children:[s(H,{icon:"translate"}),s("span",{children:"Translate"})]}),un&&s(ke,{onClick:()=>{const v=Ur(t);v&&yi(v,we)},children:[s(H,{icon:"speak"}),s("span",{children:"Speak"})]})]}):(!we||kn)&&s("div",{class:un?"menu-horizontal":"",children:[s(li,{to:`${b?`/${b}`:""}/s/${C}?translate=1`,children:[s(H,{icon:"translate"}),s("span",{children:"Translate"})]}),un&&s(ke,{onClick:()=>{const v=Ur(t);v&&yi(v,we)},children:[s(H,{icon:"speak"}),s("span",{children:"Speak"})]})]})]}),(!me&&O||l||!we||kn)&&s(tn,{}),!me&&s(U,{children:s(li,{to:b?`/${b}/s/${C}`:`/s/${C}`,onClick:v=>{h(v,t)},children:[s(H,{icon:"arrows-right"}),s("small",{children:["View post by @",R||S,s("br",{}),s("span",{class:"more-insignificant",children:[dn[q]," • ",Co]})]})]})}),!!Ee&&s(U,{children:s(ke,{onClick:()=>{Mn(C)},children:[s(H,{icon:"history"}),s("small",{children:["Show Edit History",s("br",{}),s("span",{class:"more-insignificant",children:["Edited: ",Po]})]})]})}),s(ke,{href:Ve,target:"_blank",children:[s(H,{icon:"external"}),s("small",{class:"menu-double-lines",children:bd(Ve)})]}),s("div",{class:"menu-horizontal",children:[s(ke,{onClick:()=>{try{navigator.clipboard.writeText(Ve),$e("Link copied")}catch{$e("Unable to copy link")}},children:[s(H,{icon:"link"}),s("span",{children:"Copy"})]}),Ho&&(navigator==null?void 0:navigator.share)&&((Wo=navigator==null?void 0:navigator.canShare)==null?void 0:Wo.call(navigator,{url:Ve}))&&s(ke,{onClick:()=>{try{navigator.share({url:Ve})}catch{alert("Sharing doesn't seem to work.")}},children:[s(H,{icon:"share"}),s("span",{children:"Share…"})]})]}),Ho&&me&&s(ke,{onClick:()=>{yr(!0)},children:[s(H,{icon:"code"}),s("span",{children:"Embed post"})]}),(Qe||En)&&s(tn,{}),(Qe||En)&&s(ke,{onClick:async()=>{try{const v=await w.v1.statuses.$select(C)[ye?"unmute":"mute"]();Ze(v,b),$e(ye?"Conversation unmuted":"Conversation muted")}catch{$e(ye?"Unable to unmute conversation":"Unable to mute conversation")}},children:ye?s(U,{children:[s(H,{icon:"unmute"}),s("span",{children:"Unmute conversation"})]}):s(U,{children:[s(H,{icon:"mute"}),s("span",{children:"Mute conversation"})]})}),Qe&&sa&&s(ke,{onClick:async()=>{try{const v=await w.v1.statuses.$select(C)[Re?"unpin":"pin"]();Ze(v,b),$e(Re?"Post unpinned from profile":"Post pinned to profile")}catch{$e(Re?"Unable to unpin post":"Unable to pin post")}},children:Re?s(U,{children:[s(H,{icon:"unpin"}),s("span",{children:"Unpin from profile"})]}):s(U,{children:[s(H,{icon:"pin"}),s("span",{children:"Pin to profile"})]})}),Qe&&s("div",{class:"menu-horizontal",children:[Fn("@mastodon/post-edit")&&s(ke,{onClick:()=>{zn({editStatus:t})},children:[s(H,{icon:"pencil"}),s("span",{children:"Edit"})]}),me&&s(Ar,{subMenu:!0,confirmLabel:s(U,{children:[s(H,{icon:"trash"}),s("span",{children:"Delete this post?"})]}),menuItemClassName:"danger",onClick:()=>{(async()=>{try{await w.v1.statuses.$select(C).remove();const v=Vi(C,b);v._deleted=!0,$e("Deleted")}catch{$e("Unable to delete")}})()},children:[s(H,{icon:"trash"}),s("span",{children:"Delete…"})]})]}),!Qe&&me&&s(U,{children:[s(tn,{}),s(ke,{className:"danger",onClick:()=>{W.showReportModal={account:t.account,post:t}},children:[s(H,{icon:"flag"}),s("span",{children:"Report post…"})]})]})]}),jo=j(),[An,Qt]=te(!1),[In,$n]=te({}),Ln=y||!me&&!d&&!_e&&!m,aa=Ns(ud&&Ln?v=>{var Ce;if(v.pointerType==="mouse")return;const{clientX:F,clientY:Q}=((Ce=v.touches)==null?void 0:Ce[0])||v,ce=v.target.closest("a");ce&&Lt.current.contains(ce)&&!ce.getAttribute("href").startsWith("#")||(v.preventDefault(),$n({anchorPoint:{x:F,y:Q},direction:"right"}),Qt(!0))}:null,{threshold:600,captureEvent:!0,detect:"touch",cancelOnMovement:2}),Cn=!i&&!d&&!m,ca=Nt("r, shift+r",Sn,{enabled:Cn}),la=Nt("f, l",Tr,{enabled:Cn}),ua=Nt("d",No,{enabled:Cn}),da=Nt("shift+b",()=>{(async()=>{try{const v=await wr();!me&&v&&$e(Z?`Unboosted @${R||S}'s post`:`Boosted @${R||S}'s post`)}catch{}})()},{enabled:Cn&&Jt}),fa=Nt("x",v=>{const F=document.activeElement.closest(".status-link, .status-focus");if(F){const Q=F.querySelector(".spoiler-button:not(.spoiling)");if(Q)v.stopPropagation(),Q.click();else{const ce=F.querySelector(".spoiler-media-button:not(.spoiling)");ce&&(v.stopPropagation(),ce.click())}}}),Pn=ae.slice(0,me?void 0:4),On=ae.length>1&&Pn.some(v=>!!v.description&&!Bs(v.description)),ha=fe(()=>{if(!On)return null;const v=[];return Pn.forEach((F,Q)=>{if(!F.description)return;const ce=v.findIndex(Ce=>Ce.media.description===F.description);ce===-1?v.push({media:F,indices:[Q]}):v[ce].indices.push(Q)}),v.map(({media:F,indices:Q})=>s("div",{"data-caption-index":Q.map(ce=>ce+1).join(" "),onClick:ce=>{ce.preventDefault(),ce.stopPropagation(),W.showMediaAlt={alt:F.description,lang:we}},title:F.description,children:[s("sup",{children:Q.map(ce=>ce+1).join(" ")})," ",F.description]},F.id))},[On,Pn,we]),en=fe(()=>{var v;return!!ee&&J===((v=t.account)==null?void 0:v.id)||!!x.statusThreadNumber[P]},[ee,J,(Ko=t.account)==null?void 0:Ko.id,x.statusThreadNumber[P]]),pa=fe(()=>a&&!en&&!u&&!ee&&q==="public"&&K>0,[a,en,u,ee,K,q]),Bo=fe(()=>{if(Y||ve||ie||de||ae!=null&&ae.length||en||u||ee||K<=0||!/[???︖❓❔⁇⁈⁉¿‽؟]/.test(pe))return!1;const Q=Hr(pe);if(Q>0&&Q<=id)return!0},[Y,ve,ie,de,ae,ze,en,u,ee,K,pe]);return s(mr,{children:[_&&!!(ee&&J)&&s(wd,{sKey:P}),s("article",{"data-state-post-id":P,ref:v=>{var Q;Lt.current=v;const F=((Q=v==null?void 0:v.closest)==null?void 0:Q.call(v,".timeline-item, .timeline-item-alt, .status-link, .status-focus"))||v;ca.current=F,la.current=F,ua.current=F,da.current=F,fa.current=F},tabindex:"-1",class:`status ${!u&&ee&&xe?"status-reply-to":""} visibility-${q} ${Zt?"status-pinned":""} ${hd[r]} ${_e?"status-deleted":""} ${m?"status-card":""} ${An?"status-menu-open":""} ${E&&qt?"status-media-first":""}`,onMouseEnter:re,onContextMenu:v=>{var ce,Ce;if(!Ln||v.metaKey)return;const F=v.target.closest("a");if(F&&Lt.current.contains(F)&&!F.getAttribute("href").startsWith("#"))return;const Q=(ce=window.getSelection)==null?void 0:ce.call(window);if(Q.toString().length>0){const{anchorNode:Ct}=Q;if((Ce=Lt.current)!=null&&Ce.contains(Ct))return}v.preventDefault(),$n({anchorPoint:{x:v.clientX,y:v.clientY},direction:"right"}),Qt(!0)},...Ln?aa():{},children:[Ln&&s(Qi,{ref:jo,state:An?"open":void 0,...In,onClose:v=>{var F,Q,ce;Qt(!1),(v==null?void 0:v.reason)==="click"&&((ce=(Q=(F=Lt.current)==null?void 0:F.closest("[tabindex]"))==null?void 0:Q.focus)==null||ce.call(Q))},portal:{target:document.body},containerProps:{style:{zIndex:1001},onClick:()=>{var v,F;(F=(v=jo.current)==null?void 0:v.closeMenu)==null||F.call(v)}},overflow:"auto",boundingBoxPadding:cs(),unmountOnClose:!0,children:Vo}),T&&r!=="l"&&!d&&!i&&!_e&&!m&&s("div",{class:`status-actions ${An==="actions-bar"?"open":""}`,ref:ia,children:[s(Rt,{size:"s",title:"Reply",alt:"Reply",class:"reply-button",icon:"comment",iconSize:"m",onClick:Sn}),s(Rt,{size:"s",checked:le,title:["Like","Unlike"],alt:["Like","Liked"],class:"favourite-button",icon:"heart",iconSize:"m",count:Te,onClick:Tr}),s("button",{type:"button",title:"More",class:"plain more-button",onClick:v=>{v.preventDefault(),v.stopPropagation(),$n({anchorRef:{current:v.currentTarget},align:"start",direction:"left",gap:0,shift:-8}),Qt("actions-bar")},children:s(H,{icon:"more2",size:"m",alt:"More"})})]}),r!=="l"&&s("div",{class:"status-badge",children:[Z&&s(H,{class:"reblog",icon:"rocket",size:"s"}),le&&s(H,{class:"favourite",icon:"heart",size:"s"}),he&&s(H,{class:"bookmark",icon:"bookmark",size:"s"}),Zt&&s(H,{class:"pin",icon:"pin",size:"s"})]}),r!=="s"&&s("a",{href:$,tabindex:"-1",title:`@${S}`,onClick:v=>{v.preventDefault(),v.stopPropagation(),W.showAccount={account:t.account,instance:b}},children:s(nt,{url:B||V,size:"xxl",squircle:z})}),s("div",{class:"container",children:[s("div",{class:"meta",children:[s("span",{class:"meta-name",children:s(an,{account:t.account,instance:b,showAvatar:r==="s",showAcct:me})})," ",r!=="l"&&(_e?s("span",{class:"status-deleted-tag",children:"Deleted"}):Ve&&!d&&!i&&!m?s(jt,{to:b?`/${b}/s/${C}`:`/s/${C}`,onClick:v=>{v.metaKey||v.ctrlKey||v.shiftKey||v.altKey||v.which===2||(v.preventDefault(),v.stopPropagation(),h==null||h(v,t),$n({anchorRef:{current:v.currentTarget},align:"end",direction:"bottom",gap:4}),Qt(!0))},class:`time ${An&&(In!=null&&In.anchorRef)?"is-open":""}`,children:[pa&&!Bo?s(H,{icon:"comment2",size:"s",alt:`${K} ${K===1?"reply":"replies"}`}):q!=="public"&&q!=="direct"&&s(H,{icon:ro[q],alt:dn[q],size:"s"})," ",s(Mt,{datetime:be,format:"micro"}),!d&&!i&&s(H,{icon:"more2",class:"more"})]}):s("span",{class:"time",children:[q!=="public"&&q!=="direct"&&s(U,{children:[s(H,{icon:ro[q],alt:dn[q],size:"s"})," "]}),s(Mt,{datetime:be,format:"micro"})]}))]}),q==="direct"&&s(U,{children:[s("div",{class:"status-direct-badge",children:"Private mention"})," "]}),!u&&s(U,{children:en?s("div",{class:"status-thread-badge",children:[s(H,{icon:"thread",size:"s"}),"Thread",x.statusThreadNumber[P]?` ${x.statusThreadNumber[P]}/X`:""]}):!!ee&&!!xe&&(!!de||!ue.find(v=>v.id===J))&&s("div",{class:"status-reply-badge",children:[s(H,{icon:"reply"})," ",s(an,{account:xe,instance:b,short:!0})]})}),s("div",{class:`content-container ${de||ie?"has-spoiler":""} ${Ke?"show-spoiler":""} ${dt?"show-media":""}`,"data-content-text-weight":o?Lo():null,style:(me||o)&&{"--content-text-weight":Lo()},children:E&&qt?s(U,{children:[(!!de||!!ie)&&!je&&s(U,{children:[!!de&&s("span",{class:"spoiler-content media-first-spoiler-content",lang:we,dir:"auto",ref:Io,"data-read-more":_r,children:[s(Bt,{text:de,emojis:Se})," "]}),s("button",{class:`light spoiler-button media-first-spoiler-button ${Ke?"spoiling":""}`,type:"button",onClick:v=>{v.preventDefault(),v.stopPropagation(),Ke?(delete W.spoilers[C],je||delete W.spoilersMedia[C]):(W.spoilers[C]=!0,je||(W.spoilersMedia[C]=!0))},children:[s(H,{icon:Ke?"eye-open":"eye-close"})," ",Ke?"Show less":"Show content"]})]}),s(gd,{mediaAttachments:ae,language:we,postID:C,instance:b}),!!pe&&s("div",{class:"media-first-content content",ref:$o,children:s(Si,{post:t,instance:b,previewMode:d})})]}):s(U,{children:[!!de&&s(U,{children:[s("div",{class:"content spoiler-content",lang:we,dir:"auto",ref:Io,"data-read-more":_r,children:s("p",{children:s(Bt,{text:de,emojis:Se})})}),je||d?s("div",{class:"spoiler-divider",children:[s(H,{icon:"eye-open"})," Content warning"]}):s("button",{class:`light spoiler-button ${Ke?"spoiling":""}`,type:"button",onClick:v=>{v.preventDefault(),v.stopPropagation(),Ke?(delete W.spoilers[C],je||delete W.spoilersMedia[C]):(W.spoilers[C]=!0,je||(W.spoilersMedia[C]=!0))},children:[s(H,{icon:Ke?"eye-open":"eye-close"})," ",Ke?"Show less":"Show content"]})]}),!!pe&&s("div",{class:"content",ref:$o,"data-read-more":_r,children:[s(Si,{post:t,instance:b,previewMode:d}),s(Ed,{id:C,instance:b,level:m})]}),!!ve&&s(ku,{lang:we,poll:ve,readOnly:i||!O||!M,onUpdate:v=>{W.statuses[P].poll=v},refresh:()=>w.v1.polls.$select(ve.id).fetch().then(v=>{W.statuses[P].poll=v}).catch(v=>{}),votePoll:v=>w.v1.polls.$select(ve.id).votes.create({choices:v}).then(F=>{W.statuses[P].poll=F}).catch(F=>{})}),((l||Ao)&&!!pe.trim()&&!!cr(ar(pe,Se))&&kn||yt)&&s(ou,{forceTranslate:yt||Ao,mini:!me&&!u,sourceLanguage:we,autoDetected:$t,text:Ur(t)}),!d&&ie&&!!ae.length&&xn!=="show_all"&&s("button",{class:`plain spoiler-media-button ${dt?"spoiling":""}`,type:"button",hidden:!je&&!!de,onClick:v=>{v.preventDefault(),v.stopPropagation(),dt?delete W.spoilersMedia[C]:W.spoilersMedia[C]=!0},children:[s(H,{icon:dt?"eye-open":"eye-close"})," ",dt?"Show less":"Show media"]}),!!ae.length&&(ae.length>1&&(me||u&&r==="m")?s("div",{class:"media-large-container",children:ae.map((v,F)=>s("div",{class:"media-container media-eq1",children:s(oo,{media:v,autoAnimate:!0,showCaption:!0,allowLongerCaption:!pe,lang:we,to:`/${b}/s/${C}?${u?"media":"media-only"}=${F+1}`,onClick:p?Q=>p(Q,F,v,t):void 0})},v.id))}):s(md,{lang:we,enabled:On,captionChildren:ha,children:s("div",{ref:ra,class:`media-container media-eq${ae.length} ${ae.length>2?"media-gt2":""} ${ae.length>4?"media-gt4":""}`,children:Pn.map((v,F)=>s(oo,{media:v,autoAnimate:me,showCaption:ae.length===1,allowLongerCaption:!pe&&ae.length===1,lang:we,altIndex:On&&!!v.description&&F+1,to:`/${b}/s/${C}?${u?"media":"media-only"}=${F+1}`,onClick:p?Q=>{p(Q,F,v,t)}:void 0},v.id))})})),!!Y&&/^https/i.test(Y==null?void 0:Y.url)&&!ie&&!de&&!ve&&!ae.length&&!x.statusQuotes[P]&&s(vd,{card:Y,selfReferential:(Y==null?void 0:Y.url)===t.url||(Y==null?void 0:Y.url)===t.uri,instance:A})]})}),!me&&Bo&&s("div",{class:"content-comment-hint insignificant",children:[s(H,{icon:"comment2",alt:"Replies"})," ",K]}),me&&s(U,{children:[s("div",{class:"extra-meta",children:_e?s("span",{class:"status-deleted-tag",children:"Deleted"}):s(U,{children:[s("span",{children:dn[q]})," •"," ",s("a",{href:Ve,target:"_blank",rel:"noopener noreferrer",children:s("time",{class:"created",datetime:be.toISOString(),title:be.toLocaleString(),children:Co})}),Ee&&s(U,{children:[" ","• ",s(H,{icon:"pencil",alt:"Edited"})," ",s("time",{tabIndex:"0",class:"edited",datetime:He.toISOString(),onClick:()=>{Mn(C)},children:Po})]})]})}),!!(It!=null&&It.length)&&s("div",{class:"emoji-reactions",children:It.map(v=>{const{name:F,count:Q,me:ce,url:Ce,staticUrl:Ct}=v;if(Ce)return s("span",{class:`emoji-reaction tag ${ce?"":"insignificant"}`,children:[s(eo,{alt:F,url:Ce,staticUrl:Ct})," ",Q]});if(/^:.+?:$/.test(F)){const bt=Se.find(wt=>wt.shortcode===F.replace(/^:/,"").replace(/:$/,""));if(bt)return s("span",{class:`emoji-reaction tag ${ce?"":"insignificant"}`,children:[s(eo,{alt:F,url:bt.url,staticUrl:bt.staticUrl})," ",Q]})}return s("span",{class:`emoji-reaction tag ${ce?"":"insignificant"}`,children:[F," ",Q]})})}),s("div",{class:`actions ${_e?"disabled":""}`,children:[s("div",{class:"action has-count",children:s(Rt,{title:"Reply",alt:"Comments",class:"reply-button",icon:"comment",count:K,onClick:Sn})}),s(Ar,{disabled:!Jt,onClick:wr,confirmLabel:s(U,{children:[s(H,{icon:"rocket"}),s("span",{children:Z?"Unboost":"Boost"})]}),menuExtras:s(ke,{onClick:()=>{zn({draftStatus:{status:` -${Ve}`}})},children:[s(H,{icon:"quote"}),s("span",{children:"Quote"})]}),menuFooter:br&&!Z&&s("div",{class:"footer",children:[s(H,{icon:"alert"}),"Some media have no descriptions."]}),children:s("div",{class:"action has-count",children:s(Rt,{checked:Z,title:["Boost","Unboost"],alt:["Boost","Boosted"],class:"reblog-button",icon:"rocket",count:ne,disabled:!Jt})})}),s("div",{class:"action has-count",children:s(Rt,{checked:le,title:["Like","Unlike"],alt:["Like","Liked"],class:"favourite-button",icon:"heart",count:Te,onClick:Do})}),Fn("@mastodon/post-bookmark")&&s("div",{class:"action",children:s(Rt,{checked:he,title:["Bookmark","Unbookmark"],alt:["Bookmark","Bookmarked"],class:"bookmark-button",icon:"bookmark",onClick:Ro})}),s(ls,{portal:{target:document.querySelector(".status-deck")||document.body},align:"end",gap:4,overflow:"auto",viewScroll:"close",menuButton:s("div",{class:"action",children:s("button",{type:"button",title:"More",class:"plain more-button",children:s(H,{icon:"more",size:"l",alt:"More"})})}),children:Vo})]})]})]}),!!vr&&s(Zr,{onClick:v=>{v.target===v.currentTarget&&Mn(!1)},children:s(yd,{statusID:vr,instance:b,fetchStatusHistory:()=>w.v1.statuses.$select(vr).history.list(),onClose:()=>{var v;Mn(!1),(v=Lt.current)==null||v.focus()}})}),!!na&&s(Zr,{onClick:v=>{v.target===v.currentTarget&&yr(!1)},children:s(_d,{post:t,instance:b,onClose:()=>{yr(!1)}})})]})]})}function md(e){const{enabled:t,children:n,lang:r,captionChildren:o}=e;return!t||!o?n:s("figure",{class:"media-figure-multiple",children:[n,s("figcaption",{lang:r,dir:"auto",children:o})]})}function gd(e){const{mediaAttachments:t,language:n,postID:r,instance:o}=e,i=t.length>1,a=j(),[u,c]=te(0);return se(()=>{let l=()=>{const{clientWidth:f,scrollLeft:d}=a.current,p=Math.round(Math.abs(d)/f);c(p)};return a.current&&a.current.addEventListener("scroll",l,{passive:!0}),()=>{a.current&&a.current.removeEventListener("scroll",l)}},[]),s(U,{children:[s("div",{class:"media-first-container",children:[s("div",{class:"media-first-carousel",ref:a,children:t.map((l,f)=>s("div",{class:"media-first-item",children:s(oo,{media:l,lang:n,to:`/${o}/s/${r}?media=${f+1}`})},l.id))}),i&&s("div",{class:"media-carousel-controls",children:[s("div",{class:"carousel-indexer",children:[u+1,"/",t.length]}),s("label",{class:"media-carousel-button",children:s("button",{type:"button",class:"carousel-button",hidden:u===0,onClick:l=>{l.preventDefault(),l.stopPropagation(),a.current.focus(),a.current.scrollTo({left:a.current.clientWidth*(u-1)*(Qr()?-1:1),behavior:"smooth"})},children:s(H,{icon:"arrow-left"})})}),s("label",{class:"media-carousel-button",children:s("button",{type:"button",class:"carousel-button",hidden:u===t.length-1,onClick:l=>{l.preventDefault(),l.stopPropagation(),a.current.focus(),a.current.scrollTo({left:a.current.clientWidth*(u+1)*(Qr()?-1:1),behavior:"smooth"})},children:s(H,{icon:"arrow-right"})})})]})]}),i&&s("div",{class:"media-carousel-dots",style:{"--dots-count":t.length},children:t.map((l,f)=>s("span",{class:`carousel-dot ${f===u?"active":""}`},l.id))})]})}function ki(e){return bs.toUnicode(URL.parse(e).hostname.replace(/^www\./,"").replace(/\/$/,""))}function Ai(e){return["x.com","twitter.com","threads.net","bsky.app"].includes(e)}function vd({card:e,selfReferential:t,instance:n}){var V;const r=wn(W),{blurhash:o,title:i,description:a,html:u,providerName:c,providerUrl:l,authorName:f,authorUrl:d,width:p,height:m,image:h,imageDescription:g,url:y,type:T,embedUrl:_,language:E,publishedAt:w}=e,b=i||c||f,A=p/m>=1.2?"large":"",[O,P]=te(null);if(se(()=>{b&&h&&!t&&Ma(y)&&Sa(n,y).then(B=>{if(!B)return;const{id:D,url:$}=B;P("#"+$)})},[b,h,t]),r.unfurledLinks[y])return null;const x=/`;\n this.domRefFrame.insertAdjacentHTML('beforeend', iframeHTML);\n this.domRefFrame.classList.add('activated');\n this.isIframeLoaded = true;\n this.attemptShortAutoPlay();\n this.dispatchEvent(new CustomEvent('liteYoutubeIframeLoaded', {\n detail: {\n videoId: this.videoId,\n },\n bubbles: true,\n cancelable: true,\n }));\n }\n }\n initImagePlaceholder() {\n const posterUrlWebp = `https://i.ytimg.com/vi_webp/${this.videoId}/${this.posterQuality}.webp`;\n const posterUrlJpeg = `https://i.ytimg.com/vi/${this.videoId}/${this.posterQuality}.jpg`;\n this.domRefImg.fallback.loading = this.posterLoading;\n this.domRefImg.webp.srcset = posterUrlWebp;\n this.domRefImg.jpeg.srcset = posterUrlJpeg;\n this.domRefImg.fallback.src = posterUrlJpeg;\n this.domRefImg.fallback.setAttribute('aria-label', `${this.videoPlay}: ${this.videoTitle}`);\n this.domRefImg?.fallback?.setAttribute('alt', `${this.videoPlay}: ${this.videoTitle}`);\n }\n initIntersectionObserver() {\n const options = {\n root: null,\n rootMargin: '0px',\n threshold: 0,\n };\n const observer = new IntersectionObserver((entries, observer) => {\n entries.forEach(entry => {\n if (entry.isIntersecting && !this.isIframeLoaded) {\n LiteYTEmbed.warmConnections();\n this.addIframe(true);\n observer.unobserve(this);\n }\n });\n }, options);\n observer.observe(this);\n }\n attemptShortAutoPlay() {\n if (this.isYouTubeShort()) {\n setTimeout(() => {\n this.shadowRoot\n .querySelector('iframe')\n ?.contentWindow?.postMessage('{\"event\":\"command\",\"func\":\"' + 'playVideo' + '\",\"args\":\"\"}', '*');\n }, 2000);\n }\n }\n isYouTubeShort() {\n return (this.getAttribute('short') === '' &&\n window.matchMedia('(max-width: 40em)').matches);\n }\n static addPrefetch(kind, url) {\n const linkElem = document.createElement('link');\n linkElem.rel = kind;\n linkElem.href = url;\n linkElem.crossOrigin = 'true';\n document.head.append(linkElem);\n }\n static warmConnections() {\n if (LiteYTEmbed.isPreconnected || window.liteYouTubeIsPreconnected)\n return;\n LiteYTEmbed.addPrefetch('preconnect', 'https://i.ytimg.com/');\n LiteYTEmbed.addPrefetch('preconnect', 'https://s.ytimg.com');\n LiteYTEmbed.addPrefetch('preconnect', 'https://www.youtube.com');\n LiteYTEmbed.addPrefetch('preconnect', 'https://www.google.com');\n LiteYTEmbed.addPrefetch('preconnect', 'https://googleads.g.doubleclick.net');\n LiteYTEmbed.addPrefetch('preconnect', 'https://static.doubleclick.net');\n LiteYTEmbed.isPreconnected = true;\n window.liteYouTubeIsPreconnected = true;\n }\n}\nLiteYTEmbed.isPreconnected = false;\ncustomElements.define('lite-youtube', LiteYTEmbed);\n//# sourceMappingURL=lite-youtube.js.map","const digitLookup = new Uint8Array(128);\nfor (let i = 0; i < 83; i++) {\n digitLookup[\n '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz#$%*+,-.:;=?@[]^_{|}~'.charCodeAt(\n i,\n )\n ] = i;\n}\nconst decode83 = (str, start, end) => {\n let value = 0;\n while (start < end) {\n value *= 83;\n value += digitLookup[str.charCodeAt(start++)];\n }\n return value;\n};\n\nconst pow = Math.pow;\nconst PI = Math.PI;\nconst PI2 = PI * 2;\n\nconst d = 3294.6;\nconst e = 269.025;\nconst sRGBToLinear = (value) =>\n value > 10.31475 ? pow(value / e + 0.052132, 2.4) : value / d;\n\nconst linearTosRGB = (v) =>\n ~~(v > 0.00001227 ? e * pow(v, 0.416666) - 13.025 : v * d + 1);\n\nconst signSqr = (x) => (x < 0 ? -1 : 1) * x * x;\n\n/**\n * Fast approximate cosine implementation\n * Based on FTrig https://github.com/netcell/FTrig\n */\nconst fastCos = (x) => {\n x += PI / 2;\n while (x > PI) {\n x -= PI2;\n }\n const cos = 1.27323954 * x - 0.405284735 * signSqr(x);\n return 0.225 * (signSqr(cos) - cos) + cos;\n};\n\n/**\n * Extracts average color from BlurHash image\n * @param {string} blurHash BlurHash image string\n * @returns {[number, number, number]}\n */\nexport function getBlurHashAverageColor(blurHash) {\n const val = decode83(blurHash, 2, 6);\n return [val >> 16, (val >> 8) & 255, val & 255];\n}\n\n/**\n * Decodes BlurHash image\n * @param {string} blurHash BlurHash image string\n * @param {number} width Output image width\n * @param {number} height Output image height\n * @param {?number} punch\n * @returns {Uint8ClampedArray}\n */\nexport function decodeBlurHash(blurHash, width, height, punch) {\n const sizeFlag = decode83(blurHash, 0, 1);\n const numX = (sizeFlag % 9) + 1;\n const numY = ~~(sizeFlag / 9) + 1;\n const size = numX * numY;\n\n let i = 0,\n j = 0,\n x = 0,\n y = 0,\n r = 0,\n g = 0,\n b = 0,\n basis = 0,\n basisY = 0,\n colorIndex = 0,\n pixelIndex = 0,\n value = 0;\n\n const maximumValue = ((decode83(blurHash, 1, 2) + 1) / 13446) * (punch | 1);\n\n const colors = new Float64Array(size * 3);\n\n const averageColor = getBlurHashAverageColor(blurHash);\n for (i = 0; i < 3; i++) {\n colors[i] = sRGBToLinear(averageColor[i]);\n }\n\n for (i = 1; i < size; i++) {\n value = decode83(blurHash, 4 + i * 2, 6 + i * 2);\n colors[i * 3] = signSqr(~~(value / 361) - 9) * maximumValue;\n colors[i * 3 + 1] = signSqr((~~(value / 19) % 19) - 9) * maximumValue;\n colors[i * 3 + 2] = signSqr((value % 19) - 9) * maximumValue;\n }\n\n const cosinesY = new Float64Array(numY * height);\n const cosinesX = new Float64Array(numX * width);\n for (j = 0; j < numY; j++) {\n for (y = 0; y < height; y++) {\n cosinesY[j * height + y] = fastCos((PI * y * j) / height);\n }\n }\n for (i = 0; i < numX; i++) {\n for (x = 0; x < width; x++) {\n cosinesX[i * width + x] = fastCos((PI * x * i) / width);\n }\n }\n\n const bytesPerRow = width * 4;\n const pixels = new Uint8ClampedArray(bytesPerRow * height);\n\n for (y = 0; y < height; y++) {\n for (x = 0; x < width; x++) {\n r = g = b = 0;\n for (j = 0; j < numY; j++) {\n basisY = cosinesY[j * height + y];\n for (i = 0; i < numX; i++) {\n basis = cosinesX[i * width + x] * basisY;\n colorIndex = (i + j * numX) * 3;\n r += colors[colorIndex] * basis;\n g += colors[colorIndex + 1] * basis;\n b += colors[colorIndex + 2] * basis;\n }\n }\n\n pixelIndex = 4 * x + y * bytesPerRow;\n pixels[pixelIndex] = linearTosRGB(r);\n pixels[pixelIndex + 1] = linearTosRGB(g);\n pixels[pixelIndex + 2] = linearTosRGB(b);\n pixels[pixelIndex + 3] = 255; // alpha\n }\n }\n return pixels;\n}\n","/**\n * @param {string[]} splittedHtml\n * @param {{ char?: string; count?: number}} options\n * @returns {string}\n */\nconst addIndentation = (splittedHtml, options = {}) => {\n const char = options.char || ' '\n const count = options.count || 2\n\n let level = 0\n const opened = []\n\n return splittedHtml.reverse().reduce((indented, elTag) => {\n if (opened.length\n && level\n && opened[level]\n /* if current element tag is the same as previously opened one */\n && opened[level] === elTag.substring(1, opened[level].length + 1)\n ) {\n opened.splice(level, 1)\n level--\n }\n\n const indentation = char.repeat(level ? level * count : 0)\n\n const newIndented = [\n `${indentation}${elTag}`,\n ...indented,\n ]\n\n // if current element tag is closing tag\n // add it to opened elements\n if (elTag.substring(0, 2) === ' (\n // Replace\n // - 1 or more spaces or tabs at the start of line\n // - 1 or more spaces or tabs at the end of line\n // - empty lines\n // with empty string\n nonFormattedString.trim().replace(/(^(\\s|\\t)+|(( |\\t)+)$)/gm, '')\n)\n\n/**\n * @param {string} markup\n * @returns {string[]} Array of strings splitted on new lines without empty lines\n */\nconst mergeAttributesWithElements = (markup) => {\n const splittedMarkup = removeEmptyLines(markup).split('\\n')\n\n const mergedLines = []\n let currentElement = ''\n for (let i = 0; i < splittedMarkup.length; i += 1) {\n const line = splittedMarkup[i]\n\n // If line is closing element/tag separate closing tag from rest of the line with space\n if (line.endsWith('/>')) {\n mergedLines.push(`${currentElement}${line.slice(0, -2)} />`)\n currentElement = ''\n // eslint-disable-next-line no-continue\n continue\n }\n\n if (line.endsWith('>')) {\n mergedLines.push(`${currentElement}${\n line.startsWith('>') || line.startsWith('<') ? '' : ' '\n }${line}`)\n currentElement = ''\n // eslint-disable-next-line no-continue\n continue\n }\n\n currentElement += currentElement.length ? ` ${line}` : line\n }\n\n return mergedLines\n}\n\nmodule.exports = {\n mergeAttributesWithElements,\n removeEmptyLines,\n}\n","const addIndentation = require('./utils/addIndentation')\nconst { mergeAttributesWithElements } = require('./utils/toLines')\n\n/**\n * @param {string} markup\n * @param {{ char?: string; count?: number }} options\n * @returns {string}\n */\nconst prettify = (markup, options = {}) => {\n const splitted = mergeAttributesWithElements(markup)\n\n return addIndentation(splitted, options)\n}\n\nmodule.exports = prettify\n","import { useRef as s, useCallback as h, useEffect as g } from \"react\";\nvar l = /* @__PURE__ */ ((e) => (e.Mouse = \"mouse\", e.Touch = \"touch\", e.Pointer = \"pointer\", e))(l || {}), d = /* @__PURE__ */ ((e) => (e.CancelledByMovement = \"cancelled-by-movement\", e.CancelledByRelease = \"cancelled-by-release\", e.CancelledOutsideElement = \"cancelled-outside-element\", e))(d || {});\nconst A = () => typeof window == \"object\" ? window?.PointerEvent ?? null : null, z = () => typeof window == \"object\" ? window?.TouchEvent ?? null : null;\nfunction U(e) {\n const { nativeEvent: t } = e, u = z();\n return u && t instanceof u || \"touches\" in e;\n}\nfunction X(e) {\n const t = A();\n return e.nativeEvent instanceof MouseEvent && !(t && e.nativeEvent instanceof t);\n}\nfunction Y(e) {\n const { nativeEvent: t } = e;\n if (!t)\n return !1;\n const u = A();\n return u && t instanceof u || \"pointerId\" in t;\n}\nfunction R(e) {\n return X(e) || U(e) || Y(e);\n}\nfunction j(e) {\n return U(e) ? {\n x: e.touches[0].pageX,\n y: e.touches[0].pageY\n } : X(e) || Y(e) ? {\n x: e.pageX,\n y: e.pageY\n } : null;\n}\nfunction G(e) {\n return {\n target: e.target,\n currentTarget: e.currentTarget,\n nativeEvent: e,\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n persist: () => {\n }\n };\n}\nfunction J(e, {\n threshold: t = 400,\n captureEvent: u = !1,\n detect: y = l.Pointer,\n cancelOnMovement: w = !1,\n cancelOutsideElement: v = !0,\n filterEvents: p,\n onStart: M,\n onMove: C,\n onFinish: L,\n onCancel: b\n} = {}) {\n const P = s(!1), c = s(!1), I = s(), a = s(), T = s(e), f = s(null), E = h(\n (n) => (r) => {\n c.current || R(r) && (p !== void 0 && !p(r) || (u && r.persist(), M?.(r, { context: n }), f.current = j(r), c.current = !0, I.current = r.currentTarget, a.current = setTimeout(() => {\n T.current && (T.current(r, { context: n }), P.current = !0);\n }, t)));\n },\n [u, p, M, t]\n ), i = h(\n (n) => (r, o) => {\n R(r) && c.current && (f.current = null, u && r.persist(), P.current ? L?.(r, { context: n }) : c.current && b?.(r, { context: n, reason: o ?? d.CancelledByRelease }), P.current = !1, c.current = !1, a.current !== void 0 && clearTimeout(a.current));\n },\n [u, L, b]\n ), m = h(\n (n) => (r) => {\n if (C?.(r, { context: n }), w !== !1 && f.current) {\n const o = j(r);\n if (o) {\n const B = w === !0 ? 25 : w, D = {\n x: Math.abs(o.x - f.current.x),\n y: Math.abs(o.y - f.current.y)\n };\n (D.x > B || D.y > B) && i(n)(r, d.CancelledByMovement);\n }\n }\n },\n [i, w, C]\n ), q = h(\n (n) => {\n if (e === null)\n return {};\n switch (y) {\n case l.Mouse: {\n const r = {\n onMouseDown: E(n),\n onMouseMove: m(n),\n onMouseUp: i(n)\n };\n return v && (r.onMouseLeave = (o) => {\n i(n)(o, d.CancelledOutsideElement);\n }), r;\n }\n case l.Touch:\n return {\n onTouchStart: E(n),\n onTouchMove: m(n),\n onTouchEnd: i(n)\n };\n case l.Pointer: {\n const r = {\n onPointerDown: E(n),\n onPointerMove: m(n),\n onPointerUp: i(n)\n };\n return v && (r.onPointerLeave = (o) => i(n)(o, d.CancelledOutsideElement)), r;\n }\n }\n },\n [e, i, v, y, m, E]\n );\n return g(() => {\n if (!window)\n return;\n function n(r) {\n const o = G(r);\n i()(o);\n }\n return window.addEventListener(\"mouseup\", n), window.addEventListener(\"touchend\", n), window.addEventListener(\"pointerup\", n), () => {\n window.removeEventListener(\"mouseup\", n), window.removeEventListener(\"touchend\", n), window.removeEventListener(\"pointerup\", n);\n };\n }, [i]), g(\n () => () => {\n a.current !== void 0 && clearTimeout(a.current);\n },\n []\n ), g(() => {\n T.current = e;\n }, [e]), q;\n}\nexport {\n d as LongPressCallbackReason,\n l as LongPressEventType,\n J as useLongPress\n};\n","import { useState } from 'preact/hooks';\n\nimport shortenNumber from '../utils/shorten-number';\n\nimport EmojiText from './emoji-text';\nimport Icon from './icon';\nimport RelativeTime from './relative-time';\n\nexport default function Poll({\n poll,\n lang,\n readOnly,\n refresh = () => {},\n votePoll = () => {},\n}) {\n const [uiState, setUIState] = useState('default');\n const {\n expired,\n expiresAt,\n id,\n multiple,\n options,\n ownVotes,\n voted,\n votersCount,\n votesCount,\n emojis,\n } = poll;\n const expiresAtDate = !!expiresAt && new Date(expiresAt); // Update poll at point of expiry\n // NOTE: Disable this because setTimeout runs immediately if delay is too large\n // https://stackoverflow.com/a/56718027/20838\n // useEffect(() => {\n // let timeout;\n // if (!expired && expiresAtDate) {\n // const ms = expiresAtDate.getTime() - Date.now() + 1; // +1 to give it a little buffer\n // if (ms > 0) {\n // timeout = setTimeout(() => {\n // setUIState('loading');\n // (async () => {\n // // await refresh();\n // setUIState('default');\n // })();\n // }, ms);\n // }\n // }\n // return () => {\n // clearTimeout(timeout);\n // };\n // }, [expired, expiresAtDate]);\n\n const pollVotesCount = votersCount || votesCount;\n let roundPrecision = 0;\n\n if (pollVotesCount <= 1000) {\n roundPrecision = 0;\n } else if (pollVotesCount <= 10000) {\n roundPrecision = 1;\n } else if (pollVotesCount <= 100000) {\n roundPrecision = 2;\n }\n\n const [showResults, setShowResults] = useState(false);\n const optionsHaveVoteCounts = options.every((o) => o.votesCount !== null);\n\n return (\n \n {(showResults && optionsHaveVoteCounts) || voted || expired ? (\n <>\n
    \n {options.map((option, i) => {\n const { title, votesCount: optionVotesCount } = option;\n const percentage = pollVotesCount\n ? ((optionVotesCount / pollVotesCount) * 100).toFixed(\n roundPrecision,\n )\n : 0; // check if current poll choice is the leading one\n\n const isLeading =\n optionVotesCount > 0 &&\n optionVotesCount ===\n Math.max(...options.map((o) => o.votesCount));\n return (\n \n
    \n \n \n \n {voted && ownVotes.includes(i) && (\n <>\n {' '}\n \n \n )}\n
    \n \n {percentage}%\n
    \n \n );\n })}\n \n {!expired && !voted && (\n {\n e.preventDefault();\n setShowResults(false);\n }}\n >\n Hide results\n \n )}\n \n ) : (\n {\n e.preventDefault();\n const form = e.target;\n const formData = new FormData(form);\n const choices = [];\n formData.forEach((value, key) => {\n if (key === 'poll') {\n choices.push(value);\n }\n });\n if (!choices.length) return;\n setUIState('loading');\n await votePoll(choices);\n setUIState('default');\n }}\n >\n
    \n {options.map((option, i) => {\n const { title } = option;\n return (\n
    \n \n
    \n );\n })}\n
    \n {!readOnly && (\n \n Vote\n \n )}\n \n )}\n

    \n {!expired && !readOnly && (\n {\n e.preventDefault();\n setUIState('loading');\n\n (async () => {\n await refresh();\n setUIState('default');\n })();\n }}\n title=\"Refresh\"\n >\n \n \n )}\n {!voted && !expired && !readOnly && optionsHaveVoteCounts && (\n {\n e.preventDefault();\n setShowResults(!showResults);\n }}\n title={showResults ? 'Hide results' : 'Show results'}\n >\n {' '}\n \n )}\n {!expired && !readOnly && ' '}\n {shortenNumber(votesCount)} vote\n {votesCount === 1 ? '' : 's'}\n {!!votersCount && votersCount !== votesCount && (\n <>\n {' '}\n • \n {shortenNumber(votersCount)}\n {' '}\n voter\n {votersCount === 1 ? '' : 's'}\n \n )}{' '}\n • {expired ? 'Ended' : 'Ending'}{' '}\n {!!expiresAtDate && }\n

    {' '}\n \n );\n}\n","import { createContext } from 'preact';\n\nconst FilterContext = createContext();\nexport default FilterContext;\n","import mem from './mem';\nimport { getCurrentAccountID } from './store-utils';\n\nfunction _isFiltered(filtered, filterContext) {\n if (!filtered?.length) return false;\n const appliedFilters = filtered.filter((f) => {\n const { filter } = f;\n const hasContext = filter.context.includes(filterContext);\n if (!hasContext) return false;\n if (!filter.expiresAt) return hasContext;\n return new Date(filter.expiresAt) > new Date();\n });\n if (!appliedFilters.length) return false;\n const isHidden = appliedFilters.some((f) => f.filter.filterAction === 'hide');\n if (isHidden)\n return {\n action: 'hide',\n };\n const isWarn = appliedFilters.some((f) => f.filter.filterAction === 'warn');\n if (isWarn) {\n const filterTitles = appliedFilters.map((f) => f.filter.title);\n return {\n action: 'warn',\n titles: filterTitles,\n titlesStr: filterTitles.join(' • '),\n };\n }\n return false;\n}\nexport const isFiltered = mem(_isFiltered);\n\nexport function filteredItem(item, filterContext, currentAccountID) {\n const { filtered } = item;\n if (!filtered?.length) return true;\n const isSelf = currentAccountID && item.account?.id === currentAccountID;\n if (isSelf) return true;\n const filterState = isFiltered(filtered, filterContext);\n if (!filterState) return true;\n if (filterState.action === 'hide') return false;\n // item._filtered = filterState;\n return true;\n}\nexport function filteredItems(items, filterContext) {\n if (!items?.length) return [];\n if (!filterContext) return items;\n const currentAccountID = getCurrentAccountID();\n return items.filter((item) =>\n filteredItem(item, filterContext, currentAccountID),\n );\n}\n","const div = document.createElement('div');\nexport default function htmlContentLength(html) {\n if (!html) return 0;\n div.innerHTML = html;\n // .invisible spans for links\n // e.g. https://mastodon.social\n div.querySelectorAll('.invisible').forEach((el) => {\n el.remove();\n });\n return div.innerText.length;\n}\n","export const supportsTTS = 'speechSynthesis' in window;\n\nexport function speak(text, lang) {\n if (!supportsTTS) return;\n try {\n if (speechSynthesis.speaking) {\n speechSynthesis.cancel();\n }\n const utterance = new SpeechSynthesisUtterance(text);\n if (lang) utterance.lang = lang;\n speechSynthesis.speak(utterance);\n } catch (e) {\n alert(e);\n }\n}\n","import getHTMLText from './getHTMLText';\n\nfunction statusPeek(status) {\n const { spoilerText, content, poll, mediaAttachments } = status;\n let text = '';\n if (spoilerText?.trim()) {\n text += spoilerText;\n } else {\n text += getHTMLText(content);\n }\n text = text.trim();\n if (poll?.options?.length) {\n text += `\\n\\n📊:\\n${poll.options\n .map((o) => `${poll.multiple ? '▪️' : '•'} ${o.title}`)\n .join('\\n')}`;\n }\n if (mediaAttachments?.length) {\n text +=\n ' ' +\n mediaAttachments\n .map(\n (m) =>\n ({\n image: '🖼️',\n gifv: '🎞️',\n video: '📹',\n audio: '🎵',\n unknown: '',\n }[m.type] || ''),\n )\n .join('');\n }\n return text;\n}\n\nexport default statusPeek;\n","import{useRef as r,useEffect as n,useMemo as t,useReducer as e,useCallback as u}from\"react\";function c(e,u,c){var i=this,a=r(null),o=r(0),f=r(null),l=r([]),v=r(),m=r(),d=r(e),g=r(!0);d.current=e;var p=\"undefined\"!=typeof window,w=!u&&0!==u&&p;if(\"function\"!=typeof e)throw new TypeError(\"Expected a function\");u=+u||0;var s=!!(c=c||{}).leading,x=!(\"trailing\"in c)||!!c.trailing,h=\"maxWait\"in c,y=\"debounceOnServer\"in c&&!!c.debounceOnServer,F=h?Math.max(+c.maxWait||0,u):null;n(function(){return g.current=!0,function(){g.current=!1}},[]);var A=t(function(){var r=function(r){var n=l.current,t=v.current;return l.current=v.current=null,o.current=r,m.current=d.current.apply(t,n)},n=function(r,n){w&&cancelAnimationFrame(f.current),f.current=w?requestAnimationFrame(r):setTimeout(r,n)},t=function(r){if(!g.current)return!1;var n=r-a.current;return!a.current||n>=u||n<0||h&&r-o.current>=F},e=function(n){return f.current=null,x&&l.current?r(n):(l.current=v.current=null,m.current)},c=function r(){var c=Date.now();if(t(c))return e(c);if(g.current){var i=u-(c-a.current),f=h?Math.min(i,F-(c-o.current)):i;n(r,f)}},A=function(){if(p||y){var e=Date.now(),d=t(e);if(l.current=[].slice.call(arguments),v.current=i,a.current=e,d){if(!f.current&&g.current)return o.current=a.current,n(c,u),s?r(a.current):m.current;if(h)return n(c,u),r(a.current)}return f.current||n(c,u),m.current}};return A.cancel=function(){f.current&&(w?cancelAnimationFrame(f.current):clearTimeout(f.current)),o.current=0,l.current=a.current=v.current=f.current=null},A.isPending=function(){return!!f.current},A.flush=function(){return f.current?e(Date.now()):m.current},A},[s,h,u,F,x,w,p,y]);return A}function i(r,n){return r===n}function a(r,n){return n}function o(n,t,o){var f=o&&o.equalityFn||i,l=e(a,n),v=l[0],m=l[1],d=c(u(function(r){return m(r)},[m]),t,o),g=r(n);return f(g.current,n)||(d(n),g.current=n),f(v,n)&&d.cancel(),[v,d]}function f(r,n,t){var e=void 0===t?{}:t,u=e.leading,i=e.trailing;return c(r,n,{maxWait:n,leading:void 0===u||u,trailing:void 0===i||i})}export{o as useDebounce,c as useDebouncedCallback,f as useThrottledCallback};\n//# sourceMappingURL=index.module.js.map\n","import { useRef, useEffect, useCallback, useState, useMemo } from 'react';\n\n// This could've been more streamlined with internal state instead of abusing\n// refs to such extent, but then composing hooks and components could not opt out of unnecessary renders.\nfunction useResolvedElement(subscriber, refOrElement) {\n var lastReportRef = useRef(null);\n var refOrElementRef = useRef(null);\n refOrElementRef.current = refOrElement;\n var cbElementRef = useRef(null); // Calling re-evaluation after each render without using a dep array,\n // as the ref object's current value could've changed since the last render.\n\n useEffect(function () {\n evaluateSubscription();\n });\n var evaluateSubscription = useCallback(function () {\n var cbElement = cbElementRef.current;\n var refOrElement = refOrElementRef.current; // Ugly ternary. But smaller than an if-else block.\n\n var element = cbElement ? cbElement : refOrElement ? refOrElement instanceof Element ? refOrElement : refOrElement.current : null;\n\n if (lastReportRef.current && lastReportRef.current.element === element && lastReportRef.current.subscriber === subscriber) {\n return;\n }\n\n if (lastReportRef.current && lastReportRef.current.cleanup) {\n lastReportRef.current.cleanup();\n }\n\n lastReportRef.current = {\n element: element,\n subscriber: subscriber,\n // Only calling the subscriber, if there's an actual element to report.\n // Setting cleanup to undefined unless a subscriber returns one, as an existing cleanup function would've been just called.\n cleanup: element ? subscriber(element) : undefined\n };\n }, [subscriber]); // making sure we call the cleanup function on unmount\n\n useEffect(function () {\n return function () {\n if (lastReportRef.current && lastReportRef.current.cleanup) {\n lastReportRef.current.cleanup();\n lastReportRef.current = null;\n }\n };\n }, []);\n return useCallback(function (element) {\n cbElementRef.current = element;\n evaluateSubscription();\n }, [evaluateSubscription]);\n}\n\n// We're only using the first element of the size sequences, until future versions of the spec solidify on how\n// exactly it'll be used for fragments in multi-column scenarios:\n// From the spec:\n// > The box size properties are exposed as FrozenArray in order to support elements that have multiple fragments,\n// > which occur in multi-column scenarios. However the current definitions of content rect and border box do not\n// > mention how those boxes are affected by multi-column layout. In this spec, there will only be a single\n// > ResizeObserverSize returned in the FrozenArray, which will correspond to the dimensions of the first column.\n// > A future version of this spec will extend the returned FrozenArray to contain the per-fragment size information.\n// (https://drafts.csswg.org/resize-observer/#resize-observer-entry-interface)\n//\n// Also, testing these new box options revealed that in both Chrome and FF everything is returned in the callback,\n// regardless of the \"box\" option.\n// The spec states the following on this:\n// > This does not have any impact on which box dimensions are returned to the defined callback when the event\n// > is fired, it solely defines which box the author wishes to observe layout changes on.\n// (https://drafts.csswg.org/resize-observer/#resize-observer-interface)\n// I'm not exactly clear on what this means, especially when you consider a later section stating the following:\n// > This section is non-normative. An author may desire to observe more than one CSS box.\n// > In this case, author will need to use multiple ResizeObservers.\n// (https://drafts.csswg.org/resize-observer/#resize-observer-interface)\n// Which is clearly not how current browser implementations behave, and seems to contradict the previous quote.\n// For this reason I decided to only return the requested size,\n// even though it seems we have access to results for all box types.\n// This also means that we get to keep the current api, being able to return a simple { width, height } pair,\n// regardless of box option.\nfunction extractSize(entry, boxProp, sizeType) {\n if (!entry[boxProp]) {\n if (boxProp === \"contentBoxSize\") {\n // The dimensions in `contentBoxSize` and `contentRect` are equivalent according to the spec.\n // See the 6th step in the description for the RO algorithm:\n // https://drafts.csswg.org/resize-observer/#create-and-populate-resizeobserverentry-h\n // > Set this.contentRect to logical this.contentBoxSize given target and observedBox of \"content-box\".\n // In real browser implementations of course these objects differ, but the width/height values should be equivalent.\n return entry.contentRect[sizeType === \"inlineSize\" ? \"width\" : \"height\"];\n }\n\n return undefined;\n } // A couple bytes smaller than calling Array.isArray() and just as effective here.\n\n\n return entry[boxProp][0] ? entry[boxProp][0][sizeType] : // TS complains about this, because the RO entry type follows the spec and does not reflect Firefox's current\n // behaviour of returning objects instead of arrays for `borderBoxSize` and `contentBoxSize`.\n // @ts-ignore\n entry[boxProp][sizeType];\n}\n\nfunction useResizeObserver(opts) {\n if (opts === void 0) {\n opts = {};\n }\n\n // Saving the callback as a ref. With this, I don't need to put onResize in the\n // effect dep array, and just passing in an anonymous function without memoising\n // will not reinstantiate the hook's ResizeObserver.\n var onResize = opts.onResize;\n var onResizeRef = useRef(undefined);\n onResizeRef.current = onResize;\n var round = opts.round || Math.round; // Using a single instance throughout the hook's lifetime\n\n var resizeObserverRef = useRef();\n\n var _useState = useState({\n width: undefined,\n height: undefined\n }),\n size = _useState[0],\n setSize = _useState[1]; // In certain edge cases the RO might want to report a size change just after\n // the component unmounted.\n\n\n var didUnmount = useRef(false);\n useEffect(function () {\n didUnmount.current = false;\n return function () {\n didUnmount.current = true;\n };\n }, []); // Using a ref to track the previous width / height to avoid unnecessary renders.\n\n var previous = useRef({\n width: undefined,\n height: undefined\n }); // This block is kinda like a useEffect, only it's called whenever a new\n // element could be resolved based on the ref option. It also has a cleanup\n // function.\n\n var refCallback = useResolvedElement(useCallback(function (element) {\n // We only use a single Resize Observer instance, and we're instantiating it on demand, only once there's something to observe.\n // This instance is also recreated when the `box` option changes, so that a new observation is fired if there was a previously observed element with a different box option.\n if (!resizeObserverRef.current || resizeObserverRef.current.box !== opts.box || resizeObserverRef.current.round !== round) {\n resizeObserverRef.current = {\n box: opts.box,\n round: round,\n instance: new ResizeObserver(function (entries) {\n var entry = entries[0];\n var boxProp = opts.box === \"border-box\" ? \"borderBoxSize\" : opts.box === \"device-pixel-content-box\" ? \"devicePixelContentBoxSize\" : \"contentBoxSize\";\n var reportedWidth = extractSize(entry, boxProp, \"inlineSize\");\n var reportedHeight = extractSize(entry, boxProp, \"blockSize\");\n var newWidth = reportedWidth ? round(reportedWidth) : undefined;\n var newHeight = reportedHeight ? round(reportedHeight) : undefined;\n\n if (previous.current.width !== newWidth || previous.current.height !== newHeight) {\n var newSize = {\n width: newWidth,\n height: newHeight\n };\n previous.current.width = newWidth;\n previous.current.height = newHeight;\n\n if (onResizeRef.current) {\n onResizeRef.current(newSize);\n } else {\n if (!didUnmount.current) {\n setSize(newSize);\n }\n }\n }\n })\n };\n }\n\n resizeObserverRef.current.instance.observe(element, {\n box: opts.box\n });\n return function () {\n if (resizeObserverRef.current) {\n resizeObserverRef.current.instance.unobserve(element);\n }\n };\n }, [opts.box, round]), opts.ref);\n return useMemo(function () {\n return {\n ref: refCallback,\n width: size.width,\n height: size.height\n };\n }, [refCallback, size.width, size.height]);\n}\n\nexport { useResizeObserver as default };\n","import { useRef } from 'preact/hooks';\nimport { useThrottledCallback } from 'use-debounce';\nimport useResizeObserver from 'use-resize-observer';\n\nexport default function useTruncated({ className = 'truncated' } = {}) {\n const ref = useRef();\n const onResize = useThrottledCallback(({ height }) => {\n if (ref.current) {\n const { scrollHeight } = ref.current;\n let truncated = scrollHeight > height;\n if (truncated) {\n const { height: _height, maxHeight } = getComputedStyle(ref.current);\n const computedHeight = parseInt(maxHeight || _height, 10);\n truncated = scrollHeight > computedHeight;\n }\n ref.current.classList.toggle(className, truncated);\n }\n }, 300);\n useResizeObserver({\n ref,\n box: 'border-box',\n onResize,\n });\n return ref;\n}\n","export default {\n public: 'earth',\n unlisted: 'group',\n private: 'lock',\n direct: 'message',\n};\n","export var styleRoot = 'kvfysmfp';\nexport var styleChild = 'ufhsfnkm';\nexport var styles = \".\".concat(styleRoot, \"{overflow:hidden;touch-action:none}.\").concat(styleChild, \"{transform-origin: 0 0}\");\n","var isSsr = typeof window === 'undefined';\nexport var isTouch = function () {\n return !isSsr && ('ontouchstart' in window || navigator.maxTouchPoints > 0);\n};\nexport var make2dTransformValue = function (_a) {\n var x = _a.x, y = _a.y, scale = _a.scale;\n return \"scale(\".concat(scale, \") translate(\").concat(x, \"px, \").concat(y, \"px)\");\n};\nexport var make3dTransformValue = function (_a) {\n var x = _a.x, y = _a.y, scale = _a.scale;\n return \"scale3d(\".concat(scale, \",\").concat(scale, \", 1) translate3d(\").concat(x, \"px, \").concat(y, \"px, 0)\");\n};\nexport var hasTranslate3DSupport = function () {\n var css = !isSsr && window.CSS;\n return css && css.supports && css.supports('transform', 'translate3d(0,0,0)');\n};\n","var min = Math.min, max = Math.max;\nexport function getOffsetBounds(_a) {\n var containerDimension = _a.containerDimension, childDimension = _a.childDimension, padding = _a.padding, centerContained = _a.centerContained;\n var diff = childDimension - containerDimension;\n if (diff + 2 * padding <= 0 && centerContained) {\n return [diff / 2, diff / 2];\n }\n else {\n return [min(diff + padding, 0) - padding, max(0, diff + padding)];\n }\n}\n","import { __assign, __extends } from \"tslib\";\nimport React, { Component, createRef, Children, cloneElement } from 'react';\nimport { styleRoot, styleChild, styles } from './styles.css';\nimport { isTouch } from '../utils';\nimport { getOffsetBounds } from './getOffsetBounds';\nvar classnames = function (base, other) {\n return other ? \"\".concat(base, \" \").concat(other) : base;\n};\nvar abs = Math.abs, min = Math.min, sqrt = Math.sqrt;\nvar isSsr = typeof window === 'undefined';\nvar isMac = isSsr ? false : /(Mac)/i.test(navigator.platform);\nvar isDragInteraction = function (i) { return i === 'drag'; };\nvar isZoomInteraction = function (i) { return i === 'zoom'; };\nvar isZoomGesture = function (wheelEvent) { return isMac && wheelEvent.ctrlKey; };\nvar cancelEvent = function (event) {\n event.stopPropagation();\n event.preventDefault();\n};\nvar getDistance = function (a, b) {\n var x = a.x - b.x;\n var y = a.y - b.y;\n return sqrt(x * x + y * y);\n};\nvar calculateScale = function (startTouches, endTouches) {\n var startDistance = getDistance(startTouches[0], startTouches[1]);\n var endDistance = getDistance(endTouches[0], endTouches[1]);\n return endDistance / startDistance;\n};\nvar isCloseTo = function (value, expected) {\n return value > expected - 0.01 && value < expected + 0.01;\n};\nvar swing = function (p) { return -Math.cos(p * Math.PI) / 2 + 0.5; };\nvar getPointByPageCoordinates = function (touch) { return ({\n x: touch.pageX,\n y: touch.pageY,\n}); };\nvar getPageCoordinatesByTouches = function (touches) {\n return Array.from(touches).map(getPointByPageCoordinates);\n};\nvar sum = function (a, b) { return a + b; };\nvar getVectorAvg = function (vectors) { return ({\n x: vectors.map(function (_a) {\n var x = _a.x;\n return x;\n }).reduce(sum, 0) / vectors.length,\n y: vectors.map(function (_a) {\n var y = _a.y;\n return y;\n }).reduce(sum, 0) / vectors.length,\n}); };\nvar clamp = function (min, max, value) {\n return value < min ? min : value > max ? max : value;\n};\nvar shouldInterceptWheel = function (event) {\n return !(event.ctrlKey || event.metaKey);\n};\nvar getElementSize = function (element) {\n if (element) {\n var offsetWidth = element.offsetWidth, offsetHeight = element.offsetHeight;\n // Any DOMElement\n if (offsetWidth && offsetHeight) {\n return { width: offsetWidth, height: offsetHeight };\n }\n // Svg support\n var style = getComputedStyle(element);\n var width = parseFloat(style.width);\n var height = parseFloat(style.height);\n if (height && width) {\n return { width: width, height: height };\n }\n }\n return { width: 0, height: 0 };\n};\nvar calculateVelocity = function (startPoint, endPoint) { return ({\n x: endPoint.x - startPoint.x,\n y: endPoint.y - startPoint.y,\n}); };\nvar comparePoints = function (p1, p2) { return p1.x === p2.x && p1.y === p2.y; };\nvar noup = function () { };\nvar zeroPoint = { x: 0, y: 0 };\nvar PinchZoom = /** @class */ (function (_super) {\n __extends(PinchZoom, _super);\n function PinchZoom() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this._prevDragMovePoint = null;\n _this._containerObserver = null;\n _this._fingers = 0;\n _this._firstMove = true;\n _this._initialOffset = __assign({}, zeroPoint);\n _this._interaction = null;\n _this._isDoubleTap = false;\n _this._isOffsetsSet = false;\n _this._lastDragPosition = null;\n _this._lastScale = 1;\n _this._lastTouchStart = 0;\n _this._lastZoomCenter = null;\n _this._listenMouseMove = false;\n _this._nthZoom = 0;\n _this._offset = __assign({}, zeroPoint);\n _this._startOffset = __assign({}, zeroPoint);\n _this._startTouches = null;\n _this._updatePlaned = false;\n _this._wheelTimeOut = null;\n _this._zoomFactor = 1;\n _this._initialZoomFactor = 1;\n _this._draggingPoint = __assign({}, zeroPoint);\n // It help reduce behavior difference between touch and mouse events\n _this._ignoreNextClick = false;\n // @ts-ignore\n _this._containerRef = createRef();\n _this._handleClick = function (clickEvent) {\n if (_this._ignoreNextClick) {\n _this._ignoreNextClick = false;\n clickEvent.stopPropagation();\n }\n };\n _this._onResize = function () {\n var _a;\n if ((_a = _this._containerRef) === null || _a === void 0 ? void 0 : _a.current) {\n _this._updateInitialZoomFactor();\n _this._setupOffsets();\n _this._update();\n }\n };\n _this._handlerOnTouchEnd = _this._handlerIfEnable(function (touchEndEvent) {\n _this._fingers = touchEndEvent.touches.length;\n if (_this.props.shouldCancelHandledTouchEndEvents &&\n (isZoomInteraction(_this._interaction) ||\n (isDragInteraction(_this._interaction) &&\n (_this._startOffset.x !== _this._offset.x ||\n _this._startOffset.y !== _this._offset.y)))) {\n cancelEvent(touchEndEvent);\n }\n if (isDragInteraction(_this._interaction) && !_this._enoughToDrag()) {\n _this._handleClick(touchEndEvent);\n }\n _this._updateInteraction(touchEndEvent);\n });\n _this._handlerOnTouchStart = _this._handlerIfEnable(function (touchStartEvent) {\n _this._firstMove = true;\n _this._fingers = touchStartEvent.touches.length;\n _this._detectDoubleTap(touchStartEvent);\n });\n _this._handlerOnTouchMove = _this._handlerIfEnable(function (touchMoveEvent) {\n if (_this._isDoubleTap) {\n return;\n }\n _this._collectInertia(touchMoveEvent);\n if (_this._firstMove) {\n _this._updateInteraction(touchMoveEvent);\n if (_this._interaction) {\n cancelEvent(touchMoveEvent);\n }\n _this._startOffset = __assign({}, _this._offset);\n _this._startTouches = getPageCoordinatesByTouches(touchMoveEvent.touches);\n }\n else {\n if (isZoomInteraction(_this._interaction)) {\n if (_this._startTouches &&\n _this._startTouches.length === 2 &&\n touchMoveEvent.touches.length === 2) {\n _this._handleZoom(touchMoveEvent, calculateScale(_this._startTouches, getPageCoordinatesByTouches(touchMoveEvent.touches)));\n }\n }\n else if (isDragInteraction(_this._interaction)) {\n _this._handleDrag(touchMoveEvent);\n }\n if (_this._interaction) {\n cancelEvent(touchMoveEvent);\n _this._update();\n }\n }\n _this._firstMove = false;\n });\n _this._handlerWheel = function (wheelEvent) {\n if (_this.props.shouldInterceptWheel(wheelEvent)) {\n return;\n }\n cancelEvent(wheelEvent);\n var pageX = wheelEvent.pageX, pageY = wheelEvent.pageY, deltaY = wheelEvent.deltaY, deltaMode = wheelEvent.deltaMode;\n var scaleDelta = 1;\n if (isZoomGesture(wheelEvent) || deltaMode === 1) {\n scaleDelta = 15;\n }\n var likeTouchEvent = {\n touches: [\n // @ts-ignore\n { pageX: pageX, pageY: pageY },\n ],\n };\n var center = _this._getOffsetByFirstTouch(likeTouchEvent);\n var dScale = deltaY * scaleDelta;\n _this._stopAnimation();\n _this._scaleTo(_this._zoomFactor - dScale / _this.props.wheelScaleFactor, center);\n _this._update();\n clearTimeout(\n // @ts-ignore\n _this._wheelTimeOut);\n _this._wheelTimeOut = setTimeout(function () { return _this._sanitize(); }, 100);\n };\n // @ts-ignore\n _this._handlers = _this.props.isTouch()\n ? [\n ['touchstart', _this._handlerOnTouchStart],\n ['touchend', _this._handlerOnTouchEnd],\n ['touchmove', _this._handlerOnTouchMove],\n ]\n : [\n [\n 'mousemove',\n _this.simulate(_this._handlerOnTouchMove),\n _this.props._document,\n ],\n [\n 'mouseup',\n _this.simulate(_this._handlerOnTouchEnd),\n _this.props._document,\n ],\n ['mousedown', _this.simulate(_this._handlerOnTouchStart)],\n ['click', _this._handleClick],\n ['wheel', _this._handlerWheel],\n ];\n return _this;\n }\n PinchZoom.prototype._handleDragStart = function (event) {\n this._ignoreNextClick = true;\n this.props.onDragStart();\n this._stopAnimation();\n this._resetInertia();\n this._lastDragPosition = null;\n this._hasInteraction = true;\n this._draggingPoint = this._offset;\n this._handleDrag(event);\n };\n PinchZoom.prototype._handleDrag = function (event) {\n var touch = this._getOffsetByFirstTouch(event);\n if (this._enoughToDrag()) {\n this._drag(touch, this._lastDragPosition);\n }\n else {\n this._virtualDrag(touch, this._lastDragPosition);\n }\n this._offset = this._sanitizeOffset(this._offset);\n this._lastDragPosition = touch;\n };\n PinchZoom.prototype._resetInertia = function () {\n this._velocity = null;\n this._prevDragMovePoint = null;\n };\n PinchZoom.prototype._realizeInertia = function () {\n var _this = this;\n var _a = this.props, inertiaFriction = _a.inertiaFriction, inertia = _a.inertia;\n if (!inertia || !this._velocity) {\n return;\n }\n var _b = this._velocity, x = _b.x, y = _b.y;\n if (x || y) {\n this._stopAnimation();\n this._resetInertia();\n var renderFrame = function () {\n x *= inertiaFriction;\n y *= inertiaFriction;\n if (!x && !y) {\n return _this._stopAnimation();\n }\n var prevOffset = __assign({}, _this._offset);\n _this._addOffset({ x: x, y: y });\n _this._offset = _this._sanitizeOffset(_this._offset);\n if (comparePoints(prevOffset, _this._offset)) {\n return _this._stopAnimation();\n }\n _this._update({ isAnimation: true });\n };\n this._animate(renderFrame, { duration: 9999 });\n }\n };\n PinchZoom.prototype._collectInertia = function (_a) {\n var touches = _a.touches;\n if (!this.props.inertia) {\n return;\n }\n var currentCoordinates = getPageCoordinatesByTouches(touches)[0];\n var prevPoint = this._prevDragMovePoint;\n if (prevPoint) {\n this._velocity = calculateVelocity(currentCoordinates, prevPoint);\n }\n this._prevDragMovePoint = currentCoordinates;\n };\n PinchZoom.prototype._handleDragEnd = function () {\n this.props.onDragEnd();\n this._end();\n this._realizeInertia();\n };\n PinchZoom.prototype._handleZoomStart = function () {\n this.props.onZoomStart();\n this._stopAnimation();\n this._lastScale = 1;\n this._nthZoom = 0;\n this._lastZoomCenter = null;\n this._hasInteraction = true;\n };\n PinchZoom.prototype._handleZoom = function (event, newScale) {\n var touchCenter = getVectorAvg(this._getOffsetTouches(event));\n var scale = newScale / this._lastScale;\n this._lastScale = newScale;\n // The first touch events are thrown away since they are not precise\n this._nthZoom += 1;\n if (this._nthZoom > 3) {\n this._scale(scale, touchCenter);\n this._drag(touchCenter, this._lastZoomCenter);\n if (this.props.enforceBoundsDuringZoom) {\n this._offset = this._sanitizeOffset(this._offset);\n }\n }\n this._lastZoomCenter = touchCenter;\n };\n PinchZoom.prototype._handleZoomEnd = function () {\n this.props.onZoomEnd();\n this._end();\n };\n PinchZoom.prototype._handleDoubleTap = function (event) {\n var _this = this;\n if (this._hasInteraction || this.props.tapZoomFactor === 0) {\n return;\n }\n var needZoomOut = (this.props.doubleTapZoomOutOnMaxScale &&\n this._zoomFactor === this.props.maxZoom) ||\n (this.props.doubleTapToggleZoom && this._zoomFactor > 1);\n this.props.onDoubleTap();\n this._ignoreNextClick = true;\n var zoomFactor = this._zoomFactor + this.props.tapZoomFactor;\n var startZoomFactor = this._zoomFactor;\n var updateProgress = function (progress) {\n _this._scaleTo(startZoomFactor + progress * (zoomFactor - startZoomFactor), center);\n };\n var center = this._getOffsetByFirstTouch(event);\n this._isDoubleTap = true;\n if (startZoomFactor > zoomFactor) {\n center = this._getCurrentZoomCenter();\n }\n needZoomOut ? this._zoomOutAnimation() : this._animate(updateProgress);\n };\n PinchZoom.prototype._computeInitialOffset = function () {\n var rect = this._getContainerRect();\n var _a = this._getChildSize(), width = _a.width, height = _a.height;\n var x = -abs(width * this._getInitialZoomFactor() - rect.width) / 2;\n var y = -abs(height * this._getInitialZoomFactor() - rect.height) / 2;\n this._initialOffset = { x: x, y: y };\n };\n PinchZoom.prototype._resetOffset = function () {\n this._offset = __assign({}, this._initialOffset);\n };\n PinchZoom.prototype._setupOffsets = function () {\n if (this.props.setOffsetsOnce && this._isOffsetsSet) {\n return;\n }\n this._isOffsetsSet = true;\n this._computeInitialOffset();\n this._resetOffset();\n };\n PinchZoom.prototype._sanitizeOffset = function (offset) {\n var rect = this._getContainerRect();\n var _a = this._getChildSize(), width = _a.width, height = _a.height;\n var elWidth = width * this._getInitialZoomFactor() * this._zoomFactor;\n var elHeight = height * this._getInitialZoomFactor() * this._zoomFactor;\n var _b = getOffsetBounds({\n containerDimension: rect.width,\n childDimension: elWidth,\n padding: this.props.horizontalPadding,\n centerContained: this.props.centerContained,\n }), minOffsetX = _b[0], maxOffsetX = _b[1];\n var _c = getOffsetBounds({\n containerDimension: rect.height,\n childDimension: elHeight,\n padding: this.props.verticalPadding,\n centerContained: this.props.centerContained,\n }), minOffsetY = _c[0], maxOffsetY = _c[1];\n return {\n x: clamp(minOffsetX, maxOffsetX, offset.x),\n y: clamp(minOffsetY, maxOffsetY, offset.y),\n };\n };\n PinchZoom.prototype.alignCenter = function (options) {\n var _this = this;\n var _a = __assign({ duration: 250, animated: true }, options), __x = _a.x, __y = _a.y, scale = _a.scale, animated = _a.animated, duration = _a.duration;\n // Bug-Fix: https://github.com/retyui/react-quick-pinch-zoom/issues/58\n var x = __x * this._initialZoomFactor;\n var y = __y * this._initialZoomFactor;\n var startZoomFactor = this._zoomFactor;\n var startOffset = __assign({}, this._offset);\n var rect = this._getContainerRect();\n var containerCenter = { x: rect.width / 2, y: rect.height / 2 };\n this._zoomFactor = 1;\n this._offset = { x: -(containerCenter.x - x), y: -(containerCenter.y - y) };\n this._scaleTo(scale, containerCenter);\n this._stopAnimation();\n if (!animated) {\n return this._update();\n }\n var diffZoomFactor = this._zoomFactor - startZoomFactor;\n var diffOffset = {\n x: this._offset.x - startOffset.x,\n y: this._offset.y - startOffset.y,\n };\n this._zoomFactor = startZoomFactor;\n this._offset = __assign({}, startOffset);\n var updateFrame = function (progress) {\n var x = startOffset.x + diffOffset.x * progress;\n var y = startOffset.y + diffOffset.y * progress;\n _this._zoomFactor = startZoomFactor + diffZoomFactor * progress;\n _this._offset = _this._sanitizeOffset({ x: x, y: y });\n _this._update();\n };\n this._animate(updateFrame, {\n callback: function () { return _this._sanitize(); },\n duration: duration,\n });\n };\n PinchZoom.prototype.scaleTo = function (options) {\n var _this = this;\n var _a = __assign({ duration: 250, animated: true }, options), x = _a.x, y = _a.y, scale = _a.scale, animated = _a.animated, duration = _a.duration;\n var startZoomFactor = this._zoomFactor;\n var startOffset = __assign({}, this._offset);\n this._zoomFactor = 1;\n this._offset = { x: 0, y: 0 };\n this._scaleTo(scale, { x: x, y: y });\n this._stopAnimation();\n if (!animated) {\n return this._update();\n }\n var diffZoomFactor = this._zoomFactor - startZoomFactor;\n var diffOffset = {\n x: this._offset.x - startOffset.x,\n y: this._offset.y - startOffset.y,\n };\n this._zoomFactor = startZoomFactor;\n this._offset = __assign({}, startOffset);\n var updateFrame = function (progress) {\n var x = startOffset.x + diffOffset.x * progress;\n var y = startOffset.y + diffOffset.y * progress;\n _this._zoomFactor = startZoomFactor + diffZoomFactor * progress;\n _this._offset = { x: x, y: y };\n _this._update();\n };\n this._animate(updateFrame, { callback: function () { return _this._sanitize(); }, duration: duration });\n };\n PinchZoom.prototype._scaleTo = function (zoomFactor, center) {\n this._scale(zoomFactor / this._zoomFactor, center);\n this._offset = this._sanitizeOffset(this._offset);\n };\n PinchZoom.prototype._scale = function (scale, center) {\n scale = this._scaleZoomFactor(scale);\n this._addOffset({\n x: (scale - 1) * (center.x + this._offset.x),\n y: (scale - 1) * (center.y + this._offset.y),\n });\n this.props.onZoomUpdate();\n };\n PinchZoom.prototype._scaleZoomFactor = function (scale) {\n var originalZoomFactor = this._zoomFactor;\n this._zoomFactor *= scale;\n this._zoomFactor = clamp(this.props.minZoom, this.props.maxZoom, this._zoomFactor);\n return this._zoomFactor / originalZoomFactor;\n };\n PinchZoom.prototype._canDrag = function () {\n return this.props.draggableUnZoomed || !isCloseTo(this._zoomFactor, 1);\n };\n PinchZoom.prototype._drag = function (center, lastCenter) {\n if (lastCenter) {\n var y = -(center.y - lastCenter.y);\n var x = -(center.x - lastCenter.x);\n if (!this.props.lockDragAxis) {\n this._addOffset({\n x: x,\n y: y,\n });\n }\n else {\n // lock scroll to position that was changed the most\n if (abs(x) > abs(y)) {\n this._addOffset({\n x: x,\n y: 0,\n });\n }\n else {\n this._addOffset({\n y: y,\n x: 0,\n });\n }\n }\n this.props.onDragUpdate();\n }\n };\n PinchZoom.prototype._virtualDrag = function (center, lastCenter) {\n if (lastCenter) {\n var y = -(center.y - lastCenter.y);\n var x = -(center.x - lastCenter.x);\n this._draggingPoint = {\n x: x + this._draggingPoint.x,\n y: y + this._draggingPoint.y,\n };\n }\n };\n PinchZoom.prototype._addOffset = function (offset) {\n var _a = this._offset, x = _a.x, y = _a.y;\n this._offset = {\n x: x + offset.x,\n y: y + offset.y,\n };\n };\n PinchZoom.prototype._sanitize = function () {\n if (this._zoomFactor < this.props.zoomOutFactor) {\n this._resetInertia();\n this._zoomOutAnimation();\n }\n else if (this._isInsaneOffset()) {\n this._sanitizeOffsetAnimation();\n }\n };\n PinchZoom.prototype._isInsaneOffset = function () {\n var offset = this._offset;\n var sanitizedOffset = this._sanitizeOffset(offset);\n return sanitizedOffset.x !== offset.x || sanitizedOffset.y !== offset.y;\n };\n PinchZoom.prototype._sanitizeOffsetAnimation = function () {\n var _this = this;\n var targetOffset = this._sanitizeOffset(this._offset);\n var startOffset = __assign({}, this._offset);\n var updateProgress = function (progress) {\n var x = startOffset.x + progress * (targetOffset.x - startOffset.x);\n var y = startOffset.y + progress * (targetOffset.y - startOffset.y);\n _this._offset = { x: x, y: y };\n _this._update();\n };\n this._animate(updateProgress);\n };\n PinchZoom.prototype._zoomOutAnimation = function () {\n var _this = this;\n if (this._zoomFactor === 1) {\n return;\n }\n var startZoomFactor = this._zoomFactor;\n var zoomFactor = 1;\n var center = this._getCurrentZoomCenter();\n var updateProgress = function (progress) {\n var scaleFactor = startZoomFactor + progress * (zoomFactor - startZoomFactor);\n _this._scaleTo(scaleFactor, center);\n };\n this._animate(updateProgress);\n };\n PinchZoom.prototype._getInitialZoomFactor = function () {\n return this._initialZoomFactor;\n };\n PinchZoom.prototype._getCurrentZoomCenter = function () {\n var _a = this._offset, x = _a.x, y = _a.y;\n var offsetLeft = x - this._initialOffset.x;\n var offsetTop = y - this._initialOffset.y;\n return {\n x: -1 * x - offsetLeft / (1 / this._zoomFactor - 1),\n y: -1 * y - offsetTop / (1 / this._zoomFactor - 1),\n };\n };\n PinchZoom.prototype._getOffsetByFirstTouch = function (event) {\n return this._getOffsetTouches(event)[0];\n };\n PinchZoom.prototype._getOffsetTouches = function (event) {\n var _document = this.props._document;\n var _html = _document.documentElement;\n var _body = _document.body;\n var _a = this._getContainerRect(), top = _a.top, left = _a.left;\n var scrollTop = _html.scrollTop || _body.scrollTop;\n var scrollLeft = _html.scrollLeft || _body.scrollLeft;\n var posTop = top + scrollTop;\n var posLeft = left + scrollLeft;\n return getPageCoordinatesByTouches(event.touches).map(function (_a) {\n var x = _a.x, y = _a.y;\n return ({\n x: x - posLeft,\n y: y - posTop,\n });\n });\n };\n PinchZoom.prototype._animate = function (frameFn, options) {\n var _this = this;\n var startTime = new Date().getTime();\n var _a = __assign({ timeFn: swing, callback: function () { }, duration: this.props.animationDuration }, options), timeFn = _a.timeFn, callback = _a.callback, duration = _a.duration;\n var renderFrame = function () {\n if (!_this._inAnimation) {\n return;\n }\n var frameTime = new Date().getTime() - startTime;\n var progress = frameTime / duration;\n if (frameTime >= duration) {\n frameFn(1);\n _this._stopAnimation();\n callback();\n _this._update();\n }\n else {\n progress = timeFn(progress);\n frameFn(progress);\n _this._update({ isAnimation: true });\n requestAnimationFrame(renderFrame);\n }\n };\n this._inAnimation = true;\n requestAnimationFrame(renderFrame);\n };\n PinchZoom.prototype._stopAnimation = function () {\n this._inAnimation = false;\n };\n PinchZoom.prototype._end = function () {\n this._hasInteraction = false;\n this._sanitize();\n this._update();\n };\n PinchZoom.prototype._getContainerRect = function () {\n var div = this._containerRef.current;\n return div.getBoundingClientRect();\n };\n PinchZoom.prototype._getChildSize = function () {\n var div = this._containerRef.current;\n return getElementSize(div === null || div === void 0 ? void 0 : div.firstElementChild);\n };\n PinchZoom.prototype._updateInitialZoomFactor = function () {\n var rect = this._getContainerRect();\n var size = this._getChildSize();\n var xZoomFactor = rect.width / size.width;\n var yZoomFactor = rect.height / size.height;\n this._initialZoomFactor = min(xZoomFactor, yZoomFactor);\n };\n PinchZoom.prototype._bindEvents = function () {\n var _this = this;\n var div = this._containerRef.current;\n if (window.ResizeObserver) {\n this._containerObserver = new ResizeObserver(this._onResize);\n this._containerObserver.observe(div);\n }\n else {\n window.addEventListener('resize', this._onResize);\n }\n this._handlers.forEach(function (_a) {\n var eventName = _a[0], fn = _a[1], target = _a[2];\n (target || div).addEventListener(eventName, fn, true);\n });\n Array.from(div.querySelectorAll('img')).forEach(function (img) {\n return img.addEventListener('load', _this._onResize);\n });\n };\n PinchZoom.prototype._unSubscribe = function () {\n var _this = this;\n var div = this._containerRef.current;\n if (this._containerObserver) {\n this._containerObserver.disconnect();\n this._containerObserver = null;\n }\n window.removeEventListener('resize', this._onResize);\n this._handlers.forEach(function (_a) {\n var eventName = _a[0], fn = _a[1], target = _a[2];\n (target || div).removeEventListener(eventName, fn, true);\n });\n Array.from(div.querySelectorAll('img')).forEach(function (img) {\n return img.removeEventListener('load', _this._onResize);\n });\n };\n PinchZoom.prototype._update = function (options) {\n var _this = this;\n if (this._updatePlaned) {\n return;\n }\n var updateFrame = function () {\n var scale = _this._getInitialZoomFactor() * _this._zoomFactor;\n var x = -_this._offset.x / scale;\n var y = -_this._offset.y / scale;\n _this.props.onUpdate({ scale: scale, x: x, y: y });\n };\n if (options === null || options === void 0 ? void 0 : options.isAnimation) {\n return updateFrame();\n }\n this._updatePlaned = true;\n requestAnimationFrame(function () {\n _this._updatePlaned = false;\n updateFrame();\n });\n };\n PinchZoom.prototype._handlerIfEnable = function (fn) {\n var _this = this;\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (_this.props.enabled) {\n fn.apply(void 0, args);\n }\n };\n };\n PinchZoom.prototype._setInteraction = function (newInteraction, event) {\n var interaction = this._interaction;\n if (interaction !== newInteraction) {\n if (interaction && !newInteraction) {\n if (isZoomInteraction(interaction)) {\n this._handleZoomEnd();\n }\n else if (isDragInteraction(interaction)) {\n this._handleDragEnd();\n }\n }\n if (isZoomInteraction(newInteraction)) {\n this._handleZoomStart();\n }\n else if (isDragInteraction(newInteraction)) {\n this._handleDragStart(event);\n }\n }\n this._interaction = newInteraction;\n };\n PinchZoom.prototype._distanceBetweenNumbers = function (a, b) {\n return a > b ? a - b : b - a;\n };\n PinchZoom.prototype._enoughToDrag = function () {\n if (this._distanceBetweenNumbers(this._startOffset.x, this._draggingPoint.x) >\n 5 ||\n this._distanceBetweenNumbers(this._startOffset.y, this._draggingPoint.y) >\n 5)\n return true;\n return false;\n };\n PinchZoom.prototype._updateInteraction = function (event) {\n var fingers = this._fingers;\n if (fingers === 2) {\n return this._setInteraction('zoom', event);\n }\n if (fingers === 1 && this._canDrag()) {\n return this._setInteraction('drag', event);\n }\n this._setInteraction(null, event);\n };\n PinchZoom.prototype._detectDoubleTap = function (event) {\n var time = new Date().getTime();\n if (this._fingers > 1) {\n this._lastTouchStart = 0;\n }\n if (time - this._lastTouchStart < 300) {\n cancelEvent(event);\n this._handleDoubleTap(event);\n if (isZoomInteraction(this._interaction)) {\n this._handleZoomEnd();\n }\n else if (isDragInteraction(this._interaction)) {\n this._handleDragEnd();\n }\n }\n else {\n this._isDoubleTap = false;\n }\n if (this._fingers === 1) {\n this._lastTouchStart = time;\n }\n };\n PinchZoom.prototype.simulate = function (fn) {\n var _this = this;\n return function (mouseEvent) {\n var pageX = mouseEvent.pageX, pageY = mouseEvent.pageY, type = mouseEvent.type;\n var isEnd = type === 'mouseup';\n var isStart = type === 'mousedown';\n if (isStart) {\n mouseEvent.preventDefault();\n _this._listenMouseMove = true;\n }\n if (_this._listenMouseMove) {\n // @ts-ignore\n mouseEvent.touches = isEnd ? [] : [{ pageX: pageX, pageY: pageY }];\n fn(\n // @ts-ignore\n mouseEvent);\n }\n if (isEnd) {\n _this._listenMouseMove = false;\n }\n };\n };\n PinchZoom.prototype.componentDidMount = function () {\n this._bindEvents();\n this._update();\n };\n PinchZoom.prototype.componentWillUnmount = function () {\n this._stopAnimation();\n this._unSubscribe();\n };\n PinchZoom.prototype.render = function () {\n var _a = this.props, children = _a.children, containerProps = _a.containerProps;\n var child = Children.only(children);\n var props = containerProps || {};\n return (React.createElement(React.Fragment, null,\n React.createElement(\"style\", null, styles),\n React.createElement(\"div\", __assign({}, props, { ref: this._containerRef, className: classnames(styleRoot, props.className) }), cloneElement(child, {\n className: classnames(styleChild, child.props.className),\n }))));\n };\n PinchZoom.defaultProps = {\n animationDuration: 250,\n draggableUnZoomed: true,\n enforceBoundsDuringZoom: false,\n centerContained: false,\n enabled: true,\n inertia: true,\n inertiaFriction: 0.96,\n horizontalPadding: 0,\n isTouch: isTouch,\n lockDragAxis: false,\n maxZoom: 5,\n minZoom: 0.5,\n onDoubleTap: noup,\n onDragEnd: noup,\n onDragStart: noup,\n onDragUpdate: noup,\n onZoomEnd: noup,\n onZoomStart: noup,\n onZoomUpdate: noup,\n setOffsetsOnce: false,\n shouldInterceptWheel: shouldInterceptWheel,\n shouldCancelHandledTouchEndEvents: false,\n tapZoomFactor: 1,\n verticalPadding: 0,\n wheelScaleFactor: 1500,\n zoomOutFactor: 1.3,\n doubleTapZoomOutOnMaxScale: false,\n doubleTapToggleZoom: false,\n // @ts-expect-error\n _document: isSsr ? null : window.document,\n };\n return PinchZoom;\n}(Component));\nif (process.env.NODE_ENV !== 'production') {\n var _a = require('prop-types'), any = _a.any, element = _a.element, object = _a.object, number = _a.number, func = _a.func, bool = _a.bool;\n // @ts-ignore\n PinchZoom.propTypes = {\n children: element,\n containerProps: object,\n wheelScaleFactor: number,\n animationDuration: number,\n draggableUnZoomed: bool,\n enforceBoundsDuringZoom: bool,\n centerContained: bool,\n enabled: bool,\n horizontalPadding: number,\n lockDragAxis: bool,\n onUpdate: func.isRequired,\n maxZoom: number,\n minZoom: number,\n onDoubleTap: func,\n onDragEnd: func,\n onDragStart: func,\n onDragUpdate: func,\n onZoomEnd: func,\n onZoomStart: func,\n onZoomUpdate: func,\n setOffsetsOnce: bool,\n tapZoomFactor: number,\n verticalPadding: number,\n zoomOutFactor: number,\n doubleTapZoomOutOnMaxScale: bool,\n doubleTapToggleZoom: bool,\n isTouch: func,\n _document: any,\n };\n}\nexport default PinchZoom;\n","export default function formatDuration(time) {\n if (!time) return;\n let hours = Math.floor(time / 3600);\n let minutes = Math.floor((time % 3600) / 60);\n let seconds = Math.round(time % 60);\n\n if (hours === 0) {\n return `${minutes}:${seconds.toString().padStart(2, '0')}`;\n } else {\n return `${hours}:${minutes.toString().padStart(2, '0')}:${seconds\n .toString()\n .padStart(2, '0')}`;\n }\n}\n","import { getBlurHashAverageColor } from 'fast-blurhash';\nimport { Fragment } from 'preact';\nimport { memo } from 'preact/compat';\nimport {\n useCallback,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'preact/hooks';\nimport QuickPinchZoom, { make3dTransformValue } from 'react-quick-pinch-zoom';\n\nimport formatDuration from '../utils/format-duration';\nimport mem from '../utils/mem';\nimport states from '../utils/states';\n\nimport Icon from './icon';\nimport Link from './link';\n\nconst isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent); // https://stackoverflow.com/a/23522755\n\n/*\nMedia type\n===\nunknown = unsupported or unrecognized file type\nimage = Static image\ngifv = Looping, soundless animation\nvideo = Video clip\naudio = Audio track\n*/\n\nconst dataAltLabel = 'ALT';\nconst AltBadge = (props) => {\n const { alt, lang, index, ...rest } = props;\n if (!alt || !alt.trim()) return null;\n return (\n {\n e.stopPropagation();\n e.preventDefault();\n states.showMediaAlt = {\n alt,\n lang,\n };\n }}\n title=\"Media description\"\n >\n {dataAltLabel}\n {!!index && {index}}\n \n );\n};\n\nconst MEDIA_CAPTION_LIMIT = 140;\nconst MEDIA_CAPTION_LIMIT_LONGER = 280;\nexport const isMediaCaptionLong = mem((caption) =>\n caption?.length\n ? caption.length > MEDIA_CAPTION_LIMIT ||\n /[\\n\\r].*[\\n\\r]/.test(caption.trim())\n : false,\n);\n\nfunction Media({\n class: className = '',\n media,\n to,\n lang,\n showOriginal,\n autoAnimate,\n showCaption,\n allowLongerCaption,\n altIndex,\n onClick = () => {},\n}) {\n let {\n blurhash,\n description,\n meta,\n previewRemoteUrl,\n previewUrl,\n remoteUrl,\n url,\n type,\n } = media;\n if (/no\\-preview\\./i.test(previewUrl)) {\n previewUrl = null;\n }\n const { original = {}, small, focus } = meta || {};\n\n const width = showOriginal\n ? original?.width\n : small?.width || original?.width;\n const height = showOriginal\n ? original?.height\n : small?.height || original?.height;\n const mediaURL = showOriginal ? url : previewUrl || url;\n const remoteMediaURL = showOriginal\n ? remoteUrl\n : previewRemoteUrl || remoteUrl;\n const hasDimensions = width && height;\n const orientation = hasDimensions\n ? width > height\n ? 'landscape'\n : 'portrait'\n : null;\n\n const rgbAverageColor = blurhash ? getBlurHashAverageColor(blurhash) : null;\n\n const videoRef = useRef();\n\n let focalPosition;\n if (focus) {\n // Convert focal point to CSS background position\n // Formula from jquery-focuspoint\n // x = -1, y = 1 => 0% 0%\n // x = 0, y = 0 => 50% 50%\n // x = 1, y = -1 => 100% 100%\n const x = ((focus.x + 1) / 2) * 100;\n const y = ((1 - focus.y) / 2) * 100;\n focalPosition = `${x.toFixed(0)}% ${y.toFixed(0)}%`;\n }\n\n const mediaRef = useRef();\n const onUpdate = useCallback(({ x, y, scale }) => {\n const { current: media } = mediaRef;\n\n if (media) {\n const value = make3dTransformValue({ x, y, scale });\n\n if (scale === 1) {\n media.style.removeProperty('transform');\n } else {\n media.style.setProperty('transform', value);\n }\n\n media.closest('.media-zoom').style.touchAction =\n scale <= 1.01 ? 'pan-x' : '';\n }\n }, []);\n\n const [pinchZoomEnabled, setPinchZoomEnabled] = useState(false);\n const quickPinchZoomProps = {\n enabled: pinchZoomEnabled,\n draggableUnZoomed: false,\n inertiaFriction: 0.9,\n tapZoomFactor: 2,\n doubleTapToggleZoom: true,\n containerProps: {\n className: 'media-zoom',\n style: {\n overflow: 'visible',\n // width: 'inherit',\n // height: 'inherit',\n // justifyContent: 'inherit',\n // alignItems: 'inherit',\n // display: 'inherit',\n },\n },\n onUpdate,\n };\n\n const Parent = useMemo(\n () => (to ? (props) => : 'div'),\n [to],\n );\n\n const remoteMediaURLObj = remoteMediaURL ? getURLObj(remoteMediaURL) : null;\n const isVideoMaybe =\n type === 'unknown' &&\n remoteMediaURLObj &&\n /\\.(mp4|m4r|m4v|mov|webm)$/i.test(remoteMediaURLObj.pathname);\n const isAudioMaybe =\n type === 'unknown' &&\n remoteMediaURLObj &&\n /\\.(mp3|ogg|wav|m4a|m4p|m4b)$/i.test(remoteMediaURLObj.pathname);\n const isImage =\n type === 'image' ||\n (type === 'unknown' && previewUrl && !isVideoMaybe && !isAudioMaybe);\n\n const parentRef = useRef();\n const [imageSmallerThanParent, setImageSmallerThanParent] = useState(false);\n useLayoutEffect(() => {\n if (!isImage) return;\n if (!showOriginal) return;\n if (!parentRef.current) return;\n const { offsetWidth, offsetHeight } = parentRef.current;\n const smaller = width < offsetWidth && height < offsetHeight;\n if (smaller) setImageSmallerThanParent(smaller);\n }, [width, height]);\n\n const maxAspectHeight =\n window.innerHeight * (orientation === 'portrait' ? 0.45 : 0.33);\n const maxHeight = orientation === 'portrait' ? 0 : 160;\n const averageColorStyle = {\n '--average-color': rgbAverageColor && `rgb(${rgbAverageColor.join(',')})`,\n };\n const mediaStyles =\n width && height\n ? {\n '--width': `${width}px`,\n '--height': `${height}px`,\n // Calculate '--aspectWidth' based on aspect ratio calculated from '--width' and '--height', max height has to be 160px\n '--aspectWidth': `${\n (width / height) * Math.max(maxHeight, maxAspectHeight)\n }px`,\n aspectRatio: `${width} / ${height}`,\n ...averageColorStyle,\n }\n : {\n ...averageColorStyle,\n };\n\n const longDesc = isMediaCaptionLong(description);\n let showInlineDesc =\n !!showCaption && !showOriginal && !!description && !longDesc;\n if (\n allowLongerCaption &&\n !showInlineDesc &&\n description?.length <= MEDIA_CAPTION_LIMIT_LONGER\n ) {\n showInlineDesc = true;\n }\n const Figure = !showInlineDesc\n ? Fragment\n : (props) => {\n const { children, ...restProps } = props;\n return (\n
    \n {children}\n {\n e.preventDefault();\n e.stopPropagation();\n states.showMediaAlt = {\n alt: description,\n lang,\n };\n }}\n >\n {description}\n \n
    \n );\n };\n\n const [hasNaturalAspectRatio, setHasNaturalAspectRatio] = useState(undefined);\n\n if (isImage) {\n // Note: type: unknown might not have width/height\n quickPinchZoomProps.containerProps.style.display = 'inherit';\n\n useLayoutEffect(() => {\n if (!isSafari) return;\n if (!showOriginal) return;\n (async () => {\n try {\n await fetch(mediaURL, { mode: 'no-cors' });\n mediaRef.current.src = mediaURL;\n } catch (e) {\n // Ignore\n }\n })();\n }, [mediaURL]);\n\n return (\n
    \n \n {showOriginal ? (\n \n {\n e.target.closest('.media-image').style.backgroundImage = '';\n e.target.closest('.media-zoom').style.display = '';\n setPinchZoomEnabled(true);\n }}\n onError={(e) => {\n const { src } = e.target;\n if (\n src === mediaURL &&\n remoteMediaURL &&\n mediaURL !== remoteMediaURL\n ) {\n e.target.src = remoteMediaURL;\n }\n }}\n />\n \n ) : (\n <>\n {\n // e.target.closest('.media-image').style.backgroundImage = '';\n e.target.dataset.loaded = true;\n const $media = e.target.closest('.media');\n if (!hasDimensions && $media) {\n const { naturalWidth, naturalHeight } = e.target;\n $media.dataset.orientation =\n naturalWidth > naturalHeight ? 'landscape' : 'portrait';\n $media.style.setProperty('--width', `${naturalWidth}px`);\n $media.style.setProperty('--height', `${naturalHeight}px`);\n $media.style.aspectRatio = `${naturalWidth}/${naturalHeight}`;\n }\n\n // Check natural aspect ratio vs display aspect ratio\n if ($media) {\n const {\n clientWidth,\n clientHeight,\n naturalWidth,\n naturalHeight,\n } = e.target;\n if (\n clientWidth &&\n clientHeight &&\n naturalWidth &&\n naturalHeight\n ) {\n const minDimension = 88;\n if (\n naturalWidth < minDimension ||\n naturalHeight < minDimension\n ) {\n $media.dataset.hasSmallDimension = true;\n } else {\n const displayNaturalHeight =\n (naturalHeight * clientWidth) / naturalWidth;\n const almostSimilarHeight =\n Math.abs(displayNaturalHeight - clientHeight) < 5;\n\n if (almostSimilarHeight) {\n setHasNaturalAspectRatio(true);\n }\n }\n }\n }\n }}\n onError={(e) => {\n const { src } = e.target;\n if (src === mediaURL && mediaURL !== remoteMediaURL) {\n e.target.src = remoteMediaURL;\n }\n }}\n />\n {!showInlineDesc && (\n \n )}\n \n )}\n \n
    \n );\n } else if (type === 'gifv' || type === 'video' || isVideoMaybe) {\n const hasDuration = original.duration > 0;\n const shortDuration = original.duration < 31;\n const isGIF = type === 'gifv' && shortDuration;\n // If GIF is too long, treat it as a video\n const loopable = original.duration < 61;\n const formattedDuration = formatDuration(original.duration);\n const hoverAnimate = !showOriginal && !autoAnimate && isGIF;\n const autoGIFAnimate = !showOriginal && autoAnimate && isGIF;\n const showProgress = original.duration > 5;\n\n // This string is only for autoplay + muted to work on Mobile Safari\n const gifHTML = `\n \n `;\n\n const videoHTML = `\n \n `;\n\n return (\n
    \n {\n if (hoverAnimate) {\n try {\n videoRef.current.pause();\n } catch (e) {}\n }\n onClick(e);\n }}\n onMouseEnter={() => {\n if (hoverAnimate) {\n try {\n videoRef.current.play();\n } catch (e) {}\n }\n }}\n onMouseLeave={() => {\n if (hoverAnimate) {\n try {\n videoRef.current.pause();\n } catch (e) {}\n }\n }}\n onFocus={() => {\n if (hoverAnimate) {\n try {\n videoRef.current.play();\n } catch (e) {}\n }\n }}\n onBlur={() => {\n if (hoverAnimate) {\n try {\n videoRef.current.pause();\n } catch (e) {}\n }\n }}\n >\n {showOriginal || autoGIFAnimate ? (\n isGIF && showOriginal ? (\n \n \n \n ) : isGIF ? (\n \n ) : (\n \n )\n ) : isGIF ? (\n {\n const { target } = e;\n const container = target?.closest('.media-gif');\n if (container) {\n const percentage =\n (target.currentTime / target.duration) * 100;\n container.style.setProperty(\n '--progress',\n `${percentage}%`,\n );\n }\n }\n : undefined\n }\n />\n ) : (\n <>\n {previewUrl ? (\n {\n if (!hasDimensions) {\n const $media = e.target.closest('.media');\n if ($media) {\n const { naturalHeight, naturalWidth } = e.target;\n $media.dataset.orientation =\n naturalWidth > naturalHeight\n ? 'landscape'\n : 'portrait';\n $media.style.setProperty(\n '--width',\n `${naturalWidth}px`,\n );\n $media.style.setProperty(\n '--height',\n `${naturalHeight}px`,\n );\n $media.style.aspectRatio = `${naturalWidth}/${naturalHeight}`;\n }\n }\n }}\n />\n ) : (\n {\n if (!hasDuration) {\n const { duration } = e.target;\n if (duration) {\n const formattedDuration = formatDuration(duration);\n const container = e.target.closest('.media-video');\n if (container) {\n container.dataset.formattedDuration =\n formattedDuration;\n }\n }\n }\n }}\n />\n )}\n
    \n \n
    \n \n )}\n {!showOriginal && !showInlineDesc && (\n \n )}\n \n
    \n );\n } else if (type === 'audio' || isAudioMaybe) {\n const formattedDuration = formatDuration(original.duration);\n return (\n
    \n \n {showOriginal ? (\n
    \n );\n }\n}\n\nfunction getURLObj(url) {\n // Fake base URL if url doesn't have https:// prefix\n return URL.parse(url, location.origin);\n}\n\nexport default memo(Media, (oldProps, newProps) => {\n const oldMedia = oldProps.media || {};\n const newMedia = newProps.media || {};\n\n return (\n oldMedia?.id === newMedia?.id &&\n oldMedia.url === newMedia.url &&\n oldProps.to === newProps.to &&\n oldProps.class === newProps.class\n );\n});\n","import './status.css';\nimport '@justinribeiro/lite-youtube';\n\nimport {\n ControlledMenu,\n Menu,\n MenuDivider,\n MenuHeader,\n MenuItem,\n} from '@szhsin/react-menu';\nimport { decodeBlurHash, getBlurHashAverageColor } from 'fast-blurhash';\nimport { shallowEqual } from 'fast-equals';\nimport prettify from 'html-prettify';\nimport pThrottle from 'p-throttle';\nimport { Fragment } from 'preact';\nimport { memo } from 'preact/compat';\nimport {\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'preact/hooks';\nimport punycode from 'punycode/';\nimport { useHotkeys } from 'react-hotkeys-hook';\nimport { detectAll } from 'tinyld/light';\nimport { useLongPress } from 'use-long-press';\nimport { useSnapshot } from 'valtio';\n\nimport CustomEmoji from '../components/custom-emoji';\nimport EmojiText from '../components/emoji-text';\nimport LazyShazam from '../components/lazy-shazam';\nimport Loader from '../components/loader';\nimport MenuConfirm from '../components/menu-confirm';\nimport Menu2 from '../components/menu2';\nimport Modal from '../components/modal';\nimport NameText from '../components/name-text';\nimport Poll from '../components/poll';\nimport { api } from '../utils/api';\nimport emojifyText from '../utils/emojify-text';\nimport enhanceContent from '../utils/enhance-content';\nimport FilterContext from '../utils/filter-context';\nimport { isFiltered } from '../utils/filters';\nimport getTranslateTargetLanguage from '../utils/get-translate-target-language';\nimport getHTMLText from '../utils/getHTMLText';\nimport handleContentLinks from '../utils/handle-content-links';\nimport htmlContentLength from '../utils/html-content-length';\nimport isRTL from '../utils/is-rtl';\nimport isMastodonLinkMaybe from '../utils/isMastodonLinkMaybe';\nimport localeMatch from '../utils/locale-match';\nimport mem from '../utils/mem';\nimport niceDateTime from '../utils/nice-date-time';\nimport openCompose from '../utils/open-compose';\nimport pmem from '../utils/pmem';\nimport safeBoundingBoxPadding from '../utils/safe-bounding-box-padding';\nimport shortenNumber from '../utils/shorten-number';\nimport showCompose from '../utils/show-compose';\nimport showToast from '../utils/show-toast';\nimport { speak, supportsTTS } from '../utils/speech';\nimport states, { getStatus, saveStatus, statusKey } from '../utils/states';\nimport statusPeek from '../utils/status-peek';\nimport store from '../utils/store';\nimport { getCurrentAccountID } from '../utils/store-utils';\nimport supports from '../utils/supports';\nimport unfurlMastodonLink from '../utils/unfurl-link';\nimport useTruncated from '../utils/useTruncated';\nimport visibilityIconsMap from '../utils/visibility-icons-map';\n\nimport Avatar from './avatar';\nimport Icon from './icon';\nimport Link from './link';\nimport Media, { isMediaCaptionLong } from './media';\nimport MenuLink from './menu-link';\nimport RelativeTime from './relative-time';\nimport TranslationBlock from './translation-block';\n\nconst SHOW_COMMENT_COUNT_LIMIT = 280;\nconst INLINE_TRANSLATE_LIMIT = 140;\n\nconst throttle = pThrottle({\n limit: 1,\n interval: 1000,\n});\nfunction fetchAccount(id, masto) {\n return masto.v1.accounts.$select(id).fetch();\n}\nconst memFetchAccount = pmem(throttle(fetchAccount));\n\nconst visibilityText = {\n public: 'Public',\n unlisted: 'Unlisted',\n private: 'Followers only',\n direct: 'Private mention',\n};\n\nconst isIOS =\n window.ontouchstart !== undefined &&\n /iPad|iPhone|iPod/.test(navigator.userAgent);\n\nconst rtf = new Intl.RelativeTimeFormat();\n\nconst REACTIONS_LIMIT = 80;\n\nfunction getPollText(poll) {\n if (!poll?.options?.length) return '';\n return `📊:\\n${poll.options\n .map(\n (option) =>\n `- ${option.title}${\n option.votesCount >= 0 ? ` (${option.votesCount})` : ''\n }`,\n )\n .join('\\n')}`;\n}\nfunction getPostText(status) {\n const { spoilerText, content, poll } = status;\n return (\n (spoilerText ? `${spoilerText}\\n\\n` : '') +\n getHTMLText(content) +\n getPollText(poll)\n );\n}\n\nconst PostContent = memo(\n ({ post, instance, previewMode }) => {\n const { content, emojis, language, mentions, url } = post;\n return (\n {\n // Remove target=\"_blank\" from links\n dom.querySelectorAll('a.u-url[target=\"_blank\"]').forEach((a) => {\n if (!/http/i.test(a.innerText.trim())) {\n a.removeAttribute('target');\n }\n });\n },\n }),\n }}\n />\n );\n },\n (oldProps, newProps) => {\n const { post: oldPost } = oldProps;\n const { post: newPost } = newProps;\n return oldPost.content === newPost.content;\n },\n);\n\nconst SIZE_CLASS = {\n s: 'small',\n m: 'medium',\n l: 'large',\n};\n\nconst detectLang = mem((text) => {\n text = text?.trim();\n\n // Ref: https://github.com/komodojp/tinyld/blob/develop/docs/benchmark.md\n // 500 should be enough for now, also the default max chars for Mastodon\n if (text?.length > 500) {\n return null;\n }\n const langs = detectAll(text);\n const lang = langs[0];\n if (lang?.lang && lang?.accuracy > 0.5) {\n // If > 50% accurate, use it\n // It can be accurate if < 50% but better be safe\n // Though > 50% also can be inaccurate 🤷‍♂️\n return lang.lang;\n }\n return null;\n});\n\nfunction Status({\n statusID,\n status,\n instance: propInstance,\n size = 'm',\n contentTextWeight,\n readOnly,\n enableCommentHint,\n withinContext,\n skeleton,\n enableTranslate,\n forceTranslate: _forceTranslate,\n previewMode,\n // allowFilters,\n onMediaClick,\n quoted,\n onStatusLinkClick = () => {},\n showFollowedTags,\n allowContextMenu,\n showActionsBar,\n showReplyParent,\n mediaFirst,\n}) {\n if (skeleton) {\n return (\n \n {!mediaFirst && }\n
    \n
    \n {(size === 's' || mediaFirst) && } ███ ████████\n
    \n
    \n {mediaFirst &&
    }\n
    \n

    ████ ████████

    \n
    \n
    \n
    \n
    \n );\n }\n const { masto, instance, authenticated } = api({ instance: propInstance });\n const { instance: currentInstance } = api();\n const sameInstance = instance === currentInstance;\n\n let sKey = statusKey(statusID || status?.id, instance);\n const snapStates = useSnapshot(states);\n if (!status) {\n status = snapStates.statuses[sKey] || snapStates.statuses[statusID];\n sKey = statusKey(status?.id, instance);\n }\n if (!status) {\n return null;\n }\n\n const {\n account: {\n acct,\n avatar,\n avatarStatic,\n id: accountId,\n url: accountURL,\n displayName,\n username,\n emojis: accountEmojis,\n bot,\n group,\n },\n id,\n repliesCount,\n reblogged,\n reblogsCount,\n favourited,\n favouritesCount,\n bookmarked,\n poll,\n muted,\n sensitive,\n spoilerText,\n visibility, // public, unlisted, private, direct\n language: _language,\n editedAt,\n filtered,\n card,\n createdAt,\n inReplyToId,\n inReplyToAccountId,\n content,\n mentions,\n mediaAttachments,\n reblog,\n uri,\n url,\n emojis,\n tags,\n pinned,\n // Non-API props\n _deleted,\n _pinned,\n // _filtered,\n // Non-Mastodon\n emojiReactions,\n } = status;\n\n const [languageAutoDetected, setLanguageAutoDetected] = useState(null);\n useEffect(() => {\n if (!content) return;\n if (_language) return;\n let timer;\n timer = setTimeout(() => {\n let detected = detectLang(\n getHTMLText(content, {\n preProcess: (dom) => {\n // Remove anything that can skew the language detection\n\n // Remove .mention, .hashtag, pre, code, a:has(.invisible)\n dom\n .querySelectorAll(\n '.mention, .hashtag, pre, code, a:has(.invisible)',\n )\n .forEach((a) => {\n a.remove();\n });\n\n // Remove links that contains text that starts with https?://\n dom.querySelectorAll('a').forEach((a) => {\n const text = a.innerText.trim();\n if (text.startsWith('https://') || text.startsWith('http://')) {\n a.remove();\n }\n });\n },\n }),\n );\n setLanguageAutoDetected(detected);\n }, 1000);\n return () => clearTimeout(timer);\n }, [content, _language]);\n const language = _language || languageAutoDetected;\n\n // if (!mediaAttachments?.length) mediaFirst = false;\n const hasMediaAttachments = !!mediaAttachments?.length;\n if (mediaFirst && hasMediaAttachments) size = 's';\n\n const currentAccount = useMemo(() => {\n return getCurrentAccountID();\n }, []);\n const isSelf = useMemo(() => {\n return currentAccount && currentAccount === accountId;\n }, [accountId, currentAccount]);\n\n const filterContext = useContext(FilterContext);\n const filterInfo =\n !isSelf && !readOnly && !previewMode && isFiltered(filtered, filterContext);\n\n if (filterInfo?.action === 'hide') {\n return null;\n }\n\n console.debug('RENDER Status', id, status?.account.displayName, quoted);\n\n const debugHover = (e) => {\n if (e.shiftKey) {\n console.log({\n ...status,\n });\n }\n };\n\n if (/*allowFilters && */ size !== 'l' && filterInfo) {\n return (\n \n );\n }\n\n const createdAtDate = new Date(createdAt);\n const editedAtDate = new Date(editedAt);\n\n let inReplyToAccountRef = mentions?.find(\n (mention) => mention.id === inReplyToAccountId,\n );\n if (!inReplyToAccountRef && inReplyToAccountId === id) {\n inReplyToAccountRef = { url: accountURL, username, displayName };\n }\n const [inReplyToAccount, setInReplyToAccount] = useState(inReplyToAccountRef);\n if (!withinContext && !inReplyToAccount && inReplyToAccountId) {\n const account = states.accounts[inReplyToAccountId];\n if (account) {\n setInReplyToAccount(account);\n } else {\n memFetchAccount(inReplyToAccountId, masto)\n .then((account) => {\n setInReplyToAccount(account);\n states.accounts[account.id] = account;\n })\n .catch((e) => {});\n }\n }\n const mentionSelf =\n inReplyToAccountId === currentAccount ||\n mentions?.find((mention) => mention.id === currentAccount);\n\n const readingExpandSpoilers = useMemo(() => {\n const prefs = store.account.get('preferences') || {};\n return !!prefs['reading:expand:spoilers'];\n }, []);\n const readingExpandMedia = useMemo(() => {\n // default | show_all | hide_all\n // Ignore hide_all because it means hide *ALL* media including non-sensitive ones\n const prefs = store.account.get('preferences') || {};\n return prefs['reading:expand:media'] || 'default';\n }, []);\n // FOR TESTING:\n // const readingExpandSpoilers = true;\n // const readingExpandMedia = 'show_all';\n const showSpoiler =\n previewMode || readingExpandSpoilers || !!snapStates.spoilers[id];\n const showSpoilerMedia =\n previewMode ||\n readingExpandMedia === 'show_all' ||\n !!snapStates.spoilersMedia[id];\n\n if (reblog) {\n // If has statusID, means useItemID (cached in states)\n\n if (group) {\n return (\n \n
    \n {' '}\n \n
    \n \n \n );\n }\n\n return (\n \n
    \n {' '}\n {' '}\n boosted\n
    \n \n \n );\n }\n\n // Check followedTags\n const FollowedTagsParent = useCallback(\n ({ children }) => (\n \n
    \n {' '}\n {snapStates.statusFollowedTags[sKey].slice(0, 3).map((tag) => (\n \n {tag}\n \n ))}\n
    \n {children}\n \n ),\n [sKey, instance, snapStates.statusFollowedTags[sKey]],\n );\n const StatusParent =\n showFollowedTags && !!snapStates.statusFollowedTags[sKey]?.length\n ? FollowedTagsParent\n : Fragment;\n\n const isSizeLarge = size === 'l';\n\n const [forceTranslate, setForceTranslate] = useState(_forceTranslate);\n const targetLanguage = getTranslateTargetLanguage(true);\n const contentTranslationHideLanguages =\n snapStates.settings.contentTranslationHideLanguages || [];\n const { contentTranslation, contentTranslationAutoInline } =\n snapStates.settings;\n if (!contentTranslation) enableTranslate = false;\n const inlineTranslate = useMemo(() => {\n if (\n !contentTranslation ||\n !contentTranslationAutoInline ||\n readOnly ||\n (withinContext && !isSizeLarge) ||\n previewMode ||\n spoilerText ||\n sensitive ||\n poll ||\n card ||\n mediaAttachments?.length\n ) {\n return false;\n }\n const contentLength = htmlContentLength(content);\n return contentLength > 0 && contentLength <= INLINE_TRANSLATE_LIMIT;\n }, [\n contentTranslation,\n contentTranslationAutoInline,\n readOnly,\n withinContext,\n isSizeLarge,\n previewMode,\n spoilerText,\n sensitive,\n poll,\n card,\n mediaAttachments,\n content,\n ]);\n\n const [showEdited, setShowEdited] = useState(false);\n const [showEmbed, setShowEmbed] = useState(false);\n\n const spoilerContentRef = useTruncated();\n const contentRef = useTruncated();\n const mediaContainerRef = useTruncated();\n const readMoreText = 'Read more →';\n\n const statusRef = useRef(null);\n\n const unauthInteractionErrorMessage = `Sorry, your current logged-in instance can't interact with this post from another instance.`;\n\n const textWeight = useCallback(\n () =>\n Math.max(\n Math.round((spoilerText.length + htmlContentLength(content)) / 140) ||\n 1,\n 1,\n ),\n [spoilerText, content],\n );\n\n const createdDateText = niceDateTime(createdAtDate);\n const editedDateText = editedAt && niceDateTime(editedAtDate);\n\n // Can boost if:\n // - authenticated AND\n // - visibility != direct OR\n // - visibility = private AND isSelf\n let canBoost =\n authenticated && visibility !== 'direct' && visibility !== 'private';\n if (visibility === 'private' && isSelf) {\n canBoost = true;\n }\n\n const replyStatus = (e) => {\n if (!sameInstance || !authenticated) {\n return alert(unauthInteractionErrorMessage);\n }\n // syntheticEvent comes from MenuItem\n if (e?.shiftKey || e?.syntheticEvent?.shiftKey) {\n const newWin = openCompose({\n replyToStatus: status,\n });\n if (newWin) return;\n }\n showCompose({\n replyToStatus: status,\n });\n };\n\n // Check if media has no descriptions\n const mediaNoDesc = useMemo(() => {\n return mediaAttachments.some(\n (attachment) => !attachment.description?.trim?.(),\n );\n }, [mediaAttachments]);\n\n const statusMonthsAgo = useMemo(() => {\n return Math.floor(\n (new Date() - createdAtDate) / (1000 * 60 * 60 * 24 * 30),\n );\n }, [createdAtDate]);\n\n const boostStatus = async () => {\n if (!sameInstance || !authenticated) {\n alert(unauthInteractionErrorMessage);\n return false;\n }\n try {\n if (!reblogged) {\n let confirmText = 'Boost this post?';\n if (mediaNoDesc) {\n confirmText += '\\n\\n⚠️ Some media have no descriptions.';\n }\n const yes = confirm(confirmText);\n if (!yes) {\n return false;\n }\n }\n // Optimistic\n states.statuses[sKey] = {\n ...status,\n reblogged: !reblogged,\n reblogsCount: reblogsCount + (reblogged ? -1 : 1),\n };\n if (reblogged) {\n const newStatus = await masto.v1.statuses.$select(id).unreblog();\n saveStatus(newStatus, instance);\n return true;\n } else {\n const newStatus = await masto.v1.statuses.$select(id).reblog();\n saveStatus(newStatus, instance);\n return true;\n }\n } catch (e) {\n console.error(e);\n // Revert optimistism\n states.statuses[sKey] = status;\n return false;\n }\n };\n const confirmBoostStatus = async () => {\n if (!sameInstance || !authenticated) {\n alert(unauthInteractionErrorMessage);\n return false;\n }\n try {\n // Optimistic\n states.statuses[sKey] = {\n ...status,\n reblogged: !reblogged,\n reblogsCount: reblogsCount + (reblogged ? -1 : 1),\n };\n if (reblogged) {\n const newStatus = await masto.v1.statuses.$select(id).unreblog();\n saveStatus(newStatus, instance);\n } else {\n const newStatus = await masto.v1.statuses.$select(id).reblog();\n saveStatus(newStatus, instance);\n }\n return true;\n } catch (e) {\n console.error(e);\n // Revert optimistism\n states.statuses[sKey] = status;\n return false;\n }\n };\n\n const favouriteStatus = async () => {\n if (!sameInstance || !authenticated) {\n alert(unauthInteractionErrorMessage);\n return false;\n }\n try {\n // Optimistic\n states.statuses[sKey] = {\n ...status,\n favourited: !favourited,\n favouritesCount: favouritesCount + (favourited ? -1 : 1),\n };\n if (favourited) {\n const newStatus = await masto.v1.statuses.$select(id).unfavourite();\n saveStatus(newStatus, instance);\n } else {\n const newStatus = await masto.v1.statuses.$select(id).favourite();\n saveStatus(newStatus, instance);\n }\n return true;\n } catch (e) {\n console.error(e);\n // Revert optimistism\n states.statuses[sKey] = status;\n return false;\n }\n };\n const favouriteStatusNotify = async () => {\n try {\n const done = await favouriteStatus();\n if (!isSizeLarge && done) {\n showToast(\n favourited\n ? `Unliked @${username || acct}'s post`\n : `Liked @${username || acct}'s post`,\n );\n }\n } catch (e) {}\n };\n\n const bookmarkStatus = async () => {\n if (!supports('@mastodon/post-bookmark')) return;\n if (!sameInstance || !authenticated) {\n alert(unauthInteractionErrorMessage);\n return false;\n }\n try {\n // Optimistic\n states.statuses[sKey] = {\n ...status,\n bookmarked: !bookmarked,\n };\n if (bookmarked) {\n const newStatus = await masto.v1.statuses.$select(id).unbookmark();\n saveStatus(newStatus, instance);\n } else {\n const newStatus = await masto.v1.statuses.$select(id).bookmark();\n saveStatus(newStatus, instance);\n }\n return true;\n } catch (e) {\n console.error(e);\n // Revert optimistism\n states.statuses[sKey] = status;\n return false;\n }\n };\n const bookmarkStatusNotify = async () => {\n try {\n const done = await bookmarkStatus();\n if (!isSizeLarge && done) {\n showToast(\n bookmarked\n ? `Unbookmarked @${username || acct}'s post`\n : `Bookmarked @${username || acct}'s post`,\n );\n }\n } catch (e) {}\n };\n\n const differentLanguage =\n !!language &&\n language !== targetLanguage &&\n !localeMatch([language], [targetLanguage]) &&\n !contentTranslationHideLanguages.find(\n (l) => language === l || localeMatch([language], [l]),\n );\n\n const reblogIterator = useRef();\n const favouriteIterator = useRef();\n async function fetchBoostedLikedByAccounts(firstLoad) {\n if (firstLoad) {\n reblogIterator.current = masto.v1.statuses\n .$select(statusID)\n .rebloggedBy.list({\n limit: REACTIONS_LIMIT,\n });\n favouriteIterator.current = masto.v1.statuses\n .$select(statusID)\n .favouritedBy.list({\n limit: REACTIONS_LIMIT,\n });\n }\n const [{ value: reblogResults }, { value: favouriteResults }] =\n await Promise.allSettled([\n reblogIterator.current.next(),\n favouriteIterator.current.next(),\n ]);\n if (reblogResults.value?.length || favouriteResults.value?.length) {\n const accounts = [];\n if (reblogResults.value?.length) {\n accounts.push(\n ...reblogResults.value.map((a) => {\n a._types = ['reblog'];\n return a;\n }),\n );\n }\n if (favouriteResults.value?.length) {\n accounts.push(\n ...favouriteResults.value.map((a) => {\n a._types = ['favourite'];\n return a;\n }),\n );\n }\n return {\n value: accounts,\n done: reblogResults.done && favouriteResults.done,\n };\n }\n return {\n value: [],\n done: true,\n };\n }\n\n const actionsRef = useRef();\n const isPublic = ['public', 'unlisted'].includes(visibility);\n const isPinnable = ['public', 'unlisted', 'private'].includes(visibility);\n const StatusMenuItems = (\n <>\n {!isSizeLarge && sameInstance && (\n <>\n
    \n \n \n \n {repliesCount > 0 ? shortenNumber(repliesCount) : 'Reply'}\n \n \n \n \n {reblogged ? 'Unboost' : 'Boost'}\n \n }\n className={`menu-reblog ${reblogged ? 'checked' : ''}`}\n menuExtras={\n {\n showCompose({\n draftStatus: {\n status: `\\n${url}`,\n },\n });\n }}\n >\n \n Quote\n \n }\n menuFooter={\n mediaNoDesc && !reblogged ? (\n
    \n \n Some media have no descriptions.\n
    \n ) : (\n statusMonthsAgo >= 3 && (\n
    \n \n \n Old post (\n {rtf.format(-statusMonthsAgo, 'month')}\n )\n \n
    \n )\n )\n }\n disabled={!canBoost}\n onClick={async () => {\n try {\n const done = await confirmBoostStatus();\n if (!isSizeLarge && done) {\n showToast(\n reblogged\n ? `Unboosted @${username || acct}'s post`\n : `Boosted @${username || acct}'s post`,\n );\n }\n } catch (e) {}\n }}\n >\n \n \n {reblogsCount > 0\n ? shortenNumber(reblogsCount)\n : reblogged\n ? 'Unboost'\n : 'Boost…'}\n \n \n \n \n \n {favouritesCount > 0\n ? shortenNumber(favouritesCount)\n : favourited\n ? 'Unlike'\n : 'Like'}\n \n \n {supports('@mastodon/post-bookmark') && (\n \n \n {bookmarked ? 'Unbookmark' : 'Bookmark'}\n \n )}\n
    \n \n )}\n {!isSizeLarge && sameInstance && (isSizeLarge || showActionsBar) && (\n \n )}\n {(isSizeLarge || showActionsBar) && (\n <>\n {\n states.showGenericAccounts = {\n heading: 'Boosted/Liked by…',\n fetchAccounts: fetchBoostedLikedByAccounts,\n instance,\n showReactions: true,\n postID: sKey,\n };\n }}\n >\n \n \n Boosted/Liked by\n \n \n \n )}\n {!mediaFirst && (\n <>\n {(enableTranslate || !language || differentLanguage) && (\n \n )}\n {enableTranslate ? (\n
    \n {\n setForceTranslate(true);\n }}\n >\n \n Translate\n \n {supportsTTS && (\n {\n const postText = getPostText(status);\n if (postText) {\n speak(postText, language);\n }\n }}\n >\n \n Speak\n \n )}\n
    \n ) : (\n (!language || differentLanguage) && (\n
    \n \n \n Translate\n \n {supportsTTS && (\n {\n const postText = getPostText(status);\n if (postText) {\n speak(postText, language);\n }\n }}\n >\n \n Speak\n \n )}\n
    \n )\n )}\n \n )}\n {((!isSizeLarge && sameInstance) ||\n enableTranslate ||\n !language ||\n differentLanguage) && }\n {!isSizeLarge && (\n <>\n {\n onStatusLinkClick(e, status);\n }}\n >\n \n \n View post by @{username || acct}\n
    \n \n {visibilityText[visibility]} • {createdDateText}\n \n
    \n \n \n )}\n {!!editedAt && (\n <>\n {\n setShowEdited(id);\n }}\n >\n \n \n Show Edit History\n
    \n Edited: {editedDateText}\n
    \n \n \n )}\n \n \n {nicePostURL(url)}\n \n
    \n {\n // Copy url to clipboard\n try {\n navigator.clipboard.writeText(url);\n showToast('Link copied');\n } catch (e) {\n console.error(e);\n showToast('Unable to copy link');\n }\n }}\n >\n \n Copy\n \n {isPublic &&\n navigator?.share &&\n navigator?.canShare?.({\n url,\n }) && (\n {\n try {\n navigator.share({\n url,\n });\n } catch (e) {\n console.error(e);\n alert(\"Sharing doesn't seem to work.\");\n }\n }}\n >\n \n Share…\n \n )}\n
    \n {isPublic && isSizeLarge && (\n {\n setShowEmbed(true);\n }}\n >\n \n Embed post\n \n )}\n {(isSelf || mentionSelf) && }\n {(isSelf || mentionSelf) && (\n {\n try {\n const newStatus = await masto.v1.statuses\n .$select(id)\n [muted ? 'unmute' : 'mute']();\n saveStatus(newStatus, instance);\n showToast(muted ? 'Conversation unmuted' : 'Conversation muted');\n } catch (e) {\n console.error(e);\n showToast(\n muted\n ? 'Unable to unmute conversation'\n : 'Unable to mute conversation',\n );\n }\n }}\n >\n {muted ? (\n <>\n \n Unmute conversation\n \n ) : (\n <>\n \n Mute conversation\n \n )}\n \n )}\n {isSelf && isPinnable && (\n {\n try {\n const newStatus = await masto.v1.statuses\n .$select(id)\n [pinned ? 'unpin' : 'pin']();\n saveStatus(newStatus, instance);\n showToast(\n pinned\n ? 'Post unpinned from profile'\n : 'Post pinned to profile',\n );\n } catch (e) {\n console.error(e);\n showToast(pinned ? 'Unable to unpin post' : 'Unable to pin post');\n }\n }}\n >\n {pinned ? (\n <>\n \n Unpin from profile\n \n ) : (\n <>\n \n Pin to profile\n \n )}\n \n )}\n {isSelf && (\n
    \n {supports('@mastodon/post-edit') && (\n {\n showCompose({\n editStatus: status,\n });\n }}\n >\n \n Edit\n \n )}\n {isSizeLarge && (\n \n \n Delete this post?\n \n }\n menuItemClassName=\"danger\"\n onClick={() => {\n // const yes = confirm('Delete this post?');\n // if (yes) {\n (async () => {\n try {\n await masto.v1.statuses.$select(id).remove();\n const cachedStatus = getStatus(id, instance);\n cachedStatus._deleted = true;\n showToast('Deleted');\n } catch (e) {\n console.error(e);\n showToast('Unable to delete');\n }\n })();\n // }\n }}\n >\n \n Delete…\n \n )}\n
    \n )}\n {!isSelf && isSizeLarge && (\n <>\n \n {\n states.showReportModal = {\n account: status.account,\n post: status,\n };\n }}\n >\n \n Report post…\n \n \n )}\n \n );\n\n const contextMenuRef = useRef();\n const [isContextMenuOpen, setIsContextMenuOpen] = useState(false);\n const [contextMenuProps, setContextMenuProps] = useState({});\n\n const showContextMenu =\n allowContextMenu || (!isSizeLarge && !previewMode && !_deleted && !quoted);\n\n // Only iOS/iPadOS browsers don't support contextmenu\n // Some comments report iPadOS might support contextmenu if a mouse is connected\n const bindLongPressContext = useLongPress(\n isIOS && showContextMenu\n ? (e) => {\n if (e.pointerType === 'mouse') return;\n // There's 'pen' too, but not sure if contextmenu event would trigger from a pen\n\n const { clientX, clientY } = e.touches?.[0] || e;\n // link detection copied from onContextMenu because here it works\n const link = e.target.closest('a');\n if (\n link &&\n statusRef.current.contains(link) &&\n !link.getAttribute('href').startsWith('#')\n )\n return;\n e.preventDefault();\n setContextMenuProps({\n anchorPoint: {\n x: clientX,\n y: clientY,\n },\n direction: 'right',\n });\n setIsContextMenuOpen(true);\n }\n : null,\n {\n threshold: 600,\n captureEvent: true,\n detect: 'touch',\n cancelOnMovement: 2, // true allows movement of up to 25 pixels\n },\n );\n\n const hotkeysEnabled = !readOnly && !previewMode && !quoted;\n const rRef = useHotkeys('r, shift+r', replyStatus, {\n enabled: hotkeysEnabled,\n });\n const fRef = useHotkeys('f, l', favouriteStatusNotify, {\n enabled: hotkeysEnabled,\n });\n const dRef = useHotkeys('d', bookmarkStatusNotify, {\n enabled: hotkeysEnabled,\n });\n const bRef = useHotkeys(\n 'shift+b',\n () => {\n (async () => {\n try {\n const done = await confirmBoostStatus();\n if (!isSizeLarge && done) {\n showToast(\n reblogged\n ? `Unboosted @${username || acct}'s post`\n : `Boosted @${username || acct}'s post`,\n );\n }\n } catch (e) {}\n })();\n },\n {\n enabled: hotkeysEnabled && canBoost,\n },\n );\n const xRef = useHotkeys('x', (e) => {\n const activeStatus = document.activeElement.closest(\n '.status-link, .status-focus',\n );\n if (activeStatus) {\n const spoilerButton = activeStatus.querySelector(\n '.spoiler-button:not(.spoiling)',\n );\n if (spoilerButton) {\n e.stopPropagation();\n spoilerButton.click();\n } else {\n const spoilerMediaButton = activeStatus.querySelector(\n '.spoiler-media-button:not(.spoiling)',\n );\n if (spoilerMediaButton) {\n e.stopPropagation();\n spoilerMediaButton.click();\n }\n }\n }\n });\n\n const displayedMediaAttachments = mediaAttachments.slice(\n 0,\n isSizeLarge ? undefined : 4,\n );\n const showMultipleMediaCaptions =\n mediaAttachments.length > 1 &&\n displayedMediaAttachments.some(\n (media) => !!media.description && !isMediaCaptionLong(media.description),\n );\n const captionChildren = useMemo(() => {\n if (!showMultipleMediaCaptions) return null;\n const attachments = [];\n displayedMediaAttachments.forEach((media, i) => {\n if (!media.description) return;\n const index = attachments.findIndex(\n (attachment) => attachment.media.description === media.description,\n );\n if (index === -1) {\n attachments.push({\n media,\n indices: [i],\n });\n } else {\n attachments[index].indices.push(i);\n }\n });\n return attachments.map(({ media, indices }) => (\n i + 1).join(' ')}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n states.showMediaAlt = {\n alt: media.description,\n lang: language,\n };\n }}\n title={media.description}\n >\n {indices.map((i) => i + 1).join(' ')} {media.description}\n \n ));\n\n // return displayedMediaAttachments.map(\n // (media, i) =>\n // !!media.description && (\n // {\n // e.preventDefault();\n // e.stopPropagation();\n // states.showMediaAlt = {\n // alt: media.description,\n // lang: language,\n // };\n // }}\n // title={media.description}\n // >\n // {i + 1} {media.description}\n // \n // ),\n // );\n }, [showMultipleMediaCaptions, displayedMediaAttachments, language]);\n\n const isThread = useMemo(() => {\n return (\n (!!inReplyToId && inReplyToAccountId === status.account?.id) ||\n !!snapStates.statusThreadNumber[sKey]\n );\n }, [\n inReplyToId,\n inReplyToAccountId,\n status.account?.id,\n snapStates.statusThreadNumber[sKey],\n ]);\n\n const showCommentHint = useMemo(() => {\n return (\n enableCommentHint &&\n !isThread &&\n !withinContext &&\n !inReplyToId &&\n visibility === 'public' &&\n repliesCount > 0\n );\n }, [\n enableCommentHint,\n isThread,\n withinContext,\n inReplyToId,\n repliesCount,\n visibility,\n ]);\n const showCommentCount = useMemo(() => {\n if (\n card ||\n poll ||\n sensitive ||\n spoilerText ||\n mediaAttachments?.length ||\n isThread ||\n withinContext ||\n inReplyToId ||\n repliesCount <= 0\n ) {\n return false;\n }\n const questionRegex = /[???︖❓❔⁇⁈⁉¿‽؟]/;\n const containsQuestion = questionRegex.test(content);\n if (!containsQuestion) return false;\n const contentLength = htmlContentLength(content);\n if (contentLength > 0 && contentLength <= SHOW_COMMENT_COUNT_LIMIT) {\n return true;\n }\n }, [\n card,\n poll,\n sensitive,\n spoilerText,\n mediaAttachments,\n reblog,\n isThread,\n withinContext,\n inReplyToId,\n repliesCount,\n content,\n ]);\n\n return (\n \n {showReplyParent && !!(inReplyToId && inReplyToAccountId) && (\n \n )}\n {\n statusRef.current = node;\n // Use parent node if it's in focus\n // Use case: \n // When navigating (j/k), the is focused instead of \n // Hotkey binding doesn't bubble up thus this hack\n const nodeRef =\n node?.closest?.(\n '.timeline-item, .timeline-item-alt, .status-link, .status-focus',\n ) || node;\n rRef.current = nodeRef;\n fRef.current = nodeRef;\n dRef.current = nodeRef;\n bRef.current = nodeRef;\n xRef.current = nodeRef;\n }}\n tabindex=\"-1\"\n class={`status ${\n !withinContext && inReplyToId && inReplyToAccount\n ? 'status-reply-to'\n : ''\n } visibility-${visibility} ${_pinned ? 'status-pinned' : ''} ${\n SIZE_CLASS[size]\n } ${_deleted ? 'status-deleted' : ''} ${quoted ? 'status-card' : ''} ${\n isContextMenuOpen ? 'status-menu-open' : ''\n } ${mediaFirst && hasMediaAttachments ? 'status-media-first' : ''}`}\n onMouseEnter={debugHover}\n onContextMenu={(e) => {\n if (!showContextMenu) return;\n if (e.metaKey) return;\n // console.log('context menu', e);\n const link = e.target.closest('a');\n if (\n link &&\n statusRef.current.contains(link) &&\n !link.getAttribute('href').startsWith('#')\n )\n return;\n\n // If there's selected text, don't show custom context menu\n const selection = window.getSelection?.();\n if (selection.toString().length > 0) {\n const { anchorNode } = selection;\n if (statusRef.current?.contains(anchorNode)) {\n return;\n }\n }\n e.preventDefault();\n setContextMenuProps({\n anchorPoint: {\n x: e.clientX,\n y: e.clientY,\n },\n direction: 'right',\n });\n setIsContextMenuOpen(true);\n }}\n {...(showContextMenu ? bindLongPressContext() : {})}\n >\n {showContextMenu && (\n {\n setIsContextMenuOpen(false);\n // statusRef.current?.focus?.();\n if (e?.reason === 'click') {\n statusRef.current?.closest('[tabindex]')?.focus?.();\n }\n }}\n portal={{\n target: document.body,\n }}\n containerProps={{\n style: {\n // Higher than the backdrop\n zIndex: 1001,\n },\n onClick: () => {\n contextMenuRef.current?.closeMenu?.();\n },\n }}\n overflow=\"auto\"\n boundingBoxPadding={safeBoundingBoxPadding()}\n unmountOnClose\n >\n {StatusMenuItems}\n \n )}\n {showActionsBar &&\n size !== 'l' &&\n !previewMode &&\n !readOnly &&\n !_deleted &&\n !quoted && (\n \n \n \n {\n e.preventDefault();\n e.stopPropagation();\n setContextMenuProps({\n anchorRef: {\n current: e.currentTarget,\n },\n align: 'start',\n direction: 'left',\n gap: 0,\n shift: -8,\n });\n setIsContextMenuOpen('actions-bar');\n }}\n >\n \n \n \n )}\n {size !== 'l' && (\n
    \n {reblogged && }\n {favourited && }\n {bookmarked && }\n {_pinned && }\n
    \n )}\n {size !== 's' && (\n {\n e.preventDefault();\n e.stopPropagation();\n states.showAccount = {\n account: status.account,\n instance,\n };\n }}\n >\n \n
    \n )}\n
    \n
    \n \n \n \n {/* {inReplyToAccount && !withinContext && size !== 's' && (\n <>\n {' '}\n \n {' '}\n \n \n \n )} */}\n {/* */}{' '}\n {size !== 'l' &&\n (_deleted ? (\n Deleted\n ) : url && !previewMode && !readOnly && !quoted ? (\n {\n if (\n e.metaKey ||\n e.ctrlKey ||\n e.shiftKey ||\n e.altKey ||\n e.which === 2\n ) {\n return;\n }\n e.preventDefault();\n e.stopPropagation();\n onStatusLinkClick?.(e, status);\n setContextMenuProps({\n anchorRef: {\n current: e.currentTarget,\n },\n align: 'end',\n direction: 'bottom',\n gap: 4,\n });\n setIsContextMenuOpen(true);\n }}\n class={`time ${\n isContextMenuOpen && contextMenuProps?.anchorRef\n ? 'is-open'\n : ''\n }`}\n >\n {showCommentHint && !showCommentCount ? (\n \n ) : (\n visibility !== 'public' &&\n visibility !== 'direct' && (\n \n )\n )}{' '}\n \n {!previewMode && !readOnly && (\n \n )}\n \n ) : (\n // {\n // if (e.target === e.currentTarget)\n // menuInstanceRef.current?.closeMenu?.();\n // },\n // }}\n // align=\"end\"\n // gap={4}\n // overflow=\"auto\"\n // viewScroll=\"close\"\n // boundingBoxPadding=\"8 8 8 8\"\n // unmountOnClose\n // menuButton={({ open }) => (\n // {\n // e.preventDefault();\n // e.stopPropagation();\n // onStatusLinkClick?.(e, status);\n // }}\n // class={`time ${open ? 'is-open' : ''}`}\n // >\n // {' '}\n // \n // \n // )}\n // >\n // {StatusMenuItems}\n // \n \n {visibility !== 'public' && visibility !== 'direct' && (\n <>\n {' '}\n \n )}\n \n \n ))}\n
    \n {visibility === 'direct' && (\n <>\n
    Private mention
    {' '}\n \n )}\n {!withinContext && (\n <>\n {isThread ? (\n
    \n \n Thread\n {snapStates.statusThreadNumber[sKey]\n ? ` ${snapStates.statusThreadNumber[sKey]}/X`\n : ''}\n
    \n ) : (\n !!inReplyToId &&\n !!inReplyToAccount &&\n (!!spoilerText ||\n !mentions.find((mention) => {\n return mention.id === inReplyToAccountId;\n })) && (\n
    \n {' '}\n \n
    \n )\n )}\n \n )}\n \n {mediaFirst && hasMediaAttachments ? (\n <>\n {(!!spoilerText || !!sensitive) && !readingExpandSpoilers && (\n <>\n {!!spoilerText && (\n \n {' '}\n \n )}\n {\n e.preventDefault();\n e.stopPropagation();\n if (showSpoiler) {\n delete states.spoilers[id];\n if (!readingExpandSpoilers) {\n delete states.spoilersMedia[id];\n }\n } else {\n states.spoilers[id] = true;\n if (!readingExpandSpoilers) {\n states.spoilersMedia[id] = true;\n }\n }\n }}\n >\n {' '}\n {showSpoiler ? 'Show less' : 'Show content'}\n \n \n )}\n \n {!!content && (\n
    \n \n
    \n )}\n \n ) : (\n <>\n {!!spoilerText && (\n <>\n \n

    \n \n

    \n
    \n {readingExpandSpoilers || previewMode ? (\n
    \n Content warning\n
    \n ) : (\n {\n e.preventDefault();\n e.stopPropagation();\n if (showSpoiler) {\n delete states.spoilers[id];\n if (!readingExpandSpoilers) {\n delete states.spoilersMedia[id];\n }\n } else {\n states.spoilers[id] = true;\n if (!readingExpandSpoilers) {\n states.spoilersMedia[id] = true;\n }\n }\n }}\n >\n {' '}\n {showSpoiler ? 'Show less' : 'Show content'}\n \n )}\n \n )}\n {!!content && (\n \n \n \n \n )}\n {!!poll && (\n {\n states.statuses[sKey].poll = newPoll;\n }}\n refresh={() => {\n return masto.v1.polls\n .$select(poll.id)\n .fetch()\n .then((pollResponse) => {\n states.statuses[sKey].poll = pollResponse;\n })\n .catch((e) => {}); // Silently fail\n }}\n votePoll={(choices) => {\n return masto.v1.polls\n .$select(poll.id)\n .votes.create({\n choices,\n })\n .then((pollResponse) => {\n states.statuses[sKey].poll = pollResponse;\n })\n .catch((e) => {}); // Silently fail\n }}\n />\n )}\n {(((enableTranslate || inlineTranslate) &&\n !!content.trim() &&\n !!getHTMLText(emojifyText(content, emojis)) &&\n differentLanguage) ||\n forceTranslate) && (\n \n )}\n {!previewMode &&\n sensitive &&\n !!mediaAttachments.length &&\n readingExpandMedia !== 'show_all' && (\n
    \n );\n}\n\nfunction MultipleMediaFigure(props) {\n const { enabled, children, lang, captionChildren } = props;\n if (!enabled || !captionChildren) return children;\n return (\n
    \n {children}\n
    \n {captionChildren}\n
    \n
    \n );\n}\n\nfunction MediaFirstContainer(props) {\n const { mediaAttachments, language, postID, instance } = props;\n const moreThanOne = mediaAttachments.length > 1;\n\n const carouselRef = useRef();\n const [currentIndex, setCurrentIndex] = useState(0);\n\n useEffect(() => {\n let handleScroll = () => {\n const { clientWidth, scrollLeft } = carouselRef.current;\n const index = Math.round(Math.abs(scrollLeft) / clientWidth);\n setCurrentIndex(index);\n };\n if (carouselRef.current) {\n carouselRef.current.addEventListener('scroll', handleScroll, {\n passive: true,\n });\n }\n return () => {\n if (carouselRef.current) {\n carouselRef.current.removeEventListener('scroll', handleScroll);\n }\n };\n }, []);\n\n return (\n <>\n
    \n
    \n {mediaAttachments.map((media, i) => (\n
    \n \n
    \n ))}\n
    \n {moreThanOne && (\n \n )}\n
    \n {moreThanOne && (\n \n {mediaAttachments.map((media, i) => (\n \n ))}\n \n )}\n \n );\n}\n\nfunction getDomain(url) {\n return punycode.toUnicode(\n URL.parse(url)\n .hostname.replace(/^www\\./, '')\n .replace(/\\/$/, ''),\n );\n}\n\n// \"Post\": Quote post + card link preview combo\n// Assume all links from these domains are \"posts\"\n// Mastodon links are \"posts\" too but they are converted to real quote posts and there's too many domains to check\n// This is just \"Progressive Enhancement\"\nfunction isCardPost(domain) {\n return ['x.com', 'twitter.com', 'threads.net', 'bsky.app'].includes(domain);\n}\n\nfunction Card({ card, selfReferential, instance }) {\n const snapStates = useSnapshot(states);\n const {\n blurhash,\n title,\n description,\n html,\n providerName,\n providerUrl,\n authorName,\n authorUrl,\n width,\n height,\n image,\n imageDescription,\n url,\n type,\n embedUrl,\n language,\n publishedAt,\n } = card;\n\n /* type\n link = Link OEmbed\n photo = Photo OEmbed\n video = Video OEmbed\n rich = iframe OEmbed. Not currently accepted, so won’t show up in practice.\n */\n\n const hasText = title || providerName || authorName;\n const isLandscape = width / height >= 1.2;\n const size = isLandscape ? 'large' : '';\n\n const [cardStatusURL, setCardStatusURL] = useState(null);\n // const [cardStatusID, setCardStatusID] = useState(null);\n useEffect(() => {\n if (hasText && image && !selfReferential && isMastodonLinkMaybe(url)) {\n unfurlMastodonLink(instance, url).then((result) => {\n if (!result) return;\n const { id, url } = result;\n setCardStatusURL('#' + url);\n\n // NOTE: This is for quote post\n // (async () => {\n // const { masto } = api({ instance });\n // const status = await masto.v1.statuses.$select(id).fetch();\n // saveStatus(status, instance);\n // setCardStatusID(id);\n // })();\n });\n }\n }, [hasText, image, selfReferential]);\n\n // if (cardStatusID) {\n // return (\n // \n // );\n // }\n\n if (snapStates.unfurledLinks[url]) return null;\n\n const hasIframeHTML = /`;this.domRefFrame.insertAdjacentHTML("beforeend",i),this.domRefFrame.classList.add("activated"),this.isIframeLoaded=!0,this.attemptShortAutoPlay(),this.dispatchEvent(new CustomEvent("liteYoutubeIframeLoaded",{detail:{videoId:this.videoId},bubbles:!0,cancelable:!0}))}}initImagePlaceholder(){var r,o;const t=`https://i.ytimg.com/vi_webp/${this.videoId}/${this.posterQuality}.webp`,n=`https://i.ytimg.com/vi/${this.videoId}/${this.posterQuality}.jpg`;this.domRefImg.fallback.loading=this.posterLoading,this.domRefImg.webp.srcset=t,this.domRefImg.jpeg.srcset=n,this.domRefImg.fallback.src=n,this.domRefImg.fallback.setAttribute("aria-label",`${this.videoPlay}: ${this.videoTitle}`),(o=(r=this.domRefImg)==null?void 0:r.fallback)==null||o.setAttribute("alt",`${this.videoPlay}: ${this.videoTitle}`)}initIntersectionObserver(){const t={root:null,rootMargin:"0px",threshold:0};new IntersectionObserver((r,o)=>{r.forEach(i=>{i.isIntersecting&&!this.isIframeLoaded&&(Be.warmConnections(),this.addIframe(!0),o.unobserve(this))})},t).observe(this)}attemptShortAutoPlay(){this.isYouTubeShort()&&setTimeout(()=>{var t,n;(n=(t=this.shadowRoot.querySelector("iframe"))==null?void 0:t.contentWindow)==null||n.postMessage('{"event":"command","func":"playVideo","args":""}',"*")},2e3)}isYouTubeShort(){return this.getAttribute("short")===""&&window.matchMedia("(max-width: 40em)").matches}static addPrefetch(t,n){const r=document.createElement("link");r.rel=t,r.href=n,r.crossOrigin="true",document.head.append(r)}static warmConnections(){Be.isPreconnected||window.liteYouTubeIsPreconnected||(Be.addPrefetch("preconnect","https://i.ytimg.com/"),Be.addPrefetch("preconnect","https://s.ytimg.com"),Be.addPrefetch("preconnect","https://www.youtube.com"),Be.addPrefetch("preconnect","https://www.google.com"),Be.addPrefetch("preconnect","https://googleads.g.doubleclick.net"),Be.addPrefetch("preconnect","https://static.doubleclick.net"),Be.isPreconnected=!0,window.liteYouTubeIsPreconnected=!0)}}Be.isPreconnected=!1;customElements.define("lite-youtube",Be);const As=new Uint8Array(128);for(let e=0;e<83;e++)As["0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz#$%*+,-.:;=?@[]^_{|}~".charCodeAt(e)]=e;const Yn=(e,t,n)=>{let r=0;for(;te>10.31475?Is(e/Ls+.052132,2.4):e/$s,Fr=e=>~~(e>1227e-8?Ls*Is(e,.416666)-13.025:e*$s+1),hn=e=>(e<0?-1:1)*e*e,mi=e=>{for(e+=_n/2;e>_n;)e-=hu;const t=1.27323954*e-.405284735*hn(e);return .225*(hn(t)-t)+t};function xo(e){const t=Yn(e,2,6);return[t>>16,t>>8&255,t&255]}function mu(e,t,n,r){const o=Yn(e,0,1),i=o%9+1,a=~~(o/9)+1,u=i*a;let c=0,l=0,f=0,d=0,p=0,m=0,h=0,g=0,y=0,T=0,_=0,E=0;const w=(Yn(e,1,2)+1)/13446*(r|1),b=new Float64Array(u*3),M=xo(e);for(c=0;c<3;c++)b[c]=pu(M[c]);for(c=1;c{const n=t.char||" ",r=t.count||2;let o=0;const i=[];return e.reverse().reduce((a,u)=>{i.length&&o&&i[o]&&i[o]===u.substring(1,i[o].length+1)&&(i.splice(o,1),o--);const l=[`${n.repeat(o?o*r:0)}${u}`,...a];return u.substring(0,2)==="e.trim().replace(/(^(\s|\t)+|(( |\t)+)$)/gm,""),yu=e=>{const t=Cs(e).split(` -`),n=[];let r="";for(let o=0;o")){n.push(`${r}${i.slice(0,-2)} />`),r="";continue}if(i.endsWith(">")){n.push(`${r}${i.startsWith(">")||i.startsWith("<")?"":" "}${i}`),r="";continue}r+=r.length?` ${i}`:i}return n};var _u={mergeAttributesWithElements:yu,removeEmptyLines:Cs};const bu=vu,{mergeAttributesWithElements:wu}=_u,Tu=(e,t={})=>{const n=wu(e);return bu(n,t)};var Eu=Tu;const xu=St(Eu);var cn=(e=>(e.Mouse="mouse",e.Touch="touch",e.Pointer="pointer",e))(cn||{}),ln=(e=>(e.CancelledByMovement="cancelled-by-movement",e.CancelledByRelease="cancelled-by-release",e.CancelledOutsideElement="cancelled-outside-element",e))(ln||{});const Ps=()=>typeof window=="object"?(window==null?void 0:window.PointerEvent)??null:null,Mu=()=>typeof window=="object"?(window==null?void 0:window.TouchEvent)??null:null;function Os(e){const{nativeEvent:t}=e,n=Mu();return n&&t instanceof n||"touches"in e}function Ds(e){const t=Ps();return e.nativeEvent instanceof MouseEvent&&!(t&&e.nativeEvent instanceof t)}function Rs(e){const{nativeEvent:t}=e;if(!t)return!1;const n=Ps();return n&&t instanceof n||"pointerId"in t}function gi(e){return Ds(e)||Os(e)||Rs(e)}function vi(e){return Os(e)?{x:e.touches[0].pageX,y:e.touches[0].pageY}:Ds(e)||Rs(e)?{x:e.pageX,y:e.pageY}:null}function Su(e){return{target:e.target,currentTarget:e.currentTarget,nativeEvent:e,persist:()=>{}}}function Ns(e,{threshold:t=400,captureEvent:n=!1,detect:r=cn.Pointer,cancelOnMovement:o=!1,cancelOutsideElement:i=!0,filterEvents:a,onStart:u,onMove:c,onFinish:l,onCancel:f}={}){const d=j(!1),p=j(!1),m=j(),h=j(),g=j(e),y=j(null),T=Ie(b=>M=>{p.current||gi(M)&&(a!==void 0&&!a(M)||(n&&M.persist(),u==null||u(M,{context:b}),y.current=vi(M),p.current=!0,m.current=M.currentTarget,h.current=setTimeout(()=>{g.current&&(g.current(M,{context:b}),d.current=!0)},t)))},[n,a,u,t]),_=Ie(b=>(M,A)=>{gi(M)&&p.current&&(y.current=null,n&&M.persist(),d.current?l==null||l(M,{context:b}):p.current&&(f==null||f(M,{context:b,reason:A??ln.CancelledByRelease})),d.current=!1,p.current=!1,h.current!==void 0&&clearTimeout(h.current))},[n,l,f]),E=Ie(b=>M=>{if(c==null||c(M,{context:b}),o!==!1&&y.current){const A=vi(M);if(A){const O=o===!0?25:o,P={x:Math.abs(A.x-y.current.x),y:Math.abs(A.y-y.current.y)};(P.x>O||P.y>O)&&_(b)(M,ln.CancelledByMovement)}}},[_,o,c]),w=Ie(b=>{if(e===null)return{};switch(r){case cn.Mouse:{const M={onMouseDown:T(b),onMouseMove:E(b),onMouseUp:_(b)};return i&&(M.onMouseLeave=A=>{_(b)(A,ln.CancelledOutsideElement)}),M}case cn.Touch:return{onTouchStart:T(b),onTouchMove:E(b),onTouchEnd:_(b)};case cn.Pointer:{const M={onPointerDown:T(b),onPointerMove:E(b),onPointerUp:_(b)};return i&&(M.onPointerLeave=A=>_(b)(A,ln.CancelledOutsideElement)),M}}},[e,_,i,r,E,T]);return se(()=>{if(!window)return;function b(M){const A=Su(M);_()(A)}return window.addEventListener("mouseup",b),window.addEventListener("touchend",b),window.addEventListener("pointerup",b),()=>{window.removeEventListener("mouseup",b),window.removeEventListener("touchend",b),window.removeEventListener("pointerup",b)}},[_]),se(()=>()=>{h.current!==void 0&&clearTimeout(h.current)},[]),se(()=>{g.current=e},[e]),w}function ku({poll:e,lang:t,readOnly:n,refresh:r=()=>{},votePoll:o=()=>{}}){const[i,a]=te("default"),{expired:u,expiresAt:c,id:l,multiple:f,options:d,ownVotes:p,voted:m,votersCount:h,votesCount:g,emojis:y}=e,T=!!c&&new Date(c),_=h||g;let E=0;_<=1e3?E=0:_<=1e4?E=1:_<=1e5&&(E=2);const[w,b]=te(!1),M=d.every(A=>A.votesCount!==null);return s("div",{lang:t,dir:"auto",class:`poll ${n?"read-only":""} ${i==="loading"?"loading":""}`,children:[w&&M||m||u?s(U,{children:[s("div",{class:"poll-options",children:d.map((A,O)=>{const{title:P,votesCount:x}=A,S=_?(x/_*100).toFixed(E):0,V=x>0&&x===Math.max(...d.map(B=>B.votesCount));return s("div",{class:`poll-option poll-result ${V?"poll-option-leading":""}`,style:{"--percentage":`${S}%`},children:[s("div",{class:"poll-option-title",children:[s("span",{children:s(Bt,{text:P,emojis:y})}),m&&p.includes(O)&&s(U,{children:[" ",s(H,{icon:"check-circle"})]})]}),s("div",{class:"poll-option-votes",title:`${x} vote${x===1?"":"s"}`,children:[S,"%"]})]},`${O}-${P}-${x}`)})}),!u&&!m&&s("button",{class:"poll-vote-button plain2",disabled:i==="loading",onClick:A=>{A.preventDefault(),b(!1)},children:[s(H,{icon:"arrow-left",size:"s"})," Hide results"]})]}):s("form",{onSubmit:async A=>{A.preventDefault();const O=A.target,P=new FormData(O),x=[];P.forEach((S,V)=>{V==="poll"&&x.push(S)}),x.length&&(a("loading"),await o(x),a("default"))},children:[s("div",{class:"poll-options",children:d.map((A,O)=>{const{title:P}=A;return s("div",{class:"poll-option",children:s("label",{class:"poll-label",children:[s("input",{type:f?"checkbox":"radio",name:"poll",value:O,disabled:i==="loading",readOnly:n}),s("span",{class:"poll-option-title",children:s(Bt,{text:P,emojis:y})})]})})})}),!n&&s("button",{class:"poll-vote-button",type:"submit",disabled:i==="loading",children:"Vote"})]}),s("p",{class:"poll-meta",children:[!u&&!n&&s("button",{type:"button",class:"plain small",disabled:i==="loading",onClick:A=>{A.preventDefault(),a("loading"),(async()=>(await r(),a("default")))()},title:"Refresh",children:s(H,{icon:"refresh",alt:"Refresh"})}),!m&&!u&&!n&&M&&s("button",{type:"button",class:"plain small",disabled:i==="loading",onClick:A=>{A.preventDefault(),b(!w)},title:w?"Hide results":"Show results",children:[s(H,{icon:w?"eye-open":"eye-close",alt:w?"Hide results":"Show results"})," "]}),!u&&!n&&" ",s("span",{title:g,children:mt(g)})," vote",g===1?"":"s",!!h&&h!==g&&s(U,{children:[" ","• ",s("span",{title:h,children:mt(h)})," ","voter",h===1?"":"s"]})," ","• ",u?"Ended":"Ending"," ",!!T&&s(Mt,{datetime:T})]})," "]})}const Fs=ot();function Au(e,t){if(!(e!=null&&e.length))return!1;const n=e.filter(i=>{const{filter:a}=i,u=a.context.includes(t);return u?a.expiresAt?new Date(a.expiresAt)>new Date:u:!1});if(!n.length)return!1;if(n.some(i=>i.filter.filterAction==="hide"))return{action:"hide"};if(n.some(i=>i.filter.filterAction==="warn")){const i=n.map(a=>a.filter.title);return{action:"warn",titles:i,titlesStr:i.join(" • ")}}return!1}const Mo=st(Au);function Iu(e,t,n){var a;const{filtered:r}=e;if(!(r!=null&&r.length)||n&&((a=e.account)==null?void 0:a.id)===n)return!0;const i=Mo(r,t);return i?i.action!=="hide":!0}function Cf(e,t){if(!(e!=null&&e.length))return[];if(!t)return e;const n=ho();return e.filter(r=>Iu(r,t,n))}const zr=document.createElement("div");function Hr(e){return e?(zr.innerHTML=e,zr.querySelectorAll(".invisible").forEach(t=>{t.remove()}),zr.innerText.length):0}const un="speechSynthesis"in window;function yi(e,t){if(un)try{speechSynthesis.speaking&&speechSynthesis.cancel();const n=new SpeechSynthesisUtterance(e);t&&(n.lang=t),speechSynthesis.speak(n)}catch(n){alert(n)}}function zs(e){var a;const{spoilerText:t,content:n,poll:r,mediaAttachments:o}=e;let i="";return t!=null&&t.trim()?i+=t:i+=cr(n),i=i.trim(),(a=r==null?void 0:r.options)!=null&&a.length&&(i+=` - -📊: -${r.options.map(u=>`${r.multiple?"▪️":"•"} ${u.title}`).join(` -`)}`),o!=null&&o.length&&(i+=" "+o.map(u=>({image:"🖼️",gifv:"🎞️",video:"📹",audio:"🎵",unknown:""})[u.type]||"").join("")),i}function $u(e,t,n){var r=this,o=j(null),i=j(0),a=j(null),u=j([]),c=j(),l=j(),f=j(e),d=j(!0);f.current=e;var p=typeof window<"u",m=!t&&t!==0&&p;if(typeof e!="function")throw new TypeError("Expected a function");t=+t||0;var h=!!(n=n||{}).leading,g=!("trailing"in n)||!!n.trailing,y="maxWait"in n,T="debounceOnServer"in n&&!!n.debounceOnServer,_=y?Math.max(+n.maxWait||0,t):null;se(function(){return d.current=!0,function(){d.current=!1}},[]);var E=fe(function(){var w=function(x){var S=u.current,V=c.current;return u.current=c.current=null,i.current=x,l.current=f.current.apply(V,S)},b=function(x,S){m&&cancelAnimationFrame(a.current),a.current=m?requestAnimationFrame(x):setTimeout(x,S)},M=function(x){if(!d.current)return!1;var S=x-o.current;return!o.current||S>=t||S<0||y&&x-i.current>=_},A=function(x){return a.current=null,g&&u.current?w(x):(u.current=c.current=null,l.current)},O=function x(){var S=Date.now();if(M(S))return A(S);if(d.current){var V=t-(S-o.current),B=y?Math.min(V,_-(S-i.current)):V;b(x,B)}},P=function(){if(p||T){var x=Date.now(),S=M(x);if(u.current=[].slice.call(arguments),c.current=r,o.current=x,S){if(!a.current&&d.current)return i.current=o.current,b(O,t),h?w(o.current):l.current;if(y)return b(O,t),w(o.current)}return a.current||b(O,t),l.current}};return P.cancel=function(){a.current&&(m?cancelAnimationFrame(a.current):clearTimeout(a.current)),i.current=0,u.current=o.current=c.current=a.current=null},P.isPending=function(){return!!a.current},P.flush=function(){return a.current?A(Date.now()):l.current},P},[h,y,t,_,g,m,p,T]);return E}function Lu(e,t,n){var r=n===void 0?{}:n,o=r.leading,i=r.trailing;return $u(e,t,{maxWait:t,leading:o===void 0||o,trailing:i===void 0||i})}function Cu(e,t){var n=j(null),r=j(null);r.current=t;var o=j(null);se(function(){i()});var i=Ie(function(){var a=o.current,u=r.current,c=a||(u?u instanceof Element?u:u.current:null);n.current&&n.current.element===c&&n.current.subscriber===e||(n.current&&n.current.cleanup&&n.current.cleanup(),n.current={element:c,subscriber:e,cleanup:c?e(c):void 0})},[e]);return se(function(){return function(){n.current&&n.current.cleanup&&(n.current.cleanup(),n.current=null)}},[]),Ie(function(a){o.current=a,i()},[i])}function _i(e,t,n){return e[t]?e[t][0]?e[t][0][n]:e[t][n]:t==="contentBoxSize"?e.contentRect[n==="inlineSize"?"width":"height"]:void 0}function Pu(e){e===void 0&&(e={});var t=e.onResize,n=j(void 0);n.current=t;var r=e.round||Math.round,o=j(),i=te({width:void 0,height:void 0}),a=i[0],u=i[1],c=j(!1);se(function(){return c.current=!1,function(){c.current=!0}},[]);var l=j({width:void 0,height:void 0}),f=Cu(Ie(function(d){return(!o.current||o.current.box!==e.box||o.current.round!==r)&&(o.current={box:e.box,round:r,instance:new ResizeObserver(function(p){var m=p[0],h=e.box==="border-box"?"borderBoxSize":e.box==="device-pixel-content-box"?"devicePixelContentBoxSize":"contentBoxSize",g=_i(m,h,"inlineSize"),y=_i(m,h,"blockSize"),T=g?r(g):void 0,_=y?r(y):void 0;if(l.current.width!==T||l.current.height!==_){var E={width:T,height:_};l.current.width=T,l.current.height=_,n.current?n.current(E):c.current||u(E)}})}),o.current.instance.observe(d,{box:e.box}),function(){o.current&&o.current.instance.unobserve(d)}},[e.box,r]),e.ref);return fe(function(){return{ref:f,width:a.width,height:a.height}},[f,a.width,a.height])}function qn({className:e="truncated"}={}){const t=j(),n=Lu(({height:r})=>{if(t.current){const{scrollHeight:o}=t.current;let i=o>r;if(i){const{height:a,maxHeight:u}=getComputedStyle(t.current),c=parseInt(u||a,10);i=o>c}t.current.classList.toggle(e,i)}},300);return Pu({ref:t,box:"border-box",onResize:n}),t}const ro={public:"earth",unlisted:"group",private:"lock",direct:"message"};var Hs="kvfysmfp",Vs="ufhsfnkm",Ou=".".concat(Hs,"{overflow:hidden;touch-action:none}.").concat(Vs,"{transform-origin: 0 0}"),Du=typeof window>"u",Ru=function(){return!Du&&("ontouchstart"in window||navigator.maxTouchPoints>0)};var Nu=function(e){var t=e.x,n=e.y,r=e.scale;return"scale3d(".concat(r,",").concat(r,", 1) translate3d(").concat(t,"px, ").concat(n,"px, 0)")};var Fu=Math.min,zu=Math.max;function bi(e){var t=e.containerDimension,n=e.childDimension,r=e.padding,o=e.centerContained,i=n-t;return i+2*r<=0&&o?[i/2,i/2]:[Fu(i+r,0)-r,zu(0,i+r)]}var wi=function(e,t){return t?"".concat(e," ").concat(t):e},jn=Math.abs,Hu=Math.min,Vu=Math.sqrt,js=typeof window>"u",ju=js?!1:/(Mac)/i.test(navigator.platform),Dt=function(e){return e==="drag"},rn=function(e){return e==="zoom"},Bu=function(e){return ju&&e.ctrlKey},on=function(e){e.stopPropagation(),e.preventDefault()},Ti=function(e,t){var n=e.x-t.x,r=e.y-t.y;return Vu(n*n+r*r)},Uu=function(e,t){var n=Ti(e[0],e[1]),r=Ti(t[0],t[1]);return r/n},Wu=function(e,t){return e>t-.01&&et?t:n},qu=function(e){return!(e.ctrlKey||e.metaKey)},Gu=function(e){if(e){var t=e.offsetWidth,n=e.offsetHeight;if(t&&n)return{width:t,height:n};var r=getComputedStyle(e),o=parseFloat(r.width),i=parseFloat(r.height);if(i&&o)return{width:o,height:i}}return{width:0,height:0}},Xu=function(e,t){return{x:t.x-e.x,y:t.y-e.y}},Ju=function(e,t){return e.x===t.x&&e.y===t.y},Tt=function(){},Un={x:0,y:0},xi=function(e){Ta(t,e);function t(){var n=e!==null&&e.apply(this,arguments)||this;return n._prevDragMovePoint=null,n._containerObserver=null,n._fingers=0,n._firstMove=!0,n._initialOffset=Pe({},Un),n._interaction=null,n._isDoubleTap=!1,n._isOffsetsSet=!1,n._lastDragPosition=null,n._lastScale=1,n._lastTouchStart=0,n._lastZoomCenter=null,n._listenMouseMove=!1,n._nthZoom=0,n._offset=Pe({},Un),n._startOffset=Pe({},Un),n._startTouches=null,n._updatePlaned=!1,n._wheelTimeOut=null,n._zoomFactor=1,n._initialZoomFactor=1,n._draggingPoint=Pe({},Un),n._ignoreNextClick=!1,n._containerRef=Ea(),n._handleClick=function(r){n._ignoreNextClick&&(n._ignoreNextClick=!1,r.stopPropagation())},n._onResize=function(){var r;!((r=n._containerRef)===null||r===void 0)&&r.current&&(n._updateInitialZoomFactor(),n._setupOffsets(),n._update())},n._handlerOnTouchEnd=n._handlerIfEnable(function(r){n._fingers=r.touches.length,n.props.shouldCancelHandledTouchEndEvents&&(rn(n._interaction)||Dt(n._interaction)&&(n._startOffset.x!==n._offset.x||n._startOffset.y!==n._offset.y))&&on(r),Dt(n._interaction)&&!n._enoughToDrag()&&n._handleClick(r),n._updateInteraction(r)}),n._handlerOnTouchStart=n._handlerIfEnable(function(r){n._firstMove=!0,n._fingers=r.touches.length,n._detectDoubleTap(r)}),n._handlerOnTouchMove=n._handlerIfEnable(function(r){n._isDoubleTap||(n._collectInertia(r),n._firstMove?(n._updateInteraction(r),n._interaction&&on(r),n._startOffset=Pe({},n._offset),n._startTouches=Bn(r.touches)):(rn(n._interaction)?n._startTouches&&n._startTouches.length===2&&r.touches.length===2&&n._handleZoom(r,Uu(n._startTouches,Bn(r.touches))):Dt(n._interaction)&&n._handleDrag(r),n._interaction&&(on(r),n._update())),n._firstMove=!1)}),n._handlerWheel=function(r){if(!n.props.shouldInterceptWheel(r)){on(r);var o=r.pageX,i=r.pageY,a=r.deltaY,u=r.deltaMode,c=1;(Bu(r)||u===1)&&(c=15);var l={touches:[{pageX:o,pageY:i}]},f=n._getOffsetByFirstTouch(l),d=a*c;n._stopAnimation(),n._scaleTo(n._zoomFactor-d/n.props.wheelScaleFactor,f),n._update(),clearTimeout(n._wheelTimeOut),n._wheelTimeOut=setTimeout(function(){return n._sanitize()},100)}},n._handlers=n.props.isTouch()?[["touchstart",n._handlerOnTouchStart],["touchend",n._handlerOnTouchEnd],["touchmove",n._handlerOnTouchMove]]:[["mousemove",n.simulate(n._handlerOnTouchMove),n.props._document],["mouseup",n.simulate(n._handlerOnTouchEnd),n.props._document],["mousedown",n.simulate(n._handlerOnTouchStart)],["click",n._handleClick],["wheel",n._handlerWheel]],n}return t.prototype._handleDragStart=function(n){this._ignoreNextClick=!0,this.props.onDragStart(),this._stopAnimation(),this._resetInertia(),this._lastDragPosition=null,this._hasInteraction=!0,this._draggingPoint=this._offset,this._handleDrag(n)},t.prototype._handleDrag=function(n){var r=this._getOffsetByFirstTouch(n);this._enoughToDrag()?this._drag(r,this._lastDragPosition):this._virtualDrag(r,this._lastDragPosition),this._offset=this._sanitizeOffset(this._offset),this._lastDragPosition=r},t.prototype._resetInertia=function(){this._velocity=null,this._prevDragMovePoint=null},t.prototype._realizeInertia=function(){var n=this,r=this.props,o=r.inertiaFriction,i=r.inertia;if(!(!i||!this._velocity)){var a=this._velocity,u=a.x,c=a.y;if(u||c){this._stopAnimation(),this._resetInertia();var l=function(){if(u*=o,c*=o,!u&&!c)return n._stopAnimation();var f=Pe({},n._offset);if(n._addOffset({x:u,y:c}),n._offset=n._sanitizeOffset(n._offset),Ju(f,n._offset))return n._stopAnimation();n._update({isAnimation:!0})};this._animate(l,{duration:9999})}}},t.prototype._collectInertia=function(n){var r=n.touches;if(this.props.inertia){var o=Bn(r)[0],i=this._prevDragMovePoint;i&&(this._velocity=Xu(o,i)),this._prevDragMovePoint=o}},t.prototype._handleDragEnd=function(){this.props.onDragEnd(),this._end(),this._realizeInertia()},t.prototype._handleZoomStart=function(){this.props.onZoomStart(),this._stopAnimation(),this._lastScale=1,this._nthZoom=0,this._lastZoomCenter=null,this._hasInteraction=!0},t.prototype._handleZoom=function(n,r){var o=Yu(this._getOffsetTouches(n)),i=r/this._lastScale;this._lastScale=r,this._nthZoom+=1,this._nthZoom>3&&(this._scale(i,o),this._drag(o,this._lastZoomCenter),this.props.enforceBoundsDuringZoom&&(this._offset=this._sanitizeOffset(this._offset))),this._lastZoomCenter=o},t.prototype._handleZoomEnd=function(){this.props.onZoomEnd(),this._end()},t.prototype._handleDoubleTap=function(n){var r=this;if(!(this._hasInteraction||this.props.tapZoomFactor===0)){var o=this.props.doubleTapZoomOutOnMaxScale&&this._zoomFactor===this.props.maxZoom||this.props.doubleTapToggleZoom&&this._zoomFactor>1;this.props.onDoubleTap(),this._ignoreNextClick=!0;var i=this._zoomFactor+this.props.tapZoomFactor,a=this._zoomFactor,u=function(l){r._scaleTo(a+l*(i-a),c)},c=this._getOffsetByFirstTouch(n);this._isDoubleTap=!0,a>i&&(c=this._getCurrentZoomCenter()),o?this._zoomOutAnimation():this._animate(u)}},t.prototype._computeInitialOffset=function(){var n=this._getContainerRect(),r=this._getChildSize(),o=r.width,i=r.height,a=-jn(o*this._getInitialZoomFactor()-n.width)/2,u=-jn(i*this._getInitialZoomFactor()-n.height)/2;this._initialOffset={x:a,y:u}},t.prototype._resetOffset=function(){this._offset=Pe({},this._initialOffset)},t.prototype._setupOffsets=function(){this.props.setOffsetsOnce&&this._isOffsetsSet||(this._isOffsetsSet=!0,this._computeInitialOffset(),this._resetOffset())},t.prototype._sanitizeOffset=function(n){var r=this._getContainerRect(),o=this._getChildSize(),i=o.width,a=o.height,u=i*this._getInitialZoomFactor()*this._zoomFactor,c=a*this._getInitialZoomFactor()*this._zoomFactor,l=bi({containerDimension:r.width,childDimension:u,padding:this.props.horizontalPadding,centerContained:this.props.centerContained}),f=l[0],d=l[1],p=bi({containerDimension:r.height,childDimension:c,padding:this.props.verticalPadding,centerContained:this.props.centerContained}),m=p[0],h=p[1];return{x:Vr(f,d,n.x),y:Vr(m,h,n.y)}},t.prototype.alignCenter=function(n){var r=this,o=Pe({duration:250,animated:!0},n),i=o.x,a=o.y,u=o.scale,c=o.animated,l=o.duration,f=i*this._initialZoomFactor,d=a*this._initialZoomFactor,p=this._zoomFactor,m=Pe({},this._offset),h=this._getContainerRect(),g={x:h.width/2,y:h.height/2};if(this._zoomFactor=1,this._offset={x:-(g.x-f),y:-(g.y-d)},this._scaleTo(u,g),this._stopAnimation(),!c)return this._update();var y=this._zoomFactor-p,T={x:this._offset.x-m.x,y:this._offset.y-m.y};this._zoomFactor=p,this._offset=Pe({},m);var _=function(E){var w=m.x+T.x*E,b=m.y+T.y*E;r._zoomFactor=p+y*E,r._offset=r._sanitizeOffset({x:w,y:b}),r._update()};this._animate(_,{callback:function(){return r._sanitize()},duration:l})},t.prototype.scaleTo=function(n){var r=this,o=Pe({duration:250,animated:!0},n),i=o.x,a=o.y,u=o.scale,c=o.animated,l=o.duration,f=this._zoomFactor,d=Pe({},this._offset);if(this._zoomFactor=1,this._offset={x:0,y:0},this._scaleTo(u,{x:i,y:a}),this._stopAnimation(),!c)return this._update();var p=this._zoomFactor-f,m={x:this._offset.x-d.x,y:this._offset.y-d.y};this._zoomFactor=f,this._offset=Pe({},d);var h=function(g){var y=d.x+m.x*g,T=d.y+m.y*g;r._zoomFactor=f+p*g,r._offset={x:y,y:T},r._update()};this._animate(h,{callback:function(){return r._sanitize()},duration:l})},t.prototype._scaleTo=function(n,r){this._scale(n/this._zoomFactor,r),this._offset=this._sanitizeOffset(this._offset)},t.prototype._scale=function(n,r){n=this._scaleZoomFactor(n),this._addOffset({x:(n-1)*(r.x+this._offset.x),y:(n-1)*(r.y+this._offset.y)}),this.props.onZoomUpdate()},t.prototype._scaleZoomFactor=function(n){var r=this._zoomFactor;return this._zoomFactor*=n,this._zoomFactor=Vr(this.props.minZoom,this.props.maxZoom,this._zoomFactor),this._zoomFactor/r},t.prototype._canDrag=function(){return this.props.draggableUnZoomed||!Wu(this._zoomFactor,1)},t.prototype._drag=function(n,r){if(r){var o=-(n.y-r.y),i=-(n.x-r.x);this.props.lockDragAxis?jn(i)>jn(o)?this._addOffset({x:i,y:0}):this._addOffset({y:o,x:0}):this._addOffset({x:i,y:o}),this.props.onDragUpdate()}},t.prototype._virtualDrag=function(n,r){if(r){var o=-(n.y-r.y),i=-(n.x-r.x);this._draggingPoint={x:i+this._draggingPoint.x,y:o+this._draggingPoint.y}}},t.prototype._addOffset=function(n){var r=this._offset,o=r.x,i=r.y;this._offset={x:o+n.x,y:i+n.y}},t.prototype._sanitize=function(){this._zoomFactor=l?(n(1),o._stopAnimation(),c(),o._update()):(p=u(p),n(p),o._update({isAnimation:!0}),requestAnimationFrame(f))}};this._inAnimation=!0,requestAnimationFrame(f)},t.prototype._stopAnimation=function(){this._inAnimation=!1},t.prototype._end=function(){this._hasInteraction=!1,this._sanitize(),this._update()},t.prototype._getContainerRect=function(){var n=this._containerRef.current;return n.getBoundingClientRect()},t.prototype._getChildSize=function(){var n=this._containerRef.current;return Gu(n==null?void 0:n.firstElementChild)},t.prototype._updateInitialZoomFactor=function(){var n=this._getContainerRect(),r=this._getChildSize(),o=n.width/r.width,i=n.height/r.height;this._initialZoomFactor=Hu(o,i)},t.prototype._bindEvents=function(){var n=this,r=this._containerRef.current;window.ResizeObserver?(this._containerObserver=new ResizeObserver(this._onResize),this._containerObserver.observe(r)):window.addEventListener("resize",this._onResize),this._handlers.forEach(function(o){var i=o[0],a=o[1],u=o[2];(u||r).addEventListener(i,a,!0)}),Array.from(r.querySelectorAll("img")).forEach(function(o){return o.addEventListener("load",n._onResize)})},t.prototype._unSubscribe=function(){var n=this,r=this._containerRef.current;this._containerObserver&&(this._containerObserver.disconnect(),this._containerObserver=null),window.removeEventListener("resize",this._onResize),this._handlers.forEach(function(o){var i=o[0],a=o[1],u=o[2];(u||r).removeEventListener(i,a,!0)}),Array.from(r.querySelectorAll("img")).forEach(function(o){return o.removeEventListener("load",n._onResize)})},t.prototype._update=function(n){var r=this;if(!this._updatePlaned){var o=function(){var i=r._getInitialZoomFactor()*r._zoomFactor,a=-r._offset.x/i,u=-r._offset.y/i;r.props.onUpdate({scale:i,x:a,y:u})};if(n!=null&&n.isAnimation)return o();this._updatePlaned=!0,requestAnimationFrame(function(){r._updatePlaned=!1,o()})}},t.prototype._handlerIfEnable=function(n){var r=this;return function(){for(var o=[],i=0;ir?n-r:r-n},t.prototype._enoughToDrag=function(){return this._distanceBetweenNumbers(this._startOffset.x,this._draggingPoint.x)>5||this._distanceBetweenNumbers(this._startOffset.y,this._draggingPoint.y)>5},t.prototype._updateInteraction=function(n){var r=this._fingers;if(r===2)return this._setInteraction("zoom",n);if(r===1&&this._canDrag())return this._setInteraction("drag",n);this._setInteraction(null,n)},t.prototype._detectDoubleTap=function(n){var r=new Date().getTime();this._fingers>1&&(this._lastTouchStart=0),r-this._lastTouchStart<300?(on(n),this._handleDoubleTap(n),rn(this._interaction)?this._handleZoomEnd():Dt(this._interaction)&&this._handleDragEnd()):this._isDoubleTap=!1,this._fingers===1&&(this._lastTouchStart=r)},t.prototype.simulate=function(n){var r=this;return function(o){var i=o.pageX,a=o.pageY,u=o.type,c=u==="mouseup",l=u==="mousedown";l&&(o.preventDefault(),r._listenMouseMove=!0),r._listenMouseMove&&(o.touches=c?[]:[{pageX:i,pageY:a}],n(o)),c&&(r._listenMouseMove=!1)}},t.prototype.componentDidMount=function(){this._bindEvents(),this._update()},t.prototype.componentWillUnmount=function(){this._stopAnimation(),this._unSubscribe()},t.prototype.render=function(){var n=this.props,r=n.children,o=n.containerProps,i=xa.only(r),a=o||{};return Dn.createElement(Dn.Fragment,null,Dn.createElement("style",null,Ou),Dn.createElement("div",Pe({},a,{ref:this._containerRef,className:wi(Hs,a.className)}),Ri(i,{className:wi(Vs,i.props.className)})))},t.defaultProps={animationDuration:250,draggableUnZoomed:!0,enforceBoundsDuringZoom:!1,centerContained:!1,enabled:!0,inertia:!0,inertiaFriction:.96,horizontalPadding:0,isTouch:Ru,lockDragAxis:!1,maxZoom:5,minZoom:.5,onDoubleTap:Tt,onDragEnd:Tt,onDragStart:Tt,onDragUpdate:Tt,onZoomEnd:Tt,onZoomStart:Tt,onZoomUpdate:Tt,setOffsetsOnce:!1,shouldInterceptWheel:qu,shouldCancelHandledTouchEndEvents:!1,tapZoomFactor:1,verticalPadding:0,wheelScaleFactor:1500,zoomOutFactor:1.3,doubleTapZoomOutOnMaxScale:!1,doubleTapToggleZoom:!1,_document:js?null:window.document},t}(Fi);if(0)var Pf,Of,Df,Rf,Nf,Ff,zf;function jr(e){if(!e)return;let t=Math.floor(e/3600),n=Math.floor(e%3600/60),r=Math.round(e%60);return t===0?`${n}:${r.toString().padStart(2,"0")}`:`${t}:${n.toString().padStart(2,"0")}:${r.toString().padStart(2,"0")}`}const Qu=/^((?!chrome|android).)*safari/i.test(navigator.userAgent),ed="ALT",Br=e=>{const{alt:t,lang:n,index:r,...o}=e;return!t||!t.trim()?null:s("button",{type:"button",class:"alt-badge clickable",...o,onClick:i=>{i.stopPropagation(),i.preventDefault(),W.showMediaAlt={alt:t,lang:n}},title:"Media description",children:[ed,!!r&&s("sup",{children:r})]})},td=140,nd=280,Bs=st(e=>e!=null&&e.length?e.length>td||/[\n\r].*[\n\r]/.test(e.trim()):!1);function rd({class:e="",media:t,to:n,lang:r,showOriginal:o,autoAnimate:i,showCaption:a,allowLongerCaption:u,altIndex:c,onClick:l=()=>{}}){let{blurhash:f,description:d,meta:p,previewRemoteUrl:m,previewUrl:h,remoteUrl:g,url:y,type:T}=t;/no\-preview\./i.test(h)&&(h=null);const{original:_={},small:E,focus:w}=p||{},b=o?_==null?void 0:_.width:(E==null?void 0:E.width)||(_==null?void 0:_.width),M=o?_==null?void 0:_.height:(E==null?void 0:E.height)||(_==null?void 0:_.height),A=o?y:h||y,O=o?g:m||g,P=b&&M,x=P?b>M?"landscape":"portrait":null,S=f?xo(f):null,V=j();let B;if(w){const Y=(w.x+1)/2*100,ge=(1-w.y)/2*100;B=`${Y.toFixed(0)}% ${ge.toFixed(0)}%`}const D=j(),$=Ie(({x:Y,y:ge,scale:ee})=>{const{current:J}=D;if(J){const pe=Nu({x:Y,y:ge,scale:ee});ee===1?J.style.removeProperty("transform"):J.style.setProperty("transform",pe),J.closest(".media-zoom").style.touchAction=ee<=1.01?"pan-x":""}},[]),[k,R]=te(!1),L={enabled:k,draggableUnZoomed:!1,inertiaFriction:.9,tapZoomFactor:2,doubleTapToggleZoom:!0,containerProps:{className:"media-zoom",style:{overflow:"visible"}},onUpdate:$},z=fe(()=>n?Y=>s(jt,{to:n,...Y}):"div",[n]),F=O?od(O):null,C=T==="unknown"&&F&&/\.(mp4|m4r|m4v|mov|webm)$/i.test(F.pathname),K=T==="unknown"&&F&&/\.(mp3|ogg|wav|m4a|m4p|m4b)$/i.test(F.pathname),Z=T==="image"||T==="unknown"&&h&&!C&&!K,ne=j(),[le,Te]=te(!1);pn(()=>{if(!Z||!o||!ne.current)return;const{offsetWidth:Y,offsetHeight:ge}=ne.current,ee=b{const{children:ge,...ee}=Y;return s("figure",{...ee,children:[ge,s("figcaption",{class:"media-caption",lang:r,dir:"auto",onClick:J=>{J.preventDefault(),J.stopPropagation(),W.showMediaAlt={alt:d,lang:r}},children:d})]})}:U,[Ee,ct]=te(void 0);if(Z)return L.containerProps.style.display="inherit",pn(()=>{Qu&&o&&(async()=>{try{await fetch(A,{mode:"no-cors"}),D.current.src=A}catch{}})()},[A]),s(oe,{children:s(z,{ref:ne,class:`media media-image ${e}`,onClick:l,"data-orientation":x,"data-has-alt":!q||void 0,"data-has-natural-aspect-ratio":Ee||void 0,style:o?{backgroundImage:`url(${h})`,backgroundSize:le?`${b}px ${M}px`:void 0,...ye}:ie,children:o?s(xi,{...L,children:s("img",{ref:D,src:A,alt:d,width:b,height:M,"data-orientation":x,loading:"eager",decoding:"sync",onLoad:Y=>{Y.target.closest(".media-image").style.backgroundImage="",Y.target.closest(".media-zoom").style.display="",R(!0)},onError:Y=>{const{src:ge}=Y.target;ge===A&&O&&A!==O&&(Y.target.src=O)}})}):s(U,{children:[s("img",{src:A,alt:q?"":d,width:b,height:M,"data-orientation":x,loading:"lazy",style:{objectPosition:B||"center","--anim-duration":`${Math.min(Math.max(Math.max(b,M)/100,5),120)}s`},onLoad:Y=>{Y.target.dataset.loaded=!0;const ge=Y.target.closest(".media");if(!P&&ge){const{naturalWidth:ee,naturalHeight:J}=Y.target;ge.dataset.orientation=ee>J?"landscape":"portrait",ge.style.setProperty("--width",`${ee}px`),ge.style.setProperty("--height",`${J}px`),ge.style.aspectRatio=`${ee}/${J}`}if(ge){const{clientWidth:ee,clientHeight:J,naturalWidth:pe,naturalHeight:ue}=Y.target;if(ee&&J&&pe&&ue)if(pe<88||ue<88)ge.dataset.hasSmallDimension=!0;else{const ze=ue*ee/pe;Math.abs(ze-J)<5&&ct(!0)}}},onError:Y=>{const{src:ge}=Y.target;ge===A&&A!==O&&(Y.target.src=O)}}),!q&&s(Br,{alt:d,lang:r,index:c})]})})});if(T==="gifv"||T==="video"||C){const Y=_.duration>0,ge=_.duration<31,ee=T==="gifv"&&ge,J=_.duration<61,pe=jr(_.duration),ue=!o&&!i&&ee,ae=!o&&i&&ee,ze=_.duration>5,Le=` - - `,Ve=` - - `;return s(oe,{children:s(z,{class:`media ${e} media-${ee?"gif":"video"} ${ae?"media-contain":""} ${ue?"media-hover-animate":""}`,"data-orientation":x,"data-formatted-duration":o?void 0:pe,"data-label":ee&&!o&&!ae?"GIF":void 0,"data-has-alt":!q||void 0,style:!o&&ie,onClick:Se=>{if(ue)try{V.current.pause()}catch{}l(Se)},onMouseEnter:()=>{if(ue)try{V.current.play()}catch{}},onMouseLeave:()=>{if(ue)try{V.current.pause()}catch{}},onFocus:()=>{if(ue)try{V.current.play()}catch{}},onBlur:()=>{if(ue)try{V.current.pause()}catch{}},children:[o||ae?ee&&o?s(xi,{...L,enabled:!0,children:s("div",{ref:D,dangerouslySetInnerHTML:{__html:Le}})}):ee?s("div",{class:"video-container",dangerouslySetInnerHTML:{__html:Le}}):s("div",{class:"video-container",dangerouslySetInnerHTML:{__html:Ve}}):ee?s("video",{ref:V,src:y,poster:h,width:b,height:M,"data-orientation":x,preload:"auto",playsinline:!0,loop:!0,muted:!0,onTimeUpdate:ze?Se=>{const{target:Ae}=Se,Re=Ae==null?void 0:Ae.closest(".media-gif");if(Re){const _e=Ae.currentTime/Ae.duration*100;Re.style.setProperty("--progress",`${_e}%`)}}:void 0}):s(U,{children:[h?s("img",{src:h,alt:q?"":d,width:b,height:M,"data-orientation":x,loading:"lazy",decoding:"async",onLoad:Se=>{if(!P){const Ae=Se.target.closest(".media");if(Ae){const{naturalHeight:Re,naturalWidth:_e}=Se.target;Ae.dataset.orientation=_e>Re?"landscape":"portrait",Ae.style.setProperty("--width",`${_e}px`),Ae.style.setProperty("--height",`${Re}px`),Ae.style.aspectRatio=`${_e}/${Re}`}}}}):s("video",{src:y+"#t=0.1",width:b,height:M,"data-orientation":x,preload:"metadata",muted:!0,disablePictureInPicture:!0,onLoadedMetadata:Se=>{if(!Y){const{duration:Ae}=Se.target;if(Ae){const Re=jr(Ae),_e=Se.target.closest(".media-video");_e&&(_e.dataset.formattedDuration=Re)}}}}),s("div",{class:"media-play",children:s(H,{icon:"play",size:"xl"})})]}),!o&&!q&&s(Br,{alt:d,lang:r,index:c})]})})}else if(T==="audio"||K){const Y=jr(_.duration);return s(oe,{children:s(z,{class:`media media-audio ${e}`,"data-formatted-duration":o?void 0:Y,"data-has-alt":!q||void 0,onClick:l,style:!o&&ie,children:[o?s("audio",{src:g||y,preload:"none",controls:!0,autoPlay:!0}):h?s("img",{src:h,alt:q?"":d,width:b,height:M,"data-orientation":x,loading:"lazy",onError:ge=>{var ee,J;try{(J=(ee=ge.target)==null?void 0:ee.remove)==null||J.call(ee)}catch{}}}):null,!o&&s(U,{children:[s("div",{class:"media-play",children:s(H,{icon:"play",size:"xl"})}),!q&&s(Br,{alt:d,lang:r,index:c})]})]})})}}function od(e){return URL.parse(e,location.origin)}const oo=it(rd,(e,t)=>{const n=e.media||{},r=t.media||{};return(n==null?void 0:n.id)===(r==null?void 0:r.id)&&n.url===r.url&&e.to===t.to&&e.class===t.class}),id=280,sd=140,ad=zi({limit:1,interval:1e3});function cd(e,t){return t.v1.accounts.$select(e).fetch()}const ld=fo(ad(cd)),dn={public:"Public",unlisted:"Unlisted",private:"Followers only",direct:"Private mention"},ud=window.ontouchstart!==void 0&&/iPad|iPhone|iPod/.test(navigator.userAgent),dd=new Intl.RelativeTimeFormat,Mi=80;function fd(e){var t;return(t=e==null?void 0:e.options)!=null&&t.length?`📊: -${e.options.map(n=>`- ${n.title}${n.votesCount>=0?` (${n.votesCount})`:""}`).join(` -`)}`:""}function Ur(e){const{spoilerText:t,content:n,poll:r}=e;return(t?`${t} - -`:"")+cr(n)+fd(r)}const Si=it(({post:e,instance:t,previewMode:n})=>{const{content:r,emojis:o,language:i,mentions:a,url:u}=e;return s("div",{lang:i,dir:"auto",class:"inner-content",onClick:$l({mentions:a,instance:t,previewMode:n,statusURL:u}),dangerouslySetInnerHTML:{__html:ws(r,{emojis:o,postEnhanceDOM:c=>{c.querySelectorAll('a.u-url[target="_blank"]').forEach(l=>{/http/i.test(l.innerText.trim())||l.removeAttribute("target")})}})}})},(e,t)=>{const{post:n}=e,{post:r}=t;return n.content===r.content}),hd={s:"small",m:"medium",l:"large"},pd=st(e=>{if(e=e==null?void 0:e.trim(),(e==null?void 0:e.length)>500)return null;const n=Aa(e)[0];return n!=null&&n.lang&&(n==null?void 0:n.accuracy)>.5?n.lang:null});function Ut({statusID:e,status:t,instance:n,size:r="m",contentTextWeight:o,readOnly:i,enableCommentHint:a,withinContext:u,skeleton:c,enableTranslate:l,forceTranslate:f,previewMode:d,onMediaClick:p,quoted:m,onStatusLinkClick:h=()=>{},showFollowedTags:g,allowContextMenu:y,showActionsBar:T,showReplyParent:_,mediaFirst:E}){var Uo,Wo,Ko;if(c)return s("div",{class:`status skeleton ${E?"status-media-first small":""}`,children:[!E&&s(nt,{size:"xxl"}),s("div",{class:"container",children:[s("div",{class:"meta",children:[(r==="s"||E)&&s(nt,{size:"m"})," ███ ████████"]}),s("div",{class:"content-container",children:[E&&s("div",{class:"media-first-container"}),s("div",{class:`content ${E?"media-first-content":""}`,children:s("p",{children:"████ ████████"})})]})]})]});const{masto:w,instance:b,authenticated:M}=Xn({instance:n}),{instance:A}=Xn(),O=b===A;let P=tt(e||(t==null?void 0:t.id),b);const x=wn(W);if(t||(t=x.statuses[P]||x.statuses[e],P=tt(t==null?void 0:t.id,b)),!t)return null;const{account:{acct:S,avatar:V,avatarStatic:B,id:D,url:$,displayName:k,username:R,emojis:L,bot:z,group:F},id:C,repliesCount:K,reblogged:Z,reblogsCount:ne,favourited:le,favouritesCount:Te,bookmarked:he,poll:ve,muted:ye,sensitive:ie,spoilerText:de,visibility:q,language:oe,editedAt:Ee,filtered:ct,card:Y,createdAt:ge,inReplyToId:ee,inReplyToAccountId:J,content:pe,mentions:ue,mediaAttachments:ae,reblog:ze,uri:Le,url:Ve,emojis:Se,tags:Ae,pinned:Re,_deleted:_e,_pinned:Zt,emojiReactions:It}=t,[$t,Yt]=te(null);se(()=>{if(!pe||oe)return;let v;return v=setTimeout(()=>{let N=pd(cr(pe,{preProcess:Q=>{Q.querySelectorAll(".mention, .hashtag, pre, code, a:has(.invisible)").forEach(ce=>{ce.remove()}),Q.querySelectorAll("a").forEach(ce=>{const Ce=ce.innerText.trim();(Ce.startsWith("https://")||Ce.startsWith("http://"))&&ce.remove()})}}));Yt(N)},1e3),()=>clearTimeout(v)},[pe,oe]);const we=oe||$t,qt=!!(ae!=null&&ae.length);E&&qt&&(r="s");const lt=fe(()=>ho(),[]),Qe=fe(()=>lt&<===D,[D,lt]),hr=De(Fs),ut=!Qe&&!i&&!d&&Mo(ct,hr);if((ut==null?void 0:ut.action)==="hide")return null;const re=v=>{v.shiftKey};if(r!=="l"&&ut)return s(Td,{status:t,filterInfo:ut,instance:b,containerProps:{onMouseEnter:re},showFollowedTags:!0,quoted:m});const be=new Date(ge),He=new Date(Ee);let Ne=ue==null?void 0:ue.find(v=>v.id===J);!Ne&&J===C&&(Ne={url:$,username:R,displayName:k});const[xe,vt]=te(Ne);if(!u&&!xe&&J){const v=W.accounts[J];v?vt(v):ld(J,w).then(N=>{vt(N),W.accounts[N.id]=N}).catch(N=>{})}const En=J===lt||(ue==null?void 0:ue.find(v=>v.id===lt)),je=fe(()=>!!(Zo.account.get("preferences")||{})["reading:expand:spoilers"],[]),xn=fe(()=>{var N;return((N=(Zo.account.get("preferences")||{})["reading:expand:media"])==null?void 0:N.toLowerCase())||"default"},[]),Ke=d||je||!!x.spoilers[C],dt=d||xn==="show_all"||!!x.spoilersMedia[C];if(ze)return F?s("div",{"data-state-post-id":P,class:"status-group",onMouseEnter:re,children:[s("div",{class:"status-pre-meta",children:[s(H,{icon:"group",size:"l",alt:"Group"})," ",s(an,{account:t.account,instance:b,showAvatar:!0})]}),s(Ut,{status:e?null:ze,statusID:e?ze.id:null,instance:b,size:r,contentTextWeight:o,readOnly:i,mediaFirst:E})]}):s("div",{"data-state-post-id":P,class:"status-reblog",onMouseEnter:re,children:[s("div",{class:"status-pre-meta",children:[s(H,{icon:"rocket",size:"l"})," ",s(an,{account:t.account,instance:b,showAvatar:!0})," ",s("span",{children:"boosted"})]}),s(Ut,{status:e?null:ze,statusID:e?ze.id:null,instance:b,size:r,contentTextWeight:o,readOnly:i,enableCommentHint:!0,mediaFirst:E})]});const pr=Ie(({children:v})=>s("div",{"data-state-post-id":P,class:"status-followed-tags",onMouseEnter:re,children:[s("div",{class:"status-pre-meta",children:[s(H,{icon:"hashtag",size:"l"})," ",x.statusFollowedTags[P].slice(0,3).map(N=>s(jt,{to:b?`/${b}/t/${N}`:`/t/${N}`,class:"status-followed-tag-item",children:N},N))]}),v]}),[P,b,x.statusFollowedTags[P]]),mr=g&&((Uo=x.statusFollowedTags[P])!=null&&Uo.length)?pr:U,me=r==="l",[yt,Gt]=te(f),_t=us(!0),ta=x.settings.contentTranslationHideLanguages||[],{contentTranslation:gr,contentTranslationAutoInline:ko}=x.settings;gr||(l=!1);const Ao=fe(()=>{if(!gr||!ko||i||u&&!me||d||de||ie||ve||Y||ae!=null&&ae.length)return!1;const v=Hr(pe);return v>0&&v<=sd},[gr,ko,i,u,me,d,de,ie,ve,Y,ae,pe]),[vr,Mn]=te(!1),[na,yr]=te(!1),Io=qn(),$o=qn(),ra=qn(),_r="Read more →",Lt=j(null),Xt="Sorry, your current logged-in instance can't interact with this post from another instance.",Lo=Ie(()=>Math.max(Math.round((de.length+Hr(pe))/140)||1,1),[de,pe]),Co=yn(be),Po=Ee&&yn(He);let Jt=M&&q!=="direct"&&q!=="private";q==="private"&&Qe&&(Jt=!0);const Sn=v=>{var N;if(!O||!M)return alert(Xt);(v!=null&&v.shiftKey||(N=v==null?void 0:v.syntheticEvent)!=null&&N.shiftKey)&&Ka({replyToStatus:t})||zn({replyToStatus:t})},br=fe(()=>ae.some(v=>{var N,Q;return!((Q=(N=v.description)==null?void 0:N.trim)!=null&&Q.call(N))}),[ae]),Oo=fe(()=>Math.floor((new Date-be)/(1e3*60*60*24*30)),[be]),df=async()=>{if(!O||!M)return alert(Xt),!1;try{if(!Z){let v="Boost this post?";if(br&&(v+=` - -⚠️ Some media have no descriptions.`),!confirm(v))return!1}if(W.statuses[P]={...t,reblogged:!Z,reblogsCount:ne+(Z?-1:1)},Z){const v=await w.v1.statuses.$select(C).unreblog();return Ze(v,b),!0}else{const v=await w.v1.statuses.$select(C).reblog();return Ze(v,b),!0}}catch{return W.statuses[P]=t,!1}},wr=async()=>{if(!O||!M)return alert(Xt),!1;try{if(W.statuses[P]={...t,reblogged:!Z,reblogsCount:ne+(Z?-1:1)},Z){const v=await w.v1.statuses.$select(C).unreblog();Ze(v,b)}else{const v=await w.v1.statuses.$select(C).reblog();Ze(v,b)}return!0}catch{return W.statuses[P]=t,!1}},Do=async()=>{if(!O||!M)return alert(Xt),!1;try{if(W.statuses[P]={...t,favourited:!le,favouritesCount:Te+(le?-1:1)},le){const v=await w.v1.statuses.$select(C).unfavourite();Ze(v,b)}else{const v=await w.v1.statuses.$select(C).favourite();Ze(v,b)}return!0}catch{return W.statuses[P]=t,!1}},Tr=async()=>{try{const v=await Do();!me&&v&&$e(le?`Unliked @${R||S}'s post`:`Liked @${R||S}'s post`)}catch{}},Ro=async()=>{if(Fn("@mastodon/post-bookmark")){if(!O||!M)return alert(Xt),!1;try{if(W.statuses[P]={...t,bookmarked:!he},he){const v=await w.v1.statuses.$select(C).unbookmark();Ze(v,b)}else{const v=await w.v1.statuses.$select(C).bookmark();Ze(v,b)}return!0}catch{return W.statuses[P]=t,!1}}},No=async()=>{try{const v=await Ro();!me&&v&&$e(he?`Unbookmarked @${R||S}'s post`:`Bookmarked @${R||S}'s post`)}catch{}},kn=!!we&&we!==_t&&!to([we],[_t])&&!ta.find(v=>we===v||to([we],[v])),Fo=j(),zo=j();async function oa(v){var ce,Ce,Ct,Er;v&&(Fo.current=w.v1.statuses.$select(e).rebloggedBy.list({limit:Mi}),zo.current=w.v1.statuses.$select(e).favouritedBy.list({limit:Mi}));const[{value:N},{value:Q}]=await Promise.allSettled([Fo.current.next(),zo.current.next()]);if((ce=N.value)!=null&&ce.length||(Ce=Q.value)!=null&&Ce.length){const bt=[];return(Ct=N.value)!=null&&Ct.length&&bt.push(...N.value.map(wt=>(wt._types=["reblog"],wt))),(Er=Q.value)!=null&&Er.length&&bt.push(...Q.value.map(wt=>(wt._types=["favourite"],wt))),{value:bt,done:N.done&&Q.done}}return{value:[],done:!0}}const ia=j(),Ho=["public","unlisted"].includes(q),sa=["public","unlisted","private"].includes(q),Vo=s(U,{children:[!me&&O&&s(U,{children:s("div",{class:"menu-control-group-horizontal status-menu",children:[s(ke,{onClick:Sn,children:[s(H,{icon:"comment"}),s("span",{children:K>0?mt(K):"Reply"})]}),s(Ar,{subMenu:!0,confirmLabel:s(U,{children:[s(H,{icon:"rocket"}),s("span",{children:Z?"Unboost":"Boost"})]}),className:`menu-reblog ${Z?"checked":""}`,menuExtras:s(ke,{onClick:()=>{zn({draftStatus:{status:` -${Ve}`}})},children:[s(H,{icon:"quote"}),s("span",{children:"Quote"})]}),menuFooter:br&&!Z?s("div",{class:"footer",children:[s(H,{icon:"alert"}),"Some media have no descriptions."]}):Oo>=3&&s("div",{class:"footer",children:[s(H,{icon:"info"}),s("span",{children:["Old post (",s("strong",{children:dd.format(-Oo,"month")}),")"]})]}),disabled:!Jt,onClick:async()=>{try{const v=await wr();!me&&v&&$e(Z?`Unboosted @${R||S}'s post`:`Boosted @${R||S}'s post`)}catch{}},children:[s(H,{icon:"rocket"}),s("span",{children:ne>0?mt(ne):Z?"Unboost":"Boost…"})]}),s(ke,{onClick:Tr,className:`menu-favourite ${le?"checked":""}`,children:[s(H,{icon:"heart"}),s("span",{children:Te>0?mt(Te):le?"Unlike":"Like"})]}),Fn("@mastodon/post-bookmark")&&s(ke,{onClick:No,className:`menu-bookmark ${he?"checked":""}`,children:[s(H,{icon:"bookmark"}),s("span",{children:he?"Unbookmark":"Bookmark"})]})]})}),!me&&O&&(me||T)&&s(tn,{}),(me||T)&&s(U,{children:s(ke,{onClick:()=>{W.showGenericAccounts={heading:"Boosted/Liked by…",fetchAccounts:oa,instance:b,showReactions:!0,postID:P}},children:[s(H,{icon:"react"}),s("span",{children:["Boosted/Liked by",s("span",{class:"more-insignificant",children:"…"})]})]})}),!E&&s(U,{children:[(l||!we||kn)&&s(tn,{}),l?s("div",{class:un?"menu-horizontal":"",children:[s(ke,{disabled:yt,onClick:()=>{Gt(!0)},children:[s(H,{icon:"translate"}),s("span",{children:"Translate"})]}),un&&s(ke,{onClick:()=>{const v=Ur(t);v&&yi(v,we)},children:[s(H,{icon:"speak"}),s("span",{children:"Speak"})]})]}):(!we||kn)&&s("div",{class:un?"menu-horizontal":"",children:[s(li,{to:`${b?`/${b}`:""}/s/${C}?translate=1`,children:[s(H,{icon:"translate"}),s("span",{children:"Translate"})]}),un&&s(ke,{onClick:()=>{const v=Ur(t);v&&yi(v,we)},children:[s(H,{icon:"speak"}),s("span",{children:"Speak"})]})]})]}),(!me&&O||l||!we||kn)&&s(tn,{}),!me&&s(U,{children:s(li,{to:b?`/${b}/s/${C}`:`/s/${C}`,onClick:v=>{h(v,t)},children:[s(H,{icon:"arrows-right"}),s("small",{children:["View post by @",R||S,s("br",{}),s("span",{class:"more-insignificant",children:[dn[q]," • ",Co]})]})]})}),!!Ee&&s(U,{children:s(ke,{onClick:()=>{Mn(C)},children:[s(H,{icon:"history"}),s("small",{children:["Show Edit History",s("br",{}),s("span",{class:"more-insignificant",children:["Edited: ",Po]})]})]})}),s(ke,{href:Ve,target:"_blank",children:[s(H,{icon:"external"}),s("small",{class:"menu-double-lines",children:bd(Ve)})]}),s("div",{class:"menu-horizontal",children:[s(ke,{onClick:()=>{try{navigator.clipboard.writeText(Ve),$e("Link copied")}catch{$e("Unable to copy link")}},children:[s(H,{icon:"link"}),s("span",{children:"Copy"})]}),Ho&&(navigator==null?void 0:navigator.share)&&((Wo=navigator==null?void 0:navigator.canShare)==null?void 0:Wo.call(navigator,{url:Ve}))&&s(ke,{onClick:()=>{try{navigator.share({url:Ve})}catch{alert("Sharing doesn't seem to work.")}},children:[s(H,{icon:"share"}),s("span",{children:"Share…"})]})]}),Ho&&me&&s(ke,{onClick:()=>{yr(!0)},children:[s(H,{icon:"code"}),s("span",{children:"Embed post"})]}),(Qe||En)&&s(tn,{}),(Qe||En)&&s(ke,{onClick:async()=>{try{const v=await w.v1.statuses.$select(C)[ye?"unmute":"mute"]();Ze(v,b),$e(ye?"Conversation unmuted":"Conversation muted")}catch{$e(ye?"Unable to unmute conversation":"Unable to mute conversation")}},children:ye?s(U,{children:[s(H,{icon:"unmute"}),s("span",{children:"Unmute conversation"})]}):s(U,{children:[s(H,{icon:"mute"}),s("span",{children:"Mute conversation"})]})}),Qe&&sa&&s(ke,{onClick:async()=>{try{const v=await w.v1.statuses.$select(C)[Re?"unpin":"pin"]();Ze(v,b),$e(Re?"Post unpinned from profile":"Post pinned to profile")}catch{$e(Re?"Unable to unpin post":"Unable to pin post")}},children:Re?s(U,{children:[s(H,{icon:"unpin"}),s("span",{children:"Unpin from profile"})]}):s(U,{children:[s(H,{icon:"pin"}),s("span",{children:"Pin to profile"})]})}),Qe&&s("div",{class:"menu-horizontal",children:[Fn("@mastodon/post-edit")&&s(ke,{onClick:()=>{zn({editStatus:t})},children:[s(H,{icon:"pencil"}),s("span",{children:"Edit"})]}),me&&s(Ar,{subMenu:!0,confirmLabel:s(U,{children:[s(H,{icon:"trash"}),s("span",{children:"Delete this post?"})]}),menuItemClassName:"danger",onClick:()=>{(async()=>{try{await w.v1.statuses.$select(C).remove();const v=Vi(C,b);v._deleted=!0,$e("Deleted")}catch{$e("Unable to delete")}})()},children:[s(H,{icon:"trash"}),s("span",{children:"Delete…"})]})]}),!Qe&&me&&s(U,{children:[s(tn,{}),s(ke,{className:"danger",onClick:()=>{W.showReportModal={account:t.account,post:t}},children:[s(H,{icon:"flag"}),s("span",{children:"Report post…"})]})]})]}),jo=j(),[An,Qt]=te(!1),[In,$n]=te({}),Ln=y||!me&&!d&&!_e&&!m,aa=Ns(ud&&Ln?v=>{var Ce;if(v.pointerType==="mouse")return;const{clientX:N,clientY:Q}=((Ce=v.touches)==null?void 0:Ce[0])||v,ce=v.target.closest("a");ce&&Lt.current.contains(ce)&&!ce.getAttribute("href").startsWith("#")||(v.preventDefault(),$n({anchorPoint:{x:N,y:Q},direction:"right"}),Qt(!0))}:null,{threshold:600,captureEvent:!0,detect:"touch",cancelOnMovement:2}),Cn=!i&&!d&&!m,ca=Nt("r, shift+r",Sn,{enabled:Cn}),la=Nt("f, l",Tr,{enabled:Cn}),ua=Nt("d",No,{enabled:Cn}),da=Nt("shift+b",()=>{(async()=>{try{const v=await wr();!me&&v&&$e(Z?`Unboosted @${R||S}'s post`:`Boosted @${R||S}'s post`)}catch{}})()},{enabled:Cn&&Jt}),fa=Nt("x",v=>{const N=document.activeElement.closest(".status-link, .status-focus");if(N){const Q=N.querySelector(".spoiler-button:not(.spoiling)");if(Q)v.stopPropagation(),Q.click();else{const ce=N.querySelector(".spoiler-media-button:not(.spoiling)");ce&&(v.stopPropagation(),ce.click())}}}),Pn=ae.slice(0,me?void 0:4),On=ae.length>1&&Pn.some(v=>!!v.description&&!Bs(v.description)),ha=fe(()=>{if(!On)return null;const v=[];return Pn.forEach((N,Q)=>{if(!N.description)return;const ce=v.findIndex(Ce=>Ce.media.description===N.description);ce===-1?v.push({media:N,indices:[Q]}):v[ce].indices.push(Q)}),v.map(({media:N,indices:Q})=>s("div",{"data-caption-index":Q.map(ce=>ce+1).join(" "),onClick:ce=>{ce.preventDefault(),ce.stopPropagation(),W.showMediaAlt={alt:N.description,lang:we}},title:N.description,children:[s("sup",{children:Q.map(ce=>ce+1).join(" ")})," ",N.description]},N.id))},[On,Pn,we]),en=fe(()=>{var v;return!!ee&&J===((v=t.account)==null?void 0:v.id)||!!x.statusThreadNumber[P]},[ee,J,(Ko=t.account)==null?void 0:Ko.id,x.statusThreadNumber[P]]),pa=fe(()=>a&&!en&&!u&&!ee&&q==="public"&&K>0,[a,en,u,ee,K,q]),Bo=fe(()=>{if(Y||ve||ie||de||ae!=null&&ae.length||en||u||ee||K<=0||!/[???︖❓❔⁇⁈⁉¿‽؟]/.test(pe))return!1;const Q=Hr(pe);if(Q>0&&Q<=id)return!0},[Y,ve,ie,de,ae,ze,en,u,ee,K,pe]);return s(mr,{children:[_&&!!(ee&&J)&&s(wd,{sKey:P}),s("article",{"data-state-post-id":P,ref:v=>{var Q;Lt.current=v;const N=((Q=v==null?void 0:v.closest)==null?void 0:Q.call(v,".timeline-item, .timeline-item-alt, .status-link, .status-focus"))||v;ca.current=N,la.current=N,ua.current=N,da.current=N,fa.current=N},tabindex:"-1",class:`status ${!u&&ee&&xe?"status-reply-to":""} visibility-${q} ${Zt?"status-pinned":""} ${hd[r]} ${_e?"status-deleted":""} ${m?"status-card":""} ${An?"status-menu-open":""} ${E&&qt?"status-media-first":""}`,onMouseEnter:re,onContextMenu:v=>{var ce,Ce;if(!Ln||v.metaKey)return;const N=v.target.closest("a");if(N&&Lt.current.contains(N)&&!N.getAttribute("href").startsWith("#"))return;const Q=(ce=window.getSelection)==null?void 0:ce.call(window);if(Q.toString().length>0){const{anchorNode:Ct}=Q;if((Ce=Lt.current)!=null&&Ce.contains(Ct))return}v.preventDefault(),$n({anchorPoint:{x:v.clientX,y:v.clientY},direction:"right"}),Qt(!0)},...Ln?aa():{},children:[Ln&&s(Qi,{ref:jo,state:An?"open":void 0,...In,onClose:v=>{var N,Q,ce;Qt(!1),(v==null?void 0:v.reason)==="click"&&((ce=(Q=(N=Lt.current)==null?void 0:N.closest("[tabindex]"))==null?void 0:Q.focus)==null||ce.call(Q))},portal:{target:document.body},containerProps:{style:{zIndex:1001},onClick:()=>{var v,N;(N=(v=jo.current)==null?void 0:v.closeMenu)==null||N.call(v)}},overflow:"auto",boundingBoxPadding:cs(),unmountOnClose:!0,children:Vo}),T&&r!=="l"&&!d&&!i&&!_e&&!m&&s("div",{class:`status-actions ${An==="actions-bar"?"open":""}`,ref:ia,children:[s(Rt,{size:"s",title:"Reply",alt:"Reply",class:"reply-button",icon:"comment",iconSize:"m",onClick:Sn}),s(Rt,{size:"s",checked:le,title:["Like","Unlike"],alt:["Like","Liked"],class:"favourite-button",icon:"heart",iconSize:"m",count:Te,onClick:Tr}),s("button",{type:"button",title:"More",class:"plain more-button",onClick:v=>{v.preventDefault(),v.stopPropagation(),$n({anchorRef:{current:v.currentTarget},align:"start",direction:"left",gap:0,shift:-8}),Qt("actions-bar")},children:s(H,{icon:"more2",size:"m",alt:"More"})})]}),r!=="l"&&s("div",{class:"status-badge",children:[Z&&s(H,{class:"reblog",icon:"rocket",size:"s"}),le&&s(H,{class:"favourite",icon:"heart",size:"s"}),he&&s(H,{class:"bookmark",icon:"bookmark",size:"s"}),Zt&&s(H,{class:"pin",icon:"pin",size:"s"})]}),r!=="s"&&s("a",{href:$,tabindex:"-1",title:`@${S}`,onClick:v=>{v.preventDefault(),v.stopPropagation(),W.showAccount={account:t.account,instance:b}},children:s(nt,{url:B||V,size:"xxl",squircle:z})}),s("div",{class:"container",children:[s("div",{class:"meta",children:[s("span",{class:"meta-name",children:s(an,{account:t.account,instance:b,showAvatar:r==="s",showAcct:me})})," ",r!=="l"&&(_e?s("span",{class:"status-deleted-tag",children:"Deleted"}):Ve&&!d&&!i&&!m?s(jt,{to:b?`/${b}/s/${C}`:`/s/${C}`,onClick:v=>{v.metaKey||v.ctrlKey||v.shiftKey||v.altKey||v.which===2||(v.preventDefault(),v.stopPropagation(),h==null||h(v,t),$n({anchorRef:{current:v.currentTarget},align:"end",direction:"bottom",gap:4}),Qt(!0))},class:`time ${An&&(In!=null&&In.anchorRef)?"is-open":""}`,children:[pa&&!Bo?s(H,{icon:"comment2",size:"s",alt:`${K} ${K===1?"reply":"replies"}`}):q!=="public"&&q!=="direct"&&s(H,{icon:ro[q],alt:dn[q],size:"s"})," ",s(Mt,{datetime:be,format:"micro"}),!d&&!i&&s(H,{icon:"more2",class:"more"})]}):s("span",{class:"time",children:[q!=="public"&&q!=="direct"&&s(U,{children:[s(H,{icon:ro[q],alt:dn[q],size:"s"})," "]}),s(Mt,{datetime:be,format:"micro"})]}))]}),q==="direct"&&s(U,{children:[s("div",{class:"status-direct-badge",children:"Private mention"})," "]}),!u&&s(U,{children:en?s("div",{class:"status-thread-badge",children:[s(H,{icon:"thread",size:"s"}),"Thread",x.statusThreadNumber[P]?` ${x.statusThreadNumber[P]}/X`:""]}):!!ee&&!!xe&&(!!de||!ue.find(v=>v.id===J))&&s("div",{class:"status-reply-badge",children:[s(H,{icon:"reply"})," ",s(an,{account:xe,instance:b,short:!0})]})}),s("div",{class:`content-container ${de||ie?"has-spoiler":""} ${Ke?"show-spoiler":""} ${dt?"show-media":""}`,"data-content-text-weight":o?Lo():null,style:(me||o)&&{"--content-text-weight":Lo()},children:E&&qt?s(U,{children:[(!!de||!!ie)&&!je&&s(U,{children:[!!de&&s("span",{class:"spoiler-content media-first-spoiler-content",lang:we,dir:"auto",ref:Io,"data-read-more":_r,children:[s(Bt,{text:de,emojis:Se})," "]}),s("button",{class:`light spoiler-button media-first-spoiler-button ${Ke?"spoiling":""}`,type:"button",onClick:v=>{v.preventDefault(),v.stopPropagation(),Ke?(delete W.spoilers[C],je||delete W.spoilersMedia[C]):(W.spoilers[C]=!0,je||(W.spoilersMedia[C]=!0))},children:[s(H,{icon:Ke?"eye-open":"eye-close"})," ",Ke?"Show less":"Show content"]})]}),s(gd,{mediaAttachments:ae,language:we,postID:C,instance:b}),!!pe&&s("div",{class:"media-first-content content",ref:$o,children:s(Si,{post:t,instance:b,previewMode:d})})]}):s(U,{children:[!!de&&s(U,{children:[s("div",{class:"content spoiler-content",lang:we,dir:"auto",ref:Io,"data-read-more":_r,children:s("p",{children:s(Bt,{text:de,emojis:Se})})}),je||d?s("div",{class:"spoiler-divider",children:[s(H,{icon:"eye-open"})," Content warning"]}):s("button",{class:`light spoiler-button ${Ke?"spoiling":""}`,type:"button",onClick:v=>{v.preventDefault(),v.stopPropagation(),Ke?(delete W.spoilers[C],je||delete W.spoilersMedia[C]):(W.spoilers[C]=!0,je||(W.spoilersMedia[C]=!0))},children:[s(H,{icon:Ke?"eye-open":"eye-close"})," ",Ke?"Show less":"Show content"]})]}),!!pe&&s("div",{class:"content",ref:$o,"data-read-more":_r,children:[s(Si,{post:t,instance:b,previewMode:d}),s(Ed,{id:C,instance:b,level:m})]}),!!ve&&s(ku,{lang:we,poll:ve,readOnly:i||!O||!M,onUpdate:v=>{W.statuses[P].poll=v},refresh:()=>w.v1.polls.$select(ve.id).fetch().then(v=>{W.statuses[P].poll=v}).catch(v=>{}),votePoll:v=>w.v1.polls.$select(ve.id).votes.create({choices:v}).then(N=>{W.statuses[P].poll=N}).catch(N=>{})}),((l||Ao)&&!!pe.trim()&&!!cr(ar(pe,Se))&&kn||yt)&&s(ou,{forceTranslate:yt||Ao,mini:!me&&!u,sourceLanguage:we,autoDetected:$t,text:Ur(t)}),!d&&ie&&!!ae.length&&xn!=="show_all"&&s("button",{class:`plain spoiler-media-button ${dt?"spoiling":""}`,type:"button",hidden:!je&&!!de,onClick:v=>{v.preventDefault(),v.stopPropagation(),dt?delete W.spoilersMedia[C]:W.spoilersMedia[C]=!0},children:[s(H,{icon:dt?"eye-open":"eye-close"})," ",dt?"Show less":"Show media"]}),!!ae.length&&(ae.length>1&&(me||u&&r==="m")?s("div",{class:"media-large-container",children:ae.map((v,N)=>s("div",{class:"media-container media-eq1",children:s(oo,{media:v,autoAnimate:!0,showCaption:!0,allowLongerCaption:!pe,lang:we,to:`/${b}/s/${C}?${u?"media":"media-only"}=${N+1}`,onClick:p?Q=>p(Q,N,v,t):void 0})},v.id))}):s(md,{lang:we,enabled:On,captionChildren:ha,children:s("div",{ref:ra,class:`media-container media-eq${ae.length} ${ae.length>2?"media-gt2":""} ${ae.length>4?"media-gt4":""}`,children:Pn.map((v,N)=>s(oo,{media:v,autoAnimate:me,showCaption:ae.length===1,allowLongerCaption:!pe&&ae.length===1,lang:we,altIndex:On&&!!v.description&&N+1,to:`/${b}/s/${C}?${u?"media":"media-only"}=${N+1}`,onClick:p?Q=>{p(Q,N,v,t)}:void 0},v.id))})})),!!Y&&/^https/i.test(Y==null?void 0:Y.url)&&!ie&&!de&&!ve&&!ae.length&&!x.statusQuotes[P]&&s(vd,{card:Y,selfReferential:(Y==null?void 0:Y.url)===t.url||(Y==null?void 0:Y.url)===t.uri,instance:A})]})}),!me&&Bo&&s("div",{class:"content-comment-hint insignificant",children:[s(H,{icon:"comment2",alt:"Replies"})," ",K]}),me&&s(U,{children:[s("div",{class:"extra-meta",children:_e?s("span",{class:"status-deleted-tag",children:"Deleted"}):s(U,{children:[s("span",{children:dn[q]})," •"," ",s("a",{href:Ve,target:"_blank",rel:"noopener noreferrer",children:s("time",{class:"created",datetime:be.toISOString(),title:be.toLocaleString(),children:Co})}),Ee&&s(U,{children:[" ","• ",s(H,{icon:"pencil",alt:"Edited"})," ",s("time",{tabIndex:"0",class:"edited",datetime:He.toISOString(),onClick:()=>{Mn(C)},children:Po})]})]})}),!!(It!=null&&It.length)&&s("div",{class:"emoji-reactions",children:It.map(v=>{const{name:N,count:Q,me:ce,url:Ce,staticUrl:Ct}=v;if(Ce)return s("span",{class:`emoji-reaction tag ${ce?"":"insignificant"}`,children:[s(eo,{alt:N,url:Ce,staticUrl:Ct})," ",Q]});if(/^:.+?:$/.test(N)){const bt=Se.find(wt=>wt.shortcode===N.replace(/^:/,"").replace(/:$/,""));if(bt)return s("span",{class:`emoji-reaction tag ${ce?"":"insignificant"}`,children:[s(eo,{alt:N,url:bt.url,staticUrl:bt.staticUrl})," ",Q]})}return s("span",{class:`emoji-reaction tag ${ce?"":"insignificant"}`,children:[N," ",Q]})})}),s("div",{class:`actions ${_e?"disabled":""}`,children:[s("div",{class:"action has-count",children:s(Rt,{title:"Reply",alt:"Comments",class:"reply-button",icon:"comment",count:K,onClick:Sn})}),s(Ar,{disabled:!Jt,onClick:wr,confirmLabel:s(U,{children:[s(H,{icon:"rocket"}),s("span",{children:Z?"Unboost":"Boost"})]}),menuExtras:s(ke,{onClick:()=>{zn({draftStatus:{status:` -${Ve}`}})},children:[s(H,{icon:"quote"}),s("span",{children:"Quote"})]}),menuFooter:br&&!Z&&s("div",{class:"footer",children:[s(H,{icon:"alert"}),"Some media have no descriptions."]}),children:s("div",{class:"action has-count",children:s(Rt,{checked:Z,title:["Boost","Unboost"],alt:["Boost","Boosted"],class:"reblog-button",icon:"rocket",count:ne,disabled:!Jt})})}),s("div",{class:"action has-count",children:s(Rt,{checked:le,title:["Like","Unlike"],alt:["Like","Liked"],class:"favourite-button",icon:"heart",count:Te,onClick:Do})}),Fn("@mastodon/post-bookmark")&&s("div",{class:"action",children:s(Rt,{checked:he,title:["Bookmark","Unbookmark"],alt:["Bookmark","Bookmarked"],class:"bookmark-button",icon:"bookmark",onClick:Ro})}),s(ls,{portal:{target:document.querySelector(".status-deck")||document.body},align:"end",gap:4,overflow:"auto",viewScroll:"close",menuButton:s("div",{class:"action",children:s("button",{type:"button",title:"More",class:"plain more-button",children:s(H,{icon:"more",size:"l",alt:"More"})})}),children:Vo})]})]})]}),!!vr&&s(Zr,{onClick:v=>{v.target===v.currentTarget&&Mn(!1)},children:s(yd,{statusID:vr,instance:b,fetchStatusHistory:()=>w.v1.statuses.$select(vr).history.list(),onClose:()=>{var v;Mn(!1),(v=Lt.current)==null||v.focus()}})}),!!na&&s(Zr,{onClick:v=>{v.target===v.currentTarget&&yr(!1)},children:s(_d,{post:t,instance:b,onClose:()=>{yr(!1)}})})]})]})}function md(e){const{enabled:t,children:n,lang:r,captionChildren:o}=e;return!t||!o?n:s("figure",{class:"media-figure-multiple",children:[n,s("figcaption",{lang:r,dir:"auto",children:o})]})}function gd(e){const{mediaAttachments:t,language:n,postID:r,instance:o}=e,i=t.length>1,a=j(),[u,c]=te(0);return se(()=>{let l=()=>{const{clientWidth:f,scrollLeft:d}=a.current,p=Math.round(Math.abs(d)/f);c(p)};return a.current&&a.current.addEventListener("scroll",l,{passive:!0}),()=>{a.current&&a.current.removeEventListener("scroll",l)}},[]),s(U,{children:[s("div",{class:"media-first-container",children:[s("div",{class:"media-first-carousel",ref:a,children:t.map((l,f)=>s("div",{class:"media-first-item",children:s(oo,{media:l,lang:n,to:`/${o}/s/${r}?media=${f+1}`})},l.id))}),i&&s("div",{class:"media-carousel-controls",children:[s("div",{class:"carousel-indexer",children:[u+1,"/",t.length]}),s("label",{class:"media-carousel-button",children:s("button",{type:"button",class:"carousel-button",hidden:u===0,onClick:l=>{l.preventDefault(),l.stopPropagation(),a.current.focus(),a.current.scrollTo({left:a.current.clientWidth*(u-1)*(Qr()?-1:1),behavior:"smooth"})},children:s(H,{icon:"arrow-left"})})}),s("label",{class:"media-carousel-button",children:s("button",{type:"button",class:"carousel-button",hidden:u===t.length-1,onClick:l=>{l.preventDefault(),l.stopPropagation(),a.current.focus(),a.current.scrollTo({left:a.current.clientWidth*(u+1)*(Qr()?-1:1),behavior:"smooth"})},children:s(H,{icon:"arrow-right"})})})]})]}),i&&s("div",{class:"media-carousel-dots",style:{"--dots-count":t.length},children:t.map((l,f)=>s("span",{class:`carousel-dot ${f===u?"active":""}`},l.id))})]})}function ki(e){return bs.toUnicode(URL.parse(e).hostname.replace(/^www\./,"").replace(/\/$/,""))}function Ai(e){return["x.com","twitter.com","threads.net","bsky.app"].includes(e)}function vd({card:e,selfReferential:t,instance:n}){var V;const r=wn(W),{blurhash:o,title:i,description:a,html:u,providerName:c,providerUrl:l,authorName:f,authorUrl:d,width:p,height:m,image:h,imageDescription:g,url:y,type:T,embedUrl:_,language:E,publishedAt:w}=e,b=i||c||f,A=p/m>=1.2?"large":"",[O,P]=te(null);if(se(()=>{b&&h&&!t&&Ma(y)&&Sa(n,y).then(B=>{if(!B)return;const{id:D,url:$}=B;P("#"+$)})},[b,h,t]),r.unfurledLinks[y])return null;const x=/`;\n this.domRefFrame.insertAdjacentHTML('beforeend', iframeHTML);\n this.domRefFrame.classList.add('activated');\n this.isIframeLoaded = true;\n this.attemptShortAutoPlay();\n this.dispatchEvent(new CustomEvent('liteYoutubeIframeLoaded', {\n detail: {\n videoId: this.videoId,\n },\n bubbles: true,\n cancelable: true,\n }));\n }\n }\n initImagePlaceholder() {\n const posterUrlWebp = `https://i.ytimg.com/vi_webp/${this.videoId}/${this.posterQuality}.webp`;\n const posterUrlJpeg = `https://i.ytimg.com/vi/${this.videoId}/${this.posterQuality}.jpg`;\n this.domRefImg.fallback.loading = this.posterLoading;\n this.domRefImg.webp.srcset = posterUrlWebp;\n this.domRefImg.jpeg.srcset = posterUrlJpeg;\n this.domRefImg.fallback.src = posterUrlJpeg;\n this.domRefImg.fallback.setAttribute('aria-label', `${this.videoPlay}: ${this.videoTitle}`);\n this.domRefImg?.fallback?.setAttribute('alt', `${this.videoPlay}: ${this.videoTitle}`);\n }\n initIntersectionObserver() {\n const options = {\n root: null,\n rootMargin: '0px',\n threshold: 0,\n };\n const observer = new IntersectionObserver((entries, observer) => {\n entries.forEach(entry => {\n if (entry.isIntersecting && !this.isIframeLoaded) {\n LiteYTEmbed.warmConnections();\n this.addIframe(true);\n observer.unobserve(this);\n }\n });\n }, options);\n observer.observe(this);\n }\n attemptShortAutoPlay() {\n if (this.isYouTubeShort()) {\n setTimeout(() => {\n this.shadowRoot\n .querySelector('iframe')\n ?.contentWindow?.postMessage('{\"event\":\"command\",\"func\":\"' + 'playVideo' + '\",\"args\":\"\"}', '*');\n }, 2000);\n }\n }\n isYouTubeShort() {\n return (this.getAttribute('short') === '' &&\n window.matchMedia('(max-width: 40em)').matches);\n }\n static addPrefetch(kind, url) {\n const linkElem = document.createElement('link');\n linkElem.rel = kind;\n linkElem.href = url;\n linkElem.crossOrigin = 'true';\n document.head.append(linkElem);\n }\n static warmConnections() {\n if (LiteYTEmbed.isPreconnected || window.liteYouTubeIsPreconnected)\n return;\n LiteYTEmbed.addPrefetch('preconnect', 'https://i.ytimg.com/');\n LiteYTEmbed.addPrefetch('preconnect', 'https://s.ytimg.com');\n LiteYTEmbed.addPrefetch('preconnect', 'https://www.youtube.com');\n LiteYTEmbed.addPrefetch('preconnect', 'https://www.google.com');\n LiteYTEmbed.addPrefetch('preconnect', 'https://googleads.g.doubleclick.net');\n LiteYTEmbed.addPrefetch('preconnect', 'https://static.doubleclick.net');\n LiteYTEmbed.isPreconnected = true;\n window.liteYouTubeIsPreconnected = true;\n }\n}\nLiteYTEmbed.isPreconnected = false;\ncustomElements.define('lite-youtube', LiteYTEmbed);\n//# sourceMappingURL=lite-youtube.js.map","const digitLookup = new Uint8Array(128);\nfor (let i = 0; i < 83; i++) {\n digitLookup[\n '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz#$%*+,-.:;=?@[]^_{|}~'.charCodeAt(\n i,\n )\n ] = i;\n}\nconst decode83 = (str, start, end) => {\n let value = 0;\n while (start < end) {\n value *= 83;\n value += digitLookup[str.charCodeAt(start++)];\n }\n return value;\n};\n\nconst pow = Math.pow;\nconst PI = Math.PI;\nconst PI2 = PI * 2;\n\nconst d = 3294.6;\nconst e = 269.025;\nconst sRGBToLinear = (value) =>\n value > 10.31475 ? pow(value / e + 0.052132, 2.4) : value / d;\n\nconst linearTosRGB = (v) =>\n ~~(v > 0.00001227 ? e * pow(v, 0.416666) - 13.025 : v * d + 1);\n\nconst signSqr = (x) => (x < 0 ? -1 : 1) * x * x;\n\n/**\n * Fast approximate cosine implementation\n * Based on FTrig https://github.com/netcell/FTrig\n */\nconst fastCos = (x) => {\n x += PI / 2;\n while (x > PI) {\n x -= PI2;\n }\n const cos = 1.27323954 * x - 0.405284735 * signSqr(x);\n return 0.225 * (signSqr(cos) - cos) + cos;\n};\n\n/**\n * Extracts average color from BlurHash image\n * @param {string} blurHash BlurHash image string\n * @returns {[number, number, number]}\n */\nexport function getBlurHashAverageColor(blurHash) {\n const val = decode83(blurHash, 2, 6);\n return [val >> 16, (val >> 8) & 255, val & 255];\n}\n\n/**\n * Decodes BlurHash image\n * @param {string} blurHash BlurHash image string\n * @param {number} width Output image width\n * @param {number} height Output image height\n * @param {?number} punch\n * @returns {Uint8ClampedArray}\n */\nexport function decodeBlurHash(blurHash, width, height, punch) {\n const sizeFlag = decode83(blurHash, 0, 1);\n const numX = (sizeFlag % 9) + 1;\n const numY = ~~(sizeFlag / 9) + 1;\n const size = numX * numY;\n\n let i = 0,\n j = 0,\n x = 0,\n y = 0,\n r = 0,\n g = 0,\n b = 0,\n basis = 0,\n basisY = 0,\n colorIndex = 0,\n pixelIndex = 0,\n value = 0;\n\n const maximumValue = ((decode83(blurHash, 1, 2) + 1) / 13446) * (punch | 1);\n\n const colors = new Float64Array(size * 3);\n\n const averageColor = getBlurHashAverageColor(blurHash);\n for (i = 0; i < 3; i++) {\n colors[i] = sRGBToLinear(averageColor[i]);\n }\n\n for (i = 1; i < size; i++) {\n value = decode83(blurHash, 4 + i * 2, 6 + i * 2);\n colors[i * 3] = signSqr(~~(value / 361) - 9) * maximumValue;\n colors[i * 3 + 1] = signSqr((~~(value / 19) % 19) - 9) * maximumValue;\n colors[i * 3 + 2] = signSqr((value % 19) - 9) * maximumValue;\n }\n\n const cosinesY = new Float64Array(numY * height);\n const cosinesX = new Float64Array(numX * width);\n for (j = 0; j < numY; j++) {\n for (y = 0; y < height; y++) {\n cosinesY[j * height + y] = fastCos((PI * y * j) / height);\n }\n }\n for (i = 0; i < numX; i++) {\n for (x = 0; x < width; x++) {\n cosinesX[i * width + x] = fastCos((PI * x * i) / width);\n }\n }\n\n const bytesPerRow = width * 4;\n const pixels = new Uint8ClampedArray(bytesPerRow * height);\n\n for (y = 0; y < height; y++) {\n for (x = 0; x < width; x++) {\n r = g = b = 0;\n for (j = 0; j < numY; j++) {\n basisY = cosinesY[j * height + y];\n for (i = 0; i < numX; i++) {\n basis = cosinesX[i * width + x] * basisY;\n colorIndex = (i + j * numX) * 3;\n r += colors[colorIndex] * basis;\n g += colors[colorIndex + 1] * basis;\n b += colors[colorIndex + 2] * basis;\n }\n }\n\n pixelIndex = 4 * x + y * bytesPerRow;\n pixels[pixelIndex] = linearTosRGB(r);\n pixels[pixelIndex + 1] = linearTosRGB(g);\n pixels[pixelIndex + 2] = linearTosRGB(b);\n pixels[pixelIndex + 3] = 255; // alpha\n }\n }\n return pixels;\n}\n","/**\n * @param {string[]} splittedHtml\n * @param {{ char?: string; count?: number}} options\n * @returns {string}\n */\nconst addIndentation = (splittedHtml, options = {}) => {\n const char = options.char || ' '\n const count = options.count || 2\n\n let level = 0\n const opened = []\n\n return splittedHtml.reverse().reduce((indented, elTag) => {\n if (opened.length\n && level\n && opened[level]\n /* if current element tag is the same as previously opened one */\n && opened[level] === elTag.substring(1, opened[level].length + 1)\n ) {\n opened.splice(level, 1)\n level--\n }\n\n const indentation = char.repeat(level ? level * count : 0)\n\n const newIndented = [\n `${indentation}${elTag}`,\n ...indented,\n ]\n\n // if current element tag is closing tag\n // add it to opened elements\n if (elTag.substring(0, 2) === ' (\n // Replace\n // - 1 or more spaces or tabs at the start of line\n // - 1 or more spaces or tabs at the end of line\n // - empty lines\n // with empty string\n nonFormattedString.trim().replace(/(^(\\s|\\t)+|(( |\\t)+)$)/gm, '')\n)\n\n/**\n * @param {string} markup\n * @returns {string[]} Array of strings splitted on new lines without empty lines\n */\nconst mergeAttributesWithElements = (markup) => {\n const splittedMarkup = removeEmptyLines(markup).split('\\n')\n\n const mergedLines = []\n let currentElement = ''\n for (let i = 0; i < splittedMarkup.length; i += 1) {\n const line = splittedMarkup[i]\n\n // If line is closing element/tag separate closing tag from rest of the line with space\n if (line.endsWith('/>')) {\n mergedLines.push(`${currentElement}${line.slice(0, -2)} />`)\n currentElement = ''\n // eslint-disable-next-line no-continue\n continue\n }\n\n if (line.endsWith('>')) {\n mergedLines.push(`${currentElement}${\n line.startsWith('>') || line.startsWith('<') ? '' : ' '\n }${line}`)\n currentElement = ''\n // eslint-disable-next-line no-continue\n continue\n }\n\n currentElement += currentElement.length ? ` ${line}` : line\n }\n\n return mergedLines\n}\n\nmodule.exports = {\n mergeAttributesWithElements,\n removeEmptyLines,\n}\n","const addIndentation = require('./utils/addIndentation')\nconst { mergeAttributesWithElements } = require('./utils/toLines')\n\n/**\n * @param {string} markup\n * @param {{ char?: string; count?: number }} options\n * @returns {string}\n */\nconst prettify = (markup, options = {}) => {\n const splitted = mergeAttributesWithElements(markup)\n\n return addIndentation(splitted, options)\n}\n\nmodule.exports = prettify\n","import { useRef as s, useCallback as h, useEffect as g } from \"react\";\nvar l = /* @__PURE__ */ ((e) => (e.Mouse = \"mouse\", e.Touch = \"touch\", e.Pointer = \"pointer\", e))(l || {}), d = /* @__PURE__ */ ((e) => (e.CancelledByMovement = \"cancelled-by-movement\", e.CancelledByRelease = \"cancelled-by-release\", e.CancelledOutsideElement = \"cancelled-outside-element\", e))(d || {});\nconst A = () => typeof window == \"object\" ? window?.PointerEvent ?? null : null, z = () => typeof window == \"object\" ? window?.TouchEvent ?? null : null;\nfunction U(e) {\n const { nativeEvent: t } = e, u = z();\n return u && t instanceof u || \"touches\" in e;\n}\nfunction X(e) {\n const t = A();\n return e.nativeEvent instanceof MouseEvent && !(t && e.nativeEvent instanceof t);\n}\nfunction Y(e) {\n const { nativeEvent: t } = e;\n if (!t)\n return !1;\n const u = A();\n return u && t instanceof u || \"pointerId\" in t;\n}\nfunction R(e) {\n return X(e) || U(e) || Y(e);\n}\nfunction j(e) {\n return U(e) ? {\n x: e.touches[0].pageX,\n y: e.touches[0].pageY\n } : X(e) || Y(e) ? {\n x: e.pageX,\n y: e.pageY\n } : null;\n}\nfunction G(e) {\n return {\n target: e.target,\n currentTarget: e.currentTarget,\n nativeEvent: e,\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n persist: () => {\n }\n };\n}\nfunction J(e, {\n threshold: t = 400,\n captureEvent: u = !1,\n detect: y = l.Pointer,\n cancelOnMovement: w = !1,\n cancelOutsideElement: v = !0,\n filterEvents: p,\n onStart: M,\n onMove: C,\n onFinish: L,\n onCancel: b\n} = {}) {\n const P = s(!1), c = s(!1), I = s(), a = s(), T = s(e), f = s(null), E = h(\n (n) => (r) => {\n c.current || R(r) && (p !== void 0 && !p(r) || (u && r.persist(), M?.(r, { context: n }), f.current = j(r), c.current = !0, I.current = r.currentTarget, a.current = setTimeout(() => {\n T.current && (T.current(r, { context: n }), P.current = !0);\n }, t)));\n },\n [u, p, M, t]\n ), i = h(\n (n) => (r, o) => {\n R(r) && c.current && (f.current = null, u && r.persist(), P.current ? L?.(r, { context: n }) : c.current && b?.(r, { context: n, reason: o ?? d.CancelledByRelease }), P.current = !1, c.current = !1, a.current !== void 0 && clearTimeout(a.current));\n },\n [u, L, b]\n ), m = h(\n (n) => (r) => {\n if (C?.(r, { context: n }), w !== !1 && f.current) {\n const o = j(r);\n if (o) {\n const B = w === !0 ? 25 : w, D = {\n x: Math.abs(o.x - f.current.x),\n y: Math.abs(o.y - f.current.y)\n };\n (D.x > B || D.y > B) && i(n)(r, d.CancelledByMovement);\n }\n }\n },\n [i, w, C]\n ), q = h(\n (n) => {\n if (e === null)\n return {};\n switch (y) {\n case l.Mouse: {\n const r = {\n onMouseDown: E(n),\n onMouseMove: m(n),\n onMouseUp: i(n)\n };\n return v && (r.onMouseLeave = (o) => {\n i(n)(o, d.CancelledOutsideElement);\n }), r;\n }\n case l.Touch:\n return {\n onTouchStart: E(n),\n onTouchMove: m(n),\n onTouchEnd: i(n)\n };\n case l.Pointer: {\n const r = {\n onPointerDown: E(n),\n onPointerMove: m(n),\n onPointerUp: i(n)\n };\n return v && (r.onPointerLeave = (o) => i(n)(o, d.CancelledOutsideElement)), r;\n }\n }\n },\n [e, i, v, y, m, E]\n );\n return g(() => {\n if (!window)\n return;\n function n(r) {\n const o = G(r);\n i()(o);\n }\n return window.addEventListener(\"mouseup\", n), window.addEventListener(\"touchend\", n), window.addEventListener(\"pointerup\", n), () => {\n window.removeEventListener(\"mouseup\", n), window.removeEventListener(\"touchend\", n), window.removeEventListener(\"pointerup\", n);\n };\n }, [i]), g(\n () => () => {\n a.current !== void 0 && clearTimeout(a.current);\n },\n []\n ), g(() => {\n T.current = e;\n }, [e]), q;\n}\nexport {\n d as LongPressCallbackReason,\n l as LongPressEventType,\n J as useLongPress\n};\n","import { useState } from 'preact/hooks';\n\nimport shortenNumber from '../utils/shorten-number';\n\nimport EmojiText from './emoji-text';\nimport Icon from './icon';\nimport RelativeTime from './relative-time';\n\nexport default function Poll({\n poll,\n lang,\n readOnly,\n refresh = () => {},\n votePoll = () => {},\n}) {\n const [uiState, setUIState] = useState('default');\n const {\n expired,\n expiresAt,\n id,\n multiple,\n options,\n ownVotes,\n voted,\n votersCount,\n votesCount,\n emojis,\n } = poll;\n const expiresAtDate = !!expiresAt && new Date(expiresAt); // Update poll at point of expiry\n // NOTE: Disable this because setTimeout runs immediately if delay is too large\n // https://stackoverflow.com/a/56718027/20838\n // useEffect(() => {\n // let timeout;\n // if (!expired && expiresAtDate) {\n // const ms = expiresAtDate.getTime() - Date.now() + 1; // +1 to give it a little buffer\n // if (ms > 0) {\n // timeout = setTimeout(() => {\n // setUIState('loading');\n // (async () => {\n // // await refresh();\n // setUIState('default');\n // })();\n // }, ms);\n // }\n // }\n // return () => {\n // clearTimeout(timeout);\n // };\n // }, [expired, expiresAtDate]);\n\n const pollVotesCount = votersCount || votesCount;\n let roundPrecision = 0;\n\n if (pollVotesCount <= 1000) {\n roundPrecision = 0;\n } else if (pollVotesCount <= 10000) {\n roundPrecision = 1;\n } else if (pollVotesCount <= 100000) {\n roundPrecision = 2;\n }\n\n const [showResults, setShowResults] = useState(false);\n const optionsHaveVoteCounts = options.every((o) => o.votesCount !== null);\n\n return (\n \n {(showResults && optionsHaveVoteCounts) || voted || expired ? (\n <>\n
    \n {options.map((option, i) => {\n const { title, votesCount: optionVotesCount } = option;\n const percentage = pollVotesCount\n ? ((optionVotesCount / pollVotesCount) * 100).toFixed(\n roundPrecision,\n )\n : 0; // check if current poll choice is the leading one\n\n const isLeading =\n optionVotesCount > 0 &&\n optionVotesCount ===\n Math.max(...options.map((o) => o.votesCount));\n return (\n \n
    \n \n \n \n {voted && ownVotes.includes(i) && (\n <>\n {' '}\n \n \n )}\n
    \n \n {percentage}%\n
    \n \n );\n })}\n \n {!expired && !voted && (\n {\n e.preventDefault();\n setShowResults(false);\n }}\n >\n Hide results\n \n )}\n \n ) : (\n {\n e.preventDefault();\n const form = e.target;\n const formData = new FormData(form);\n const choices = [];\n formData.forEach((value, key) => {\n if (key === 'poll') {\n choices.push(value);\n }\n });\n if (!choices.length) return;\n setUIState('loading');\n await votePoll(choices);\n setUIState('default');\n }}\n >\n
    \n {options.map((option, i) => {\n const { title } = option;\n return (\n
    \n \n
    \n );\n })}\n
    \n {!readOnly && (\n \n Vote\n \n )}\n \n )}\n

    \n {!expired && !readOnly && (\n {\n e.preventDefault();\n setUIState('loading');\n\n (async () => {\n await refresh();\n setUIState('default');\n })();\n }}\n title=\"Refresh\"\n >\n \n \n )}\n {!voted && !expired && !readOnly && optionsHaveVoteCounts && (\n {\n e.preventDefault();\n setShowResults(!showResults);\n }}\n title={showResults ? 'Hide results' : 'Show results'}\n >\n {' '}\n \n )}\n {!expired && !readOnly && ' '}\n {shortenNumber(votesCount)} vote\n {votesCount === 1 ? '' : 's'}\n {!!votersCount && votersCount !== votesCount && (\n <>\n {' '}\n • \n {shortenNumber(votersCount)}\n {' '}\n voter\n {votersCount === 1 ? '' : 's'}\n \n )}{' '}\n • {expired ? 'Ended' : 'Ending'}{' '}\n {!!expiresAtDate && }\n

    {' '}\n \n );\n}\n","import { createContext } from 'preact';\n\nconst FilterContext = createContext();\nexport default FilterContext;\n","import mem from './mem';\nimport { getCurrentAccountID } from './store-utils';\n\nfunction _isFiltered(filtered, filterContext) {\n if (!filtered?.length) return false;\n const appliedFilters = filtered.filter((f) => {\n const { filter } = f;\n const hasContext = filter.context.includes(filterContext);\n if (!hasContext) return false;\n if (!filter.expiresAt) return hasContext;\n return new Date(filter.expiresAt) > new Date();\n });\n if (!appliedFilters.length) return false;\n const isHidden = appliedFilters.some((f) => f.filter.filterAction === 'hide');\n if (isHidden)\n return {\n action: 'hide',\n };\n const isWarn = appliedFilters.some((f) => f.filter.filterAction === 'warn');\n if (isWarn) {\n const filterTitles = appliedFilters.map((f) => f.filter.title);\n return {\n action: 'warn',\n titles: filterTitles,\n titlesStr: filterTitles.join(' • '),\n };\n }\n return false;\n}\nexport const isFiltered = mem(_isFiltered);\n\nexport function filteredItem(item, filterContext, currentAccountID) {\n const { filtered } = item;\n if (!filtered?.length) return true;\n const isSelf = currentAccountID && item.account?.id === currentAccountID;\n if (isSelf) return true;\n const filterState = isFiltered(filtered, filterContext);\n if (!filterState) return true;\n if (filterState.action === 'hide') return false;\n // item._filtered = filterState;\n return true;\n}\nexport function filteredItems(items, filterContext) {\n if (!items?.length) return [];\n if (!filterContext) return items;\n const currentAccountID = getCurrentAccountID();\n return items.filter((item) =>\n filteredItem(item, filterContext, currentAccountID),\n );\n}\n","const div = document.createElement('div');\nexport default function htmlContentLength(html) {\n if (!html) return 0;\n div.innerHTML = html;\n // .invisible spans for links\n // e.g. https://mastodon.social\n div.querySelectorAll('.invisible').forEach((el) => {\n el.remove();\n });\n return div.innerText.length;\n}\n","export const supportsTTS = 'speechSynthesis' in window;\n\nexport function speak(text, lang) {\n if (!supportsTTS) return;\n try {\n if (speechSynthesis.speaking) {\n speechSynthesis.cancel();\n }\n const utterance = new SpeechSynthesisUtterance(text);\n if (lang) utterance.lang = lang;\n speechSynthesis.speak(utterance);\n } catch (e) {\n alert(e);\n }\n}\n","import getHTMLText from './getHTMLText';\n\nfunction statusPeek(status) {\n const { spoilerText, content, poll, mediaAttachments } = status;\n let text = '';\n if (spoilerText?.trim()) {\n text += spoilerText;\n } else {\n text += getHTMLText(content);\n }\n text = text.trim();\n if (poll?.options?.length) {\n text += `\\n\\n📊:\\n${poll.options\n .map((o) => `${poll.multiple ? '▪️' : '•'} ${o.title}`)\n .join('\\n')}`;\n }\n if (mediaAttachments?.length) {\n text +=\n ' ' +\n mediaAttachments\n .map(\n (m) =>\n ({\n image: '🖼️',\n gifv: '🎞️',\n video: '📹',\n audio: '🎵',\n unknown: '',\n }[m.type] || ''),\n )\n .join('');\n }\n return text;\n}\n\nexport default statusPeek;\n","import{useRef as r,useEffect as n,useMemo as t,useReducer as e,useCallback as u}from\"react\";function c(e,u,c){var i=this,a=r(null),o=r(0),f=r(null),l=r([]),v=r(),m=r(),d=r(e),g=r(!0);d.current=e;var p=\"undefined\"!=typeof window,w=!u&&0!==u&&p;if(\"function\"!=typeof e)throw new TypeError(\"Expected a function\");u=+u||0;var s=!!(c=c||{}).leading,x=!(\"trailing\"in c)||!!c.trailing,h=\"maxWait\"in c,y=\"debounceOnServer\"in c&&!!c.debounceOnServer,F=h?Math.max(+c.maxWait||0,u):null;n(function(){return g.current=!0,function(){g.current=!1}},[]);var A=t(function(){var r=function(r){var n=l.current,t=v.current;return l.current=v.current=null,o.current=r,m.current=d.current.apply(t,n)},n=function(r,n){w&&cancelAnimationFrame(f.current),f.current=w?requestAnimationFrame(r):setTimeout(r,n)},t=function(r){if(!g.current)return!1;var n=r-a.current;return!a.current||n>=u||n<0||h&&r-o.current>=F},e=function(n){return f.current=null,x&&l.current?r(n):(l.current=v.current=null,m.current)},c=function r(){var c=Date.now();if(t(c))return e(c);if(g.current){var i=u-(c-a.current),f=h?Math.min(i,F-(c-o.current)):i;n(r,f)}},A=function(){if(p||y){var e=Date.now(),d=t(e);if(l.current=[].slice.call(arguments),v.current=i,a.current=e,d){if(!f.current&&g.current)return o.current=a.current,n(c,u),s?r(a.current):m.current;if(h)return n(c,u),r(a.current)}return f.current||n(c,u),m.current}};return A.cancel=function(){f.current&&(w?cancelAnimationFrame(f.current):clearTimeout(f.current)),o.current=0,l.current=a.current=v.current=f.current=null},A.isPending=function(){return!!f.current},A.flush=function(){return f.current?e(Date.now()):m.current},A},[s,h,u,F,x,w,p,y]);return A}function i(r,n){return r===n}function a(r,n){return n}function o(n,t,o){var f=o&&o.equalityFn||i,l=e(a,n),v=l[0],m=l[1],d=c(u(function(r){return m(r)},[m]),t,o),g=r(n);return f(g.current,n)||(d(n),g.current=n),f(v,n)&&d.cancel(),[v,d]}function f(r,n,t){var e=void 0===t?{}:t,u=e.leading,i=e.trailing;return c(r,n,{maxWait:n,leading:void 0===u||u,trailing:void 0===i||i})}export{o as useDebounce,c as useDebouncedCallback,f as useThrottledCallback};\n//# sourceMappingURL=index.module.js.map\n","import { useRef, useEffect, useCallback, useState, useMemo } from 'react';\n\n// This could've been more streamlined with internal state instead of abusing\n// refs to such extent, but then composing hooks and components could not opt out of unnecessary renders.\nfunction useResolvedElement(subscriber, refOrElement) {\n var lastReportRef = useRef(null);\n var refOrElementRef = useRef(null);\n refOrElementRef.current = refOrElement;\n var cbElementRef = useRef(null); // Calling re-evaluation after each render without using a dep array,\n // as the ref object's current value could've changed since the last render.\n\n useEffect(function () {\n evaluateSubscription();\n });\n var evaluateSubscription = useCallback(function () {\n var cbElement = cbElementRef.current;\n var refOrElement = refOrElementRef.current; // Ugly ternary. But smaller than an if-else block.\n\n var element = cbElement ? cbElement : refOrElement ? refOrElement instanceof Element ? refOrElement : refOrElement.current : null;\n\n if (lastReportRef.current && lastReportRef.current.element === element && lastReportRef.current.subscriber === subscriber) {\n return;\n }\n\n if (lastReportRef.current && lastReportRef.current.cleanup) {\n lastReportRef.current.cleanup();\n }\n\n lastReportRef.current = {\n element: element,\n subscriber: subscriber,\n // Only calling the subscriber, if there's an actual element to report.\n // Setting cleanup to undefined unless a subscriber returns one, as an existing cleanup function would've been just called.\n cleanup: element ? subscriber(element) : undefined\n };\n }, [subscriber]); // making sure we call the cleanup function on unmount\n\n useEffect(function () {\n return function () {\n if (lastReportRef.current && lastReportRef.current.cleanup) {\n lastReportRef.current.cleanup();\n lastReportRef.current = null;\n }\n };\n }, []);\n return useCallback(function (element) {\n cbElementRef.current = element;\n evaluateSubscription();\n }, [evaluateSubscription]);\n}\n\n// We're only using the first element of the size sequences, until future versions of the spec solidify on how\n// exactly it'll be used for fragments in multi-column scenarios:\n// From the spec:\n// > The box size properties are exposed as FrozenArray in order to support elements that have multiple fragments,\n// > which occur in multi-column scenarios. However the current definitions of content rect and border box do not\n// > mention how those boxes are affected by multi-column layout. In this spec, there will only be a single\n// > ResizeObserverSize returned in the FrozenArray, which will correspond to the dimensions of the first column.\n// > A future version of this spec will extend the returned FrozenArray to contain the per-fragment size information.\n// (https://drafts.csswg.org/resize-observer/#resize-observer-entry-interface)\n//\n// Also, testing these new box options revealed that in both Chrome and FF everything is returned in the callback,\n// regardless of the \"box\" option.\n// The spec states the following on this:\n// > This does not have any impact on which box dimensions are returned to the defined callback when the event\n// > is fired, it solely defines which box the author wishes to observe layout changes on.\n// (https://drafts.csswg.org/resize-observer/#resize-observer-interface)\n// I'm not exactly clear on what this means, especially when you consider a later section stating the following:\n// > This section is non-normative. An author may desire to observe more than one CSS box.\n// > In this case, author will need to use multiple ResizeObservers.\n// (https://drafts.csswg.org/resize-observer/#resize-observer-interface)\n// Which is clearly not how current browser implementations behave, and seems to contradict the previous quote.\n// For this reason I decided to only return the requested size,\n// even though it seems we have access to results for all box types.\n// This also means that we get to keep the current api, being able to return a simple { width, height } pair,\n// regardless of box option.\nfunction extractSize(entry, boxProp, sizeType) {\n if (!entry[boxProp]) {\n if (boxProp === \"contentBoxSize\") {\n // The dimensions in `contentBoxSize` and `contentRect` are equivalent according to the spec.\n // See the 6th step in the description for the RO algorithm:\n // https://drafts.csswg.org/resize-observer/#create-and-populate-resizeobserverentry-h\n // > Set this.contentRect to logical this.contentBoxSize given target and observedBox of \"content-box\".\n // In real browser implementations of course these objects differ, but the width/height values should be equivalent.\n return entry.contentRect[sizeType === \"inlineSize\" ? \"width\" : \"height\"];\n }\n\n return undefined;\n } // A couple bytes smaller than calling Array.isArray() and just as effective here.\n\n\n return entry[boxProp][0] ? entry[boxProp][0][sizeType] : // TS complains about this, because the RO entry type follows the spec and does not reflect Firefox's current\n // behaviour of returning objects instead of arrays for `borderBoxSize` and `contentBoxSize`.\n // @ts-ignore\n entry[boxProp][sizeType];\n}\n\nfunction useResizeObserver(opts) {\n if (opts === void 0) {\n opts = {};\n }\n\n // Saving the callback as a ref. With this, I don't need to put onResize in the\n // effect dep array, and just passing in an anonymous function without memoising\n // will not reinstantiate the hook's ResizeObserver.\n var onResize = opts.onResize;\n var onResizeRef = useRef(undefined);\n onResizeRef.current = onResize;\n var round = opts.round || Math.round; // Using a single instance throughout the hook's lifetime\n\n var resizeObserverRef = useRef();\n\n var _useState = useState({\n width: undefined,\n height: undefined\n }),\n size = _useState[0],\n setSize = _useState[1]; // In certain edge cases the RO might want to report a size change just after\n // the component unmounted.\n\n\n var didUnmount = useRef(false);\n useEffect(function () {\n didUnmount.current = false;\n return function () {\n didUnmount.current = true;\n };\n }, []); // Using a ref to track the previous width / height to avoid unnecessary renders.\n\n var previous = useRef({\n width: undefined,\n height: undefined\n }); // This block is kinda like a useEffect, only it's called whenever a new\n // element could be resolved based on the ref option. It also has a cleanup\n // function.\n\n var refCallback = useResolvedElement(useCallback(function (element) {\n // We only use a single Resize Observer instance, and we're instantiating it on demand, only once there's something to observe.\n // This instance is also recreated when the `box` option changes, so that a new observation is fired if there was a previously observed element with a different box option.\n if (!resizeObserverRef.current || resizeObserverRef.current.box !== opts.box || resizeObserverRef.current.round !== round) {\n resizeObserverRef.current = {\n box: opts.box,\n round: round,\n instance: new ResizeObserver(function (entries) {\n var entry = entries[0];\n var boxProp = opts.box === \"border-box\" ? \"borderBoxSize\" : opts.box === \"device-pixel-content-box\" ? \"devicePixelContentBoxSize\" : \"contentBoxSize\";\n var reportedWidth = extractSize(entry, boxProp, \"inlineSize\");\n var reportedHeight = extractSize(entry, boxProp, \"blockSize\");\n var newWidth = reportedWidth ? round(reportedWidth) : undefined;\n var newHeight = reportedHeight ? round(reportedHeight) : undefined;\n\n if (previous.current.width !== newWidth || previous.current.height !== newHeight) {\n var newSize = {\n width: newWidth,\n height: newHeight\n };\n previous.current.width = newWidth;\n previous.current.height = newHeight;\n\n if (onResizeRef.current) {\n onResizeRef.current(newSize);\n } else {\n if (!didUnmount.current) {\n setSize(newSize);\n }\n }\n }\n })\n };\n }\n\n resizeObserverRef.current.instance.observe(element, {\n box: opts.box\n });\n return function () {\n if (resizeObserverRef.current) {\n resizeObserverRef.current.instance.unobserve(element);\n }\n };\n }, [opts.box, round]), opts.ref);\n return useMemo(function () {\n return {\n ref: refCallback,\n width: size.width,\n height: size.height\n };\n }, [refCallback, size.width, size.height]);\n}\n\nexport { useResizeObserver as default };\n","import { useRef } from 'preact/hooks';\nimport { useThrottledCallback } from 'use-debounce';\nimport useResizeObserver from 'use-resize-observer';\n\nexport default function useTruncated({ className = 'truncated' } = {}) {\n const ref = useRef();\n const onResize = useThrottledCallback(({ height }) => {\n if (ref.current) {\n const { scrollHeight } = ref.current;\n let truncated = scrollHeight > height;\n if (truncated) {\n const { height: _height, maxHeight } = getComputedStyle(ref.current);\n const computedHeight = parseInt(maxHeight || _height, 10);\n truncated = scrollHeight > computedHeight;\n }\n ref.current.classList.toggle(className, truncated);\n }\n }, 300);\n useResizeObserver({\n ref,\n box: 'border-box',\n onResize,\n });\n return ref;\n}\n","export default {\n public: 'earth',\n unlisted: 'group',\n private: 'lock',\n direct: 'message',\n};\n","export var styleRoot = 'kvfysmfp';\nexport var styleChild = 'ufhsfnkm';\nexport var styles = \".\".concat(styleRoot, \"{overflow:hidden;touch-action:none}.\").concat(styleChild, \"{transform-origin: 0 0}\");\n","var isSsr = typeof window === 'undefined';\nexport var isTouch = function () {\n return !isSsr && ('ontouchstart' in window || navigator.maxTouchPoints > 0);\n};\nexport var make2dTransformValue = function (_a) {\n var x = _a.x, y = _a.y, scale = _a.scale;\n return \"scale(\".concat(scale, \") translate(\").concat(x, \"px, \").concat(y, \"px)\");\n};\nexport var make3dTransformValue = function (_a) {\n var x = _a.x, y = _a.y, scale = _a.scale;\n return \"scale3d(\".concat(scale, \",\").concat(scale, \", 1) translate3d(\").concat(x, \"px, \").concat(y, \"px, 0)\");\n};\nexport var hasTranslate3DSupport = function () {\n var css = !isSsr && window.CSS;\n return css && css.supports && css.supports('transform', 'translate3d(0,0,0)');\n};\n","var min = Math.min, max = Math.max;\nexport function getOffsetBounds(_a) {\n var containerDimension = _a.containerDimension, childDimension = _a.childDimension, padding = _a.padding, centerContained = _a.centerContained;\n var diff = childDimension - containerDimension;\n if (diff + 2 * padding <= 0 && centerContained) {\n return [diff / 2, diff / 2];\n }\n else {\n return [min(diff + padding, 0) - padding, max(0, diff + padding)];\n }\n}\n","import { __assign, __extends } from \"tslib\";\nimport React, { Component, createRef, Children, cloneElement } from 'react';\nimport { styleRoot, styleChild, styles } from './styles.css';\nimport { isTouch } from '../utils';\nimport { getOffsetBounds } from './getOffsetBounds';\nvar classnames = function (base, other) {\n return other ? \"\".concat(base, \" \").concat(other) : base;\n};\nvar abs = Math.abs, min = Math.min, sqrt = Math.sqrt;\nvar isSsr = typeof window === 'undefined';\nvar isMac = isSsr ? false : /(Mac)/i.test(navigator.platform);\nvar isDragInteraction = function (i) { return i === 'drag'; };\nvar isZoomInteraction = function (i) { return i === 'zoom'; };\nvar isZoomGesture = function (wheelEvent) { return isMac && wheelEvent.ctrlKey; };\nvar cancelEvent = function (event) {\n event.stopPropagation();\n event.preventDefault();\n};\nvar getDistance = function (a, b) {\n var x = a.x - b.x;\n var y = a.y - b.y;\n return sqrt(x * x + y * y);\n};\nvar calculateScale = function (startTouches, endTouches) {\n var startDistance = getDistance(startTouches[0], startTouches[1]);\n var endDistance = getDistance(endTouches[0], endTouches[1]);\n return endDistance / startDistance;\n};\nvar isCloseTo = function (value, expected) {\n return value > expected - 0.01 && value < expected + 0.01;\n};\nvar swing = function (p) { return -Math.cos(p * Math.PI) / 2 + 0.5; };\nvar getPointByPageCoordinates = function (touch) { return ({\n x: touch.pageX,\n y: touch.pageY,\n}); };\nvar getPageCoordinatesByTouches = function (touches) {\n return Array.from(touches).map(getPointByPageCoordinates);\n};\nvar sum = function (a, b) { return a + b; };\nvar getVectorAvg = function (vectors) { return ({\n x: vectors.map(function (_a) {\n var x = _a.x;\n return x;\n }).reduce(sum, 0) / vectors.length,\n y: vectors.map(function (_a) {\n var y = _a.y;\n return y;\n }).reduce(sum, 0) / vectors.length,\n}); };\nvar clamp = function (min, max, value) {\n return value < min ? min : value > max ? max : value;\n};\nvar shouldInterceptWheel = function (event) {\n return !(event.ctrlKey || event.metaKey);\n};\nvar getElementSize = function (element) {\n if (element) {\n var offsetWidth = element.offsetWidth, offsetHeight = element.offsetHeight;\n // Any DOMElement\n if (offsetWidth && offsetHeight) {\n return { width: offsetWidth, height: offsetHeight };\n }\n // Svg support\n var style = getComputedStyle(element);\n var width = parseFloat(style.width);\n var height = parseFloat(style.height);\n if (height && width) {\n return { width: width, height: height };\n }\n }\n return { width: 0, height: 0 };\n};\nvar calculateVelocity = function (startPoint, endPoint) { return ({\n x: endPoint.x - startPoint.x,\n y: endPoint.y - startPoint.y,\n}); };\nvar comparePoints = function (p1, p2) { return p1.x === p2.x && p1.y === p2.y; };\nvar noup = function () { };\nvar zeroPoint = { x: 0, y: 0 };\nvar PinchZoom = /** @class */ (function (_super) {\n __extends(PinchZoom, _super);\n function PinchZoom() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this._prevDragMovePoint = null;\n _this._containerObserver = null;\n _this._fingers = 0;\n _this._firstMove = true;\n _this._initialOffset = __assign({}, zeroPoint);\n _this._interaction = null;\n _this._isDoubleTap = false;\n _this._isOffsetsSet = false;\n _this._lastDragPosition = null;\n _this._lastScale = 1;\n _this._lastTouchStart = 0;\n _this._lastZoomCenter = null;\n _this._listenMouseMove = false;\n _this._nthZoom = 0;\n _this._offset = __assign({}, zeroPoint);\n _this._startOffset = __assign({}, zeroPoint);\n _this._startTouches = null;\n _this._updatePlaned = false;\n _this._wheelTimeOut = null;\n _this._zoomFactor = 1;\n _this._initialZoomFactor = 1;\n _this._draggingPoint = __assign({}, zeroPoint);\n // It help reduce behavior difference between touch and mouse events\n _this._ignoreNextClick = false;\n // @ts-ignore\n _this._containerRef = createRef();\n _this._handleClick = function (clickEvent) {\n if (_this._ignoreNextClick) {\n _this._ignoreNextClick = false;\n clickEvent.stopPropagation();\n }\n };\n _this._onResize = function () {\n var _a;\n if ((_a = _this._containerRef) === null || _a === void 0 ? void 0 : _a.current) {\n _this._updateInitialZoomFactor();\n _this._setupOffsets();\n _this._update();\n }\n };\n _this._handlerOnTouchEnd = _this._handlerIfEnable(function (touchEndEvent) {\n _this._fingers = touchEndEvent.touches.length;\n if (_this.props.shouldCancelHandledTouchEndEvents &&\n (isZoomInteraction(_this._interaction) ||\n (isDragInteraction(_this._interaction) &&\n (_this._startOffset.x !== _this._offset.x ||\n _this._startOffset.y !== _this._offset.y)))) {\n cancelEvent(touchEndEvent);\n }\n if (isDragInteraction(_this._interaction) && !_this._enoughToDrag()) {\n _this._handleClick(touchEndEvent);\n }\n _this._updateInteraction(touchEndEvent);\n });\n _this._handlerOnTouchStart = _this._handlerIfEnable(function (touchStartEvent) {\n _this._firstMove = true;\n _this._fingers = touchStartEvent.touches.length;\n _this._detectDoubleTap(touchStartEvent);\n });\n _this._handlerOnTouchMove = _this._handlerIfEnable(function (touchMoveEvent) {\n if (_this._isDoubleTap) {\n return;\n }\n _this._collectInertia(touchMoveEvent);\n if (_this._firstMove) {\n _this._updateInteraction(touchMoveEvent);\n if (_this._interaction) {\n cancelEvent(touchMoveEvent);\n }\n _this._startOffset = __assign({}, _this._offset);\n _this._startTouches = getPageCoordinatesByTouches(touchMoveEvent.touches);\n }\n else {\n if (isZoomInteraction(_this._interaction)) {\n if (_this._startTouches &&\n _this._startTouches.length === 2 &&\n touchMoveEvent.touches.length === 2) {\n _this._handleZoom(touchMoveEvent, calculateScale(_this._startTouches, getPageCoordinatesByTouches(touchMoveEvent.touches)));\n }\n }\n else if (isDragInteraction(_this._interaction)) {\n _this._handleDrag(touchMoveEvent);\n }\n if (_this._interaction) {\n cancelEvent(touchMoveEvent);\n _this._update();\n }\n }\n _this._firstMove = false;\n });\n _this._handlerWheel = function (wheelEvent) {\n if (_this.props.shouldInterceptWheel(wheelEvent)) {\n return;\n }\n cancelEvent(wheelEvent);\n var pageX = wheelEvent.pageX, pageY = wheelEvent.pageY, deltaY = wheelEvent.deltaY, deltaMode = wheelEvent.deltaMode;\n var scaleDelta = 1;\n if (isZoomGesture(wheelEvent) || deltaMode === 1) {\n scaleDelta = 15;\n }\n var likeTouchEvent = {\n touches: [\n // @ts-ignore\n { pageX: pageX, pageY: pageY },\n ],\n };\n var center = _this._getOffsetByFirstTouch(likeTouchEvent);\n var dScale = deltaY * scaleDelta;\n _this._stopAnimation();\n _this._scaleTo(_this._zoomFactor - dScale / _this.props.wheelScaleFactor, center);\n _this._update();\n clearTimeout(\n // @ts-ignore\n _this._wheelTimeOut);\n _this._wheelTimeOut = setTimeout(function () { return _this._sanitize(); }, 100);\n };\n // @ts-ignore\n _this._handlers = _this.props.isTouch()\n ? [\n ['touchstart', _this._handlerOnTouchStart],\n ['touchend', _this._handlerOnTouchEnd],\n ['touchmove', _this._handlerOnTouchMove],\n ]\n : [\n [\n 'mousemove',\n _this.simulate(_this._handlerOnTouchMove),\n _this.props._document,\n ],\n [\n 'mouseup',\n _this.simulate(_this._handlerOnTouchEnd),\n _this.props._document,\n ],\n ['mousedown', _this.simulate(_this._handlerOnTouchStart)],\n ['click', _this._handleClick],\n ['wheel', _this._handlerWheel],\n ];\n return _this;\n }\n PinchZoom.prototype._handleDragStart = function (event) {\n this._ignoreNextClick = true;\n this.props.onDragStart();\n this._stopAnimation();\n this._resetInertia();\n this._lastDragPosition = null;\n this._hasInteraction = true;\n this._draggingPoint = this._offset;\n this._handleDrag(event);\n };\n PinchZoom.prototype._handleDrag = function (event) {\n var touch = this._getOffsetByFirstTouch(event);\n if (this._enoughToDrag()) {\n this._drag(touch, this._lastDragPosition);\n }\n else {\n this._virtualDrag(touch, this._lastDragPosition);\n }\n this._offset = this._sanitizeOffset(this._offset);\n this._lastDragPosition = touch;\n };\n PinchZoom.prototype._resetInertia = function () {\n this._velocity = null;\n this._prevDragMovePoint = null;\n };\n PinchZoom.prototype._realizeInertia = function () {\n var _this = this;\n var _a = this.props, inertiaFriction = _a.inertiaFriction, inertia = _a.inertia;\n if (!inertia || !this._velocity) {\n return;\n }\n var _b = this._velocity, x = _b.x, y = _b.y;\n if (x || y) {\n this._stopAnimation();\n this._resetInertia();\n var renderFrame = function () {\n x *= inertiaFriction;\n y *= inertiaFriction;\n if (!x && !y) {\n return _this._stopAnimation();\n }\n var prevOffset = __assign({}, _this._offset);\n _this._addOffset({ x: x, y: y });\n _this._offset = _this._sanitizeOffset(_this._offset);\n if (comparePoints(prevOffset, _this._offset)) {\n return _this._stopAnimation();\n }\n _this._update({ isAnimation: true });\n };\n this._animate(renderFrame, { duration: 9999 });\n }\n };\n PinchZoom.prototype._collectInertia = function (_a) {\n var touches = _a.touches;\n if (!this.props.inertia) {\n return;\n }\n var currentCoordinates = getPageCoordinatesByTouches(touches)[0];\n var prevPoint = this._prevDragMovePoint;\n if (prevPoint) {\n this._velocity = calculateVelocity(currentCoordinates, prevPoint);\n }\n this._prevDragMovePoint = currentCoordinates;\n };\n PinchZoom.prototype._handleDragEnd = function () {\n this.props.onDragEnd();\n this._end();\n this._realizeInertia();\n };\n PinchZoom.prototype._handleZoomStart = function () {\n this.props.onZoomStart();\n this._stopAnimation();\n this._lastScale = 1;\n this._nthZoom = 0;\n this._lastZoomCenter = null;\n this._hasInteraction = true;\n };\n PinchZoom.prototype._handleZoom = function (event, newScale) {\n var touchCenter = getVectorAvg(this._getOffsetTouches(event));\n var scale = newScale / this._lastScale;\n this._lastScale = newScale;\n // The first touch events are thrown away since they are not precise\n this._nthZoom += 1;\n if (this._nthZoom > 3) {\n this._scale(scale, touchCenter);\n this._drag(touchCenter, this._lastZoomCenter);\n if (this.props.enforceBoundsDuringZoom) {\n this._offset = this._sanitizeOffset(this._offset);\n }\n }\n this._lastZoomCenter = touchCenter;\n };\n PinchZoom.prototype._handleZoomEnd = function () {\n this.props.onZoomEnd();\n this._end();\n };\n PinchZoom.prototype._handleDoubleTap = function (event) {\n var _this = this;\n if (this._hasInteraction || this.props.tapZoomFactor === 0) {\n return;\n }\n var needZoomOut = (this.props.doubleTapZoomOutOnMaxScale &&\n this._zoomFactor === this.props.maxZoom) ||\n (this.props.doubleTapToggleZoom && this._zoomFactor > 1);\n this.props.onDoubleTap();\n this._ignoreNextClick = true;\n var zoomFactor = this._zoomFactor + this.props.tapZoomFactor;\n var startZoomFactor = this._zoomFactor;\n var updateProgress = function (progress) {\n _this._scaleTo(startZoomFactor + progress * (zoomFactor - startZoomFactor), center);\n };\n var center = this._getOffsetByFirstTouch(event);\n this._isDoubleTap = true;\n if (startZoomFactor > zoomFactor) {\n center = this._getCurrentZoomCenter();\n }\n needZoomOut ? this._zoomOutAnimation() : this._animate(updateProgress);\n };\n PinchZoom.prototype._computeInitialOffset = function () {\n var rect = this._getContainerRect();\n var _a = this._getChildSize(), width = _a.width, height = _a.height;\n var x = -abs(width * this._getInitialZoomFactor() - rect.width) / 2;\n var y = -abs(height * this._getInitialZoomFactor() - rect.height) / 2;\n this._initialOffset = { x: x, y: y };\n };\n PinchZoom.prototype._resetOffset = function () {\n this._offset = __assign({}, this._initialOffset);\n };\n PinchZoom.prototype._setupOffsets = function () {\n if (this.props.setOffsetsOnce && this._isOffsetsSet) {\n return;\n }\n this._isOffsetsSet = true;\n this._computeInitialOffset();\n this._resetOffset();\n };\n PinchZoom.prototype._sanitizeOffset = function (offset) {\n var rect = this._getContainerRect();\n var _a = this._getChildSize(), width = _a.width, height = _a.height;\n var elWidth = width * this._getInitialZoomFactor() * this._zoomFactor;\n var elHeight = height * this._getInitialZoomFactor() * this._zoomFactor;\n var _b = getOffsetBounds({\n containerDimension: rect.width,\n childDimension: elWidth,\n padding: this.props.horizontalPadding,\n centerContained: this.props.centerContained,\n }), minOffsetX = _b[0], maxOffsetX = _b[1];\n var _c = getOffsetBounds({\n containerDimension: rect.height,\n childDimension: elHeight,\n padding: this.props.verticalPadding,\n centerContained: this.props.centerContained,\n }), minOffsetY = _c[0], maxOffsetY = _c[1];\n return {\n x: clamp(minOffsetX, maxOffsetX, offset.x),\n y: clamp(minOffsetY, maxOffsetY, offset.y),\n };\n };\n PinchZoom.prototype.alignCenter = function (options) {\n var _this = this;\n var _a = __assign({ duration: 250, animated: true }, options), __x = _a.x, __y = _a.y, scale = _a.scale, animated = _a.animated, duration = _a.duration;\n // Bug-Fix: https://github.com/retyui/react-quick-pinch-zoom/issues/58\n var x = __x * this._initialZoomFactor;\n var y = __y * this._initialZoomFactor;\n var startZoomFactor = this._zoomFactor;\n var startOffset = __assign({}, this._offset);\n var rect = this._getContainerRect();\n var containerCenter = { x: rect.width / 2, y: rect.height / 2 };\n this._zoomFactor = 1;\n this._offset = { x: -(containerCenter.x - x), y: -(containerCenter.y - y) };\n this._scaleTo(scale, containerCenter);\n this._stopAnimation();\n if (!animated) {\n return this._update();\n }\n var diffZoomFactor = this._zoomFactor - startZoomFactor;\n var diffOffset = {\n x: this._offset.x - startOffset.x,\n y: this._offset.y - startOffset.y,\n };\n this._zoomFactor = startZoomFactor;\n this._offset = __assign({}, startOffset);\n var updateFrame = function (progress) {\n var x = startOffset.x + diffOffset.x * progress;\n var y = startOffset.y + diffOffset.y * progress;\n _this._zoomFactor = startZoomFactor + diffZoomFactor * progress;\n _this._offset = _this._sanitizeOffset({ x: x, y: y });\n _this._update();\n };\n this._animate(updateFrame, {\n callback: function () { return _this._sanitize(); },\n duration: duration,\n });\n };\n PinchZoom.prototype.scaleTo = function (options) {\n var _this = this;\n var _a = __assign({ duration: 250, animated: true }, options), x = _a.x, y = _a.y, scale = _a.scale, animated = _a.animated, duration = _a.duration;\n var startZoomFactor = this._zoomFactor;\n var startOffset = __assign({}, this._offset);\n this._zoomFactor = 1;\n this._offset = { x: 0, y: 0 };\n this._scaleTo(scale, { x: x, y: y });\n this._stopAnimation();\n if (!animated) {\n return this._update();\n }\n var diffZoomFactor = this._zoomFactor - startZoomFactor;\n var diffOffset = {\n x: this._offset.x - startOffset.x,\n y: this._offset.y - startOffset.y,\n };\n this._zoomFactor = startZoomFactor;\n this._offset = __assign({}, startOffset);\n var updateFrame = function (progress) {\n var x = startOffset.x + diffOffset.x * progress;\n var y = startOffset.y + diffOffset.y * progress;\n _this._zoomFactor = startZoomFactor + diffZoomFactor * progress;\n _this._offset = { x: x, y: y };\n _this._update();\n };\n this._animate(updateFrame, { callback: function () { return _this._sanitize(); }, duration: duration });\n };\n PinchZoom.prototype._scaleTo = function (zoomFactor, center) {\n this._scale(zoomFactor / this._zoomFactor, center);\n this._offset = this._sanitizeOffset(this._offset);\n };\n PinchZoom.prototype._scale = function (scale, center) {\n scale = this._scaleZoomFactor(scale);\n this._addOffset({\n x: (scale - 1) * (center.x + this._offset.x),\n y: (scale - 1) * (center.y + this._offset.y),\n });\n this.props.onZoomUpdate();\n };\n PinchZoom.prototype._scaleZoomFactor = function (scale) {\n var originalZoomFactor = this._zoomFactor;\n this._zoomFactor *= scale;\n this._zoomFactor = clamp(this.props.minZoom, this.props.maxZoom, this._zoomFactor);\n return this._zoomFactor / originalZoomFactor;\n };\n PinchZoom.prototype._canDrag = function () {\n return this.props.draggableUnZoomed || !isCloseTo(this._zoomFactor, 1);\n };\n PinchZoom.prototype._drag = function (center, lastCenter) {\n if (lastCenter) {\n var y = -(center.y - lastCenter.y);\n var x = -(center.x - lastCenter.x);\n if (!this.props.lockDragAxis) {\n this._addOffset({\n x: x,\n y: y,\n });\n }\n else {\n // lock scroll to position that was changed the most\n if (abs(x) > abs(y)) {\n this._addOffset({\n x: x,\n y: 0,\n });\n }\n else {\n this._addOffset({\n y: y,\n x: 0,\n });\n }\n }\n this.props.onDragUpdate();\n }\n };\n PinchZoom.prototype._virtualDrag = function (center, lastCenter) {\n if (lastCenter) {\n var y = -(center.y - lastCenter.y);\n var x = -(center.x - lastCenter.x);\n this._draggingPoint = {\n x: x + this._draggingPoint.x,\n y: y + this._draggingPoint.y,\n };\n }\n };\n PinchZoom.prototype._addOffset = function (offset) {\n var _a = this._offset, x = _a.x, y = _a.y;\n this._offset = {\n x: x + offset.x,\n y: y + offset.y,\n };\n };\n PinchZoom.prototype._sanitize = function () {\n if (this._zoomFactor < this.props.zoomOutFactor) {\n this._resetInertia();\n this._zoomOutAnimation();\n }\n else if (this._isInsaneOffset()) {\n this._sanitizeOffsetAnimation();\n }\n };\n PinchZoom.prototype._isInsaneOffset = function () {\n var offset = this._offset;\n var sanitizedOffset = this._sanitizeOffset(offset);\n return sanitizedOffset.x !== offset.x || sanitizedOffset.y !== offset.y;\n };\n PinchZoom.prototype._sanitizeOffsetAnimation = function () {\n var _this = this;\n var targetOffset = this._sanitizeOffset(this._offset);\n var startOffset = __assign({}, this._offset);\n var updateProgress = function (progress) {\n var x = startOffset.x + progress * (targetOffset.x - startOffset.x);\n var y = startOffset.y + progress * (targetOffset.y - startOffset.y);\n _this._offset = { x: x, y: y };\n _this._update();\n };\n this._animate(updateProgress);\n };\n PinchZoom.prototype._zoomOutAnimation = function () {\n var _this = this;\n if (this._zoomFactor === 1) {\n return;\n }\n var startZoomFactor = this._zoomFactor;\n var zoomFactor = 1;\n var center = this._getCurrentZoomCenter();\n var updateProgress = function (progress) {\n var scaleFactor = startZoomFactor + progress * (zoomFactor - startZoomFactor);\n _this._scaleTo(scaleFactor, center);\n };\n this._animate(updateProgress);\n };\n PinchZoom.prototype._getInitialZoomFactor = function () {\n return this._initialZoomFactor;\n };\n PinchZoom.prototype._getCurrentZoomCenter = function () {\n var _a = this._offset, x = _a.x, y = _a.y;\n var offsetLeft = x - this._initialOffset.x;\n var offsetTop = y - this._initialOffset.y;\n return {\n x: -1 * x - offsetLeft / (1 / this._zoomFactor - 1),\n y: -1 * y - offsetTop / (1 / this._zoomFactor - 1),\n };\n };\n PinchZoom.prototype._getOffsetByFirstTouch = function (event) {\n return this._getOffsetTouches(event)[0];\n };\n PinchZoom.prototype._getOffsetTouches = function (event) {\n var _document = this.props._document;\n var _html = _document.documentElement;\n var _body = _document.body;\n var _a = this._getContainerRect(), top = _a.top, left = _a.left;\n var scrollTop = _html.scrollTop || _body.scrollTop;\n var scrollLeft = _html.scrollLeft || _body.scrollLeft;\n var posTop = top + scrollTop;\n var posLeft = left + scrollLeft;\n return getPageCoordinatesByTouches(event.touches).map(function (_a) {\n var x = _a.x, y = _a.y;\n return ({\n x: x - posLeft,\n y: y - posTop,\n });\n });\n };\n PinchZoom.prototype._animate = function (frameFn, options) {\n var _this = this;\n var startTime = new Date().getTime();\n var _a = __assign({ timeFn: swing, callback: function () { }, duration: this.props.animationDuration }, options), timeFn = _a.timeFn, callback = _a.callback, duration = _a.duration;\n var renderFrame = function () {\n if (!_this._inAnimation) {\n return;\n }\n var frameTime = new Date().getTime() - startTime;\n var progress = frameTime / duration;\n if (frameTime >= duration) {\n frameFn(1);\n _this._stopAnimation();\n callback();\n _this._update();\n }\n else {\n progress = timeFn(progress);\n frameFn(progress);\n _this._update({ isAnimation: true });\n requestAnimationFrame(renderFrame);\n }\n };\n this._inAnimation = true;\n requestAnimationFrame(renderFrame);\n };\n PinchZoom.prototype._stopAnimation = function () {\n this._inAnimation = false;\n };\n PinchZoom.prototype._end = function () {\n this._hasInteraction = false;\n this._sanitize();\n this._update();\n };\n PinchZoom.prototype._getContainerRect = function () {\n var div = this._containerRef.current;\n return div.getBoundingClientRect();\n };\n PinchZoom.prototype._getChildSize = function () {\n var div = this._containerRef.current;\n return getElementSize(div === null || div === void 0 ? void 0 : div.firstElementChild);\n };\n PinchZoom.prototype._updateInitialZoomFactor = function () {\n var rect = this._getContainerRect();\n var size = this._getChildSize();\n var xZoomFactor = rect.width / size.width;\n var yZoomFactor = rect.height / size.height;\n this._initialZoomFactor = min(xZoomFactor, yZoomFactor);\n };\n PinchZoom.prototype._bindEvents = function () {\n var _this = this;\n var div = this._containerRef.current;\n if (window.ResizeObserver) {\n this._containerObserver = new ResizeObserver(this._onResize);\n this._containerObserver.observe(div);\n }\n else {\n window.addEventListener('resize', this._onResize);\n }\n this._handlers.forEach(function (_a) {\n var eventName = _a[0], fn = _a[1], target = _a[2];\n (target || div).addEventListener(eventName, fn, true);\n });\n Array.from(div.querySelectorAll('img')).forEach(function (img) {\n return img.addEventListener('load', _this._onResize);\n });\n };\n PinchZoom.prototype._unSubscribe = function () {\n var _this = this;\n var div = this._containerRef.current;\n if (this._containerObserver) {\n this._containerObserver.disconnect();\n this._containerObserver = null;\n }\n window.removeEventListener('resize', this._onResize);\n this._handlers.forEach(function (_a) {\n var eventName = _a[0], fn = _a[1], target = _a[2];\n (target || div).removeEventListener(eventName, fn, true);\n });\n Array.from(div.querySelectorAll('img')).forEach(function (img) {\n return img.removeEventListener('load', _this._onResize);\n });\n };\n PinchZoom.prototype._update = function (options) {\n var _this = this;\n if (this._updatePlaned) {\n return;\n }\n var updateFrame = function () {\n var scale = _this._getInitialZoomFactor() * _this._zoomFactor;\n var x = -_this._offset.x / scale;\n var y = -_this._offset.y / scale;\n _this.props.onUpdate({ scale: scale, x: x, y: y });\n };\n if (options === null || options === void 0 ? void 0 : options.isAnimation) {\n return updateFrame();\n }\n this._updatePlaned = true;\n requestAnimationFrame(function () {\n _this._updatePlaned = false;\n updateFrame();\n });\n };\n PinchZoom.prototype._handlerIfEnable = function (fn) {\n var _this = this;\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (_this.props.enabled) {\n fn.apply(void 0, args);\n }\n };\n };\n PinchZoom.prototype._setInteraction = function (newInteraction, event) {\n var interaction = this._interaction;\n if (interaction !== newInteraction) {\n if (interaction && !newInteraction) {\n if (isZoomInteraction(interaction)) {\n this._handleZoomEnd();\n }\n else if (isDragInteraction(interaction)) {\n this._handleDragEnd();\n }\n }\n if (isZoomInteraction(newInteraction)) {\n this._handleZoomStart();\n }\n else if (isDragInteraction(newInteraction)) {\n this._handleDragStart(event);\n }\n }\n this._interaction = newInteraction;\n };\n PinchZoom.prototype._distanceBetweenNumbers = function (a, b) {\n return a > b ? a - b : b - a;\n };\n PinchZoom.prototype._enoughToDrag = function () {\n if (this._distanceBetweenNumbers(this._startOffset.x, this._draggingPoint.x) >\n 5 ||\n this._distanceBetweenNumbers(this._startOffset.y, this._draggingPoint.y) >\n 5)\n return true;\n return false;\n };\n PinchZoom.prototype._updateInteraction = function (event) {\n var fingers = this._fingers;\n if (fingers === 2) {\n return this._setInteraction('zoom', event);\n }\n if (fingers === 1 && this._canDrag()) {\n return this._setInteraction('drag', event);\n }\n this._setInteraction(null, event);\n };\n PinchZoom.prototype._detectDoubleTap = function (event) {\n var time = new Date().getTime();\n if (this._fingers > 1) {\n this._lastTouchStart = 0;\n }\n if (time - this._lastTouchStart < 300) {\n cancelEvent(event);\n this._handleDoubleTap(event);\n if (isZoomInteraction(this._interaction)) {\n this._handleZoomEnd();\n }\n else if (isDragInteraction(this._interaction)) {\n this._handleDragEnd();\n }\n }\n else {\n this._isDoubleTap = false;\n }\n if (this._fingers === 1) {\n this._lastTouchStart = time;\n }\n };\n PinchZoom.prototype.simulate = function (fn) {\n var _this = this;\n return function (mouseEvent) {\n var pageX = mouseEvent.pageX, pageY = mouseEvent.pageY, type = mouseEvent.type;\n var isEnd = type === 'mouseup';\n var isStart = type === 'mousedown';\n if (isStart) {\n mouseEvent.preventDefault();\n _this._listenMouseMove = true;\n }\n if (_this._listenMouseMove) {\n // @ts-ignore\n mouseEvent.touches = isEnd ? [] : [{ pageX: pageX, pageY: pageY }];\n fn(\n // @ts-ignore\n mouseEvent);\n }\n if (isEnd) {\n _this._listenMouseMove = false;\n }\n };\n };\n PinchZoom.prototype.componentDidMount = function () {\n this._bindEvents();\n this._update();\n };\n PinchZoom.prototype.componentWillUnmount = function () {\n this._stopAnimation();\n this._unSubscribe();\n };\n PinchZoom.prototype.render = function () {\n var _a = this.props, children = _a.children, containerProps = _a.containerProps;\n var child = Children.only(children);\n var props = containerProps || {};\n return (React.createElement(React.Fragment, null,\n React.createElement(\"style\", null, styles),\n React.createElement(\"div\", __assign({}, props, { ref: this._containerRef, className: classnames(styleRoot, props.className) }), cloneElement(child, {\n className: classnames(styleChild, child.props.className),\n }))));\n };\n PinchZoom.defaultProps = {\n animationDuration: 250,\n draggableUnZoomed: true,\n enforceBoundsDuringZoom: false,\n centerContained: false,\n enabled: true,\n inertia: true,\n inertiaFriction: 0.96,\n horizontalPadding: 0,\n isTouch: isTouch,\n lockDragAxis: false,\n maxZoom: 5,\n minZoom: 0.5,\n onDoubleTap: noup,\n onDragEnd: noup,\n onDragStart: noup,\n onDragUpdate: noup,\n onZoomEnd: noup,\n onZoomStart: noup,\n onZoomUpdate: noup,\n setOffsetsOnce: false,\n shouldInterceptWheel: shouldInterceptWheel,\n shouldCancelHandledTouchEndEvents: false,\n tapZoomFactor: 1,\n verticalPadding: 0,\n wheelScaleFactor: 1500,\n zoomOutFactor: 1.3,\n doubleTapZoomOutOnMaxScale: false,\n doubleTapToggleZoom: false,\n // @ts-expect-error\n _document: isSsr ? null : window.document,\n };\n return PinchZoom;\n}(Component));\nif (process.env.NODE_ENV !== 'production') {\n var _a = require('prop-types'), any = _a.any, element = _a.element, object = _a.object, number = _a.number, func = _a.func, bool = _a.bool;\n // @ts-ignore\n PinchZoom.propTypes = {\n children: element,\n containerProps: object,\n wheelScaleFactor: number,\n animationDuration: number,\n draggableUnZoomed: bool,\n enforceBoundsDuringZoom: bool,\n centerContained: bool,\n enabled: bool,\n horizontalPadding: number,\n lockDragAxis: bool,\n onUpdate: func.isRequired,\n maxZoom: number,\n minZoom: number,\n onDoubleTap: func,\n onDragEnd: func,\n onDragStart: func,\n onDragUpdate: func,\n onZoomEnd: func,\n onZoomStart: func,\n onZoomUpdate: func,\n setOffsetsOnce: bool,\n tapZoomFactor: number,\n verticalPadding: number,\n zoomOutFactor: number,\n doubleTapZoomOutOnMaxScale: bool,\n doubleTapToggleZoom: bool,\n isTouch: func,\n _document: any,\n };\n}\nexport default PinchZoom;\n","export default function formatDuration(time) {\n if (!time) return;\n let hours = Math.floor(time / 3600);\n let minutes = Math.floor((time % 3600) / 60);\n let seconds = Math.round(time % 60);\n\n if (hours === 0) {\n return `${minutes}:${seconds.toString().padStart(2, '0')}`;\n } else {\n return `${hours}:${minutes.toString().padStart(2, '0')}:${seconds\n .toString()\n .padStart(2, '0')}`;\n }\n}\n","import { getBlurHashAverageColor } from 'fast-blurhash';\nimport { Fragment } from 'preact';\nimport { memo } from 'preact/compat';\nimport {\n useCallback,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'preact/hooks';\nimport QuickPinchZoom, { make3dTransformValue } from 'react-quick-pinch-zoom';\n\nimport formatDuration from '../utils/format-duration';\nimport mem from '../utils/mem';\nimport states from '../utils/states';\n\nimport Icon from './icon';\nimport Link from './link';\n\nconst isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent); // https://stackoverflow.com/a/23522755\n\n/*\nMedia type\n===\nunknown = unsupported or unrecognized file type\nimage = Static image\ngifv = Looping, soundless animation\nvideo = Video clip\naudio = Audio track\n*/\n\nconst dataAltLabel = 'ALT';\nconst AltBadge = (props) => {\n const { alt, lang, index, ...rest } = props;\n if (!alt || !alt.trim()) return null;\n return (\n {\n e.stopPropagation();\n e.preventDefault();\n states.showMediaAlt = {\n alt,\n lang,\n };\n }}\n title=\"Media description\"\n >\n {dataAltLabel}\n {!!index && {index}}\n \n );\n};\n\nconst MEDIA_CAPTION_LIMIT = 140;\nconst MEDIA_CAPTION_LIMIT_LONGER = 280;\nexport const isMediaCaptionLong = mem((caption) =>\n caption?.length\n ? caption.length > MEDIA_CAPTION_LIMIT ||\n /[\\n\\r].*[\\n\\r]/.test(caption.trim())\n : false,\n);\n\nfunction Media({\n class: className = '',\n media,\n to,\n lang,\n showOriginal,\n autoAnimate,\n showCaption,\n allowLongerCaption,\n altIndex,\n onClick = () => {},\n}) {\n let {\n blurhash,\n description,\n meta,\n previewRemoteUrl,\n previewUrl,\n remoteUrl,\n url,\n type,\n } = media;\n if (/no\\-preview\\./i.test(previewUrl)) {\n previewUrl = null;\n }\n const { original = {}, small, focus } = meta || {};\n\n const width = showOriginal\n ? original?.width\n : small?.width || original?.width;\n const height = showOriginal\n ? original?.height\n : small?.height || original?.height;\n const mediaURL = showOriginal ? url : previewUrl || url;\n const remoteMediaURL = showOriginal\n ? remoteUrl\n : previewRemoteUrl || remoteUrl;\n const hasDimensions = width && height;\n const orientation = hasDimensions\n ? width > height\n ? 'landscape'\n : 'portrait'\n : null;\n\n const rgbAverageColor = blurhash ? getBlurHashAverageColor(blurhash) : null;\n\n const videoRef = useRef();\n\n let focalPosition;\n if (focus) {\n // Convert focal point to CSS background position\n // Formula from jquery-focuspoint\n // x = -1, y = 1 => 0% 0%\n // x = 0, y = 0 => 50% 50%\n // x = 1, y = -1 => 100% 100%\n const x = ((focus.x + 1) / 2) * 100;\n const y = ((1 - focus.y) / 2) * 100;\n focalPosition = `${x.toFixed(0)}% ${y.toFixed(0)}%`;\n }\n\n const mediaRef = useRef();\n const onUpdate = useCallback(({ x, y, scale }) => {\n const { current: media } = mediaRef;\n\n if (media) {\n const value = make3dTransformValue({ x, y, scale });\n\n if (scale === 1) {\n media.style.removeProperty('transform');\n } else {\n media.style.setProperty('transform', value);\n }\n\n media.closest('.media-zoom').style.touchAction =\n scale <= 1.01 ? 'pan-x' : '';\n }\n }, []);\n\n const [pinchZoomEnabled, setPinchZoomEnabled] = useState(false);\n const quickPinchZoomProps = {\n enabled: pinchZoomEnabled,\n draggableUnZoomed: false,\n inertiaFriction: 0.9,\n tapZoomFactor: 2,\n doubleTapToggleZoom: true,\n containerProps: {\n className: 'media-zoom',\n style: {\n overflow: 'visible',\n // width: 'inherit',\n // height: 'inherit',\n // justifyContent: 'inherit',\n // alignItems: 'inherit',\n // display: 'inherit',\n },\n },\n onUpdate,\n };\n\n const Parent = useMemo(\n () => (to ? (props) => : 'div'),\n [to],\n );\n\n const remoteMediaURLObj = remoteMediaURL ? getURLObj(remoteMediaURL) : null;\n const isVideoMaybe =\n type === 'unknown' &&\n remoteMediaURLObj &&\n /\\.(mp4|m4r|m4v|mov|webm)$/i.test(remoteMediaURLObj.pathname);\n const isAudioMaybe =\n type === 'unknown' &&\n remoteMediaURLObj &&\n /\\.(mp3|ogg|wav|m4a|m4p|m4b)$/i.test(remoteMediaURLObj.pathname);\n const isImage =\n type === 'image' ||\n (type === 'unknown' && previewUrl && !isVideoMaybe && !isAudioMaybe);\n\n const parentRef = useRef();\n const [imageSmallerThanParent, setImageSmallerThanParent] = useState(false);\n useLayoutEffect(() => {\n if (!isImage) return;\n if (!showOriginal) return;\n if (!parentRef.current) return;\n const { offsetWidth, offsetHeight } = parentRef.current;\n const smaller = width < offsetWidth && height < offsetHeight;\n if (smaller) setImageSmallerThanParent(smaller);\n }, [width, height]);\n\n const maxAspectHeight =\n window.innerHeight * (orientation === 'portrait' ? 0.45 : 0.33);\n const maxHeight = orientation === 'portrait' ? 0 : 160;\n const averageColorStyle = {\n '--average-color': rgbAverageColor && `rgb(${rgbAverageColor.join(',')})`,\n };\n const mediaStyles =\n width && height\n ? {\n '--width': `${width}px`,\n '--height': `${height}px`,\n // Calculate '--aspectWidth' based on aspect ratio calculated from '--width' and '--height', max height has to be 160px\n '--aspectWidth': `${\n (width / height) * Math.max(maxHeight, maxAspectHeight)\n }px`,\n aspectRatio: `${width} / ${height}`,\n ...averageColorStyle,\n }\n : {\n ...averageColorStyle,\n };\n\n const longDesc = isMediaCaptionLong(description);\n let showInlineDesc =\n !!showCaption && !showOriginal && !!description && !longDesc;\n if (\n allowLongerCaption &&\n !showInlineDesc &&\n description?.length <= MEDIA_CAPTION_LIMIT_LONGER\n ) {\n showInlineDesc = true;\n }\n const Figure = !showInlineDesc\n ? Fragment\n : (props) => {\n const { children, ...restProps } = props;\n return (\n
    \n {children}\n {\n e.preventDefault();\n e.stopPropagation();\n states.showMediaAlt = {\n alt: description,\n lang,\n };\n }}\n >\n {description}\n \n
    \n );\n };\n\n const [hasNaturalAspectRatio, setHasNaturalAspectRatio] = useState(undefined);\n\n if (isImage) {\n // Note: type: unknown might not have width/height\n quickPinchZoomProps.containerProps.style.display = 'inherit';\n\n useLayoutEffect(() => {\n if (!isSafari) return;\n if (!showOriginal) return;\n (async () => {\n try {\n await fetch(mediaURL, { mode: 'no-cors' });\n mediaRef.current.src = mediaURL;\n } catch (e) {\n // Ignore\n }\n })();\n }, [mediaURL]);\n\n return (\n
    \n \n {showOriginal ? (\n \n {\n e.target.closest('.media-image').style.backgroundImage = '';\n e.target.closest('.media-zoom').style.display = '';\n setPinchZoomEnabled(true);\n }}\n onError={(e) => {\n const { src } = e.target;\n if (\n src === mediaURL &&\n remoteMediaURL &&\n mediaURL !== remoteMediaURL\n ) {\n e.target.src = remoteMediaURL;\n }\n }}\n />\n \n ) : (\n <>\n {\n // e.target.closest('.media-image').style.backgroundImage = '';\n e.target.dataset.loaded = true;\n const $media = e.target.closest('.media');\n if (!hasDimensions && $media) {\n const { naturalWidth, naturalHeight } = e.target;\n $media.dataset.orientation =\n naturalWidth > naturalHeight ? 'landscape' : 'portrait';\n $media.style.setProperty('--width', `${naturalWidth}px`);\n $media.style.setProperty('--height', `${naturalHeight}px`);\n $media.style.aspectRatio = `${naturalWidth}/${naturalHeight}`;\n }\n\n // Check natural aspect ratio vs display aspect ratio\n if ($media) {\n const {\n clientWidth,\n clientHeight,\n naturalWidth,\n naturalHeight,\n } = e.target;\n if (\n clientWidth &&\n clientHeight &&\n naturalWidth &&\n naturalHeight\n ) {\n const minDimension = 88;\n if (\n naturalWidth < minDimension ||\n naturalHeight < minDimension\n ) {\n $media.dataset.hasSmallDimension = true;\n } else {\n const displayNaturalHeight =\n (naturalHeight * clientWidth) / naturalWidth;\n const almostSimilarHeight =\n Math.abs(displayNaturalHeight - clientHeight) < 5;\n\n if (almostSimilarHeight) {\n setHasNaturalAspectRatio(true);\n }\n }\n }\n }\n }}\n onError={(e) => {\n const { src } = e.target;\n if (src === mediaURL && mediaURL !== remoteMediaURL) {\n e.target.src = remoteMediaURL;\n }\n }}\n />\n {!showInlineDesc && (\n \n )}\n \n )}\n \n
    \n );\n } else if (type === 'gifv' || type === 'video' || isVideoMaybe) {\n const hasDuration = original.duration > 0;\n const shortDuration = original.duration < 31;\n const isGIF = type === 'gifv' && shortDuration;\n // If GIF is too long, treat it as a video\n const loopable = original.duration < 61;\n const formattedDuration = formatDuration(original.duration);\n const hoverAnimate = !showOriginal && !autoAnimate && isGIF;\n const autoGIFAnimate = !showOriginal && autoAnimate && isGIF;\n const showProgress = original.duration > 5;\n\n // This string is only for autoplay + muted to work on Mobile Safari\n const gifHTML = `\n \n `;\n\n const videoHTML = `\n \n `;\n\n return (\n
    \n {\n if (hoverAnimate) {\n try {\n videoRef.current.pause();\n } catch (e) {}\n }\n onClick(e);\n }}\n onMouseEnter={() => {\n if (hoverAnimate) {\n try {\n videoRef.current.play();\n } catch (e) {}\n }\n }}\n onMouseLeave={() => {\n if (hoverAnimate) {\n try {\n videoRef.current.pause();\n } catch (e) {}\n }\n }}\n onFocus={() => {\n if (hoverAnimate) {\n try {\n videoRef.current.play();\n } catch (e) {}\n }\n }}\n onBlur={() => {\n if (hoverAnimate) {\n try {\n videoRef.current.pause();\n } catch (e) {}\n }\n }}\n >\n {showOriginal || autoGIFAnimate ? (\n isGIF && showOriginal ? (\n \n \n \n ) : isGIF ? (\n \n ) : (\n \n )\n ) : isGIF ? (\n {\n const { target } = e;\n const container = target?.closest('.media-gif');\n if (container) {\n const percentage =\n (target.currentTime / target.duration) * 100;\n container.style.setProperty(\n '--progress',\n `${percentage}%`,\n );\n }\n }\n : undefined\n }\n />\n ) : (\n <>\n {previewUrl ? (\n {\n if (!hasDimensions) {\n const $media = e.target.closest('.media');\n if ($media) {\n const { naturalHeight, naturalWidth } = e.target;\n $media.dataset.orientation =\n naturalWidth > naturalHeight\n ? 'landscape'\n : 'portrait';\n $media.style.setProperty(\n '--width',\n `${naturalWidth}px`,\n );\n $media.style.setProperty(\n '--height',\n `${naturalHeight}px`,\n );\n $media.style.aspectRatio = `${naturalWidth}/${naturalHeight}`;\n }\n }\n }}\n />\n ) : (\n {\n if (!hasDuration) {\n const { duration } = e.target;\n if (duration) {\n const formattedDuration = formatDuration(duration);\n const container = e.target.closest('.media-video');\n if (container) {\n container.dataset.formattedDuration =\n formattedDuration;\n }\n }\n }\n }}\n />\n )}\n
    \n \n
    \n \n )}\n {!showOriginal && !showInlineDesc && (\n \n )}\n \n
    \n );\n } else if (type === 'audio' || isAudioMaybe) {\n const formattedDuration = formatDuration(original.duration);\n return (\n
    \n \n {showOriginal ? (\n
    \n );\n }\n}\n\nfunction getURLObj(url) {\n // Fake base URL if url doesn't have https:// prefix\n return URL.parse(url, location.origin);\n}\n\nexport default memo(Media, (oldProps, newProps) => {\n const oldMedia = oldProps.media || {};\n const newMedia = newProps.media || {};\n\n return (\n oldMedia?.id === newMedia?.id &&\n oldMedia.url === newMedia.url &&\n oldProps.to === newProps.to &&\n oldProps.class === newProps.class\n );\n});\n","import './status.css';\nimport '@justinribeiro/lite-youtube';\n\nimport {\n ControlledMenu,\n Menu,\n MenuDivider,\n MenuHeader,\n MenuItem,\n} from '@szhsin/react-menu';\nimport { decodeBlurHash, getBlurHashAverageColor } from 'fast-blurhash';\nimport { shallowEqual } from 'fast-equals';\nimport prettify from 'html-prettify';\nimport pThrottle from 'p-throttle';\nimport { Fragment } from 'preact';\nimport { memo } from 'preact/compat';\nimport {\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'preact/hooks';\nimport punycode from 'punycode/';\nimport { useHotkeys } from 'react-hotkeys-hook';\nimport { detectAll } from 'tinyld/light';\nimport { useLongPress } from 'use-long-press';\nimport { useSnapshot } from 'valtio';\n\nimport CustomEmoji from '../components/custom-emoji';\nimport EmojiText from '../components/emoji-text';\nimport LazyShazam from '../components/lazy-shazam';\nimport Loader from '../components/loader';\nimport MenuConfirm from '../components/menu-confirm';\nimport Menu2 from '../components/menu2';\nimport Modal from '../components/modal';\nimport NameText from '../components/name-text';\nimport Poll from '../components/poll';\nimport { api } from '../utils/api';\nimport emojifyText from '../utils/emojify-text';\nimport enhanceContent from '../utils/enhance-content';\nimport FilterContext from '../utils/filter-context';\nimport { isFiltered } from '../utils/filters';\nimport getTranslateTargetLanguage from '../utils/get-translate-target-language';\nimport getHTMLText from '../utils/getHTMLText';\nimport handleContentLinks from '../utils/handle-content-links';\nimport htmlContentLength from '../utils/html-content-length';\nimport isRTL from '../utils/is-rtl';\nimport isMastodonLinkMaybe from '../utils/isMastodonLinkMaybe';\nimport localeMatch from '../utils/locale-match';\nimport mem from '../utils/mem';\nimport niceDateTime from '../utils/nice-date-time';\nimport openCompose from '../utils/open-compose';\nimport pmem from '../utils/pmem';\nimport safeBoundingBoxPadding from '../utils/safe-bounding-box-padding';\nimport shortenNumber from '../utils/shorten-number';\nimport showCompose from '../utils/show-compose';\nimport showToast from '../utils/show-toast';\nimport { speak, supportsTTS } from '../utils/speech';\nimport states, { getStatus, saveStatus, statusKey } from '../utils/states';\nimport statusPeek from '../utils/status-peek';\nimport store from '../utils/store';\nimport { getCurrentAccountID } from '../utils/store-utils';\nimport supports from '../utils/supports';\nimport unfurlMastodonLink from '../utils/unfurl-link';\nimport useTruncated from '../utils/useTruncated';\nimport visibilityIconsMap from '../utils/visibility-icons-map';\n\nimport Avatar from './avatar';\nimport Icon from './icon';\nimport Link from './link';\nimport Media, { isMediaCaptionLong } from './media';\nimport MenuLink from './menu-link';\nimport RelativeTime from './relative-time';\nimport TranslationBlock from './translation-block';\n\nconst SHOW_COMMENT_COUNT_LIMIT = 280;\nconst INLINE_TRANSLATE_LIMIT = 140;\n\nconst throttle = pThrottle({\n limit: 1,\n interval: 1000,\n});\nfunction fetchAccount(id, masto) {\n return masto.v1.accounts.$select(id).fetch();\n}\nconst memFetchAccount = pmem(throttle(fetchAccount));\n\nconst visibilityText = {\n public: 'Public',\n unlisted: 'Unlisted',\n private: 'Followers only',\n direct: 'Private mention',\n};\n\nconst isIOS =\n window.ontouchstart !== undefined &&\n /iPad|iPhone|iPod/.test(navigator.userAgent);\n\nconst rtf = new Intl.RelativeTimeFormat();\n\nconst REACTIONS_LIMIT = 80;\n\nfunction getPollText(poll) {\n if (!poll?.options?.length) return '';\n return `📊:\\n${poll.options\n .map(\n (option) =>\n `- ${option.title}${\n option.votesCount >= 0 ? ` (${option.votesCount})` : ''\n }`,\n )\n .join('\\n')}`;\n}\nfunction getPostText(status) {\n const { spoilerText, content, poll } = status;\n return (\n (spoilerText ? `${spoilerText}\\n\\n` : '') +\n getHTMLText(content) +\n getPollText(poll)\n );\n}\n\nconst PostContent = memo(\n ({ post, instance, previewMode }) => {\n const { content, emojis, language, mentions, url } = post;\n return (\n {\n // Remove target=\"_blank\" from links\n dom.querySelectorAll('a.u-url[target=\"_blank\"]').forEach((a) => {\n if (!/http/i.test(a.innerText.trim())) {\n a.removeAttribute('target');\n }\n });\n },\n }),\n }}\n />\n );\n },\n (oldProps, newProps) => {\n const { post: oldPost } = oldProps;\n const { post: newPost } = newProps;\n return oldPost.content === newPost.content;\n },\n);\n\nconst SIZE_CLASS = {\n s: 'small',\n m: 'medium',\n l: 'large',\n};\n\nconst detectLang = mem((text) => {\n text = text?.trim();\n\n // Ref: https://github.com/komodojp/tinyld/blob/develop/docs/benchmark.md\n // 500 should be enough for now, also the default max chars for Mastodon\n if (text?.length > 500) {\n return null;\n }\n const langs = detectAll(text);\n const lang = langs[0];\n if (lang?.lang && lang?.accuracy > 0.5) {\n // If > 50% accurate, use it\n // It can be accurate if < 50% but better be safe\n // Though > 50% also can be inaccurate 🤷‍♂️\n return lang.lang;\n }\n return null;\n});\n\nfunction Status({\n statusID,\n status,\n instance: propInstance,\n size = 'm',\n contentTextWeight,\n readOnly,\n enableCommentHint,\n withinContext,\n skeleton,\n enableTranslate,\n forceTranslate: _forceTranslate,\n previewMode,\n // allowFilters,\n onMediaClick,\n quoted,\n onStatusLinkClick = () => {},\n showFollowedTags,\n allowContextMenu,\n showActionsBar,\n showReplyParent,\n mediaFirst,\n}) {\n if (skeleton) {\n return (\n \n {!mediaFirst && }\n
    \n
    \n {(size === 's' || mediaFirst) && } ███ ████████\n
    \n
    \n {mediaFirst &&
    }\n
    \n

    ████ ████████

    \n
    \n
    \n
    \n
    \n );\n }\n const { masto, instance, authenticated } = api({ instance: propInstance });\n const { instance: currentInstance } = api();\n const sameInstance = instance === currentInstance;\n\n let sKey = statusKey(statusID || status?.id, instance);\n const snapStates = useSnapshot(states);\n if (!status) {\n status = snapStates.statuses[sKey] || snapStates.statuses[statusID];\n sKey = statusKey(status?.id, instance);\n }\n if (!status) {\n return null;\n }\n\n const {\n account: {\n acct,\n avatar,\n avatarStatic,\n id: accountId,\n url: accountURL,\n displayName,\n username,\n emojis: accountEmojis,\n bot,\n group,\n },\n id,\n repliesCount,\n reblogged,\n reblogsCount,\n favourited,\n favouritesCount,\n bookmarked,\n poll,\n muted,\n sensitive,\n spoilerText,\n visibility, // public, unlisted, private, direct\n language: _language,\n editedAt,\n filtered,\n card,\n createdAt,\n inReplyToId,\n inReplyToAccountId,\n content,\n mentions,\n mediaAttachments,\n reblog,\n uri,\n url,\n emojis,\n tags,\n pinned,\n // Non-API props\n _deleted,\n _pinned,\n // _filtered,\n // Non-Mastodon\n emojiReactions,\n } = status;\n\n const [languageAutoDetected, setLanguageAutoDetected] = useState(null);\n useEffect(() => {\n if (!content) return;\n if (_language) return;\n let timer;\n timer = setTimeout(() => {\n let detected = detectLang(\n getHTMLText(content, {\n preProcess: (dom) => {\n // Remove anything that can skew the language detection\n\n // Remove .mention, .hashtag, pre, code, a:has(.invisible)\n dom\n .querySelectorAll(\n '.mention, .hashtag, pre, code, a:has(.invisible)',\n )\n .forEach((a) => {\n a.remove();\n });\n\n // Remove links that contains text that starts with https?://\n dom.querySelectorAll('a').forEach((a) => {\n const text = a.innerText.trim();\n if (text.startsWith('https://') || text.startsWith('http://')) {\n a.remove();\n }\n });\n },\n }),\n );\n setLanguageAutoDetected(detected);\n }, 1000);\n return () => clearTimeout(timer);\n }, [content, _language]);\n const language = _language || languageAutoDetected;\n\n // if (!mediaAttachments?.length) mediaFirst = false;\n const hasMediaAttachments = !!mediaAttachments?.length;\n if (mediaFirst && hasMediaAttachments) size = 's';\n\n const currentAccount = useMemo(() => {\n return getCurrentAccountID();\n }, []);\n const isSelf = useMemo(() => {\n return currentAccount && currentAccount === accountId;\n }, [accountId, currentAccount]);\n\n const filterContext = useContext(FilterContext);\n const filterInfo =\n !isSelf && !readOnly && !previewMode && isFiltered(filtered, filterContext);\n\n if (filterInfo?.action === 'hide') {\n return null;\n }\n\n console.debug('RENDER Status', id, status?.account.displayName, quoted);\n\n const debugHover = (e) => {\n if (e.shiftKey) {\n console.log({\n ...status,\n });\n }\n };\n\n if (/*allowFilters && */ size !== 'l' && filterInfo) {\n return (\n \n );\n }\n\n const createdAtDate = new Date(createdAt);\n const editedAtDate = new Date(editedAt);\n\n let inReplyToAccountRef = mentions?.find(\n (mention) => mention.id === inReplyToAccountId,\n );\n if (!inReplyToAccountRef && inReplyToAccountId === id) {\n inReplyToAccountRef = { url: accountURL, username, displayName };\n }\n const [inReplyToAccount, setInReplyToAccount] = useState(inReplyToAccountRef);\n if (!withinContext && !inReplyToAccount && inReplyToAccountId) {\n const account = states.accounts[inReplyToAccountId];\n if (account) {\n setInReplyToAccount(account);\n } else {\n memFetchAccount(inReplyToAccountId, masto)\n .then((account) => {\n setInReplyToAccount(account);\n states.accounts[account.id] = account;\n })\n .catch((e) => {});\n }\n }\n const mentionSelf =\n inReplyToAccountId === currentAccount ||\n mentions?.find((mention) => mention.id === currentAccount);\n\n const readingExpandSpoilers = useMemo(() => {\n const prefs = store.account.get('preferences') || {};\n return !!prefs['reading:expand:spoilers'];\n }, []);\n const readingExpandMedia = useMemo(() => {\n // default | show_all | hide_all\n // Ignore hide_all because it means hide *ALL* media including non-sensitive ones\n const prefs = store.account.get('preferences') || {};\n return prefs['reading:expand:media']?.toLowerCase() || 'default';\n }, []);\n // FOR TESTING:\n // const readingExpandSpoilers = true;\n // const readingExpandMedia = 'show_all';\n const showSpoiler =\n previewMode || readingExpandSpoilers || !!snapStates.spoilers[id];\n const showSpoilerMedia =\n previewMode ||\n readingExpandMedia === 'show_all' ||\n !!snapStates.spoilersMedia[id];\n\n if (reblog) {\n // If has statusID, means useItemID (cached in states)\n\n if (group) {\n return (\n \n
    \n {' '}\n \n
    \n \n \n );\n }\n\n return (\n \n
    \n {' '}\n {' '}\n boosted\n
    \n \n \n );\n }\n\n // Check followedTags\n const FollowedTagsParent = useCallback(\n ({ children }) => (\n \n
    \n {' '}\n {snapStates.statusFollowedTags[sKey].slice(0, 3).map((tag) => (\n \n {tag}\n \n ))}\n
    \n {children}\n \n ),\n [sKey, instance, snapStates.statusFollowedTags[sKey]],\n );\n const StatusParent =\n showFollowedTags && !!snapStates.statusFollowedTags[sKey]?.length\n ? FollowedTagsParent\n : Fragment;\n\n const isSizeLarge = size === 'l';\n\n const [forceTranslate, setForceTranslate] = useState(_forceTranslate);\n const targetLanguage = getTranslateTargetLanguage(true);\n const contentTranslationHideLanguages =\n snapStates.settings.contentTranslationHideLanguages || [];\n const { contentTranslation, contentTranslationAutoInline } =\n snapStates.settings;\n if (!contentTranslation) enableTranslate = false;\n const inlineTranslate = useMemo(() => {\n if (\n !contentTranslation ||\n !contentTranslationAutoInline ||\n readOnly ||\n (withinContext && !isSizeLarge) ||\n previewMode ||\n spoilerText ||\n sensitive ||\n poll ||\n card ||\n mediaAttachments?.length\n ) {\n return false;\n }\n const contentLength = htmlContentLength(content);\n return contentLength > 0 && contentLength <= INLINE_TRANSLATE_LIMIT;\n }, [\n contentTranslation,\n contentTranslationAutoInline,\n readOnly,\n withinContext,\n isSizeLarge,\n previewMode,\n spoilerText,\n sensitive,\n poll,\n card,\n mediaAttachments,\n content,\n ]);\n\n const [showEdited, setShowEdited] = useState(false);\n const [showEmbed, setShowEmbed] = useState(false);\n\n const spoilerContentRef = useTruncated();\n const contentRef = useTruncated();\n const mediaContainerRef = useTruncated();\n const readMoreText = 'Read more →';\n\n const statusRef = useRef(null);\n\n const unauthInteractionErrorMessage = `Sorry, your current logged-in instance can't interact with this post from another instance.`;\n\n const textWeight = useCallback(\n () =>\n Math.max(\n Math.round((spoilerText.length + htmlContentLength(content)) / 140) ||\n 1,\n 1,\n ),\n [spoilerText, content],\n );\n\n const createdDateText = niceDateTime(createdAtDate);\n const editedDateText = editedAt && niceDateTime(editedAtDate);\n\n // Can boost if:\n // - authenticated AND\n // - visibility != direct OR\n // - visibility = private AND isSelf\n let canBoost =\n authenticated && visibility !== 'direct' && visibility !== 'private';\n if (visibility === 'private' && isSelf) {\n canBoost = true;\n }\n\n const replyStatus = (e) => {\n if (!sameInstance || !authenticated) {\n return alert(unauthInteractionErrorMessage);\n }\n // syntheticEvent comes from MenuItem\n if (e?.shiftKey || e?.syntheticEvent?.shiftKey) {\n const newWin = openCompose({\n replyToStatus: status,\n });\n if (newWin) return;\n }\n showCompose({\n replyToStatus: status,\n });\n };\n\n // Check if media has no descriptions\n const mediaNoDesc = useMemo(() => {\n return mediaAttachments.some(\n (attachment) => !attachment.description?.trim?.(),\n );\n }, [mediaAttachments]);\n\n const statusMonthsAgo = useMemo(() => {\n return Math.floor(\n (new Date() - createdAtDate) / (1000 * 60 * 60 * 24 * 30),\n );\n }, [createdAtDate]);\n\n const boostStatus = async () => {\n if (!sameInstance || !authenticated) {\n alert(unauthInteractionErrorMessage);\n return false;\n }\n try {\n if (!reblogged) {\n let confirmText = 'Boost this post?';\n if (mediaNoDesc) {\n confirmText += '\\n\\n⚠️ Some media have no descriptions.';\n }\n const yes = confirm(confirmText);\n if (!yes) {\n return false;\n }\n }\n // Optimistic\n states.statuses[sKey] = {\n ...status,\n reblogged: !reblogged,\n reblogsCount: reblogsCount + (reblogged ? -1 : 1),\n };\n if (reblogged) {\n const newStatus = await masto.v1.statuses.$select(id).unreblog();\n saveStatus(newStatus, instance);\n return true;\n } else {\n const newStatus = await masto.v1.statuses.$select(id).reblog();\n saveStatus(newStatus, instance);\n return true;\n }\n } catch (e) {\n console.error(e);\n // Revert optimistism\n states.statuses[sKey] = status;\n return false;\n }\n };\n const confirmBoostStatus = async () => {\n if (!sameInstance || !authenticated) {\n alert(unauthInteractionErrorMessage);\n return false;\n }\n try {\n // Optimistic\n states.statuses[sKey] = {\n ...status,\n reblogged: !reblogged,\n reblogsCount: reblogsCount + (reblogged ? -1 : 1),\n };\n if (reblogged) {\n const newStatus = await masto.v1.statuses.$select(id).unreblog();\n saveStatus(newStatus, instance);\n } else {\n const newStatus = await masto.v1.statuses.$select(id).reblog();\n saveStatus(newStatus, instance);\n }\n return true;\n } catch (e) {\n console.error(e);\n // Revert optimistism\n states.statuses[sKey] = status;\n return false;\n }\n };\n\n const favouriteStatus = async () => {\n if (!sameInstance || !authenticated) {\n alert(unauthInteractionErrorMessage);\n return false;\n }\n try {\n // Optimistic\n states.statuses[sKey] = {\n ...status,\n favourited: !favourited,\n favouritesCount: favouritesCount + (favourited ? -1 : 1),\n };\n if (favourited) {\n const newStatus = await masto.v1.statuses.$select(id).unfavourite();\n saveStatus(newStatus, instance);\n } else {\n const newStatus = await masto.v1.statuses.$select(id).favourite();\n saveStatus(newStatus, instance);\n }\n return true;\n } catch (e) {\n console.error(e);\n // Revert optimistism\n states.statuses[sKey] = status;\n return false;\n }\n };\n const favouriteStatusNotify = async () => {\n try {\n const done = await favouriteStatus();\n if (!isSizeLarge && done) {\n showToast(\n favourited\n ? `Unliked @${username || acct}'s post`\n : `Liked @${username || acct}'s post`,\n );\n }\n } catch (e) {}\n };\n\n const bookmarkStatus = async () => {\n if (!supports('@mastodon/post-bookmark')) return;\n if (!sameInstance || !authenticated) {\n alert(unauthInteractionErrorMessage);\n return false;\n }\n try {\n // Optimistic\n states.statuses[sKey] = {\n ...status,\n bookmarked: !bookmarked,\n };\n if (bookmarked) {\n const newStatus = await masto.v1.statuses.$select(id).unbookmark();\n saveStatus(newStatus, instance);\n } else {\n const newStatus = await masto.v1.statuses.$select(id).bookmark();\n saveStatus(newStatus, instance);\n }\n return true;\n } catch (e) {\n console.error(e);\n // Revert optimistism\n states.statuses[sKey] = status;\n return false;\n }\n };\n const bookmarkStatusNotify = async () => {\n try {\n const done = await bookmarkStatus();\n if (!isSizeLarge && done) {\n showToast(\n bookmarked\n ? `Unbookmarked @${username || acct}'s post`\n : `Bookmarked @${username || acct}'s post`,\n );\n }\n } catch (e) {}\n };\n\n const differentLanguage =\n !!language &&\n language !== targetLanguage &&\n !localeMatch([language], [targetLanguage]) &&\n !contentTranslationHideLanguages.find(\n (l) => language === l || localeMatch([language], [l]),\n );\n\n const reblogIterator = useRef();\n const favouriteIterator = useRef();\n async function fetchBoostedLikedByAccounts(firstLoad) {\n if (firstLoad) {\n reblogIterator.current = masto.v1.statuses\n .$select(statusID)\n .rebloggedBy.list({\n limit: REACTIONS_LIMIT,\n });\n favouriteIterator.current = masto.v1.statuses\n .$select(statusID)\n .favouritedBy.list({\n limit: REACTIONS_LIMIT,\n });\n }\n const [{ value: reblogResults }, { value: favouriteResults }] =\n await Promise.allSettled([\n reblogIterator.current.next(),\n favouriteIterator.current.next(),\n ]);\n if (reblogResults.value?.length || favouriteResults.value?.length) {\n const accounts = [];\n if (reblogResults.value?.length) {\n accounts.push(\n ...reblogResults.value.map((a) => {\n a._types = ['reblog'];\n return a;\n }),\n );\n }\n if (favouriteResults.value?.length) {\n accounts.push(\n ...favouriteResults.value.map((a) => {\n a._types = ['favourite'];\n return a;\n }),\n );\n }\n return {\n value: accounts,\n done: reblogResults.done && favouriteResults.done,\n };\n }\n return {\n value: [],\n done: true,\n };\n }\n\n const actionsRef = useRef();\n const isPublic = ['public', 'unlisted'].includes(visibility);\n const isPinnable = ['public', 'unlisted', 'private'].includes(visibility);\n const StatusMenuItems = (\n <>\n {!isSizeLarge && sameInstance && (\n <>\n
    \n \n \n \n {repliesCount > 0 ? shortenNumber(repliesCount) : 'Reply'}\n \n \n \n \n {reblogged ? 'Unboost' : 'Boost'}\n \n }\n className={`menu-reblog ${reblogged ? 'checked' : ''}`}\n menuExtras={\n {\n showCompose({\n draftStatus: {\n status: `\\n${url}`,\n },\n });\n }}\n >\n \n Quote\n \n }\n menuFooter={\n mediaNoDesc && !reblogged ? (\n
    \n \n Some media have no descriptions.\n
    \n ) : (\n statusMonthsAgo >= 3 && (\n
    \n \n \n Old post (\n {rtf.format(-statusMonthsAgo, 'month')}\n )\n \n
    \n )\n )\n }\n disabled={!canBoost}\n onClick={async () => {\n try {\n const done = await confirmBoostStatus();\n if (!isSizeLarge && done) {\n showToast(\n reblogged\n ? `Unboosted @${username || acct}'s post`\n : `Boosted @${username || acct}'s post`,\n );\n }\n } catch (e) {}\n }}\n >\n \n \n {reblogsCount > 0\n ? shortenNumber(reblogsCount)\n : reblogged\n ? 'Unboost'\n : 'Boost…'}\n \n \n \n \n \n {favouritesCount > 0\n ? shortenNumber(favouritesCount)\n : favourited\n ? 'Unlike'\n : 'Like'}\n \n \n {supports('@mastodon/post-bookmark') && (\n \n \n {bookmarked ? 'Unbookmark' : 'Bookmark'}\n \n )}\n
    \n \n )}\n {!isSizeLarge && sameInstance && (isSizeLarge || showActionsBar) && (\n \n )}\n {(isSizeLarge || showActionsBar) && (\n <>\n {\n states.showGenericAccounts = {\n heading: 'Boosted/Liked by…',\n fetchAccounts: fetchBoostedLikedByAccounts,\n instance,\n showReactions: true,\n postID: sKey,\n };\n }}\n >\n \n \n Boosted/Liked by\n \n \n \n )}\n {!mediaFirst && (\n <>\n {(enableTranslate || !language || differentLanguage) && (\n \n )}\n {enableTranslate ? (\n
    \n {\n setForceTranslate(true);\n }}\n >\n \n Translate\n \n {supportsTTS && (\n {\n const postText = getPostText(status);\n if (postText) {\n speak(postText, language);\n }\n }}\n >\n \n Speak\n \n )}\n
    \n ) : (\n (!language || differentLanguage) && (\n
    \n \n \n Translate\n \n {supportsTTS && (\n {\n const postText = getPostText(status);\n if (postText) {\n speak(postText, language);\n }\n }}\n >\n \n Speak\n \n )}\n
    \n )\n )}\n \n )}\n {((!isSizeLarge && sameInstance) ||\n enableTranslate ||\n !language ||\n differentLanguage) && }\n {!isSizeLarge && (\n <>\n {\n onStatusLinkClick(e, status);\n }}\n >\n \n \n View post by @{username || acct}\n
    \n \n {visibilityText[visibility]} • {createdDateText}\n \n
    \n \n \n )}\n {!!editedAt && (\n <>\n {\n setShowEdited(id);\n }}\n >\n \n \n Show Edit History\n
    \n Edited: {editedDateText}\n
    \n \n \n )}\n \n \n {nicePostURL(url)}\n \n
    \n {\n // Copy url to clipboard\n try {\n navigator.clipboard.writeText(url);\n showToast('Link copied');\n } catch (e) {\n console.error(e);\n showToast('Unable to copy link');\n }\n }}\n >\n \n Copy\n \n {isPublic &&\n navigator?.share &&\n navigator?.canShare?.({\n url,\n }) && (\n {\n try {\n navigator.share({\n url,\n });\n } catch (e) {\n console.error(e);\n alert(\"Sharing doesn't seem to work.\");\n }\n }}\n >\n \n Share…\n \n )}\n
    \n {isPublic && isSizeLarge && (\n {\n setShowEmbed(true);\n }}\n >\n \n Embed post\n \n )}\n {(isSelf || mentionSelf) && }\n {(isSelf || mentionSelf) && (\n {\n try {\n const newStatus = await masto.v1.statuses\n .$select(id)\n [muted ? 'unmute' : 'mute']();\n saveStatus(newStatus, instance);\n showToast(muted ? 'Conversation unmuted' : 'Conversation muted');\n } catch (e) {\n console.error(e);\n showToast(\n muted\n ? 'Unable to unmute conversation'\n : 'Unable to mute conversation',\n );\n }\n }}\n >\n {muted ? (\n <>\n \n Unmute conversation\n \n ) : (\n <>\n \n Mute conversation\n \n )}\n \n )}\n {isSelf && isPinnable && (\n {\n try {\n const newStatus = await masto.v1.statuses\n .$select(id)\n [pinned ? 'unpin' : 'pin']();\n saveStatus(newStatus, instance);\n showToast(\n pinned\n ? 'Post unpinned from profile'\n : 'Post pinned to profile',\n );\n } catch (e) {\n console.error(e);\n showToast(pinned ? 'Unable to unpin post' : 'Unable to pin post');\n }\n }}\n >\n {pinned ? (\n <>\n \n Unpin from profile\n \n ) : (\n <>\n \n Pin to profile\n \n )}\n \n )}\n {isSelf && (\n
    \n {supports('@mastodon/post-edit') && (\n {\n showCompose({\n editStatus: status,\n });\n }}\n >\n \n Edit\n \n )}\n {isSizeLarge && (\n \n \n Delete this post?\n \n }\n menuItemClassName=\"danger\"\n onClick={() => {\n // const yes = confirm('Delete this post?');\n // if (yes) {\n (async () => {\n try {\n await masto.v1.statuses.$select(id).remove();\n const cachedStatus = getStatus(id, instance);\n cachedStatus._deleted = true;\n showToast('Deleted');\n } catch (e) {\n console.error(e);\n showToast('Unable to delete');\n }\n })();\n // }\n }}\n >\n \n Delete…\n \n )}\n
    \n )}\n {!isSelf && isSizeLarge && (\n <>\n \n {\n states.showReportModal = {\n account: status.account,\n post: status,\n };\n }}\n >\n \n Report post…\n \n \n )}\n \n );\n\n const contextMenuRef = useRef();\n const [isContextMenuOpen, setIsContextMenuOpen] = useState(false);\n const [contextMenuProps, setContextMenuProps] = useState({});\n\n const showContextMenu =\n allowContextMenu || (!isSizeLarge && !previewMode && !_deleted && !quoted);\n\n // Only iOS/iPadOS browsers don't support contextmenu\n // Some comments report iPadOS might support contextmenu if a mouse is connected\n const bindLongPressContext = useLongPress(\n isIOS && showContextMenu\n ? (e) => {\n if (e.pointerType === 'mouse') return;\n // There's 'pen' too, but not sure if contextmenu event would trigger from a pen\n\n const { clientX, clientY } = e.touches?.[0] || e;\n // link detection copied from onContextMenu because here it works\n const link = e.target.closest('a');\n if (\n link &&\n statusRef.current.contains(link) &&\n !link.getAttribute('href').startsWith('#')\n )\n return;\n e.preventDefault();\n setContextMenuProps({\n anchorPoint: {\n x: clientX,\n y: clientY,\n },\n direction: 'right',\n });\n setIsContextMenuOpen(true);\n }\n : null,\n {\n threshold: 600,\n captureEvent: true,\n detect: 'touch',\n cancelOnMovement: 2, // true allows movement of up to 25 pixels\n },\n );\n\n const hotkeysEnabled = !readOnly && !previewMode && !quoted;\n const rRef = useHotkeys('r, shift+r', replyStatus, {\n enabled: hotkeysEnabled,\n });\n const fRef = useHotkeys('f, l', favouriteStatusNotify, {\n enabled: hotkeysEnabled,\n });\n const dRef = useHotkeys('d', bookmarkStatusNotify, {\n enabled: hotkeysEnabled,\n });\n const bRef = useHotkeys(\n 'shift+b',\n () => {\n (async () => {\n try {\n const done = await confirmBoostStatus();\n if (!isSizeLarge && done) {\n showToast(\n reblogged\n ? `Unboosted @${username || acct}'s post`\n : `Boosted @${username || acct}'s post`,\n );\n }\n } catch (e) {}\n })();\n },\n {\n enabled: hotkeysEnabled && canBoost,\n },\n );\n const xRef = useHotkeys('x', (e) => {\n const activeStatus = document.activeElement.closest(\n '.status-link, .status-focus',\n );\n if (activeStatus) {\n const spoilerButton = activeStatus.querySelector(\n '.spoiler-button:not(.spoiling)',\n );\n if (spoilerButton) {\n e.stopPropagation();\n spoilerButton.click();\n } else {\n const spoilerMediaButton = activeStatus.querySelector(\n '.spoiler-media-button:not(.spoiling)',\n );\n if (spoilerMediaButton) {\n e.stopPropagation();\n spoilerMediaButton.click();\n }\n }\n }\n });\n\n const displayedMediaAttachments = mediaAttachments.slice(\n 0,\n isSizeLarge ? undefined : 4,\n );\n const showMultipleMediaCaptions =\n mediaAttachments.length > 1 &&\n displayedMediaAttachments.some(\n (media) => !!media.description && !isMediaCaptionLong(media.description),\n );\n const captionChildren = useMemo(() => {\n if (!showMultipleMediaCaptions) return null;\n const attachments = [];\n displayedMediaAttachments.forEach((media, i) => {\n if (!media.description) return;\n const index = attachments.findIndex(\n (attachment) => attachment.media.description === media.description,\n );\n if (index === -1) {\n attachments.push({\n media,\n indices: [i],\n });\n } else {\n attachments[index].indices.push(i);\n }\n });\n return attachments.map(({ media, indices }) => (\n i + 1).join(' ')}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n states.showMediaAlt = {\n alt: media.description,\n lang: language,\n };\n }}\n title={media.description}\n >\n {indices.map((i) => i + 1).join(' ')} {media.description}\n \n ));\n\n // return displayedMediaAttachments.map(\n // (media, i) =>\n // !!media.description && (\n // {\n // e.preventDefault();\n // e.stopPropagation();\n // states.showMediaAlt = {\n // alt: media.description,\n // lang: language,\n // };\n // }}\n // title={media.description}\n // >\n // {i + 1} {media.description}\n // \n // ),\n // );\n }, [showMultipleMediaCaptions, displayedMediaAttachments, language]);\n\n const isThread = useMemo(() => {\n return (\n (!!inReplyToId && inReplyToAccountId === status.account?.id) ||\n !!snapStates.statusThreadNumber[sKey]\n );\n }, [\n inReplyToId,\n inReplyToAccountId,\n status.account?.id,\n snapStates.statusThreadNumber[sKey],\n ]);\n\n const showCommentHint = useMemo(() => {\n return (\n enableCommentHint &&\n !isThread &&\n !withinContext &&\n !inReplyToId &&\n visibility === 'public' &&\n repliesCount > 0\n );\n }, [\n enableCommentHint,\n isThread,\n withinContext,\n inReplyToId,\n repliesCount,\n visibility,\n ]);\n const showCommentCount = useMemo(() => {\n if (\n card ||\n poll ||\n sensitive ||\n spoilerText ||\n mediaAttachments?.length ||\n isThread ||\n withinContext ||\n inReplyToId ||\n repliesCount <= 0\n ) {\n return false;\n }\n const questionRegex = /[???︖❓❔⁇⁈⁉¿‽؟]/;\n const containsQuestion = questionRegex.test(content);\n if (!containsQuestion) return false;\n const contentLength = htmlContentLength(content);\n if (contentLength > 0 && contentLength <= SHOW_COMMENT_COUNT_LIMIT) {\n return true;\n }\n }, [\n card,\n poll,\n sensitive,\n spoilerText,\n mediaAttachments,\n reblog,\n isThread,\n withinContext,\n inReplyToId,\n repliesCount,\n content,\n ]);\n\n return (\n \n {showReplyParent && !!(inReplyToId && inReplyToAccountId) && (\n \n )}\n {\n statusRef.current = node;\n // Use parent node if it's in focus\n // Use case: \n // When navigating (j/k), the is focused instead of \n // Hotkey binding doesn't bubble up thus this hack\n const nodeRef =\n node?.closest?.(\n '.timeline-item, .timeline-item-alt, .status-link, .status-focus',\n ) || node;\n rRef.current = nodeRef;\n fRef.current = nodeRef;\n dRef.current = nodeRef;\n bRef.current = nodeRef;\n xRef.current = nodeRef;\n }}\n tabindex=\"-1\"\n class={`status ${\n !withinContext && inReplyToId && inReplyToAccount\n ? 'status-reply-to'\n : ''\n } visibility-${visibility} ${_pinned ? 'status-pinned' : ''} ${\n SIZE_CLASS[size]\n } ${_deleted ? 'status-deleted' : ''} ${quoted ? 'status-card' : ''} ${\n isContextMenuOpen ? 'status-menu-open' : ''\n } ${mediaFirst && hasMediaAttachments ? 'status-media-first' : ''}`}\n onMouseEnter={debugHover}\n onContextMenu={(e) => {\n if (!showContextMenu) return;\n if (e.metaKey) return;\n // console.log('context menu', e);\n const link = e.target.closest('a');\n if (\n link &&\n statusRef.current.contains(link) &&\n !link.getAttribute('href').startsWith('#')\n )\n return;\n\n // If there's selected text, don't show custom context menu\n const selection = window.getSelection?.();\n if (selection.toString().length > 0) {\n const { anchorNode } = selection;\n if (statusRef.current?.contains(anchorNode)) {\n return;\n }\n }\n e.preventDefault();\n setContextMenuProps({\n anchorPoint: {\n x: e.clientX,\n y: e.clientY,\n },\n direction: 'right',\n });\n setIsContextMenuOpen(true);\n }}\n {...(showContextMenu ? bindLongPressContext() : {})}\n >\n {showContextMenu && (\n {\n setIsContextMenuOpen(false);\n // statusRef.current?.focus?.();\n if (e?.reason === 'click') {\n statusRef.current?.closest('[tabindex]')?.focus?.();\n }\n }}\n portal={{\n target: document.body,\n }}\n containerProps={{\n style: {\n // Higher than the backdrop\n zIndex: 1001,\n },\n onClick: () => {\n contextMenuRef.current?.closeMenu?.();\n },\n }}\n overflow=\"auto\"\n boundingBoxPadding={safeBoundingBoxPadding()}\n unmountOnClose\n >\n {StatusMenuItems}\n \n )}\n {showActionsBar &&\n size !== 'l' &&\n !previewMode &&\n !readOnly &&\n !_deleted &&\n !quoted && (\n \n \n \n {\n e.preventDefault();\n e.stopPropagation();\n setContextMenuProps({\n anchorRef: {\n current: e.currentTarget,\n },\n align: 'start',\n direction: 'left',\n gap: 0,\n shift: -8,\n });\n setIsContextMenuOpen('actions-bar');\n }}\n >\n \n \n \n )}\n {size !== 'l' && (\n
    \n {reblogged && }\n {favourited && }\n {bookmarked && }\n {_pinned && }\n
    \n )}\n {size !== 's' && (\n {\n e.preventDefault();\n e.stopPropagation();\n states.showAccount = {\n account: status.account,\n instance,\n };\n }}\n >\n \n
    \n )}\n
    \n
    \n \n \n \n {/* {inReplyToAccount && !withinContext && size !== 's' && (\n <>\n {' '}\n \n {' '}\n \n \n \n )} */}\n {/* */}{' '}\n {size !== 'l' &&\n (_deleted ? (\n Deleted\n ) : url && !previewMode && !readOnly && !quoted ? (\n {\n if (\n e.metaKey ||\n e.ctrlKey ||\n e.shiftKey ||\n e.altKey ||\n e.which === 2\n ) {\n return;\n }\n e.preventDefault();\n e.stopPropagation();\n onStatusLinkClick?.(e, status);\n setContextMenuProps({\n anchorRef: {\n current: e.currentTarget,\n },\n align: 'end',\n direction: 'bottom',\n gap: 4,\n });\n setIsContextMenuOpen(true);\n }}\n class={`time ${\n isContextMenuOpen && contextMenuProps?.anchorRef\n ? 'is-open'\n : ''\n }`}\n >\n {showCommentHint && !showCommentCount ? (\n \n ) : (\n visibility !== 'public' &&\n visibility !== 'direct' && (\n \n )\n )}{' '}\n \n {!previewMode && !readOnly && (\n \n )}\n \n ) : (\n // {\n // if (e.target === e.currentTarget)\n // menuInstanceRef.current?.closeMenu?.();\n // },\n // }}\n // align=\"end\"\n // gap={4}\n // overflow=\"auto\"\n // viewScroll=\"close\"\n // boundingBoxPadding=\"8 8 8 8\"\n // unmountOnClose\n // menuButton={({ open }) => (\n // {\n // e.preventDefault();\n // e.stopPropagation();\n // onStatusLinkClick?.(e, status);\n // }}\n // class={`time ${open ? 'is-open' : ''}`}\n // >\n // {' '}\n // \n // \n // )}\n // >\n // {StatusMenuItems}\n // \n \n {visibility !== 'public' && visibility !== 'direct' && (\n <>\n {' '}\n \n )}\n \n \n ))}\n
    \n {visibility === 'direct' && (\n <>\n
    Private mention
    {' '}\n \n )}\n {!withinContext && (\n <>\n {isThread ? (\n
    \n \n Thread\n {snapStates.statusThreadNumber[sKey]\n ? ` ${snapStates.statusThreadNumber[sKey]}/X`\n : ''}\n
    \n ) : (\n !!inReplyToId &&\n !!inReplyToAccount &&\n (!!spoilerText ||\n !mentions.find((mention) => {\n return mention.id === inReplyToAccountId;\n })) && (\n
    \n {' '}\n \n
    \n )\n )}\n \n )}\n \n {mediaFirst && hasMediaAttachments ? (\n <>\n {(!!spoilerText || !!sensitive) && !readingExpandSpoilers && (\n <>\n {!!spoilerText && (\n \n {' '}\n \n )}\n {\n e.preventDefault();\n e.stopPropagation();\n if (showSpoiler) {\n delete states.spoilers[id];\n if (!readingExpandSpoilers) {\n delete states.spoilersMedia[id];\n }\n } else {\n states.spoilers[id] = true;\n if (!readingExpandSpoilers) {\n states.spoilersMedia[id] = true;\n }\n }\n }}\n >\n {' '}\n {showSpoiler ? 'Show less' : 'Show content'}\n \n \n )}\n \n {!!content && (\n
    \n \n
    \n )}\n \n ) : (\n <>\n {!!spoilerText && (\n <>\n \n

    \n \n

    \n
    \n {readingExpandSpoilers || previewMode ? (\n
    \n Content warning\n
    \n ) : (\n {\n e.preventDefault();\n e.stopPropagation();\n if (showSpoiler) {\n delete states.spoilers[id];\n if (!readingExpandSpoilers) {\n delete states.spoilersMedia[id];\n }\n } else {\n states.spoilers[id] = true;\n if (!readingExpandSpoilers) {\n states.spoilersMedia[id] = true;\n }\n }\n }}\n >\n {' '}\n {showSpoiler ? 'Show less' : 'Show content'}\n \n )}\n \n )}\n {!!content && (\n \n \n \n \n )}\n {!!poll && (\n {\n states.statuses[sKey].poll = newPoll;\n }}\n refresh={() => {\n return masto.v1.polls\n .$select(poll.id)\n .fetch()\n .then((pollResponse) => {\n states.statuses[sKey].poll = pollResponse;\n })\n .catch((e) => {}); // Silently fail\n }}\n votePoll={(choices) => {\n return masto.v1.polls\n .$select(poll.id)\n .votes.create({\n choices,\n })\n .then((pollResponse) => {\n states.statuses[sKey].poll = pollResponse;\n })\n .catch((e) => {}); // Silently fail\n }}\n />\n )}\n {(((enableTranslate || inlineTranslate) &&\n !!content.trim() &&\n !!getHTMLText(emojifyText(content, emojis)) &&\n differentLanguage) ||\n forceTranslate) && (\n \n )}\n {!previewMode &&\n sensitive &&\n !!mediaAttachments.length &&\n readingExpandMedia !== 'show_all' && (\n
    \n );\n}\n\nfunction MultipleMediaFigure(props) {\n const { enabled, children, lang, captionChildren } = props;\n if (!enabled || !captionChildren) return children;\n return (\n
    \n {children}\n
    \n {captionChildren}\n
    \n
    \n );\n}\n\nfunction MediaFirstContainer(props) {\n const { mediaAttachments, language, postID, instance } = props;\n const moreThanOne = mediaAttachments.length > 1;\n\n const carouselRef = useRef();\n const [currentIndex, setCurrentIndex] = useState(0);\n\n useEffect(() => {\n let handleScroll = () => {\n const { clientWidth, scrollLeft } = carouselRef.current;\n const index = Math.round(Math.abs(scrollLeft) / clientWidth);\n setCurrentIndex(index);\n };\n if (carouselRef.current) {\n carouselRef.current.addEventListener('scroll', handleScroll, {\n passive: true,\n });\n }\n return () => {\n if (carouselRef.current) {\n carouselRef.current.removeEventListener('scroll', handleScroll);\n }\n };\n }, []);\n\n return (\n <>\n
    \n
    \n {mediaAttachments.map((media, i) => (\n
    \n \n
    \n ))}\n
    \n {moreThanOne && (\n \n )}\n
    \n {moreThanOne && (\n \n {mediaAttachments.map((media, i) => (\n \n ))}\n \n )}\n \n );\n}\n\nfunction getDomain(url) {\n return punycode.toUnicode(\n URL.parse(url)\n .hostname.replace(/^www\\./, '')\n .replace(/\\/$/, ''),\n );\n}\n\n// \"Post\": Quote post + card link preview combo\n// Assume all links from these domains are \"posts\"\n// Mastodon links are \"posts\" too but they are converted to real quote posts and there's too many domains to check\n// This is just \"Progressive Enhancement\"\nfunction isCardPost(domain) {\n return ['x.com', 'twitter.com', 'threads.net', 'bsky.app'].includes(domain);\n}\n\nfunction Card({ card, selfReferential, instance }) {\n const snapStates = useSnapshot(states);\n const {\n blurhash,\n title,\n description,\n html,\n providerName,\n providerUrl,\n authorName,\n authorUrl,\n width,\n height,\n image,\n imageDescription,\n url,\n type,\n embedUrl,\n language,\n publishedAt,\n } = card;\n\n /* type\n link = Link OEmbed\n photo = Photo OEmbed\n video = Video OEmbed\n rich = iframe OEmbed. Not currently accepted, so won’t show up in practice.\n */\n\n const hasText = title || providerName || authorName;\n const isLandscape = width / height >= 1.2;\n const size = isLandscape ? 'large' : '';\n\n const [cardStatusURL, setCardStatusURL] = useState(null);\n // const [cardStatusID, setCardStatusID] = useState(null);\n useEffect(() => {\n if (hasText && image && !selfReferential && isMastodonLinkMaybe(url)) {\n unfurlMastodonLink(instance, url).then((result) => {\n if (!result) return;\n const { id, url } = result;\n setCardStatusURL('#' + url);\n\n // NOTE: This is for quote post\n // (async () => {\n // const { masto } = api({ instance });\n // const status = await masto.v1.statuses.$select(id).fetch();\n // saveStatus(status, instance);\n // setCardStatusID(id);\n // })();\n });\n }\n }, [hasText, image, selfReferential]);\n\n // if (cardStatusID) {\n // return (\n // \n // );\n // }\n\n if (snapStates.unfurledLinks[url]) return null;\n\n const hasIframeHTML = /