@burdenoff/microfe-hookmovies 2026.830.1 → 2026.1024.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/dist/hookmovies/HookMoviesRoutes.d.ts.map +1 -1
  2. package/dist/hookmovies/HookMoviesRoutes.js +42 -30
  3. package/dist/hookmovies/HookMoviesRoutes.js.map +1 -1
  4. package/dist/hookmovies/components/ApplicationCastingActions.d.ts +15 -0
  5. package/dist/hookmovies/components/ApplicationCastingActions.d.ts.map +1 -0
  6. package/dist/hookmovies/components/ApplicationCastingActions.js +408 -0
  7. package/dist/hookmovies/components/ApplicationCastingActions.js.map +1 -0
  8. package/dist/hookmovies/components/StatusBadge.d.ts.map +1 -1
  9. package/dist/hookmovies/components/StatusBadge.js +11 -0
  10. package/dist/hookmovies/components/StatusBadge.js.map +1 -1
  11. package/dist/hookmovies/hooks/useCastingApi.d.ts +263 -0
  12. package/dist/hookmovies/hooks/useCastingApi.d.ts.map +1 -0
  13. package/dist/hookmovies/hooks/useCastingApi.js +134 -0
  14. package/dist/hookmovies/hooks/useCastingApi.js.map +1 -0
  15. package/dist/hookmovies/hooks/useHookMoviesApi.d.ts +5 -0
  16. package/dist/hookmovies/hooks/useHookMoviesApi.d.ts.map +1 -1
  17. package/dist/hookmovies/hooks/useHookMoviesApi.js +1 -1
  18. package/dist/hookmovies/hooks/useHookMoviesApi.js.map +1 -1
  19. package/dist/hookmovies/pages/auditions/AuditionDetailPage.d.ts.map +1 -1
  20. package/dist/hookmovies/pages/auditions/AuditionDetailPage.js +202 -146
  21. package/dist/hookmovies/pages/auditions/AuditionDetailPage.js.map +1 -1
  22. package/dist/hookmovies/pages/casting/MyCastingPage.d.ts +4 -0
  23. package/dist/hookmovies/pages/casting/MyCastingPage.d.ts.map +1 -0
  24. package/dist/hookmovies/pages/casting/MyCastingPage.js +553 -0
  25. package/dist/hookmovies/pages/casting/MyCastingPage.js.map +1 -0
  26. package/dist/hookmovies/pages/casting/SavedSearchesPage.d.ts +4 -0
  27. package/dist/hookmovies/pages/casting/SavedSearchesPage.d.ts.map +1 -0
  28. package/dist/hookmovies/pages/casting/SavedSearchesPage.js +312 -0
  29. package/dist/hookmovies/pages/casting/SavedSearchesPage.js.map +1 -0
  30. package/dist/hookmovies/pages/trust/DisputesPage.d.ts +4 -0
  31. package/dist/hookmovies/pages/trust/DisputesPage.d.ts.map +1 -0
  32. package/dist/hookmovies/pages/trust/DisputesPage.js +170 -0
  33. package/dist/hookmovies/pages/trust/DisputesPage.js.map +1 -0
  34. package/dist/utils/pageContext.d.ts.map +1 -1
  35. package/dist/utils/pageContext.js +12 -0
  36. package/dist/utils/pageContext.js.map +1 -1
  37. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"AuditionDetailPage.js","names":[],"sources":["../../../../src/hookmovies/pages/auditions/AuditionDetailPage.tsx"],"sourcesContent":["/**\n * Audition detail (Casting marketplace)\n * @module hookmovies/pages/auditions\n *\n * Two-sided surface:\n * - Talent can apply via `hokApplyToAudition` (self-scoped).\n * - Casting teams screen applicants from `hokListApplications`, score them via\n * `hokScoreApplication`, and close the call with `hokCloseAudition`.\n */\n\nimport { type ChangeEvent, type FC, type FormEvent, useMemo, useRef, useState } from 'react';\nimport { useParams } from 'react-router';\nimport {\n ArrowLeft,\n MapPin,\n Languages,\n Clock,\n Coins,\n Send,\n Lock,\n Users,\n Upload,\n Film,\n Loader2,\n Star,\n ShieldAlert,\n X,\n} from 'lucide-react';\nimport { GlassCard } from '@burdenoff/fe-libs/ui';\nimport { PageLayout } from '../../components/PageLayout';\nimport { StatusBadge } from '../../components/StatusBadge';\nimport { LoadingState, ErrorState } from '../../components/StateViews';\nimport { useHookMovies } from '../../context/HookMoviesContext';\nimport {\n type HokApplication,\n useAuditionById,\n useAuditionApplications,\n useApplyToAudition,\n useScoreApplication,\n useCloseAudition,\n} from '../../hooks/useHookMoviesApi';\nimport { uploadFileToFiles, FILE_FOLDERS } from '../../hooks/useFiles';\nimport { formatDate, formatMinorUnits, formatRelativeTime } from '../../utils/formatters';\nimport { cn } from '../../utils/cn';\n\nconst fieldClass =\n 'w-full rounded-lg border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]';\n\n/** Short, deterministic label for an anonymised applicant avatar. */\nfunction applicantInitials(applicantId: string): string {\n const cleaned = applicantId.replace(/[^a-zA-Z0-9]/g, '');\n return (cleaned.slice(0, 2) || '?').toUpperCase();\n}\n\n/** Statuses that represent a positive casting outcome — highlighted in the list. */\nconst HIGHLIGHT_STATUSES = new Set(['shortlisted', 'callback', 'offered']);\n\ninterface ScoreStarsProps {\n value: number | null;\n disabled: boolean;\n onScore: (value: number) => void;\n}\n\n/** Accessible 1–5 star rating control wired to `hokScoreApplication`. */\nconst ScoreStars: FC<ScoreStarsProps> = ({ value, disabled, onScore }) => (\n <div\n className=\"flex items-center gap-1\"\n role=\"group\"\n aria-label={value ? `Rating ${value} of 5` : 'Not yet rated'}\n >\n {[1, 2, 3, 4, 5].map((star) => {\n const active = value !== null && star <= value;\n return (\n <button\n key={star}\n type=\"button\"\n disabled={disabled}\n onClick={() => onScore(star)}\n aria-label={`Score ${star} of 5`}\n aria-pressed={value === star}\n title={`Score ${star} of 5`}\n className=\"rounded p-0.5 text-text-muted transition-colors hover:text-status-warning-text focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)] disabled:cursor-not-allowed disabled:opacity-60\"\n >\n <Star\n className={cn(\n 'h-5 w-5 transition-transform',\n active ? 'fill-status-warning-text text-status-warning-text' : 'fill-transparent'\n )}\n />\n </button>\n );\n })}\n </div>\n);\n\nexport const AuditionDetailPage: FC = () => {\n const { id } = useParams<{ id: string }>();\n const { navigateTo } = useHookMovies();\n const { data: audition, isLoading, isError, refetch } = useAuditionById(id);\n const applications = useAuditionApplications(id);\n const apply = useApplyToAudition();\n const score = useScoreApplication();\n const closeAudition = useCloseAudition();\n\n const [coverNote, setCoverNote] = useState('');\n const [selfTapeFileId, setSelfTapeFileId] = useState('');\n const [selfTapeName, setSelfTapeName] = useState('');\n const [uploading, setUploading] = useState(false);\n const [uploadError, setUploadError] = useState<string | null>(null);\n const [applyError, setApplyError] = useState<string | null>(null);\n const [applied, setApplied] = useState(false);\n const [scoreError, setScoreError] = useState<string | null>(null);\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n const applicationItems: HokApplication[] = useMemo(\n () => applications.data ?? [],\n [applications.data]\n );\n const ratedCount = useMemo(\n () => applicationItems.filter((appn) => appn.score !== null).length,\n [applicationItems]\n );\n\n if (isLoading) {\n return (\n <PageLayout title=\"Audition\">\n <LoadingState label=\"Loading audition…\" />\n </PageLayout>\n );\n }\n\n if (isError || !audition) {\n return (\n <PageLayout title=\"Audition\">\n <ErrorState title=\"Audition not found\" onRetry={() => void refetch()} />\n </PageLayout>\n );\n }\n\n const handleApply = async (e: FormEvent) => {\n e.preventDefault();\n setApplyError(null);\n try {\n await apply.mutateAsync({\n auditionId: audition.id,\n coverNote: coverNote.trim() || undefined,\n selfTapeFileId: selfTapeFileId.trim() || undefined,\n });\n setApplied(true);\n setCoverNote('');\n setSelfTapeFileId('');\n setSelfTapeName('');\n } catch (err) {\n setApplyError(err instanceof Error ? err.message : 'Failed to apply');\n }\n };\n\n const handleSelfTapeChange = async (e: ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n // Reset the input so re-selecting the same file re-triggers change.\n e.target.value = '';\n if (!file) return;\n setUploadError(null);\n setUploading(true);\n try {\n const uploaded = await uploadFileToFiles(file, FILE_FOLDERS.selfTapes);\n setSelfTapeFileId(uploaded.id);\n setSelfTapeName(uploaded.name || file.name);\n } catch (err) {\n setUploadError(err instanceof Error ? err.message : 'Failed to upload self-tape');\n } finally {\n setUploading(false);\n }\n };\n\n const clearSelfTape = () => {\n setSelfTapeFileId('');\n setSelfTapeName('');\n setUploadError(null);\n };\n\n const handleScore = async (applicationId: string, value: number) => {\n setScoreError(null);\n try {\n await score.mutateAsync({ id: applicationId, score: value });\n } catch (err) {\n setScoreError(err instanceof Error ? err.message : 'Failed to score');\n }\n };\n\n const isOpen = audition.status === 'OPEN';\n\n return (\n <PageLayout\n hero\n title={\n <span className=\"flex items-center gap-3\">\n <button\n type=\"button\"\n onClick={() => navigateTo('auditions')}\n className=\"rounded-md p-1 text-text-secondary transition-colors hover:bg-bg-sunken hover:text-text-primary focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]\"\n aria-label=\"Back to auditions\"\n >\n <ArrowLeft className=\"h-5 w-5\" />\n </button>\n {audition.roleName}\n </span>\n }\n description={audition.production?.title ?? 'Casting call'}\n actions={\n <div className=\"flex items-center gap-2\">\n <StatusBadge status={audition.status} />\n {isOpen && (\n <button\n type=\"button\"\n disabled={closeAudition.isPending}\n onClick={() => void closeAudition.mutateAsync(audition.id)}\n className=\"inline-flex items-center gap-1.5 rounded-lg border border-border-seam px-3 py-1.5 text-xs font-medium text-text-primary transition-colors hover:bg-bg-sunken disabled:opacity-50 focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]\"\n >\n <Lock className=\"h-3.5 w-3.5\" />\n Close\n </button>\n )}\n </div>\n }\n >\n <div className=\"grid grid-cols-1 gap-6 lg:grid-cols-3\">\n {/* ---- Applicants (casting view) — primary column ---- */}\n <div className=\"space-y-6 lg:col-span-2\">\n {audition.description && (\n <GlassCard treatment=\"metric\" className=\"border-border-seam p-5\">\n <h2 className=\"mb-2 text-sm font-semibold text-text-primary\">Role Description</h2>\n <p className=\"text-sm leading-relaxed text-text-secondary\">{audition.description}</p>\n </GlassCard>\n )}\n\n <GlassCard treatment=\"metric\" className=\"border-border-seam p-5\">\n <div className=\"mb-4 flex flex-wrap items-center justify-between gap-2\">\n <h2 className=\"flex items-center gap-2 text-sm font-semibold text-text-primary\">\n <Users className=\"h-4 w-4 text-text-secondary\" />\n Applicants\n <span className=\"rounded-full bg-bg-sunken px-2 py-0.5 text-xs font-medium text-text-secondary\">\n {applicationItems.length}\n </span>\n </h2>\n {applicationItems.length > 0 && (\n <span className=\"flex items-center gap-1.5 text-xs text-text-secondary\">\n <Star className=\"h-3.5 w-3.5 fill-status-warning-text text-status-warning-text\" />\n {ratedCount} of {applicationItems.length} rated\n </span>\n )}\n </div>\n\n {scoreError && (\n <div className=\"mb-3 rounded-lg border border-status-error-border bg-status-error-bg-subtle px-3 py-2 text-xs text-status-error-text\">\n {scoreError}\n </div>\n )}\n\n {applications.isLoading ? (\n <LoadingState label=\"Loading applicants…\" className=\"min-h-[160px]\" />\n ) : applicationItems.length === 0 ? (\n <div className=\"flex flex-col items-center justify-center gap-3 rounded-xl border border-dashed border-border-seam bg-bg-surface/60 px-4 py-12 text-center\">\n <div className=\"flex h-11 w-11 items-center justify-center rounded-full bg-bg-sunken\">\n <Users className=\"h-5 w-5 text-text-muted\" />\n </div>\n <p className=\"text-sm font-medium text-text-primary\">No applications yet</p>\n <p className=\"max-w-xs text-xs text-text-secondary\">\n Applicants who apply to this role will appear here for review and scoring.\n </p>\n </div>\n ) : (\n <ul className=\"grid grid-cols-1 gap-3 sm:grid-cols-2\">\n {applicationItems.map((appn) => {\n const highlighted = HIGHLIGHT_STATUSES.has(appn.status.toLowerCase());\n return (\n <li\n key={appn.id}\n className={cn(\n 'flex flex-col rounded-xl border bg-bg-surface p-4 transition-colors',\n highlighted\n ? 'border-status-info-border ring-1 ring-status-info-border'\n : 'border-border-seam hover:border-border-strong'\n )}\n >\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"flex min-w-0 items-center gap-3\">\n <span\n className=\"flex h-10 w-10 shrink-0 items-center justify-center rounded-full border border-border-seam bg-bg-sunken text-xs font-semibold text-text-secondary\"\n aria-hidden=\"true\"\n >\n {applicantInitials(appn.applicantId)}\n </span>\n <div className=\"min-w-0\">\n <p className=\"truncate text-sm font-semibold text-text-primary\">\n Applicant {appn.applicantId.slice(0, 8)}\n </p>\n <p className=\"text-xs text-text-secondary\">\n Applied {formatRelativeTime(appn.createdAt)}\n </p>\n </div>\n </div>\n <StatusBadge status={appn.status} className=\"shrink-0\" />\n </div>\n\n {appn.coverNote ? (\n <p className=\"mt-3 line-clamp-3 text-sm leading-relaxed text-text-secondary\">\n <span className=\"text-text-muted\">“</span>\n {appn.coverNote}\n <span className=\"text-text-muted\">”</span>\n </p>\n ) : (\n <p className=\"mt-3 text-sm italic text-text-muted\">\n No cover note provided.\n </p>\n )}\n\n <div className=\"mt-auto flex items-center justify-between gap-2 pt-4\">\n <ScoreStars\n value={appn.score}\n disabled={score.isPending}\n onScore={(value) => void handleScore(appn.id, value)}\n />\n <span className=\"text-xs font-medium text-text-secondary\">\n {appn.score !== null ? `${appn.score}/5` : 'Unrated'}\n </span>\n </div>\n </li>\n );\n })}\n </ul>\n )}\n </GlassCard>\n </div>\n\n {/* ---- Details + Apply — secondary column ---- */}\n <div className=\"space-y-6\">\n <GlassCard treatment=\"metric\" className=\"border-border-seam p-5\">\n <h2 className=\"mb-3 text-sm font-semibold text-text-primary\">Details</h2>\n <dl className=\"space-y-3 text-sm\">\n <div className=\"flex items-center justify-between gap-3\">\n <dt className=\"flex items-center gap-2 text-text-secondary\">\n <Coins className=\"h-3.5 w-3.5\" />\n Pay\n </dt>\n <dd className=\"text-right font-medium text-text-primary\">\n {formatMinorUnits(audition.payMinorUnits, audition.currency)}\n </dd>\n </div>\n {audition.location && (\n <div className=\"flex items-center justify-between gap-3\">\n <dt className=\"flex items-center gap-2 text-text-secondary\">\n <MapPin className=\"h-3.5 w-3.5\" />\n Location\n </dt>\n <dd className=\"text-right font-medium text-text-primary\">{audition.location}</dd>\n </div>\n )}\n {audition.language && (\n <div className=\"flex items-center justify-between gap-3\">\n <dt className=\"flex items-center gap-2 text-text-secondary\">\n <Languages className=\"h-3.5 w-3.5\" />\n Language\n </dt>\n <dd className=\"text-right font-medium text-text-primary\">{audition.language}</dd>\n </div>\n )}\n {audition.submissionDeadline && (\n <div className=\"flex items-center justify-between gap-3\">\n <dt className=\"flex items-center gap-2 text-text-secondary\">\n <Clock className=\"h-3.5 w-3.5\" />\n Deadline\n </dt>\n <dd className=\"text-right font-medium text-text-primary\">\n {formatDate(audition.submissionDeadline, {\n hour: undefined,\n minute: undefined,\n })}\n </dd>\n </div>\n )}\n </dl>\n {audition.isMinorRole && (\n <div className=\"mt-4 flex items-start gap-2 rounded-lg border border-status-warning-border bg-status-warning-bg-subtle px-3 py-2 text-xs text-status-warning-text\">\n <ShieldAlert className=\"mt-0.5 h-4 w-4 shrink-0\" />\n <span>\n This is a minor role. Guardian consent and restricted communications apply.\n </span>\n </div>\n )}\n </GlassCard>\n\n {/* Apply (talent view) */}\n <GlassCard treatment=\"glass\" className=\"border-border-seam p-5\">\n <h2 className=\"mb-3 flex items-center gap-2 text-sm font-semibold text-text-primary\">\n <Send className=\"h-4 w-4 text-text-secondary\" />\n Apply for this role\n </h2>\n {applied ? (\n <div className=\"rounded-lg border border-status-success-border bg-status-success-bg-subtle px-3 py-2.5 text-sm text-status-success-text\">\n Your application has been submitted.\n </div>\n ) : !isOpen ? (\n <p className=\"rounded-lg bg-bg-sunken px-3 py-2.5 text-sm text-text-secondary\">\n This audition is no longer open for applications.\n </p>\n ) : (\n <form onSubmit={handleApply} className=\"space-y-3\">\n {applyError && (\n <div className=\"rounded-lg border border-status-error-border bg-status-error-bg-subtle px-3 py-2 text-xs text-status-error-text\">\n {applyError}\n </div>\n )}\n <div className=\"space-y-1.5\">\n <label\n htmlFor=\"cover-note\"\n className=\"block text-xs font-medium text-text-secondary\"\n >\n Cover note\n </label>\n <textarea\n id=\"cover-note\"\n value={coverNote}\n onChange={(e) => setCoverNote(e.target.value)}\n rows={3}\n placeholder=\"Why you're right for this role\"\n className={fieldClass}\n />\n </div>\n <div className=\"space-y-1.5\">\n <label\n htmlFor=\"self-tape-upload\"\n className=\"block text-xs font-medium text-text-secondary\"\n >\n Self-tape (optional)\n </label>\n <input\n ref={fileInputRef}\n id=\"self-tape-upload\"\n type=\"file\"\n accept=\"video/*\"\n onChange={(e) => void handleSelfTapeChange(e)}\n disabled={uploading}\n className=\"sr-only\"\n aria-label=\"Upload self-tape video\"\n />\n {selfTapeFileId ? (\n <div className=\"flex items-center justify-between gap-2 rounded-lg border border-border-seam bg-bg-surface px-3 py-2\">\n <span className=\"flex min-w-0 items-center gap-2 text-sm text-text-primary\">\n <Film className=\"h-4 w-4 shrink-0 text-status-success-text\" />\n <span className=\"truncate\">{selfTapeName || 'Self-tape uploaded'}</span>\n </span>\n <button\n type=\"button\"\n onClick={clearSelfTape}\n className=\"rounded-md p-1 text-text-secondary transition-colors hover:text-text-primary focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]\"\n aria-label=\"Remove self-tape\"\n >\n <X className=\"h-4 w-4\" />\n </button>\n </div>\n ) : (\n <button\n type=\"button\"\n onClick={() => fileInputRef.current?.click()}\n disabled={uploading}\n className=\"inline-flex w-full items-center justify-center gap-2 rounded-lg border border-dashed border-border-subtle bg-bg-surface px-3 py-3 text-sm text-text-secondary transition-colors hover:border-border-seam hover:text-text-primary disabled:opacity-50 focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]\"\n >\n {uploading ? (\n <>\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n Uploading…\n </>\n ) : (\n <>\n <Upload className=\"h-4 w-4\" />\n Upload self-tape video\n </>\n )}\n </button>\n )}\n {uploadError && (\n <p className=\"rounded-lg border border-status-error-border bg-status-error-bg-subtle px-3 py-2 text-xs text-status-error-text\">\n {uploadError}\n </p>\n )}\n </div>\n <button\n type=\"submit\"\n disabled={apply.isPending || uploading}\n className=\"inline-flex w-full items-center justify-center gap-2 rounded-lg bg-action-primary-bg px-4 py-2.5 text-sm font-medium text-action-primary-text transition-opacity hover:opacity-90 disabled:opacity-50 focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]\"\n >\n <Send className=\"h-4 w-4\" />\n {apply.isPending ? 'Submitting…' : 'Submit Application'}\n </button>\n </form>\n )}\n </GlassCard>\n </div>\n </div>\n </PageLayout>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"AuditionDetailPage.js","names":[],"sources":["../../../../src/hookmovies/pages/auditions/AuditionDetailPage.tsx"],"sourcesContent":["/**\n * Audition detail (Casting marketplace)\n * @module hookmovies/pages/auditions\n *\n * Two-sided surface:\n * - Talent can apply via `hokApplyToAudition` (self-scoped).\n * - Casting teams screen applicants from `hokListApplications`, score them via\n * `hokScoreApplication`, and close the call with `hokCloseAudition`.\n */\n\nimport { type ChangeEvent, type FC, type FormEvent, useMemo, useRef, useState } from 'react';\nimport { useParams } from 'react-router';\nimport {\n ArrowLeft,\n MapPin,\n Languages,\n Clock,\n Coins,\n Send,\n Lock,\n Users,\n Upload,\n Film,\n Loader2,\n Star,\n ShieldAlert,\n X,\n} from 'lucide-react';\nimport { GlassCard } from '@burdenoff/fe-libs/ui';\nimport { PageLayout } from '../../components/PageLayout';\nimport { StatusBadge } from '../../components/StatusBadge';\nimport { LoadingState, ErrorState } from '../../components/StateViews';\nimport { useHookMovies } from '../../context/HookMoviesContext';\nimport {\n type HokApplication,\n useAuditionById,\n useAuditionApplications,\n useApplyToAudition,\n useScoreApplication,\n useCloseAudition,\n} from '../../hooks/useHookMoviesApi';\nimport { uploadFileToFiles, FILE_FOLDERS } from '../../hooks/useFiles';\nimport { useAuditionCallbacks, useAuditionOffers } from '../../hooks/useCastingApi';\nimport { ApplicationCastingActions } from '../../components/ApplicationCastingActions';\nimport { formatDate, formatMinorUnits, formatRelativeTime } from '../../utils/formatters';\nimport { cn } from '../../utils/cn';\n\nconst fieldClass =\n 'w-full rounded-lg border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]';\n\n/** Short, deterministic label for an anonymised applicant avatar. */\nfunction applicantInitials(applicantId: string): string {\n const cleaned = applicantId.replace(/[^a-zA-Z0-9]/g, '');\n return (cleaned.slice(0, 2) || '?').toUpperCase();\n}\n\n/** Statuses that represent a positive casting outcome — highlighted in the list. */\nconst HIGHLIGHT_STATUSES = new Set(['shortlisted', 'callback', 'offered']);\n\ninterface ScoreStarsProps {\n value: number | null;\n disabled: boolean;\n onScore: (value: number) => void;\n}\n\n/** Accessible 1–5 star rating control wired to `hokScoreApplication`. */\nconst ScoreStars: FC<ScoreStarsProps> = ({ value, disabled, onScore }) => (\n <div\n className=\"flex items-center gap-1\"\n role=\"group\"\n aria-label={value ? `Rating ${value} of 5` : 'Not yet rated'}\n >\n {[1, 2, 3, 4, 5].map((star) => {\n const active = value !== null && star <= value;\n return (\n <button\n key={star}\n type=\"button\"\n disabled={disabled}\n onClick={() => onScore(star)}\n aria-label={`Score ${star} of 5`}\n aria-pressed={value === star}\n title={`Score ${star} of 5`}\n className=\"rounded p-0.5 text-text-muted transition-colors hover:text-status-warning-text focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)] disabled:cursor-not-allowed disabled:opacity-60\"\n >\n <Star\n className={cn(\n 'h-5 w-5 transition-transform',\n active ? 'fill-status-warning-text text-status-warning-text' : 'fill-transparent'\n )}\n />\n </button>\n );\n })}\n </div>\n);\n\nexport const AuditionDetailPage: FC = () => {\n const { id } = useParams<{ id: string }>();\n const { navigateTo } = useHookMovies();\n const { data: audition, isLoading, isError, refetch } = useAuditionById(id);\n const applications = useAuditionApplications(id);\n const apply = useApplyToAudition();\n const score = useScoreApplication();\n const closeAudition = useCloseAudition();\n const castingCallbacks = useAuditionCallbacks(id);\n const castingOffers = useAuditionOffers(id);\n\n const [coverNote, setCoverNote] = useState('');\n const [guardianActorId, setGuardianActorId] = useState('');\n const [guardianRelationship, setGuardianRelationship] = useState('parent');\n const [selfTapeFileId, setSelfTapeFileId] = useState('');\n const [selfTapeName, setSelfTapeName] = useState('');\n const [uploading, setUploading] = useState(false);\n const [uploadError, setUploadError] = useState<string | null>(null);\n const [applyError, setApplyError] = useState<string | null>(null);\n const [applied, setApplied] = useState(false);\n const [scoreError, setScoreError] = useState<string | null>(null);\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n const applicationItems: HokApplication[] = useMemo(\n () => applications.data ?? [],\n [applications.data]\n );\n const ratedCount = useMemo(\n () => applicationItems.filter((appn) => appn.score !== null).length,\n [applicationItems]\n );\n\n if (isLoading) {\n return (\n <PageLayout title=\"Audition\">\n <LoadingState label=\"Loading audition…\" />\n </PageLayout>\n );\n }\n\n if (isError || !audition) {\n return (\n <PageLayout title=\"Audition\">\n <ErrorState title=\"Audition not found\" onRetry={() => void refetch()} />\n </PageLayout>\n );\n }\n\n const handleApply = async (e: FormEvent) => {\n e.preventDefault();\n setApplyError(null);\n try {\n await apply.mutateAsync({\n auditionId: audition.id,\n coverNote: coverNote.trim() || undefined,\n selfTapeFileId: selfTapeFileId.trim() || undefined,\n guardianActorId: audition.isMinorRole ? guardianActorId.trim() || undefined : undefined,\n guardianRelationship: audition.isMinorRole\n ? guardianRelationship.trim() || undefined\n : undefined,\n });\n setApplied(true);\n setCoverNote('');\n setSelfTapeFileId('');\n setSelfTapeName('');\n } catch (err) {\n setApplyError(err instanceof Error ? err.message : 'Failed to apply');\n }\n };\n\n const handleSelfTapeChange = async (e: ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n // Reset the input so re-selecting the same file re-triggers change.\n e.target.value = '';\n if (!file) return;\n setUploadError(null);\n setUploading(true);\n try {\n const uploaded = await uploadFileToFiles(file, FILE_FOLDERS.selfTapes);\n setSelfTapeFileId(uploaded.id);\n setSelfTapeName(uploaded.name || file.name);\n } catch (err) {\n setUploadError(err instanceof Error ? err.message : 'Failed to upload self-tape');\n } finally {\n setUploading(false);\n }\n };\n\n const clearSelfTape = () => {\n setSelfTapeFileId('');\n setSelfTapeName('');\n setUploadError(null);\n };\n\n const handleScore = async (applicationId: string, value: number) => {\n setScoreError(null);\n try {\n await score.mutateAsync({ id: applicationId, score: value });\n } catch (err) {\n setScoreError(err instanceof Error ? err.message : 'Failed to score');\n }\n };\n\n const isOpen = audition.status === 'OPEN';\n\n return (\n <PageLayout\n hero\n title={\n <span className=\"flex items-center gap-3\">\n <button\n type=\"button\"\n onClick={() => navigateTo('auditions')}\n className=\"rounded-md p-1 text-text-secondary transition-colors hover:bg-bg-sunken hover:text-text-primary focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]\"\n aria-label=\"Back to auditions\"\n >\n <ArrowLeft className=\"h-5 w-5\" />\n </button>\n {audition.roleName}\n </span>\n }\n description={audition.production?.title ?? 'Casting call'}\n actions={\n <div className=\"flex items-center gap-2\">\n <StatusBadge status={audition.status} />\n {isOpen && (\n <button\n type=\"button\"\n disabled={closeAudition.isPending}\n onClick={() => void closeAudition.mutateAsync(audition.id)}\n className=\"inline-flex items-center gap-1.5 rounded-lg border border-border-seam px-3 py-1.5 text-xs font-medium text-text-primary transition-colors hover:bg-bg-sunken disabled:opacity-50 focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]\"\n >\n <Lock className=\"h-3.5 w-3.5\" />\n Close\n </button>\n )}\n </div>\n }\n >\n <div className=\"grid grid-cols-1 gap-6 lg:grid-cols-3\">\n {/* ---- Applicants (casting view) — primary column ---- */}\n <div className=\"space-y-6 lg:col-span-2\">\n {audition.description && (\n <GlassCard treatment=\"metric\" className=\"border-border-seam p-5\">\n <h2 className=\"mb-2 text-sm font-semibold text-text-primary\">Role Description</h2>\n <p className=\"text-sm leading-relaxed text-text-secondary\">{audition.description}</p>\n </GlassCard>\n )}\n\n <GlassCard treatment=\"metric\" className=\"border-border-seam p-5\">\n <div className=\"mb-4 flex flex-wrap items-center justify-between gap-2\">\n <h2 className=\"flex items-center gap-2 text-sm font-semibold text-text-primary\">\n <Users className=\"h-4 w-4 text-text-secondary\" />\n Applicants\n <span className=\"rounded-full bg-bg-sunken px-2 py-0.5 text-xs font-medium text-text-secondary\">\n {applicationItems.length}\n </span>\n </h2>\n {applicationItems.length > 0 && (\n <span className=\"flex items-center gap-1.5 text-xs text-text-secondary\">\n <Star className=\"h-3.5 w-3.5 fill-status-warning-text text-status-warning-text\" />\n {ratedCount} of {applicationItems.length} rated\n </span>\n )}\n </div>\n\n {scoreError && (\n <div className=\"mb-3 rounded-lg border border-status-error-border bg-status-error-bg-subtle px-3 py-2 text-xs text-status-error-text\">\n {scoreError}\n </div>\n )}\n\n {applications.isLoading ? (\n <LoadingState label=\"Loading applicants…\" className=\"min-h-[160px]\" />\n ) : applicationItems.length === 0 ? (\n <div className=\"flex flex-col items-center justify-center gap-3 rounded-xl border border-dashed border-border-seam bg-bg-surface/60 px-4 py-12 text-center\">\n <div className=\"flex h-11 w-11 items-center justify-center rounded-full bg-bg-sunken\">\n <Users className=\"h-5 w-5 text-text-muted\" />\n </div>\n <p className=\"text-sm font-medium text-text-primary\">No applications yet</p>\n <p className=\"max-w-xs text-xs text-text-secondary\">\n Applicants who apply to this role will appear here for review and scoring.\n </p>\n </div>\n ) : (\n <ul className=\"grid grid-cols-1 gap-3 sm:grid-cols-2\">\n {applicationItems.map((appn) => {\n const highlighted = HIGHLIGHT_STATUSES.has(appn.status.toLowerCase());\n return (\n <li\n key={appn.id}\n className={cn(\n 'flex flex-col rounded-xl border bg-bg-surface p-4 transition-colors',\n highlighted\n ? 'border-status-info-border ring-1 ring-status-info-border'\n : 'border-border-seam hover:border-border-strong'\n )}\n >\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"flex min-w-0 items-center gap-3\">\n <span\n className=\"flex h-10 w-10 shrink-0 items-center justify-center rounded-full border border-border-seam bg-bg-sunken text-xs font-semibold text-text-secondary\"\n aria-hidden=\"true\"\n >\n {applicantInitials(appn.applicantId)}\n </span>\n <div className=\"min-w-0\">\n <p className=\"truncate text-sm font-semibold text-text-primary\">\n Applicant {appn.applicantId.slice(0, 8)}\n </p>\n <p className=\"text-xs text-text-secondary\">\n Applied {formatRelativeTime(appn.createdAt)}\n </p>\n </div>\n </div>\n <StatusBadge status={appn.status} className=\"shrink-0\" />\n </div>\n\n {appn.coverNote ? (\n <p className=\"mt-3 line-clamp-3 text-sm leading-relaxed text-text-secondary\">\n <span className=\"text-text-muted\">“</span>\n {appn.coverNote}\n <span className=\"text-text-muted\">”</span>\n </p>\n ) : (\n <p className=\"mt-3 text-sm italic text-text-muted\">\n No cover note provided.\n </p>\n )}\n\n <div className=\"mt-auto flex items-center justify-between gap-2 pt-4\">\n <ScoreStars\n value={appn.score}\n disabled={score.isPending}\n onScore={(value) => void handleScore(appn.id, value)}\n />\n <span className=\"text-xs font-medium text-text-secondary\">\n {appn.score !== null ? `${appn.score}/5` : 'Unrated'}\n </span>\n </div>\n\n <ApplicationCastingActions\n applicationId={appn.id}\n applicantId={appn.applicantId}\n applicationStatus={appn.status}\n defaultPayMinorUnits={audition.payMinorUnits}\n defaultCurrency={audition.currency}\n callbacks={(castingCallbacks.data ?? []).filter(\n (c) => c.applicationId === appn.id\n )}\n offers={(castingOffers.data ?? []).filter(\n (o) => o.applicationId === appn.id\n )}\n />\n </li>\n );\n })}\n </ul>\n )}\n </GlassCard>\n </div>\n\n {/* ---- Details + Apply — secondary column ---- */}\n <div className=\"space-y-6\">\n <GlassCard treatment=\"metric\" className=\"border-border-seam p-5\">\n <h2 className=\"mb-3 text-sm font-semibold text-text-primary\">Details</h2>\n <dl className=\"space-y-3 text-sm\">\n <div className=\"flex items-center justify-between gap-3\">\n <dt className=\"flex items-center gap-2 text-text-secondary\">\n <Coins className=\"h-3.5 w-3.5\" />\n Pay\n </dt>\n <dd className=\"text-right font-medium text-text-primary\">\n {formatMinorUnits(audition.payMinorUnits, audition.currency)}\n </dd>\n </div>\n {audition.location && (\n <div className=\"flex items-center justify-between gap-3\">\n <dt className=\"flex items-center gap-2 text-text-secondary\">\n <MapPin className=\"h-3.5 w-3.5\" />\n Location\n </dt>\n <dd className=\"text-right font-medium text-text-primary\">{audition.location}</dd>\n </div>\n )}\n {audition.language && (\n <div className=\"flex items-center justify-between gap-3\">\n <dt className=\"flex items-center gap-2 text-text-secondary\">\n <Languages className=\"h-3.5 w-3.5\" />\n Language\n </dt>\n <dd className=\"text-right font-medium text-text-primary\">{audition.language}</dd>\n </div>\n )}\n {audition.submissionDeadline && (\n <div className=\"flex items-center justify-between gap-3\">\n <dt className=\"flex items-center gap-2 text-text-secondary\">\n <Clock className=\"h-3.5 w-3.5\" />\n Deadline\n </dt>\n <dd className=\"text-right font-medium text-text-primary\">\n {formatDate(audition.submissionDeadline, {\n hour: undefined,\n minute: undefined,\n })}\n </dd>\n </div>\n )}\n </dl>\n {audition.isMinorRole && (\n <div className=\"mt-4 flex items-start gap-2 rounded-lg border border-status-warning-border bg-status-warning-bg-subtle px-3 py-2 text-xs text-status-warning-text\">\n <ShieldAlert className=\"mt-0.5 h-4 w-4 shrink-0\" />\n <span>\n This is a minor role. Guardian consent and restricted communications apply.\n </span>\n </div>\n )}\n </GlassCard>\n\n {/* Apply (talent view) */}\n <GlassCard treatment=\"glass\" className=\"border-border-seam p-5\">\n <h2 className=\"mb-3 flex items-center gap-2 text-sm font-semibold text-text-primary\">\n <Send className=\"h-4 w-4 text-text-secondary\" />\n Apply for this role\n </h2>\n {applied ? (\n <div className=\"rounded-lg border border-status-success-border bg-status-success-bg-subtle px-3 py-2.5 text-sm text-status-success-text\">\n Your application has been submitted.\n </div>\n ) : !isOpen ? (\n <p className=\"rounded-lg bg-bg-sunken px-3 py-2.5 text-sm text-text-secondary\">\n This audition is no longer open for applications.\n </p>\n ) : (\n <form onSubmit={handleApply} className=\"space-y-3\">\n {applyError && (\n <div className=\"rounded-lg border border-status-error-border bg-status-error-bg-subtle px-3 py-2 text-xs text-status-error-text\">\n {applyError}\n </div>\n )}\n <div className=\"space-y-1.5\">\n <label\n htmlFor=\"cover-note\"\n className=\"block text-xs font-medium text-text-secondary\"\n >\n Cover note\n </label>\n <textarea\n id=\"cover-note\"\n value={coverNote}\n onChange={(e) => setCoverNote(e.target.value)}\n rows={3}\n placeholder=\"Why you're right for this role\"\n className={fieldClass}\n />\n </div>\n {audition.isMinorRole && (\n <div className=\"space-y-2 rounded-lg border border-status-warning-border bg-status-warning-bg-subtle p-3\">\n <p className=\"text-xs text-status-warning-text\">\n Minor role: a parent or legal guardian with a verified adult identity on\n HookMovies must consent. Enter their HookMovies account ID; they confirm\n callbacks and sign any offer.\n </p>\n <div className=\"space-y-1.5\">\n <label\n htmlFor=\"guardian-actor-id\"\n className=\"block text-xs font-medium text-text-secondary\"\n >\n Guardian account ID *\n </label>\n <input\n id=\"guardian-actor-id\"\n value={guardianActorId}\n onChange={(e) => setGuardianActorId(e.target.value)}\n required\n className={fieldClass}\n />\n </div>\n <div className=\"space-y-1.5\">\n <label\n htmlFor=\"guardian-relationship\"\n className=\"block text-xs font-medium text-text-secondary\"\n >\n Relationship *\n </label>\n <select\n id=\"guardian-relationship\"\n value={guardianRelationship}\n onChange={(e) => setGuardianRelationship(e.target.value)}\n className={fieldClass}\n >\n <option value=\"parent\">Parent</option>\n <option value=\"legal_guardian\">Legal guardian</option>\n </select>\n </div>\n </div>\n )}\n <div className=\"space-y-1.5\">\n <label\n htmlFor=\"self-tape-upload\"\n className=\"block text-xs font-medium text-text-secondary\"\n >\n Self-tape (optional)\n </label>\n <input\n ref={fileInputRef}\n id=\"self-tape-upload\"\n type=\"file\"\n accept=\"video/*\"\n onChange={(e) => void handleSelfTapeChange(e)}\n disabled={uploading}\n className=\"sr-only\"\n aria-label=\"Upload self-tape video\"\n />\n {selfTapeFileId ? (\n <div className=\"flex items-center justify-between gap-2 rounded-lg border border-border-seam bg-bg-surface px-3 py-2\">\n <span className=\"flex min-w-0 items-center gap-2 text-sm text-text-primary\">\n <Film className=\"h-4 w-4 shrink-0 text-status-success-text\" />\n <span className=\"truncate\">{selfTapeName || 'Self-tape uploaded'}</span>\n </span>\n <button\n type=\"button\"\n onClick={clearSelfTape}\n className=\"rounded-md p-1 text-text-secondary transition-colors hover:text-text-primary focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]\"\n aria-label=\"Remove self-tape\"\n >\n <X className=\"h-4 w-4\" />\n </button>\n </div>\n ) : (\n <button\n type=\"button\"\n onClick={() => fileInputRef.current?.click()}\n disabled={uploading}\n className=\"inline-flex w-full items-center justify-center gap-2 rounded-lg border border-dashed border-border-subtle bg-bg-surface px-3 py-3 text-sm text-text-secondary transition-colors hover:border-border-seam hover:text-text-primary disabled:opacity-50 focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]\"\n >\n {uploading ? (\n <>\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n Uploading…\n </>\n ) : (\n <>\n <Upload className=\"h-4 w-4\" />\n Upload self-tape video\n </>\n )}\n </button>\n )}\n {uploadError && (\n <p className=\"rounded-lg border border-status-error-border bg-status-error-bg-subtle px-3 py-2 text-xs text-status-error-text\">\n {uploadError}\n </p>\n )}\n </div>\n <button\n type=\"submit\"\n disabled={apply.isPending || uploading}\n className=\"inline-flex w-full items-center justify-center gap-2 rounded-lg bg-action-primary-bg px-4 py-2.5 text-sm font-medium text-action-primary-text transition-opacity hover:opacity-90 disabled:opacity-50 focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]\"\n >\n <Send className=\"h-4 w-4\" />\n {apply.isPending ? 'Submitting…' : 'Submit Application'}\n </button>\n </form>\n )}\n </GlassCard>\n </div>\n </div>\n </PageLayout>\n );\n};\n"],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { FC } from 'react';
2
+
3
+ export declare const MyCastingPage: FC;
4
+ //# sourceMappingURL=MyCastingPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MyCastingPage.d.ts","sourceRoot":"","sources":["../../../../src/hookmovies/pages/casting/MyCastingPage.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,KAAK,EAAE,EAA4B,MAAM,OAAO,CAAC;AAohB1D,eAAO,MAAM,aAAa,EAAE,EAuI3B,CAAC"}