{"version":3,"file":"JLabel.vue.cjs","sources":["../../../../src/components/atoms/JLabel.vue"],"sourcesContent":["<!-- TODO: 컴포넌트 래핑 초안 - 스타일 및 기능 개선 필요 -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { Label } from '@/components/shadcn'\nimport { cn } from '@/lib/utils'\n\ntype StyleType =\n  | 'default'   // 기본 스타일\n  | 'required' // 필수 필드 표시 (빨간 별표)\n  | 'optional' // 선택 필드 표시 (회색 텍스트)\n  | 'error'     // 에러 상태 (빨간 텍스트)\n  | 'success'   // 성공 상태 (초록 텍스트)\n  | 'warning'   // 경고 상태 (주황 텍스트)\n  | 'sm'        // 작은 크기\n  | 'lg'        // 큰 크기\n\nconst props = withDefaults(\n  defineProps<{\n    /** 라벨 텍스트 */\n    text?: string\n    /** 필수 필드 여부 */\n    required?: boolean\n    /** 스타일 프리셋 */\n    styletype?: StyleType\n    /** HTML for 속성 (연결할 input의 id) */\n    for?: string\n    /** 추가 클래스 (외부 커스터마이징용) */\n    class?: string\n  }>(),\n  {\n    text: '',\n    required: false,\n    styletype: 'default',\n  },\n)\n\n/**\n * styletype -> class 매핑\n */\nconst STYLE_PRESETS: Record<StyleType, { class: string }> = {\n  default: { class: '' },\n  required: { \n    class: 'text-red-600',\n  },\n  optional: { \n    class: 'text-gray-500',\n  },\n  error: { \n    class: 'text-red-600',\n  },\n  success: { \n    class: 'text-green-600',\n  },\n  warning: { \n    class: 'text-amber-600',\n  },\n  sm: { \n    class: 'text-xs',\n  },\n  lg: { \n    class: 'text-base',\n  },\n}\n\n/** 최종 바인딩: styletype에 따른 클래스 적용 */\nconst mapped = computed(() => {\n  const styleKey = props.styletype || 'default'\n  const preset = STYLE_PRESETS[styleKey] ?? STYLE_PRESETS.default\n  \n  return {\n    for: props.for,\n    class: preset?.class || '',\n  }\n})\n\nconst displayText = computed(() => {\n  if (props.text) {\n    return props.text\n  }\n  return ''\n})\n</script>\n\n<template>\n  <Label\n    :for=\"mapped.for\"\n    :class=\"cn(\n      'text-xs font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70',\n      mapped.class,\n      props.class\n    )\"\n  >\n    <span v-if=\"required && styletype === 'required'\" class=\"text-red-500 mr-1\">*</span>\n    <span v-else-if=\"required\" class=\"text-red-500 mr-1\">*</span>\n    {{ displayText }}\n    <slot />\n  </Label>\n</template>\n"],"names":["props","__props","STYLE_PRESETS","mapped","computed","styleKey","preset","displayText","_createBlock","_unref","Label","cn","_createElementBlock","_hoisted_1","_hoisted_2","_toDisplayString","_renderSlot","_ctx"],"mappings":"+cAgBA,MAAMA,EAAQC,EAuBRC,EAAsD,CAC1D,QAAS,CAAE,MAAO,EAAA,EAClB,SAAU,CACR,MAAO,cAAA,EAET,SAAU,CACR,MAAO,eAAA,EAET,MAAO,CACL,MAAO,cAAA,EAET,QAAS,CACP,MAAO,gBAAA,EAET,QAAS,CACP,MAAO,gBAAA,EAET,GAAI,CACF,MAAO,SAAA,EAET,GAAI,CACF,MAAO,WAAA,CACT,EAIIC,EAASC,EAAAA,SAAS,IAAM,CAC5B,MAAMC,EAAWL,EAAM,WAAa,UAC9BM,EAASJ,EAAcG,CAAQ,GAAKH,EAAc,QAExD,MAAO,CACL,IAAKF,EAAM,IACX,MAAOM,GAAQ,OAAS,EAAA,CAE5B,CAAC,EAEKC,EAAcH,EAAAA,SAAS,IACvBJ,EAAM,KACDA,EAAM,KAER,EACR,8BAICQ,EAAAA,YAYQC,EAAAA,MAAAC,EAAAA,OAAA,EAAA,CAXL,IAAKP,EAAA,MAAO,IACZ,uBAAOM,EAAAA,MAAAE,IAAA,+FAA8GR,EAAA,MAAO,MAAaH,EAAM,KAAA,uBAMhJ,IAAoF,CAAxEC,EAAA,UAAYA,EAAA,YAAS,0BAAjCW,EAAAA,mBAAoF,OAApFC,EAA4E,GAAC,GAC5DZ,EAAA,wBAAjBW,EAAAA,mBAA6D,OAA7DE,EAAqD,GAAC,iDAAO,IAC7DC,kBAAGR,EAAA,KAAW,EAAG,IACjB,CAAA,EAAAS,aAAQC,EAAA,OAAA,SAAA,CAAA"}