Compare commits

..

2 Commits

Author SHA1 Message Date
archos
90c36e5392 Aktualizace nová verze Phanpy, přídána čeština 2024-08-31 18:44:58 +02:00
archos
2afe460672 Enhance language preferences and RTL support
- Set sort order when filtering by Boosts in Catch-up
- Fix bugs related to user language preferences
- Improve RTL text direction handling
- Disable scroll snap for wider viewports
- Add support for new post languages (Jawi Malay, Kashubian, Mohawk, and more)
2024-08-11 19:34:25 +02:00
86 changed files with 1081 additions and 9 deletions

View File

@ -0,0 +1,2 @@
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

View File

@ -0,0 +1 @@
{"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 <div class=\"box\">\n <p>You may close this page now.</p>\n <p>\n <button\n onClick={() => {\n window.close();\n }}\n >\n Close window\n </button>\n </p>\n </div>\n );\n }\n\n console.debug('OPEN COMPOSE');\n\n return (\n <ComposeSuspense\n editStatus={editStatus}\n replyToStatus={replyToStatus}\n draftStatus={draftStatus}\n standalone\n hasOpener={window.opener}\n onClose={(results) => {\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(<App />, 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"}

View File

@ -0,0 +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

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

183
assets/fuse-7xj_Hrid.js Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

181
assets/fuse-MwQ_F2cO.js Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

2
assets/index-ELVm98zU.js Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,366 @@
[
"mastodon.social",
"mstdn.jp",
"mstdn.social",
"infosec.exchange",
"mas.to",
"mastodon.world",
"hachyderm.io",
"m.cmx.im",
"troet.cafe",
"techhub.social",
"piaille.fr",
"mastodon.uno",
"mastodon.gamedev.place",
"social.vivaldi.net",
"mastodonapp.uk",
"universeodon.com",
"mastodon.nl",
"social.tchncs.de",
"kolektiva.social",
"mastodon.sdf.org",
"tech.lgbt",
"c.im",
"norden.social",
"mstdn.ca",
"occm.cc",
"mastodon.scot",
"sfba.social",
"nrw.social",
"aus.social",
"mathstodon.xyz",
"mastodon-japan.net",
"mstdn.party",
"det.social",
"toot.community",
"ohai.social",
"mstdn.business",
"mastodon.ie",
"sueden.social",
"defcon.social",
"masto.es",
"mastodontech.de",
"mastodon.nu",
"ioc.exchange",
"mindly.social",
"hessen.social",
"ruhr.social",
"mastodon.au",
"nerdculture.de",
"mastodon.green",
"social.cologne",
"muenchen.social",
"indieweb.social",
"social.linux.pizza",
"feuerwehr.social",
"social.anoxinon.de",
"mastodon.nz",
"ruby.social",
"livellosegreto.it",
"fairy.id",
"ieji.de",
"toot.io",
"mastouille.fr",
"mastodont.cat",
"tkz.one",
"toot.wales",
"pouet.chapril.org",
"phpc.social",
"cyberplace.social",
"sciences.social",
"noc.social",
"mastodon.com.tr",
"ravenation.club",
"masto.nu",
"metalhead.club",
"mastodon.ml",
"urbanists.social",
"mastodontti.fi",
"climatejustice.social",
"flipboard.social",
"mstdn.plus",
"dresden.network",
"pol.social",
"mastodon.bida.im",
"mastodon.eus",
"mstdn.games",
"snabelen.no",
"mastodon.me.uk",
"rollenspiel.social",
"todon.eu",
"bark.lgbt",
"hostux.social",
"furry.engineer",
"sunny.garden",
"uri.life",
"mast.lat",
"wien.rocks",
"mastodon.zaclys.com",
"emacs.ch",
"freiburg.social",
"discuss.systems",
"mapstodon.space",
"masto.pt",
"hcommons.social",
"tooting.ch",
"socel.net",
"theblower.au",
"glasgow.social",
"lor.sh",
"stranger.social",
"tilde.zone",
"rheinneckar.social",
"peoplemaking.games",
"geekdom.social",
"bonn.social",
"mastodon-belgium.be",
"wehavecookies.social",
"toad.social",
"mastodon.iriseden.eu",
"vmst.io",
"muenster.im",
"union.place",
"h4.io",
"awscommunity.social",
"blorbo.social",
"qdon.space",
"todon.nl",
"pawb.fun",
"tooot.im",
"rivals.space",
"ludosphere.fr",
"expressional.social",
"mast.dragon-fly.club",
"mastorol.es",
"cupoftea.social",
"veganism.social",
"mastodon.berlin",
"shelter.moe",
"famichiki.jp",
"lgbtqia.space",
"graphics.social",
"mastodon.gal",
"retro.pizza",
"sakurajima.moe",
"historians.social",
"fandom.ink",
"4bear.com",
"oslo.town",
"disabled.social",
"convo.casa",
"urusai.social",
"freeradical.zone",
"masto.nobigtech.es",
"witter.cz",
"eupolicy.social",
"gaygeek.social",
"furries.club",
"muri.network",
"corteximplant.com",
"cr8r.gg",
"toot.aquilenet.fr",
"mastodon.uy",
"xarxa.cloud",
"pnw.zone",
"libretooth.gr",
"machteburch.social",
"dizl.de",
"mustard.blog",
"babka.social",
"vkl.world",
"kanoa.de",
"qaf.men",
"fulda.social",
"archaeo.social",
"spojnik.works",
"dmv.community",
"bookstodon.com",
"mastodon.energy",
"thecanadian.social",
"mastodon.arch-linux.cz",
"social.bau-ha.us",
"drupal.community",
"donphan.social",
"hear-me.social",
"toot.funami.tech",
"toot.kif.rocks",
"musicians.today",
"mograph.social",
"masto.nyc",
"mountains.social",
"federated.press",
"mstdn.dk",
"mast.hpc.social",
"social.seattle.wa.us",
"mastodon.pnpde.social",
"norcal.social",
"hometech.social",
"is.nota.live",
"ani.work",
"tyrol.social",
"gamepad.club",
"wargamers.social",
"social.politicaconciencia.org",
"mastodon.com.pl",
"mastodon.london",
"musician.social",
"epicure.social",
"genealysis.social",
"cosocial.ca",
"mastoot.fr",
"toot.si",
"kurry.social",
"esq.social",
"est.social",
"bahn.social",
"musicworld.social",
"mastodon.mnetwork.co.kr",
"lgbt.io",
"h-net.social",
"social.silicon.moe",
"tooter.social",
"fedi.at",
"frikiverse.zone",
"datasci.social",
"augsburg.social",
"opencoaster.net",
"hispagatos.space",
"neovibe.app",
"friendsofdesoto.social",
"elekk.xyz",
"cyberfurz.social",
"guitar.rodeo",
"khiar.net",
"seocommunity.social",
"theatl.social",
"colorid.es",
"puntarella.party",
"aut.social",
"toot.garden",
"apobangpo.space",
"mastodon.vlaanderen",
"gardenstate.social",
"opalstack.social",
"mastodon.education",
"occitania.social",
"earthstream.social",
"indieauthors.social",
"mastodon.africa",
"masto.yttrx.com",
"arvr.social",
"allthingstech.social",
"furry.energy",
"tuiter.rocks",
"beekeeping.ninja",
"lounge.town",
"mastodon.wien",
"lewacki.space",
"mastodon.pirateparty.be",
"kfem.cat",
"burningboard.net",
"social.veraciousnetwork.com",
"raphus.social",
"lsbt.me",
"poweredbygay.social",
"fikaverse.club",
"jvm.social",
"rail.chat",
"mastodon-swiss.org",
"elizur.me",
"metalverse.social",
"x0r.be",
"library.love",
"drumstodon.net",
"mastodon.sg",
"rheinhessen.social",
"synapse.cafe",
"fribygda.no",
"cultur.social",
"mastodon.cr",
"mastodon.free-solutions.org",
"mastodon.cipherbliss.com",
"cwb.social",
"mastodon.holeyfox.co",
"hoosier.social",
"toot.re",
"techtoots.com",
"mastodon.escepticos.es",
"seo.chat",
"leipzig.town",
"bzh.social",
"mastodon.bot",
"bologna.one",
"vermont.masto.host",
"squawk.mytransponder.com",
"freemasonry.social",
"frontrange.co",
"tchafia.be",
"k8s.social",
"planetearth.social",
"tu.social",
"growers.social",
"toots.nu",
"clj.social",
"paktodon.asia",
"devianze.city",
"xreality.social",
"camp.smolnet.org",
"episcodon.net",
"okla.social",
"mastodon.hosnet.fr",
"balkan.fedive.rs",
"stereodon.social",
"mastodon.bachgau.social",
"nomanssky.social",
"sanjuans.life",
"cville.online",
"t.chadole.com",
"mastodon.conquestuniverse.com",
"skastodon.com",
"mastodon.babb.no",
"travelpandas.fr",
"mastodon.iow.social",
"rap.social",
"masr.social",
"silversword.online",
"kcmo.social",
"ailbhean.co-shaoghal.net",
"mikumikudance.cloud",
"toot.works",
"mastodon.ph",
"mcr.wtf",
"social.diva.exchange",
"fpl.social",
"kzoo.to",
"mastodon.ee",
"pdx.sh",
"23.illuminati.org",
"social.sndevs.com",
"voi.social",
"mastodon.frl",
"nwb.social",
"polsci.social",
"nfld.me",
"mastodon.fedi.quebec",
"social.ferrocarril.net",
"pool.social",
"neurodiversity-in.au",
"biplus.social",
"mastodon.mg",
"mastodon.vanlife.is",
"ms.maritime.social",
"bvb.social",
"netsphere.one",
"ceilidh.online",
"persia.social",
"jaxbeach.social",
"publishing.social",
"wayne.social",
"troet.fediverse.at",
"kjas.no",
"darticulate.com",
"computerfairi.es",
"learningdisability.social",
"wxw.moe",
"tea.codes"
]

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

29
assets/main-kbQH2PR3.js Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

32
assets/main-q4UThEef.js Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -7,9 +7,26 @@
<title>Compose / Phanpy</title>
<meta name="color-scheme" content="dark light" />
<meta name="google" content="notranslate" />
<script type="module" crossorigin src="../assets/compose-25Dzs_uX.js"></script>
<link rel="modulepreload" crossorigin href="../assets/useTitle-Mh8hVeGN.js">
<link rel="stylesheet" crossorigin href="../assets/style-Jyj9EDmC.css">
<link rel="alternate" hreflang="en" href="https://phanpy.social/?lang=en">
<link rel="alternate" hreflang="ca-ES" href="https://phanpy.social/?lang=ca-ES">
<link rel="alternate" hreflang="cs-CZ" href="https://phanpy.social/?lang=cs-CZ">
<link rel="alternate" hreflang="de-DE" href="https://phanpy.social/?lang=de-DE">
<link rel="alternate" hreflang="es-ES" href="https://phanpy.social/?lang=es-ES">
<link rel="alternate" hreflang="eu-ES" href="https://phanpy.social/?lang=eu-ES">
<link rel="alternate" hreflang="fa-IR" href="https://phanpy.social/?lang=fa-IR">
<link rel="alternate" hreflang="fi-FI" href="https://phanpy.social/?lang=fi-FI">
<link rel="alternate" hreflang="fr-FR" href="https://phanpy.social/?lang=fr-FR">
<link rel="alternate" hreflang="gl-ES" href="https://phanpy.social/?lang=gl-ES">
<link rel="alternate" hreflang="kab" href="https://phanpy.social/?lang=kab">
<link rel="alternate" hreflang="ko-KR" href="https://phanpy.social/?lang=ko-KR">
<link rel="alternate" hreflang="pt-BR" href="https://phanpy.social/?lang=pt-BR">
<link rel="alternate" hreflang="pt-PT" href="https://phanpy.social/?lang=pt-PT">
<link rel="alternate" hreflang="ru-RU" href="https://phanpy.social/?lang=ru-RU">
<link rel="alternate" hreflang="zh-CN" href="https://phanpy.social/?lang=zh-CN">
<link rel="alternate" hreflang="x-default" href="https://phanpy.social">
<script type="module" crossorigin src="../assets/compose-ZHWvrAfe.js"></script>
<link rel="modulepreload" crossorigin href="../assets/useTitle-SRT6j-GL.js">
<link rel="stylesheet" crossorigin href="../assets/style-wyTLd4Oi.css">
<link rel="manifest" href="./manifest.webmanifest"><script id="vite-plugin-pwa:inline-sw">if('serviceWorker' in navigator) {window.addEventListener('load', () => {navigator.serviceWorker.register('./sw.js', { scope: './' })})}</script></head>
<body>
<div id="app-standalone"></div>

View File

@ -55,12 +55,28 @@
content="Minimalistic opinionated Mastodon web client"
/>
<meta property="og:image" content="https://phanpy.social/og-image-2.jpg" />
<script type="module" crossorigin src="./assets/main-Gn0PSoQw.js"></script>
<link rel="modulepreload" crossorigin href="./assets/useTitle-Mh8hVeGN.js">
<link rel="alternate" hreflang="en" href="https://phanpy.social/?lang=en">
<link rel="alternate" hreflang="ca-ES" href="https://phanpy.social/?lang=ca-ES">
<link rel="alternate" hreflang="cs-CZ" href="https://phanpy.social/?lang=cs-CZ">
<link rel="alternate" hreflang="de-DE" href="https://phanpy.social/?lang=de-DE">
<link rel="alternate" hreflang="es-ES" href="https://phanpy.social/?lang=es-ES">
<link rel="alternate" hreflang="eu-ES" href="https://phanpy.social/?lang=eu-ES">
<link rel="alternate" hreflang="fa-IR" href="https://phanpy.social/?lang=fa-IR">
<link rel="alternate" hreflang="fi-FI" href="https://phanpy.social/?lang=fi-FI">
<link rel="alternate" hreflang="fr-FR" href="https://phanpy.social/?lang=fr-FR">
<link rel="alternate" hreflang="gl-ES" href="https://phanpy.social/?lang=gl-ES">
<link rel="alternate" hreflang="kab" href="https://phanpy.social/?lang=kab">
<link rel="alternate" hreflang="ko-KR" href="https://phanpy.social/?lang=ko-KR">
<link rel="alternate" hreflang="pt-BR" href="https://phanpy.social/?lang=pt-BR">
<link rel="alternate" hreflang="pt-PT" href="https://phanpy.social/?lang=pt-PT">
<link rel="alternate" hreflang="ru-RU" href="https://phanpy.social/?lang=ru-RU">
<link rel="alternate" hreflang="zh-CN" href="https://phanpy.social/?lang=zh-CN">
<link rel="alternate" hreflang="x-default" href="https://phanpy.social">
<script type="module" crossorigin src="./assets/main-kbQH2PR3.js"></script>
<link rel="modulepreload" crossorigin href="./assets/useTitle-SRT6j-GL.js">
<link rel="modulepreload" crossorigin href="./assets/tinyld-light-PxOyhYWY.js">
<link rel="modulepreload" crossorigin href="./assets/index-CeOZgm-k.js">
<link rel="modulepreload" crossorigin href="./assets/fuse-4Bvpr1kU.js">
<link rel="stylesheet" crossorigin href="./assets/style-Jyj9EDmC.css">
<link rel="modulepreload" crossorigin href="./assets/fuse-MwQ_F2cO.js">
<link rel="stylesheet" crossorigin href="./assets/style-wyTLd4Oi.css">
<link rel="manifest" href="./manifest.webmanifest"><script id="vite-plugin-pwa:inline-sw">if('serviceWorker' in navigator) {window.addEventListener('load', () => {navigator.serviceWorker.register('./sw.js', { scope: './' })})}</script></head>
<body>
<div id="app"></div>

View File

@ -1 +1 @@
{"buildTime":"2024-08-08T01:46:42.798Z","commitHash":"dabb480"}
{"buildTime":"2024-08-31T13:00:46.020Z","commitHash":"1b8ab47"}