2026-01-07 09:31:02 +00:00
|
|
|
import React, { useState } from 'react';
|
|
|
|
|
import { Card } from '../ui/card';
|
|
|
|
|
import { Button } from '../ui/button';
|
|
|
|
|
import { Input, FileUpload } from '../ui/input';
|
2026-01-13 18:47:57 +00:00
|
|
|
import {
|
|
|
|
|
X,
|
|
|
|
|
Music,
|
|
|
|
|
Package,
|
|
|
|
|
BookOpen,
|
|
|
|
|
CheckCircle,
|
|
|
|
|
Tag,
|
|
|
|
|
Lock,
|
|
|
|
|
DollarSign,
|
|
|
|
|
} from 'lucide-react';
|
2026-01-07 09:31:02 +00:00
|
|
|
|
|
|
|
|
interface CreatorModalProps {
|
|
|
|
|
isOpen: boolean;
|
|
|
|
|
onClose: () => void;
|
|
|
|
|
}
|
|
|
|
|
|
2026-01-13 18:47:57 +00:00
|
|
|
export const CreatorModal: React.FC<CreatorModalProps> = ({
|
|
|
|
|
isOpen,
|
|
|
|
|
onClose,
|
|
|
|
|
}) => {
|
|
|
|
|
const [activeTab, setActiveTab] = useState<'track' | 'product' | 'course'>(
|
|
|
|
|
'track',
|
|
|
|
|
);
|
2026-01-07 09:31:02 +00:00
|
|
|
const [step, setStep] = useState(1);
|
|
|
|
|
|
|
|
|
|
if (!isOpen) return null;
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<div className="fixed inset-0 z-[100] flex items-center justify-center p-4">
|
2026-01-13 18:47:57 +00:00
|
|
|
<div
|
|
|
|
|
className="absolute inset-0 bg-kodo-void/90 backdrop-blur-sm"
|
|
|
|
|
onClick={onClose}
|
|
|
|
|
></div>
|
|
|
|
|
<div className="relative w-full max-w-4xl bg-kodo-graphite border border-kodo-steel rounded-2xl shadow-2xl animate-scaleIn overflow-hidden flex flex-col max-h-[90vh]">
|
|
|
|
|
{/* Header */}
|
aesthetic-improvements: fix spacing in components batch 2 (Action 11.5.1.6)
- Modals: CreatorModal (p-6 → p-8, space-y-6 → space-y-8)
- Seller: CreateProductView (space-y-6 → space-y-8, 2 instances)
- Social: ExploreView, GroupCard (space-y-6 → space-y-8, p-6 → p-8)
- Studio: ProjectsManager, CloudFileBrowser (space-y-6 → space-y-8, gap-6 → gap-8)
- Theme: ThemeSwitcher (space-y-6 → space-y-8, p-6 → p-8)
- Settings: AppearanceSettingsView (p-6 → p-8, space-y-6 → space-y-8)
- Library: PlaylistsView (space-y-6 → space-y-8)
- Upload: TagSuggestionsModal, LyricsEditorModal, BulkUploadModal (p-6 → p-8, space-y-6 → space-y-8)
- UI: modal, dialog, ImageCropper (p-6 → p-8)
- All spacing now aligned to 8px grid (32px standard padding)
- Action 11.5.1.6: Apply direction to all components - Batch 2 complete (spacing fixes)
2026-01-16 11:06:56 +00:00
|
|
|
<div className="flex justify-between items-center p-8 border-b border-kodo-steel bg-kodo-ink">
|
2026-01-13 18:47:57 +00:00
|
|
|
<div className="flex items-center gap-4">
|
|
|
|
|
<h2 className="text-2xl font-display font-bold text-white">
|
|
|
|
|
CREATOR STUDIO
|
|
|
|
|
</h2>
|
|
|
|
|
<div className="flex bg-kodo-slate rounded-lg p-1">
|
|
|
|
|
<button
|
|
|
|
|
onClick={() => setActiveTab('track')}
|
2026-01-16 00:59:31 +00:00
|
|
|
className={`px-4 py-1.5 rounded text-sm font-bold transition-all flex items-center gap-2 ${activeTab === 'track' ? 'bg-kodo-cyan text-black' : 'text-kodo-content-dim hover:text-white'}`}
|
2026-01-13 18:47:57 +00:00
|
|
|
>
|
|
|
|
|
<Music className="w-4 h-4" /> Track
|
|
|
|
|
</button>
|
|
|
|
|
<button
|
|
|
|
|
onClick={() => setActiveTab('product')}
|
2026-01-16 00:59:31 +00:00
|
|
|
className={`px-4 py-1.5 rounded text-sm font-bold transition-all flex items-center gap-2 ${activeTab === 'product' ? 'bg-kodo-magenta text-white' : 'text-kodo-content-dim hover:text-white'}`}
|
2026-01-13 18:47:57 +00:00
|
|
|
>
|
|
|
|
|
<Package className="w-4 h-4" /> Product
|
|
|
|
|
</button>
|
|
|
|
|
<button
|
|
|
|
|
onClick={() => setActiveTab('course')}
|
2026-01-16 00:59:31 +00:00
|
|
|
className={`px-4 py-1.5 rounded text-sm font-bold transition-all flex items-center gap-2 ${activeTab === 'course' ? 'bg-kodo-gold text-black' : 'text-kodo-content-dim hover:text-white'}`}
|
2026-01-13 18:47:57 +00:00
|
|
|
>
|
|
|
|
|
<BookOpen className="w-4 h-4" /> Course
|
|
|
|
|
</button>
|
|
|
|
|
</div>
|
2026-01-07 09:31:02 +00:00
|
|
|
</div>
|
consistency: replace custom buttons with Button component (partial)
- Replaced custom button implementations with Button component in 14 files
- Files updated: LiveStreamDetailView, DashboardPage, CommentItem, PostCard, SocialPage, SocialView, AdminUsersView, UserTableRow, ProjectsManager, CloudFileBrowser, FileManagerView, CreatorModal, ImageCropper, BulkUploadModal
- ~31 buttons replaced across high-priority files
- Used appropriate Button variants: ghost, outline, default, secondary, link
- Preserved visual appearance with className overrides where needed
- Action 9.2.1.2 in progress (partial completion)
2026-01-16 01:06:14 +00:00
|
|
|
<Button variant="ghost" size="icon" onClick={onClose}>
|
2026-01-13 18:47:57 +00:00
|
|
|
<X className="w-6 h-6" />
|
consistency: replace custom buttons with Button component (partial)
- Replaced custom button implementations with Button component in 14 files
- Files updated: LiveStreamDetailView, DashboardPage, CommentItem, PostCard, SocialPage, SocialView, AdminUsersView, UserTableRow, ProjectsManager, CloudFileBrowser, FileManagerView, CreatorModal, ImageCropper, BulkUploadModal
- ~31 buttons replaced across high-priority files
- Used appropriate Button variants: ghost, outline, default, secondary, link
- Preserved visual appearance with className overrides where needed
- Action 9.2.1.2 in progress (partial completion)
2026-01-16 01:06:14 +00:00
|
|
|
</Button>
|
2026-01-13 18:47:57 +00:00
|
|
|
</div>
|
2026-01-07 09:31:02 +00:00
|
|
|
|
2026-01-13 18:47:57 +00:00
|
|
|
{/* Content */}
|
|
|
|
|
<div className="p-8 flex-1 overflow-y-auto">
|
|
|
|
|
{/* Progress Stepper */}
|
|
|
|
|
<div className="flex justify-between max-w-lg mx-auto mb-10 relative">
|
|
|
|
|
<div className="absolute top-1/2 left-0 w-full h-1 bg-kodo-steel -z-10"></div>
|
|
|
|
|
{[1, 2, 3].map((i) => (
|
|
|
|
|
<div
|
|
|
|
|
key={i}
|
2026-01-16 00:59:31 +00:00
|
|
|
className={`w-8 h-8 rounded-full flex items-center justify-center font-bold text-sm transition-colors ${step >= i ? 'bg-kodo-cyan text-black' : 'bg-kodo-slate text-kodo-content-dim'}`}
|
2026-01-13 18:47:57 +00:00
|
|
|
>
|
|
|
|
|
{step > i ? <CheckCircle className="w-5 h-5" /> : i}
|
|
|
|
|
</div>
|
|
|
|
|
))}
|
|
|
|
|
</div>
|
2026-01-07 09:31:02 +00:00
|
|
|
|
2026-01-13 18:47:57 +00:00
|
|
|
{activeTab === 'track' && (
|
|
|
|
|
<div className="grid grid-cols-1 md:grid-cols-2 gap-8">
|
|
|
|
|
<div className="space-y-6">
|
|
|
|
|
<FileUpload />
|
|
|
|
|
<div className="bg-kodo-slate p-4 rounded-lg border border-kodo-steel">
|
2026-01-16 00:59:31 +00:00
|
|
|
<h4 className="font-bold text-kodo-content-dim text-sm mb-2 uppercase">
|
2026-01-13 18:47:57 +00:00
|
|
|
File Requirements
|
|
|
|
|
</h4>
|
2026-01-16 00:59:31 +00:00
|
|
|
<ul className="text-xs text-kodo-content-dim space-y-1">
|
2026-01-13 18:47:57 +00:00
|
|
|
<li>• WAV, FLAC, AIFF (Lossless preferred)</li>
|
|
|
|
|
<li>• Max size 500MB</li>
|
|
|
|
|
<li>• 44.1kHz / 24-bit minimum</li>
|
|
|
|
|
</ul>
|
2026-01-07 09:31:02 +00:00
|
|
|
</div>
|
2026-01-13 18:47:57 +00:00
|
|
|
</div>
|
|
|
|
|
<div className="space-y-4">
|
|
|
|
|
<Input label="Track Title" placeholder="e.g. Neon Nights" />
|
|
|
|
|
<div className="grid grid-cols-2 gap-4">
|
|
|
|
|
<Input label="BPM" placeholder="128" />
|
|
|
|
|
<Input label="Key" placeholder="F# Minor" />
|
2026-01-07 09:31:02 +00:00
|
|
|
</div>
|
2026-01-13 18:47:57 +00:00
|
|
|
<Input label="Genre" placeholder="Cyberpunk / Synthwave" />
|
|
|
|
|
<div className="pt-4">
|
2026-01-16 00:59:31 +00:00
|
|
|
<label className="block text-sm font-medium text-kodo-content-dim mb-2 font-body">
|
2026-01-13 18:47:57 +00:00
|
|
|
Visibility
|
|
|
|
|
</label>
|
|
|
|
|
<div className="grid grid-cols-3 gap-2">
|
aesthetic-improvements: align spacing to 8px grid (Action 11.2.1.3)
- Created automated script (scripts/align-8px-grid.py) to align all spacing to 8px grid
- Replaced non-8px-aligned spacing: gap-3/p-3/m-3 (12px) → gap-4/p-4/m-4 (16px), gap-5/p-5/m-5 (20px) → gap-6/p-6/m-6 (24px), gap-10/p-10/m-10 (40px) → gap-12/p-12/m-12 (48px), gap-20/p-20/m-20 (80px) → gap-24/p-24/m-24 (96px)
- Preserved: 4px values (gap-1, p-1, m-1) as they may be intentional fine-tuning, responsive breakpoints (sm:, md:, lg:), test files, documentation
- Modified files across all components to ensure consistent 8px grid alignment
- Action 11.2.1.3: Align all elements to 8px grid - COMPLETE
2026-01-16 10:50:46 +00:00
|
|
|
<Button variant="outline" className="p-4 flex flex-col items-center justify-center gap-2 text-kodo-steel bg-kodo-steel/10 border-kodo-steel">
|
2026-01-13 18:47:57 +00:00
|
|
|
<Tag className="w-5 h-5" />{' '}
|
|
|
|
|
<span className="text-xs font-bold">Public</span>
|
consistency: replace custom buttons with Button component (partial)
- Replaced custom button implementations with Button component in 14 files
- Files updated: LiveStreamDetailView, DashboardPage, CommentItem, PostCard, SocialPage, SocialView, AdminUsersView, UserTableRow, ProjectsManager, CloudFileBrowser, FileManagerView, CreatorModal, ImageCropper, BulkUploadModal
- ~31 buttons replaced across high-priority files
- Used appropriate Button variants: ghost, outline, default, secondary, link
- Preserved visual appearance with className overrides where needed
- Action 9.2.1.2 in progress (partial completion)
2026-01-16 01:06:14 +00:00
|
|
|
</Button>
|
aesthetic-improvements: align spacing to 8px grid (Action 11.2.1.3)
- Created automated script (scripts/align-8px-grid.py) to align all spacing to 8px grid
- Replaced non-8px-aligned spacing: gap-3/p-3/m-3 (12px) → gap-4/p-4/m-4 (16px), gap-5/p-5/m-5 (20px) → gap-6/p-6/m-6 (24px), gap-10/p-10/m-10 (40px) → gap-12/p-12/m-12 (48px), gap-20/p-20/m-20 (80px) → gap-24/p-24/m-24 (96px)
- Preserved: 4px values (gap-1, p-1, m-1) as they may be intentional fine-tuning, responsive breakpoints (sm:, md:, lg:), test files, documentation
- Modified files across all components to ensure consistent 8px grid alignment
- Action 11.2.1.3: Align all elements to 8px grid - COMPLETE
2026-01-16 10:50:46 +00:00
|
|
|
<Button variant="outline" className="p-4 flex flex-col items-center justify-center gap-2">
|
2026-01-13 18:47:57 +00:00
|
|
|
<Lock className="w-5 h-5" />{' '}
|
|
|
|
|
<span className="text-xs font-bold">Private</span>
|
consistency: replace custom buttons with Button component (partial)
- Replaced custom button implementations with Button component in 14 files
- Files updated: LiveStreamDetailView, DashboardPage, CommentItem, PostCard, SocialPage, SocialView, AdminUsersView, UserTableRow, ProjectsManager, CloudFileBrowser, FileManagerView, CreatorModal, ImageCropper, BulkUploadModal
- ~31 buttons replaced across high-priority files
- Used appropriate Button variants: ghost, outline, default, secondary, link
- Preserved visual appearance with className overrides where needed
- Action 9.2.1.2 in progress (partial completion)
2026-01-16 01:06:14 +00:00
|
|
|
</Button>
|
aesthetic-improvements: align spacing to 8px grid (Action 11.2.1.3)
- Created automated script (scripts/align-8px-grid.py) to align all spacing to 8px grid
- Replaced non-8px-aligned spacing: gap-3/p-3/m-3 (12px) → gap-4/p-4/m-4 (16px), gap-5/p-5/m-5 (20px) → gap-6/p-6/m-6 (24px), gap-10/p-10/m-10 (40px) → gap-12/p-12/m-12 (48px), gap-20/p-20/m-20 (80px) → gap-24/p-24/m-24 (96px)
- Preserved: 4px values (gap-1, p-1, m-1) as they may be intentional fine-tuning, responsive breakpoints (sm:, md:, lg:), test files, documentation
- Modified files across all components to ensure consistent 8px grid alignment
- Action 11.2.1.3: Align all elements to 8px grid - COMPLETE
2026-01-16 10:50:46 +00:00
|
|
|
<Button variant="outline" className="p-4 flex flex-col items-center justify-center gap-2">
|
2026-01-13 18:47:57 +00:00
|
|
|
<DollarSign className="w-5 h-5" />{' '}
|
|
|
|
|
<span className="text-xs font-bold">Premium</span>
|
consistency: replace custom buttons with Button component (partial)
- Replaced custom button implementations with Button component in 14 files
- Files updated: LiveStreamDetailView, DashboardPage, CommentItem, PostCard, SocialPage, SocialView, AdminUsersView, UserTableRow, ProjectsManager, CloudFileBrowser, FileManagerView, CreatorModal, ImageCropper, BulkUploadModal
- ~31 buttons replaced across high-priority files
- Used appropriate Button variants: ghost, outline, default, secondary, link
- Preserved visual appearance with className overrides where needed
- Action 9.2.1.2 in progress (partial completion)
2026-01-16 01:06:14 +00:00
|
|
|
</Button>
|
2026-01-13 18:47:57 +00:00
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
)}
|
2026-01-07 09:31:02 +00:00
|
|
|
|
2026-01-13 18:47:57 +00:00
|
|
|
{activeTab === 'product' && (
|
aesthetic-improvements: align spacing to 8px grid (Action 11.2.1.3)
- Created automated script (scripts/align-8px-grid.py) to align all spacing to 8px grid
- Replaced non-8px-aligned spacing: gap-3/p-3/m-3 (12px) → gap-4/p-4/m-4 (16px), gap-5/p-5/m-5 (20px) → gap-6/p-6/m-6 (24px), gap-10/p-10/m-10 (40px) → gap-12/p-12/m-12 (48px), gap-20/p-20/m-20 (80px) → gap-24/p-24/m-24 (96px)
- Preserved: 4px values (gap-1, p-1, m-1) as they may be intentional fine-tuning, responsive breakpoints (sm:, md:, lg:), test files, documentation
- Modified files across all components to ensure consistent 8px grid alignment
- Action 11.2.1.3: Align all elements to 8px grid - COMPLETE
2026-01-16 10:50:46 +00:00
|
|
|
<div className="text-center py-12">
|
2026-01-13 18:47:57 +00:00
|
|
|
<h3 className="text-xl font-bold text-white mb-2">
|
|
|
|
|
Sell Your Sounds
|
|
|
|
|
</h3>
|
2026-01-16 00:59:31 +00:00
|
|
|
<p className="text-kodo-content-dim mb-6">
|
2026-01-13 18:47:57 +00:00
|
|
|
Create Sample Packs, Presets, or DAW Templates.
|
|
|
|
|
</p>
|
|
|
|
|
<div className="grid grid-cols-1 md:grid-cols-3 gap-4">
|
|
|
|
|
{['Sample Pack', 'Serum Presets', 'Ableton Template'].map(
|
|
|
|
|
(type) => (
|
|
|
|
|
<Card
|
|
|
|
|
key={type}
|
|
|
|
|
variant="default"
|
|
|
|
|
className="hover:border-kodo-magenta cursor-pointer group"
|
|
|
|
|
>
|
2026-01-16 11:06:00 +00:00
|
|
|
<Package className="w-8 h-8 text-kodo-magenta mb-4 transition-opacity group-hover:opacity-80" />
|
2026-01-13 18:47:57 +00:00
|
|
|
<h4 className="font-bold">{type}</h4>
|
|
|
|
|
</Card>
|
|
|
|
|
),
|
|
|
|
|
)}
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
)}
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
{/* Footer */}
|
aesthetic-improvements: fix spacing in components batch 2 (Action 11.5.1.6)
- Modals: CreatorModal (p-6 → p-8, space-y-6 → space-y-8)
- Seller: CreateProductView (space-y-6 → space-y-8, 2 instances)
- Social: ExploreView, GroupCard (space-y-6 → space-y-8, p-6 → p-8)
- Studio: ProjectsManager, CloudFileBrowser (space-y-6 → space-y-8, gap-6 → gap-8)
- Theme: ThemeSwitcher (space-y-6 → space-y-8, p-6 → p-8)
- Settings: AppearanceSettingsView (p-6 → p-8, space-y-6 → space-y-8)
- Library: PlaylistsView (space-y-6 → space-y-8)
- Upload: TagSuggestionsModal, LyricsEditorModal, BulkUploadModal (p-6 → p-8, space-y-6 → space-y-8)
- UI: modal, dialog, ImageCropper (p-6 → p-8)
- All spacing now aligned to 8px grid (32px standard padding)
- Action 11.5.1.6: Apply direction to all components - Batch 2 complete (spacing fixes)
2026-01-16 11:06:56 +00:00
|
|
|
<div className="p-8 border-t border-kodo-steel bg-kodo-ink flex justify-end gap-4">
|
2026-01-13 18:47:57 +00:00
|
|
|
<Button variant="ghost" onClick={onClose}>
|
|
|
|
|
CANCEL
|
|
|
|
|
</Button>
|
|
|
|
|
<Button
|
|
|
|
|
variant="primary"
|
|
|
|
|
onClick={() => setStep((s) => Math.min(3, s + 1))}
|
|
|
|
|
>
|
|
|
|
|
{step === 3 ? 'PUBLISH RELEASE' : 'NEXT STEP'}
|
|
|
|
|
</Button>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
2026-01-07 09:31:02 +00:00
|
|
|
</div>
|
|
|
|
|
);
|
2026-01-13 18:47:57 +00:00
|
|
|
};
|