feat: Refactor TextArea component and styles for improved usability and consistency

- Updated textarea styles to utilize CSS variables for dimensions and padding.
- Enhanced placeholder styling and added disabled state styles.
- Refactored TextArea component to use forwardRef and updated status handling.
- Changed input statuses from 'normal' to 'default' for better clarity.
- Introduced global decimal separator management in CurrencyService.
- Updated tests to cover new decimal separator functionality.
- Cleaned up global CSS for better organization and readability.
- Removed deprecated rc-component dependencies in favor of @rc-component packages.
This commit is contained in:
Firman Ramdhani
2026-01-27 19:47:06 +07:00
parent 0deaff6e18
commit 1e1d46cbb5
18 changed files with 942 additions and 712 deletions
+97 -103
View File
@@ -158,24 +158,24 @@ importers:
packages/ui:
dependencies:
'@rc-component/form':
specifier: ^1.6.2
version: 1.6.2(react-dom@19.2.3)(react@19.2.3)
'@rc-component/input':
specifier: ^1.1.2
version: 1.1.2(react-dom@19.2.3)(react@19.2.3)
'@rc-component/input-number':
specifier: ^1.6.2
version: 1.6.2(react-dom@19.2.3)(react@19.2.3)
'@rc-component/textarea':
specifier: ^1.1.2
version: 1.1.2(react-dom@19.2.3)(react@19.2.3)
'@repo/utils':
specifier: workspace:*
version: link:../utils
'@tailwindcss/vite':
specifier: ^4.1.18
version: 4.1.18(vite@5.4.17)
rc-field-form:
specifier: ^2.7.1
version: 2.7.1(react-dom@19.2.3)(react@19.2.3)
rc-input:
specifier: ^1.8.0
version: 1.8.0(react-dom@19.2.3)(react@19.2.3)
rc-input-number:
specifier: ^9.5.0
version: 9.5.0(react-dom@19.2.3)(react@19.2.3)
rc-textarea:
specifier: ^1.10.2
version: 1.10.2(react-dom@19.2.3)(react@19.2.3)
react:
specifier: ^19.2.3
version: 19.2.3
@@ -1145,6 +1145,45 @@ packages:
'@babel/runtime': 7.28.4
dev: false
/@rc-component/form@1.6.2(react-dom@19.2.3)(react@19.2.3):
resolution: {integrity: sha512-OgIn2RAoaSBqaIgzJf/X6iflIa9LpTozci1lagLBdURDFhGA370v0+T0tXxOi8YShMjTha531sFhwtnrv+EJaQ==}
engines: {node: '>=8.x'}
peerDependencies:
react: '>=16.9.0'
react-dom: '>=16.9.0'
dependencies:
'@rc-component/async-validator': 5.1.0
'@rc-component/util': 1.7.0(react-dom@19.2.3)(react@19.2.3)
clsx: 2.1.1
react: 19.2.3
react-dom: 19.2.3(react@19.2.3)
dev: false
/@rc-component/input-number@1.6.2(react-dom@19.2.3)(react@19.2.3):
resolution: {integrity: sha512-Gjcq7meZlCOiWN1t1xCC+7/s85humHVokTBI7PJgTfoyw5OWF74y3e6P8PHX104g9+b54jsodFIzyaj6p8LI9w==}
peerDependencies:
react: '>=16.9.0'
react-dom: '>=16.9.0'
dependencies:
'@rc-component/mini-decimal': 1.1.0
'@rc-component/util': 1.7.0(react-dom@19.2.3)(react@19.2.3)
clsx: 2.1.1
react: 19.2.3
react-dom: 19.2.3(react@19.2.3)
dev: false
/@rc-component/input@1.1.2(react-dom@19.2.3)(react@19.2.3):
resolution: {integrity: sha512-Q61IMR47piUBudgixJ30CciKIy9b1H95qe7GgEKOmSJVJXvFRWJllJfQry9tif+MX2cWFXWJf/RXz4kaCeq/Fg==}
peerDependencies:
react: '>=16.0.0'
react-dom: '>=16.0.0'
dependencies:
'@rc-component/util': 1.7.0(react-dom@19.2.3)(react@19.2.3)
clsx: 2.1.1
react: 19.2.3
react-dom: 19.2.3(react@19.2.3)
dev: false
/@rc-component/mini-decimal@1.1.0:
resolution: {integrity: sha512-jS4E7T9Li2GuYwI6PyiVXmxTiM6b07rlD9Ge8uGZSCz3WlzcG5ZK7g5bbuKNeZ9pgUuPK/5guV781ujdVpm4HQ==}
engines: {node: '>=8.x'}
@@ -1152,6 +1191,43 @@ packages:
'@babel/runtime': 7.28.4
dev: false
/@rc-component/resize-observer@1.1.1(react-dom@19.2.3)(react@19.2.3):
resolution: {integrity: sha512-NfXXMmiR+SmUuKE1NwJESzEUYUFWIDUn2uXpxCTOLwiRUUakd62DRNFjRJArgzyFW8S5rsL4aX5XlyIXyC/vRA==}
peerDependencies:
react: '>=16.9.0'
react-dom: '>=16.9.0'
dependencies:
'@rc-component/util': 1.7.0(react-dom@19.2.3)(react@19.2.3)
react: 19.2.3
react-dom: 19.2.3(react@19.2.3)
dev: false
/@rc-component/textarea@1.1.2(react-dom@19.2.3)(react@19.2.3):
resolution: {integrity: sha512-9rMUEODWZDMovfScIEHXWlVZuPljZ2pd1LKNjslJVitn4SldEzq5vO1CL3yy3Dnib6zZal2r2DPtjy84VVpF6A==}
peerDependencies:
react: '>=16.9.0'
react-dom: '>=16.9.0'
dependencies:
'@rc-component/input': 1.1.2(react-dom@19.2.3)(react@19.2.3)
'@rc-component/resize-observer': 1.1.1(react-dom@19.2.3)(react@19.2.3)
'@rc-component/util': 1.7.0(react-dom@19.2.3)(react@19.2.3)
clsx: 2.1.1
react: 19.2.3
react-dom: 19.2.3(react@19.2.3)
dev: false
/@rc-component/util@1.7.0(react-dom@19.2.3)(react@19.2.3):
resolution: {integrity: sha512-tIvIGj4Vl6fsZFvWSkYw9sAfiCKUXMyhVz6kpKyZbwyZyRPqv2vxYZROdaO1VB4gqTNvUZFXh6i3APUiterw5g==}
peerDependencies:
react: '>=18.0.0'
react-dom: '>=18.0.0'
dependencies:
is-mobile: 5.0.0
react: 19.2.3
react-dom: 19.2.3(react@19.2.3)
react-is: 18.3.1
dev: false
/@rolldown/pluginutils@1.0.0-beta.53:
resolution: {integrity: sha512-vENRlFU4YbrwVqNDZ7fLvy+JR1CRkyr01jhSiDpE1u6py3OMzQfztQU2jxykW3ALNxO4kSlqIDeYyD0Y9RcQeQ==}
dev: true
@@ -3195,10 +3271,6 @@ packages:
engines: {node: '>=8'}
dev: false
/classnames@2.5.1:
resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==}
dev: false
/clean-regexp@1.0.0:
resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==}
engines: {node: '>=4'}
@@ -3220,6 +3292,11 @@ packages:
is-wsl: 2.2.0
dev: true
/clsx@2.1.1:
resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
engines: {node: '>=6'}
dev: false
/color-convert@2.0.1:
resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
engines: {node: '>=7.0.0'}
@@ -4738,6 +4815,10 @@ packages:
engines: {node: '>= 0.4'}
dev: false
/is-mobile@5.0.0:
resolution: {integrity: sha512-Tz/yndySvLAEXh+Uk8liFCxOwVH6YutuR74utvOcu7I9Di+DwM0mtdPVZNaVvvBUM2OXxne/NhOs1zAO7riusQ==}
dev: false
/is-negative-zero@2.0.3:
resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==}
engines: {node: '>= 0.4'}
@@ -6055,89 +6136,6 @@ packages:
engines: {node: '>= 0.6'}
dev: true
/rc-field-form@2.7.1(react-dom@19.2.3)(react@19.2.3):
resolution: {integrity: sha512-vKeSifSJ6HoLaAB+B8aq/Qgm8a3dyxROzCtKNCsBQgiverpc4kWDQihoUwzUj+zNWJOykwSY4dNX3QrGwtVb9A==}
engines: {node: '>=8.x'}
peerDependencies:
react: '>=16.9.0'
react-dom: '>=16.9.0'
dependencies:
'@babel/runtime': 7.28.4
'@rc-component/async-validator': 5.1.0
rc-util: 5.44.4(react-dom@19.2.3)(react@19.2.3)
react: 19.2.3
react-dom: 19.2.3(react@19.2.3)
dev: false
/rc-input-number@9.5.0(react-dom@19.2.3)(react@19.2.3):
resolution: {integrity: sha512-bKaEvB5tHebUURAEXw35LDcnRZLq3x1k7GxfAqBMzmpHkDGzjAtnUL8y4y5N15rIFIg5IJgwr211jInl3cipag==}
peerDependencies:
react: '>=16.9.0'
react-dom: '>=16.9.0'
dependencies:
'@babel/runtime': 7.28.4
'@rc-component/mini-decimal': 1.1.0
classnames: 2.5.1
rc-input: 1.8.0(react-dom@19.2.3)(react@19.2.3)
rc-util: 5.44.4(react-dom@19.2.3)(react@19.2.3)
react: 19.2.3
react-dom: 19.2.3(react@19.2.3)
dev: false
/rc-input@1.8.0(react-dom@19.2.3)(react@19.2.3):
resolution: {integrity: sha512-KXvaTbX+7ha8a/k+eg6SYRVERK0NddX8QX7a7AnRvUa/rEH0CNMlpcBzBkhI0wp2C8C4HlMoYl8TImSN+fuHKA==}
peerDependencies:
react: '>=16.0.0'
react-dom: '>=16.0.0'
dependencies:
'@babel/runtime': 7.28.4
classnames: 2.5.1
rc-util: 5.44.4(react-dom@19.2.3)(react@19.2.3)
react: 19.2.3
react-dom: 19.2.3(react@19.2.3)
dev: false
/rc-resize-observer@1.4.3(react-dom@19.2.3)(react@19.2.3):
resolution: {integrity: sha512-YZLjUbyIWox8E9i9C3Tm7ia+W7euPItNWSPX5sCcQTYbnwDb5uNpnLHQCG1f22oZWUhLw4Mv2tFmeWe68CDQRQ==}
peerDependencies:
react: '>=16.9.0'
react-dom: '>=16.9.0'
dependencies:
'@babel/runtime': 7.28.4
classnames: 2.5.1
rc-util: 5.44.4(react-dom@19.2.3)(react@19.2.3)
react: 19.2.3
react-dom: 19.2.3(react@19.2.3)
resize-observer-polyfill: 1.5.1
dev: false
/rc-textarea@1.10.2(react-dom@19.2.3)(react@19.2.3):
resolution: {integrity: sha512-HfaeXiaSlpiSp0I/pvWpecFEHpVysZ9tpDLNkxQbMvMz6gsr7aVZ7FpWP9kt4t7DB+jJXesYS0us1uPZnlRnwQ==}
peerDependencies:
react: '>=16.9.0'
react-dom: '>=16.9.0'
dependencies:
'@babel/runtime': 7.28.4
classnames: 2.5.1
rc-input: 1.8.0(react-dom@19.2.3)(react@19.2.3)
rc-resize-observer: 1.4.3(react-dom@19.2.3)(react@19.2.3)
rc-util: 5.44.4(react-dom@19.2.3)(react@19.2.3)
react: 19.2.3
react-dom: 19.2.3(react@19.2.3)
dev: false
/rc-util@5.44.4(react-dom@19.2.3)(react@19.2.3):
resolution: {integrity: sha512-resueRJzmHG9Q6rI/DfK6Kdv9/Lfls05vzMs1Sk3M2P+3cJa+MakaZyWY8IPfehVuhPJFKrIY1IK4GqbiaiY5w==}
peerDependencies:
react: '>=16.9.0'
react-dom: '>=16.9.0'
dependencies:
'@babel/runtime': 7.28.4
react: 19.2.3
react-dom: 19.2.3(react@19.2.3)
react-is: 18.3.1
dev: false
/rc@1.2.8:
resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==}
hasBin: true
@@ -6364,10 +6362,6 @@ packages:
engines: {node: '>=0.10.5'}
dev: false
/resize-observer-polyfill@1.5.1:
resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==}
dev: false
/resolve-from@4.0.0:
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
engines: {node: '>=4'}