97 lines
3.0 KiB
TypeScript
97 lines
3.0 KiB
TypeScript
import { Trash } from "iconsax-react";
|
||
import type { EditorObject } from "../../store/editorStore";
|
||
import {
|
||
ShapeSettings,
|
||
LineSettings,
|
||
SizeSettings,
|
||
LinkSettings,
|
||
VideoSettings,
|
||
AlignmentSettings,
|
||
TransformSettings,
|
||
GridSettings,
|
||
MaskSettings,
|
||
} from "./settings";
|
||
import TextInstruction from "./instructions/TextInstruction";
|
||
|
||
type ObjectSettingsProps = {
|
||
selectedObject: EditorObject;
|
||
pageWidth: number;
|
||
pageHeight: number;
|
||
onUpdate: (id: string, updates: Partial<EditorObject>) => void;
|
||
onDelete: (id: string) => void;
|
||
};
|
||
|
||
const ObjectSettings = ({
|
||
selectedObject,
|
||
pageWidth,
|
||
pageHeight,
|
||
onUpdate,
|
||
onDelete,
|
||
}: ObjectSettingsProps) => {
|
||
return (
|
||
<div className="space-y-4">
|
||
<div className="flex items-center justify-between pb-4">
|
||
<h3 className="text-sm font-medium">تنظیمات شیء</h3>
|
||
<button
|
||
onClick={() => onDelete(selectedObject.id)}
|
||
className="p-2 hover:bg-red-50 rounded-lg transition-colors text-red-500"
|
||
>
|
||
<Trash size={20} />
|
||
</button>
|
||
</div>
|
||
|
||
<AlignmentSettings
|
||
pageWidth={pageWidth}
|
||
pageHeight={pageHeight}
|
||
onUpdate={onUpdate}
|
||
/>
|
||
|
||
{/* Mask Settings for all objects */}
|
||
<MaskSettings objectId={selectedObject.id} />
|
||
|
||
{selectedObject.type === "text" && <TextInstruction />}
|
||
|
||
{selectedObject.type === "rectangle" && (
|
||
<ShapeSettings selectedObject={selectedObject} onUpdate={onUpdate} />
|
||
)}
|
||
|
||
{(selectedObject.type === "line" || selectedObject.type === "arrow") && (
|
||
<LineSettings selectedObject={selectedObject} onUpdate={onUpdate} />
|
||
)}
|
||
|
||
{selectedObject.type === "image" && (
|
||
<SizeSettings selectedObject={selectedObject} onUpdate={onUpdate} />
|
||
)}
|
||
|
||
{selectedObject.type === "link" && (
|
||
<LinkSettings selectedObject={selectedObject} onUpdate={onUpdate} />
|
||
)}
|
||
|
||
{selectedObject.type === "video" && (
|
||
<VideoSettings selectedObject={selectedObject} onUpdate={onUpdate} />
|
||
)}
|
||
|
||
|
||
|
||
{(selectedObject.type === "document" || selectedObject.type === "sticker") && (
|
||
<SizeSettings
|
||
selectedObject={selectedObject}
|
||
onUpdate={onUpdate}
|
||
defaultWidth={selectedObject.type === "document" ? 200 : 100}
|
||
defaultHeight={selectedObject.type === "document" ? 250 : 100}
|
||
/>
|
||
)}
|
||
|
||
{selectedObject.type === "grid" && (
|
||
<GridSettings selectedObject={selectedObject} onUpdate={onUpdate} />
|
||
)}
|
||
|
||
|
||
<TransformSettings selectedObject={selectedObject} onUpdate={onUpdate} />
|
||
</div>
|
||
);
|
||
};
|
||
|
||
export default ObjectSettings;
|
||
|