karaoke-gen 0.105.4__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.
- backend/api/routes/users.py +14 -3
- backend/config.py +3 -0
- backend/services/encoding_interface.py +4 -0
- backend/services/job_notification_service.py +4 -21
- backend/tests/test_job_notification_service.py +24 -58
- backend/tests/test_video_worker_orchestrator.py +189 -0
- backend/workers/video_worker_orchestrator.py +7 -0
- karaoke_gen/instrumental_review/server.py +145 -35
- karaoke_gen/nextjs_frontend/__init__.py +98 -0
- karaoke_gen/nextjs_frontend/out/404/index.html +1 -0
- karaoke_gen/nextjs_frontend/out/404.html +1 -0
- karaoke_gen/nextjs_frontend/out/__next.__PAGE__.txt +9 -0
- karaoke_gen/nextjs_frontend/out/__next._full.txt +22 -0
- karaoke_gen/nextjs_frontend/out/__next._head.txt +8 -0
- karaoke_gen/nextjs_frontend/out/__next._index.txt +9 -0
- karaoke_gen/nextjs_frontend/out/__next._tree.txt +2 -0
- karaoke_gen/nextjs_frontend/out/_next/static/chunks/01a7f8fe40f1ff47.js +1 -0
- karaoke_gen/nextjs_frontend/out/_next/static/chunks/112f346e31f991df.js +4 -0
- karaoke_gen/nextjs_frontend/out/_next/static/chunks/16d1a4dd9d8a873a.js +3 -0
- karaoke_gen/nextjs_frontend/out/_next/static/chunks/1ab85c362b8b0e86.js +9 -0
- karaoke_gen/nextjs_frontend/out/_next/static/chunks/247eb132b7f7b574.js +1 -0
- karaoke_gen/nextjs_frontend/out/_next/static/chunks/2b80d15cc95e4818.js +1 -0
- karaoke_gen/nextjs_frontend/out/_next/static/chunks/32c7eba5cd46c1bc.js +7 -0
- karaoke_gen/nextjs_frontend/out/_next/static/chunks/483f26794eae53d0.js +1 -0
- karaoke_gen/nextjs_frontend/out/_next/static/chunks/550c3b02e85f196a.js +1 -0
- karaoke_gen/nextjs_frontend/out/_next/static/chunks/55c5ade44387bef8.js +1 -0
- karaoke_gen/nextjs_frontend/out/_next/static/chunks/5628d92b5893add2.css +1 -0
- karaoke_gen/nextjs_frontend/out/_next/static/chunks/56ebf7665e4341c8.js +7 -0
- karaoke_gen/nextjs_frontend/out/_next/static/chunks/5997132b61dec430.js +1 -0
- karaoke_gen/nextjs_frontend/out/_next/static/chunks/5ea55255bce3eb9e.js +5 -0
- karaoke_gen/nextjs_frontend/out/_next/static/chunks/5eda89a57490b3cd.js +1 -0
- karaoke_gen/nextjs_frontend/out/_next/static/chunks/692f5d9e0d700c76.js +3 -0
- karaoke_gen/nextjs_frontend/out/_next/static/chunks/71d7a05b14f9f0f4.js +1 -0
- karaoke_gen/nextjs_frontend/out/_next/static/chunks/81ac355749ef3302.js +1 -0
- karaoke_gen/nextjs_frontend/out/_next/static/chunks/95f7e5934dbb0e5d.js +1 -0
- karaoke_gen/nextjs_frontend/out/_next/static/chunks/9bce8f19eaa46940.js +1 -0
- karaoke_gen/nextjs_frontend/out/_next/static/chunks/a6dad97d9634a72d.js +1 -0
- karaoke_gen/nextjs_frontend/out/_next/static/chunks/a9ed54eed3e14c92.js +2 -0
- karaoke_gen/nextjs_frontend/out/_next/static/chunks/b35cd41238ecfb17.js +1 -0
- karaoke_gen/nextjs_frontend/out/_next/static/chunks/b5bc3c3d5ebd49eb.js +1 -0
- karaoke_gen/nextjs_frontend/out/_next/static/chunks/b5c078c08db5ae32.js +5 -0
- karaoke_gen/nextjs_frontend/out/_next/static/chunks/be9c44a178104187.js +1 -0
- karaoke_gen/nextjs_frontend/out/_next/static/chunks/c4c840e18cb4861c.js +1 -0
- karaoke_gen/nextjs_frontend/out/_next/static/chunks/c645af7d6b65f73e.js +1 -0
- karaoke_gen/nextjs_frontend/out/_next/static/chunks/d2c5e2575df784d4.js +1 -0
- karaoke_gen/nextjs_frontend/out/_next/static/chunks/d30af02b96d81462.js +1 -0
- karaoke_gen/nextjs_frontend/out/_next/static/chunks/d9bdf64f4ec1e9b7.js +7 -0
- karaoke_gen/nextjs_frontend/out/_next/static/chunks/dcde6ed684dacd0e.js +5 -0
- karaoke_gen/nextjs_frontend/out/_next/static/chunks/e422cbe931246000.js +1 -0
- karaoke_gen/nextjs_frontend/out/_next/static/chunks/e483af34fc792d38.js +1 -0
- karaoke_gen/nextjs_frontend/out/_next/static/chunks/e57422aad6b897da.js +1 -0
- karaoke_gen/nextjs_frontend/out/_next/static/chunks/ef02697fb404726a.js +1 -0
- karaoke_gen/nextjs_frontend/out/_next/static/chunks/ff1a16fafef87110.js +1 -0
- karaoke_gen/nextjs_frontend/out/_next/static/chunks/turbopack-2d9ca3017a9deedf.js +3 -0
- karaoke_gen/nextjs_frontend/out/_next/static/zpw_-rjFIDV5tlPPtnvRI/_buildManifest.js +11 -0
- karaoke_gen/nextjs_frontend/out/_next/static/zpw_-rjFIDV5tlPPtnvRI/_clientMiddlewareManifest.json +1 -0
- karaoke_gen/nextjs_frontend/out/_next/static/zpw_-rjFIDV5tlPPtnvRI/_ssgManifest.js +1 -0
- karaoke_gen/nextjs_frontend/out/_not-found/__next._full.txt +18 -0
- karaoke_gen/nextjs_frontend/out/_not-found/__next._head.txt +8 -0
- karaoke_gen/nextjs_frontend/out/_not-found/__next._index.txt +9 -0
- karaoke_gen/nextjs_frontend/out/_not-found/__next._not-found.__PAGE__.txt +5 -0
- karaoke_gen/nextjs_frontend/out/_not-found/__next._not-found.txt +4 -0
- karaoke_gen/nextjs_frontend/out/_not-found/__next._tree.txt +2 -0
- karaoke_gen/nextjs_frontend/out/_not-found/index.html +1 -0
- karaoke_gen/nextjs_frontend/out/_not-found/index.txt +18 -0
- karaoke_gen/nextjs_frontend/out/admin/__next._full.txt +25 -0
- karaoke_gen/nextjs_frontend/out/admin/__next._head.txt +8 -0
- karaoke_gen/nextjs_frontend/out/admin/__next._index.txt +9 -0
- karaoke_gen/nextjs_frontend/out/admin/__next._tree.txt +2 -0
- karaoke_gen/nextjs_frontend/out/admin/__next.admin.__PAGE__.txt +9 -0
- karaoke_gen/nextjs_frontend/out/admin/__next.admin.txt +7 -0
- karaoke_gen/nextjs_frontend/out/admin/beta/__next._full.txt +25 -0
- karaoke_gen/nextjs_frontend/out/admin/beta/__next._head.txt +8 -0
- karaoke_gen/nextjs_frontend/out/admin/beta/__next._index.txt +9 -0
- karaoke_gen/nextjs_frontend/out/admin/beta/__next._tree.txt +2 -0
- karaoke_gen/nextjs_frontend/out/admin/beta/__next.admin.beta.__PAGE__.txt +9 -0
- karaoke_gen/nextjs_frontend/out/admin/beta/__next.admin.beta.txt +4 -0
- karaoke_gen/nextjs_frontend/out/admin/beta/__next.admin.txt +7 -0
- karaoke_gen/nextjs_frontend/out/admin/beta/index.html +1 -0
- karaoke_gen/nextjs_frontend/out/admin/beta/index.txt +25 -0
- karaoke_gen/nextjs_frontend/out/admin/index.html +1 -0
- karaoke_gen/nextjs_frontend/out/admin/index.txt +25 -0
- karaoke_gen/nextjs_frontend/out/admin/jobs/__next._full.txt +25 -0
- karaoke_gen/nextjs_frontend/out/admin/jobs/__next._head.txt +8 -0
- karaoke_gen/nextjs_frontend/out/admin/jobs/__next._index.txt +9 -0
- karaoke_gen/nextjs_frontend/out/admin/jobs/__next._tree.txt +2 -0
- karaoke_gen/nextjs_frontend/out/admin/jobs/__next.admin.jobs.__PAGE__.txt +9 -0
- karaoke_gen/nextjs_frontend/out/admin/jobs/__next.admin.jobs.txt +4 -0
- karaoke_gen/nextjs_frontend/out/admin/jobs/__next.admin.txt +7 -0
- karaoke_gen/nextjs_frontend/out/admin/jobs/index.html +1 -0
- karaoke_gen/nextjs_frontend/out/admin/jobs/index.txt +25 -0
- karaoke_gen/nextjs_frontend/out/admin/rate-limits/__next._full.txt +25 -0
- karaoke_gen/nextjs_frontend/out/admin/rate-limits/__next._head.txt +8 -0
- karaoke_gen/nextjs_frontend/out/admin/rate-limits/__next._index.txt +9 -0
- karaoke_gen/nextjs_frontend/out/admin/rate-limits/__next._tree.txt +2 -0
- karaoke_gen/nextjs_frontend/out/admin/rate-limits/__next.admin.rate-limits.__PAGE__.txt +9 -0
- karaoke_gen/nextjs_frontend/out/admin/rate-limits/__next.admin.rate-limits.txt +4 -0
- karaoke_gen/nextjs_frontend/out/admin/rate-limits/__next.admin.txt +7 -0
- karaoke_gen/nextjs_frontend/out/admin/rate-limits/index.html +1 -0
- karaoke_gen/nextjs_frontend/out/admin/rate-limits/index.txt +25 -0
- karaoke_gen/nextjs_frontend/out/admin/searches/__next._full.txt +25 -0
- karaoke_gen/nextjs_frontend/out/admin/searches/__next._head.txt +8 -0
- karaoke_gen/nextjs_frontend/out/admin/searches/__next._index.txt +9 -0
- karaoke_gen/nextjs_frontend/out/admin/searches/__next._tree.txt +2 -0
- karaoke_gen/nextjs_frontend/out/admin/searches/__next.admin.searches.__PAGE__.txt +9 -0
- karaoke_gen/nextjs_frontend/out/admin/searches/__next.admin.searches.txt +4 -0
- karaoke_gen/nextjs_frontend/out/admin/searches/__next.admin.txt +7 -0
- karaoke_gen/nextjs_frontend/out/admin/searches/index.html +1 -0
- karaoke_gen/nextjs_frontend/out/admin/searches/index.txt +25 -0
- karaoke_gen/nextjs_frontend/out/admin/users/__next._full.txt +25 -0
- karaoke_gen/nextjs_frontend/out/admin/users/__next._head.txt +8 -0
- karaoke_gen/nextjs_frontend/out/admin/users/__next._index.txt +9 -0
- karaoke_gen/nextjs_frontend/out/admin/users/__next._tree.txt +2 -0
- karaoke_gen/nextjs_frontend/out/admin/users/__next.admin.txt +7 -0
- karaoke_gen/nextjs_frontend/out/admin/users/__next.admin.users.__PAGE__.txt +9 -0
- karaoke_gen/nextjs_frontend/out/admin/users/__next.admin.users.txt +4 -0
- karaoke_gen/nextjs_frontend/out/admin/users/detail/__next._full.txt +25 -0
- karaoke_gen/nextjs_frontend/out/admin/users/detail/__next._head.txt +8 -0
- karaoke_gen/nextjs_frontend/out/admin/users/detail/__next._index.txt +9 -0
- karaoke_gen/nextjs_frontend/out/admin/users/detail/__next._tree.txt +2 -0
- karaoke_gen/nextjs_frontend/out/admin/users/detail/__next.admin.txt +7 -0
- karaoke_gen/nextjs_frontend/out/admin/users/detail/__next.admin.users.detail.__PAGE__.txt +9 -0
- karaoke_gen/nextjs_frontend/out/admin/users/detail/__next.admin.users.detail.txt +4 -0
- karaoke_gen/nextjs_frontend/out/admin/users/detail/__next.admin.users.txt +4 -0
- karaoke_gen/nextjs_frontend/out/admin/users/detail/index.html +1 -0
- karaoke_gen/nextjs_frontend/out/admin/users/detail/index.txt +25 -0
- karaoke_gen/nextjs_frontend/out/admin/users/index.html +1 -0
- karaoke_gen/nextjs_frontend/out/admin/users/index.txt +25 -0
- karaoke_gen/nextjs_frontend/out/app/__next._full.txt +22 -0
- karaoke_gen/nextjs_frontend/out/app/__next._head.txt +8 -0
- karaoke_gen/nextjs_frontend/out/app/__next._index.txt +9 -0
- karaoke_gen/nextjs_frontend/out/app/__next._tree.txt +2 -0
- karaoke_gen/nextjs_frontend/out/app/__next.app.__PAGE__.txt +9 -0
- karaoke_gen/nextjs_frontend/out/app/__next.app.txt +4 -0
- karaoke_gen/nextjs_frontend/out/app/index.html +1 -0
- karaoke_gen/nextjs_frontend/out/app/index.txt +22 -0
- karaoke_gen/nextjs_frontend/out/app/jobs/__next._full.txt +19 -0
- karaoke_gen/nextjs_frontend/out/app/jobs/__next._head.txt +8 -0
- karaoke_gen/nextjs_frontend/out/app/jobs/__next._index.txt +9 -0
- karaoke_gen/nextjs_frontend/out/app/jobs/__next._tree.txt +2 -0
- karaoke_gen/nextjs_frontend/out/app/jobs/__next.app.jobs.$oc$slug.__PAGE__.txt +6 -0
- karaoke_gen/nextjs_frontend/out/app/jobs/__next.app.jobs.$oc$slug.txt +4 -0
- karaoke_gen/nextjs_frontend/out/app/jobs/__next.app.jobs.txt +4 -0
- karaoke_gen/nextjs_frontend/out/app/jobs/__next.app.txt +4 -0
- karaoke_gen/nextjs_frontend/out/app/jobs/index.html +1 -0
- karaoke_gen/nextjs_frontend/out/app/jobs/index.txt +19 -0
- karaoke_gen/nextjs_frontend/out/app/jobs/local/instrumental/__next._full.txt +19 -0
- karaoke_gen/nextjs_frontend/out/app/jobs/local/instrumental/__next._head.txt +8 -0
- karaoke_gen/nextjs_frontend/out/app/jobs/local/instrumental/__next._index.txt +9 -0
- karaoke_gen/nextjs_frontend/out/app/jobs/local/instrumental/__next._tree.txt +2 -0
- karaoke_gen/nextjs_frontend/out/app/jobs/local/instrumental/__next.app.jobs.$oc$slug.__PAGE__.txt +6 -0
- karaoke_gen/nextjs_frontend/out/app/jobs/local/instrumental/__next.app.jobs.$oc$slug.txt +4 -0
- karaoke_gen/nextjs_frontend/out/app/jobs/local/instrumental/__next.app.jobs.txt +4 -0
- karaoke_gen/nextjs_frontend/out/app/jobs/local/instrumental/__next.app.txt +4 -0
- karaoke_gen/nextjs_frontend/out/app/jobs/local/instrumental/index.html +1 -0
- karaoke_gen/nextjs_frontend/out/app/jobs/local/instrumental/index.txt +19 -0
- karaoke_gen/nextjs_frontend/out/app/jobs/local/review/__next._full.txt +19 -0
- karaoke_gen/nextjs_frontend/out/app/jobs/local/review/__next._head.txt +8 -0
- karaoke_gen/nextjs_frontend/out/app/jobs/local/review/__next._index.txt +9 -0
- karaoke_gen/nextjs_frontend/out/app/jobs/local/review/__next._tree.txt +2 -0
- karaoke_gen/nextjs_frontend/out/app/jobs/local/review/__next.app.jobs.$oc$slug.__PAGE__.txt +6 -0
- karaoke_gen/nextjs_frontend/out/app/jobs/local/review/__next.app.jobs.$oc$slug.txt +4 -0
- karaoke_gen/nextjs_frontend/out/app/jobs/local/review/__next.app.jobs.txt +4 -0
- karaoke_gen/nextjs_frontend/out/app/jobs/local/review/__next.app.txt +4 -0
- karaoke_gen/nextjs_frontend/out/app/jobs/local/review/index.html +1 -0
- karaoke_gen/nextjs_frontend/out/app/jobs/local/review/index.txt +19 -0
- karaoke_gen/nextjs_frontend/out/auth/verify/__next._full.txt +22 -0
- karaoke_gen/nextjs_frontend/out/auth/verify/__next._head.txt +8 -0
- karaoke_gen/nextjs_frontend/out/auth/verify/__next._index.txt +9 -0
- karaoke_gen/nextjs_frontend/out/auth/verify/__next._tree.txt +2 -0
- karaoke_gen/nextjs_frontend/out/auth/verify/__next.auth.txt +4 -0
- karaoke_gen/nextjs_frontend/out/auth/verify/__next.auth.verify.__PAGE__.txt +9 -0
- karaoke_gen/nextjs_frontend/out/auth/verify/__next.auth.verify.txt +4 -0
- karaoke_gen/nextjs_frontend/out/auth/verify/index.html +1 -0
- karaoke_gen/nextjs_frontend/out/auth/verify/index.txt +22 -0
- karaoke_gen/nextjs_frontend/out/index.html +1 -0
- karaoke_gen/nextjs_frontend/out/index.txt +22 -0
- karaoke_gen/nextjs_frontend/out/manifest.webmanifest +31 -0
- karaoke_gen/nextjs_frontend/out/order/success/__next._full.txt +22 -0
- karaoke_gen/nextjs_frontend/out/order/success/__next._head.txt +8 -0
- karaoke_gen/nextjs_frontend/out/order/success/__next._index.txt +9 -0
- karaoke_gen/nextjs_frontend/out/order/success/__next._tree.txt +2 -0
- karaoke_gen/nextjs_frontend/out/order/success/__next.order.success.__PAGE__.txt +9 -0
- karaoke_gen/nextjs_frontend/out/order/success/__next.order.success.txt +4 -0
- karaoke_gen/nextjs_frontend/out/order/success/__next.order.txt +4 -0
- karaoke_gen/nextjs_frontend/out/order/success/index.html +1 -0
- karaoke_gen/nextjs_frontend/out/order/success/index.txt +22 -0
- karaoke_gen/nextjs_frontend/out/payment/success/__next._full.txt +22 -0
- karaoke_gen/nextjs_frontend/out/payment/success/__next._head.txt +8 -0
- karaoke_gen/nextjs_frontend/out/payment/success/__next._index.txt +9 -0
- karaoke_gen/nextjs_frontend/out/payment/success/__next._tree.txt +2 -0
- karaoke_gen/nextjs_frontend/out/payment/success/__next.payment.success.__PAGE__.txt +9 -0
- karaoke_gen/nextjs_frontend/out/payment/success/__next.payment.success.txt +4 -0
- karaoke_gen/nextjs_frontend/out/payment/success/__next.payment.txt +4 -0
- karaoke_gen/nextjs_frontend/out/payment/success/index.html +1 -0
- karaoke_gen/nextjs_frontend/out/payment/success/index.txt +22 -0
- karaoke_gen/nextjs_frontend/out/screenshots/email-action_reminder.png +0 -0
- karaoke_gen/nextjs_frontend/out/screenshots/email-beta_welcome.png +0 -0
- karaoke_gen/nextjs_frontend/out/screenshots/email-job_completion.png +0 -0
- karaoke_gen/nextjs_frontend/out/screenshots/example-output.avif +0 -0
- karaoke_gen/nextjs_frontend/out/screenshots/homepage-full.png +0 -0
- karaoke_gen/nextjs_frontend/out/screenshots/homepage-hero.png +0 -0
- karaoke_gen/nextjs_frontend/out/screenshots/instrumental-review.avif +0 -0
- karaoke_gen/nextjs_frontend/out/screenshots/instrumental-review.png +0 -0
- karaoke_gen/nextjs_frontend/out/screenshots/job-dashboard.avif +0 -0
- karaoke_gen/nextjs_frontend/out/screenshots/lyrics-review.avif +0 -0
- karaoke_gen/nextjs_frontend/out/screenshots/lyrics-review.png +0 -0
- karaoke_gen/nextjs_frontend/out/sw.js +183 -0
- karaoke_gen/utils/cli_args.py +3 -3
- karaoke_gen/utils/gen_cli.py +4 -0
- karaoke_gen/utils/remote_cli.py +8 -40
- {karaoke_gen-0.105.4.dist-info → karaoke_gen-0.107.0.dist-info}/METADATA +1 -1
- {karaoke_gen-0.105.4.dist-info → karaoke_gen-0.107.0.dist-info}/RECORD +227 -121
- {karaoke_gen-0.105.4.dist-info → karaoke_gen-0.107.0.dist-info}/WHEEL +1 -1
- lyrics_transcriber/correction/agentic/agent.py +83 -60
- lyrics_transcriber/correction/anchor_sequence.py +48 -3
- lyrics_transcriber/correction/corrector.py +92 -58
- lyrics_transcriber/review/server.py +165 -33
- lyrics_transcriber/utils/tracing.py +214 -0
- karaoke_gen/instrumental_review/static/index.html +0 -1721
- lyrics_transcriber/frontend/.gitignore +0 -24
- lyrics_transcriber/frontend/.yarn/releases/yarn-4.7.0.cjs +0 -935
- lyrics_transcriber/frontend/.yarnrc.yml +0 -3
- lyrics_transcriber/frontend/README.md +0 -50
- lyrics_transcriber/frontend/REPLACE_ALL_FUNCTIONALITY.md +0 -210
- lyrics_transcriber/frontend/__init__.py +0 -25
- lyrics_transcriber/frontend/e2e/agentic-corrections.spec.ts +0 -207
- lyrics_transcriber/frontend/e2e/fixtures/agentic-correction-data.json +0 -226
- lyrics_transcriber/frontend/eslint.config.js +0 -28
- lyrics_transcriber/frontend/index.html +0 -22
- lyrics_transcriber/frontend/package-lock.json +0 -4553
- lyrics_transcriber/frontend/package.json +0 -48
- lyrics_transcriber/frontend/playwright.config.ts +0 -69
- lyrics_transcriber/frontend/public/android-chrome-192x192.png +0 -0
- lyrics_transcriber/frontend/public/android-chrome-512x512.png +0 -0
- lyrics_transcriber/frontend/src/App.tsx +0 -243
- lyrics_transcriber/frontend/src/api.ts +0 -262
- lyrics_transcriber/frontend/src/components/AIFeedbackModal.tsx +0 -111
- lyrics_transcriber/frontend/src/components/AddLyricsModal.tsx +0 -114
- lyrics_transcriber/frontend/src/components/AgenticCorrectionMetrics.tsx +0 -204
- lyrics_transcriber/frontend/src/components/AppHeader.tsx +0 -65
- lyrics_transcriber/frontend/src/components/AudioPlayer.tsx +0 -180
- lyrics_transcriber/frontend/src/components/CorrectedWordWithActions.tsx +0 -175
- lyrics_transcriber/frontend/src/components/CorrectionAnnotationModal.tsx +0 -359
- lyrics_transcriber/frontend/src/components/CorrectionDetailCard.tsx +0 -281
- lyrics_transcriber/frontend/src/components/CorrectionMetrics.tsx +0 -162
- lyrics_transcriber/frontend/src/components/DurationTimelineView.tsx +0 -257
- lyrics_transcriber/frontend/src/components/EditActionBar.tsx +0 -94
- lyrics_transcriber/frontend/src/components/EditModal.tsx +0 -720
- lyrics_transcriber/frontend/src/components/EditTimelineSection.tsx +0 -592
- lyrics_transcriber/frontend/src/components/EditWordList.tsx +0 -431
- lyrics_transcriber/frontend/src/components/FileUpload.tsx +0 -77
- lyrics_transcriber/frontend/src/components/FindReplaceModal.tsx +0 -467
- lyrics_transcriber/frontend/src/components/Header.tsx +0 -520
- lyrics_transcriber/frontend/src/components/LyricsAnalyzer.tsx +0 -1526
- lyrics_transcriber/frontend/src/components/LyricsSynchronizer/SyncControls.tsx +0 -216
- lyrics_transcriber/frontend/src/components/LyricsSynchronizer/TimelineCanvas.tsx +0 -721
- lyrics_transcriber/frontend/src/components/LyricsSynchronizer/UpcomingWordsBar.tsx +0 -80
- lyrics_transcriber/frontend/src/components/LyricsSynchronizer/index.tsx +0 -999
- lyrics_transcriber/frontend/src/components/MetricsDashboard.tsx +0 -51
- lyrics_transcriber/frontend/src/components/ModeSelectionModal.tsx +0 -127
- lyrics_transcriber/frontend/src/components/ModeSelector.tsx +0 -67
- lyrics_transcriber/frontend/src/components/ModelSelector.tsx +0 -23
- lyrics_transcriber/frontend/src/components/PreviewVideoSection.tsx +0 -177
- lyrics_transcriber/frontend/src/components/ReferenceView.tsx +0 -268
- lyrics_transcriber/frontend/src/components/ReplaceAllLyricsModal.tsx +0 -336
- lyrics_transcriber/frontend/src/components/ReviewChangesModal.tsx +0 -354
- lyrics_transcriber/frontend/src/components/SegmentDetailsModal.tsx +0 -64
- lyrics_transcriber/frontend/src/components/TimelineEditor.tsx +0 -383
- lyrics_transcriber/frontend/src/components/TimingOffsetModal.tsx +0 -131
- lyrics_transcriber/frontend/src/components/TranscriptionView.tsx +0 -266
- lyrics_transcriber/frontend/src/components/WordDivider.tsx +0 -191
- lyrics_transcriber/frontend/src/components/shared/components/HighlightedText.tsx +0 -466
- lyrics_transcriber/frontend/src/components/shared/components/SourceSelector.tsx +0 -56
- lyrics_transcriber/frontend/src/components/shared/components/Word.tsx +0 -89
- lyrics_transcriber/frontend/src/components/shared/constants.ts +0 -30
- lyrics_transcriber/frontend/src/components/shared/hooks/useWordClick.ts +0 -180
- lyrics_transcriber/frontend/src/components/shared/styles.ts +0 -13
- lyrics_transcriber/frontend/src/components/shared/types.js +0 -2
- lyrics_transcriber/frontend/src/components/shared/types.ts +0 -135
- lyrics_transcriber/frontend/src/components/shared/utils/keyboardHandlers.ts +0 -177
- lyrics_transcriber/frontend/src/components/shared/utils/localStorage.ts +0 -78
- lyrics_transcriber/frontend/src/components/shared/utils/referenceLineCalculator.ts +0 -75
- lyrics_transcriber/frontend/src/components/shared/utils/segmentOperations.ts +0 -360
- lyrics_transcriber/frontend/src/components/shared/utils/timingUtils.ts +0 -110
- lyrics_transcriber/frontend/src/components/shared/utils/wordUtils.ts +0 -22
- lyrics_transcriber/frontend/src/hooks/useManualSync.ts +0 -537
- lyrics_transcriber/frontend/src/main.tsx +0 -11
- lyrics_transcriber/frontend/src/theme.ts +0 -406
- lyrics_transcriber/frontend/src/types/global.d.ts +0 -9
- lyrics_transcriber/frontend/src/types.js +0 -2
- lyrics_transcriber/frontend/src/types.ts +0 -199
- lyrics_transcriber/frontend/src/validation.ts +0 -132
- lyrics_transcriber/frontend/src/vite-env.d.ts +0 -1
- lyrics_transcriber/frontend/tsconfig.app.json +0 -26
- lyrics_transcriber/frontend/tsconfig.json +0 -25
- lyrics_transcriber/frontend/tsconfig.node.json +0 -23
- lyrics_transcriber/frontend/tsconfig.tsbuildinfo +0 -1
- lyrics_transcriber/frontend/update_version.js +0 -11
- lyrics_transcriber/frontend/vite.config.d.ts +0 -2
- lyrics_transcriber/frontend/vite.config.js +0 -15
- lyrics_transcriber/frontend/vite.config.ts +0 -16
- lyrics_transcriber/frontend/web_assets/android-chrome-192x192.png +0 -0
- lyrics_transcriber/frontend/web_assets/android-chrome-512x512.png +0 -0
- lyrics_transcriber/frontend/web_assets/apple-touch-icon.png +0 -0
- lyrics_transcriber/frontend/web_assets/assets/index-BSMgOq4Z.js +0 -44465
- lyrics_transcriber/frontend/web_assets/assets/index-BSMgOq4Z.js.map +0 -1
- lyrics_transcriber/frontend/web_assets/favicon-16x16.png +0 -0
- lyrics_transcriber/frontend/web_assets/favicon-32x32.png +0 -0
- lyrics_transcriber/frontend/web_assets/favicon.ico +0 -0
- lyrics_transcriber/frontend/web_assets/index.html +0 -22
- lyrics_transcriber/frontend/web_assets/nomad-karaoke-logo.png +0 -0
- lyrics_transcriber/frontend/web_assets/nomad-karaoke-logo.svg +0 -5
- lyrics_transcriber/frontend/yarn.lock +0 -3711
- {lyrics_transcriber/frontend/public → karaoke_gen/nextjs_frontend/out}/apple-touch-icon.png +0 -0
- {lyrics_transcriber/frontend/public → karaoke_gen/nextjs_frontend/out}/favicon-16x16.png +0 -0
- {lyrics_transcriber/frontend/public → karaoke_gen/nextjs_frontend/out}/favicon-32x32.png +0 -0
- {lyrics_transcriber/frontend/public → karaoke_gen/nextjs_frontend/out}/favicon.ico +0 -0
- {lyrics_transcriber/frontend/public → karaoke_gen/nextjs_frontend/out}/nomad-karaoke-logo.svg +0 -0
- /lyrics_transcriber/frontend/public/nomad-karaoke-logo.png → /karaoke_gen/nextjs_frontend/out/nomad-logo.png +0 -0
- {karaoke_gen-0.105.4.dist-info → karaoke_gen-0.107.0.dist-info}/entry_points.txt +0 -0
- {karaoke_gen-0.105.4.dist-info → karaoke_gen-0.107.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -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)}]);
|