// 클라이언트용 InputHint 타입 + resolveInputHint. // // ⚠️ 원본(진실의 원천): server/service/kpi-metric/kpi-metric-meta.ts // client/server tsconfig 가 분리되어 server 를 import 할 수 없어 동형 복제한다. // 변경 시 양쪽을 함께 수정할 것. export type InputWidget = 'number' | 'rating' | 'select' | 'date' | 'text' | 'toggle' export interface InputHint { widget: InputWidget min?: number max?: number step?: number options?: { value: string | number; label: string }[] required?: boolean decimals?: number readonly?: boolean hasPlan?: boolean placeholder?: string default?: any } export interface KpiMetricLike { meta?: { input?: InputHint; [k: string]: any } | null collectType?: string } /** meta.input 우선, 없으면 number 폴백(이름추측 금지). readonly 는 명시값 우선, 미지정+AUTO 면 true. */ export function resolveInputHint(metric: KpiMetricLike | null | undefined): InputHint { const isAuto = metric?.collectType === 'AUTO' const hint = metric?.meta?.input if (hint?.widget) { const readonly = hint.readonly ?? isAuto if (hint.widget === 'rating') { return { ...hint, max: hint.max ?? 5, step: hint.step ?? 1, readonly } } return { ...hint, readonly } } return { widget: 'number', readonly: isAuto } }