feat: toggle tool settings
This commit is contained in:
parent
ab88691838
commit
99bfd58c49
4 changed files with 48 additions and 12 deletions
|
|
@ -24,6 +24,17 @@ function ViewMenu() {
|
||||||
<MenubarCheckboxItem checked={settings.canvasBorder} onCheckedChange={onCheckedChange("canvasBorder")}>
|
<MenubarCheckboxItem checked={settings.canvasBorder} onCheckedChange={onCheckedChange("canvasBorder")}>
|
||||||
Canvas Border
|
Canvas Border
|
||||||
</MenubarCheckboxItem>
|
</MenubarCheckboxItem>
|
||||||
|
|
||||||
|
<MenubarSeparator />
|
||||||
|
<MenubarCheckboxItem checked={settings.colorPicker} onCheckedChange={onCheckedChange("colorPicker")}>
|
||||||
|
Color Picker
|
||||||
|
</MenubarCheckboxItem>
|
||||||
|
<MenubarCheckboxItem checked={settings.radiusChanger} onCheckedChange={onCheckedChange("radiusChanger")}>
|
||||||
|
Radius Changer
|
||||||
|
</MenubarCheckboxItem>
|
||||||
|
<MenubarCheckboxItem checked={settings.blockSelector} onCheckedChange={onCheckedChange("blockSelector")}>
|
||||||
|
Block Selector
|
||||||
|
</MenubarCheckboxItem>
|
||||||
</MenubarContent>
|
</MenubarContent>
|
||||||
</MenubarMenu>
|
</MenubarMenu>
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,6 @@
|
||||||
import { useEffect, useRef, useState } from "react";
|
import { useContext, useEffect, useRef, useState } from "react";
|
||||||
|
|
||||||
|
import { SettingsContext } from "@/context/Settings";
|
||||||
|
|
||||||
import { Input } from "@/components/ui/input";
|
import { Input } from "@/components/ui/input";
|
||||||
import { Separator } from "@/components/ui/separator";
|
import { Separator } from "@/components/ui/separator";
|
||||||
|
|
@ -8,6 +10,8 @@ import Radius from "./Radius";
|
||||||
import SelectorBlocks from "./SelectorBlocks";
|
import SelectorBlocks from "./SelectorBlocks";
|
||||||
|
|
||||||
function ToolSettings() {
|
function ToolSettings() {
|
||||||
|
const { settings } = useContext(SettingsContext);
|
||||||
|
|
||||||
const divRef = useRef<HTMLDivElement>(null);
|
const divRef = useRef<HTMLDivElement>(null);
|
||||||
const [stageWidth, setStageWidth] = useState(0);
|
const [stageWidth, setStageWidth] = useState(0);
|
||||||
const [searchInput, setSearchInput] = useState("");
|
const [searchInput, setSearchInput] = useState("");
|
||||||
|
|
@ -19,18 +23,34 @@ function ToolSettings() {
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="w-72 border-l border-zinc-200 dark:border-zinc-800 bg-white dark:bg-zinc-950 p-2 pb-0 flex flex-col h-full gap-2">
|
<>
|
||||||
<ColorPicker />
|
{(settings.colorPicker || settings.radiusChanger || settings.blockSelector) && (
|
||||||
<Separator />
|
<div className="w-72 border-l border-zinc-200 dark:border-zinc-800 bg-white dark:bg-zinc-950 p-2 pb-0 flex flex-col h-full gap-2">
|
||||||
|
{settings.colorPicker && (
|
||||||
|
<>
|
||||||
|
<ColorPicker />
|
||||||
|
<Separator />
|
||||||
|
</>
|
||||||
|
)}
|
||||||
|
|
||||||
<Radius />
|
{settings.radiusChanger && (
|
||||||
<Separator />
|
<>
|
||||||
|
<Radius />
|
||||||
|
<Separator />
|
||||||
|
</>
|
||||||
|
)}
|
||||||
|
|
||||||
<Input placeholder="Search for blocks..." value={searchInput} onChange={(e) => setSearchInput(e.target.value)} />
|
{settings.blockSelector && (
|
||||||
<div ref={divRef} className="w-full flex-1 overflow-y-auto pb-2">
|
<>
|
||||||
<SelectorBlocks stageWidth={stageWidth} searchInput={searchInput} />
|
<Input placeholder="Search for blocks..." value={searchInput} onChange={(e) => setSearchInput(e.target.value)} />
|
||||||
</div>
|
<div ref={divRef} className="w-full flex-1 overflow-y-auto pb-2">
|
||||||
</div>
|
<SelectorBlocks stageWidth={stageWidth} searchInput={searchInput} />
|
||||||
|
</div>
|
||||||
|
</>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,9 @@ interface Props {
|
||||||
const defaultSettings: Settings = {
|
const defaultSettings: Settings = {
|
||||||
grid: true,
|
grid: true,
|
||||||
canvasBorder: false,
|
canvasBorder: false,
|
||||||
|
colorPicker: false,
|
||||||
|
radiusChanger: true,
|
||||||
|
blockSelector: true,
|
||||||
};
|
};
|
||||||
|
|
||||||
export const SettingsContext = createContext({
|
export const SettingsContext = createContext({
|
||||||
|
|
|
||||||
4
src/types.d.ts
vendored
4
src/types.d.ts
vendored
|
|
@ -24,9 +24,11 @@ interface Block extends Position {
|
||||||
type Tool = "hand" | "pencil" | "eraser" | "eyedropper" | "zoom";
|
type Tool = "hand" | "pencil" | "eraser" | "eyedropper" | "zoom";
|
||||||
|
|
||||||
interface Settings {
|
interface Settings {
|
||||||
blockSelectorWindow: boolean;
|
|
||||||
grid: boolean;
|
grid: boolean;
|
||||||
canvasBorder: boolean;
|
canvasBorder: boolean;
|
||||||
|
colorPicker: boolean;
|
||||||
|
radiusChanger: boolean;
|
||||||
|
blockSelector: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface DialogProps {
|
interface DialogProps {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue