@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,138 @@
1
+ @layer TextArea {
2
+ .TextAreaTextCount {
3
+ position: absolute;
4
+ bottom: 8px;
5
+ right: 8px;
6
+ @include captionRegularSmall;
7
+ color: var(--textDisabled, #c4cdd5);
8
+
9
+ z-index: 10;
10
+ }
11
+
12
+ .TextAreaLabel {
13
+ @include bodyRegularSmall;
14
+ color: var(--textSecondary, #637381);
15
+
16
+ &.error {
17
+ color: var(--error-color, var(--textError, #f5222d));
18
+ }
19
+
20
+ &.success {
21
+ color: var(--success-color, var(--textSuccess, #1cc95c));
22
+ }
23
+
24
+ &.warning {
25
+ color: var(--warning-color, var(--textWarning, #ffab00));
26
+ }
27
+ }
28
+
29
+ .TextAreaComponentWrapper {
30
+ position: relative;
31
+ display: flex;
32
+ border: 1px solid var(--border-color, var(--Gray-Gray80, #b1b3b7));
33
+ border-radius: 8px;
34
+ background-color: var(--background-color, transparent);
35
+
36
+ textarea {
37
+ border: none;
38
+ background: none;
39
+ resize: none;
40
+ outline: none;
41
+ font: inherit;
42
+ color: var(--color, var(--textPrimary, #000000));
43
+
44
+ &::placeholder {
45
+ color: var(--placeholder-color, var(--textTertiary, #8e8e93));
46
+ font: inherit;
47
+ }
48
+ }
49
+
50
+ .TextAreaInput {
51
+ padding: 8px 16px;
52
+ flex: 1;
53
+ align-self: stretch;
54
+ @include bodyRegularSmall;
55
+ }
56
+
57
+ &.success {
58
+ &.out,
59
+ &.all {
60
+ border-color: var(--success-color, var(--Simentic-Success, #4caf50));
61
+ }
62
+ }
63
+
64
+ &.warning {
65
+ &.out,
66
+ &.all {
67
+ border-color: var(--warning-color, var(--Simentic-Warning, #e9a802));
68
+ }
69
+ }
70
+
71
+ &.contained {
72
+ background-color: var(--background-color, var(--Simentic-Surface, #edeff2));
73
+
74
+ textarea {
75
+ &::placeholder {
76
+ color: var(--placeholder-color, var(--Simentic-On-Surface-Variant, #505254));
77
+ font: inherit;
78
+ }
79
+ }
80
+ }
81
+
82
+ &.error {
83
+ &.out,
84
+ &.all {
85
+ border-color: var(--error-color, var(--Simentic-Error, #d32f2f));
86
+ }
87
+
88
+ &.in,
89
+ &.all {
90
+ textarea {
91
+ color: var(--error-color, var(--Simentic-Error, #d32f2f));
92
+
93
+ &::placeholder {
94
+ color: var(--error-color, var(--Simentic-Error, #d32f2f)) !important;
95
+ }
96
+ }
97
+ }
98
+ }
99
+
100
+ &.focused {
101
+ &.out,
102
+ &.all {
103
+ border-color: var(--border-color);
104
+ }
105
+ }
106
+
107
+ &.disabled {
108
+ &.in,
109
+ &.out,
110
+ &.all {
111
+ &.outlined {
112
+ border-color: var(--componentTextfieldOutline, #919eab3d);
113
+ }
114
+
115
+ &.contained {
116
+ border-color: transparent;
117
+ }
118
+
119
+ textarea {
120
+ color: var(--disabled-color, var(--Simentic-SurfContainer-Highest, #d0d2d5));
121
+
122
+ &::placeholder {
123
+ color: var(--disabled-color, var(--Simentic-SurfContainer-Highest, #d0d2d5)) !important;
124
+ }
125
+ }
126
+ }
127
+ }
128
+ }
129
+
130
+ .TextAreaClone {
131
+ position: absolute;
132
+ padding-top: 0;
133
+ padding-bottom: 0;
134
+ visibility: hidden;
135
+ opacity: 0;
136
+ z-index: -1;
137
+ }
138
+ }
@@ -0,0 +1,246 @@
1
+ /* eslint-disable react-refresh/only-export-components */
2
+ import React from "react";
3
+ import cn from "classnames/bind";
4
+ import styles from "./TextArea.module.scss";
5
+ import HelperTextComponent from "../../HelperText/HelperText";
6
+ import {
7
+ TextAreaProviderProps,
8
+ TextAreaContext,
9
+ TextAreaProvider,
10
+ } from "./TextArea.context";
11
+ import { Icon } from "../../../components/Icon/Icon";
12
+ import useTextAreaColors from "./TextArea.colors";
13
+
14
+ const cx = cn.bind(styles);
15
+
16
+ type TextCountProps = React.PropsWithChildren<{
17
+ className?: string;
18
+ }>;
19
+ const TextCount = (props: TextCountProps) => {
20
+ const { className } = props;
21
+ const { value, maxLength } = React.useContext(TextAreaContext);
22
+
23
+ return (
24
+ <span className={cx("TextAreaTextCount", className)}>
25
+ {value.length}/{maxLength}
26
+ </span>
27
+ );
28
+ };
29
+
30
+ type EraseProps = React.PropsWithChildren<{
31
+ className?: string;
32
+ }>;
33
+
34
+ const Erase = (props: EraseProps) => {
35
+ const { children, className } = props;
36
+ const { onChange, _inputRef } = React.useContext(TextAreaContext);
37
+
38
+ const handleClick = () => {
39
+ if (_inputRef?.current) {
40
+ _inputRef.current.value = "";
41
+ }
42
+
43
+ onChange?.({
44
+ target: { value: "" },
45
+ } as React.ChangeEvent<HTMLInputElement>);
46
+ };
47
+
48
+ return (
49
+ <button onClick={handleClick} className={cx("TextAreaErase", className)}>
50
+ {children ?? <Icon name={"CancleFilled"} size={16} />}
51
+ </button>
52
+ );
53
+ };
54
+
55
+ const HelperText = (
56
+ props: React.ComponentProps<typeof HelperTextComponent>
57
+ ) => {
58
+ const { status } = React.useContext(TextAreaContext);
59
+ return <HelperTextComponent {...props} status={status} />;
60
+ };
61
+
62
+ type InputProps = React.PropsWithChildren<
63
+ React.HTMLProps<HTMLTextAreaElement>
64
+ > & {
65
+ wrapperClassName?: string;
66
+ placeholderColor?: string;
67
+ focusedColor?: string;
68
+ containedBackgroundColor?: string;
69
+ disabledColor?: string;
70
+ maxRows?: number;
71
+ };
72
+
73
+ const Input = (props: InputProps) => {
74
+ const {
75
+ children,
76
+ wrapperClassName,
77
+ placeholderColor,
78
+ containedBackgroundColor,
79
+ disabledColor,
80
+ ...rest
81
+ } = props;
82
+ const _cloneRef = React.useRef<HTMLTextAreaElement>(null);
83
+
84
+ const {
85
+ readOnly,
86
+ disabled,
87
+ variant,
88
+ focused,
89
+ name,
90
+ onFocus,
91
+ onBlur,
92
+ status,
93
+ placeholder,
94
+ focusedColor,
95
+ _inputRef,
96
+ value,
97
+ onChange,
98
+ rows,
99
+ maxRows,
100
+ accentType,
101
+ } = React.useContext(TextAreaContext);
102
+
103
+ const textAreaColors = useTextAreaColors();
104
+ const colorSet = textAreaColors[variant];
105
+
106
+ const isFocused =
107
+ !(props.readOnly ?? readOnly) &&
108
+ !(props.disabled ?? disabled) &&
109
+ (focused || value.length > 0) &&
110
+ status !== "error";
111
+
112
+ React.useEffect(() => {
113
+ const elem = _inputRef?.current;
114
+ const cloneElem = _cloneRef.current;
115
+
116
+ const handleInput = () => {
117
+ if (!elem || !cloneElem) return;
118
+
119
+ const val = elem.value;
120
+ cloneElem.value = val;
121
+
122
+ elem.rows = Math.min(
123
+ Math.max(
124
+ Math.ceil(cloneElem.scrollHeight / cloneElem.clientHeight),
125
+ rows
126
+ ),
127
+ props.maxRows ?? maxRows ?? rows
128
+ );
129
+ };
130
+
131
+ if (elem) elem.addEventListener("input", handleInput);
132
+
133
+ return () => {
134
+ if (elem) elem.removeEventListener("input", handleInput);
135
+ };
136
+ }, [_inputRef, maxRows, props.maxRows, rows]);
137
+
138
+ return (
139
+ <div
140
+ className={cx(
141
+ "TextAreaComponentWrapper",
142
+ variant,
143
+ status,
144
+ accentType,
145
+ wrapperClassName,
146
+ {
147
+ focused: isFocused,
148
+ disabled: props.disabled ?? disabled,
149
+ readOnly: props.readOnly ?? readOnly,
150
+ }
151
+ )}
152
+ style={{
153
+ "--background-color": disabled
154
+ ? containedBackgroundColor ?? colorSet.disabled.backgroundColor
155
+ : colorSet.inactive.backgroundColor,
156
+ "--border-color": isFocused
157
+ ? props.focusedColor ?? focusedColor ?? colorSet.focused.borderColor
158
+ : status === "error"
159
+ ? colorSet.error.borderColor
160
+ : colorSet.inactive.borderColor,
161
+ }}
162
+ >
163
+ <textarea
164
+ className={cx("TextAreaClone")}
165
+ rows={1}
166
+ ref={_cloneRef}
167
+ readOnly
168
+ />
169
+ <textarea
170
+ {...rest}
171
+ className={cx("TextAreaInput")}
172
+ rows={props.rows ?? rows}
173
+ disabled={props.disabled ?? disabled}
174
+ readOnly={props.readOnly ?? readOnly}
175
+ name={name}
176
+ id={props.id ?? props.name ?? name}
177
+ onFocus={props.onFocus ?? onFocus}
178
+ onBlur={props.onBlur ?? onBlur}
179
+ value={value}
180
+ onChange={props.onChange ?? onChange}
181
+ ref={_inputRef}
182
+ placeholder={props.placeholder ?? placeholder}
183
+ style={{
184
+ "--placeholder-color":
185
+ placeholderColor ?? colorSet.inactive.placeholder,
186
+ "--focused-color": focusedColor ?? colorSet.focused.borderColor,
187
+ "--disabled-color": disabledColor ?? colorSet.disabled.color,
188
+ "--error-color": colorSet.error.color,
189
+ }}
190
+ ></textarea>
191
+ {children}
192
+ </div>
193
+ );
194
+ };
195
+
196
+ type LabelProps = React.PropsWithChildren<{
197
+ className?: string;
198
+ focusedColor?: string;
199
+ }>;
200
+
201
+ const Label = (props: LabelProps) => {
202
+ const { className, children, focusedColor } = props;
203
+ const { focused, status } = React.useContext(TextAreaContext);
204
+
205
+ return (
206
+ <span
207
+ className={cx("TextAreaLabel", className, status, {
208
+ focused,
209
+ })}
210
+ style={{
211
+ color: focused ? focusedColor : undefined,
212
+ }}
213
+ >
214
+ {children}
215
+ </span>
216
+ );
217
+ };
218
+
219
+ const Root = (props: TextAreaProviderProps) => {
220
+ const { name, className } = props;
221
+ return (
222
+ <TextAreaProvider {...props}>
223
+ <label htmlFor={name} className={cx("TextAreaRoot", className)}>
224
+ {props.children}
225
+ </label>
226
+ </TextAreaProvider>
227
+ );
228
+ };
229
+
230
+ interface ITextArea {
231
+ Root: typeof Root;
232
+ Label: typeof Label;
233
+ HelperText: typeof HelperText;
234
+ Erase: typeof Erase;
235
+ Input: typeof Input;
236
+ TextCount: typeof TextCount;
237
+ }
238
+
239
+ export default {
240
+ Root,
241
+ Label,
242
+ HelperText,
243
+ Erase,
244
+ Input,
245
+ TextCount,
246
+ } as ITextArea;
@@ -0,0 +1,76 @@
1
+ import { colorThemes as colorSet } from "../../../styles/color2";
2
+
3
+ const useTextInputColors = () => {
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 useTextInputColors;
@@ -0,0 +1,106 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ import React from "react";
3
+
4
+ type InputSize = "medium" | "large";
5
+
6
+ type InputType = "text" | "password" | "email";
7
+
8
+ type Variant = "contained" | "outlined";
9
+
10
+ type InputStatus = "error" | "warning" | "success" | undefined;
11
+
12
+ type Direction = "column" | "row";
13
+
14
+ type TextInputContextType = {
15
+ /** input value */
16
+ value: string;
17
+ /** onChange */
18
+ onChange?: (...args: any) => void;
19
+ /** placeholder */
20
+ placeholder?: string;
21
+ /** size */
22
+ size?: InputSize;
23
+ /** contained */
24
+ variant?: Variant;
25
+ /** Disabled */
26
+ disabled?: boolean;
27
+ /** readOnly */
28
+ readOnly?: boolean;
29
+ /** type */
30
+ type?: InputType;
31
+ /** name */
32
+ name?: string;
33
+ /** required */
34
+ required?: boolean;
35
+ /** focused */
36
+ focused?: boolean;
37
+ /** onFocus */
38
+ onFocus?: (...args: any) => void;
39
+ /** onBlur */
40
+ onBlur?: (...args: any) => void;
41
+ /** status */
42
+ status?: InputStatus;
43
+ /** focused color */
44
+ focusedColor?: string;
45
+ /** input Ref */
46
+ _inputRef?: React.RefObject<HTMLInputElement | null>;
47
+ /** direction */
48
+ direction?: Direction;
49
+ /** flex basis */
50
+ flexBasis?: string;
51
+ /** accent type */
52
+ accentType?: "in" | "out" | "all";
53
+ };
54
+
55
+ const initialState: TextInputContextType = {
56
+ value: "",
57
+ onChange: () => {},
58
+ placeholder: "",
59
+ size: "medium",
60
+ variant: "outlined",
61
+ disabled: false,
62
+ readOnly: false,
63
+ type: "text",
64
+ name: "",
65
+ required: false,
66
+ focused: false,
67
+ onFocus: () => {},
68
+ onBlur: () => {},
69
+ focusedColor: "var(--Simentic-Outline, #636567)",
70
+ accentType: "in",
71
+ };
72
+
73
+ export const TextInputContext =
74
+ React.createContext<TextInputContextType>(initialState);
75
+
76
+ export type TextInputProviderProps = React.PropsWithChildren<
77
+ Partial<Omit<TextInputContextType, "">>
78
+ > & {
79
+ className?: string;
80
+ };
81
+
82
+ export const TextInputProvider = (props: TextInputProviderProps) => {
83
+ const [focused, setFocused] = React.useState(false);
84
+ const _inputRef = React.useRef<HTMLInputElement>(null);
85
+
86
+ const contextValue = React.useMemo(() => {
87
+ return {
88
+ ...initialState,
89
+ ...props,
90
+ focused,
91
+ _inputRef,
92
+ onFocus: (e: any) => {
93
+ setFocused(true);
94
+ props.onFocus?.call(null, e);
95
+ },
96
+ onBlur: (e: any) => {
97
+ setFocused(false);
98
+ props.onBlur?.call(null, e);
99
+ },
100
+ };
101
+ }, [focused, props]);
102
+
103
+ return (
104
+ <TextInputContext value={contextValue}>{props.children}</TextInputContext>
105
+ );
106
+ };