karaoke-gen 0.103.1__py3-none-any.whl → 0.107.0__py3-none-any.whl

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 (339) hide show
  1. backend/Dockerfile.base +1 -0
  2. backend/api/routes/admin.py +226 -3
  3. backend/api/routes/push.py +238 -0
  4. backend/api/routes/users.py +14 -3
  5. backend/config.py +12 -1
  6. backend/main.py +2 -1
  7. backend/models/job.py +4 -0
  8. backend/models/user.py +20 -2
  9. backend/services/encoding_interface.py +4 -0
  10. backend/services/gce_encoding/main.py +22 -8
  11. backend/services/job_manager.py +68 -11
  12. backend/services/job_notification_service.py +4 -21
  13. backend/services/push_notification_service.py +409 -0
  14. backend/services/stripe_service.py +2 -2
  15. backend/tests/conftest.py +2 -1
  16. backend/tests/test_admin_delete_outputs.py +352 -0
  17. backend/tests/test_gce_encoding_worker.py +229 -0
  18. backend/tests/test_impersonation.py +18 -3
  19. backend/tests/test_job_notification_service.py +24 -58
  20. backend/tests/test_push_notification_service.py +460 -0
  21. backend/tests/test_push_routes.py +357 -0
  22. backend/tests/test_stripe_service.py +205 -0
  23. backend/tests/test_video_worker_orchestrator.py +189 -0
  24. backend/workers/video_worker_orchestrator.py +23 -0
  25. karaoke_gen/instrumental_review/server.py +145 -35
  26. karaoke_gen/nextjs_frontend/__init__.py +98 -0
  27. karaoke_gen/nextjs_frontend/out/404/index.html +1 -0
  28. karaoke_gen/nextjs_frontend/out/404.html +1 -0
  29. karaoke_gen/nextjs_frontend/out/__next.__PAGE__.txt +9 -0
  30. karaoke_gen/nextjs_frontend/out/__next._full.txt +22 -0
  31. karaoke_gen/nextjs_frontend/out/__next._head.txt +8 -0
  32. karaoke_gen/nextjs_frontend/out/__next._index.txt +9 -0
  33. karaoke_gen/nextjs_frontend/out/__next._tree.txt +2 -0
  34. karaoke_gen/nextjs_frontend/out/_next/static/chunks/01a7f8fe40f1ff47.js +1 -0
  35. karaoke_gen/nextjs_frontend/out/_next/static/chunks/112f346e31f991df.js +4 -0
  36. karaoke_gen/nextjs_frontend/out/_next/static/chunks/16d1a4dd9d8a873a.js +3 -0
  37. karaoke_gen/nextjs_frontend/out/_next/static/chunks/1ab85c362b8b0e86.js +9 -0
  38. karaoke_gen/nextjs_frontend/out/_next/static/chunks/247eb132b7f7b574.js +1 -0
  39. karaoke_gen/nextjs_frontend/out/_next/static/chunks/2b80d15cc95e4818.js +1 -0
  40. karaoke_gen/nextjs_frontend/out/_next/static/chunks/32c7eba5cd46c1bc.js +7 -0
  41. karaoke_gen/nextjs_frontend/out/_next/static/chunks/483f26794eae53d0.js +1 -0
  42. karaoke_gen/nextjs_frontend/out/_next/static/chunks/550c3b02e85f196a.js +1 -0
  43. karaoke_gen/nextjs_frontend/out/_next/static/chunks/55c5ade44387bef8.js +1 -0
  44. karaoke_gen/nextjs_frontend/out/_next/static/chunks/5628d92b5893add2.css +1 -0
  45. karaoke_gen/nextjs_frontend/out/_next/static/chunks/56ebf7665e4341c8.js +7 -0
  46. karaoke_gen/nextjs_frontend/out/_next/static/chunks/5997132b61dec430.js +1 -0
  47. karaoke_gen/nextjs_frontend/out/_next/static/chunks/5ea55255bce3eb9e.js +5 -0
  48. karaoke_gen/nextjs_frontend/out/_next/static/chunks/5eda89a57490b3cd.js +1 -0
  49. karaoke_gen/nextjs_frontend/out/_next/static/chunks/692f5d9e0d700c76.js +3 -0
  50. karaoke_gen/nextjs_frontend/out/_next/static/chunks/71d7a05b14f9f0f4.js +1 -0
  51. karaoke_gen/nextjs_frontend/out/_next/static/chunks/81ac355749ef3302.js +1 -0
  52. karaoke_gen/nextjs_frontend/out/_next/static/chunks/95f7e5934dbb0e5d.js +1 -0
  53. karaoke_gen/nextjs_frontend/out/_next/static/chunks/9bce8f19eaa46940.js +1 -0
  54. karaoke_gen/nextjs_frontend/out/_next/static/chunks/a6dad97d9634a72d.js +1 -0
  55. karaoke_gen/nextjs_frontend/out/_next/static/chunks/a9ed54eed3e14c92.js +2 -0
  56. karaoke_gen/nextjs_frontend/out/_next/static/chunks/b35cd41238ecfb17.js +1 -0
  57. karaoke_gen/nextjs_frontend/out/_next/static/chunks/b5bc3c3d5ebd49eb.js +1 -0
  58. karaoke_gen/nextjs_frontend/out/_next/static/chunks/b5c078c08db5ae32.js +5 -0
  59. karaoke_gen/nextjs_frontend/out/_next/static/chunks/be9c44a178104187.js +1 -0
  60. karaoke_gen/nextjs_frontend/out/_next/static/chunks/c4c840e18cb4861c.js +1 -0
  61. karaoke_gen/nextjs_frontend/out/_next/static/chunks/c645af7d6b65f73e.js +1 -0
  62. karaoke_gen/nextjs_frontend/out/_next/static/chunks/d2c5e2575df784d4.js +1 -0
  63. karaoke_gen/nextjs_frontend/out/_next/static/chunks/d30af02b96d81462.js +1 -0
  64. karaoke_gen/nextjs_frontend/out/_next/static/chunks/d9bdf64f4ec1e9b7.js +7 -0
  65. karaoke_gen/nextjs_frontend/out/_next/static/chunks/dcde6ed684dacd0e.js +5 -0
  66. karaoke_gen/nextjs_frontend/out/_next/static/chunks/e422cbe931246000.js +1 -0
  67. karaoke_gen/nextjs_frontend/out/_next/static/chunks/e483af34fc792d38.js +1 -0
  68. karaoke_gen/nextjs_frontend/out/_next/static/chunks/e57422aad6b897da.js +1 -0
  69. karaoke_gen/nextjs_frontend/out/_next/static/chunks/ef02697fb404726a.js +1 -0
  70. karaoke_gen/nextjs_frontend/out/_next/static/chunks/ff1a16fafef87110.js +1 -0
  71. karaoke_gen/nextjs_frontend/out/_next/static/chunks/turbopack-2d9ca3017a9deedf.js +3 -0
  72. karaoke_gen/nextjs_frontend/out/_next/static/zpw_-rjFIDV5tlPPtnvRI/_buildManifest.js +11 -0
  73. karaoke_gen/nextjs_frontend/out/_next/static/zpw_-rjFIDV5tlPPtnvRI/_clientMiddlewareManifest.json +1 -0
  74. karaoke_gen/nextjs_frontend/out/_next/static/zpw_-rjFIDV5tlPPtnvRI/_ssgManifest.js +1 -0
  75. karaoke_gen/nextjs_frontend/out/_not-found/__next._full.txt +18 -0
  76. karaoke_gen/nextjs_frontend/out/_not-found/__next._head.txt +8 -0
  77. karaoke_gen/nextjs_frontend/out/_not-found/__next._index.txt +9 -0
  78. karaoke_gen/nextjs_frontend/out/_not-found/__next._not-found.__PAGE__.txt +5 -0
  79. karaoke_gen/nextjs_frontend/out/_not-found/__next._not-found.txt +4 -0
  80. karaoke_gen/nextjs_frontend/out/_not-found/__next._tree.txt +2 -0
  81. karaoke_gen/nextjs_frontend/out/_not-found/index.html +1 -0
  82. karaoke_gen/nextjs_frontend/out/_not-found/index.txt +18 -0
  83. karaoke_gen/nextjs_frontend/out/admin/__next._full.txt +25 -0
  84. karaoke_gen/nextjs_frontend/out/admin/__next._head.txt +8 -0
  85. karaoke_gen/nextjs_frontend/out/admin/__next._index.txt +9 -0
  86. karaoke_gen/nextjs_frontend/out/admin/__next._tree.txt +2 -0
  87. karaoke_gen/nextjs_frontend/out/admin/__next.admin.__PAGE__.txt +9 -0
  88. karaoke_gen/nextjs_frontend/out/admin/__next.admin.txt +7 -0
  89. karaoke_gen/nextjs_frontend/out/admin/beta/__next._full.txt +25 -0
  90. karaoke_gen/nextjs_frontend/out/admin/beta/__next._head.txt +8 -0
  91. karaoke_gen/nextjs_frontend/out/admin/beta/__next._index.txt +9 -0
  92. karaoke_gen/nextjs_frontend/out/admin/beta/__next._tree.txt +2 -0
  93. karaoke_gen/nextjs_frontend/out/admin/beta/__next.admin.beta.__PAGE__.txt +9 -0
  94. karaoke_gen/nextjs_frontend/out/admin/beta/__next.admin.beta.txt +4 -0
  95. karaoke_gen/nextjs_frontend/out/admin/beta/__next.admin.txt +7 -0
  96. karaoke_gen/nextjs_frontend/out/admin/beta/index.html +1 -0
  97. karaoke_gen/nextjs_frontend/out/admin/beta/index.txt +25 -0
  98. karaoke_gen/nextjs_frontend/out/admin/index.html +1 -0
  99. karaoke_gen/nextjs_frontend/out/admin/index.txt +25 -0
  100. karaoke_gen/nextjs_frontend/out/admin/jobs/__next._full.txt +25 -0
  101. karaoke_gen/nextjs_frontend/out/admin/jobs/__next._head.txt +8 -0
  102. karaoke_gen/nextjs_frontend/out/admin/jobs/__next._index.txt +9 -0
  103. karaoke_gen/nextjs_frontend/out/admin/jobs/__next._tree.txt +2 -0
  104. karaoke_gen/nextjs_frontend/out/admin/jobs/__next.admin.jobs.__PAGE__.txt +9 -0
  105. karaoke_gen/nextjs_frontend/out/admin/jobs/__next.admin.jobs.txt +4 -0
  106. karaoke_gen/nextjs_frontend/out/admin/jobs/__next.admin.txt +7 -0
  107. karaoke_gen/nextjs_frontend/out/admin/jobs/index.html +1 -0
  108. karaoke_gen/nextjs_frontend/out/admin/jobs/index.txt +25 -0
  109. karaoke_gen/nextjs_frontend/out/admin/rate-limits/__next._full.txt +25 -0
  110. karaoke_gen/nextjs_frontend/out/admin/rate-limits/__next._head.txt +8 -0
  111. karaoke_gen/nextjs_frontend/out/admin/rate-limits/__next._index.txt +9 -0
  112. karaoke_gen/nextjs_frontend/out/admin/rate-limits/__next._tree.txt +2 -0
  113. karaoke_gen/nextjs_frontend/out/admin/rate-limits/__next.admin.rate-limits.__PAGE__.txt +9 -0
  114. karaoke_gen/nextjs_frontend/out/admin/rate-limits/__next.admin.rate-limits.txt +4 -0
  115. karaoke_gen/nextjs_frontend/out/admin/rate-limits/__next.admin.txt +7 -0
  116. karaoke_gen/nextjs_frontend/out/admin/rate-limits/index.html +1 -0
  117. karaoke_gen/nextjs_frontend/out/admin/rate-limits/index.txt +25 -0
  118. karaoke_gen/nextjs_frontend/out/admin/searches/__next._full.txt +25 -0
  119. karaoke_gen/nextjs_frontend/out/admin/searches/__next._head.txt +8 -0
  120. karaoke_gen/nextjs_frontend/out/admin/searches/__next._index.txt +9 -0
  121. karaoke_gen/nextjs_frontend/out/admin/searches/__next._tree.txt +2 -0
  122. karaoke_gen/nextjs_frontend/out/admin/searches/__next.admin.searches.__PAGE__.txt +9 -0
  123. karaoke_gen/nextjs_frontend/out/admin/searches/__next.admin.searches.txt +4 -0
  124. karaoke_gen/nextjs_frontend/out/admin/searches/__next.admin.txt +7 -0
  125. karaoke_gen/nextjs_frontend/out/admin/searches/index.html +1 -0
  126. karaoke_gen/nextjs_frontend/out/admin/searches/index.txt +25 -0
  127. karaoke_gen/nextjs_frontend/out/admin/users/__next._full.txt +25 -0
  128. karaoke_gen/nextjs_frontend/out/admin/users/__next._head.txt +8 -0
  129. karaoke_gen/nextjs_frontend/out/admin/users/__next._index.txt +9 -0
  130. karaoke_gen/nextjs_frontend/out/admin/users/__next._tree.txt +2 -0
  131. karaoke_gen/nextjs_frontend/out/admin/users/__next.admin.txt +7 -0
  132. karaoke_gen/nextjs_frontend/out/admin/users/__next.admin.users.__PAGE__.txt +9 -0
  133. karaoke_gen/nextjs_frontend/out/admin/users/__next.admin.users.txt +4 -0
  134. karaoke_gen/nextjs_frontend/out/admin/users/detail/__next._full.txt +25 -0
  135. karaoke_gen/nextjs_frontend/out/admin/users/detail/__next._head.txt +8 -0
  136. karaoke_gen/nextjs_frontend/out/admin/users/detail/__next._index.txt +9 -0
  137. karaoke_gen/nextjs_frontend/out/admin/users/detail/__next._tree.txt +2 -0
  138. karaoke_gen/nextjs_frontend/out/admin/users/detail/__next.admin.txt +7 -0
  139. karaoke_gen/nextjs_frontend/out/admin/users/detail/__next.admin.users.detail.__PAGE__.txt +9 -0
  140. karaoke_gen/nextjs_frontend/out/admin/users/detail/__next.admin.users.detail.txt +4 -0
  141. karaoke_gen/nextjs_frontend/out/admin/users/detail/__next.admin.users.txt +4 -0
  142. karaoke_gen/nextjs_frontend/out/admin/users/detail/index.html +1 -0
  143. karaoke_gen/nextjs_frontend/out/admin/users/detail/index.txt +25 -0
  144. karaoke_gen/nextjs_frontend/out/admin/users/index.html +1 -0
  145. karaoke_gen/nextjs_frontend/out/admin/users/index.txt +25 -0
  146. karaoke_gen/nextjs_frontend/out/app/__next._full.txt +22 -0
  147. karaoke_gen/nextjs_frontend/out/app/__next._head.txt +8 -0
  148. karaoke_gen/nextjs_frontend/out/app/__next._index.txt +9 -0
  149. karaoke_gen/nextjs_frontend/out/app/__next._tree.txt +2 -0
  150. karaoke_gen/nextjs_frontend/out/app/__next.app.__PAGE__.txt +9 -0
  151. karaoke_gen/nextjs_frontend/out/app/__next.app.txt +4 -0
  152. karaoke_gen/nextjs_frontend/out/app/index.html +1 -0
  153. karaoke_gen/nextjs_frontend/out/app/index.txt +22 -0
  154. karaoke_gen/nextjs_frontend/out/app/jobs/__next._full.txt +19 -0
  155. karaoke_gen/nextjs_frontend/out/app/jobs/__next._head.txt +8 -0
  156. karaoke_gen/nextjs_frontend/out/app/jobs/__next._index.txt +9 -0
  157. karaoke_gen/nextjs_frontend/out/app/jobs/__next._tree.txt +2 -0
  158. karaoke_gen/nextjs_frontend/out/app/jobs/__next.app.jobs.$oc$slug.__PAGE__.txt +6 -0
  159. karaoke_gen/nextjs_frontend/out/app/jobs/__next.app.jobs.$oc$slug.txt +4 -0
  160. karaoke_gen/nextjs_frontend/out/app/jobs/__next.app.jobs.txt +4 -0
  161. karaoke_gen/nextjs_frontend/out/app/jobs/__next.app.txt +4 -0
  162. karaoke_gen/nextjs_frontend/out/app/jobs/index.html +1 -0
  163. karaoke_gen/nextjs_frontend/out/app/jobs/index.txt +19 -0
  164. karaoke_gen/nextjs_frontend/out/app/jobs/local/instrumental/__next._full.txt +19 -0
  165. karaoke_gen/nextjs_frontend/out/app/jobs/local/instrumental/__next._head.txt +8 -0
  166. karaoke_gen/nextjs_frontend/out/app/jobs/local/instrumental/__next._index.txt +9 -0
  167. karaoke_gen/nextjs_frontend/out/app/jobs/local/instrumental/__next._tree.txt +2 -0
  168. karaoke_gen/nextjs_frontend/out/app/jobs/local/instrumental/__next.app.jobs.$oc$slug.__PAGE__.txt +6 -0
  169. karaoke_gen/nextjs_frontend/out/app/jobs/local/instrumental/__next.app.jobs.$oc$slug.txt +4 -0
  170. karaoke_gen/nextjs_frontend/out/app/jobs/local/instrumental/__next.app.jobs.txt +4 -0
  171. karaoke_gen/nextjs_frontend/out/app/jobs/local/instrumental/__next.app.txt +4 -0
  172. karaoke_gen/nextjs_frontend/out/app/jobs/local/instrumental/index.html +1 -0
  173. karaoke_gen/nextjs_frontend/out/app/jobs/local/instrumental/index.txt +19 -0
  174. karaoke_gen/nextjs_frontend/out/app/jobs/local/review/__next._full.txt +19 -0
  175. karaoke_gen/nextjs_frontend/out/app/jobs/local/review/__next._head.txt +8 -0
  176. karaoke_gen/nextjs_frontend/out/app/jobs/local/review/__next._index.txt +9 -0
  177. karaoke_gen/nextjs_frontend/out/app/jobs/local/review/__next._tree.txt +2 -0
  178. karaoke_gen/nextjs_frontend/out/app/jobs/local/review/__next.app.jobs.$oc$slug.__PAGE__.txt +6 -0
  179. karaoke_gen/nextjs_frontend/out/app/jobs/local/review/__next.app.jobs.$oc$slug.txt +4 -0
  180. karaoke_gen/nextjs_frontend/out/app/jobs/local/review/__next.app.jobs.txt +4 -0
  181. karaoke_gen/nextjs_frontend/out/app/jobs/local/review/__next.app.txt +4 -0
  182. karaoke_gen/nextjs_frontend/out/app/jobs/local/review/index.html +1 -0
  183. karaoke_gen/nextjs_frontend/out/app/jobs/local/review/index.txt +19 -0
  184. karaoke_gen/nextjs_frontend/out/auth/verify/__next._full.txt +22 -0
  185. karaoke_gen/nextjs_frontend/out/auth/verify/__next._head.txt +8 -0
  186. karaoke_gen/nextjs_frontend/out/auth/verify/__next._index.txt +9 -0
  187. karaoke_gen/nextjs_frontend/out/auth/verify/__next._tree.txt +2 -0
  188. karaoke_gen/nextjs_frontend/out/auth/verify/__next.auth.txt +4 -0
  189. karaoke_gen/nextjs_frontend/out/auth/verify/__next.auth.verify.__PAGE__.txt +9 -0
  190. karaoke_gen/nextjs_frontend/out/auth/verify/__next.auth.verify.txt +4 -0
  191. karaoke_gen/nextjs_frontend/out/auth/verify/index.html +1 -0
  192. karaoke_gen/nextjs_frontend/out/auth/verify/index.txt +22 -0
  193. karaoke_gen/nextjs_frontend/out/index.html +1 -0
  194. karaoke_gen/nextjs_frontend/out/index.txt +22 -0
  195. karaoke_gen/nextjs_frontend/out/manifest.webmanifest +31 -0
  196. karaoke_gen/nextjs_frontend/out/order/success/__next._full.txt +22 -0
  197. karaoke_gen/nextjs_frontend/out/order/success/__next._head.txt +8 -0
  198. karaoke_gen/nextjs_frontend/out/order/success/__next._index.txt +9 -0
  199. karaoke_gen/nextjs_frontend/out/order/success/__next._tree.txt +2 -0
  200. karaoke_gen/nextjs_frontend/out/order/success/__next.order.success.__PAGE__.txt +9 -0
  201. karaoke_gen/nextjs_frontend/out/order/success/__next.order.success.txt +4 -0
  202. karaoke_gen/nextjs_frontend/out/order/success/__next.order.txt +4 -0
  203. karaoke_gen/nextjs_frontend/out/order/success/index.html +1 -0
  204. karaoke_gen/nextjs_frontend/out/order/success/index.txt +22 -0
  205. karaoke_gen/nextjs_frontend/out/payment/success/__next._full.txt +22 -0
  206. karaoke_gen/nextjs_frontend/out/payment/success/__next._head.txt +8 -0
  207. karaoke_gen/nextjs_frontend/out/payment/success/__next._index.txt +9 -0
  208. karaoke_gen/nextjs_frontend/out/payment/success/__next._tree.txt +2 -0
  209. karaoke_gen/nextjs_frontend/out/payment/success/__next.payment.success.__PAGE__.txt +9 -0
  210. karaoke_gen/nextjs_frontend/out/payment/success/__next.payment.success.txt +4 -0
  211. karaoke_gen/nextjs_frontend/out/payment/success/__next.payment.txt +4 -0
  212. karaoke_gen/nextjs_frontend/out/payment/success/index.html +1 -0
  213. karaoke_gen/nextjs_frontend/out/payment/success/index.txt +22 -0
  214. karaoke_gen/nextjs_frontend/out/screenshots/email-action_reminder.png +0 -0
  215. karaoke_gen/nextjs_frontend/out/screenshots/email-beta_welcome.png +0 -0
  216. karaoke_gen/nextjs_frontend/out/screenshots/email-job_completion.png +0 -0
  217. karaoke_gen/nextjs_frontend/out/screenshots/example-output.avif +0 -0
  218. karaoke_gen/nextjs_frontend/out/screenshots/homepage-full.png +0 -0
  219. karaoke_gen/nextjs_frontend/out/screenshots/homepage-hero.png +0 -0
  220. karaoke_gen/nextjs_frontend/out/screenshots/instrumental-review.avif +0 -0
  221. karaoke_gen/nextjs_frontend/out/screenshots/instrumental-review.png +0 -0
  222. karaoke_gen/nextjs_frontend/out/screenshots/job-dashboard.avif +0 -0
  223. karaoke_gen/nextjs_frontend/out/screenshots/lyrics-review.avif +0 -0
  224. karaoke_gen/nextjs_frontend/out/screenshots/lyrics-review.png +0 -0
  225. karaoke_gen/nextjs_frontend/out/sw.js +183 -0
  226. karaoke_gen/utils/cli_args.py +3 -3
  227. karaoke_gen/utils/gen_cli.py +4 -0
  228. karaoke_gen/utils/remote_cli.py +8 -40
  229. {karaoke_gen-0.103.1.dist-info → karaoke_gen-0.107.0.dist-info}/METADATA +2 -1
  230. {karaoke_gen-0.103.1.dist-info → karaoke_gen-0.107.0.dist-info}/RECORD +244 -131
  231. {karaoke_gen-0.103.1.dist-info → karaoke_gen-0.107.0.dist-info}/WHEEL +1 -1
  232. lyrics_transcriber/correction/agentic/agent.py +83 -60
  233. lyrics_transcriber/correction/anchor_sequence.py +48 -3
  234. lyrics_transcriber/correction/corrector.py +92 -58
  235. lyrics_transcriber/review/server.py +165 -33
  236. lyrics_transcriber/utils/tracing.py +214 -0
  237. karaoke_gen/instrumental_review/static/index.html +0 -1695
  238. lyrics_transcriber/frontend/.gitignore +0 -24
  239. lyrics_transcriber/frontend/.yarn/releases/yarn-4.7.0.cjs +0 -935
  240. lyrics_transcriber/frontend/.yarnrc.yml +0 -3
  241. lyrics_transcriber/frontend/README.md +0 -50
  242. lyrics_transcriber/frontend/REPLACE_ALL_FUNCTIONALITY.md +0 -210
  243. lyrics_transcriber/frontend/__init__.py +0 -25
  244. lyrics_transcriber/frontend/e2e/agentic-corrections.spec.ts +0 -207
  245. lyrics_transcriber/frontend/e2e/fixtures/agentic-correction-data.json +0 -226
  246. lyrics_transcriber/frontend/eslint.config.js +0 -28
  247. lyrics_transcriber/frontend/index.html +0 -22
  248. lyrics_transcriber/frontend/package-lock.json +0 -4553
  249. lyrics_transcriber/frontend/package.json +0 -48
  250. lyrics_transcriber/frontend/playwright.config.ts +0 -69
  251. lyrics_transcriber/frontend/public/android-chrome-192x192.png +0 -0
  252. lyrics_transcriber/frontend/public/android-chrome-512x512.png +0 -0
  253. lyrics_transcriber/frontend/src/App.tsx +0 -243
  254. lyrics_transcriber/frontend/src/api.ts +0 -262
  255. lyrics_transcriber/frontend/src/components/AIFeedbackModal.tsx +0 -111
  256. lyrics_transcriber/frontend/src/components/AddLyricsModal.tsx +0 -114
  257. lyrics_transcriber/frontend/src/components/AgenticCorrectionMetrics.tsx +0 -204
  258. lyrics_transcriber/frontend/src/components/AppHeader.tsx +0 -65
  259. lyrics_transcriber/frontend/src/components/AudioPlayer.tsx +0 -180
  260. lyrics_transcriber/frontend/src/components/CorrectedWordWithActions.tsx +0 -175
  261. lyrics_transcriber/frontend/src/components/CorrectionAnnotationModal.tsx +0 -359
  262. lyrics_transcriber/frontend/src/components/CorrectionDetailCard.tsx +0 -281
  263. lyrics_transcriber/frontend/src/components/CorrectionMetrics.tsx +0 -162
  264. lyrics_transcriber/frontend/src/components/DurationTimelineView.tsx +0 -257
  265. lyrics_transcriber/frontend/src/components/EditActionBar.tsx +0 -94
  266. lyrics_transcriber/frontend/src/components/EditModal.tsx +0 -720
  267. lyrics_transcriber/frontend/src/components/EditTimelineSection.tsx +0 -592
  268. lyrics_transcriber/frontend/src/components/EditWordList.tsx +0 -431
  269. lyrics_transcriber/frontend/src/components/FileUpload.tsx +0 -77
  270. lyrics_transcriber/frontend/src/components/FindReplaceModal.tsx +0 -467
  271. lyrics_transcriber/frontend/src/components/Header.tsx +0 -520
  272. lyrics_transcriber/frontend/src/components/LyricsAnalyzer.tsx +0 -1526
  273. lyrics_transcriber/frontend/src/components/LyricsSynchronizer/SyncControls.tsx +0 -216
  274. lyrics_transcriber/frontend/src/components/LyricsSynchronizer/TimelineCanvas.tsx +0 -721
  275. lyrics_transcriber/frontend/src/components/LyricsSynchronizer/UpcomingWordsBar.tsx +0 -80
  276. lyrics_transcriber/frontend/src/components/LyricsSynchronizer/index.tsx +0 -999
  277. lyrics_transcriber/frontend/src/components/MetricsDashboard.tsx +0 -51
  278. lyrics_transcriber/frontend/src/components/ModeSelectionModal.tsx +0 -127
  279. lyrics_transcriber/frontend/src/components/ModeSelector.tsx +0 -67
  280. lyrics_transcriber/frontend/src/components/ModelSelector.tsx +0 -23
  281. lyrics_transcriber/frontend/src/components/PreviewVideoSection.tsx +0 -177
  282. lyrics_transcriber/frontend/src/components/ReferenceView.tsx +0 -268
  283. lyrics_transcriber/frontend/src/components/ReplaceAllLyricsModal.tsx +0 -336
  284. lyrics_transcriber/frontend/src/components/ReviewChangesModal.tsx +0 -354
  285. lyrics_transcriber/frontend/src/components/SegmentDetailsModal.tsx +0 -64
  286. lyrics_transcriber/frontend/src/components/TimelineEditor.tsx +0 -383
  287. lyrics_transcriber/frontend/src/components/TimingOffsetModal.tsx +0 -131
  288. lyrics_transcriber/frontend/src/components/TranscriptionView.tsx +0 -266
  289. lyrics_transcriber/frontend/src/components/WordDivider.tsx +0 -191
  290. lyrics_transcriber/frontend/src/components/shared/components/HighlightedText.tsx +0 -466
  291. lyrics_transcriber/frontend/src/components/shared/components/SourceSelector.tsx +0 -56
  292. lyrics_transcriber/frontend/src/components/shared/components/Word.tsx +0 -89
  293. lyrics_transcriber/frontend/src/components/shared/constants.ts +0 -30
  294. lyrics_transcriber/frontend/src/components/shared/hooks/useWordClick.ts +0 -180
  295. lyrics_transcriber/frontend/src/components/shared/styles.ts +0 -13
  296. lyrics_transcriber/frontend/src/components/shared/types.js +0 -2
  297. lyrics_transcriber/frontend/src/components/shared/types.ts +0 -135
  298. lyrics_transcriber/frontend/src/components/shared/utils/keyboardHandlers.ts +0 -177
  299. lyrics_transcriber/frontend/src/components/shared/utils/localStorage.ts +0 -78
  300. lyrics_transcriber/frontend/src/components/shared/utils/referenceLineCalculator.ts +0 -75
  301. lyrics_transcriber/frontend/src/components/shared/utils/segmentOperations.ts +0 -360
  302. lyrics_transcriber/frontend/src/components/shared/utils/timingUtils.ts +0 -110
  303. lyrics_transcriber/frontend/src/components/shared/utils/wordUtils.ts +0 -22
  304. lyrics_transcriber/frontend/src/hooks/useManualSync.ts +0 -537
  305. lyrics_transcriber/frontend/src/main.tsx +0 -11
  306. lyrics_transcriber/frontend/src/theme.ts +0 -406
  307. lyrics_transcriber/frontend/src/types/global.d.ts +0 -9
  308. lyrics_transcriber/frontend/src/types.js +0 -2
  309. lyrics_transcriber/frontend/src/types.ts +0 -199
  310. lyrics_transcriber/frontend/src/validation.ts +0 -132
  311. lyrics_transcriber/frontend/src/vite-env.d.ts +0 -1
  312. lyrics_transcriber/frontend/tsconfig.app.json +0 -26
  313. lyrics_transcriber/frontend/tsconfig.json +0 -25
  314. lyrics_transcriber/frontend/tsconfig.node.json +0 -23
  315. lyrics_transcriber/frontend/tsconfig.tsbuildinfo +0 -1
  316. lyrics_transcriber/frontend/update_version.js +0 -11
  317. lyrics_transcriber/frontend/vite.config.d.ts +0 -2
  318. lyrics_transcriber/frontend/vite.config.js +0 -15
  319. lyrics_transcriber/frontend/vite.config.ts +0 -16
  320. lyrics_transcriber/frontend/web_assets/android-chrome-192x192.png +0 -0
  321. lyrics_transcriber/frontend/web_assets/android-chrome-512x512.png +0 -0
  322. lyrics_transcriber/frontend/web_assets/apple-touch-icon.png +0 -0
  323. lyrics_transcriber/frontend/web_assets/assets/index-BSMgOq4Z.js +0 -44465
  324. lyrics_transcriber/frontend/web_assets/assets/index-BSMgOq4Z.js.map +0 -1
  325. lyrics_transcriber/frontend/web_assets/favicon-16x16.png +0 -0
  326. lyrics_transcriber/frontend/web_assets/favicon-32x32.png +0 -0
  327. lyrics_transcriber/frontend/web_assets/favicon.ico +0 -0
  328. lyrics_transcriber/frontend/web_assets/index.html +0 -22
  329. lyrics_transcriber/frontend/web_assets/nomad-karaoke-logo.png +0 -0
  330. lyrics_transcriber/frontend/web_assets/nomad-karaoke-logo.svg +0 -5
  331. lyrics_transcriber/frontend/yarn.lock +0 -3711
  332. {lyrics_transcriber/frontend/public → karaoke_gen/nextjs_frontend/out}/apple-touch-icon.png +0 -0
  333. {lyrics_transcriber/frontend/public → karaoke_gen/nextjs_frontend/out}/favicon-16x16.png +0 -0
  334. {lyrics_transcriber/frontend/public → karaoke_gen/nextjs_frontend/out}/favicon-32x32.png +0 -0
  335. {lyrics_transcriber/frontend/public → karaoke_gen/nextjs_frontend/out}/favicon.ico +0 -0
  336. {lyrics_transcriber/frontend/public → karaoke_gen/nextjs_frontend/out}/nomad-karaoke-logo.svg +0 -0
  337. /lyrics_transcriber/frontend/public/nomad-karaoke-logo.png → /karaoke_gen/nextjs_frontend/out/nomad-logo.png +0 -0
  338. {karaoke_gen-0.103.1.dist-info → karaoke_gen-0.107.0.dist-info}/entry_points.txt +0 -0
  339. {karaoke_gen-0.103.1.dist-info → karaoke_gen-0.107.0.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1 @@
1
+ <!DOCTYPE html><!--zpw__rjFIDV5tlPPtnvRI--><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/chunks/5628d92b5893add2.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/95f7e5934dbb0e5d.js"/><script src="/_next/static/chunks/112f346e31f991df.js" async=""></script><script src="/_next/static/chunks/a9ed54eed3e14c92.js" async=""></script><script src="/_next/static/chunks/c645af7d6b65f73e.js" async=""></script><script src="/_next/static/chunks/5997132b61dec430.js" async=""></script><script src="/_next/static/chunks/turbopack-2d9ca3017a9deedf.js" async=""></script><script src="/_next/static/chunks/ef02697fb404726a.js" async=""></script><script src="/_next/static/chunks/e483af34fc792d38.js" async=""></script><script src="/_next/static/chunks/247eb132b7f7b574.js" async=""></script><meta name="robots" content="noindex"/><title>404: This page could not be found.</title><title>Nomad Karaoke: Generator</title><meta name="description" content="Generate professional karaoke videos with AI-powered vocal separation and synchronized lyrics"/><link rel="manifest" href="/manifest.webmanifest"/><link rel="icon" href="/favicon.ico" sizes="any"/><link rel="icon" href="/favicon-16x16.png" sizes="16x16" type="image/png"/><link rel="icon" href="/favicon-32x32.png" sizes="32x32" type="image/png"/><link rel="apple-touch-icon" href="/apple-touch-icon.png"/><script src="/_next/static/chunks/a6dad97d9634a72d.js" noModule=""></script></head><body class="font-sans antialiased" style="background:var(--bg);color:var(--text)"><div hidden=""><!--$--><!--/$--></div><script>((a,b,c,d,e,f,g,h)=>{let i=document.documentElement,j=["light","dark"];function k(b){var c;(Array.isArray(a)?a:[a]).forEach(a=>{let c="class"===a,d=c&&f?e.map(a=>f[a]||a):e;c?(i.classList.remove(...d),i.classList.add(f&&f[b]?f[b]:b)):i.setAttribute(a,b)}),c=b,h&&j.includes(c)&&(i.style.colorScheme=c)}if(d)k(d);else try{let a=localStorage.getItem(b)||c,d=g&&"system"===a?window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":a;k(d)}catch(a){}})("class","theme","dark",null,["light","dark"],null,true,true)</script><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/95f7e5934dbb0e5d.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[72285,[\"/_next/static/chunks/ef02697fb404726a.js\",\"/_next/static/chunks/e483af34fc792d38.js\",\"/_next/static/chunks/247eb132b7f7b574.js\"],\"ServiceWorkerRegistration\"]\n3:I[89554,[\"/_next/static/chunks/ef02697fb404726a.js\",\"/_next/static/chunks/e483af34fc792d38.js\",\"/_next/static/chunks/247eb132b7f7b574.js\"],\"ThemeProvider\"]\n4:I[57091,[\"/_next/static/chunks/ef02697fb404726a.js\",\"/_next/static/chunks/e483af34fc792d38.js\",\"/_next/static/chunks/247eb132b7f7b574.js\"],\"TenantProvider\"]\n5:I[48030,[\"/_next/static/chunks/ef02697fb404726a.js\",\"/_next/static/chunks/e483af34fc792d38.js\",\"/_next/static/chunks/247eb132b7f7b574.js\"],\"ImpersonationBannerWrapper\"]\n6:I[39756,[\"/_next/static/chunks/ef02697fb404726a.js\",\"/_next/static/chunks/e483af34fc792d38.js\",\"/_next/static/chunks/247eb132b7f7b574.js\"],\"default\"]\n7:I[37457,[\"/_next/static/chunks/ef02697fb404726a.js\",\"/_next/static/chunks/e483af34fc792d38.js\",\"/_next/static/chunks/247eb132b7f7b574.js\"],\"default\"]\n8:I[97367,[\"/_next/static/chunks/ef02697fb404726a.js\",\"/_next/static/chunks/e483af34fc792d38.js\",\"/_next/static/chunks/247eb132b7f7b574.js\"],\"OutletBoundary\"]\n9:\"$Sreact.suspense\"\nb:I[97367,[\"/_next/static/chunks/ef02697fb404726a.js\",\"/_next/static/chunks/e483af34fc792d38.js\",\"/_next/static/chunks/247eb132b7f7b574.js\"],\"ViewportBoundary\"]\nd:I[97367,[\"/_next/static/chunks/ef02697fb404726a.js\",\"/_next/static/chunks/e483af34fc792d38.js\",\"/_next/static/chunks/247eb132b7f7b574.js\"],\"MetadataBoundary\"]\nf:I[68027,[\"/_next/static/chunks/ef02697fb404726a.js\",\"/_next/static/chunks/e483af34fc792d38.js\",\"/_next/static/chunks/247eb132b7f7b574.js\"],\"default\"]\n:HL[\"/_next/static/chunks/5628d92b5893add2.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"zpw_-rjFIDV5tlPPtnvRI\",\"c\":[\"\",\"_not-found\",\"\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/5628d92b5893add2.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/ef02697fb404726a.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/e483af34fc792d38.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-2\",{\"src\":\"/_next/static/chunks/247eb132b7f7b574.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"children\":[\"$\",\"body\",null,{\"className\":\"font-sans antialiased\",\"style\":{\"background\":\"var(--bg)\",\"color\":\"var(--text)\"},\"children\":[[\"$\",\"$L2\",null,{}],[\"$\",\"$L3\",null,{\"attribute\":\"class\",\"defaultTheme\":\"dark\",\"enableSystem\":true,\"disableTransitionOnChange\":true,\"children\":[\"$\",\"$L4\",null,{\"children\":[[\"$\",\"$L5\",null,{}],[\"$\",\"$L6\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L7\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}]}]]}]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L6\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L7\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:1:props:children:props:children:1:props:notFound:0:1:props:style\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:1:props:children:props:children:1:props:notFound:0:1:props:children:props:children:1:props:style\",\"children\":404}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:1:props:children:props:children:1:props:notFound:0:1:props:children:props:children:2:props:style\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:1:props:children:props:children:1:props:notFound:0:1:props:children:props:children:2:props:children:props:style\",\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L8\",null,{\"children\":[\"$\",\"$9\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@a\"}]}]]}],{},null,false,false]},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$Lb\",null,{\"children\":\"$@c\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Ld\",null,{\"children\":[\"$\",\"$9\",null,{\"name\":\"Next.Metadata\",\"children\":\"$@e\"}]}]}],null]}],false]],\"m\":\"$undefined\",\"G\":[\"$f\",\"$undefined\"],\"S\":true}\n"])</script><script>self.__next_f.push([1,"c:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"10:I[27201,[\"/_next/static/chunks/ef02697fb404726a.js\",\"/_next/static/chunks/e483af34fc792d38.js\",\"/_next/static/chunks/247eb132b7f7b574.js\"],\"IconMark\"]\ne:[[\"$\",\"title\",\"0\",{\"children\":\"Nomad Karaoke: Generator\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Generate professional karaoke videos with AI-powered vocal separation and synchronized lyrics\"}],[\"$\",\"link\",\"2\",{\"rel\":\"manifest\",\"href\":\"/manifest.webmanifest\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"link\",\"3\",{\"rel\":\"icon\",\"href\":\"/favicon.ico\",\"sizes\":\"any\"}],[\"$\",\"link\",\"4\",{\"rel\":\"icon\",\"href\":\"/favicon-16x16.png\",\"sizes\":\"16x16\",\"type\":\"image/png\"}],[\"$\",\"link\",\"5\",{\"rel\":\"icon\",\"href\":\"/favicon-32x32.png\",\"sizes\":\"32x32\",\"type\":\"image/png\"}],[\"$\",\"link\",\"6\",{\"rel\":\"apple-touch-icon\",\"href\":\"/apple-touch-icon.png\"}],[\"$\",\"$L10\",\"7\",{}]]\na:null\n"])</script></body></html>
@@ -0,0 +1,9 @@
1
+ 1:"$Sreact.fragment"
2
+ 2:I[47257,["/_next/static/chunks/ff1a16fafef87110.js","/_next/static/chunks/247eb132b7f7b574.js"],"ClientPageRoot"]
3
+ 3:I[31713,["/_next/static/chunks/01a7f8fe40f1ff47.js","/_next/static/chunks/e483af34fc792d38.js","/_next/static/chunks/55c5ade44387bef8.js","/_next/static/chunks/692f5d9e0d700c76.js","/_next/static/chunks/dcde6ed684dacd0e.js"],"default"]
4
+ 6:I[97367,["/_next/static/chunks/ff1a16fafef87110.js","/_next/static/chunks/247eb132b7f7b574.js"],"OutletBoundary"]
5
+ 7:"$Sreact.suspense"
6
+ 0:{"buildId":"zpw_-rjFIDV5tlPPtnvRI","rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","script","script-0",{"src":"/_next/static/chunks/55c5ade44387bef8.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/692f5d9e0d700c76.js","async":true}],["$","script","script-2",{"src":"/_next/static/chunks/dcde6ed684dacd0e.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"loading":null,"isPartial":false}
7
+ 4:{}
8
+ 5:"$0:rsc:props:children:0:props:serverProvidedParams:params"
9
+ 8:null
@@ -0,0 +1,22 @@
1
+ 1:"$Sreact.fragment"
2
+ 2:I[72285,["/_next/static/chunks/01a7f8fe40f1ff47.js","/_next/static/chunks/e483af34fc792d38.js"],"ServiceWorkerRegistration"]
3
+ 3:I[89554,["/_next/static/chunks/01a7f8fe40f1ff47.js","/_next/static/chunks/e483af34fc792d38.js"],"ThemeProvider"]
4
+ 4:I[57091,["/_next/static/chunks/01a7f8fe40f1ff47.js","/_next/static/chunks/e483af34fc792d38.js"],"TenantProvider"]
5
+ 5:I[48030,["/_next/static/chunks/01a7f8fe40f1ff47.js","/_next/static/chunks/e483af34fc792d38.js"],"ImpersonationBannerWrapper"]
6
+ 6:I[39756,["/_next/static/chunks/ff1a16fafef87110.js","/_next/static/chunks/247eb132b7f7b574.js"],"default"]
7
+ 7:I[37457,["/_next/static/chunks/ff1a16fafef87110.js","/_next/static/chunks/247eb132b7f7b574.js"],"default"]
8
+ 8:I[47257,["/_next/static/chunks/ff1a16fafef87110.js","/_next/static/chunks/247eb132b7f7b574.js"],"ClientPageRoot"]
9
+ 9:I[31713,["/_next/static/chunks/01a7f8fe40f1ff47.js","/_next/static/chunks/e483af34fc792d38.js","/_next/static/chunks/55c5ade44387bef8.js","/_next/static/chunks/692f5d9e0d700c76.js","/_next/static/chunks/dcde6ed684dacd0e.js"],"default"]
10
+ c:I[97367,["/_next/static/chunks/ff1a16fafef87110.js","/_next/static/chunks/247eb132b7f7b574.js"],"OutletBoundary"]
11
+ d:"$Sreact.suspense"
12
+ f:I[97367,["/_next/static/chunks/ff1a16fafef87110.js","/_next/static/chunks/247eb132b7f7b574.js"],"ViewportBoundary"]
13
+ 11:I[97367,["/_next/static/chunks/ff1a16fafef87110.js","/_next/static/chunks/247eb132b7f7b574.js"],"MetadataBoundary"]
14
+ 13:I[68027,["/_next/static/chunks/ff1a16fafef87110.js","/_next/static/chunks/247eb132b7f7b574.js"],"default"]
15
+ :HL["/_next/static/chunks/5628d92b5893add2.css","style"]
16
+ 0:{"P":null,"b":"zpw_-rjFIDV5tlPPtnvRI","c":["",""],"q":"","i":false,"f":[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",true],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/5628d92b5893add2.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/01a7f8fe40f1ff47.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/e483af34fc792d38.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":["$","body",null,{"className":"font-sans antialiased","style":{"background":"var(--bg)","color":"var(--text)"},"children":[["$","$L2",null,{}],["$","$L3",null,{"attribute":"class","defaultTheme":"dark","enableSystem":true,"disableTransitionOnChange":true,"children":["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L7",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]]}]}]]}]}]]}],{"children":[["$","$1","c",{"children":[["$","$L8",null,{"Component":"$9","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@a","$@b"]}}],[["$","script","script-0",{"src":"/_next/static/chunks/55c5ade44387bef8.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/692f5d9e0d700c76.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/dcde6ed684dacd0e.js","async":true,"nonce":"$undefined"}]],["$","$Lc",null,{"children":["$","$d",null,{"name":"Next.MetadataOutlet","children":"$@e"}]}]]}],{},null,false,false]},null,false,false],["$","$1","h",{"children":[null,["$","$Lf",null,{"children":"$@10"}],["$","div",null,{"hidden":true,"children":["$","$L11",null,{"children":["$","$d",null,{"name":"Next.Metadata","children":"$@12"}]}]}],null]}],false]],"m":"$undefined","G":["$13",[]],"S":true}
17
+ a:{}
18
+ b:"$0:f:0:1:1:children:0:props:children:0:props:serverProvidedParams:params"
19
+ 10:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
20
+ 14:I[27201,["/_next/static/chunks/ff1a16fafef87110.js","/_next/static/chunks/247eb132b7f7b574.js"],"IconMark"]
21
+ 12:[["$","title","0",{"children":"Nomad Karaoke: Generator"}],["$","meta","1",{"name":"description","content":"Generate professional karaoke videos with AI-powered vocal separation and synchronized lyrics"}],["$","link","2",{"rel":"manifest","href":"/manifest.webmanifest","crossOrigin":"$undefined"}],["$","link","3",{"rel":"icon","href":"/favicon.ico","sizes":"any"}],["$","link","4",{"rel":"icon","href":"/favicon-16x16.png","sizes":"16x16","type":"image/png"}],["$","link","5",{"rel":"icon","href":"/favicon-32x32.png","sizes":"32x32","type":"image/png"}],["$","link","6",{"rel":"apple-touch-icon","href":"/apple-touch-icon.png"}],["$","$L14","7",{}]]
22
+ e:null
@@ -0,0 +1,8 @@
1
+ 1:"$Sreact.fragment"
2
+ 2:I[97367,["/_next/static/chunks/ff1a16fafef87110.js","/_next/static/chunks/247eb132b7f7b574.js"],"ViewportBoundary"]
3
+ 4:I[97367,["/_next/static/chunks/ff1a16fafef87110.js","/_next/static/chunks/247eb132b7f7b574.js"],"MetadataBoundary"]
4
+ 5:"$Sreact.suspense"
5
+ 7:I[27201,["/_next/static/chunks/ff1a16fafef87110.js","/_next/static/chunks/247eb132b7f7b574.js"],"IconMark"]
6
+ 0:{"buildId":"zpw_-rjFIDV5tlPPtnvRI","rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":"$@3"}],["$","div",null,{"hidden":true,"children":["$","$L4",null,{"children":["$","$5",null,{"name":"Next.Metadata","children":"$@6"}]}]}],null]}],"loading":null,"isPartial":false}
7
+ 3:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
8
+ 6:[["$","title","0",{"children":"Nomad Karaoke: Generator"}],["$","meta","1",{"name":"description","content":"Generate professional karaoke videos with AI-powered vocal separation and synchronized lyrics"}],["$","link","2",{"rel":"manifest","href":"/manifest.webmanifest"}],["$","link","3",{"rel":"icon","href":"/favicon.ico","sizes":"any"}],["$","link","4",{"rel":"icon","href":"/favicon-16x16.png","sizes":"16x16","type":"image/png"}],["$","link","5",{"rel":"icon","href":"/favicon-32x32.png","sizes":"32x32","type":"image/png"}],["$","link","6",{"rel":"apple-touch-icon","href":"/apple-touch-icon.png"}],["$","$L7","7",{}]]
@@ -0,0 +1,9 @@
1
+ 1:"$Sreact.fragment"
2
+ 2:I[72285,["/_next/static/chunks/01a7f8fe40f1ff47.js","/_next/static/chunks/e483af34fc792d38.js"],"ServiceWorkerRegistration"]
3
+ 3:I[89554,["/_next/static/chunks/01a7f8fe40f1ff47.js","/_next/static/chunks/e483af34fc792d38.js"],"ThemeProvider"]
4
+ 4:I[57091,["/_next/static/chunks/01a7f8fe40f1ff47.js","/_next/static/chunks/e483af34fc792d38.js"],"TenantProvider"]
5
+ 5:I[48030,["/_next/static/chunks/01a7f8fe40f1ff47.js","/_next/static/chunks/e483af34fc792d38.js"],"ImpersonationBannerWrapper"]
6
+ 6:I[39756,["/_next/static/chunks/ff1a16fafef87110.js","/_next/static/chunks/247eb132b7f7b574.js"],"default"]
7
+ 7:I[37457,["/_next/static/chunks/ff1a16fafef87110.js","/_next/static/chunks/247eb132b7f7b574.js"],"default"]
8
+ :HL["/_next/static/chunks/5628d92b5893add2.css","style"]
9
+ 0:{"buildId":"zpw_-rjFIDV5tlPPtnvRI","rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/5628d92b5893add2.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/01a7f8fe40f1ff47.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/e483af34fc792d38.js","async":true}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":["$","body",null,{"className":"font-sans antialiased","style":{"background":"var(--bg)","color":"var(--text)"},"children":[["$","$L2",null,{}],["$","$L3",null,{"attribute":"class","defaultTheme":"dark","enableSystem":true,"disableTransitionOnChange":true,"children":["$","$L4",null,{"children":[["$","$L5",null,{}],["$","$L6",null,{"parallelRouterKey":"children","template":["$","$L7",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]]}]}]]}]}]]}],"loading":null,"isPartial":false}
@@ -0,0 +1,2 @@
1
+ :HL["/_next/static/chunks/5628d92b5893add2.css","style"]
2
+ 0:{"buildId":"zpw_-rjFIDV5tlPPtnvRI","tree":{"name":"","paramType":null,"paramKey":"","hasRuntimePrefetch":false,"slots":{"children":{"name":"__PAGE__","paramType":null,"paramKey":"__PAGE__","hasRuntimePrefetch":false,"slots":null,"isRootLayout":false}},"isRootLayout":true},"staleTime":300}
@@ -0,0 +1 @@
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,41947,e=>{"use strict";let t=(0,e.i(75254).default)("X",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]);e.s(["default",()=>t])},37727,e=>{"use strict";var t=e.i(41947);e.s(["X",()=>t.default])},54858,e=>{"use strict";var t=e.i(47167);let a="localhost"===window.location.hostname?"":t.default.env.NEXT_PUBLIC_API_URL||"https://api.nomadkaraoke.com";function r(e){localStorage.setItem("karaoke_access_token",e)}function i(){return localStorage.getItem("karaoke_access_token")}function n(){localStorage.removeItem("karaoke_access_token")}function s(){let e={},t=i();return t&&(e.Authorization=`Bearer ${t}`),e}class o extends Error{status;data;constructor(e,t,a){super(e),this.name="ApiError",this.status=t,this.data=a}}async function l(e){if(!e.ok){let t;try{t=await e.json()}catch{t={detail:e.statusText}}throw new o(function(e,t){if("string"==typeof e?.detail)return e.detail;if("string"==typeof e?.message)return e.message;if("string"==typeof e?.error)return e.error;if(e?.detail?.message)return String(e.detail.message);if(e?.detail?.error)return String(e.detail.error);if(e?.detail&&"object"==typeof e.detail)try{return JSON.stringify(e.detail)}catch{}return t}(t,`Request failed with status ${e.status}`),e.status,t)}return e.json()}function c(e){return{async submitCorrections(t){let r=await fetch(`${a}/api/jobs/${e}/corrections`,{method:"PUT",headers:{"Content-Type":"application/json",...s()},body:JSON.stringify(t)});await l(r)},async submitAnnotations(t){let r=await fetch(`${a}/api/jobs/${e}/annotations`,{method:"POST",headers:{"Content-Type":"application/json",...s()},body:JSON.stringify({annotations:t})});await l(r)},updateHandlers:async t=>l(await fetch(`${a}/api/jobs/${e}/handlers`,{method:"PATCH",headers:{"Content-Type":"application/json",...s()},body:JSON.stringify({enabled_handlers:t})})),addLyrics:async(t,r)=>l(await fetch(`${a}/api/jobs/${e}/lyrics`,{method:"POST",headers:{"Content-Type":"application/json",...s()},body:JSON.stringify({source:t,lyrics:r})})),getAudioUrl(e){let t=i(),r=`${a}/api/audio/${e}`;return t?`${r}?token=${encodeURIComponent(t)}`:r},generatePreviewVideo:async t=>l(await fetch(`${a}/api/jobs/${e}/preview-video`,{method:"POST",headers:{"Content-Type":"application/json",...s()},body:JSON.stringify(t)})),getPreviewVideoUrl(e){let t=i(),r=`${a}/api/preview-video/${e}`;return t?`${r}?token=${encodeURIComponent(t)}`:r}}}e.s(["API_BASE_URL",0,a,"ApiError",()=>o,"adminApi",0,{async getStats(e){let t=new URLSearchParams;e?.exclude_test!==void 0&&t.set("exclude_test",String(e.exclude_test));let r=`${a}/api/admin/stats/overview${t.toString()?"?"+t.toString():""}`;return l(await fetch(r,{headers:s()}))},async listUsers(e){let t=new URLSearchParams;e?.limit&&t.set("limit",String(e.limit)),e?.offset&&t.set("offset",String(e.offset)),e?.search&&t.set("search",e.search),e?.sort_by&&t.set("sort_by",e.sort_by),e?.sort_order&&t.set("sort_order",e.sort_order),e?.include_inactive&&t.set("include_inactive","true"),e?.exclude_test!==void 0&&t.set("exclude_test",String(e.exclude_test));let r=`${a}/api/users/admin/users${t.toString()?"?"+t.toString():""}`;return l(await fetch(r,{headers:s()}))},getUserDetail:async e=>l(await fetch(`${a}/api/users/admin/users/${encodeURIComponent(e)}/detail`,{headers:s()})),addCredits:async(e,t,r)=>l(await fetch(`${a}/api/users/admin/credits`,{method:"POST",headers:{"Content-Type":"application/json",...s()},body:JSON.stringify({email:e,amount:t,reason:r})})),impersonateUser:async e=>l(await fetch(`${a}/api/admin/users/${encodeURIComponent(e)}/impersonate`,{method:"POST",headers:s()})),enableUser:async e=>l(await fetch(`${a}/api/users/admin/users/${encodeURIComponent(e)}/enable`,{method:"POST",headers:s()})),disableUser:async e=>l(await fetch(`${a}/api/users/admin/users/${encodeURIComponent(e)}/disable`,{method:"POST",headers:s()})),async listAllJobs(e){let t=new URLSearchParams;e?.status&&t.set("status",e.status),e?.user_email&&t.set("user_email",e.user_email),e?.environment&&t.set("environment",e.environment),e?.created_after&&t.set("created_after",e.created_after),e?.created_before&&t.set("created_before",e.created_before),e?.limit&&t.set("limit",String(e.limit)),e?.exclude_test!==void 0&&t.set("exclude_test",String(e.exclude_test));let r=`${a}/api/jobs${t.toString()?"?"+t.toString():""}`;return l(await fetch(r,{headers:s()}))},async getBetaStats(e){let t=new URLSearchParams;e?.exclude_test!==void 0&&t.set("exclude_test",String(e.exclude_test));let r=`${a}/api/users/admin/beta/stats${t.toString()?"?"+t.toString():""}`;return l(await fetch(r,{headers:s()}))},getBetaFeedback:async(e=50)=>l(await fetch(`${a}/api/users/admin/beta/feedback?limit=${e}`,{headers:s()})),deleteJob:async(e,t=!0)=>l(await fetch(`${a}/api/jobs/${e}?delete_files=${t}`,{method:"DELETE",headers:s()})),async listAudioSearches(e){let t=new URLSearchParams;e?.limit&&t.set("limit",String(e.limit)),e?.status_filter&&t.set("status_filter",e.status_filter),e?.exclude_test!==void 0&&t.set("exclude_test",String(e.exclude_test));let r=`${a}/api/admin/audio-searches${t.toString()?"?"+t.toString():""}`;return l(await fetch(r,{headers:s()}))},clearAudioSearchCache:async e=>l(await fetch(`${a}/api/admin/audio-searches/${e}/clear-cache`,{method:"POST",headers:s()})),clearAllCache:async()=>l(await fetch(`${a}/api/admin/cache`,{method:"DELETE",headers:s()})),getCacheStats:async()=>l(await fetch(`${a}/api/admin/cache/stats`,{headers:s()})),getCompletionMessage:async e=>l(await fetch(`${a}/api/admin/jobs/${e}/completion-message`,{headers:s()})),sendCompletionEmail:async(e,t,r=!0)=>l(await fetch(`${a}/api/admin/jobs/${e}/send-completion-email`,{method:"POST",headers:{...s(),"Content-Type":"application/json"},body:JSON.stringify({to_email:t,cc_admin:r})})),getJobFiles:async e=>l(await fetch(`${a}/api/admin/jobs/${e}/files`,{headers:s()})),updateJob:async(e,t)=>l(await fetch(`${a}/api/admin/jobs/${e}`,{method:"PATCH",headers:{"Content-Type":"application/json",...s()},body:JSON.stringify(t)})),resetJob:async(e,t)=>l(await fetch(`${a}/api/admin/jobs/${e}/reset`,{method:"POST",headers:{"Content-Type":"application/json",...s()},body:JSON.stringify({target_state:t})})),deleteJobOutputs:async e=>l(await fetch(`${a}/api/admin/jobs/${e}/delete-outputs`,{method:"POST",headers:s()})),getRateLimitStats:async()=>l(await fetch(`${a}/api/admin/rate-limits/stats`,{headers:s()})),getUserRateLimitStatus:async e=>l(await fetch(`${a}/api/admin/rate-limits/users/${encodeURIComponent(e)}`,{headers:s()})),getBlocklists:async()=>l(await fetch(`${a}/api/admin/rate-limits/blocklists`,{headers:s()})),addDisposableDomain:async e=>l(await fetch(`${a}/api/admin/rate-limits/blocklists/disposable-domains`,{method:"POST",headers:{"Content-Type":"application/json",...s()},body:JSON.stringify({domain:e})})),removeDisposableDomain:async e=>l(await fetch(`${a}/api/admin/rate-limits/blocklists/disposable-domains/${encodeURIComponent(e)}`,{method:"DELETE",headers:s()})),addBlockedEmail:async e=>l(await fetch(`${a}/api/admin/rate-limits/blocklists/blocked-emails`,{method:"POST",headers:{"Content-Type":"application/json",...s()},body:JSON.stringify({email:e})})),removeBlockedEmail:async e=>l(await fetch(`${a}/api/admin/rate-limits/blocklists/blocked-emails/${encodeURIComponent(e)}`,{method:"DELETE",headers:s()})),addBlockedIP:async e=>l(await fetch(`${a}/api/admin/rate-limits/blocklists/blocked-ips`,{method:"POST",headers:{"Content-Type":"application/json",...s()},body:JSON.stringify({ip_address:e})})),removeBlockedIP:async e=>l(await fetch(`${a}/api/admin/rate-limits/blocklists/blocked-ips/${encodeURIComponent(e)}`,{method:"DELETE",headers:s()})),getUserOverrides:async()=>l(await fetch(`${a}/api/admin/rate-limits/overrides`,{headers:s()})),setUserOverride:async(e,t)=>l(await fetch(`${a}/api/admin/rate-limits/overrides/${encodeURIComponent(e)}`,{method:"PUT",headers:{"Content-Type":"application/json",...s()},body:JSON.stringify(t)})),removeUserOverride:async e=>l(await fetch(`${a}/api/admin/rate-limits/overrides/${encodeURIComponent(e)}`,{method:"DELETE",headers:s()}))},"api",0,{async listJobs(e){let t=new URLSearchParams;e?.status&&t.set("status",e.status),e?.limit&&t.set("limit",String(e.limit)),e?.exclude_test!==void 0&&t.set("exclude_test",String(e.exclude_test));let r=`${a}/api/jobs${t.toString()?"?"+t.toString():""}`;return l(await fetch(r,{headers:s()}))},getJob:async e=>l(await fetch(`${a}/api/jobs/${e}`,{headers:s()})),async uploadJob(e,t,r,i){let n=new FormData;return n.append("file",e),n.append("artist",t),n.append("title",r),i?.enable_cdg!==void 0&&n.append("enable_cdg",String(i.enable_cdg)),i?.enable_txt!==void 0&&n.append("enable_txt",String(i.enable_txt)),i?.brand_prefix&&n.append("brand_prefix",i.brand_prefix),i?.enable_youtube_upload!==void 0&&n.append("enable_youtube_upload",String(i.enable_youtube_upload)),i?.theme_id&&n.append("theme_id",i.theme_id),i?.color_overrides&&n.append("color_overrides",JSON.stringify(i.color_overrides)),i?.non_interactive!==void 0&&n.append("non_interactive",String(i.non_interactive)),l(await fetch(`${a}/api/jobs/upload`,{method:"POST",headers:s(),body:n}))},async createJobFromUrl(e,t,r,i){let n={url:e};return t&&(n.artist=t),r&&(n.title=r),i?.enable_cdg!==void 0&&(n.enable_cdg=i.enable_cdg),i?.enable_txt!==void 0&&(n.enable_txt=i.enable_txt),i?.brand_prefix&&(n.brand_prefix=i.brand_prefix),i?.enable_youtube_upload!==void 0&&(n.enable_youtube_upload=i.enable_youtube_upload),i?.theme_id&&(n.theme_id=i.theme_id),i?.color_overrides&&(n.color_overrides=i.color_overrides),i?.non_interactive!==void 0&&(n.non_interactive=i.non_interactive),l(await fetch(`${a}/api/jobs/create-from-url`,{method:"POST",headers:{"Content-Type":"application/json",...s()},body:JSON.stringify(n)}))},getReviewData:async e=>l(await fetch(`${a}/api/jobs/${e}/review-data`,{headers:s()})),completeReview:async e=>l(await fetch(`${a}/api/jobs/${e}/complete-review`,{method:"POST",headers:s()})),getInstrumentalOptions:async e=>l(await fetch(`${a}/api/jobs/${e}/instrumental-options`,{headers:s()})),selectInstrumental:async(e,t)=>l(await fetch(`${a}/api/jobs/${e}/select-instrumental`,{method:"POST",headers:{"Content-Type":"application/json",...s()},body:JSON.stringify({selection:t})})),getInstrumentalAnalysis:async e=>l(await fetch(`${a}/api/jobs/${e}/instrumental-analysis`,{headers:s()})),getWaveformData:async(e,t=1e3)=>l(await fetch(`${a}/api/jobs/${e}/waveform-data?num_points=${t}`,{headers:s()})),async uploadCustomInstrumental(e,t){let r=new FormData;return r.append("file",t),l(await fetch(`${a}/api/jobs/${e}/upload-instrumental`,{method:"POST",headers:s(),body:r}))},createCustomInstrumental:async(e,t)=>l(await fetch(`${a}/api/jobs/${e}/create-custom-instrumental`,{method:"POST",headers:{"Content-Type":"application/json",...s()},body:JSON.stringify({mute_regions:t})})),getAudioStreamUrl(e,t){let r=i(),n=`${a}/api/jobs/${e}/audio-stream/${t}`;return r?`${n}?token=${encodeURIComponent(r)}`:n},getDownloadUrls:async e=>l(await fetch(`${a}/api/jobs/${e}/download-urls`,{headers:s()})),cancelJob:async(e,t)=>l(await fetch(`${a}/api/jobs/${e}/cancel`,{method:"POST",headers:{"Content-Type":"application/json",...s()},body:JSON.stringify({reason:t||"Cancelled by user"})})),deleteJob:async(e,t=!0)=>l(await fetch(`${a}/api/jobs/${e}?delete_files=${t}`,{method:"DELETE",headers:s()})),getDownloadUrl(e,t,r){let n=`${a}/api/jobs/${e}/download/${t}/${r}`,s=i();return s?`${n}?token=${encodeURIComponent(s)}`:n},async searchAudio(e,t,r=!1,i){let n={artist:e,title:t,auto_download:r};return i?.enable_cdg!==void 0&&(n.enable_cdg=i.enable_cdg),i?.enable_txt!==void 0&&(n.enable_txt=i.enable_txt),i?.brand_prefix&&(n.brand_prefix=i.brand_prefix),i?.enable_youtube_upload!==void 0&&(n.enable_youtube_upload=i.enable_youtube_upload),i?.theme_id&&(n.theme_id=i.theme_id),i?.color_overrides&&(n.color_overrides=i.color_overrides),i?.non_interactive!==void 0&&(n.non_interactive=i.non_interactive),i?.display_artist&&(n.display_artist=i.display_artist),i?.display_title&&(n.display_title=i.display_title),l(await fetch(`${a}/api/audio-search/search`,{method:"POST",headers:{"Content-Type":"application/json",...s()},body:JSON.stringify(n)}))},getAudioSearchResults:async e=>l(await fetch(`${a}/api/audio-search/${e}/results`,{headers:s()})),selectAudioResult:async(e,t)=>l(await fetch(`${a}/api/audio-search/${e}/select`,{method:"POST",headers:{"Content-Type":"application/json",...s()},body:JSON.stringify({selection_index:t})})),async getJobLogs(e,t=100){let r=await fetch(`${a}/api/jobs/${e}/logs?limit=${t}`,{headers:s()});return(await l(r)).logs||[]},retryJob:async e=>l(await fetch(`${a}/api/jobs/${e}/retry`,{method:"POST",headers:s()})),async listThemes(){let e=await fetch(`${a}/api/themes`,{headers:s()});return(await l(e)).themes},async getTheme(e){let t=await fetch(`${a}/api/themes/${e}`,{headers:s()});return(await l(t)).theme},async getThemePreview(e){let t=await fetch(`${a}/api/themes/${e}/preview`,{headers:s()});return(await l(t)).preview_url},async getThemeYoutubeDescription(e){let t=await fetch(`${a}/api/themes/${e}/youtube-description`,{headers:s()});return(await l(t)).description},sendMagicLink:async e=>l(await fetch(`${a}/api/users/auth/magic-link`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:e})})),verifyMagicLink:async e=>l(await fetch(`${a}/api/users/auth/verify?token=${encodeURIComponent(e)}`,{method:"GET"})),getCurrentUser:async()=>l(await fetch(`${a}/api/users/me`,{headers:s()})),logout:async()=>l(await fetch(`${a}/api/users/auth/logout`,{method:"POST",headers:s()})),async getBackendInfo(){let e=a?`${a}/`:"/backend-info";return l(await fetch(e,{headers:s()}))},getEncodingWorkerHealth:async()=>l(await fetch(`${a}/api/health/encoding-worker`)),async getCreditPackages(){let e=await fetch(`${a}/api/users/credits/packages`);return(await l(e)).packages},async createCheckout(e,t){let r=await fetch(`${a}/api/users/credits/checkout`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({package_id:e,email:t.toLowerCase()})});return(await l(r)).checkout_url},async createMadeForYouCheckout(e){let t=await fetch(`${a}/api/users/made-for-you/checkout`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:e.email.toLowerCase(),artist:e.artist,title:e.title,source_type:e.source_type,youtube_url:e.youtube_url,notes:e.notes})}),r=await l(t);if(!r.checkout_url)throw Error("No checkout URL received");return r.checkout_url},enrollBetaTester:async(e,t,r)=>l(await fetch(`${a}/api/users/beta/enroll`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:e.toLowerCase(),promise_text:t,accept_corrections_work:r})})),getVapidPublicKey:async()=>l(await fetch(`${a}/api/push/vapid-public-key`)),subscribePush:async(e,t,r)=>l(await fetch(`${a}/api/push/subscribe`,{method:"POST",headers:{"Content-Type":"application/json",...s()},body:JSON.stringify({endpoint:e,keys:t,device_name:r})})),unsubscribePush:async e=>l(await fetch(`${a}/api/push/unsubscribe`,{method:"POST",headers:{"Content-Type":"application/json",...s()},body:JSON.stringify({endpoint:e})})),listPushSubscriptions:async()=>l(await fetch(`${a}/api/push/subscriptions`,{headers:s()}))},"clearAccessToken",()=>n,"createLyricsReviewApiClient",()=>c,"getAccessToken",()=>i,"lyricsReviewApi",0,{getCorrectionData:async e=>l(await fetch(`${a}/api/jobs/${e}/corrections`,{headers:s()})),getAudioUrl(e){let t=i(),r=`${a}/api/audio/${e}`;return t?`${r}?token=${encodeURIComponent(t)}`:r}},"setAccessToken",()=>r])},68834,e=>{"use strict";var t=e.i(71645);let a=e=>{let t,a=new Set,r=(e,r)=>{let i="function"==typeof e?e(t):e;if(!Object.is(i,t)){let e=t;t=(null!=r?r:"object"!=typeof i||null===i)?i:Object.assign({},t,i),a.forEach(a=>a(t,e))}},i=()=>t,n={setState:r,getState:i,getInitialState:()=>s,subscribe:e=>(a.add(e),()=>a.delete(e))},s=t=e(r,i,n);return n},r=e=>{let r=e?a(e):a,i=e=>(function(e,a=e=>e){let r=t.default.useSyncExternalStore(e.subscribe,t.default.useCallback(()=>a(e.getState()),[e,a]),t.default.useCallback(()=>a(e.getInitialState()),[e,a]));return t.default.useDebugValue(r),r})(r,e);return Object.assign(i,r),i},i=e=>e?r(e):r;e.s(["create",()=>i],68834)},79473,e=>{"use strict";let t=e=>a=>{try{let r=e(a);if(r instanceof Promise)return r;return{then:e=>t(e)(r),catch(e){return this}}}catch(e){return{then(e){return this},catch:a=>t(a)(e)}}},a=(e,a)=>(r,i,n)=>{let s,o={storage:function(e,t){let a;try{a=e()}catch(e){return}return{getItem:e=>{var t;let r=e=>null===e?null:JSON.parse(e,void 0),i=null!=(t=a.getItem(e))?t:null;return i instanceof Promise?i.then(r):r(i)},setItem:(e,t)=>a.setItem(e,JSON.stringify(t,void 0)),removeItem:e=>a.removeItem(e)}}(()=>localStorage),partialize:e=>e,version:0,merge:(e,t)=>({...t,...e}),...a},l=!1,c=new Set,d=new Set,u=o.storage;if(!u)return e((...e)=>{console.warn(`[zustand persist middleware] Unable to update item '${o.name}', the given storage is currently unavailable.`),r(...e)},i,n);let m=()=>{let e=o.partialize({...i()});return u.setItem(o.name,{state:e,version:o.version})},p=n.setState;n.setState=(e,t)=>(p(e,t),m());let h=e((...e)=>(r(...e),m()),i,n);n.getInitialState=()=>h;let y=()=>{var e,a;if(!u)return;l=!1,c.forEach(e=>{var t;return e(null!=(t=i())?t:h)});let n=(null==(a=o.onRehydrateStorage)?void 0:a.call(o,null!=(e=i())?e:h))||void 0;return t(u.getItem.bind(u))(o.name).then(e=>{if(e)if("number"!=typeof e.version||e.version===o.version)return[!1,e.state];else{if(o.migrate){let t=o.migrate(e.state,e.version);return t instanceof Promise?t.then(e=>[!0,e]):[!0,t]}console.error("State loaded from storage couldn't be migrated since no migrate function was provided")}return[!1,void 0]}).then(e=>{var t;let[a,n]=e;if(r(s=o.merge(n,null!=(t=i())?t:h),!0),a)return m()}).then(()=>{null==n||n(s,void 0),s=i(),l=!0,d.forEach(e=>e(s))}).catch(e=>{null==n||n(void 0,e)})};return n.persist={setOptions:e=>{o={...o,...e},e.storage&&(u=e.storage)},clearStorage:()=>{null==u||u.removeItem(o.name)},getOptions:()=>o,rehydrate:()=>y(),hasHydrated:()=>l,onHydrate:e=>(c.add(e),()=>{c.delete(e)}),onFinishHydration:e=>(d.add(e),()=>{d.delete(e)})},o.skipHydration||y(),s||h};e.s(["persist",()=>a])},38036,e=>{"use strict";var t=e.i(68834),a=e.i(79473),r=e.i(54858);let i=(0,t.create)()((0,a.persist)((e,t)=>({user:null,isLoading:!1,error:null,isImpersonating:!1,originalAdminToken:null,impersonatedUserEmail:null,sendMagicLink:async t=>{e({isLoading:!0,error:null});try{return await r.api.sendMagicLink(t),e({isLoading:!1}),!0}catch(t){return e({isLoading:!1,error:t instanceof Error?t.message:"Failed to send magic link"}),!1}},verifyMagicLink:async t=>{e({isLoading:!0,error:null});try{let a=await r.api.verifyMagicLink(t);(0,r.setAccessToken)(a.session_token);let i={token:a.session_token,email:a.user.email,role:a.user.role,credits:a.user.credits,display_name:a.user.display_name,total_jobs_created:a.user.total_jobs_created,total_jobs_completed:a.user.total_jobs_completed};return e({user:i,isLoading:!1}),!0}catch(t){return e({isLoading:!1,error:t instanceof Error?t.message:"Invalid or expired link"}),!1}},fetchUser:async()=>{let t=(0,r.getAccessToken)();if(!t)return e({user:null}),!1;e({isLoading:!0});try{let a=await r.api.getCurrentUser(),i={token:t,email:a.user.email,role:a.user.role,credits:a.user.credits,display_name:a.user.display_name,total_jobs_created:a.user.total_jobs_created,total_jobs_completed:a.user.total_jobs_completed};return e({user:i,isLoading:!1}),!0}catch{return(0,r.clearAccessToken)(),e({user:null,isLoading:!1}),!1}},logout:async()=>{try{await r.api.logout()}catch{}(0,r.clearAccessToken)(),e({user:null,error:null})},updateCredits:t=>e(e=>({user:e.user?{...e.user,credits:t}:null})),clearError:()=>e({error:null}),loginWithToken:async t=>{e({isLoading:!0,error:null});try{(0,r.setAccessToken)(t);let a=await r.api.getCurrentUser(),i={token:t,email:a.user.email,role:a.user.role,credits:a.user.credits,display_name:a.user.display_name,total_jobs_created:a.user.total_jobs_created,total_jobs_completed:a.user.total_jobs_completed};return e({user:i,isLoading:!1}),!0}catch{return(0,r.clearAccessToken)(),e({user:null,isLoading:!1,error:"Invalid token or server unavailable"}),!1}},startImpersonation:async a=>{if(t().isImpersonating)return e({error:"Already impersonating a user. End current impersonation first."}),!1;e({isLoading:!0,error:null});let i=(0,r.getAccessToken)();try{let t;if(!i)throw Error("No active session to preserve");let n=await r.adminApi.impersonateUser(a);(0,r.setAccessToken)(n.session_token);try{t=await r.api.getCurrentUser()}catch(e){throw(0,r.setAccessToken)(i),e}let s={token:n.session_token,email:t.user.email,role:t.user.role,credits:t.user.credits,display_name:t.user.display_name,total_jobs_created:t.user.total_jobs_created,total_jobs_completed:t.user.total_jobs_completed};return e({user:s,isLoading:!1,isImpersonating:!0,originalAdminToken:i,impersonatedUserEmail:a}),!0}catch(t){return e({isLoading:!1,error:t instanceof Error?t.message:"Failed to impersonate user"}),!1}},endImpersonation:()=>{let{originalAdminToken:a}=t();a&&((0,r.setAccessToken)(a),e({isImpersonating:!1,originalAdminToken:null,impersonatedUserEmail:null}),t().fetchUser())}}),{name:"nomad-karaoke-auth",partialize:e=>({user:e.user})}));(0,r.getAccessToken)()&&i.getState().fetchUser(),e.s(["useAuth",0,i])},86536,e=>{"use strict";let t=(0,e.i(75254).default)("Eye",[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);e.s(["Eye",()=>t],86536)},24672,e=>{"use strict";var t=e.i(68834),a=e.i(54858);let r={logo_url:null,logo_height:40,primary_color:"#ff5bb8",secondary_color:"#8b5cf6",accent_color:"#ffdf6b",background_color:null,favicon_url:null,site_title:"Nomad Karaoke Generator",tagline:null},i={audio_search:!0,file_upload:!0,youtube_url:!0,youtube_upload:!0,dropbox_upload:!0,gdrive_upload:!0,theme_selection:!0,color_overrides:!0,enable_cdg:!0,enable_4k:!0,admin_access:!0},n={theme_id:null,locked_theme:null,distribution_mode:"all"},s=(0,t.create)()((e,t)=>({tenant:null,isDefault:!0,isLoading:!1,error:null,isInitialized:!1,get branding(){let{tenant:e}=t();return e?.branding??r},get features(){let{tenant:e}=t();return e?.features??i},get defaults(){let{tenant:e}=t();return e?.defaults??n},get tenantId(){let{tenant:e}=t();return e?.id??null},fetchTenantConfig:async()=>{if(!t().isLoading){e({isLoading:!0,error:null});try{let t=function(){let e=window.location.hostname.toLowerCase();if("localhost"===e||"127.0.0.1"===e)return new URLSearchParams(window.location.search).get("tenant");if(e.includes("nomadkaraoke.com")){let t=e.split(".");if((3===t.length||4===t.length&&"gen"===t[1])&&!["gen","api","www","buy","admin","app","beta"].includes(t[0]))return t[0]}return null}(),r=`${a.API_BASE_URL}/api/tenant/config`;t&&(r+=`?tenant=${encodeURIComponent(t)}`);let i=await fetch(r,{method:"GET",headers:{"Content-Type":"application/json",...t?{"X-Tenant-ID":t}:{}}});if(!i.ok)throw Error("Failed to fetch tenant configuration");let n=await i.json();e({tenant:n.tenant,isDefault:n.is_default,isLoading:!1,isInitialized:!0}),n.tenant&&o(n.tenant.branding)}catch(t){console.error("Failed to fetch tenant config:",t),e({tenant:null,isDefault:!0,isLoading:!1,error:t instanceof Error?t.message:"Failed to load tenant configuration",isInitialized:!0})}}},setTenant:(t,a)=>{e({tenant:t,isDefault:a,isInitialized:!0}),t&&o(t.branding)},clearError:()=>e({error:null})}));function o(e){if("undefined"==typeof document)return;let t=document.documentElement;if(t.style.setProperty("--tenant-primary",e.primary_color),t.style.setProperty("--tenant-secondary",e.secondary_color),e.accent_color&&t.style.setProperty("--tenant-accent",e.accent_color),e.background_color&&t.style.setProperty("--tenant-background",e.background_color),e.site_title&&(document.title=e.site_title),e.favicon_url){let t=document.querySelector("link[rel~='icon']");t&&(t.href=e.favicon_url)}}e.s(["useTenant",0,s])},89554,e=>{"use strict";var t=e.i(43476),a=e.i(71645),r=(e,t,a,r,i,n,s,o)=>{let l=document.documentElement,c=["light","dark"];function d(t){var a;(Array.isArray(e)?e:[e]).forEach(e=>{let a="class"===e,r=a&&n?i.map(e=>n[e]||e):i;a?(l.classList.remove(...r),l.classList.add(n&&n[t]?n[t]:t)):l.setAttribute(e,t)}),a=t,o&&c.includes(a)&&(l.style.colorScheme=a)}if(r)d(r);else try{let e=localStorage.getItem(t)||a,r=s&&"system"===e?window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":e;d(r)}catch(e){}},i=["light","dark"],n="(prefers-color-scheme: dark)",s="undefined"==typeof window,o=a.createContext(void 0),l=e=>a.useContext(o)?a.createElement(a.Fragment,null,e.children):a.createElement(d,{...e}),c=["light","dark"],d=({forcedTheme:e,disableTransitionOnChange:t=!1,enableSystem:r=!0,enableColorScheme:s=!0,storageKey:l="theme",themes:d=c,defaultTheme:y=r?"system":"light",attribute:f="data-theme",value:g,children:b,nonce:_,scriptProps:w})=>{let[v,$]=a.useState(()=>m(l,y)),[S,k]=a.useState(()=>"system"===v?h():v),T=g?Object.values(g):d,j=a.useCallback(e=>{let a=e;if(!a)return;"system"===e&&r&&(a=h());let n=g?g[a]:a,o=t?p(_):null,l=document.documentElement,c=e=>{"class"===e?(l.classList.remove(...T),n&&l.classList.add(n)):e.startsWith("data-")&&(n?l.setAttribute(e,n):l.removeAttribute(e))};if(Array.isArray(f)?f.forEach(c):c(f),s){let e=i.includes(y)?y:null,t=i.includes(a)?a:e;l.style.colorScheme=t}null==o||o()},[_]),C=a.useCallback(e=>{let t="function"==typeof e?e(v):e;$(t);try{localStorage.setItem(l,t)}catch(e){}},[v]),O=a.useCallback(t=>{k(h(t)),"system"===v&&r&&!e&&j("system")},[v,e]);a.useEffect(()=>{let e=window.matchMedia(n);return e.addListener(O),O(e),()=>e.removeListener(O)},[O]),a.useEffect(()=>{let e=e=>{e.key===l&&(e.newValue?$(e.newValue):C(y))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)},[C]),a.useEffect(()=>{j(null!=e?e:v)},[e,v]);let E=a.useMemo(()=>({theme:v,setTheme:C,forcedTheme:e,resolvedTheme:"system"===v?S:v,themes:r?[...d,"system"]:d,systemTheme:r?S:void 0}),[v,C,e,S,r,d]);return a.createElement(o.Provider,{value:E},a.createElement(u,{forcedTheme:e,storageKey:l,attribute:f,enableSystem:r,enableColorScheme:s,defaultTheme:y,value:g,themes:d,nonce:_,scriptProps:w}),b)},u=a.memo(({forcedTheme:e,storageKey:t,attribute:i,enableSystem:n,enableColorScheme:s,defaultTheme:o,value:l,themes:c,nonce:d,scriptProps:u})=>{let m=JSON.stringify([i,t,o,e,c,l,n,s]).slice(1,-1);return a.createElement("script",{...u,suppressHydrationWarning:!0,nonce:"undefined"==typeof window?d:"",dangerouslySetInnerHTML:{__html:`(${r.toString()})(${m})`}})}),m=(e,t)=>{let a;if(!s){try{a=localStorage.getItem(e)||void 0}catch(e){}return a||t}},p=e=>{let t=document.createElement("style");return e&&t.setAttribute("nonce",e),t.appendChild(document.createTextNode("*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}")),document.head.appendChild(t),()=>{window.getComputedStyle(document.body),setTimeout(()=>{document.head.removeChild(t)},1)}},h=e=>(e||(e=window.matchMedia(n)),e.matches?"dark":"light");function y({children:e,...a}){return(0,t.jsx)(l,{...a,children:e})}e.s(["ThemeProvider",()=>y],89554)},57091,e=>{"use strict";var t=e.i(43476),a=e.i(71645),r=e.i(24672);function i({children:e}){let{fetchTenantConfig:i,isInitialized:n}=(0,r.useTenant)();return(0,a.useEffect)(()=>{n||i()},[i,n]),(0,t.jsx)(t.Fragment,{children:e})}function n(){let{isInitialized:e,isLoading:t}=(0,r.useTenant)();return e&&!t}function s({children:e,fallback:a}){return n()?(0,t.jsx)(t.Fragment,{children:e}):a??null}e.s(["TenantProvider",()=>i,"TenantReady",()=>s,"useTenantReady",()=>n])},48030,e=>{"use strict";var t=e.i(43476),a=e.i(38036),r=e.i(67881),i=e.i(37727),n=e.i(86536);function s(){let{isImpersonating:e,impersonatedUserEmail:s,endImpersonation:o}=(0,a.useAuth)();return e?(0,t.jsxs)("div",{className:"bg-amber-500 text-amber-950 px-4 py-2 flex items-center justify-between gap-4 text-sm font-medium",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)(n.Eye,{className:"w-4 h-4"}),(0,t.jsxs)("span",{children:["Viewing as ",(0,t.jsx)("strong",{children:s})]})]}),(0,t.jsxs)(r.Button,{variant:"outline",size:"sm",onClick:o,className:"bg-amber-100 hover:bg-amber-200 text-amber-950 border-amber-600 h-7 px-3",children:[(0,t.jsx)(i.X,{className:"w-3 h-3 mr-1"}),"Stop Impersonating"]})]}):null}function o(){return(0,t.jsx)(s,{})}e.s(["ImpersonationBannerWrapper",()=>o],48030)},72285,e=>{"use strict";var t=e.i(71645);function a(){return(0,t.useEffect)(()=>{let e="localhost"===window.location.hostname;"https:"===window.location.protocol||e?"serviceWorker"in navigator?navigator.serviceWorker.register("/sw.js",{scope:"/"}).then(e=>{console.log("[SW] Service worker registered:",e.scope),e.addEventListener("updatefound",()=>{let t=e.installing;t&&(console.log("[SW] New service worker installing..."),t.addEventListener("statechange",()=>{"installed"===t.state&&navigator.serviceWorker.controller&&console.log("[SW] New service worker installed, refresh for updates")}))})}).catch(e=>{console.error("[SW] Service worker registration failed:",e)}):console.log("[SW] Service workers not supported"):console.log("[SW] Skipping service worker registration: requires HTTPS")},[]),null}e.s(["ServiceWorkerRegistration",()=>a])}]);
@@ -0,0 +1,4 @@
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,12718,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"InvariantError",{enumerable:!0,get:function(){return n}});class n extends Error{constructor(e,t){super(`Invariant: ${e.endsWith(".")?e:e+"."} This is a bug in Next.js.`,t),this.name="InvariantError"}}},55682,(e,t,r)=>{"use strict";r._=function(e){return e&&e.__esModule?e:{default:e}}},32061,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={BailoutToCSRError:function(){return u},isBailoutToCSRError:function(){return i}};for(var o in n)Object.defineProperty(r,o,{enumerable:!0,get:n[o]});let a="BAILOUT_TO_CLIENT_SIDE_RENDERING";class u extends Error{constructor(e){super(`Bail out to client-side rendering: ${e}`),this.reason=e,this.digest=a}}function i(e){return"object"==typeof e&&null!==e&&"digest"in e&&e.digest===a}},54394,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={HTTPAccessErrorStatus:function(){return a},HTTP_ERROR_FALLBACK_ERROR_CODE:function(){return i},getAccessFallbackErrorTypeByStatus:function(){return l},getAccessFallbackHTTPStatus:function(){return s},isHTTPAccessFallbackError:function(){return c}};for(var o in n)Object.defineProperty(r,o,{enumerable:!0,get:n[o]});let a={NOT_FOUND:404,FORBIDDEN:403,UNAUTHORIZED:401},u=new Set(Object.values(a)),i="NEXT_HTTP_ERROR_FALLBACK";function c(e){if("object"!=typeof e||null===e||!("digest"in e)||"string"!=typeof e.digest)return!1;let[t,r]=e.digest.split(";");return t===i&&u.has(Number(r))}function s(e){return Number(e.digest.split(";")[1])}function l(e){switch(e){case 401:return"unauthorized";case 403:return"forbidden";case 404:return"not-found";default:return}}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},76963,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"RedirectStatusCode",{enumerable:!0,get:function(){return o}});var n,o=((n={})[n.SeeOther=303]="SeeOther",n[n.TemporaryRedirect=307]="TemporaryRedirect",n[n.PermanentRedirect=308]="PermanentRedirect",n);("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},68391,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n,o={REDIRECT_ERROR_CODE:function(){return i},RedirectType:function(){return c},isRedirectError:function(){return s}};for(var a in o)Object.defineProperty(r,a,{enumerable:!0,get:o[a]});let u=e.r(76963),i="NEXT_REDIRECT";var c=((n={}).push="push",n.replace="replace",n);function s(e){if("object"!=typeof e||null===e||!("digest"in e)||"string"!=typeof e.digest)return!1;let t=e.digest.split(";"),[r,n]=t,o=t.slice(2,-2).join(";"),a=Number(t.at(-2));return r===i&&("replace"===n||"push"===n)&&"string"==typeof o&&!isNaN(a)&&a in u.RedirectStatusCode}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},65713,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"isNextRouterError",{enumerable:!0,get:function(){return a}});let n=e.r(54394),o=e.r(68391);function a(e){return(0,o.isRedirectError)(e)||(0,n.isHTTPAccessFallbackError)(e)}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},61994,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={NavigationPromisesContext:function(){return s},PathParamsContext:function(){return c},PathnameContext:function(){return i},SearchParamsContext:function(){return u},createDevToolsInstrumentedPromise:function(){return l}};for(var o in n)Object.defineProperty(r,o,{enumerable:!0,get:n[o]});let a=e.r(71645),u=(0,a.createContext)(null),i=(0,a.createContext)(null),c=(0,a.createContext)(null),s=(0,a.createContext)(null);function l(e,t){let r=Promise.resolve(t);return r.status="fulfilled",r.value=t,r.displayName=`${e} (SSR)`,r}},45955,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"workUnitAsyncStorageInstance",{enumerable:!0,get:function(){return n}});let n=(0,e.r(90317).createAsyncLocalStorage)()},21768,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={ACTION_HEADER:function(){return u},FLIGHT_HEADERS:function(){return _},NEXT_ACTION_NOT_FOUND_HEADER:function(){return R},NEXT_DID_POSTPONE_HEADER:function(){return b},NEXT_HMR_REFRESH_HASH_COOKIE:function(){return d},NEXT_HMR_REFRESH_HEADER:function(){return l},NEXT_HTML_REQUEST_ID_HEADER:function(){return v},NEXT_IS_PRERENDER_HEADER:function(){return g},NEXT_REQUEST_ID_HEADER:function(){return O},NEXT_REWRITTEN_PATH_HEADER:function(){return h},NEXT_REWRITTEN_QUERY_HEADER:function(){return E},NEXT_ROUTER_PREFETCH_HEADER:function(){return c},NEXT_ROUTER_SEGMENT_PREFETCH_HEADER:function(){return s},NEXT_ROUTER_STALE_TIME_HEADER:function(){return m},NEXT_ROUTER_STATE_TREE_HEADER:function(){return i},NEXT_RSC_UNION_QUERY:function(){return y},NEXT_URL:function(){return f},RSC_CONTENT_TYPE_HEADER:function(){return p},RSC_HEADER:function(){return a}};for(var o in n)Object.defineProperty(r,o,{enumerable:!0,get:n[o]});let a="rsc",u="next-action",i="next-router-state-tree",c="next-router-prefetch",s="next-router-segment-prefetch",l="next-hmr-refresh",d="__next_hmr_refresh_hash__",f="next-url",p="text/x-component",_=[a,i,c,l,s],y="_rsc",m="x-nextjs-stale-time",b="x-nextjs-postponed",h="x-nextjs-rewritten-path",E="x-nextjs-rewritten-query",g="x-nextjs-prerender",R="x-nextjs-action-not-found",O="x-nextjs-request-id",v="x-nextjs-html-request-id";("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},62141,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={getCacheSignal:function(){return m},getDraftModeProviderForCacheScope:function(){return y},getHmrRefreshHash:function(){return f},getPrerenderResumeDataCache:function(){return l},getRenderResumeDataCache:function(){return d},getRuntimeStagePromise:function(){return b},getServerComponentsHmrCache:function(){return _},isHmrRefresh:function(){return p},throwForMissingRequestStore:function(){return c},throwInvariantForMissingStore:function(){return s},workUnitAsyncStorage:function(){return a.workUnitAsyncStorageInstance}};for(var o in n)Object.defineProperty(r,o,{enumerable:!0,get:n[o]});let a=e.r(45955),u=e.r(21768),i=e.r(12718);function c(e){throw Object.defineProperty(Error(`\`${e}\` was called outside a request scope. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context`),"__NEXT_ERROR_CODE",{value:"E251",enumerable:!1,configurable:!0})}function s(){throw Object.defineProperty(new i.InvariantError("Expected workUnitAsyncStorage to have a store."),"__NEXT_ERROR_CODE",{value:"E696",enumerable:!1,configurable:!0})}function l(e){switch(e.type){case"prerender":case"prerender-runtime":case"prerender-ppr":case"prerender-client":return e.prerenderResumeDataCache;case"request":if(e.prerenderResumeDataCache)return e.prerenderResumeDataCache;case"prerender-legacy":case"cache":case"private-cache":case"unstable-cache":return null;default:return e}}function d(e){switch(e.type){case"request":case"prerender":case"prerender-runtime":case"prerender-client":if(e.renderResumeDataCache)return e.renderResumeDataCache;case"prerender-ppr":return e.prerenderResumeDataCache??null;case"cache":case"private-cache":case"unstable-cache":case"prerender-legacy":return null;default:return e}}function f(e,t){if(e.dev)switch(t.type){case"cache":case"private-cache":case"prerender":case"prerender-runtime":return t.hmrRefreshHash;case"request":var r;return null==(r=t.cookies.get(u.NEXT_HMR_REFRESH_HASH_COOKIE))?void 0:r.value}}function p(e,t){if(e.dev)switch(t.type){case"cache":case"private-cache":case"request":return t.isHmrRefresh??!1}return!1}function _(e,t){if(e.dev)switch(t.type){case"cache":case"private-cache":case"request":return t.serverComponentsHmrCache}}function y(e,t){if(e.isDraftMode)switch(t.type){case"cache":case"private-cache":case"unstable-cache":case"prerender-runtime":case"request":return t.draftMode}}function m(e){switch(e.type){case"prerender":case"prerender-client":case"prerender-runtime":return e.cacheSignal;case"request":if(e.cacheSignal)return e.cacheSignal;case"prerender-ppr":case"prerender-legacy":case"cache":case"private-cache":case"unstable-cache":return null;default:return e}}function b(e){switch(e.type){case"prerender-runtime":case"private-cache":return e.runtimeStagePromise;case"prerender":case"prerender-client":case"prerender-ppr":case"prerender-legacy":case"request":case"cache":case"unstable-cache":return null;default:return e}}},90809,(e,t,r)=>{"use strict";function n(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(n=function(e){return e?r:t})(e)}r._=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=n(t);if(r&&r.has(e))return r.get(e);var o={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var u in e)if("default"!==u&&Object.prototype.hasOwnProperty.call(e,u)){var i=a?Object.getOwnPropertyDescriptor(e,u):null;i&&(i.get||i.set)?Object.defineProperty(o,u,i):o[u]=e[u]}return o.default=e,r&&r.set(e,o),o}},13258,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={DEFAULT_SEGMENT_KEY:function(){return d},PAGE_SEGMENT_KEY:function(){return l},addSearchParamsIfPageSegment:function(){return c},computeSelectedLayoutSegment:function(){return s},getSegmentValue:function(){return a},getSelectedLayoutSegmentPath:function(){return function e(t,r,n=!0,o=[]){let u;if(n)u=t[1][r];else{let e=t[1];u=e.children??Object.values(e)[0]}if(!u)return o;let i=a(u[0]);return!i||i.startsWith(l)?o:(o.push(i),e(u,r,!1,o))}},isGroupSegment:function(){return u},isParallelRouteSegment:function(){return i}};for(var o in n)Object.defineProperty(r,o,{enumerable:!0,get:n[o]});function a(e){return Array.isArray(e)?e[1]:e}function u(e){return"("===e[0]&&e.endsWith(")")}function i(e){return e.startsWith("@")&&"@children"!==e}function c(e,t){if(e.includes(l)){let e=JSON.stringify(t);return"{}"!==e?l+"?"+e:l}return e}function s(e,t){if(!e||0===e.length)return null;let r="children"===t?e[0]:e[e.length-1];return r===d?null:r}let l="__PAGE__",d="__DEFAULT__"},39470,(e,t,r)=>{"use strict";function n(){let e,t,r=new Promise((r,n)=>{e=r,t=n});return{resolve:e,reject:t,promise:r}}Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"createPromiseWithResolvers",{enumerable:!0,get:function(){return n}})},8372,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={AppRouterContext:function(){return u},GlobalLayoutRouterContext:function(){return c},LayoutRouterContext:function(){return i},MissingSlotContext:function(){return l},TemplateContext:function(){return s}};for(var o in n)Object.defineProperty(r,o,{enumerable:!0,get:n[o]});let a=e.r(55682)._(e.r(71645)),u=a.default.createContext(null),i=a.default.createContext(null),c=a.default.createContext(null),s=a.default.createContext(null),l=a.default.createContext(new Set)},3680,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"ReadonlyURLSearchParams",{enumerable:!0,get:function(){return o}});class n extends Error{constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. Read more: https://nextjs.org/docs/app/api-reference/functions/use-search-params#updating-searchparams")}}class o extends URLSearchParams{append(){throw new n}delete(){throw new n}set(){throw new n}sort(){throw new n}}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},13957,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={ServerInsertedHTMLContext:function(){return u},useServerInsertedHTML:function(){return i}};for(var o in n)Object.defineProperty(r,o,{enumerable:!0,get:n[o]});let a=e.r(90809)._(e.r(71645)),u=a.default.createContext(null);function i(e){let t=(0,a.useContext)(u);t&&t(e)}},92838,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={UnrecognizedActionError:function(){return a},unstable_isUnrecognizedActionError:function(){return u}};for(var o in n)Object.defineProperty(r,o,{enumerable:!0,get:n[o]});class a extends Error{constructor(...e){super(...e),this.name="UnrecognizedActionError"}}function u(e){return!!(e&&"object"==typeof e&&e instanceof a)}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},34457,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"actionAsyncStorageInstance",{enumerable:!0,get:function(){return n}});let n=(0,e.r(90317).createAsyncLocalStorage)()},62266,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"actionAsyncStorage",{enumerable:!0,get:function(){return n.actionAsyncStorageInstance}});let n=e.r(34457)},24063,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={getRedirectError:function(){return c},getRedirectStatusCodeFromError:function(){return p},getRedirectTypeFromError:function(){return f},getURLFromRedirectError:function(){return d},permanentRedirect:function(){return l},redirect:function(){return s}};for(var o in n)Object.defineProperty(r,o,{enumerable:!0,get:n[o]});let a=e.r(76963),u=e.r(68391),i="undefined"==typeof window?e.r(62266).actionAsyncStorage:void 0;function c(e,t,r=a.RedirectStatusCode.TemporaryRedirect){let n=Object.defineProperty(Error(u.REDIRECT_ERROR_CODE),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});return n.digest=`${u.REDIRECT_ERROR_CODE};${t};${e};${r};`,n}function s(e,t){throw c(e,t??=i?.getStore()?.isAction?u.RedirectType.push:u.RedirectType.replace,a.RedirectStatusCode.TemporaryRedirect)}function l(e,t=u.RedirectType.replace){throw c(e,t,a.RedirectStatusCode.PermanentRedirect)}function d(e){return(0,u.isRedirectError)(e)?e.digest.split(";").slice(2,-2).join(";"):null}function f(e){if(!(0,u.isRedirectError)(e))throw Object.defineProperty(Error("Not a redirect error"),"__NEXT_ERROR_CODE",{value:"E260",enumerable:!1,configurable:!0});return e.digest.split(";",2)[1]}function p(e){if(!(0,u.isRedirectError)(e))throw Object.defineProperty(Error("Not a redirect error"),"__NEXT_ERROR_CODE",{value:"E260",enumerable:!1,configurable:!0});return Number(e.digest.split(";").at(-2))}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},22783,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"notFound",{enumerable:!0,get:function(){return a}});let n=e.r(54394),o=`${n.HTTP_ERROR_FALLBACK_ERROR_CODE};404`;function a(){let e=Object.defineProperty(Error(o),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});throw e.digest=o,e}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},79854,(e,t,r)=>{"use strict";function n(){throw Object.defineProperty(Error("`forbidden()` is experimental and only allowed to be enabled when `experimental.authInterrupts` is enabled."),"__NEXT_ERROR_CODE",{value:"E488",enumerable:!1,configurable:!0})}Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"forbidden",{enumerable:!0,get:function(){return n}}),e.r(54394).HTTP_ERROR_FALLBACK_ERROR_CODE,("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},22683,(e,t,r)=>{"use strict";function n(){throw Object.defineProperty(Error("`unauthorized()` is experimental and only allowed to be used when `experimental.authInterrupts` is enabled."),"__NEXT_ERROR_CODE",{value:"E411",enumerable:!1,configurable:!0})}Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"unauthorized",{enumerable:!0,get:function(){return n}}),e.r(54394).HTTP_ERROR_FALLBACK_ERROR_CODE,("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},15507,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"unstable_rethrow",{enumerable:!0,get:function(){return function e(t){if((0,o.isNextRouterError)(t)||(0,n.isBailoutToCSRError)(t))throw t;t instanceof Error&&"cause"in t&&e(t.cause)}}});let n=e.r(32061),o=e.r(65713);("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},63138,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={isHangingPromiseRejectionError:function(){return a},makeDevtoolsIOAwarePromise:function(){return d},makeHangingPromise:function(){return s}};for(var o in n)Object.defineProperty(r,o,{enumerable:!0,get:n[o]});function a(e){return"object"==typeof e&&null!==e&&"digest"in e&&e.digest===u}let u="HANGING_PROMISE_REJECTION";class i extends Error{constructor(e,t){super(`During prerendering, ${t} rejects when the prerender is complete. Typically these errors are handled by React but if you move ${t} to a different context by using \`setTimeout\`, \`after\`, or similar functions you may observe this error and you should handle it in that context. This occurred at route "${e}".`),this.route=e,this.expression=t,this.digest=u}}let c=new WeakMap;function s(e,t,r){if(e.aborted)return Promise.reject(new i(t,r));{let n=new Promise((n,o)=>{let a=o.bind(null,new i(t,r)),u=c.get(e);if(u)u.push(a);else{let t=[a];c.set(e,t),e.addEventListener("abort",()=>{for(let e=0;e<t.length;e++)t[e]()},{once:!0})}});return n.catch(l),n}}function l(){}function d(e,t,r){return t.stagedRendering?t.stagedRendering.delayUntilStage(r,void 0,e):new Promise(t=>{setTimeout(()=>{t(e)},0)})}},67287,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"isPostpone",{enumerable:!0,get:function(){return o}});let n=Symbol.for("react.postpone");function o(e){return"object"==typeof e&&null!==e&&e.$$typeof===n}},76353,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={DynamicServerError:function(){return u},isDynamicServerError:function(){return i}};for(var o in n)Object.defineProperty(r,o,{enumerable:!0,get:n[o]});let a="DYNAMIC_SERVER_USAGE";class u extends Error{constructor(e){super(`Dynamic server usage: ${e}`),this.description=e,this.digest=a}}function i(e){return"object"==typeof e&&null!==e&&"digest"in e&&"string"==typeof e.digest&&e.digest===a}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},43248,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={StaticGenBailoutError:function(){return u},isStaticGenBailoutError:function(){return i}};for(var o in n)Object.defineProperty(r,o,{enumerable:!0,get:n[o]});let a="NEXT_STATIC_GEN_BAILOUT";class u extends Error{constructor(...e){super(...e),this.code=a}}function i(e){return"object"==typeof e&&null!==e&&"code"in e&&e.code===a}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},54839,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={METADATA_BOUNDARY_NAME:function(){return a},OUTLET_BOUNDARY_NAME:function(){return i},ROOT_LAYOUT_BOUNDARY_NAME:function(){return c},VIEWPORT_BOUNDARY_NAME:function(){return u}};for(var o in n)Object.defineProperty(r,o,{enumerable:!0,get:n[o]});let a="__next_metadata_boundary__",u="__next_viewport_boundary__",i="__next_outlet_boundary__",c="__next_root_layout_boundary__"},29419,(e,t,r)=>{"use strict";var n=e.i(47167);Object.defineProperty(r,"__esModule",{value:!0});var o={atLeastOneTask:function(){return c},scheduleImmediate:function(){return i},scheduleOnNextTick:function(){return u},waitAtLeastOneReactRenderTask:function(){return s}};for(var a in o)Object.defineProperty(r,a,{enumerable:!0,get:o[a]});let u=e=>{Promise.resolve().then(()=>{n.default.nextTick(e)})},i=e=>{setImmediate(e)};function c(){return new Promise(e=>i(e))}function s(){return new Promise(e=>setImmediate(e))}},42852,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n,o={RenderStage:function(){return c},StagedRenderingController:function(){return s}};for(var a in o)Object.defineProperty(r,a,{enumerable:!0,get:o[a]});let u=e.r(12718),i=e.r(39470);var c=((n={})[n.Static=1]="Static",n[n.Runtime=2]="Runtime",n[n.Dynamic=3]="Dynamic",n);class s{constructor(e=null){this.abortSignal=e,this.currentStage=1,this.runtimeStagePromise=(0,i.createPromiseWithResolvers)(),this.dynamicStagePromise=(0,i.createPromiseWithResolvers)(),e&&e.addEventListener("abort",()=>{let{reason:t}=e;this.currentStage<2&&(this.runtimeStagePromise.promise.catch(l),this.runtimeStagePromise.reject(t)),this.currentStage<3&&(this.dynamicStagePromise.promise.catch(l),this.dynamicStagePromise.reject(t))},{once:!0})}advanceStage(e){!(this.currentStage>=e)&&(this.currentStage=e,e>=2&&this.runtimeStagePromise.resolve(),e>=3&&this.dynamicStagePromise.resolve())}getStagePromise(e){switch(e){case 2:return this.runtimeStagePromise.promise;case 3:return this.dynamicStagePromise.promise;default:throw Object.defineProperty(new u.InvariantError(`Invalid render stage: ${e}`),"__NEXT_ERROR_CODE",{value:"E881",enumerable:!1,configurable:!0})}}waitForStage(e){return this.getStagePromise(e)}delayUntilStage(e,t,r){var n,o,a;let u,i=(n=this.getStagePromise(e),o=t,a=r,u=new Promise((e,t)=>{n.then(e.bind(null,a),t)}),void 0!==o&&(u.displayName=o),u);return this.abortSignal&&i.catch(l),i}}function l(){}},67673,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n,o,a={Postpone:function(){return D},PreludeState:function(){return Q},abortAndThrowOnSynchronousRequestDataAccess:function(){return w},abortOnSynchronousPlatformIOAccess:function(){return j},accessedDynamicData:function(){return U},annotateDynamicAccess:function(){return B},consumeDynamicAccess:function(){return H},createDynamicTrackingState:function(){return E},createDynamicValidationState:function(){return g},createHangingInputAbortSignal:function(){return X},createRenderInBrowserAbortSignal:function(){return $},delayUntilRuntimeStage:function(){return ee},formatDynamicAPIAccesses:function(){return L},getFirstDynamicReason:function(){return R},isDynamicPostpone:function(){return C},isPrerenderInterruptedError:function(){return k},logDisallowedDynamicError:function(){return J},markCurrentScopeAsDynamic:function(){return O},postponeWithTracking:function(){return x},throwIfDisallowedDynamic:function(){return Z},throwToInterruptStaticGeneration:function(){return v},trackAllowedDynamicAccess:function(){return V},trackDynamicDataInDynamicRender:function(){return P},trackSynchronousPlatformIOAccessInDev:function(){return T},useDynamicRouteParams:function(){return F},useDynamicSearchParams:function(){return W}};for(var u in a)Object.defineProperty(r,u,{enumerable:!0,get:a[u]});let i=(n=e.r(71645))&&n.__esModule?n:{default:n},c=e.r(76353),s=e.r(43248),l=e.r(62141),d=e.r(63599),f=e.r(63138),p=e.r(54839),_=e.r(29419),y=e.r(32061),m=e.r(12718),b=e.r(42852),h="function"==typeof i.default.unstable_postpone;function E(e){return{isDebugDynamicAccesses:e,dynamicAccesses:[],syncDynamicErrorWithStack:null}}function g(){return{hasSuspenseAboveBody:!1,hasDynamicMetadata:!1,hasDynamicViewport:!1,hasAllowedDynamic:!1,dynamicErrors:[]}}function R(e){var t;return null==(t=e.dynamicAccesses[0])?void 0:t.expression}function O(e,t,r){if(t)switch(t.type){case"cache":case"unstable-cache":case"private-cache":return}if(!e.forceDynamic&&!e.forceStatic){if(e.dynamicShouldError)throw Object.defineProperty(new s.StaticGenBailoutError(`Route ${e.route} with \`dynamic = "error"\` couldn't be rendered statically because it used \`${r}\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`),"__NEXT_ERROR_CODE",{value:"E553",enumerable:!1,configurable:!0});if(t)switch(t.type){case"prerender-ppr":return x(e.route,r,t.dynamicTracking);case"prerender-legacy":t.revalidate=0;let n=Object.defineProperty(new c.DynamicServerError(`Route ${e.route} couldn't be rendered statically because it used ${r}. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`),"__NEXT_ERROR_CODE",{value:"E550",enumerable:!1,configurable:!0});throw e.dynamicUsageDescription=r,e.dynamicUsageStack=n.stack,n}}}function v(e,t,r){let n=Object.defineProperty(new c.DynamicServerError(`Route ${t.route} couldn't be rendered statically because it used \`${e}\`. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`),"__NEXT_ERROR_CODE",{value:"E558",enumerable:!1,configurable:!0});throw r.revalidate=0,t.dynamicUsageDescription=e,t.dynamicUsageStack=n.stack,n}function P(e){switch(e.type){case"cache":case"unstable-cache":case"private-cache":return}}function S(e,t,r){let n=I(`Route ${e} needs to bail out of prerendering at this point because it used ${t}.`);r.controller.abort(n);let o=r.dynamicTracking;o&&o.dynamicAccesses.push({stack:o.isDebugDynamicAccesses?Error().stack:void 0,expression:t})}function j(e,t,r,n){let o=n.dynamicTracking;S(e,t,n),o&&null===o.syncDynamicErrorWithStack&&(o.syncDynamicErrorWithStack=r)}function T(e){e.stagedRendering&&e.stagedRendering.advanceStage(b.RenderStage.Dynamic)}function w(e,t,r,n){if(!1===n.controller.signal.aborted){S(e,t,n);let o=n.dynamicTracking;o&&null===o.syncDynamicErrorWithStack&&(o.syncDynamicErrorWithStack=r)}throw I(`Route ${e} needs to bail out of prerendering at this point because it used ${t}.`)}function D({reason:e,route:t}){let r=l.workUnitAsyncStorage.getStore();x(t,e,r&&"prerender-ppr"===r.type?r.dynamicTracking:null)}function x(e,t,r){(function(){if(!h)throw Object.defineProperty(Error("Invariant: React.unstable_postpone is not defined. This suggests the wrong version of React was loaded. This is a bug in Next.js"),"__NEXT_ERROR_CODE",{value:"E224",enumerable:!1,configurable:!0})})(),r&&r.dynamicAccesses.push({stack:r.isDebugDynamicAccesses?Error().stack:void 0,expression:t}),i.default.unstable_postpone(A(e,t))}function A(e,t){return`Route ${e} needs to bail out of prerendering at this point because it used ${t}. React throws this special object to indicate where. It should not be caught by your own try/catch. Learn more: https://nextjs.org/docs/messages/ppr-caught-error`}function C(e){return"object"==typeof e&&null!==e&&"string"==typeof e.message&&M(e.message)}function M(e){return e.includes("needs to bail out of prerendering at this point because it used")&&e.includes("Learn more: https://nextjs.org/docs/messages/ppr-caught-error")}if(!1===M(A("%%%","^^^")))throw Object.defineProperty(Error("Invariant: isDynamicPostpone misidentified a postpone reason. This is a bug in Next.js"),"__NEXT_ERROR_CODE",{value:"E296",enumerable:!1,configurable:!0});let N="NEXT_PRERENDER_INTERRUPTED";function I(e){let t=Object.defineProperty(Error(e),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});return t.digest=N,t}function k(e){return"object"==typeof e&&null!==e&&e.digest===N&&"name"in e&&"message"in e&&e instanceof Error}function U(e){return e.length>0}function H(e,t){return e.dynamicAccesses.push(...t.dynamicAccesses),e.dynamicAccesses}function L(e){return e.filter(e=>"string"==typeof e.stack&&e.stack.length>0).map(({expression:e,stack:t})=>(t=t.split("\n").slice(4).filter(e=>!(e.includes("node_modules/next/")||e.includes(" (<anonymous>)")||e.includes(" (node:"))).join("\n"),`Dynamic API Usage Debug - ${e}:
2
+ ${t}`))}function $(){let e=new AbortController;return e.abort(Object.defineProperty(new y.BailoutToCSRError("Render in Browser"),"__NEXT_ERROR_CODE",{value:"E721",enumerable:!1,configurable:!0})),e.signal}function X(e){switch(e.type){case"prerender":case"prerender-runtime":let t=new AbortController;if(e.cacheSignal)e.cacheSignal.inputReady().then(()=>{t.abort()});else{let r=(0,l.getRuntimeStagePromise)(e);r?r.then(()=>(0,_.scheduleOnNextTick)(()=>t.abort())):(0,_.scheduleOnNextTick)(()=>t.abort())}return t.signal;case"prerender-client":case"prerender-ppr":case"prerender-legacy":case"request":case"cache":case"private-cache":case"unstable-cache":return}}function B(e,t){let r=t.dynamicTracking;r&&r.dynamicAccesses.push({stack:r.isDebugDynamicAccesses?Error().stack:void 0,expression:e})}function F(e){let t=d.workAsyncStorage.getStore(),r=l.workUnitAsyncStorage.getStore();if(t&&r)switch(r.type){case"prerender-client":case"prerender":{let n=r.fallbackRouteParams;n&&n.size>0&&i.default.use((0,f.makeHangingPromise)(r.renderSignal,t.route,e));break}case"prerender-ppr":{let n=r.fallbackRouteParams;if(n&&n.size>0)return x(t.route,e,r.dynamicTracking);break}case"prerender-runtime":throw Object.defineProperty(new m.InvariantError(`\`${e}\` was called during a runtime prerender. Next.js should be preventing ${e} from being included in server components statically, but did not in this case.`),"__NEXT_ERROR_CODE",{value:"E771",enumerable:!1,configurable:!0});case"cache":case"private-cache":throw Object.defineProperty(new m.InvariantError(`\`${e}\` was called inside a cache scope. Next.js should be preventing ${e} from being included in server components statically, but did not in this case.`),"__NEXT_ERROR_CODE",{value:"E745",enumerable:!1,configurable:!0})}}function W(e){let t=d.workAsyncStorage.getStore(),r=l.workUnitAsyncStorage.getStore();if(t)switch(!r&&(0,l.throwForMissingRequestStore)(e),r.type){case"prerender-client":i.default.use((0,f.makeHangingPromise)(r.renderSignal,t.route,e));break;case"prerender-legacy":case"prerender-ppr":if(t.forceStatic)return;throw Object.defineProperty(new y.BailoutToCSRError(e),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});case"prerender":case"prerender-runtime":throw Object.defineProperty(new m.InvariantError(`\`${e}\` was called from a Server Component. Next.js should be preventing ${e} from being included in server components statically, but did not in this case.`),"__NEXT_ERROR_CODE",{value:"E795",enumerable:!1,configurable:!0});case"cache":case"unstable-cache":case"private-cache":throw Object.defineProperty(new m.InvariantError(`\`${e}\` was called inside a cache scope. Next.js should be preventing ${e} from being included in server components statically, but did not in this case.`),"__NEXT_ERROR_CODE",{value:"E745",enumerable:!1,configurable:!0});case"request":return}}let G=/\n\s+at Suspense \(<anonymous>\)/,q=RegExp(`\\n\\s+at Suspense \\(<anonymous>\\)(?:(?!\\n\\s+at (?:body|div|main|section|article|aside|header|footer|nav|form|p|span|h1|h2|h3|h4|h5|h6) \\(<anonymous>\\))[\\s\\S])*?\\n\\s+at ${p.ROOT_LAYOUT_BOUNDARY_NAME} \\([^\\n]*\\)`),z=RegExp(`\\n\\s+at ${p.METADATA_BOUNDARY_NAME}[\\n\\s]`),Y=RegExp(`\\n\\s+at ${p.VIEWPORT_BOUNDARY_NAME}[\\n\\s]`),K=RegExp(`\\n\\s+at ${p.OUTLET_BOUNDARY_NAME}[\\n\\s]`);function V(e,t,r,n){if(!K.test(t)){if(z.test(t)){r.hasDynamicMetadata=!0;return}if(Y.test(t)){r.hasDynamicViewport=!0;return}if(q.test(t)){r.hasAllowedDynamic=!0,r.hasSuspenseAboveBody=!0;return}else if(G.test(t)){r.hasAllowedDynamic=!0;return}else{var o,a;let u;if(n.syncDynamicErrorWithStack)return void r.dynamicErrors.push(n.syncDynamicErrorWithStack);let i=(o=`Route "${e.route}": Uncached data was accessed outside of <Suspense>. This delays the entire page from rendering, resulting in a slow user experience. Learn more: https://nextjs.org/docs/messages/blocking-route`,a=t,(u=Object.defineProperty(Error(o),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0})).stack=u.name+": "+o+a,u);return void r.dynamicErrors.push(i)}}}var Q=((o={})[o.Full=0]="Full",o[o.Empty=1]="Empty",o[o.Errored=2]="Errored",o);function J(e,t){console.error(t),e.dev||(e.hasReadableErrorStacks?console.error(`To get a more detailed stack trace and pinpoint the issue, start the app in development mode by running \`next dev\`, then open "${e.route}" in your browser to investigate the error.`):console.error(`To get a more detailed stack trace and pinpoint the issue, try one of the following:
3
+ - Start the app in development mode by running \`next dev\`, then open "${e.route}" in your browser to investigate the error.
4
+ - Rerun the production build with \`next build --debug-prerender\` to generate better stack traces.`))}function Z(e,t,r,n){if(n.syncDynamicErrorWithStack)throw J(e,n.syncDynamicErrorWithStack),new s.StaticGenBailoutError;if(0!==t){if(r.hasSuspenseAboveBody)return;let n=r.dynamicErrors;if(n.length>0){for(let t=0;t<n.length;t++)J(e,n[t]);throw new s.StaticGenBailoutError}if(r.hasDynamicViewport)throw console.error(`Route "${e.route}" has a \`generateViewport\` that depends on Request data (\`cookies()\`, etc...) or uncached external data (\`fetch(...)\`, etc...) without explicitly allowing fully dynamic rendering. See more info here: https://nextjs.org/docs/messages/next-prerender-dynamic-viewport`),new s.StaticGenBailoutError;if(1===t)throw console.error(`Route "${e.route}" did not produce a static shell and Next.js was unable to determine a reason. This is a bug in Next.js.`),new s.StaticGenBailoutError}else if(!1===r.hasAllowedDynamic&&r.hasDynamicMetadata)throw console.error(`Route "${e.route}" has a \`generateMetadata\` that depends on Request data (\`cookies()\`, etc...) or uncached external data (\`fetch(...)\`, etc...) when the rest of the route does not. See more info here: https://nextjs.org/docs/messages/next-prerender-dynamic-metadata`),new s.StaticGenBailoutError}function ee(e,t){return e.runtimeStagePromise?e.runtimeStagePromise.then(()=>t):t}},91414,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"unstable_rethrow",{enumerable:!0,get:function(){return function e(t){if((0,u.isNextRouterError)(t)||(0,a.isBailoutToCSRError)(t)||(0,c.isDynamicServerError)(t)||(0,i.isDynamicPostpone)(t)||(0,o.isPostpone)(t)||(0,n.isHangingPromiseRejectionError)(t)||(0,i.isPrerenderInterruptedError)(t))throw t;t instanceof Error&&"cause"in t&&e(t.cause)}}});let n=e.r(63138),o=e.r(67287),a=e.r(32061),u=e.r(65713),i=e.r(67673),c=e.r(76353);("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},90508,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"unstable_rethrow",{enumerable:!0,get:function(){return n}});let n="undefined"==typeof window?e.r(91414).unstable_rethrow:e.r(15507).unstable_rethrow;("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},92805,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={ReadonlyURLSearchParams:function(){return a.ReadonlyURLSearchParams},RedirectType:function(){return i.RedirectType},forbidden:function(){return s.forbidden},notFound:function(){return c.notFound},permanentRedirect:function(){return u.permanentRedirect},redirect:function(){return u.redirect},unauthorized:function(){return l.unauthorized},unstable_isUnrecognizedActionError:function(){return f},unstable_rethrow:function(){return d.unstable_rethrow}};for(var o in n)Object.defineProperty(r,o,{enumerable:!0,get:n[o]});let a=e.r(3680),u=e.r(24063),i=e.r(68391),c=e.r(22783),s=e.r(79854),l=e.r(22683),d=e.r(90508);function f(){throw Object.defineProperty(Error("`unstable_isUnrecognizedActionError` can only be used on the client."),"__NEXT_ERROR_CODE",{value:"E776",enumerable:!1,configurable:!0})}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},76562,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={ReadonlyURLSearchParams:function(){return f.ReadonlyURLSearchParams},RedirectType:function(){return f.RedirectType},ServerInsertedHTMLContext:function(){return l.ServerInsertedHTMLContext},forbidden:function(){return f.forbidden},notFound:function(){return f.notFound},permanentRedirect:function(){return f.permanentRedirect},redirect:function(){return f.redirect},unauthorized:function(){return f.unauthorized},unstable_isUnrecognizedActionError:function(){return d.unstable_isUnrecognizedActionError},unstable_rethrow:function(){return f.unstable_rethrow},useParams:function(){return h},usePathname:function(){return m},useRouter:function(){return b},useSearchParams:function(){return y},useSelectedLayoutSegment:function(){return g},useSelectedLayoutSegments:function(){return E},useServerInsertedHTML:function(){return l.useServerInsertedHTML}};for(var o in n)Object.defineProperty(r,o,{enumerable:!0,get:n[o]});let a=e.r(90809)._(e.r(71645)),u=e.r(8372),i=e.r(61994),c=e.r(13258),s=e.r(3680),l=e.r(13957),d=e.r(92838),f=e.r(92805),p="undefined"==typeof window?e.r(67673).useDynamicRouteParams:void 0,_="undefined"==typeof window?e.r(67673).useDynamicSearchParams:void 0;function y(){_?.("useSearchParams()");let e=(0,a.useContext)(i.SearchParamsContext);return(0,a.useMemo)(()=>e?new s.ReadonlyURLSearchParams(e):null,[e])}function m(){return p?.("usePathname()"),(0,a.useContext)(i.PathnameContext)}function b(){let e=(0,a.useContext)(u.AppRouterContext);if(null===e)throw Object.defineProperty(Error("invariant expected app router to be mounted"),"__NEXT_ERROR_CODE",{value:"E238",enumerable:!1,configurable:!0});return e}function h(){return p?.("useParams()"),(0,a.useContext)(i.PathParamsContext)}function E(e="children"){p?.("useSelectedLayoutSegments()");let t=(0,a.useContext)(u.LayoutRouterContext);return t?(0,c.getSelectedLayoutSegmentPath)(t.parentTree,e):null}function g(e="children"){p?.("useSelectedLayoutSegment()"),(0,a.useContext)(i.NavigationPromisesContext);let t=E(e);return(0,c.computeSelectedLayoutSegment)(t,e)}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)}]);
@@ -0,0 +1,3 @@
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,27627,e=>{"use strict";var t=e.i(43476),r=e.i(71645),a=e.i(18566),s=e.i(54858),n=e.i(38036),o=e.i(54458);let i={pending:{step:1,label:"Setting up",isBlocking:!1,color:"text-muted-foreground"},searching_audio:{step:2,label:"Searching for audio",isBlocking:!1,color:"text-blue-400"},awaiting_audio_selection:{step:2,label:"Select audio source",isBlocking:!0,color:"text-amber-400"},downloading_audio:{step:3,label:"Downloading audio",isBlocking:!1,color:"text-blue-400"},downloading:{step:3,label:"Downloading",isBlocking:!1,color:"text-blue-400"},separating_stage1:{step:4,label:"Separating audio (1/2)",isBlocking:!1,color:"text-purple-400"},separating_stage2:{step:4,label:"Separating audio (2/2)",isBlocking:!1,color:"text-purple-400"},audio_complete:{step:4,label:"Audio ready, processing lyrics",isBlocking:!1,color:"text-purple-400"},transcribing:{step:4,label:"Transcribing lyrics",isBlocking:!1,color:"text-blue-400"},correcting:{step:4,label:"Correcting lyrics",isBlocking:!1,color:"text-blue-400"},lyrics_complete:{step:4,label:"Lyrics ready, processing audio",isBlocking:!1,color:"text-teal-400"},generating_screens:{step:5,label:"Generating screens",isBlocking:!1,color:"text-cyan-400"},applying_padding:{step:5,label:"Syncing countdown",isBlocking:!1,color:"text-cyan-400"},awaiting_review:{step:6,label:"Review lyrics",isBlocking:!0,color:"text-amber-400"},in_review:{step:6,label:"In review",isBlocking:!0,color:"text-blue-400"},review_complete:{step:7,label:"Starting render",isBlocking:!1,color:"text-teal-400"},rendering_video:{step:7,label:"Rendering video",isBlocking:!1,color:"text-indigo-400"},awaiting_instrumental_selection:{step:8,label:"Select instrumental",isBlocking:!0,color:"text-amber-400"},instrumental_selected:{step:9,label:"Starting final encode",isBlocking:!1,color:"text-pink-400"},generating_video:{step:9,label:"Generating final video",isBlocking:!1,color:"text-violet-400"},encoding:{step:9,label:"Encoding video",isBlocking:!1,color:"text-violet-400"},packaging:{step:9,label:"Packaging files",isBlocking:!1,color:"text-violet-400"},uploading:{step:10,label:"Uploading",isBlocking:!1,color:"text-green-400"},notifying:{step:10,label:"Sending notifications",isBlocking:!1,color:"text-green-400"},complete:{step:10,label:"Complete",isBlocking:!1,color:"text-green-400"},prep_complete:{step:10,label:"Prep complete",isBlocking:!1,color:"text-green-400"},failed:{step:0,label:"Failed",isBlocking:!1,color:"text-red-400"},cancelled:{step:0,label:"Cancelled",isBlocking:!1,color:"text-muted-foreground"}};function l(e){let t=e.status?.toLowerCase()||"pending",r=i[t];if(!r)return{step:0,total:10,label:t.replace(/_/g," "),isBlocking:!1,color:"text-muted-foreground"};if("downloading"===t&&function(e){if(!e.state_data)return!1;let t=e.state_data.audio_progress,r=e.state_data.lyrics_progress;return!!(t?.stage||r?.stage)}(e))return{step:4,total:10,label:c(e,"Processing"),isBlocking:!1,color:"text-purple-400"};if(4===r.step&&e.state_data){let t=c(e,r.label);return{step:r.step,total:10,label:t,isBlocking:r.isBlocking,color:r.color}}return{step:r.step,total:10,label:r.label,isBlocking:r.isBlocking,color:r.color}}function c(e,t){let r=e.state_data?.audio_progress,a=e.state_data?.lyrics_progress;if(r&&a){let t=r.stage||"",s=a.stage||"",n="audio_complete"===t||e.state_data?.audio_complete,o="lyrics_complete"===s||e.state_data?.lyrics_complete;if(n&&o)return"Processing complete";let i=[];if(n||i.push(function(e){switch(e){case"separating_stage1":return"Audio 1/2";case"separating_stage2":return"Audio 2/2";case"audio_complete":return"Audio done";default:return"Audio"}}(t)),o||i.push(function(e){switch(e){case"transcribing":return"Transcribing";case"correcting":return"Correcting";case"lyrics_complete":return"Lyrics done";default:return"Lyrics"}}(s)),i.length>0)return i.join(" + ")}return t}function d(e){let t=i[e?.toLowerCase()];return t?.isBlocking??!1}let u="Karaoke Generator";var p=e.i(67881),m=e.i(70065),x=e.i(75254);let h=(0,x.default)("Music2",[["circle",{cx:"8",cy:"18",r:"4",key:"1fc0mg"}],["path",{d:"M12 18V2l7 4",key:"g04rme"}]]);var g=e.i(16715),b=e.i(31278),f=e.i(91799),v=e.i(97250),y=e.i(5833),j=e.i(22016);let w=(0,x.default)("Zap",[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]]);var N=e.i(67240),k=e.i(73884);function C({job:e,onRefresh:a}){let[n,o]=(0,r.useState)(!1),[i,l]=(0,r.useState)(!1),c="failed"===e.status||"cancelled"===e.status,d=!["complete","failed","cancelled"].includes(e.status);async function u(){o(!0);try{await s.api.retryJob(e.job_id),a()}catch(e){console.error("Failed to retry job:",e)}finally{o(!1)}}async function m(){if(confirm("Are you sure you want to cancel this job?")){l(!0);try{await s.api.cancelJob(e.job_id),a()}catch(e){console.error("Failed to cancel job:",e)}finally{l(!1)}}}return d||c?(0,t.jsxs)("div",{className:"flex flex-wrap gap-2",onClick:e=>e.stopPropagation(),children:[d&&(0,t.jsxs)(p.Button,{size:"sm",variant:"ghost",onClick:m,disabled:i,className:"text-xs text-red-400 hover:text-red-300",children:[i?(0,t.jsx)(b.Loader2,{className:"w-3 h-3 mr-1 animate-spin"}):(0,t.jsx)(k.XCircle,{className:"w-3 h-3 mr-1"}),"Cancel"]}),c&&(0,t.jsxs)(p.Button,{size:"sm",variant:"ghost",onClick:u,disabled:n,className:"text-xs text-blue-400 hover:text-blue-300",children:[n?(0,t.jsx)(b.Loader2,{className:"w-3 h-3 mr-1 animate-spin"}):(0,t.jsx)(N.RotateCcw,{className:"w-3 h-3 mr-1"}),"Retry"]})]}):null}var _=e.i(24672),S=e.i(40160),E=e.i(78917),R=e.i(75505),D=e.i(74886),T=e.i(63488),L=e.i(39616),I=e.i(30374),A=e.i(23750),P=e.i(10708);function M({job:e}){let a=e.file_urls||null,o=e.state_data?.youtube_url||null,i=e.state_data?.dropbox_link||null,[l,c]=(0,r.useState)(null),[d,u]=(0,r.useState)(!1),[m,x]=(0,r.useState)(!1),[h,g]=(0,r.useState)(!1),[f,v]=(0,r.useState)(""),[y,j]=(0,r.useState)(!1),[w,N]=(0,r.useState)(!1),k=(0,r.useRef)(null),C=(0,r.useRef)(null),M=(0,r.useRef)(null);(0,r.useEffect)(()=>()=>{k.current&&clearTimeout(k.current),C.current&&clearTimeout(C.current),M.current&&clearTimeout(M.current)},[]);let{user:F}=(0,n.useAuth)(),{features:B}=(0,_.useTenant)(),O=F?.role==="admin",U=B.youtube_upload&&o,$=B.dropbox_upload&&i,H=(0,r.useCallback)(async e=>{if(!navigator?.clipboard?.writeText)return void console.error("Clipboard API not available");try{await navigator.clipboard.writeText(e),c(e),k.current&&clearTimeout(k.current),k.current=setTimeout(()=>{c(null)},2e3)}catch(e){console.error("Failed to copy to clipboard:",e)}},[]),V=(0,r.useCallback)(async()=>{if(!navigator?.clipboard?.writeText)return void console.error("Clipboard API not available");x(!0);try{let t=await s.adminApi.getCompletionMessage(e.job_id);await navigator.clipboard.writeText(t.message),u(!0),C.current&&clearTimeout(C.current),C.current=setTimeout(()=>{u(!1)},2e3)}catch(e){console.error("Failed to copy completion message:",e)}finally{x(!1)}},[e.job_id]),K=(0,r.useCallback)(async()=>{if(f.trim()){j(!0);try{await s.adminApi.sendCompletionEmail(e.job_id,f.trim(),!0),N(!0),M.current&&clearTimeout(M.current),M.current=setTimeout(()=>{g(!1),N(!1),v("")},1500)}catch(e){console.error("Failed to send email:",e),alert("Failed to send email. Please check the email address and try again.")}finally{j(!1)}}},[e.job_id,f]),z=U||$||a&&Object.keys(a).length>0,G=a&&(a?.finals?.lossy_720p_mp4||a?.finals?.lossy_4k_mp4||a?.videos?.with_vocals||a?.packages?.cdg_zip||a?.packages?.txt_zip),Y=U||$;return(0,t.jsxs)("div",{className:"space-y-2",children:[(G||Y)&&(0,t.jsxs)("div",{className:"flex flex-wrap gap-1.5",children:[Y&&(0,t.jsxs)(t.Fragment,{children:[U&&o&&(0,t.jsxs)("div",{className:"flex",children:[(0,t.jsxs)("a",{href:o,target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-1 text-xs px-3 py-1.5 rounded-l bg-red-600 hover:bg-red-500 text-white transition-colors",onClick:e=>e.stopPropagation(),children:[(0,t.jsx)(E.ExternalLink,{className:"w-3 h-3"}),"YouTube"]}),(0,t.jsx)("button",{type:"button",onClick:e=>{e.stopPropagation(),H(o)},className:"inline-flex items-center text-xs px-2 py-1.5 rounded-r bg-red-700 hover:bg-red-600 text-white transition-colors",title:"Copy YouTube URL","aria-label":l===o?"YouTube URL copied":"Copy YouTube URL",children:l===o?(0,t.jsx)("span",{className:"text-[10px]",children:"Copied!"}):(0,t.jsx)(D.Copy,{className:"w-3 h-3"})})]}),$&&i&&(0,t.jsxs)("div",{className:"flex",children:[(0,t.jsxs)("a",{href:i,target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-1 text-xs px-3 py-1.5 rounded-l bg-[#0061FE] hover:bg-[#0052d6] text-white transition-colors",onClick:e=>e.stopPropagation(),children:[(0,t.jsx)(R.FolderOpen,{className:"w-3 h-3"}),"Dropbox"]}),(0,t.jsx)("button",{type:"button",onClick:e=>{e.stopPropagation(),H(i)},className:"inline-flex items-center text-xs px-2 py-1.5 rounded-r bg-[#0052d6] hover:bg-[#0047ba] text-white transition-colors",title:"Copy Dropbox URL","aria-label":l===i?"Dropbox URL copied":"Copy Dropbox URL",children:l===i?(0,t.jsx)("span",{className:"text-[10px]",children:"Copied!"}):(0,t.jsx)(D.Copy,{className:"w-3 h-3"})})]})]}),G&&(0,t.jsxs)(t.Fragment,{children:[a?.finals?.lossy_4k_mp4&&(0,t.jsxs)("a",{href:s.api.getDownloadUrl(e.job_id,"finals","lossy_4k_mp4"),className:"inline-flex items-center gap-1 text-xs px-3 py-1.5 rounded bg-[var(--brand-pink)] hover:bg-[var(--brand-pink-hover)] text-white transition-colors",onClick:e=>e.stopPropagation(),children:[(0,t.jsx)(S.Download,{className:"w-3 h-3"}),"4K Video"]}),a?.finals?.lossy_720p_mp4&&(0,t.jsxs)("a",{href:s.api.getDownloadUrl(e.job_id,"finals","lossy_720p_mp4"),className:"inline-flex items-center gap-1 text-xs px-3 py-1.5 rounded bg-[#252525] hover:bg-[#333333] text-[var(--text)] border border-[var(--card-border)] transition-colors",onClick:e=>e.stopPropagation(),children:[(0,t.jsx)(S.Download,{className:"w-3 h-3"}),"720p Video"]}),a?.videos?.with_vocals&&(0,t.jsxs)("a",{href:s.api.getDownloadUrl(e.job_id,"videos","with_vocals"),className:"inline-flex items-center gap-1 text-xs px-3 py-1.5 rounded bg-[#252525] hover:bg-[#333333] text-[var(--text)] border border-[var(--card-border)] transition-colors",onClick:e=>e.stopPropagation(),children:[(0,t.jsx)(S.Download,{className:"w-3 h-3"}),"With Vocals"]}),a?.packages?.cdg_zip&&(0,t.jsxs)("a",{href:s.api.getDownloadUrl(e.job_id,"packages","cdg_zip"),className:"inline-flex items-center gap-1 text-xs px-3 py-1.5 rounded bg-[#252525] hover:bg-[#333333] text-[var(--text)] border border-[var(--card-border)] transition-colors",onClick:e=>e.stopPropagation(),children:[(0,t.jsx)(S.Download,{className:"w-3 h-3"}),"CDG"]}),a?.packages?.txt_zip&&(0,t.jsxs)("a",{href:s.api.getDownloadUrl(e.job_id,"packages","txt_zip"),className:"inline-flex items-center gap-1 text-xs px-3 py-1.5 rounded bg-[#252525] hover:bg-[#333333] text-[var(--text)] border border-[var(--card-border)] transition-colors",onClick:e=>e.stopPropagation(),children:[(0,t.jsx)(S.Download,{className:"w-3 h-3"}),"TXT"]})]}),O&&z&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"flex",children:[(0,t.jsxs)("button",{type:"button",onClick:e=>{e.stopPropagation(),g(!0)},className:"inline-flex items-center gap-1 text-xs px-3 py-1.5 rounded-l bg-[#252525] hover:bg-[#333333] text-[var(--text)] border border-[var(--card-border)] border-r-0 transition-colors",title:"Send completion email",children:[(0,t.jsx)(T.Mail,{className:"w-3 h-3"}),"Email"]}),(0,t.jsx)("button",{type:"button",onClick:e=>{e.stopPropagation(),V()},disabled:m,className:"inline-flex items-center text-xs px-2 py-1.5 rounded-r bg-[#1a1a1a] hover:bg-[#2a2a2a] text-[var(--text)] border border-[var(--card-border)] disabled:opacity-50 transition-colors",title:"Copy completion message to clipboard",children:m?(0,t.jsx)(b.Loader2,{className:"w-3 h-3 animate-spin"}):d?(0,t.jsx)("span",{className:"text-[10px]",children:"Copied!"}):(0,t.jsx)(D.Copy,{className:"w-3 h-3"})})]}),(0,t.jsxs)("a",{href:`/admin/jobs/?id=${e.job_id}`,onClick:e=>e.stopPropagation(),className:"inline-flex items-center gap-1 text-xs px-3 py-1.5 rounded bg-[#252525] hover:bg-[#333333] text-[var(--text)] border border-[var(--card-border)] transition-colors",title:"View job details in admin",children:[(0,t.jsx)(L.Settings,{className:"w-3 h-3"}),"Admin"]})]})]}),!z&&(0,t.jsx)("p",{className:"text-xs",style:{color:"var(--text-muted)"},children:"No outputs available yet"}),(0,t.jsx)(I.Dialog,{open:h,onOpenChange:g,children:(0,t.jsxs)(I.DialogContent,{className:"sm:max-w-[425px]",onClick:e=>e.stopPropagation(),children:[(0,t.jsxs)(I.DialogHeader,{children:[(0,t.jsx)(I.DialogTitle,{children:"Send Completion Email"}),(0,t.jsx)(I.DialogDescription,{children:"Send the job completion message to an email address. The email will be CC'd to gen@nomadkaraoke.com."})]}),(0,t.jsx)("div",{className:"grid gap-4 py-4",children:(0,t.jsxs)("div",{className:"grid grid-cols-4 items-center gap-4",children:[(0,t.jsx)(P.Label,{htmlFor:"email",className:"text-right",children:"Email"}),(0,t.jsx)(A.Input,{id:"email",type:"email",value:f,onChange:e=>v(e.target.value),placeholder:"customer@example.com",className:"col-span-3",onKeyDown:e=>{"Enter"===e.key&&K()}})]})}),(0,t.jsxs)(I.DialogFooter,{children:[(0,t.jsx)(p.Button,{type:"button",variant:"outline",onClick:()=>g(!1),disabled:y,children:"Cancel"}),(0,t.jsx)(p.Button,{type:"button",onClick:K,disabled:y||!f.trim()||w,children:y?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(b.Loader2,{className:"w-4 h-4 mr-2 animate-spin"}),"Sending..."]}):w?"Sent!":"Send Email"})]})]})})]})}e.i(47167);var F=e.i(64659),B=e.i(99219),B=B;let O="0.105.6",U={"BEST CHOICE":{name:"BEST CHOICE",maxDisplay:3,color:"text-amber-400",borderColor:"border-amber-500/30"},"HI-RES 24-BIT":{name:"HI-RES 24-BIT",maxDisplay:3,color:"text-purple-400",borderColor:"border-purple-500/30"},"STUDIO ALBUMS":{name:"STUDIO ALBUMS",maxDisplay:3,color:"text-blue-400",borderColor:"border-blue-500/30"},SINGLES:{name:"SINGLES",maxDisplay:2,color:"text-cyan-400",borderColor:"border-cyan-500/30"},"LIVE VERSIONS":{name:"LIVE VERSIONS",maxDisplay:2,color:"text-pink-400",borderColor:"border-pink-500/30"},COMPILATIONS:{name:"COMPILATIONS",maxDisplay:2,color:"text-teal-400",borderColor:"border-teal-500/30"},"VINYL RIPS":{name:"VINYL RIPS",maxDisplay:2,color:"text-orange-400",borderColor:"border-orange-500/30"},"YOUTUBE/LOSSY":{name:"YOUTUBE/LOSSY",maxDisplay:3,color:"text-red-400",borderColor:"border-red-500/30"},OTHER:{name:"OTHER",maxDisplay:3,color:"text-muted-foreground",borderColor:"border-border"}},$=["BEST CHOICE","HI-RES 24-BIT","STUDIO ALBUMS","SINGLES","LIVE VERSIONS","COMPILATIONS","VINYL RIPS","YOUTUBE/LOSSY","OTHER"];function H({jobId:e,open:a,onClose:n,onSelect:o}){let[i,l]=(0,r.useState)([]),[c,d]=(0,r.useState)(!0),[u,m]=(0,r.useState)(null),[x,g]=(0,r.useState)(""),[f,v]=(0,r.useState)(new Set);async function y(){d(!0),g("");try{console.log(`[AudioSearchDialog v${O}] Loading results...`);let t=await s.api.getAudioSearchResults(e);console.log(`[AudioSearchDialog v${O}] Raw API response:`,t),console.log(`[AudioSearchDialog v${O}] Results count: ${t.results?.length||0}`),l(t.results||[])}catch(e){console.error(`[AudioSearchDialog v${O}] Failed to load search results:`,e),g(e.message||"Failed to load search results")}finally{d(!1)}}(0,r.useEffect)(()=>{console.log(`[AudioSearchDialog] App version: ${O}`)},[]),(0,r.useEffect)(()=>{a&&(console.log(`[AudioSearchDialog v${O}] Dialog opened for job: ${e}`),y(),v(new Set))},[a,e]);let j=(0,r.useMemo)(()=>{let e={};for(let t of i){let r=function(e){let t=!0===e.is_lossless,r=e.quality_data?.bit_depth===24,a=e.seeders??0,s=e.provider?.toLowerCase()??"",n=e.release_type?.toLowerCase()??"",o=e.quality_data?.media?.toLowerCase()??"";return"youtube"!==s&&t?t&&a>=50?"BEST CHOICE":t&&r?"HI-RES 24-BIT":t&&"vinyl"===o?"VINYL RIPS":t&&("live album"===n||"bootleg"===n||n.includes("live"))?"LIVE VERSIONS":t&&("compilation"===n||"soundtrack"===n||"anthology"===n)?"COMPILATIONS":t&&("single"===n||"ep"===n)?"SINGLES":t&&("album"===n||!n)?"STUDIO ALBUMS":"OTHER":"YOUTUBE/LOSSY"}(t);e[r]||(e[r]=[]),e[r].push(t)}let t=[];for(let r of $)e[r]&&e[r].length>0&&t.push({category:r,results:e[r],config:U[r]});return t},[i]),w=j.length;async function N(t){m(t),g("");try{await s.api.selectAudioResult(e,t),o(),n()}catch(e){console.error("Failed to select audio:",e),g(e.message||"Failed to select audio")}finally{m(null)}}function k(e){let t=[];return e.release_type&&t.push(e.release_type),e.year&&t.push(e.year.toString()),e.label&&t.push(e.label),e.edition_info&&t.push(e.edition_info),e.quality_data?.media&&t.push(e.quality_data.media),t.length>0?`[${t.join(" / ")}]`:""}return(0,t.jsx)(I.Dialog,{open:a,onOpenChange:e=>!e&&n(),children:(0,t.jsxs)(I.DialogContent,{className:"max-w-7xl w-[95vw] max-h-[90vh] flex flex-col bg-card border-border !p-0 gap-0 overflow-hidden",children:[(0,t.jsx)("div",{className:"px-4 py-2.5 border-b border-border shrink-0 bg-card flex items-center justify-between",children:(0,t.jsxs)(I.DialogTitle,{className:"text-foreground text-sm font-semibold flex items-center gap-2",children:["Select Audio Source",(0,t.jsxs)("span",{className:"text-[10px] px-1.5 py-0.5 rounded bg-secondary text-muted-foreground font-mono",children:["v",O]}),(0,t.jsxs)("span",{className:"text-muted-foreground font-normal text-xs",children:["(",i.length," results across ",w," categories)"]})]})}),x&&(0,t.jsx)("div",{className:"px-4 py-2 text-xs text-red-400 bg-red-500/10 border-b border-border",children:x}),c?(0,t.jsxs)("div",{className:"flex-1 flex items-center justify-center py-12",children:[(0,t.jsx)(b.Loader2,{className:"w-5 h-5 animate-spin text-muted-foreground"}),(0,t.jsx)("span",{className:"ml-2 text-sm text-muted-foreground",children:"Loading..."})]}):0===i.length?(0,t.jsxs)("div",{className:"flex-1 flex flex-col items-center justify-center py-12 text-muted-foreground",children:[(0,t.jsx)(h,{className:"w-8 h-8 mb-2 opacity-50"}),(0,t.jsx)("p",{className:"text-sm",children:"No audio sources found"})]}):(0,t.jsx)("div",{className:"flex-1 overflow-y-auto min-h-0 p-4",children:(0,t.jsx)("div",{className:"grid grid-cols-1 xl:grid-cols-2 gap-4",children:j.map(({category:e,results:r,config:a})=>{let s=f.has(e),n=s?r:r.slice(0,a.maxDisplay),o=r.length-a.maxDisplay;return(0,t.jsxs)("div",{className:"border border-border rounded-lg overflow-hidden bg-secondary/20",children:[(0,t.jsxs)("div",{className:`px-3 py-2 bg-secondary flex items-center justify-between ${a.color}`,children:[(0,t.jsxs)("div",{className:"flex items-center gap-2 text-xs font-semibold",children:[(0,t.jsx)("span",{children:e}),(0,t.jsxs)("span",{className:"text-muted-foreground font-normal",children:["(",r.length,")"]})]}),o>0&&(0,t.jsx)("button",{onClick:()=>{v(t=>{let r=new Set(t);return r.has(e)?r.delete(e):r.add(e),r})},className:"text-[10px] text-muted-foreground hover:text-foreground flex items-center gap-1",children:s?(0,t.jsxs)(t.Fragment,{children:["Show less ",(0,t.jsx)(B.default,{className:"w-3 h-3"})]}):(0,t.jsxs)(t.Fragment,{children:["+",o," more ",(0,t.jsx)(F.ChevronDown,{className:"w-3 h-3"})]})})]}),(0,t.jsx)("div",{className:"divide-y divide-slate-700/50",children:n.map(e=>{var r;return(0,t.jsxs)("div",{className:"px-3 py-1.5 hover:bg-secondary/50 flex items-center gap-2 text-xs",children:[(0,t.jsxs)("span",{className:"w-5 text-muted-foreground font-mono shrink-0 text-[10px]",children:[e.index+1,"."]}),(0,t.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,t.jsxs)("div",{className:"flex items-center gap-1 flex-wrap",children:[e.is_lossless&&(0,t.jsx)("span",{className:"text-[8px] px-1 py-0.5 rounded bg-green-600/20 text-green-400 font-medium",children:"LOSSLESS"}),e.quality_data?.media?.toLowerCase()==="vinyl"&&(0,t.jsx)("span",{className:"text-[8px] px-1 py-0.5 rounded bg-red-600/20 text-red-400 font-medium",children:"VINYL"}),"YouTube"===e.provider&&(0,t.jsx)("span",{className:"text-[8px] px-1 py-0.5 rounded font-medium bg-red-600/20 text-red-400",children:"YouTube"}),(0,t.jsx)("span",{className:"text-green-400 font-medium",children:"YouTube"===e.provider&&e.channel?e.channel:e.artist||""}),(0,t.jsx)("span",{className:"text-muted-foreground",children:"-"}),(0,t.jsx)("span",{className:"text-foreground",children:e.title}),(0,t.jsxs)("span",{className:`text-[10px] ${e.is_lossless?"text-green-400":"text-muted-foreground"}`,children:["(",function(e){if(e.quality)return e.quality;let t=e.quality_data;if(!t)return"-";let r=[];return t.format&&r.push(t.format),t.bit_depth&&r.push(`${t.bit_depth}bit`),t.bitrate&&r.push(`${t.bitrate}kbps`),t.media&&r.push(t.media),r.join(" ")||"-"}(e),")"]}),(0,t.jsx)("span",{className:"text-[10px] text-muted-foreground",children:e.formatted_size||"-"}),void 0!==e.seeders&&null!==e.seeders?(0,t.jsxs)("span",{className:`text-[8px] px-1 py-0.5 rounded font-medium ${e.seeders>=50?"bg-green-600/20 text-green-400":e.seeders>=10?"bg-yellow-600/20 text-yellow-400":"bg-red-600/20 text-red-400"}`,children:[e.seeders>=50?"High":e.seeders>=10?"Medium":"Low"," availability"]}):void 0!==e.view_count?(0,t.jsxs)("span",{className:`text-[8px] px-1 py-0.5 rounded font-medium ${e.view_count>=1e6?"bg-green-600/20 text-green-400":e.view_count>=1e4?"bg-yellow-600/20 text-yellow-400":"bg-muted text-muted-foreground"}`,children:[(r=e.view_count)||0===r?r>=1e6?`${(r/1e6).toFixed(1)}M`:r>=1e3?`${(r/1e3).toFixed(1)}K`:r.toString():"-"," views"]}):null]}),(k(e)||e.target_file)&&(0,t.jsxs)("div",{className:"flex items-center gap-1.5 text-[10px] text-muted-foreground",children:[k(e)&&(0,t.jsx)("span",{className:"truncate",children:k(e)}),e.target_file&&(0,t.jsxs)("span",{className:"font-mono truncate",children:['"',e.target_file,'"']})]})]}),(0,t.jsx)(p.Button,{size:"sm",onClick:()=>N(e.index),disabled:null!==u,className:"w-14 h-6 text-[9px] bg-amber-600 hover:bg-amber-500 text-foreground px-2 shrink-0",children:u===e.index?(0,t.jsx)(b.Loader2,{className:"w-3 h-3 animate-spin"}):"Select"})]},e.index)})})]},e)})})})]})})}function V({job:e}){let{step:r,total:a,label:s,isBlocking:n,color:o}=l(e),i=0===r?s:`[${r}/${a}] ${s}`;return(0,t.jsxs)("span",{className:"inline-flex items-center gap-1.5",children:[(0,t.jsx)("span",{className:o,children:i}),n&&(0,t.jsx)("span",{className:"text-amber-400 text-[10px] font-medium uppercase tracking-wide",children:"Action needed"})]})}function K({job:e}){let r=function(e){let{step:t,total:r}=l(e);return 0===t||0===r?0:Math.round(t/r*100)}(e),{step:a,color:s}=l(e);return 0===a||"complete"===e.status||"prep_complete"===e.status?null:(0,t.jsx)("div",{className:"w-full h-1 rounded-full mt-2 overflow-hidden",style:{backgroundColor:"var(--secondary)"},children:(0,t.jsx)("div",{className:`h-full ${{"text-muted-foreground":"bg-muted-foreground","text-blue-400":"bg-blue-400","text-purple-400":"bg-purple-400","text-teal-400":"bg-teal-400","text-cyan-400":"bg-cyan-400","text-amber-400":"bg-amber-400","text-indigo-400":"bg-indigo-400","text-pink-400":"bg-pink-400","text-violet-400":"bg-violet-400","text-green-400":"bg-green-400"}[s]||"bg-primary-500"} rounded-full transition-all duration-500 ease-out`,style:{width:`${r}%`}})})}function z({job:e,onRefresh:a}){let[s,n]=(0,r.useState)(!1),o=new Date(e.created_at).toLocaleString(),i="awaiting_review"===e.status||"in_review"===e.status||"awaiting_instrumental_selection"===e.status||"awaiting_audio_selection"===e.status,l="complete"===e.status,c="failed"===e.status;return(0,t.jsxs)("div",{className:`rounded-lg border p-3 transition-colors
2
+ ${l?"border-green-500/30":""}
3
+ ${c?"border-red-500/30":""}`,style:{borderColor:l||c?void 0:"var(--card-border)",backgroundColor:"var(--card)"},children:[(0,t.jsxs)("div",{className:"flex items-start justify-between gap-2",children:[(0,t.jsxs)("p",{className:"font-medium truncate",style:{color:"var(--text)"},children:[e.state_data?.brand_code&&`${e.state_data.brand_code}: `,e.artist||"Unknown"," - ",e.title||"Unknown"]}),e.non_interactive&&(0,t.jsxs)("span",{className:"shrink-0 inline-flex items-center gap-1 text-[10px] px-1.5 py-0.5 rounded bg-amber-500/20 text-amber-400 font-medium",children:[(0,t.jsx)(w,{className:"w-2.5 h-2.5"}),"Auto"]})]}),(0,t.jsxs)("p",{className:"text-xs mt-1",style:{color:"var(--text-muted)"},children:[(0,t.jsx)("span",{style:{opacity:.7},children:"ID:"})," ",e.job_id," ",(0,t.jsx)("span",{style:{opacity:.7},children:"•"})," ",o," ",(0,t.jsx)("span",{style:{opacity:.7},children:"•"})," ",(0,t.jsx)(V,{job:e})]}),(0,t.jsx)(K,{job:e}),e.error_message&&(0,t.jsx)("div",{className:"mt-2 text-xs text-red-400 bg-red-500/10 rounded p-2 break-words",children:e.error_message}),l&&(0,t.jsx)("div",{className:"mt-2",children:(0,t.jsx)(M,{job:e})}),(0,t.jsxs)("div",{className:"mt-2 flex items-center justify-between",children:[(0,t.jsx)(C,{job:e,onRefresh:a}),e.non_interactive&&i?(0,t.jsxs)("div",{className:"flex items-center gap-1 text-xs text-amber-400",children:[(0,t.jsx)(w,{className:"w-3 h-3"}),"Will auto-","awaiting_review"===e.status||"in_review"===e.status?"accept":"awaiting_instrumental_selection"===e.status?"select":"select first"]}):"awaiting_review"===e.status||"in_review"===e.status?(0,t.jsx)(j.default,{href:`/app/jobs/${e.job_id}/review`,className:"inline-flex items-center gap-1 text-xs px-3 py-1.5 rounded bg-primary-500 hover:bg-primary-600 text-white",children:"Review Lyrics"}):"awaiting_audio_selection"===e.status?(0,t.jsx)(p.Button,{size:"sm",onClick:()=>n(!0),className:"text-xs h-7 px-3 bg-primary-500 hover:bg-primary-600",children:"Select Audio"}):"awaiting_instrumental_selection"===e.status?(0,t.jsx)(j.default,{href:`/app/jobs/${e.job_id}/instrumental`,className:"inline-flex items-center gap-1 text-xs px-3 py-1.5 rounded bg-primary-500 hover:bg-primary-600 text-white",children:"Select Instrumental"}):null]}),(0,t.jsx)(H,{jobId:e.job_id,open:s,onClose:()=>n(!1),onSelect:a})]})}e.i(63209);var G=e.i(27341),Y=e.i(69074),W=e.i(23616),q=e.i(53339),J=e.i(63059);function X({onJobCreated:e}){let{user:a}=(0,n.useAuth)(),{features:o,isDefault:i,tenant:l}=(0,_.useTenant)(),c=a?.role==="admin",d=(0,r.useMemo)(()=>{let e=[];return o.audio_search&&e.push("search"),o.file_upload&&e.push("upload"),o.youtube_url&&e.push("url"),0===e.length&&e.push("upload"),e},[o]),[u,m]=(0,r.useState)(d[0]);(0,r.useEffect)(()=>{d.includes(u)||m(d[0])},[d,u]);let[x,h]=(0,r.useState)(""),[g,f]=(0,r.useState)(!1),[v,y]=(0,r.useState)(null),[j,w]=(0,r.useState)(""),[N,k]=(0,r.useState)(""),[C,S]=(0,r.useState)(""),[E,R]=(0,r.useState)(""),[D,T]=(0,r.useState)(""),[L,I]=(0,r.useState)(""),[M,B]=(0,r.useState)(""),[O,U]=(0,r.useState)(""),[$,H]=(0,r.useState)(""),[V,K]=(0,r.useState)(!1),[z,X]=(0,r.useState)(!1);async function Z(t){if(t.preventDefault(),h(""),!v)return void h("Please select an audio file");if(!j.trim()||!N.trim())return void h("Please enter both artist and title");f(!0);try{await s.api.uploadJob(v,j.trim(),N.trim(),{non_interactive:z}),y(null),w(""),k(""),e()}catch(e){e instanceof s.ApiError?h(e.message):h("Failed to create job")}finally{f(!1)}}async function Q(t){if(t.preventDefault(),h(""),!C.trim())return void h("Please enter a URL");if(!E.trim()||!D.trim())return void h("Please enter both artist and title");f(!0);try{await s.api.createJobFromUrl(C.trim(),E.trim(),D.trim(),{non_interactive:z}),S(""),R(""),T(""),e()}catch(e){e instanceof s.ApiError?h(e.message):h("Failed to create job")}finally{f(!1)}}async function ee(t){if(t.preventDefault(),h(""),!L.trim()||!M.trim())return void h("Please enter both artist and title");f(!0);try{await s.api.searchAudio(L.trim(),M.trim(),!1,{non_interactive:z,display_artist:O.trim()||void 0,display_title:$.trim()||void 0}),I(""),B(""),U(""),H(""),e()}catch(e){e instanceof s.ApiError?h(e.message):h("Failed to search for audio")}finally{f(!1)}}return(0,t.jsxs)(G.Tabs,{value:u,onValueChange:m,children:[d.length>1&&(0,t.jsxs)(G.TabsList,{className:`grid w-full h-auto rounded-lg p-1 ${2===d.length?"grid-cols-2":"grid-cols-3"}`,style:{backgroundColor:"var(--secondary)"},children:[d.includes("search")&&(0,t.jsxs)(G.TabsTrigger,{value:"search",className:"gap-1.5 sm:gap-2 py-3 min-h-[44px] text-xs sm:text-sm rounded-md data-[state=active]:!bg-[var(--brand-pink)] data-[state=active]:!text-white data-[state=active]:shadow-md data-[state=inactive]:hover:bg-[var(--brand-pink)]/10",style:{color:"search"===u?"white":"var(--text-muted)"},children:[(0,t.jsx)(q.Music,{className:"w-4 h-4 shrink-0"}),(0,t.jsx)("span",{className:"truncate",children:"Search"})]}),d.includes("upload")&&(0,t.jsxs)(G.TabsTrigger,{value:"upload",className:"gap-1.5 sm:gap-2 py-3 min-h-[44px] text-xs sm:text-sm rounded-md data-[state=active]:!bg-[var(--brand-pink)] data-[state=active]:!text-white data-[state=active]:shadow-md data-[state=inactive]:hover:bg-[var(--brand-pink)]/10",style:{color:"upload"===u?"white":"var(--text-muted)"},children:[(0,t.jsx)(Y.Upload,{className:"w-4 h-4 shrink-0"}),(0,t.jsx)("span",{className:"truncate",children:"Upload"})]}),d.includes("url")&&(0,t.jsxs)(G.TabsTrigger,{value:"url",className:"gap-1.5 sm:gap-2 py-3 min-h-[44px] text-xs sm:text-sm rounded-md data-[state=active]:!bg-[var(--brand-pink)] data-[state=active]:!text-white data-[state=active]:shadow-md data-[state=inactive]:hover:bg-[var(--brand-pink)]/10",style:{color:"url"===u?"white":"var(--text-muted)"},children:[(0,t.jsx)(W.Youtube,{className:"w-4 h-4 shrink-0"}),(0,t.jsx)("span",{className:"truncate",children:"URL"})]})]}),d.includes("upload")&&(0,t.jsx)(G.TabsContent,{value:"upload",className:1===d.length?"":"mt-4",children:(0,t.jsxs)("form",{onSubmit:Z,className:"space-y-4",children:[(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsx)(P.Label,{htmlFor:"audio-file",style:{color:"var(--text)"},children:"Audio File"}),(0,t.jsxs)("div",{className:"relative border-2 border-dashed rounded-lg p-6 text-center transition-colors cursor-pointer",style:{borderColor:v?"rgba(255, 122, 204, 0.5)":"var(--card-border)",backgroundColor:v?"rgba(255, 122, 204, 0.05)":"var(--secondary)"},children:[(0,t.jsx)(A.Input,{id:"audio-file",type:"file",accept:".mp3,.wav,.flac,.m4a,.ogg,audio/*",onChange:function(e){let t=e.target.files?.[0];t&&(y(t),h(""))},className:"absolute inset-0 w-full h-full opacity-0 cursor-pointer",disabled:g}),(0,t.jsx)(Y.Upload,{className:"w-8 h-8 mx-auto mb-2",style:{color:"var(--text-muted)"}}),v?(0,t.jsxs)("div",{children:[(0,t.jsx)("p",{className:"font-medium",style:{color:"var(--text)"},children:v.name}),(0,t.jsxs)("p",{className:"text-sm",style:{color:"var(--text-muted)"},children:[(v.size/1024/1024).toFixed(2)," MB"]})]}):(0,t.jsxs)("div",{children:[(0,t.jsx)("p",{className:"font-medium mb-1",style:{color:"var(--text)"},children:"Click to upload"}),(0,t.jsx)("p",{className:"text-sm",style:{color:"var(--text-muted)"},children:"MP3, WAV, FLAC, M4A, or OGG"})]})]})]}),(0,t.jsxs)("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-3 sm:gap-4",children:[(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsx)(P.Label,{htmlFor:"upload-artist",style:{color:"var(--text)"},children:"Artist"}),(0,t.jsx)(A.Input,{id:"upload-artist",placeholder:"Artist name",value:j,onChange:e=>w(e.target.value),disabled:g,style:{backgroundColor:"var(--secondary)",borderColor:"var(--card-border)",color:"var(--text)"}})]}),(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsx)(P.Label,{htmlFor:"upload-title",style:{color:"var(--text)"},children:"Title"}),(0,t.jsx)(A.Input,{id:"upload-title",placeholder:"Song title",value:N,onChange:e=>k(e.target.value),disabled:g,style:{backgroundColor:"var(--secondary)",borderColor:"var(--card-border)",color:"var(--text)"}})]})]}),(0,t.jsxs)("p",{className:"text-xs",style:{color:"var(--text-muted)"},children:[(0,t.jsx)("span",{className:"text-amber-500 font-medium",children:"Note:"})," Format these exactly as you want them on the title card and video filename."]}),c&&(0,t.jsx)("div",{className:"space-y-2 pt-4 border-t",style:{borderColor:"var(--card-border)"},children:(0,t.jsxs)("div",{className:"flex items-start gap-3",children:[(0,t.jsx)("input",{type:"checkbox",id:"non-interactive-upload",checked:z,onChange:e=>X(e.target.checked),disabled:g,className:"mt-1 w-4 h-4 rounded border-border bg-secondary accent-[var(--brand-pink)] focus:ring-[var(--brand-pink)] focus:ring-offset-background"}),(0,t.jsxs)("div",{children:[(0,t.jsx)(P.Label,{htmlFor:"non-interactive-upload",className:"cursor-pointer",style:{color:"var(--text)"},children:"Skip lyrics review (non-interactive)"}),(0,t.jsxs)("p",{className:"text-xs mt-1",style:{color:"var(--text-muted)"},children:[(0,t.jsx)("span",{className:"text-amber-500 font-medium",children:"Warning:"})," auto lyrics correction isn't perfect. Skipping review will likely result in incorrect words in your karaoke video."]})]})]})}),x&&"upload"===u&&(0,t.jsx)("p",{className:"text-sm text-red-400 bg-red-500/10 rounded p-2",children:x}),(0,t.jsx)(p.Button,{type:"submit",className:"w-full bg-[var(--brand-pink)] hover:bg-[var(--brand-pink-hover)] text-white shadow-[0_0_15px_rgba(255,122,204,0.3)] hover:shadow-[0_0_20px_rgba(255,122,204,0.5)]",disabled:g,children:g?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(b.Loader2,{className:"w-4 h-4 mr-2 animate-spin"}),"Creating Job..."]}):"Create Karaoke Video"})]})}),d.includes("url")&&(0,t.jsx)(G.TabsContent,{value:"url",className:1===d.length?"":"mt-4",children:(0,t.jsxs)("form",{onSubmit:Q,className:"space-y-4",children:[(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsx)(P.Label,{htmlFor:"youtube-url",style:{color:"var(--text)"},children:"YouTube URL"}),(0,t.jsxs)("div",{className:"relative",children:[(0,t.jsx)(W.Youtube,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4",style:{color:"var(--text-muted)"}}),(0,t.jsx)(A.Input,{id:"youtube-url",type:"url",placeholder:"https://youtube.com/watch?v=...",value:C,onChange:e=>S(e.target.value),className:"pl-10",style:{backgroundColor:"var(--secondary)",borderColor:"var(--card-border)",color:"var(--text)"},disabled:g})]})]}),(0,t.jsxs)("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-3 sm:gap-4",children:[(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsx)(P.Label,{htmlFor:"youtube-artist",style:{color:"var(--text)"},children:"Artist"}),(0,t.jsx)(A.Input,{id:"youtube-artist",placeholder:"Artist name",value:E,onChange:e=>R(e.target.value),disabled:g,style:{backgroundColor:"var(--secondary)",borderColor:"var(--card-border)",color:"var(--text)"}})]}),(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsx)(P.Label,{htmlFor:"youtube-title",style:{color:"var(--text)"},children:"Title"}),(0,t.jsx)(A.Input,{id:"youtube-title",placeholder:"Song title",value:D,onChange:e=>T(e.target.value),disabled:g,style:{backgroundColor:"var(--secondary)",borderColor:"var(--card-border)",color:"var(--text)"}})]})]}),(0,t.jsxs)("p",{className:"text-xs",style:{color:"var(--text-muted)"},children:[(0,t.jsx)("span",{className:"text-amber-500 font-medium",children:"Note:"})," Format these exactly as you want them on the title card and video filename."]}),c&&(0,t.jsx)("div",{className:"space-y-2 pt-4 border-t",style:{borderColor:"var(--card-border)"},children:(0,t.jsxs)("div",{className:"flex items-start gap-3",children:[(0,t.jsx)("input",{type:"checkbox",id:"non-interactive-url",checked:z,onChange:e=>X(e.target.checked),disabled:g,className:"mt-1 w-4 h-4 rounded border-border bg-secondary accent-[var(--brand-pink)] focus:ring-[var(--brand-pink)] focus:ring-offset-background"}),(0,t.jsxs)("div",{children:[(0,t.jsx)(P.Label,{htmlFor:"non-interactive-url",className:"cursor-pointer",style:{color:"var(--text)"},children:"Skip lyrics review (non-interactive)"}),(0,t.jsxs)("p",{className:"text-xs mt-1",style:{color:"var(--text-muted)"},children:[(0,t.jsx)("span",{className:"text-amber-500 font-medium",children:"Warning:"})," auto lyrics correction isn't perfect. Skipping review will likely result in incorrect words in your karaoke video."]})]})]})}),x&&"url"===u&&(0,t.jsx)("p",{className:"text-sm text-red-400 bg-red-500/10 rounded p-2",children:x}),(0,t.jsx)(p.Button,{type:"submit",className:"w-full bg-[var(--brand-pink)] hover:bg-[var(--brand-pink-hover)] text-white shadow-[0_0_15px_rgba(255,122,204,0.3)] hover:shadow-[0_0_20px_rgba(255,122,204,0.5)]",disabled:g,children:g?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(b.Loader2,{className:"w-4 h-4 mr-2 animate-spin"}),"Creating Job..."]}):"Create Karaoke Video"})]})}),d.includes("search")&&(0,t.jsx)(G.TabsContent,{value:"search",className:1===d.length?"":"mt-4",children:(0,t.jsxs)("form",{onSubmit:ee,className:"space-y-4",children:[(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsx)(P.Label,{style:{color:"var(--text)"},children:"Search For Audio Online"}),(0,t.jsxs)("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-3 sm:gap-4",children:[(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsx)(P.Label,{htmlFor:"search-artist",className:"text-xs",style:{color:"var(--text-muted)"},children:"Artist"}),(0,t.jsx)(A.Input,{id:"search-artist","data-testid":"search-artist-input",placeholder:"Artist name",value:L,onChange:e=>I(e.target.value),disabled:g,style:{backgroundColor:"var(--secondary)",borderColor:"var(--card-border)",color:"var(--text)"}})]}),(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsx)(P.Label,{htmlFor:"search-title",className:"text-xs",style:{color:"var(--text-muted)"},children:"Title"}),(0,t.jsx)(A.Input,{id:"search-title","data-testid":"search-title-input",placeholder:"Song title",value:M,onChange:e=>B(e.target.value),disabled:g,style:{backgroundColor:"var(--secondary)",borderColor:"var(--card-border)",color:"var(--text)"}})]})]})]}),(0,t.jsxs)("p",{className:"text-xs",style:{color:"var(--text-muted)"},children:[(0,t.jsx)("span",{className:"text-amber-500 font-medium",children:"Note:"})," Format these exactly as you want them on the title card and video filename."]}),(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsxs)("button",{type:"button",onClick:()=>K(!V),className:"flex items-center gap-2 text-sm hover:opacity-80 transition-opacity",style:{color:"var(--text-muted)"},disabled:g,children:[V?(0,t.jsx)(F.ChevronDown,{className:"w-4 h-4"}):(0,t.jsx)(J.ChevronRight,{className:"w-4 h-4"}),"Use different artist/title for title screen"]}),V&&(0,t.jsxs)("div",{className:"space-y-2 pl-6",children:[(0,t.jsx)("p",{className:"text-xs",style:{color:"var(--text-muted)"},children:"Override how artist/title appear on the title screen and filename, e.g. for soundtracks."}),(0,t.jsxs)("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-3 sm:gap-4",children:[(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsx)(P.Label,{htmlFor:"display-artist",className:"text-xs",style:{color:"var(--text-muted)"},children:"Display Artist"}),(0,t.jsx)(A.Input,{id:"display-artist",placeholder:"e.g., Footloose (Broadway Cast)",value:O,onChange:e=>U(e.target.value),disabled:g,style:{backgroundColor:"var(--secondary)",borderColor:"var(--card-border)",color:"var(--text)"}})]}),(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsx)(P.Label,{htmlFor:"display-title",className:"text-xs",style:{color:"var(--text-muted)"},children:"Display Title"}),(0,t.jsx)(A.Input,{id:"display-title",placeholder:"e.g., I Can't Stand Still",value:$,onChange:e=>H(e.target.value),disabled:g,style:{backgroundColor:"var(--secondary)",borderColor:"var(--card-border)",color:"var(--text)"}})]})]})]})]}),c&&(0,t.jsx)("div",{className:"space-y-2 pt-4 border-t",style:{borderColor:"var(--card-border)"},children:(0,t.jsxs)("div",{className:"flex items-start gap-3",children:[(0,t.jsx)("input",{type:"checkbox",id:"non-interactive-search",checked:z,onChange:e=>X(e.target.checked),disabled:g,className:"mt-1 w-4 h-4 rounded border-border bg-secondary accent-[var(--brand-pink)] focus:ring-[var(--brand-pink)] focus:ring-offset-background"}),(0,t.jsxs)("div",{children:[(0,t.jsx)(P.Label,{htmlFor:"non-interactive-search",className:"cursor-pointer",style:{color:"var(--text)"},children:"Skip lyrics review (non-interactive)"}),(0,t.jsxs)("p",{className:"text-xs mt-1",style:{color:"var(--text-muted)"},children:[(0,t.jsx)("span",{className:"text-amber-500 font-medium",children:"Warning:"})," auto lyrics correction isn't perfect. Skipping review will likely result in incorrect words in your karaoke video."]})]})]})}),x&&"search"===u&&(0,t.jsx)("p",{className:"text-sm text-red-400 bg-red-500/10 rounded p-2",children:x}),(0,t.jsx)(p.Button,{type:"submit",className:"w-full bg-[var(--brand-pink)] hover:bg-[var(--brand-pink-hover)] text-white shadow-[0_0_15px_rgba(255,122,204,0.3)] hover:shadow-[0_0_20px_rgba(255,122,204,0.5)]",disabled:g,children:g?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(b.Loader2,{className:"w-4 h-4 mr-2 animate-spin"}),"Searching..."]}):"Search & Create Job"})]})})]})}var Z=e.i(84614);let Q=(0,x.default)("LogOut",[["path",{d:"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4",key:"1uf3rs"}],["polyline",{points:"16 17 21 12 16 7",key:"1gabdz"}],["line",{x1:"21",x2:"9",y1:"12",y2:"12",key:"1uyos4"}]]);var ee=e.i(61659),et=e.i(75822),er=e.i(65261);let ea=(0,x.default)("Shield",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}]]),es=(0,x.default)("FlaskConical",[["path",{d:"M10 2v7.527a2 2 0 0 1-.211.896L4.72 20.55a1 1 0 0 0 .9 1.45h12.76a1 1 0 0 0 .9-1.45l-5.069-10.127A2 2 0 0 1 14 9.527V2",key:"pzvekw"}],["path",{d:"M8.5 2h7",key:"csnxdl"}],["path",{d:"M7 16h10",key:"wp8him"}]]);var en=e.i(81140),eo=e.i(20783),ei=e.i(30030),el=e.i(69340),ec=e.i(48425),ed=e.i(75830),eu=e.i(86318),ep=e.i(26330),em=e.i(3536),ex=e.i(65491),eh=e.i(10772),eg=e.i(53660),eb=e.i(74606),ef=e.i(96626),ev=e.i(42727),ey=e.i(91918),ej=e.i(30207),ew=e.i(86312),eN=e.i(85369),ek=["Enter"," "],eC=["ArrowUp","PageDown","End"],e_=["ArrowDown","PageUp","Home",...eC],eS={ltr:[...ek,"ArrowRight"],rtl:[...ek,"ArrowLeft"]},eE={ltr:["ArrowLeft"],rtl:["ArrowRight"]},eR="Menu",[eD,eT,eL]=(0,ed.createCollection)(eR),[eI,eA]=(0,ei.createContextScope)(eR,[eL,eg.createPopperScope,ev.createRovingFocusGroupScope]),eP=(0,eg.createPopperScope)(),eM=(0,ev.createRovingFocusGroupScope)(),[eF,eB]=eI(eR),[eO,eU]=eI(eR),e$=e=>{let{__scopeMenu:a,open:s=!1,children:n,dir:o,onOpenChange:i,modal:l=!0}=e,c=eP(a),[d,u]=r.useState(null),p=r.useRef(!1),m=(0,ej.useCallbackRef)(i),x=(0,eu.useDirection)(o);return r.useEffect(()=>{let e=()=>{p.current=!0,document.addEventListener("pointerdown",t,{capture:!0,once:!0}),document.addEventListener("pointermove",t,{capture:!0,once:!0})},t=()=>p.current=!1;return document.addEventListener("keydown",e,{capture:!0}),()=>{document.removeEventListener("keydown",e,{capture:!0}),document.removeEventListener("pointerdown",t,{capture:!0}),document.removeEventListener("pointermove",t,{capture:!0})}},[]),(0,t.jsx)(eg.Root,{...c,children:(0,t.jsx)(eF,{scope:a,open:s,onOpenChange:m,content:d,onContentChange:u,children:(0,t.jsx)(eO,{scope:a,onClose:r.useCallback(()=>m(!1),[m]),isUsingKeyboardRef:p,dir:x,modal:l,children:n})})})};e$.displayName=eR;var eH=r.forwardRef((e,r)=>{let{__scopeMenu:a,...s}=e,n=eP(a);return(0,t.jsx)(eg.Anchor,{...n,...s,ref:r})});eH.displayName="MenuAnchor";var eV="MenuPortal",[eK,ez]=eI(eV,{forceMount:void 0}),eG=e=>{let{__scopeMenu:r,forceMount:a,children:s,container:n}=e,o=eB(eV,r);return(0,t.jsx)(eK,{scope:r,forceMount:a,children:(0,t.jsx)(ef.Presence,{present:a||o.open,children:(0,t.jsx)(eb.Portal,{asChild:!0,container:n,children:s})})})};eG.displayName=eV;var eY="MenuContent",[eW,eq]=eI(eY),eJ=r.forwardRef((e,r)=>{let a=ez(eY,e.__scopeMenu),{forceMount:s=a.forceMount,...n}=e,o=eB(eY,e.__scopeMenu),i=eU(eY,e.__scopeMenu);return(0,t.jsx)(eD.Provider,{scope:e.__scopeMenu,children:(0,t.jsx)(ef.Presence,{present:s||o.open,children:(0,t.jsx)(eD.Slot,{scope:e.__scopeMenu,children:i.modal?(0,t.jsx)(eX,{...n,ref:r}):(0,t.jsx)(eZ,{...n,ref:r})})})})}),eX=r.forwardRef((e,a)=>{let s=eB(eY,e.__scopeMenu),n=r.useRef(null),o=(0,eo.useComposedRefs)(a,n);return r.useEffect(()=>{let e=n.current;if(e)return(0,ew.hideOthers)(e)},[]),(0,t.jsx)(eQ,{...e,ref:o,trapFocus:s.open,disableOutsidePointerEvents:s.open,disableOutsideScroll:!0,onFocusOutside:(0,en.composeEventHandlers)(e.onFocusOutside,e=>e.preventDefault(),{checkForDefaultPrevented:!1}),onDismiss:()=>s.onOpenChange(!1)})}),eZ=r.forwardRef((e,r)=>{let a=eB(eY,e.__scopeMenu);return(0,t.jsx)(eQ,{...e,ref:r,trapFocus:!1,disableOutsidePointerEvents:!1,disableOutsideScroll:!1,onDismiss:()=>a.onOpenChange(!1)})}),eQ=r.forwardRef((e,a)=>{let{__scopeMenu:s,loop:n=!1,trapFocus:o,onOpenAutoFocus:i,onCloseAutoFocus:l,disableOutsidePointerEvents:c,onEntryFocus:d,onEscapeKeyDown:u,onPointerDownOutside:p,onFocusOutside:m,onInteractOutside:x,onDismiss:h,disableOutsideScroll:g,...b}=e,f=eB(eY,s),v=eU(eY,s),y=eP(s),j=eM(s),w=eT(s),[N,k]=r.useState(null),C=r.useRef(null),_=(0,eo.useComposedRefs)(a,C,f.onContentChange),S=r.useRef(0),E=r.useRef(""),R=r.useRef(0),D=r.useRef(null),T=r.useRef("right"),L=r.useRef(0),I=g?eN.RemoveScroll:r.Fragment,A=g?{as:ey.Slot,allowPinchZoom:!0}:void 0;r.useEffect(()=>()=>window.clearTimeout(S.current),[]),(0,em.useFocusGuards)();let P=r.useCallback(e=>{var t,r;return T.current===D.current?.side&&(t=e,!!(r=D.current?.area)&&function(e,t){let{x:r,y:a}=e,s=!1;for(let e=0,n=t.length-1;e<t.length;n=e++){let o=t[e].x,i=t[e].y,l=t[n].x,c=t[n].y;i>a!=c>a&&r<(l-o)*(a-i)/(c-i)+o&&(s=!s)}return s}({x:t.clientX,y:t.clientY},r))},[]);return(0,t.jsx)(eW,{scope:s,searchRef:E,onItemEnter:r.useCallback(e=>{P(e)&&e.preventDefault()},[P]),onItemLeave:r.useCallback(e=>{P(e)||(C.current?.focus(),k(null))},[P]),onTriggerLeave:r.useCallback(e=>{P(e)&&e.preventDefault()},[P]),pointerGraceTimerRef:R,onPointerGraceIntentChange:r.useCallback(e=>{D.current=e},[]),children:(0,t.jsx)(I,{...A,children:(0,t.jsx)(ex.FocusScope,{asChild:!0,trapped:o,onMountAutoFocus:(0,en.composeEventHandlers)(i,e=>{e.preventDefault(),C.current?.focus({preventScroll:!0})}),onUnmountAutoFocus:l,children:(0,t.jsx)(ep.DismissableLayer,{asChild:!0,disableOutsidePointerEvents:c,onEscapeKeyDown:u,onPointerDownOutside:p,onFocusOutside:m,onInteractOutside:x,onDismiss:h,children:(0,t.jsx)(ev.Root,{asChild:!0,...j,dir:v.dir,orientation:"vertical",loop:n,currentTabStopId:N,onCurrentTabStopIdChange:k,onEntryFocus:(0,en.composeEventHandlers)(d,e=>{v.isUsingKeyboardRef.current||e.preventDefault()}),preventScrollOnEntryFocus:!0,children:(0,t.jsx)(eg.Content,{role:"menu","aria-orientation":"vertical","data-state":th(f.open),"data-radix-menu-content":"",dir:v.dir,...y,...b,ref:_,style:{outline:"none",...b.style},onKeyDown:(0,en.composeEventHandlers)(b.onKeyDown,e=>{let t=e.target.closest("[data-radix-menu-content]")===e.currentTarget,r=e.ctrlKey||e.altKey||e.metaKey,a=1===e.key.length;if(t){var s;let t,n,o,i,l,c;"Tab"===e.key&&e.preventDefault(),!r&&a&&(s=e.key,t=E.current+s,n=w().filter(e=>!e.disabled),o=document.activeElement,i=n.find(e=>e.ref.current===o)?.textValue,l=function(e,t,r){var a;let s=t.length>1&&Array.from(t).every(e=>e===t[0])?t[0]:t,n=r?e.indexOf(r):-1,o=(a=Math.max(n,0),e.map((t,r)=>e[(a+r)%e.length]));1===s.length&&(o=o.filter(e=>e!==r));let i=o.find(e=>e.toLowerCase().startsWith(s.toLowerCase()));return i!==r?i:void 0}(n.map(e=>e.textValue),t,i),c=n.find(e=>e.textValue===l)?.ref.current,function e(t){E.current=t,window.clearTimeout(S.current),""!==t&&(S.current=window.setTimeout(()=>e(""),1e3))}(t),c&&setTimeout(()=>c.focus()))}let n=C.current;if(e.target!==n||!e_.includes(e.key))return;e.preventDefault();let o=w().filter(e=>!e.disabled).map(e=>e.ref.current);eC.includes(e.key)&&o.reverse(),function(e){let t=document.activeElement;for(let r of e)if(r===t||(r.focus(),document.activeElement!==t))return}(o)}),onBlur:(0,en.composeEventHandlers)(e.onBlur,e=>{e.currentTarget.contains(e.target)||(window.clearTimeout(S.current),E.current="")}),onPointerMove:(0,en.composeEventHandlers)(e.onPointerMove,tf(e=>{let t=e.target,r=L.current!==e.clientX;e.currentTarget.contains(t)&&r&&(T.current=e.clientX>L.current?"right":"left",L.current=e.clientX)}))})})})})})})});eJ.displayName=eY;var e0=r.forwardRef((e,r)=>{let{__scopeMenu:a,...s}=e;return(0,t.jsx)(ec.Primitive.div,{role:"group",...s,ref:r})});e0.displayName="MenuGroup";var e1=r.forwardRef((e,r)=>{let{__scopeMenu:a,...s}=e;return(0,t.jsx)(ec.Primitive.div,{...s,ref:r})});e1.displayName="MenuLabel";var e2="MenuItem",e4="menu.itemSelect",e3=r.forwardRef((e,a)=>{let{disabled:s=!1,onSelect:n,...o}=e,i=r.useRef(null),l=eU(e2,e.__scopeMenu),c=eq(e2,e.__scopeMenu),d=(0,eo.useComposedRefs)(a,i),u=r.useRef(!1);return(0,t.jsx)(e5,{...o,ref:d,disabled:s,onClick:(0,en.composeEventHandlers)(e.onClick,()=>{let e=i.current;if(!s&&e){let t=new CustomEvent(e4,{bubbles:!0,cancelable:!0});e.addEventListener(e4,e=>n?.(e),{once:!0}),(0,ec.dispatchDiscreteCustomEvent)(e,t),t.defaultPrevented?u.current=!1:l.onClose()}}),onPointerDown:t=>{e.onPointerDown?.(t),u.current=!0},onPointerUp:(0,en.composeEventHandlers)(e.onPointerUp,e=>{u.current||e.currentTarget?.click()}),onKeyDown:(0,en.composeEventHandlers)(e.onKeyDown,e=>{let t=""!==c.searchRef.current;s||t&&" "===e.key||ek.includes(e.key)&&(e.currentTarget.click(),e.preventDefault())})})});e3.displayName=e2;var e5=r.forwardRef((e,a)=>{let{__scopeMenu:s,disabled:n=!1,textValue:o,...i}=e,l=eq(e2,s),c=eM(s),d=r.useRef(null),u=(0,eo.useComposedRefs)(a,d),[p,m]=r.useState(!1),[x,h]=r.useState("");return r.useEffect(()=>{let e=d.current;e&&h((e.textContent??"").trim())},[i.children]),(0,t.jsx)(eD.ItemSlot,{scope:s,disabled:n,textValue:o??x,children:(0,t.jsx)(ev.Item,{asChild:!0,...c,focusable:!n,children:(0,t.jsx)(ec.Primitive.div,{role:"menuitem","data-highlighted":p?"":void 0,"aria-disabled":n||void 0,"data-disabled":n?"":void 0,...i,ref:u,onPointerMove:(0,en.composeEventHandlers)(e.onPointerMove,tf(e=>{n?l.onItemLeave(e):(l.onItemEnter(e),e.defaultPrevented||e.currentTarget.focus({preventScroll:!0}))})),onPointerLeave:(0,en.composeEventHandlers)(e.onPointerLeave,tf(e=>l.onItemLeave(e))),onFocus:(0,en.composeEventHandlers)(e.onFocus,()=>m(!0)),onBlur:(0,en.composeEventHandlers)(e.onBlur,()=>m(!1))})})})}),e6=r.forwardRef((e,r)=>{let{checked:a=!1,onCheckedChange:s,...n}=e;return(0,t.jsx)(ts,{scope:e.__scopeMenu,checked:a,children:(0,t.jsx)(e3,{role:"menuitemcheckbox","aria-checked":tg(a)?"mixed":a,...n,ref:r,"data-state":tb(a),onSelect:(0,en.composeEventHandlers)(n.onSelect,()=>s?.(!!tg(a)||!a),{checkForDefaultPrevented:!1})})})});e6.displayName="MenuCheckboxItem";var e7="MenuRadioGroup",[e8,e9]=eI(e7,{value:void 0,onValueChange:()=>{}}),te=r.forwardRef((e,r)=>{let{value:a,onValueChange:s,...n}=e,o=(0,ej.useCallbackRef)(s);return(0,t.jsx)(e8,{scope:e.__scopeMenu,value:a,onValueChange:o,children:(0,t.jsx)(e0,{...n,ref:r})})});te.displayName=e7;var tt="MenuRadioItem",tr=r.forwardRef((e,r)=>{let{value:a,...s}=e,n=e9(tt,e.__scopeMenu),o=a===n.value;return(0,t.jsx)(ts,{scope:e.__scopeMenu,checked:o,children:(0,t.jsx)(e3,{role:"menuitemradio","aria-checked":o,...s,ref:r,"data-state":tb(o),onSelect:(0,en.composeEventHandlers)(s.onSelect,()=>n.onValueChange?.(a),{checkForDefaultPrevented:!1})})})});tr.displayName=tt;var ta="MenuItemIndicator",[ts,tn]=eI(ta,{checked:!1}),to=r.forwardRef((e,r)=>{let{__scopeMenu:a,forceMount:s,...n}=e,o=tn(ta,a);return(0,t.jsx)(ef.Presence,{present:s||tg(o.checked)||!0===o.checked,children:(0,t.jsx)(ec.Primitive.span,{...n,ref:r,"data-state":tb(o.checked)})})});to.displayName=ta;var ti=r.forwardRef((e,r)=>{let{__scopeMenu:a,...s}=e;return(0,t.jsx)(ec.Primitive.div,{role:"separator","aria-orientation":"horizontal",...s,ref:r})});ti.displayName="MenuSeparator";var tl=r.forwardRef((e,r)=>{let{__scopeMenu:a,...s}=e,n=eP(a);return(0,t.jsx)(eg.Arrow,{...n,...s,ref:r})});tl.displayName="MenuArrow";var[tc,td]=eI("MenuSub"),tu="MenuSubTrigger",tp=r.forwardRef((e,a)=>{let s=eB(tu,e.__scopeMenu),n=eU(tu,e.__scopeMenu),o=td(tu,e.__scopeMenu),i=eq(tu,e.__scopeMenu),l=r.useRef(null),{pointerGraceTimerRef:c,onPointerGraceIntentChange:d}=i,u={__scopeMenu:e.__scopeMenu},p=r.useCallback(()=>{l.current&&window.clearTimeout(l.current),l.current=null},[]);return r.useEffect(()=>p,[p]),r.useEffect(()=>{let e=c.current;return()=>{window.clearTimeout(e),d(null)}},[c,d]),(0,t.jsx)(eH,{asChild:!0,...u,children:(0,t.jsx)(e5,{id:o.triggerId,"aria-haspopup":"menu","aria-expanded":s.open,"aria-controls":o.contentId,"data-state":th(s.open),...e,ref:(0,eo.composeRefs)(a,o.onTriggerChange),onClick:t=>{e.onClick?.(t),e.disabled||t.defaultPrevented||(t.currentTarget.focus(),s.open||s.onOpenChange(!0))},onPointerMove:(0,en.composeEventHandlers)(e.onPointerMove,tf(t=>{i.onItemEnter(t),!t.defaultPrevented&&(e.disabled||s.open||l.current||(i.onPointerGraceIntentChange(null),l.current=window.setTimeout(()=>{s.onOpenChange(!0),p()},100)))})),onPointerLeave:(0,en.composeEventHandlers)(e.onPointerLeave,tf(e=>{p();let t=s.content?.getBoundingClientRect();if(t){let r=s.content?.dataset.side,a="right"===r,n=t[a?"left":"right"],o=t[a?"right":"left"];i.onPointerGraceIntentChange({area:[{x:e.clientX+(a?-5:5),y:e.clientY},{x:n,y:t.top},{x:o,y:t.top},{x:o,y:t.bottom},{x:n,y:t.bottom}],side:r}),window.clearTimeout(c.current),c.current=window.setTimeout(()=>i.onPointerGraceIntentChange(null),300)}else{if(i.onTriggerLeave(e),e.defaultPrevented)return;i.onPointerGraceIntentChange(null)}})),onKeyDown:(0,en.composeEventHandlers)(e.onKeyDown,t=>{let r=""!==i.searchRef.current;e.disabled||r&&" "===t.key||eS[n.dir].includes(t.key)&&(s.onOpenChange(!0),s.content?.focus(),t.preventDefault())})})})});tp.displayName=tu;var tm="MenuSubContent",tx=r.forwardRef((e,a)=>{let s=ez(eY,e.__scopeMenu),{forceMount:n=s.forceMount,...o}=e,i=eB(eY,e.__scopeMenu),l=eU(eY,e.__scopeMenu),c=td(tm,e.__scopeMenu),d=r.useRef(null),u=(0,eo.useComposedRefs)(a,d);return(0,t.jsx)(eD.Provider,{scope:e.__scopeMenu,children:(0,t.jsx)(ef.Presence,{present:n||i.open,children:(0,t.jsx)(eD.Slot,{scope:e.__scopeMenu,children:(0,t.jsx)(eQ,{id:c.contentId,"aria-labelledby":c.triggerId,...o,ref:u,align:"start",side:"rtl"===l.dir?"left":"right",disableOutsidePointerEvents:!1,disableOutsideScroll:!1,trapFocus:!1,onOpenAutoFocus:e=>{l.isUsingKeyboardRef.current&&d.current?.focus(),e.preventDefault()},onCloseAutoFocus:e=>e.preventDefault(),onFocusOutside:(0,en.composeEventHandlers)(e.onFocusOutside,e=>{e.target!==c.trigger&&i.onOpenChange(!1)}),onEscapeKeyDown:(0,en.composeEventHandlers)(e.onEscapeKeyDown,e=>{l.onClose(),e.preventDefault()}),onKeyDown:(0,en.composeEventHandlers)(e.onKeyDown,e=>{let t=e.currentTarget.contains(e.target),r=eE[l.dir].includes(e.key);t&&r&&(i.onOpenChange(!1),c.trigger?.focus(),e.preventDefault())})})})})})});function th(e){return e?"open":"closed"}function tg(e){return"indeterminate"===e}function tb(e){return tg(e)?"indeterminate":e?"checked":"unchecked"}function tf(e){return t=>"mouse"===t.pointerType?e(t):void 0}tx.displayName=tm;var tv="DropdownMenu",[ty,tj]=(0,ei.createContextScope)(tv,[eA]),tw=eA(),[tN,tk]=ty(tv),tC=e=>{let{__scopeDropdownMenu:a,children:s,dir:n,open:o,defaultOpen:i,onOpenChange:l,modal:c=!0}=e,d=tw(a),u=r.useRef(null),[p=!1,m]=(0,el.useControllableState)({prop:o,defaultProp:i,onChange:l});return(0,t.jsx)(tN,{scope:a,triggerId:(0,eh.useId)(),triggerRef:u,contentId:(0,eh.useId)(),open:p,onOpenChange:m,onOpenToggle:r.useCallback(()=>m(e=>!e),[m]),modal:c,children:(0,t.jsx)(e$,{...d,open:p,onOpenChange:m,dir:n,modal:c,children:s})})};tC.displayName=tv;var t_="DropdownMenuTrigger",tS=r.forwardRef((e,r)=>{let{__scopeDropdownMenu:a,disabled:s=!1,...n}=e,o=tk(t_,a),i=tw(a);return(0,t.jsx)(eH,{asChild:!0,...i,children:(0,t.jsx)(ec.Primitive.button,{type:"button",id:o.triggerId,"aria-haspopup":"menu","aria-expanded":o.open,"aria-controls":o.open?o.contentId:void 0,"data-state":o.open?"open":"closed","data-disabled":s?"":void 0,disabled:s,...n,ref:(0,eo.composeRefs)(r,o.triggerRef),onPointerDown:(0,en.composeEventHandlers)(e.onPointerDown,e=>{!s&&0===e.button&&!1===e.ctrlKey&&(o.onOpenToggle(),o.open||e.preventDefault())}),onKeyDown:(0,en.composeEventHandlers)(e.onKeyDown,e=>{!s&&(["Enter"," "].includes(e.key)&&o.onOpenToggle(),"ArrowDown"===e.key&&o.onOpenChange(!0),["Enter"," ","ArrowDown"].includes(e.key)&&e.preventDefault())})})})});tS.displayName=t_;var tE=e=>{let{__scopeDropdownMenu:r,...a}=e,s=tw(r);return(0,t.jsx)(eG,{...s,...a})};tE.displayName="DropdownMenuPortal";var tR="DropdownMenuContent",tD=r.forwardRef((e,a)=>{let{__scopeDropdownMenu:s,...n}=e,o=tk(tR,s),i=tw(s),l=r.useRef(!1);return(0,t.jsx)(eJ,{id:o.contentId,"aria-labelledby":o.triggerId,...i,...n,ref:a,onCloseAutoFocus:(0,en.composeEventHandlers)(e.onCloseAutoFocus,e=>{l.current||o.triggerRef.current?.focus(),l.current=!1,e.preventDefault()}),onInteractOutside:(0,en.composeEventHandlers)(e.onInteractOutside,e=>{let t=e.detail.originalEvent,r=0===t.button&&!0===t.ctrlKey,a=2===t.button||r;(!o.modal||a)&&(l.current=!0)}),style:{...e.style,"--radix-dropdown-menu-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-dropdown-menu-content-available-width":"var(--radix-popper-available-width)","--radix-dropdown-menu-content-available-height":"var(--radix-popper-available-height)","--radix-dropdown-menu-trigger-width":"var(--radix-popper-anchor-width)","--radix-dropdown-menu-trigger-height":"var(--radix-popper-anchor-height)"}})});tD.displayName=tR,r.forwardRef((e,r)=>{let{__scopeDropdownMenu:a,...s}=e,n=tw(a);return(0,t.jsx)(e0,{...n,...s,ref:r})}).displayName="DropdownMenuGroup";var tT=r.forwardRef((e,r)=>{let{__scopeDropdownMenu:a,...s}=e,n=tw(a);return(0,t.jsx)(e1,{...n,...s,ref:r})});tT.displayName="DropdownMenuLabel";var tL=r.forwardRef((e,r)=>{let{__scopeDropdownMenu:a,...s}=e,n=tw(a);return(0,t.jsx)(e3,{...n,...s,ref:r})});tL.displayName="DropdownMenuItem",r.forwardRef((e,r)=>{let{__scopeDropdownMenu:a,...s}=e,n=tw(a);return(0,t.jsx)(e6,{...n,...s,ref:r})}).displayName="DropdownMenuCheckboxItem",r.forwardRef((e,r)=>{let{__scopeDropdownMenu:a,...s}=e,n=tw(a);return(0,t.jsx)(te,{...n,...s,ref:r})}).displayName="DropdownMenuRadioGroup",r.forwardRef((e,r)=>{let{__scopeDropdownMenu:a,...s}=e,n=tw(a);return(0,t.jsx)(tr,{...n,...s,ref:r})}).displayName="DropdownMenuRadioItem",r.forwardRef((e,r)=>{let{__scopeDropdownMenu:a,...s}=e,n=tw(a);return(0,t.jsx)(to,{...n,...s,ref:r})}).displayName="DropdownMenuItemIndicator";var tI=r.forwardRef((e,r)=>{let{__scopeDropdownMenu:a,...s}=e,n=tw(a);return(0,t.jsx)(ti,{...n,...s,ref:r})});tI.displayName="DropdownMenuSeparator",r.forwardRef((e,r)=>{let{__scopeDropdownMenu:a,...s}=e,n=tw(a);return(0,t.jsx)(tl,{...n,...s,ref:r})}).displayName="DropdownMenuArrow",r.forwardRef((e,r)=>{let{__scopeDropdownMenu:a,...s}=e,n=tw(a);return(0,t.jsx)(tp,{...n,...s,ref:r})}).displayName="DropdownMenuSubTrigger",r.forwardRef((e,r)=>{let{__scopeDropdownMenu:a,...s}=e,n=tw(a);return(0,t.jsx)(tx,{...n,...s,ref:r,style:{...e.style,"--radix-dropdown-menu-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-dropdown-menu-content-available-width":"var(--radix-popper-available-width)","--radix-dropdown-menu-content-available-height":"var(--radix-popper-available-height)","--radix-dropdown-menu-trigger-width":"var(--radix-popper-anchor-width)","--radix-dropdown-menu-trigger-height":"var(--radix-popper-anchor-height)"}})}).displayName="DropdownMenuSubContent",e.i(78784),e.i(46349),(0,x.default)("Circle",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]);var tA=e.i(47163);function tP({...e}){return(0,t.jsx)(tC,{"data-slot":"dropdown-menu",...e})}function tM({...e}){return(0,t.jsx)(tS,{"data-slot":"dropdown-menu-trigger",...e})}function tF({className:e,sideOffset:r=4,...a}){return(0,t.jsx)(tE,{children:(0,t.jsx)(tD,{"data-slot":"dropdown-menu-content",sideOffset:r,className:(0,tA.cn)("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md",e),...a})})}function tB({className:e,inset:r,variant:a="default",...s}){return(0,t.jsx)(tL,{"data-slot":"dropdown-menu-item","data-inset":r,"data-variant":a,className:(0,tA.cn)("focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",e),...s})}function tO({className:e,inset:r,...a}){return(0,t.jsx)(tT,{"data-slot":"dropdown-menu-label","data-inset":r,className:(0,tA.cn)("px-2 py-1.5 text-sm font-medium data-[inset]:pl-8",e),...a})}function tU({className:e,...r}){return(0,t.jsx)(tI,{"data-slot":"dropdown-menu-separator",className:(0,tA.cn)("bg-border -mx-1 my-1 h-px",e),...r})}var t$=e.i(19036),tH=e.i(84123);function tV({onAuthChange:e}){let{user:a,logout:s}=(0,n.useAuth)(),{showTestData:i,setShowTestData:l}=(0,o.useAdminSettings)(),[c,d]=(0,r.useState)(!1),[u,m]=(0,r.useState)(!1);(0,r.useEffect)(()=>{m(!0)},[]);let x=async()=>{await s(),e?.(),window.location.reload()};return u?a?(0,t.jsxs)(tP,{children:[(0,t.jsx)(tM,{asChild:!0,children:(0,t.jsxs)(p.Button,{variant:"ghost",size:"sm",className:"text-muted-foreground hover:text-foreground flex items-center gap-2 min-h-[40px] px-2 sm:px-3",children:[(0,t.jsx)(Z.User,{className:"w-4 h-4"}),(0,t.jsx)("span",{className:"hidden sm:inline max-w-[150px] truncate",children:a.display_name||a.email}),(0,t.jsxs)("span",{className:"flex items-center gap-1 text-warning font-medium",children:[(0,t.jsx)(et.Coins,{className:"w-3 h-3"}),a.credits," ",1===a.credits?"credit":"credits"]})]})}),(0,t.jsxs)(tF,{align:"end",className:"w-56 bg-card border-border",children:[(0,t.jsx)(tO,{className:"text-muted-foreground font-normal",children:(0,t.jsxs)("div",{className:"flex flex-col space-y-1",children:[(0,t.jsx)("p",{className:"text-sm font-medium text-foreground",children:a.display_name||"Karaoke Fan"}),(0,t.jsx)("p",{className:"text-xs text-muted-foreground truncate",children:a.email})]})}),(0,t.jsx)(tU,{className:"bg-border"}),(0,t.jsxs)(tB,{className:"text-muted-foreground focus:text-foreground focus:bg-secondary cursor-default",disabled:!0,children:[(0,t.jsx)(et.Coins,{className:"w-4 h-4 mr-2 text-warning"}),(0,t.jsxs)("span",{children:[a.credits," credits available"]})]}),(0,t.jsxs)(tB,{onClick:()=>{let e=new URL("/#pricing",window.location.origin);a?.email&&e.searchParams.set("email",a.email),window.location.href=e.toString()},className:"text-muted-foreground focus:text-foreground focus:bg-secondary",children:[(0,t.jsx)(ee.CreditCard,{className:"w-4 h-4 mr-2"}),(0,t.jsx)("span",{children:"Buy More Credits"})]}),("admin"===a.role||a.email?.endsWith("@nomadkaraoke.com"))&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(tU,{className:"bg-border"}),(0,t.jsx)(tB,{asChild:!0,className:"text-muted-foreground focus:text-foreground focus:bg-secondary",children:(0,t.jsxs)(j.default,{href:"/admin",children:[(0,t.jsx)(ea,{className:"w-4 h-4 mr-2"}),(0,t.jsx)("span",{children:"Admin Dashboard"})]})}),(0,t.jsxs)(tB,{onSelect:e=>e.preventDefault(),className:"text-muted-foreground focus:text-foreground focus:bg-secondary",children:[(0,t.jsx)(es,{className:"w-4 h-4 mr-2"}),(0,t.jsx)("span",{className:"flex-1",children:"Show Test Jobs"}),(0,t.jsx)(t$.Switch,{checked:i,onCheckedChange:l,className:"ml-2"})]})]}),(0,t.jsx)(tU,{className:"bg-border"}),(0,t.jsxs)(tB,{onClick:x,className:"text-destructive focus:text-destructive focus:bg-secondary",children:[(0,t.jsx)(Q,{className:"w-4 h-4 mr-2"}),(0,t.jsx)("span",{children:"Sign Out"})]})]})]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(p.Button,{variant:"ghost",size:"sm",onClick:()=>d(!0),className:"text-warning hover:text-warning/80 min-h-[40px] px-2 sm:px-3",children:[(0,t.jsx)(er.KeyRound,{className:"w-4 h-4 sm:mr-2"}),(0,t.jsx)("span",{className:"hidden sm:inline",children:"Login"})]}),(0,t.jsx)(tH.AuthDialog,{open:c,onClose:()=>d(!1),onSuccess:()=>{d(!1),e?.(),window.location.reload()}})]}):null}function tK({jobs:e,onJobsChanged:t}){let a=(0,r.useRef)(new Set),n=(0,r.useRef)(new Set),o=(0,r.useCallback)(async(e,r)=>{let o=`${e.job_id}-${r}`;if(!(n.current.has(o)||a.current.has(o))){n.current.add(o),a.current.add(o),console.log(`[AutoProcessor] Auto-processing ${r} for job ${e.job_id}`);try{switch(r){case"review":await s.api.completeReview(e.job_id),console.log(`[AutoProcessor] Auto-completed review for job ${e.job_id}`);break;case"instrumental":{let t=e.state_data?.backing_vocals_analysis,r=t?.recommended_selection,a="with_backing"===r?"with_backing":"clean";await s.api.selectInstrumental(e.job_id,a),console.log(`[AutoProcessor] Auto-selected ${a} instrumental for job ${e.job_id} (analyzer recommendation: ${r||"none"})`);break}case"audio":await s.api.selectAudioResult(e.job_id,0),console.log(`[AutoProcessor] Auto-selected first audio result for job ${e.job_id}`)}t()}catch(t){console.error(`[AutoProcessor] Failed to auto-process ${r} for job ${e.job_id}:`,t),a.current.delete(o)}finally{n.current.delete(o)}}},[t]);return(0,r.useEffect)(()=>{for(let t of e)if(t.non_interactive)switch(t.status){case"awaiting_review":o(t,"review");break;case"awaiting_instrumental_selection":o(t,"instrumental");break;case"awaiting_audio_selection":o(t,"audio")}},[e,o]),null}function tz(){let[e,a]=(0,r.useState)(null),[n,o]=(0,r.useState)(null);return(0,r.useEffect)(()=>{let e=async()=>{try{let e=await s.api.getEncodingWorkerHealth();o(e)}catch(e){console.error("Failed to fetch encoding worker health:",e),o(null)}};(async()=>{try{let e=await s.api.getBackendInfo();a(e.version)}catch(e){console.error("Failed to fetch backend version:",e),a(null)}})(),e()},[]),(0,t.jsx)("footer",{className:"border-t mt-12 py-6",style:{borderColor:"var(--card-border)"},children:(0,t.jsxs)("div",{className:"px-4 text-center text-sm",style:{color:"var(--text-muted)"},children:[(0,t.jsxs)("p",{children:["Powered by"," ",(0,t.jsx)("a",{href:"https://github.com/nomadkaraoke/karaoke-gen",className:"text-amber-500 hover:underline",children:"karaoke-gen"})]}),(0,t.jsxs)("p",{className:"mt-1 text-xs opacity-75",children:["Frontend: v","0.105.6",e&&(0,t.jsxs)(t.Fragment,{children:[" | ","Backend: v",e]}),(()=>{if(!n||"not_configured"===n.status)return null;let e=n.available&&"ok"===n.status,r=e?"Encoder":"Encoder offline";return e&&n.version&&(r=`Encoder: v${n.version}`),e&&n.active_jobs&&n.active_jobs>0&&(r+=` (${n.active_jobs} active)`),(0,t.jsxs)(t.Fragment,{children:[" | ",(0,t.jsx)("span",{className:e?"text-green-500":"text-red-500",title:e?"Encoding worker healthy":n.error||"Encoding worker offline",children:e?"●":"○"})," ",r]})})()]})]})})}let tG=(0,x.default)("Bell",[["path",{d:"M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9",key:"1qo2s2"}],["path",{d:"M10.3 21a1.94 1.94 0 0 0 3.4 0",key:"qgo35s"}]]);var tY=e.i(37727);let tW=(0,x.default)("Smartphone",[["rect",{width:"14",height:"20",x:"5",y:"2",rx:"2",ry:"2",key:"1yt0o3"}],["path",{d:"M12 18h.01",key:"mhygvu"}]]),tq=(0,x.default)("Share",[["path",{d:"M4 12v8a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8",key:"1b2hhj"}],["polyline",{points:"16 6 12 2 8 6",key:"m901s6"}],["line",{x1:"12",x2:"12",y1:"2",y2:"15",key:"1p0rca"}]]),tJ="karaoke_push_prompt_dismissed",tX="karaoke_push_prompt_dismissed_until";function tZ(){let{isLoading:e,isPushEnabled:a,shouldShowPrompt:n,needsIOSInstall:o,isIOS:i,isPWAInstalled:l,permission:c,subscribe:d,dismissPrompt:u,error:m}=function(){let[e,t]=(0,r.useState)(!1),[a,n]=(0,r.useState)(!1),[o,i]=(0,r.useState)(!0),[l,c]=(0,r.useState)("default"),[d,u]=(0,r.useState)(!1),[p,m]=(0,r.useState)(!1),[x,h]=(0,r.useState)(!1),[g,b]=(0,r.useState)(!1),[f,v]=(0,r.useState)(null),y=(0,r.useRef)(null),j=(0,r.useRef)(null);(0,r.useEffect)(()=>{(async()=>{let e;i(!0),v(null);let r="serviceWorker"in navigator&&"PushManager"in window&&"Notification"in window;if(t(r),m((e=window.navigator.userAgent.toLowerCase(),/iphone|ipad|ipod/.test(e))),h(!!window.matchMedia("(display-mode: standalone)").matches||"standalone"in window.navigator&&!!window.navigator.standalone),b(function(){if("true"===localStorage.getItem(tJ))return!0;let e=localStorage.getItem(tX);if(e){let t=parseInt(e,10);if(Date.now()<t)return!0;localStorage.removeItem(tX)}return!1}()),!r){c("unsupported"),i(!1);return}c(Notification.permission);try{let e=await s.api.getVapidPublicKey();n(e.enabled),e.enabled&&e.vapid_public_key&&(y.current=e.vapid_public_key)}catch(e){console.error("Failed to get VAPID key:",e),n(!1)}if("granted"===Notification.permission)try{let e=await navigator.serviceWorker.ready;j.current=e;let t=await e.pushManager.getSubscription();u(!!t)}catch(e){console.error("Failed to check subscription:",e)}i(!1)})()},[]);let w=(0,r.useCallback)(async()=>{if(v(null),!e||!a)return v("Push notifications are not supported or enabled"),!1;if(!y.current)return v("VAPID key not available"),!1;try{let e,t,r=await Notification.requestPermission();if(c(r),"granted"!==r)return v("Notification permission denied"),!1;let a=await navigator.serviceWorker.ready;j.current=a;let n=await a.pushManager.getSubscription();if(!n){let e=y.current,t="=".repeat((4-e.length%4)%4),r=(e+t).replace(/-/g,"+").replace(/_/g,"/"),s=window.atob(r),o=new Uint8Array(s.length);for(let e=0;e<s.length;++e)o[e]=s.charCodeAt(e);n=await a.pushManager.subscribe({userVisibleOnly:!0,applicationServerKey:o})}let{endpoint:o,keys:i}=function(e){let t=e.getKey("p256dh"),r=e.getKey("auth");if(!t||!r)throw Error("Subscription missing required keys");return{endpoint:e.endpoint,keys:{p256dh:btoa(String.fromCharCode(...new Uint8Array(t))),auth:btoa(String.fromCharCode(...new Uint8Array(r)))}}}(n);return await s.api.subscribePush(o,i,(e=window.navigator.userAgent,t=window.navigator.platform||"",/iPhone/.test(e)?"iPhone":/iPad/.test(e)?"iPad":/Android/.test(e)?/Mobile/.test(e)?"Android Phone":"Android Tablet":/Mac/.test(t)?"Mac":/Win/.test(t)?"Windows PC":/Linux/.test(t)?"Linux PC":/Chrome/.test(e)?"Chrome Browser":/Firefox/.test(e)?"Firefox Browser":/Safari/.test(e)?"Safari Browser":"Web Browser")),u(!0),!0}catch(e){return console.error("Failed to subscribe:",e),v(e instanceof Error?e.message:"Failed to subscribe"),!1}},[e,a]),N=(0,r.useCallback)(async()=>{v(null);try{let e=j.current||await navigator.serviceWorker.ready,t=await e.pushManager.getSubscription();if(t){try{await s.api.unsubscribePush(t.endpoint)}catch(e){console.warn("Failed to notify backend of unsubscribe:",e)}await t.unsubscribe()}return u(!1),!0}catch(e){return console.error("Failed to unsubscribe:",e),v(e instanceof Error?e.message:"Failed to unsubscribe"),!1}},[]),k=(0,r.useCallback)((e=!1)=>{if(e)localStorage.setItem(tJ,"true");else{let e=Date.now()+6048e5;localStorage.setItem(tX,e.toString())}b(!0)},[]),C=p&&!x,_=!o&&e&&a&&"default"===l&&!d&&!g&&!C;return{isSupported:e,isPushEnabled:a,isLoading:o,permission:l,isSubscribed:d,isIOS:p,isPWAInstalled:x,needsIOSInstall:C,shouldShowPrompt:_,dismissPrompt:k,subscribe:w,unsubscribe:N,error:f}}(),[x,h]=(0,r.useState)(!1);if(e||!a)return null;if(o)return(0,t.jsx)("div",{className:"bg-blue-500/10 border border-blue-500/20 text-blue-400 px-4 py-3 rounded-lg",children:(0,t.jsxs)("div",{className:"flex items-start gap-3",children:[(0,t.jsx)(tW,{className:"h-5 w-5 mt-0.5 flex-shrink-0"}),(0,t.jsxs)("div",{className:"flex-1",children:[(0,t.jsx)("p",{className:"font-medium mb-1",children:"Get notifications on your iPhone"}),(0,t.jsx)("p",{className:"text-sm text-[var(--text-muted)] mb-3",children:"To receive push notifications on iOS, install this app to your home screen:"}),(0,t.jsxs)("ol",{className:"text-sm text-[var(--text-muted)] space-y-2 mb-3",children:[(0,t.jsxs)("li",{className:"flex items-center gap-2",children:[(0,t.jsx)("span",{className:"bg-blue-500/20 rounded-full w-5 h-5 flex items-center justify-center text-xs",children:"1"}),(0,t.jsxs)("span",{children:["Tap the ",(0,t.jsx)(tq,{className:"inline h-4 w-4"})," Share button in Safari"]})]}),(0,t.jsxs)("li",{className:"flex items-center gap-2",children:[(0,t.jsx)("span",{className:"bg-blue-500/20 rounded-full w-5 h-5 flex items-center justify-center text-xs",children:"2"}),(0,t.jsx)("span",{children:'Scroll down and tap "Add to Home Screen"'})]}),(0,t.jsxs)("li",{className:"flex items-center gap-2",children:[(0,t.jsx)("span",{className:"bg-blue-500/20 rounded-full w-5 h-5 flex items-center justify-center text-xs",children:"3"}),(0,t.jsx)("span",{children:"Open the app from your home screen"})]})]}),(0,t.jsx)("p",{className:"text-xs text-[var(--text-muted)]",children:"iOS requires apps to be installed for push notifications to work."})]}),(0,t.jsx)("button",{onClick:()=>u(!1),className:"text-[var(--text-muted)] hover:text-[var(--text)]","aria-label":"Dismiss",children:(0,t.jsx)(tY.X,{className:"h-4 w-4"})})]})});if(!n)return null;let g=async()=>{h(!0);try{await d()}finally{h(!1)}},b=()=>{u(!1)};return(0,t.jsx)("div",{className:"bg-purple-500/10 border border-purple-500/20 text-purple-300 px-4 py-3 rounded-lg",children:(0,t.jsxs)("div",{className:"flex items-start gap-3",children:[(0,t.jsx)(tG,{className:"h-5 w-5 mt-0.5 flex-shrink-0"}),(0,t.jsxs)("div",{className:"flex-1",children:[(0,t.jsx)("p",{className:"font-medium mb-1",children:"Get notified when your video is ready"}),(0,t.jsx)("p",{className:"text-sm text-[var(--text-muted)] mb-3",children:"We'll send you a notification when your karaoke video needs attention or is ready to download."}),m&&(0,t.jsx)("p",{className:"text-sm text-red-400 mb-3",children:m}),(0,t.jsxs)("div",{className:"flex items-center gap-2 flex-wrap",children:[(0,t.jsx)(p.Button,{onClick:g,size:"sm",disabled:x,className:"bg-purple-600 hover:bg-purple-700 text-white",children:x?"Enabling...":"Enable Notifications"}),(0,t.jsx)(p.Button,{variant:"ghost",size:"sm",onClick:b,className:"text-[var(--text-muted)] hover:text-[var(--text)]",children:"Not now"}),(0,t.jsx)(p.Button,{variant:"ghost",size:"sm",onClick:()=>{u(!0)},className:"text-[var(--text-muted)] hover:text-[var(--text)] text-xs",children:"Don't ask again"})]})]}),(0,t.jsx)("button",{onClick:b,className:"text-[var(--text-muted)] hover:text-[var(--text)]","aria-label":"Dismiss",children:(0,t.jsx)(tY.X,{className:"h-4 w-4"})})]})})}var tQ=e.i(34080),t0=e.i(28231);function t1(){var e;let i,l,c,x,j,w,N,k,C,_,S,E=(0,a.useRouter)(),R=(0,a.useSearchParams)(),[D,T]=(0,r.useState)([]),[L,I]=(0,r.useState)(!0),[A,P]=(0,r.useState)(!0),[M,F]=(0,r.useState)(null),[B,O]=(0,r.useState)(!1),U=(0,r.useRef)(!1),{isDarkMode:$,toggleTheme:H,mounted:V}=(0,tQ.useTheme)(),{user:K,fetchUser:G,verifyMagicLink:Y}=(0,n.useAuth)(),{showTestData:W}=(0,o.useAdminSettings)(),q=K?.role==="admin"||K?.email?.endsWith("@nomadkaraoke.com"),J=(0,r.useCallback)(async()=>{if(!(0,s.getAccessToken)()){I(!1),P(!1);return}try{let e=await s.api.listJobs({limit:20,exclude_test:q?!W:void 0});T(e)}catch(e){e?.status!==401&&console.error("Failed to load jobs:",e)}finally{I(!1),P(!1)}},[q,W]);return i=(0,r.useRef)(new Map),l=(0,r.useRef)(null),c=(0,r.useRef)(u),j=(0,r.useRef)((x=null,()=>{try{x||(x=new(window.AudioContext||window.webkitAudioContext)),"suspended"===x.state&&x.resume();let e=x.currentTime,t=x.createOscillator(),r=x.createOscillator(),a=x.createGain();t.connect(a),r.connect(a),a.connect(x.destination),t.frequency.setValueAtTime(880,e),t.type="sine",r.frequency.setValueAtTime(659.25,e),r.type="sine",a.gain.setValueAtTime(0,e),a.gain.linearRampToValueAtTime(.3,e+.02),a.gain.setValueAtTime(.3,e+.1),a.gain.linearRampToValueAtTime(0,e+.3),t.start(e),r.start(e),t.stop(e+.3),r.stop(e+.3)}catch(e){console.debug("Notification sound failed:",e)}})),w=(0,r.useRef)(!1),N=(0,r.useRef)(!1),(0,r.useEffect)(()=>{let e=()=>{N.current=!0};return document.addEventListener("click",e,{once:!0}),document.addEventListener("keydown",e,{once:!0}),()=>{document.removeEventListener("click",e),document.removeEventListener("keydown",e)}},[]),k=(0,r.useCallback)(e=>{if(w.current)return;w.current=!0,c.current=document.title;let t=!0;l.current=setInterval(()=>{document.title=t?e:c.current,t=!t},1e3)},[]),C=(0,r.useCallback)(()=>{l.current&&(clearInterval(l.current),l.current=null),w.current=!1,document.title=c.current||u},[]),_=(0,r.useCallback)((e,t)=>{N.current&&j.current();let r=t?`${t} - `:"";switch(e){case"action_needed":k(`${r}Action Needed`);break;case"complete":k(`${r}Complete!`);break;case"failed":k(`${r}Failed`)}},[k]),(0,r.useEffect)(()=>{let e=()=>{"visible"===document.visibilityState&&w.current&&C()};return document.addEventListener("visibilitychange",e),()=>{document.removeEventListener("visibilitychange",e)}},[C]),(0,r.useEffect)(()=>()=>{C()},[C]),(0,r.useEffect)(()=>{let e=new Map;for(let t of D){let r=i.current.get(t.job_id),a=t.status;if(e.set(t.job_id,{jobId:t.job_id,status:a}),!r||r.status===a)continue;let s=t.artist&&t.title?`${t.artist} - ${t.title}`:void 0,n=d(r.status),o=d(a);!n&&o&&_("action_needed",s),("complete"===a||"prep_complete"===a)&&_("complete",s),"failed"===a&&_("failed",s)}i.current=e},[D,_]),(e=!0===M,S=(0,r.useRef)(Date.now()),(0,r.useEffect)(()=>{if(!e)return;let t=()=>{"visible"===document.visibilityState?Date.now()-S.current>1e3&&J():S.current=Date.now()};return document.addEventListener("visibilitychange",t),()=>{document.removeEventListener("visibilitychange",t)}},[J,e]),(0,r.useEffect)(()=>{let e=R.get("admin_token");if(e&&!U.current){U.current=!0,O(!0),Y(e).then(e=>{window.history.replaceState({},"","/app"),O(!1),e?F(!0):E.replace("/")});return}e||B||((0,s.getAccessToken)()?F(!0):E.replace("/"))},[E,R,Y,B]),(0,r.useEffect)(()=>{(0,s.getAccessToken)()&&!K&&G()},[K,G]),(0,r.useEffect)(()=>{if(!0!==M)return void I(!1);J();let e=setInterval(J,1e4);return()=>clearInterval(e)},[M,J]),null===M||B)?(0,t.jsx)("div",{className:"min-h-screen flex items-center justify-center animated-gradient",children:(0,t.jsx)(b.Loader2,{className:"w-8 h-8 animate-spin",style:{color:"var(--text-muted)"}})}):A&&L?(0,t.jsx)("div",{className:"min-h-screen flex items-center justify-center animated-gradient",children:(0,t.jsx)(y.WarmingUpLoader,{spinnerClassName:"w-10 h-10"})}):(0,t.jsxs)("div",{className:"min-h-screen animated-gradient",children:[(0,t.jsx)(tK,{jobs:D,onJobsChanged:J}),(0,t.jsx)("header",{className:"fixed top-0 left-0 right-0 z-50 bg-dark-900/80 backdrop-blur-md border-b border-dark-700",children:(0,t.jsxs)("div",{className:"px-3 sm:px-4 py-2 sm:py-3 flex items-center justify-between gap-2",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2 sm:gap-3 min-w-0",children:[(0,t.jsx)("img",{src:"/nomad-karaoke-logo.svg",alt:"Nomad Karaoke",className:"h-8 sm:h-10 shrink-0"}),(0,t.jsx)("div",{className:"min-w-0",children:(0,t.jsx)("h1",{className:"text-base sm:text-xl font-bold truncate",style:{color:"var(--text)"},children:"Karaoke Generator"})})]}),(0,t.jsxs)("div",{className:"flex items-center gap-1 sm:gap-2 shrink-0",children:[(0,t.jsxs)(p.Button,{variant:"ghost",size:"sm",onClick:J,disabled:L||!M,className:"min-h-[40px] px-2 sm:px-3",style:{color:"var(--text-muted)"},children:[(0,t.jsx)(g.RefreshCw,{className:`w-4 h-4 sm:mr-2 ${L?"animate-spin":""}`}),(0,t.jsx)("span",{className:"hidden sm:inline",children:"Refresh"})]}),(0,t.jsx)(tV,{}),V&&(0,t.jsx)(t0.TooltipProvider,{children:(0,t.jsxs)(t0.Tooltip,{children:[(0,t.jsx)(t0.TooltipTrigger,{asChild:!0,children:(0,t.jsx)(p.Button,{variant:"ghost",size:"sm",onClick:H,className:"min-h-[40px] px-2 sm:px-3",style:{color:"var(--text-muted)"},children:$?(0,t.jsx)(v.Sun,{className:"w-4 h-4"}):(0,t.jsx)(f.Moon,{className:"w-4 h-4"})})}),(0,t.jsx)(t0.TooltipContent,{side:"bottom",children:(0,t.jsx)("p",{children:$?"Switch to light mode":"Switch to dark mode"})})]})})]})]})}),(0,t.jsxs)("main",{className:"px-4 pt-24 pb-8 space-y-6",children:[(0,t.jsx)(tZ,{}),(0,t.jsxs)("div",{className:"grid lg:grid-cols-2 gap-8",children:[(0,t.jsxs)(m.Card,{className:"backdrop-blur",style:{borderColor:"var(--card-border)",backgroundColor:"var(--card)"},children:[(0,t.jsxs)(m.CardHeader,{children:[(0,t.jsx)(m.CardTitle,{style:{color:"var(--text)"},children:"Create Karaoke Video"}),(0,t.jsx)(m.CardDescription,{style:{color:"var(--text-muted)"},children:"Upload an audio file, provide a YouTube URL, or search for audio by artist & title"})]}),(0,t.jsx)(m.CardContent,{children:(0,t.jsx)(X,{onJobCreated:J})})]}),(0,t.jsxs)(m.Card,{className:"backdrop-blur",style:{borderColor:"var(--card-border)",backgroundColor:"var(--card)"},children:[(0,t.jsxs)(m.CardHeader,{children:[(0,t.jsxs)(m.CardTitle,{className:"flex items-center justify-between",style:{color:"var(--text)"},children:["Recent Jobs",L&&(0,t.jsx)(b.Loader2,{className:"w-4 h-4 animate-spin",style:{color:"var(--text-muted)"}})]}),(0,t.jsxs)(m.CardDescription,{style:{color:"var(--text-muted)"},children:[D.length," job",1!==D.length?"s":""," found"]})]}),(0,t.jsx)(m.CardContent,{children:0===D.length?(0,t.jsxs)("div",{className:"text-center py-8",style:{color:"var(--text-muted)"},children:[(0,t.jsx)(h,{className:"w-12 h-12 mx-auto mb-3 opacity-50"}),(0,t.jsx)("p",{children:"No jobs yet. Create one to get started!"})]}):(0,t.jsx)("div",{className:"space-y-3",children:D.map(e=>(0,t.jsx)(z,{job:e,onRefresh:J},e.job_id))})})]})]})]}),(0,t.jsx)(tz,{})]})}function t2(){return(0,t.jsx)(r.Suspense,{fallback:(0,t.jsx)("div",{className:"min-h-screen flex items-center justify-center animated-gradient",children:(0,t.jsx)(b.Loader2,{className:"w-8 h-8 animate-spin",style:{color:"var(--text-muted)"}})}),children:(0,t.jsx)(t1,{})})}e.s(["default",()=>t2],27627)}]);