diff --git a/src/pages/editor/components/canvas/useDrawingHandlers.ts b/src/pages/editor/components/canvas/useDrawingHandlers.ts
index 13e42a1..f7c27d5 100644
--- a/src/pages/editor/components/canvas/useDrawingHandlers.ts
+++ b/src/pages/editor/components/canvas/useDrawingHandlers.ts
@@ -70,6 +70,7 @@ export const useDrawingHandlers = () => {
y: realPos.y,
text: "متن جدید",
fontSize: defaults.fontSize,
+ lineHeight: 1.2,
fontFamily: defaults.fontFamily,
fontWeight: defaults.fontWeight,
fill: defaults.fill,
diff --git a/src/pages/editor/components/sidebar/ObjectSettings.tsx b/src/pages/editor/components/sidebar/ObjectSettings.tsx
index 6d94c76..e2c63c4 100644
--- a/src/pages/editor/components/sidebar/ObjectSettings.tsx
+++ b/src/pages/editor/components/sidebar/ObjectSettings.tsx
@@ -2,6 +2,7 @@ import { Trash } from "iconsax-react";
import type { EditorObject } from "../../store/editorStore";
import {
ShapeSettings,
+ TextSettings,
LineSettings,
SizeSettings,
LinkSettings,
@@ -50,6 +51,9 @@ const ObjectSettings = ({
{selectedObject.type === "text" && }
+ {selectedObject.type === "text" && (
+
+ )}
{selectedObject.type === "rectangle" && (
diff --git a/src/pages/editor/components/sidebar/settings/TextSettings.tsx b/src/pages/editor/components/sidebar/settings/TextSettings.tsx
index 52f530b..4cfa2e7 100644
--- a/src/pages/editor/components/sidebar/settings/TextSettings.tsx
+++ b/src/pages/editor/components/sidebar/settings/TextSettings.tsx
@@ -7,6 +7,19 @@ type TextSettingsProps = {
onUpdate: (id: string, updates: Partial) => void;
};
+const normalizeNumericInput = (value: string): string => {
+ const persianDigits = "۰۱۲۳۴۵۶۷۸۹";
+ const arabicDigits = "٠١٢٣٤٥٦٧٨٩";
+
+ return value
+ .replace(/[۰-۹]/g, (d) => String(persianDigits.indexOf(d)))
+ .replace(/[٠-٩]/g, (d) => String(arabicDigits.indexOf(d)))
+ .replace("٫", ".")
+ .replace(",", ".");
+};
+
+const parseNumber = (value: string): number => Number(normalizeNumericInput(value));
+
const TextSettings = ({ selectedObject, onUpdate }: TextSettingsProps) => {
return (
<>
@@ -19,9 +32,22 @@ const TextSettings = ({ selectedObject, onUpdate }: TextSettingsProps) => {
label="اندازه فونت"
type="number"
value={selectedObject.fontSize || 24}
+ step="1"
onChange={(e) =>
onUpdate(selectedObject.id, {
- fontSize: parseInt(e.target.value) || 24,
+ fontSize: parseNumber(e.target.value) || 24,
+ })
+ }
+ />
+
+ onUpdate(selectedObject.id, {
+ lineHeight: parseNumber(e.target.value) || 1.2,
})
}
/>
diff --git a/src/pages/editor/components/tools/TextShape.tsx b/src/pages/editor/components/tools/TextShape.tsx
index 3584766..c5ba760 100644
--- a/src/pages/editor/components/tools/TextShape.tsx
+++ b/src/pages/editor/components/tools/TextShape.tsx
@@ -147,6 +147,7 @@ const TextShape = ({
obj.fontFamily,
obj.fontWeight,
obj.letterSpacing,
+ obj.lineHeight,
obj.width,
obj.height,
onUpdate,
@@ -313,6 +314,7 @@ const TextShape = ({
fontFamily={fontFamily}
fontStyle={konvaFontStyle}
letterSpacing={obj.letterSpacing ?? 0}
+ lineHeight={obj.lineHeight ?? 1.2}
align="right"
/>
diff --git a/src/pages/editor/store/editorStore.types.ts b/src/pages/editor/store/editorStore.types.ts
index 54015b5..d97962c 100644
--- a/src/pages/editor/store/editorStore.types.ts
+++ b/src/pages/editor/store/editorStore.types.ts
@@ -45,6 +45,7 @@ export type EditorObject = {
strokeWidth?: number;
text?: string;
fontSize?: number;
+ lineHeight?: number;
fontFamily?: string;
fontWeight?: string;
letterSpacing?: number;