@weing-dev/ui-kit-primitive 0.0.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 (328) hide show
  1. package/README.md +50 -0
  2. package/eslint.config.js +29 -0
  3. package/index.html +13 -0
  4. package/package.json +75 -0
  5. package/public/static/icon/Add.svg +1 -0
  6. package/public/static/icon/ApprovalInactive.svg +1 -0
  7. package/public/static/icon/ArrowRight.svg +5 -0
  8. package/public/static/icon/Cancle Filled.svg +1 -0
  9. package/public/static/icon/Cancle.svg +1 -0
  10. package/public/static/icon/Cart Filled.svg +1 -0
  11. package/public/static/icon/Cart.svg +1 -0
  12. package/public/static/icon/Check.svg +1 -0
  13. package/public/static/icon/CheckBoxRound.svg +3 -0
  14. package/public/static/icon/Company.svg +1 -0
  15. package/public/static/icon/DragHandle.svg +1 -0
  16. package/public/static/icon/Eco.svg +1 -0
  17. package/public/static/icon/EditSquare.svg +1 -0
  18. package/public/static/icon/Error Filled.svg +1 -0
  19. package/public/static/icon/Error.svg +1 -0
  20. package/public/static/icon/File Upload.svg +1 -0
  21. package/public/static/icon/FilecheckInactive.svg +1 -0
  22. package/public/static/icon/Go Before.svg +1 -0
  23. package/public/static/icon/Go Next.svg +1 -0
  24. package/public/static/icon/Hamburger Menu.svg +1 -0
  25. package/public/static/icon/ImagecheckPlay.svg +4 -0
  26. package/public/static/icon/Kakao Talk.svg +1 -0
  27. package/public/static/icon/Minus.svg +1 -0
  28. package/public/static/icon/Naver Blog.svg +1 -0
  29. package/public/static/icon/Naver.svg +1 -0
  30. package/public/static/icon/OrderApprove.svg +1 -0
  31. package/public/static/icon/OrderInactive.svg +1 -0
  32. package/public/static/icon/OrderPlay.svg +1 -0
  33. package/public/static/icon/PayApprove.svg +1 -0
  34. package/public/static/icon/PayInactive.svg +1 -0
  35. package/public/static/icon/PrintInactive.svg +1 -0
  36. package/public/static/icon/PrintPlay.svg +1 -0
  37. package/public/static/icon/Search.svg +1 -0
  38. package/public/static/icon/ShippingDone.svg +1 -0
  39. package/public/static/icon/Support Agent.svg +1 -0
  40. package/public/static/icon/Task.svg +1 -0
  41. package/public/static/icon/User.svg +1 -0
  42. package/public/static/icon/Warning Filled.svg +1 -0
  43. package/public/static/icon/Warning.svg +1 -0
  44. package/public/static/icon/add_a_photo.svg +3 -0
  45. package/public/static/icon/attach_file.svg +1 -0
  46. package/public/static/icon/check_circle.svg +1 -0
  47. package/public/static/icon/close.svg +1 -0
  48. package/public/static/icon/download.svg +1 -0
  49. package/public/static/icon/expand all.svg +1 -0
  50. package/public/static/icon/expand_less.svg +1 -0
  51. package/public/static/icon/expand_more.svg +1 -0
  52. package/public/static/icon/factory.svg +1 -0
  53. package/public/static/icon/inventory.svg +1 -0
  54. package/public/static/icon/listAll.svg +1 -0
  55. package/public/static/icon/local_shipping.svg +1 -0
  56. package/public/static/icon/logout.svg +1 -0
  57. package/public/static/icon/menu.svg +1 -0
  58. package/public/static/icon/mode_edit.svg +4 -0
  59. package/public/static/icon/more.svg +1 -0
  60. package/public/static/icon/outward.svg +1 -0
  61. package/public/static/icon/personcard.svg +1 -0
  62. package/public/static/icon/product.svg +1 -0
  63. package/public/static/icon/settings.svg +1 -0
  64. package/public/static/icon/swap_vert.svg +3 -0
  65. package/public/static/icon/upload.svg +1 -0
  66. package/public/static/icon/warning_amber.svg +3 -0
  67. package/public/static/image/Thumbnail.png +0 -0
  68. package/public/vite.svg +1 -0
  69. package/public/weing_logo_final.png +0 -0
  70. package/scripts/icons/setIcon.cjs +151 -0
  71. package/scripts/icons/svg-template.cjs +18 -0
  72. package/scripts/icons/svgo-config.json +9 -0
  73. package/scripts/icons/svgr-config.json +16 -0
  74. package/src/@types/color.d.ts +51 -0
  75. package/src/@types/common.d.ts +6 -0
  76. package/src/@types/extends/react.extends.d.ts +7 -0
  77. package/src/@types/quill-image-resize-module-react/index.d.ts +1 -0
  78. package/src/App.css +0 -0
  79. package/src/App.tsx +84 -0
  80. package/src/assets/react.svg +1 -0
  81. package/src/components/Accordion/Accordion.context.tsx +62 -0
  82. package/src/components/Accordion/Accordion.module.scss +163 -0
  83. package/src/components/Accordion/Accordion.tsx +242 -0
  84. package/src/components/Accordion/README.md +408 -0
  85. package/src/components/Accordion/images/as_trigger.gif +0 -0
  86. package/src/components/Accordion/images/closed.png +0 -0
  87. package/src/components/Accordion/images/open.png +0 -0
  88. package/src/components/Accordion/images/thumbnail1.png +0 -0
  89. package/src/components/Accordion/images/thumbnail2.png +0 -0
  90. package/src/components/Accordion/images/thumbnail3.png +0 -0
  91. package/src/components/Avatar/Avatar.module.scss +47 -0
  92. package/src/components/Avatar/Avatar.tsx +230 -0
  93. package/src/components/Avatar/README.md +333 -0
  94. package/src/components/Badge/Badge.module.scss +49 -0
  95. package/src/components/Badge/Badge.tsx +87 -0
  96. package/src/components/Badge/README.md +223 -0
  97. package/src/components/BarCode/BarCode.module.scss +0 -0
  98. package/src/components/BarCode/BarCode.tsx +153 -0
  99. package/src/components/Breadcrumb/Breadcrumb.module.scss +36 -0
  100. package/src/components/Breadcrumb/Breadcrumb.tsx +114 -0
  101. package/src/components/Breadcrumb/README.md +339 -0
  102. package/src/components/Button/Button.colors.tsx +322 -0
  103. package/src/components/Button/Button.context.tsx +47 -0
  104. package/src/components/Button/Button.module.scss +156 -0
  105. package/src/components/Button/Button.tsx +190 -0
  106. package/src/components/Button/Button.type.ts +11 -0
  107. package/src/components/Calendar/Calendar.context.tsx +138 -0
  108. package/src/components/Calendar/Calendar.module.scss +116 -0
  109. package/src/components/Calendar/Calendar.tsx +440 -0
  110. package/src/components/Calendar/dayjs.util.ts +312 -0
  111. package/src/components/Cascader/Cacader.data.ts +1185 -0
  112. package/src/components/Cascader/Cascader.context.tsx +61 -0
  113. package/src/components/Cascader/Cascader.hook.ts +502 -0
  114. package/src/components/Cascader/Cascader.module.scss +143 -0
  115. package/src/components/Cascader/Cascader.tsx +281 -0
  116. package/src/components/Cascader/README.md +735 -0
  117. package/src/components/Chart/Chart.module.scss +0 -0
  118. package/src/components/Chart/Chart.tsx +230 -0
  119. package/src/components/Chart/README.md +85 -0
  120. package/src/components/Chart/images/barChart.png +0 -0
  121. package/src/components/Chips/Chips.colors.tsx +185 -0
  122. package/src/components/Chips/Chips.module.scss +49 -0
  123. package/src/components/Chips/Chips.tsx +78 -0
  124. package/src/components/Comment/Comment.module.scss +14 -0
  125. package/src/components/Comment/Comment.tsx +105 -0
  126. package/src/components/Dialog/Dialog.module.scss +0 -0
  127. package/src/components/Dialog/Dialog.tsx +12 -0
  128. package/src/components/Divider/Divider.module.scss +12 -0
  129. package/src/components/Divider/Divider.tsx +33 -0
  130. package/src/components/Editor/Editor.context.tsx +12 -0
  131. package/src/components/Editor/Editor.module.scss +40 -0
  132. package/src/components/Editor/Editor.tsx +174 -0
  133. package/src/components/Form/CheckBox/CheckBox.context.tsx +56 -0
  134. package/src/components/Form/CheckBox/CheckBox.module.scss +81 -0
  135. package/src/components/Form/CheckBox/CheckBox.tsx +196 -0
  136. package/src/components/Form/CheckBox/Checkbox.colors.tsx +42 -0
  137. package/src/components/Form/Dropdown/Dropdown.colors.tsx +125 -0
  138. package/src/components/Form/Dropdown/Dropdown.context.tsx +62 -0
  139. package/src/components/Form/Dropdown/Dropdown.module.scss +133 -0
  140. package/src/components/Form/Dropdown/Dropdown.tsx +404 -0
  141. package/src/components/Form/OTPInput/OTPInput.context.tsx +104 -0
  142. package/src/components/Form/OTPInput/OTPInput.module.scss +22 -0
  143. package/src/components/Form/OTPInput/OTPInput.tsx +67 -0
  144. package/src/components/Form/Radio/Radio.colors.tsx +42 -0
  145. package/src/components/Form/Radio/Radio.context.tsx +40 -0
  146. package/src/components/Form/Radio/Radio.module.scss +61 -0
  147. package/src/components/Form/Radio/Radio.tsx +174 -0
  148. package/src/components/Form/Switch/Switch.colors.tsx +42 -0
  149. package/src/components/Form/Switch/Switch.context.tsx +50 -0
  150. package/src/components/Form/Switch/Switch.module.scss +53 -0
  151. package/src/components/Form/Switch/Switch.tsx +151 -0
  152. package/src/components/Form/TextArea/TextArea.colors.tsx +76 -0
  153. package/src/components/Form/TextArea/TextArea.context.tsx +97 -0
  154. package/src/components/Form/TextArea/TextArea.module.scss +138 -0
  155. package/src/components/Form/TextArea/TextArea.tsx +246 -0
  156. package/src/components/Form/TextInput/TextInput.colors.tsx +76 -0
  157. package/src/components/Form/TextInput/TextInput.context.tsx +106 -0
  158. package/src/components/Form/TextInput/TextInput.module.scss +160 -0
  159. package/src/components/Form/TextInput/TextInput.tsx +225 -0
  160. package/src/components/GlobalStyle/GlobalStyle.tsx +20 -0
  161. package/src/components/HelperText/HelperText.module.scss +28 -0
  162. package/src/components/HelperText/HelperText.tsx +130 -0
  163. package/src/components/Icon/Icon.tsx +29 -0
  164. package/src/components/Icons/Add.tsx +20 -0
  165. package/src/components/Icons/AddAPhoto.tsx +21 -0
  166. package/src/components/Icons/ApprovalInactive.tsx +26 -0
  167. package/src/components/Icons/ArrowRight.tsx +24 -0
  168. package/src/components/Icons/AttachFile.tsx +20 -0
  169. package/src/components/Icons/Cancle.tsx +20 -0
  170. package/src/components/Icons/CancleFilled.tsx +20 -0
  171. package/src/components/Icons/Cart.tsx +20 -0
  172. package/src/components/Icons/CartFilled.tsx +20 -0
  173. package/src/components/Icons/Check.tsx +20 -0
  174. package/src/components/Icons/CheckBoxRound.tsx +21 -0
  175. package/src/components/Icons/CheckCircle.tsx +35 -0
  176. package/src/components/Icons/Close.tsx +20 -0
  177. package/src/components/Icons/Company.tsx +20 -0
  178. package/src/components/Icons/Download.tsx +20 -0
  179. package/src/components/Icons/DragHandle.tsx +20 -0
  180. package/src/components/Icons/Eco.tsx +20 -0
  181. package/src/components/Icons/EditSquare.tsx +20 -0
  182. package/src/components/Icons/Error.tsx +20 -0
  183. package/src/components/Icons/ErrorFilled.tsx +20 -0
  184. package/src/components/Icons/ExpandAll.tsx +20 -0
  185. package/src/components/Icons/ExpandLess.tsx +20 -0
  186. package/src/components/Icons/ExpandMore.tsx +20 -0
  187. package/src/components/Icons/Factory.tsx +20 -0
  188. package/src/components/Icons/FileUpload.tsx +20 -0
  189. package/src/components/Icons/FilecheckInactive.tsx +22 -0
  190. package/src/components/Icons/GoBefore.tsx +20 -0
  191. package/src/components/Icons/GoNext.tsx +20 -0
  192. package/src/components/Icons/HamburgerMenu.tsx +20 -0
  193. package/src/components/Icons/ImagecheckPlay.tsx +27 -0
  194. package/src/components/Icons/Inventory.tsx +20 -0
  195. package/src/components/Icons/KakaoTalk.tsx +22 -0
  196. package/src/components/Icons/ListAll.tsx +20 -0
  197. package/src/components/Icons/LocalShipping.tsx +20 -0
  198. package/src/components/Icons/Logout.tsx +20 -0
  199. package/src/components/Icons/Menu.tsx +20 -0
  200. package/src/components/Icons/Minus.tsx +18 -0
  201. package/src/components/Icons/ModeEdit.tsx +25 -0
  202. package/src/components/Icons/More.tsx +20 -0
  203. package/src/components/Icons/Naver.tsx +20 -0
  204. package/src/components/Icons/NaverBlog.tsx +22 -0
  205. package/src/components/Icons/OrderApprove.tsx +20 -0
  206. package/src/components/Icons/OrderInactive.tsx +20 -0
  207. package/src/components/Icons/OrderPlay.tsx +20 -0
  208. package/src/components/Icons/Outward.tsx +20 -0
  209. package/src/components/Icons/PayApprove.tsx +24 -0
  210. package/src/components/Icons/PayInactive.tsx +24 -0
  211. package/src/components/Icons/Personcard.tsx +20 -0
  212. package/src/components/Icons/PrintInactive.tsx +24 -0
  213. package/src/components/Icons/PrintPlay.tsx +24 -0
  214. package/src/components/Icons/Product.tsx +20 -0
  215. package/src/components/Icons/Search.tsx +20 -0
  216. package/src/components/Icons/Settings.tsx +20 -0
  217. package/src/components/Icons/ShippingDone.tsx +20 -0
  218. package/src/components/Icons/SupportAgent.tsx +20 -0
  219. package/src/components/Icons/SwapVert.tsx +21 -0
  220. package/src/components/Icons/Task.tsx +20 -0
  221. package/src/components/Icons/Upload.tsx +20 -0
  222. package/src/components/Icons/User.tsx +20 -0
  223. package/src/components/Icons/Warning.tsx +20 -0
  224. package/src/components/Icons/WarningAmber.tsx +21 -0
  225. package/src/components/Icons/WarningFilled.tsx +20 -0
  226. package/src/components/Icons/index.ts +62 -0
  227. package/src/components/LNB/LNB.context.tsx +32 -0
  228. package/src/components/LNB/LNB.module.scss +99 -0
  229. package/src/components/LNB/LNB.tsx +190 -0
  230. package/src/components/LNB/README.md +411 -0
  231. package/src/components/LNB/makeNavigation.ts +51 -0
  232. package/src/components/LNB/navigation.d.ts +15 -0
  233. package/src/components/LNB/navigation.json +211 -0
  234. package/src/components/Label/Label.colors.tsx +241 -0
  235. package/src/components/Label/Label.module.scss +31 -0
  236. package/src/components/Label/Label.tsx +54 -0
  237. package/src/components/LazyImage/LazyImage.module.scss +6 -0
  238. package/src/components/LazyImage/LazyImage.tsx +107 -0
  239. package/src/components/List/List.module.scss +81 -0
  240. package/src/components/List/List.tsx +91 -0
  241. package/src/components/List/README.md +87 -0
  242. package/src/components/MobilePicker/MobilePicker.context.tsx +22 -0
  243. package/src/components/MobilePicker/MobilePicker.module.scss +57 -0
  244. package/src/components/MobilePicker/MobilePicker.tsx +336 -0
  245. package/src/components/MobilePicker/README.md +159 -0
  246. package/src/components/Modal/Modal.tsx +77 -0
  247. package/src/components/Modal/README.md +130 -0
  248. package/src/components/Pagination/Pagination.colors.tsx +85 -0
  249. package/src/components/Pagination/Pagination.context.tsx +28 -0
  250. package/src/components/Pagination/Pagination.module.scss +60 -0
  251. package/src/components/Pagination/Pagination.tsx +234 -0
  252. package/src/components/Popup/Popup.context.tsx +15 -0
  253. package/src/components/Popup/Popup.module.scss +53 -0
  254. package/src/components/Popup/Popup.tsx +116 -0
  255. package/src/components/Popup/README.md +170 -0
  256. package/src/components/QRCode/QRCode.module.scss +2 -0
  257. package/src/components/QRCode/QRCode.tsx +61 -0
  258. package/src/components/ScrollCalendar/ScrollCalendar.context.tsx +26 -0
  259. package/src/components/ScrollCalendar/ScrollCalendar.module.scss +42 -0
  260. package/src/components/ScrollCalendar/ScrollCalendar.tsx +448 -0
  261. package/src/components/ScrollSpy/README.md +62 -0
  262. package/src/components/ScrollSpy/ScrollSpy.tsx +130 -0
  263. package/src/components/Sheet/README.md +92 -0
  264. package/src/components/Sheet/Sheet.context.tsx +23 -0
  265. package/src/components/Sheet/Sheet.module.scss +68 -0
  266. package/src/components/Sheet/Sheet.tsx +146 -0
  267. package/src/components/Slider/README.md +639 -0
  268. package/src/components/Slider/Slider.backup.tsx +477 -0
  269. package/src/components/Slider/Slider.context.tsx +67 -0
  270. package/src/components/Slider/Slider.module.scss +123 -0
  271. package/src/components/Slider/Slider.tsx +467 -0
  272. package/src/components/Stepper/README.md +320 -0
  273. package/src/components/Stepper/Stepper.context.tsx +49 -0
  274. package/src/components/Stepper/Stepper.module.scss +163 -0
  275. package/src/components/Stepper/Stepper.tsx +219 -0
  276. package/src/components/Tab/Tab.colors.tsx +54 -0
  277. package/src/components/Tab/Tab.context.tsx +64 -0
  278. package/src/components/Tab/Tab.module.scss +239 -0
  279. package/src/components/Tab/Tab.tsx +123 -0
  280. package/src/components/Tab/cx.ts +6 -0
  281. package/src/components/Table/README.md +162 -0
  282. package/src/components/Table/Table.context.tsx +23 -0
  283. package/src/components/Table/Table.hook.ts +51 -0
  284. package/src/components/Table/Table.module.scss +83 -0
  285. package/src/components/Table/Table.tsx +147 -0
  286. package/src/components/Thumbnail/README.md +302 -0
  287. package/src/components/Thumbnail/Thumbnail.context.tsx +42 -0
  288. package/src/components/Thumbnail/Thumbnail.module.scss +149 -0
  289. package/src/components/Thumbnail/Thumbnail.tsx +391 -0
  290. package/src/components/TimeInput/README.md +118 -0
  291. package/src/components/TimeInput/TimeInput.colors.tsx +76 -0
  292. package/src/components/TimeInput/TimeInput.context.tsx +58 -0
  293. package/src/components/TimeInput/TimeInput.module.scss +211 -0
  294. package/src/components/TimeInput/TimeInput.tsx +411 -0
  295. package/src/components/WeeklyCalendar/WeeklyCalendar.context.tsx +88 -0
  296. package/src/components/WeeklyCalendar/WeeklyCalendar.module.scss +225 -0
  297. package/src/components/WeeklyCalendar/WeeklyCalendar.tsx +772 -0
  298. package/src/components/WeeklyCalendar/dayjs.util.ts +336 -0
  299. package/src/components/WeeklyCalendar/weeklyCalendar.util.ts +583 -0
  300. package/src/components/WisywygEditor/Quill/Editor.tsx +148 -0
  301. package/src/constant/locale.constant.ts +6 -0
  302. package/src/globals.scss +80 -0
  303. package/src/hooks/useColorScheme.tsx +48 -0
  304. package/src/hooks/useElementRect.tsx +128 -0
  305. package/src/hooks/useIntersectionObserver.tsx +33 -0
  306. package/src/index.css +17 -0
  307. package/src/index.ts +187 -0
  308. package/src/main.tsx +10 -0
  309. package/src/styles/_fontSize.mixin.scss +57 -0
  310. package/src/styles/_fontWeight.mixin.scss +15 -0
  311. package/src/styles/_lineHeight.mixin.scss +57 -0
  312. package/src/styles/_scrollbar.mixin.scss +49 -0
  313. package/src/styles/baseColor.ts +297 -0
  314. package/src/styles/color.ts +272 -0
  315. package/src/styles/color2.ts +200 -0
  316. package/src/styles/scrollbar.README.md +72 -0
  317. package/src/styles/typography.scss +170 -0
  318. package/src/utils/aws.util.ts +180 -0
  319. package/src/utils/common.utill.ts +45 -0
  320. package/src/vite-env.d.ts +1 -0
  321. package/tsconfig.app.json +24 -0
  322. package/tsconfig.json +29 -0
  323. package/tsconfig.node.json +10 -0
  324. package/tsconfig.node.tsbuildinfo +1 -0
  325. package/tsconfig.tsbuildinfo +1 -0
  326. package/vite.config.d.ts +2 -0
  327. package/vite.config.js +47 -0
  328. package/vite.config.ts +50 -0
@@ -0,0 +1,61 @@
1
+ @layer Radio {
2
+ .RadioRoot {
3
+ display: flex;
4
+ flex-direction: row;
5
+ gap: 4px;
6
+ align-items: center;
7
+ }
8
+
9
+ .RadioTrigger {
10
+ .RadioIcon {
11
+ width: 20px;
12
+ height: 20px;
13
+ border: 2px solid var(--border-color, #8a8c8f);
14
+ border-radius: 50%;
15
+ display: flex;
16
+ flex-direction: column;
17
+ align-items: center;
18
+ justify-content: center;
19
+
20
+ &:hover {
21
+ border-color: var(--hover-border-color, #b1916b);
22
+ }
23
+
24
+ &.checked {
25
+ border-color: var(--border-color, #b1916b);
26
+ background-color: var(--background-color, #b1916b);
27
+ }
28
+
29
+ .RadioInner {
30
+ width: 50%;
31
+ height: 50%;
32
+ background-color: var(--border-color, #ffffff);
33
+ margin: auto;
34
+ border-radius: 50%;
35
+ }
36
+
37
+ &.disabled,
38
+ &.readOnly {
39
+ border-color: var(--border-color, #8a8c8f);
40
+ }
41
+ }
42
+ }
43
+
44
+ .RadioLabel {
45
+ @include labelMedium;
46
+ color: var(--color, #8a8c8f);
47
+
48
+ &:hover {
49
+ color: var(--hover-color, #b1916b);
50
+ }
51
+
52
+ &.checked {
53
+ @include bodyRegularSmall;
54
+ }
55
+
56
+ &.disabled,
57
+ &.readOnly {
58
+ color: var(--color, #8a8c8f);
59
+ }
60
+ }
61
+ }
@@ -0,0 +1,174 @@
1
+ /* eslint-disable react-refresh/only-export-components */
2
+ import React from "react";
3
+ import styles from "./Radio.module.scss";
4
+ import cn from "classnames/bind";
5
+ import {
6
+ initialState,
7
+ RadioContext,
8
+ RadioProviderProps,
9
+ } from "./Radio.context";
10
+ import HelperTextComponent from "../../HelperText/HelperText";
11
+ import useRadioColors from "./Radio.colors";
12
+
13
+ const cx = cn.bind(styles);
14
+
15
+ type AsProps = {
16
+ checked: boolean;
17
+ value?: string;
18
+ className?: string;
19
+ id?: string;
20
+ };
21
+
22
+ type TriggerProps = React.PropsWithChildren<{
23
+ as?: (props: AsProps) => React.ReactNode;
24
+ className?: string;
25
+ checkedClassName?: string;
26
+ }>;
27
+
28
+ const Trigger = (props: TriggerProps) => {
29
+ const { as, className, checkedClassName } = props;
30
+ const { value, checked, name, id, disabled, readOnly, onChange } =
31
+ React.useContext(RadioContext);
32
+
33
+ const colorSet = useRadioColors();
34
+ const variant = React.useMemo(
35
+ () => (checked ? "selected" : "unselected"),
36
+ [checked]
37
+ );
38
+
39
+ return as ? (
40
+ <React.Fragment>
41
+ <input
42
+ id={id}
43
+ name={name}
44
+ type="radio"
45
+ checked={checked}
46
+ hidden
47
+ value={value}
48
+ onChange={onChange}
49
+ />
50
+ {as({ checked, value, className, id })}
51
+ </React.Fragment>
52
+ ) : (
53
+ <div className={cx("RadioTrigger", className)}>
54
+ <input
55
+ id={id}
56
+ name={name}
57
+ type="radio"
58
+ checked={checked}
59
+ hidden
60
+ onChange={onChange}
61
+ value={value}
62
+ />
63
+ <div
64
+ className={cx("RadioIcon", {
65
+ [checkedClassName ? checkedClassName : "checked"]: checked,
66
+ disabled,
67
+ readOnly,
68
+ })}
69
+ style={{
70
+ "--border-color": disabled
71
+ ? colorSet[variant].disabled.borderColor
72
+ : colorSet[variant].borderColor,
73
+ "--background-color": disabled
74
+ ? colorSet[variant].disabled.backgroundColor
75
+ : colorSet[variant].backgroundColor,
76
+ "--hover-border-color": colorSet[variant].hover.borderColor,
77
+ }}
78
+ >
79
+ {checked && <div className={cx("RadioInner")} />}
80
+ </div>
81
+ </div>
82
+ );
83
+ };
84
+
85
+ const HelperText = (
86
+ props: React.ComponentProps<typeof HelperTextComponent>
87
+ ) => {
88
+ const { status } = React.useContext(RadioContext);
89
+ return <HelperTextComponent {...props} status={status} />;
90
+ };
91
+
92
+ type LabelProps = React.PropsWithChildren<{
93
+ className?: string;
94
+ checkedColor?: string;
95
+ }>;
96
+
97
+ const Label = (props: LabelProps) => {
98
+ const { className, checkedColor, children } = props;
99
+ const { checked, disabled, readOnly } = React.useContext(RadioContext);
100
+ const colorSet = useRadioColors();
101
+ const variant = React.useMemo(
102
+ () => (checked ? "selected" : "unselected"),
103
+ [checked]
104
+ );
105
+
106
+ return (
107
+ <span
108
+ className={cx("RadioLabel", className, {
109
+ checked,
110
+ disabled,
111
+ readOnly,
112
+ })}
113
+ style={{
114
+ "--color":
115
+ checkedColor ?? disabled
116
+ ? colorSet[variant].disabled.color
117
+ : colorSet[variant].color,
118
+ "--hover-color": colorSet[variant].hover.color,
119
+ }}
120
+ >
121
+ {children}
122
+ </span>
123
+ );
124
+ };
125
+
126
+ const Root = (props: RadioProviderProps) => {
127
+ const { id, value, className } = props;
128
+
129
+ const onChange = React.useCallback(
130
+ (e: React.ChangeEvent<HTMLInputElement>) => {
131
+ if (props.disabled || props.readOnly) {
132
+ return false;
133
+ }
134
+
135
+ props.onChange?.(e.target.id);
136
+ },
137
+ [props]
138
+ );
139
+
140
+ const checkedValue = id === value;
141
+
142
+ const ContextValue = React.useMemo(
143
+ () => ({
144
+ ...initialState,
145
+ ...props,
146
+ id: id ?? "",
147
+ checked: checkedValue,
148
+ onChange,
149
+ }),
150
+ [props, id, checkedValue, onChange]
151
+ );
152
+
153
+ return (
154
+ <RadioContext value={ContextValue}>
155
+ <label htmlFor={id} className={cx("RadioRoot", className)}>
156
+ {props.children}
157
+ </label>
158
+ </RadioContext>
159
+ );
160
+ };
161
+
162
+ interface IRadioInput {
163
+ Root: typeof Root;
164
+ Trigger: typeof Trigger;
165
+ Label: typeof Label;
166
+ HelperText: typeof HelperText;
167
+ }
168
+
169
+ export default {
170
+ Root,
171
+ Trigger,
172
+ Label,
173
+ HelperText,
174
+ } as IRadioInput;
@@ -0,0 +1,42 @@
1
+ import { colorThemes as colorSet } from "@/styles/color2";
2
+
3
+ const useSwitchColors = () => {
4
+ const selected = {
5
+ backgroundColor: colorSet.primary.pMain,
6
+ color: `var(--textPrimary, ${colorSet.light.textPrimary})`,
7
+ borderColor: "transparent",
8
+ hover: {
9
+ backgroundColor: colorSet.primary.pDark,
10
+ color: `var(--textPrimary, ${colorSet.light.textPrimary})`,
11
+ borderColor: "transparent",
12
+ },
13
+ disabled: {
14
+ backgroundColor: `var(--actionDisabled, ${colorSet.light.actionDisabled})`,
15
+ color: `var(--textDisabled, ${colorSet.light.textDisabled})`,
16
+ borderColor: "transparent",
17
+ },
18
+ };
19
+
20
+ const unselected = {
21
+ backgroundColor: `var(--textTertiary, ${colorSet.light.textTertiary})`,
22
+ color: `var(--textSecondary, ${colorSet.light.textSecondary})`,
23
+ borderColor: "transparent",
24
+ hover: {
25
+ backgroundColor: `var(--textSecondary, ${colorSet.light.textSecondary})`,
26
+ color: `var(--textSecondary, ${colorSet.light.textSecondary})`,
27
+ borderColor: "transparent",
28
+ },
29
+ disabled: {
30
+ backgroundColor: `var(--actionDisabled, ${colorSet.light.actionDisabled})`,
31
+ color: `var(--textDisabled, ${colorSet.light.textDisabled})`,
32
+ borderColor: "transparent",
33
+ },
34
+ };
35
+
36
+ return {
37
+ selected,
38
+ unselected,
39
+ };
40
+ };
41
+
42
+ export default useSwitchColors;
@@ -0,0 +1,50 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ import React from "react";
3
+
4
+ type SwitchStatus = "error" | "warning" | "success" | undefined;
5
+
6
+ type SwitchContextType = {
7
+ /** input value */
8
+ value?: boolean;
9
+ /** onChange */
10
+ onChange?: (...args: any) => void;
11
+ /** name */
12
+ name?: string;
13
+ /** Disabled */
14
+ disabled?: boolean;
15
+ /** readOnly */
16
+ readOnly?: boolean;
17
+ /** status */
18
+ status?: SwitchStatus;
19
+ /** size */
20
+ size?: "small" | "medium" | "large";
21
+ };
22
+
23
+ const initialState: SwitchContextType = {
24
+ value: false,
25
+ onChange: () => {},
26
+ name: "",
27
+ disabled: false,
28
+ readOnly: false,
29
+ size: "small",
30
+ };
31
+
32
+ export const SwitchContext =
33
+ React.createContext<SwitchContextType>(initialState);
34
+
35
+ export type SwitchProviderProps = React.PropsWithChildren<
36
+ Partial<Omit<SwitchContextType, "">>
37
+ > & {
38
+ className?: string;
39
+ };
40
+
41
+ export const SwitchProvider: React.FC<SwitchProviderProps> = ({
42
+ children,
43
+ ...props
44
+ }) => {
45
+ return (
46
+ <SwitchContext.Provider value={{ ...initialState, ...props }}>
47
+ {children}
48
+ </SwitchContext.Provider>
49
+ );
50
+ };
@@ -0,0 +1,53 @@
1
+ .SwitchWrapper {
2
+ // display: flex;
3
+ display: inline-flex;
4
+ align-items: center;
5
+ padding: 8px;
6
+ height: 64px;
7
+ background-color: var(--background-color, #e1e3e7);
8
+ min-width: 148px;
9
+ border-radius: 64px;
10
+ transition: background-color 0.3s;
11
+
12
+ &.small {
13
+ height: 32px;
14
+ min-width: 96px;
15
+ }
16
+
17
+ &.medium {
18
+ height: 48px;
19
+ min-width: 120px;
20
+ }
21
+
22
+ .SwitchInput {
23
+ display: none;
24
+ }
25
+
26
+ .SwitchInput:checked + .SwitchBullet {
27
+ margin-left: 100%;
28
+ transform: translateX(-100%);
29
+ }
30
+
31
+ .SwitchBullet {
32
+ height: 85%;
33
+ aspect-ratio: 1 /1;
34
+ background-color: #ffffff;
35
+ border-radius: 50%;
36
+ transition: all 0.3s;
37
+ box-shadow: 0 0 4px rgba(0, 0, 0, 0.1);
38
+ }
39
+ }
40
+
41
+ .SwitchLabel {
42
+ @include labelMedium;
43
+ color: var(--color, #8a8c8f);
44
+
45
+ &.checked {
46
+ @include bodyRegularSmall;
47
+ }
48
+ }
49
+
50
+ .SwitchRoot {
51
+ display: flex;
52
+ flex-direction: column;
53
+ }
@@ -0,0 +1,151 @@
1
+ import React from "react";
2
+ import styles from "./Switch.module.scss";
3
+ import cn from "classnames/bind";
4
+ import {
5
+ SwitchContext,
6
+ SwitchProvider,
7
+ SwitchProviderProps,
8
+ } from "./Switch.context";
9
+ import useSwitchColors from "./Switch.colors";
10
+
11
+ const cx = cn.bind(styles);
12
+
13
+ type AsProps = {
14
+ checked?: boolean;
15
+ value?: boolean;
16
+ className?: string;
17
+ id?: string;
18
+ };
19
+
20
+ type TriggerProps = React.PropsWithChildren<{
21
+ as?: (props: AsProps) => React.ReactNode;
22
+ className?: string;
23
+ wrapperClassName?: string;
24
+ bulletClassName?: string;
25
+ }>;
26
+
27
+ const Trigger = (props: TriggerProps) => {
28
+ const { as, className, wrapperClassName, bulletClassName } = props;
29
+ const { value, onChange, name, size, disabled } =
30
+ React.useContext(SwitchContext);
31
+
32
+ const colorSet = useSwitchColors();
33
+ const variant = React.useMemo(
34
+ () => (value ? "selected" : "unselected"),
35
+ [value]
36
+ );
37
+
38
+ return as ? (
39
+ <React.Fragment>
40
+ <input
41
+ name={name}
42
+ type="checkbox"
43
+ checked={value}
44
+ hidden
45
+ value={value ? "on" : "off"}
46
+ id={name}
47
+ onChange={onChange}
48
+ />
49
+ {as({ checked: value, value, className, id: name })}
50
+ </React.Fragment>
51
+ ) : (
52
+ <div
53
+ className={cx("SwitchWrapper", size, wrapperClassName, {
54
+ checked: !!value,
55
+ })}
56
+ style={{
57
+ "--background-color": disabled
58
+ ? colorSet[variant].disabled.backgroundColor
59
+ : colorSet[variant].backgroundColor,
60
+ }}
61
+ >
62
+ <input
63
+ type={"checkbox"}
64
+ className={cx("SwitchInput")}
65
+ checked={value}
66
+ name={name}
67
+ value={value ? "on" : "off"}
68
+ id={name}
69
+ onChange={onChange}
70
+ />
71
+ <div
72
+ className={cx("SwitchBullet", bulletClassName, { checked: !!value })}
73
+ style={{
74
+ backgroundColor: value ? "#fff" : undefined,
75
+ // backgroundColor: value ? colorSet?.tintColor : undefined,
76
+ }}
77
+ ></div>
78
+ </div>
79
+ );
80
+ };
81
+
82
+ type LabelProps = React.PropsWithChildren<{
83
+ className?: string;
84
+ checkedColor?: string;
85
+ }>;
86
+
87
+ const Label = (props: LabelProps) => {
88
+ const { className, checkedColor, children } = props;
89
+ const { value, disabled } = React.useContext(SwitchContext);
90
+
91
+ const colorSet = useSwitchColors();
92
+ const variant = React.useMemo(
93
+ () => (value ? "selected" : "unselected"),
94
+ [value]
95
+ );
96
+
97
+ return (
98
+ <span
99
+ className={cx("SwitchLabel", className, {
100
+ checked: value,
101
+ })}
102
+ style={{
103
+ "--color":
104
+ checkedColor ?? disabled
105
+ ? colorSet[variant].disabled.color
106
+ : colorSet[variant].color,
107
+ }}
108
+ >
109
+ {children}
110
+ </span>
111
+ );
112
+ };
113
+
114
+ const Root = (props: SwitchProviderProps) => {
115
+ const { name, value, className, size = "small" } = props;
116
+
117
+ const onChange = (e: React.ChangeEvent<HTMLInputElement>) => {
118
+ if (props.disabled) {
119
+ return false;
120
+ }
121
+
122
+ props.onChange?.(e.target.checked);
123
+ e.stopPropagation();
124
+ };
125
+
126
+ return (
127
+ <SwitchProvider
128
+ {...{
129
+ ...props,
130
+ onChange,
131
+ value,
132
+ }}
133
+ >
134
+ <label htmlFor={name} className={cx("SwitchRoot", size, className)}>
135
+ {props.children}
136
+ </label>
137
+ </SwitchProvider>
138
+ );
139
+ };
140
+
141
+ interface ISwitch {
142
+ Root: typeof Root;
143
+ Label: typeof Label;
144
+ Trigger: typeof Trigger;
145
+ }
146
+
147
+ export default {
148
+ Root,
149
+ Label,
150
+ Trigger,
151
+ } as ISwitch;
@@ -0,0 +1,76 @@
1
+ import { colorThemes as colorSet } from "../../../styles/color2";
2
+
3
+ const useTextAreaColors = () => {
4
+ const outlined = {
5
+ inactive: {
6
+ backgroundColor: "transparent",
7
+ color: `var(--textPrimary, ${colorSet.light.textPrimary})`,
8
+ placeholder: `var(--textTertiary, ${colorSet.light.textTertiary})`,
9
+ borderColor: `var(--componentTextfieldOutline, ${colorSet.light.componentTextfieldOutline})`,
10
+ },
11
+ focused: {
12
+ backgroundColor: "transparent",
13
+ color: `var(--textPrimary, ${colorSet.light.textPrimary})`,
14
+ placeholder: `var(--textTertiary, ${colorSet.light.textTertiary})`,
15
+ borderColor: `var(--actionAction, ${colorSet.light.actionAction})`,
16
+ },
17
+ readOnly: {
18
+ backgroundColor: "transparent",
19
+ color: `var(--textPrimary, ${colorSet.light.textPrimary})`,
20
+ placeholder: `var(--textTertiary, ${colorSet.light.textTertiary})`,
21
+ borderColor: `var(--componentTextfieldOutline, ${colorSet.light.componentTextfieldOutline})`,
22
+ },
23
+ disabled: {
24
+ backgroundColor: `var(--actionDisabledBackground, ${colorSet.light.actionDisabledBackground})`,
25
+ color: `var(--textDisabled, ${colorSet.light.textDisabled})`,
26
+ placeholder: `var(--textDisabled, ${colorSet.light.textDisabled})`,
27
+ borderColor: `var(--componentTextfieldOutline, ${colorSet.light.componentTextfieldOutline})`,
28
+ },
29
+ error: {
30
+ backgroundColor: "transparent",
31
+ color: `var(--textError, ${colorSet.light.textError})`,
32
+ placeholder: `var(--textError, ${colorSet.light.textError})`,
33
+ borderColor: `var(--componentTextfieldOutline, ${colorSet.light.componentTextfieldOutline})`,
34
+ },
35
+ };
36
+
37
+ const contained = {
38
+ inactive: {
39
+ backgroundColor: `var(--componentTextfieldFilled, ${colorSet.light.componentTextfieldFilled})`,
40
+ color: `var(--textPrimary, ${colorSet.light.textPrimary})`,
41
+ placeholder: `var(--textTertiary, ${colorSet.light.textTertiary})`,
42
+ borderColor: "transparent",
43
+ },
44
+ focused: {
45
+ backgroundColor: `var(--componentTextfieldFilled, ${colorSet.light.componentTextfieldFilled})`,
46
+ color: `var(--textPrimary, ${colorSet.light.textPrimary})`,
47
+ placeholder: `var(--textTertiary, ${colorSet.light.textTertiary})`,
48
+ borderColor: `var(--actionAction, ${colorSet.light.actionAction})`,
49
+ },
50
+ readOnly: {
51
+ backgroundColor: `var(--componentTextfieldFilled, ${colorSet.light.componentTextfieldFilled})`,
52
+ color: `var(--textPrimary, ${colorSet.light.textPrimary})`,
53
+ placeholder: `var(--textTertiary, ${colorSet.light.textTertiary})`,
54
+ borderColor: "transparent",
55
+ },
56
+ disabled: {
57
+ backgroundColor: `var(--actionDisabledBackground, ${colorSet.light.actionDisabledBackground})`,
58
+ color: `var(--textDisabled, ${colorSet.light.textDisabled})`,
59
+ placeholder: `var(--textDisabled, ${colorSet.light.textDisabled})`,
60
+ borderColor: "transparent",
61
+ },
62
+ error: {
63
+ backgroundColor: `var(--componentTextfieldFilled, ${colorSet.light.componentTextfieldFilled})`,
64
+ color: `var(--textError, ${colorSet.light.textError})`,
65
+ placeholder: `var(--textError, ${colorSet.light.textError})`,
66
+ borderColor: "transparent",
67
+ },
68
+ };
69
+
70
+ return {
71
+ outlined,
72
+ contained,
73
+ };
74
+ };
75
+
76
+ export default useTextAreaColors;
@@ -0,0 +1,97 @@
1
+ /* eslint-disable react-refresh/only-export-components */
2
+ import React from "react";
3
+
4
+ type Variant = "contained" | "outlined";
5
+
6
+ type InputStatus = "error" | "warning" | "success" | undefined;
7
+
8
+ type TextAreaContextType = {
9
+ /** value */
10
+ value: string;
11
+ /** onChange */
12
+ onChange: (...args: any) => void;
13
+ /** placeholder */
14
+ placeholder: string;
15
+ /** rows */
16
+ rows: number;
17
+ /** disabled */
18
+ disabled: boolean;
19
+ /** variant */
20
+ variant: Variant;
21
+ /** readOnly */
22
+ readOnly: boolean;
23
+ /** name */
24
+ name: string;
25
+ /** focused */
26
+ focused: boolean;
27
+ /** onFocus */
28
+ onFocus?: (...args: any) => void;
29
+ /** onBlur */
30
+ onBlur?: (...args: any) => void;
31
+ /** status */
32
+ status?: InputStatus;
33
+ /** focused color */
34
+ focusedColor?: string;
35
+ /** input Ref */
36
+ _inputRef?: React.RefObject<HTMLTextAreaElement | null>;
37
+ /** maxLength */
38
+ maxLength?: number;
39
+ /** maxRow */
40
+ maxRows?: number;
41
+ /** accentType */
42
+ accentType?: "in" | "out" | "all";
43
+ };
44
+
45
+ const initialState: TextAreaContextType = {
46
+ value: "",
47
+ onChange: () => {},
48
+ placeholder: "",
49
+ rows: 3,
50
+ disabled: false,
51
+ variant: "outlined",
52
+ readOnly: false,
53
+ name: "",
54
+ focused: false,
55
+ onFocus: () => {},
56
+ onBlur: () => {},
57
+ maxLength: undefined,
58
+ focusedColor: "var(--Simentic-Outline, #636567)",
59
+ accentType: "in",
60
+ };
61
+
62
+ export const TextAreaContext =
63
+ React.createContext<TextAreaContextType>(initialState);
64
+
65
+ export type TextAreaProviderProps = React.PropsWithChildren<
66
+ Partial<TextAreaContextType>
67
+ > & {
68
+ className?: string;
69
+ };
70
+
71
+ export const TextAreaProvider: React.FC<TextAreaProviderProps> = ({
72
+ children,
73
+ ...rest
74
+ }) => {
75
+ const [focused, setFocused] = React.useState(false);
76
+ const _inputRef = React.useRef<HTMLTextAreaElement>(null);
77
+ return (
78
+ <TextAreaContext
79
+ value={{
80
+ ...initialState,
81
+ ...rest,
82
+ _inputRef,
83
+ focused,
84
+ onFocus: (e: any) => {
85
+ setFocused(true);
86
+ rest.onFocus?.call(null, e);
87
+ },
88
+ onBlur: (e: any) => {
89
+ setFocused(false);
90
+ rest.onBlur?.call(null, e);
91
+ },
92
+ }}
93
+ >
94
+ {children}
95
+ </TextAreaContext>
96
+ );
97
+ };