{"version":3,"file":"JSearchInput.vue.cjs","sources":["../../../../src/components/atoms/JSearchInput.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { Search } from 'lucide-vue-next'\nimport { Input } from '@/components/shadcn'\nimport { JButton } from '@/components/atoms'\n\ntype StyleType =\n  | 'default'   // 기본 크기\n  | 'sm'        // 작은 크기\n  | 'lg'        // 큰 크기\n  | 'error'     // 에러 상태\n  | 'success'   // 성공 상태\n  | 'warning'   // 경고 상태\n\nconst props = withDefaults(\n  defineProps<{\n    modelValue?: string | number\n    placeholder?: string\n    /** 입력란 비활성화 (버튼도 함께 비활성화) */\n    disabled?: boolean\n    /** 입력란을 읽기 전용으로 (버튼은 동작). 팝업으로만 값을 채울 때 true */\n    readonly?: boolean\n    /** 찾기 버튼 텍스트 */\n    buttonText?: string\n    /** 찾기 버튼만 별도 비활성화 */\n    buttonDisabled?: boolean\n    /** 찾기 버튼에 돋보기 아이콘 표시 여부 */\n    showIcon?: boolean\n    name?: string\n    id?: string\n    class?: string\n    /** 스타일 프리셋 */\n    styletype?: StyleType\n  }>(),\n  {\n    placeholder: '',\n    disabled: false,\n    readonly: true,\n    buttonText: '찾기',\n    buttonDisabled: false,\n    showIcon: true,\n    styletype: 'default',\n  },\n)\n\nconst emit = defineEmits<{\n  'update:modelValue': [value: string | number]\n  'change': [value: string | number]\n  /** 찾기 버튼 클릭 */\n  'search': []\n  'focus': [event: FocusEvent]\n  'blur': [event: FocusEvent]\n}>()\n\nconst INPUT_STYLE: Record<StyleType, string> = {\n  default: '',\n  sm: 'h-7 text-xs px-2',\n  lg: 'h-12 text-base px-4',\n  error: 'border-destructive focus-visible:ring-destructive',\n  success: 'border-green-500 focus-visible:ring-green-500',\n  warning: 'border-amber-500 focus-visible:ring-amber-500',\n}\n\n// JButton styletype 매핑 (크기만 맞춤)\nconst BUTTON_STYLETYPE_MAP: Record<StyleType, 'sm' | 'default' | 'lg'> = {\n  default: 'default',\n  sm: 'sm',\n  lg: 'lg',\n  error: 'default',\n  success: 'default',\n  warning: 'default',\n}\n\nconst inputClass = computed(() =>\n  [INPUT_STYLE[props.styletype], props.class].filter(Boolean).join(' '),\n)\n\nconst buttonStyletype = computed(() => BUTTON_STYLETYPE_MAP[props.styletype])\n\nconst isButtonDisabled = computed(() => props.disabled || props.buttonDisabled)\n\nconst handleInput = (value: string | number) => {\n  emit('update:modelValue', value)\n  emit('change', value)\n}\n\nconst handleSearch = () => {\n  emit('search')\n}\n</script>\n\n<template>\n  <div class=\"flex items-center gap-1\">\n    <Input\n      :id=\"id\"\n      :model-value=\"modelValue\"\n      :placeholder=\"placeholder\"\n      :disabled=\"disabled\"\n      :readonly=\"readonly\"\n      :name=\"name\"\n      :class=\"inputClass\"\n      class=\"flex-1 min-w-0\"\n      @update:model-value=\"handleInput\"\n      @focus=\"emit('focus', $event)\"\n      @blur=\"emit('blur', $event)\"\n    />\n    <JButton\n      type=\"button\"\n      variant=\"outline\"\n      :styletype=\"buttonStyletype\"\n      :disabled=\"isButtonDisabled\"\n      class=\"shrink-0\"\n      @click=\"handleSearch\"\n    >\n      <Search v-if=\"showIcon\" class=\"h-3.5 w-3.5\" />\n      {{ buttonText }}\n    </JButton>\n  </div>\n</template>\n"],"names":["props","__props","emit","__emit","INPUT_STYLE","BUTTON_STYLETYPE_MAP","inputClass","computed","buttonStyletype","isButtonDisabled","handleInput","value","handleSearch","_openBlock","_createElementBlock","_hoisted_1","_createVNode","_unref","Input","_normalizeClass","_cache","$event","JButton","_createBlock","Search","_createTextVNode"],"mappings":"y1CAcA,MAAMA,EAAQC,EA+BRC,EAAOC,EASPC,EAAyC,CAC7C,QAAS,GACT,GAAI,mBACJ,GAAI,sBACJ,MAAO,oDACP,QAAS,gDACT,QAAS,+CAAA,EAILC,EAAmE,CACvE,QAAS,UACT,GAAI,KACJ,GAAI,KACJ,MAAO,UACP,QAAS,UACT,QAAS,SAAA,EAGLC,EAAaC,EAAAA,SAAS,IAC1B,CAACH,EAAYJ,EAAM,SAAS,EAAGA,EAAM,KAAK,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAA,EAGhEQ,EAAkBD,EAAAA,SAAS,IAAMF,EAAqBL,EAAM,SAAS,CAAC,EAEtES,EAAmBF,EAAAA,SAAS,IAAMP,EAAM,UAAYA,EAAM,cAAc,EAExEU,EAAeC,GAA2B,CAC9CT,EAAK,oBAAqBS,CAAK,EAC/BT,EAAK,SAAUS,CAAK,CACtB,EAEMC,EAAe,IAAM,CACzBV,EAAK,QAAQ,CACf,gBAIEW,YAAA,EAAAC,qBAyBM,MAzBNC,EAyBM,CAxBJC,cAYEC,EAAAA,MAAAC,EAAAA,OAAA,EAAA,CAXC,GAAIjB,EAAA,GACJ,cAAaA,EAAA,WACb,YAAaA,EAAA,YACb,SAAUA,EAAA,SACV,SAAUA,EAAA,SACV,KAAMA,EAAA,KACN,MAAKkB,EAAAA,eAAA,CAAEb,EAAA,MACF,gBAAgB,CAAA,EACrB,sBAAoBI,EACpB,QAAKU,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAEnB,EAAI,QAAUmB,CAAM,GAC3B,OAAID,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAEnB,EAAI,OAASmB,CAAM,EAAA,kFAE5BL,cAUUC,EAAAA,MAAAK,EAAAA,OAAA,EAAA,CATR,KAAK,SACL,QAAQ,UACP,UAAWd,EAAA,MACX,SAAUC,EAAA,MACX,MAAM,WACL,QAAOG,CAAA,qBAER,IAA8C,CAAhCX,EAAA,wBAAdsB,EAAAA,YAA8CN,EAAAA,MAAAO,EAAAA,MAAA,EAAA,OAAtB,MAAM,aAAA,gCAAgBC,EAAAA,gBAAA,sBAC3CxB,EAAA,UAAU,EAAA,CAAA,CAAA"}