Social Media

Social Media

Social Media

February 13, 2024

February 13, 2024

Constitutional Strategy Abolishing Abortion 2027

The Legal and Constitutional Strategy for Abolishing Abortion in the United States by 2027

1. Executive Summary: The Path to Abolishing Abortion by 2027.

The paramount goal is to establish a nationwide prohibition on abortion in the United States through robust legal and constitutional strategies by the year 2027. This report outlines a comprehensive plan that prioritizes federal legislative action centered on the "Life at Conception Act," aggressively pursues a federal constitutional amendment defining personhood, and implements a concerted effort to shape Supreme Court jurisprudence through strategic judicial appointments and immediate executive actions. The urgency of this matter demands decisive action from the first day in office to ensure the protection of the unborn and foster a culture that unequivocally values life.

2. The Current Legal Landscape of Abortion in the United States:

import * as React from "react"
import { addPropertyControls, ControlType } from "framer"
import { motion } from "framer-motion"

// Icon components
const PlayIcon = () => (
  <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
    <path d="M8 5V19L19 12L8 5Z" fill="currentColor" />
  </svg>
)

const PauseIcon = () => (
  <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
    <path d="M10 5H6V19H10V5ZM18 5H14V19H18V5Z" fill="currentColor" />
  </svg>
)

const PreviousIcon = () => (
  <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
    <path d="M11 18V6L3 12L11 18ZM21 18V6L13 12L21 18Z" fill="currentColor" />
  </svg>
)

const NextIcon = () => (
  <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
    <path d="M13 6V18L21 12L13 6ZM3 6V18L11 12L3 6Z" fill="currentColor" />
  </svg>
)

const DownloadIcon = () => (
  <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
    <path d="M5 20h14v-2H5v2zm0-10h4v6h6v-6h4l-7-7-7 7z" fill="currentColor" />
  </svg>
)

// TrackItem component
const TrackItem = ({ album, artist, title, selected, onPlay, onDownload }) => {
  return (
    <div style={{
      display: "flex",
      alignItems: "center",
      padding: "16px 0",
      borderBottom: "1px solid rgba(255,255,255,0.1)",
      backgroundColor: selected ? "rgba(255,255,255,0.05)" : "transparent",
    }}>
      <div style={{
        width: "50px",
        height: "50px",
        marginRight: "12px",
        backgroundColor: "#444",
        display: "flex",
        alignItems: "center",
        justifyContent: "center",
        overflow: "hidden",
        borderRadius: "8px",
      }}>
        <img 
          src={album.coverUrl} 
          alt={album.name} 
          style={{
            width: "100%",
            height: "100%",
            objectFit: "cover",
          }}
        />
      </div>
      
      <div style={{ flex: 1 }}>
        <div style={{ 
          fontSize: "16px", 
          color: "#fff", 
          marginBottom: "4px",
          fontWeight: "500",
        }}>
          {title}
        </div>
        <div style={{
          fontSize: "14px",
          color: "rgba(255,255,255,0.7)",
        }}>
          {artist}
        </div>
      </div>
      
      <div style={{
        display: "flex",
        alignItems: "center",
      }}>
        <button
          onClick={onDownload}
          style={{
            background: "none",
            border: "none",
            padding: "8px",
            marginRight: "8px",
            cursor: "pointer",
            color: "rgba(255,255,255,0.5)",
          }}
        >
          <DownloadIcon />
        </button>
        
        <button
          onClick={onPlay}
          style={{
            background: "rgba(255,255,255,0.1)",
            border: "none",
            padding: "8px",
            borderRadius: "50%",
            display: "flex",
            alignItems: "center",
            justifyContent: "center",
            cursor: "pointer",
            color: "#fff",
          }}
        >
          <PlayIcon />
        </button>
      </div>
    </div>
  )
}

// Waveform visualization component
const Waveform = ({ audioData, progress }) => {
  // If no audio data provided, generate random data
  const waveformData = audioData || Array.from({ length: 100 }, () => Math.random() * 0.8 + 0.2);
  
  return (
    <div style={{
      width: "100%",
      height: "60px",
      display: "flex",
      alignItems: "center",
      position: "relative",
      marginBottom: "10px",
    }}>
      {/* Progress indicator */}
      <div style={{
        position: "absolute",
        top: 0,
        left: 0,
        height: "100%",
        width: `${progress * 100}%`,
        backgroundColor: "rgba(75, 0, 130, 0.1)",
        zIndex: 1,
      }} />
      
      {/* Progress line */}
      <div style={{
        position: "absolute",
        top: 0,
        left: `${progress * 100}%`,
        height: "100%",
        width: "2px",
        backgroundColor: "#6200ee",
        zIndex: 2,
      }} />
      
      {/* Waveform bars */}
      <div style={{
        display: "flex",
        alignItems: "center",
        justifyContent: "space-between",
        width: "100%",
        height: "100%",
        zIndex: 0,
        padding: "0 10px",
      }}>
        {waveformData.map((height, index) => (
          <div
            key={index}
            style={{
              width: "3px",
              height: `${height * 60}%`,
              backgroundColor: index / waveformData.length < progress ? "#6200ee" : "#aaa",
              marginRight: "1px",
              borderRadius: "1px",
            }}
          />
        ))}
      </div>
    </div>
  );
};

// Music Player View
const MusicPlayerView = ({ 
  artistName = "Metallica",
  trackTitle = "Welcome Home (Sanitarium)",
  episodeNumber = "EP001",
  albumCoverUrl = "https://upload.wikimedia.org/wikipedia/en/b/b2/Metallica_-_Master_of_Puppets_cover.jpg",
  isPlaying = false,
  currentTime = "03:22",
  totalTime = "04:36",
  progress = 0.6,
  onPlayPause,
  onNext,
  onPrevious,
  onSeek,
  audioRef,
  waveformData,
  onDownload,
}) => {
  
  // Handle progress bar click for seeking
  const handleProgressClick = (e) => {
    const progressBar = e.currentTarget;
    const clickPosition = e.clientX - progressBar.getBoundingClientRect().left;
    const newProgress = clickPosition / progressBar.offsetWidth;
    onSeek(newProgress);
  };
  
  return (
    <div style={{
      width: "100%",
      height: "100%",
      display: "flex",
      flexDirection: "column",
      backgroundColor: "#f5f5f7",
      overflow: "hidden",
      borderRadius: "12px",
    }}>      
      {/* Album Cover */}
      <div style={{
        padding: "30px",
        display: "flex",
        flexDirection: "column",
        alignItems: "center",
        backgroundColor: "#6200ee",
      }}>
        <div style={{
          width: "180px",
          height: "180px",
          backgroundColor: "#ddd",
          borderRadius: "8px",
          boxShadow: "0 4px 20px rgba(0,0,0,0.3)",
          overflow: "hidden",
          marginBottom: "24px",
          position: "relative",
        }}>
          <img 
            src={albumCoverUrl} 
            alt={artistName}
            style={{
              width: "100%",
              height: "100%",
              objectFit: "cover",
            }}
          />
          <div style={{
            position: "absolute",
            top: 10,
            right: 10,
            backgroundColor: "rgba(0,0,0,0.6)",
            color: "white",
            padding: "4px 8px",
            borderRadius: "4px",
            fontSize: "12px",
            fontWeight: "bold",
          }}>
            {episodeNumber}
          </div>
        </div>
        
        <div style={{
          fontSize: "24px",
          fontWeight: "bold",
          marginBottom: "8px",
          textAlign: "center",
          color: "#fff",
        }}>
          {artistName.toUpperCase()}
        </div>
        
        <div style={{
          fontSize: "18px",
          color: "rgba(255,255,255,0.8)",
          textAlign: "center",
        }}>
          {trackTitle}
        </div>
        
        <button
          onClick={onDownload}
          style={{
            display: "flex",
            alignItems: "center",
            backgroundColor: "rgba(0,0,0,0.2)",
            border: "none",
            borderRadius: "20px",
            padding: "6px 12px",
            marginTop: "15px",
            cursor: "pointer",
            color: "white",
          }}
        >
          <DownloadIcon />
          <span style={{ marginLeft: "6px", fontSize: "14px" }}>Download Research</span>
        </button>
      </div>
      
      {/* Player Controls */}
      <div style={{
        padding: "20px",
        backgroundColor: "#fff",
        flex: 1,
        display: "flex",
        flexDirection: "column",
      }}>
        {/* Waveform visualization */}
        <Waveform 
          audioData={waveformData}
          progress={progress}
        />
        
        {/* Progress Bar */}
        <div 
          style={{
            width: "100%",
            height: "6px",
            backgroundColor: "#ddd",
            borderRadius: "3px",
            marginBottom: "10px",
            position: "relative",
            cursor: "pointer",
          }}
          onClick={handleProgressClick}
        >
          <div style={{
            position: "absolute",
            left: 0,
            top: 0,
            height: "100%",
            width: `${progress * 100}%`,
            backgroundColor: "#6200ee",
            borderRadius: "3px",
          }} />
        </div>
        
        {/* Time Indicators */}
        <div style={{
          display: "flex",
          justifyContent: "space-between",
          fontSize: "14px",
          color: "#888",
          marginBottom: "24px",
        }}>
          <div>{currentTime}</div>
          <div>{totalTime}</div>
        </div>
        
        {/* Control Buttons */}
        <div style={{
          display: "flex",
          justifyContent: "space-between",
          alignItems: "center",
          padding: "0 30px",
        }}>
          <button style={{
            background: "none",
            border: "none",
            padding: "12px",
            cursor: "pointer",
            color: "#6200ee",
            transform: "scale(1.2)",
          }}
          onClick={onPrevious}
          >
            <PreviousIcon />
          </button>
          
          <button 
            style={{
              background: "none",
              border: "none",
              width: "64px",
              height: "64px",
              borderRadius: "50%",
              backgroundColor: "#6200ee",
              display: "flex",
              alignItems: "center",
              justifyContent: "center",
              boxShadow: "0 2px 8px rgba(98, 0, 238, 0.4)",
              cursor: "pointer",
              color: "#fff",
            }}
            onClick={onPlayPause}
          >
            {isPlaying ? <PauseIcon /> : <PlayIcon />}
          </button>
          
          <button style={{
            background: "none",
            border: "none",
            padding: "12px",
            cursor: "pointer",
            color: "#6200ee",
            transform: "scale(1.2)",
          }}
          onClick={onNext}
          >
            <NextIcon />
          </button>
        </div>
        
        {/* Hidden audio element */}
        <audio 
          ref={audioRef} 
          style={{ display: "none" }} 
          controls
        />
      </div>
    </div>
  )
}

// Tracks List View
const TracksListView = ({ 
  artistName = "Metallica",
  tracks = [],
  currentTrackId = null,
  onSelectTrack,
  onDownloadTrack,
}) => {
  return (
    <div style={{
      width: "100%",
      height: "100%",
      display: "flex",
      flexDirection: "column",
      backgroundColor: "#222",
      overflow: "hidden",
      borderRadius: "12px",
    }}>      
      {/* Header Info */}
      <div style={{
        padding: "30px 16px",
        backgroundColor: "#111",
      }}>
        <h1 style={{
          fontSize: "30px",
          fontWeight: "bold",
          margin: 0,
          color: "#fff",
          textAlign: "center",
        }}>
          {artistName.toUpperCase()}
        </h1>
        <h2 style={{
          fontSize: "18px",
          fontWeight: "normal",
          margin: "8px 0 0 0",
          color: "rgba(255,255,255,0.7)",
          textAlign: "center",
        }}>
          Episodes
        </h2>
      </div>
      
      {/* Track List */}
      <div style={{
        flex: 1,
        overflowY: "auto",
        padding: "0 16px",
      }}>
        {tracks.map((track) => (
          <TrackItem 
            key={track.id}
            title={track.title}
            artist={track.artist}
            album={track.album}
            selected={track.id === currentTrackId}
            onDownload={() => onDownloadTrack(track)}
            onPlay={() => onSelectTrack(track)}
          />
        ))}
      </div>
    </div>
  )
}

// Main MusicPlayer component
export default function MusicPlayer({ 
  width, 
  height, 
  showTracks,
  artistName,
  podcastTitle,
  episodeTitle,
  episodeNumber,
  coverImageUrl,
  audioFile1,
  audioFile2,
  audioFile3,
  audioFile4,
  audioFile5,
  episodeTitle1,
  episodeTitle2,
  episodeTitle3,
  episodeTitle4,
  episodeTitle5,
  episodeArtist1,
  episodeArtist2,
  episodeArtist3,
  episodeArtist4,
  episodeArtist5,
  episodeNumber1,
  episodeNumber2,
  episodeNumber3,
  episodeNumber4,
  episodeNumber5,
  episodeCover1,
  episodeCover2,
  episodeCover3,
  episodeCover4,
  episodeCover5,
  isPlaying: defaultIsPlaying,
  primaryColor,
}) {
  // Audio state
  const [isPlaying, setIsPlaying] = React.useState(defaultIsPlaying)
  const [progress, setProgress] = React.useState(0)
  const [currentTime, setCurrentTime] = React.useState("00:00")
  const [duration, setDuration] = React.useState("00:00")
  const [waveformData, setWaveformData] = React.useState(null)
  const audioRef = React.useRef(null)
  const [trackList, setTrackList] = React.useState([])
  const [currentTrack, setCurrentTrack] = React.useState(null)
  
  // Format time in mm:ss
  const formatTime = (seconds) => {
    if (isNaN(seconds)) return "00:00";
    const minutes = Math.floor(seconds / 60);
    const secs = Math.floor(seconds % 60);
    return `${minutes.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`;
  }
  
  React.useEffect(() => {
    // Process episodes data from individual props
    const processedEpisodes = [];
    
    // Helper function to add episode if it has a title
    const addEpisodeIfValid = (index, title, artist, episodeNum, coverUrl, audioUrl) => {
      if (title) {
        processedEpisodes.push({
          id: `ep00${index}`,
          title: title,
          artist: artist || artistName,
          episodeNumber: episodeNum || `EP00${index}`,
          album: { 
            name: podcastTitle, 
            coverUrl: coverUrl || coverImageUrl
          },
          audioUrl: audioUrl || ""
        });
      }
    };
    
    // Add all configured episodes
    addEpisodeIfValid(1, episodeTitle1, episodeArtist1, episodeNumber1, episodeCover1, audioFile1);
    addEpisodeIfValid(2, episodeTitle2, episodeArtist2, episodeNumber2, episodeCover2, audioFile2);
    addEpisodeIfValid(3, episodeTitle3, episodeArtist3, episodeNumber3, episodeCover3, audioFile3);
    addEpisodeIfValid(4, episodeTitle4, episodeArtist4, episodeNumber4, episodeCover4, audioFile4);
    addEpisodeIfValid(5, episodeTitle5, episodeArtist5, episodeNumber5, episodeCover5, audioFile5);
    
    // If no episodes are configured, add the default one
    if (processedEpisodes.length === 0 && episodeTitle) {
      processedEpisodes.push({
        id: "ep001",
        title: episodeTitle,
        artist: artistName,
        episodeNumber: episodeNumber || "EP001",
        album: { 
          name: podcastTitle, 
          coverUrl: coverImageUrl
        },
        audioUrl: ""
      });
    }
    
    setTrackList(processedEpisodes);
    setCurrentTrack(processedEpisodes[0] || null);
    
  }, [
    artistName, podcastTitle, episodeTitle, episodeNumber, coverImageUrl,
    episodeTitle1, episodeTitle2, episodeTitle3, episodeTitle4, episodeTitle5,
    episodeArtist1, episodeArtist2, episodeArtist3, episodeArtist4, episodeArtist5,
    episodeNumber1, episodeNumber2, episodeNumber3, episodeNumber4, episodeNumber5,
    episodeCover1, episodeCover2, episodeCover3, episodeCover4, episodeCover5,
    audioFile1, audioFile2, audioFile3, audioFile4, audioFile5
  ]);
  
  React.useEffect(() => {
    if (!audioRef.current) return;
    
    // Set up event listeners for the audio element
    const audio = audioRef.current;
    
    // Set the source if current track has an audio URL
    if (currentTrack && currentTrack.audioUrl && audio.src !== currentTrack.audioUrl) {
      audio.src = currentTrack.audioUrl;
    }
    
    const updateProgress = () => {
      const currentTime = audio.currentTime;
      const duration = audio.duration;
      if (duration > 0) {
        setProgress(currentTime / duration);
        setCurrentTime(formatTime(currentTime));
        setDuration(formatTime(duration));
      }
    };
    
    const handleEnded = () => {
      setIsPlaying(false);
      setProgress(0);
      setCurrentTime("00:00");
    };
    
    audio.addEventListener("timeupdate", updateProgress);
    audio.addEventListener("ended", handleEnded);
    audio.addEventListener("loadedmetadata", updateProgress);
    
    return () => {
      audio.removeEventListener("timeupdate", updateProgress);
      audio.removeEventListener("ended", handleEnded);
      audio.removeEventListener("loadedmetadata", updateProgress);
    };
  }, [audioRef.current, currentTrack]);
  
  // Handle play/pause
  const handlePlayPause = () => {
    const audio = audioRef.current;
    if (!audio) return;
    
    if (isPlaying) {
      audio.pause();
    } else {
      audio.play().catch(error => {
        console.error("Error playing audio:", error);
      });
    }
    
    setIsPlaying(!isPlaying);
  };
  
  // Handle seeking
  const handleSeek = (newProgress) => {
    const audio = audioRef.current;
    if (!audio) return;
    
    const newTime = audio.duration * newProgress;
    audio.currentTime = newTime;
    setProgress(newProgress);
    setCurrentTime(formatTime(newTime));
  };
  
  // Handle next track
  const handleNext = () => {
    if (!currentTrack || trackList.length === 0) return;
    
    const currentIndex = trackList.findIndex(track => track.id === currentTrack.id);
    const nextIndex = (currentIndex + 1) % trackList.length;
    setCurrentTrack(trackList[nextIndex]);
    
    // Set new audio source
    if (audioRef.current && trackList[nextIndex].audioUrl) {
      audioRef.current.src = trackList[nextIndex].audioUrl;
      audioRef.current.play().catch(error => {
        console.error("Error playing audio:", error);
      });
      setIsPlaying(true);
    }
  };
  
  // Handle previous track
  const handlePrevious = () => {
    if (!currentTrack || trackList.length === 0) return;
    
    const currentIndex = trackList.findIndex(track => track.id === currentTrack.id);
    const prevIndex = (currentIndex - 1 + trackList.length) % trackList.length;
    setCurrentTrack(trackList[prevIndex]);
    
    // Set new audio source
    if (audioRef.current && trackList[prevIndex].audioUrl) {
      audioRef.current.src = trackList[prevIndex].audioUrl;
      audioRef.current.play().catch(error => {
        console.error("Error playing audio:", error);
      });
      setIsPlaying(true);
    }
  };
  
  // Handle selecting a track from the list
  const handleSelectTrack = (track) => {
    setCurrentTrack(track);
    
    // Set new audio source
    if (audioRef.current && track.audioUrl) {
      audioRef.current.src = track.audioUrl;
      audioRef.current.play().catch(error => {
        console.error("Error playing audio:", error);
      });
      setIsPlaying(true);
    }
  };
  
  // Handle downloading a track
  const handleDownload = (track) => {
    if (!track || !track.audioUrl) {
      console.log("Download requested for:", track ? track.title : currentTrack ? currentTrack.title : "current track");
      alert("Research materials ready for download!");
      return;
    }
    
    // Create a temporary anchor element and trigger download
    const a = document.createElement('a');
    a.href = track.audioUrl;
    a.download = `${track.artist} - ${track.title}.mp3`;
    document.body.appendChild(a);
    a.click();
    document.body.removeChild(a);
  };
  
  return (
    <div style={{
      width,
      height,
      display: "flex",
      overflow: "hidden",
      borderRadius: 12,
      boxShadow: "0 10px 30px rgba(0, 0, 0, 0.2)",
      background: `linear-gradient(135deg, ${primaryColor || "#6200ee"}, ${primaryColor ? adjustColor(primaryColor, -40) : "#3700b3"})`,
      padding: 15,
    }}>
      <div style={{ 
        width: showTracks ? "50%" : "100%", 
        height: "100%",
        paddingRight: showTracks ? 8 : 0,
      }}>
        <MusicPlayerView 
          artistName={currentTrack?.artist || artistName}
          trackTitle={currentTrack?.title || episodeTitle}
          episodeNumber={currentTrack?.episodeNumber || episodeNumber}
          albumCoverUrl={currentTrack?.album?.coverUrl || coverImageUrl}
          isPlaying={isPlaying}
          currentTime={currentTime}
          totalTime={duration}
          progress={progress}
          onPlayPause={handlePlayPause}
          onNext={handleNext}
          onPrevious={handlePrevious}
          onSeek={handleSeek}
          audioRef={audioRef}
          waveformData={waveformData}
          onDownload={() => handleDownload(currentTrack)}
        />
      </div>
      
      {showTracks && (
        <div style={{ width: "50%", height: "100%", paddingLeft: 8 }}>
          <TracksListView 
            artistName={artistName}
            tracks={trackList}
            currentTrackId={currentTrack?.id}
            onSelectTrack={handleSelectTrack}
            onDownloadTrack={handleDownload}
          />
        </div>
      )}
    </div>
  )
}

// Helper function to adjust a color's brightness
function adjustColor(hex, amount) {
  let r = parseInt(hex.substring(1, 3), 16);
  let g = parseInt(hex.substring(3, 5), 16);
  let b = parseInt(hex.substring(5, 7), 16);

  r = Math.max(0, Math.min(255, r + amount));
  g = Math.max(0, Math.min(255, g + amount));
  b = Math.max(0, Math.min(255, b + amount));

  return "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);
}

// Property controls for Framer
MusicPlayer.defaultProps = {
  width: 900,
  height: 450,
  showTracks: true,
  artistName: "METALLICA",
  podcastTitle: "Metal Conversations",
  episodeTitle: "Welcome Home (Sanitarium)",
  episodeNumber: "EP001",
  coverImageUrl: "https://upload.wikimedia.org/wikipedia/en/b/b2/Metallica_-_Master_of_Puppets_cover.jpg",
  isPlaying: false,
  primaryColor: "#6200ee",
  
  // Default episode properties
  episodeTitle1: "Skeletons of Society",
  episodeArtist1: "Slayer",
  episodeNumber1: "EP001",
  episodeCover1: "https://upload.wikimedia.org/wikipedia/en/a/a0/Slayer_-_Seasons_in_the_Abyss.jpg",
  
  episodeTitle2: "Harvester of Sorrow",
  episodeArtist2: "Metallica",
  episodeNumber2: "EP002",
  episodeCover2: "https://upload.wikimedia.org/wikipedia/en/b/bd/Metallica_-_...And_Justice_for_All_cover.jpg",
  
  episodeTitle3: "Hell Awaits",
  episodeArtist3: "Slayer",
  episodeNumber3: "EP003",
  episodeCover3: "https://upload.wikimedia.org/wikipedia/en/9/9e/Slayer_-_Hell_Awaits.jpg",
  
  episodeTitle4: "Iconoclasm",
  episodeArtist4: "Exodus",
  episodeNumber4: "EP004",
  episodeCover4: "https://upload.wikimedia.org/wikipedia/en/5/59/Exodus_Tempo_Of_The_Damned.jpg",
}

addPropertyControls(MusicPlayer, {
  // Basic settings
  showTracks: {
    type: ControlType.Boolean,
    title: "Show Episodes List",
    defaultValue: true,
  },
  artistName: {
    type: ControlType.String,
    title: "Podcast Host",
    defaultValue: "METALLICA",
  },
  podcastTitle: {
    type: ControlType.String,
    title: "Podcast Title",
    defaultValue: "Metal Conversations",
  },
  primaryColor: {
    type: ControlType.Color,
    title: "Primary Theme Color",
    defaultValue: "#6200ee",
  },
  coverImageUrl: {
    type: ControlType.Image,
    title: "Default Cover Image",
    defaultValue: "https://upload.wikimedia.org/wikipedia/en/b/b2/Metallica_-_Master_of_Puppets_cover.jpg",
  },
  isPlaying: {
    type: ControlType.Boolean,
    title: "Auto Play",
    defaultValue: false,
  },
  
  // Default episode (shown if no episodes are added)
  episodeTitle: {
    type: ControlType.String,
    title: "Default Episode Title",
    defaultValue: "Welcome Home (Sanitarium)",
    hidden(props) {
      return props.episodeTitle1 || props.episodeTitle2 || props.episodeTitle3 || props.episodeTitle4 || props.episodeTitle5;
    },
  },
  episodeNumber: {
    type: ControlType.String,
    title: "Default Episode Number",
    defaultValue: "EP001",
    hidden(props) {
      return props.episodeTitle1 || props.episodeTitle2 || props.episodeTitle3 || props.episodeTitle4 || props.episodeTitle5;
    },
  },
  
  // Episode 1 settings
  episodeTitle1: {
    type: ControlType.String,
    title: "Episode 1 Title",
    defaultValue: "Skeletons of Society",
    displayStepper: true,
  },
  episodeArtist1: {
    type: ControlType.String,
    title: "Episode 1 Artist",
    defaultValue: "Slayer",
    hidden(props) {
      return !props.episodeTitle1;
    },
  },
  episodeNumber1: {
    type: ControlType.String,
    title: "Episode 1 Number",
    defaultValue: "EP001",
    hidden(props) {
      return !props.episodeTitle1;
    },
  },
  episodeCover1: {
    type: ControlType.Image,
    title: "Episode 1 Cover",
    defaultValue: "https://upload.wikimedia.org/wikipedia/en/a/a0/Slayer_-_Seasons_in_the_Abyss.jpg",
    hidden(props) {
      return !props.episodeTitle1;
    },
  },
  audioFile1: {
    type: ControlType.File,
    title: "Episode 1 Audio File (MP3)",
    allowedFileTypes: ["audio/mpeg", "audio/mp3"],
    hidden(props) {
      return !props.episodeTitle1;
    },
  },
  
  // Episode 2 settings
  episodeTitle2: {
    type: ControlType.String,
    title: "Episode 2 Title",
    defaultValue: "Harvester of Sorrow",
    displayStepper: true,
  },
  episodeArtist2: {
    type: ControlType.String,
    title: "Episode 2 Artist",
    defaultValue: "Metallica",
    hidden(props) {
      return !props.episodeTitle2;
    },
  },
  episodeNumber2: {
    type: ControlType.String,
    title: "Episode 2 Number",
    defaultValue: "EP002",
    hidden(props) {
      return !props.episodeTitle2;
    },
  },
  episodeCover2: {
    type: ControlType.Image,
    title: "Episode 2 Cover",
    defaultValue: "https://upload.wikimedia.org/wikipedia/en/b/bd/Metallica_-_...And_Justice_for_All_cover.jpg",
    hidden(props) {
      return !props.episodeTitle2;
    },
  },
  audioFile2: {
    type: ControlType.File,
    title: "Episode 2 Audio File (MP3)",
    allowedFileTypes: ["audio/mpeg", "audio/mp3"],
    hidden(props) {
      return !props.episodeTitle2;
    },
  },
  
  // Episode 3 settings
  episodeTitle3: {
    type: ControlType.String,
    title: "Episode 3 Title",
    defaultValue: "Hell Awaits",
    displayStepper: true,
  },
  episodeArtist3: {
    type: ControlType.String,
    title: "Episode 3 Artist",
    defaultValue: "Slayer",
    hidden(props) {
      return !props.episodeTitle3;
    },
  },
  episodeNumber3: {
    type: ControlType.String,
    title: "Episode 3 Number",
    defaultValue: "EP003",
    hidden(props) {
      return !props.episodeTitle3;
    },
  },
  episodeCover3: {
    type: ControlType.Image,
    title: "Episode 3 Cover",
    defaultValue: "https://upload.wikimedia.org/wikipedia/en/9/9e/Slayer_-_Hell_Awaits.jpg",
    hidden(props) {
      return !props.episodeTitle3;
    },
  },
  audioFile3: {
    type: ControlType.File,
    title: "Episode 3 Audio File (MP3)",
    allowedFileTypes: ["audio/mpeg", "audio/mp3"],
    hidden(props) {
      return !props.episodeTitle3;
    },
  },
  
  // Episode 4 settings
  episodeTitle4: {
    type: ControlType.String,
    title: "Episode 4 Title",
    defaultValue: "Iconoclasm",
    displayStepper: true,
  },
  episodeArtist4: {
    type: ControlType.String,
    title: "Episode 4 Artist",
    defaultValue: "Exodus",
    hidden(props) {
      return !props.episodeTitle4;
    },
  },
  episodeNumber4: {
    type: ControlType.String,
    title: "Episode 4 Number",
    defaultValue: "EP004",
    hidden(props) {
      return !props.episodeTitle4;
    },
  },
  episodeCover4: {
    type: ControlType.Image,
    title: "Episode 4 Cover",
    defaultValue: "https://upload.wikimedia.org/wikipedia/en/5/59/Exodus_Tempo_Of_The_Damned.jpg",
    hidden(props) {
      return !props.episodeTitle4;
    },
  },
  audioFile4: {
    type: ControlType.File,
    title: "Episode 4 Audio File (MP3)",
    allowedFileTypes: ["audio/mpeg", "audio/mp3"],
    hidden(props) {
      return !props.episodeTitle4;
    },
  },
  
  // Episode 5 settings
  episodeTitle5: {
    type: ControlType.String,
    title: "Episode 5 Title",
    defaultValue: "",
    displayStepper: true,
  },
  episodeArtist5: {
    type: ControlType.String,
    title: "Episode 5 Artist",
    defaultValue: "",
    hidden(props) {
      return !props.episodeTitle5;
    },
  },
  episodeNumber5: {
    type: ControlType.String,
    title: "Episode 5 Number",
    defaultValue: "EP005",
    hidden(props) {
      return !props.episodeTitle5;
    },
  },
  episodeCover5: {
    type: ControlType.Image,
    title: "Episode 5 Cover",
    defaultValue: "",
    hidden(props) {
      return !props.episodeTitle5;
    },
  },
  audioFile5: {
    type: ControlType.File,
    title: "Episode 5 Audio File (MP3)",
    allowedFileTypes: ["audio/mpeg", "audio/mp3"],
    hidden(props) {
      return !props.episodeTitle5;
    },
  },
})


GET BRIEFINGS FIRST.

GET BRIEFINGS FIRST.

GET BRIEFINGS FIRST.