feat(WEB): 입력 컴포넌트 공통화 및 UI 개선

- 숫자/통화/전화번호/사업자번호 등 특수 입력 컴포넌트 추가
- MobileCard 컴포넌트 통합 (ListMobileCard 제거)
- IntegratedListTemplateV2 페이지네이션 버그 수정 (NaN 이슈)
- IntegratedDetailTemplate 타이틀 중복 수정
- 문서 시스템 컴포넌트 추가
- 헤더 벨 아이콘 포커스 스타일 개선

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
유병철
2026-01-21 20:56:17 +09:00
parent cfa72fe19b
commit 835c06ce94
190 changed files with 8575 additions and 2354 deletions

View File

@@ -6,7 +6,7 @@
'use client';
import { Label } from '@/components/ui/label';
import { Input } from '@/components/ui/input';
import { NumberInput } from '@/components/ui/number-input';
import type { DynamicFieldRendererProps } from '../types';
export function NumberField({
@@ -30,20 +30,19 @@ export function NumberField({
{unit && ` (${unit})`}
{field.is_required && <span className="text-red-500"> *</span>}
</Label>
<Input
<NumberInput
id={fieldKey}
type="number"
placeholder={field.placeholder || `${field.field_name}을(를) 입력하세요`}
value={stringValue}
onChange={(e) => {
const newValue = e.target.value;
// 빈 문자열이면 null, 아니면 숫자로 변환
onChange(newValue === '' ? null : Number(newValue));
value={value !== null && value !== undefined ? Number(value) : undefined}
onChange={(newValue) => {
// undefined이면 null, 아니면 숫자로 변환
onChange(newValue ?? null);
}}
disabled={disabled}
step={step}
min={field.validation_rules?.min}
max={field.validation_rules?.max}
allowDecimal={step !== 1}
className={error ? 'border-red-500' : ''}
/>
{error && (