{"version":3,"file":"JRadio.vue.cjs","sources":["../../../../src/components/atoms/JRadio.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport { RadioGroup, RadioGroupItem } from '@/components/shadcn'\r\n\r\nexport interface Option {\r\n  value: string | number\r\n  label: string\r\n  disabled?: boolean\r\n}\r\n\r\ntype StyleType =\r\n  | 'default'   // 기본 스타일\r\n  | 'primary'   // 강조 스타일 (파랑)\r\n  | 'success'   // 성공 스타일 (초록)\r\n  | 'danger'    // 위험 스타일 (빨강)\r\n  | 'sm'        // 작은 크기\r\n  | 'lg'        // 큰 크기\r\n  | 'horizontal' // 가로 배치\r\n  | 'vertical'  // 세로 배치\r\n\r\nconst props = withDefaults(\r\n  defineProps<{\r\n    modelValue?: string | number\r\n    options?: Option[]\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    options: () => [],\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}>()\r\n\r\n/**\r\n * styletype -> class 매핑\r\n */\r\nconst STYLE_PRESETS: Record<StyleType, { groupClass: string; itemClass: string }> = {\r\n  default: { \r\n    groupClass: '',\r\n    itemClass: '',\r\n  },\r\n  primary: { \r\n    groupClass: '',\r\n    itemClass: 'border-blue-500 text-blue-500',\r\n  },\r\n  success: { \r\n    groupClass: '',\r\n    itemClass: 'border-green-500 text-green-600',\r\n  },\r\n  danger: { \r\n    groupClass: '',\r\n    itemClass: 'border-destructive text-destructive',\r\n  },\r\n  sm: { \r\n    groupClass: '',\r\n    itemClass: 'h-3.5 w-3.5',\r\n  },\r\n  lg: { \r\n    groupClass: '',\r\n    itemClass: 'h-5 w-5',\r\n  },\r\n  horizontal: { \r\n    groupClass: 'flex flex-row gap-4',\r\n    itemClass: '',\r\n  },\r\n  vertical: { \r\n    groupClass: 'grid gap-2',\r\n    itemClass: '',\r\n  },\r\n}\r\n\r\nconst groupClass = computed(() => {\r\n  const styleKey = props.styletype || 'default'\r\n  const preset = STYLE_PRESETS[styleKey] ?? STYLE_PRESETS.default\r\n  return [preset?.groupClass, props.class].filter(Boolean).join(' ')\r\n})\r\n\r\nconst itemClass = computed(() => {\r\n  const styleKey = props.styletype || 'default'\r\n  const preset = STYLE_PRESETS[styleKey] ?? STYLE_PRESETS.default\r\n  return preset?.itemClass\r\n})\r\n\r\nconst handleChange = (value: string) => {\r\n  emit('update:modelValue', value)\r\n  emit('change', value)\r\n}\r\n</script>\r\n\r\n<template>\r\n  <RadioGroup \r\n    :id=\"id\" \r\n    :model-value=\"String(modelValue)\"\r\n    :disabled=\"disabled\"\r\n    :required=\"required\"\r\n    :name=\"name\"\r\n    :class=\"groupClass\" \r\n    @update:model-value=\"handleChange\"\r\n  >\r\n    <div v-for=\"option in options\" :key=\"option.value\" :class=\"styletype === 'vertical' ? 'block' : 'flex items-center space-x-2'\">\r\n      <RadioGroupItem \r\n        :id=\"String(option.value)\" \r\n        :value=\"String(option.value)\" \r\n        :disabled=\"option.disabled\"\r\n        :class=\"itemClass\"\r\n      />\r\n      <label\n        :for=\"String(option.value)\"\n        class=\"text-xs font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n      >\n        {{ option.label }}\n      </label>\n    </div>\r\n  </RadioGroup>\r\n</template>\r\n"],"names":["props","__props","emit","__emit","STYLE_PRESETS","groupClass","computed","styleKey","itemClass","handleChange","value","_createBlock","_unref","RadioGroup","_createElementBlock","_Fragment","_renderList","option","_createVNode","RadioGroupItem","_createElementVNode","_toDisplayString","_hoisted_1"],"mappings":"ghBAoBA,MAAMA,EAAQC,EAoBRC,EAAOC,EAQPC,EAA8E,CAClF,QAAS,CACP,WAAY,GACZ,UAAW,EAAA,EAEb,QAAS,CACP,WAAY,GACZ,UAAW,+BAAA,EAEb,QAAS,CACP,WAAY,GACZ,UAAW,iCAAA,EAEb,OAAQ,CACN,WAAY,GACZ,UAAW,qCAAA,EAEb,GAAI,CACF,WAAY,GACZ,UAAW,aAAA,EAEb,GAAI,CACF,WAAY,GACZ,UAAW,SAAA,EAEb,WAAY,CACV,WAAY,sBACZ,UAAW,EAAA,EAEb,SAAU,CACR,WAAY,aACZ,UAAW,EAAA,CACb,EAGIC,EAAaC,EAAAA,SAAS,IAAM,CAChC,MAAMC,EAAWP,EAAM,WAAa,UAEpC,MAAO,EADQI,EAAcG,CAAQ,GAAKH,EAAc,UACxC,WAAYJ,EAAM,KAAK,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CACnE,CAAC,EAEKQ,EAAYF,EAAAA,SAAS,IAAM,CAC/B,MAAMC,EAAWP,EAAM,WAAa,UAEpC,OADeI,EAAcG,CAAQ,GAAKH,EAAc,UACzC,SACjB,CAAC,EAEKK,EAAgBC,GAAkB,CACtCR,EAAK,oBAAqBQ,CAAK,EAC/BR,EAAK,SAAUQ,CAAK,CACtB,8BAIEC,EAAAA,YAuBaC,EAAAA,MAAAC,EAAAA,OAAA,EAAA,CAtBV,GAAIZ,EAAA,GACJ,cAAa,OAAOA,EAAA,UAAU,EAC9B,SAAUA,EAAA,SACV,SAAUA,EAAA,SACV,KAAMA,EAAA,KACN,uBAAOI,EAAA,KAAU,EACjB,sBAAoBI,CAAA,qBAEhB,IAAyB,kBAA9BK,EAAAA,mBAaMC,EAAAA,SAAA,KAAAC,EAAAA,WAbgBf,EAAA,QAAVgB,kBAAZH,EAAAA,mBAaM,MAAA,CAb0B,IAAKG,EAAO,MAAQ,uBAAOhB,EAAA,YAAS,WAAA,QAAA,6BAAA,CAAA,GAClEiB,cAKEN,EAAAA,MAAAO,EAAAA,OAAA,EAAA,CAJC,GAAI,OAAOF,EAAO,KAAK,EACvB,MAAO,OAAOA,EAAO,KAAK,EAC1B,SAAUA,EAAO,SACjB,uBAAOT,EAAA,KAAS,CAAA,4CAEnBY,EAAAA,mBAKQ,QAAA,CAJL,IAAK,OAAOH,EAAO,KAAK,EACzB,MAAM,4FAAA,EAEHI,EAAAA,gBAAAJ,EAAO,KAAK,EAAA,EAAAK,CAAA,CAAA"}