import { Select, SelectContent, SelectGroup, SelectItem, SelectTrigger, } from "./ui/select"; import { CSSOption, JSFrameworkOption, OutputSettings } from "../types"; import toast from "react-hot-toast"; import { Label } from "@radix-ui/react-label"; import { Button } from "./ui/button"; import { Popover, PopoverTrigger, PopoverContent } from "./ui/popover"; function displayCSSOption(option: CSSOption) { switch (option) { case CSSOption.TAILWIND: return "Tailwind"; case CSSOption.BOOTSTRAP: return "Bootstrap"; default: return option; } } function displayJSOption(option: JSFrameworkOption) { switch (option) { case JSFrameworkOption.REACT: return "React"; case JSFrameworkOption.NO_FRAMEWORK: return "No Framework"; default: return option; } } function convertStringToCSSOption(option: string) { switch (option) { case "tailwind": return CSSOption.TAILWIND; case "bootstrap": return CSSOption.BOOTSTRAP; default: throw new Error(`Unknown CSS option: ${option}`); } } function generateDisplayString(settings: OutputSettings) { if ( settings.js === JSFrameworkOption.REACT && settings.css === CSSOption.TAILWIND ) { return (
Generating React +{" "} Tailwind code
); } else if ( settings.js === JSFrameworkOption.NO_FRAMEWORK && settings.css === CSSOption.TAILWIND ) { return (
Generating HTML +{" "} Tailwind code
); } else if ( settings.js === JSFrameworkOption.NO_FRAMEWORK && settings.css === CSSOption.BOOTSTRAP ) { return (
Generating HTML +{" "} Bootstrap code
); } } interface Props { outputSettings: OutputSettings; setOutputSettings: React.Dispatch>; } function OutputSettingsSection({ outputSettings, setOutputSettings }: Props) { const onCSSValueChange = (value: string) => { setOutputSettings((prev) => { if (prev.js === JSFrameworkOption.REACT) { if (value !== CSSOption.TAILWIND) { toast.error( "React only supports Tailwind CSS. Change JS framework to Vanilla to use Bootstrap." ); } return { css: CSSOption.TAILWIND, js: JSFrameworkOption.REACT, }; } else { return { ...prev, css: convertStringToCSSOption(value), }; } }); }; const onJsFrameworkChange = (value: string) => { if (value === JSFrameworkOption.REACT) { setOutputSettings(() => ({ css: CSSOption.TAILWIND, js: value as JSFrameworkOption, })); } else { setOutputSettings((prev) => ({ ...prev, js: value as JSFrameworkOption, })); } }; return (
{generateDisplayString(outputSettings)}{" "}

Code Settings

Customize your code output

); } export default OutputSettingsSection;