nixamp 0.28.37 → 0.28.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/README.md +6 -1
  2. package/backtoschool/dist/assets/{ar-CmpEhms8.js → ar-BQPKp0M2.js} +1 -1
  3. package/backtoschool/dist/assets/{cs-BiiJOLTm.js → cs-DjJnhGNB.js} +1 -1
  4. package/{web/dist/assets/da-M4GDhrcC.js → backtoschool/dist/assets/da-CbTvkIH7.js} +1 -1
  5. package/{web/dist/assets/de-D7yI8cd_.js → backtoschool/dist/assets/de-SsCkny26.js} +1 -1
  6. package/backtoschool/dist/assets/{es-BwQQh_C8.js → es-BBlBPcq1.js} +1 -1
  7. package/backtoschool/dist/assets/{fi-DKPYMsbo.js → fi-ffo35_4W.js} +1 -1
  8. package/backtoschool/dist/assets/{fr-DNekMW0h.js → fr-BVvavrk7.js} +1 -1
  9. package/{web/dist/assets/hi-DO7CO-fI.js → backtoschool/dist/assets/hi-DDy_zxu6.js} +1 -1
  10. package/{web/dist/assets/hls-3VKVEQE3-BCxdTCEU.js → backtoschool/dist/assets/hls-3VKVEQE3-QZWXCWjR.js} +1 -1
  11. package/backtoschool/dist/assets/hls-n74Cnh8A.js +42 -0
  12. package/backtoschool/dist/assets/{hu-gcw9ouWH.js → hu-BoJj7pZa.js} +1 -1
  13. package/backtoschool/dist/assets/{id-Bz51zxz6.js → id-CXN9gchF.js} +1 -1
  14. package/backtoschool/dist/assets/index-BaiHu9CD.css +1 -0
  15. package/backtoschool/dist/assets/index-Dovv39gH.js +112 -0
  16. package/backtoschool/dist/assets/{it-jO8u4ie7.js → it-C9g0xD6S.js} +1 -1
  17. package/{web/dist/assets/mpegts-DsEoUEPH.js → backtoschool/dist/assets/mpegts-GAwbg-pX.js} +1 -1
  18. package/{web/dist/assets/mpegts-LO6RVLD6-CC8jMmPy.js → backtoschool/dist/assets/mpegts-LO6RVLD6-BrVQzFhM.js} +1 -1
  19. package/backtoschool/dist/assets/native-C7JTKWJH-BUyIoj0P.js +1 -0
  20. package/{web/dist/assets/nl-BU0Mn-e-.js → backtoschool/dist/assets/nl-Ciq1Yrk4.js} +1 -1
  21. package/{web/dist/assets/ru-ClqNCOTW.js → backtoschool/dist/assets/ru-B_ZMUvh6.js} +1 -1
  22. package/backtoschool/dist/assets/{sv-CV2-POKP.js → sv-DH0ZO3Eh.js} +1 -1
  23. package/{web/dist/assets/uk-K5yQBF0h.js → backtoschool/dist/assets/uk-Cof-TUZd.js} +1 -1
  24. package/backtoschool/dist/assets/{vi-BDZew-O9.js → vi-D0QPpzbE.js} +1 -1
  25. package/{web/dist/assets/zh-a2v2x-3e.js → backtoschool/dist/assets/zh-CLTzTBOU.js} +1 -1
  26. package/backtoschool/dist/index.html +61 -10
  27. package/dist/classroom.d.ts +1 -1
  28. package/dist/classroom.js +4 -0
  29. package/dist/live-api.d.ts +10 -0
  30. package/dist/live-api.js +8 -0
  31. package/dist/live-events.js +1 -1
  32. package/dist/live-voice.d.ts +3 -0
  33. package/dist/live-voice.js +27 -4
  34. package/dist/locales/ar.d.ts +15 -0
  35. package/dist/locales/cs.d.ts +15 -0
  36. package/dist/locales/da.d.ts +15 -0
  37. package/dist/locales/de.d.ts +15 -0
  38. package/dist/locales/en.d.ts +15 -0
  39. package/dist/locales/es.d.ts +15 -0
  40. package/dist/locales/fi.d.ts +15 -0
  41. package/dist/locales/fr.d.ts +15 -0
  42. package/dist/locales/hi.d.ts +15 -0
  43. package/dist/locales/hu.d.ts +15 -0
  44. package/dist/locales/id.d.ts +15 -0
  45. package/dist/locales/it.d.ts +15 -0
  46. package/dist/locales/nl.d.ts +15 -0
  47. package/dist/locales/platforms.d.ts +19 -0
  48. package/dist/locales/platforms.js +19 -0
  49. package/dist/locales/ru.d.ts +15 -0
  50. package/dist/locales/sv.d.ts +15 -0
  51. package/dist/locales/uk.d.ts +15 -0
  52. package/dist/locales/vi.d.ts +15 -0
  53. package/dist/locales/zh.d.ts +15 -0
  54. package/dist/nixamp-link-api.d.ts +44 -0
  55. package/dist/nixamp-link-api.js +190 -0
  56. package/dist/nixamp-link-types.d.ts +33 -0
  57. package/dist/nixamp-link-types.js +5 -0
  58. package/dist/nixamp-link.d.ts +66 -0
  59. package/dist/nixamp-link.js +231 -0
  60. package/dist/notify.d.ts +6 -4
  61. package/dist/notify.js +14 -25
  62. package/dist/oauth-api.d.ts +1 -1
  63. package/dist/oauth-api.js +27 -9
  64. package/dist/oauth-server.d.ts +9 -1
  65. package/dist/oauth-server.js +24 -2
  66. package/dist/profiles.d.ts +85 -0
  67. package/dist/profiles.js +0 -0
  68. package/dist/server.d.ts +12 -2
  69. package/dist/server.js +205 -13
  70. package/dist/voice-provider.d.ts +9 -0
  71. package/dist/voice-provider.js +27 -0
  72. package/dist/watch-party.d.ts +8 -0
  73. package/dist/watch-party.js +21 -0
  74. package/package.json +6 -6
  75. package/src/classroom.ts +5 -1
  76. package/src/live-api.ts +13 -0
  77. package/src/live-events.ts +1 -1
  78. package/src/live-voice.ts +25 -3
  79. package/src/locales/platforms.ts +21 -0
  80. package/src/nixamp-link-api.ts +220 -0
  81. package/src/nixamp-link-types.ts +36 -0
  82. package/src/nixamp-link.ts +265 -0
  83. package/src/notify.ts +19 -34
  84. package/src/oauth-api.ts +30 -11
  85. package/src/oauth-server.ts +24 -2
  86. package/src/profiles.ts +0 -0
  87. package/src/server.ts +192 -15
  88. package/src/voice-provider.ts +22 -0
  89. package/src/watch-party.ts +23 -0
  90. package/web/dist/assets/{ar-DhdXPO3p.js → ar-BqLaLSMR.js} +1 -1
  91. package/web/dist/assets/{cs-CoTzYnZt.js → cs-CfoQJwKM.js} +1 -1
  92. package/{backtoschool/dist/assets/da-DueRd5zz.js → web/dist/assets/da-8MmH23fh.js} +1 -1
  93. package/{backtoschool/dist/assets/de-DIG6WxUZ.js → web/dist/assets/de-Brry3OMh.js} +1 -1
  94. package/web/dist/assets/{es-BMGb7XlT.js → es-CGxJs7b8.js} +1 -1
  95. package/web/dist/assets/{fi-CXNsmIrh.js → fi-BDAAZtto.js} +1 -1
  96. package/web/dist/assets/{fr-BpvyrESQ.js → fr-9sxYL0Qy.js} +1 -1
  97. package/{backtoschool/dist/assets/hi-CGlN72JQ.js → web/dist/assets/hi-Cc7ZsdL7.js} +1 -1
  98. package/web/dist/assets/hls-3VKVEQE3-Dx7qltzA.js +1 -0
  99. package/web/dist/assets/{hu-CosB3vlS.js → hu-CvB9aIyN.js} +1 -1
  100. package/web/dist/assets/{id-DNumDlwq.js → id-Bmrh06Hw.js} +1 -1
  101. package/web/dist/assets/index-BQuoiKg9.js +3 -0
  102. package/web/dist/assets/{index-jLCo7PIA.css → index-Bo3utcDw.css} +1 -1
  103. package/web/dist/assets/{it-IJKhyCGw.js → it-SbaxFUIP.js} +1 -1
  104. package/web/dist/assets/mpegts-BdwONu8t.js +3 -0
  105. package/web/dist/assets/mpegts-LO6RVLD6-CqW3DT1n.js +1 -0
  106. package/{backtoschool/dist/assets/nl-CnYXq0K4.js → web/dist/assets/nl-CqimSo3B.js} +1 -1
  107. package/{backtoschool/dist/assets/ru-BatrUfYu.js → web/dist/assets/ru-wIfpMpU9.js} +1 -1
  108. package/web/dist/assets/{sv-Df_aXTD6.js → sv-BAyIUHP5.js} +1 -1
  109. package/{backtoschool/dist/assets/uk-vLtqKpHm.js → web/dist/assets/uk-D2jFJm6l.js} +1 -1
  110. package/web/dist/assets/{vi-CYfcOUeA.js → vi-BdH3SLlR.js} +1 -1
  111. package/{backtoschool/dist/assets/zh-C9hBmQKA.js → web/dist/assets/zh-5xz5Agt-.js} +1 -1
  112. package/web/dist/index.html +33 -2
  113. package/web/dist/sw.js +23 -23
  114. package/backtoschool/dist/assets/index-CP4oTs6H.css +0 -1
  115. package/backtoschool/dist/assets/index-DDGO_FOw.js +0 -113
  116. package/web/dist/assets/index-CY3lAwM2.js +0 -3
@@ -1 +1 @@
1
- import{t as e}from"./index-DDGO_FOw.js";var t={...e,"No parties live right now.":`Jelenleg nincs élő közös nézés.`,"Could not refresh parties.":`Nem sikerült frissíteni a közös nézéseket.`,"Pick a server in the directory, or paste its link here.":`Válassz egy szervert a listából, vagy illeszd be ide a hivatkozását.`,"Interface language":`Felület nyelve`,Language:`Nyelv`,"Translation language":`Fordítás nyelve`,"Original (auto-detect)":`Eredeti (automatikus felismerés)`,Play:`Lejátszás`,Pause:`Szünet`,Stop:`Leállítás`,Next:`Következő`,Previous:`Előző`,Select:`Kiválasztás`,"Next/Prev":`Következő/Előző`,Quit:`Kilépés`,"Now Playing":`Most játszott`,"Spectrum Analyser":`Spektrumanalizátor`,Playlist:`Lejátszási lista`,Files:`Fájlok`,"Open files":`Fájlok megnyitása`,"Open folder":`Mappa megnyitása`,"Add to library":`Hozzáadás a könyvtárhoz`,"Replace playlist":`Lejátszási lista cseréje`,Filter:`Szűrés`,Search:`Keresés`,"Nothing loaded.":`Nincs betöltött tartalom.`,"Empty.":`Üres.`,"Loading…":`Betöltés…`,"Connecting…":`Csatlakozás…`,Connected:`Csatlakoztatva`,"Not connected":`Nincs kapcsolat`,"No source":`Nincs forrás`,Playing:`Lejátszás folyamatban`,Stopped:`Leállítva`,Volume:`Hangerő`,Seek:`Lejátszási pozíció`,"Full screen":`Teljes képernyő`,Download:`Letöltés`,Share:`Megosztás`,Copy:`Másolás`,"Copy link":`Hivatkozás másolása`,Copied:`Másolva`,Save:`Mentés`,Cancel:`Mégse`,Close:`Bezárás`,Remove:`Eltávolítás`,Delete:`Törlés`,Edit:`Szerkesztés`,Add:`Hozzáadás`,Send:`Küldés`,Retry:`Újrapróbálás`,Back:`Vissza`,"Next page":`Következő oldal`,"Previous page":`Előző oldal`,"Show more":`Továbbiak`,Panels:`Panelek`,"Reset layout":`Elrendezés visszaállítása`,Show:`Megjelenítés`,Hide:`Elrejtés`,Collapse:`Összecsukás`,Expand:`Kibontás`,"Move up":`Mozgatás fel`,"Move down":`Mozgatás le`,Install:`Telepítés`,"TV mode":`TV-mód`,On:`Be`,Off:`Ki`,Account:`Fiók`,"Sign in":`Bejelentkezés`,"Sign out":`Kijelentkezés`,"Create account":`Fiók létrehozása`,Email:`E-mail`,Password:`Jelszó`,"Forgot password?":`Elfelejtett jelszó?`,"Welcome back":`Üdvözlünk újra`,Profile:`Profil`,Handle:`Felhasználónév`,"Your servers":`Szervereid`,Server:`Szerver`,Connect:`Csatlakozás`,Disconnect:`Kapcsolat bontása`,Directory:`Címtár`,Favourites:`Kedvencek`,Follow:`Követés`,Unfollow:`Követés megszüntetése`,Notifications:`Értesítések`,"Phone number":`Telefonszám`,"Save number":`Szám mentése`,Transcript:`Átirat`,Captions:`Feliratok`,"Translate audio":`Hang fordítása`,"Audio language":`Hang nyelve`,"Audio options":`Hangbeállítások`,"Keep background sound":`Háttérhang megőrzése`,"Background level":`Háttérhangerő`,"Speaker voices":`Beszélők hangjai`,"Any voice":`Bármely hang`,"Male voice":`Férfihang`,"Female voice":`Női hang`,"Original audio.":`Eredeti hang.`,"Buy translated audio":`Fordított hang vásárlása`,"Audio credit":`Hangegyenleg`,"Buy pass":`Hozzáférés vásárlása`,Pass:`Hozzáférés`,"Pay with":`Fizetési mód`,"Check payment":`Fizetés ellenőrzése`,"Open checkout":`Tovább a fizetéshez`,"Free sessions":`Ingyenes munkamenetek`,"Usage rates and expiry":`Díjak és lejárat`,Catalogs:`Katalógusok`,"Add catalog":`Katalógus hozzáadása`,"Catalog name":`Katalógus neve`,Link:`Hivatkozás`,"Play link":`Hivatkozás lejátszása`,"Go live":`Élő adás indítása`,Publish:`Közzététel`,Listen:`Hallgatás`,"Live now":`Most élő`,Upcoming:`Hamarosan`,Parties:`Közös nézések`,"Join party":`Csatlakozás a közös nézéshez`,"Invite code":`Meghívókód`,Invite:`Meghívás`,Chat:`Csevegés`,"Chat message":`Csevegőüzenet`,People:`Résztvevők`,Speaker:`Beszélő`,Speakers:`Beszélők`,Listener:`Hallgató`,Moderator:`Moderátor`,"Raise hand":`Kézfeltartás`,"Hand raises":`Feltartott kezek`,Questions:`Kérdések`,Resources:`Anyagok`,Replay:`Felvétel`,Schedule:`Ütemezés`,Event:`Esemény`,Host:`Házigazda`,About:`Névjegy`,Stage:`Színpad`,Title:`Cím`,Description:`Leírás`,Topic:`Téma`,Public:`Nyilvános`,"Anyone with the link":`Bárki a hivatkozással`,"Invited people":`Meghívott személyek`,"Who can join":`Ki csatlakozhat`,"Date and time":`Dátum és idő`,"Expected length":`Várható időtartam`,Repeat:`Ismétlés`,"Does not repeat":`Nem ismétlődik`,"Every day":`Mindennap`,"Every week":`Minden héten`,Homepage:`Weboldal`,"Host name":`Házigazda neve`,"Profile photo URL":`Profilkép URL-je`,"Broadcast link":`Közvetítés hivatkozása`,"Edit event":`Esemény szerkesztése`,"Save changes":`Módosítások mentése`,"Create live":`Élő adás létrehozása`,"Schedule class":`Óra ütemezése`,"Start class":`Óra indítása`,"End event":`Esemény befejezése`,"End session":`Munkamenet befejezése`,"Session ended":`Munkamenet véget ért`,"Event ended":`Esemény véget ért`,Cancelled:`Lemondva`,"Replay available":`Felvétel elérhető`,Join:`Csatlakozás`,"Create invite":`Meghívó létrehozása`,"Invite as":`Meghívás szerepkörrel`,"Watch now":`Megtekintés most`,"Start a room":`Szoba létrehozása`,"Recent replays":`Legutóbbi felvételek`,"Your account":`Fiókod`,"Write with AI":`Írás MI-vel`,"Suggested title":`Javasolt cím`,"Suggested description":`Javasolt leírás`,"Suggested topic":`Javasolt téma`,"Use these details":`Ezen adatok használata`,"Learn something live.":`Tanulj valamit élőben.`,"Screen share":`Képernyő megosztása`,"Upload and broadcast":`Feltöltés és közvetítés`,Help:`Súgó`,"Reload Player":`Lejátszó újratöltése`,"Copy Bundled CLI Path":`Mellékelt CLI útvonalának másolása`,"Developer tools":`Fejlesztői eszközök`,Undo:`Visszavonás`,Redo:`Újra`,Cut:`Kivágás`,Paste:`Beillesztés`,"Select all":`Összes kijelölése`,Status:`Állapot`,"Activity log":`Tevékenységnapló`,Admin:`Adminisztráció`,"Playback controls":`Lejátszás vezérlése`,"Tracks and folders":`Számok és mappák`,"Original-language captions.":`Feliratok az eredeti nyelven.`,"Skip to playback controls":`Ugrás a lejátszás vezérléséhez`,"Skip to playlist":`Ugrás a lejátszási listához`,"Skip to transcript and translated audio":`Ugrás az átirathoz és a fordított hanghoz`};export{t as default};
1
+ import{n as e}from"./index-Dovv39gH.js";var t={...e,"No parties live right now.":`Jelenleg nincs élő közös nézés.`,"Could not refresh parties.":`Nem sikerült frissíteni a közös nézéseket.`,"Pick a server in the directory, or paste its link here.":`Válassz egy szervert a listából, vagy illeszd be ide a hivatkozását.`,"Interface language":`Felület nyelve`,Language:`Nyelv`,"Translation language":`Fordítás nyelve`,"Original (auto-detect)":`Eredeti (automatikus felismerés)`,Play:`Lejátszás`,Pause:`Szünet`,Stop:`Leállítás`,Next:`Következő`,Previous:`Előző`,Select:`Kiválasztás`,"Next/Prev":`Következő/Előző`,Quit:`Kilépés`,"Now Playing":`Most játszott`,"Spectrum Analyser":`Spektrumanalizátor`,Playlist:`Lejátszási lista`,Files:`Fájlok`,"Open files":`Fájlok megnyitása`,"Open folder":`Mappa megnyitása`,"Add to library":`Hozzáadás a könyvtárhoz`,"Replace playlist":`Lejátszási lista cseréje`,Filter:`Szűrés`,Search:`Keresés`,"Nothing loaded.":`Nincs betöltött tartalom.`,"Empty.":`Üres.`,"Loading…":`Betöltés…`,"Connecting…":`Csatlakozás…`,Connected:`Csatlakoztatva`,"Not connected":`Nincs kapcsolat`,"No source":`Nincs forrás`,Playing:`Lejátszás folyamatban`,Stopped:`Leállítva`,Volume:`Hangerő`,Seek:`Lejátszási pozíció`,"Full screen":`Teljes képernyő`,Download:`Letöltés`,Share:`Megosztás`,Copy:`Másolás`,"Copy link":`Hivatkozás másolása`,Copied:`Másolva`,Save:`Mentés`,Cancel:`Mégse`,Close:`Bezárás`,Remove:`Eltávolítás`,Delete:`Törlés`,Edit:`Szerkesztés`,Add:`Hozzáadás`,Send:`Küldés`,Retry:`Újrapróbálás`,Back:`Vissza`,"Next page":`Következő oldal`,"Previous page":`Előző oldal`,"Show more":`Továbbiak`,Panels:`Panelek`,"Reset layout":`Elrendezés visszaállítása`,Show:`Megjelenítés`,Hide:`Elrejtés`,Collapse:`Összecsukás`,Expand:`Kibontás`,"Move up":`Mozgatás fel`,"Move down":`Mozgatás le`,Install:`Telepítés`,"TV mode":`TV-mód`,On:`Be`,Off:`Ki`,Account:`Fiók`,"Sign in":`Bejelentkezés`,"Sign out":`Kijelentkezés`,"Create account":`Fiók létrehozása`,Email:`E-mail`,Password:`Jelszó`,"Forgot password?":`Elfelejtett jelszó?`,"Welcome back":`Üdvözlünk újra`,Profile:`Profil`,Handle:`Felhasználónév`,"Your servers":`Szervereid`,Server:`Szerver`,Connect:`Csatlakozás`,Disconnect:`Kapcsolat bontása`,Directory:`Címtár`,Favourites:`Kedvencek`,Follow:`Követés`,Unfollow:`Követés megszüntetése`,Notifications:`Értesítések`,"Phone number":`Telefonszám`,"Save number":`Szám mentése`,Transcript:`Átirat`,Captions:`Feliratok`,"Translate audio":`Hang fordítása`,"Audio language":`Hang nyelve`,"Audio options":`Hangbeállítások`,"Keep background sound":`Háttérhang megőrzése`,"Background level":`Háttérhangerő`,"Speaker voices":`Beszélők hangjai`,"Any voice":`Bármely hang`,"Male voice":`Férfihang`,"Female voice":`Női hang`,"Original audio.":`Eredeti hang.`,"Buy translated audio":`Fordított hang vásárlása`,"Audio credit":`Hangegyenleg`,"Buy pass":`Hozzáférés vásárlása`,Pass:`Hozzáférés`,"Pay with":`Fizetési mód`,"Check payment":`Fizetés ellenőrzése`,"Open checkout":`Tovább a fizetéshez`,"Free sessions":`Ingyenes munkamenetek`,"Usage rates and expiry":`Díjak és lejárat`,Catalogs:`Katalógusok`,"Add catalog":`Katalógus hozzáadása`,"Catalog name":`Katalógus neve`,Link:`Hivatkozás`,"Play link":`Hivatkozás lejátszása`,"Go live":`Élő adás indítása`,Publish:`Közzététel`,Listen:`Hallgatás`,"Live now":`Most élő`,Upcoming:`Hamarosan`,Parties:`Közös nézések`,"Join party":`Csatlakozás a közös nézéshez`,"Invite code":`Meghívókód`,Invite:`Meghívás`,Chat:`Csevegés`,"Chat message":`Csevegőüzenet`,People:`Résztvevők`,Speaker:`Beszélő`,Speakers:`Beszélők`,Listener:`Hallgató`,Moderator:`Moderátor`,"Raise hand":`Kézfeltartás`,"Hand raises":`Feltartott kezek`,Questions:`Kérdések`,Resources:`Anyagok`,Replay:`Felvétel`,Schedule:`Ütemezés`,Event:`Esemény`,Host:`Házigazda`,About:`Névjegy`,Stage:`Színpad`,Title:`Cím`,Description:`Leírás`,Topic:`Téma`,Public:`Nyilvános`,"Anyone with the link":`Bárki a hivatkozással`,"Invited people":`Meghívott személyek`,"Who can join":`Ki csatlakozhat`,"Date and time":`Dátum és idő`,"Expected length":`Várható időtartam`,Repeat:`Ismétlés`,"Does not repeat":`Nem ismétlődik`,"Every day":`Mindennap`,"Every week":`Minden héten`,Homepage:`Weboldal`,"Host name":`Házigazda neve`,"Profile photo URL":`Profilkép URL-je`,"Broadcast link":`Közvetítés hivatkozása`,"Edit event":`Esemény szerkesztése`,"Save changes":`Módosítások mentése`,"Create live":`Élő adás létrehozása`,"Schedule class":`Óra ütemezése`,"Start class":`Óra indítása`,"End event":`Esemény befejezése`,"End session":`Munkamenet befejezése`,"Session ended":`Munkamenet véget ért`,"Event ended":`Esemény véget ért`,Cancelled:`Lemondva`,"Replay available":`Felvétel elérhető`,Join:`Csatlakozás`,"Create invite":`Meghívó létrehozása`,"Invite as":`Meghívás szerepkörrel`,"Watch now":`Megtekintés most`,"Start a room":`Szoba létrehozása`,"Recent replays":`Legutóbbi felvételek`,"Your account":`Fiókod`,"Write with AI":`Írás MI-vel`,"Suggested title":`Javasolt cím`,"Suggested description":`Javasolt leírás`,"Suggested topic":`Javasolt téma`,"Use these details":`Ezen adatok használata`,"Learn something live.":`Tanulj valamit élőben.`,"Screen share":`Képernyő megosztása`,"Upload and broadcast":`Feltöltés és közvetítés`,Help:`Súgó`,"Reload Player":`Lejátszó újratöltése`,"Copy Bundled CLI Path":`Mellékelt CLI útvonalának másolása`,"Developer tools":`Fejlesztői eszközök`,Undo:`Visszavonás`,Redo:`Újra`,Cut:`Kivágás`,Paste:`Beillesztés`,"Select all":`Összes kijelölése`,Status:`Állapot`,"Activity log":`Tevékenységnapló`,Admin:`Adminisztráció`,"Playback controls":`Lejátszás vezérlése`,"Tracks and folders":`Számok és mappák`,"Original-language captions.":`Feliratok az eredeti nyelven.`,"Skip to playback controls":`Ugrás a lejátszás vezérléséhez`,"Skip to playlist":`Ugrás a lejátszási listához`,"Skip to transcript and translated audio":`Ugrás az átirathoz és a fordított hanghoz`};export{t as default};
@@ -1 +1 @@
1
- import{t as e}from"./index-DDGO_FOw.js";var t={...e,"No parties live right now.":`Belum ada pesta yang sedang live.`,"Could not refresh parties.":`Tidak dapat memperbarui pesta.`,"Pick a server in the directory, or paste its link here.":`Pilih server di direktori atau tempel tautannya di sini.`,"Interface language":`Bahasa antarmuka`,Language:`Bahasa`,"Translation language":`Bahasa terjemahan`,"Original (auto-detect)":`Asli (deteksi otomatis)`,Play:`Putar`,Pause:`Jeda`,Stop:`Hentikan`,Next:`Berikutnya`,Previous:`Sebelumnya`,Select:`Pilih`,"Next/Prev":`Berikutnya/Sebelumnya`,Quit:`Keluar`,"Now Playing":`Sedang diputar`,"Spectrum Analyser":`Penganalisis spektrum`,Playlist:`Daftar putar`,Files:`Berkas`,"Open files":`Buka berkas`,"Open folder":`Buka folder`,"Add to library":`Tambahkan ke pustaka`,"Replace playlist":`Ganti daftar putar`,Filter:`Filter`,Search:`Cari`,"Nothing loaded.":`Belum ada yang dimuat.`,"Empty.":`Kosong.`,"Loading…":`Memuat…`,"Connecting…":`Menghubungkan…`,Connected:`Terhubung`,"Not connected":`Tidak terhubung`,"No source":`Tidak ada sumber`,Playing:`Memutar`,Stopped:`Dihentikan`,Volume:`Volume`,Seek:`Posisi pemutaran`,"Full screen":`Layar penuh`,Download:`Unduh`,Share:`Bagikan`,Copy:`Salin`,"Copy link":`Salin tautan`,Copied:`Disalin`,Save:`Simpan`,Cancel:`Batal`,Close:`Tutup`,Remove:`Lepaskan`,Delete:`Hapus`,Edit:`Edit`,Add:`Tambah`,Send:`Kirim`,Retry:`Coba lagi`,Back:`Kembali`,"Next page":`Halaman berikutnya`,"Previous page":`Halaman sebelumnya`,"Show more":`Tampilkan lebih banyak`,Panels:`Panel`,"Reset layout":`Atur ulang tata letak`,Show:`Tampilkan`,Hide:`Sembunyikan`,Collapse:`Ciutkan`,Expand:`Perluas`,"Move up":`Pindah ke atas`,"Move down":`Pindah ke bawah`,Install:`Instal`,"TV mode":`Mode TV`,On:`Aktif`,Off:`Nonaktif`,Account:`Akun`,"Sign in":`Masuk`,"Sign out":`Keluar akun`,"Create account":`Buat akun`,Email:`Email`,Password:`Kata sandi`,"Forgot password?":`Lupa kata sandi?`,"Welcome back":`Selamat datang kembali`,Profile:`Profil`,Handle:`Nama pengguna`,"Your servers":`Server Anda`,Server:`Server`,Connect:`Hubungkan`,Disconnect:`Putuskan`,Directory:`Direktori`,Favourites:`Favorit`,Follow:`Ikuti`,Unfollow:`Berhenti mengikuti`,Notifications:`Notifikasi`,"Phone number":`Nomor telepon`,"Save number":`Simpan nomor`,Transcript:`Transkrip`,Captions:`Takarir`,"Translate audio":`Terjemahkan audio`,"Audio language":`Bahasa audio`,"Audio options":`Opsi audio`,"Keep background sound":`Pertahankan suara latar`,"Background level":`Volume latar`,"Speaker voices":`Suara pembicara`,"Any voice":`Suara apa saja`,"Male voice":`Suara pria`,"Female voice":`Suara wanita`,"Original audio.":`Audio asli.`,"Buy translated audio":`Beli audio terjemahan`,"Audio credit":`Kredit audio`,"Buy pass":`Beli akses`,Pass:`Akses`,"Pay with":`Bayar dengan`,"Check payment":`Periksa pembayaran`,"Open checkout":`Lanjut ke pembayaran`,"Free sessions":`Sesi gratis`,"Usage rates and expiry":`Tarif penggunaan dan masa berlaku`,Catalogs:`Katalog`,"Add catalog":`Tambah katalog`,"Catalog name":`Nama katalog`,Link:`Tautan`,"Play link":`Putar tautan`,"Go live":`Mulai siaran langsung`,Publish:`Terbitkan`,Listen:`Dengarkan`,"Live now":`Sedang langsung`,Upcoming:`Mendatang`,Parties:`Nonton bareng`,"Join party":`Ikut nonton bareng`,"Invite code":`Kode undangan`,Invite:`Undang`,Chat:`Obrolan`,"Chat message":`Pesan obrolan`,People:`Orang`,Speaker:`Pembicara`,Speakers:`Pembicara`,Listener:`Pendengar`,Moderator:`Moderator`,"Raise hand":`Angkat tangan`,"Hand raises":`Tangan terangkat`,Questions:`Pertanyaan`,Resources:`Materi`,Replay:`Tayangan ulang`,Schedule:`Jadwal`,Event:`Acara`,Host:`Tuan rumah`,About:`Tentang`,Stage:`Panggung`,Title:`Judul`,Description:`Deskripsi`,Topic:`Topik`,Public:`Publik`,"Anyone with the link":`Siapa pun dengan tautan`,"Invited people":`Orang yang diundang`,"Who can join":`Siapa yang boleh bergabung`,"Date and time":`Tanggal dan waktu`,"Expected length":`Perkiraan durasi`,Repeat:`Ulangi`,"Does not repeat":`Tidak berulang`,"Every day":`Setiap hari`,"Every week":`Setiap minggu`,Homepage:`Situs web`,"Host name":`Nama tuan rumah`,"Profile photo URL":`URL foto profil`,"Broadcast link":`Tautan siaran`,"Edit event":`Edit acara`,"Save changes":`Simpan perubahan`,"Create live":`Buat siaran langsung`,"Schedule class":`Jadwalkan kelas`,"Start class":`Mulai kelas`,"End event":`Akhiri acara`,"End session":`Akhiri sesi`,"Session ended":`Sesi berakhir`,"Event ended":`Acara berakhir`,Cancelled:`Dibatalkan`,"Replay available":`Tayangan ulang tersedia`,Join:`Bergabung`,"Create invite":`Buat undangan`,"Invite as":`Undang sebagai`,"Watch now":`Tonton sekarang`,"Start a room":`Buat ruang`,"Recent replays":`Tayangan ulang terbaru`,"Your account":`Akun Anda`,"Write with AI":`Tulis dengan AI`,"Suggested title":`Judul yang disarankan`,"Suggested description":`Deskripsi yang disarankan`,"Suggested topic":`Topik yang disarankan`,"Use these details":`Gunakan detail ini`,"Learn something live.":`Belajar sesuatu secara langsung.`,"Screen share":`Bagikan layar`,"Upload and broadcast":`Unggah dan siarkan`,Help:`Bantuan`,"Reload Player":`Muat ulang pemutar`,"Copy Bundled CLI Path":`Salin jalur CLI bawaan`,"Developer tools":`Alat pengembang`,Undo:`Urungkan`,Redo:`Ulangi tindakan`,Cut:`Potong`,Paste:`Tempel`,"Select all":`Pilih semua`,Status:`Status`,"Activity log":`Log aktivitas`,Admin:`Administrasi`,"Playback controls":`Kontrol pemutaran`,"Tracks and folders":`Lagu dan folder`,"Original-language captions.":`Takarir dalam bahasa asli.`,"Skip to playback controls":`Lewati ke kontrol pemutaran`,"Skip to playlist":`Lewati ke daftar putar`,"Skip to transcript and translated audio":`Lewati ke transkrip dan audio terjemahan`};export{t as default};
1
+ import{n as e}from"./index-Dovv39gH.js";var t={...e,"No parties live right now.":`Belum ada pesta yang sedang live.`,"Could not refresh parties.":`Tidak dapat memperbarui pesta.`,"Pick a server in the directory, or paste its link here.":`Pilih server di direktori atau tempel tautannya di sini.`,"Interface language":`Bahasa antarmuka`,Language:`Bahasa`,"Translation language":`Bahasa terjemahan`,"Original (auto-detect)":`Asli (deteksi otomatis)`,Play:`Putar`,Pause:`Jeda`,Stop:`Hentikan`,Next:`Berikutnya`,Previous:`Sebelumnya`,Select:`Pilih`,"Next/Prev":`Berikutnya/Sebelumnya`,Quit:`Keluar`,"Now Playing":`Sedang diputar`,"Spectrum Analyser":`Penganalisis spektrum`,Playlist:`Daftar putar`,Files:`Berkas`,"Open files":`Buka berkas`,"Open folder":`Buka folder`,"Add to library":`Tambahkan ke pustaka`,"Replace playlist":`Ganti daftar putar`,Filter:`Filter`,Search:`Cari`,"Nothing loaded.":`Belum ada yang dimuat.`,"Empty.":`Kosong.`,"Loading…":`Memuat…`,"Connecting…":`Menghubungkan…`,Connected:`Terhubung`,"Not connected":`Tidak terhubung`,"No source":`Tidak ada sumber`,Playing:`Memutar`,Stopped:`Dihentikan`,Volume:`Volume`,Seek:`Posisi pemutaran`,"Full screen":`Layar penuh`,Download:`Unduh`,Share:`Bagikan`,Copy:`Salin`,"Copy link":`Salin tautan`,Copied:`Disalin`,Save:`Simpan`,Cancel:`Batal`,Close:`Tutup`,Remove:`Lepaskan`,Delete:`Hapus`,Edit:`Edit`,Add:`Tambah`,Send:`Kirim`,Retry:`Coba lagi`,Back:`Kembali`,"Next page":`Halaman berikutnya`,"Previous page":`Halaman sebelumnya`,"Show more":`Tampilkan lebih banyak`,Panels:`Panel`,"Reset layout":`Atur ulang tata letak`,Show:`Tampilkan`,Hide:`Sembunyikan`,Collapse:`Ciutkan`,Expand:`Perluas`,"Move up":`Pindah ke atas`,"Move down":`Pindah ke bawah`,Install:`Instal`,"TV mode":`Mode TV`,On:`Aktif`,Off:`Nonaktif`,Account:`Akun`,"Sign in":`Masuk`,"Sign out":`Keluar akun`,"Create account":`Buat akun`,Email:`Email`,Password:`Kata sandi`,"Forgot password?":`Lupa kata sandi?`,"Welcome back":`Selamat datang kembali`,Profile:`Profil`,Handle:`Nama pengguna`,"Your servers":`Server Anda`,Server:`Server`,Connect:`Hubungkan`,Disconnect:`Putuskan`,Directory:`Direktori`,Favourites:`Favorit`,Follow:`Ikuti`,Unfollow:`Berhenti mengikuti`,Notifications:`Notifikasi`,"Phone number":`Nomor telepon`,"Save number":`Simpan nomor`,Transcript:`Transkrip`,Captions:`Takarir`,"Translate audio":`Terjemahkan audio`,"Audio language":`Bahasa audio`,"Audio options":`Opsi audio`,"Keep background sound":`Pertahankan suara latar`,"Background level":`Volume latar`,"Speaker voices":`Suara pembicara`,"Any voice":`Suara apa saja`,"Male voice":`Suara pria`,"Female voice":`Suara wanita`,"Original audio.":`Audio asli.`,"Buy translated audio":`Beli audio terjemahan`,"Audio credit":`Kredit audio`,"Buy pass":`Beli akses`,Pass:`Akses`,"Pay with":`Bayar dengan`,"Check payment":`Periksa pembayaran`,"Open checkout":`Lanjut ke pembayaran`,"Free sessions":`Sesi gratis`,"Usage rates and expiry":`Tarif penggunaan dan masa berlaku`,Catalogs:`Katalog`,"Add catalog":`Tambah katalog`,"Catalog name":`Nama katalog`,Link:`Tautan`,"Play link":`Putar tautan`,"Go live":`Mulai siaran langsung`,Publish:`Terbitkan`,Listen:`Dengarkan`,"Live now":`Sedang langsung`,Upcoming:`Mendatang`,Parties:`Nonton bareng`,"Join party":`Ikut nonton bareng`,"Invite code":`Kode undangan`,Invite:`Undang`,Chat:`Obrolan`,"Chat message":`Pesan obrolan`,People:`Orang`,Speaker:`Pembicara`,Speakers:`Pembicara`,Listener:`Pendengar`,Moderator:`Moderator`,"Raise hand":`Angkat tangan`,"Hand raises":`Tangan terangkat`,Questions:`Pertanyaan`,Resources:`Materi`,Replay:`Tayangan ulang`,Schedule:`Jadwal`,Event:`Acara`,Host:`Tuan rumah`,About:`Tentang`,Stage:`Panggung`,Title:`Judul`,Description:`Deskripsi`,Topic:`Topik`,Public:`Publik`,"Anyone with the link":`Siapa pun dengan tautan`,"Invited people":`Orang yang diundang`,"Who can join":`Siapa yang boleh bergabung`,"Date and time":`Tanggal dan waktu`,"Expected length":`Perkiraan durasi`,Repeat:`Ulangi`,"Does not repeat":`Tidak berulang`,"Every day":`Setiap hari`,"Every week":`Setiap minggu`,Homepage:`Situs web`,"Host name":`Nama tuan rumah`,"Profile photo URL":`URL foto profil`,"Broadcast link":`Tautan siaran`,"Edit event":`Edit acara`,"Save changes":`Simpan perubahan`,"Create live":`Buat siaran langsung`,"Schedule class":`Jadwalkan kelas`,"Start class":`Mulai kelas`,"End event":`Akhiri acara`,"End session":`Akhiri sesi`,"Session ended":`Sesi berakhir`,"Event ended":`Acara berakhir`,Cancelled:`Dibatalkan`,"Replay available":`Tayangan ulang tersedia`,Join:`Bergabung`,"Create invite":`Buat undangan`,"Invite as":`Undang sebagai`,"Watch now":`Tonton sekarang`,"Start a room":`Buat ruang`,"Recent replays":`Tayangan ulang terbaru`,"Your account":`Akun Anda`,"Write with AI":`Tulis dengan AI`,"Suggested title":`Judul yang disarankan`,"Suggested description":`Deskripsi yang disarankan`,"Suggested topic":`Topik yang disarankan`,"Use these details":`Gunakan detail ini`,"Learn something live.":`Belajar sesuatu secara langsung.`,"Screen share":`Bagikan layar`,"Upload and broadcast":`Unggah dan siarkan`,Help:`Bantuan`,"Reload Player":`Muat ulang pemutar`,"Copy Bundled CLI Path":`Salin jalur CLI bawaan`,"Developer tools":`Alat pengembang`,Undo:`Urungkan`,Redo:`Ulangi tindakan`,Cut:`Potong`,Paste:`Tempel`,"Select all":`Pilih semua`,Status:`Status`,"Activity log":`Log aktivitas`,Admin:`Administrasi`,"Playback controls":`Kontrol pemutaran`,"Tracks and folders":`Lagu dan folder`,"Original-language captions.":`Takarir dalam bahasa asli.`,"Skip to playback controls":`Lewati ke kontrol pemutaran`,"Skip to playlist":`Lewati ke daftar putar`,"Skip to transcript and translated audio":`Lewati ke transkrip dan audio terjemahan`};export{t as default};
@@ -0,0 +1 @@
1
+ :root{--ink:#201a32;--purple:#34246d;--purple-2:#5b43a4;--coral:#f56f5d;--yellow:#ffd465;--paper:#f7f2e8;--paper-deep:#eee5d6;--white:#fffdf8;--green:#217a53;--muted:#6f6879;--line:#201a3224;--shadow:0 18px 50px #34246d1f;color:var(--ink);background:var(--paper);font-synthesis:none;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}*{box-sizing:border-box}html{scroll-behavior:smooth}body{background:var(--paper);min-width:320px;min-height:100vh;margin:0}button,input,select,textarea{font:inherit}button,a{-webkit-tap-highlight-color:transparent}a{color:inherit}[hidden]{display:none!important}body:before{content:"";pointer-events:none;opacity:.34;background-image:radial-gradient(#34246d1f .65px,#0000 .65px);background-size:7px 7px;position:fixed;inset:0;-webkit-mask-image:linear-gradient(#000,#0000 55%);mask-image:linear-gradient(#000,#0000 55%)}#app{flex-direction:column;min-height:100vh;display:flex;position:relative}.site-header,main,.site-footer{width:min(1180px,100% - 40px);margin-inline:auto}.site-header{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;gap:24px;min-height:82px;display:flex}.wordmark{color:var(--purple);letter-spacing:-.035em;align-items:center;gap:10px;font-size:1.12rem;font-weight:850;text-decoration:none;display:inline-flex}.wordmark>span:last-child span{color:var(--coral)}.wordmark-mark{width:34px;height:34px;color:var(--white);background:var(--purple);box-shadow:3px 3px 0 var(--yellow);border-radius:10px 10px 10px 3px;place-items:center;font-family:Georgia,serif;font-size:1.2rem;display:grid;transform:rotate(-3deg)}.site-nav{align-items:center;gap:28px;font-size:.91rem;display:flex}.site-nav a{color:var(--muted);text-decoration:none}.site-nav a:hover{color:var(--purple)}main{outline:none;flex:1}.loading-page,.error-page{text-align:center;place-content:center;min-height:68vh;display:grid}.loading-page h1,.error-page h1{color:var(--purple);margin:8px 0;font:700 clamp(2.4rem,8vw,5rem)/1 Georgia,serif}.loading-page p,.error-page p{color:var(--muted)}.hero{grid-template-columns:minmax(0,1.05fr) minmax(360px,.8fr);align-items:center;gap:clamp(50px,8vw,110px);min-height:610px;padding:92px 0 78px;display:grid}.eyebrow{color:var(--coral);letter-spacing:.13em;text-transform:uppercase;font-size:.75rem;font-weight:850;display:block}.hero h1{max-width:690px;color:var(--purple);letter-spacing:-.065em;margin:14px 0 24px;font:750 clamp(3.6rem,8vw,7.3rem)/.86 Georgia,Times New Roman,serif}.hero h1 em{color:var(--coral);font-weight:inherit}.hero-copy>p{max-width:590px;color:var(--muted);margin:0;font-size:clamp(1.02rem,1.5vw,1.22rem);line-height:1.7}.hero-actions{flex-wrap:wrap;gap:12px;margin-top:34px;display:flex}.hero-copy .hero-note{margin-top:15px;font-size:.82rem}.platforms{max-width:440px;margin-top:28px}.platform-badges{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;display:grid}.platform-badge{border:1px solid var(--purple);min-width:0;min-height:76px;color:var(--purple);background:var(--white);text-align:start;border-radius:12px;align-items:center;gap:12px;padding:12px 16px;text-decoration:none;display:flex}.platform-badge img{object-fit:contain;flex-shrink:0}.platform-badge>span{gap:3px;min-width:0;display:grid}.platform-badge small{font-size:.69rem;line-height:1.25}.platform-badge strong{font-size:.97rem;font-weight:750;line-height:1.2}.platform-fire-tv{color:#fff8eb;background:#232f3e;border-color:#232f3e}.platform-fire-tv small{color:#ffd08a}.platform-pwa{cursor:pointer}.platform-pwa:hover{background:#eee8ff}.platform-badge:focus-visible{outline:3px solid var(--purple);outline-offset:4px}.platform-unavailable:disabled{color:#767676;cursor:not-allowed;background:#e9e9e9;border-color:#d1d1d1}.platform-unavailable img{opacity:.65}.pwa-instructions{color:var(--muted);line-height:1.6}.pwa-instructions ul{padding-inline-start:22px}.pwa-instructions li+li{margin-top:12px}.visually-hidden{clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}@media (max-width:400px){.platform-badge{gap:8px;padding:10px}.platform-badge strong{font-size:.85rem}}@media (forced-colors:active){.platform-badge{border-color:canvastext}.platform-fire-tv small{color:canvastext}.platform-unavailable:disabled{color:graytext;border-color:graytext}.platform-pwa:focus-visible{outline-color:highlight}}.button{cursor:pointer;border:0;border-radius:999px;justify-content:center;align-items:center;gap:9px;min-height:44px;padding:0 22px;font-weight:780;text-decoration:none;transition:transform .16s,box-shadow .16s,background .16s;display:inline-flex}.button:hover:not(:disabled){transform:translateY(-2px)}.button:focus-visible,.text-button:focus-visible,a:focus-visible{outline-offset:3px;outline:3px solid #f56f5d66}.button:disabled{cursor:wait;opacity:.65}.button-primary{color:#fff;background:var(--purple);box-shadow:0 8px 22px #34246d3d}.button-primary:hover:not(:disabled){background:var(--purple-2);box-shadow:0 12px 28px #34246d47}.button-secondary{color:var(--purple);background:0 0;border:1px solid #34246d47}.button-light{color:var(--purple);background:var(--white)}.button-danger{color:#902d27;background:#ffe5df}.button-quiet{min-height:36px;color:var(--purple);background:#34246d12;padding-inline:17px}.button-quiet.signed-in{color:var(--green);background:#217a531a}.button-small{color:#fff;background:var(--purple);min-height:38px;padding-inline:16px;font-size:.84rem}.live-dot{background:var(--coral);border-radius:50%;width:8px;height:8px;box-shadow:0 0 0 4px #f56f5d2e}.hero-board{color:#fffbe9;background:#285e4d;border:10px solid #bd8654;border-radius:6px;flex-direction:column;justify-content:center;min-height:390px;padding:58px 50px 44px;display:flex;position:relative;transform:rotate(1.2deg);box-shadow:0 26px 60px #201a3233,inset 0 0 50px #0000001f}.hero-board:before{content:"";opacity:.2;background-image:linear-gradient(95deg,#0000 49%,#fff3 50%,#0000 52%),radial-gradient(#fff 0,#0000 55%);background-size:220px 100%,210px 35px;position:absolute;inset:0}.tape{z-index:2;background:#ffdd8dc2;width:86px;height:28px;position:absolute}.tape-one{top:-23px;left:40px;transform:rotate(-7deg)}.tape-two{bottom:-20px;right:28px;transform:rotate(-5deg)}.board-label{opacity:.75;font:italic 1rem Georgia,serif;position:relative}.hero-board strong{letter-spacing:-.035em;max-width:390px;margin:18px 0 15px;font:600 clamp(2rem,4vw,3.2rem)/1.05 Georgia,serif;position:relative}.hero-board p{opacity:.72;margin:0;position:relative}.board-action{color:#fff;cursor:pointer;background:0 0;border:0;border-bottom:1px solid #ffffff80;align-self:flex-start;margin-top:34px;padding-bottom:4px;font-weight:750;text-decoration:none;position:relative}.board-action span{color:var(--yellow)}.board-rule{background:var(--yellow);width:58px;height:3px;position:absolute;top:38px;right:40px;transform:rotate(-4deg)}.board-doodles{opacity:.34;gap:14px;font:2rem Georgia,serif;display:flex;position:absolute;bottom:26px;right:30px;transform:rotate(-8deg)}.event-section{padding:88px 0}.event-section-tint{position:relative}.event-section-tint:before{content:"";z-index:-1;background:var(--paper-deep);position:absolute;inset:24px calc(50% - 50vw)}.section-heading{justify-content:space-between;align-items:end;gap:20px;margin-bottom:30px;display:flex}.section-heading h2,.host-callout h2{color:var(--purple);letter-spacing:-.045em;margin:7px 0 0;font:700 clamp(2.3rem,5vw,4rem)/1 Georgia,serif}.section-count{color:var(--muted);font-size:.84rem}.event-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:18px;display:grid}.event-card{border:1px solid var(--line);background:#fffdf8bd;border-radius:20px;min-height:285px;transition:transform .18s,box-shadow .18s;box-shadow:0 4px 16px #34246d0a}.event-card:hover{box-shadow:var(--shadow);transform:translateY(-5px)rotate(-.3deg)}.event-card.is-live{border-color:#f56f5d73}.event-card>a{flex-direction:column;height:100%;padding:26px;text-decoration:none;display:flex}.event-card-top{justify-content:space-between;align-items:center;gap:12px;display:flex}.status-pill,.topic{width:-moz-fit-content;width:fit-content;min-height:25px;color:var(--purple);letter-spacing:.06em;text-transform:uppercase;background:#34246d14;border-radius:999px;align-items:center;padding:3px 10px;font-size:.69rem;font-weight:850;display:inline-flex}.status-pill.status-live{color:#a42d25;background:#ffe1db}.status-pill.status-live:before{content:"";background:var(--coral);border-radius:50%;width:6px;height:6px;margin-right:6px;animation:1.8s infinite pulse}.topic{color:var(--green);background:#217a5317}.topic-large{margin-top:18px}.event-card h3{color:var(--ink);letter-spacing:-.025em;margin:28px 0 11px;font:700 1.55rem/1.14 Georgia,serif}.event-card p{color:var(--muted);-webkit-line-clamp:3;-webkit-box-orient:vertical;margin:0;line-height:1.55;display:-webkit-box;overflow:hidden}.event-link{color:var(--purple);justify-content:space-between;margin-top:auto;padding-top:24px;font-size:.86rem;font-weight:800;display:flex}.empty-card{text-align:center;border:1px dashed #34246d40;border-radius:20px;grid-column:1/-1;padding:55px 30px}.empty-card>span{font-size:2rem}.empty-card h3{margin:12px 0 6px;font:700 1.5rem Georgia,serif}.empty-card p,.empty-line{color:var(--muted)}.upcoming-list{border-top:1px solid var(--line)}.upcoming-row{border-bottom:1px solid var(--line);grid-template-columns:minmax(130px,.34fr) 1fr 34px;align-items:center;gap:25px;min-height:92px;padding:16px 8px;text-decoration:none;display:grid}.upcoming-row:hover strong,.upcoming-row:hover .row-arrow{color:var(--coral)}.upcoming-row time{color:var(--purple);font-size:.83rem;font-weight:780}.upcoming-row>span:nth-child(2){flex-direction:column;gap:6px;display:flex}.upcoming-row strong{font:650 1.22rem Georgia,serif;transition:color .16s}.upcoming-row small{color:var(--muted)}.row-arrow{color:var(--purple);font-size:1.3rem}.host-callout{color:#fff;background:var(--purple);border-radius:28px;margin:90px 0 100px;padding:clamp(42px,7vw,78px);position:relative;overflow:hidden}.host-callout:after{content:"?";color:#ffffff0f;font:500 25rem Georgia,serif;position:absolute;top:-32%;right:5%;transform:rotate(12deg)}.host-callout .eyebrow{color:var(--yellow)}.host-callout h2{z-index:1;color:#fff;position:relative}.host-callout p{z-index:1;opacity:.75;max-width:520px;line-height:1.6;position:relative}.host-callout .button{z-index:1;margin-top:16px;position:relative}.site-footer{min-height:100px;color:var(--muted);border-top:1px solid var(--line);justify-content:space-between;align-items:center;font-size:.82rem;display:flex}.site-footer a{color:var(--purple);font-weight:750}.dialog{width:min(480px,100% - 28px);color:var(--ink);background:var(--white);border:0;border-radius:24px;padding:38px;box-shadow:0 24px 90px #201a324d}.dialog::backdrop{-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px);background:#201a3294}.dialog h2{color:var(--purple);margin:7px 0 10px;font:700 2.2rem Georgia,serif}.dialog>p{color:var(--muted);margin-top:0;line-height:1.5}.dialog-wide{width:min(650px,100% - 28px)}.dialog-close{width:35px;height:35px;color:var(--muted);cursor:pointer;background:#34246d12;border:0;border-radius:50%;font-size:1.4rem;position:absolute;top:14px;right:18px}.form-stack{gap:17px;margin-top:28px;display:grid}.form-stack.compact{gap:12px;margin-top:0}.form-stack label{color:var(--ink);gap:7px;font-size:.76rem;font-weight:790;display:grid}.form-stack input,.form-stack select,.form-stack textarea,.inline-form input,.share-box input{border:1px solid var(--line);width:100%;min-height:46px;color:var(--ink);background:#fff;border-radius:11px;outline:none;padding:10px 13px}.form-stack textarea{resize:vertical}.form-stack input:focus,.form-stack select:focus,.form-stack textarea:focus,.inline-form input:focus{border-color:var(--purple-2);box-shadow:0 0 0 3px #5b43a41f}.form-stack>.button{width:100%;margin-top:4px}.form-stack.compact>.button{width:-moz-fit-content;width:fit-content}.form-note,.form-error{min-height:1.2em;color:var(--muted);overflow-wrap:anywhere;margin:0;font-size:.76rem}.form-error{color:#a42d25}.form-note:empty,.form-error:empty{display:none}.form-checks{color:var(--muted);flex-wrap:wrap;gap:8px 18px;padding:3px 0;font-size:.8rem;display:flex}.form-stack .form-checks label{cursor:pointer;align-items:center;gap:7px;font-weight:600;display:flex}.form-stack .form-checks input{width:16px;height:16px;min-height:0;accent-color:var(--purple);margin:0;padding:0}.form-stack .form-checks label:has(input:checked){color:var(--purple)}.form-pair{grid-template-columns:1fr 1fr;gap:14px;display:grid}.text-button{width:-moz-fit-content;width:fit-content;color:var(--purple);cursor:pointer;background:0 0;border:0;border-bottom:1px solid #0000;padding:0;font-weight:750}.text-button:hover{border-bottom-color:currentColor}.event-shell{padding:42px 0 100px}.back-link{color:var(--muted);margin-bottom:28px;font-size:.84rem;font-weight:700;text-decoration:none;display:inline-block}.back-link:hover{color:var(--purple)}.event-layout{grid-template-columns:minmax(0,1.55fr) minmax(280px,.75fr);align-items:start;gap:18px;display:grid}.region{gap:18px;min-width:0;display:grid}.region-sidebar,.region-bottom,.region-drawer{grid-column:1/-1;grid-template-columns:repeat(auto-fit,minmax(270px,1fr))}.event-panel{border:1px solid var(--line);background:#fffdf8d1;border-radius:20px;min-width:0;padding:28px;position:relative;box-shadow:0 4px 20px #34246d0a}.panel-title{color:var(--muted);letter-spacing:.1em;text-transform:uppercase;margin-bottom:18px;font-size:.68rem;font-weight:850;display:block}.panel-event-header{color:#fff;background:var(--purple);border:0;align-items:end;min-height:320px;padding:clamp(34px,6vw,62px);display:flex;overflow:hidden}.panel-event-header:after{content:"✦";color:#ffffff12;font-size:15rem;position:absolute;top:-80px;right:-20px;transform:rotate(18deg)}.panel-event-header .panel-title{display:none}.event-heading{z-index:1;position:relative}.event-heading .topic{color:#225b42;background:#cbe9ce;margin-left:8px}.event-heading h1{letter-spacing:-.055em;max-width:780px;margin:24px 0 15px;font:700 clamp(2.7rem,7vw,5.4rem)/.95 Georgia,serif}.event-heading p{color:#ffffffad;max-width:680px;margin:0;font-size:1.03rem;line-height:1.6}.listen-card{grid-template-columns:150px 1fr;align-items:center;gap:30px;min-height:245px;display:grid}.listen-card h2,.stage-card h2{color:var(--purple);margin:7px 0 10px;font:700 2.2rem Georgia,serif}.listen-card p,.stage-card p{color:var(--muted);margin:0 0 20px;line-height:1.55}.listen-card audio{width:100%;margin-top:18px;display:none}.listen-card audio:not([src=""]){display:block}.sound-orbit{background:#ffe3dc;border-radius:50%;place-items:center;width:135px;height:135px;display:grid;position:relative}.sound-orbit b{z-index:2;color:#fff;background:var(--coral);border-radius:50%;place-items:center;width:60px;height:60px;padding-left:4px;font-size:1.25rem;display:grid}.sound-orbit span{border:1px solid #f56f5d59;border-radius:50%;animation:2.6s ease-out infinite sound;position:absolute;inset:18px}.sound-orbit span:nth-child(2){animation-delay:.8s}.sound-orbit span:nth-child(3){animation-delay:1.6s}.waiting .sound-orbit span{animation-play-state:paused}.host-line,.join-line,.people-row,.control-line{align-items:center;gap:14px;display:flex}.host-line small,.people-row small{color:var(--muted);display:block}.host-line strong,.people-row strong{margin-top:2px;display:block}.avatar,.stage-avatar{color:#fff;background:var(--purple);border-radius:14px 14px 14px 4px;flex:none;place-items:center;width:47px;height:47px;font:700 1.2rem Georgia,serif;display:grid}.avatar-small{border-radius:10px 10px 10px 3px;width:32px;height:32px;font-size:.82rem}.reading-copy{color:var(--muted);margin:0;font:1.05rem/1.7 Georgia,serif}.join-line{justify-content:space-between}.join-line strong{color:var(--purple)}.join-line p{color:var(--muted);margin:4px 0 0;font-size:.82rem}.panel-empty,.muted{color:var(--muted);line-height:1.55}.metric{flex-direction:column;gap:5px;display:flex}.metric strong{color:var(--purple);font:700 1.65rem Georgia,serif}.metric span{color:var(--muted);font-size:.78rem}.stage-card{align-items:center;gap:22px;display:flex}.stage-avatar{width:88px;height:88px;color:var(--purple);background:var(--yellow);border-radius:24px 24px 24px 7px;font-size:2.2rem}.control-stack{flex-wrap:wrap;gap:10px;display:flex}.control-line{justify-content:space-between}.status-dot{background:#b9b2bd;border-radius:50%;width:10px;height:10px}.status-dot.on{background:var(--coral);box-shadow:0 0 0 5px #f56f5d26}.share-box,.inline-form{gap:8px;display:flex}.share-box input{min-width:0;color:var(--muted);background:var(--paper)}.inline-form{margin-top:15px}.inline-form input{min-width:0}.chat-messages{gap:13px;min-height:110px;max-height:300px;display:grid;overflow-y:auto}.chat-message{align-items:start;gap:10px;display:flex}.chat-message p{gap:3px;margin:0;display:grid}.chat-message strong{font-size:.76rem}.chat-message span{color:var(--muted);line-height:1.45}.hand-raises{gap:10px;display:grid}.raise-row{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;gap:12px;padding-bottom:10px;display:flex}.raise-row>span{gap:2px;display:grid}.raise-row small{color:var(--muted);text-transform:capitalize}.raise-row>div{gap:10px;display:flex}.panel-failed{border-color:#f56f5d66}@keyframes pulse{50%{opacity:.42;transform:scale(.8)}}@keyframes sound{0%{opacity:.8;transform:scale(.72)}to{opacity:0;transform:scale(1.45)}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}@media (max-width:900px){.hero{grid-template-columns:1fr;padding-top:70px}.hero-board{width:min(560px,92%);margin-inline:auto}.event-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.event-layout{grid-template-columns:1fr}.region-secondary{grid-template-columns:repeat(auto-fit,minmax(260px,1fr))}}@media (max-width:640px){.site-header,main,.site-footer{width:min(100% - 24px,1180px)}.site-header{min-height:70px}.site-nav a{display:none}.wordmark{font-size:1rem}.hero{gap:55px;min-height:auto;padding:60px 0}.hero h1{font-size:clamp(3.5rem,20vw,5.5rem)}.hero-actions{display:grid}.hero-actions .button{width:100%}.hero-board{border-width:8px;width:96%;min-height:340px;padding:48px 29px 38px}.event-section{padding:64px 0}.event-grid{grid-template-columns:1fr}.upcoming-row{grid-template-columns:1fr 26px;gap:9px 14px;padding-block:20px}.upcoming-row time,.upcoming-row>span:nth-child(2){grid-column:1}.upcoming-row .row-arrow{grid-area:1/2/3}.host-callout{margin:64px 0;padding:42px 28px}.site-footer{flex-direction:column;justify-content:center;align-items:start;gap:6px;min-height:90px}.dialog{padding:34px 22px 24px}.form-pair{grid-template-columns:1fr}.event-shell{padding-top:28px}.event-panel{border-radius:16px;padding:22px}.panel-event-header{min-height:390px;padding:32px 23px}.event-heading h1{font-size:clamp(2.65rem,15vw,4.2rem)}.listen-card{grid-template-columns:1fr}.sound-orbit{width:108px;height:108px}.sound-orbit b{width:52px;height:52px}.join-line,.share-box,.inline-form{flex-direction:column;align-items:stretch}.join-line .button,.share-box .button,.inline-form .button{width:100%}.region-secondary,.region-sidebar,.region-bottom,.region-drawer{grid-template-columns:1fr}}.broadcast-options{border:1px solid var(--line);border-radius:12px;min-width:0;margin:0;padding:16px}.broadcast-options legend{padding-inline:6px;font-weight:700}.broadcast-options p{color:var(--muted);font-size:.9rem;line-height:1.5}.broadcast-options label+label{margin-top:14px}.broadcast-links{flex-wrap:wrap;gap:10px;margin-bottom:16px;display:flex}.broadcast-links .button{padding:12px;font-size:.8rem}.broadcast-caption{margin-bottom:0}.host-avatar{object-fit:cover}.host-line a{margin-top:5px;font-size:.85rem;display:block}button[aria-disabled=true]{opacity:.65;cursor:default}.event-panel h2.panel-title{font-size:.7rem}@media (forced-colors:active){.button,.event-panel,.broadcast-options{border:1px solid canvastext}}.event-toolbar{justify-content:space-between;align-items:center;gap:16px;margin-bottom:24px;display:flex}.event-toolbar .back-link{margin:0}.site-nav{min-width:0}.wordmark{flex-shrink:0}#account-button{text-overflow:ellipsis;white-space:nowrap;max-width:100%;overflow:hidden}.event-heading .status-pill{color:var(--purple);background:#eee8ff}.event-heading .status-pill.status-live{color:#a42d25;background:#ffe1db}.event-heading .follow-event{margin-top:20px}.event-heading #follow-note{min-height:1.3em;margin:8px 0 0}@media (max-width:640px){.site-header{gap:12px}}.class-update{z-index:20;border:1px solid var(--line);background:var(--cream,#f7f3e9);border-radius:12px;width:min(430px,100% - 24px);padding:14px 18px;position:fixed;bottom:12px;right:12px;box-shadow:0 6px 24px #34246d22}.class-update .form-note{margin:0 0 8px}.class-update button+button{margin-left:18px}.ai-writer{border:1px solid var(--line);border-radius:12px;padding:16px}.ai-writer-actions{grid-template-columns:repeat(auto-fit,minmax(160px,1fr));align-items:center;gap:14px;display:grid}.ai-writer-status{height:5em;margin:10px 0 0;line-height:1.4;overflow:auto}#event-ai-preview{margin-top:12px}#event-ai-preview textarea{resize:vertical}#event-ai-preview input,#event-ai-preview textarea{background:#f7f3e9}.ui-language{flex-wrap:wrap;align-items:center;gap:6px;min-width:0;font-size:.8rem;display:inline-flex}.ui-language select{color:var(--ink);background:#fff;border:1px solid;border-radius:6px;max-width:12em;min-height:32px}.ui-language select:focus-visible{outline:2px solid var(--purple);outline-offset:3px}.site-header,.site-nav{flex-wrap:wrap}input[type=url],input[type=email],input[type=tel],input[type=datetime-local]{direction:ltr}[dir=rtl] .form-stack,[dir=rtl] .event-panel{text-align:start}.classroom-player{color:#fff;background:#101015;border-radius:12px;overflow:hidden}.classroom-player video{aspect-ratio:16/9;object-fit:contain;background:#000;width:100%;display:block}.classroom-controls{flex-wrap:wrap;gap:12px;padding:16px;display:flex}.classroom-controls .button{color:#201a32;background:#fff;min-height:48px}.classroom-controls .button:disabled{opacity:.5}.classroom-player .player-status{color:#fff;margin:0;padding:0 16px 16px;line-height:1.5}.classroom-player>.player-status:first-child{padding:20px}.classroom-player>a{margin:0 20px 20px}.classroom-player.is-expanded{z-index:1000;border-radius:0;flex-direction:column;display:flex;position:fixed;inset:0}.classroom-player.is-expanded video{aspect-ratio:auto;flex:1;min-height:0}.tv .classroom-controls .button{min-height:56px;font-size:1.1rem}.tv :is(button,a,input,select,textarea):focus,.classroom-controls button:focus-visible{outline-offset:3px;outline:4px solid #ffd465;box-shadow:0 0 0 7px #34246d}@media (forced-colors:active){.classroom-controls button:focus-visible{outline-color:highlight}.classroom-controls .button:disabled{color:graytext;opacity:1}}.tv .event-heading{padding:20px 24px}.tv .event-heading h1{margin:12px 0;font-size:2rem}.tv .event-heading p{margin:0}.tv .classroom-controls{gap:10px;padding:14px}.tv .classroom-controls .button{padding:12px 16px;font-size:1rem}.profile-photo-row{align-items:center;gap:18px;display:flex}.profile-photo{width:72px;height:72px;font-size:1.8rem}.profile-photo-actions{gap:6px;display:grid}.profile-photo-actions .button{cursor:pointer;width:-moz-fit-content;width:fit-content}.settings-section{margin-top:22px}.settings-section legend{padding-inline:6px;font-weight:700}.settings-actions{flex-wrap:wrap;align-items:center;gap:14px;display:flex}.settings-footer{border-top:1px solid var(--line);justify-content:space-between;margin-top:26px;padding-top:16px}.host-card{border:1px solid var(--line);border-radius:12px;align-items:center;gap:14px;padding:14px 16px;display:flex}.host-card>div{flex:1;min-width:0;display:grid}.host-card small{color:var(--muted);font-size:.76rem;font-weight:790}.host-card strong{color:var(--purple)}.host-card a{color:var(--muted);overflow-wrap:anywhere;font-size:.84rem}.form-stack #nixamp-streams-field+.form-note{margin-top:-8px}
@@ -0,0 +1,112 @@
1
+ (function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),t.credentials=e.crossOrigin===`use-credentials`?`include`:e.crossOrigin===`anonymous`?`omit`:`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var e={"Nixamp Share link or HTTPS media URL":`Nixamp Share link or HTTPS media URL`,"For TV playback, use a Nixamp Share link or a direct HTTPS media URL. Pairux viewing opens separately.":`For TV playback, use a Nixamp Share link or a direct HTTPS media URL. Pairux viewing opens separately.`,Paused:`Paused`,"Broadcast ended":`Broadcast ended`,"Class broadcast":`Class broadcast`,Play:`Play`,Pause:`Pause`,"Retry playback":`Retry playback`,"Back 10 seconds":`Back 10 seconds`,"Forward 10 seconds":`Forward 10 seconds`,Mute:`Mute`,Unmute:`Unmute`,"Full screen":`Full screen`,"Exit full screen":`Exit full screen`,Playing:`Playing`,"Select Play to watch the broadcast.":`Select Play to watch the broadcast.`,"The broadcast could not be loaded. Try again.":`The broadcast could not be loaded. Try again.`,"This Pairux broadcast opens separately. For playback here on Fire TV, the host needs to share a Nixamp stream or direct media link.":`This Pairux broadcast opens separately. For playback here on Fire TV, the host needs to share a Nixamp stream or direct media link.`,"Open on Pairux":`Open on Pairux`,"Supported platforms":`Supported platforms`,"In review":`In review`,"Not available":`Not available`,"Install PWA":`Install PWA`,"PWA installed":`PWA installed`,"Web app":`Web app`,"Install the web app":`Install the web app`,"Keep BackToSchool on your home screen or desktop. No app store needed.":`Keep BackToSchool on your home screen or desktop. No app store needed.`,"iPhone or iPad: open this site in Safari, tap Share, then Add to Home Screen.":`iPhone or iPad: open this site in Safari, tap Share, then Add to Home Screen.`,"Android: open your browser menu and choose Install app or Add to Home screen.":`Android: open your browser menu and choose Install app or Add to Home screen.`,"Desktop: look for Install in the address bar or browser menu. The option depends on your browser.":`Desktop: look for Install in the address bar or browser menu. The option depends on your browser.`,"You can also keep using BackToSchool in this browser.":`You can also keep using BackToSchool in this browser.`,"The web app is installed. You can keep learning here.":`The web app is installed. You can keep learning here.`,"Continue learning":`Continue learning`,"The install prompt could not open. Select Web app again for installation instructions.":`The install prompt could not open. Select Web app again for installation instructions.`,"Follow host":`Follow host`,Following:`Following`,"You’ll get email and web notifications for this host.":`You’ll get email and web notifications for this host.`,"Notifications turned off for this host.":`Notifications turned off for this host.`,"Could not update notifications.":`Could not update notifications.`},t={...e,"No parties live right now.":`No parties live right now.`,"Could not refresh parties.":`Could not refresh parties.`,"Pick a server in the directory, or paste its link here.":`Pick a server in the directory, or paste its link here.`,"Interface language":`Interface language`,Language:`Language`,"Translation language":`Translation language`,"Original (auto-detect)":`Original (auto-detect)`,Play:`Play`,Pause:`Pause`,Stop:`Stop`,Next:`Next`,Previous:`Previous`,Select:`Select`,"Next/Prev":`Next/Prev`,Quit:`Quit`,"Now Playing":`Now Playing`,"Spectrum Analyser":`Spectrum Analyser`,Playlist:`Playlist`,Files:`Files`,"Open files":`Open files`,"Open folder":`Open folder`,"Add to library":`Add to library`,"Replace playlist":`Replace playlist`,Filter:`Filter`,Search:`Search`,"Nothing loaded.":`Nothing loaded.`,"Empty.":`Empty.`,"Loading…":`Loading…`,"Connecting…":`Connecting…`,Connected:`Connected`,"Not connected":`Not connected`,"No source":`No source`,Playing:`Playing`,Stopped:`Stopped`,Volume:`Volume`,Seek:`Seek`,"Full screen":`Full screen`,Download:`Download`,Share:`Share`,Copy:`Copy`,"Copy link":`Copy link`,Copied:`Copied`,Save:`Save`,Cancel:`Cancel`,Close:`Close`,Remove:`Remove`,Delete:`Delete`,Edit:`Edit`,Add:`Add`,Send:`Send`,Retry:`Retry`,Back:`Back`,"Next page":`Next page`,"Previous page":`Previous page`,"Show more":`Show more`,Panels:`Panels`,"Reset layout":`Reset layout`,Show:`Show`,Hide:`Hide`,Collapse:`Collapse`,Expand:`Expand`,"Move up":`Move up`,"Move down":`Move down`,Install:`Install`,"TV mode":`TV mode`,On:`On`,Off:`Off`,Account:`Account`,"Sign in":`Sign in`,"Sign out":`Sign out`,"Create account":`Create account`,Email:`Email`,Password:`Password`,"Forgot password?":`Forgot password?`,"Welcome back":`Welcome back`,Profile:`Profile`,Handle:`Handle`,"Your servers":`Your servers`,Server:`Server`,Connect:`Connect`,Disconnect:`Disconnect`,Directory:`Directory`,Favourites:`Favourites`,Follow:`Follow`,Unfollow:`Unfollow`,Notifications:`Notifications`,"Phone number":`Phone number`,"Save number":`Save number`,Transcript:`Transcript`,Captions:`Captions`,"Translate audio":`Translate audio`,"Audio language":`Audio language`,"Audio options":`Audio options`,"Keep background sound":`Keep background sound`,"Background level":`Background level`,"Speaker voices":`Speaker voices`,"Any voice":`Any voice`,"Male voice":`Male voice`,"Female voice":`Female voice`,"Original audio.":`Original audio.`,"Buy translated audio":`Buy translated audio`,"Audio credit":`Audio credit`,"Buy pass":`Buy pass`,Pass:`Pass`,"Pay with":`Pay with`,"Check payment":`Check payment`,"Open checkout":`Open checkout`,"Free sessions":`Free sessions`,"Usage rates and expiry":`Usage rates and expiry`,Catalogs:`Catalogs`,"Add catalog":`Add catalog`,"Catalog name":`Catalog name`,Link:`Link`,"Play link":`Play link`,"Go live":`Go live`,Publish:`Publish`,Listen:`Listen`,"Live now":`Live now`,Upcoming:`Upcoming`,Parties:`Parties`,"Join party":`Join party`,"Invite code":`Invite code`,Invite:`Invite`,Chat:`Chat`,"Chat message":`Chat message`,People:`People`,Speaker:`Speaker`,Speakers:`Speakers`,Listener:`Listener`,Moderator:`Moderator`,"Raise hand":`Raise hand`,"Hand raises":`Hand raises`,Questions:`Questions`,Resources:`Resources`,Replay:`Replay`,Schedule:`Schedule`,Event:`Event`,Host:`Host`,About:`About`,Stage:`Stage`,Title:`Title`,Description:`Description`,Topic:`Topic`,Public:`Public`,"Anyone with the link":`Anyone with the link`,"Invited people":`Invited people`,"Who can join":`Who can join`,"Date and time":`Date and time`,"Expected length":`Expected length`,Repeat:`Repeat`,"Does not repeat":`Does not repeat`,"Every day":`Every day`,"Every week":`Every week`,Homepage:`Homepage`,"Host name":`Host name`,"Profile photo URL":`Profile photo URL`,"Broadcast link":`Broadcast link`,"Edit event":`Edit event`,"Save changes":`Save changes`,"Create live":`Create live`,"Schedule class":`Schedule class`,"Start class":`Start class`,"End event":`End event`,"End session":`End session`,"Session ended":`Session ended`,"Event ended":`Event ended`,Cancelled:`Cancelled`,"Replay available":`Replay available`,Join:`Join`,"Create invite":`Create invite`,"Invite as":`Invite as`,"Watch now":`Watch now`,"Start a room":`Start a room`,"Recent replays":`Recent replays`,"Your account":`Your account`,"Write with AI":`Write with AI`,"Suggested title":`Suggested title`,"Suggested description":`Suggested description`,"Suggested topic":`Suggested topic`,"Use these details":`Use these details`,"Learn something live.":`Learn something live.`,"Screen share":`Screen share`,"Upload and broadcast":`Upload and broadcast`,Help:`Help`,"Reload Player":`Reload Player`,"Copy Bundled CLI Path":`Copy Bundled CLI Path`,"Developer tools":`Developer tools`,Undo:`Undo`,Redo:`Redo`,Cut:`Cut`,Paste:`Paste`,"Select all":`Select all`,Status:`Status`,"Activity log":`Activity log`,Admin:`Admin`,"Playback controls":`Playback controls`,"Tracks and folders":`Tracks and folders`,"Original-language captions.":`Original-language captions.`,"Skip to playback controls":`Skip to playback controls`,"Skip to playlist":`Skip to playlist`,"Skip to transcript and translated audio":`Skip to transcript and translated audio`},n={"■ STOPPED":`Stopped`,"▶ PLAYING":`Playing`,LOADING:`Loading…`,"no source":`No source`,"not connected":`Not connected`,"Now playing":`Now Playing`,"● GO LIVE":`Go live`,"● Go live":`Go live`,"⤓ Download":`Download`,"A man's voice":`Male voice`,"A woman's voice":`Female voice`,"Catalogs on this server":`Catalogs`,"Catalog folders":`Catalogs`,"Parties on this server":`Parties`,"Servers streaming now":`Directory`,"Playlist (0)":`Playlist`,"Playlist folders":`Playlist`,"Playlist pages":`Playlist`,"Filter these files":`Filter`,"Filter these entries":`Filter`,"Filter the entries":`Filter`,"Filter the playlist":`Filter`,"Create a free account":`Create account`,"Create one":`Create account`,"Create your account":`Create account`,"New here? Create an account":`Create account`,"Already have an account? Sign in":`Sign in`,"Your NixAmp account":`Your account`,"Your public handle":`Handle`,handle:`Handle`,password:`Password`,"Phone number for texts":`Phone number`,"Back to the player":`Back`,"Share what is playing":`Share`,"Share this stream":`Share`,"Link to this stream":`Link`,"Copy this stream's URL":`Copy link`,"A link to play":`Link`,"A server's link":`Server`,"Close translated audio purchase":`Close`,"Open secure checkout ↗ (new tab)":`Open checkout`,"Checking…":`Loading…`,"Browse the directory":`Directory`,"See what is live":`Live now`,"Join live":`Join`,"Raise Hand":`Raise hand`,"Hand Raises":`Hand raises`,"Hide this":`Hide`,Log:`Activity log`,"Status:":`Status`,"Nixamp player":`Playback controls`,"Nixamp audio and video player":`Playback controls`,"What is being said":`Transcript`,"The room's chat":`Chat`,Trollbox:`Chat`,"A line for the trollbox":`Chat message`,"Say something to the room…":`Chat message`,"Send it":`Send`,"Something to add":`Chat message`,"What to call it":`Catalog name`,"call it something":`Catalog name`,"An m3u catalog to add":`Catalogs`,"On this device":`Play`,"Play on this device":`Play`,"What this is":`About`,"Looking for servers…":`Loading…`,"Finding today’s conversations…":`Loading…`,"Coming up":`Upcoming`,"Listen after class":`Replay`,"Schedule live":`Schedule class`,"Schedule a class":`Schedule class`,"Plan a conversation":`Schedule class`,"Your classroom":`Event`,"Join in":`Join`,"Open a room →":`Start a room`,"Chat message":`Chat message`,"Add to the conversation":`Chat message`,"Create live":`Create live`,"Host stage":`Stage`,"Your host":`Host`,"Class host":`Host`,"Hand raised ✓":`Raise hand`,"Copied ✓":`Copied`,"Screen share with Pairux ↗":`Screen share`,"Upload & broadcast in Nixamp ↗":`Upload and broadcast`,"Open Music Folder…":`Open folder`,"Choose a music folder":`Open folder`,"Main navigation":`Panels`,"Skip to a section":`Panels`},r=[{code:`en`,label:`English`},{code:`de`,label:`Deutsch`},{code:`sv`,label:`Svenska`},{code:`es`,label:`Español`},{code:`fr`,label:`Français`},{code:`it`,label:`Italiano`},{code:`nl`,label:`Nederlands`},{code:`da`,label:`Dansk`},{code:`fi`,label:`Suomi`},{code:`ru`,label:`Русский`},{code:`uk`,label:`Українська`},{code:`cs`,label:`Čeština`},{code:`hu`,label:`Magyar`},{code:`zh`,label:`中文`},{code:`ar`,label:`العربية`},{code:`hi`,label:`हिन्दी`},{code:`vi`,label:`Tiếng Việt`},{code:`id`,label:`Bahasa Indonesia`}],i=`nixamp.ui.language`;function a(e){let t=typeof e==`string`?e.trim().toLowerCase().split(/[-_.@]/)[0]:``;return r.find(e=>e.code===t)?.code??`en`}function o(e,t=[]){let n=e=>{let t=typeof e==`string`?e.trim().toLowerCase().split(/[-_.@]/)[0]:``;return r.find(e=>e.code===t)?.code};return n(e)??t.map(n).find(Boolean)??`en`}var s=`modulepreload`,c=function(e){return`/`+e},l={},u=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function u(e){return import.meta.resolve?import.meta.resolve(e):new URL(e,import.meta.url).href}r=o(t.map(t=>{if(t=c(t,n),t=u(t),t in l)return;l[t]=!0;let r=t.endsWith(`.css`);for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}let i=document.createElement(`link`);if(i.rel=r?`stylesheet`:s,r||(i.as=`script`),i.crossOrigin=``,i.href=t,a&&i.setAttribute(`nonce`,a),document.head.appendChild(i),r)return new Promise((e,n)=>{i.addEventListener(`load`,e),i.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},d={en:async()=>({default:t}),de:()=>u(()=>import(`./de-SsCkny26.js`),[]),sv:()=>u(()=>import(`./sv-DH0ZO3Eh.js`),[]),es:()=>u(()=>import(`./es-BBlBPcq1.js`),[]),fr:()=>u(()=>import(`./fr-BVvavrk7.js`),[]),it:()=>u(()=>import(`./it-C9g0xD6S.js`),[]),nl:()=>u(()=>import(`./nl-Ciq1Yrk4.js`),[]),da:()=>u(()=>import(`./da-CbTvkIH7.js`),[]),fi:()=>u(()=>import(`./fi-ffo35_4W.js`),[]),ru:()=>u(()=>import(`./ru-B_ZMUvh6.js`),[]),uk:()=>u(()=>import(`./uk-Cof-TUZd.js`),[]),cs:()=>u(()=>import(`./cs-DjJnhGNB.js`),[]),hu:()=>u(()=>import(`./hu-BoJj7pZa.js`),[]),zh:()=>u(()=>import(`./zh-CLTzTBOU.js`),[]),ar:()=>u(()=>import(`./ar-BQPKp0M2.js`),[]),hi:()=>u(()=>import(`./hi-DDy_zxu6.js`),[]),vi:()=>u(()=>import(`./vi-D0QPpzbE.js`),[]),id:()=>u(()=>import(`./id-CXN9gchF.js`),[])},f=new class{load;code=`en`;get language(){return this.code}constructor(e=async e=>(await d[e]()).default){this.load=e}messages=t;revision=0;numberFormats=new Map;dateFormats=new Map;listeners=new Set;async setLanguage(e){let t=++this.revision,n=a(e),r=await this.load(n);if(t!==this.revision)return!1;this.code=n,this.messages=r,this.numberFormats.clear(),this.dateFormats.clear();for(let e of this.listeners)e();return!0}onChange(e){return this.listeners.add(e),()=>this.listeners.delete(e)}text(e,t={}){let r=this.language!==`en`&&Object.hasOwn(n,e)?n[e]:e,i=Object.hasOwn(this.messages,r)?this.messages[r]:e;return this.language!==`en`&&Object.hasOwn(n,e)&&(i=(e.match(/^[▶■●⤓]\s+/)?.[0]??``)+i+(e.endsWith(` ✓`)?` ✓`:``)),i.replace(/\{([\w]+)\}/g,(e,n)=>Object.hasOwn(t,n)?String(t[n]):e)}number(e,t){let n=JSON.stringify(t??{}),r=this.numberFormats.get(n);return r||(this.numberFormats.size>=64&&this.numberFormats.clear(),r=new Intl.NumberFormat(this.language,t),this.numberFormats.set(n,r)),r.format(e)}date(e,t){let n=JSON.stringify(t??{}),r=this.dateFormats.get(n);return r||(this.dateFormats.size>=64&&this.dateFormats.clear(),r=new Intl.DateTimeFormat(this.language,t),this.dateFormats.set(n,r)),r.format(e)}get direction(){return this.language===`ar`?`rtl`:`ltr`}},p=(e,t)=>f.text(e,t),m=new Map;function h(e,t,n){let r=m.get(e);r||(r=new Map,m.set(e,r)),r.set(t,n),n()}function g(e,t){e instanceof Element&&e.removeAttribute(`data-i18n`);let n=``,r;return h(e,`text`,()=>{if(r!==void 0&&e.textContent!==r){m.get(e)?.delete(`text`);return}n=t()??``,r=n,e.textContent!==n&&(e.textContent=n)}),n}function ee(e,t,n){e.removeAttribute(`data-i18n-${t}`);let r=``,i;return h(e,t,()=>{if(i!==void 0&&e.getAttribute(t)!==i){m.get(e)?.delete(t);return}r=n()??``,i=r,e.getAttribute(t)!==r&&e.setAttribute(t,r)}),r}var _=[`aria-label`,`title`,`placeholder`,`data-title`],v=[`[data-i18n]`,..._.map(e=>`[data-i18n-${e}]`)].join(`,`);function y(e){let t=[...e.querySelectorAll(v)];e instanceof HTMLElement&&e.matches(v)&&t.unshift(e);for(let e of t){if(e.closest(`[translate="no"], [contenteditable="true"]`))continue;let t=e.getAttribute(`data-i18n`);if(t){let n=e.textContent;h(e,`text`,()=>{if(e.textContent!==n){m.get(e)?.delete(`text`),e.removeAttribute(`data-i18n`);return}n=p(t),e.textContent!==n&&(e.textContent=n)})}for(let t of _){let n=e.getAttribute(`data-i18n-${t}`);if(n){let r=e.getAttribute(t);h(e,t,()=>{if(e.getAttribute(t)!==r){m.get(e)?.delete(t),e.removeAttribute(`data-i18n-${t}`);return}r=p(n),e.getAttribute(t)!==r&&e.setAttribute(t,r)})}}}}function b(){document.documentElement.lang=f.language,document.documentElement.dir=f.direction;for(let[e,t]of m){if(!e.isConnected){m.delete(e);continue}for(let e of t.values())e()}for(let e of document.querySelectorAll(`[data-ui-language]`))e.value=f.language}var te=0;async function x(e){let t=++te;try{if(!await f.setLanguage(e)||t!==te)return;try{localStorage.setItem(i,f.language)}catch{}window.nixampLanguage?.set(f.language).catch(()=>{})}catch{b()}}async function ne(){let e=o(null,navigator.languages);try{e=o(await window.nixampLanguage?.get()??localStorage.getItem(`nixamp.ui.language`),navigator.languages)}catch{}for(let e of document.querySelectorAll(`[data-ui-language]`))e.replaceChildren(...r.map(e=>{let t=new Option(e.label,e.code);return t.lang=e.code,t.dir=`auto`,t})),e.addEventListener(`change`,()=>{x(e.value)});y(document),b(),f.onChange(b),new MutationObserver(e=>{for(let t of e)for(let e of t.addedNodes)e instanceof Element&&y(e);for(let e of m.keys())e.isConnected||m.delete(e)}).observe(document.body,{childList:!0,subtree:!0}),window.addEventListener(`storage`,e=>{e.key===`nixamp.ui.language`&&f.setLanguage(o(e.newValue,navigator.languages)).catch(()=>{})}),window.nixampLanguage?.subscribe(e=>{e!==f.language&&f.setLanguage(e).catch(()=>{})});try{await f.setLanguage(e)}catch{}}var S=null,C=!1,w=window.matchMedia(`(display-mode: standalone)`).matches||!!navigator.standalone;window.addEventListener(`beforeinstallprompt`,e=>{e.preventDefault(),S=e}),window.addEventListener(`appinstalled`,()=>{w=!0,S=null;let e=document.querySelector(`[data-pwa-label]`);e&&g(e,()=>p(`PWA installed`))});function re(){let e=w?`PWA installed`:`Install PWA`;return`<div class="platforms" role="group" aria-label="Supported platforms" data-i18n-aria-label="Supported platforms">
2
+ <div class="platform-badges">
3
+ <a class="platform-badge platform-fire-tv" href="https://amzn.to/4cGaS1m">
4
+ <img src="/platform-icons/amazon.svg" width="28" height="28" alt="" />
5
+ <span><small>Amazon Appstore</small><strong>Amazon Fire TV</strong><small>Fire TV Stick</small></span>
6
+ </a>
7
+ <button class="platform-badge platform-pwa" type="button" data-install-pwa>
8
+ <img src="/platform-icons/pwa.svg" width="40" height="40" alt="" />
9
+ <span><small data-pwa-label data-i18n="${e}">${e}</small><strong data-i18n="Web app">Web app</strong></span>
10
+ </button>
11
+ <button class="platform-badge platform-unavailable" type="button" disabled>
12
+ <img src="/platform-icons/apple.svg" width="28" height="28" alt="" />
13
+ <span><small data-i18n="Not available">Not available</small><strong>App Store</strong></span>
14
+ </button>
15
+ <button class="platform-badge platform-unavailable" type="button" disabled>
16
+ <img src="/platform-icons/google-play.svg" width="28" height="28" alt="" />
17
+ <span><small data-i18n="Not available">Not available</small><strong>Google Play</strong></span>
18
+ </button>
19
+ </div>
20
+ </div>`}function T(){let e=document.querySelector(`#pwa-dialog`);e.querySelector(`[data-pwa-instructions]`).hidden=w,e.querySelector(`[data-pwa-installed]`).hidden=!w,e.open||e.showModal()}document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-install-pwa]`);if(!t||C)return;if(w||!S){T();return}let n=S;S=null,C=!0,t.setAttribute(`aria-busy`,`true`),n.prompt().catch(()=>{let e=document.querySelector(`#pwa-status`);e&&g(e,()=>p(`The install prompt could not open. Select Web app again for installation instructions.`))}).finally(()=>{C=!1,t.removeAttribute(`aria-busy`)})}),document.querySelector(`#pwa-dialog`).addEventListener(`close`,()=>{document.querySelector(`[data-install-pwa]`)?.focus({preventScroll:!0})});var E=class extends Error{status;constructor(e,t){super(e),this.status=t}};async function D(e,t={}){let n=await fetch(e,{credentials:`same-origin`,...t,headers:{...t.body?{"content-type":`application/json`}:{},...t.headers}}),r={};try{r=await n.json()}catch{r={}}if(!n.ok)throw new E(String((r&&typeof r==`object`?r:{}).error??`That did not work.`),n.status);return r}function ie(e,t,n=`POST`){return D(e,{method:n,body:JSON.stringify(t)})}function ae(e,t,n){let r=e.querySelector(`#event-ai-write`),i=e.querySelector(`#event-ai-cancel`),a=e.querySelector(`#event-ai-apply`),o=e.querySelector(`#event-ai-preview`),s=e.querySelector(`#event-ai-status`),c={title:e.querySelector(`#event-ai-title`),description:e.querySelector(`#event-ai-description`),topic:e.querySelector(`#event-ai-topic`)},l=null,u=null,d=null,f=t=>e.elements.namedItem(t).value,m=()=>({title:f(`title`),description:f(`description`),topic:f(`topic`),hostName:f(`hostName`),startsAt:f(`startsAt`),timezone:n(),duration:f(`expectedDurationMinutes`),recurrence:f(`recurrence`)});function h(){l?.abort(),l=null,u=null,d=null,o.hidden=!0,o.removeAttribute(`aria-busy`),i.hidden=!0,g(r,()=>p(`Write with AI`)),r.removeAttribute(`aria-disabled`),g(a,()=>p(`Use these details`)),a.setAttribute(`aria-disabled`,`true`),s.textContent=``;for(let e of Object.values(c))e.value=``}return r.addEventListener(`click`,async()=>{if(l||e.getAttribute(`aria-busy`)===`true`)return;let n=m();if(![n.title,n.description,n.topic].some(e=>e.trim())){s.textContent=`Add a title, description, or topic first. Your words become the prompt.`;return}let f=new AbortController;l=f,d=n,u=null,r.setAttribute(`aria-disabled`,`true`),r.textContent=`Writing…`,i.hidden=!1,g(i,()=>p(`Cancel`)),o.hidden=!1,o.setAttribute(`aria-busy`,`true`),g(a,()=>p(`Use these details`)),a.setAttribute(`aria-disabled`,`true`);for(let e of Object.values(c))e.value=``;s.textContent=`Writing a draft from your event details… You can keep editing.`;try{let e=await D(`/api/v1/events/ai-draft`,{method:`POST`,body:JSON.stringify(n),signal:f.signal});if(l!==f||!t.open)return;u=e.draft;for(let e of[`title`,`description`,`topic`])c[e].value=u[e];a.removeAttribute(`aria-disabled`),s.textContent=`Draft ready. Review it below, then use these details if you like them.`}catch(e){if(l!==f||f.signal.aborted)return;s.textContent=e instanceof Error?e.message:`Could not write a draft. Your text is unchanged.`}finally{l===f&&(l=null,o.removeAttribute(`aria-busy`),r.removeAttribute(`aria-disabled`),r.textContent=`Write again`,i.textContent=`Discard draft`)}}),i.addEventListener(`click`,()=>{let e=!!l;h(),s.textContent=e?`Draft cancelled. Your text is unchanged.`:`Draft discarded. Your text is unchanged.`,i.hidden=!1,i.textContent=`Dismiss`}),a.addEventListener(`click`,()=>{if(u&&d&&!l&&a.getAttribute(`aria-disabled`)!==`true`){if(JSON.stringify(m())!==JSON.stringify(d)){s.textContent=`Your inputs changed while this draft was being written. Click Write again to include those edits, or copy text from the preview.`;return}for(let t of[`title`,`description`,`topic`])e.elements.namedItem(t).value=u[t];a.setAttribute(`aria-disabled`,`true`),a.textContent=`Details applied`,s.textContent=`Draft applied to your form. Review your event and save when you’re ready.`}}),t.addEventListener(`close`,h),e.addEventListener(`submit`,()=>{l&&h()}),{reset:h}}function oe(e){if(typeof e!=`string`||e.length>2048)return null;try{let t=new URL(e);return t.protocol!==`https:`||t.username||t.password?null:t.href}catch{return null}}function O(e){let t=oe(e);if(!t)return null;let n=new URL(t);if(!n.port&&(n.hostname===`pairux.com`||n.hostname===`www.pairux.com`)){let e=/^\/(?:l|join|embed)\/([A-Za-z0-9_-]{1,64})\/?$/.exec(n.pathname)?.[1];return e?{provider:`pairux`,url:`https://pairux.com/l/${e}`,embed:`https://pairux.com/embed/${e}`,join:`https://pairux.com/join/${e}`}:null}if(!n.port&&(n.hostname===`nixamp.com`||n.hostname===`www.nixamp.com`)){if(n.pathname!==`/`)return null;let e=n.searchParams.get(`url`)||``,t=n.searchParams.get(`play`)||(e?`live`:``);if(/\/admin\//i.test(e)||/\/admin\//i.test(t)||n.searchParams.has(`key`)||e&&!oe(e)||!/^(?:live|channel:[^\s]+|track:\d+)$/.test(t)&&!oe(t))return null;let r=new URL(`https://nixamp.com/`);e&&r.searchParams.set(`url`,e),r.searchParams.set(`play`,t);let i=r.href;return r.searchParams.set(`embed`,`1`),{provider:`nixamp`,url:i,embed:r.href,join:i}}if(n.hostname.endsWith(`.nixamp.com`)&&/^\/view\/[A-Za-z0-9_-]+\/?$/.test(n.pathname)&&!n.search){let e=new URL(`https://nixamp.com/`);return e.searchParams.set(`url`,n.href),e.searchParams.set(`play`,`live`),O(e.href)}return/\.(?:m3u8|mp4|webm|mp3|m4a|ogg|wav|ts)$/i.test(n.pathname)?{provider:`media`,url:t,embed:t,join:t}:null}var se=[[/\.m3u8$/i,`hls`],[/\.(ts|mts|m2ts|mpegts)$/i,`mpegts`],[/\.(mp3|m4a|aac|oga|ogg|opus|wav|flac)$/i,`audio`],[/\.(mp4|m4v|webm|mov|ogv)$/i,`mp4`]],ce=[[/mpegurl/i,`hls`],[/mp2t|mpeg-?ts/i,`mpegts`],[/^audio\//i,`audio`],[/^video\//i,`mp4`]];function le(e){if(e.kind)return e.kind;if(e.mimeType){for(let[t,n]of ce)if(t.test(e.mimeType))return n}let t=ue(e.src);for(let[e,n]of se)if(e.test(t))return n;return`unknown`}function ue(e){try{return new URL(e,`https://placeholder.invalid`).pathname}catch{return e.split(/[?#]/)[0]??e}}function de(e=globalThis,t=null){let n=e.MediaSource!==void 0,r=!1;try{let e=t??(typeof document>`u`?null:document.createElement(`video`));r=e?e.canPlayType(`application/vnd.apple.mpegurl`)!==``||e.canPlayType(`application/x-mpegURL`)!==``:!1}catch{r=!1}return{mediaSource:n,nativeHls:r}}function fe(e,t){let n=le(e);switch(n){case`hls`:return t.mediaSource?{engine:`hls`,kind:n}:t.nativeHls?{engine:`native`,kind:n}:{engine:`native`,kind:n,unplayable:`This browser cannot play HLS streams.`};case`mpegts`:return t.mediaSource?{engine:`mpegts`,kind:n}:{engine:`mpegts`,kind:n,unplayable:`This browser cannot play transport streams.`};default:return{engine:`native`,kind:n}}}async function pe(e,t){let n=t.capabilities??de(),r=fe({src:t.src,...t.kind?{kind:t.kind}:{},...t.mimeType?{mimeType:t.mimeType}:{}},n),i=()=>void 0,a={media:e,src:t.src,isTv:t.isTv??!1,live:t.live??r.kind===`mpegts`,onError:t.onError??i,onNotice:t.onNotice??i,...t.onReady?{onReady:t.onReady}:{}};if(r.unplayable)return t.onError?.(r.unplayable),{destroy:i,engine:r.engine,kind:r.kind,levels:()=>[],unplayable:r.unplayable};let o,s=t.engines?.[r.engine];if(s)o=await s(a);else if(r.engine===`hls`){let{createHlsEngine:e}=await u(async()=>{let{createHlsEngine:e}=await import(`./hls-3VKVEQE3-QZWXCWjR.js`);return{createHlsEngine:e}},[]);o=await e(a)}else if(r.engine===`mpegts`){let{createMpegtsEngine:e}=await u(async()=>{let{createMpegtsEngine:e}=await import(`./mpegts-LO6RVLD6-BrVQzFhM.js`);return{createMpegtsEngine:e}},[]);o=await e(a,{withCredentials:t.withCredentials??!1,unplayableAdvice:t.unplayableAdvice??``})}else{let{createNativeEngine:e}=await u(async()=>{let{createNativeEngine:e}=await import(`./native-C7JTKWJH-BUyIoj0P.js`);return{createNativeEngine:e}},[]);o=await e(a)}return{destroy:()=>{o.destroy()},engine:r.engine,kind:r.kind,levels:o.levels,...o.setLevel?{setLevel:o.setLevel}:{},...o.currentLevel?{currentLevel:o.currentLevel}:{}}}function me(e){let t=e.trim();if(t===``)return``;/^https?:\/\//i.test(t)||(t=`http://${t}`);let n;try{n=new URL(t)}catch{return``}let r=n.pathname.replace(/\/+$/,``);return r=r.replace(/\/api(\/.*)?$/,``),`${n.origin}${r}`}function he(e,t,n=``){let r=`${e===``?``:me(e)}${t.startsWith(`/`)?t:`/${t}`}`;return n?`${r}${r.includes(`?`)?`&`:`?`}k=${encodeURIComponent(n)}`:r}function ge(e){let t=e.trim();if(t===``)return{base:``,key:``};let n;try{n=new URL(/^https?:\/\//i.test(t)?t:`http://${t}`)}catch{return{base:``,key:``}}let r=/^\/(?:admin|view|a|v)\/([^/]+)\/?$/.exec(n.pathname),i=r?.[1]??n.searchParams.get(`k`)??``;return r&&(n.pathname=`/`),n.searchParams.delete(`k`),{base:me(`${n.origin}${n.pathname}`),key:decodeURIComponent(i)}}async function _e(e,t,n=fetch){let r=O(e);if(!r||r.provider===`pairux`)return null;if(r.provider===`media`)return{src:r.url,live:!1};let i=new URL(r.url),a=i.searchParams.get(`play`);if(a.startsWith(`https://`))return{src:a,live:!1};let{base:o,key:s}=ge(i.searchParams.get(`url`)||`https://nixamp.com`),c=e=>he(o,e,s);if(a.startsWith(`track:`))return{src:c(`/api/media/${a.slice(6)}`),live:!1};if(a===`live`)return{src:c(`/api/live`),live:!0};let l=await n(c(`/api/streams`),{signal:t});if(!l.ok)throw Error(`The broadcast could not be loaded. Try again.`);let u=await l.json(),d=a.slice(8),f=u.channels?.find(e=>e.id===d)??u.channels?.find(e=>e.name===d);if(!f)throw Error(`The host has not started this broadcast yet. Try again shortly.`);let p=`/api/channels/${encodeURIComponent(f.id)}`;return f.kind===`audio`?{src:c(p),live:!0,kind:`audio`}:{src:c(`${p}/hls/index.m3u8`),live:!0,kind:`hls`}}var ve=/\bAFT\w*\b.*\bSilk\b|\bSilk\b.*\bAFT\w*\b|Android ?TV|Google ?TV|SMART-?TV|Tizen|Web0S|WebOS|BRAVIA|CrKey|Roku|Xbox|PlayStation|HbbTV|NetCast|VIDAA|Viera|AppleTV/i;function ye(e,t=``,n=1,r=null){let i=new URLSearchParams(t).get(`tv`);return i===null?r!==null&&r!==``?be(r):/\bSilk\b/.test(e)&&n===0?!0:ve.test(e):be(i)}function be(e){return e!==`0`&&e!==`no`&&e!==`off`&&e!==`false`}function xe(){return/BackToSchoolFireTV/i.test(navigator.userAgent)||ye(navigator.userAgent,location.search,navigator.maxTouchPoints)}function Se(){xe()&&(document.documentElement.classList.add(`tv`),document.addEventListener(`keydown`,e=>{if(!e.key.startsWith(`Arrow`)||e.altKey||e.ctrlKey||e.metaKey)return;let t=document.activeElement;if(t?.matches(`input, textarea, select, [contenteditable=true]`))return;let n=[...(document.querySelector(`dialog[open]`)??document.querySelector(`.classroom-player.is-expanded`)??document).querySelectorAll(`button:not(:disabled), a[href], input:not(:disabled), select:not(:disabled), textarea:not(:disabled), [tabindex='0']`)].filter(e=>e.getClientRects().length&&!e.closest(`[hidden], [inert]`)&&getComputedStyle(e).visibility!==`hidden`),r=t?.getBoundingClientRect(),i;if(!r||!n.includes(t))i=n[0];else{let a=e.key===`ArrowLeft`||e.key===`ArrowRight`,o=e.key===`ArrowLeft`||e.key===`ArrowUp`?-1:1,s=1/0;for(let e of n){if(e===t)continue;let n=e.getBoundingClientRect(),c=(n.left+n.right-r.left-r.right)/2,l=(n.top+n.bottom-r.top-r.bottom)/2,u=o*(a?c:l),d=Math.abs(a?l:c);if(u<=1)continue;let f=u+d*3;f<s&&(s=f,i=e)}}e.preventDefault(),i&&(i.focus({preventScroll:!0}),i.scrollIntoView({block:`nearest`,inline:`nearest`,behavior:`instant`}))}))}function Ce(e,t){let n=new AbortController,{signal:r}=n,i=O(t),a=document.createElement(`p`);a.setAttribute(`role`,`status`),a.className=`player-status`;let o=e=>{r.aborted||g(a,()=>p(e))};if(i?.provider===`pairux`){if(e.append(a),o(`This Pairux broadcast opens separately. For playback here on Fire TV, the host needs to share a Nixamp stream or direct media link.`),!xe()){let t=document.createElement(`a`);t.className=`button button-secondary`,t.href=i.join,t.target=`_blank`,t.rel=`noopener noreferrer`,g(t,()=>p(`Open on Pairux`)),e.append(t)}return()=>n.abort()}let s=document.createElement(`video`);s.playsInline=!0,s.preload=`none`,ee(s,`aria-label`,()=>p(`Class broadcast`));let c=document.createElement(`div`);c.className=`classroom-controls`,e.append(s,c,a);let l=null,u=!1,d=!1,f=!1,m=!1,h=!1,_=(e,t)=>{let n=document.createElement(`button`);return n.type=`button`,n.className=`button button-secondary`,g(n,()=>p(e)),n.addEventListener(`click`,t,{signal:r}),c.append(n),n},v=()=>{r.aborted||(f=!0,o(`The broadcast could not be loaded. Try again.`),g(te,()=>p(`Retry playback`)))},y=()=>g(te,()=>p(f?`Retry playback`:s.paused?`Play`:`Pause`));async function b(){if(!(u||r.aborted)){if(d&&!f&&!s.paused){s.pause();return}u=!0;try{if(!d||f){d=!1,f=!1,l?.destroy(),l=null,o(`Connecting…`);let e=await _e(t,r);if(r.aborted)return;if(!e)throw Error(`No playable source`);m=e.live;let n=await pe(s,{...e,isTv:xe(),onError:v,onReady:e=>{m=e.live,C()}});if(r.aborted){n.destroy();return}if(l=n,n.unplayable)throw Error(n.unplayable);d=!0}await s.play(),o(`Playing`)}catch{r.aborted||v()}finally{u=!1,r.aborted||y()}}}let te=_(`Play`,()=>{b()});function x(e){!m&&Number.isFinite(s.duration)&&(s.currentTime=Math.max(0,Math.min(s.duration,s.currentTime+e)))}let ne=_(`Back 10 seconds`,()=>x(-10)),S=_(`Forward 10 seconds`,()=>x(10));function C(){let e=m||!Number.isFinite(s.duration)||s.duration<=0;ne.disabled=e,S.disabled=e}C();let w=_(`Mute`,()=>{s.muted=!s.muted});function re(t){h=t,e.classList.toggle(`is-expanded`,t),T.setAttribute(`aria-pressed`,String(t)),g(T,()=>p(t?`Exit full screen`:`Full screen`))}let T=_(`Full screen`,()=>re(!h));T.setAttribute(`aria-pressed`,`false`),s.addEventListener(`play`,y,{signal:r}),s.addEventListener(`pause`,()=>{y(),f||o(`Paused`)},{signal:r}),s.addEventListener(`ended`,()=>{y(),f||o(`Broadcast ended`)},{signal:r}),s.addEventListener(`error`,v,{signal:r}),s.addEventListener(`loadedmetadata`,C,{signal:r}),s.addEventListener(`durationchange`,C,{signal:r}),s.addEventListener(`volumechange`,()=>g(w,()=>p(s.muted?`Unmute`:`Mute`)),{signal:r});let E=e=>document.querySelector(`dialog[open]`)||document.activeElement?.matches(`input, textarea, select, [contenteditable=true]`)?!1:[`Escape`,`BrowserBack`,`Back`].includes(e)&&h?(re(!1),T.focus({preventScroll:!0}),!0):e===`MediaPlayPause`?(b(),!0):e===`MediaPlay`?(s.paused&&b(),!0):e===`MediaPause`?(s.pause(),!0):e===`MediaRewind`?(x(-10),!0):e===`MediaFastForward`&&(x(10),!0);return document.addEventListener(`keydown`,e=>{if(E(e.key)&&e.preventDefault(),h&&e.key===`Tab`){let t=[...c.querySelectorAll(`button:not(:disabled)`)],n=t[0],r=t[t.length-1];e.shiftKey&&document.activeElement===n?(e.preventDefault(),r?.focus({preventScroll:!0})):!e.shiftKey&&document.activeElement===r&&(e.preventDefault(),n?.focus({preventScroll:!0}))}},{signal:r}),document.addEventListener(`backtoschool-remote`,e=>{E(e.detail)&&e.preventDefault()},{signal:r}),o(`Select Play to watch the broadcast.`),()=>{n.abort(),l?.destroy(),s.pause(),s.removeAttribute(`src`),s.load(),e.classList.remove(`is-expanded`)}}ne(),Se();var we=document.querySelector(`#main`),Te=document.querySelector(`#account-button`),Ee=document.querySelector(`#account-dialog`),k=document.querySelector(`#account-form`),De=document.querySelector(`#account-title`),Oe=document.querySelector(`#account-copy`),ke=document.querySelector(`#account-error`),Ae=document.querySelector(`#account-mode`),A=document.querySelector(`#event-dialog`),j=document.querySelector(`#event-form`),je=document.querySelector(`#event-form-title`),Me=document.querySelector(`#event-kicker`),Ne=document.querySelector(`#event-submit`),Pe=document.querySelector(`#event-error`),Fe=document.querySelector(`#schedule-fields`),Ie=document.querySelector(`#settings-dialog`),M=document.querySelector(`#settings-status`),Le=document.querySelector(`#profile-form`),N=document.querySelector(`#profile-error`),Re=document.querySelector(`#profile-photo`),ze=document.querySelector(`#profile-initial`),Be=document.querySelector(`#profile-photo-file`),Ve=document.querySelector(`#profile-photo-remove`),He=document.querySelector(`#openprofile-form`),Ue=document.querySelector(`#profile-openprofile`),We=document.querySelector(`#openprofile-error`),Ge=document.querySelector(`#nixamp-connection`),Ke=document.querySelector(`#nixamp-connect`),P=document.querySelector(`#nixamp-disconnect`),qe=document.querySelector(`#nixamp-streams-field`),F=document.querySelector(`#nixamp-streams`),I=document.querySelector(`#nixamp-streams-note`),Je=document.querySelector(`#event-host-card`),L=null,R=null,z=null,B=!1,V=!1,H=null,Ye=!1,Xe=null,U=null,W=null,Ze=ae(j,A,()=>H?.timezone??Intl.DateTimeFormat().resolvedOptions().timeZone??`UTC`),Qe=new WeakMap;`serviceWorker`in navigator&&location.protocol===`https:`&&navigator.serviceWorker.register(`/sw.js`).catch(()=>{});function $e(e){let t=atob((e+`=`.repeat((4-e.length%4)%4)).replace(/-/g,`+`).replace(/_/g,`/`)),n=new Uint8Array(new ArrayBuffer(t.length));for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return n}async function et(){if(`serviceWorker`in navigator&&`PushManager`in window&&`Notification`in window&&(Notification.permission!=="default"||await Notification.requestPermission()===`granted`)&&Notification.permission===`granted`)try{let e=await navigator.serviceWorker.ready,{publicKey:t}=await(await fetch(`/api/v1/notify/key`)).json();if(!t)return;let n=await e.pushManager.getSubscription()??await e.pushManager.subscribe({userVisibleOnly:!0,applicationServerKey:$e(t)});await fetch(`/api/v1/notify/subscribe`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(n.toJSON())})}catch{}}function tt(e,t){Qe.get(e)===t||e.contains(document.activeElement)||(e.innerHTML=t,Qe.set(e,t))}function G(e){return String(e??``).replaceAll(`&`,`&amp;`).replaceAll(`<`,`&lt;`).replaceAll(`>`,`&gt;`).replaceAll(`"`,`&quot;`).replaceAll(`'`,`&#039;`)}function nt(e){let t=document.querySelector(`#event-update`);t&&t.textContent!==e&&(t.textContent=e),document.querySelector(`.class-update`)?.removeAttribute(`hidden`)}function K(e){return`/live/${encodeURIComponent(e.slug)}`}function q(){let e=new URLSearchParams(location.search).get(`invite`);return e?`?invite=${encodeURIComponent(e)}`:``}function rt(e,t={}){return e?new Intl.DateTimeFormat(f.language,{weekday:`short`,month:`short`,day:`numeric`,hour:`numeric`,minute:`2-digit`,...t}).format(new Date(e)):`Time to be announced`}function J(e){return e.status===`live`?p(`Live now`):e.status===`ended`?e.recordingId?p(`Replay available`):p(`Event ended`):e.status===`cancelled`?p(`Cancelled`):rt(e.startsAt)}function it(e){return W?.permissions.includes(e)??!1}function Y(){g(Te,()=>L?R?.name||L.email.split(`@`)[0]||p(`Account`):p(`Sign in`)),Te.classList.toggle(`signed-in`,!!L)}async function at(){try{L=(await D(`/api/v1/auth/me`)).account}catch{L=null}Y(),await ot()}async function ot(){if(!L){R=null,z=null;return}let[e,t]=await Promise.all([D(`/api/v1/me/profile`).catch(()=>null),D(`/api/v1/nixamp/connection`).catch(()=>null)]);R=e,z=t,Y()}function X(e){if(L){Q();return}Xe=e??null,k.hidden=!1,ke.textContent=``,dt(),Ee.showModal()}function Z(){let e=R??{name:``,homepage:``,avatarUrl:``,bio:``,photo:``,card:{hostName:``,homepageUrl:``,avatarUrl:``},openProfile:``,handle:``};for(let t of[`name`,`homepage`,`bio`,`avatarUrl`])Le.elements.namedItem(t).value=e[t];let t=e.card.avatarUrl;Re.hidden=t===``,ze.hidden=t!==``,t!==``&&(Re.src=t),ze.textContent=(e.name||L?.email||`?`).slice(0,1).toUpperCase(),Ve.hidden=e.photo===``,(Ue.value===``||document.activeElement!==Ue)&&(Ue.value=e.openProfile),document.querySelector(`#settings-email`).textContent=L?`Signed in as ${L.email}`:``,st()}function st(){let e=z;if(!e||!e.available){Ge.textContent=e?`Connecting is not available on this site.`:``,Ke.hidden=!0,P.hidden=!0;return}Ke.hidden=e.connected,P.hidden=!e.connected,Ge.textContent=e.connected?`Connected as @${e.handle||e.nixampUserId} on nixamp.com. Your live streams appear when you go live.`:`Not connected.`}function Q(e=``){if(!L){X(()=>Q(e));return}M.textContent=e,N.textContent=``,We.textContent=``,Z(),Ie.showModal(),ot().then(Z)}async function ct(e){N.textContent=``;try{return R=await D(`/api/v1/me/profile`,{method:`PUT`,body:JSON.stringify(e)}),Z(),Y(),!0}catch(e){return N.textContent=e instanceof Error?e.message:`Could not save your profile.`,!1}}function lt(){let e=R?.card;Je.innerHTML=e&&(e.hostName!==``||e.avatarUrl!==``)?`${e.avatarUrl?`<img class="avatar host-avatar" src="${G(e.avatarUrl)}" alt="" referrerpolicy="no-referrer" />`:`<span class="avatar">${G((e.hostName||`?`).slice(0,1))}</span>`}<div><small data-i18n="Your host card">Your host card</small><strong>${G(e.hostName||p(`Class host`))}</strong>${e.homepageUrl?`<a href="${G(e.homepageUrl)}" target="_blank" rel="noopener noreferrer">${G(new URL(e.homepageUrl).hostname)}</a>`:``}</div><button class="text-button" type="button" data-open-settings data-i18n="Edit in settings">Edit in settings</button>`:`<span class="avatar">?</span><div><strong data-i18n="No host card yet">No host card yet</strong><small>Your name and photo go on every class you host.</small></div><button class="text-button" type="button" data-open-settings data-i18n="Add them in settings">Add them in settings</button>`}async function ut(){let e=z;if(qe.hidden=!0,I.textContent=``,e?.available){if(!e.connected){I.innerHTML=`<button class="text-button" type="button" data-open-settings data-i18n="Connect nixamp to pick one of your streams">Connect nixamp to pick one of your streams</button>`;return}I.textContent=`Looking at your nixamp servers…`;try{let{servers:e}=await D(`/api/v1/nixamp/streams`);for(;F.options.length>1;)F.remove(1);let t=0;for(let n of e){let e=document.createElement(`optgroup`);if(e.label=n.reachable?n.name:`${n.name} (not reachable)`,n.live){let r=new Option(`What ${n.name} is playing now${n.nowPlaying?`: ${n.nowPlaying}`:``}`,n.live);e.append(r),t+=1}for(let r of n.channels)e.append(new Option(`${r.name} (${r.kind}${r.listeners?`, ${r.listeners} listening`:``})`,r.link)),t+=1;e.childElementCount&&F.append(e)}qe.hidden=t===0,I.textContent=t===0?e.length===0?`Your nixamp account remembers no servers yet. Start one, then come back.`:`Nothing is live on your servers right now. Start a channel in nixamp, then pick it here.`:`Picking one fills in the broadcast link below.`}catch(e){I.textContent=e instanceof Error?e.message:`Your nixamp streams could not be read.`}}}function dt(){g(De,()=>p(B?`Create your account`:`Welcome back`)),Oe.textContent=B?`One account for every class on BackToSchool.help. Nothing else to sign up for.`:`Sign in to host, chat, or raise your hand.`,g(Ae,()=>p(B?`Already have an account? Sign in`:`New here? Create an account`)),document.querySelector(`#account-forgot`).hidden=B;let e=k.elements.namedItem(`password`);e.autocomplete=B?`new-password`:`current-password`,g(k.querySelector(`button[type="submit"]`),()=>p(B?`Create account`:`Sign in`))}function ft(e){let t=new Date(e);return`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,`0`)}-${String(t.getDate()).padStart(2,`0`)}T${String(t.getHours()).padStart(2,`0`)}:${String(t.getMinutes()).padStart(2,`0`)}`}function pt(e,t=null){if(!L){X(()=>pt(e,t));return}if(Ye)return;H=t,Ze.reset(),j.reset(),V=e===`scheduled`,Fe.hidden=!V,g(je,()=>p(t?`Edit event`:V?`Schedule a class`:`Go live`)),g(Me,()=>t?p(`Your classroom`):`Teach something live`),g(Ne,()=>p(t?`Save changes`:V?`Schedule class`:`Create live`)),Pe.textContent=``;let n=j.elements.namedItem(`startsAt`);if(n.required=V&&(!t||!!t.startsAt),lt(),ut(),t){for(let e of[`title`,`description`,`topic`,`visibility`,`broadcastUrl`,`recurrence`])j.elements.namedItem(e).value=t[e]??(e===`recurrence`?`none`:``);for(let e of[`chatEnabled`,`handRaiseEnabled`])j.elements.namedItem(e).checked=t[e];t.startsAt&&(n.value=ft(t.startsAt));let e=j.elements.namedItem(`expectedDurationMinutes`),r=String(t.expectedDurationMinutes??60);[...e.options].some(e=>e.value===r)||e.add(new Option(`${r} minutes`,r)),e.value=r}else if(V){let e=new Date(Date.now()+36e5);e.setMinutes(Math.ceil(e.getMinutes()/15)*15,0,0),n.value=ft(e.toISOString())}let r=Intl.DateTimeFormat().resolvedOptions().timeZone||`UTC`;document.querySelector(`#schedule-timezone`).textContent=`Date and time are shown in ${r}.`+(t?.recurrence?` This class repeats in ${t.timezone}.`:``),A.showModal()}function mt(e){history.pushState(null,``,e),$()}function ht(e){let t=e.status===`live`||e.status===`starting`;return`
21
+ <article class="event-card ${t?`is-live`:``}">
22
+ <a href="${K(e)}" data-link>
23
+ <div class="event-card-top">
24
+ <span class="status-pill ${t?`status-live`:``}">${t?`Live`:G(J(e))}</span>
25
+ ${e.topic?`<span class="topic">${G(e.topic)}</span>`:``}
26
+ </div>
27
+ <h3>${G(e.title)}</h3>
28
+ <p>${G(e.description||`Drop in and learn something with us.`)}</p>
29
+ <span class="event-link">${t?`Watch live`:`See event`}<span aria-hidden="true">→</span></span>
30
+ </a>
31
+ </article>`}async function gt(){document.title=`BackToSchool.help — Learn something live`;let{events:e}=await D(`/api/v1/events?limit=60`).catch(()=>({events:[]})),t=e.filter(e=>e.status===`live`||e.status===`starting`),n=e.filter(e=>e.status===`scheduled`||e.status===`draft`),r=e.filter(e=>e.status===`ended`&&e.recordingId);we.innerHTML=`
32
+ <section class="hero">
33
+ <div class="hero-copy">
34
+ <span class="eyebrow">Go back to school whenever you want</span>
35
+ <h1>Learn something<br /><em>live.</em></h1>
36
+ <p>Watch a live lesson, follow a screen share, and ask questions as you learn.</p>
37
+ <div class="hero-actions">
38
+ <button class="button button-primary" type="button" data-event-mode="live"><span class="live-dot"></span><span data-i18n="Go live"> Go live</span></button>
39
+ <button class="button button-secondary" type="button" data-event-mode="scheduled" data-i18n="Schedule live">Schedule live</button>
40
+ </div>
41
+ <p class="hero-note">Watch classes and screen shares. No account required.</p>
42
+ ${re()}
43
+ </div>
44
+ <div class="hero-board" aria-label="What is happening today">
45
+ <span class="tape tape-one" aria-hidden="true"></span>
46
+ <span class="tape tape-two" aria-hidden="true"></span>
47
+ <div class="board-rule"></div>
48
+ <span class="board-label">Today’s lesson</span>
49
+ <strong>${G(t[0]?.title??n[0]?.title??`The best teachers are curious people`)}</strong>
50
+ <p>${t[0]?`Happening right now`:n[0]?J(n[0]):`Host the first live conversation`}</p>
51
+ ${t[0]?`<a href="${K(t[0])}" data-link class="board-action"><span data-i18n="Watch now">Watch now </span><span>↗</span></a>`:`<button type="button" data-event-mode="live" class="board-action"><span data-i18n="Start a room">Start a room </span><span>↗</span></button>`}
52
+ <div class="board-doodles" aria-hidden="true"><span>?</span><span>✦</span><span>≈</span></div>
53
+ </div>
54
+ </section>
55
+
56
+ <section class="event-section" id="live">
57
+ <div class="section-heading">
58
+ <div><span class="eyebrow">Walk in anytime</span><h2 data-i18n="Live now">Live now</h2></div>
59
+ <span class="section-count">${t.length} ${t.length===1?`room`:`rooms`}</span>
60
+ </div>
61
+ <div class="event-grid">
62
+ ${t.length?t.map(ht).join(``):`<div class="empty-card"><span>☕</span><h3>The halls are quiet.</h3><p>Start a live and give people something worth dropping into.</p><button class="text-button" data-event-mode="live" data-i18n="Open a room →">Open a room →</button></div>`}
63
+ </div>
64
+ </section>
65
+
66
+ <section class="event-section event-section-tint" id="upcoming">
67
+ <div class="section-heading">
68
+ <div><span class="eyebrow">Save your seat</span><h2 data-i18n="Coming up">Coming up</h2></div>
69
+ </div>
70
+ <div class="upcoming-list">
71
+ ${n.length?n.map(e=>`
72
+ <a class="upcoming-row" href="${K(e)}" data-link>
73
+ <time>${G(rt(e.startsAt,{weekday:`short`,month:`short`,day:`numeric`}))}</time>
74
+ <span><strong>${G(e.title)}</strong><small>${G(e.topic||`Live conversation`)}</small></span>
75
+ <span class="row-arrow">→</span>
76
+ </a>`).join(``):`<p class="empty-line">Nothing scheduled yet. Your idea could be next.</p>`}
77
+ </div>
78
+ </section>
79
+
80
+ ${r.length?`<section class="event-section"><div class="section-heading"><div><span class="eyebrow" data-i18n="Listen after class">Listen after class</span><h2 data-i18n="Recent replays">Recent replays</h2></div></div><div class="event-grid">${r.map(ht).join(``)}</div></section>`:``}
81
+
82
+ <section class="host-callout">
83
+ <span class="eyebrow">Know a thing or two?</span>
84
+ <h2>Someone wants to hear it.</h2>
85
+ <p>You don’t need a studio or a syllabus. Bring an idea and start talking.</p>
86
+ <button class="button button-light" type="button" data-event-mode="scheduled" data-i18n="Plan a conversation">Plan a conversation</button>
87
+ </section>`}function _t(e){if(O(e.broadcastUrl))return`<div class="classroom-player" data-classroom-player></div>`;let t=q(),n=e.recordingId&&e.status===`ended`?`/api/v1/recordings/${encodeURIComponent(e.recordingId)}`:`/api/channels/${encodeURIComponent(e.roomId)}${t}`,r=e.status===`live`||!!e.recordingId;return`
88
+ <div class="listen-card ${r?``:`waiting`}">
89
+ <div class="sound-orbit" aria-hidden="true"><span></span><span></span><span></span><b>▶</b></div>
90
+ <div>
91
+ <span class="eyebrow">${e.status===`live`?`On air now`:e.recordingId?p(`Replay`):`The room opens soon`}</span>
92
+ <h2>${r?e.status===`live`?`Listen live`:`Listen again`:`We’ll see you here.`}</h2>
93
+ <p id="player-note">${r?`Press play and you’re in. No sign-up, no setup.`:G(J(e))}</p>
94
+ ${r?`<button class="button button-primary listen-button" type="button" data-listen><span class="live-dot"></span> ${e.status===`live`?`Listen live`:`Play replay`}</button><audio id="event-audio" preload="none" src="${G(n)}" controls></audio>`:``}
95
+ </div>
96
+ </div>`}function vt(e){return e.chatEnabled?`
97
+ <div id="chat-messages" class="chat-messages"><p class="muted">Loading the conversation…</p></div>
98
+ ${L?`<form id="chat-form" class="inline-form"><input name="body" maxlength="1000" placeholder="Add to the conversation" data-i18n-placeholder="Add to the conversation" aria-label="Chat message" data-i18n-aria-label="Chat message" required /><button class="button button-small" type="submit" data-i18n="Send">Send</button></form>`:`<button class="text-button" type="button" data-sign-in>Sign in to join the chat →</button>`}`:`<div class="panel-empty">Chat is off for this event.</div>`}function yt(e,t){switch(e){case`event-header`:return`<div class="event-heading"><span class="status-pill ${t.status===`live`?`status-live`:``}">${G(J(t))}</span>${t.topic?`<span class="topic">${G(t.topic)}</span>`:``}<h1>${G(t.title)}</h1><p>${G(t.description||`A live conversation powered by NixAmp.`)}</p><button class="button button-secondary follow-event" type="button" data-follow-owner="${G(t.ownerId)}" data-following="unknown" data-i18n="Follow host">Follow host</button><p class="form-note" id="follow-note" role="status"></p></div>`;case`player`:return _t(t);case`stage`:return`<div class="stage-card"><span class="stage-avatar">${G(t.title.slice(0,1).toUpperCase())}</span><div><span class="eyebrow" data-i18n="Host stage">Host stage</span><h2>${G(t.title)}</h2><p id="broadcast-note">${t.status===`live`?`This event is live.`:`Start when you’re ready.`}</p></div></div>`;case`host`:return`<div class="host-line">${t.avatarUrl?`<img class="avatar host-avatar" src="${G(t.avatarUrl)}" alt="" referrerpolicy="no-referrer" />`:`<span class="avatar">${G((t.hostName||t.title).slice(0,1))}</span>`}<div><small data-i18n="Your host">Your host</small><strong>${G(t.hostName||p(`Class host`))}</strong>${t.homepageUrl?`<a href="${G(t.homepageUrl)}" target="_blank" rel="noopener noreferrer">Visit homepage ↗</a>`:``}</div></div>`;case`about`:return`<p class="reading-copy">${G(t.description||`Come listen, learn, and ask a question live.`)}</p>${t.topic?`<span class="topic topic-large">${G(t.topic)}</span>`:``}`;case`join`:return L?`<p class="panel-empty">You’re signed in and ready to participate.</p>`:`<div class="join-line"><div><strong>Want to ask something?</strong><p>Sign in to BackToSchool to join.</p></div><button class="button button-secondary" type="button" data-sign-in data-i18n="Join in">Join in</button></div>`;case`chat`:return vt(t);case`questions`:return`<div class="panel-empty">Questions shared in chat can be brought onto the stage.</div>`;case`resources`:return`<div class="panel-empty">The host hasn’t added resources yet.</div>`;case`participants`:return`<div class="metric"><strong id="listener-count">—</strong><span>listening now</span></div>`;case`speakers`:return`<div class="people-row"><span class="avatar">H</span><span><strong data-i18n="Host">Host</strong><small>On stage</small></span></div>`;case`raise-hand`:return t.handRaiseEnabled?`<div class="join-line"><div><strong>Have something to add?</strong><p>Let the host know you’d like to speak.</p></div><button class="button button-secondary" type="button" data-raise-hand data-i18n="Raise hand">Raise hand</button></div>`:null;case`hand-raises`:return`<div id="hand-raises" class="hand-raises"><p class="muted">No hands raised.</p></div>`;case`invite`:return`<form id="invite-form" class="form-stack compact"><label><span data-i18n="Email">Email</span><input name="email" type="email" placeholder="someone@example.com" required /></label><label><span data-i18n="Invite as">Invite as</span><select name="role"><option value="listener" data-i18n="Listener">Listener</option><option value="speaker" data-i18n="Speaker">Speaker</option><option value="moderator" data-i18n="Moderator">Moderator</option></select></label><button class="button button-small" type="submit" data-i18n="Create invite">Create invite</button><p id="invite-note" class="form-note"></p></form>`;case`share`:return`<div class="share-box"><input id="share-url" value="${G(location.href)}" readonly aria-label="Event URL" /><button class="button button-small" type="button" data-copy data-i18n="Copy link">Copy link</button></div>`;case`event-controls`:return`<div class="control-stack">
99
+ <a href="https://pairux.com/dashboard" target="_blank" rel="noopener noreferrer" data-i18n="Screen share with Pairux ↗">Screen share with Pairux ↗</a>
100
+ <a href="https://nixamp.com/#files-panel" target="_blank" rel="noopener noreferrer" data-i18n="Upload &amp; broadcast in Nixamp ↗">Upload &amp; broadcast in Nixamp ↗</a>
101
+ ${[`draft`,`scheduled`,`starting`].includes(t.status)?`<button class="button button-primary" type="button" data-start-event data-i18n="Start class">Start class</button>`:``}
102
+ <button class="button button-danger" type="button" data-end-event ${t.status===`live`?``:`hidden`}>${t.recurrence?`End session & schedule next`:p(`End event`)}</button>
103
+ <p id="broadcast-note" class="form-note" role="status">${t.broadcastUrl?`Start the broadcast in Pairux or Nixamp, then start the class here.`:`Add your broadcast link with Edit event.`}</p>
104
+ </div>`;case`schedule`:return`<div class="metric"><strong>${G(rt(t.startsAt,{timeZone:t.timezone}))}</strong><span>${G(t.timezone)}${t.recurrence?` · Repeats ${t.recurrence}`:``}</span></div>`;case`recording`:return`<div class="control-line"><span>${t.recordingEnabled?`Recording requested`:`Recording is off`}</span><span class="status-dot ${t.recordingEnabled?`on`:``}"></span></div>`;default:return null}}async function bt(e){let t=await D(`/api/v1/events/${encodeURIComponent(e)}${q()}`);U?.(),U=null,W=t;let n=t.event;document.title=`${n.title} — BackToSchool.help`,document.querySelector(`meta[name="description"]`)?.setAttribute(`content`,n.description||`Listen to ${n.title} live on BackToSchool.help.`),document.querySelector(`meta[property="og:title"]`)?.setAttribute(`content`,n.title),document.querySelector(`meta[property="og:description"]`)?.setAttribute(`content`,n.description||p(`Learn something live.`));let r=(e,t)=>`<section class="event-panel panel-${e}"><h2 class="panel-title">${t}</h2>${yt(e,n)??``}</section>`;we.innerHTML=`
105
+ <div class="event-shell">
106
+ <div class="event-toolbar"><a class="back-link" href="/" data-link>← Explore more lives</a>${L?.id===n.ownerId?`<button class="button button-secondary" type="button" data-edit-event data-i18n="Edit event">Edit event</button>`:``}</div>
107
+ <div class="class-update" hidden><p id="event-update" role="status" class="form-note"></p><button class="text-button" data-refresh-event>Refresh class details</button><button class="text-button" data-dismiss-update>Dismiss</button></div>
108
+ <div class="event-layout">
109
+ <div class="region region-primary">${r(`event-header`,`Live classroom`)}${r(`player`,`Watch class`)}${r(`chat`,`Class chat`)}</div>
110
+ <aside class="region region-secondary">${r(`host`,`Meet your host`)}${r(`schedule`,p(`Schedule`))}${L?.id===n.ownerId?r(`event-controls`,`Host controls`):r(`join`,`Join the class`)}${L?.id===n.ownerId&&n.visibility===`private`?`<details class="event-panel"><summary>Invite students</summary>${yt(`invite`,n)}</details>`:``}${r(`share`,`Share class`)}${L?.id===n.ownerId&&n.handRaiseEnabled?r(`hand-raises`,`Raised hands`):n.handRaiseEnabled?r(`raise-hand`,`Ask a question`):``}</aside>
111
+ </div>
112
+ </div>`,xt(n)}function xt(e){let t=document.querySelector(`[data-classroom-player]`),n=t?Ce(t,e.broadcastUrl):()=>{};document.querySelector(`[data-listen]`)?.addEventListener(`click`,async e=>{let t=e.currentTarget,n=document.querySelector(`#event-audio`);if(n){t.disabled=!0,g(t,()=>p(`Connecting…`));try{await n.play(),t.textContent=`You’re listening`,document.querySelector(`#player-note`).textContent=`Live audio from this NixAmp room.`}catch{t.disabled=!1,t.textContent=`Try listening again`,document.querySelector(`#player-note`).textContent=`The host may still be getting ready. Try again in a moment.`}}});let r=document.querySelector(`#chat-form`);r?.addEventListener(`submit`,t=>{t.preventDefault();let n=r.elements.namedItem(`body`),i=n.value.trim();i&&(n.value=``,ie(`/api/v1/events/${encodeURIComponent(e.id)}/chat`,{body:i}).then(()=>St(e)).catch(e=>{n.placeholder=e instanceof Error?e.message:`Could not send`}))});let i=document.querySelector(`#invite-form`);i?.addEventListener(`submit`,t=>{t.preventDefault();let n=new FormData(i),r=document.querySelector(`#invite-note`);r.textContent=`Creating invite…`,D(`/api/v1/events/${encodeURIComponent(e.id)}/invitations`,{method:`POST`,body:JSON.stringify({email:n.get(`email`),role:n.get(`role`)})}).then(async({inviteUrl:e,sent:t})=>{await navigator.clipboard?.writeText(e).catch(()=>void 0),r.textContent=t?`Invite sent. The link is copied too.`:`Invite link copied: ${e}`,i.reset()}).catch(e=>{r.textContent=e instanceof Error?e.message:`Could not invite`})}),document.querySelector(`[data-raise-hand]`)?.addEventListener(`click`,t=>{let n=t.currentTarget;n.disabled=!0,ie(`/api/v1/events/${encodeURIComponent(e.id)}/hand-raises`,{}).then(()=>{g(n,()=>p(`Hand raised ✓`))}).catch(e=>{n.disabled=!1,n.textContent=e instanceof E&&e.status===401?`Sign in to raise hand`:`Try again`})}),document.querySelector(`[data-edit-event]`)?.addEventListener(`click`,()=>pt(`scheduled`,W.event));let a=document.querySelector(`[data-follow-owner]`);if(a){let e=a.dataset.followOwner??``;D(`/api/v1/follows/${encodeURIComponent(e)}`).then(({following:e})=>{a.dataset.following=e?`yes`:`no`,g(a,()=>p(e?`Following`:`Follow host`))}).catch(()=>void 0),a.addEventListener(`click`,()=>{if(!L){X(()=>void $());return}let t=a.dataset.following===`yes`;a.disabled=!0,D(`/api/v1/follows/${encodeURIComponent(e)}`,{method:t?`DELETE`:`PUT`,body:t?void 0:`{}`}).then(({following:e})=>{a.dataset.following=e?`yes`:`no`,g(a,()=>p(e?`Following`:`Follow host`));let t=document.querySelector(`#follow-note`);t&&g(t,()=>p(e?`You’ll get email and web notifications for this host.`:`Notifications turned off for this host.`)),e&&et()}).catch(e=>{let t=document.querySelector(`#follow-note`);t&&(t.textContent=e instanceof Error?e.message:`Could not update notifications.`)}).finally(()=>{a.disabled=!1})})}document.querySelector(`[data-start-event]`)?.addEventListener(`click`,()=>void Tt()),document.querySelector(`[data-dismiss-update]`)?.addEventListener(`click`,()=>document.querySelector(`.class-update`).hidden=!0),document.querySelector(`[data-refresh-event]`)?.addEventListener(`click`,()=>mt(K(e)+q())),document.querySelector(`[data-end-event]`)?.addEventListener(`click`,()=>void Et()),document.querySelector(`[data-copy]`)?.addEventListener(`click`,async e=>{await navigator.clipboard.writeText(location.href),g(e.currentTarget,()=>p(`Copied ✓`))});let o=0,s=0;e.chatEnabled&&(St(e),o=window.setInterval(()=>void St(e),4e3),s=it(`event.moderate`)?window.setInterval(()=>void Ct(e),3e3):0,Ct(e));let c=e.version,l=window.setInterval(()=>void D(`/api/v1/events/${encodeURIComponent(e.id)}${q()}`).then(e=>{if(e.event.version===W?.event.version||e.event.version===c)return;c=e.event.version;let t=document.querySelector(`.event-heading .status-pill`),n=J(e.event);t&&t.textContent!==n&&(t.textContent=n,t.classList.toggle(`status-live`,e.event.status===`live`)),nt(`The host updated this class. Refresh the details when you’re ready.`)}).catch(()=>void 0),5e3);U=()=>{n(),clearInterval(o),clearInterval(s),clearInterval(l)},wt(e)}async function St(e){let t=document.querySelector(`#chat-messages`);if(t)try{let{messages:n}=await D(`/api/v1/events/${encodeURIComponent(e.id)}/chat${q()}`);tt(t,n.length?n.map(e=>`<div class="chat-message"><span class="avatar avatar-small">${G(e.authorName.slice(0,1).toUpperCase())}</span><p><strong>${G(e.authorName)}</strong><span>${G(e.body)}</span></p></div>`).join(``):`<p class="muted">No messages yet. Say hello when you’re ready.</p>`)}catch{t.innerHTML=`<p class="muted">Chat is taking a break. You can still watch the class.</p>`}}async function Ct(e){let t=document.querySelector(`#hand-raises`);if(t&&it(`event.moderate`))try{let{handRaises:n}=await D(`/api/v1/events/${encodeURIComponent(e.id)}/hand-raises`);if(t.contains(document.activeElement))return;tt(t,n.length?n.map(e=>`<div class="raise-row"><span><strong>${G(e.displayName)}</strong><small>${G(e.state)}</small></span><div><button class="text-button" data-hand="${G(e.accountId)}" data-state="invited"><span data-i18n="Invite">Invite</span></button><button class="text-button" data-hand="${G(e.accountId)}" data-state="dismissed">Dismiss</button></div></div>`).join(``):`<p class="muted">No hands raised.</p>`)}catch{t.contains(document.activeElement)||(t.innerHTML=`<p class="muted">Could not refresh hand raises.</p>`)}}async function wt(e){let t=document.querySelector(`#listener-count`);if(t)try{let{channels:n}=await D(`/api/channels`);t.textContent=String(n.find(t=>t.id===e.roomId)?.listeners??0)}catch{t.textContent=`0`}}async function Tt(){if(!W)return;let e=document.querySelector(`#broadcast-note`),t=document.querySelector(`[data-start-event]`);if(!W.event.broadcastUrl){e&&(e.textContent=`Add a Pairux or Nixamp broadcast link with Edit event first.`);return}if(t?.getAttribute(`aria-disabled`)!==`true`){t?.setAttribute(`aria-disabled`,`true`);try{W=await D(`/api/v1/events/${encodeURIComponent(W.event.id)}/start`,{method:`POST`,body:JSON.stringify({version:W.event.version})}),t&&(t.textContent=`Class is live`),document.querySelector(`[data-end-event]`)?.removeAttribute(`hidden`);let n=document.querySelector(`.event-heading .status-pill`);n&&(g(n,()=>p(`Live now`)),n.classList.add(`status-live`)),e&&(e.textContent=`Your class is live. Viewers can join using this page.`)}catch(n){t?.removeAttribute(`aria-disabled`),e&&(e.textContent=n instanceof Error?n.message:`Could not start the class.`)}}}async function Et(){let e=document.querySelector(`[data-end-event]`);if(!W||e?.getAttribute(`aria-disabled`)===`true`)return;e?.setAttribute(`aria-disabled`,`true`);let t=W.event;try{let e=await D(`/api/v1/events/${encodeURIComponent(t.id)}/end`,{method:`POST`,body:JSON.stringify({version:t.version})});W=e;let n=document.querySelector(`.event-heading .status-pill`);n&&(n.textContent=J(e.event),n.classList.remove(`status-live`)),await fetch(`/api/channels/${encodeURIComponent(t.roomId)}`,{method:`DELETE`,credentials:`same-origin`});let r=document.querySelector(`#broadcast-note`);r&&(r.textContent=e.event.recurrence?`Session ended. Next class: ${rt(e.event.startsAt)}. End the broadcast in Pairux or Nixamp too.`:`Event ended. End the broadcast in Pairux or Nixamp too.`);let i=document.querySelector(`[data-end-event]`);i&&(g(i,()=>p(`Session ended`)),i.setAttribute(`aria-disabled`,`true`)),nt(`This session has ended. Refresh to see the latest schedule.`)}catch(t){e?.removeAttribute(`aria-disabled`);let n=document.querySelector(`#broadcast-note`);n&&(n.textContent=t instanceof Error?t.message:`Could not end the event.`)}}async function $(){U?.(),U=null,W=null;let e=/^\/live\/([^/]+)\/?$/.exec(location.pathname);try{e?await bt(decodeURIComponent(e[1])):await gt()}catch(e){we.innerHTML=`<section class="error-page"><span class="eyebrow">Class dismissed?</span><h1>${G(e instanceof E&&e.status===404?`That live event isn’t available.`:`We couldn’t open this page.`)}</h1><p>${G(e instanceof Error?e.message:`Try again in a moment.`)}</p><a href="/" data-link class="button button-primary">Back to live events</a></section>`}}Te.addEventListener(`click`,()=>{if(!L){X();return}Q()}),document.querySelector(`#settings-signout`).addEventListener(`click`,()=>{L&&D(`/api/v1/auth/logout`,{method:`POST`}).finally(()=>{L=null,R=null,z=null,Y(),Ie.close(),$()})}),Le.addEventListener(`submit`,e=>{e.preventDefault();let t=new FormData(Le),n=Le.querySelector(`button[type="submit"]`);n.disabled=!0,ct({name:t.get(`name`),homepage:t.get(`homepage`),bio:t.get(`bio`),avatarUrl:t.get(`avatarUrl`)}).then(e=>{e&&(M.textContent=`Saved. Every class you host shows this.`)}).finally(()=>{n.disabled=!1})}),Be.addEventListener(`change`,()=>{let e=Be.files?.[0];if(e){if(N.textContent=``,e.size>1048576){N.textContent=`A photo may be up to 1 MB.`,Be.value=``;return}fetch(`/api/v1/me/profile/photo`,{method:`PUT`,credentials:`same-origin`,body:e}).then(async e=>{let t=await e.json();if(!e.ok)throw Error(t.error??`That photo could not be kept.`);R=t,Z(),M.textContent=`Photo saved.`}).catch(e=>{N.textContent=e instanceof Error?e.message:`That photo could not be kept.`}).finally(()=>{Be.value=``})}}),Ve.addEventListener(`click`,()=>{D(`/api/v1/me/profile/photo`,{method:`DELETE`}).then(e=>{R=e,Z(),M.textContent=`Photo removed.`}).catch(e=>{N.textContent=e instanceof Error?e.message:`Could not remove the photo.`})}),He.addEventListener(`submit`,e=>{e.preventDefault(),We.textContent=``;let t=He.querySelector(`button[type="submit"]`);t.disabled=!0,D(`/api/v1/me/profile/import`,{method:`POST`,body:JSON.stringify({url:Ue.value.trim()})}).then(e=>{R=e,Z(),Y(),M.textContent=`Filled from your OpenProfile.`}).catch(e=>{We.textContent=e instanceof Error?e.message:`That profile could not be read.`}).finally(()=>{t.disabled=!1})}),P.addEventListener(`click`,()=>{P.disabled=!0,D(`/api/v1/nixamp/connection`,{method:`DELETE`}).then(()=>ot()).then(()=>{Z(),M.textContent=`nixamp disconnected. Your classes here are untouched.`}).finally(()=>{P.disabled=!1})}),F.addEventListener(`change`,()=>{F.value!==``&&(j.elements.namedItem(`broadcastUrl`).value=F.value)}),Ae.addEventListener(`click`,()=>{B=!B,ke.textContent=``,dt()}),k.addEventListener(`submit`,e=>{e.preventDefault();let t=new FormData(k),n=k.querySelector(`button[type="submit"]`);n.disabled=!0,ke.textContent=``,D(`/api/v1/auth/${B?`signup`:`login`}`,{method:`POST`,body:JSON.stringify({email:t.get(`email`),password:t.get(`password`)})}).then(e=>{L=e.account,Y(),ot(),k.reset(),Ee.close();let t=Xe;Xe=null,t?t():$()}).catch(e=>{ke.textContent=e instanceof Error?e.message:`That did not work.`}).finally(()=>{n.disabled=!1})}),j.querySelector(`[name="recurrence"]`)?.addEventListener(`change`,()=>{j.elements.namedItem(`recurrence`).value!==`none`&&(V=!0,Fe.hidden=!1,j.elements.namedItem(`startsAt`).required=!0)}),j.addEventListener(`submit`,e=>{if(e.preventDefault(),Ye)return;let t=new FormData(j),n=H,r=String(t.get(`startsAt`)??``),i=!n?.startsAt||r!==ft(n.startsAt),a=String(t.get(`recurrence`));if(a!==`none`&&!r&&!V){V=!0,Fe.hidden=!1,j.elements.namedItem(`startsAt`).required=!0,Pe.textContent=`Choose the first class date and time for this recurring schedule.`;return}Ye=!0,Ne.setAttribute(`aria-disabled`,`true`),j.setAttribute(`aria-busy`,`true`),Pe.textContent=``;let o={title:t.get(`title`),description:t.get(`description`),topic:t.get(`topic`),visibility:t.get(`visibility`),broadcastUrl:t.get(`broadcastUrl`),recurrence:a,chatEnabled:t.get(`chatEnabled`)===`on`,handRaiseEnabled:t.get(`handRaiseEnabled`)===`on`,...n?{version:n.version}:{kind:`class`},...V?{startsAt:r?i?new Date(r).toISOString():n.startsAt:null,timezone:i?Intl.DateTimeFormat().resolvedOptions().timeZone||`UTC`:n.timezone,expectedDurationMinutes:Number(t.get(`expectedDurationMinutes`))}:{}};D(n?`/api/v1/events/${encodeURIComponent(n.id)}`:`/api/v1/events`,{method:n?`PATCH`:`POST`,body:JSON.stringify(o)}).then(async e=>{n?(await bt(e.event.slug),A.close(),document.querySelector(`[data-edit-event]`)?.focus({preventScroll:!0})):(A.close(),mt(K(e.event))),j.reset(),H=null}).catch(e=>{Pe.textContent=e instanceof Error?e.message:`Could not save the event.`}).finally(()=>{Ye=!1,Ne.removeAttribute(`aria-disabled`),j.removeAttribute(`aria-busy`)})}),document.addEventListener(`click`,e=>{let t=e.target,n=t.closest(`a[data-link]`);if(n&&n.origin===location.origin){e.preventDefault(),mt(`${n.pathname}${n.search}`);return}let r=t.closest(`[data-event-mode]`)?.dataset.eventMode;(r===`live`||r===`scheduled`)&&pt(r),t.closest(`[data-sign-in]`)&&X(()=>void $()),t.closest(`[data-open-settings]`)&&(A.close(),Q());let i=t.closest(`[data-close]`);i&&i.closest(`dialog`)?.close();let a=t.closest(`[data-hand]`);a&&W&&(a.disabled=!0,ie(`/api/v1/events/${encodeURIComponent(W.event.id)}/hand-raises/${encodeURIComponent(a.dataset.hand??``)}`,{state:a.dataset.state},`PATCH`).then(()=>Ct(W.event)).finally(()=>{a.disabled=!1}))}),window.addEventListener(`popstate`,()=>void $());function Dt(){let e=new URLSearchParams(location.search),t=e.get(`nixamp`);if(!t)return``;let n=e.get(`reason`)??``;return history.replaceState(null,``,`${location.pathname}${location.hash}`),t===`connected`?`nixamp connected. Your live streams appear when you go live.`:t===`denied`?`You said not now on nixamp.com. Nothing was connected.`:`nixamp could not be connected${n?`: ${n}`:`.`}`}at().then(()=>{let e=Dt();return(e!==``||location.hash===`#settings`)&&(location.hash===`#settings`&&history.replaceState(null,``,location.pathname),Q(e)),$()});export{e as n,u as t};
@@ -1 +1 @@
1
- import{t as e}from"./index-DDGO_FOw.js";var t={...e,"No parties live right now.":`Nessun party in diretta al momento.`,"Could not refresh parties.":`Impossibile aggiornare i party.`,"Pick a server in the directory, or paste its link here.":`Scegli un server dalla directory o incolla qui il suo link.`,"Interface language":`Lingua dell’interfaccia`,Language:`Lingua`,"Translation language":`Lingua di traduzione`,"Original (auto-detect)":`Originale (rilevamento automatico)`,Play:`Riproduci`,Pause:`Pausa`,Stop:`Interrompi`,Next:`Successivo`,Previous:`Precedente`,Select:`Seleziona`,"Next/Prev":`Successivo/Precedente`,Quit:`Esci`,"Now Playing":`In riproduzione`,"Spectrum Analyser":`Analizzatore di spettro`,Playlist:`Playlist`,Files:`File`,"Open files":`Apri file`,"Open folder":`Apri cartella`,"Add to library":`Aggiungi alla libreria`,"Replace playlist":`Sostituisci playlist`,Filter:`Filtra`,Search:`Cerca`,"Nothing loaded.":`Nessun contenuto caricato.`,"Empty.":`Vuoto.`,"Loading…":`Caricamento…`,"Connecting…":`Connessione…`,Connected:`Connesso`,"Not connected":`Non connesso`,"No source":`Nessuna sorgente`,Playing:`In riproduzione`,Stopped:`Interrotto`,Volume:`Volume`,Seek:`Posizione di riproduzione`,"Full screen":`Schermo intero`,Download:`Scarica`,Share:`Condividi`,Copy:`Copia`,"Copy link":`Copia link`,Copied:`Copiato`,Save:`Salva`,Cancel:`Annulla`,Close:`Chiudi`,Remove:`Rimuovi`,Delete:`Elimina`,Edit:`Modifica`,Add:`Aggiungi`,Send:`Invia`,Retry:`Riprova`,Back:`Indietro`,"Next page":`Pagina successiva`,"Previous page":`Pagina precedente`,"Show more":`Mostra altro`,Panels:`Pannelli`,"Reset layout":`Ripristina disposizione`,Show:`Mostra`,Hide:`Nascondi`,Collapse:`Comprimi`,Expand:`Espandi`,"Move up":`Sposta su`,"Move down":`Sposta giù`,Install:`Installa`,"TV mode":`Modalità TV`,On:`Attivo`,Off:`Disattivo`,Account:`Account`,"Sign in":`Accedi`,"Sign out":`Esci dall’account`,"Create account":`Crea account`,Email:`E-mail`,Password:`Password`,"Forgot password?":`Password dimenticata?`,"Welcome back":`Bentornato`,Profile:`Profilo`,Handle:`Nome utente`,"Your servers":`I tuoi server`,Server:`Server`,Connect:`Connetti`,Disconnect:`Disconnetti`,Directory:`Elenco`,Favourites:`Preferiti`,Follow:`Segui`,Unfollow:`Non seguire più`,Notifications:`Notifiche`,"Phone number":`Numero di telefono`,"Save number":`Salva numero`,Transcript:`Trascrizione`,Captions:`Sottotitoli`,"Translate audio":`Traduci audio`,"Audio language":`Lingua audio`,"Audio options":`Opzioni audio`,"Keep background sound":`Mantieni suoni di sottofondo`,"Background level":`Volume di sottofondo`,"Speaker voices":`Voci dei parlanti`,"Any voice":`Qualsiasi voce`,"Male voice":`Voce maschile`,"Female voice":`Voce femminile`,"Original audio.":`Audio originale.`,"Buy translated audio":`Acquista audio tradotto`,"Audio credit":`Credito audio`,"Buy pass":`Acquista pass`,Pass:`Pass`,"Pay with":`Paga con`,"Check payment":`Verifica pagamento`,"Open checkout":`Vai al pagamento`,"Free sessions":`Sessioni gratuite`,"Usage rates and expiry":`Tariffe e scadenza`,Catalogs:`Cataloghi`,"Add catalog":`Aggiungi catalogo`,"Catalog name":`Nome del catalogo`,Link:`Link`,"Play link":`Riproduci link`,"Go live":`Vai in diretta`,Publish:`Pubblica`,Listen:`Ascolta`,"Live now":`In diretta`,Upcoming:`In programma`,Parties:`Feste`,"Join party":`Partecipa alla festa`,"Invite code":`Codice d’invito`,Invite:`Invita`,Chat:`Chat`,"Chat message":`Messaggio in chat`,People:`Persone`,Speaker:`Parlante`,Speakers:`Parlanti`,Listener:`Ascoltatore`,Moderator:`Moderatore`,"Raise hand":`Alza la mano`,"Hand raises":`Mani alzate`,Questions:`Domande`,Resources:`Risorse`,Replay:`Replica`,Schedule:`Programma`,Event:`Evento`,Host:`Presentatore`,About:`Informazioni`,Stage:`Palco`,Title:`Titolo`,Description:`Descrizione`,Topic:`Argomento`,Public:`Pubblico`,"Anyone with the link":`Chiunque abbia il link`,"Invited people":`Persone invitate`,"Who can join":`Chi può partecipare`,"Date and time":`Data e ora`,"Expected length":`Durata prevista`,Repeat:`Ripeti`,"Does not repeat":`Non si ripete`,"Every day":`Ogni giorno`,"Every week":`Ogni settimana`,Homepage:`Sito web`,"Host name":`Nome del presentatore`,"Profile photo URL":`URL della foto del profilo`,"Broadcast link":`Link della trasmissione`,"Edit event":`Modifica evento`,"Save changes":`Salva modifiche`,"Create live":`Crea diretta`,"Schedule class":`Programma lezione`,"Start class":`Inizia lezione`,"End event":`Termina evento`,"End session":`Termina sessione`,"Session ended":`Sessione terminata`,"Event ended":`Evento terminato`,Cancelled:`Annullato`,"Replay available":`Replica disponibile`,Join:`Partecipa`,"Create invite":`Crea invito`,"Invite as":`Invita come`,"Watch now":`Guarda ora`,"Start a room":`Crea una stanza`,"Recent replays":`Repliche recenti`,"Your account":`Il tuo account`,"Write with AI":`Scrivi con l’IA`,"Suggested title":`Titolo suggerito`,"Suggested description":`Descrizione suggerita`,"Suggested topic":`Argomento suggerito`,"Use these details":`Usa questi dettagli`,"Learn something live.":`Impara qualcosa in diretta.`,"Screen share":`Condividi schermo`,"Upload and broadcast":`Carica e trasmetti`,Help:`Aiuto`,"Reload Player":`Ricarica lettore`,"Copy Bundled CLI Path":`Copia percorso della CLI inclusa`,"Developer tools":`Strumenti per sviluppatori`,Undo:`Annulla`,Redo:`Ripeti`,Cut:`Taglia`,Paste:`Incolla`,"Select all":`Seleziona tutto`,Status:`Stato`,"Activity log":`Registro attività`,Admin:`Amministrazione`,"Playback controls":`Controlli di riproduzione`,"Tracks and folders":`Tracce e cartelle`,"Original-language captions.":`Sottotitoli in lingua originale.`,"Skip to playback controls":`Vai ai controlli di riproduzione`,"Skip to playlist":`Vai alla playlist`,"Skip to transcript and translated audio":`Vai alla trascrizione e all’audio tradotto`};export{t as default};
1
+ import{n as e}from"./index-Dovv39gH.js";var t={...e,"No parties live right now.":`Nessun party in diretta al momento.`,"Could not refresh parties.":`Impossibile aggiornare i party.`,"Pick a server in the directory, or paste its link here.":`Scegli un server dalla directory o incolla qui il suo link.`,"Interface language":`Lingua dell’interfaccia`,Language:`Lingua`,"Translation language":`Lingua di traduzione`,"Original (auto-detect)":`Originale (rilevamento automatico)`,Play:`Riproduci`,Pause:`Pausa`,Stop:`Interrompi`,Next:`Successivo`,Previous:`Precedente`,Select:`Seleziona`,"Next/Prev":`Successivo/Precedente`,Quit:`Esci`,"Now Playing":`In riproduzione`,"Spectrum Analyser":`Analizzatore di spettro`,Playlist:`Playlist`,Files:`File`,"Open files":`Apri file`,"Open folder":`Apri cartella`,"Add to library":`Aggiungi alla libreria`,"Replace playlist":`Sostituisci playlist`,Filter:`Filtra`,Search:`Cerca`,"Nothing loaded.":`Nessun contenuto caricato.`,"Empty.":`Vuoto.`,"Loading…":`Caricamento…`,"Connecting…":`Connessione…`,Connected:`Connesso`,"Not connected":`Non connesso`,"No source":`Nessuna sorgente`,Playing:`In riproduzione`,Stopped:`Interrotto`,Volume:`Volume`,Seek:`Posizione di riproduzione`,"Full screen":`Schermo intero`,Download:`Scarica`,Share:`Condividi`,Copy:`Copia`,"Copy link":`Copia link`,Copied:`Copiato`,Save:`Salva`,Cancel:`Annulla`,Close:`Chiudi`,Remove:`Rimuovi`,Delete:`Elimina`,Edit:`Modifica`,Add:`Aggiungi`,Send:`Invia`,Retry:`Riprova`,Back:`Indietro`,"Next page":`Pagina successiva`,"Previous page":`Pagina precedente`,"Show more":`Mostra altro`,Panels:`Pannelli`,"Reset layout":`Ripristina disposizione`,Show:`Mostra`,Hide:`Nascondi`,Collapse:`Comprimi`,Expand:`Espandi`,"Move up":`Sposta su`,"Move down":`Sposta giù`,Install:`Installa`,"TV mode":`Modalità TV`,On:`Attivo`,Off:`Disattivo`,Account:`Account`,"Sign in":`Accedi`,"Sign out":`Esci dall’account`,"Create account":`Crea account`,Email:`E-mail`,Password:`Password`,"Forgot password?":`Password dimenticata?`,"Welcome back":`Bentornato`,Profile:`Profilo`,Handle:`Nome utente`,"Your servers":`I tuoi server`,Server:`Server`,Connect:`Connetti`,Disconnect:`Disconnetti`,Directory:`Elenco`,Favourites:`Preferiti`,Follow:`Segui`,Unfollow:`Non seguire più`,Notifications:`Notifiche`,"Phone number":`Numero di telefono`,"Save number":`Salva numero`,Transcript:`Trascrizione`,Captions:`Sottotitoli`,"Translate audio":`Traduci audio`,"Audio language":`Lingua audio`,"Audio options":`Opzioni audio`,"Keep background sound":`Mantieni suoni di sottofondo`,"Background level":`Volume di sottofondo`,"Speaker voices":`Voci dei parlanti`,"Any voice":`Qualsiasi voce`,"Male voice":`Voce maschile`,"Female voice":`Voce femminile`,"Original audio.":`Audio originale.`,"Buy translated audio":`Acquista audio tradotto`,"Audio credit":`Credito audio`,"Buy pass":`Acquista pass`,Pass:`Pass`,"Pay with":`Paga con`,"Check payment":`Verifica pagamento`,"Open checkout":`Vai al pagamento`,"Free sessions":`Sessioni gratuite`,"Usage rates and expiry":`Tariffe e scadenza`,Catalogs:`Cataloghi`,"Add catalog":`Aggiungi catalogo`,"Catalog name":`Nome del catalogo`,Link:`Link`,"Play link":`Riproduci link`,"Go live":`Vai in diretta`,Publish:`Pubblica`,Listen:`Ascolta`,"Live now":`In diretta`,Upcoming:`In programma`,Parties:`Feste`,"Join party":`Partecipa alla festa`,"Invite code":`Codice d’invito`,Invite:`Invita`,Chat:`Chat`,"Chat message":`Messaggio in chat`,People:`Persone`,Speaker:`Parlante`,Speakers:`Parlanti`,Listener:`Ascoltatore`,Moderator:`Moderatore`,"Raise hand":`Alza la mano`,"Hand raises":`Mani alzate`,Questions:`Domande`,Resources:`Risorse`,Replay:`Replica`,Schedule:`Programma`,Event:`Evento`,Host:`Presentatore`,About:`Informazioni`,Stage:`Palco`,Title:`Titolo`,Description:`Descrizione`,Topic:`Argomento`,Public:`Pubblico`,"Anyone with the link":`Chiunque abbia il link`,"Invited people":`Persone invitate`,"Who can join":`Chi può partecipare`,"Date and time":`Data e ora`,"Expected length":`Durata prevista`,Repeat:`Ripeti`,"Does not repeat":`Non si ripete`,"Every day":`Ogni giorno`,"Every week":`Ogni settimana`,Homepage:`Sito web`,"Host name":`Nome del presentatore`,"Profile photo URL":`URL della foto del profilo`,"Broadcast link":`Link della trasmissione`,"Edit event":`Modifica evento`,"Save changes":`Salva modifiche`,"Create live":`Crea diretta`,"Schedule class":`Programma lezione`,"Start class":`Inizia lezione`,"End event":`Termina evento`,"End session":`Termina sessione`,"Session ended":`Sessione terminata`,"Event ended":`Evento terminato`,Cancelled:`Annullato`,"Replay available":`Replica disponibile`,Join:`Partecipa`,"Create invite":`Crea invito`,"Invite as":`Invita come`,"Watch now":`Guarda ora`,"Start a room":`Crea una stanza`,"Recent replays":`Repliche recenti`,"Your account":`Il tuo account`,"Write with AI":`Scrivi con l’IA`,"Suggested title":`Titolo suggerito`,"Suggested description":`Descrizione suggerita`,"Suggested topic":`Argomento suggerito`,"Use these details":`Usa questi dettagli`,"Learn something live.":`Impara qualcosa in diretta.`,"Screen share":`Condividi schermo`,"Upload and broadcast":`Carica e trasmetti`,Help:`Aiuto`,"Reload Player":`Ricarica lettore`,"Copy Bundled CLI Path":`Copia percorso della CLI inclusa`,"Developer tools":`Strumenti per sviluppatori`,Undo:`Annulla`,Redo:`Ripeti`,Cut:`Taglia`,Paste:`Incolla`,"Select all":`Seleziona tutto`,Status:`Stato`,"Activity log":`Registro attività`,Admin:`Amministrazione`,"Playback controls":`Controlli di riproduzione`,"Tracks and folders":`Tracce e cartelle`,"Original-language captions.":`Sottotitoli in lingua originale.`,"Skip to playback controls":`Vai ai controlli di riproduzione`,"Skip to playlist":`Vai alla playlist`,"Skip to transcript and translated audio":`Vai alla trascrizione e all’audio tradotto`};export{t as default};