make settings modal not too big

This commit is contained in:
Abi Raja 2023-11-30 08:59:51 -05:00
parent 514688a1c0
commit b98bcb6e09
3 changed files with 95 additions and 65 deletions

View File

@ -170,6 +170,7 @@ function App() {
})); }));
}; };
return (
<div className="mt-2 dark:bg-black dark:text-white"> <div className="mt-2 dark:bg-black dark:text-white">
{IS_RUNNING_ON_CLOUD && <PicoBadge settings={settings} />} {IS_RUNNING_ON_CLOUD && <PicoBadge settings={settings} />}
{IS_RUNNING_ON_CLOUD && ( {IS_RUNNING_ON_CLOUD && (

View File

@ -50,7 +50,7 @@ function generateDisplayString(settings: OutputSettings) {
settings.css === CSSOption.TAILWIND settings.css === CSSOption.TAILWIND
) { ) {
return ( return (
<div> <div className="text-gray-800 dark:text-white">
Generating <span className="font-bold">React</span> +{" "} Generating <span className="font-bold">React</span> +{" "}
<span className="font-bold">Tailwind</span> code <span className="font-bold">Tailwind</span> code
</div> </div>
@ -60,7 +60,7 @@ function generateDisplayString(settings: OutputSettings) {
settings.css === CSSOption.TAILWIND settings.css === CSSOption.TAILWIND
) { ) {
return ( return (
<div className="text-gray-800"> <div className="text-gray-800 dark:text-white">
Generating <span className="font-bold">HTML</span> +{" "} Generating <span className="font-bold">HTML</span> +{" "}
<span className="font-bold">Tailwind</span> code <span className="font-bold">Tailwind</span> code
</div> </div>
@ -70,7 +70,7 @@ function generateDisplayString(settings: OutputSettings) {
settings.css === CSSOption.BOOTSTRAP settings.css === CSSOption.BOOTSTRAP
) { ) {
return ( return (
<div> <div className="text-gray-800 dark:text-white">
Generating <span className="font-bold">HTML</span> +{" "} Generating <span className="font-bold">HTML</span> +{" "}
<span className="font-bold">Bootstrap</span> code <span className="font-bold">Bootstrap</span> code
</div> </div>

View File

@ -16,6 +16,12 @@ import { Input } from "./ui/input";
import { Select, SelectContent, SelectItem, SelectTrigger } from "./ui/select"; import { Select, SelectContent, SelectItem, SelectTrigger } from "./ui/select";
import { capitalize } from "../lib/utils"; import { capitalize } from "../lib/utils";
import { IS_RUNNING_ON_CLOUD } from "../config"; import { IS_RUNNING_ON_CLOUD } from "../config";
import {
Accordion,
AccordionContent,
AccordionItem,
AccordionTrigger,
} from "./ui/accordion";
interface Props { interface Props {
settings: Settings; settings: Settings;
@ -42,7 +48,7 @@ function SettingsDialog({ settings, setSettings }: Props) {
{/* Access code */} {/* Access code */}
{IS_RUNNING_ON_CLOUD && ( {IS_RUNNING_ON_CLOUD && (
<div className="flex flex-col space-y-4 bg-slate-300 p-4 rounded"> <div className="flex flex-col space-y-4 bg-slate-300 p-4 rounded dark:text-white dark:bg-slate-800">
<Label htmlFor="access-code"> <Label htmlFor="access-code">
<div>Access Code</div> <div>Access Code</div>
<div className="font-light mt-1 leading-relaxed"> <div className="font-light mt-1 leading-relaxed">
@ -51,7 +57,7 @@ function SettingsDialog({ settings, setSettings }: Props) {
</Label> </Label>
<Input <Input
id="access-code" id="access-code dark:border-gray-700 dark:bg-gray-800 dark:text-white"
placeholder="Enter your Screenshot to Code access code" placeholder="Enter your Screenshot to Code access code"
value={settings.accessCode || ""} value={settings.accessCode || ""}
onChange={(e) => onChange={(e) =>
@ -103,13 +109,14 @@ function SettingsDialog({ settings, setSettings }: Props) {
} }
/> />
<Accordion type="single" collapsible className="w-full">
<AccordionItem value="item-1">
<AccordionTrigger>Screenshot by URL Config</AccordionTrigger>
<AccordionContent>
<Label htmlFor="screenshot-one-api-key"> <Label htmlFor="screenshot-one-api-key">
<div> <div className="leading-normal font-normal text-xs">
ScreenshotOne API key (optional - only needed if you want to use If you want to use URLs directly instead of taking the
URLs directly instead of taking the screenshot yourself) screenshot yourself, add a ScreenshotOne API key.{" "}
</div>
<div className="font-light mt-2 leading-relaxed">
Only stored in your browser. Never stored on servers.{" "}
<a <a
href="https://screenshotone.com?via=screenshot-to-code" href="https://screenshotone.com?via=screenshot-to-code"
className="underline" className="underline"
@ -122,6 +129,7 @@ function SettingsDialog({ settings, setSettings }: Props) {
<Input <Input
id="screenshot-one-api-key" id="screenshot-one-api-key"
className="mt-2"
placeholder="ScreenshotOne API key" placeholder="ScreenshotOne API key"
value={settings.screenshotOneApiKey || ""} value={settings.screenshotOneApiKey || ""}
onChange={(e) => onChange={(e) =>
@ -131,6 +139,15 @@ function SettingsDialog({ settings, setSettings }: Props) {
})) }))
} }
/> />
</AccordionContent>
</AccordionItem>
</Accordion>
<Accordion type="single" collapsible className="w-full">
<AccordionItem value="item-1">
<AccordionTrigger>Theme Settings</AccordionTrigger>
<AccordionContent className="space-y-4 flex flex-col">
<div className="flex items-center justify-between">
<Label htmlFor="app-theme"> <Label htmlFor="app-theme">
<div>App Theme</div> <div>App Theme</div>
</Label> </Label>
@ -138,22 +155,30 @@ function SettingsDialog({ settings, setSettings }: Props) {
<button <button
className="flex rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50t" className="flex rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50t"
onClick={() => { onClick={() => {
document.querySelector("div.mt-2")?.classList.toggle("dark"); // enable dark mode for sidebar document
.querySelector("div.mt-2")
?.classList.toggle("dark"); // enable dark mode for sidebar
document.body.classList.toggle("dark"); document.body.classList.toggle("dark");
document.querySelector('div[role="presentation"]')?.classList.toggle("dark"); // enable dark mode for upload container document
.querySelector('div[role="presentation"]')
?.classList.toggle("dark"); // enable dark mode for upload container
}} }}
> >
Toggle dark mode Toggle dark mode
</button> </button>
</div> </div>
</div>
<div className="flex items-center justify-between">
<Label htmlFor="editor-theme"> <Label htmlFor="editor-theme">
<div>Editor Theme</div> <div>Code Editor Theme</div>
</Label> </Label>
<div> <div>
<Select // Use the custom Select component here <Select // Use the custom Select component here
name="editor-theme" name="editor-theme"
value={settings.editorTheme} value={settings.editorTheme}
onValueChange={(value) => handleThemeChange(value as EditorTheme)} onValueChange={(value) =>
handleThemeChange(value as EditorTheme)
}
> >
<SelectTrigger className="w-[180px]"> <SelectTrigger className="w-[180px]">
{capitalize(settings.editorTheme)} {capitalize(settings.editorTheme)}
@ -165,6 +190,10 @@ function SettingsDialog({ settings, setSettings }: Props) {
</Select> </Select>
</div> </div>
</div> </div>
</AccordionContent>
</AccordionItem>
</Accordion>
</div>
<DialogFooter> <DialogFooter>
<DialogClose>Save</DialogClose> <DialogClose>Save</DialogClose>