@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
@@ -24,27 +24,27 @@
24
24
  --ring: 222.2 84% 4.9%;
25
25
  }
26
26
 
27
- .theme-default.dark {
28
- --background: 222.2 84% 4.9%;
29
- --foreground: 210 40% 98%;
30
- --card: 222.2 84% 4.9%;
31
- --card-foreground: 210 40% 98%;
32
- --popover: 222.2 84% 4.9%;
33
- --popover-foreground: 210 40% 98%;
34
- --primary: 210 40% 98%;
35
- --primary-foreground: 222.2 47.4% 11.2%;
36
- --secondary: 217.2 32.6% 17.5%;
37
- --secondary-foreground: 210 40% 98%;
38
- --muted: 217.2 32.6% 17.5%;
39
- --muted-foreground: 215 20.2% 65.1%;
40
- --accent: 217.2 32.6% 17.5%;
41
- --accent-foreground: 210 40% 98%;
42
- --destructive: 0 62.8% 30.6%;
43
- --destructive-foreground: 210 40% 98%;
44
- --border: 217.2 32.6% 17.5%;
45
- --input: 217.2 32.6% 17.5%;
46
- --ring: 212.7 26.8% 83.9%;
47
- }
27
+ .theme-default.dark {
28
+ --background: 222 47% 11%;
29
+ --foreground: 210 40% 98%;
30
+ --card: 222 47% 14%;
31
+ --card-foreground: 210 40% 98%;
32
+ --popover: 222 47% 14%;
33
+ --popover-foreground: 210 40% 98%;
34
+ --primary: 217 91% 60%;
35
+ --primary-foreground: 222 47% 11%;
36
+ --secondary: 217 32% 17%;
37
+ --secondary-foreground: 210 40% 98%;
38
+ --muted: 217 32% 17%;
39
+ --muted-foreground: 215 20% 65%;
40
+ --accent: 217 32% 17%;
41
+ --accent-foreground: 210 40% 98%;
42
+ --destructive: 0 63% 31%;
43
+ --destructive-foreground: 210 40% 98%;
44
+ --border: 217 32% 17%;
45
+ --input: 217 32% 17%;
46
+ --ring: 217 91% 60%;
47
+ }
48
48
 
49
49
  /* Slate 테마 */
50
50
  .theme-slate {
@@ -335,3 +335,110 @@
335
335
  --ring: 20.5 90.2% 48.2%;
336
336
  }
337
337
 
338
+ .theme-vescrow {
339
+ --background: 270 50% 99.2157%;
340
+ --foreground: 277.5000 44.4444% 3.5294%;
341
+ --card: 0 0% 100%;
342
+ --card-foreground: 277.5000 44.4444% 3.5294%;
343
+ --popover: 0 0% 100%;
344
+ --popover-foreground: 277.5000 44.4444% 3.5294%;
345
+ --primary: 240 93.8144% 19.0196%;
346
+ --primary-foreground: 0 0% 100%;
347
+ --secondary: 220.0000 87.0968% 93.9216%;
348
+ --secondary-foreground: 220 98.1308% 41.9608%;
349
+ --muted: 270 13.3333% 94.1176%;
350
+ --muted-foreground: 270.0000 6.0606% 38.8235%;
351
+ --accent: 233.0769 100.0000% 94.9020%;
352
+ --accent-foreground: 220 98.1308% 41.9608%;
353
+ --destructive: 346.8367 77.1654% 49.8039%;
354
+ --destructive-foreground: 0 0% 100%;
355
+ --border: 277.5000 15.3846% 89.8039%;
356
+ --input: 277.5000 15.3846% 89.8039%;
357
+ --ring: 219.8969 100% 61.9608%;
358
+ --chart-1: 220 98.1308% 41.9608%;
359
+ --chart-2: 258.3117 89.5349% 66.2745%;
360
+ --chart-3: 292.1893 84.0796% 60.5882%;
361
+ --chart-4: 349.7238 89.1626% 60.1961%;
362
+ --chart-5: 24.5815 94.9791% 53.1373%;
363
+ --sidebar: 220.0000 87.0968% 93.9216%;
364
+ --sidebar-foreground: 217.8947 93.4426% 11.9608%;
365
+ --sidebar-primary: 270 50% 99.2157%;
366
+ --sidebar-primary-foreground: 226.6667 44.2623% 11.9608%;
367
+ --sidebar-accent: 235.5000 43.4783% 18.0392%;
368
+ --sidebar-accent-foreground: 0 0% 100%;
369
+ --sidebar-border: 241.5000 43.4783% 18.0392%;
370
+ --sidebar-ring: 236.3636 58.5799% 33.1373%;
371
+ --font-sans: Bricolage Grotesque, ui-sans-serif, sans-serif, system-ui;
372
+ --font-serif: Georgia, serif;
373
+ --font-mono: JetBrains Mono, monospace;
374
+ --radius: 1.25rem;
375
+ --shadow-x: 0px;
376
+ --shadow-y: 4px;
377
+ --shadow-blur: 10px;
378
+ --shadow-spread: 0px;
379
+ --shadow-opacity: 0.1;
380
+ --shadow-color: 0, 0, 0;
381
+ --shadow-2xs: 0px 4px 10px 0px hsl(0, 0, 0 / 0.05);
382
+ --shadow-xs: 0px 4px 10px 0px hsl(0, 0, 0 / 0.05);
383
+ --shadow-sm: 0px 4px 10px 0px hsl(0, 0, 0 / 0.10), 0px 1px 2px -1px hsl(0, 0, 0 / 0.10);
384
+ --shadow: 0px 4px 10px 0px hsl(0, 0, 0 / 0.10), 0px 1px 2px -1px hsl(0, 0, 0 / 0.10);
385
+ --shadow-md: 0px 4px 10px 0px hsl(0, 0, 0 / 0.10), 0px 2px 4px -1px hsl(0, 0, 0 / 0.10);
386
+ --shadow-lg: 0px 4px 10px 0px hsl(0, 0, 0 / 0.10), 0px 4px 6px -1px hsl(0, 0, 0 / 0.10);
387
+ --shadow-xl: 0px 4px 10px 0px hsl(0, 0, 0 / 0.10), 0px 8px 10px -1px hsl(0, 0, 0 / 0.10);
388
+ --shadow-2xl: 0px 4px 10px 0px hsl(0, 0, 0 / 0.25);
389
+ --tracking-normal: -0.01em;
390
+ --spacing: 0.25rem;
391
+ }
392
+
393
+ .theme-vescrow.dark {
394
+ --background: 222.8571 63.6364% 2.1569%;
395
+ --foreground: 270 50% 99.2157%;
396
+ --card: 221.5385 52.0000% 4.9020%;
397
+ --card-foreground: 270 50% 99.2157%;
398
+ --popover: 226.1538 52.0000% 4.9020%;
399
+ --popover-foreground: 270 50% 99.2157%;
400
+ --primary: 227.9221 83.6957% 36.0784%;
401
+ --primary-foreground: 0 0% 100%;
402
+ --secondary: 226.6667 44.2623% 11.9608%;
403
+ --secondary-foreground: 270 50% 99.2157%;
404
+ --muted: 229.0909 47.8261% 9.0196%;
405
+ --muted-foreground: 240 7.9365% 62.9412%;
406
+ --accent: 232.5000 43.4783% 18.0392%;
407
+ --accent-foreground: 270 50% 99.2157%;
408
+ --destructive: 346.8000 63.2911% 30.9804%;
409
+ --destructive-foreground: 0 0% 100%;
410
+ --border: 241.5000 43.4783% 18.0392%;
411
+ --input: 229.5000 43.4783% 18.0392%;
412
+ --ring: 238.1818 58.5799% 33.1373%;
413
+ --chart-1: 230.1316 90.4762% 67.0588%;
414
+ --chart-2: 28.8889 83.5052% 61.9608%;
415
+ --chart-3: 349.7238 89.1626% 60.1961%;
416
+ --chart-4: 24.5815 94.9791% 53.1373%;
417
+ --chart-5: 238.1818 58.5799% 33.1373%;
418
+ --sidebar: 228 50% 7.8431%;
419
+ --sidebar-foreground: 235.5556 12.0000% 55.8824%;
420
+ --sidebar-primary: 270 50% 99.2157%;
421
+ --sidebar-primary-foreground: 231 50% 7.8431%;
422
+ --sidebar-accent: 235.5556 44.2623% 11.9608%;
423
+ --sidebar-accent-foreground: 270 50% 99.2157%;
424
+ --sidebar-border: 237.7778 44.2623% 11.9608%;
425
+ --sidebar-ring: 236.3636 58.5799% 33.1373%;
426
+ --font-sans: Bricolage Grotesque, ui-sans-serif, sans-serif, system-ui;
427
+ --font-serif: Georgia, serif;
428
+ --font-mono: JetBrains Mono, monospace;
429
+ --radius: 1.25rem;
430
+ --shadow-x: 0px;
431
+ --shadow-y: 10px;
432
+ --shadow-blur: 20px;
433
+ --shadow-spread: 0px;
434
+ --shadow-opacity: 0.5;
435
+ --shadow-color: 0, 0, 0;
436
+ --shadow-2xs: 0px 10px 20px 0px hsl(0, 0, 0 / 0.25);
437
+ --shadow-xs: 0px 10px 20px 0px hsl(0, 0, 0 / 0.25);
438
+ --shadow-sm: 0px 10px 20px 0px hsl(0, 0, 0 / 0.50), 0px 1px 2px -1px hsl(0, 0, 0 / 0.50);
439
+ --shadow: 0px 10px 20px 0px hsl(0, 0, 0 / 0.50), 0px 1px 2px -1px hsl(0, 0, 0 / 0.50);
440
+ --shadow-md: 0px 10px 20px 0px hsl(0, 0, 0 / 0.50), 0px 2px 4px -1px hsl(0, 0, 0 / 0.50);
441
+ --shadow-lg: 0px 10px 20px 0px hsl(0, 0, 0 / 0.50), 0px 4px 6px -1px hsl(0, 0, 0 / 0.50);
442
+ --shadow-xl: 0px 10px 20px 0px hsl(0, 0, 0 / 0.50), 0px 8px 10px -1px hsl(0, 0, 0 / 0.50);
443
+ --shadow-2xl: 0px 10px 20px 0px hsl(0, 0, 0 / 1.25);
444
+ }
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),d=require("../shadcn/Avatar.vue.cjs"),f=require("../shadcn/AvatarFallback.vue.cjs"),g=require("../shadcn/AvatarImage.vue.cjs"),p=e.defineComponent({__name:"JAvatar",props:{src:{},alt:{default:""},fallback:{default:"?"},class:{},styletype:{default:"default"},size:{default:"md"},shape:{default:"circle"},status:{}},setup(l){const s=l,r={default:{class:""},primary:{class:"bg-blue-500 text-white"},success:{class:"bg-green-500 text-white"},warning:{class:"bg-amber-500 text-white"},danger:{class:"bg-red-500 text-white"}},c={sm:{class:"h-8 w-8 text-xs"},md:{class:"h-10 w-10 text-sm"},lg:{class:"h-12 w-12 text-base"},xl:{class:"h-16 w-16 text-lg"}},n={circle:{class:"rounded-full"},square:{class:"rounded-none"},rounded:{class:"rounded-lg"}},u={online:{class:"ring-2 ring-green-500 ring-offset-2"},offline:{class:"ring-2 ring-gray-400 ring-offset-2"},away:{class:"ring-2 ring-yellow-500 ring-offset-2"},busy:{class:"ring-2 ring-red-500 ring-offset-2"}},o=e.computed(()=>{const t=r[s.styletype],a=c[s.size],i=n[s.shape],_=s.status?u[s.status]:{class:""};return{class:[t.class,a.class,i.class,_.class,s.class].filter(Boolean).join(" ")}});return(t,a)=>(e.openBlock(),e.createBlock(d.default,e.normalizeProps(e.guardReactiveProps(o.value)),{default:e.withCtx(()=>[s.src?(e.openBlock(),e.createBlock(g.default,{key:0,src:s.src,alt:s.alt},null,8,["src","alt"])):(e.openBlock(),e.createBlock(f.default,{key:1},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(s.fallback),1)]),_:1}))]),_:1},16))}});exports.default=p;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),d=require("../shadcn/Avatar.vue.cjs"),f=require("../shadcn/AvatarFallback.vue.cjs"),g=require("../shadcn/AvatarImage.vue.cjs"),p=e.defineComponent({__name:"JAvatar",props:{src:{},alt:{default:""},fallback:{default:"?"},class:{},styletype:{default:"default"},size:{default:"sm"},shape:{default:"circle"},status:{}},setup(l){const s=l,r={default:{class:""},primary:{class:"bg-blue-500 text-white"},success:{class:"bg-green-500 text-white"},warning:{class:"bg-amber-500 text-white"},danger:{class:"bg-red-500 text-white"}},c={xs:{class:"h-6 w-6 text-[10px]"},sm:{class:"h-8 w-8 text-xs"},md:{class:"h-10 w-10 text-sm"},lg:{class:"h-12 w-12 text-base"},xl:{class:"h-16 w-16 text-lg"}},n={circle:{class:"rounded-full"},square:{class:"rounded-none"},rounded:{class:"rounded-lg"}},u={online:{class:"ring-2 ring-green-500 ring-offset-2"},offline:{class:"ring-2 ring-gray-400 ring-offset-2"},away:{class:"ring-2 ring-yellow-500 ring-offset-2"},busy:{class:"ring-2 ring-red-500 ring-offset-2"}},o=e.computed(()=>{const t=r[s.styletype],a=c[s.size],i=n[s.shape],_=s.status?u[s.status]:{class:""};return{class:[t.class,a.class,i.class,_.class,s.class].filter(Boolean).join(" ")}});return(t,a)=>(e.openBlock(),e.createBlock(d.default,e.normalizeProps(e.guardReactiveProps(o.value)),{default:e.withCtx(()=>[s.src?(e.openBlock(),e.createBlock(g.default,{key:0,src:s.src,alt:s.alt},null,8,["src","alt"])):(e.openBlock(),e.createBlock(f.default,{key:1},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(s.fallback),1)]),_:1}))]),_:1},16))}});exports.default=p;
2
2
  //# sourceMappingURL=JAvatar.vue.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"JAvatar.vue.cjs","sources":["../../../../src/components/atoms/JAvatar.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport Avatar from '@/components/shadcn/Avatar.vue'\r\nimport AvatarFallback from '@/components/shadcn/AvatarFallback.vue'\r\nimport AvatarImage from '@/components/shadcn/AvatarImage.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 Size = 'sm' | 'md' | 'lg' | 'xl'\r\n\r\ntype Shape = 'circle' | 'square' | 'rounded'\r\n\r\ntype Status = 'online' | 'offline' | 'away' | 'busy'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n src?: string\r\n alt?: string\r\n fallback?: string\r\n class?: string\r\n /** 스타일 프리셋 */\r\n styletype?: StyleType\r\n /** 아바타 크기 */\r\n size?: Size\r\n /** 아바타 모양 */\r\n shape?: Shape\r\n /** 상태 표시 */\r\n status?: Status\r\n }>(),\r\n {\r\n alt: '',\r\n fallback: '?',\r\n styletype: 'default',\r\n size: 'md',\r\n shape: 'circle',\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: 'bg-blue-500 text-white',\r\n },\r\n success: { \r\n class: 'bg-green-500 text-white',\r\n },\r\n warning: { \r\n class: 'bg-amber-500 text-white',\r\n },\r\n danger: { \r\n class: 'bg-red-500 text-white',\r\n },\r\n}\r\n\r\n/**\r\n * size -> class 매핑\r\n */\r\nconst SIZE_PRESETS: Record<Size, { class: string }> = {\r\n sm: { \r\n class: 'h-8 w-8 text-xs',\r\n },\r\n md: { \r\n class: 'h-10 w-10 text-sm',\r\n },\r\n lg: { \r\n class: 'h-12 w-12 text-base',\r\n },\r\n xl: { \r\n class: 'h-16 w-16 text-lg',\r\n },\r\n}\r\n\r\n/**\r\n * shape -> class 매핑\r\n */\r\nconst SHAPE_PRESETS: Record<Shape, { class: string }> = {\r\n circle: { \r\n class: 'rounded-full',\r\n },\r\n square: { \r\n class: 'rounded-none',\r\n },\r\n rounded: { \r\n class: 'rounded-lg',\r\n },\r\n}\r\n\r\n/**\r\n * status -> class 매핑\r\n */\r\nconst STATUS_PRESETS: Record<Status, { class: string }> = {\r\n online: { \r\n class: 'ring-2 ring-green-500 ring-offset-2',\r\n },\r\n offline: { \r\n class: 'ring-2 ring-gray-400 ring-offset-2',\r\n },\r\n away: { \r\n class: 'ring-2 ring-yellow-500 ring-offset-2',\r\n },\r\n busy: { \r\n class: 'ring-2 ring-red-500 ring-offset-2',\r\n },\r\n}\r\n\r\n/** 최종 바인딩: 직접 넘긴 class가 있으면 styletype, size, shape, status 기본값과 병합 */\r\nconst mapped = computed(() => {\r\n const stylePreset = STYLE_PRESETS[props.styletype!]\r\n const sizePreset = SIZE_PRESETS[props.size!]\r\n const shapePreset = SHAPE_PRESETS[props.shape!]\r\n const statusPreset = props.status ? STATUS_PRESETS[props.status] : { class: '' }\r\n const finalClass = [stylePreset.class, sizePreset.class, shapePreset.class, statusPreset.class, props.class].filter(Boolean).join(' ')\r\n \r\n return {\r\n class: finalClass,\r\n }\r\n})\r\n</script>\r\n\r\n<template>\r\n <Avatar v-bind=\"mapped\">\r\n <AvatarImage v-if=\"props.src\" :src=\"props.src\" :alt=\"props.alt\" />\r\n <AvatarFallback v-else>{{ props.fallback }}</AvatarFallback>\r\n </Avatar>\r\n</template>\r\n"],"names":["props","__props","STYLE_PRESETS","SIZE_PRESETS","SHAPE_PRESETS","STATUS_PRESETS","mapped","computed","stylePreset","sizePreset","shapePreset","statusPreset","_openBlock","_createBlock","Avatar","AvatarImage","AvatarFallback","_createTextVNode","_toDisplayString"],"mappings":"scAmBA,MAAMA,EAAQC,EA2BRC,EAAsD,CAC1D,QAAS,CAAE,MAAO,EAAA,EAClB,QAAS,CACP,MAAO,wBAAA,EAET,QAAS,CACP,MAAO,yBAAA,EAET,QAAS,CACP,MAAO,yBAAA,EAET,OAAQ,CACN,MAAO,uBAAA,CACT,EAMIC,EAAgD,CACpD,GAAI,CACF,MAAO,iBAAA,EAET,GAAI,CACF,MAAO,mBAAA,EAET,GAAI,CACF,MAAO,qBAAA,EAET,GAAI,CACF,MAAO,mBAAA,CACT,EAMIC,EAAkD,CACtD,OAAQ,CACN,MAAO,cAAA,EAET,OAAQ,CACN,MAAO,cAAA,EAET,QAAS,CACP,MAAO,YAAA,CACT,EAMIC,EAAoD,CACxD,OAAQ,CACN,MAAO,qCAAA,EAET,QAAS,CACP,MAAO,oCAAA,EAET,KAAM,CACJ,MAAO,sCAAA,EAET,KAAM,CACJ,MAAO,mCAAA,CACT,EAIIC,EAASC,EAAAA,SAAS,IAAM,CAC5B,MAAMC,EAAcN,EAAcF,EAAM,SAAU,EAC5CS,EAAaN,EAAaH,EAAM,IAAK,EACrCU,EAAcN,EAAcJ,EAAM,KAAM,EACxCW,EAAeX,EAAM,OAASK,EAAeL,EAAM,MAAM,EAAI,CAAE,MAAO,EAAA,EAG5E,MAAO,CACL,MAHiB,CAACQ,EAAY,MAAOC,EAAW,MAAOC,EAAY,MAAOC,EAAa,MAAOX,EAAM,KAAK,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAG5H,CAEX,CAAC,gBAICY,EAAAA,UAAA,EAAAC,EAAAA,YAGSC,EAAAA,8CAHOR,EAAA,KAAM,CAAA,EAAA,mBACpB,IAAkE,CAA/CN,EAAM,mBAAzBa,EAAAA,YAAkEE,EAAAA,QAAA,OAAnC,IAAKf,EAAM,IAAM,IAAKA,EAAM,GAAA,wCAC3Da,EAAAA,YAA4DG,EAAAA,QAAA,CAAA,IAAA,GAAA,mBAArC,IAAoB,CAAjBC,EAAAA,gBAAAC,EAAAA,gBAAAlB,EAAM,QAAQ,EAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"JAvatar.vue.cjs","sources":["../../../../src/components/atoms/JAvatar.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport Avatar from '@/components/shadcn/Avatar.vue'\r\nimport AvatarFallback from '@/components/shadcn/AvatarFallback.vue'\r\nimport AvatarImage from '@/components/shadcn/AvatarImage.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 Size = 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n\r\ntype Shape = 'circle' | 'square' | 'rounded'\r\n\r\ntype Status = 'online' | 'offline' | 'away' | 'busy'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n src?: string\r\n alt?: string\r\n fallback?: string\r\n class?: string\r\n /** 스타일 프리셋 */\r\n styletype?: StyleType\r\n /** 아바타 크기 */\r\n size?: Size\r\n /** 아바타 모양 */\r\n shape?: Shape\r\n /** 상태 표시 */\r\n status?: Status\r\n }>(),\r\n {\n alt: '',\n fallback: '?',\n styletype: 'default',\n size: 'sm',\n shape: 'circle',\n },\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: 'bg-blue-500 text-white',\r\n },\r\n success: { \r\n class: 'bg-green-500 text-white',\r\n },\r\n warning: { \r\n class: 'bg-amber-500 text-white',\r\n },\r\n danger: { \r\n class: 'bg-red-500 text-white',\r\n },\r\n}\r\n\r\n/**\r\n * size -> class 매핑\r\n */\r\nconst SIZE_PRESETS: Record<Size, { class: string }> = {\n xs: { \n class: 'h-6 w-6 text-[10px]',\n },\n sm: { \n class: 'h-8 w-8 text-xs',\n },\n md: { \n class: 'h-10 w-10 text-sm',\n },\n lg: { \n class: 'h-12 w-12 text-base',\n },\n xl: { \n class: 'h-16 w-16 text-lg',\n },\n}\n\r\n/**\r\n * shape -> class 매핑\r\n */\r\nconst SHAPE_PRESETS: Record<Shape, { class: string }> = {\r\n circle: { \r\n class: 'rounded-full',\r\n },\r\n square: { \r\n class: 'rounded-none',\r\n },\r\n rounded: { \r\n class: 'rounded-lg',\r\n },\r\n}\r\n\r\n/**\r\n * status -> class 매핑\r\n */\r\nconst STATUS_PRESETS: Record<Status, { class: string }> = {\r\n online: { \r\n class: 'ring-2 ring-green-500 ring-offset-2',\r\n },\r\n offline: { \r\n class: 'ring-2 ring-gray-400 ring-offset-2',\r\n },\r\n away: { \r\n class: 'ring-2 ring-yellow-500 ring-offset-2',\r\n },\r\n busy: { \r\n class: 'ring-2 ring-red-500 ring-offset-2',\r\n },\r\n}\r\n\r\n/** 최종 바인딩: 직접 넘긴 class가 있으면 styletype, size, shape, status 기본값과 병합 */\r\nconst mapped = computed(() => {\r\n const stylePreset = STYLE_PRESETS[props.styletype!]\r\n const sizePreset = SIZE_PRESETS[props.size!]\r\n const shapePreset = SHAPE_PRESETS[props.shape!]\r\n const statusPreset = props.status ? STATUS_PRESETS[props.status] : { class: '' }\r\n const finalClass = [stylePreset.class, sizePreset.class, shapePreset.class, statusPreset.class, props.class].filter(Boolean).join(' ')\r\n \r\n return {\r\n class: finalClass,\r\n }\r\n})\r\n</script>\r\n\r\n<template>\r\n <Avatar v-bind=\"mapped\">\r\n <AvatarImage v-if=\"props.src\" :src=\"props.src\" :alt=\"props.alt\" />\r\n <AvatarFallback v-else>{{ props.fallback }}</AvatarFallback>\r\n </Avatar>\r\n</template>\r\n"],"names":["props","__props","STYLE_PRESETS","SIZE_PRESETS","SHAPE_PRESETS","STATUS_PRESETS","mapped","computed","stylePreset","sizePreset","shapePreset","statusPreset","_openBlock","_createBlock","Avatar","AvatarImage","AvatarFallback","_createTextVNode","_toDisplayString"],"mappings":"scAmBA,MAAMA,EAAQC,EA2BRC,EAAsD,CAC1D,QAAS,CAAE,MAAO,EAAA,EAClB,QAAS,CACP,MAAO,wBAAA,EAET,QAAS,CACP,MAAO,yBAAA,EAET,QAAS,CACP,MAAO,yBAAA,EAET,OAAQ,CACN,MAAO,uBAAA,CACT,EAMIC,EAAgD,CACpD,GAAI,CACF,MAAO,qBAAA,EAET,GAAI,CACF,MAAO,iBAAA,EAET,GAAI,CACF,MAAO,mBAAA,EAET,GAAI,CACF,MAAO,qBAAA,EAET,GAAI,CACF,MAAO,mBAAA,CACT,EAMIC,EAAkD,CACtD,OAAQ,CACN,MAAO,cAAA,EAET,OAAQ,CACN,MAAO,cAAA,EAET,QAAS,CACP,MAAO,YAAA,CACT,EAMIC,EAAoD,CACxD,OAAQ,CACN,MAAO,qCAAA,EAET,QAAS,CACP,MAAO,oCAAA,EAET,KAAM,CACJ,MAAO,sCAAA,EAET,KAAM,CACJ,MAAO,mCAAA,CACT,EAIIC,EAASC,EAAAA,SAAS,IAAM,CAC5B,MAAMC,EAAcN,EAAcF,EAAM,SAAU,EAC5CS,EAAaN,EAAaH,EAAM,IAAK,EACrCU,EAAcN,EAAcJ,EAAM,KAAM,EACxCW,EAAeX,EAAM,OAASK,EAAeL,EAAM,MAAM,EAAI,CAAE,MAAO,EAAA,EAG5E,MAAO,CACL,MAHiB,CAACQ,EAAY,MAAOC,EAAW,MAAOC,EAAY,MAAOC,EAAa,MAAOX,EAAM,KAAK,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAG5H,CAEX,CAAC,gBAICY,EAAAA,UAAA,EAAAC,EAAAA,YAGSC,EAAAA,8CAHOR,EAAA,KAAM,CAAA,EAAA,mBACpB,IAAkE,CAA/CN,EAAM,mBAAzBa,EAAAA,YAAkEE,EAAAA,QAAA,OAAnC,IAAKf,EAAM,IAAM,IAAKA,EAAM,GAAA,wCAC3Da,EAAAA,YAA4DG,EAAAA,QAAA,CAAA,IAAA,GAAA,mBAArC,IAAoB,CAAjBC,EAAAA,gBAAAC,EAAAA,gBAAAlB,EAAM,QAAQ,EAAA,CAAA,CAAA"}
@@ -1,6 +1,6 @@
1
- import { defineComponent as p, computed as m, createBlock as e, openBlock as t, normalizeProps as _, guardReactiveProps as x, withCtx as r, createTextVNode as S, toDisplayString as h } from "vue";
2
- import y from "../shadcn/Avatar.vue.js";
3
- import w from "../shadcn/AvatarFallback.vue.js";
1
+ import { defineComponent as p, computed as m, createBlock as e, openBlock as t, normalizeProps as _, guardReactiveProps as x, withCtx as r, createTextVNode as h, toDisplayString as S } from "vue";
2
+ import w from "../shadcn/Avatar.vue.js";
3
+ import y from "../shadcn/AvatarFallback.vue.js";
4
4
  import E from "../shadcn/AvatarImage.vue.js";
5
5
  const z = /* @__PURE__ */ p({
6
6
  __name: "JAvatar",
@@ -10,7 +10,7 @@ const z = /* @__PURE__ */ p({
10
10
  fallback: { default: "?" },
11
11
  class: {},
12
12
  styletype: { default: "default" },
13
- size: { default: "md" },
13
+ size: { default: "sm" },
14
14
  shape: { default: "circle" },
15
15
  status: {}
16
16
  },
@@ -30,6 +30,9 @@ const z = /* @__PURE__ */ p({
30
30
  class: "bg-red-500 text-white"
31
31
  }
32
32
  }, o = {
33
+ xs: {
34
+ class: "h-6 w-6 text-[10px]"
35
+ },
33
36
  sm: {
34
37
  class: "h-8 w-8 text-xs"
35
38
  },
@@ -71,15 +74,15 @@ const z = /* @__PURE__ */ p({
71
74
  class: [a.class, l.class, d.class, g.class, s.class].filter(Boolean).join(" ")
72
75
  };
73
76
  });
74
- return (a, l) => (t(), e(y, _(x(u.value)), {
77
+ return (a, l) => (t(), e(w, _(x(u.value)), {
75
78
  default: r(() => [
76
79
  s.src ? (t(), e(E, {
77
80
  key: 0,
78
81
  src: s.src,
79
82
  alt: s.alt
80
- }, null, 8, ["src", "alt"])) : (t(), e(w, { key: 1 }, {
83
+ }, null, 8, ["src", "alt"])) : (t(), e(y, { key: 1 }, {
81
84
  default: r(() => [
82
- S(h(s.fallback), 1)
85
+ h(S(s.fallback), 1)
83
86
  ]),
84
87
  _: 1
85
88
  }))
@@ -1 +1 @@
1
- {"version":3,"file":"JAvatar.vue.js","sources":["../../../../src/components/atoms/JAvatar.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport Avatar from '@/components/shadcn/Avatar.vue'\r\nimport AvatarFallback from '@/components/shadcn/AvatarFallback.vue'\r\nimport AvatarImage from '@/components/shadcn/AvatarImage.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 Size = 'sm' | 'md' | 'lg' | 'xl'\r\n\r\ntype Shape = 'circle' | 'square' | 'rounded'\r\n\r\ntype Status = 'online' | 'offline' | 'away' | 'busy'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n src?: string\r\n alt?: string\r\n fallback?: string\r\n class?: string\r\n /** 스타일 프리셋 */\r\n styletype?: StyleType\r\n /** 아바타 크기 */\r\n size?: Size\r\n /** 아바타 모양 */\r\n shape?: Shape\r\n /** 상태 표시 */\r\n status?: Status\r\n }>(),\r\n {\r\n alt: '',\r\n fallback: '?',\r\n styletype: 'default',\r\n size: 'md',\r\n shape: 'circle',\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: 'bg-blue-500 text-white',\r\n },\r\n success: { \r\n class: 'bg-green-500 text-white',\r\n },\r\n warning: { \r\n class: 'bg-amber-500 text-white',\r\n },\r\n danger: { \r\n class: 'bg-red-500 text-white',\r\n },\r\n}\r\n\r\n/**\r\n * size -> class 매핑\r\n */\r\nconst SIZE_PRESETS: Record<Size, { class: string }> = {\r\n sm: { \r\n class: 'h-8 w-8 text-xs',\r\n },\r\n md: { \r\n class: 'h-10 w-10 text-sm',\r\n },\r\n lg: { \r\n class: 'h-12 w-12 text-base',\r\n },\r\n xl: { \r\n class: 'h-16 w-16 text-lg',\r\n },\r\n}\r\n\r\n/**\r\n * shape -> class 매핑\r\n */\r\nconst SHAPE_PRESETS: Record<Shape, { class: string }> = {\r\n circle: { \r\n class: 'rounded-full',\r\n },\r\n square: { \r\n class: 'rounded-none',\r\n },\r\n rounded: { \r\n class: 'rounded-lg',\r\n },\r\n}\r\n\r\n/**\r\n * status -> class 매핑\r\n */\r\nconst STATUS_PRESETS: Record<Status, { class: string }> = {\r\n online: { \r\n class: 'ring-2 ring-green-500 ring-offset-2',\r\n },\r\n offline: { \r\n class: 'ring-2 ring-gray-400 ring-offset-2',\r\n },\r\n away: { \r\n class: 'ring-2 ring-yellow-500 ring-offset-2',\r\n },\r\n busy: { \r\n class: 'ring-2 ring-red-500 ring-offset-2',\r\n },\r\n}\r\n\r\n/** 최종 바인딩: 직접 넘긴 class가 있으면 styletype, size, shape, status 기본값과 병합 */\r\nconst mapped = computed(() => {\r\n const stylePreset = STYLE_PRESETS[props.styletype!]\r\n const sizePreset = SIZE_PRESETS[props.size!]\r\n const shapePreset = SHAPE_PRESETS[props.shape!]\r\n const statusPreset = props.status ? STATUS_PRESETS[props.status] : { class: '' }\r\n const finalClass = [stylePreset.class, sizePreset.class, shapePreset.class, statusPreset.class, props.class].filter(Boolean).join(' ')\r\n \r\n return {\r\n class: finalClass,\r\n }\r\n})\r\n</script>\r\n\r\n<template>\r\n <Avatar v-bind=\"mapped\">\r\n <AvatarImage v-if=\"props.src\" :src=\"props.src\" :alt=\"props.alt\" />\r\n <AvatarFallback v-else>{{ props.fallback }}</AvatarFallback>\r\n </Avatar>\r\n</template>\r\n"],"names":["props","__props","STYLE_PRESETS","SIZE_PRESETS","SHAPE_PRESETS","STATUS_PRESETS","mapped","computed","stylePreset","sizePreset","shapePreset","statusPreset","_openBlock","_createBlock","Avatar","AvatarImage","AvatarFallback","_createTextVNode","_toDisplayString"],"mappings":";;;;;;;;;;;;;;;;;AAmBA,UAAMA,IAAQC,GA2BRC,IAAsD;AAAA,MAC1D,SAAS,EAAE,OAAO,GAAA;AAAA,MAClB,SAAS;AAAA,QACP,OAAO;AAAA,MAAA;AAAA,MAET,SAAS;AAAA,QACP,OAAO;AAAA,MAAA;AAAA,MAET,SAAS;AAAA,QACP,OAAO;AAAA,MAAA;AAAA,MAET,QAAQ;AAAA,QACN,OAAO;AAAA,MAAA;AAAA,IACT,GAMIC,IAAgD;AAAA,MACpD,IAAI;AAAA,QACF,OAAO;AAAA,MAAA;AAAA,MAET,IAAI;AAAA,QACF,OAAO;AAAA,MAAA;AAAA,MAET,IAAI;AAAA,QACF,OAAO;AAAA,MAAA;AAAA,MAET,IAAI;AAAA,QACF,OAAO;AAAA,MAAA;AAAA,IACT,GAMIC,IAAkD;AAAA,MACtD,QAAQ;AAAA,QACN,OAAO;AAAA,MAAA;AAAA,MAET,QAAQ;AAAA,QACN,OAAO;AAAA,MAAA;AAAA,MAET,SAAS;AAAA,QACP,OAAO;AAAA,MAAA;AAAA,IACT,GAMIC,IAAoD;AAAA,MACxD,QAAQ;AAAA,QACN,OAAO;AAAA,MAAA;AAAA,MAET,SAAS;AAAA,QACP,OAAO;AAAA,MAAA;AAAA,MAET,MAAM;AAAA,QACJ,OAAO;AAAA,MAAA;AAAA,MAET,MAAM;AAAA,QACJ,OAAO;AAAA,MAAA;AAAA,IACT,GAIIC,IAASC,EAAS,MAAM;AAC5B,YAAMC,IAAcN,EAAcF,EAAM,SAAU,GAC5CS,IAAaN,EAAaH,EAAM,IAAK,GACrCU,IAAcN,EAAcJ,EAAM,KAAM,GACxCW,IAAeX,EAAM,SAASK,EAAeL,EAAM,MAAM,IAAI,EAAE,OAAO,GAAA;AAG5E,aAAO;AAAA,QACL,OAHiB,CAACQ,EAAY,OAAOC,EAAW,OAAOC,EAAY,OAAOC,EAAa,OAAOX,EAAM,KAAK,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,MAG5H;AAAA,IAEX,CAAC;sBAICY,EAAA,GAAAC,EAGSC,OAHOR,EAAA,KAAM,CAAA,GAAA;AAAA,iBACpB,MAAkE;AAAA,QAA/CN,EAAM,YAAzBa,EAAkEE,GAAA;AAAA;UAAnC,KAAKf,EAAM;AAAA,UAAM,KAAKA,EAAM;AAAA,QAAA,qCAC3Da,EAA4DG,GAAA,EAAA,KAAA,KAAA;AAAA,qBAArC,MAAoB;AAAA,YAAjBC,EAAAC,EAAAlB,EAAM,QAAQ,GAAA,CAAA;AAAA,UAAA;;;;;;;;"}
1
+ {"version":3,"file":"JAvatar.vue.js","sources":["../../../../src/components/atoms/JAvatar.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport Avatar from '@/components/shadcn/Avatar.vue'\r\nimport AvatarFallback from '@/components/shadcn/AvatarFallback.vue'\r\nimport AvatarImage from '@/components/shadcn/AvatarImage.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 Size = 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n\r\ntype Shape = 'circle' | 'square' | 'rounded'\r\n\r\ntype Status = 'online' | 'offline' | 'away' | 'busy'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n src?: string\r\n alt?: string\r\n fallback?: string\r\n class?: string\r\n /** 스타일 프리셋 */\r\n styletype?: StyleType\r\n /** 아바타 크기 */\r\n size?: Size\r\n /** 아바타 모양 */\r\n shape?: Shape\r\n /** 상태 표시 */\r\n status?: Status\r\n }>(),\r\n {\n alt: '',\n fallback: '?',\n styletype: 'default',\n size: 'sm',\n shape: 'circle',\n },\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: 'bg-blue-500 text-white',\r\n },\r\n success: { \r\n class: 'bg-green-500 text-white',\r\n },\r\n warning: { \r\n class: 'bg-amber-500 text-white',\r\n },\r\n danger: { \r\n class: 'bg-red-500 text-white',\r\n },\r\n}\r\n\r\n/**\r\n * size -> class 매핑\r\n */\r\nconst SIZE_PRESETS: Record<Size, { class: string }> = {\n xs: { \n class: 'h-6 w-6 text-[10px]',\n },\n sm: { \n class: 'h-8 w-8 text-xs',\n },\n md: { \n class: 'h-10 w-10 text-sm',\n },\n lg: { \n class: 'h-12 w-12 text-base',\n },\n xl: { \n class: 'h-16 w-16 text-lg',\n },\n}\n\r\n/**\r\n * shape -> class 매핑\r\n */\r\nconst SHAPE_PRESETS: Record<Shape, { class: string }> = {\r\n circle: { \r\n class: 'rounded-full',\r\n },\r\n square: { \r\n class: 'rounded-none',\r\n },\r\n rounded: { \r\n class: 'rounded-lg',\r\n },\r\n}\r\n\r\n/**\r\n * status -> class 매핑\r\n */\r\nconst STATUS_PRESETS: Record<Status, { class: string }> = {\r\n online: { \r\n class: 'ring-2 ring-green-500 ring-offset-2',\r\n },\r\n offline: { \r\n class: 'ring-2 ring-gray-400 ring-offset-2',\r\n },\r\n away: { \r\n class: 'ring-2 ring-yellow-500 ring-offset-2',\r\n },\r\n busy: { \r\n class: 'ring-2 ring-red-500 ring-offset-2',\r\n },\r\n}\r\n\r\n/** 최종 바인딩: 직접 넘긴 class가 있으면 styletype, size, shape, status 기본값과 병합 */\r\nconst mapped = computed(() => {\r\n const stylePreset = STYLE_PRESETS[props.styletype!]\r\n const sizePreset = SIZE_PRESETS[props.size!]\r\n const shapePreset = SHAPE_PRESETS[props.shape!]\r\n const statusPreset = props.status ? STATUS_PRESETS[props.status] : { class: '' }\r\n const finalClass = [stylePreset.class, sizePreset.class, shapePreset.class, statusPreset.class, props.class].filter(Boolean).join(' ')\r\n \r\n return {\r\n class: finalClass,\r\n }\r\n})\r\n</script>\r\n\r\n<template>\r\n <Avatar v-bind=\"mapped\">\r\n <AvatarImage v-if=\"props.src\" :src=\"props.src\" :alt=\"props.alt\" />\r\n <AvatarFallback v-else>{{ props.fallback }}</AvatarFallback>\r\n </Avatar>\r\n</template>\r\n"],"names":["props","__props","STYLE_PRESETS","SIZE_PRESETS","SHAPE_PRESETS","STATUS_PRESETS","mapped","computed","stylePreset","sizePreset","shapePreset","statusPreset","_openBlock","_createBlock","Avatar","AvatarImage","AvatarFallback","_createTextVNode","_toDisplayString"],"mappings":";;;;;;;;;;;;;;;;;AAmBA,UAAMA,IAAQC,GA2BRC,IAAsD;AAAA,MAC1D,SAAS,EAAE,OAAO,GAAA;AAAA,MAClB,SAAS;AAAA,QACP,OAAO;AAAA,MAAA;AAAA,MAET,SAAS;AAAA,QACP,OAAO;AAAA,MAAA;AAAA,MAET,SAAS;AAAA,QACP,OAAO;AAAA,MAAA;AAAA,MAET,QAAQ;AAAA,QACN,OAAO;AAAA,MAAA;AAAA,IACT,GAMIC,IAAgD;AAAA,MACpD,IAAI;AAAA,QACF,OAAO;AAAA,MAAA;AAAA,MAET,IAAI;AAAA,QACF,OAAO;AAAA,MAAA;AAAA,MAET,IAAI;AAAA,QACF,OAAO;AAAA,MAAA;AAAA,MAET,IAAI;AAAA,QACF,OAAO;AAAA,MAAA;AAAA,MAET,IAAI;AAAA,QACF,OAAO;AAAA,MAAA;AAAA,IACT,GAMIC,IAAkD;AAAA,MACtD,QAAQ;AAAA,QACN,OAAO;AAAA,MAAA;AAAA,MAET,QAAQ;AAAA,QACN,OAAO;AAAA,MAAA;AAAA,MAET,SAAS;AAAA,QACP,OAAO;AAAA,MAAA;AAAA,IACT,GAMIC,IAAoD;AAAA,MACxD,QAAQ;AAAA,QACN,OAAO;AAAA,MAAA;AAAA,MAET,SAAS;AAAA,QACP,OAAO;AAAA,MAAA;AAAA,MAET,MAAM;AAAA,QACJ,OAAO;AAAA,MAAA;AAAA,MAET,MAAM;AAAA,QACJ,OAAO;AAAA,MAAA;AAAA,IACT,GAIIC,IAASC,EAAS,MAAM;AAC5B,YAAMC,IAAcN,EAAcF,EAAM,SAAU,GAC5CS,IAAaN,EAAaH,EAAM,IAAK,GACrCU,IAAcN,EAAcJ,EAAM,KAAM,GACxCW,IAAeX,EAAM,SAASK,EAAeL,EAAM,MAAM,IAAI,EAAE,OAAO,GAAA;AAG5E,aAAO;AAAA,QACL,OAHiB,CAACQ,EAAY,OAAOC,EAAW,OAAOC,EAAY,OAAOC,EAAa,OAAOX,EAAM,KAAK,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,MAG5H;AAAA,IAEX,CAAC;sBAICY,EAAA,GAAAC,EAGSC,OAHOR,EAAA,KAAM,CAAA,GAAA;AAAA,iBACpB,MAAkE;AAAA,QAA/CN,EAAM,YAAzBa,EAAkEE,GAAA;AAAA;UAAnC,KAAKf,EAAM;AAAA,UAAM,KAAKA,EAAM;AAAA,QAAA,qCAC3Da,EAA4DG,GAAA,EAAA,KAAA,KAAA;AAAA,qBAArC,MAAoB;AAAA,YAAjBC,EAAAC,EAAAlB,EAAM,QAAQ,GAAA,CAAA;AAAA,UAAA;;;;;;;;"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),g=require("../shadcn/Badge.vue.cjs"),b=e.defineComponent({__name:"JBadge",props:{variant:{default:"default"},class:{},styletype:{default:"default"},size:{default:"md"}},setup(n){const r=n,o={default:{class:""},primary:{variant:"default",class:"bg-blue-500 text-white hover:bg-blue-600"},success:{variant:"default",class:"bg-green-500 text-white hover:bg-green-600"},warning:{variant:"default",class:"bg-amber-500 text-white hover:bg-amber-600"},danger:{variant:"default",class:"bg-red-500 text-white hover:bg-red-600"}},u={sm:"text-xs px-1.5 py-0.5",md:"text-sm px-2.5 py-1",lg:"text-base px-3.5 py-1.5"},i=e.computed(()=>{const t=o[r.styletype],l=u[r.size],s=r.variant||t.variant;let a="";s==="outline"?a=d(r.styletype):s==="secondary"?a="bg-gray-100 text-gray-800 hover:bg-gray-200":s==="destructive"?a="bg-red-500 text-white hover:bg-red-600":a=t.class;const c=[a,l,r.class].filter(Boolean).join(" ");return{variant:s,class:c}}),d=t=>({default:"border-gray-300 text-gray-700",primary:"border-blue-500 text-blue-600",success:"border-green-500 text-green-600",warning:"border-amber-500 text-amber-600",danger:"border-red-500 text-red-600"})[t]||"";return(t,l)=>(e.openBlock(),e.createBlock(g.default,e.normalizeProps(e.guardReactiveProps(i.value)),{default:e.withCtx(()=>[e.renderSlot(t.$slots,"default")]),_:3},16))}});exports.default=b;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),g=require("../shadcn/Badge.vue.cjs"),p=e.defineComponent({__name:"JBadge",props:{variant:{default:"default"},class:{},styletype:{default:"default"},size:{default:"sm"}},setup(n){const r=n,o={default:{class:""},primary:{variant:"default",class:"bg-blue-500 text-white hover:bg-blue-600"},success:{variant:"default",class:"bg-green-500 text-white hover:bg-green-600"},warning:{variant:"default",class:"bg-amber-500 text-white hover:bg-amber-600"},danger:{variant:"default",class:"bg-red-500 text-white hover:bg-red-600"}},i={xs:"text-[10px] px-1 py-0.5 leading-tight",sm:"text-xs px-1.5 py-0.5",md:"text-xs px-2 py-1",lg:"text-sm px-2.5 py-1"},u=e.computed(()=>{const t=o[r.styletype],l=i[r.size],s=r.variant||t.variant;let a="";s==="outline"?a=d(r.styletype):s==="secondary"?a="bg-gray-100 text-gray-800 hover:bg-gray-200":s==="destructive"?a="bg-red-500 text-white hover:bg-red-600":a=t.class;const c=[a,l,r.class].filter(Boolean).join(" ");return{variant:s,class:c}}),d=t=>({default:"border-gray-300 text-gray-700",primary:"border-blue-500 text-blue-600",success:"border-green-500 text-green-600",warning:"border-amber-500 text-amber-600",danger:"border-red-500 text-red-600"})[t]||"";return(t,l)=>(e.openBlock(),e.createBlock(g.default,e.normalizeProps(e.guardReactiveProps(u.value)),{default:e.withCtx(()=>[e.renderSlot(t.$slots,"default")]),_:3},16))}});exports.default=p;
2
2
  //# sourceMappingURL=JBadge.vue.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"JBadge.vue.cjs","sources":["../../../../src/components/atoms/JBadge.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport Badge from '@/components/shadcn/Badge.vue'\r\n\r\ntype StyleType =\r\n | 'default' // 기본 스타일\r\n | 'primary' // 강조 스타일 (파랑)\r\n | 'success' // 성공 스타일 (초록)\r\n | 'warning' // 경고 스타일 (주황)\r\n | 'danger' // 위험 스타일 (빨강)\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n variant?: 'default' | 'secondary' | 'destructive' | 'outline'\r\n class?: string\r\n /** 스타일 프리셋 */\r\n styletype?: StyleType\r\n /** 배지 크기 */\r\n size?: 'sm' | 'md' | 'lg'\r\n }>(),\r\n {\r\n variant: 'default',\r\n styletype: 'default',\r\n size: 'md',\r\n },\r\n)\r\n\r\n/**\r\n * styletype -> variant, class 매핑\r\n */\r\nconst STYLE_PRESETS: Record<StyleType, { variant?: string; class: string }> = {\r\n default: { class: '' },\r\n primary: { \r\n variant: 'default',\r\n class: 'bg-blue-500 text-white hover:bg-blue-600',\r\n },\r\n success: { \r\n variant: 'default',\r\n class: 'bg-green-500 text-white hover:bg-green-600',\r\n },\r\n warning: { \r\n variant: 'default',\r\n class: 'bg-amber-500 text-white hover:bg-amber-600',\r\n },\r\n danger: { \r\n variant: 'default',\r\n class: 'bg-red-500 text-white hover:bg-red-600',\r\n },\r\n}\r\n\r\n/**\r\n * size -> class 매핑\r\n */\r\nconst SIZE_PRESETS: Record<'sm' | 'md' | 'lg', string> = {\r\n sm: 'text-xs px-1.5 py-0.5',\r\n md: 'text-sm px-2.5 py-1',\r\n lg: 'text-base px-3.5 py-1.5',\r\n}\r\n\r\n/** 최종 바인딩: 직접 넘긴 props가 있으면 styletype 기본값과 병합 */\r\nconst mapped = computed(() => {\r\n const preset = STYLE_PRESETS[props.styletype!]\r\n const sizeClass = SIZE_PRESETS[props.size!]\r\n \r\n const finalVariant = props.variant || preset.variant\r\n let styleClass = ''\r\n \r\n // variant에 따른 스타일 처리\r\n if (finalVariant === 'outline') {\r\n // outline: 테두리 색상만 적용 (styletype 색상 사용)\r\n styleClass = getOutlineStyleClass(props.styletype!)\r\n } else if (finalVariant === 'secondary') {\r\n // secondary: 고정된 회색 계열 스타일 (styletype 무시)\r\n styleClass = 'bg-gray-100 text-gray-800 hover:bg-gray-200'\r\n } else if (finalVariant === 'destructive') {\r\n // destructive: 고정된 빨간색 계열 스타일 (styletype 무시)\r\n styleClass = 'bg-red-500 text-white hover:bg-red-600'\r\n } else {\r\n // default: styletype의 배경색 스타일 적용\r\n styleClass = preset.class\r\n }\r\n \r\n const finalClass = [styleClass, sizeClass, props.class].filter(Boolean).join(' ')\r\n \r\n return {\r\n variant: finalVariant,\r\n class: finalClass,\r\n }\r\n})\r\n\r\n/**\r\n * outline variant용 스타일 클래스\r\n */\r\nconst getOutlineStyleClass = (styletype: StyleType): string => {\r\n const outlineStyles: Record<StyleType, string> = {\r\n default: 'border-gray-300 text-gray-700',\r\n primary: 'border-blue-500 text-blue-600',\r\n success: 'border-green-500 text-green-600',\r\n warning: 'border-amber-500 text-amber-600',\r\n danger: 'border-red-500 text-red-600',\r\n }\r\n return outlineStyles[styletype] || ''\r\n}\r\n</script>\r\n\r\n<template>\r\n <Badge v-bind=\"mapped\">\r\n <slot />\r\n </Badge>\r\n</template>\r\n"],"names":["props","__props","STYLE_PRESETS","SIZE_PRESETS","mapped","computed","preset","sizeClass","finalVariant","styleClass","getOutlineStyleClass","finalClass","styletype","_openBlock","_createBlock","Badge","_renderSlot","_ctx"],"mappings":"qTAWA,MAAMA,EAAQC,EAmBRC,EAAwE,CAC5E,QAAS,CAAE,MAAO,EAAA,EAClB,QAAS,CACP,QAAS,UACT,MAAO,0CAAA,EAET,QAAS,CACP,QAAS,UACT,MAAO,4CAAA,EAET,QAAS,CACP,QAAS,UACT,MAAO,4CAAA,EAET,OAAQ,CACN,QAAS,UACT,MAAO,wCAAA,CACT,EAMIC,EAAmD,CACvD,GAAI,wBACJ,GAAI,sBACJ,GAAI,yBAAA,EAIAC,EAASC,EAAAA,SAAS,IAAM,CAC5B,MAAMC,EAASJ,EAAcF,EAAM,SAAU,EACvCO,EAAYJ,EAAaH,EAAM,IAAK,EAEpCQ,EAAeR,EAAM,SAAWM,EAAO,QAC7C,IAAIG,EAAa,GAGbD,IAAiB,UAEnBC,EAAaC,EAAqBV,EAAM,SAAU,EACzCQ,IAAiB,YAE1BC,EAAa,8CACJD,IAAiB,cAE1BC,EAAa,yCAGbA,EAAaH,EAAO,MAGtB,MAAMK,EAAa,CAACF,EAAYF,EAAWP,EAAM,KAAK,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,EAEhF,MAAO,CACL,QAASQ,EACT,MAAOG,CAAA,CAEX,CAAC,EAKKD,EAAwBE,IACqB,CAC/C,QAAS,gCACT,QAAS,gCACT,QAAS,kCACT,QAAS,kCACT,OAAQ,6BAAA,GAEWA,CAAS,GAAK,iBAKnCC,EAAAA,UAAA,EAAAC,EAAAA,YAEQC,EAAAA,8CAFOX,EAAA,KAAM,CAAA,EAAA,mBACnB,IAAQ,CAARY,aAAQC,EAAA,OAAA,SAAA,CAAA"}
1
+ {"version":3,"file":"JBadge.vue.cjs","sources":["../../../../src/components/atoms/JBadge.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport Badge from '@/components/shadcn/Badge.vue'\r\n\r\ntype StyleType =\r\n | 'default' // 기본 스타일\r\n | 'primary' // 강조 스타일 (파랑)\r\n | 'success' // 성공 스타일 (초록)\r\n | 'warning' // 경고 스타일 (주황)\r\n | 'danger' // 위험 스타일 (빨강)\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n variant?: 'default' | 'secondary' | 'destructive' | 'outline'\r\n class?: string\r\n /** 스타일 프리셋 */\r\n styletype?: StyleType\r\n /** 배지 크기 */\n size?: 'xs' | 'sm' | 'md' | 'lg'\n }>(),\r\n {\n variant: 'default',\n styletype: 'default',\n size: 'sm',\n },\n)\r\n\r\n/**\r\n * styletype -> variant, class 매핑\r\n */\r\nconst STYLE_PRESETS: Record<StyleType, { variant?: string; class: string }> = {\r\n default: { class: '' },\r\n primary: { \r\n variant: 'default',\r\n class: 'bg-blue-500 text-white hover:bg-blue-600',\r\n },\r\n success: { \r\n variant: 'default',\r\n class: 'bg-green-500 text-white hover:bg-green-600',\r\n },\r\n warning: { \r\n variant: 'default',\r\n class: 'bg-amber-500 text-white hover:bg-amber-600',\r\n },\r\n danger: { \r\n variant: 'default',\r\n class: 'bg-red-500 text-white hover:bg-red-600',\r\n },\r\n}\r\n\r\n/**\r\n * size -> class 매핑\r\n */\r\nconst SIZE_PRESETS: Record<'xs' | 'sm' | 'md' | 'lg', string> = {\n xs: 'text-[10px] px-1 py-0.5 leading-tight',\n sm: 'text-xs px-1.5 py-0.5',\n md: 'text-xs px-2 py-1',\n lg: 'text-sm px-2.5 py-1',\n}\n\r\n/** 최종 바인딩: 직접 넘긴 props가 있으면 styletype 기본값과 병합 */\r\nconst mapped = computed(() => {\r\n const preset = STYLE_PRESETS[props.styletype!]\r\n const sizeClass = SIZE_PRESETS[props.size!]\r\n \r\n const finalVariant = props.variant || preset.variant\r\n let styleClass = ''\r\n \r\n // variant에 따른 스타일 처리\r\n if (finalVariant === 'outline') {\r\n // outline: 테두리 색상만 적용 (styletype 색상 사용)\r\n styleClass = getOutlineStyleClass(props.styletype!)\r\n } else if (finalVariant === 'secondary') {\r\n // secondary: 고정된 회색 계열 스타일 (styletype 무시)\r\n styleClass = 'bg-gray-100 text-gray-800 hover:bg-gray-200'\r\n } else if (finalVariant === 'destructive') {\r\n // destructive: 고정된 빨간색 계열 스타일 (styletype 무시)\r\n styleClass = 'bg-red-500 text-white hover:bg-red-600'\r\n } else {\r\n // default: styletype의 배경색 스타일 적용\r\n styleClass = preset.class\r\n }\r\n \r\n const finalClass = [styleClass, sizeClass, props.class].filter(Boolean).join(' ')\r\n \r\n return {\r\n variant: finalVariant,\r\n class: finalClass,\r\n }\r\n})\r\n\r\n/**\r\n * outline variant용 스타일 클래스\r\n */\r\nconst getOutlineStyleClass = (styletype: StyleType): string => {\r\n const outlineStyles: Record<StyleType, string> = {\r\n default: 'border-gray-300 text-gray-700',\r\n primary: 'border-blue-500 text-blue-600',\r\n success: 'border-green-500 text-green-600',\r\n warning: 'border-amber-500 text-amber-600',\r\n danger: 'border-red-500 text-red-600',\r\n }\r\n return outlineStyles[styletype] || ''\r\n}\r\n</script>\r\n\r\n<template>\r\n <Badge v-bind=\"mapped\">\r\n <slot />\r\n </Badge>\r\n</template>\r\n"],"names":["props","__props","STYLE_PRESETS","SIZE_PRESETS","mapped","computed","preset","sizeClass","finalVariant","styleClass","getOutlineStyleClass","finalClass","styletype","_openBlock","_createBlock","Badge","_renderSlot","_ctx"],"mappings":"qTAWA,MAAMA,EAAQC,EAmBRC,EAAwE,CAC5E,QAAS,CAAE,MAAO,EAAA,EAClB,QAAS,CACP,QAAS,UACT,MAAO,0CAAA,EAET,QAAS,CACP,QAAS,UACT,MAAO,4CAAA,EAET,QAAS,CACP,QAAS,UACT,MAAO,4CAAA,EAET,OAAQ,CACN,QAAS,UACT,MAAO,wCAAA,CACT,EAMIC,EAA0D,CAC9D,GAAI,wCACJ,GAAI,wBACJ,GAAI,oBACJ,GAAI,qBAAA,EAIAC,EAASC,EAAAA,SAAS,IAAM,CAC5B,MAAMC,EAASJ,EAAcF,EAAM,SAAU,EACvCO,EAAYJ,EAAaH,EAAM,IAAK,EAEpCQ,EAAeR,EAAM,SAAWM,EAAO,QAC7C,IAAIG,EAAa,GAGbD,IAAiB,UAEnBC,EAAaC,EAAqBV,EAAM,SAAU,EACzCQ,IAAiB,YAE1BC,EAAa,8CACJD,IAAiB,cAE1BC,EAAa,yCAGbA,EAAaH,EAAO,MAGtB,MAAMK,EAAa,CAACF,EAAYF,EAAWP,EAAM,KAAK,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,EAEhF,MAAO,CACL,QAASQ,EACT,MAAOG,CAAA,CAEX,CAAC,EAKKD,EAAwBE,IACqB,CAC/C,QAAS,gCACT,QAAS,gCACT,QAAS,kCACT,QAAS,kCACT,OAAQ,6BAAA,GAEWA,CAAS,GAAK,iBAKnCC,EAAAA,UAAA,EAAAC,EAAAA,YAEQC,EAAAA,8CAFOX,EAAA,KAAM,CAAA,EAAA,mBACnB,IAAQ,CAARY,aAAQC,EAAA,OAAA,SAAA,CAAA"}
@@ -1,4 +1,4 @@
1
- import { defineComponent as u, computed as g, createBlock as p, openBlock as b, normalizeProps as f, guardReactiveProps as m, withCtx as y, renderSlot as x } from "vue";
1
+ import { defineComponent as u, computed as g, createBlock as p, openBlock as b, normalizeProps as f, guardReactiveProps as x, withCtx as y, renderSlot as m } from "vue";
2
2
  import v from "../shadcn/Badge.vue.js";
3
3
  const _ = /* @__PURE__ */ u({
4
4
  __name: "JBadge",
@@ -6,7 +6,7 @@ const _ = /* @__PURE__ */ u({
6
6
  variant: { default: "default" },
7
7
  class: {},
8
8
  styletype: { default: "default" },
9
- size: { default: "md" }
9
+ size: { default: "sm" }
10
10
  },
11
11
  setup(l) {
12
12
  const t = l, n = {
@@ -28,9 +28,10 @@ const _ = /* @__PURE__ */ u({
28
28
  class: "bg-red-500 text-white hover:bg-red-600"
29
29
  }
30
30
  }, o = {
31
+ xs: "text-[10px] px-1 py-0.5 leading-tight",
31
32
  sm: "text-xs px-1.5 py-0.5",
32
- md: "text-sm px-2.5 py-1",
33
- lg: "text-base px-3.5 py-1.5"
33
+ md: "text-xs px-2 py-1",
34
+ lg: "text-sm px-2.5 py-1"
34
35
  }, i = g(() => {
35
36
  const e = n[t.styletype], s = o[t.size], a = t.variant || e.variant;
36
37
  let r = "";
@@ -47,9 +48,9 @@ const _ = /* @__PURE__ */ u({
47
48
  warning: "border-amber-500 text-amber-600",
48
49
  danger: "border-red-500 text-red-600"
49
50
  })[e] || "";
50
- return (e, s) => (b(), p(v, f(m(i.value)), {
51
+ return (e, s) => (b(), p(v, f(x(i.value)), {
51
52
  default: y(() => [
52
- x(e.$slots, "default")
53
+ m(e.$slots, "default")
53
54
  ]),
54
55
  _: 3
55
56
  }, 16));
@@ -1 +1 @@
1
- {"version":3,"file":"JBadge.vue.js","sources":["../../../../src/components/atoms/JBadge.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport Badge from '@/components/shadcn/Badge.vue'\r\n\r\ntype StyleType =\r\n | 'default' // 기본 스타일\r\n | 'primary' // 강조 스타일 (파랑)\r\n | 'success' // 성공 스타일 (초록)\r\n | 'warning' // 경고 스타일 (주황)\r\n | 'danger' // 위험 스타일 (빨강)\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n variant?: 'default' | 'secondary' | 'destructive' | 'outline'\r\n class?: string\r\n /** 스타일 프리셋 */\r\n styletype?: StyleType\r\n /** 배지 크기 */\r\n size?: 'sm' | 'md' | 'lg'\r\n }>(),\r\n {\r\n variant: 'default',\r\n styletype: 'default',\r\n size: 'md',\r\n },\r\n)\r\n\r\n/**\r\n * styletype -> variant, class 매핑\r\n */\r\nconst STYLE_PRESETS: Record<StyleType, { variant?: string; class: string }> = {\r\n default: { class: '' },\r\n primary: { \r\n variant: 'default',\r\n class: 'bg-blue-500 text-white hover:bg-blue-600',\r\n },\r\n success: { \r\n variant: 'default',\r\n class: 'bg-green-500 text-white hover:bg-green-600',\r\n },\r\n warning: { \r\n variant: 'default',\r\n class: 'bg-amber-500 text-white hover:bg-amber-600',\r\n },\r\n danger: { \r\n variant: 'default',\r\n class: 'bg-red-500 text-white hover:bg-red-600',\r\n },\r\n}\r\n\r\n/**\r\n * size -> class 매핑\r\n */\r\nconst SIZE_PRESETS: Record<'sm' | 'md' | 'lg', string> = {\r\n sm: 'text-xs px-1.5 py-0.5',\r\n md: 'text-sm px-2.5 py-1',\r\n lg: 'text-base px-3.5 py-1.5',\r\n}\r\n\r\n/** 최종 바인딩: 직접 넘긴 props가 있으면 styletype 기본값과 병합 */\r\nconst mapped = computed(() => {\r\n const preset = STYLE_PRESETS[props.styletype!]\r\n const sizeClass = SIZE_PRESETS[props.size!]\r\n \r\n const finalVariant = props.variant || preset.variant\r\n let styleClass = ''\r\n \r\n // variant에 따른 스타일 처리\r\n if (finalVariant === 'outline') {\r\n // outline: 테두리 색상만 적용 (styletype 색상 사용)\r\n styleClass = getOutlineStyleClass(props.styletype!)\r\n } else if (finalVariant === 'secondary') {\r\n // secondary: 고정된 회색 계열 스타일 (styletype 무시)\r\n styleClass = 'bg-gray-100 text-gray-800 hover:bg-gray-200'\r\n } else if (finalVariant === 'destructive') {\r\n // destructive: 고정된 빨간색 계열 스타일 (styletype 무시)\r\n styleClass = 'bg-red-500 text-white hover:bg-red-600'\r\n } else {\r\n // default: styletype의 배경색 스타일 적용\r\n styleClass = preset.class\r\n }\r\n \r\n const finalClass = [styleClass, sizeClass, props.class].filter(Boolean).join(' ')\r\n \r\n return {\r\n variant: finalVariant,\r\n class: finalClass,\r\n }\r\n})\r\n\r\n/**\r\n * outline variant용 스타일 클래스\r\n */\r\nconst getOutlineStyleClass = (styletype: StyleType): string => {\r\n const outlineStyles: Record<StyleType, string> = {\r\n default: 'border-gray-300 text-gray-700',\r\n primary: 'border-blue-500 text-blue-600',\r\n success: 'border-green-500 text-green-600',\r\n warning: 'border-amber-500 text-amber-600',\r\n danger: 'border-red-500 text-red-600',\r\n }\r\n return outlineStyles[styletype] || ''\r\n}\r\n</script>\r\n\r\n<template>\r\n <Badge v-bind=\"mapped\">\r\n <slot />\r\n </Badge>\r\n</template>\r\n"],"names":["props","__props","STYLE_PRESETS","SIZE_PRESETS","mapped","computed","preset","sizeClass","finalVariant","styleClass","getOutlineStyleClass","finalClass","styletype","_openBlock","_createBlock","Badge","_renderSlot","_ctx"],"mappings":";;;;;;;;;;;AAWA,UAAMA,IAAQC,GAmBRC,IAAwE;AAAA,MAC5E,SAAS,EAAE,OAAO,GAAA;AAAA,MAClB,SAAS;AAAA,QACP,SAAS;AAAA,QACT,OAAO;AAAA,MAAA;AAAA,MAET,SAAS;AAAA,QACP,SAAS;AAAA,QACT,OAAO;AAAA,MAAA;AAAA,MAET,SAAS;AAAA,QACP,SAAS;AAAA,QACT,OAAO;AAAA,MAAA;AAAA,MAET,QAAQ;AAAA,QACN,SAAS;AAAA,QACT,OAAO;AAAA,MAAA;AAAA,IACT,GAMIC,IAAmD;AAAA,MACvD,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IAAA,GAIAC,IAASC,EAAS,MAAM;AAC5B,YAAMC,IAASJ,EAAcF,EAAM,SAAU,GACvCO,IAAYJ,EAAaH,EAAM,IAAK,GAEpCQ,IAAeR,EAAM,WAAWM,EAAO;AAC7C,UAAIG,IAAa;AAGjB,MAAID,MAAiB,YAEnBC,IAAaC,EAAqBV,EAAM,SAAU,IACzCQ,MAAiB,cAE1BC,IAAa,gDACJD,MAAiB,gBAE1BC,IAAa,2CAGbA,IAAaH,EAAO;AAGtB,YAAMK,IAAa,CAACF,GAAYF,GAAWP,EAAM,KAAK,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAEhF,aAAO;AAAA,QACL,SAASQ;AAAA,QACT,OAAOG;AAAA,MAAA;AAAA,IAEX,CAAC,GAKKD,IAAuB,CAACE,OACqB;AAAA,MAC/C,SAAS;AAAA,MACT,SAAS;AAAA,MACT,SAAS;AAAA,MACT,SAAS;AAAA,MACT,QAAQ;AAAA,IAAA,GAEWA,CAAS,KAAK;sBAKnCC,EAAA,GAAAC,EAEQC,OAFOX,EAAA,KAAM,CAAA,GAAA;AAAA,iBACnB,MAAQ;AAAA,QAARY,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;;;;;"}
1
+ {"version":3,"file":"JBadge.vue.js","sources":["../../../../src/components/atoms/JBadge.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport Badge from '@/components/shadcn/Badge.vue'\r\n\r\ntype StyleType =\r\n | 'default' // 기본 스타일\r\n | 'primary' // 강조 스타일 (파랑)\r\n | 'success' // 성공 스타일 (초록)\r\n | 'warning' // 경고 스타일 (주황)\r\n | 'danger' // 위험 스타일 (빨강)\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n variant?: 'default' | 'secondary' | 'destructive' | 'outline'\r\n class?: string\r\n /** 스타일 프리셋 */\r\n styletype?: StyleType\r\n /** 배지 크기 */\n size?: 'xs' | 'sm' | 'md' | 'lg'\n }>(),\r\n {\n variant: 'default',\n styletype: 'default',\n size: 'sm',\n },\n)\r\n\r\n/**\r\n * styletype -> variant, class 매핑\r\n */\r\nconst STYLE_PRESETS: Record<StyleType, { variant?: string; class: string }> = {\r\n default: { class: '' },\r\n primary: { \r\n variant: 'default',\r\n class: 'bg-blue-500 text-white hover:bg-blue-600',\r\n },\r\n success: { \r\n variant: 'default',\r\n class: 'bg-green-500 text-white hover:bg-green-600',\r\n },\r\n warning: { \r\n variant: 'default',\r\n class: 'bg-amber-500 text-white hover:bg-amber-600',\r\n },\r\n danger: { \r\n variant: 'default',\r\n class: 'bg-red-500 text-white hover:bg-red-600',\r\n },\r\n}\r\n\r\n/**\r\n * size -> class 매핑\r\n */\r\nconst SIZE_PRESETS: Record<'xs' | 'sm' | 'md' | 'lg', string> = {\n xs: 'text-[10px] px-1 py-0.5 leading-tight',\n sm: 'text-xs px-1.5 py-0.5',\n md: 'text-xs px-2 py-1',\n lg: 'text-sm px-2.5 py-1',\n}\n\r\n/** 최종 바인딩: 직접 넘긴 props가 있으면 styletype 기본값과 병합 */\r\nconst mapped = computed(() => {\r\n const preset = STYLE_PRESETS[props.styletype!]\r\n const sizeClass = SIZE_PRESETS[props.size!]\r\n \r\n const finalVariant = props.variant || preset.variant\r\n let styleClass = ''\r\n \r\n // variant에 따른 스타일 처리\r\n if (finalVariant === 'outline') {\r\n // outline: 테두리 색상만 적용 (styletype 색상 사용)\r\n styleClass = getOutlineStyleClass(props.styletype!)\r\n } else if (finalVariant === 'secondary') {\r\n // secondary: 고정된 회색 계열 스타일 (styletype 무시)\r\n styleClass = 'bg-gray-100 text-gray-800 hover:bg-gray-200'\r\n } else if (finalVariant === 'destructive') {\r\n // destructive: 고정된 빨간색 계열 스타일 (styletype 무시)\r\n styleClass = 'bg-red-500 text-white hover:bg-red-600'\r\n } else {\r\n // default: styletype의 배경색 스타일 적용\r\n styleClass = preset.class\r\n }\r\n \r\n const finalClass = [styleClass, sizeClass, props.class].filter(Boolean).join(' ')\r\n \r\n return {\r\n variant: finalVariant,\r\n class: finalClass,\r\n }\r\n})\r\n\r\n/**\r\n * outline variant용 스타일 클래스\r\n */\r\nconst getOutlineStyleClass = (styletype: StyleType): string => {\r\n const outlineStyles: Record<StyleType, string> = {\r\n default: 'border-gray-300 text-gray-700',\r\n primary: 'border-blue-500 text-blue-600',\r\n success: 'border-green-500 text-green-600',\r\n warning: 'border-amber-500 text-amber-600',\r\n danger: 'border-red-500 text-red-600',\r\n }\r\n return outlineStyles[styletype] || ''\r\n}\r\n</script>\r\n\r\n<template>\r\n <Badge v-bind=\"mapped\">\r\n <slot />\r\n </Badge>\r\n</template>\r\n"],"names":["props","__props","STYLE_PRESETS","SIZE_PRESETS","mapped","computed","preset","sizeClass","finalVariant","styleClass","getOutlineStyleClass","finalClass","styletype","_openBlock","_createBlock","Badge","_renderSlot","_ctx"],"mappings":";;;;;;;;;;;AAWA,UAAMA,IAAQC,GAmBRC,IAAwE;AAAA,MAC5E,SAAS,EAAE,OAAO,GAAA;AAAA,MAClB,SAAS;AAAA,QACP,SAAS;AAAA,QACT,OAAO;AAAA,MAAA;AAAA,MAET,SAAS;AAAA,QACP,SAAS;AAAA,QACT,OAAO;AAAA,MAAA;AAAA,MAET,SAAS;AAAA,QACP,SAAS;AAAA,QACT,OAAO;AAAA,MAAA;AAAA,MAET,QAAQ;AAAA,QACN,SAAS;AAAA,QACT,OAAO;AAAA,MAAA;AAAA,IACT,GAMIC,IAA0D;AAAA,MAC9D,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IAAA,GAIAC,IAASC,EAAS,MAAM;AAC5B,YAAMC,IAASJ,EAAcF,EAAM,SAAU,GACvCO,IAAYJ,EAAaH,EAAM,IAAK,GAEpCQ,IAAeR,EAAM,WAAWM,EAAO;AAC7C,UAAIG,IAAa;AAGjB,MAAID,MAAiB,YAEnBC,IAAaC,EAAqBV,EAAM,SAAU,IACzCQ,MAAiB,cAE1BC,IAAa,gDACJD,MAAiB,gBAE1BC,IAAa,2CAGbA,IAAaH,EAAO;AAGtB,YAAMK,IAAa,CAACF,GAAYF,GAAWP,EAAM,KAAK,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAEhF,aAAO;AAAA,QACL,SAASQ;AAAA,QACT,OAAOG;AAAA,MAAA;AAAA,IAEX,CAAC,GAKKD,IAAuB,CAACE,OACqB;AAAA,MAC/C,SAAS;AAAA,MACT,SAAS;AAAA,MACT,SAAS;AAAA,MACT,SAAS;AAAA,MACT,QAAQ;AAAA,IAAA,GAEWA,CAAS,KAAK;sBAKnCC,EAAA,GAAAC,EAEQC,OAFOX,EAAA,KAAM,CAAA,GAAA;AAAA,iBACnB,MAAQ;AAAA,QAARY,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;;;;;"}
@@ -1,2 +1,7 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),f=require("lucide-vue-next");require("../shadcn/index.cjs");const p=require("../shadcn/Button.vue.cjs"),m=e.defineComponent({__name:"JButton",props:{type:{default:"button"},disabled:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},variant:{},size:{},class:{},styletype:{default:"default"}},emits:["click"],setup(l,{emit:r}){const a=l,u=r,s={default:{variant:"default"},primary:{variant:"default"},secondary:{variant:"secondary"},success:{variant:"default",class:"bg-green-600 hover:bg-green-700"},warning:{variant:"default",class:"bg-amber-500 hover:bg-amber-600"},danger:{variant:"destructive"},outline:{variant:"outline"},ghost:{variant:"ghost"},link:{variant:"link"},sm:{variant:"default",size:"sm"},lg:{variant:"default",size:"lg"},icon:{variant:"default",size:"icon"}},n=e.computed(()=>{const t=a.styletype||"default";return s[t]??s.default}),o=e.computed(()=>a.variant||n.value?.variant),c=e.computed(()=>a.size||n.value?.size||"default"),d=e.computed(()=>[n.value?.class,a.class].filter(Boolean).join(" ")),i=e.computed(()=>a.disabled||a.loading),v=t=>{i.value||u("click",t)};return(t,g)=>(e.openBlock(),e.createBlock(e.unref(p.default),{type:l.type,variant:o.value,size:c.value,class:e.normalizeClass(d.value),disabled:i.value,onClick:v},{default:e.withCtx(()=>[l.loading?(e.openBlock(),e.createBlock(e.unref(f.Loader2),{key:0,class:"mr-2 h-4 w-4 animate-spin"})):e.createCommentVNode("",!0),e.renderSlot(t.$slots,"default")]),_:3},8,["type","variant","size","class","disabled"]))}});exports.default=m;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./JButton.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-90794cf0"]]);exports.default=u;
2
7
  //# sourceMappingURL=JButton.vue.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"JButton.vue.cjs","sources":["../../../../src/components/atoms/JButton.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport { Loader2 } from 'lucide-vue-next'\r\nimport { Button, type ButtonVariants } from '@/components/shadcn'\r\n\r\ntype StyleType =\r\n | 'default' // 기본 스타일 (primary)\r\n | 'primary' // 강조 버튼 (파랑)\r\n | 'secondary' // 보조 버튼 (회색)\r\n | 'success' // 성공 버튼 (초록)\r\n | 'warning' // 경고 버튼 (주황)\r\n | 'danger' // 위험 버튼 (빨강)\r\n | 'outline' // 아웃라인 버튼\r\n | 'ghost' // 고스트 버튼\r\n | 'link' // 링크 스타일\r\n | 'sm' // 작은 크기\r\n | 'lg' // 큰 크기\r\n | 'icon' // 아이콘 전용\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n /** 버튼 타입 */\r\n type?: 'button' | 'submit' | 'reset'\r\n /** 비활성화 상태 */\r\n disabled?: boolean\r\n /** 로딩 상태 */\r\n loading?: boolean\r\n /** shadcn variant */\r\n variant?: ButtonVariants['variant']\r\n /** shadcn size */\r\n size?: ButtonVariants['size']\r\n /** 추가 CSS 클래스 */\r\n class?: string\r\n /** 스타일 프리셋 (variant + size 조합) */\r\n styletype?: StyleType\r\n }>(),\r\n {\r\n type: 'button',\r\n disabled: false,\r\n loading: false,\r\n styletype: 'default',\r\n },\r\n)\r\n\r\nconst emit = defineEmits<{\r\n click: [event: MouseEvent]\r\n}>()\r\n\r\n/**\r\n * styletype -> variant/size 매핑\r\n */\r\nconst STYLE_PRESETS: Record<StyleType, { variant: ButtonVariants['variant']; size?: ButtonVariants['size']; class?: string }> = {\r\n default: { \r\n variant: 'default',\r\n },\r\n primary: { \r\n variant: 'default',\r\n },\r\n secondary: { \r\n variant: 'secondary',\r\n },\r\n success: { \r\n variant: 'default',\r\n class: 'bg-green-600 hover:bg-green-700',\r\n },\r\n warning: { \r\n variant: 'default',\r\n class: 'bg-amber-500 hover:bg-amber-600',\r\n },\r\n danger: { \r\n variant: 'destructive',\r\n },\r\n outline: { \r\n variant: 'outline',\r\n },\r\n ghost: { \r\n variant: 'ghost',\r\n },\r\n link: { \r\n variant: 'link',\r\n },\r\n sm: { \r\n variant: 'default',\r\n size: 'sm',\r\n },\r\n lg: { \r\n variant: 'default',\r\n size: 'lg',\r\n },\r\n icon: { \r\n variant: 'default',\r\n size: 'icon',\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 finalVariant = computed(() => props.variant || preset.value?.variant)\r\nconst finalSize = computed(() => props.size || preset.value?.size || 'default')\r\nconst finalClass = computed(() => [preset.value?.class, props.class].filter(Boolean).join(' '))\r\n\r\nconst isDisabled = computed(() => props.disabled || props.loading)\r\n\r\nconst handleClick = (event: MouseEvent) => {\r\n if (!isDisabled.value) {\r\n emit('click', event)\r\n }\r\n}\r\n</script>\r\n\r\n<template>\r\n <Button\r\n :type=\"type\"\r\n :variant=\"finalVariant\"\r\n :size=\"finalSize\"\r\n :class=\"finalClass\"\r\n :disabled=\"isDisabled\"\r\n @click=\"handleClick\"\r\n >\r\n <Loader2 v-if=\"loading\" class=\"mr-2 h-4 w-4 animate-spin\" />\r\n <slot />\r\n </Button>\r\n</template>\r\n\r\n"],"names":["props","__props","emit","__emit","STYLE_PRESETS","preset","computed","styleKey","finalVariant","finalSize","finalClass","isDisabled","handleClick","event","_createBlock","_unref","Button","Loader2","_renderSlot","_ctx"],"mappings":"kdAmBA,MAAMA,EAAQC,EAyBRC,EAAOC,EAOPC,EAA0H,CAC9H,QAAS,CACP,QAAS,SAAA,EAEX,QAAS,CACP,QAAS,SAAA,EAEX,UAAW,CACT,QAAS,WAAA,EAEX,QAAS,CACP,QAAS,UACT,MAAO,iCAAA,EAET,QAAS,CACP,QAAS,UACT,MAAO,iCAAA,EAET,OAAQ,CACN,QAAS,aAAA,EAEX,QAAS,CACP,QAAS,SAAA,EAEX,MAAO,CACL,QAAS,OAAA,EAEX,KAAM,CACJ,QAAS,MAAA,EAEX,GAAI,CACF,QAAS,UACT,KAAM,IAAA,EAER,GAAI,CACF,QAAS,UACT,KAAM,IAAA,EAER,KAAM,CACJ,QAAS,UACT,KAAM,MAAA,CACR,EAGIC,EAASC,EAAAA,SAAS,IAAM,CAC5B,MAAMC,EAAWP,EAAM,WAAa,UACpC,OAAOI,EAAcG,CAAQ,GAAKH,EAAc,OAClD,CAAC,EAEKI,EAAeF,EAAAA,SAAS,IAAMN,EAAM,SAAWK,EAAO,OAAO,OAAO,EACpEI,EAAYH,EAAAA,SAAS,IAAMN,EAAM,MAAQK,EAAO,OAAO,MAAQ,SAAS,EACxEK,EAAaJ,EAAAA,SAAS,IAAM,CAACD,EAAO,OAAO,MAAOL,EAAM,KAAK,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC,EAExFW,EAAaL,EAAAA,SAAS,IAAMN,EAAM,UAAYA,EAAM,OAAO,EAE3DY,EAAeC,GAAsB,CACpCF,EAAW,OACdT,EAAK,QAASW,CAAK,CAEvB,8BAIEC,EAAAA,YAUSC,EAAAA,MAAAC,EAAAA,OAAA,EAAA,CATN,KAAMf,EAAA,KACN,QAASO,EAAA,MACT,KAAMC,EAAA,MACN,uBAAOC,EAAA,KAAU,EACjB,SAAUC,EAAA,MACV,QAAOC,CAAA,qBAER,IAA4D,CAA7CX,EAAA,uBAAfa,EAAAA,YAA4DC,EAAAA,MAAAE,EAAAA,OAAA,EAAA,OAApC,MAAM,2BAAA,gCAC9BC,aAAQC,EAAA,OAAA,SAAA,CAAA"}
1
+ {"version":3,"file":"JButton.vue.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,88 +1,13 @@
1
- import { defineComponent as y, computed as t, createBlock as r, openBlock as o, unref as c, normalizeClass as g, withCtx as b, createCommentVNode as z, renderSlot as k } from "vue";
2
- import { Loader2 as h } from "lucide-vue-next";
3
- import "../shadcn/index.js";
4
- import C from "../shadcn/Button.vue.js";
5
- const x = /* @__PURE__ */ y({
6
- __name: "JButton",
7
- props: {
8
- type: { default: "button" },
9
- disabled: { type: Boolean, default: !1 },
10
- loading: { type: Boolean, default: !1 },
11
- variant: {},
12
- size: {},
13
- class: {},
14
- styletype: { default: "default" }
15
- },
16
- emits: ["click"],
17
- setup(l, { emit: d }) {
18
- const a = l, u = d, i = {
19
- default: {
20
- variant: "default"
21
- },
22
- primary: {
23
- variant: "default"
24
- },
25
- secondary: {
26
- variant: "secondary"
27
- },
28
- success: {
29
- variant: "default",
30
- class: "bg-green-600 hover:bg-green-700"
31
- },
32
- warning: {
33
- variant: "default",
34
- class: "bg-amber-500 hover:bg-amber-600"
35
- },
36
- danger: {
37
- variant: "destructive"
38
- },
39
- outline: {
40
- variant: "outline"
41
- },
42
- ghost: {
43
- variant: "ghost"
44
- },
45
- link: {
46
- variant: "link"
47
- },
48
- sm: {
49
- variant: "default",
50
- size: "sm"
51
- },
52
- lg: {
53
- variant: "default",
54
- size: "lg"
55
- },
56
- icon: {
57
- variant: "default",
58
- size: "icon"
59
- }
60
- }, n = t(() => {
61
- const e = a.styletype || "default";
62
- return i[e] ?? i.default;
63
- }), f = t(() => a.variant || n.value?.variant), v = t(() => a.size || n.value?.size || "default"), m = t(() => [n.value?.class, a.class].filter(Boolean).join(" ")), s = t(() => a.disabled || a.loading), p = (e) => {
64
- s.value || u("click", e);
65
- };
66
- return (e, B) => (o(), r(c(C), {
67
- type: l.type,
68
- variant: f.value,
69
- size: v.value,
70
- class: g(m.value),
71
- disabled: s.value,
72
- onClick: p
73
- }, {
74
- default: b(() => [
75
- l.loading ? (o(), r(c(h), {
76
- key: 0,
77
- class: "mr-2 h-4 w-4 animate-spin"
78
- })) : z("", !0),
79
- k(e.$slots, "default")
80
- ]),
81
- _: 3
82
- }, 8, ["type", "variant", "size", "class", "disabled"]));
83
- }
84
- });
1
+ import o from "./JButton.vue2.js";
2
+ /* empty css */
3
+ const t = (t_comp, t_opts) => {
4
+ const t_merged = t_comp.__vccOpts || t_comp;
5
+ for (const [t_key, t_val] of t_opts)
6
+ t_merged[t_key] = t_val;
7
+ return t_merged;
8
+ };
9
+ const p = /* @__PURE__ */ t(o, [["__scopeId", "data-v-90794cf0"]]);
85
10
  export {
86
- x as default
11
+ p as default
87
12
  };
88
13
  //# sourceMappingURL=JButton.vue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"JButton.vue.js","sources":["../../../../src/components/atoms/JButton.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport { Loader2 } from 'lucide-vue-next'\r\nimport { Button, type ButtonVariants } from '@/components/shadcn'\r\n\r\ntype StyleType =\r\n | 'default' // 기본 스타일 (primary)\r\n | 'primary' // 강조 버튼 (파랑)\r\n | 'secondary' // 보조 버튼 (회색)\r\n | 'success' // 성공 버튼 (초록)\r\n | 'warning' // 경고 버튼 (주황)\r\n | 'danger' // 위험 버튼 (빨강)\r\n | 'outline' // 아웃라인 버튼\r\n | 'ghost' // 고스트 버튼\r\n | 'link' // 링크 스타일\r\n | 'sm' // 작은 크기\r\n | 'lg' // 큰 크기\r\n | 'icon' // 아이콘 전용\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n /** 버튼 타입 */\r\n type?: 'button' | 'submit' | 'reset'\r\n /** 비활성화 상태 */\r\n disabled?: boolean\r\n /** 로딩 상태 */\r\n loading?: boolean\r\n /** shadcn variant */\r\n variant?: ButtonVariants['variant']\r\n /** shadcn size */\r\n size?: ButtonVariants['size']\r\n /** 추가 CSS 클래스 */\r\n class?: string\r\n /** 스타일 프리셋 (variant + size 조합) */\r\n styletype?: StyleType\r\n }>(),\r\n {\r\n type: 'button',\r\n disabled: false,\r\n loading: false,\r\n styletype: 'default',\r\n },\r\n)\r\n\r\nconst emit = defineEmits<{\r\n click: [event: MouseEvent]\r\n}>()\r\n\r\n/**\r\n * styletype -> variant/size 매핑\r\n */\r\nconst STYLE_PRESETS: Record<StyleType, { variant: ButtonVariants['variant']; size?: ButtonVariants['size']; class?: string }> = {\r\n default: { \r\n variant: 'default',\r\n },\r\n primary: { \r\n variant: 'default',\r\n },\r\n secondary: { \r\n variant: 'secondary',\r\n },\r\n success: { \r\n variant: 'default',\r\n class: 'bg-green-600 hover:bg-green-700',\r\n },\r\n warning: { \r\n variant: 'default',\r\n class: 'bg-amber-500 hover:bg-amber-600',\r\n },\r\n danger: { \r\n variant: 'destructive',\r\n },\r\n outline: { \r\n variant: 'outline',\r\n },\r\n ghost: { \r\n variant: 'ghost',\r\n },\r\n link: { \r\n variant: 'link',\r\n },\r\n sm: { \r\n variant: 'default',\r\n size: 'sm',\r\n },\r\n lg: { \r\n variant: 'default',\r\n size: 'lg',\r\n },\r\n icon: { \r\n variant: 'default',\r\n size: 'icon',\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 finalVariant = computed(() => props.variant || preset.value?.variant)\r\nconst finalSize = computed(() => props.size || preset.value?.size || 'default')\r\nconst finalClass = computed(() => [preset.value?.class, props.class].filter(Boolean).join(' '))\r\n\r\nconst isDisabled = computed(() => props.disabled || props.loading)\r\n\r\nconst handleClick = (event: MouseEvent) => {\r\n if (!isDisabled.value) {\r\n emit('click', event)\r\n }\r\n}\r\n</script>\r\n\r\n<template>\r\n <Button\r\n :type=\"type\"\r\n :variant=\"finalVariant\"\r\n :size=\"finalSize\"\r\n :class=\"finalClass\"\r\n :disabled=\"isDisabled\"\r\n @click=\"handleClick\"\r\n >\r\n <Loader2 v-if=\"loading\" class=\"mr-2 h-4 w-4 animate-spin\" />\r\n <slot />\r\n </Button>\r\n</template>\r\n\r\n"],"names":["props","__props","emit","__emit","STYLE_PRESETS","preset","computed","styleKey","finalVariant","finalSize","finalClass","isDisabled","handleClick","event","_createBlock","_unref","Button","Loader2","_renderSlot","_ctx"],"mappings":";;;;;;;;;;;;;;;;;AAmBA,UAAMA,IAAQC,GAyBRC,IAAOC,GAOPC,IAA0H;AAAA,MAC9H,SAAS;AAAA,QACP,SAAS;AAAA,MAAA;AAAA,MAEX,SAAS;AAAA,QACP,SAAS;AAAA,MAAA;AAAA,MAEX,WAAW;AAAA,QACT,SAAS;AAAA,MAAA;AAAA,MAEX,SAAS;AAAA,QACP,SAAS;AAAA,QACT,OAAO;AAAA,MAAA;AAAA,MAET,SAAS;AAAA,QACP,SAAS;AAAA,QACT,OAAO;AAAA,MAAA;AAAA,MAET,QAAQ;AAAA,QACN,SAAS;AAAA,MAAA;AAAA,MAEX,SAAS;AAAA,QACP,SAAS;AAAA,MAAA;AAAA,MAEX,OAAO;AAAA,QACL,SAAS;AAAA,MAAA;AAAA,MAEX,MAAM;AAAA,QACJ,SAAS;AAAA,MAAA;AAAA,MAEX,IAAI;AAAA,QACF,SAAS;AAAA,QACT,MAAM;AAAA,MAAA;AAAA,MAER,IAAI;AAAA,QACF,SAAS;AAAA,QACT,MAAM;AAAA,MAAA;AAAA,MAER,MAAM;AAAA,QACJ,SAAS;AAAA,QACT,MAAM;AAAA,MAAA;AAAA,IACR,GAGIC,IAASC,EAAS,MAAM;AAC5B,YAAMC,IAAWP,EAAM,aAAa;AACpC,aAAOI,EAAcG,CAAQ,KAAKH,EAAc;AAAA,IAClD,CAAC,GAEKI,IAAeF,EAAS,MAAMN,EAAM,WAAWK,EAAO,OAAO,OAAO,GACpEI,IAAYH,EAAS,MAAMN,EAAM,QAAQK,EAAO,OAAO,QAAQ,SAAS,GACxEK,IAAaJ,EAAS,MAAM,CAACD,EAAO,OAAO,OAAOL,EAAM,KAAK,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC,GAExFW,IAAaL,EAAS,MAAMN,EAAM,YAAYA,EAAM,OAAO,GAE3DY,IAAc,CAACC,MAAsB;AACzC,MAAKF,EAAW,SACdT,EAAK,SAASW,CAAK;AAAA,IAEvB;2BAIEC,EAUSC,EAAAC,CAAA,GAAA;AAAA,MATN,MAAMf,EAAA;AAAA,MACN,SAASO,EAAA;AAAA,MACT,MAAMC,EAAA;AAAA,MACN,SAAOC,EAAA,KAAU;AAAA,MACjB,UAAUC,EAAA;AAAA,MACV,SAAOC;AAAA,IAAA;iBAER,MAA4D;AAAA,QAA7CX,EAAA,gBAAfa,EAA4DC,EAAAE,CAAA,GAAA;AAAA;UAApC,OAAM;AAAA,QAAA;QAC9BC,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;;;;;"}
1
+ {"version":3,"file":"JButton.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./JButton.vue.cjs");exports.default=e.default;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),f=require("lucide-vue-next");require("../shadcn/index.cjs");const p=require("../shadcn/Button.vue.cjs"),m=e.defineComponent({__name:"JButton",props:{type:{default:"button"},disabled:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},variant:{},size:{},class:{},styletype:{default:"default"}},emits:["click"],setup(l,{emit:r}){const t=l,u=r,s={default:{variant:"default"},primary:{variant:"default"},secondary:{variant:"secondary"},success:{variant:"default",class:"bg-green-600 hover:bg-green-700"},warning:{variant:"default",class:"bg-amber-500 hover:bg-amber-600"},danger:{variant:"destructive"},outline:{variant:"outline"},ghost:{variant:"ghost"},link:{variant:"link"},sm:{variant:"default",size:"sm"},lg:{variant:"default",size:"lg"},icon:{variant:"default",size:"icon"}},n=e.computed(()=>{const a=t.styletype||"default";return s[a]??s.default}),o=e.computed(()=>t.variant||n.value?.variant),c=e.computed(()=>t.size||n.value?.size||"sm"),d=e.computed(()=>[n.value?.class,t.class].filter(Boolean).join(" ")),i=e.computed(()=>t.disabled||t.loading),v=a=>{i.value||u("click",a)};return(a,g)=>(e.openBlock(),e.createBlock(e.unref(p.default),{type:l.type,variant:o.value,size:c.value,class:e.normalizeClass(d.value),disabled:i.value,onClick:v},{default:e.withCtx(()=>[l.loading?(e.openBlock(),e.createBlock(e.unref(f.Loader2),{key:0,class:"mr-2 h-4 w-4 animate-spin"})):e.createCommentVNode("",!0),e.renderSlot(a.$slots,"default",{},void 0,!0)]),_:3},8,["type","variant","size","class","disabled"]))}});exports.default=m;
2
2
  //# sourceMappingURL=JButton.vue2.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"JButton.vue2.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
1
+ {"version":3,"file":"JButton.vue2.cjs","sources":["../../../../src/components/atoms/JButton.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport { Loader2 } from 'lucide-vue-next'\r\nimport { Button, type ButtonVariants } from '@/components/shadcn'\r\n\r\ntype StyleType =\r\n | 'default' // 기본 스타일 (primary)\r\n | 'primary' // 강조 버튼 (파랑)\r\n | 'secondary' // 보조 버튼 (회색)\r\n | 'success' // 성공 버튼 (초록)\r\n | 'warning' // 경고 버튼 (주황)\r\n | 'danger' // 위험 버튼 (빨강)\r\n | 'outline' // 아웃라인 버튼\r\n | 'ghost' // 고스트 버튼\r\n | 'link' // 링크 스타일\r\n | 'sm' // 작은 크기\r\n | 'lg' // 큰 크기\r\n | 'icon' // 아이콘 전용\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n /** 버튼 타입 */\r\n type?: 'button' | 'submit' | 'reset'\r\n /** 비활성화 상태 */\r\n disabled?: boolean\r\n /** 로딩 상태 */\r\n loading?: boolean\r\n /** shadcn variant */\r\n variant?: ButtonVariants['variant']\r\n /** shadcn size */\r\n size?: ButtonVariants['size']\r\n /** 추가 CSS 클래스 */\r\n class?: string\r\n /** 스타일 프리셋 (variant + size 조합) */\r\n styletype?: StyleType\r\n }>(),\r\n {\r\n type: 'button',\r\n disabled: false,\r\n loading: false,\r\n styletype: 'default',\r\n },\r\n)\r\n\r\nconst emit = defineEmits<{\r\n click: [event: MouseEvent]\r\n}>()\r\n\r\n/**\r\n * styletype -> variant/size 매핑\r\n */\r\nconst STYLE_PRESETS: Record<StyleType, { variant: ButtonVariants['variant']; size?: ButtonVariants['size']; class?: string }> = {\r\n default: { \r\n variant: 'default',\r\n },\r\n primary: { \r\n variant: 'default',\r\n },\r\n secondary: { \r\n variant: 'secondary',\r\n },\r\n success: { \r\n variant: 'default',\r\n class: 'bg-green-600 hover:bg-green-700',\r\n },\r\n warning: { \r\n variant: 'default',\r\n class: 'bg-amber-500 hover:bg-amber-600',\r\n },\r\n danger: { \r\n variant: 'destructive',\r\n },\r\n outline: { \r\n variant: 'outline',\r\n },\r\n ghost: { \r\n variant: 'ghost',\r\n },\r\n link: { \r\n variant: 'link',\r\n },\r\n sm: { \r\n variant: 'default',\r\n size: 'sm',\r\n },\r\n lg: { \r\n variant: 'default',\r\n size: 'lg',\r\n },\r\n icon: { \r\n variant: 'default',\r\n size: 'icon',\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 finalVariant = computed(() => props.variant || preset.value?.variant)\nconst finalSize = computed(() => props.size || preset.value?.size || 'sm')\nconst finalClass = computed(() => [preset.value?.class, props.class].filter(Boolean).join(' '))\n\r\nconst isDisabled = computed(() => props.disabled || props.loading)\r\n\r\nconst handleClick = (event: MouseEvent) => {\r\n if (!isDisabled.value) {\r\n emit('click', event)\r\n }\r\n}\r\n</script>\r\n\r\n<template>\r\n <Button\n :type=\"type\"\n :variant=\"finalVariant\"\n :size=\"finalSize\"\n :class=\"finalClass\"\n :disabled=\"isDisabled\"\n @click=\"handleClick\"\n >\n <Loader2 v-if=\"loading\" class=\"mr-2 h-4 w-4 animate-spin\" />\n <slot />\n </Button>\n</template>\n\n<style scoped>\n/* ========================================\n 패턴 10: Button 향상 효과\n ======================================== */\n:deep(button) {\n transition: all 0.2s ease;\n}\n\n:deep(button:not(:disabled):hover) {\n transform: translateY(-1px);\n box-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n}\n\n:deep(button:not(:disabled):active) {\n transform: translateY(0);\n}\n</style>\n"],"names":["props","__props","emit","__emit","STYLE_PRESETS","preset","computed","styleKey","finalVariant","finalSize","finalClass","isDisabled","handleClick","event","_createBlock","_unref","Button","Loader2","_renderSlot","_ctx"],"mappings":"kdAmBA,MAAMA,EAAQC,EAyBRC,EAAOC,EAOPC,EAA0H,CAC9H,QAAS,CACP,QAAS,SAAA,EAEX,QAAS,CACP,QAAS,SAAA,EAEX,UAAW,CACT,QAAS,WAAA,EAEX,QAAS,CACP,QAAS,UACT,MAAO,iCAAA,EAET,QAAS,CACP,QAAS,UACT,MAAO,iCAAA,EAET,OAAQ,CACN,QAAS,aAAA,EAEX,QAAS,CACP,QAAS,SAAA,EAEX,MAAO,CACL,QAAS,OAAA,EAEX,KAAM,CACJ,QAAS,MAAA,EAEX,GAAI,CACF,QAAS,UACT,KAAM,IAAA,EAER,GAAI,CACF,QAAS,UACT,KAAM,IAAA,EAER,KAAM,CACJ,QAAS,UACT,KAAM,MAAA,CACR,EAGIC,EAASC,EAAAA,SAAS,IAAM,CAC5B,MAAMC,EAAWP,EAAM,WAAa,UACpC,OAAOI,EAAcG,CAAQ,GAAKH,EAAc,OAClD,CAAC,EAEKI,EAAeF,EAAAA,SAAS,IAAMN,EAAM,SAAWK,EAAO,OAAO,OAAO,EACpEI,EAAYH,EAAAA,SAAS,IAAMN,EAAM,MAAQK,EAAO,OAAO,MAAQ,IAAI,EACnEK,EAAaJ,EAAAA,SAAS,IAAM,CAACD,EAAO,OAAO,MAAOL,EAAM,KAAK,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC,EAExFW,EAAaL,EAAAA,SAAS,IAAMN,EAAM,UAAYA,EAAM,OAAO,EAE3DY,EAAeC,GAAsB,CACpCF,EAAW,OACdT,EAAK,QAASW,CAAK,CAEvB,8BAIEC,EAAAA,YAUSC,EAAAA,MAAAC,EAAAA,OAAA,EAAA,CATN,KAAMf,EAAA,KACN,QAASO,EAAA,MACT,KAAMC,EAAA,MACN,uBAAOC,EAAA,KAAU,EACjB,SAAUC,EAAA,MACV,QAAOC,CAAA,qBAER,IAA4D,CAA7CX,EAAA,uBAAfa,EAAAA,YAA4DC,EAAAA,MAAAE,EAAAA,OAAA,EAAA,OAApC,MAAM,2BAAA,gCAC9BC,EAAAA,WAAQC,EAAA,OAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA"}