@j-solution/components 1.6.1 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (272) hide show
  1. package/README.md +8 -6
  2. package/assets/jwms-portal-frontend-BtHTA-UF.css +1 -0
  3. package/assets/styles/global-utilities.css +34 -0
  4. package/assets/styles/j-components.css +1 -1
  5. package/assets/styles/themes.css +128 -21
  6. package/components/atoms/JAvatar.vue.cjs +1 -1
  7. package/components/atoms/JAvatar.vue.cjs.map +1 -1
  8. package/components/atoms/JAvatar.vue.js +10 -7
  9. package/components/atoms/JAvatar.vue.js.map +1 -1
  10. package/components/atoms/JBadge.vue.cjs +1 -1
  11. package/components/atoms/JBadge.vue.cjs.map +1 -1
  12. package/components/atoms/JBadge.vue.js +7 -6
  13. package/components/atoms/JBadge.vue.js.map +1 -1
  14. package/components/atoms/JButton.vue.cjs +6 -1
  15. package/components/atoms/JButton.vue.cjs.map +1 -1
  16. package/components/atoms/JButton.vue.js +10 -85
  17. package/components/atoms/JButton.vue.js.map +1 -1
  18. package/components/atoms/JButton.vue2.cjs +1 -1
  19. package/components/atoms/JButton.vue2.cjs.map +1 -1
  20. package/components/atoms/JButton.vue2.js +85 -2
  21. package/components/atoms/JButton.vue2.js.map +1 -1
  22. package/components/atoms/JDatepicker.vue.cjs +1 -1
  23. package/components/atoms/JDatepicker.vue.cjs.map +1 -1
  24. package/components/atoms/JDatepicker.vue.js +10 -10
  25. package/components/atoms/JDatepicker.vue.js.map +1 -1
  26. package/components/atoms/JEditor.vue.cjs +1 -1
  27. package/components/atoms/JEditor.vue.js +1 -1
  28. package/components/atoms/JEditor.vue2.cjs +1 -1
  29. package/components/atoms/JEditor.vue2.cjs.map +1 -1
  30. package/components/atoms/JEditor.vue2.js +31 -17
  31. package/components/atoms/JEditor.vue2.js.map +1 -1
  32. package/components/atoms/JGrid.vue.cjs +1 -1
  33. package/components/atoms/JGrid.vue.js +2 -2
  34. package/components/atoms/JGrid.vue2.cjs +1 -1
  35. package/components/atoms/JGrid.vue2.cjs.map +1 -1
  36. package/components/atoms/JGrid.vue2.js +59 -43
  37. package/components/atoms/JGrid.vue2.js.map +1 -1
  38. package/components/atoms/JIcon.vue.cjs +1 -1
  39. package/components/atoms/JIcon.vue.cjs.map +1 -1
  40. package/components/atoms/JIcon.vue.js +14 -13
  41. package/components/atoms/JIcon.vue.js.map +1 -1
  42. package/components/atoms/JKbd.vue.cjs +1 -1
  43. package/components/atoms/JKbd.vue.cjs.map +1 -1
  44. package/components/atoms/JKbd.vue.js +13 -10
  45. package/components/atoms/JKbd.vue.js.map +1 -1
  46. package/components/atoms/JLabel.vue.cjs +1 -1
  47. package/components/atoms/JLabel.vue.cjs.map +1 -1
  48. package/components/atoms/JLabel.vue.js +26 -22
  49. package/components/atoms/JLabel.vue.js.map +1 -1
  50. package/components/atoms/JLink.vue.cjs +1 -1
  51. package/components/atoms/JLink.vue.cjs.map +1 -1
  52. package/components/atoms/JLink.vue.js +5 -5
  53. package/components/atoms/JLink.vue.js.map +1 -1
  54. package/components/atoms/JPreview.vue.cjs +1 -1
  55. package/components/atoms/JPreview.vue.js +2 -2
  56. package/components/atoms/JPreview.vue2.cjs +1 -1
  57. package/components/atoms/JPreview.vue2.cjs.map +1 -1
  58. package/components/atoms/JPreview.vue2.js +33 -20
  59. package/components/atoms/JPreview.vue2.js.map +1 -1
  60. package/components/atoms/JProgress.vue.cjs +1 -1
  61. package/components/atoms/JProgress.vue.cjs.map +1 -1
  62. package/components/atoms/JProgress.vue.js +15 -9
  63. package/components/atoms/JProgress.vue.js.map +1 -1
  64. package/components/atoms/JRadio.vue.cjs +1 -1
  65. package/components/atoms/JRadio.vue.cjs.map +1 -1
  66. package/components/atoms/JRadio.vue.js +1 -1
  67. package/components/atoms/JRadio.vue.js.map +1 -1
  68. package/components/atoms/JSearchCombo.vue.cjs +1 -1
  69. package/components/atoms/JSearchCombo.vue.cjs.map +1 -1
  70. package/components/atoms/JSearchCombo.vue.js +38 -37
  71. package/components/atoms/JSearchCombo.vue.js.map +1 -1
  72. package/components/atoms/JSectionTitle.vue.cjs +7 -0
  73. package/components/atoms/JSectionTitle.vue.cjs.map +1 -0
  74. package/components/atoms/JSectionTitle.vue.js +13 -0
  75. package/components/atoms/JSectionTitle.vue.js.map +1 -0
  76. package/components/atoms/JSectionTitle.vue2.cjs +2 -0
  77. package/components/atoms/JSectionTitle.vue2.cjs.map +1 -0
  78. package/components/atoms/JSectionTitle.vue2.js +67 -0
  79. package/components/atoms/JSectionTitle.vue2.js.map +1 -0
  80. package/components/atoms/JSpinner.vue.cjs +1 -1
  81. package/components/atoms/JSpinner.vue.cjs.map +1 -1
  82. package/components/atoms/JSpinner.vue.js +8 -7
  83. package/components/atoms/JSpinner.vue.js.map +1 -1
  84. package/components/atoms/JSplitter.vue.cjs +6 -1
  85. package/components/atoms/JSplitter.vue.cjs.map +1 -1
  86. package/components/atoms/JSplitter.vue.js +10 -54
  87. package/components/atoms/JSplitter.vue.js.map +1 -1
  88. package/components/atoms/JSplitter.vue2.cjs +1 -1
  89. package/components/atoms/JSplitter.vue2.cjs.map +1 -1
  90. package/components/atoms/JSplitter.vue2.js +59 -2
  91. package/components/atoms/JSplitter.vue2.js.map +1 -1
  92. package/components/atoms/JTooltip.vue.cjs +1 -1
  93. package/components/atoms/JTooltip.vue.cjs.map +1 -1
  94. package/components/atoms/JTooltip.vue.js +18 -15
  95. package/components/atoms/JTooltip.vue.js.map +1 -1
  96. package/components/examples/ExampleCrudPage.vue.cjs +1 -1
  97. package/components/examples/ExampleCrudPage.vue.cjs.map +1 -1
  98. package/components/examples/ExampleCrudPage.vue.js +265 -191
  99. package/components/examples/ExampleCrudPage.vue.js.map +1 -1
  100. package/components/examples/ExampleTabMappingPage.vue.cjs +1 -1
  101. package/components/examples/ExampleTabMappingPage.vue.cjs.map +1 -1
  102. package/components/examples/ExampleTabMappingPage.vue.js +349 -333
  103. package/components/examples/ExampleTabMappingPage.vue.js.map +1 -1
  104. package/components/molecules/JAlert.vue.cjs +1 -1
  105. package/components/molecules/JAlert.vue.cjs.map +1 -1
  106. package/components/molecules/JAlert.vue.js +18 -16
  107. package/components/molecules/JAlert.vue.js.map +1 -1
  108. package/components/molecules/JBreadcrumb.vue.cjs +1 -1
  109. package/components/molecules/JBreadcrumb.vue.cjs.map +1 -1
  110. package/components/molecules/JBreadcrumb.vue.js +3 -3
  111. package/components/molecules/JBreadcrumb.vue.js.map +1 -1
  112. package/components/molecules/JCard.vue.cjs +1 -1
  113. package/components/molecules/JCard.vue.cjs.map +1 -1
  114. package/components/molecules/JCard.vue.js +55 -39
  115. package/components/molecules/JCard.vue.js.map +1 -1
  116. package/components/molecules/JEmptyState.vue.cjs +7 -0
  117. package/components/molecules/JEmptyState.vue.cjs.map +1 -0
  118. package/components/molecules/JEmptyState.vue.js +13 -0
  119. package/components/molecules/JEmptyState.vue.js.map +1 -0
  120. package/components/molecules/JEmptyState.vue2.cjs +2 -0
  121. package/components/molecules/JEmptyState.vue2.cjs.map +1 -0
  122. package/components/molecules/JEmptyState.vue2.js +127 -0
  123. package/components/molecules/JEmptyState.vue2.js.map +1 -0
  124. package/components/molecules/JFormField.vue.cjs +6 -1
  125. package/components/molecules/JFormField.vue.cjs.map +1 -1
  126. package/components/molecules/JFormField.vue.js +10 -262
  127. package/components/molecules/JFormField.vue.js.map +1 -1
  128. package/components/molecules/JFormField.vue2.cjs +2 -0
  129. package/components/molecules/JFormField.vue2.cjs.map +1 -0
  130. package/components/molecules/JFormField.vue2.js +271 -0
  131. package/components/molecules/JFormField.vue2.js.map +1 -0
  132. package/components/molecules/JTabs.vue.cjs +1 -1
  133. package/components/molecules/JTabs.vue.js +1 -1
  134. package/components/molecules/JTabs.vue2.cjs +1 -1
  135. package/components/molecules/JTabs.vue2.cjs.map +1 -1
  136. package/components/molecules/JTabs.vue2.js +50 -56
  137. package/components/molecules/JTabs.vue2.js.map +1 -1
  138. package/components/molecules/JTitlebar.vue.cjs +1 -1
  139. package/components/molecules/JTitlebar.vue.cjs.map +1 -1
  140. package/components/molecules/JTitlebar.vue.js +49 -47
  141. package/components/molecules/JTitlebar.vue.js.map +1 -1
  142. package/components/organisms/JDynamicForm.vue2.cjs +1 -1
  143. package/components/organisms/JDynamicForm.vue2.cjs.map +1 -1
  144. package/components/organisms/JDynamicForm.vue2.js +35 -32
  145. package/components/organisms/JDynamicForm.vue2.js.map +1 -1
  146. package/components/organisms/JDynamicTabs.vue.cjs +1 -1
  147. package/components/organisms/JDynamicTabs.vue.cjs.map +1 -1
  148. package/components/organisms/JDynamicTabs.vue.js +47 -52
  149. package/components/organisms/JDynamicTabs.vue.js.map +1 -1
  150. package/components/organisms/JFilterBar.vue.cjs +6 -1
  151. package/components/organisms/JFilterBar.vue.cjs.map +1 -1
  152. package/components/organisms/JFilterBar.vue.js +10 -137
  153. package/components/organisms/JFilterBar.vue.js.map +1 -1
  154. package/components/organisms/JFilterBar.vue2.cjs +1 -1
  155. package/components/organisms/JFilterBar.vue2.cjs.map +1 -1
  156. package/components/organisms/JFilterBar.vue2.js +141 -2
  157. package/components/organisms/JFilterBar.vue2.js.map +1 -1
  158. package/components/organisms/JFormModal.vue.cjs +1 -1
  159. package/components/organisms/JFormModal.vue.cjs.map +1 -1
  160. package/components/organisms/JFormModal.vue.js +54 -49
  161. package/components/organisms/JFormModal.vue.js.map +1 -1
  162. package/components/organisms/JHeader.vue.cjs +1 -1
  163. package/components/organisms/JHeader.vue.cjs.map +1 -1
  164. package/components/organisms/JHeader.vue.js +211 -208
  165. package/components/organisms/JHeader.vue.js.map +1 -1
  166. package/components/organisms/JModal.vue.cjs +1 -1
  167. package/components/organisms/JModal.vue.cjs.map +1 -1
  168. package/components/organisms/JModal.vue.js +31 -26
  169. package/components/organisms/JModal.vue.js.map +1 -1
  170. package/components/organisms/JPageContainer.vue.cjs +1 -1
  171. package/components/organisms/JPageContainer.vue.cjs.map +1 -1
  172. package/components/organisms/JPageContainer.vue.js +22 -22
  173. package/components/organisms/JPageContainer.vue.js.map +1 -1
  174. package/components/organisms/JSearchPanel.vue2.cjs +1 -1
  175. package/components/organisms/JSearchPanel.vue2.cjs.map +1 -1
  176. package/components/organisms/JSearchPanel.vue2.js +34 -32
  177. package/components/organisms/JSearchPanel.vue2.js.map +1 -1
  178. package/components/organisms/JShuttle.vue.cjs +7 -0
  179. package/components/organisms/JShuttle.vue.cjs.map +1 -0
  180. package/components/organisms/JShuttle.vue.js +13 -0
  181. package/components/organisms/JShuttle.vue.js.map +1 -0
  182. package/components/organisms/JShuttle.vue2.cjs +2 -0
  183. package/components/organisms/JShuttle.vue2.cjs.map +1 -0
  184. package/components/organisms/JShuttle.vue2.js +216 -0
  185. package/components/organisms/JShuttle.vue2.js.map +1 -0
  186. package/components/organisms/JSidebarAdvanced.vue.cjs +1 -1
  187. package/components/organisms/JSidebarAdvanced.vue.js +7 -7
  188. package/components/organisms/JSidebarAdvanced.vue2.cjs +1 -1
  189. package/components/organisms/JSidebarAdvanced.vue2.cjs.map +1 -1
  190. package/components/organisms/JSidebarAdvanced.vue2.js +40 -40
  191. package/components/organisms/JSidebarAdvanced.vue2.js.map +1 -1
  192. package/components/organisms/JSidebarSimple/JDynamicMenuItem.vue.cjs +1 -1
  193. package/components/organisms/JSidebarSimple/JDynamicMenuItem.vue.cjs.map +1 -1
  194. package/components/organisms/JSidebarSimple/JDynamicMenuItem.vue.js +83 -63
  195. package/components/organisms/JSidebarSimple/JDynamicMenuItem.vue.js.map +1 -1
  196. package/components/organisms/JSidebarSimple.vue.cjs +1 -1
  197. package/components/organisms/JSidebarSimple.vue.js +2 -2
  198. package/components/organisms/JSidebarSimple.vue2.cjs +1 -1
  199. package/components/organisms/JSidebarSimple.vue2.cjs.map +1 -1
  200. package/components/organisms/JSidebarSimple.vue2.js +2 -2
  201. package/components/organisms/JSidebarSimple.vue2.js.map +1 -1
  202. package/components/shadcn/AccordionTrigger.vue.cjs +1 -1
  203. package/components/shadcn/AccordionTrigger.vue.cjs.map +1 -1
  204. package/components/shadcn/AccordionTrigger.vue.js +3 -3
  205. package/components/shadcn/AccordionTrigger.vue.js.map +1 -1
  206. package/components/shadcn/Card.vue.cjs +1 -1
  207. package/components/shadcn/Card.vue.cjs.map +1 -1
  208. package/components/shadcn/Card.vue.js +1 -1
  209. package/components/shadcn/Card.vue.js.map +1 -1
  210. package/components/shadcn/CardContent.vue.cjs +1 -1
  211. package/components/shadcn/CardContent.vue.cjs.map +1 -1
  212. package/components/shadcn/CardContent.vue.js +4 -4
  213. package/components/shadcn/CardContent.vue.js.map +1 -1
  214. package/components/shadcn/CardDescription.vue.cjs +1 -1
  215. package/components/shadcn/CardDescription.vue.cjs.map +1 -1
  216. package/components/shadcn/CardDescription.vue.js +1 -1
  217. package/components/shadcn/CardDescription.vue.js.map +1 -1
  218. package/components/shadcn/CardFooter.vue.cjs +1 -1
  219. package/components/shadcn/CardFooter.vue.cjs.map +1 -1
  220. package/components/shadcn/CardFooter.vue.js +7 -7
  221. package/components/shadcn/CardFooter.vue.js.map +1 -1
  222. package/components/shadcn/CardHeader.vue.cjs +1 -1
  223. package/components/shadcn/CardHeader.vue.cjs.map +1 -1
  224. package/components/shadcn/CardHeader.vue.js +8 -8
  225. package/components/shadcn/CardHeader.vue.js.map +1 -1
  226. package/components/shadcn/CardTitle.vue.cjs +1 -1
  227. package/components/shadcn/CardTitle.vue.cjs.map +1 -1
  228. package/components/shadcn/CardTitle.vue.js +5 -5
  229. package/components/shadcn/CardTitle.vue.js.map +1 -1
  230. package/components/shadcn/Input.vue.cjs +1 -1
  231. package/components/shadcn/Input.vue.cjs.map +1 -1
  232. package/components/shadcn/Input.vue.js +3 -3
  233. package/components/shadcn/Input.vue.js.map +1 -1
  234. package/components/shadcn/SelectTrigger.vue.cjs +1 -1
  235. package/components/shadcn/SelectTrigger.vue.cjs.map +1 -1
  236. package/components/shadcn/SelectTrigger.vue.js +2 -2
  237. package/components/shadcn/SelectTrigger.vue.js.map +1 -1
  238. package/components/shadcn/Switch.vue.cjs +1 -1
  239. package/components/shadcn/Switch.vue.cjs.map +1 -1
  240. package/components/shadcn/Switch.vue.js +2 -2
  241. package/components/shadcn/Switch.vue.js.map +1 -1
  242. package/components/shadcn/TabsContent.vue.cjs +1 -1
  243. package/components/shadcn/TabsContent.vue.cjs.map +1 -1
  244. package/components/shadcn/TabsContent.vue.js +1 -1
  245. package/components/shadcn/TabsContent.vue.js.map +1 -1
  246. package/components/shadcn/TabsList.vue.cjs +1 -1
  247. package/components/shadcn/TabsList.vue.cjs.map +1 -1
  248. package/components/shadcn/TabsList.vue.js +10 -10
  249. package/components/shadcn/TabsList.vue.js.map +1 -1
  250. package/components/shadcn/TabsTrigger.vue.cjs +1 -1
  251. package/components/shadcn/TabsTrigger.vue.cjs.map +1 -1
  252. package/components/shadcn/TabsTrigger.vue.js +4 -4
  253. package/components/shadcn/TabsTrigger.vue.js.map +1 -1
  254. package/components/shadcn/Textarea.vue.cjs +1 -1
  255. package/components/shadcn/Textarea.vue.cjs.map +1 -1
  256. package/components/shadcn/Textarea.vue.js +2 -2
  257. package/components/shadcn/Textarea.vue.js.map +1 -1
  258. package/components/shadcn/index.cjs +1 -1
  259. package/components/shadcn/index.cjs.map +1 -1
  260. package/components/shadcn/index.js +9 -8
  261. package/components/shadcn/index.js.map +1 -1
  262. package/components/templates/JLayout.vue.cjs.map +1 -1
  263. package/components/templates/JLayout.vue.js.map +1 -1
  264. package/index.cjs +1 -1
  265. package/index.js +73 -67
  266. package/package.json +1 -1
  267. package/types/index.d.ts +1025 -766
  268. package/assets/jwms-portal-frontend-DntSIcYt.css +0 -1
  269. package/components/molecules/JFormField.vue3.cjs +0 -2
  270. package/components/molecules/JFormField.vue3.cjs.map +0 -1
  271. package/components/molecules/JFormField.vue3.js +0 -6
  272. package/components/molecules/JFormField.vue3.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"JProgress.vue.cjs","sources":["../../../../src/components/atoms/JProgress.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport Progress from '@/components/shadcn/Progress.vue'\r\n\r\ntype StyleType =\r\n | 'default' // 기본 스타일\r\n | 'primary' // 강조 스타일 (파랑)\r\n | 'success' // 성공 스타일 (초록)\r\n | 'warning' // 경고 스타일 (주황)\r\n | 'danger' // 위험 스타일 (빨강)\r\n\r\ntype SizeType = 'sm' | 'md' | 'lg'\r\n\r\ntype VariantType = 'linear' | 'circular'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n value?: number\r\n max?: number\r\n class?: string\r\n /** 스타일 프리셋 */\r\n styletype?: StyleType\r\n /** 크기 프리셋 */\r\n size?: SizeType\r\n /** 라벨 텍스트 */\r\n label?: string\r\n /** 진행률 퍼센트 표시 여부 */\r\n showLabel?: boolean\r\n /** 설명 텍스트 */\r\n description?: string\r\n /** 프로그레스 바 모양 */\r\n variant?: VariantType\r\n /** 무한 로딩 애니메이션 여부 */\r\n indeterminate?: boolean\r\n }>(),\r\n {\r\n value: 0,\r\n max: 100,\r\n styletype: 'default',\r\n size: 'md',\r\n label: '',\r\n showLabel: true,\r\n description: '',\r\n variant: 'linear',\r\n indeterminate: false,\r\n },\r\n)\r\n\r\n/**\r\n * styletype -> class 매핑\r\n */\r\nconst STYLE_PRESETS: Record<StyleType, { class: string }> = {\r\n default: { class: '' },\r\n primary: { \r\n class: '[&>div]:bg-blue-500',\r\n },\r\n success: { \r\n class: '[&>div]:bg-green-500',\r\n },\r\n warning: { \r\n class: '[&>div]:bg-amber-500',\r\n },\r\n danger: { \r\n class: '[&>div]:bg-red-500',\r\n },\r\n}\r\n\r\n/**\r\n * size -> class 매핑\r\n */\r\nconst SIZE_PRESETS: Record<SizeType, { class: string }> = {\r\n sm: { \r\n class: 'h-2',\r\n },\r\n md: { \r\n class: 'h-4',\r\n },\r\n lg: { \r\n class: 'h-6',\r\n },\r\n}\r\n\r\n/**\r\n * variant -> size 매핑 (circular용)\r\n */\r\nconst CIRCULAR_SIZE_PRESETS: Record<SizeType, { size: number }> = {\r\n sm: { \r\n size: 60,\r\n },\r\n md: { \r\n size: 80,\r\n },\r\n lg: { \r\n size: 100,\r\n },\r\n}\r\n\r\n/** 진행률 퍼센트 계산 */\r\nconst percentage = computed(() => {\r\n return Math.round((props.value! / props.max!) * 100)\r\n})\r\n\r\n/** 최종 바인딩: 직접 넘긴 class가 있으면 styletype과 size 기본값과 병합 */\r\nconst mapped = computed(() => {\r\n const stylePreset = STYLE_PRESETS[props.styletype!]\r\n const sizePreset = SIZE_PRESETS[props.size!]\r\n const finalClass = [stylePreset.class, sizePreset.class, props.class].filter(Boolean).join(' ')\r\n \r\n return {\r\n modelValue: props.value,\r\n max: props.max,\r\n class: finalClass,\r\n }\r\n})\r\n\r\n/** 원형 프로그레스 바 스타일 계산 */\r\nconst circularStyle = computed(() => {\r\n const sizePreset = CIRCULAR_SIZE_PRESETS[props.size!]\r\n \r\n // 색상 추출 - linear와 동일한 색상 사용\r\n let color = '#000000' // default: 검은색 (linear의 기본 색상과 동일)\r\n if (props.styletype === 'primary') color = '#3b82f6' // blue-500\r\n else if (props.styletype === 'success') color = '#10b981' // green-500\r\n else if (props.styletype === 'warning') color = '#f59e0b' // amber-500\r\n else if (props.styletype === 'danger') color = '#ef4444' // red-500\r\n \r\n return {\r\n size: sizePreset.size,\r\n color,\r\n }\r\n})\r\n\r\n/** indeterminate 상태에서 표시할 텍스트 */\r\nconst indeterminateText = computed(() => {\r\n return props.indeterminate ? '로딩 중...' : `${percentage.value}%`\r\n})\r\n\r\n/** Linear indeterminate 색상 계산 */\r\nconst linearIndeterminateColor = computed(() => {\r\n let color = '#000000' // default: 검은색\r\n if (props.styletype === 'primary') color = '#3b82f6' // blue-500\r\n else if (props.styletype === 'success') color = '#10b981' // green-500\r\n else if (props.styletype === 'warning') color = '#f59e0b' // amber-500\r\n else if (props.styletype === 'danger') color = '#ef4444' // red-500\r\n \r\n return color\r\n})\r\n</script>\r\n\r\n<template>\r\n <div class=\"space-y-2\">\r\n <!-- Linear Progress용 상단 라벨 -->\r\n <div v-if=\"props.variant === 'linear' && (props.label || props.showLabel || props.indeterminate)\" class=\"flex justify-between items-center\">\r\n <p v-if=\"props.label\" class=\"text-sm font-medium text-gray-700\">\r\n {{ props.label }}\r\n </p>\r\n <p v-if=\"props.showLabel || props.indeterminate\" class=\"text-sm font-medium text-gray-600\">\r\n {{ indeterminateText }}\r\n </p>\r\n </div>\r\n \r\n <!-- Circular Progress용 상단 라벨 -->\r\n <div v-if=\"props.variant === 'circular' && props.label\" class=\"text-center mb-2\">\r\n <p class=\"text-sm font-medium text-gray-700\">{{ props.label }}</p>\r\n </div>\r\n \r\n <!-- Linear Progress -->\r\n <div v-if=\"props.variant === 'linear'\">\r\n <!-- Indeterminate Linear -->\r\n <div v-if=\"props.indeterminate\" class=\"relative overflow-hidden rounded-full bg-gray-200\" :class=\"SIZE_PRESETS[props.size!].class\">\r\n <div \r\n class=\"absolute h-full w-full animate-pulse\"\r\n :style=\"{ backgroundColor: linearIndeterminateColor }\"\r\n />\r\n <div \r\n class=\"absolute h-full w-1/3 animate-[indeterminate-linear_2s_infinite]\"\r\n :style=\"{ backgroundColor: linearIndeterminateColor }\"\r\n />\r\n </div>\r\n <!-- Determinate Linear -->\r\n <Progress v-else v-bind=\"mapped\" />\r\n </div>\r\n \r\n <!-- Circular Progress -->\r\n <div v-else-if=\"props.variant === 'circular'\" class=\"flex justify-center\">\r\n <div class=\"relative\" :style=\"{ width: circularStyle.size + 'px', height: circularStyle.size + 'px' }\">\r\n <!-- Indeterminate Circular -->\r\n <div v-if=\"props.indeterminate\">\r\n <svg class=\"w-full h-full animate-spin\" viewBox=\"0 0 100 100\">\r\n <circle\r\n cx=\"50\"\r\n cy=\"50\"\r\n r=\"45\"\r\n stroke=\"#e5e7eb\"\r\n stroke-width=\"8\"\r\n fill=\"none\"\r\n />\r\n <circle\r\n cx=\"50\"\r\n cy=\"50\"\r\n r=\"45\"\r\n :stroke=\"circularStyle.color\"\r\n stroke-width=\"8\"\r\n fill=\"none\"\r\n stroke-linecap=\"round\"\r\n stroke-dasharray=\"70 213\"\r\n stroke-dashoffset=\"0\"\r\n class=\"animate-[indeterminate-circular_2s_ease-in-out_infinite]\"\r\n />\r\n </svg>\r\n </div>\r\n <!-- Determinate Circular -->\r\n <div v-else>\r\n <svg class=\"w-full h-full transform -rotate-90\" viewBox=\"0 0 100 100\">\r\n <!-- Background circle -->\r\n <circle\r\n cx=\"50\"\r\n cy=\"50\"\r\n r=\"45\"\r\n stroke=\"#e5e7eb\"\r\n stroke-width=\"8\"\r\n fill=\"none\"\r\n />\r\n <!-- Progress circle -->\r\n <circle\r\n cx=\"50\"\r\n cy=\"50\"\r\n r=\"45\"\r\n :stroke=\"circularStyle.color\"\r\n stroke-width=\"8\"\r\n fill=\"none\"\r\n stroke-linecap=\"round\"\r\n :stroke-dasharray=\"283\"\r\n :stroke-dashoffset=\"283 - (283 * percentage / 100)\"\r\n class=\"transition-all duration-300 ease-in-out\"\r\n />\r\n </svg>\r\n </div>\r\n <!-- Center text -->\r\n <div v-if=\"props.showLabel || props.indeterminate\" class=\"absolute inset-0 flex items-center justify-center\">\r\n <span class=\"text-sm font-medium text-gray-700\">{{ indeterminateText }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <!-- Circular Progress용 하단 description -->\r\n <div v-if=\"props.variant === 'circular' && props.description\" class=\"text-center mt-2\">\r\n <p class=\"text-xs text-gray-500\">{{ props.description }}</p>\r\n </div>\r\n \r\n <!-- Linear Progress용 하단 description -->\r\n <p v-if=\"props.variant === 'linear' && props.description\" class=\"text-xs text-gray-500\">\r\n {{ props.description }}\r\n </p>\r\n </div>\r\n</template>\r\n\r\n<style>\r\n@keyframes indeterminate-linear {\r\n 0% {\r\n transform: translateX(-100%);\r\n }\r\n 100% {\r\n transform: translateX(400%);\r\n }\r\n}\r\n\r\n@keyframes indeterminate-circular {\r\n 0% {\r\n stroke-dasharray: 70 213;\r\n stroke-dashoffset: 0;\r\n }\r\n 50% {\r\n stroke-dasharray: 140 143;\r\n stroke-dashoffset: -70;\r\n }\r\n 100% {\r\n stroke-dasharray: 70 213;\r\n stroke-dashoffset: -213;\r\n }\r\n}\r\n</style>\r\n"],"names":["props","__props","STYLE_PRESETS","SIZE_PRESETS","CIRCULAR_SIZE_PRESETS","percentage","computed","mapped","stylePreset","sizePreset","finalClass","circularStyle","color","indeterminateText","linearIndeterminateColor","_openBlock","_createElementBlock","_hoisted_1","_hoisted_2","_hoisted_3","_toDisplayString","_hoisted_4","_hoisted_5","_createElementVNode","_hoisted_6","_hoisted_7","_normalizeClass","_createBlock","Progress","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_12","_hoisted_13","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19"],"mappings":"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"}
1
+ {"version":3,"file":"JProgress.vue.cjs","sources":["../../../../src/components/atoms/JProgress.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport Progress from '@/components/shadcn/Progress.vue'\r\n\r\ntype StyleType =\r\n | 'default' // 기본 스타일\r\n | 'primary' // 강조 스타일 (파랑)\r\n | 'success' // 성공 스타일 (초록)\r\n | 'warning' // 경고 스타일 (주황)\r\n | 'danger' // 위험 스타일 (빨강)\r\n\r\ntype SizeType = 'xs' | 'sm' | 'md' | 'lg'\n\r\ntype VariantType = 'linear' | 'circular'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n value?: number\r\n max?: number\r\n class?: string\r\n /** 스타일 프리셋 */\r\n styletype?: StyleType\r\n /** 크기 프리셋 */\r\n size?: SizeType\r\n /** 라벨 텍스트 */\r\n label?: string\r\n /** 진행률 퍼센트 표시 여부 */\r\n showLabel?: boolean\r\n /** 설명 텍스트 */\r\n description?: string\r\n /** 프로그레스 바 모양 */\r\n variant?: VariantType\r\n /** 무한 로딩 애니메이션 여부 */\r\n indeterminate?: boolean\r\n }>(),\r\n {\n value: 0,\n max: 100,\n styletype: 'default',\n size: 'sm',\n label: '',\n showLabel: true,\n description: '',\n variant: 'linear',\n indeterminate: false,\n },\r\n)\r\n\r\n/**\r\n * styletype -> class 매핑\r\n */\r\nconst STYLE_PRESETS: Record<StyleType, { class: string }> = {\r\n default: { class: '' },\r\n primary: { \r\n class: '[&>div]:bg-blue-500',\r\n },\r\n success: { \r\n class: '[&>div]:bg-green-500',\r\n },\r\n warning: { \r\n class: '[&>div]:bg-amber-500',\r\n },\r\n danger: { \r\n class: '[&>div]:bg-red-500',\r\n },\r\n}\r\n\r\n/**\r\n * size -> class 매핑\r\n */\r\nconst SIZE_PRESETS: Record<SizeType, { class: string }> = {\n xs: { \n class: 'h-1',\n },\n sm: { \n class: 'h-2',\n },\n md: { \n class: 'h-3',\n },\n lg: { \n class: 'h-4',\n },\n}\n\r\n/**\r\n * variant -> size 매핑 (circular용)\r\n */\r\nconst CIRCULAR_SIZE_PRESETS: Record<SizeType, { size: number }> = {\n xs: { \n size: 48,\n },\n sm: { \n size: 60,\n },\n md: { \n size: 72,\n },\n lg: { \n size: 88,\n },\n}\r\n\r\n/** 진행률 퍼센트 계산 */\r\nconst percentage = computed(() => {\r\n return Math.round((props.value! / props.max!) * 100)\r\n})\r\n\r\n/** 최종 바인딩: 직접 넘긴 class가 있으면 styletype과 size 기본값과 병합 */\r\nconst mapped = computed(() => {\r\n const stylePreset = STYLE_PRESETS[props.styletype!]\r\n const sizePreset = SIZE_PRESETS[props.size!]\r\n const finalClass = [stylePreset.class, sizePreset.class, props.class].filter(Boolean).join(' ')\r\n \r\n return {\r\n modelValue: props.value,\r\n max: props.max,\r\n class: finalClass,\r\n }\r\n})\r\n\r\n/** 원형 프로그레스 바 스타일 계산 */\r\nconst circularStyle = computed(() => {\r\n const sizePreset = CIRCULAR_SIZE_PRESETS[props.size!]\r\n \r\n // 색상 추출 - linear와 동일한 색상 사용\r\n let color = '#000000' // default: 검은색 (linear의 기본 색상과 동일)\r\n if (props.styletype === 'primary') color = '#3b82f6' // blue-500\r\n else if (props.styletype === 'success') color = '#10b981' // green-500\r\n else if (props.styletype === 'warning') color = '#f59e0b' // amber-500\r\n else if (props.styletype === 'danger') color = '#ef4444' // red-500\r\n \r\n return {\r\n size: sizePreset.size,\r\n color,\r\n }\r\n})\r\n\r\n/** indeterminate 상태에서 표시할 텍스트 */\r\nconst indeterminateText = computed(() => {\r\n return props.indeterminate ? '로딩 중...' : `${percentage.value}%`\r\n})\r\n\r\n/** Linear indeterminate 색상 계산 */\r\nconst linearIndeterminateColor = computed(() => {\r\n let color = '#000000' // default: 검은색\r\n if (props.styletype === 'primary') color = '#3b82f6' // blue-500\r\n else if (props.styletype === 'success') color = '#10b981' // green-500\r\n else if (props.styletype === 'warning') color = '#f59e0b' // amber-500\r\n else if (props.styletype === 'danger') color = '#ef4444' // red-500\r\n \r\n return color\r\n})\r\n</script>\r\n\r\n<template>\r\n <div class=\"space-y-2\">\r\n <!-- Linear Progress용 상단 라벨 -->\r\n <div v-if=\"props.variant === 'linear' && (props.label || props.showLabel || props.indeterminate)\" class=\"flex justify-between items-center\">\r\n <p v-if=\"props.label\" class=\"text-sm font-medium text-gray-700\">\r\n {{ props.label }}\r\n </p>\r\n <p v-if=\"props.showLabel || props.indeterminate\" class=\"text-sm font-medium text-gray-600\">\r\n {{ indeterminateText }}\r\n </p>\r\n </div>\r\n \r\n <!-- Circular Progress용 상단 라벨 -->\r\n <div v-if=\"props.variant === 'circular' && props.label\" class=\"text-center mb-2\">\r\n <p class=\"text-sm font-medium text-gray-700\">{{ props.label }}</p>\r\n </div>\r\n \r\n <!-- Linear Progress -->\r\n <div v-if=\"props.variant === 'linear'\">\r\n <!-- Indeterminate Linear -->\r\n <div v-if=\"props.indeterminate\" class=\"relative overflow-hidden rounded-full bg-gray-200\" :class=\"SIZE_PRESETS[props.size!].class\">\r\n <div \r\n class=\"absolute h-full w-full animate-pulse\"\r\n :style=\"{ backgroundColor: linearIndeterminateColor }\"\r\n />\r\n <div \r\n class=\"absolute h-full w-1/3 animate-[indeterminate-linear_2s_infinite]\"\r\n :style=\"{ backgroundColor: linearIndeterminateColor }\"\r\n />\r\n </div>\r\n <!-- Determinate Linear -->\r\n <Progress v-else v-bind=\"mapped\" />\r\n </div>\r\n \r\n <!-- Circular Progress -->\r\n <div v-else-if=\"props.variant === 'circular'\" class=\"flex justify-center\">\r\n <div class=\"relative\" :style=\"{ width: circularStyle.size + 'px', height: circularStyle.size + 'px' }\">\r\n <!-- Indeterminate Circular -->\r\n <div v-if=\"props.indeterminate\">\r\n <svg class=\"w-full h-full animate-spin\" viewBox=\"0 0 100 100\">\r\n <circle\r\n cx=\"50\"\r\n cy=\"50\"\r\n r=\"45\"\r\n stroke=\"#e5e7eb\"\r\n stroke-width=\"8\"\r\n fill=\"none\"\r\n />\r\n <circle\r\n cx=\"50\"\r\n cy=\"50\"\r\n r=\"45\"\r\n :stroke=\"circularStyle.color\"\r\n stroke-width=\"8\"\r\n fill=\"none\"\r\n stroke-linecap=\"round\"\r\n stroke-dasharray=\"70 213\"\r\n stroke-dashoffset=\"0\"\r\n class=\"animate-[indeterminate-circular_2s_ease-in-out_infinite]\"\r\n />\r\n </svg>\r\n </div>\r\n <!-- Determinate Circular -->\r\n <div v-else>\r\n <svg class=\"w-full h-full transform -rotate-90\" viewBox=\"0 0 100 100\">\r\n <!-- Background circle -->\r\n <circle\r\n cx=\"50\"\r\n cy=\"50\"\r\n r=\"45\"\r\n stroke=\"#e5e7eb\"\r\n stroke-width=\"8\"\r\n fill=\"none\"\r\n />\r\n <!-- Progress circle -->\r\n <circle\r\n cx=\"50\"\r\n cy=\"50\"\r\n r=\"45\"\r\n :stroke=\"circularStyle.color\"\r\n stroke-width=\"8\"\r\n fill=\"none\"\r\n stroke-linecap=\"round\"\r\n :stroke-dasharray=\"283\"\r\n :stroke-dashoffset=\"283 - (283 * percentage / 100)\"\r\n class=\"transition-all duration-300 ease-in-out\"\r\n />\r\n </svg>\r\n </div>\r\n <!-- Center text -->\r\n <div v-if=\"props.showLabel || props.indeterminate\" class=\"absolute inset-0 flex items-center justify-center\">\r\n <span class=\"text-sm font-medium text-gray-700\">{{ indeterminateText }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <!-- Circular Progress용 하단 description -->\r\n <div v-if=\"props.variant === 'circular' && props.description\" class=\"text-center mt-2\">\r\n <p class=\"text-xs text-gray-500\">{{ props.description }}</p>\r\n </div>\r\n \r\n <!-- Linear Progress용 하단 description -->\r\n <p v-if=\"props.variant === 'linear' && props.description\" class=\"text-xs text-gray-500\">\r\n {{ props.description }}\r\n </p>\r\n </div>\r\n</template>\r\n\r\n<style>\r\n@keyframes indeterminate-linear {\r\n 0% {\r\n transform: translateX(-100%);\r\n }\r\n 100% {\r\n transform: translateX(400%);\r\n }\r\n}\r\n\r\n@keyframes indeterminate-circular {\r\n 0% {\r\n stroke-dasharray: 70 213;\r\n stroke-dashoffset: 0;\r\n }\r\n 50% {\r\n stroke-dasharray: 140 143;\r\n stroke-dashoffset: -70;\r\n }\r\n 100% {\r\n stroke-dasharray: 70 213;\r\n stroke-dashoffset: -213;\r\n }\r\n}\r\n</style>\r\n"],"names":["props","__props","STYLE_PRESETS","SIZE_PRESETS","CIRCULAR_SIZE_PRESETS","percentage","computed","mapped","stylePreset","sizePreset","finalClass","circularStyle","color","indeterminateText","linearIndeterminateColor","_openBlock","_createElementBlock","_hoisted_1","_hoisted_2","_hoisted_3","_toDisplayString","_hoisted_4","_hoisted_5","_createElementVNode","_hoisted_6","_hoisted_7","_normalizeClass","_createBlock","Progress","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_12","_hoisted_13","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { defineComponent as x, computed as o, createElementBlock as s, openBlock as t, createCommentVNode as r, toDisplayString as n, createElementVNode as i, createBlock as b, normalizeClass as g, normalizeStyle as d, normalizeProps as w, mergeProps as z } from "vue";
1
+ import { defineComponent as k, computed as o, createElementBlock as s, openBlock as t, createCommentVNode as r, toDisplayString as n, createElementVNode as i, createBlock as b, normalizeClass as g, normalizeStyle as d, normalizeProps as w, mergeProps as z } from "vue";
2
2
  import S from "../shadcn/Progress.vue.js";
3
3
  const E = { class: "space-y-2" }, C = {
4
4
  key: 0,
@@ -30,14 +30,14 @@ const E = { class: "space-y-2" }, C = {
30
30
  }, U = { class: "text-xs text-gray-500" }, Y = {
31
31
  key: 5,
32
32
  class: "text-xs text-gray-500"
33
- }, G = /* @__PURE__ */ x({
33
+ }, G = /* @__PURE__ */ k({
34
34
  __name: "JProgress",
35
35
  props: {
36
36
  value: { default: 0 },
37
37
  max: { default: 100 },
38
38
  class: {},
39
39
  styletype: { default: "default" },
40
- size: { default: "md" },
40
+ size: { default: "sm" },
41
41
  label: { default: "" },
42
42
  showLabel: { type: Boolean, default: !0 },
43
43
  description: { default: "" },
@@ -60,31 +60,37 @@ const E = { class: "space-y-2" }, C = {
60
60
  class: "[&>div]:bg-red-500"
61
61
  }
62
62
  }, u = {
63
+ xs: {
64
+ class: "h-1"
65
+ },
63
66
  sm: {
64
67
  class: "h-2"
65
68
  },
66
69
  md: {
67
- class: "h-4"
70
+ class: "h-3"
68
71
  },
69
72
  lg: {
70
- class: "h-6"
73
+ class: "h-4"
71
74
  }
72
75
  }, v = {
76
+ xs: {
77
+ size: 48
78
+ },
73
79
  sm: {
74
80
  size: 60
75
81
  },
76
82
  md: {
77
- size: 80
83
+ size: 72
78
84
  },
79
85
  lg: {
80
- size: 100
86
+ size: 88
81
87
  }
82
88
  }, f = o(() => Math.round(e.value / e.max * 100)), h = o(() => {
83
- const a = p[e.styletype], l = u[e.size], k = [a.class, l.class, e.class].filter(Boolean).join(" ");
89
+ const a = p[e.styletype], l = u[e.size], x = [a.class, l.class, e.class].filter(Boolean).join(" ");
84
90
  return {
85
91
  modelValue: e.value,
86
92
  max: e.max,
87
- class: k
93
+ class: x
88
94
  };
89
95
  }), c = o(() => {
90
96
  const a = v[e.size];
@@ -1 +1 @@
1
- {"version":3,"file":"JProgress.vue.js","sources":["../../../../src/components/atoms/JProgress.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport Progress from '@/components/shadcn/Progress.vue'\r\n\r\ntype StyleType =\r\n | 'default' // 기본 스타일\r\n | 'primary' // 강조 스타일 (파랑)\r\n | 'success' // 성공 스타일 (초록)\r\n | 'warning' // 경고 스타일 (주황)\r\n | 'danger' // 위험 스타일 (빨강)\r\n\r\ntype SizeType = 'sm' | 'md' | 'lg'\r\n\r\ntype VariantType = 'linear' | 'circular'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n value?: number\r\n max?: number\r\n class?: string\r\n /** 스타일 프리셋 */\r\n styletype?: StyleType\r\n /** 크기 프리셋 */\r\n size?: SizeType\r\n /** 라벨 텍스트 */\r\n label?: string\r\n /** 진행률 퍼센트 표시 여부 */\r\n showLabel?: boolean\r\n /** 설명 텍스트 */\r\n description?: string\r\n /** 프로그레스 바 모양 */\r\n variant?: VariantType\r\n /** 무한 로딩 애니메이션 여부 */\r\n indeterminate?: boolean\r\n }>(),\r\n {\r\n value: 0,\r\n max: 100,\r\n styletype: 'default',\r\n size: 'md',\r\n label: '',\r\n showLabel: true,\r\n description: '',\r\n variant: 'linear',\r\n indeterminate: false,\r\n },\r\n)\r\n\r\n/**\r\n * styletype -> class 매핑\r\n */\r\nconst STYLE_PRESETS: Record<StyleType, { class: string }> = {\r\n default: { class: '' },\r\n primary: { \r\n class: '[&>div]:bg-blue-500',\r\n },\r\n success: { \r\n class: '[&>div]:bg-green-500',\r\n },\r\n warning: { \r\n class: '[&>div]:bg-amber-500',\r\n },\r\n danger: { \r\n class: '[&>div]:bg-red-500',\r\n },\r\n}\r\n\r\n/**\r\n * size -> class 매핑\r\n */\r\nconst SIZE_PRESETS: Record<SizeType, { class: string }> = {\r\n sm: { \r\n class: 'h-2',\r\n },\r\n md: { \r\n class: 'h-4',\r\n },\r\n lg: { \r\n class: 'h-6',\r\n },\r\n}\r\n\r\n/**\r\n * variant -> size 매핑 (circular용)\r\n */\r\nconst CIRCULAR_SIZE_PRESETS: Record<SizeType, { size: number }> = {\r\n sm: { \r\n size: 60,\r\n },\r\n md: { \r\n size: 80,\r\n },\r\n lg: { \r\n size: 100,\r\n },\r\n}\r\n\r\n/** 진행률 퍼센트 계산 */\r\nconst percentage = computed(() => {\r\n return Math.round((props.value! / props.max!) * 100)\r\n})\r\n\r\n/** 최종 바인딩: 직접 넘긴 class가 있으면 styletype과 size 기본값과 병합 */\r\nconst mapped = computed(() => {\r\n const stylePreset = STYLE_PRESETS[props.styletype!]\r\n const sizePreset = SIZE_PRESETS[props.size!]\r\n const finalClass = [stylePreset.class, sizePreset.class, props.class].filter(Boolean).join(' ')\r\n \r\n return {\r\n modelValue: props.value,\r\n max: props.max,\r\n class: finalClass,\r\n }\r\n})\r\n\r\n/** 원형 프로그레스 바 스타일 계산 */\r\nconst circularStyle = computed(() => {\r\n const sizePreset = CIRCULAR_SIZE_PRESETS[props.size!]\r\n \r\n // 색상 추출 - linear와 동일한 색상 사용\r\n let color = '#000000' // default: 검은색 (linear의 기본 색상과 동일)\r\n if (props.styletype === 'primary') color = '#3b82f6' // blue-500\r\n else if (props.styletype === 'success') color = '#10b981' // green-500\r\n else if (props.styletype === 'warning') color = '#f59e0b' // amber-500\r\n else if (props.styletype === 'danger') color = '#ef4444' // red-500\r\n \r\n return {\r\n size: sizePreset.size,\r\n color,\r\n }\r\n})\r\n\r\n/** indeterminate 상태에서 표시할 텍스트 */\r\nconst indeterminateText = computed(() => {\r\n return props.indeterminate ? '로딩 중...' : `${percentage.value}%`\r\n})\r\n\r\n/** Linear indeterminate 색상 계산 */\r\nconst linearIndeterminateColor = computed(() => {\r\n let color = '#000000' // default: 검은색\r\n if (props.styletype === 'primary') color = '#3b82f6' // blue-500\r\n else if (props.styletype === 'success') color = '#10b981' // green-500\r\n else if (props.styletype === 'warning') color = '#f59e0b' // amber-500\r\n else if (props.styletype === 'danger') color = '#ef4444' // red-500\r\n \r\n return color\r\n})\r\n</script>\r\n\r\n<template>\r\n <div class=\"space-y-2\">\r\n <!-- Linear Progress용 상단 라벨 -->\r\n <div v-if=\"props.variant === 'linear' && (props.label || props.showLabel || props.indeterminate)\" class=\"flex justify-between items-center\">\r\n <p v-if=\"props.label\" class=\"text-sm font-medium text-gray-700\">\r\n {{ props.label }}\r\n </p>\r\n <p v-if=\"props.showLabel || props.indeterminate\" class=\"text-sm font-medium text-gray-600\">\r\n {{ indeterminateText }}\r\n </p>\r\n </div>\r\n \r\n <!-- Circular Progress용 상단 라벨 -->\r\n <div v-if=\"props.variant === 'circular' && props.label\" class=\"text-center mb-2\">\r\n <p class=\"text-sm font-medium text-gray-700\">{{ props.label }}</p>\r\n </div>\r\n \r\n <!-- Linear Progress -->\r\n <div v-if=\"props.variant === 'linear'\">\r\n <!-- Indeterminate Linear -->\r\n <div v-if=\"props.indeterminate\" class=\"relative overflow-hidden rounded-full bg-gray-200\" :class=\"SIZE_PRESETS[props.size!].class\">\r\n <div \r\n class=\"absolute h-full w-full animate-pulse\"\r\n :style=\"{ backgroundColor: linearIndeterminateColor }\"\r\n />\r\n <div \r\n class=\"absolute h-full w-1/3 animate-[indeterminate-linear_2s_infinite]\"\r\n :style=\"{ backgroundColor: linearIndeterminateColor }\"\r\n />\r\n </div>\r\n <!-- Determinate Linear -->\r\n <Progress v-else v-bind=\"mapped\" />\r\n </div>\r\n \r\n <!-- Circular Progress -->\r\n <div v-else-if=\"props.variant === 'circular'\" class=\"flex justify-center\">\r\n <div class=\"relative\" :style=\"{ width: circularStyle.size + 'px', height: circularStyle.size + 'px' }\">\r\n <!-- Indeterminate Circular -->\r\n <div v-if=\"props.indeterminate\">\r\n <svg class=\"w-full h-full animate-spin\" viewBox=\"0 0 100 100\">\r\n <circle\r\n cx=\"50\"\r\n cy=\"50\"\r\n r=\"45\"\r\n stroke=\"#e5e7eb\"\r\n stroke-width=\"8\"\r\n fill=\"none\"\r\n />\r\n <circle\r\n cx=\"50\"\r\n cy=\"50\"\r\n r=\"45\"\r\n :stroke=\"circularStyle.color\"\r\n stroke-width=\"8\"\r\n fill=\"none\"\r\n stroke-linecap=\"round\"\r\n stroke-dasharray=\"70 213\"\r\n stroke-dashoffset=\"0\"\r\n class=\"animate-[indeterminate-circular_2s_ease-in-out_infinite]\"\r\n />\r\n </svg>\r\n </div>\r\n <!-- Determinate Circular -->\r\n <div v-else>\r\n <svg class=\"w-full h-full transform -rotate-90\" viewBox=\"0 0 100 100\">\r\n <!-- Background circle -->\r\n <circle\r\n cx=\"50\"\r\n cy=\"50\"\r\n r=\"45\"\r\n stroke=\"#e5e7eb\"\r\n stroke-width=\"8\"\r\n fill=\"none\"\r\n />\r\n <!-- Progress circle -->\r\n <circle\r\n cx=\"50\"\r\n cy=\"50\"\r\n r=\"45\"\r\n :stroke=\"circularStyle.color\"\r\n stroke-width=\"8\"\r\n fill=\"none\"\r\n stroke-linecap=\"round\"\r\n :stroke-dasharray=\"283\"\r\n :stroke-dashoffset=\"283 - (283 * percentage / 100)\"\r\n class=\"transition-all duration-300 ease-in-out\"\r\n />\r\n </svg>\r\n </div>\r\n <!-- Center text -->\r\n <div v-if=\"props.showLabel || props.indeterminate\" class=\"absolute inset-0 flex items-center justify-center\">\r\n <span class=\"text-sm font-medium text-gray-700\">{{ indeterminateText }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <!-- Circular Progress용 하단 description -->\r\n <div v-if=\"props.variant === 'circular' && props.description\" class=\"text-center mt-2\">\r\n <p class=\"text-xs text-gray-500\">{{ props.description }}</p>\r\n </div>\r\n \r\n <!-- Linear Progress용 하단 description -->\r\n <p v-if=\"props.variant === 'linear' && props.description\" class=\"text-xs text-gray-500\">\r\n {{ props.description }}\r\n </p>\r\n </div>\r\n</template>\r\n\r\n<style>\r\n@keyframes indeterminate-linear {\r\n 0% {\r\n transform: translateX(-100%);\r\n }\r\n 100% {\r\n transform: translateX(400%);\r\n }\r\n}\r\n\r\n@keyframes indeterminate-circular {\r\n 0% {\r\n stroke-dasharray: 70 213;\r\n stroke-dashoffset: 0;\r\n }\r\n 50% {\r\n stroke-dasharray: 140 143;\r\n stroke-dashoffset: -70;\r\n }\r\n 100% {\r\n stroke-dasharray: 70 213;\r\n stroke-dashoffset: -213;\r\n }\r\n}\r\n</style>\r\n"],"names":["props","__props","STYLE_PRESETS","SIZE_PRESETS","CIRCULAR_SIZE_PRESETS","percentage","computed","mapped","stylePreset","sizePreset","finalClass","circularStyle","color","indeterminateText","linearIndeterminateColor","_openBlock","_createElementBlock","_hoisted_1","_hoisted_2","_hoisted_3","_toDisplayString","_hoisted_4","_hoisted_5","_createElementVNode","_hoisted_6","_hoisted_7","_normalizeClass","_createBlock","Progress","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_12","_hoisted_13","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19"],"mappings":"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"}
1
+ {"version":3,"file":"JProgress.vue.js","sources":["../../../../src/components/atoms/JProgress.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport Progress from '@/components/shadcn/Progress.vue'\r\n\r\ntype StyleType =\r\n | 'default' // 기본 스타일\r\n | 'primary' // 강조 스타일 (파랑)\r\n | 'success' // 성공 스타일 (초록)\r\n | 'warning' // 경고 스타일 (주황)\r\n | 'danger' // 위험 스타일 (빨강)\r\n\r\ntype SizeType = 'xs' | 'sm' | 'md' | 'lg'\n\r\ntype VariantType = 'linear' | 'circular'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n value?: number\r\n max?: number\r\n class?: string\r\n /** 스타일 프리셋 */\r\n styletype?: StyleType\r\n /** 크기 프리셋 */\r\n size?: SizeType\r\n /** 라벨 텍스트 */\r\n label?: string\r\n /** 진행률 퍼센트 표시 여부 */\r\n showLabel?: boolean\r\n /** 설명 텍스트 */\r\n description?: string\r\n /** 프로그레스 바 모양 */\r\n variant?: VariantType\r\n /** 무한 로딩 애니메이션 여부 */\r\n indeterminate?: boolean\r\n }>(),\r\n {\n value: 0,\n max: 100,\n styletype: 'default',\n size: 'sm',\n label: '',\n showLabel: true,\n description: '',\n variant: 'linear',\n indeterminate: false,\n },\r\n)\r\n\r\n/**\r\n * styletype -> class 매핑\r\n */\r\nconst STYLE_PRESETS: Record<StyleType, { class: string }> = {\r\n default: { class: '' },\r\n primary: { \r\n class: '[&>div]:bg-blue-500',\r\n },\r\n success: { \r\n class: '[&>div]:bg-green-500',\r\n },\r\n warning: { \r\n class: '[&>div]:bg-amber-500',\r\n },\r\n danger: { \r\n class: '[&>div]:bg-red-500',\r\n },\r\n}\r\n\r\n/**\r\n * size -> class 매핑\r\n */\r\nconst SIZE_PRESETS: Record<SizeType, { class: string }> = {\n xs: { \n class: 'h-1',\n },\n sm: { \n class: 'h-2',\n },\n md: { \n class: 'h-3',\n },\n lg: { \n class: 'h-4',\n },\n}\n\r\n/**\r\n * variant -> size 매핑 (circular용)\r\n */\r\nconst CIRCULAR_SIZE_PRESETS: Record<SizeType, { size: number }> = {\n xs: { \n size: 48,\n },\n sm: { \n size: 60,\n },\n md: { \n size: 72,\n },\n lg: { \n size: 88,\n },\n}\r\n\r\n/** 진행률 퍼센트 계산 */\r\nconst percentage = computed(() => {\r\n return Math.round((props.value! / props.max!) * 100)\r\n})\r\n\r\n/** 최종 바인딩: 직접 넘긴 class가 있으면 styletype과 size 기본값과 병합 */\r\nconst mapped = computed(() => {\r\n const stylePreset = STYLE_PRESETS[props.styletype!]\r\n const sizePreset = SIZE_PRESETS[props.size!]\r\n const finalClass = [stylePreset.class, sizePreset.class, props.class].filter(Boolean).join(' ')\r\n \r\n return {\r\n modelValue: props.value,\r\n max: props.max,\r\n class: finalClass,\r\n }\r\n})\r\n\r\n/** 원형 프로그레스 바 스타일 계산 */\r\nconst circularStyle = computed(() => {\r\n const sizePreset = CIRCULAR_SIZE_PRESETS[props.size!]\r\n \r\n // 색상 추출 - linear와 동일한 색상 사용\r\n let color = '#000000' // default: 검은색 (linear의 기본 색상과 동일)\r\n if (props.styletype === 'primary') color = '#3b82f6' // blue-500\r\n else if (props.styletype === 'success') color = '#10b981' // green-500\r\n else if (props.styletype === 'warning') color = '#f59e0b' // amber-500\r\n else if (props.styletype === 'danger') color = '#ef4444' // red-500\r\n \r\n return {\r\n size: sizePreset.size,\r\n color,\r\n }\r\n})\r\n\r\n/** indeterminate 상태에서 표시할 텍스트 */\r\nconst indeterminateText = computed(() => {\r\n return props.indeterminate ? '로딩 중...' : `${percentage.value}%`\r\n})\r\n\r\n/** Linear indeterminate 색상 계산 */\r\nconst linearIndeterminateColor = computed(() => {\r\n let color = '#000000' // default: 검은색\r\n if (props.styletype === 'primary') color = '#3b82f6' // blue-500\r\n else if (props.styletype === 'success') color = '#10b981' // green-500\r\n else if (props.styletype === 'warning') color = '#f59e0b' // amber-500\r\n else if (props.styletype === 'danger') color = '#ef4444' // red-500\r\n \r\n return color\r\n})\r\n</script>\r\n\r\n<template>\r\n <div class=\"space-y-2\">\r\n <!-- Linear Progress용 상단 라벨 -->\r\n <div v-if=\"props.variant === 'linear' && (props.label || props.showLabel || props.indeterminate)\" class=\"flex justify-between items-center\">\r\n <p v-if=\"props.label\" class=\"text-sm font-medium text-gray-700\">\r\n {{ props.label }}\r\n </p>\r\n <p v-if=\"props.showLabel || props.indeterminate\" class=\"text-sm font-medium text-gray-600\">\r\n {{ indeterminateText }}\r\n </p>\r\n </div>\r\n \r\n <!-- Circular Progress용 상단 라벨 -->\r\n <div v-if=\"props.variant === 'circular' && props.label\" class=\"text-center mb-2\">\r\n <p class=\"text-sm font-medium text-gray-700\">{{ props.label }}</p>\r\n </div>\r\n \r\n <!-- Linear Progress -->\r\n <div v-if=\"props.variant === 'linear'\">\r\n <!-- Indeterminate Linear -->\r\n <div v-if=\"props.indeterminate\" class=\"relative overflow-hidden rounded-full bg-gray-200\" :class=\"SIZE_PRESETS[props.size!].class\">\r\n <div \r\n class=\"absolute h-full w-full animate-pulse\"\r\n :style=\"{ backgroundColor: linearIndeterminateColor }\"\r\n />\r\n <div \r\n class=\"absolute h-full w-1/3 animate-[indeterminate-linear_2s_infinite]\"\r\n :style=\"{ backgroundColor: linearIndeterminateColor }\"\r\n />\r\n </div>\r\n <!-- Determinate Linear -->\r\n <Progress v-else v-bind=\"mapped\" />\r\n </div>\r\n \r\n <!-- Circular Progress -->\r\n <div v-else-if=\"props.variant === 'circular'\" class=\"flex justify-center\">\r\n <div class=\"relative\" :style=\"{ width: circularStyle.size + 'px', height: circularStyle.size + 'px' }\">\r\n <!-- Indeterminate Circular -->\r\n <div v-if=\"props.indeterminate\">\r\n <svg class=\"w-full h-full animate-spin\" viewBox=\"0 0 100 100\">\r\n <circle\r\n cx=\"50\"\r\n cy=\"50\"\r\n r=\"45\"\r\n stroke=\"#e5e7eb\"\r\n stroke-width=\"8\"\r\n fill=\"none\"\r\n />\r\n <circle\r\n cx=\"50\"\r\n cy=\"50\"\r\n r=\"45\"\r\n :stroke=\"circularStyle.color\"\r\n stroke-width=\"8\"\r\n fill=\"none\"\r\n stroke-linecap=\"round\"\r\n stroke-dasharray=\"70 213\"\r\n stroke-dashoffset=\"0\"\r\n class=\"animate-[indeterminate-circular_2s_ease-in-out_infinite]\"\r\n />\r\n </svg>\r\n </div>\r\n <!-- Determinate Circular -->\r\n <div v-else>\r\n <svg class=\"w-full h-full transform -rotate-90\" viewBox=\"0 0 100 100\">\r\n <!-- Background circle -->\r\n <circle\r\n cx=\"50\"\r\n cy=\"50\"\r\n r=\"45\"\r\n stroke=\"#e5e7eb\"\r\n stroke-width=\"8\"\r\n fill=\"none\"\r\n />\r\n <!-- Progress circle -->\r\n <circle\r\n cx=\"50\"\r\n cy=\"50\"\r\n r=\"45\"\r\n :stroke=\"circularStyle.color\"\r\n stroke-width=\"8\"\r\n fill=\"none\"\r\n stroke-linecap=\"round\"\r\n :stroke-dasharray=\"283\"\r\n :stroke-dashoffset=\"283 - (283 * percentage / 100)\"\r\n class=\"transition-all duration-300 ease-in-out\"\r\n />\r\n </svg>\r\n </div>\r\n <!-- Center text -->\r\n <div v-if=\"props.showLabel || props.indeterminate\" class=\"absolute inset-0 flex items-center justify-center\">\r\n <span class=\"text-sm font-medium text-gray-700\">{{ indeterminateText }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <!-- Circular Progress용 하단 description -->\r\n <div v-if=\"props.variant === 'circular' && props.description\" class=\"text-center mt-2\">\r\n <p class=\"text-xs text-gray-500\">{{ props.description }}</p>\r\n </div>\r\n \r\n <!-- Linear Progress용 하단 description -->\r\n <p v-if=\"props.variant === 'linear' && props.description\" class=\"text-xs text-gray-500\">\r\n {{ props.description }}\r\n </p>\r\n </div>\r\n</template>\r\n\r\n<style>\r\n@keyframes indeterminate-linear {\r\n 0% {\r\n transform: translateX(-100%);\r\n }\r\n 100% {\r\n transform: translateX(400%);\r\n }\r\n}\r\n\r\n@keyframes indeterminate-circular {\r\n 0% {\r\n stroke-dasharray: 70 213;\r\n stroke-dashoffset: 0;\r\n }\r\n 50% {\r\n stroke-dasharray: 140 143;\r\n stroke-dashoffset: -70;\r\n }\r\n 100% {\r\n stroke-dasharray: 70 213;\r\n stroke-dashoffset: -213;\r\n }\r\n}\r\n</style>\r\n"],"names":["props","__props","STYLE_PRESETS","SIZE_PRESETS","CIRCULAR_SIZE_PRESETS","percentage","computed","mapped","stylePreset","sizePreset","finalClass","circularStyle","color","indeterminateText","linearIndeterminateColor","_openBlock","_createElementBlock","_hoisted_1","_hoisted_2","_hoisted_3","_toDisplayString","_hoisted_4","_hoisted_5","_createElementVNode","_hoisted_6","_hoisted_7","_normalizeClass","_createBlock","Progress","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_12","_hoisted_13","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue");require("../shadcn/index.cjs");const m=require("../shadcn/RadioGroup.vue.cjs"),p=require("../shadcn/RadioGroupItem.vue.cjs"),g=["for"],f=e.defineComponent({__name:"JRadio",props:{modelValue:{},options:{default:()=>[]},disabled:{type:Boolean,default:!1},required:{type:Boolean,default:!1},name:{},id:{},class:{},styletype:{default:"default"}},emits:["update:modelValue","change"],setup(l,{emit:o}){const r=l,u=o,a={default:{groupClass:"",itemClass:""},primary:{groupClass:"",itemClass:"border-blue-500 text-blue-500"},success:{groupClass:"",itemClass:"border-green-500 text-green-600"},danger:{groupClass:"",itemClass:"border-destructive text-destructive"},sm:{groupClass:"",itemClass:"h-3.5 w-3.5"},lg:{groupClass:"",itemClass:"h-5 w-5"},horizontal:{groupClass:"flex flex-row gap-4",itemClass:""},vertical:{groupClass:"grid gap-2",itemClass:""}},i=e.computed(()=>{const t=r.styletype||"default";return[(a[t]??a.default)?.groupClass,r.class].filter(Boolean).join(" ")}),n=e.computed(()=>{const t=r.styletype||"default";return(a[t]??a.default)?.itemClass}),c=t=>{u("update:modelValue",t),u("change",t)};return(t,d)=>(e.openBlock(),e.createBlock(e.unref(m.default),{"model-value":String(l.modelValue),disabled:l.disabled,required:l.required,name:l.name,id:l.id,class:e.normalizeClass(i.value),"onUpdate:modelValue":c},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.options,s=>(e.openBlock(),e.createElementBlock("div",{key:s.value,class:e.normalizeClass(l.styletype==="vertical"?"block":"flex items-center space-x-2")},[e.createVNode(e.unref(p.default),{id:String(s.value),value:String(s.value),disabled:s.disabled,class:e.normalizeClass(n.value)},null,8,["id","value","disabled","class"]),e.createElementVNode("label",{for:String(s.value),class:"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"},e.toDisplayString(s.label),9,g)],2))),128))]),_:1},8,["model-value","disabled","required","name","id","class"]))}});exports.default=f;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue");require("../shadcn/index.cjs");const m=require("../shadcn/RadioGroup.vue.cjs"),p=require("../shadcn/RadioGroupItem.vue.cjs"),g=["for"],f=e.defineComponent({__name:"JRadio",props:{modelValue:{},options:{default:()=>[]},disabled:{type:Boolean,default:!1},required:{type:Boolean,default:!1},name:{},id:{},class:{},styletype:{default:"default"}},emits:["update:modelValue","change"],setup(l,{emit:o}){const r=l,u=o,a={default:{groupClass:"",itemClass:""},primary:{groupClass:"",itemClass:"border-blue-500 text-blue-500"},success:{groupClass:"",itemClass:"border-green-500 text-green-600"},danger:{groupClass:"",itemClass:"border-destructive text-destructive"},sm:{groupClass:"",itemClass:"h-3.5 w-3.5"},lg:{groupClass:"",itemClass:"h-5 w-5"},horizontal:{groupClass:"flex flex-row gap-4",itemClass:""},vertical:{groupClass:"grid gap-2",itemClass:""}},i=e.computed(()=>{const t=r.styletype||"default";return[(a[t]??a.default)?.groupClass,r.class].filter(Boolean).join(" ")}),n=e.computed(()=>{const t=r.styletype||"default";return(a[t]??a.default)?.itemClass}),c=t=>{u("update:modelValue",t),u("change",t)};return(t,d)=>(e.openBlock(),e.createBlock(e.unref(m.default),{"model-value":String(l.modelValue),disabled:l.disabled,required:l.required,name:l.name,id:l.id,class:e.normalizeClass(i.value),"onUpdate:modelValue":c},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.options,s=>(e.openBlock(),e.createElementBlock("div",{key:s.value,class:e.normalizeClass(l.styletype==="vertical"?"block":"flex items-center space-x-2")},[e.createVNode(e.unref(p.default),{id:String(s.value),value:String(s.value),disabled:s.disabled,class:e.normalizeClass(n.value)},null,8,["id","value","disabled","class"]),e.createElementVNode("label",{for:String(s.value),class:"text-xs font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"},e.toDisplayString(s.label),9,g)],2))),128))]),_:1},8,["model-value","disabled","required","name","id","class"]))}});exports.default=f;
2
2
  //# sourceMappingURL=JRadio.vue.cjs.map
@@ -1 +1 @@
1
- {"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 :model-value=\"String(modelValue)\" \r\n :disabled=\"disabled\"\r\n :required=\"required\"\r\n :name=\"name\"\r\n :id=\"id\"\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\r\n :for=\"String(option.value)\"\r\n class=\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\r\n >\r\n {{ option.label }}\r\n </label>\r\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,cAAa,OAAOZ,EAAA,UAAU,EAC9B,SAAUA,EAAA,SACV,SAAUA,EAAA,SACV,KAAMA,EAAA,KACN,GAAIA,EAAA,GACJ,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"}
1
+ {"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 :model-value=\"String(modelValue)\" \r\n :disabled=\"disabled\"\r\n :required=\"required\"\r\n :name=\"name\"\r\n :id=\"id\"\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,cAAa,OAAOZ,EAAA,UAAU,EAC9B,SAAUA,EAAA,SACV,SAAUA,EAAA,SACV,KAAMA,EAAA,KACN,GAAIA,EAAA,GACJ,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"}
@@ -80,7 +80,7 @@ const w = ["for"], L = /* @__PURE__ */ C({
80
80
  }, null, 8, ["id", "value", "disabled", "class"]),
81
81
  S("label", {
82
82
  for: String(a.value),
83
- class: "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
83
+ class: "text-xs font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
84
84
  }, V(a.label), 9, w)
85
85
  ], 2))), 128))
86
86
  ]),
@@ -1 +1 @@
1
- {"version":3,"file":"JRadio.vue.js","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 :model-value=\"String(modelValue)\" \r\n :disabled=\"disabled\"\r\n :required=\"required\"\r\n :name=\"name\"\r\n :id=\"id\"\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\r\n :for=\"String(option.value)\"\r\n class=\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\r\n >\r\n {{ option.label }}\r\n </label>\r\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":";;;;;;;;;;;;;;;;;;AAoBA,UAAMA,IAAQC,GAoBRC,IAAOC,GAQPC,IAA8E;AAAA,MAClF,SAAS;AAAA,QACP,YAAY;AAAA,QACZ,WAAW;AAAA,MAAA;AAAA,MAEb,SAAS;AAAA,QACP,YAAY;AAAA,QACZ,WAAW;AAAA,MAAA;AAAA,MAEb,SAAS;AAAA,QACP,YAAY;AAAA,QACZ,WAAW;AAAA,MAAA;AAAA,MAEb,QAAQ;AAAA,QACN,YAAY;AAAA,QACZ,WAAW;AAAA,MAAA;AAAA,MAEb,IAAI;AAAA,QACF,YAAY;AAAA,QACZ,WAAW;AAAA,MAAA;AAAA,MAEb,IAAI;AAAA,QACF,YAAY;AAAA,QACZ,WAAW;AAAA,MAAA;AAAA,MAEb,YAAY;AAAA,QACV,YAAY;AAAA,QACZ,WAAW;AAAA,MAAA;AAAA,MAEb,UAAU;AAAA,QACR,YAAY;AAAA,QACZ,WAAW;AAAA,MAAA;AAAA,IACb,GAGIC,IAAaC,EAAS,MAAM;AAChC,YAAMC,IAAWP,EAAM,aAAa;AAEpC,aAAO,EADQI,EAAcG,CAAQ,KAAKH,EAAc,UACxC,YAAYJ,EAAM,KAAK,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,IACnE,CAAC,GAEKQ,IAAYF,EAAS,MAAM;AAC/B,YAAMC,IAAWP,EAAM,aAAa;AAEpC,cADeI,EAAcG,CAAQ,KAAKH,EAAc,UACzC;AAAA,IACjB,CAAC,GAEKK,IAAe,CAACC,MAAkB;AACtC,MAAAR,EAAK,qBAAqBQ,CAAK,GAC/BR,EAAK,UAAUQ,CAAK;AAAA,IACtB;2BAIEC,EAuBaC,EAAAC,CAAA,GAAA;AAAA,MAtBV,eAAa,OAAOZ,EAAA,UAAU;AAAA,MAC9B,UAAUA,EAAA;AAAA,MACV,UAAUA,EAAA;AAAA,MACV,MAAMA,EAAA;AAAA,MACN,IAAIA,EAAA;AAAA,MACJ,SAAOI,EAAA,KAAU;AAAA,MACjB,uBAAoBI;AAAA,IAAA;iBAEhB,MAAyB;AAAA,gBAA9BK,EAaMC,GAAA,MAAAC,EAbgBf,EAAA,SAAO,CAAjBgB,YAAZH,EAaM,OAAA;AAAA,UAb0B,KAAKG,EAAO;AAAA,UAAQ,SAAOhB,EAAA,cAAS,aAAA,UAAA,6BAAA;AAAA,QAAA;UAClEiB,EAKEN,EAAAO,CAAA,GAAA;AAAA,YAJC,IAAI,OAAOF,EAAO,KAAK;AAAA,YACvB,OAAO,OAAOA,EAAO,KAAK;AAAA,YAC1B,UAAUA,EAAO;AAAA,YACjB,SAAOT,EAAA,KAAS;AAAA,UAAA;UAEnBY,EAKQ,SAAA;AAAA,YAJL,KAAK,OAAOH,EAAO,KAAK;AAAA,YACzB,OAAM;AAAA,UAAA,GAEHI,EAAAJ,EAAO,KAAK,GAAA,GAAAK,CAAA;AAAA,QAAA;;;;;;"}
1
+ {"version":3,"file":"JRadio.vue.js","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 :model-value=\"String(modelValue)\" \r\n :disabled=\"disabled\"\r\n :required=\"required\"\r\n :name=\"name\"\r\n :id=\"id\"\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":";;;;;;;;;;;;;;;;;;AAoBA,UAAMA,IAAQC,GAoBRC,IAAOC,GAQPC,IAA8E;AAAA,MAClF,SAAS;AAAA,QACP,YAAY;AAAA,QACZ,WAAW;AAAA,MAAA;AAAA,MAEb,SAAS;AAAA,QACP,YAAY;AAAA,QACZ,WAAW;AAAA,MAAA;AAAA,MAEb,SAAS;AAAA,QACP,YAAY;AAAA,QACZ,WAAW;AAAA,MAAA;AAAA,MAEb,QAAQ;AAAA,QACN,YAAY;AAAA,QACZ,WAAW;AAAA,MAAA;AAAA,MAEb,IAAI;AAAA,QACF,YAAY;AAAA,QACZ,WAAW;AAAA,MAAA;AAAA,MAEb,IAAI;AAAA,QACF,YAAY;AAAA,QACZ,WAAW;AAAA,MAAA;AAAA,MAEb,YAAY;AAAA,QACV,YAAY;AAAA,QACZ,WAAW;AAAA,MAAA;AAAA,MAEb,UAAU;AAAA,QACR,YAAY;AAAA,QACZ,WAAW;AAAA,MAAA;AAAA,IACb,GAGIC,IAAaC,EAAS,MAAM;AAChC,YAAMC,IAAWP,EAAM,aAAa;AAEpC,aAAO,EADQI,EAAcG,CAAQ,KAAKH,EAAc,UACxC,YAAYJ,EAAM,KAAK,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,IACnE,CAAC,GAEKQ,IAAYF,EAAS,MAAM;AAC/B,YAAMC,IAAWP,EAAM,aAAa;AAEpC,cADeI,EAAcG,CAAQ,KAAKH,EAAc,UACzC;AAAA,IACjB,CAAC,GAEKK,IAAe,CAACC,MAAkB;AACtC,MAAAR,EAAK,qBAAqBQ,CAAK,GAC/BR,EAAK,UAAUQ,CAAK;AAAA,IACtB;2BAIEC,EAuBaC,EAAAC,CAAA,GAAA;AAAA,MAtBV,eAAa,OAAOZ,EAAA,UAAU;AAAA,MAC9B,UAAUA,EAAA;AAAA,MACV,UAAUA,EAAA;AAAA,MACV,MAAMA,EAAA;AAAA,MACN,IAAIA,EAAA;AAAA,MACJ,SAAOI,EAAA,KAAU;AAAA,MACjB,uBAAoBI;AAAA,IAAA;iBAEhB,MAAyB;AAAA,gBAA9BK,EAaMC,GAAA,MAAAC,EAbgBf,EAAA,SAAO,CAAjBgB,YAAZH,EAaM,OAAA;AAAA,UAb0B,KAAKG,EAAO;AAAA,UAAQ,SAAOhB,EAAA,cAAS,aAAA,UAAA,6BAAA;AAAA,QAAA;UAClEiB,EAKEN,EAAAO,CAAA,GAAA;AAAA,YAJC,IAAI,OAAOF,EAAO,KAAK;AAAA,YACvB,OAAO,OAAOA,EAAO,KAAK;AAAA,YAC1B,UAAUA,EAAO;AAAA,YACjB,SAAOT,EAAA,KAAS;AAAA,UAAA;UAEnBY,EAKQ,SAAA;AAAA,YAJL,KAAK,OAAOH,EAAO,KAAK;AAAA,YACzB,OAAM;AAAA,UAAA,GAEHI,EAAAJ,EAAO,KAAK,GAAA,GAAAK,CAAA;AAAA,QAAA;;;;;;"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),n=require("lucide-vue-next"),o=require("../../lib/utils.cjs");require("../shadcn/index.cjs");const _=require("../shadcn/Combobox.vue.cjs"),p=require("../shadcn/ComboboxAnchor.vue.cjs"),v=require("../shadcn/ComboboxTrigger.vue.cjs"),C=require("../shadcn/Button.vue.cjs"),x=require("../shadcn/ComboboxList.vue.cjs"),h=require("../shadcn/ComboboxInput.vue.cjs"),y=require("../shadcn/ComboboxEmpty.vue.cjs"),g=require("../shadcn/ComboboxGroup.vue.cjs"),V=require("../shadcn/ComboboxItem.vue.cjs"),q={class:"relative w-full max-w-sm items-center"},N={class:"absolute start-0 inset-y-0 flex items-center justify-center px-3"},w=e.defineComponent({__name:"JSearchCombo",props:{modelValue:{},options:{default:()=>[]},placeholder:{default:"선택해주세요."},searchPlaceholder:{default:""},emptyText:{default:"검색 결과가 없습니다."},disabled:{type:Boolean,default:!1},required:{type:Boolean,default:!1},name:{},id:{},multiple:{type:Boolean,default:!1},class:{},styletype:{default:"default"}},emits:["update:modelValue","change","focus","blur"],setup(t,{emit:c}){const d=t,r=c,i={default:{variant:"outline"},error:{variant:"outline",buttonClass:"border-destructive text-destructive",inputClass:"border-destructive focus:ring-destructive"},success:{variant:"outline",buttonClass:"border-green-500 text-green-700",inputClass:"border-green-500 focus:ring-green-500"},warning:{variant:"outline",buttonClass:"border-amber-500 text-amber-700",inputClass:"border-amber-500 focus:ring-amber-500"},sm:{variant:"outline",buttonClass:"h-8 text-xs",inputClass:"h-8 text-xs"},lg:{variant:"outline",buttonClass:"h-12 text-base",inputClass:"h-12 text-base"}},s=e.computed(()=>{const a=d.styletype||"default";return i[a]??i.default}),f=e.computed(()=>o.cn("justify-between",s.value?.buttonClass,d.class)),m=e.computed(()=>o.cn("pl-9 focus-visible:ring-0 border-0 border-b rounded-none h-10",s.value?.inputClass)),b=a=>{r("update:modelValue",a),r("change",a)};return(a,l)=>(e.openBlock(),e.createBlock(e.unref(_.default),{"model-value":t.modelValue,by:"label",disabled:t.disabled,required:t.required,name:t.name,"onUpdate:modelValue":l[2]||(l[2]=u=>b(u))},{default:e.withCtx(()=>[e.createVNode(e.unref(p.default),{"as-child":""},{default:e.withCtx(()=>[e.createVNode(e.unref(v.default),{"as-child":""},{default:e.withCtx(()=>[e.createVNode(e.unref(C.default),{id:t.id,variant:s.value.variant,class:e.normalizeClass(f.value),disabled:t.disabled,onFocus:l[0]||(l[0]=u=>r("focus",u)),onBlur:l[1]||(l[1]=u=>r("blur",u))},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(t.modelValue?.label??t.placeholder)+" ",1),e.createVNode(e.unref(n.ChevronsUpDown),{class:"ml-2 h-4 w-4 shrink-0 opacity-50"})]),_:1},8,["id","variant","class","disabled"])]),_:1})]),_:1}),e.createVNode(e.unref(x.default),null,{default:e.withCtx(()=>[e.createElementVNode("div",q,[e.createVNode(e.unref(h.default),{class:e.normalizeClass(m.value),placeholder:t.searchPlaceholder},null,8,["class","placeholder"]),e.createElementVNode("span",N,[e.createVNode(e.unref(n.Search),{class:"size-4 text-muted-foreground"})])]),e.createVNode(e.unref(y.default),null,{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(t.emptyText),1)]),_:1}),e.createVNode(e.unref(g.default),null,{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.options,u=>(e.openBlock(),e.createBlock(e.unref(V.default),{key:u.value,value:u},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(u.label)+" ",1),t.modelValue?.value===u.value?(e.openBlock(),e.createBlock(e.unref(n.Check),{key:0,class:e.normalizeClass(e.unref(o.cn)("ml-auto h-4 w-4"))},null,8,["class"])):e.createCommentVNode("",!0)]),_:2},1032,["value"]))),128))]),_:1})]),_:1})]),_:1},8,["model-value","disabled","required","name"]))}});exports.default=w;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),n=require("lucide-vue-next"),o=require("../../lib/utils.cjs");require("../shadcn/index.cjs");const b=require("../shadcn/Combobox.vue.cjs"),x=require("../shadcn/ComboboxAnchor.vue.cjs"),_=require("../shadcn/ComboboxTrigger.vue.cjs"),v=require("../shadcn/Button.vue.cjs"),C=require("../shadcn/ComboboxList.vue.cjs"),h=require("../shadcn/ComboboxInput.vue.cjs"),y=require("../shadcn/ComboboxEmpty.vue.cjs"),g=require("../shadcn/ComboboxGroup.vue.cjs"),V=require("../shadcn/ComboboxItem.vue.cjs"),q={class:"relative w-full max-w-sm items-center"},N={class:"absolute start-0 inset-y-0 flex items-center justify-center px-2.5"},w=e.defineComponent({__name:"JSearchCombo",props:{modelValue:{},options:{default:()=>[]},placeholder:{default:"선택해주세요."},searchPlaceholder:{default:""},emptyText:{default:"검색 결과가 없습니다."},disabled:{type:Boolean,default:!1},required:{type:Boolean,default:!1},name:{},id:{},multiple:{type:Boolean,default:!1},class:{},styletype:{default:"default"}},emits:["update:modelValue","change","focus","blur"],setup(t,{emit:c}){const d=t,r=c,i={default:{variant:"outline",buttonClass:"h-8 text-xs px-2.5"},error:{variant:"outline",buttonClass:"h-8 text-xs px-2.5 border-destructive text-destructive",inputClass:"border-destructive focus:ring-destructive"},success:{variant:"outline",buttonClass:"h-8 text-xs px-2.5 border-green-500 text-green-700",inputClass:"border-green-500 focus:ring-green-500"},warning:{variant:"outline",buttonClass:"h-8 text-xs px-2.5 border-amber-500 text-amber-700",inputClass:"border-amber-500 focus:ring-amber-500"},sm:{variant:"outline",buttonClass:"h-7 text-[11px] px-2",inputClass:"h-7 text-[11px] px-2 py-1"},lg:{variant:"outline",buttonClass:"h-10 text-sm px-3",inputClass:"h-10 text-sm px-3 py-2"}},s=e.computed(()=>{const a=d.styletype||"default";return i[a]??i.default}),p=e.computed(()=>o.cn("justify-between",s.value?.buttonClass,d.class)),f=e.computed(()=>o.cn("pl-8 pr-2 py-1.5 focus-visible:ring-0 border-0 border-b rounded-none h-8 text-xs",s.value?.inputClass)),m=a=>{r("update:modelValue",a),r("change",a)};return(a,l)=>(e.openBlock(),e.createBlock(e.unref(b.default),{"model-value":t.modelValue,by:"label",disabled:t.disabled,required:t.required,name:t.name,"onUpdate:modelValue":l[2]||(l[2]=u=>m(u))},{default:e.withCtx(()=>[e.createVNode(e.unref(x.default),{"as-child":""},{default:e.withCtx(()=>[e.createVNode(e.unref(_.default),{"as-child":""},{default:e.withCtx(()=>[e.createVNode(e.unref(v.default),{id:t.id,variant:s.value.variant,class:e.normalizeClass(p.value),disabled:t.disabled,onFocus:l[0]||(l[0]=u=>r("focus",u)),onBlur:l[1]||(l[1]=u=>r("blur",u))},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(t.modelValue?.label??t.placeholder)+" ",1),e.createVNode(e.unref(n.ChevronsUpDown),{class:"ml-2 h-3.5 w-3.5 shrink-0 opacity-50"})]),_:1},8,["id","variant","class","disabled"])]),_:1})]),_:1}),e.createVNode(e.unref(C.default),null,{default:e.withCtx(()=>[e.createElementVNode("div",q,[e.createVNode(e.unref(h.default),{class:e.normalizeClass(f.value),placeholder:t.searchPlaceholder},null,8,["class","placeholder"]),e.createElementVNode("span",N,[e.createVNode(e.unref(n.Search),{class:"size-3.5 text-muted-foreground"})])]),e.createVNode(e.unref(y.default),null,{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(t.emptyText),1)]),_:1}),e.createVNode(e.unref(g.default),null,{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.options,u=>(e.openBlock(),e.createBlock(e.unref(V.default),{key:u.value,value:u},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(u.label)+" ",1),t.modelValue?.value===u.value?(e.openBlock(),e.createBlock(e.unref(n.Check),{key:0,class:e.normalizeClass(e.unref(o.cn)("ml-auto h-3.5 w-3.5"))},null,8,["class"])):e.createCommentVNode("",!0)]),_:2},1032,["value"]))),128))]),_:1})]),_:1})]),_:1},8,["model-value","disabled","required","name"]))}});exports.default=w;
2
2
  //# sourceMappingURL=JSearchCombo.vue.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"JSearchCombo.vue.cjs","sources":["../../../../src/components/atoms/JSearchCombo.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport { Check, ChevronsUpDown, Search } from 'lucide-vue-next'\r\nimport { cn } from '@/lib/utils'\r\nimport {\r\n Button,\r\n Combobox,\r\n ComboboxAnchor,\r\n ComboboxEmpty,\r\n ComboboxGroup,\r\n ComboboxInput,\r\n ComboboxItem,\r\n ComboboxList,\r\n ComboboxTrigger,\r\n} from '@/components/shadcn'\r\n\r\nexport interface ComboboxOption {\r\n value: string | number\r\n label: string\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?: ComboboxOption\r\n options?: ComboboxOption[]\r\n placeholder?: string\r\n searchPlaceholder?: string\r\n emptyText?: string\r\n disabled?: boolean\r\n required?: boolean\r\n name?: string\r\n id?: string\r\n multiple?: boolean\r\n class?: string\r\n /** 스타일 프리셋 */\r\n styletype?: StyleType\r\n }>(),\r\n {\r\n options: () => [],\r\n placeholder: '선택해주세요.',\r\n searchPlaceholder: '',\r\n emptyText: '검색 결과가 없습니다.',\r\n disabled: false,\r\n required: false,\r\n multiple: false,\r\n styletype: 'default',\r\n },\r\n)\r\n\r\nconst emit = defineEmits<{\r\n 'update:modelValue': [value: ComboboxOption | undefined]\r\n 'change': [value: ComboboxOption | undefined]\r\n 'focus': [event: FocusEvent]\r\n 'blur': [event: FocusEvent]\r\n}>()\r\n\r\n/**\r\n * styletype -> variant/class 매핑\r\n */\r\nconst STYLE_PRESETS: Record<StyleType, { variant: 'default' | 'outline' | 'destructive' | 'secondary' | 'ghost' | 'link', buttonClass?: string, inputClass?: string }> = {\r\n default: { \r\n variant: 'outline',\r\n },\r\n error: { \r\n variant: 'outline',\r\n buttonClass: 'border-destructive text-destructive',\r\n inputClass: 'border-destructive focus:ring-destructive',\r\n },\r\n success: { \r\n variant: 'outline',\r\n buttonClass: 'border-green-500 text-green-700',\r\n inputClass: 'border-green-500 focus:ring-green-500',\r\n },\r\n warning: { \r\n variant: 'outline',\r\n buttonClass: 'border-amber-500 text-amber-700',\r\n inputClass: 'border-amber-500 focus:ring-amber-500',\r\n },\r\n sm: { \r\n variant: 'outline',\r\n buttonClass: 'h-8 text-xs',\r\n inputClass: 'h-8 text-xs',\r\n },\r\n lg: { \r\n variant: 'outline',\r\n buttonClass: 'h-12 text-base',\r\n inputClass: 'h-12 text-base',\r\n },\r\n}\r\n\r\nconst preset = computed(() => {\r\n const styleKey = props.styletype || 'default'\r\n return STYLE_PRESETS[styleKey] ?? STYLE_PRESETS.default\r\n})\r\n\r\nconst buttonClass = computed(() => {\r\n return cn('justify-between', preset.value?.buttonClass, props.class)\r\n})\r\n\r\nconst inputClass = computed(() => {\r\n return cn('pl-9 focus-visible:ring-0 border-0 border-b rounded-none h-10', preset.value?.inputClass)\r\n})\r\n\r\nconst handleChange = (value: ComboboxOption | undefined) => {\r\n emit('update:modelValue', value)\r\n emit('change', value)\r\n}\r\n</script>\r\n\r\n<template>\r\n <Combobox \r\n :model-value=\"modelValue\" \r\n by=\"label\" \r\n :disabled=\"disabled\"\r\n :required=\"required\"\r\n :name=\"name\"\r\n @update:model-value=\"(value) => handleChange(value as ComboboxOption | undefined)\"\r\n >\r\n <ComboboxAnchor as-child>\r\n <ComboboxTrigger as-child>\r\n <Button \r\n :id=\"id\"\r\n :variant=\"preset.variant\" \r\n :class=\"buttonClass\"\r\n :disabled=\"disabled\"\r\n @focus=\"emit('focus', $event as FocusEvent)\"\r\n @blur=\"emit('blur', $event as FocusEvent)\"\r\n >\r\n {{ modelValue?.label ?? placeholder }}\r\n <ChevronsUpDown class=\"ml-2 h-4 w-4 shrink-0 opacity-50\" />\r\n </Button>\r\n </ComboboxTrigger>\r\n </ComboboxAnchor>\r\n\r\n <ComboboxList>\r\n <div class=\"relative w-full max-w-sm items-center\">\r\n <ComboboxInput :class=\"inputClass\" :placeholder=\"searchPlaceholder\" />\r\n <span class=\"absolute start-0 inset-y-0 flex items-center justify-center px-3\">\r\n <Search class=\"size-4 text-muted-foreground\" />\r\n </span>\r\n </div>\r\n\r\n <ComboboxEmpty>\r\n {{ emptyText }}\r\n </ComboboxEmpty>\r\n\r\n <ComboboxGroup>\r\n <ComboboxItem\r\n v-for=\"option in options\"\r\n :key=\"option.value\"\r\n :value=\"option\"\r\n >\r\n {{ option.label }}\r\n\r\n <Check v-if=\"modelValue?.value === option.value\" :class=\"cn('ml-auto h-4 w-4')\" />\r\n </ComboboxItem>\r\n </ComboboxGroup>\r\n </ComboboxList>\r\n </Combobox>\r\n</template>\r\n"],"names":["props","__props","emit","__emit","STYLE_PRESETS","preset","computed","styleKey","buttonClass","cn","inputClass","handleChange","value","_createBlock","_unref","Combobox","_cache","_createVNode","ComboboxAnchor","ComboboxTrigger","Button","$event","_createTextVNode","_toDisplayString","ChevronsUpDown","ComboboxList","_createElementVNode","_hoisted_1","ComboboxInput","_hoisted_2","Search","ComboboxEmpty","ComboboxGroup","_createElementBlock","_Fragment","_renderList","option","ComboboxItem","Check"],"mappings":"+oCA6BA,MAAMA,EAAQC,EA4BRC,EAAOC,EAUPC,EAAmK,CACvK,QAAS,CACP,QAAS,SAAA,EAEX,MAAO,CACL,QAAS,UACT,YAAa,sCACb,WAAY,2CAAA,EAEd,QAAS,CACP,QAAS,UACT,YAAa,kCACb,WAAY,uCAAA,EAEd,QAAS,CACP,QAAS,UACT,YAAa,kCACb,WAAY,uCAAA,EAEd,GAAI,CACF,QAAS,UACT,YAAa,cACb,WAAY,aAAA,EAEd,GAAI,CACF,QAAS,UACT,YAAa,iBACb,WAAY,gBAAA,CACd,EAGIC,EAASC,EAAAA,SAAS,IAAM,CAC5B,MAAMC,EAAWP,EAAM,WAAa,UACpC,OAAOI,EAAcG,CAAQ,GAAKH,EAAc,OAClD,CAAC,EAEKI,EAAcF,EAAAA,SAAS,IACpBG,EAAAA,GAAG,kBAAmBJ,EAAO,OAAO,YAAaL,EAAM,KAAK,CACpE,EAEKU,EAAaJ,EAAAA,SAAS,IACnBG,EAAAA,GAAG,gEAAiEJ,EAAO,OAAO,UAAU,CACpG,EAEKM,EAAgBC,GAAsC,CAC1DV,EAAK,oBAAqBU,CAAK,EAC/BV,EAAK,SAAUU,CAAK,CACtB,8BAIEC,EAAAA,YAgDWC,EAAAA,MAAAC,EAAAA,OAAA,EAAA,CA/CR,cAAad,EAAA,WACd,GAAG,QACF,SAAUA,EAAA,SACV,SAAUA,EAAA,SACV,KAAMA,EAAA,KACN,sBAAkBe,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAGJ,GAAUD,EAAaC,CAAK,EAAA,qBAElD,IAciB,CAdjBK,EAAAA,YAciBH,EAAAA,MAAAI,EAAAA,OAAA,EAAA,CAdD,WAAA,IAAQ,mBACtB,IAYkB,CAZlBD,EAAAA,YAYkBH,EAAAA,MAAAK,EAAAA,OAAA,EAAA,CAZD,WAAA,IAAQ,mBACvB,IAUS,CAVTF,cAUSH,EAAAA,MAAAM,EAAAA,OAAA,EAAA,CATN,GAAInB,EAAA,GACJ,QAASI,EAAA,MAAO,QAChB,uBAAOG,EAAA,KAAW,EAClB,SAAUP,EAAA,SACV,QAAKe,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAK,GAAEnB,EAAI,QAAUmB,CAAM,GAC3B,OAAIL,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAK,GAAEnB,EAAI,OAASmB,CAAM,EAAA,qBAE1B,IAAsC,CAAnCC,kBAAAC,EAAAA,gBAAAtB,EAAA,YAAY,OAASA,EAAA,WAAW,EAAG,IACtC,CAAA,EAAAgB,EAAAA,YAA2DH,EAAAA,MAAAU,EAAAA,cAAA,EAAA,CAA3C,MAAM,mCAAkC,CAAA,+DAK9DP,EAAAA,YAuBeH,EAAAA,MAAAW,SAAA,EAAA,KAAA,mBAtBb,IAKM,CALNC,EAAAA,mBAKM,MALNC,EAKM,CAJJV,cAAsEH,EAAAA,MAAAc,EAAAA,OAAA,EAAA,CAAtD,uBAAOlB,EAAA,KAAU,EAAG,YAAaT,EAAA,iBAAA,kCACjDyB,EAAAA,mBAEO,OAFPG,EAEO,CADLZ,EAAAA,YAA+CH,EAAAA,MAAAgB,EAAAA,MAAA,EAAA,CAAvC,MAAM,+BAA8B,CAAA,KAIhDb,EAAAA,YAEgBH,EAAAA,MAAAiB,SAAA,EAAA,KAAA,mBADd,IAAe,qCAAZ9B,EAAA,SAAS,EAAA,CAAA,CAAA,SAGdgB,EAAAA,YAUgBH,EAAAA,MAAAkB,SAAA,EAAA,KAAA,mBARZ,IAAyB,kBAD3BC,EAAAA,mBAQeC,EAAAA,SAAA,KAAAC,EAAAA,WAPIlC,EAAA,QAAVmC,kBADTvB,EAAAA,YAQeC,EAAAA,MAAAuB,EAAAA,OAAA,EAAA,CANZ,IAAKD,EAAO,MACZ,MAAOA,CAAA,qBAER,IAAkB,qCAAfA,EAAO,KAAK,EAAG,IAElB,CAAA,EAAanC,EAAA,YAAY,QAAUmC,EAAO,qBAA1CvB,EAAAA,YAAkFC,QAAAwB,EAAAA,KAAA,EAAA,OAAhC,uBAAOxB,EAAAA,MAAAL,EAAAA,EAAA,EAAE,iBAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"JSearchCombo.vue.cjs","sources":["../../../../src/components/atoms/JSearchCombo.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport { Check, ChevronsUpDown, Search } from 'lucide-vue-next'\r\nimport { cn } from '@/lib/utils'\r\nimport {\r\n Button,\r\n Combobox,\r\n ComboboxAnchor,\r\n ComboboxEmpty,\r\n ComboboxGroup,\r\n ComboboxInput,\r\n ComboboxItem,\r\n ComboboxList,\r\n ComboboxTrigger,\r\n} from '@/components/shadcn'\r\n\r\nexport interface ComboboxOption {\r\n value: string | number\r\n label: string\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?: ComboboxOption\r\n options?: ComboboxOption[]\r\n placeholder?: string\r\n searchPlaceholder?: string\r\n emptyText?: string\r\n disabled?: boolean\r\n required?: boolean\r\n name?: string\r\n id?: string\r\n multiple?: boolean\r\n class?: string\r\n /** 스타일 프리셋 */\r\n styletype?: StyleType\r\n }>(),\r\n {\r\n options: () => [],\r\n placeholder: '선택해주세요.',\r\n searchPlaceholder: '',\r\n emptyText: '검색 결과가 없습니다.',\r\n disabled: false,\r\n required: false,\r\n multiple: false,\r\n styletype: 'default',\r\n },\r\n)\r\n\r\nconst emit = defineEmits<{\r\n 'update:modelValue': [value: ComboboxOption | undefined]\r\n 'change': [value: ComboboxOption | undefined]\r\n 'focus': [event: FocusEvent]\r\n 'blur': [event: FocusEvent]\r\n}>()\r\n\r\n/**\r\n * styletype -> variant/class 매핑\r\n */\r\nconst STYLE_PRESETS: Record<StyleType, { variant: 'default' | 'outline' | 'destructive' | 'secondary' | 'ghost' | 'link', buttonClass?: string, inputClass?: string }> = {\n default: { \n variant: 'outline',\n buttonClass: 'h-8 text-xs px-2.5',\n },\n error: { \n variant: 'outline',\n buttonClass: 'h-8 text-xs px-2.5 border-destructive text-destructive',\n inputClass: 'border-destructive focus:ring-destructive',\n },\n success: { \n variant: 'outline',\n buttonClass: 'h-8 text-xs px-2.5 border-green-500 text-green-700',\n inputClass: 'border-green-500 focus:ring-green-500',\n },\n warning: { \n variant: 'outline',\n buttonClass: 'h-8 text-xs px-2.5 border-amber-500 text-amber-700',\n inputClass: 'border-amber-500 focus:ring-amber-500',\n },\n sm: { \n variant: 'outline',\n buttonClass: 'h-7 text-[11px] px-2',\n inputClass: 'h-7 text-[11px] px-2 py-1',\n },\n lg: { \n variant: 'outline',\n buttonClass: 'h-10 text-sm px-3',\n inputClass: 'h-10 text-sm px-3 py-2',\n },\n}\n\r\nconst preset = computed(() => {\r\n const styleKey = props.styletype || 'default'\r\n return STYLE_PRESETS[styleKey] ?? STYLE_PRESETS.default\r\n})\r\n\r\nconst buttonClass = computed(() => {\r\n return cn('justify-between', preset.value?.buttonClass, props.class)\r\n})\r\n\r\nconst inputClass = computed(() => {\n return cn('pl-8 pr-2 py-1.5 focus-visible:ring-0 border-0 border-b rounded-none h-8 text-xs', preset.value?.inputClass)\n})\n\r\nconst handleChange = (value: ComboboxOption | undefined) => {\r\n emit('update:modelValue', value)\r\n emit('change', value)\r\n}\r\n</script>\r\n\r\n<template>\r\n <Combobox \r\n :model-value=\"modelValue\" \r\n by=\"label\" \r\n :disabled=\"disabled\"\r\n :required=\"required\"\r\n :name=\"name\"\r\n @update:model-value=\"(value) => handleChange(value as ComboboxOption | undefined)\"\r\n >\r\n <ComboboxAnchor as-child>\r\n <ComboboxTrigger as-child>\r\n <Button \r\n :id=\"id\"\r\n :variant=\"preset.variant\" \r\n :class=\"buttonClass\"\r\n :disabled=\"disabled\"\r\n @focus=\"emit('focus', $event as FocusEvent)\"\r\n @blur=\"emit('blur', $event as FocusEvent)\"\r\n >\n {{ modelValue?.label ?? placeholder }}\n <ChevronsUpDown class=\"ml-2 h-3.5 w-3.5 shrink-0 opacity-50\" />\n </Button>\n </ComboboxTrigger>\r\n </ComboboxAnchor>\r\n\r\n <ComboboxList>\r\n <div class=\"relative w-full max-w-sm items-center\">\n <ComboboxInput :class=\"inputClass\" :placeholder=\"searchPlaceholder\" />\n <span class=\"absolute start-0 inset-y-0 flex items-center justify-center px-2.5\">\n <Search class=\"size-3.5 text-muted-foreground\" />\n </span>\n </div>\n\r\n <ComboboxEmpty>\r\n {{ emptyText }}\r\n </ComboboxEmpty>\r\n\r\n <ComboboxGroup>\r\n <ComboboxItem\r\n v-for=\"option in options\"\r\n :key=\"option.value\"\r\n :value=\"option\"\r\n >\r\n {{ option.label }}\n\n <Check v-if=\"modelValue?.value === option.value\" :class=\"cn('ml-auto h-3.5 w-3.5')\" />\n </ComboboxItem>\r\n </ComboboxGroup>\r\n </ComboboxList>\r\n </Combobox>\r\n</template>\r\n"],"names":["props","__props","emit","__emit","STYLE_PRESETS","preset","computed","styleKey","buttonClass","cn","inputClass","handleChange","value","_createBlock","_unref","Combobox","_cache","_createVNode","ComboboxAnchor","ComboboxTrigger","Button","$event","_createTextVNode","_toDisplayString","ChevronsUpDown","ComboboxList","_createElementVNode","_hoisted_1","ComboboxInput","_hoisted_2","Search","ComboboxEmpty","ComboboxGroup","_createElementBlock","_Fragment","_renderList","option","ComboboxItem","Check"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- import { defineComponent as $, computed as d, createBlock as m, openBlock as o, unref as t, withCtx as s, createVNode as l, normalizeClass as c, createTextVNode as f, toDisplayString as b, createElementVNode as C, createElementBlock as w, Fragment as k, renderList as B, createCommentVNode as _ } from "vue";
1
+ import { defineComponent as $, computed as d, createBlock as m, openBlock as o, unref as t, withCtx as s, createVNode as a, normalizeClass as c, createTextVNode as f, toDisplayString as p, createElementVNode as v, createElementBlock as w, Fragment as k, renderList as B, createCommentVNode as _ } from "vue";
2
2
  import { ChevronsUpDown as S, Search as E, Check as T } from "lucide-vue-next";
3
- import { cn as v } from "../../lib/utils.js";
3
+ import { cn as b } from "../../lib/utils.js";
4
4
  import "../shadcn/index.js";
5
5
  import q from "../shadcn/Combobox.vue.js";
6
6
  import N from "../shadcn/ComboboxAnchor.vue.js";
@@ -11,7 +11,7 @@ import D from "../shadcn/ComboboxInput.vue.js";
11
11
  import F from "../shadcn/ComboboxEmpty.vue.js";
12
12
  import L from "../shadcn/ComboboxGroup.vue.js";
13
13
  import U from "../shadcn/ComboboxItem.vue.js";
14
- const J = { class: "relative w-full max-w-sm items-center" }, K = { class: "absolute start-0 inset-y-0 flex items-center justify-center px-3" }, te = /* @__PURE__ */ $({
14
+ const J = { class: "relative w-full max-w-sm items-center" }, K = { class: "absolute start-0 inset-y-0 flex items-center justify-center px-2.5" }, te = /* @__PURE__ */ $({
15
15
  __name: "JSearchCombo",
16
16
  props: {
17
17
  modelValue: {},
@@ -28,40 +28,41 @@ const J = { class: "relative w-full max-w-sm items-center" }, K = { class: "abso
28
28
  styletype: { default: "default" }
29
29
  },
30
30
  emits: ["update:modelValue", "change", "focus", "blur"],
31
- setup(e, { emit: x }) {
32
- const p = e, u = x, h = {
31
+ setup(e, { emit: C }) {
32
+ const x = e, u = C, h = {
33
33
  default: {
34
- variant: "outline"
34
+ variant: "outline",
35
+ buttonClass: "h-8 text-xs px-2.5"
35
36
  },
36
37
  error: {
37
38
  variant: "outline",
38
- buttonClass: "border-destructive text-destructive",
39
+ buttonClass: "h-8 text-xs px-2.5 border-destructive text-destructive",
39
40
  inputClass: "border-destructive focus:ring-destructive"
40
41
  },
41
42
  success: {
42
43
  variant: "outline",
43
- buttonClass: "border-green-500 text-green-700",
44
+ buttonClass: "h-8 text-xs px-2.5 border-green-500 text-green-700",
44
45
  inputClass: "border-green-500 focus:ring-green-500"
45
46
  },
46
47
  warning: {
47
48
  variant: "outline",
48
- buttonClass: "border-amber-500 text-amber-700",
49
+ buttonClass: "h-8 text-xs px-2.5 border-amber-500 text-amber-700",
49
50
  inputClass: "border-amber-500 focus:ring-amber-500"
50
51
  },
51
52
  sm: {
52
53
  variant: "outline",
53
- buttonClass: "h-8 text-xs",
54
- inputClass: "h-8 text-xs"
54
+ buttonClass: "h-7 text-[11px] px-2",
55
+ inputClass: "h-7 text-[11px] px-2 py-1"
55
56
  },
56
57
  lg: {
57
58
  variant: "outline",
58
- buttonClass: "h-12 text-base",
59
- inputClass: "h-12 text-base"
59
+ buttonClass: "h-10 text-sm px-3",
60
+ inputClass: "h-10 text-sm px-3 py-2"
60
61
  }
61
62
  }, i = d(() => {
62
- const n = p.styletype || "default";
63
+ const n = x.styletype || "default";
63
64
  return h[n] ?? h.default;
64
- }), y = d(() => v("justify-between", i.value?.buttonClass, p.class)), g = d(() => v("pl-9 focus-visible:ring-0 border-0 border-b rounded-none h-10", i.value?.inputClass)), V = (n) => {
65
+ }), y = d(() => b("justify-between", i.value?.buttonClass, x.class)), g = d(() => b("pl-8 pr-2 py-1.5 focus-visible:ring-0 border-0 border-b rounded-none h-8 text-xs", i.value?.inputClass)), V = (n) => {
65
66
  u("update:modelValue", n), u("change", n);
66
67
  };
67
68
  return (n, r) => (o(), m(t(q), {
@@ -70,24 +71,24 @@ const J = { class: "relative w-full max-w-sm items-center" }, K = { class: "abso
70
71
  disabled: e.disabled,
71
72
  required: e.required,
72
73
  name: e.name,
73
- "onUpdate:modelValue": r[2] || (r[2] = (a) => V(a))
74
+ "onUpdate:modelValue": r[2] || (r[2] = (l) => V(l))
74
75
  }, {
75
76
  default: s(() => [
76
- l(t(N), { "as-child": "" }, {
77
+ a(t(N), { "as-child": "" }, {
77
78
  default: s(() => [
78
- l(t(P), { "as-child": "" }, {
79
+ a(t(P), { "as-child": "" }, {
79
80
  default: s(() => [
80
- l(t(j), {
81
+ a(t(j), {
81
82
  id: e.id,
82
83
  variant: i.value.variant,
83
84
  class: c(y.value),
84
85
  disabled: e.disabled,
85
- onFocus: r[0] || (r[0] = (a) => u("focus", a)),
86
- onBlur: r[1] || (r[1] = (a) => u("blur", a))
86
+ onFocus: r[0] || (r[0] = (l) => u("focus", l)),
87
+ onBlur: r[1] || (r[1] = (l) => u("blur", l))
87
88
  }, {
88
89
  default: s(() => [
89
- f(b(e.modelValue?.label ?? e.placeholder) + " ", 1),
90
- l(t(S), { class: "ml-2 h-4 w-4 shrink-0 opacity-50" })
90
+ f(p(e.modelValue?.label ?? e.placeholder) + " ", 1),
91
+ a(t(S), { class: "ml-2 h-3.5 w-3.5 shrink-0 opacity-50" })
91
92
  ]),
92
93
  _: 1
93
94
  }, 8, ["id", "variant", "class", "disabled"])
@@ -97,34 +98,34 @@ const J = { class: "relative w-full max-w-sm items-center" }, K = { class: "abso
97
98
  ]),
98
99
  _: 1
99
100
  }),
100
- l(t(z), null, {
101
+ a(t(z), null, {
101
102
  default: s(() => [
102
- C("div", J, [
103
- l(t(D), {
103
+ v("div", J, [
104
+ a(t(D), {
104
105
  class: c(g.value),
105
106
  placeholder: e.searchPlaceholder
106
107
  }, null, 8, ["class", "placeholder"]),
107
- C("span", K, [
108
- l(t(E), { class: "size-4 text-muted-foreground" })
108
+ v("span", K, [
109
+ a(t(E), { class: "size-3.5 text-muted-foreground" })
109
110
  ])
110
111
  ]),
111
- l(t(F), null, {
112
+ a(t(F), null, {
112
113
  default: s(() => [
113
- f(b(e.emptyText), 1)
114
+ f(p(e.emptyText), 1)
114
115
  ]),
115
116
  _: 1
116
117
  }),
117
- l(t(L), null, {
118
+ a(t(L), null, {
118
119
  default: s(() => [
119
- (o(!0), w(k, null, B(e.options, (a) => (o(), m(t(U), {
120
- key: a.value,
121
- value: a
120
+ (o(!0), w(k, null, B(e.options, (l) => (o(), m(t(U), {
121
+ key: l.value,
122
+ value: l
122
123
  }, {
123
124
  default: s(() => [
124
- f(b(a.label) + " ", 1),
125
- e.modelValue?.value === a.value ? (o(), m(t(T), {
125
+ f(p(l.label) + " ", 1),
126
+ e.modelValue?.value === l.value ? (o(), m(t(T), {
126
127
  key: 0,
127
- class: c(t(v)("ml-auto h-4 w-4"))
128
+ class: c(t(b)("ml-auto h-3.5 w-3.5"))
128
129
  }, null, 8, ["class"])) : _("", !0)
129
130
  ]),
130
131
  _: 2
@@ -1 +1 @@
1
- {"version":3,"file":"JSearchCombo.vue.js","sources":["../../../../src/components/atoms/JSearchCombo.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport { Check, ChevronsUpDown, Search } from 'lucide-vue-next'\r\nimport { cn } from '@/lib/utils'\r\nimport {\r\n Button,\r\n Combobox,\r\n ComboboxAnchor,\r\n ComboboxEmpty,\r\n ComboboxGroup,\r\n ComboboxInput,\r\n ComboboxItem,\r\n ComboboxList,\r\n ComboboxTrigger,\r\n} from '@/components/shadcn'\r\n\r\nexport interface ComboboxOption {\r\n value: string | number\r\n label: string\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?: ComboboxOption\r\n options?: ComboboxOption[]\r\n placeholder?: string\r\n searchPlaceholder?: string\r\n emptyText?: string\r\n disabled?: boolean\r\n required?: boolean\r\n name?: string\r\n id?: string\r\n multiple?: boolean\r\n class?: string\r\n /** 스타일 프리셋 */\r\n styletype?: StyleType\r\n }>(),\r\n {\r\n options: () => [],\r\n placeholder: '선택해주세요.',\r\n searchPlaceholder: '',\r\n emptyText: '검색 결과가 없습니다.',\r\n disabled: false,\r\n required: false,\r\n multiple: false,\r\n styletype: 'default',\r\n },\r\n)\r\n\r\nconst emit = defineEmits<{\r\n 'update:modelValue': [value: ComboboxOption | undefined]\r\n 'change': [value: ComboboxOption | undefined]\r\n 'focus': [event: FocusEvent]\r\n 'blur': [event: FocusEvent]\r\n}>()\r\n\r\n/**\r\n * styletype -> variant/class 매핑\r\n */\r\nconst STYLE_PRESETS: Record<StyleType, { variant: 'default' | 'outline' | 'destructive' | 'secondary' | 'ghost' | 'link', buttonClass?: string, inputClass?: string }> = {\r\n default: { \r\n variant: 'outline',\r\n },\r\n error: { \r\n variant: 'outline',\r\n buttonClass: 'border-destructive text-destructive',\r\n inputClass: 'border-destructive focus:ring-destructive',\r\n },\r\n success: { \r\n variant: 'outline',\r\n buttonClass: 'border-green-500 text-green-700',\r\n inputClass: 'border-green-500 focus:ring-green-500',\r\n },\r\n warning: { \r\n variant: 'outline',\r\n buttonClass: 'border-amber-500 text-amber-700',\r\n inputClass: 'border-amber-500 focus:ring-amber-500',\r\n },\r\n sm: { \r\n variant: 'outline',\r\n buttonClass: 'h-8 text-xs',\r\n inputClass: 'h-8 text-xs',\r\n },\r\n lg: { \r\n variant: 'outline',\r\n buttonClass: 'h-12 text-base',\r\n inputClass: 'h-12 text-base',\r\n },\r\n}\r\n\r\nconst preset = computed(() => {\r\n const styleKey = props.styletype || 'default'\r\n return STYLE_PRESETS[styleKey] ?? STYLE_PRESETS.default\r\n})\r\n\r\nconst buttonClass = computed(() => {\r\n return cn('justify-between', preset.value?.buttonClass, props.class)\r\n})\r\n\r\nconst inputClass = computed(() => {\r\n return cn('pl-9 focus-visible:ring-0 border-0 border-b rounded-none h-10', preset.value?.inputClass)\r\n})\r\n\r\nconst handleChange = (value: ComboboxOption | undefined) => {\r\n emit('update:modelValue', value)\r\n emit('change', value)\r\n}\r\n</script>\r\n\r\n<template>\r\n <Combobox \r\n :model-value=\"modelValue\" \r\n by=\"label\" \r\n :disabled=\"disabled\"\r\n :required=\"required\"\r\n :name=\"name\"\r\n @update:model-value=\"(value) => handleChange(value as ComboboxOption | undefined)\"\r\n >\r\n <ComboboxAnchor as-child>\r\n <ComboboxTrigger as-child>\r\n <Button \r\n :id=\"id\"\r\n :variant=\"preset.variant\" \r\n :class=\"buttonClass\"\r\n :disabled=\"disabled\"\r\n @focus=\"emit('focus', $event as FocusEvent)\"\r\n @blur=\"emit('blur', $event as FocusEvent)\"\r\n >\r\n {{ modelValue?.label ?? placeholder }}\r\n <ChevronsUpDown class=\"ml-2 h-4 w-4 shrink-0 opacity-50\" />\r\n </Button>\r\n </ComboboxTrigger>\r\n </ComboboxAnchor>\r\n\r\n <ComboboxList>\r\n <div class=\"relative w-full max-w-sm items-center\">\r\n <ComboboxInput :class=\"inputClass\" :placeholder=\"searchPlaceholder\" />\r\n <span class=\"absolute start-0 inset-y-0 flex items-center justify-center px-3\">\r\n <Search class=\"size-4 text-muted-foreground\" />\r\n </span>\r\n </div>\r\n\r\n <ComboboxEmpty>\r\n {{ emptyText }}\r\n </ComboboxEmpty>\r\n\r\n <ComboboxGroup>\r\n <ComboboxItem\r\n v-for=\"option in options\"\r\n :key=\"option.value\"\r\n :value=\"option\"\r\n >\r\n {{ option.label }}\r\n\r\n <Check v-if=\"modelValue?.value === option.value\" :class=\"cn('ml-auto h-4 w-4')\" />\r\n </ComboboxItem>\r\n </ComboboxGroup>\r\n </ComboboxList>\r\n </Combobox>\r\n</template>\r\n"],"names":["props","__props","emit","__emit","STYLE_PRESETS","preset","computed","styleKey","buttonClass","cn","inputClass","handleChange","value","_createBlock","_unref","Combobox","_cache","_createVNode","ComboboxAnchor","ComboboxTrigger","Button","$event","_createTextVNode","_toDisplayString","ChevronsUpDown","ComboboxList","_createElementVNode","_hoisted_1","ComboboxInput","_hoisted_2","Search","ComboboxEmpty","ComboboxGroup","_createElementBlock","_Fragment","_renderList","option","ComboboxItem","Check"],"mappings":"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"}
1
+ {"version":3,"file":"JSearchCombo.vue.js","sources":["../../../../src/components/atoms/JSearchCombo.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport { Check, ChevronsUpDown, Search } from 'lucide-vue-next'\r\nimport { cn } from '@/lib/utils'\r\nimport {\r\n Button,\r\n Combobox,\r\n ComboboxAnchor,\r\n ComboboxEmpty,\r\n ComboboxGroup,\r\n ComboboxInput,\r\n ComboboxItem,\r\n ComboboxList,\r\n ComboboxTrigger,\r\n} from '@/components/shadcn'\r\n\r\nexport interface ComboboxOption {\r\n value: string | number\r\n label: string\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?: ComboboxOption\r\n options?: ComboboxOption[]\r\n placeholder?: string\r\n searchPlaceholder?: string\r\n emptyText?: string\r\n disabled?: boolean\r\n required?: boolean\r\n name?: string\r\n id?: string\r\n multiple?: boolean\r\n class?: string\r\n /** 스타일 프리셋 */\r\n styletype?: StyleType\r\n }>(),\r\n {\r\n options: () => [],\r\n placeholder: '선택해주세요.',\r\n searchPlaceholder: '',\r\n emptyText: '검색 결과가 없습니다.',\r\n disabled: false,\r\n required: false,\r\n multiple: false,\r\n styletype: 'default',\r\n },\r\n)\r\n\r\nconst emit = defineEmits<{\r\n 'update:modelValue': [value: ComboboxOption | undefined]\r\n 'change': [value: ComboboxOption | undefined]\r\n 'focus': [event: FocusEvent]\r\n 'blur': [event: FocusEvent]\r\n}>()\r\n\r\n/**\r\n * styletype -> variant/class 매핑\r\n */\r\nconst STYLE_PRESETS: Record<StyleType, { variant: 'default' | 'outline' | 'destructive' | 'secondary' | 'ghost' | 'link', buttonClass?: string, inputClass?: string }> = {\n default: { \n variant: 'outline',\n buttonClass: 'h-8 text-xs px-2.5',\n },\n error: { \n variant: 'outline',\n buttonClass: 'h-8 text-xs px-2.5 border-destructive text-destructive',\n inputClass: 'border-destructive focus:ring-destructive',\n },\n success: { \n variant: 'outline',\n buttonClass: 'h-8 text-xs px-2.5 border-green-500 text-green-700',\n inputClass: 'border-green-500 focus:ring-green-500',\n },\n warning: { \n variant: 'outline',\n buttonClass: 'h-8 text-xs px-2.5 border-amber-500 text-amber-700',\n inputClass: 'border-amber-500 focus:ring-amber-500',\n },\n sm: { \n variant: 'outline',\n buttonClass: 'h-7 text-[11px] px-2',\n inputClass: 'h-7 text-[11px] px-2 py-1',\n },\n lg: { \n variant: 'outline',\n buttonClass: 'h-10 text-sm px-3',\n inputClass: 'h-10 text-sm px-3 py-2',\n },\n}\n\r\nconst preset = computed(() => {\r\n const styleKey = props.styletype || 'default'\r\n return STYLE_PRESETS[styleKey] ?? STYLE_PRESETS.default\r\n})\r\n\r\nconst buttonClass = computed(() => {\r\n return cn('justify-between', preset.value?.buttonClass, props.class)\r\n})\r\n\r\nconst inputClass = computed(() => {\n return cn('pl-8 pr-2 py-1.5 focus-visible:ring-0 border-0 border-b rounded-none h-8 text-xs', preset.value?.inputClass)\n})\n\r\nconst handleChange = (value: ComboboxOption | undefined) => {\r\n emit('update:modelValue', value)\r\n emit('change', value)\r\n}\r\n</script>\r\n\r\n<template>\r\n <Combobox \r\n :model-value=\"modelValue\" \r\n by=\"label\" \r\n :disabled=\"disabled\"\r\n :required=\"required\"\r\n :name=\"name\"\r\n @update:model-value=\"(value) => handleChange(value as ComboboxOption | undefined)\"\r\n >\r\n <ComboboxAnchor as-child>\r\n <ComboboxTrigger as-child>\r\n <Button \r\n :id=\"id\"\r\n :variant=\"preset.variant\" \r\n :class=\"buttonClass\"\r\n :disabled=\"disabled\"\r\n @focus=\"emit('focus', $event as FocusEvent)\"\r\n @blur=\"emit('blur', $event as FocusEvent)\"\r\n >\n {{ modelValue?.label ?? placeholder }}\n <ChevronsUpDown class=\"ml-2 h-3.5 w-3.5 shrink-0 opacity-50\" />\n </Button>\n </ComboboxTrigger>\r\n </ComboboxAnchor>\r\n\r\n <ComboboxList>\r\n <div class=\"relative w-full max-w-sm items-center\">\n <ComboboxInput :class=\"inputClass\" :placeholder=\"searchPlaceholder\" />\n <span class=\"absolute start-0 inset-y-0 flex items-center justify-center px-2.5\">\n <Search class=\"size-3.5 text-muted-foreground\" />\n </span>\n </div>\n\r\n <ComboboxEmpty>\r\n {{ emptyText }}\r\n </ComboboxEmpty>\r\n\r\n <ComboboxGroup>\r\n <ComboboxItem\r\n v-for=\"option in options\"\r\n :key=\"option.value\"\r\n :value=\"option\"\r\n >\r\n {{ option.label }}\n\n <Check v-if=\"modelValue?.value === option.value\" :class=\"cn('ml-auto h-3.5 w-3.5')\" />\n </ComboboxItem>\r\n </ComboboxGroup>\r\n </ComboboxList>\r\n </Combobox>\r\n</template>\r\n"],"names":["props","__props","emit","__emit","STYLE_PRESETS","preset","computed","styleKey","buttonClass","cn","inputClass","handleChange","value","_createBlock","_unref","Combobox","_cache","_createVNode","ComboboxAnchor","ComboboxTrigger","Button","$event","_createTextVNode","_toDisplayString","ChevronsUpDown","ComboboxList","_createElementVNode","_hoisted_1","ComboboxInput","_hoisted_2","Search","ComboboxEmpty","ComboboxGroup","_createElementBlock","_Fragment","_renderList","option","ComboboxItem","Check"],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./JSectionTitle.vue2.cjs");;/* empty css */const t = (t_comp, t_opts) => {
2
+ const t_merged = t_comp.__vccOpts || t_comp;
3
+ for (const [t_key, t_val] of t_opts)
4
+ t_merged[t_key] = t_val;
5
+ return t_merged;
6
+ };,u=t(e.default,[["__scopeId","data-v-7f6e5ace"]]);exports.default=u;
7
+ //# sourceMappingURL=JSectionTitle.vue.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JSectionTitle.vue.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}