fix: 화면 편집기 높이 입력 필드 1px 단위 조절 가능하도록 수정
- 문제: 높이 입력 시 10 단위로만 입력 가능 (예: 1080 입력 불가) - 원인: 격자 스냅 로직이 onChange마다 높이를 10/20 단위로 강제 반올림 - 해결: 1. 모든 number input 필드에 step="1" 추가 2. ScreenDesigner.tsx의 격자 스냅 로직 수정 (높이 스냅 제거) 3. UnifiedPropertiesPanel.tsx에 로컬 상태 추가하여 입력 중 스냅 방지 4. onBlur/Enter 시에만 실제 값 업데이트 수정 파일: - frontend/components/screen/ScreenDesigner.tsx - frontend/components/screen/panels/UnifiedPropertiesPanel.tsx - frontend/components/screen/panels/PropertiesPanel.tsx - frontend/components/screen/panels/ResolutionPanel.tsx - frontend/components/screen/panels/RowSettingsPanel.tsx - frontend/components/screen/panels/webtype-configs/NumberTypeConfigPanel.tsx - frontend/components/screen/panels/webtype-configs/TextTypeConfigPanel.tsx
This commit is contained in:
@@ -695,6 +695,7 @@ const PropertiesPanelComponent: React.FC<PropertiesPanelProps> = ({
|
||||
<Input
|
||||
id="positionX"
|
||||
type="number"
|
||||
step="1"
|
||||
value={(() => {
|
||||
const isDragging = dragState?.isDragging && dragState.draggedComponent?.id === selectedComponent?.id;
|
||||
if (isDragging) {
|
||||
@@ -725,6 +726,7 @@ const PropertiesPanelComponent: React.FC<PropertiesPanelProps> = ({
|
||||
<Input
|
||||
id="positionY"
|
||||
type="number"
|
||||
step="1"
|
||||
value={(() => {
|
||||
const isDragging = dragState?.isDragging && dragState.draggedComponent?.id === selectedComponent?.id;
|
||||
if (isDragging) {
|
||||
@@ -762,6 +764,7 @@ const PropertiesPanelComponent: React.FC<PropertiesPanelProps> = ({
|
||||
type="number"
|
||||
min={1}
|
||||
max={gridSettings?.columns || 12}
|
||||
step="1"
|
||||
value={(selectedComponent as any)?.gridColumns || 1}
|
||||
onChange={(e) => {
|
||||
const value = parseInt(e.target.value, 10);
|
||||
@@ -961,27 +964,27 @@ const PropertiesPanelComponent: React.FC<PropertiesPanelProps> = ({
|
||||
|
||||
<div className="col-span-2">
|
||||
<Label htmlFor="height" className="text-sm font-medium">
|
||||
최소 높이 (10px 단위)
|
||||
최소 높이
|
||||
</Label>
|
||||
<div className="mt-1 flex items-center space-x-2">
|
||||
<Input
|
||||
id="height"
|
||||
type="number"
|
||||
min="1"
|
||||
max="100"
|
||||
value={Math.round((localInputs.height || 10) / 10)}
|
||||
min="10"
|
||||
max="2000"
|
||||
step="1"
|
||||
value={localInputs.height || 40}
|
||||
onChange={(e) => {
|
||||
const units = Math.max(1, Math.min(100, Number(e.target.value)));
|
||||
const newHeight = units * 10;
|
||||
const newHeight = Math.max(10, Number(e.target.value));
|
||||
setLocalInputs((prev) => ({ ...prev, height: newHeight.toString() }));
|
||||
onUpdateProperty("size.height", newHeight);
|
||||
}}
|
||||
className="flex-1"
|
||||
/>
|
||||
<span className="text-sm text-gray-500">단위 = {localInputs.height || 10}px</span>
|
||||
<span className="text-sm text-gray-500">{localInputs.height || 40}px</span>
|
||||
</div>
|
||||
<p className="mt-1 text-xs text-gray-500">
|
||||
1단위 = 10px (현재 {Math.round((localInputs.height || 10) / 10)}단위) - 내부 콘텐츠에 맞춰 늘어남
|
||||
높이 자유 조절 (10px ~ 2000px, 1px 단위)
|
||||
</p>
|
||||
</div>
|
||||
</>
|
||||
@@ -996,11 +999,12 @@ const PropertiesPanelComponent: React.FC<PropertiesPanelProps> = ({
|
||||
<Label htmlFor="zIndex" className="text-sm font-medium">
|
||||
Z-Index (레이어 순서)
|
||||
</Label>
|
||||
<Input
|
||||
<Input
|
||||
id="zIndex"
|
||||
type="number"
|
||||
min="0"
|
||||
max="9999"
|
||||
step="1"
|
||||
value={localInputs.positionZ}
|
||||
onChange={(e) => {
|
||||
const newValue = e.target.value;
|
||||
@@ -1266,6 +1270,7 @@ const PropertiesPanelComponent: React.FC<PropertiesPanelProps> = ({
|
||||
type="number"
|
||||
min="1"
|
||||
max="12"
|
||||
step="1"
|
||||
value={(selectedComponent as AreaComponent).layoutConfig?.gridColumns || 3}
|
||||
onChange={(e) => {
|
||||
const value = Number(e.target.value);
|
||||
@@ -1279,6 +1284,7 @@ const PropertiesPanelComponent: React.FC<PropertiesPanelProps> = ({
|
||||
<Input
|
||||
type="number"
|
||||
min="0"
|
||||
step="1"
|
||||
value={(selectedComponent as AreaComponent).layoutConfig?.gridGap || 16}
|
||||
onChange={(e) => {
|
||||
const value = Number(e.target.value);
|
||||
@@ -1315,6 +1321,7 @@ const PropertiesPanelComponent: React.FC<PropertiesPanelProps> = ({
|
||||
<Input
|
||||
type="number"
|
||||
min="0"
|
||||
step="1"
|
||||
value={(selectedComponent as AreaComponent).layoutConfig?.gap || 16}
|
||||
onChange={(e) => {
|
||||
const value = Number(e.target.value);
|
||||
@@ -1345,6 +1352,7 @@ const PropertiesPanelComponent: React.FC<PropertiesPanelProps> = ({
|
||||
<Input
|
||||
type="number"
|
||||
min="100"
|
||||
step="1"
|
||||
value={(selectedComponent as AreaComponent).layoutConfig?.sidebarWidth || 200}
|
||||
onChange={(e) => {
|
||||
const value = Number(e.target.value);
|
||||
|
||||
Reference in New Issue
Block a user