{"version":3,"file":"JInput.vue.cjs","sources":["../../../../src/components/atoms/JInput.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { Input } from '@/components/shadcn'\n\ntype StyleType =\n  | 'default'   // 기본 스타일\n  | 'error'     // 에러 상태 (빨강 테두리)\n  | 'success'   // 성공 상태 (초록 테두리)\n  | 'warning'   // 경고 상태 (주황 테두리)\n  | 'sm'        // 작은 크기\n  | 'lg'        // 큰 크기\n\nconst props = withDefaults(\n  defineProps<{\n    modelValue?: string | number\n    type?: string\n    placeholder?: string\n    disabled?: boolean\n    readonly?: boolean\n    required?: boolean\n    name?: string\n    id?: string\n    class?: string\n    /** 스타일 프리셋 */\n    styletype?: StyleType\n  }>(),\n  {\n    type: 'text',\n    placeholder: '',\n    disabled: false,\n    readonly: false,\n    required: false,\n    styletype: 'default',\n  },\n)\n\nconst emit = defineEmits<{\n  'update:modelValue': [value: string | number]\n  'change': [value: string | number]\n  'focus': [event: FocusEvent]\n  'blur': [event: FocusEvent]\n}>()\n\n/**\n * styletype -> class 매핑\n */\nconst STYLE_PRESETS: Record<StyleType, { class: string }> = {\n  default: { class: '' },\n  error: { \n    class: 'border-destructive focus-visible:ring-destructive',\n  },\n  success: { \n    class: 'border-green-500 focus-visible:ring-green-500',\n  },\n  warning: { \n    class: 'border-amber-500 focus-visible:ring-amber-500',\n  },\n  sm: { \n    class: 'h-7 text-xs px-2',\n  },\n  lg: { \n    class: 'h-12 text-base px-4',\n  },\n}\n\n/** 최종 바인딩: 직접 넘긴 class가 있으면 styletype 기본값과 병합 */\nconst mapped = computed(() => {\n  const styleKey = props.styletype || 'default'\n  const preset = STYLE_PRESETS[styleKey] ?? STYLE_PRESETS.default\n  const finalClass = [preset?.class, props.class].filter(Boolean).join(' ')\n  \n  return {\n    type: props.type,\n    placeholder: props.placeholder,\n    disabled: props.disabled,\n    readonly: props.readonly,\n    required: props.required,\n    name: props.name,\n    id: props.id,\n    class: finalClass,\n  }\n})\n\nconst handleInput = (value: string | number) => {\n  emit('update:modelValue', value)\n  emit('change', value)\n}\n</script>\n\n<template>\n  <Input \n    v-bind=\"mapped\" \n    :model-value=\"modelValue\" \n    @update:model-value=\"handleInput\"\n    @focus=\"emit('focus', $event)\"\n    @blur=\"emit('blur', $event)\"\n  >\n    <slot />\n  </Input>\n</template>\n"],"names":["props","__props","emit","__emit","STYLE_PRESETS","mapped","computed","styleKey","finalClass","handleInput","value","_createBlock","_unref","Input","_mergeProps","_cache","$event","_renderSlot","_ctx"],"mappings":"2hBAYA,MAAMA,EAAQC,EAwBRC,EAAOC,EAUPC,EAAsD,CAC1D,QAAS,CAAE,MAAO,EAAA,EAClB,MAAO,CACL,MAAO,mDAAA,EAET,QAAS,CACP,MAAO,+CAAA,EAET,QAAS,CACP,MAAO,+CAAA,EAET,GAAI,CACF,MAAO,kBAAA,EAET,GAAI,CACF,MAAO,qBAAA,CACT,EAIIC,EAASC,EAAAA,SAAS,IAAM,CAC5B,MAAMC,EAAWP,EAAM,WAAa,UAE9BQ,EAAa,EADJJ,EAAcG,CAAQ,GAAKH,EAAc,UAC5B,MAAOJ,EAAM,KAAK,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,EAExE,MAAO,CACL,KAAMA,EAAM,KACZ,YAAaA,EAAM,YACnB,SAAUA,EAAM,SAChB,SAAUA,EAAM,SAChB,SAAUA,EAAM,SAChB,KAAMA,EAAM,KACZ,GAAIA,EAAM,GACV,MAAOQ,CAAA,CAEX,CAAC,EAEKC,EAAeC,GAA2B,CAC9CR,EAAK,oBAAqBQ,CAAK,EAC/BR,EAAK,SAAUQ,CAAK,CACtB,8BAIEC,EAAAA,YAQQC,EAAAA,MAAAC,EAAAA,OAAA,EARRC,EAAAA,WAQQT,EAAA,MAPQ,CACb,cAAaJ,EAAA,WACb,sBAAoBQ,EACpB,QAAKM,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAEd,EAAI,QAAUc,CAAM,GAC3B,OAAID,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAEd,EAAI,OAASc,CAAM,EAAA,sBAE1B,IAAQ,CAARC,aAAQC,EAAA,OAAA,SAAA,CAAA"}