@uniai-fe/uds-primitives 0.0.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 (217) hide show
  1. package/README.md +63 -0
  2. package/package.json +85 -0
  3. package/src/components/alternate/hooks/index.ts +4 -0
  4. package/src/components/alternate/img/.gitkeep +0 -0
  5. package/src/components/alternate/index.scss +1 -0
  6. package/src/components/alternate/index.tsx +4 -0
  7. package/src/components/alternate/markup/index.tsx +4 -0
  8. package/src/components/alternate/styles/index.scss +3 -0
  9. package/src/components/alternate/types/index.ts +4 -0
  10. package/src/components/alternate/utils/index.ts +4 -0
  11. package/src/components/badge/hooks/index.ts +4 -0
  12. package/src/components/badge/img/.gitkeep +0 -0
  13. package/src/components/badge/index.scss +1 -0
  14. package/src/components/badge/index.tsx +6 -0
  15. package/src/components/badge/markup/Badge.tsx +51 -0
  16. package/src/components/badge/markup/index.tsx +1 -0
  17. package/src/components/badge/styles/index.scss +189 -0
  18. package/src/components/badge/types/index.ts +55 -0
  19. package/src/components/badge/utils/index.ts +21 -0
  20. package/src/components/button/hooks/index.ts +4 -0
  21. package/src/components/button/img/.gitkeep +0 -0
  22. package/src/components/button/index.scss +1 -0
  23. package/src/components/button/index.tsx +6 -0
  24. package/src/components/button/markup/Button.tsx +175 -0
  25. package/src/components/button/markup/index.tsx +1 -0
  26. package/src/components/button/styles/index.scss +847 -0
  27. package/src/components/button/types/index.ts +79 -0
  28. package/src/components/button/utils/index.ts +58 -0
  29. package/src/components/calendar/hooks/index.ts +4 -0
  30. package/src/components/calendar/img/.gitkeep +0 -0
  31. package/src/components/calendar/index.scss +1 -0
  32. package/src/components/calendar/index.tsx +4 -0
  33. package/src/components/calendar/markup/index.tsx +4 -0
  34. package/src/components/calendar/styles/index.scss +3 -0
  35. package/src/components/calendar/types/index.ts +4 -0
  36. package/src/components/calendar/utils/index.ts +4 -0
  37. package/src/components/checkbox/hooks/index.ts +4 -0
  38. package/src/components/checkbox/img/.gitkeep +0 -0
  39. package/src/components/checkbox/img/check-large.svg +3 -0
  40. package/src/components/checkbox/img/check-medium.svg +3 -0
  41. package/src/components/checkbox/img/check.svg +3 -0
  42. package/src/components/checkbox/index.scss +1 -0
  43. package/src/components/checkbox/index.tsx +4 -0
  44. package/src/components/checkbox/markup/Checkbox.tsx +127 -0
  45. package/src/components/checkbox/markup/index.ts +1 -0
  46. package/src/components/checkbox/styles/index.scss +164 -0
  47. package/src/components/checkbox/types/checkbox.ts +21 -0
  48. package/src/components/checkbox/types/index.ts +1 -0
  49. package/src/components/chip/hooks/index.ts +4 -0
  50. package/src/components/chip/img/.gitkeep +0 -0
  51. package/src/components/chip/img/remove.svg +3 -0
  52. package/src/components/chip/index.scss +1 -0
  53. package/src/components/chip/index.tsx +6 -0
  54. package/src/components/chip/markup/Chip.tsx +103 -0
  55. package/src/components/chip/markup/index.tsx +1 -0
  56. package/src/components/chip/styles/index.scss +140 -0
  57. package/src/components/chip/types/index.ts +52 -0
  58. package/src/components/chip/utils/index.ts +36 -0
  59. package/src/components/dialog/hooks/index.ts +4 -0
  60. package/src/components/dialog/img/.gitkeep +0 -0
  61. package/src/components/dialog/index.scss +1 -0
  62. package/src/components/dialog/index.tsx +3 -0
  63. package/src/components/dialog/markup/confirm-dialog.tsx +316 -0
  64. package/src/components/dialog/markup/index.tsx +4 -0
  65. package/src/components/dialog/markup/notice-dialog.tsx +191 -0
  66. package/src/components/dialog/styles/base.scss +153 -0
  67. package/src/components/dialog/styles/confirm.scss +58 -0
  68. package/src/components/dialog/styles/index.scss +3 -0
  69. package/src/components/dialog/styles/notice.scss +65 -0
  70. package/src/components/dialog/types/index.ts +70 -0
  71. package/src/components/dialog/utils/index.ts +4 -0
  72. package/src/components/drawer/hooks/index.ts +113 -0
  73. package/src/components/drawer/img/.gitkeep +0 -0
  74. package/src/components/drawer/img/close.svg +3 -0
  75. package/src/components/drawer/index.scss +1 -0
  76. package/src/components/drawer/index.tsx +3 -0
  77. package/src/components/drawer/markup/drawer.tsx +421 -0
  78. package/src/components/drawer/markup/index.tsx +3 -0
  79. package/src/components/drawer/styles/index.scss +232 -0
  80. package/src/components/drawer/types/index.ts +51 -0
  81. package/src/components/drawer/utils/context.ts +15 -0
  82. package/src/components/drawer/utils/index.tsx +77 -0
  83. package/src/components/dropdown/hooks/index.ts +4 -0
  84. package/src/components/dropdown/img/.gitkeep +0 -0
  85. package/src/components/dropdown/index.scss +1 -0
  86. package/src/components/dropdown/index.tsx +4 -0
  87. package/src/components/dropdown/markup/index.tsx +4 -0
  88. package/src/components/dropdown/styles/index.scss +3 -0
  89. package/src/components/dropdown/types/index.ts +4 -0
  90. package/src/components/dropdown/utils/index.ts +4 -0
  91. package/src/components/input/hooks/index.ts +4 -0
  92. package/src/components/input/img/.gitkeep +0 -0
  93. package/src/components/input/img/check-correct.svg +3 -0
  94. package/src/components/input/img/check-default.svg +3 -0
  95. package/src/components/input/img/check-incorrect.svg +3 -0
  96. package/src/components/input/img/error.svg +5 -0
  97. package/src/components/input/img/hide-off.svg +4 -0
  98. package/src/components/input/img/hide-on.svg +6 -0
  99. package/src/components/input/img/reset.svg +3 -0
  100. package/src/components/input/img/search.svg +4 -0
  101. package/src/components/input/img/success.svg +3 -0
  102. package/src/components/input/index.scss +1 -0
  103. package/src/components/input/index.tsx +6 -0
  104. package/src/components/input/markup/index.tsx +1 -0
  105. package/src/components/input/markup/text/Base.tsx +311 -0
  106. package/src/components/input/markup/text/Identification.tsx +145 -0
  107. package/src/components/input/markup/text/Password.tsx +71 -0
  108. package/src/components/input/markup/text/Phone.tsx +115 -0
  109. package/src/components/input/markup/text/Search.tsx +35 -0
  110. package/src/components/input/markup/text/index.ts +10 -0
  111. package/src/components/input/styles/index.scss +375 -0
  112. package/src/components/input/types/index.ts +56 -0
  113. package/src/components/input/utils/index.ts +54 -0
  114. package/src/components/label/hooks/index.ts +4 -0
  115. package/src/components/label/img/.gitkeep +0 -0
  116. package/src/components/label/index.scss +1 -0
  117. package/src/components/label/index.tsx +4 -0
  118. package/src/components/label/markup/index.tsx +4 -0
  119. package/src/components/label/styles/index.scss +3 -0
  120. package/src/components/label/types/index.ts +4 -0
  121. package/src/components/label/utils/index.ts +4 -0
  122. package/src/components/navigation/hooks/index.ts +4 -0
  123. package/src/components/navigation/img/.gitkeep +0 -0
  124. package/src/components/navigation/index.scss +1 -0
  125. package/src/components/navigation/index.tsx +8 -0
  126. package/src/components/navigation/markup/index.tsx +2 -0
  127. package/src/components/navigation/markup/mobile/BottomNavigation.tsx +127 -0
  128. package/src/components/navigation/markup/mobile/index.ts +1 -0
  129. package/src/components/navigation/markup/web/index.ts +4 -0
  130. package/src/components/navigation/styles/index.scss +133 -0
  131. package/src/components/navigation/types/index.ts +38 -0
  132. package/src/components/navigation/utils/index.ts +23 -0
  133. package/src/components/pagination/hooks/index.ts +4 -0
  134. package/src/components/pagination/img/.gitkeep +0 -0
  135. package/src/components/pagination/index.scss +1 -0
  136. package/src/components/pagination/index.tsx +6 -0
  137. package/src/components/pagination/markup/Carousel.tsx +76 -0
  138. package/src/components/pagination/markup/Count.tsx +54 -0
  139. package/src/components/pagination/markup/Pagination.tsx +83 -0
  140. package/src/components/pagination/markup/index.tsx +3 -0
  141. package/src/components/pagination/styles/index.scss +155 -0
  142. package/src/components/pagination/types/index.ts +68 -0
  143. package/src/components/pagination/utils/index.ts +58 -0
  144. package/src/components/radio/hooks/index.ts +4 -0
  145. package/src/components/radio/img/.gitkeep +0 -0
  146. package/src/components/radio/index.scss +1 -0
  147. package/src/components/radio/index.tsx +7 -0
  148. package/src/components/radio/markup/Radio.tsx +121 -0
  149. package/src/components/radio/markup/RadioCard.tsx +68 -0
  150. package/src/components/radio/markup/RadioCardGroup.tsx +75 -0
  151. package/src/components/radio/markup/index.tsx +3 -0
  152. package/src/components/radio/styles/index.scss +252 -0
  153. package/src/components/radio/types/index.ts +1 -0
  154. package/src/components/radio/types/radio.ts +63 -0
  155. package/src/components/radio/utils/index.ts +4 -0
  156. package/src/components/scrollbar/hooks/index.ts +4 -0
  157. package/src/components/scrollbar/img/.gitkeep +0 -0
  158. package/src/components/scrollbar/index.scss +1 -0
  159. package/src/components/scrollbar/index.tsx +4 -0
  160. package/src/components/scrollbar/markup/index.tsx +4 -0
  161. package/src/components/scrollbar/styles/index.scss +3 -0
  162. package/src/components/scrollbar/types/index.ts +4 -0
  163. package/src/components/scrollbar/utils/index.ts +4 -0
  164. package/src/components/segmented-control/index.scss +1 -0
  165. package/src/components/segmented-control/index.tsx +7 -0
  166. package/src/components/segmented-control/markup/SegmentedControl.tsx +117 -0
  167. package/src/components/segmented-control/markup/index.ts +1 -0
  168. package/src/components/segmented-control/styles/index.scss +113 -0
  169. package/src/components/segmented-control/types/index.ts +22 -0
  170. package/src/components/select/hooks/index.ts +4 -0
  171. package/src/components/select/img/.gitkeep +0 -0
  172. package/src/components/select/index.scss +1 -0
  173. package/src/components/select/index.tsx +4 -0
  174. package/src/components/select/markup/index.tsx +4 -0
  175. package/src/components/select/styles/index.scss +3 -0
  176. package/src/components/select/types/index.ts +4 -0
  177. package/src/components/select/utils/index.ts +4 -0
  178. package/src/components/spinner/hooks/index.ts +4 -0
  179. package/src/components/spinner/img/.gitkeep +0 -0
  180. package/src/components/spinner/index.scss +1 -0
  181. package/src/components/spinner/index.tsx +4 -0
  182. package/src/components/spinner/markup/index.tsx +4 -0
  183. package/src/components/spinner/styles/index.scss +3 -0
  184. package/src/components/spinner/types/index.ts +4 -0
  185. package/src/components/spinner/utils/index.ts +4 -0
  186. package/src/components/tab/hooks/index.ts +4 -0
  187. package/src/components/tab/img/.gitkeep +0 -0
  188. package/src/components/tab/index.scss +1 -0
  189. package/src/components/tab/index.tsx +6 -0
  190. package/src/components/tab/markup/TabContent.tsx +29 -0
  191. package/src/components/tab/markup/TabList.tsx +60 -0
  192. package/src/components/tab/markup/TabRoot.tsx +74 -0
  193. package/src/components/tab/markup/TabTrigger.tsx +47 -0
  194. package/src/components/tab/markup/index.tsx +4 -0
  195. package/src/components/tab/styles/index.scss +182 -0
  196. package/src/components/tab/types/index.ts +46 -0
  197. package/src/components/tab/utils/index.ts +5 -0
  198. package/src/components/tab/utils/tab-context.ts +20 -0
  199. package/src/components/table/hooks/index.ts +4 -0
  200. package/src/components/table/img/.gitkeep +0 -0
  201. package/src/components/table/index.scss +1 -0
  202. package/src/components/table/index.tsx +4 -0
  203. package/src/components/table/markup/index.tsx +4 -0
  204. package/src/components/table/styles/index.scss +3 -0
  205. package/src/components/table/types/index.ts +4 -0
  206. package/src/components/table/utils/index.ts +4 -0
  207. package/src/hooks/index.ts +4 -0
  208. package/src/img/.gitkeep +0 -0
  209. package/src/index.scss +3 -0
  210. package/src/index.tsx +26 -0
  211. package/src/init/dayjs.ts +14 -0
  212. package/src/theme/ThemeProvider.tsx +25 -0
  213. package/src/theme/config.ts +29 -0
  214. package/src/theme/index.ts +3 -0
  215. package/src/theme/overrides.scss +215 -0
  216. package/src/types/index.ts +4 -0
  217. package/src/utils/index.ts +4 -0
@@ -0,0 +1,175 @@
1
+ import { Button as RadixButton } from "@radix-ui/themes";
2
+ import { forwardRef } from "react";
3
+ import type { ComponentProps } from "react";
4
+ import type { ButtonProps } from "../types";
5
+ import { composeButtonClassName } from "../utils";
6
+
7
+ const BUTTON_INTENT_COLOR: Record<
8
+ NonNullable<ButtonProps["intent"]>,
9
+ NonNullable<ComponentProps<typeof RadixButton>["color"]>
10
+ > = {
11
+ primary: "blue",
12
+ secondary: "sky",
13
+ teritary: "gray",
14
+ };
15
+
16
+ const BUTTON_VARIANT_MAP: Record<
17
+ NonNullable<ButtonProps["variant"]>,
18
+ NonNullable<ComponentProps<typeof RadixButton>["variant"]>
19
+ > = {
20
+ solid: "solid",
21
+ outlined: "outline",
22
+ "text-button": "ghost",
23
+ };
24
+
25
+ const BUTTON_SIZE_MAP: Record<
26
+ NonNullable<ButtonProps["size"]>,
27
+ NonNullable<ComponentProps<typeof RadixButton>["size"]>
28
+ > = {
29
+ xlarge: "4",
30
+ large: "3",
31
+ medium: "2",
32
+ small: "1",
33
+ };
34
+
35
+ /**
36
+ * 버튼 컴포넌트; Radix Theme 기반 범용 버튼
37
+ * @component
38
+ * @param {ButtonProps} props
39
+ * @param {ButtonVariant} [props.variant] solid / outlined / text-button
40
+ * @param {ButtonIntent} [props.intent] primary / secondary / teritary
41
+ * @param {ButtonSize} [props.size] small / medium / large / xlarge
42
+ * @param {ButtonShape} [props.shape] default / round
43
+ * @param {ButtonState} [props.state] default / readonly / disabled
44
+ * @param {boolean} [props.block] true면 width:100%
45
+ * @param {boolean} [props.loading] 로딩 상태 표시
46
+ * @param {ButtonIconSlot} [props.iconSlot] none / left / right
47
+ * @param {React.ReactNode} [props.icon] iconSlot에 표시할 아이콘
48
+ * @param {React.ReactElement} [props.prefix] 라벨 앞 slot
49
+ * @param {React.ReactElement} [props.suffix] 라벨 뒤 slot
50
+ * @param {React.ReactNode} [props.children] 버튼 라벨
51
+ *
52
+ * @example
53
+ * ```tsx
54
+ * <Button variant="solid" intent="primary" icon={<Icon />} iconSlot="left">
55
+ * 저장
56
+ * </Button>
57
+ * ```
58
+ */
59
+ const Button = forwardRef<HTMLButtonElement, ButtonProps>(
60
+ (
61
+ {
62
+ children,
63
+ icon,
64
+ prefix,
65
+ suffix,
66
+ iconSlot = "none",
67
+ variant = "solid",
68
+ intent = "primary",
69
+ size = "medium",
70
+ shape = "default",
71
+ state: stateProp = "default",
72
+ block = false,
73
+ loading = false,
74
+ className,
75
+ "data-simulated-state": simulatedState,
76
+ disabled: disabledProp,
77
+ type: typeProp,
78
+ ...restProps
79
+ },
80
+ forwardedRef,
81
+ ) => {
82
+ const normalizedChildren =
83
+ children === null || children === undefined ? null : typeof children ===
84
+ "string" || typeof children === "number" ? (
85
+ <span className="button-label" data-slot="label">
86
+ {children}
87
+ </span>
88
+ ) : (
89
+ children
90
+ );
91
+ const resolvedState = disabledProp ? "disabled" : stateProp;
92
+ const isReadonly = resolvedState === "readonly";
93
+ const isDisabled = resolvedState === "disabled" || isReadonly;
94
+ const isIconOnly =
95
+ Boolean(icon) &&
96
+ iconSlot !== "none" &&
97
+ !normalizedChildren &&
98
+ !prefix &&
99
+ !suffix;
100
+ const combinedClassName = composeButtonClassName({
101
+ variant,
102
+ intent,
103
+ size,
104
+ shape,
105
+ block,
106
+ loading,
107
+ iconSlot,
108
+ iconOnly: isIconOnly,
109
+ state: resolvedState,
110
+ className,
111
+ });
112
+ const content = (
113
+ <>
114
+ {prefix ? (
115
+ <span className="button-prefix" data-slot="prefix">
116
+ {prefix}
117
+ </span>
118
+ ) : null}
119
+ {iconSlot === "left" && icon ? (
120
+ <span className="button-icon" data-slot="left">
121
+ {icon}
122
+ </span>
123
+ ) : null}
124
+ {normalizedChildren}
125
+ {iconSlot === "right" && icon ? (
126
+ <span className="button-icon" data-slot="right">
127
+ {icon}
128
+ </span>
129
+ ) : null}
130
+ {suffix ? (
131
+ <span className="button-suffix" data-slot="suffix">
132
+ {suffix}
133
+ </span>
134
+ ) : null}
135
+ </>
136
+ );
137
+
138
+ return (
139
+ <RadixButton
140
+ {...restProps}
141
+ ref={forwardedRef}
142
+ variant={BUTTON_VARIANT_MAP[variant]}
143
+ color={BUTTON_INTENT_COLOR[intent]}
144
+ size={BUTTON_SIZE_MAP[size]}
145
+ radius={shape === "round" ? "full" : "medium"}
146
+ highContrast={false}
147
+ loading={loading}
148
+ disabled={isDisabled}
149
+ aria-busy={loading || undefined}
150
+ aria-disabled={isReadonly ? true : undefined}
151
+ type={typeProp ?? "button"}
152
+ className={combinedClassName}
153
+ data-variant={variant}
154
+ data-intent={intent}
155
+ data-size={size}
156
+ data-shape={shape}
157
+ data-state={resolvedState}
158
+ data-block={block ? "true" : undefined}
159
+ data-disabled={isDisabled ? "true" : undefined}
160
+ data-loading={loading ? "true" : undefined}
161
+ data-icon-slot={iconSlot}
162
+ data-icon-only={isIconOnly ? "true" : undefined}
163
+ data-prefix={prefix ? "true" : undefined}
164
+ data-suffix={suffix ? "true" : undefined}
165
+ data-simulated-state={simulatedState}
166
+ >
167
+ {content}
168
+ </RadixButton>
169
+ );
170
+ },
171
+ );
172
+
173
+ Button.displayName = "Button";
174
+
175
+ export { Button };
@@ -0,0 +1 @@
1
+ export { Button } from "./Button";