优化:支持文字排版

This commit is contained in:
iqudoo
2026-06-12 19:49:24 +08:00
parent 89b59ecc1b
commit 7ad1f59ae1
7 changed files with 247 additions and 72 deletions

View File

@@ -48,6 +48,7 @@ import {
Link2,
Plus,
Ruler,
RotateCw,
Barcode,
QrCode,
Image as ImageIcon,
@@ -181,7 +182,10 @@ export const PropSidebar: React.FC<PropSidebarProps> = ({
const togglePanel = (key: keyof PanelCollapseState) => {
setPanelCollapsed((prev) => {
const next = { ...prev, [key]: !prev[key] };
const isCollapsed = prev[key];
const next: PanelCollapseState = isCollapsed
? { content: true, properties: true, layers: true, [key]: false }
: { ...prev, [key]: true };
try {
localStorage.setItem(PANEL_COLLAPSE_STORAGE_KEY, JSON.stringify(next));
} catch {
@@ -1028,6 +1032,32 @@ export const PropSidebar: React.FC<PropSidebarProps> = ({
</div>
</div>
<div className="space-y-2">
<label className="ps-field-label mb-0"></label>
<div className="ps-toggle-group">
<button
type="button"
onClick={() =>
handleElemChange({ ...selectedElem, textWritingMode: 'horizontal' })
}
className={`ps-toggle-btn ${(selectedElem.textWritingMode ?? 'horizontal') === 'horizontal' ? 'active' : ''}`}
title="横排"
>
</button>
<button
type="button"
onClick={() =>
handleElemChange({ ...selectedElem, textWritingMode: 'vertical' })
}
className={`ps-toggle-btn ${selectedElem.textWritingMode === 'vertical' ? 'active' : ''}`}
title="竖排"
>
</button>
</div>
</div>
<div className="space-y-2">
<label className="ps-field-label mb-0"></label>
<div className="flex flex-wrap items-center gap-2">
@@ -1234,6 +1264,26 @@ export const PropSidebar: React.FC<PropSidebarProps> = ({
}`}
/>
</div>
<div className="col-span-2">
<label className="ps-field-label flex items-center gap-1">
</label>
<div className="flex items-center gap-2">
<PropInput
type="number"
step="1"
min="-360"
max="360"
value={selectedElem.rotation ?? 0}
onCommit={(val) => {
let deg = Number(val) || 0;
deg = ((deg % 360) + 360) % 360;
handleElemChange({ ...selectedElem, rotation: deg });
}}
className="ps-field font-mono flex-1"
/>
</div>
</div>
</div>
</div>