@j-solution/components 1.7.0 → 1.9.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 (207) hide show
  1. package/README.md +413 -415
  2. package/assets/jwms-portal-frontend-Ct2Tc7yj.css +1 -0
  3. package/assets/styles/global-utilities.css +34 -0
  4. package/assets/styles/j-components.css +1 -1
  5. package/assets/styles/themes.css +443 -443
  6. package/components/atoms/JButton.vue.cjs +6 -1
  7. package/components/atoms/JButton.vue.cjs.map +1 -1
  8. package/components/atoms/JButton.vue.js +10 -85
  9. package/components/atoms/JButton.vue.js.map +1 -1
  10. package/components/atoms/JButton.vue2.cjs +1 -1
  11. package/components/atoms/JButton.vue2.cjs.map +1 -1
  12. package/components/atoms/JButton.vue2.js +85 -2
  13. package/components/atoms/JButton.vue2.js.map +1 -1
  14. package/components/atoms/JGrid.vue.cjs +1 -1
  15. package/components/atoms/JGrid.vue.js +1 -1
  16. package/components/atoms/JGrid.vue2.cjs +1 -1
  17. package/components/atoms/JGrid.vue2.cjs.map +1 -1
  18. package/components/atoms/JGrid.vue2.js +39 -35
  19. package/components/atoms/JGrid.vue2.js.map +1 -1
  20. package/components/atoms/JLabel.vue.cjs +1 -1
  21. package/components/atoms/JLabel.vue.cjs.map +1 -1
  22. package/components/atoms/JLabel.vue.js +26 -22
  23. package/components/atoms/JLabel.vue.js.map +1 -1
  24. package/components/atoms/JSectionTitle.vue.cjs +7 -0
  25. package/components/atoms/JSectionTitle.vue.cjs.map +1 -0
  26. package/components/atoms/JSectionTitle.vue.js +13 -0
  27. package/components/atoms/JSectionTitle.vue.js.map +1 -0
  28. package/components/atoms/JSectionTitle.vue2.cjs +2 -0
  29. package/components/atoms/JSectionTitle.vue2.cjs.map +1 -0
  30. package/components/atoms/JSectionTitle.vue2.js +67 -0
  31. package/components/atoms/JSectionTitle.vue2.js.map +1 -0
  32. package/components/atoms/JSplitter.vue.cjs +6 -1
  33. package/components/atoms/JSplitter.vue.cjs.map +1 -1
  34. package/components/atoms/JSplitter.vue.js +10 -59
  35. package/components/atoms/JSplitter.vue.js.map +1 -1
  36. package/components/atoms/JSplitter.vue2.cjs +1 -1
  37. package/components/atoms/JSplitter.vue2.cjs.map +1 -1
  38. package/components/atoms/JSplitter.vue2.js +59 -2
  39. package/components/atoms/JSplitter.vue2.js.map +1 -1
  40. package/components/examples/ExampleCrudPage.vue.cjs +1 -1
  41. package/components/examples/ExampleCrudPage.vue.cjs.map +1 -1
  42. package/components/examples/ExampleCrudPage.vue.js +228 -208
  43. package/components/examples/ExampleCrudPage.vue.js.map +1 -1
  44. package/components/examples/ExampleTabMappingPage.vue.cjs +1 -1
  45. package/components/examples/ExampleTabMappingPage.vue.cjs.map +1 -1
  46. package/components/examples/ExampleTabMappingPage.vue.js +341 -368
  47. package/components/examples/ExampleTabMappingPage.vue.js.map +1 -1
  48. package/components/molecules/JAlert.vue.cjs +1 -1
  49. package/components/molecules/JAlert.vue.cjs.map +1 -1
  50. package/components/molecules/JAlert.vue.js +18 -16
  51. package/components/molecules/JAlert.vue.js.map +1 -1
  52. package/components/molecules/JCard.vue.cjs +1 -1
  53. package/components/molecules/JCard.vue.cjs.map +1 -1
  54. package/components/molecules/JCard.vue.js +55 -39
  55. package/components/molecules/JCard.vue.js.map +1 -1
  56. package/components/molecules/JEmptyState.vue.cjs +7 -0
  57. package/components/molecules/JEmptyState.vue.cjs.map +1 -0
  58. package/components/molecules/JEmptyState.vue.js +13 -0
  59. package/components/molecules/JEmptyState.vue.js.map +1 -0
  60. package/components/molecules/JEmptyState.vue2.cjs +2 -0
  61. package/components/molecules/JEmptyState.vue2.cjs.map +1 -0
  62. package/components/molecules/JEmptyState.vue2.js +127 -0
  63. package/components/molecules/JEmptyState.vue2.js.map +1 -0
  64. package/components/molecules/JFormField.vue.cjs +6 -1
  65. package/components/molecules/JFormField.vue.cjs.map +1 -1
  66. package/components/molecules/JFormField.vue.js +10 -264
  67. package/components/molecules/JFormField.vue.js.map +1 -1
  68. package/components/molecules/JFormField.vue2.cjs +2 -0
  69. package/components/molecules/JFormField.vue2.cjs.map +1 -0
  70. package/components/molecules/JFormField.vue2.js +271 -0
  71. package/components/molecules/JFormField.vue2.js.map +1 -0
  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 +1 -1
  75. package/components/molecules/JTabs.vue2.cjs.map +1 -1
  76. package/components/molecules/JTabs.vue2.js +44 -50
  77. package/components/molecules/JTabs.vue2.js.map +1 -1
  78. package/components/molecules/JTitlebar.vue.cjs +1 -1
  79. package/components/molecules/JTitlebar.vue.cjs.map +1 -1
  80. package/components/molecules/JTitlebar.vue.js +23 -20
  81. package/components/molecules/JTitlebar.vue.js.map +1 -1
  82. package/components/organisms/JDynamicForm.vue2.cjs +1 -1
  83. package/components/organisms/JDynamicForm.vue2.cjs.map +1 -1
  84. package/components/organisms/JDynamicForm.vue2.js +35 -32
  85. package/components/organisms/JDynamicForm.vue2.js.map +1 -1
  86. package/components/organisms/JDynamicTabs.vue.cjs +1 -1
  87. package/components/organisms/JDynamicTabs.vue.cjs.map +1 -1
  88. package/components/organisms/JDynamicTabs.vue.js +47 -52
  89. package/components/organisms/JDynamicTabs.vue.js.map +1 -1
  90. package/components/organisms/JFilterBar.vue.cjs +6 -1
  91. package/components/organisms/JFilterBar.vue.cjs.map +1 -1
  92. package/components/organisms/JFilterBar.vue.js +10 -137
  93. package/components/organisms/JFilterBar.vue.js.map +1 -1
  94. package/components/organisms/JFilterBar.vue2.cjs +1 -1
  95. package/components/organisms/JFilterBar.vue2.cjs.map +1 -1
  96. package/components/organisms/JFilterBar.vue2.js +143 -2
  97. package/components/organisms/JFilterBar.vue2.js.map +1 -1
  98. package/components/organisms/JFormModal.vue.cjs +1 -1
  99. package/components/organisms/JFormModal.vue.cjs.map +1 -1
  100. package/components/organisms/JFormModal.vue.js +54 -49
  101. package/components/organisms/JFormModal.vue.js.map +1 -1
  102. package/components/organisms/JHeader.vue.cjs +1 -1
  103. package/components/organisms/JHeader.vue.cjs.map +1 -1
  104. package/components/organisms/JHeader.vue.js +191 -190
  105. package/components/organisms/JHeader.vue.js.map +1 -1
  106. package/components/organisms/JModal.vue.cjs +1 -1
  107. package/components/organisms/JModal.vue.cjs.map +1 -1
  108. package/components/organisms/JModal.vue.js +47 -45
  109. package/components/organisms/JModal.vue.js.map +1 -1
  110. package/components/organisms/JPageContainer.vue.cjs +1 -1
  111. package/components/organisms/JPageContainer.vue.cjs.map +1 -1
  112. package/components/organisms/JPageContainer.vue.js +22 -22
  113. package/components/organisms/JPageContainer.vue.js.map +1 -1
  114. package/components/organisms/JSearchPanel.vue2.cjs +1 -1
  115. package/components/organisms/JSearchPanel.vue2.cjs.map +1 -1
  116. package/components/organisms/JSearchPanel.vue2.js +34 -32
  117. package/components/organisms/JSearchPanel.vue2.js.map +1 -1
  118. package/components/organisms/JShuttle.vue.cjs +7 -0
  119. package/components/organisms/JShuttle.vue.cjs.map +1 -0
  120. package/components/organisms/JShuttle.vue.js +13 -0
  121. package/components/organisms/JShuttle.vue.js.map +1 -0
  122. package/components/organisms/JShuttle.vue2.cjs +2 -0
  123. package/components/organisms/JShuttle.vue2.cjs.map +1 -0
  124. package/components/organisms/JShuttle.vue2.js +216 -0
  125. package/components/organisms/JShuttle.vue2.js.map +1 -0
  126. package/components/organisms/JSidebar/JSidebar.vue.cjs +2 -0
  127. package/components/organisms/JSidebar/JSidebar.vue.cjs.map +1 -0
  128. package/components/organisms/JSidebar/JSidebar.vue.js +189 -0
  129. package/components/organisms/JSidebar/JSidebar.vue.js.map +1 -0
  130. package/components/{molecules/JFormField.vue3.cjs → organisms/JSidebar/JSidebar.vue2.cjs} +2 -2
  131. package/components/organisms/JSidebar/JSidebar.vue2.cjs.map +1 -0
  132. package/components/organisms/JSidebar/JSidebar.vue2.js +5 -0
  133. package/components/organisms/JSidebar/JSidebar.vue2.js.map +1 -0
  134. package/components/organisms/JSidebar/JSidebarGroup.vue.cjs +2 -0
  135. package/components/organisms/JSidebar/JSidebarGroup.vue.cjs.map +1 -0
  136. package/components/organisms/JSidebar/JSidebarGroup.vue.js +89 -0
  137. package/components/organisms/JSidebar/JSidebarGroup.vue.js.map +1 -0
  138. package/components/organisms/JSidebar/JSidebarGroup.vue2.cjs +2 -0
  139. package/components/organisms/JSidebar/JSidebarGroup.vue2.cjs.map +1 -0
  140. package/components/organisms/JSidebar/JSidebarGroup.vue2.js +5 -0
  141. package/components/organisms/JSidebar/JSidebarGroup.vue2.js.map +1 -0
  142. package/components/organisms/JSidebar/JSidebarItem.vue.cjs +2 -0
  143. package/components/organisms/JSidebar/JSidebarItem.vue.cjs.map +1 -0
  144. package/components/organisms/JSidebar/JSidebarItem.vue.js +79 -0
  145. package/components/organisms/JSidebar/JSidebarItem.vue.js.map +1 -0
  146. package/components/organisms/JSidebar/JSidebarItem.vue2.cjs +2 -0
  147. package/components/organisms/JSidebar/JSidebarItem.vue2.cjs.map +1 -0
  148. package/components/organisms/JSidebar/JSidebarItem.vue2.js +5 -0
  149. package/components/organisms/JSidebar/JSidebarItem.vue2.js.map +1 -0
  150. package/components/organisms/JSidebarSimple/JDynamicMenuItem.vue.cjs +1 -1
  151. package/components/organisms/JSidebarSimple/JDynamicMenuItem.vue.cjs.map +1 -1
  152. package/components/organisms/JSidebarSimple/JDynamicMenuItem.vue.js +52 -52
  153. package/components/organisms/JSidebarSimple/JDynamicMenuItem.vue.js.map +1 -1
  154. package/components/shadcn/Card.vue.cjs +1 -1
  155. package/components/shadcn/Card.vue.cjs.map +1 -1
  156. package/components/shadcn/Card.vue.js +1 -1
  157. package/components/shadcn/Card.vue.js.map +1 -1
  158. package/components/shadcn/CardContent.vue.cjs +1 -1
  159. package/components/shadcn/CardContent.vue.cjs.map +1 -1
  160. package/components/shadcn/CardContent.vue.js +4 -4
  161. package/components/shadcn/CardContent.vue.js.map +1 -1
  162. package/components/shadcn/CardHeader.vue.cjs +1 -1
  163. package/components/shadcn/CardHeader.vue.cjs.map +1 -1
  164. package/components/shadcn/CardHeader.vue.js +5 -5
  165. package/components/shadcn/CardHeader.vue.js.map +1 -1
  166. package/components/shadcn/Input.vue.cjs +1 -1
  167. package/components/shadcn/Input.vue.cjs.map +1 -1
  168. package/components/shadcn/Input.vue.js +3 -3
  169. package/components/shadcn/Input.vue.js.map +1 -1
  170. package/components/shadcn/SelectTrigger.vue.cjs +1 -1
  171. package/components/shadcn/SelectTrigger.vue.cjs.map +1 -1
  172. package/components/shadcn/SelectTrigger.vue.js +1 -1
  173. package/components/shadcn/SelectTrigger.vue.js.map +1 -1
  174. package/components/shadcn/TabsContent.vue.cjs +1 -1
  175. package/components/shadcn/TabsContent.vue.cjs.map +1 -1
  176. package/components/shadcn/TabsContent.vue.js +1 -1
  177. package/components/shadcn/TabsContent.vue.js.map +1 -1
  178. package/components/shadcn/TabsList.vue.cjs +1 -1
  179. package/components/shadcn/TabsList.vue.cjs.map +1 -1
  180. package/components/shadcn/TabsList.vue.js +10 -10
  181. package/components/shadcn/TabsList.vue.js.map +1 -1
  182. package/components/shadcn/Textarea.vue.cjs +1 -1
  183. package/components/shadcn/Textarea.vue.cjs.map +1 -1
  184. package/components/shadcn/Textarea.vue.js +1 -1
  185. package/components/shadcn/Textarea.vue.js.map +1 -1
  186. package/components/shadcn/index.cjs +1 -1
  187. package/components/shadcn/index.cjs.map +1 -1
  188. package/components/shadcn/index.js +4 -4
  189. package/components/shadcn/index.js.map +1 -1
  190. package/components/templates/JLayout.vue.cjs.map +1 -1
  191. package/components/templates/JLayout.vue.js.map +1 -1
  192. package/components/templates/JLayoutSimple.vue.cjs +1 -1
  193. package/components/templates/JLayoutSimple.vue.cjs.map +1 -1
  194. package/components/templates/JLayoutSimple.vue.js +36 -30
  195. package/components/templates/JLayoutSimple.vue.js.map +1 -1
  196. package/index.cjs +1 -1
  197. package/index.js +75 -67
  198. package/package.json +1 -1
  199. package/types/index.d.ts +662 -461
  200. package/types/sidebar.types.cjs +2 -0
  201. package/types/sidebar.types.cjs.map +1 -0
  202. package/types/sidebar.types.js +5 -0
  203. package/types/sidebar.types.js.map +1 -0
  204. package/assets/jwms-portal-frontend-CwxPfHfa.css +0 -1
  205. package/components/molecules/JFormField.vue3.cjs.map +0 -1
  206. package/components/molecules/JFormField.vue3.js +0 -6
  207. package/components/molecules/JFormField.vue3.js.map +0 -1
@@ -1,444 +1,444 @@
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
- .theme-default.dark {
28
- --background: 222.2 84% 4.9%;
29
- --foreground: 210 40% 98%;
30
- --card: 222.2 84% 4.9%;
31
- --card-foreground: 210 40% 98%;
32
- --popover: 222.2 84% 4.9%;
33
- --popover-foreground: 210 40% 98%;
34
- --primary: 210 40% 98%;
35
- --primary-foreground: 222.2 47.4% 11.2%;
36
- --secondary: 217.2 32.6% 17.5%;
37
- --secondary-foreground: 210 40% 98%;
38
- --muted: 217.2 32.6% 17.5%;
39
- --muted-foreground: 215 20.2% 65.1%;
40
- --accent: 217.2 32.6% 17.5%;
41
- --accent-foreground: 210 40% 98%;
42
- --destructive: 0 62.8% 30.6%;
43
- --destructive-foreground: 210 40% 98%;
44
- --border: 217.2 32.6% 17.5%;
45
- --input: 217.2 32.6% 17.5%;
46
- --ring: 212.7 26.8% 83.9%;
47
- }
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);
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
+ .theme-default.dark {
28
+ --background: 222 47% 11%;
29
+ --foreground: 210 40% 98%;
30
+ --card: 222 47% 14%;
31
+ --card-foreground: 210 40% 98%;
32
+ --popover: 222 47% 14%;
33
+ --popover-foreground: 210 40% 98%;
34
+ --primary: 217 91% 60%;
35
+ --primary-foreground: 222 47% 11%;
36
+ --secondary: 217 32% 17%;
37
+ --secondary-foreground: 210 40% 98%;
38
+ --muted: 217 32% 17%;
39
+ --muted-foreground: 215 20% 65%;
40
+ --accent: 217 32% 17%;
41
+ --accent-foreground: 210 40% 98%;
42
+ --destructive: 0 63% 31%;
43
+ --destructive-foreground: 210 40% 98%;
44
+ --border: 217 32% 17%;
45
+ --input: 217 32% 17%;
46
+ --ring: 217 91% 60%;
47
+ }
48
+
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
  }