@j-solution/components 1.6.0 → 1.7.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 (197) hide show
  1. package/README.md +8 -7
  2. package/assets/jwms-portal-frontend-CwxPfHfa.css +1 -0
  3. package/assets/styles/j-components.css +1 -1
  4. package/assets/styles/themes.css +107 -0
  5. package/components/atoms/JAvatar.vue.cjs +1 -1
  6. package/components/atoms/JAvatar.vue.cjs.map +1 -1
  7. package/components/atoms/JAvatar.vue.js +10 -7
  8. package/components/atoms/JAvatar.vue.js.map +1 -1
  9. package/components/atoms/JBadge.vue.cjs +1 -1
  10. package/components/atoms/JBadge.vue.cjs.map +1 -1
  11. package/components/atoms/JBadge.vue.js +7 -6
  12. package/components/atoms/JBadge.vue.js.map +1 -1
  13. package/components/atoms/JButton.vue.cjs +1 -1
  14. package/components/atoms/JButton.vue.cjs.map +1 -1
  15. package/components/atoms/JButton.vue.js +5 -5
  16. package/components/atoms/JButton.vue.js.map +1 -1
  17. package/components/atoms/JDatepicker.vue.cjs +1 -1
  18. package/components/atoms/JDatepicker.vue.cjs.map +1 -1
  19. package/components/atoms/JDatepicker.vue.js +10 -10
  20. package/components/atoms/JDatepicker.vue.js.map +1 -1
  21. package/components/atoms/JEditor.vue.cjs +1 -1
  22. package/components/atoms/JEditor.vue.js +1 -1
  23. package/components/atoms/JEditor.vue2.cjs +1 -1
  24. package/components/atoms/JEditor.vue2.cjs.map +1 -1
  25. package/components/atoms/JEditor.vue2.js +31 -17
  26. package/components/atoms/JEditor.vue2.js.map +1 -1
  27. package/components/atoms/JGrid.vue.cjs +1 -1
  28. package/components/atoms/JGrid.vue.js +2 -2
  29. package/components/atoms/JGrid.vue2.cjs +1 -1
  30. package/components/atoms/JGrid.vue2.cjs.map +1 -1
  31. package/components/atoms/JGrid.vue2.js +45 -33
  32. package/components/atoms/JGrid.vue2.js.map +1 -1
  33. package/components/atoms/JIcon.vue.cjs +1 -1
  34. package/components/atoms/JIcon.vue.cjs.map +1 -1
  35. package/components/atoms/JIcon.vue.js +14 -13
  36. package/components/atoms/JIcon.vue.js.map +1 -1
  37. package/components/atoms/JKbd.vue.cjs +1 -1
  38. package/components/atoms/JKbd.vue.cjs.map +1 -1
  39. package/components/atoms/JKbd.vue.js +13 -10
  40. package/components/atoms/JKbd.vue.js.map +1 -1
  41. package/components/atoms/JLabel.vue.cjs +1 -1
  42. package/components/atoms/JLabel.vue.cjs.map +1 -1
  43. package/components/atoms/JLabel.vue.js +4 -4
  44. package/components/atoms/JLabel.vue.js.map +1 -1
  45. package/components/atoms/JLink.vue.cjs +1 -1
  46. package/components/atoms/JLink.vue.cjs.map +1 -1
  47. package/components/atoms/JLink.vue.js +5 -5
  48. package/components/atoms/JLink.vue.js.map +1 -1
  49. package/components/atoms/JPreview.vue.cjs +1 -1
  50. package/components/atoms/JPreview.vue.js +2 -2
  51. package/components/atoms/JPreview.vue2.cjs +1 -1
  52. package/components/atoms/JPreview.vue2.cjs.map +1 -1
  53. package/components/atoms/JPreview.vue2.js +33 -20
  54. package/components/atoms/JPreview.vue2.js.map +1 -1
  55. package/components/atoms/JProgress.vue.cjs +1 -1
  56. package/components/atoms/JProgress.vue.cjs.map +1 -1
  57. package/components/atoms/JProgress.vue.js +15 -9
  58. package/components/atoms/JProgress.vue.js.map +1 -1
  59. package/components/atoms/JRadio.vue.cjs +1 -1
  60. package/components/atoms/JRadio.vue.cjs.map +1 -1
  61. package/components/atoms/JRadio.vue.js +1 -1
  62. package/components/atoms/JRadio.vue.js.map +1 -1
  63. package/components/atoms/JSearchCombo.vue.cjs +1 -1
  64. package/components/atoms/JSearchCombo.vue.cjs.map +1 -1
  65. package/components/atoms/JSearchCombo.vue.js +38 -37
  66. package/components/atoms/JSearchCombo.vue.js.map +1 -1
  67. package/components/atoms/JSpinner.vue.cjs +1 -1
  68. package/components/atoms/JSpinner.vue.cjs.map +1 -1
  69. package/components/atoms/JSpinner.vue.js +8 -7
  70. package/components/atoms/JSpinner.vue.js.map +1 -1
  71. package/components/atoms/JSplitter.vue.cjs +1 -1
  72. package/components/atoms/JSplitter.vue.cjs.map +1 -1
  73. package/components/atoms/JSplitter.vue.js +32 -27
  74. package/components/atoms/JSplitter.vue.js.map +1 -1
  75. package/components/atoms/JTooltip.vue.cjs +1 -1
  76. package/components/atoms/JTooltip.vue.cjs.map +1 -1
  77. package/components/atoms/JTooltip.vue.js +18 -15
  78. package/components/atoms/JTooltip.vue.js.map +1 -1
  79. package/components/examples/ExampleCrudPage.vue.cjs +2 -0
  80. package/components/examples/ExampleCrudPage.vue.cjs.map +1 -0
  81. package/components/examples/ExampleCrudPage.vue.js +358 -0
  82. package/components/examples/ExampleCrudPage.vue.js.map +1 -0
  83. package/components/examples/ExampleCrudPage.vue2.cjs +2 -0
  84. package/components/examples/ExampleCrudPage.vue2.cjs.map +1 -0
  85. package/components/examples/ExampleCrudPage.vue2.js +5 -0
  86. package/components/examples/ExampleCrudPage.vue2.js.map +1 -0
  87. package/components/examples/ExampleTabMappingPage.vue.cjs +2 -0
  88. package/components/examples/ExampleTabMappingPage.vue.cjs.map +1 -0
  89. package/components/examples/ExampleTabMappingPage.vue.js +522 -0
  90. package/components/examples/ExampleTabMappingPage.vue.js.map +1 -0
  91. package/components/examples/ExampleTabMappingPage.vue2.cjs +2 -0
  92. package/components/examples/ExampleTabMappingPage.vue2.cjs.map +1 -0
  93. package/components/examples/ExampleTabMappingPage.vue2.js +5 -0
  94. package/components/examples/ExampleTabMappingPage.vue2.js.map +1 -0
  95. package/components/molecules/JBreadcrumb.vue.cjs +1 -1
  96. package/components/molecules/JBreadcrumb.vue.cjs.map +1 -1
  97. package/components/molecules/JBreadcrumb.vue.js +3 -3
  98. package/components/molecules/JBreadcrumb.vue.js.map +1 -1
  99. package/components/molecules/JFormField.vue.cjs +1 -1
  100. package/components/molecules/JFormField.vue.cjs.map +1 -1
  101. package/components/molecules/JFormField.vue.js +26 -24
  102. package/components/molecules/JFormField.vue.js.map +1 -1
  103. package/components/molecules/JTabs.vue.cjs +1 -1
  104. package/components/molecules/JTabs.vue.js +1 -1
  105. package/components/molecules/JTabs.vue2.cjs +1 -1
  106. package/components/molecules/JTabs.vue2.cjs.map +1 -1
  107. package/components/molecules/JTabs.vue2.js +7 -7
  108. package/components/molecules/JTabs.vue2.js.map +1 -1
  109. package/components/molecules/JTitlebar.vue.cjs +1 -1
  110. package/components/molecules/JTitlebar.vue.cjs.map +1 -1
  111. package/components/molecules/JTitlebar.vue.js +35 -36
  112. package/components/molecules/JTitlebar.vue.js.map +1 -1
  113. package/components/organisms/JFilterBar.vue.cjs +1 -1
  114. package/components/organisms/JFilterBar.vue.cjs.map +1 -1
  115. package/components/organisms/JFilterBar.vue.js +5 -5
  116. package/components/organisms/JFilterBar.vue.js.map +1 -1
  117. package/components/organisms/JHeader.vue.cjs +1 -1
  118. package/components/organisms/JHeader.vue.cjs.map +1 -1
  119. package/components/organisms/JHeader.vue.js +25 -23
  120. package/components/organisms/JHeader.vue.js.map +1 -1
  121. package/components/organisms/JModal.vue.cjs +1 -1
  122. package/components/organisms/JModal.vue.cjs.map +1 -1
  123. package/components/organisms/JModal.vue.js +30 -27
  124. package/components/organisms/JModal.vue.js.map +1 -1
  125. package/components/organisms/JSidebarAdvanced.vue.cjs +1 -1
  126. package/components/organisms/JSidebarAdvanced.vue.js +7 -7
  127. package/components/organisms/JSidebarAdvanced.vue2.cjs +1 -1
  128. package/components/organisms/JSidebarAdvanced.vue2.cjs.map +1 -1
  129. package/components/organisms/JSidebarAdvanced.vue2.js +40 -40
  130. package/components/organisms/JSidebarAdvanced.vue2.js.map +1 -1
  131. package/components/organisms/JSidebarSimple/JDynamicMenuItem.vue.cjs +1 -1
  132. package/components/organisms/JSidebarSimple/JDynamicMenuItem.vue.cjs.map +1 -1
  133. package/components/organisms/JSidebarSimple/JDynamicMenuItem.vue.js +83 -63
  134. package/components/organisms/JSidebarSimple/JDynamicMenuItem.vue.js.map +1 -1
  135. package/components/organisms/JSidebarSimple.vue.cjs +1 -1
  136. package/components/organisms/JSidebarSimple.vue.js +2 -2
  137. package/components/organisms/JSidebarSimple.vue2.cjs +1 -1
  138. package/components/organisms/JSidebarSimple.vue2.cjs.map +1 -1
  139. package/components/organisms/JSidebarSimple.vue2.js +2 -2
  140. package/components/organisms/JSidebarSimple.vue2.js.map +1 -1
  141. package/components/shadcn/AccordionTrigger.vue.cjs +1 -1
  142. package/components/shadcn/AccordionTrigger.vue.cjs.map +1 -1
  143. package/components/shadcn/AccordionTrigger.vue.js +3 -3
  144. package/components/shadcn/AccordionTrigger.vue.js.map +1 -1
  145. package/components/shadcn/CardContent.vue.cjs +1 -1
  146. package/components/shadcn/CardContent.vue.cjs.map +1 -1
  147. package/components/shadcn/CardContent.vue.js +1 -1
  148. package/components/shadcn/CardContent.vue.js.map +1 -1
  149. package/components/shadcn/CardDescription.vue.cjs +1 -1
  150. package/components/shadcn/CardDescription.vue.cjs.map +1 -1
  151. package/components/shadcn/CardDescription.vue.js +1 -1
  152. package/components/shadcn/CardDescription.vue.js.map +1 -1
  153. package/components/shadcn/CardFooter.vue.cjs +1 -1
  154. package/components/shadcn/CardFooter.vue.cjs.map +1 -1
  155. package/components/shadcn/CardFooter.vue.js +7 -7
  156. package/components/shadcn/CardFooter.vue.js.map +1 -1
  157. package/components/shadcn/CardHeader.vue.cjs +1 -1
  158. package/components/shadcn/CardHeader.vue.cjs.map +1 -1
  159. package/components/shadcn/CardHeader.vue.js +8 -8
  160. package/components/shadcn/CardHeader.vue.js.map +1 -1
  161. package/components/shadcn/CardTitle.vue.cjs +1 -1
  162. package/components/shadcn/CardTitle.vue.cjs.map +1 -1
  163. package/components/shadcn/CardTitle.vue.js +5 -5
  164. package/components/shadcn/CardTitle.vue.js.map +1 -1
  165. package/components/shadcn/Input.vue.cjs +1 -1
  166. package/components/shadcn/Input.vue.cjs.map +1 -1
  167. package/components/shadcn/Input.vue.js +1 -1
  168. package/components/shadcn/Input.vue.js.map +1 -1
  169. package/components/shadcn/SelectTrigger.vue.cjs +1 -1
  170. package/components/shadcn/SelectTrigger.vue.cjs.map +1 -1
  171. package/components/shadcn/SelectTrigger.vue.js +2 -2
  172. package/components/shadcn/SelectTrigger.vue.js.map +1 -1
  173. package/components/shadcn/Switch.vue.cjs +1 -1
  174. package/components/shadcn/Switch.vue.cjs.map +1 -1
  175. package/components/shadcn/Switch.vue.js +2 -2
  176. package/components/shadcn/Switch.vue.js.map +1 -1
  177. package/components/shadcn/TabsList.vue.cjs +1 -1
  178. package/components/shadcn/TabsList.vue.cjs.map +1 -1
  179. package/components/shadcn/TabsList.vue.js +1 -1
  180. package/components/shadcn/TabsList.vue.js.map +1 -1
  181. package/components/shadcn/TabsTrigger.vue.cjs +1 -1
  182. package/components/shadcn/TabsTrigger.vue.cjs.map +1 -1
  183. package/components/shadcn/TabsTrigger.vue.js +4 -4
  184. package/components/shadcn/TabsTrigger.vue.js.map +1 -1
  185. package/components/shadcn/Textarea.vue.cjs +1 -1
  186. package/components/shadcn/Textarea.vue.cjs.map +1 -1
  187. package/components/shadcn/Textarea.vue.js +2 -2
  188. package/components/shadcn/Textarea.vue.js.map +1 -1
  189. package/components/shadcn/index.cjs +1 -1
  190. package/components/shadcn/index.cjs.map +1 -1
  191. package/components/shadcn/index.js +8 -7
  192. package/components/shadcn/index.js.map +1 -1
  193. package/index.cjs +1 -1
  194. package/index.js +76 -72
  195. package/package.json +1 -1
  196. package/types/index.d.ts +742 -15
  197. package/assets/jwms-portal-frontend-DntSIcYt.css +0 -1
@@ -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,2 @@
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("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||"sm"),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;
2
2
  //# 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":["../../../../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\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,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,aAAQC,EAAA,OAAA,SAAA,CAAA"}
@@ -15,7 +15,7 @@ const x = /* @__PURE__ */ y({
15
15
  },
16
16
  emits: ["click"],
17
17
  setup(l, { emit: d }) {
18
- const a = l, u = d, i = {
18
+ const a = l, u = d, s = {
19
19
  default: {
20
20
  variant: "default"
21
21
  },
@@ -59,16 +59,16 @@ const x = /* @__PURE__ */ y({
59
59
  }
60
60
  }, n = t(() => {
61
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);
62
+ return s[e] ?? s.default;
63
+ }), f = t(() => a.variant || n.value?.variant), v = t(() => a.size || n.value?.size || "sm"), m = t(() => [n.value?.class, a.class].filter(Boolean).join(" ")), i = t(() => a.disabled || a.loading), p = (e) => {
64
+ i.value || u("click", e);
65
65
  };
66
66
  return (e, B) => (o(), r(c(C), {
67
67
  type: l.type,
68
68
  variant: f.value,
69
69
  size: v.value,
70
70
  class: g(m.value),
71
- disabled: s.value,
71
+ disabled: i.value,
72
72
  onClick: p
73
73
  }, {
74
74
  default: b(() => [
@@ -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":["../../../../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\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,IAAI,GACnEK,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,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),_=require("lucide-vue-next"),v=require("@internationalized/date");require("../shadcn/index.cjs");const y=require("../../lib/utils.cjs"),g=require("../shadcn/Popover.vue.cjs"),V=require("../shadcn/PopoverTrigger.vue.cjs"),h=require("../shadcn/Button.vue.cjs"),C=require("../shadcn/PopoverContent.vue.cjs"),b=require("../shadcn/Calendar.vue.cjs"),S=e.defineComponent({__name:"JDatepicker",props:{modelValue:{},id:{},placeholder:{default:"날짜를 선택하세요"},disabled:{type:Boolean},required:{type:Boolean},name:{},class:{},styletype:{default:"default"}},emits:["update:modelValue","change","focus","blur"],setup(n,{emit:i}){const l=n,o=i,s={default:{buttonClass:"h-10"},sm:{buttonClass:"h-9 text-sm"},lg:{buttonClass:"h-11 text-base"}},a=e.ref(),d=t=>{if(t)try{return v.parseDate(t)}catch{return}},c=t=>t?`${t.year}-${String(t.month).padStart(2,"0")}-${String(t.day).padStart(2,"0")}`:null;e.watch(()=>l.modelValue,t=>{const u=d(t);JSON.stringify(a.value)!==JSON.stringify(u)&&(a.value=u)},{immediate:!0});const f=t=>{a.value=t;const u=c(t);u!==l.modelValue&&(o("update:modelValue",u),o("change",u))},m=e.computed(()=>{if(!a.value)return l.placeholder;const t=new Date(a.value.year,a.value.month-1,a.value.day);return new Intl.DateTimeFormat("ko-KR",{year:"numeric",month:"long",day:"numeric"}).format(t)}),p=e.computed(()=>{const t=l.styletype||"default",u=s[t]??s.default,r=l.class||"";return y.cn("w-full justify-start text-left font-normal",u?.buttonClass??"h-10",!a.value&&"text-muted-foreground",r)});return(t,u)=>(e.openBlock(),e.createBlock(e.unref(g.default),null,{default:e.withCtx(()=>[e.createVNode(e.unref(V.default),{"as-child":""},{default:e.withCtx(()=>[e.createVNode(e.unref(h.default),{id:n.id,name:n.name,disabled:n.disabled,class:e.normalizeClass(p.value),variant:"outline",onFocus:u[0]||(u[0]=r=>o("focus",r)),onBlur:u[1]||(u[1]=r=>o("blur",r))},{default:e.withCtx(()=>[e.createVNode(e.unref(_.Calendar),{class:"mr-2 h-4 w-4"}),e.createTextVNode(" "+e.toDisplayString(m.value),1)]),_:1},8,["id","name","disabled","class"])]),_:1}),e.createVNode(e.unref(C.default),{class:"w-auto p-0"},{default:e.withCtx(()=>[e.createVNode(e.unref(b.default),{modelValue:a.value,"onUpdate:modelValue":[u[2]||(u[2]=r=>a.value=r),f],locale:"ko-KR","initial-focus":""},null,8,["modelValue"])]),_:1})]),_:1}))}});exports.default=S;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),_=require("lucide-vue-next"),v=require("@internationalized/date");require("../shadcn/index.cjs");const y=require("../../lib/utils.cjs"),g=require("../shadcn/Popover.vue.cjs"),x=require("../shadcn/PopoverTrigger.vue.cjs"),V=require("../shadcn/Button.vue.cjs"),h=require("../shadcn/PopoverContent.vue.cjs"),C=require("../shadcn/Calendar.vue.cjs"),b=e.defineComponent({__name:"JDatepicker",props:{modelValue:{},id:{},placeholder:{default:"날짜를 선택하세요"},disabled:{type:Boolean},required:{type:Boolean},name:{},class:{},styletype:{default:"default"}},emits:["update:modelValue","change","focus","blur"],setup(n,{emit:i}){const l=n,o=i,s={default:{buttonClass:"h-8 text-xs px-2.5"},sm:{buttonClass:"h-7 text-[11px] px-2"},lg:{buttonClass:"h-9 text-sm px-3"}},a=e.ref(),d=t=>{if(t)try{return v.parseDate(t)}catch{return}},c=t=>t?`${t.year}-${String(t.month).padStart(2,"0")}-${String(t.day).padStart(2,"0")}`:null;e.watch(()=>l.modelValue,t=>{const u=d(t);JSON.stringify(a.value)!==JSON.stringify(u)&&(a.value=u)},{immediate:!0});const f=t=>{a.value=t;const u=c(t);u!==l.modelValue&&(o("update:modelValue",u),o("change",u))},p=e.computed(()=>{if(!a.value)return l.placeholder;const t=new Date(a.value.year,a.value.month-1,a.value.day);return new Intl.DateTimeFormat("ko-KR",{year:"numeric",month:"long",day:"numeric"}).format(t)}),m=e.computed(()=>{const t=l.styletype||"default",u=s[t]??s.default,r=l.class||"";return y.cn("w-full justify-start text-left font-normal",u?.buttonClass??"h-10",!a.value&&"text-muted-foreground",r)});return(t,u)=>(e.openBlock(),e.createBlock(e.unref(g.default),null,{default:e.withCtx(()=>[e.createVNode(e.unref(x.default),{"as-child":""},{default:e.withCtx(()=>[e.createVNode(e.unref(V.default),{id:n.id,name:n.name,disabled:n.disabled,class:e.normalizeClass(m.value),variant:"outline",onFocus:u[0]||(u[0]=r=>o("focus",r)),onBlur:u[1]||(u[1]=r=>o("blur",r))},{default:e.withCtx(()=>[e.createVNode(e.unref(_.Calendar),{class:"mr-2 h-4 w-4"}),e.createTextVNode(" "+e.toDisplayString(p.value),1)]),_:1},8,["id","name","disabled","class"])]),_:1}),e.createVNode(e.unref(h.default),{class:"w-auto p-0"},{default:e.withCtx(()=>[e.createVNode(e.unref(C.default),{modelValue:a.value,"onUpdate:modelValue":[u[2]||(u[2]=r=>a.value=r),f],locale:"ko-KR","initial-focus":""},null,8,["modelValue"])]),_:1})]),_:1}))}});exports.default=b;
2
2
  //# sourceMappingURL=JDatepicker.vue.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"JDatepicker.vue.cjs","sources":["../../../../src/components/atoms/JDatepicker.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { computed, ref, watch } from 'vue'\r\nimport { Calendar as CalendarIcon } from 'lucide-vue-next'\r\nimport { type DateValue, parseDate } from '@internationalized/date'\r\nimport {\r\n Calendar,\r\n Popover,\r\n PopoverContent,\r\n PopoverTrigger,\r\n Button,\r\n} from '@/components/shadcn'\r\nimport { cn } from '@/lib/utils'\r\n\r\n// Props 정의\r\nconst props = withDefaults(\r\n defineProps<{\r\n /** v-model로 양방향 데이터 바인딩 (ISO 8601 문자열: YYYY-MM-DD) */\r\n modelValue?: string | null\r\n /** Input 요소의 id */\r\n id?: string\r\n /** 입력 전 표시되는 안내문 */\r\n placeholder?: string\r\n /** 비활성화 상태 */\r\n disabled?: boolean\r\n /** 필수 입력 여부 */\r\n required?: boolean\r\n /** form 데이터 전송 시 키 이름 */\r\n name?: string\r\n /** 추가 CSS 클래스 */\r\n class?: string\r\n /** 스타일 테마 지정 */\r\n styletype?: 'default' | 'sm' | 'lg'\r\n }>(),\r\n {\r\n placeholder: '날짜를 선택하세요',\r\n styletype: 'default',\r\n }\r\n)\r\n\r\n// 이벤트 정의\r\nconst emit = defineEmits<{\r\n 'update:modelValue': [value: string | null]\r\n 'change': [value: string | null]\r\n 'focus': [event: FocusEvent]\r\n 'blur': [event: FocusEvent]\r\n}>()\r\n\r\n// 스타일 프리셋\r\nconst STYLE_PRESETS: Record<string, { buttonClass: string }> = {\r\n default: {\r\n buttonClass: 'h-10',\r\n },\r\n sm: {\r\n buttonClass: 'h-9 text-sm',\r\n },\r\n lg: {\r\n buttonClass: 'h-11 text-base',\r\n },\r\n}\r\n\r\n// 내부 상태로 DateValue 관리\r\nconst internalDate = ref<DateValue | undefined>()\r\n\r\n// modelValue를 DateValue로 변환\r\nconst convertToDateValue = (value: string | null | undefined): DateValue | undefined => {\r\n if (!value) return undefined\r\n \r\n try {\r\n // ISO 8601 문자열을 직접 parseDate로 변환\r\n return parseDate(value)\r\n } catch {\r\n return undefined\r\n }\r\n}\r\n\r\n// DateValue를 ISO 문자열로 변환\r\nconst convertToString = (date: DateValue | undefined): string | null => {\r\n if (!date) return null\r\n return `${date.year}-${String(date.month).padStart(2, '0')}-${String(date.day).padStart(2, '0')}`\r\n}\r\n\r\n// modelValue 변경 감지\r\nwatch(\r\n () => props.modelValue,\r\n (newValue) => {\r\n const converted = convertToDateValue(newValue)\r\n if (JSON.stringify(internalDate.value) !== JSON.stringify(converted)) {\r\n internalDate.value = converted\r\n }\r\n },\r\n { immediate: true }\r\n)\r\n\r\n// 내부 날짜 변경 시 emit\r\nconst handleDateChange = (date: DateValue | undefined) => {\r\n internalDate.value = date\r\n const stringValue = convertToString(date)\r\n \r\n if (stringValue !== props.modelValue) {\r\n emit('update:modelValue', stringValue)\r\n emit('change', stringValue)\r\n }\r\n}\r\n\r\n// 포맷팅된 날짜 표시\r\nconst formattedDate = computed(() => {\r\n if (!internalDate.value) return props.placeholder\r\n \r\n const date = new Date(\r\n internalDate.value.year,\r\n internalDate.value.month - 1,\r\n internalDate.value.day\r\n )\r\n \r\n return new Intl.DateTimeFormat('ko-KR', {\r\n year: 'numeric',\r\n month: 'long',\r\n day: 'numeric',\r\n }).format(date)\r\n})\r\n\r\n// 버튼 클래스 계산\r\nconst buttonClass = computed(() => {\r\n const styleKey = props.styletype || 'default'\r\n const preset = STYLE_PRESETS[styleKey] ?? STYLE_PRESETS.default\r\n const userClass = props.class || ''\r\n \r\n return cn(\r\n 'w-full justify-start text-left font-normal',\r\n preset?.buttonClass ?? 'h-10',\r\n !internalDate.value && 'text-muted-foreground',\r\n userClass\r\n )\r\n})\r\n</script>\r\n\r\n<template>\r\n <Popover>\r\n <PopoverTrigger as-child>\r\n <Button\r\n :id=\"id\"\r\n :name=\"name\"\r\n :disabled=\"disabled\"\r\n :class=\"buttonClass\"\r\n variant=\"outline\"\r\n @focus=\"emit('focus', $event)\"\r\n @blur=\"emit('blur', $event)\"\r\n >\r\n <CalendarIcon class=\"mr-2 h-4 w-4\" />\r\n {{ formattedDate }}\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent class=\"w-auto p-0\">\r\n <Calendar\r\n v-model=\"internalDate\"\r\n :locale=\"'ko-KR'\"\r\n initial-focus\r\n @update:model-value=\"handleDateChange\"\r\n />\r\n </PopoverContent>\r\n </Popover>\r\n</template>\r\n\r\n"],"names":["props","__props","emit","__emit","STYLE_PRESETS","internalDate","ref","convertToDateValue","value","parseDate","convertToString","date","watch","newValue","converted","handleDateChange","stringValue","formattedDate","computed","buttonClass","styleKey","preset","userClass","cn","_createBlock","_unref","Popover","_createVNode","PopoverTrigger","Button","_cache","$event","CalendarIcon","_createTextVNode","PopoverContent","Calendar"],"mappings":"yuBAcA,MAAMA,EAAQC,EA0BRC,EAAOC,EAQPC,EAAyD,CAC7D,QAAS,CACP,YAAa,MAAA,EAEf,GAAI,CACF,YAAa,aAAA,EAEf,GAAI,CACF,YAAa,gBAAA,CACf,EAIIC,EAAeC,EAAAA,IAAA,EAGfC,EAAsBC,GAA4D,CACtF,GAAKA,EAEL,GAAI,CAEF,OAAOC,EAAAA,UAAUD,CAAK,CACxB,MAAQ,CACN,MACF,CACF,EAGME,EAAmBC,GAClBA,EACE,GAAGA,EAAK,IAAI,IAAI,OAAOA,EAAK,KAAK,EAAE,SAAS,EAAG,GAAG,CAAC,IAAI,OAAOA,EAAK,GAAG,EAAE,SAAS,EAAG,GAAG,CAAC,GAD7E,KAKpBC,EAAAA,MACE,IAAMZ,EAAM,WACXa,GAAa,CACZ,MAAMC,EAAYP,EAAmBM,CAAQ,EACzC,KAAK,UAAUR,EAAa,KAAK,IAAM,KAAK,UAAUS,CAAS,IACjET,EAAa,MAAQS,EAEzB,EACA,CAAE,UAAW,EAAA,CAAK,EAIpB,MAAMC,EAAoBJ,GAAgC,CACxDN,EAAa,MAAQM,EACrB,MAAMK,EAAcN,EAAgBC,CAAI,EAEpCK,IAAgBhB,EAAM,aACxBE,EAAK,oBAAqBc,CAAW,EACrCd,EAAK,SAAUc,CAAW,EAE9B,EAGMC,EAAgBC,EAAAA,SAAS,IAAM,CACnC,GAAI,CAACb,EAAa,MAAO,OAAOL,EAAM,YAEtC,MAAMW,EAAO,IAAI,KACfN,EAAa,MAAM,KACnBA,EAAa,MAAM,MAAQ,EAC3BA,EAAa,MAAM,GAAA,EAGrB,OAAO,IAAI,KAAK,eAAe,QAAS,CACtC,KAAM,UACN,MAAO,OACP,IAAK,SAAA,CACN,EAAE,OAAOM,CAAI,CAChB,CAAC,EAGKQ,EAAcD,EAAAA,SAAS,IAAM,CACjC,MAAME,EAAWpB,EAAM,WAAa,UAC9BqB,EAASjB,EAAcgB,CAAQ,GAAKhB,EAAc,QAClDkB,EAAYtB,EAAM,OAAS,GAEjC,OAAOuB,EAAAA,GACL,6CACAF,GAAQ,aAAe,OACvB,CAAChB,EAAa,OAAS,wBACvBiB,CAAA,CAEJ,CAAC,8BAICE,EAAAA,YAuBUC,EAAAA,MAAAC,EAAAA,OAAA,EAAA,KAAA,mBAtBR,IAaiB,CAbjBC,EAAAA,YAaiBF,EAAAA,MAAAG,EAAAA,OAAA,EAAA,CAbD,WAAA,IAAQ,mBACtB,IAWS,CAXTD,cAWSF,EAAAA,MAAAI,EAAAA,OAAA,EAAA,CAVN,GAAI5B,EAAA,GACJ,KAAMA,EAAA,KACN,SAAUA,EAAA,SACV,uBAAOkB,EAAA,KAAW,EACnB,QAAQ,UACP,QAAKW,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAE7B,EAAI,QAAU6B,CAAM,GAC3B,OAAID,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAE7B,EAAI,OAAS6B,CAAM,EAAA,qBAE1B,IAAqC,CAArCJ,EAAAA,YAAqCF,EAAAA,MAAAO,EAAAA,QAAA,EAAA,CAAvB,MAAM,eAAc,EAAGC,EAAAA,gBAAA,sBAClChB,EAAA,KAAa,EAAA,CAAA,CAAA,oDAGpBU,EAAAA,YAOiBF,EAAAA,MAAAS,EAAAA,OAAA,EAAA,CAPD,MAAM,cAAY,mBAChC,IAKE,CALFP,cAKEF,EAAAA,MAAAU,EAAAA,OAAA,EAAA,YAJS9B,EAAA,4CAAAA,EAAY,MAAA0B,GAGAhB,CAAA,EAFpB,OAAQ,QACT,gBAAA,EAAA"}
1
+ {"version":3,"file":"JDatepicker.vue.cjs","sources":["../../../../src/components/atoms/JDatepicker.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { computed, ref, watch } from 'vue'\r\nimport { Calendar as CalendarIcon } from 'lucide-vue-next'\r\nimport { type DateValue, parseDate } from '@internationalized/date'\r\nimport {\r\n Calendar,\r\n Popover,\r\n PopoverContent,\r\n PopoverTrigger,\r\n Button,\r\n} from '@/components/shadcn'\r\nimport { cn } from '@/lib/utils'\r\n\r\n// Props 정의\r\nconst props = withDefaults(\r\n defineProps<{\r\n /** v-model로 양방향 데이터 바인딩 (ISO 8601 문자열: YYYY-MM-DD) */\r\n modelValue?: string | null\r\n /** Input 요소의 id */\r\n id?: string\r\n /** 입력 전 표시되는 안내문 */\r\n placeholder?: string\r\n /** 비활성화 상태 */\r\n disabled?: boolean\r\n /** 필수 입력 여부 */\r\n required?: boolean\r\n /** form 데이터 전송 시 키 이름 */\r\n name?: string\r\n /** 추가 CSS 클래스 */\r\n class?: string\r\n /** 스타일 테마 지정 */\r\n styletype?: 'default' | 'sm' | 'lg'\r\n }>(),\r\n {\r\n placeholder: '날짜를 선택하세요',\r\n styletype: 'default',\r\n }\r\n)\r\n\r\n// 이벤트 정의\r\nconst emit = defineEmits<{\r\n 'update:modelValue': [value: string | null]\r\n 'change': [value: string | null]\r\n 'focus': [event: FocusEvent]\r\n 'blur': [event: FocusEvent]\r\n}>()\r\n\r\n// 스타일 프리셋\nconst STYLE_PRESETS: Record<string, { buttonClass: string }> = {\n default: {\n buttonClass: 'h-8 text-xs px-2.5',\n },\n sm: {\n buttonClass: 'h-7 text-[11px] px-2',\n },\n lg: {\n buttonClass: 'h-9 text-sm px-3',\n },\n}\n\r\n// 내부 상태로 DateValue 관리\r\nconst internalDate = ref<DateValue | undefined>()\r\n\r\n// modelValue를 DateValue로 변환\r\nconst convertToDateValue = (value: string | null | undefined): DateValue | undefined => {\r\n if (!value) return undefined\r\n \r\n try {\r\n // ISO 8601 문자열을 직접 parseDate로 변환\r\n return parseDate(value)\r\n } catch {\r\n return undefined\r\n }\r\n}\r\n\r\n// DateValue를 ISO 문자열로 변환\r\nconst convertToString = (date: DateValue | undefined): string | null => {\r\n if (!date) return null\r\n return `${date.year}-${String(date.month).padStart(2, '0')}-${String(date.day).padStart(2, '0')}`\r\n}\r\n\r\n// modelValue 변경 감지\r\nwatch(\r\n () => props.modelValue,\r\n (newValue) => {\r\n const converted = convertToDateValue(newValue)\r\n if (JSON.stringify(internalDate.value) !== JSON.stringify(converted)) {\r\n internalDate.value = converted\r\n }\r\n },\r\n { immediate: true }\r\n)\r\n\r\n// 내부 날짜 변경 시 emit\r\nconst handleDateChange = (date: DateValue | undefined) => {\r\n internalDate.value = date\r\n const stringValue = convertToString(date)\r\n \r\n if (stringValue !== props.modelValue) {\r\n emit('update:modelValue', stringValue)\r\n emit('change', stringValue)\r\n }\r\n}\r\n\r\n// 포맷팅된 날짜 표시\r\nconst formattedDate = computed(() => {\r\n if (!internalDate.value) return props.placeholder\r\n \r\n const date = new Date(\r\n internalDate.value.year,\r\n internalDate.value.month - 1,\r\n internalDate.value.day\r\n )\r\n \r\n return new Intl.DateTimeFormat('ko-KR', {\r\n year: 'numeric',\r\n month: 'long',\r\n day: 'numeric',\r\n }).format(date)\r\n})\r\n\r\n// 버튼 클래스 계산\r\nconst buttonClass = computed(() => {\r\n const styleKey = props.styletype || 'default'\r\n const preset = STYLE_PRESETS[styleKey] ?? STYLE_PRESETS.default\r\n const userClass = props.class || ''\r\n \r\n return cn(\r\n 'w-full justify-start text-left font-normal',\r\n preset?.buttonClass ?? 'h-10',\r\n !internalDate.value && 'text-muted-foreground',\r\n userClass\r\n )\r\n})\r\n</script>\r\n\r\n<template>\r\n <Popover>\r\n <PopoverTrigger as-child>\r\n <Button\r\n :id=\"id\"\r\n :name=\"name\"\r\n :disabled=\"disabled\"\r\n :class=\"buttonClass\"\r\n variant=\"outline\"\r\n @focus=\"emit('focus', $event)\"\r\n @blur=\"emit('blur', $event)\"\r\n >\r\n <CalendarIcon class=\"mr-2 h-4 w-4\" />\r\n {{ formattedDate }}\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent class=\"w-auto p-0\">\r\n <Calendar\r\n v-model=\"internalDate\"\r\n :locale=\"'ko-KR'\"\r\n initial-focus\r\n @update:model-value=\"handleDateChange\"\r\n />\r\n </PopoverContent>\r\n </Popover>\r\n</template>\r\n\r\n"],"names":["props","__props","emit","__emit","STYLE_PRESETS","internalDate","ref","convertToDateValue","value","parseDate","convertToString","date","watch","newValue","converted","handleDateChange","stringValue","formattedDate","computed","buttonClass","styleKey","preset","userClass","cn","_createBlock","_unref","Popover","_createVNode","PopoverTrigger","Button","_cache","$event","CalendarIcon","_createTextVNode","PopoverContent","Calendar"],"mappings":"yuBAcA,MAAMA,EAAQC,EA0BRC,EAAOC,EAQPC,EAAyD,CAC7D,QAAS,CACP,YAAa,oBAAA,EAEf,GAAI,CACF,YAAa,sBAAA,EAEf,GAAI,CACF,YAAa,kBAAA,CACf,EAIIC,EAAeC,EAAAA,IAAA,EAGfC,EAAsBC,GAA4D,CACtF,GAAKA,EAEL,GAAI,CAEF,OAAOC,EAAAA,UAAUD,CAAK,CACxB,MAAQ,CACN,MACF,CACF,EAGME,EAAmBC,GAClBA,EACE,GAAGA,EAAK,IAAI,IAAI,OAAOA,EAAK,KAAK,EAAE,SAAS,EAAG,GAAG,CAAC,IAAI,OAAOA,EAAK,GAAG,EAAE,SAAS,EAAG,GAAG,CAAC,GAD7E,KAKpBC,EAAAA,MACE,IAAMZ,EAAM,WACXa,GAAa,CACZ,MAAMC,EAAYP,EAAmBM,CAAQ,EACzC,KAAK,UAAUR,EAAa,KAAK,IAAM,KAAK,UAAUS,CAAS,IACjET,EAAa,MAAQS,EAEzB,EACA,CAAE,UAAW,EAAA,CAAK,EAIpB,MAAMC,EAAoBJ,GAAgC,CACxDN,EAAa,MAAQM,EACrB,MAAMK,EAAcN,EAAgBC,CAAI,EAEpCK,IAAgBhB,EAAM,aACxBE,EAAK,oBAAqBc,CAAW,EACrCd,EAAK,SAAUc,CAAW,EAE9B,EAGMC,EAAgBC,EAAAA,SAAS,IAAM,CACnC,GAAI,CAACb,EAAa,MAAO,OAAOL,EAAM,YAEtC,MAAMW,EAAO,IAAI,KACfN,EAAa,MAAM,KACnBA,EAAa,MAAM,MAAQ,EAC3BA,EAAa,MAAM,GAAA,EAGrB,OAAO,IAAI,KAAK,eAAe,QAAS,CACtC,KAAM,UACN,MAAO,OACP,IAAK,SAAA,CACN,EAAE,OAAOM,CAAI,CAChB,CAAC,EAGKQ,EAAcD,EAAAA,SAAS,IAAM,CACjC,MAAME,EAAWpB,EAAM,WAAa,UAC9BqB,EAASjB,EAAcgB,CAAQ,GAAKhB,EAAc,QAClDkB,EAAYtB,EAAM,OAAS,GAEjC,OAAOuB,EAAAA,GACL,6CACAF,GAAQ,aAAe,OACvB,CAAChB,EAAa,OAAS,wBACvBiB,CAAA,CAEJ,CAAC,8BAICE,EAAAA,YAuBUC,EAAAA,MAAAC,EAAAA,OAAA,EAAA,KAAA,mBAtBR,IAaiB,CAbjBC,EAAAA,YAaiBF,EAAAA,MAAAG,EAAAA,OAAA,EAAA,CAbD,WAAA,IAAQ,mBACtB,IAWS,CAXTD,cAWSF,EAAAA,MAAAI,EAAAA,OAAA,EAAA,CAVN,GAAI5B,EAAA,GACJ,KAAMA,EAAA,KACN,SAAUA,EAAA,SACV,uBAAOkB,EAAA,KAAW,EACnB,QAAQ,UACP,QAAKW,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAE7B,EAAI,QAAU6B,CAAM,GAC3B,OAAID,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAE7B,EAAI,OAAS6B,CAAM,EAAA,qBAE1B,IAAqC,CAArCJ,EAAAA,YAAqCF,EAAAA,MAAAO,EAAAA,QAAA,EAAA,CAAvB,MAAM,eAAc,EAAGC,EAAAA,gBAAA,sBAClChB,EAAA,KAAa,EAAA,CAAA,CAAA,oDAGpBU,EAAAA,YAOiBF,EAAAA,MAAAS,EAAAA,OAAA,EAAA,CAPD,MAAM,cAAY,mBAChC,IAKE,CALFP,cAKEF,EAAAA,MAAAU,EAAAA,OAAA,EAAA,YAJS9B,EAAA,4CAAAA,EAAY,MAAA0B,GAGAhB,CAAA,EAFpB,OAAQ,QACT,gBAAA,EAAA"}
@@ -1,4 +1,4 @@
1
- import { defineComponent as h, ref as b, watch as V, computed as d, createBlock as C, openBlock as S, unref as o, withCtx as i, createVNode as r, normalizeClass as D, createTextVNode as _, toDisplayString as x } from "vue";
1
+ import { defineComponent as g, ref as h, watch as V, computed as d, createBlock as b, openBlock as C, unref as o, withCtx as i, createVNode as r, normalizeClass as S, createTextVNode as D, toDisplayString as _ } from "vue";
2
2
  import { Calendar as $ } from "lucide-vue-next";
3
3
  import { parseDate as w } from "@internationalized/date";
4
4
  import "../shadcn/index.js";
@@ -8,7 +8,7 @@ import B from "../shadcn/PopoverTrigger.vue.js";
8
8
  import N from "../shadcn/Button.vue.js";
9
9
  import E from "../shadcn/PopoverContent.vue.js";
10
10
  import J from "../shadcn/Calendar.vue.js";
11
- const U = /* @__PURE__ */ h({
11
+ const U = /* @__PURE__ */ g({
12
12
  __name: "JDatepicker",
13
13
  props: {
14
14
  modelValue: {},
@@ -24,15 +24,15 @@ const U = /* @__PURE__ */ h({
24
24
  setup(s, { emit: f }) {
25
25
  const n = s, u = f, m = {
26
26
  default: {
27
- buttonClass: "h-10"
27
+ buttonClass: "h-8 text-xs px-2.5"
28
28
  },
29
29
  sm: {
30
- buttonClass: "h-9 text-sm"
30
+ buttonClass: "h-7 text-[11px] px-2"
31
31
  },
32
32
  lg: {
33
- buttonClass: "h-11 text-base"
33
+ buttonClass: "h-9 text-sm px-3"
34
34
  }
35
- }, a = b(), c = (e) => {
35
+ }, a = h(), c = (e) => {
36
36
  if (e)
37
37
  try {
38
38
  return w(e);
@@ -64,7 +64,7 @@ const U = /* @__PURE__ */ h({
64
64
  month: "long",
65
65
  day: "numeric"
66
66
  }).format(e);
67
- }), g = d(() => {
67
+ }), x = d(() => {
68
68
  const e = n.styletype || "default", t = m[e] ?? m.default, l = n.class || "";
69
69
  return T(
70
70
  "w-full justify-start text-left font-normal",
@@ -73,7 +73,7 @@ const U = /* @__PURE__ */ h({
73
73
  l
74
74
  );
75
75
  });
76
- return (e, t) => (S(), C(o(k), null, {
76
+ return (e, t) => (C(), b(o(k), null, {
77
77
  default: i(() => [
78
78
  r(o(B), { "as-child": "" }, {
79
79
  default: i(() => [
@@ -81,14 +81,14 @@ const U = /* @__PURE__ */ h({
81
81
  id: s.id,
82
82
  name: s.name,
83
83
  disabled: s.disabled,
84
- class: D(g.value),
84
+ class: S(x.value),
85
85
  variant: "outline",
86
86
  onFocus: t[0] || (t[0] = (l) => u("focus", l)),
87
87
  onBlur: t[1] || (t[1] = (l) => u("blur", l))
88
88
  }, {
89
89
  default: i(() => [
90
90
  r(o($), { class: "mr-2 h-4 w-4" }),
91
- _(" " + x(v.value), 1)
91
+ D(" " + _(v.value), 1)
92
92
  ]),
93
93
  _: 1
94
94
  }, 8, ["id", "name", "disabled", "class"])