From 5de205a84f3d79f45610736e42e08d355de0dc13 Mon Sep 17 00:00:00 2001 From: hamid zarghami Date: Wed, 6 May 2026 09:22:06 +0330 Subject: [PATCH] set text line height --- .../components/canvas/useDrawingHandlers.ts | 1 + .../components/sidebar/ObjectSettings.tsx | 4 +++ .../sidebar/settings/TextSettings.tsx | 28 ++++++++++++++++++- .../editor/components/tools/TextShape.tsx | 2 ++ src/pages/editor/store/editorStore.types.ts | 1 + 5 files changed, 35 insertions(+), 1 deletion(-) 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;