@j-solution/components 1.8.0 → 1.9.1

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 (267) hide show
  1. package/README.md +415 -416
  2. package/assets/jwms-portal-frontend-Di6lStzZ.css +1 -0
  3. package/assets/styles/j-components.css +1 -1
  4. package/assets/styles/main.css +29 -29
  5. package/assets/styles/themes.css +422 -422
  6. package/components/atoms/JAvatar.vue.cjs.map +1 -1
  7. package/components/atoms/JAvatar.vue.js.map +1 -1
  8. package/components/atoms/JBadge.vue.cjs.map +1 -1
  9. package/components/atoms/JBadge.vue.js.map +1 -1
  10. package/components/atoms/JButton.vue.cjs +1 -1
  11. package/components/atoms/JButton.vue.js +1 -1
  12. package/components/atoms/JButton.vue2.cjs.map +1 -1
  13. package/components/atoms/JButton.vue2.js.map +1 -1
  14. package/components/atoms/JCombo.vue.cjs.map +1 -1
  15. package/components/atoms/JCombo.vue.js.map +1 -1
  16. package/components/atoms/JDatepicker.vue.cjs.map +1 -1
  17. package/components/atoms/JDatepicker.vue.js.map +1 -1
  18. package/components/atoms/JDivider.vue.cjs.map +1 -1
  19. package/components/atoms/JDivider.vue.js.map +1 -1
  20. package/components/atoms/JEditor.vue.cjs +1 -1
  21. package/components/atoms/JEditor.vue.js +2 -2
  22. package/components/atoms/JEditor.vue2.cjs.map +1 -1
  23. package/components/atoms/JEditor.vue2.js.map +1 -1
  24. package/components/atoms/JGrid.vue.cjs +1 -1
  25. package/components/atoms/JGrid.vue.js +2 -2
  26. package/components/atoms/JGrid.vue2.cjs +1 -1
  27. package/components/atoms/JGrid.vue2.cjs.map +1 -1
  28. package/components/atoms/JGrid.vue2.js +72 -85
  29. package/components/atoms/JGrid.vue2.js.map +1 -1
  30. package/components/atoms/JIcon.vue.cjs.map +1 -1
  31. package/components/atoms/JIcon.vue.js.map +1 -1
  32. package/components/atoms/JImage.vue.cjs.map +1 -1
  33. package/components/atoms/JImage.vue.js.map +1 -1
  34. package/components/atoms/JKbd.vue.cjs.map +1 -1
  35. package/components/atoms/JKbd.vue.js.map +1 -1
  36. package/components/atoms/JLabel.vue.cjs.map +1 -1
  37. package/components/atoms/JLabel.vue.js.map +1 -1
  38. package/components/atoms/JPreview.vue.cjs +1 -1
  39. package/components/atoms/JPreview.vue.js +7 -7
  40. package/components/atoms/JPreview.vue2.cjs.map +1 -1
  41. package/components/atoms/JPreview.vue2.js.map +1 -1
  42. package/components/atoms/JProgress.vue.cjs.map +1 -1
  43. package/components/atoms/JProgress.vue.js.map +1 -1
  44. package/components/atoms/JRadio.vue.cjs.map +1 -1
  45. package/components/atoms/JRadio.vue.js.map +1 -1
  46. package/components/atoms/JSearchCombo.vue.cjs.map +1 -1
  47. package/components/atoms/JSearchCombo.vue.js.map +1 -1
  48. package/components/atoms/JSectionTitle.vue2.cjs +1 -1
  49. package/components/atoms/JSectionTitle.vue2.cjs.map +1 -1
  50. package/components/atoms/JSectionTitle.vue2.js +5 -8
  51. package/components/atoms/JSectionTitle.vue2.js.map +1 -1
  52. package/components/atoms/JSpinner.vue.cjs.map +1 -1
  53. package/components/atoms/JSpinner.vue.js.map +1 -1
  54. package/components/atoms/JToast.vue.cjs.map +1 -1
  55. package/components/atoms/JToast.vue.js.map +1 -1
  56. package/components/atoms/JTooltip.vue.cjs.map +1 -1
  57. package/components/atoms/JTooltip.vue.js.map +1 -1
  58. package/components/molecules/JAlert.vue.cjs +1 -1
  59. package/components/molecules/JAlert.vue.cjs.map +1 -1
  60. package/components/molecules/JAlert.vue.js +2 -5
  61. package/components/molecules/JAlert.vue.js.map +1 -1
  62. package/components/molecules/JBreadcrumb.vue.cjs.map +1 -1
  63. package/components/molecules/JBreadcrumb.vue.js.map +1 -1
  64. package/components/molecules/JEmptyState.vue2.cjs +1 -1
  65. package/components/molecules/JEmptyState.vue2.cjs.map +1 -1
  66. package/components/molecules/JEmptyState.vue2.js +15 -18
  67. package/components/molecules/JEmptyState.vue2.js.map +1 -1
  68. package/components/molecules/JFormField.vue2.cjs +1 -1
  69. package/components/molecules/JFormField.vue2.cjs.map +1 -1
  70. package/components/molecules/JFormField.vue2.js +2 -5
  71. package/components/molecules/JFormField.vue2.js.map +1 -1
  72. package/components/molecules/JTabs.vue.cjs +1 -1
  73. package/components/molecules/JTabs.vue.js +1 -1
  74. package/components/molecules/JTabs.vue2.cjs.map +1 -1
  75. package/components/molecules/JTabs.vue2.js.map +1 -1
  76. package/components/molecules/JTitlebar.vue.cjs +1 -1
  77. package/components/molecules/JTitlebar.vue.cjs.map +1 -1
  78. package/components/molecules/JTitlebar.vue.js +16 -19
  79. package/components/molecules/JTitlebar.vue.js.map +1 -1
  80. package/components/organisms/JDynamicForm.vue2.cjs +1 -1
  81. package/components/organisms/JDynamicForm.vue2.cjs.map +1 -1
  82. package/components/organisms/JDynamicForm.vue2.js +2 -5
  83. package/components/organisms/JDynamicForm.vue2.js.map +1 -1
  84. package/components/organisms/JDynamicTabs.vue.cjs.map +1 -1
  85. package/components/organisms/JDynamicTabs.vue.js.map +1 -1
  86. package/components/organisms/JFilterBar.vue.cjs +1 -1
  87. package/components/organisms/JFilterBar.vue.js +2 -2
  88. package/components/organisms/JFilterBar.vue2.cjs +1 -1
  89. package/components/organisms/JFilterBar.vue2.cjs.map +1 -1
  90. package/components/organisms/JFilterBar.vue2.js +14 -12
  91. package/components/organisms/JFilterBar.vue2.js.map +1 -1
  92. package/components/organisms/JFormModal.vue.cjs +1 -1
  93. package/components/organisms/JFormModal.vue.cjs.map +1 -1
  94. package/components/organisms/JFormModal.vue.js +14 -17
  95. package/components/organisms/JFormModal.vue.js.map +1 -1
  96. package/components/organisms/JModal.vue.cjs +1 -1
  97. package/components/organisms/JModal.vue.cjs.map +1 -1
  98. package/components/organisms/JModal.vue.js +2 -5
  99. package/components/organisms/JModal.vue.js.map +1 -1
  100. package/components/organisms/JPageContainer.vue.cjs.map +1 -1
  101. package/components/organisms/JPageContainer.vue.js.map +1 -1
  102. package/components/organisms/JSearchPanel.vue2.cjs +1 -1
  103. package/components/organisms/JSearchPanel.vue2.cjs.map +1 -1
  104. package/components/organisms/JSearchPanel.vue2.js +20 -23
  105. package/components/organisms/JSearchPanel.vue2.js.map +1 -1
  106. package/components/organisms/JSidebar/JSidebar.vue.cjs +2 -0
  107. package/components/organisms/JSidebar/JSidebar.vue.cjs.map +1 -0
  108. package/components/organisms/JSidebar/JSidebar.vue.js +189 -0
  109. package/components/organisms/JSidebar/JSidebar.vue.js.map +1 -0
  110. package/components/organisms/JSidebar/JSidebar.vue2.cjs +2 -0
  111. package/components/organisms/JSidebar/JSidebar.vue2.cjs.map +1 -0
  112. package/components/organisms/JSidebar/JSidebar.vue2.js +5 -0
  113. package/components/organisms/JSidebar/JSidebar.vue2.js.map +1 -0
  114. package/components/organisms/JSidebar/JSidebarGroup.vue.cjs +2 -0
  115. package/components/organisms/JSidebar/JSidebarGroup.vue.cjs.map +1 -0
  116. package/components/organisms/JSidebar/JSidebarGroup.vue.js +89 -0
  117. package/components/organisms/JSidebar/JSidebarGroup.vue.js.map +1 -0
  118. package/components/organisms/JSidebar/JSidebarGroup.vue2.cjs +2 -0
  119. package/components/organisms/JSidebar/JSidebarGroup.vue2.cjs.map +1 -0
  120. package/components/organisms/JSidebar/JSidebarGroup.vue2.js +5 -0
  121. package/components/organisms/JSidebar/JSidebarGroup.vue2.js.map +1 -0
  122. package/components/organisms/JSidebar/JSidebarItem.vue.cjs +2 -0
  123. package/components/organisms/JSidebar/JSidebarItem.vue.cjs.map +1 -0
  124. package/components/organisms/JSidebar/JSidebarItem.vue.js +79 -0
  125. package/components/organisms/JSidebar/JSidebarItem.vue.js.map +1 -0
  126. package/components/organisms/JSidebar/JSidebarItem.vue2.cjs +2 -0
  127. package/components/organisms/JSidebar/JSidebarItem.vue2.cjs.map +1 -0
  128. package/components/organisms/JSidebar/JSidebarItem.vue2.js +5 -0
  129. package/components/organisms/JSidebar/JSidebarItem.vue2.js.map +1 -0
  130. package/components/organisms/JSidebarAdvanced.vue.cjs +1 -1
  131. package/components/organisms/JSidebarAdvanced.vue.js +7 -7
  132. package/components/organisms/JSidebarAdvanced.vue2.cjs.map +1 -1
  133. package/components/organisms/JSidebarAdvanced.vue2.js.map +1 -1
  134. package/components/organisms/JSidebarSimple.vue.cjs +1 -1
  135. package/components/organisms/JSidebarSimple.vue.js +2 -2
  136. package/components/organisms/JSidebarSimple.vue2.cjs.map +1 -1
  137. package/components/organisms/JSidebarSimple.vue2.js.map +1 -1
  138. package/components/shadcn/AccordionTrigger.vue.cjs.map +1 -1
  139. package/components/shadcn/AccordionTrigger.vue.js.map +1 -1
  140. package/components/shadcn/Card.vue.cjs.map +1 -1
  141. package/components/shadcn/Card.vue.js.map +1 -1
  142. package/components/shadcn/CardContent.vue.cjs.map +1 -1
  143. package/components/shadcn/CardContent.vue.js.map +1 -1
  144. package/components/shadcn/CardDescription.vue.cjs.map +1 -1
  145. package/components/shadcn/CardDescription.vue.js.map +1 -1
  146. package/components/shadcn/CardFooter.vue.cjs.map +1 -1
  147. package/components/shadcn/CardFooter.vue.js.map +1 -1
  148. package/components/shadcn/CardHeader.vue.cjs.map +1 -1
  149. package/components/shadcn/CardHeader.vue.js.map +1 -1
  150. package/components/shadcn/CardTitle.vue.cjs.map +1 -1
  151. package/components/shadcn/CardTitle.vue.js.map +1 -1
  152. package/components/shadcn/Checkbox.vue.cjs.map +1 -1
  153. package/components/shadcn/Checkbox.vue.js.map +1 -1
  154. package/components/shadcn/Combobox.vue.cjs.map +1 -1
  155. package/components/shadcn/Combobox.vue.js.map +1 -1
  156. package/components/shadcn/ComboboxAnchor.vue.cjs.map +1 -1
  157. package/components/shadcn/ComboboxAnchor.vue.js.map +1 -1
  158. package/components/shadcn/ComboboxEmpty.vue.cjs.map +1 -1
  159. package/components/shadcn/ComboboxEmpty.vue.js.map +1 -1
  160. package/components/shadcn/ComboboxGroup.vue.cjs.map +1 -1
  161. package/components/shadcn/ComboboxGroup.vue.js.map +1 -1
  162. package/components/shadcn/ComboboxInput.vue.cjs.map +1 -1
  163. package/components/shadcn/ComboboxInput.vue.js.map +1 -1
  164. package/components/shadcn/ComboboxItem.vue.cjs.map +1 -1
  165. package/components/shadcn/ComboboxItem.vue.js.map +1 -1
  166. package/components/shadcn/ComboboxList.vue.cjs.map +1 -1
  167. package/components/shadcn/ComboboxList.vue.js.map +1 -1
  168. package/components/shadcn/ComboboxTrigger.vue.cjs.map +1 -1
  169. package/components/shadcn/ComboboxTrigger.vue.js.map +1 -1
  170. package/components/shadcn/ContextMenu.vue.cjs.map +1 -1
  171. package/components/shadcn/ContextMenu.vue.js.map +1 -1
  172. package/components/shadcn/ContextMenuContent.vue.cjs.map +1 -1
  173. package/components/shadcn/ContextMenuContent.vue.js.map +1 -1
  174. package/components/shadcn/ContextMenuGroup.vue.cjs.map +1 -1
  175. package/components/shadcn/ContextMenuGroup.vue.js.map +1 -1
  176. package/components/shadcn/ContextMenuItem.vue.cjs.map +1 -1
  177. package/components/shadcn/ContextMenuItem.vue.js.map +1 -1
  178. package/components/shadcn/ContextMenuLabel.vue.cjs.map +1 -1
  179. package/components/shadcn/ContextMenuLabel.vue.js.map +1 -1
  180. package/components/shadcn/ContextMenuSeparator.vue.cjs.map +1 -1
  181. package/components/shadcn/ContextMenuSeparator.vue.js.map +1 -1
  182. package/components/shadcn/ContextMenuSub.vue.cjs.map +1 -1
  183. package/components/shadcn/ContextMenuSub.vue.js.map +1 -1
  184. package/components/shadcn/ContextMenuSubContent.vue.cjs.map +1 -1
  185. package/components/shadcn/ContextMenuSubContent.vue.js.map +1 -1
  186. package/components/shadcn/ContextMenuSubTrigger.vue.cjs.map +1 -1
  187. package/components/shadcn/ContextMenuSubTrigger.vue.js.map +1 -1
  188. package/components/shadcn/ContextMenuTrigger.vue.cjs.map +1 -1
  189. package/components/shadcn/ContextMenuTrigger.vue.js.map +1 -1
  190. package/components/shadcn/Field.vue.cjs.map +1 -1
  191. package/components/shadcn/Field.vue.js.map +1 -1
  192. package/components/shadcn/FieldContent.vue.cjs.map +1 -1
  193. package/components/shadcn/FieldContent.vue.js.map +1 -1
  194. package/components/shadcn/FieldDescription.vue.cjs.map +1 -1
  195. package/components/shadcn/FieldDescription.vue.js.map +1 -1
  196. package/components/shadcn/FieldError.vue.cjs.map +1 -1
  197. package/components/shadcn/FieldError.vue.js.map +1 -1
  198. package/components/shadcn/FieldGroup.vue.cjs.map +1 -1
  199. package/components/shadcn/FieldGroup.vue.js.map +1 -1
  200. package/components/shadcn/FieldLabel.vue.cjs.map +1 -1
  201. package/components/shadcn/FieldLabel.vue.js.map +1 -1
  202. package/components/shadcn/Input.vue.cjs.map +1 -1
  203. package/components/shadcn/Input.vue.js.map +1 -1
  204. package/components/shadcn/Label.vue.cjs.map +1 -1
  205. package/components/shadcn/Label.vue.js.map +1 -1
  206. package/components/shadcn/RadioGroup.vue.cjs.map +1 -1
  207. package/components/shadcn/RadioGroup.vue.js.map +1 -1
  208. package/components/shadcn/RadioGroupItem.vue.cjs.map +1 -1
  209. package/components/shadcn/RadioGroupItem.vue.js.map +1 -1
  210. package/components/shadcn/Select.vue.cjs.map +1 -1
  211. package/components/shadcn/Select.vue.js.map +1 -1
  212. package/components/shadcn/SelectContent.vue.cjs.map +1 -1
  213. package/components/shadcn/SelectContent.vue.js.map +1 -1
  214. package/components/shadcn/SelectGroup.vue.cjs.map +1 -1
  215. package/components/shadcn/SelectGroup.vue.js.map +1 -1
  216. package/components/shadcn/SelectItem.vue.cjs.map +1 -1
  217. package/components/shadcn/SelectItem.vue.js.map +1 -1
  218. package/components/shadcn/SelectLabel.vue.cjs.map +1 -1
  219. package/components/shadcn/SelectLabel.vue.js.map +1 -1
  220. package/components/shadcn/SelectScrollDownButton.vue2.cjs.map +1 -1
  221. package/components/shadcn/SelectScrollDownButton.vue2.js.map +1 -1
  222. package/components/shadcn/SelectScrollUpButton.vue2.cjs.map +1 -1
  223. package/components/shadcn/SelectScrollUpButton.vue2.js.map +1 -1
  224. package/components/shadcn/SelectTrigger.vue.cjs.map +1 -1
  225. package/components/shadcn/SelectTrigger.vue.js.map +1 -1
  226. package/components/shadcn/SelectValue.vue.cjs.map +1 -1
  227. package/components/shadcn/SelectValue.vue.js.map +1 -1
  228. package/components/shadcn/Separator.vue.cjs.map +1 -1
  229. package/components/shadcn/Separator.vue.js.map +1 -1
  230. package/components/shadcn/Switch.vue.cjs.map +1 -1
  231. package/components/shadcn/Switch.vue.js.map +1 -1
  232. package/components/shadcn/Tabs.vue.cjs.map +1 -1
  233. package/components/shadcn/Tabs.vue.js.map +1 -1
  234. package/components/shadcn/TabsContent.vue.cjs.map +1 -1
  235. package/components/shadcn/TabsContent.vue.js.map +1 -1
  236. package/components/shadcn/TabsTrigger.vue.cjs.map +1 -1
  237. package/components/shadcn/TabsTrigger.vue.js.map +1 -1
  238. package/components/shadcn/Textarea.vue.cjs.map +1 -1
  239. package/components/shadcn/Textarea.vue.js.map +1 -1
  240. package/components/shadcn/Toaster.vue.cjs.map +1 -1
  241. package/components/shadcn/Toaster.vue.js.map +1 -1
  242. package/components/shadcn/index.cjs.map +1 -1
  243. package/components/shadcn/index.js.map +1 -1
  244. package/components/shadcn/resizable/ResizableHandle.vue.cjs.map +1 -1
  245. package/components/shadcn/resizable/ResizableHandle.vue.js.map +1 -1
  246. package/components/shadcn/resizable/ResizablePanelGroup.vue.cjs.map +1 -1
  247. package/components/shadcn/resizable/ResizablePanelGroup.vue.js.map +1 -1
  248. package/components/templates/JLayout.vue.cjs.map +1 -1
  249. package/components/templates/JLayout.vue.js.map +1 -1
  250. package/components/templates/JLayoutSimple.vue.cjs +1 -1
  251. package/components/templates/JLayoutSimple.vue.cjs.map +1 -1
  252. package/components/templates/JLayoutSimple.vue.js +36 -30
  253. package/components/templates/JLayoutSimple.vue.js.map +1 -1
  254. package/index.cjs +1 -1
  255. package/index.js +22 -20
  256. package/lib/styleTypePreset.cjs.map +1 -1
  257. package/lib/styleTypePreset.js.map +1 -1
  258. package/lib/theme-utils.cjs.map +1 -1
  259. package/lib/theme-utils.js.map +1 -1
  260. package/package.json +1 -1
  261. package/tailwind.config.js +81 -81
  262. package/types/index.d.ts +119 -107
  263. package/types/sidebar.types.cjs +2 -0
  264. package/types/sidebar.types.cjs.map +1 -0
  265. package/types/sidebar.types.js +5 -0
  266. package/types/sidebar.types.js.map +1 -0
  267. package/assets/jwms-portal-frontend-BtHTA-UF.css +0 -1
@@ -1,29 +1,29 @@
1
- /* tweakcn 테마 정의 */
2
-
3
- /* Default 테마 (기본) - :root에도 적용하여 기본값 제공 */
4
- :root,
5
- .theme-default {
6
- --background: 0 0% 100%;
7
- --foreground: 222.2 84% 4.9%;
8
- --card: 0 0% 100%;
9
- --card-foreground: 222.2 84% 4.9%;
10
- --popover: 0 0% 100%;
11
- --popover-foreground: 222.2 84% 4.9%;
12
- --primary: 222.2 47.4% 11.2%;
13
- --primary-foreground: 210 40% 98%;
14
- --secondary: 210 40% 96.1%;
15
- --secondary-foreground: 222.2 47.4% 11.2%;
16
- --muted: 210 40% 96.1%;
17
- --muted-foreground: 215.4 16.3% 46.9%;
18
- --accent: 210 40% 96.1%;
19
- --accent-foreground: 222.2 47.4% 11.2%;
20
- --destructive: 0 84.2% 60.2%;
21
- --destructive-foreground: 210 40% 98%;
22
- --border: 214.3 31.8% 91.4%;
23
- --input: 214.3 31.8% 91.4%;
24
- --ring: 222.2 84% 4.9%;
25
- }
26
-
1
+ /* tweakcn 테마 정의 */
2
+
3
+ /* Default 테마 (기본) - :root에도 적용하여 기본값 제공 */
4
+ :root,
5
+ .theme-default {
6
+ --background: 0 0% 100%;
7
+ --foreground: 222.2 84% 4.9%;
8
+ --card: 0 0% 100%;
9
+ --card-foreground: 222.2 84% 4.9%;
10
+ --popover: 0 0% 100%;
11
+ --popover-foreground: 222.2 84% 4.9%;
12
+ --primary: 222.2 47.4% 11.2%;
13
+ --primary-foreground: 210 40% 98%;
14
+ --secondary: 210 40% 96.1%;
15
+ --secondary-foreground: 222.2 47.4% 11.2%;
16
+ --muted: 210 40% 96.1%;
17
+ --muted-foreground: 215.4 16.3% 46.9%;
18
+ --accent: 210 40% 96.1%;
19
+ --accent-foreground: 222.2 47.4% 11.2%;
20
+ --destructive: 0 84.2% 60.2%;
21
+ --destructive-foreground: 210 40% 98%;
22
+ --border: 214.3 31.8% 91.4%;
23
+ --input: 214.3 31.8% 91.4%;
24
+ --ring: 222.2 84% 4.9%;
25
+ }
26
+
27
27
  .theme-default.dark {
28
28
  --background: 222 47% 11%;
29
29
  --foreground: 210 40% 98%;
@@ -45,400 +45,400 @@
45
45
  --input: 217 32% 17%;
46
46
  --ring: 217 91% 60%;
47
47
  }
48
-
49
- /* Slate 테마 */
50
- .theme-slate {
51
- --background: 0 0% 100%;
52
- --foreground: 222.2 47.4% 11.2%;
53
- --card: 0 0% 100%;
54
- --card-foreground: 222.2 47.4% 11.2%;
55
- --popover: 0 0% 100%;
56
- --popover-foreground: 222.2 47.4% 11.2%;
57
- --primary: 222.2 47.4% 11.2%;
58
- --primary-foreground: 210 40% 98%;
59
- --secondary: 210 40% 96.1%;
60
- --secondary-foreground: 222.2 47.4% 11.2%;
61
- --muted: 210 40% 96.1%;
62
- --muted-foreground: 215.4 16.3% 46.9%;
63
- --accent: 210 40% 96.1%;
64
- --accent-foreground: 222.2 47.4% 11.2%;
65
- --destructive: 0 84.2% 60.2%;
66
- --destructive-foreground: 210 40% 98%;
67
- --border: 214.3 31.8% 91.4%;
68
- --input: 214.3 31.8% 91.4%;
69
- --ring: 222.2 47.4% 11.2%;
70
- }
71
-
72
- .theme-slate.dark {
73
- --background: 222.2 47.4% 11.2%;
74
- --foreground: 210 40% 98%;
75
- --card: 222.2 47.4% 11.2%;
76
- --card-foreground: 210 40% 98%;
77
- --popover: 222.2 47.4% 11.2%;
78
- --popover-foreground: 210 40% 98%;
79
- --primary: 210 40% 98%;
80
- --primary-foreground: 222.2 47.4% 11.2%;
81
- --secondary: 217.2 32.6% 17.5%;
82
- --secondary-foreground: 210 40% 98%;
83
- --muted: 217.2 32.6% 17.5%;
84
- --muted-foreground: 215 20.2% 65.1%;
85
- --accent: 217.2 32.6% 17.5%;
86
- --accent-foreground: 210 40% 98%;
87
- --destructive: 0 62.8% 30.6%;
88
- --destructive-foreground: 210 40% 98%;
89
- --border: 217.2 32.6% 17.5%;
90
- --input: 217.2 32.6% 17.5%;
91
- --ring: 212.7 26.8% 83.9%;
92
- }
93
-
94
- /* Rose 테마 */
95
- .theme-rose {
96
- --background: 0 0% 100%;
97
- --foreground: 240 10% 3.9%;
98
- --card: 0 0% 100%;
99
- --card-foreground: 240 10% 3.9%;
100
- --popover: 0 0% 100%;
101
- --popover-foreground: 240 10% 3.9%;
102
- --primary: 346.8 77.2% 49.8%;
103
- --primary-foreground: 355.7 100% 97.3%;
104
- --secondary: 240 4.8% 95.9%;
105
- --secondary-foreground: 240 5.9% 10%;
106
- --muted: 240 4.8% 95.9%;
107
- --muted-foreground: 240 3.8% 46.1%;
108
- --accent: 240 4.8% 95.9%;
109
- --accent-foreground: 240 5.9% 10%;
110
- --destructive: 0 84.2% 60.2%;
111
- --destructive-foreground: 0 0% 98%;
112
- --border: 240 5.9% 90%;
113
- --input: 240 5.9% 90%;
114
- --ring: 346.8 77.2% 49.8%;
115
- }
116
-
117
- .theme-rose.dark {
118
- --background: 20 14.3% 4.1%;
119
- --foreground: 0 0% 95%;
120
- --card: 24 9.8% 10%;
121
- --card-foreground: 0 0% 95%;
122
- --popover: 0 0% 9%;
123
- --popover-foreground: 0 0% 95%;
124
- --primary: 346.8 77.2% 49.8%;
125
- --primary-foreground: 355.7 100% 97.3%;
126
- --secondary: 240 3.7% 15.9%;
127
- --secondary-foreground: 0 0% 98%;
128
- --muted: 0 0% 15%;
129
- --muted-foreground: 240 5% 64.9%;
130
- --accent: 12 6.5% 15.1%;
131
- --accent-foreground: 0 0% 98%;
132
- --destructive: 0 62.8% 30.6%;
133
- --destructive-foreground: 0 85.7% 97.3%;
134
- --border: 240 3.7% 15.9%;
135
- --input: 240 3.7% 15.9%;
136
- --ring: 346.8 77.2% 49.8%;
137
- }
138
-
139
- /* Blue 테마 */
140
- .theme-blue {
141
- --background: 0 0% 100%;
142
- --foreground: 222.2 84% 4.9%;
143
- --card: 0 0% 100%;
144
- --card-foreground: 222.2 84% 4.9%;
145
- --popover: 0 0% 100%;
146
- --popover-foreground: 222.2 84% 4.9%;
147
- --primary: 221.2 83.2% 53.3%;
148
- --primary-foreground: 210 40% 98%;
149
- --secondary: 210 40% 96.1%;
150
- --secondary-foreground: 222.2 47.4% 11.2%;
151
- --muted: 210 40% 96.1%;
152
- --muted-foreground: 215.4 16.3% 46.9%;
153
- --accent: 210 40% 96.1%;
154
- --accent-foreground: 222.2 47.4% 11.2%;
155
- --destructive: 0 84.2% 60.2%;
156
- --destructive-foreground: 210 40% 98%;
157
- --border: 214.3 31.8% 91.4%;
158
- --input: 214.3 31.8% 91.4%;
159
- --ring: 221.2 83.2% 53.3%;
160
- }
161
-
162
- .theme-blue.dark {
163
- --background: 222.2 84% 4.9%;
164
- --foreground: 210 40% 98%;
165
- --card: 222.2 84% 4.9%;
166
- --card-foreground: 210 40% 98%;
167
- --popover: 222.2 84% 4.9%;
168
- --popover-foreground: 210 40% 98%;
169
- --primary: 217.2 91.2% 59.8%;
170
- --primary-foreground: 222.2 47.4% 11.2%;
171
- --secondary: 217.2 32.6% 17.5%;
172
- --secondary-foreground: 210 40% 98%;
173
- --muted: 217.2 32.6% 17.5%;
174
- --muted-foreground: 215 20.2% 65.1%;
175
- --accent: 217.2 32.6% 17.5%;
176
- --accent-foreground: 210 40% 98%;
177
- --destructive: 0 62.8% 30.6%;
178
- --destructive-foreground: 210 40% 98%;
179
- --border: 217.2 32.6% 17.5%;
180
- --input: 217.2 32.6% 17.5%;
181
- --ring: 224.3 76.3% 94.9%;
182
- }
183
-
184
- /* Green 테마 */
185
- .theme-green {
186
- --background: 0 0% 100%;
187
- --foreground: 240 10% 3.9%;
188
- --card: 0 0% 100%;
189
- --card-foreground: 240 10% 3.9%;
190
- --popover: 0 0% 100%;
191
- --popover-foreground: 240 10% 3.9%;
192
- --primary: 142.1 76.2% 36.3%;
193
- --primary-foreground: 355.7 100% 97.3%;
194
- --secondary: 240 4.8% 95.9%;
195
- --secondary-foreground: 240 5.9% 10%;
196
- --muted: 240 4.8% 95.9%;
197
- --muted-foreground: 240 3.8% 46.1%;
198
- --accent: 240 4.8% 95.9%;
199
- --accent-foreground: 240 5.9% 10%;
200
- --destructive: 0 84.2% 60.2%;
201
- --destructive-foreground: 0 0% 98%;
202
- --border: 240 5.9% 90%;
203
- --input: 240 5.9% 90%;
204
- --ring: 142.1 76.2% 36.3%;
205
- }
206
-
207
- .theme-green.dark {
208
- --background: 20 14.3% 4.1%;
209
- --foreground: 0 0% 95%;
210
- --card: 24 9.8% 10%;
211
- --card-foreground: 0 0% 95%;
212
- --popover: 0 0% 9%;
213
- --popover-foreground: 0 0% 95%;
214
- --primary: 142.1 70.6% 45.3%;
215
- --primary-foreground: 144.9 80.4% 10%;
216
- --secondary: 240 3.7% 15.9%;
217
- --secondary-foreground: 0 0% 98%;
218
- --muted: 0 0% 15%;
219
- --muted-foreground: 240 5% 64.9%;
220
- --accent: 12 6.5% 15.1%;
221
- --accent-foreground: 0 0% 98%;
222
- --destructive: 0 62.8% 30.6%;
223
- --destructive-foreground: 0 85.7% 97.3%;
224
- --border: 240 3.7% 15.9%;
225
- --input: 240 3.7% 15.9%;
226
- --ring: 142.4 71.8% 29.2%;
227
- }
228
-
229
- /* ============================================
230
- 커스텀 테마 예시 (Custom Theme Examples)
231
- ============================================
232
-
233
- 아래는 커스텀 테마를 추가하는 방법의 예시입니다.
234
- tweakcn에서 생성한 테마를 이 형식으로 변환하여 추가할 수 있습니다.
235
-
236
- 사용 방법:
237
- 1. tweakcn (https://tweakcn.com)에서 원하는 테마 생성
238
- 2. 생성된 CSS 변수를 아래 형식으로 변환
239
- 3. .theme-{name} 클래스로 추가
240
- 4. 라이트/다크 모드 모두 정의
241
- 5. 코드 수정 없이 자동으로 JHeader의 테마 선택기에 표시됨
242
-
243
- 주의사항:
244
- - .theme-default 클래스는 반드시 포함되어야 합니다 (이미 위에 정의됨)
245
- - 테마 이름은 영문, 숫자, 하이픈, 언더스코어만 사용 가능
246
- ============================================ */
247
-
248
- /* 커스텀 테마 예시 1: Purple 테마 */
249
- .theme-purple {
250
- --background: 0 0% 100%;
251
- --foreground: 280 8.9% 10%;
252
- --card: 0 0% 100%;
253
- --card-foreground: 280 8.9% 10%;
254
- --popover: 0 0% 100%;
255
- --popover-foreground: 280 8.9% 10%;
256
- --primary: 280 91% 65%;
257
- --primary-foreground: 0 0% 98%;
258
- --secondary: 280 4.8% 95.9%;
259
- --secondary-foreground: 280 5.9% 10%;
260
- --muted: 280 4.8% 95.9%;
261
- --muted-foreground: 280 3.8% 46.1%;
262
- --accent: 280 4.8% 95.9%;
263
- --accent-foreground: 280 5.9% 10%;
264
- --destructive: 0 84.2% 60.2%;
265
- --destructive-foreground: 0 0% 98%;
266
- --border: 280 5.9% 90%;
267
- --input: 280 5.9% 90%;
268
- --ring: 280 91% 65%;
269
- }
270
-
271
- .theme-purple.dark {
272
- --background: 280 10% 3.9%;
273
- --foreground: 0 0% 95%;
274
- --card: 280 10% 5%;
275
- --card-foreground: 0 0% 95%;
276
- --popover: 280 10% 3.9%;
277
- --popover-foreground: 0 0% 95%;
278
- --primary: 280 91% 65%;
279
- --primary-foreground: 280 10% 3.9%;
280
- --secondary: 280 3.7% 15.9%;
281
- --secondary-foreground: 0 0% 98%;
282
- --muted: 280 3.7% 15.9%;
283
- --muted-foreground: 280 5% 64.9%;
284
- --accent: 280 3.7% 15.9%;
285
- --accent-foreground: 0 0% 98%;
286
- --destructive: 0 62.8% 30.6%;
287
- --destructive-foreground: 0 85.7% 97.3%;
288
- --border: 280 3.7% 15.9%;
289
- --input: 280 3.7% 15.9%;
290
- --ring: 280 91% 65%;
291
- }
292
-
293
- /* 커스텀 테마 예시 2: Orange 테마 */
294
- .theme-orange {
295
- --background: 0 0% 100%;
296
- --foreground: 20 14.3% 4.1%;
297
- --card: 0 0% 100%;
298
- --card-foreground: 20 14.3% 4.1%;
299
- --popover: 0 0% 100%;
300
- --popover-foreground: 20 14.3% 4.1%;
301
- --primary: 24.6 95% 53.1%;
302
- --primary-foreground: 60 9.1% 97.8%;
303
- --secondary: 60 4.8% 95.9%;
304
- --secondary-foreground: 20 5.9% 10%;
305
- --muted: 60 4.8% 95.9%;
306
- --muted-foreground: 25 5.3% 44.7%;
307
- --accent: 60 4.8% 95.9%;
308
- --accent-foreground: 20 5.9% 10%;
309
- --destructive: 0 84.2% 60.2%;
310
- --destructive-foreground: 60 9.1% 97.8%;
311
- --border: 20 5.9% 90%;
312
- --input: 20 5.9% 90%;
313
- --ring: 24.6 95% 53.1%;
314
- }
315
-
316
- .theme-orange.dark {
317
- --background: 20 14.3% 4.1%;
318
- --foreground: 60 9.1% 97.8%;
319
- --card: 20 14.3% 4.1%;
320
- --card-foreground: 60 9.1% 97.8%;
321
- --popover: 20 14.3% 4.1%;
322
- --popover-foreground: 60 9.1% 97.8%;
323
- --primary: 20.5 90.2% 48.2%;
324
- --primary-foreground: 60 9.1% 97.8%;
325
- --secondary: 12 6.5% 15.1%;
326
- --secondary-foreground: 60 9.1% 97.8%;
327
- --muted: 12 6.5% 15.1%;
328
- --muted-foreground: 24 5.4% 63.9%;
329
- --accent: 12 6.5% 15.1%;
330
- --accent-foreground: 60 9.1% 97.8%;
331
- --destructive: 0 62.8% 30.6%;
332
- --destructive-foreground: 60 9.1% 97.8%;
333
- --border: 12 6.5% 15.1%;
334
- --input: 12 6.5% 15.1%;
335
- --ring: 20.5 90.2% 48.2%;
336
- }
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);
48
+
49
+ /* Slate 테마 */
50
+ .theme-slate {
51
+ --background: 0 0% 100%;
52
+ --foreground: 222.2 47.4% 11.2%;
53
+ --card: 0 0% 100%;
54
+ --card-foreground: 222.2 47.4% 11.2%;
55
+ --popover: 0 0% 100%;
56
+ --popover-foreground: 222.2 47.4% 11.2%;
57
+ --primary: 222.2 47.4% 11.2%;
58
+ --primary-foreground: 210 40% 98%;
59
+ --secondary: 210 40% 96.1%;
60
+ --secondary-foreground: 222.2 47.4% 11.2%;
61
+ --muted: 210 40% 96.1%;
62
+ --muted-foreground: 215.4 16.3% 46.9%;
63
+ --accent: 210 40% 96.1%;
64
+ --accent-foreground: 222.2 47.4% 11.2%;
65
+ --destructive: 0 84.2% 60.2%;
66
+ --destructive-foreground: 210 40% 98%;
67
+ --border: 214.3 31.8% 91.4%;
68
+ --input: 214.3 31.8% 91.4%;
69
+ --ring: 222.2 47.4% 11.2%;
70
+ }
71
+
72
+ .theme-slate.dark {
73
+ --background: 222.2 47.4% 11.2%;
74
+ --foreground: 210 40% 98%;
75
+ --card: 222.2 47.4% 11.2%;
76
+ --card-foreground: 210 40% 98%;
77
+ --popover: 222.2 47.4% 11.2%;
78
+ --popover-foreground: 210 40% 98%;
79
+ --primary: 210 40% 98%;
80
+ --primary-foreground: 222.2 47.4% 11.2%;
81
+ --secondary: 217.2 32.6% 17.5%;
82
+ --secondary-foreground: 210 40% 98%;
83
+ --muted: 217.2 32.6% 17.5%;
84
+ --muted-foreground: 215 20.2% 65.1%;
85
+ --accent: 217.2 32.6% 17.5%;
86
+ --accent-foreground: 210 40% 98%;
87
+ --destructive: 0 62.8% 30.6%;
88
+ --destructive-foreground: 210 40% 98%;
89
+ --border: 217.2 32.6% 17.5%;
90
+ --input: 217.2 32.6% 17.5%;
91
+ --ring: 212.7 26.8% 83.9%;
92
+ }
93
+
94
+ /* Rose 테마 */
95
+ .theme-rose {
96
+ --background: 0 0% 100%;
97
+ --foreground: 240 10% 3.9%;
98
+ --card: 0 0% 100%;
99
+ --card-foreground: 240 10% 3.9%;
100
+ --popover: 0 0% 100%;
101
+ --popover-foreground: 240 10% 3.9%;
102
+ --primary: 346.8 77.2% 49.8%;
103
+ --primary-foreground: 355.7 100% 97.3%;
104
+ --secondary: 240 4.8% 95.9%;
105
+ --secondary-foreground: 240 5.9% 10%;
106
+ --muted: 240 4.8% 95.9%;
107
+ --muted-foreground: 240 3.8% 46.1%;
108
+ --accent: 240 4.8% 95.9%;
109
+ --accent-foreground: 240 5.9% 10%;
110
+ --destructive: 0 84.2% 60.2%;
111
+ --destructive-foreground: 0 0% 98%;
112
+ --border: 240 5.9% 90%;
113
+ --input: 240 5.9% 90%;
114
+ --ring: 346.8 77.2% 49.8%;
115
+ }
116
+
117
+ .theme-rose.dark {
118
+ --background: 20 14.3% 4.1%;
119
+ --foreground: 0 0% 95%;
120
+ --card: 24 9.8% 10%;
121
+ --card-foreground: 0 0% 95%;
122
+ --popover: 0 0% 9%;
123
+ --popover-foreground: 0 0% 95%;
124
+ --primary: 346.8 77.2% 49.8%;
125
+ --primary-foreground: 355.7 100% 97.3%;
126
+ --secondary: 240 3.7% 15.9%;
127
+ --secondary-foreground: 0 0% 98%;
128
+ --muted: 0 0% 15%;
129
+ --muted-foreground: 240 5% 64.9%;
130
+ --accent: 12 6.5% 15.1%;
131
+ --accent-foreground: 0 0% 98%;
132
+ --destructive: 0 62.8% 30.6%;
133
+ --destructive-foreground: 0 85.7% 97.3%;
134
+ --border: 240 3.7% 15.9%;
135
+ --input: 240 3.7% 15.9%;
136
+ --ring: 346.8 77.2% 49.8%;
137
+ }
138
+
139
+ /* Blue 테마 */
140
+ .theme-blue {
141
+ --background: 0 0% 100%;
142
+ --foreground: 222.2 84% 4.9%;
143
+ --card: 0 0% 100%;
144
+ --card-foreground: 222.2 84% 4.9%;
145
+ --popover: 0 0% 100%;
146
+ --popover-foreground: 222.2 84% 4.9%;
147
+ --primary: 221.2 83.2% 53.3%;
148
+ --primary-foreground: 210 40% 98%;
149
+ --secondary: 210 40% 96.1%;
150
+ --secondary-foreground: 222.2 47.4% 11.2%;
151
+ --muted: 210 40% 96.1%;
152
+ --muted-foreground: 215.4 16.3% 46.9%;
153
+ --accent: 210 40% 96.1%;
154
+ --accent-foreground: 222.2 47.4% 11.2%;
155
+ --destructive: 0 84.2% 60.2%;
156
+ --destructive-foreground: 210 40% 98%;
157
+ --border: 214.3 31.8% 91.4%;
158
+ --input: 214.3 31.8% 91.4%;
159
+ --ring: 221.2 83.2% 53.3%;
160
+ }
161
+
162
+ .theme-blue.dark {
163
+ --background: 222.2 84% 4.9%;
164
+ --foreground: 210 40% 98%;
165
+ --card: 222.2 84% 4.9%;
166
+ --card-foreground: 210 40% 98%;
167
+ --popover: 222.2 84% 4.9%;
168
+ --popover-foreground: 210 40% 98%;
169
+ --primary: 217.2 91.2% 59.8%;
170
+ --primary-foreground: 222.2 47.4% 11.2%;
171
+ --secondary: 217.2 32.6% 17.5%;
172
+ --secondary-foreground: 210 40% 98%;
173
+ --muted: 217.2 32.6% 17.5%;
174
+ --muted-foreground: 215 20.2% 65.1%;
175
+ --accent: 217.2 32.6% 17.5%;
176
+ --accent-foreground: 210 40% 98%;
177
+ --destructive: 0 62.8% 30.6%;
178
+ --destructive-foreground: 210 40% 98%;
179
+ --border: 217.2 32.6% 17.5%;
180
+ --input: 217.2 32.6% 17.5%;
181
+ --ring: 224.3 76.3% 94.9%;
182
+ }
183
+
184
+ /* Green 테마 */
185
+ .theme-green {
186
+ --background: 0 0% 100%;
187
+ --foreground: 240 10% 3.9%;
188
+ --card: 0 0% 100%;
189
+ --card-foreground: 240 10% 3.9%;
190
+ --popover: 0 0% 100%;
191
+ --popover-foreground: 240 10% 3.9%;
192
+ --primary: 142.1 76.2% 36.3%;
193
+ --primary-foreground: 355.7 100% 97.3%;
194
+ --secondary: 240 4.8% 95.9%;
195
+ --secondary-foreground: 240 5.9% 10%;
196
+ --muted: 240 4.8% 95.9%;
197
+ --muted-foreground: 240 3.8% 46.1%;
198
+ --accent: 240 4.8% 95.9%;
199
+ --accent-foreground: 240 5.9% 10%;
200
+ --destructive: 0 84.2% 60.2%;
201
+ --destructive-foreground: 0 0% 98%;
202
+ --border: 240 5.9% 90%;
203
+ --input: 240 5.9% 90%;
204
+ --ring: 142.1 76.2% 36.3%;
205
+ }
206
+
207
+ .theme-green.dark {
208
+ --background: 20 14.3% 4.1%;
209
+ --foreground: 0 0% 95%;
210
+ --card: 24 9.8% 10%;
211
+ --card-foreground: 0 0% 95%;
212
+ --popover: 0 0% 9%;
213
+ --popover-foreground: 0 0% 95%;
214
+ --primary: 142.1 70.6% 45.3%;
215
+ --primary-foreground: 144.9 80.4% 10%;
216
+ --secondary: 240 3.7% 15.9%;
217
+ --secondary-foreground: 0 0% 98%;
218
+ --muted: 0 0% 15%;
219
+ --muted-foreground: 240 5% 64.9%;
220
+ --accent: 12 6.5% 15.1%;
221
+ --accent-foreground: 0 0% 98%;
222
+ --destructive: 0 62.8% 30.6%;
223
+ --destructive-foreground: 0 85.7% 97.3%;
224
+ --border: 240 3.7% 15.9%;
225
+ --input: 240 3.7% 15.9%;
226
+ --ring: 142.4 71.8% 29.2%;
227
+ }
228
+
229
+ /* ============================================
230
+ 커스텀 테마 예시 (Custom Theme Examples)
231
+ ============================================
232
+
233
+ 아래는 커스텀 테마를 추가하는 방법의 예시입니다.
234
+ tweakcn에서 생성한 테마를 이 형식으로 변환하여 추가할 수 있습니다.
235
+
236
+ 사용 방법:
237
+ 1. tweakcn (https://tweakcn.com)에서 원하는 테마 생성
238
+ 2. 생성된 CSS 변수를 아래 형식으로 변환
239
+ 3. .theme-{name} 클래스로 추가
240
+ 4. 라이트/다크 모드 모두 정의
241
+ 5. 코드 수정 없이 자동으로 JHeader의 테마 선택기에 표시됨
242
+
243
+ 주의사항:
244
+ - .theme-default 클래스는 반드시 포함되어야 합니다 (이미 위에 정의됨)
245
+ - 테마 이름은 영문, 숫자, 하이픈, 언더스코어만 사용 가능
246
+ ============================================ */
247
+
248
+ /* 커스텀 테마 예시 1: Purple 테마 */
249
+ .theme-purple {
250
+ --background: 0 0% 100%;
251
+ --foreground: 280 8.9% 10%;
252
+ --card: 0 0% 100%;
253
+ --card-foreground: 280 8.9% 10%;
254
+ --popover: 0 0% 100%;
255
+ --popover-foreground: 280 8.9% 10%;
256
+ --primary: 280 91% 65%;
257
+ --primary-foreground: 0 0% 98%;
258
+ --secondary: 280 4.8% 95.9%;
259
+ --secondary-foreground: 280 5.9% 10%;
260
+ --muted: 280 4.8% 95.9%;
261
+ --muted-foreground: 280 3.8% 46.1%;
262
+ --accent: 280 4.8% 95.9%;
263
+ --accent-foreground: 280 5.9% 10%;
264
+ --destructive: 0 84.2% 60.2%;
265
+ --destructive-foreground: 0 0% 98%;
266
+ --border: 280 5.9% 90%;
267
+ --input: 280 5.9% 90%;
268
+ --ring: 280 91% 65%;
269
+ }
270
+
271
+ .theme-purple.dark {
272
+ --background: 280 10% 3.9%;
273
+ --foreground: 0 0% 95%;
274
+ --card: 280 10% 5%;
275
+ --card-foreground: 0 0% 95%;
276
+ --popover: 280 10% 3.9%;
277
+ --popover-foreground: 0 0% 95%;
278
+ --primary: 280 91% 65%;
279
+ --primary-foreground: 280 10% 3.9%;
280
+ --secondary: 280 3.7% 15.9%;
281
+ --secondary-foreground: 0 0% 98%;
282
+ --muted: 280 3.7% 15.9%;
283
+ --muted-foreground: 280 5% 64.9%;
284
+ --accent: 280 3.7% 15.9%;
285
+ --accent-foreground: 0 0% 98%;
286
+ --destructive: 0 62.8% 30.6%;
287
+ --destructive-foreground: 0 85.7% 97.3%;
288
+ --border: 280 3.7% 15.9%;
289
+ --input: 280 3.7% 15.9%;
290
+ --ring: 280 91% 65%;
291
+ }
292
+
293
+ /* 커스텀 테마 예시 2: Orange 테마 */
294
+ .theme-orange {
295
+ --background: 0 0% 100%;
296
+ --foreground: 20 14.3% 4.1%;
297
+ --card: 0 0% 100%;
298
+ --card-foreground: 20 14.3% 4.1%;
299
+ --popover: 0 0% 100%;
300
+ --popover-foreground: 20 14.3% 4.1%;
301
+ --primary: 24.6 95% 53.1%;
302
+ --primary-foreground: 60 9.1% 97.8%;
303
+ --secondary: 60 4.8% 95.9%;
304
+ --secondary-foreground: 20 5.9% 10%;
305
+ --muted: 60 4.8% 95.9%;
306
+ --muted-foreground: 25 5.3% 44.7%;
307
+ --accent: 60 4.8% 95.9%;
308
+ --accent-foreground: 20 5.9% 10%;
309
+ --destructive: 0 84.2% 60.2%;
310
+ --destructive-foreground: 60 9.1% 97.8%;
311
+ --border: 20 5.9% 90%;
312
+ --input: 20 5.9% 90%;
313
+ --ring: 24.6 95% 53.1%;
314
+ }
315
+
316
+ .theme-orange.dark {
317
+ --background: 20 14.3% 4.1%;
318
+ --foreground: 60 9.1% 97.8%;
319
+ --card: 20 14.3% 4.1%;
320
+ --card-foreground: 60 9.1% 97.8%;
321
+ --popover: 20 14.3% 4.1%;
322
+ --popover-foreground: 60 9.1% 97.8%;
323
+ --primary: 20.5 90.2% 48.2%;
324
+ --primary-foreground: 60 9.1% 97.8%;
325
+ --secondary: 12 6.5% 15.1%;
326
+ --secondary-foreground: 60 9.1% 97.8%;
327
+ --muted: 12 6.5% 15.1%;
328
+ --muted-foreground: 24 5.4% 63.9%;
329
+ --accent: 12 6.5% 15.1%;
330
+ --accent-foreground: 60 9.1% 97.8%;
331
+ --destructive: 0 62.8% 30.6%;
332
+ --destructive-foreground: 60 9.1% 97.8%;
333
+ --border: 12 6.5% 15.1%;
334
+ --input: 12 6.5% 15.1%;
335
+ --ring: 20.5 90.2% 48.2%;
336
+ }
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
444
  }