{"version":3,"file":"JNumberRangeField.vue.cjs","sources":["../../../../src/components/molecules/JNumberRangeField.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport JInput from '@/components/atoms/JInput.vue'\nimport { cn } from '@/lib/utils'\n\nexport type NumberRangeValue = { start: number | null; end: number | null }\n\nconst props = withDefaults(\n  defineProps<{\n    modelValue?: NumberRangeValue\n    min?: number\n    max?: number\n    step?: number\n    disabled?: boolean\n    required?: boolean\n    placeholder?: { start?: string; end?: string }\n    separator?: string\n    suffix?: string\n    class?: string\n    id?: string\n    name?: string\n  }>(),\n  {\n    separator: '~',\n  }\n)\n\nconst emit = defineEmits<{\n  'update:modelValue': [value: NumberRangeValue]\n  'change': [value: NumberRangeValue]\n  'focus': [event: FocusEvent]\n  'blur': [event: FocusEvent]\n}>()\n\nconst current = computed<NumberRangeValue>(() => props.modelValue ?? { start: null, end: null })\n\nconst toNumber = (val: string | number): number | null => {\n  if (val === '' || val === null || val === undefined) return null\n  const n = Number(val)\n  return isNaN(n) ? null : n\n}\n\nconst handleChange = (key: 'start' | 'end', val: string | number) => {\n  const next = { ...current.value, [key]: toNumber(val) }\n  emit('update:modelValue', next)\n  emit('change', next)\n}\n</script>\n\n<template>\n  <div :class=\"cn('flex items-center gap-1 w-full', props.class)\">\n    <div class=\"flex items-center flex-1 gap-1\">\n      <JInput\n        :model-value=\"current.start ?? undefined\"\n        type=\"number\"\n        :min=\"min\"\n        :max=\"max\"\n        :step=\"step\"\n        :disabled=\"disabled\"\n        :required=\"required\"\n        :placeholder=\"placeholder?.start ?? '최소'\"\n        class=\"flex-1\"\n        @update:model-value=\"handleChange('start', $event)\"\n        @focus=\"emit('focus', $event)\"\n        @blur=\"emit('blur', $event)\"\n      />\n      <span v-if=\"suffix\" class=\"text-muted-foreground text-xs shrink-0\">{{ suffix }}</span>\n    </div>\n    <span class=\"text-muted-foreground text-xs shrink-0 select-none px-0.5\">{{ separator }}</span>\n    <div class=\"flex items-center flex-1 gap-1\">\n      <JInput\n        :model-value=\"current.end ?? undefined\"\n        type=\"number\"\n        :min=\"min\"\n        :max=\"max\"\n        :step=\"step\"\n        :disabled=\"disabled\"\n        :required=\"required\"\n        :placeholder=\"placeholder?.end ?? '최대'\"\n        class=\"flex-1\"\n        @update:model-value=\"handleChange('end', $event)\"\n        @focus=\"emit('focus', $event)\"\n        @blur=\"emit('blur', $event)\"\n      />\n      <span v-if=\"suffix\" class=\"text-muted-foreground text-xs shrink-0\">{{ suffix }}</span>\n    </div>\n  </div>\n</template>\n"],"names":["props","__props","emit","__emit","current","computed","toNumber","val","n","handleChange","key","next","_createElementBlock","_normalizeClass","_unref","cn","_createElementVNode","_hoisted_1","_createVNode","JInput","_cache","$event","_hoisted_2","_toDisplayString","_hoisted_3","_hoisted_4","_hoisted_5"],"mappings":"ivBAOA,MAAMA,EAAQC,EAoBRC,EAAOC,EAOPC,EAAUC,WAA2B,IAAML,EAAM,YAAc,CAAE,MAAO,KAAM,IAAK,KAAM,EAEzFM,EAAYC,GAAwC,CACxD,GAAIA,IAAQ,IAAMA,IAAQ,MAAQA,IAAQ,OAAW,OAAO,KAC5D,MAAMC,EAAI,OAAOD,CAAG,EACpB,OAAO,MAAMC,CAAC,EAAI,KAAOA,CAC3B,EAEMC,EAAe,CAACC,EAAsBH,IAAyB,CACnE,MAAMI,EAAO,CAAE,GAAGP,EAAQ,MAAO,CAACM,CAAG,EAAGJ,EAASC,CAAG,CAAA,EACpDL,EAAK,oBAAqBS,CAAI,EAC9BT,EAAK,SAAUS,CAAI,CACrB,8BAIEC,EAAAA,mBAoCM,MAAA,CApCA,MAAKC,EAAAA,eAAEC,QAAAC,EAAAA,EAAA,EAAE,iCAAmCf,EAAM,KAAK,CAAA,CAAA,GAC3DgB,EAAAA,mBAgBM,MAhBNC,EAgBM,CAfJC,EAAAA,YAaEC,EAAAA,QAAA,CAZC,cAAaf,EAAA,MAAQ,OAAS,OAC/B,KAAK,SACJ,IAAKH,EAAA,IACL,IAAKA,EAAA,IACL,KAAMA,EAAA,KACN,SAAUA,EAAA,SACV,SAAUA,EAAA,SACV,YAAaA,EAAA,aAAa,OAAK,KAChC,MAAM,SACL,sBAAkBmB,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAEZ,EAAY,QAAUY,CAAM,GAChD,QAAKD,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAEnB,EAAI,QAAUmB,CAAM,GAC3B,OAAID,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAEnB,EAAI,OAASmB,CAAM,EAAA,iFAEhBpB,EAAA,sBAAZW,EAAAA,mBAAsF,OAAtFU,EAAsFC,EAAAA,gBAAhBtB,EAAA,MAAM,EAAA,CAAA,iCAE9Ee,EAAAA,mBAA8F,OAA9FQ,EAA8FD,EAAAA,gBAAnBtB,EAAA,SAAS,EAAA,CAAA,EACpFe,EAAAA,mBAgBM,MAhBNS,EAgBM,CAfJP,EAAAA,YAaEC,EAAAA,QAAA,CAZC,cAAaf,EAAA,MAAQ,KAAO,OAC7B,KAAK,SACJ,IAAKH,EAAA,IACL,IAAKA,EAAA,IACL,KAAMA,EAAA,KACN,SAAUA,EAAA,SACV,SAAUA,EAAA,SACV,YAAaA,EAAA,aAAa,KAAG,KAC9B,MAAM,SACL,sBAAkBmB,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAEZ,EAAY,MAAQY,CAAM,GAC9C,QAAKD,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAEnB,EAAI,QAAUmB,CAAM,GAC3B,OAAID,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAEnB,EAAI,OAASmB,CAAM,EAAA,iFAEhBpB,EAAA,sBAAZW,EAAAA,mBAAsF,OAAtFc,EAAsFH,EAAAA,gBAAhBtB,EAAA,MAAM,EAAA,CAAA"}