sh-ui-cli 0.48.0 → 0.50.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 (93) hide show
  1. package/data/changelog/versions.json +27 -0
  2. package/data/registry/react/components/accordion/index.vanilla-extract.tsx +97 -0
  3. package/data/registry/react/components/accordion/styles.css.ts +131 -0
  4. package/data/registry/react/components/avatar/index.vanilla-extract.tsx +73 -0
  5. package/data/registry/react/components/avatar/styles.css.ts +68 -0
  6. package/data/registry/react/components/badge/index.vanilla-extract.tsx +40 -0
  7. package/data/registry/react/components/badge/styles.css.ts +71 -0
  8. package/data/registry/react/components/breadcrumb/index.vanilla-extract.tsx +152 -0
  9. package/data/registry/react/components/breadcrumb/styles.css.ts +95 -0
  10. package/data/registry/react/components/button/index.vanilla-extract.tsx +45 -0
  11. package/data/registry/react/components/button/styles.css.ts +120 -0
  12. package/data/registry/react/components/calendar/index.vanilla-extract.tsx +806 -0
  13. package/data/registry/react/components/calendar/styles.css.ts +250 -0
  14. package/data/registry/react/components/card/index.vanilla-extract.tsx +63 -0
  15. package/data/registry/react/components/card/styles.css.ts +88 -0
  16. package/data/registry/react/components/carousel/index.vanilla-extract.tsx +430 -0
  17. package/data/registry/react/components/carousel/styles.css.ts +169 -0
  18. package/data/registry/react/components/checkbox/index.vanilla-extract.tsx +96 -0
  19. package/data/registry/react/components/checkbox/styles.css.ts +74 -0
  20. package/data/registry/react/components/code-editor/index.vanilla-extract.tsx +230 -0
  21. package/data/registry/react/components/code-editor/styles.css.ts +97 -0
  22. package/data/registry/react/components/code-panel/index.vanilla-extract.tsx +191 -0
  23. package/data/registry/react/components/code-panel/styles.css.ts +151 -0
  24. package/data/registry/react/components/color-picker/index.vanilla-extract.tsx +467 -0
  25. package/data/registry/react/components/color-picker/styles.css.ts +169 -0
  26. package/data/registry/react/components/combobox/index.vanilla-extract.tsx +165 -0
  27. package/data/registry/react/components/combobox/styles.css.ts +174 -0
  28. package/data/registry/react/components/context-menu/index.vanilla-extract.tsx +251 -0
  29. package/data/registry/react/components/context-menu/styles.css.ts +167 -0
  30. package/data/registry/react/components/date-picker/index.vanilla-extract.tsx +520 -0
  31. package/data/registry/react/components/date-picker/styles.css.ts +111 -0
  32. package/data/registry/react/components/dialog/index.vanilla-extract.tsx +95 -0
  33. package/data/registry/react/components/dialog/styles.css.ts +140 -0
  34. package/data/registry/react/components/dropdown-menu/index.vanilla-extract.tsx +255 -0
  35. package/data/registry/react/components/dropdown-menu/styles.css.ts +175 -0
  36. package/data/registry/react/components/file-upload/index.vanilla-extract.tsx +487 -0
  37. package/data/registry/react/components/file-upload/styles.css.ts +193 -0
  38. package/data/registry/react/components/form/index.vanilla-extract.tsx +61 -0
  39. package/data/registry/react/components/form/styles.css.ts +56 -0
  40. package/data/registry/react/components/header/index.vanilla-extract.tsx +805 -0
  41. package/data/registry/react/components/header/styles.css.ts +413 -0
  42. package/data/registry/react/components/input/index.vanilla-extract.tsx +425 -0
  43. package/data/registry/react/components/input/styles.css.ts +202 -0
  44. package/data/registry/react/components/label/index.vanilla-extract.tsx +52 -0
  45. package/data/registry/react/components/label/styles.css.ts +141 -0
  46. package/data/registry/react/components/markdown-editor/index.vanilla-extract.tsx +119 -0
  47. package/data/registry/react/components/markdown-editor/styles.css.ts +231 -0
  48. package/data/registry/react/components/menubar/index.vanilla-extract.tsx +32 -0
  49. package/data/registry/react/components/menubar/styles.css.ts +53 -0
  50. package/data/registry/react/components/numeric-input/index.vanilla-extract.tsx +148 -0
  51. package/data/registry/react/components/numeric-input/styles.css.ts +65 -0
  52. package/data/registry/react/components/page-toc/index.vanilla-extract.tsx +174 -0
  53. package/data/registry/react/components/page-toc/styles.css.ts +97 -0
  54. package/data/registry/react/components/pagination/index.vanilla-extract.tsx +269 -0
  55. package/data/registry/react/components/pagination/styles.css.ts +113 -0
  56. package/data/registry/react/components/popover/index.vanilla-extract.tsx +113 -0
  57. package/data/registry/react/components/popover/styles.css.ts +78 -0
  58. package/data/registry/react/components/progress/index.vanilla-extract.tsx +54 -0
  59. package/data/registry/react/components/progress/styles.css.ts +53 -0
  60. package/data/registry/react/components/radio/index.vanilla-extract.tsx +65 -0
  61. package/data/registry/react/components/radio/styles.css.ts +79 -0
  62. package/data/registry/react/components/rich-text-editor/index.vanilla-extract.tsx +348 -0
  63. package/data/registry/react/components/rich-text-editor/styles.css.ts +243 -0
  64. package/data/registry/react/components/select/index.vanilla-extract.tsx +234 -0
  65. package/data/registry/react/components/select/styles.css.ts +225 -0
  66. package/data/registry/react/components/separator/index.vanilla-extract.tsx +46 -0
  67. package/data/registry/react/components/separator/styles.css.ts +24 -0
  68. package/data/registry/react/components/sidebar/index.vanilla-extract.tsx +1067 -0
  69. package/data/registry/react/components/sidebar/styles.css.ts +578 -0
  70. package/data/registry/react/components/skeleton/index.vanilla-extract.tsx +22 -0
  71. package/data/registry/react/components/skeleton/styles.css.ts +30 -0
  72. package/data/registry/react/components/slider/index.vanilla-extract.tsx +298 -0
  73. package/data/registry/react/components/slider/styles.css.ts +75 -0
  74. package/data/registry/react/components/spinner/index.vanilla-extract.tsx +38 -0
  75. package/data/registry/react/components/spinner/styles.css.ts +60 -0
  76. package/data/registry/react/components/switch/index.vanilla-extract.tsx +39 -0
  77. package/data/registry/react/components/switch/styles.css.ts +87 -0
  78. package/data/registry/react/components/tabs/index.vanilla-extract.tsx +91 -0
  79. package/data/registry/react/components/tabs/styles.css.ts +145 -0
  80. package/data/registry/react/components/textarea/index.vanilla-extract.tsx +23 -0
  81. package/data/registry/react/components/textarea/styles.css.ts +55 -0
  82. package/data/registry/react/components/toast/index.vanilla-extract.tsx +258 -0
  83. package/data/registry/react/components/toast/styles.css.ts +307 -0
  84. package/data/registry/react/components/toggle/index.vanilla-extract.tsx +131 -0
  85. package/data/registry/react/components/toggle/styles.css.ts +109 -0
  86. package/data/registry/react/components/tooltip/index.vanilla-extract.tsx +83 -0
  87. package/data/registry/react/components/tooltip/styles.css.ts +59 -0
  88. package/data/registry/react/peer-versions.json +1 -0
  89. package/data/registry/react/registry.json +922 -42
  90. package/data/tokens/build.mjs +3 -0
  91. package/package.json +1 -1
  92. package/src/api.d.ts +4 -3
  93. package/src/constants.js +4 -3
@@ -0,0 +1,250 @@
1
+ import { style } from "@vanilla-extract/css";
2
+
3
+ export const calendar = style({
4
+ display: "inline-flex",
5
+ gap: "var(--space-4)",
6
+ userSelect: "none",
7
+ });
8
+
9
+ export const calendarMulti = style({
10
+ flexWrap: "wrap",
11
+ });
12
+
13
+ export const calendar__month = style({
14
+ width: "17.5rem",
15
+ });
16
+
17
+ export const calendar__header = style({
18
+ display: "flex",
19
+ alignItems: "center",
20
+ justifyContent: "space-between",
21
+ gap: "var(--space-1)",
22
+ marginBottom: "var(--space-2)",
23
+ });
24
+
25
+ export const calendar__title = style({
26
+ display: "inline-flex",
27
+ alignItems: "center",
28
+ gap: "var(--space-1)",
29
+ flex: "1 1 auto",
30
+ justifyContent: "center",
31
+ });
32
+
33
+ export const calendar__nav = style({
34
+ display: "inline-flex",
35
+ alignItems: "center",
36
+ justifyContent: "center",
37
+ width: "1.75rem",
38
+ height: "1.75rem",
39
+ padding: 0,
40
+ border: "none",
41
+ borderRadius: "calc(var(--radius) - 2px)",
42
+ background: "transparent",
43
+ color: "var(--foreground-muted)",
44
+ cursor: "pointer",
45
+ flexShrink: 0,
46
+ transition: "background-color var(--duration-fast), color var(--duration-fast)",
47
+ selectors: {
48
+ "&:hover:not(:disabled)": {
49
+ background: "var(--background-muted)",
50
+ color: "var(--foreground)",
51
+ },
52
+ "&:focus-visible": {
53
+ outline: "var(--border-width-strong) solid var(--foreground)",
54
+ outlineOffset: "2px",
55
+ },
56
+ },
57
+ });
58
+
59
+ export const calendarNavPlaceholder = style({
60
+ visibility: "hidden",
61
+ pointerEvents: "none",
62
+ });
63
+
64
+ export const calendarSelectTrigger = style({
65
+ selectors: {
66
+ "&.select__trigger": {
67
+ minWidth: 0,
68
+ height: "1.75rem",
69
+ gap: "var(--space-1)",
70
+ padding: "0 var(--space-2)",
71
+ background: "transparent",
72
+ borderColor: "transparent",
73
+ fontWeight: "var(--weight-semibold)",
74
+ fontSize: "var(--text-sm)",
75
+ color: "var(--foreground)",
76
+ },
77
+ "&.select__trigger:hover:not(:disabled)": {
78
+ background: "var(--background-muted)",
79
+ borderColor: "transparent",
80
+ },
81
+ "&.select__trigger[data-popup-open]": {
82
+ background: "var(--background-muted)",
83
+ borderColor: "transparent",
84
+ },
85
+ },
86
+ });
87
+
88
+ export const select__positioner = style({
89
+ selectors: {
90
+ [`&:has(${calendarSelectPopup})`]: {
91
+ zIndex: "var(--z-popover)",
92
+ },
93
+ },
94
+ });
95
+
96
+ export const calendar__weekdays = style({
97
+ display: "grid",
98
+ gridTemplateColumns: "repeat(7, 1fr)",
99
+ marginBottom: "var(--space-1)",
100
+ });
101
+
102
+ export const calendar__weekday = style({
103
+ display: "flex",
104
+ alignItems: "center",
105
+ justifyContent: "center",
106
+ height: "2rem",
107
+ fontSize: "var(--text-xs)",
108
+ fontWeight: "var(--weight-medium)",
109
+ color: "var(--foreground-muted)",
110
+ });
111
+
112
+ export const calendar__grid = style({
113
+ display: "grid",
114
+ gridTemplateColumns: "repeat(7, 1fr)",
115
+ outline: "none",
116
+ selectors: {
117
+ "&:focus-visible": {
118
+ outline: "var(--border-width-strong) solid var(--foreground)",
119
+ outlineOffset: "2px",
120
+ borderRadius: "calc(var(--radius) - 2px)",
121
+ },
122
+ },
123
+ });
124
+
125
+ export const calendar__cell = style({
126
+ display: "flex",
127
+ alignItems: "center",
128
+ justifyContent: "center",
129
+ width: "100%",
130
+ height: "2.375rem",
131
+ minWidth: 0,
132
+ });
133
+
134
+ export const calendarCellInRange = style({
135
+ background: "color-mix(in srgb, var(--primary) 12%, transparent)",
136
+ });
137
+
138
+ export const calendarCellRangeStart = style({
139
+ background: "color-mix(in srgb, var(--primary) 12%, transparent)",
140
+ selectors: {
141
+ [`&:not(${calendarCellRangeEnd})`]: {
142
+ borderRadius: "calc(var(--radius) - 2px) 0 0 calc(var(--radius) - 2px)",
143
+ },
144
+ [`&${calendarCellRangeEnd}`]: {
145
+ borderRadius: "calc(var(--radius) - 2px)",
146
+ },
147
+ },
148
+ });
149
+
150
+ export const calendarCellRangeEnd = style({
151
+ background: "color-mix(in srgb, var(--primary) 12%, transparent)",
152
+ selectors: {
153
+ [`&:not(${calendarCellRangeStart})`]: {
154
+ borderRadius: "0 calc(var(--radius) - 2px) calc(var(--radius) - 2px) 0",
155
+ },
156
+ },
157
+ });
158
+
159
+ export const calendar__day = style({
160
+ display: "flex",
161
+ alignItems: "center",
162
+ justifyContent: "center",
163
+ width: "2.25rem",
164
+ height: "2.25rem",
165
+ padding: 0,
166
+ border: "none",
167
+ borderRadius: "calc(var(--radius) - 2px)",
168
+ background: "transparent",
169
+ color: "var(--foreground)",
170
+ fontSize: "0.8125rem",
171
+ fontFamily: "inherit",
172
+ cursor: "pointer",
173
+ transition: "background-color var(--duration-fast), color var(--duration-fast)",
174
+ selectors: {
175
+ "&:hover:not(:disabled)": {
176
+ background: "var(--background-muted)",
177
+ },
178
+ "&:focus-visible": {
179
+ outline: "var(--border-width-strong) solid var(--foreground)",
180
+ outlineOffset: "2px",
181
+ },
182
+ "&:disabled": {
183
+ opacity: 0.3,
184
+ cursor: "not-allowed",
185
+ },
186
+ },
187
+ });
188
+
189
+ export const calendarDayOutside = style({
190
+ color: "var(--foreground-subtle, var(--foreground-muted))",
191
+ opacity: 0.4,
192
+ });
193
+
194
+ export const calendarDayToday = style({
195
+ fontWeight: "var(--weight-bold)",
196
+ textDecoration: "underline",
197
+ textUnderlineOffset: "0.125rem",
198
+ });
199
+
200
+ export const calendarDaySelected = style({
201
+ background: "var(--primary)",
202
+ color: "var(--primary-foreground)",
203
+ fontWeight: "var(--weight-semibold)",
204
+ selectors: {
205
+ "&:hover:not(:disabled)": {
206
+ background: "var(--primary-hover)",
207
+ color: "var(--primary-foreground)",
208
+ },
209
+ },
210
+ });
211
+
212
+ export const calendarSelectValue = style({
213
+ });
214
+
215
+ export const calendarSelectPopup = style({
216
+ });
217
+
218
+ export const calendarGridWrap = style({
219
+ });
220
+
221
+ export const calendarCellHidden = style({
222
+ });
223
+
224
+ /** 동적 키로 클래스 참조용 — `byKey[\`badge--${variant}\`]` 같은 패턴 지원. */
225
+ export const byKey: Record<string, string> = {
226
+ "calendar": calendar,
227
+ "calendar--multi": calendarMulti,
228
+ "calendar__month": calendar__month,
229
+ "calendar__header": calendar__header,
230
+ "calendar__title": calendar__title,
231
+ "calendar__nav": calendar__nav,
232
+ "calendar__nav--placeholder": calendarNavPlaceholder,
233
+ "calendar__select-trigger": calendarSelectTrigger,
234
+ "select__positioner": select__positioner,
235
+ "calendar__weekdays": calendar__weekdays,
236
+ "calendar__weekday": calendar__weekday,
237
+ "calendar__grid": calendar__grid,
238
+ "calendar__cell": calendar__cell,
239
+ "calendar__cell--in-range": calendarCellInRange,
240
+ "calendar__cell--range-start": calendarCellRangeStart,
241
+ "calendar__cell--range-end": calendarCellRangeEnd,
242
+ "calendar__day": calendar__day,
243
+ "calendar__day--outside": calendarDayOutside,
244
+ "calendar__day--today": calendarDayToday,
245
+ "calendar__day--selected": calendarDaySelected,
246
+ "calendar__select-value": calendarSelectValue,
247
+ "calendar__select-popup": calendarSelectPopup,
248
+ "calendar__grid-wrap": calendarGridWrap,
249
+ "calendar__cell--hidden": calendarCellHidden,
250
+ };
@@ -0,0 +1,63 @@
1
+ import * as React from "react";
2
+ import { cn } from "@SH_UI_UTILS@";
3
+ import { action, card, content, description, footer, header, title } from "./styles.css";
4
+
5
+ type DivProps = React.HTMLAttributes<HTMLDivElement>;
6
+
7
+ export const Card = React.forwardRef<HTMLDivElement, DivProps>(
8
+ ({ className, ...props }, ref) => (
9
+ <div ref={ref} className={cn(card, className)} {...props} />
10
+ ),
11
+ );
12
+ Card.displayName = "Card";
13
+
14
+ export const CardHeader = React.forwardRef<HTMLDivElement, DivProps>(
15
+ ({ className, ...props }, ref) => (
16
+ <div
17
+ ref={ref}
18
+ data-slot="card-header"
19
+ className={cn(header, className)}
20
+ {...props}
21
+ />
22
+ ),
23
+ );
24
+ CardHeader.displayName = "CardHeader";
25
+
26
+ export const CardTitle = React.forwardRef<HTMLDivElement, DivProps>(
27
+ ({ className, ...props }, ref) => (
28
+ <div ref={ref} className={cn(title, className)} {...props} />
29
+ ),
30
+ );
31
+ CardTitle.displayName = "CardTitle";
32
+
33
+ export const CardDescription = React.forwardRef<HTMLDivElement, DivProps>(
34
+ ({ className, ...props }, ref) => (
35
+ <div ref={ref} className={cn(description, className)} {...props} />
36
+ ),
37
+ );
38
+ CardDescription.displayName = "CardDescription";
39
+
40
+ /**
41
+ * 헤더 우측에 배치되는 슬롯. CardHeader 내부에서 grid 2번째 컬럼을 차지.
42
+ * CardHeader가 `:has(.action)`으로 감지해 레이아웃을 전환한다.
43
+ */
44
+ export const CardAction = React.forwardRef<HTMLDivElement, DivProps>(
45
+ ({ className, ...props }, ref) => (
46
+ <div ref={ref} className={cn(action, className)} {...props} />
47
+ ),
48
+ );
49
+ CardAction.displayName = "CardAction";
50
+
51
+ export const CardContent = React.forwardRef<HTMLDivElement, DivProps>(
52
+ ({ className, ...props }, ref) => (
53
+ <div ref={ref} className={cn(content, className)} {...props} />
54
+ ),
55
+ );
56
+ CardContent.displayName = "CardContent";
57
+
58
+ export const CardFooter = React.forwardRef<HTMLDivElement, DivProps>(
59
+ ({ className, ...props }, ref) => (
60
+ <div ref={ref} className={cn(footer, className)} {...props} />
61
+ ),
62
+ );
63
+ CardFooter.displayName = "CardFooter";
@@ -0,0 +1,88 @@
1
+ import { style } from "@vanilla-extract/css";
2
+
3
+ export const card = style({
4
+ display: "flex",
5
+ flexDirection: "column",
6
+ gap: "var(--space-6)",
7
+ padding: "var(--space-6) 0",
8
+ background: "var(--background)",
9
+ color: "var(--foreground)",
10
+ border: "1px solid var(--border)",
11
+ borderRadius: "var(--radius)",
12
+
13
+ "@media": {
14
+ "(max-width: 640px)": {
15
+ gap: "var(--space-4)",
16
+ padding: "var(--space-4) 0",
17
+ },
18
+ },
19
+ });
20
+
21
+ export const action = style({
22
+ gridColumn: 2,
23
+ gridRow: "1 / span 2",
24
+ alignSelf: "start",
25
+ justifySelf: "end",
26
+ });
27
+
28
+ export const header = style({
29
+ display: "grid",
30
+ gridTemplateColumns: "1fr",
31
+ gridAutoRows: "auto",
32
+ rowGap: "0.375rem",
33
+ padding: "0 var(--space-6)",
34
+
35
+ selectors: {
36
+ [`&:has(.${action})`]: {
37
+ gridTemplateColumns: "1fr auto",
38
+ },
39
+ },
40
+
41
+ "@media": {
42
+ "(max-width: 640px)": {
43
+ paddingLeft: "var(--space-4)",
44
+ paddingRight: "var(--space-4)",
45
+ },
46
+ },
47
+ });
48
+
49
+ export const title = style({
50
+ fontSize: "var(--text-base)",
51
+ fontWeight: "var(--weight-semibold)",
52
+ lineHeight: 1.25,
53
+ letterSpacing: "-0.01em",
54
+ });
55
+
56
+ export const description = style({
57
+ fontSize: "var(--text-sm)",
58
+ lineHeight: 1.5,
59
+ color: "var(--foreground-muted)",
60
+ });
61
+
62
+ export const content = style({
63
+ padding: "0 var(--space-6)",
64
+ fontSize: "var(--text-sm)",
65
+ lineHeight: 1.6,
66
+
67
+ "@media": {
68
+ "(max-width: 640px)": {
69
+ paddingLeft: "var(--space-4)",
70
+ paddingRight: "var(--space-4)",
71
+ },
72
+ },
73
+ });
74
+
75
+ export const footer = style({
76
+ padding: "0 var(--space-6)",
77
+ display: "flex",
78
+ alignItems: "center",
79
+ gap: "var(--space-2)",
80
+
81
+ "@media": {
82
+ "(max-width: 640px)": {
83
+ paddingLeft: "var(--space-4)",
84
+ paddingRight: "var(--space-4)",
85
+ flexWrap: "wrap",
86
+ },
87
+ },
88
+ });