{"version":3,"file":"JGroupCombo.vue.cjs","sources":["../../../../src/components/molecules/JGroupCombo.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport { Select, SelectContent, SelectTrigger, SelectValue } from '@/components/shadcn'\r\nimport SelectGroup from '@/components/shadcn/SelectGroup.vue'\r\nimport SelectLabel from '@/components/shadcn/SelectLabel.vue'\r\nimport SelectItem from '@/components/shadcn/SelectItem.vue'\r\n\r\nexport interface Option {\r\n  value: string | number\r\n  label: string\r\n}\r\n\r\nexport interface GroupedOption {\r\n  groupLabel: string\r\n  options: Option[]\r\n}\r\n\r\ntype StyleType =\r\n  | 'default'   // 기본 스타일\r\n  | 'error'     // 에러 상태\r\n  | 'success'   // 성공 상태\r\n  | 'warning'   // 경고 상태\r\n  | 'sm'        // 작은 크기\r\n  | 'lg'        // 큰 크기\r\n\r\nconst props = withDefaults(\r\n  defineProps<{\r\n    modelValue?: string | number\r\n    groupedOptions?: GroupedOption[]\r\n    placeholder?: string\r\n    disabled?: boolean\r\n    required?: boolean\r\n    name?: string\r\n    id?: string\r\n    class?: string\r\n    /** 스타일 프리셋 */\r\n    styletype?: StyleType\r\n  }>(),\r\n  {\r\n    groupedOptions: () => [],\r\n    placeholder: '선택하세요',\r\n    disabled: false,\r\n    required: false,\r\n    styletype: 'default',\r\n  },\r\n)\r\n\r\nconst emit = defineEmits<{\r\n  'update:modelValue': [value: string | number]\r\n  'change': [value: string | number]\r\n  'focus': [event: FocusEvent]\r\n  'blur': [event: FocusEvent]\r\n}>()\r\n\r\n/**\r\n * styletype -> class 매핑\r\n * JCombo와 동일한 스타일 프리셋 사용\r\n */\r\nconst STYLE_PRESETS: Record<StyleType, { class: string }> = {\r\n  default: { class: '' },\r\n  error: { \r\n    class: 'border-destructive focus:ring-destructive',\r\n  },\r\n  success: { \r\n    class: 'border-green-500 focus:ring-green-500',\r\n  },\r\n  warning: { \r\n    class: 'border-amber-500 focus:ring-amber-500',\r\n  },\r\n  sm: { \r\n    class: 'h-8 text-xs px-2',\r\n  },\r\n  lg: { \r\n    class: 'h-12 text-base px-4',\r\n  },\r\n}\r\n\r\nconst triggerClass = computed(() => {\r\n  const styleKey = props.styletype || 'default'\r\n  const preset = STYLE_PRESETS[styleKey] ?? STYLE_PRESETS.default\r\n  return [preset?.class, props.class].filter(Boolean).join(' ')\r\n})\r\n\r\nconst handleChange = (value: string | number) => {\r\n  emit('update:modelValue', value)\r\n  emit('change', value)\r\n}\r\n</script>\r\n\r\n<template>\r\n  <Select \r\n    :model-value=\"modelValue\" \r\n    :disabled=\"disabled\"\r\n    :required=\"required\"\r\n    :name=\"name\"\r\n    @update:model-value=\"(value) => handleChange(value as string | number)\"\r\n    @focus=\"emit('focus', $event as FocusEvent)\"\r\n    @blur=\"emit('blur', $event as FocusEvent)\"\r\n  >\r\n    <SelectTrigger :id=\"id\" :class=\"triggerClass\">\r\n      <SelectValue :placeholder=\"placeholder\" />\r\n    </SelectTrigger>\r\n    <SelectContent>\r\n      <SelectGroup v-for=\"group in groupedOptions\" :key=\"group.groupLabel\">\r\n        <SelectLabel>{{ group.groupLabel }}</SelectLabel>\r\n        <SelectItem \r\n          v-for=\"option in group.options\" \r\n          :key=\"option.value\" \r\n          :value=\"String(option.value)\"\r\n        >\r\n          {{ option.label }}\r\n        </SelectItem>\r\n      </SelectGroup>\r\n    </SelectContent>\r\n  </Select>\r\n</template>\r\n\r\n"],"names":["props","__props","emit","__emit","STYLE_PRESETS","triggerClass","computed","styleKey","handleChange","value","_createBlock","_unref","Select","_cache","$event","_createVNode","SelectTrigger","SelectValue","SelectContent","_createElementBlock","_Fragment","_renderList","group","SelectGroup","SelectLabel","_createTextVNode","_toDisplayString","_openBlock","option","SelectItem"],"mappings":"kxBAyBA,MAAMA,EAAQC,EAsBRC,EAAOC,EAWPC,EAAsD,CAC1D,QAAS,CAAE,MAAO,EAAA,EAClB,MAAO,CACL,MAAO,2CAAA,EAET,QAAS,CACP,MAAO,uCAAA,EAET,QAAS,CACP,MAAO,uCAAA,EAET,GAAI,CACF,MAAO,kBAAA,EAET,GAAI,CACF,MAAO,qBAAA,CACT,EAGIC,EAAeC,EAAAA,SAAS,IAAM,CAClC,MAAMC,EAAWP,EAAM,WAAa,UAEpC,MAAO,EADQI,EAAcG,CAAQ,GAAKH,EAAc,UACxC,MAAOJ,EAAM,KAAK,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAC9D,CAAC,EAEKQ,EAAgBC,GAA2B,CAC/CP,EAAK,oBAAqBO,CAAK,EAC/BP,EAAK,SAAUO,CAAK,CACtB,8BAIEC,EAAAA,YAwBSC,EAAAA,MAAAC,EAAAA,OAAA,EAAA,CAvBN,cAAaX,EAAA,WACb,SAAUA,EAAA,SACV,SAAUA,EAAA,SACV,KAAMA,EAAA,KACN,sBAAkBY,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAGJ,GAAUD,EAAaC,CAAK,GACjD,QAAKI,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAEZ,EAAI,QAAUY,CAAM,GAC3B,OAAID,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAEZ,EAAI,OAASY,CAAM,EAAA,qBAE1B,IAEgB,CAFhBC,cAEgBJ,EAAAA,MAAAK,EAAAA,OAAA,EAAA,CAFA,GAAIf,EAAA,GAAK,uBAAOI,EAAA,KAAY,CAAA,qBAC1C,IAA0C,CAA1CU,EAAAA,YAA0CJ,EAAAA,MAAAM,SAAA,EAAA,CAA5B,YAAahB,EAAA,aAAW,KAAA,EAAA,CAAA,aAAA,CAAA,CAAA,0BAExCc,EAAAA,YAWgBJ,EAAAA,MAAAO,SAAA,EAAA,KAAA,mBAVD,IAA+B,kBAA5CC,EAAAA,mBAScC,EAAAA,SAAA,KAAAC,EAAAA,WATepB,EAAA,eAATqB,kBAApBZ,EAAAA,YASca,UAAA,CATgC,IAAKD,EAAM,UAAA,qBACvD,IAAiD,CAAjDP,EAAAA,YAAiDS,EAAAA,QAAA,KAAA,mBAApC,IAAsB,CAAnBC,EAAAA,gBAAAC,EAAAA,gBAAAJ,EAAM,UAAU,EAAA,CAAA,CAAA,eAChCK,YAAA,EAAA,EAAAR,EAAAA,mBAMaC,EAAAA,SAAA,KAAAC,EAAAA,WALMC,EAAM,QAAhBM,kBADTlB,EAAAA,YAMamB,UAAA,CAJV,IAAKD,EAAO,MACZ,MAAO,OAAOA,EAAO,KAAK,CAAA,qBAE3B,IAAkB,CAAfH,EAAAA,gBAAAC,EAAAA,gBAAAE,EAAO,KAAK,EAAA,CAAA,CAAA"}