rsuite 6.0.0-canary-2025032014 → 6.0.0-canary-20250416

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 (484) hide show
  1. package/AutoComplete/styles/index.css +112 -62
  2. package/AutoComplete/styles/index.less +1 -1
  3. package/Box/styles/index.css +12 -0
  4. package/CHANGELOG.md +24 -0
  5. package/Calendar/styles/index.css +11 -9
  6. package/Calendar/styles/index.less +3 -1
  7. package/Cascader/styles/index.css +112 -62
  8. package/CheckPicker/styles/index.css +112 -62
  9. package/CheckPicker/styles/index.less +1 -1
  10. package/CheckTree/styles/index.css +113 -63
  11. package/CheckTree/styles/index.less +1 -1
  12. package/CheckTreePicker/styles/index.css +113 -63
  13. package/DateInput/styles/index.css +0 -7
  14. package/DatePicker/styles/index.css +122 -74
  15. package/DatePicker/styles/index.less +5 -11
  16. package/DateRangeInput/styles/index.css +0 -7
  17. package/DateRangePicker/styles/index.css +132 -78
  18. package/DateRangePicker/styles/index.less +10 -4
  19. package/Divider/styles/index.css +2 -2
  20. package/Divider/styles/index.less +2 -2
  21. package/Grid/styles/columns.less +1 -2
  22. package/Grid/styles/grid-framework.less +1 -0
  23. package/Grid/styles/index.css +9 -4
  24. package/Grid/styles/row.less +2 -2
  25. package/Input/styles/index.css +0 -7
  26. package/Input/styles/index.less +0 -6
  27. package/Input/styles/mixin.less +0 -4
  28. package/InputGroup/styles/index.css +1 -1
  29. package/InputGroup/styles/index.less +1 -1
  30. package/InputNumber/styles/index.css +1 -8
  31. package/InputPicker/styles/index.css +121 -70
  32. package/InputPicker/styles/index.less +4 -4
  33. package/Link/package.json +7 -0
  34. package/Link/styles/index.css +32 -0
  35. package/Link/styles/index.less +39 -0
  36. package/Message/styles/index.css +9 -0
  37. package/Message/styles/index.less +11 -0
  38. package/MultiCascadeTree/styles/index.css +112 -62
  39. package/MultiCascader/styles/index.css +112 -62
  40. package/Nav/styles/index.css +1 -0
  41. package/Nav/styles/index.less +1 -0
  42. package/Pagination/styles/index.css +114 -64
  43. package/PasswordInput/package.json +7 -0
  44. package/PasswordInput/styles/index.css +172 -0
  45. package/PasswordInput/styles/index.less +1 -0
  46. package/PasswordStrengthMeter/package.json +7 -0
  47. package/PasswordStrengthMeter/styles/index.css +33 -0
  48. package/PasswordStrengthMeter/styles/index.less +39 -0
  49. package/README.md +3 -3
  50. package/RadioGroup/styles/index.css +1 -0
  51. package/RadioGroup/styles/index.less +1 -0
  52. package/RangeSlider/styles/index.css +76 -43
  53. package/Rate/styles/index.css +48 -34
  54. package/Rate/styles/index.less +32 -21
  55. package/SelectPicker/styles/index.css +112 -62
  56. package/SelectPicker/styles/index.less +1 -1
  57. package/Slider/styles/index.css +76 -43
  58. package/Slider/styles/index.less +95 -48
  59. package/Tabs/styles/index.css +1 -0
  60. package/TagInput/styles/index.css +152 -91
  61. package/TagInput/styles/index.less +1 -1
  62. package/TagPicker/styles/index.css +151 -90
  63. package/TagPicker/styles/index.less +52 -41
  64. package/Textarea/package.json +7 -0
  65. package/Textarea/styles/index.css +6 -0
  66. package/Textarea/styles/index.less +7 -0
  67. package/TimePicker/styles/index.css +122 -74
  68. package/TimeRangePicker/styles/index.css +132 -78
  69. package/Toggle/styles/index.css +146 -87
  70. package/Toggle/styles/index.less +66 -38
  71. package/Tree/styles/index.css +113 -63
  72. package/Tree/styles/index.less +1 -1
  73. package/TreePicker/styles/index.css +113 -63
  74. package/cjs/AutoComplete/AutoComplete.d.ts +1 -1
  75. package/cjs/AutoComplete/AutoComplete.js +13 -11
  76. package/cjs/Avatar/Avatar.d.ts +3 -4
  77. package/cjs/Breadcrumb/Breadcrumb.js +2 -2
  78. package/cjs/Breadcrumb/BreadcrumbItem.js +1 -1
  79. package/cjs/Button/Button.js +9 -10
  80. package/cjs/Calendar/CalendarProvider.js +0 -0
  81. package/cjs/Calendar/hooks/useCalendar.js +0 -0
  82. package/cjs/Carousel/Carousel.js +2 -2
  83. package/cjs/Cascader/Cascader.js +42 -45
  84. package/cjs/Cascader/useActive.d.ts +6 -4
  85. package/cjs/Cascader/useActive.js +10 -8
  86. package/cjs/CheckPicker/CheckPicker.js +38 -41
  87. package/cjs/CheckTreePicker/CheckTreePicker.js +20 -22
  88. package/cjs/CustomProvider/CustomProvider.d.ts +1 -4
  89. package/cjs/CustomProvider/types.d.ts +10 -2
  90. package/cjs/DatePicker/DatePicker.d.ts +1 -1
  91. package/cjs/DatePicker/DatePicker.js +28 -25
  92. package/cjs/DatePicker/utils.d.ts +3 -3
  93. package/cjs/DatePicker/utils.js +3 -3
  94. package/cjs/DateRangePicker/DateRangePicker.js +39 -33
  95. package/cjs/DateRangePicker/utils.js +0 -0
  96. package/cjs/Divider/Divider.d.ts +3 -2
  97. package/cjs/Divider/Divider.js +2 -2
  98. package/cjs/Form/hooks/useFormValidate.js +0 -0
  99. package/cjs/Form/hooks/useSchemaModel.js +2 -54
  100. package/cjs/Form/utils/constructFlatSchema.d.ts +4 -0
  101. package/cjs/Form/utils/constructFlatSchema.js +41 -0
  102. package/cjs/FormControl/hooks/useField.js +0 -0
  103. package/cjs/FormControl/utils.js +0 -0
  104. package/cjs/Grid/Row.d.ts +2 -2
  105. package/cjs/Grid/Row.js +2 -20
  106. package/cjs/Grid/types.d.ts +1 -0
  107. package/cjs/Grid/utils/styles.d.ts +6 -0
  108. package/cjs/Grid/utils/styles.js +43 -0
  109. package/cjs/Image/Image.js +12 -11
  110. package/cjs/Image/hooks/useImage.d.ts +2 -0
  111. package/cjs/Image/hooks/useImage.js +19 -43
  112. package/cjs/InlineEdit/InlineEdit.js +3 -1
  113. package/cjs/InlineEdit/useEditState.d.ts +2 -0
  114. package/cjs/InlineEdit/useEditState.js +8 -0
  115. package/cjs/Input/Input.d.ts +3 -12
  116. package/cjs/Input/Input.js +12 -73
  117. package/cjs/InputPicker/InputPicker.js +27 -28
  118. package/cjs/Link/ExternalLinkIcon.d.ts +3 -0
  119. package/cjs/Link/ExternalLinkIcon.js +23 -0
  120. package/cjs/Link/Link.d.ts +14 -0
  121. package/cjs/Link/Link.js +52 -0
  122. package/cjs/Link/index.d.ts +4 -0
  123. package/cjs/Link/index.js +11 -0
  124. package/cjs/List/List.js +6 -2
  125. package/cjs/List/helper/useSortHelper.d.ts +7 -5
  126. package/cjs/List/helper/useSortHelper.js +109 -16
  127. package/cjs/List/helper/utils.js +14 -6
  128. package/cjs/MultiCascader/MultiCascader.js +40 -43
  129. package/cjs/Nav/NavItem.js +1 -1
  130. package/cjs/Nav/NavMegaMenu.d.ts +5 -0
  131. package/cjs/Nav/NavMegaMenu.js +5 -0
  132. package/cjs/Navbar/NavbarItem.js +1 -1
  133. package/cjs/Navbar/NavbarMegaMenu.js +1 -1
  134. package/cjs/PasswordInput/PasswordInput.d.ts +14 -0
  135. package/cjs/PasswordInput/PasswordInput.js +71 -0
  136. package/cjs/PasswordInput/index.d.ts +4 -0
  137. package/cjs/PasswordInput/index.js +11 -0
  138. package/cjs/PasswordStrengthMeter/PasswordStrengthMeter.d.ts +12 -0
  139. package/cjs/PasswordStrengthMeter/PasswordStrengthMeter.js +50 -0
  140. package/cjs/PasswordStrengthMeter/index.d.ts +4 -0
  141. package/cjs/PasswordStrengthMeter/index.js +11 -0
  142. package/cjs/RangeSlider/RangeSlider.js +18 -3
  143. package/cjs/Rate/Character.d.ts +4 -3
  144. package/cjs/Rate/Character.js +19 -15
  145. package/cjs/Rate/Rate.d.ts +10 -2
  146. package/cjs/Rate/Rate.js +47 -42
  147. package/cjs/Rate/types.d.ts +8 -0
  148. package/cjs/Rate/types.js +4 -0
  149. package/cjs/Rate/useRatingStates.d.ts +20 -0
  150. package/cjs/Rate/useRatingStates.js +48 -0
  151. package/cjs/Rate/utils.d.ts +14 -3
  152. package/cjs/Rate/utils.js +50 -9
  153. package/cjs/SelectPicker/SelectPicker.js +45 -46
  154. package/cjs/Sidenav/ExpandedSidenavDropdownItem.js +1 -1
  155. package/cjs/Sidenav/SidenavItem.js +1 -1
  156. package/cjs/Slider/Graduated.d.ts +4 -0
  157. package/cjs/Slider/Graduated.js +43 -20
  158. package/cjs/Slider/Handle.d.ts +1 -1
  159. package/cjs/Slider/Handle.js +12 -12
  160. package/cjs/Slider/Slider.d.ts +16 -1
  161. package/cjs/Slider/Slider.js +7 -2
  162. package/cjs/Slider/useDrag.d.ts +1 -0
  163. package/cjs/Slider/useDrag.js +8 -3
  164. package/cjs/Steps/Steps.js +2 -2
  165. package/cjs/Tabs/Tabs.js +2 -2
  166. package/cjs/Textarea/Textarea.d.ts +32 -0
  167. package/cjs/Textarea/Textarea.js +51 -0
  168. package/cjs/Textarea/index.d.ts +4 -0
  169. package/cjs/Textarea/index.js +11 -0
  170. package/cjs/Timeline/Timeline.js +2 -2
  171. package/cjs/Toggle/Toggle.d.ts +10 -1
  172. package/cjs/Toggle/Toggle.js +12 -9
  173. package/cjs/TreePicker/TreePicker.js +18 -19
  174. package/cjs/index.d.ts +4 -1
  175. package/cjs/index.js +24 -6
  176. package/cjs/internals/Box/Box.d.ts +4 -0
  177. package/cjs/internals/Box/Box.js +1 -1
  178. package/cjs/internals/Box/utils.js +5 -1
  179. package/cjs/internals/InputBase/InputBase.d.ts +45 -0
  180. package/cjs/internals/InputBase/InputBase.js +96 -0
  181. package/cjs/internals/InputBase/index.d.ts +3 -0
  182. package/cjs/internals/InputBase/index.js +8 -0
  183. package/cjs/internals/Overlay/Modal.d.ts +1 -1
  184. package/cjs/internals/Overlay/OverlayTrigger.d.ts +4 -3
  185. package/cjs/internals/Overlay/OverlayTrigger.js +8 -3
  186. package/cjs/internals/Picker/Listbox.js +7 -9
  187. package/cjs/internals/Picker/PickerDrawer.d.ts +8 -0
  188. package/cjs/internals/Picker/PickerDrawer.js +31 -0
  189. package/cjs/internals/Picker/PickerPopup.js +5 -3
  190. package/cjs/internals/Picker/PickerToggle.d.ts +1 -0
  191. package/cjs/internals/Picker/PickerToggle.js +10 -3
  192. package/cjs/internals/Picker/PickerToggleTrigger.d.ts +51 -11
  193. package/cjs/internals/Picker/PickerToggleTrigger.js +59 -13
  194. package/cjs/internals/Picker/hooks/index.d.ts +0 -1
  195. package/cjs/internals/Picker/hooks/index.js +2 -4
  196. package/cjs/internals/Picker/hooks/useCombobox.d.ts +1 -0
  197. package/cjs/internals/Picker/hooks/useCombobox.js +3 -1
  198. package/cjs/internals/Picker/index.d.ts +1 -2
  199. package/cjs/internals/Picker/index.js +10 -12
  200. package/{esm → cjs/internals}/SafeAnchor/SafeAnchor.d.ts +2 -2
  201. package/cjs/{SafeAnchor → internals/SafeAnchor}/SafeAnchor.js +3 -3
  202. package/cjs/internals/Tree/TreeView.js +3 -4
  203. package/cjs/internals/hooks/useRootClose.js +4 -4
  204. package/cjs/internals/index.d.ts +4 -0
  205. package/cjs/internals/index.js +13 -1
  206. package/cjs/internals/types/html.d.ts +2 -0
  207. package/cjs/internals/utils/{dom.d.ts → html/dom.d.ts} +1 -0
  208. package/cjs/internals/utils/{dom.js → html/dom.js} +8 -0
  209. package/cjs/internals/utils/{events.js → html/events.js} +0 -0
  210. package/cjs/internals/utils/{htmlPropsUtils.js → html/htmlPropsUtils.js} +0 -0
  211. package/cjs/internals/utils/html/index.d.ts +4 -0
  212. package/cjs/internals/utils/html/index.js +28 -0
  213. package/cjs/internals/utils/{safeSetSelection.js → html/safeSetSelection.js} +1 -1
  214. package/cjs/internals/utils/index.d.ts +3 -15
  215. package/cjs/internals/utils/index.js +20 -49
  216. package/cjs/internals/utils/{ReactChildren.d.ts → react/ReactChildren.d.ts} +2 -8
  217. package/cjs/internals/utils/{ReactChildren.js → react/ReactChildren.js} +5 -25
  218. package/cjs/internals/utils/react/ReactIs.d.ts +7 -0
  219. package/cjs/internals/utils/react/ReactIs.js +26 -0
  220. package/{esm/internals/utils → cjs/internals/utils/react}/createComponent.d.ts +2 -2
  221. package/cjs/internals/utils/{createComponent.js → react/createComponent.js} +3 -3
  222. package/cjs/internals/utils/{deprecateComponent.js → react/deprecateComponent.js} +1 -1
  223. package/cjs/internals/utils/{forwardRef.d.ts → react/forwardRef.d.ts} +1 -1
  224. package/cjs/internals/utils/react/index.d.ts +7 -0
  225. package/cjs/internals/utils/react/index.js +46 -0
  226. package/cjs/internals/utils/{mergeRefs.js → react/mergeRefs.js} +0 -0
  227. package/cjs/internals/utils/{getStringLength.d.ts → string/getStringLength.d.ts} +0 -1
  228. package/cjs/internals/utils/{getStringLength.js → string/getStringLength.js} +1 -3
  229. package/cjs/internals/utils/string/index.d.ts +4 -0
  230. package/cjs/internals/utils/string/index.js +28 -0
  231. package/cjs/internals/utils/{stringifyReactNode.js → string/stringifyReactNode.js} +0 -0
  232. package/cjs/internals/utils/{tplTransform.js → string/tplTransform.js} +0 -0
  233. package/cjs/locales/en_GB.js +2 -2
  234. package/cjs/locales/en_US.js +2 -2
  235. package/cjs/locales/index.js +0 -0
  236. package/cjs/locales/pl_PL.js +2 -3
  237. package/cjs/useBreakpointValue/useBreakpointValue.d.ts +6 -2
  238. package/cjs/useBreakpointValue/useBreakpointValue.js +9 -4
  239. package/cjs/useMediaQuery/breakpoints.d.ts +24 -0
  240. package/cjs/useMediaQuery/breakpoints.js +248 -0
  241. package/cjs/useMediaQuery/index.d.ts +1 -1
  242. package/cjs/useMediaQuery/types.d.ts +45 -0
  243. package/cjs/useMediaQuery/types.js +4 -0
  244. package/cjs/useMediaQuery/useMediaQuery.d.ts +4 -13
  245. package/cjs/useMediaQuery/useMediaQuery.js +30 -12
  246. package/cjs/useToaster/useToaster.d.ts +1 -1
  247. package/cjs/useToaster/useToaster.js +1 -1
  248. package/dist/rsuite-no-reset-rtl.css +565 -276
  249. package/dist/rsuite-no-reset-rtl.min.css +1 -1
  250. package/dist/rsuite-no-reset-rtl.min.css.map +1 -1
  251. package/dist/rsuite-no-reset.css +565 -276
  252. package/dist/rsuite-no-reset.min.css +1 -1
  253. package/dist/rsuite-no-reset.min.css.map +1 -1
  254. package/dist/rsuite-rtl.css +565 -276
  255. package/dist/rsuite-rtl.min.css +1 -1
  256. package/dist/rsuite-rtl.min.css.map +1 -1
  257. package/dist/rsuite.css +565 -276
  258. package/dist/rsuite.js +508 -211
  259. package/dist/rsuite.js.map +1 -1
  260. package/dist/rsuite.min.css +1 -1
  261. package/dist/rsuite.min.css.map +1 -1
  262. package/dist/rsuite.min.js +1 -1
  263. package/dist/rsuite.min.js.map +1 -1
  264. package/esm/AutoComplete/AutoComplete.d.ts +1 -1
  265. package/esm/AutoComplete/AutoComplete.js +13 -11
  266. package/esm/Avatar/Avatar.d.ts +3 -4
  267. package/esm/Breadcrumb/Breadcrumb.js +3 -3
  268. package/esm/Breadcrumb/BreadcrumbItem.js +1 -1
  269. package/esm/Button/Button.js +10 -11
  270. package/esm/Calendar/CalendarProvider.js +0 -0
  271. package/esm/Calendar/hooks/useCalendar.js +0 -0
  272. package/esm/Carousel/Carousel.js +3 -3
  273. package/esm/Cascader/Cascader.js +43 -46
  274. package/esm/Cascader/useActive.d.ts +6 -4
  275. package/esm/Cascader/useActive.js +10 -8
  276. package/esm/CheckPicker/CheckPicker.js +39 -42
  277. package/esm/CheckTreePicker/CheckTreePicker.js +21 -23
  278. package/esm/CustomProvider/CustomProvider.d.ts +1 -4
  279. package/esm/CustomProvider/types.d.ts +10 -2
  280. package/esm/DatePicker/DatePicker.d.ts +1 -1
  281. package/esm/DatePicker/DatePicker.js +29 -26
  282. package/esm/DatePicker/utils.d.ts +3 -3
  283. package/esm/DatePicker/utils.js +4 -4
  284. package/esm/DateRangePicker/DateRangePicker.js +35 -29
  285. package/esm/DateRangePicker/utils.js +0 -0
  286. package/esm/Divider/Divider.d.ts +3 -2
  287. package/esm/Divider/Divider.js +2 -2
  288. package/esm/Form/hooks/useFormValidate.js +0 -0
  289. package/esm/Form/hooks/useSchemaModel.js +3 -55
  290. package/esm/Form/utils/constructFlatSchema.d.ts +4 -0
  291. package/esm/Form/utils/constructFlatSchema.js +37 -0
  292. package/esm/FormControl/hooks/useField.js +0 -0
  293. package/esm/FormControl/utils.js +0 -0
  294. package/esm/Grid/Row.d.ts +2 -2
  295. package/esm/Grid/Row.js +2 -20
  296. package/esm/Grid/types.d.ts +1 -0
  297. package/esm/Grid/utils/styles.d.ts +6 -0
  298. package/esm/Grid/utils/styles.js +37 -0
  299. package/esm/Image/Image.js +12 -11
  300. package/esm/Image/hooks/useImage.d.ts +2 -0
  301. package/esm/Image/hooks/useImage.js +20 -43
  302. package/esm/InlineEdit/InlineEdit.js +3 -1
  303. package/esm/InlineEdit/useEditState.d.ts +2 -0
  304. package/esm/InlineEdit/useEditState.js +8 -0
  305. package/esm/Input/Input.d.ts +3 -12
  306. package/esm/Input/Input.js +12 -74
  307. package/esm/InputPicker/InputPicker.js +28 -29
  308. package/esm/Link/ExternalLinkIcon.d.ts +3 -0
  309. package/esm/Link/ExternalLinkIcon.js +18 -0
  310. package/esm/Link/Link.d.ts +14 -0
  311. package/esm/Link/Link.js +47 -0
  312. package/esm/Link/index.d.ts +4 -0
  313. package/esm/Link/index.js +8 -0
  314. package/esm/List/List.js +6 -2
  315. package/esm/List/helper/useSortHelper.d.ts +7 -5
  316. package/esm/List/helper/useSortHelper.js +109 -16
  317. package/esm/List/helper/utils.js +14 -6
  318. package/esm/MultiCascader/MultiCascader.js +41 -44
  319. package/esm/Nav/NavItem.js +1 -1
  320. package/esm/Nav/NavMegaMenu.d.ts +5 -0
  321. package/esm/Nav/NavMegaMenu.js +5 -0
  322. package/esm/Navbar/NavbarItem.js +1 -1
  323. package/esm/Navbar/NavbarMegaMenu.js +1 -1
  324. package/esm/PasswordInput/PasswordInput.d.ts +14 -0
  325. package/esm/PasswordInput/PasswordInput.js +66 -0
  326. package/esm/PasswordInput/index.d.ts +4 -0
  327. package/esm/PasswordInput/index.js +8 -0
  328. package/esm/PasswordStrengthMeter/PasswordStrengthMeter.d.ts +12 -0
  329. package/esm/PasswordStrengthMeter/PasswordStrengthMeter.js +45 -0
  330. package/esm/PasswordStrengthMeter/index.d.ts +4 -0
  331. package/esm/PasswordStrengthMeter/index.js +8 -0
  332. package/esm/RangeSlider/RangeSlider.js +18 -3
  333. package/esm/Rate/Character.d.ts +4 -3
  334. package/esm/Rate/Character.js +20 -16
  335. package/esm/Rate/Rate.d.ts +10 -2
  336. package/esm/Rate/Rate.js +49 -42
  337. package/esm/Rate/types.d.ts +8 -0
  338. package/esm/Rate/types.js +2 -0
  339. package/esm/Rate/useRatingStates.d.ts +20 -0
  340. package/esm/Rate/useRatingStates.js +43 -0
  341. package/esm/Rate/utils.d.ts +14 -3
  342. package/esm/Rate/utils.js +46 -7
  343. package/esm/SelectPicker/SelectPicker.js +46 -47
  344. package/esm/Sidenav/ExpandedSidenavDropdownItem.js +1 -1
  345. package/esm/Sidenav/SidenavItem.js +1 -1
  346. package/esm/Slider/Graduated.d.ts +4 -0
  347. package/esm/Slider/Graduated.js +43 -20
  348. package/esm/Slider/Handle.d.ts +1 -1
  349. package/esm/Slider/Handle.js +12 -12
  350. package/esm/Slider/Slider.d.ts +16 -1
  351. package/esm/Slider/Slider.js +7 -2
  352. package/esm/Slider/useDrag.d.ts +1 -0
  353. package/esm/Slider/useDrag.js +8 -3
  354. package/esm/Steps/Steps.js +3 -3
  355. package/esm/Tabs/Tabs.js +3 -3
  356. package/esm/Textarea/Textarea.d.ts +32 -0
  357. package/esm/Textarea/Textarea.js +46 -0
  358. package/esm/Textarea/index.d.ts +4 -0
  359. package/esm/Textarea/index.js +8 -0
  360. package/esm/Timeline/Timeline.js +3 -3
  361. package/esm/Toggle/Toggle.d.ts +10 -1
  362. package/esm/Toggle/Toggle.js +12 -9
  363. package/esm/TreePicker/TreePicker.js +19 -20
  364. package/esm/index.d.ts +4 -1
  365. package/esm/index.js +4 -1
  366. package/esm/internals/Box/Box.d.ts +4 -0
  367. package/esm/internals/Box/Box.js +1 -1
  368. package/esm/internals/Box/utils.js +5 -1
  369. package/esm/internals/InputBase/InputBase.d.ts +45 -0
  370. package/esm/internals/InputBase/InputBase.js +89 -0
  371. package/esm/internals/InputBase/index.d.ts +3 -0
  372. package/esm/internals/InputBase/index.js +3 -0
  373. package/esm/internals/Overlay/Modal.d.ts +1 -1
  374. package/esm/internals/Overlay/OverlayTrigger.d.ts +4 -3
  375. package/esm/internals/Overlay/OverlayTrigger.js +8 -2
  376. package/esm/internals/Picker/Listbox.js +8 -10
  377. package/esm/internals/Picker/PickerDrawer.d.ts +8 -0
  378. package/esm/internals/Picker/PickerDrawer.js +26 -0
  379. package/esm/internals/Picker/PickerPopup.js +5 -3
  380. package/esm/internals/Picker/PickerToggle.d.ts +1 -0
  381. package/esm/internals/Picker/PickerToggle.js +10 -3
  382. package/esm/internals/Picker/PickerToggleTrigger.d.ts +51 -11
  383. package/esm/internals/Picker/PickerToggleTrigger.js +59 -12
  384. package/esm/internals/Picker/hooks/index.d.ts +0 -1
  385. package/esm/internals/Picker/hooks/index.js +1 -2
  386. package/esm/internals/Picker/hooks/useCombobox.d.ts +1 -0
  387. package/esm/internals/Picker/hooks/useCombobox.js +3 -1
  388. package/esm/internals/Picker/index.d.ts +1 -2
  389. package/esm/internals/Picker/index.js +1 -2
  390. package/{cjs → esm/internals}/SafeAnchor/SafeAnchor.d.ts +2 -2
  391. package/esm/{SafeAnchor → internals/SafeAnchor}/SafeAnchor.js +3 -3
  392. package/esm/internals/Tree/TreeView.js +4 -5
  393. package/esm/internals/hooks/useRootClose.js +1 -1
  394. package/esm/internals/index.d.ts +4 -0
  395. package/esm/internals/index.js +5 -0
  396. package/esm/internals/types/html.d.ts +2 -0
  397. package/esm/internals/utils/{dom.d.ts → html/dom.d.ts} +1 -0
  398. package/esm/internals/utils/{dom.js → html/dom.js} +7 -0
  399. package/esm/internals/utils/{events.js → html/events.js} +0 -0
  400. package/esm/internals/utils/{htmlPropsUtils.js → html/htmlPropsUtils.js} +0 -0
  401. package/esm/internals/utils/html/index.d.ts +4 -0
  402. package/esm/internals/utils/html/index.js +5 -0
  403. package/esm/internals/utils/{safeSetSelection.js → html/safeSetSelection.js} +1 -1
  404. package/esm/internals/utils/index.d.ts +3 -15
  405. package/esm/internals/utils/index.js +3 -14
  406. package/esm/internals/utils/{ReactChildren.d.ts → react/ReactChildren.d.ts} +2 -8
  407. package/esm/internals/utils/{ReactChildren.js → react/ReactChildren.js} +3 -21
  408. package/esm/internals/utils/react/ReactIs.d.ts +7 -0
  409. package/esm/internals/utils/react/ReactIs.js +22 -0
  410. package/{cjs/internals/utils → esm/internals/utils/react}/createComponent.d.ts +2 -2
  411. package/esm/internals/utils/{createComponent.js → react/createComponent.js} +3 -3
  412. package/esm/internals/utils/{deprecateComponent.js → react/deprecateComponent.js} +1 -1
  413. package/esm/internals/utils/{forwardRef.d.ts → react/forwardRef.d.ts} +1 -1
  414. package/esm/internals/utils/react/index.d.ts +7 -0
  415. package/esm/internals/utils/react/index.js +8 -0
  416. package/esm/internals/utils/{mergeRefs.js → react/mergeRefs.js} +0 -0
  417. package/esm/internals/utils/{getStringLength.d.ts → string/getStringLength.d.ts} +0 -1
  418. package/esm/internals/utils/{getStringLength.js → string/getStringLength.js} +1 -2
  419. package/esm/internals/utils/string/index.d.ts +4 -0
  420. package/esm/internals/utils/string/index.js +5 -0
  421. package/esm/internals/utils/{stringifyReactNode.js → string/stringifyReactNode.js} +0 -0
  422. package/esm/internals/utils/{tplTransform.js → string/tplTransform.js} +0 -0
  423. package/esm/locales/en_GB.js +2 -2
  424. package/esm/locales/en_US.js +2 -2
  425. package/esm/locales/index.js +0 -0
  426. package/esm/locales/pl_PL.js +1 -1
  427. package/esm/useBreakpointValue/useBreakpointValue.d.ts +6 -2
  428. package/esm/useBreakpointValue/useBreakpointValue.js +9 -4
  429. package/esm/useMediaQuery/breakpoints.d.ts +24 -0
  430. package/esm/useMediaQuery/breakpoints.js +244 -0
  431. package/esm/useMediaQuery/index.d.ts +1 -1
  432. package/esm/useMediaQuery/types.d.ts +45 -0
  433. package/esm/useMediaQuery/types.js +2 -0
  434. package/esm/useMediaQuery/useMediaQuery.d.ts +4 -13
  435. package/esm/useMediaQuery/useMediaQuery.js +29 -11
  436. package/esm/useToaster/useToaster.d.ts +1 -1
  437. package/esm/useToaster/useToaster.js +1 -1
  438. package/internals/Box/styles/index.less +4 -0
  439. package/internals/Picker/styles/index.less +105 -23
  440. package/internals/Picker/styles/mixin.less +6 -6
  441. package/package.json +3 -2
  442. package/styles/color-modes/dark.less +2 -2
  443. package/styles/color-modes/high-contrast.less +2 -2
  444. package/styles/color-modes/light.less +2 -2
  445. package/styles/index.less +3 -0
  446. package/styles/root.less +2 -0
  447. package/styles/variables.less +0 -24
  448. package/SafeAnchor/package.json +0 -7
  449. package/cjs/Form/hooks/useFormClassNames.d.ts +0 -5
  450. package/cjs/Form/hooks/useFormClassNames.js +0 -29
  451. package/cjs/internals/Picker/hooks/usePickerClassName.d.ts +0 -19
  452. package/cjs/internals/Picker/hooks/usePickerClassName.js +0 -45
  453. package/esm/Form/hooks/useFormClassNames.d.ts +0 -5
  454. package/esm/Form/hooks/useFormClassNames.js +0 -25
  455. package/esm/internals/Picker/hooks/usePickerClassName.d.ts +0 -19
  456. package/esm/internals/Picker/hooks/usePickerClassName.js +0 -40
  457. /package/cjs/{SafeAnchor → internals/SafeAnchor}/index.d.ts +0 -0
  458. /package/cjs/{SafeAnchor → internals/SafeAnchor}/index.js +0 -0
  459. /package/cjs/internals/utils/{events.d.ts → html/events.d.ts} +0 -0
  460. /package/cjs/internals/utils/{htmlPropsUtils.d.ts → html/htmlPropsUtils.d.ts} +0 -0
  461. /package/cjs/internals/utils/{safeSetSelection.d.ts → html/safeSetSelection.d.ts} +0 -0
  462. /package/cjs/internals/utils/{deprecateComponent.d.ts → react/deprecateComponent.d.ts} +0 -0
  463. /package/cjs/internals/utils/{forwardRef.js → react/forwardRef.js} +0 -0
  464. /package/cjs/internals/utils/{getDOMNode.d.ts → react/getDOMNode.d.ts} +0 -0
  465. /package/cjs/internals/utils/{getDOMNode.js → react/getDOMNode.js} +0 -0
  466. /package/cjs/internals/utils/{mergeRefs.d.ts → react/mergeRefs.d.ts} +0 -0
  467. /package/cjs/internals/utils/{getSafeRegExpString.d.ts → string/getSafeRegExpString.d.ts} +0 -0
  468. /package/cjs/internals/utils/{getSafeRegExpString.js → string/getSafeRegExpString.js} +0 -0
  469. /package/cjs/internals/utils/{stringifyReactNode.d.ts → string/stringifyReactNode.d.ts} +0 -0
  470. /package/cjs/internals/utils/{tplTransform.d.ts → string/tplTransform.d.ts} +0 -0
  471. /package/esm/{SafeAnchor → internals/SafeAnchor}/index.d.ts +0 -0
  472. /package/esm/{SafeAnchor → internals/SafeAnchor}/index.js +0 -0
  473. /package/esm/internals/utils/{events.d.ts → html/events.d.ts} +0 -0
  474. /package/esm/internals/utils/{htmlPropsUtils.d.ts → html/htmlPropsUtils.d.ts} +0 -0
  475. /package/esm/internals/utils/{safeSetSelection.d.ts → html/safeSetSelection.d.ts} +0 -0
  476. /package/esm/internals/utils/{deprecateComponent.d.ts → react/deprecateComponent.d.ts} +0 -0
  477. /package/esm/internals/utils/{forwardRef.js → react/forwardRef.js} +0 -0
  478. /package/esm/internals/utils/{getDOMNode.d.ts → react/getDOMNode.d.ts} +0 -0
  479. /package/esm/internals/utils/{getDOMNode.js → react/getDOMNode.js} +0 -0
  480. /package/esm/internals/utils/{mergeRefs.d.ts → react/mergeRefs.d.ts} +0 -0
  481. /package/esm/internals/utils/{getSafeRegExpString.d.ts → string/getSafeRegExpString.d.ts} +0 -0
  482. /package/esm/internals/utils/{getSafeRegExpString.js → string/getSafeRegExpString.js} +0 -0
  483. /package/esm/internals/utils/{stringifyReactNode.d.ts → string/stringifyReactNode.d.ts} +0 -0
  484. /package/esm/internals/utils/{tplTransform.d.ts → string/tplTransform.d.ts} +0 -0
@@ -7,6 +7,7 @@ import getOffset from 'dom-lib/getOffset';
7
7
  import ProgressBar from "../Slider/ProgressBar.js";
8
8
  import Handle from "../Slider/Handle.js";
9
9
  import Graduated from "../Slider/Graduated.js";
10
+ import Plaintext from "../internals/Plaintext/index.js";
10
11
  import Box from "../internals/Box/index.js";
11
12
  import { forwardRef } from "../internals/utils/index.js";
12
13
  import { useStyles, useControlled, useEventCallback } from "../internals/hooks/index.js";
@@ -35,16 +36,21 @@ const RangeSlider = forwardRef((props, ref) => {
35
36
  disabled,
36
37
  graduated,
37
38
  progress = true,
39
+ keepTooltipOpen = false,
38
40
  vertical,
39
41
  readOnly,
40
42
  min = 0,
41
43
  max: maxProp = 100,
42
44
  step = 1,
45
+ size = 'sm',
43
46
  value: valueProp,
44
47
  handleClassName,
45
48
  handleStyle,
46
49
  handleTitle,
47
50
  tooltip = true,
51
+ marks,
52
+ plaintext,
53
+ placeholder,
48
54
  getAriaValueText,
49
55
  renderTooltip,
50
56
  renderMark,
@@ -260,7 +266,6 @@ const RangeSlider = forwardRef((props, ref) => {
260
266
  position: (value[1] - min) / (max - min) * 100
261
267
  }], [ariaValuetext, getAriaValueText, max, min, value]);
262
268
  const handleCommonProps = {
263
- rtl,
264
269
  disabled,
265
270
  vertical,
266
271
  tooltip,
@@ -276,12 +281,21 @@ const RangeSlider = forwardRef((props, ref) => {
276
281
  'aria-valuemax': max,
277
282
  'aria-valuemin': min,
278
283
  'aria-label': ariaLabel,
279
- 'aria-labelledby': ariaLabelledby
284
+ 'aria-labelledby': ariaLabelledby,
285
+ keepTooltipOpen
280
286
  };
287
+ if (plaintext) {
288
+ return /*#__PURE__*/React.createElement(Plaintext, {
289
+ localeKey: "notSelected",
290
+ ref: ref,
291
+ placeholder: placeholder
292
+ }, value && (value[0] || value[1]) ? value.join('~') : null);
293
+ }
281
294
  return /*#__PURE__*/React.createElement(Box, _extends({
282
295
  as: as,
283
296
  ref: ref,
284
- className: classes
297
+ className: classes,
298
+ "data-size": size
285
299
  }, rest), /*#__PURE__*/React.createElement("div", {
286
300
  className: merge(barClassName, prefix('bar')),
287
301
  ref: barRef,
@@ -297,6 +311,7 @@ const RangeSlider = forwardRef((props, ref) => {
297
311
  max: max,
298
312
  count: count,
299
313
  value: value,
314
+ marks: marks,
300
315
  renderMark: renderMark
301
316
  })), /*#__PURE__*/React.createElement(Handle, _extends({
302
317
  "data-range": value
@@ -1,11 +1,12 @@
1
1
  import React from 'react';
2
2
  import { BoxProps } from '../internals/Box';
3
+ import type { StarStatus } from './types';
3
4
  interface CharacterProps extends BoxProps {
4
5
  vertical?: boolean;
5
- status?: 0 | 0.5 | 1;
6
+ status?: StarStatus;
6
7
  disabled?: boolean;
7
- onMouseMove?: (key: any, event: React.MouseEvent) => void;
8
- onClick?: (key: any, event: React.MouseEvent) => void;
8
+ onMouseMove?: (key: 'before' | 'after', event: React.MouseEvent) => void;
9
+ onClick?: (key: 'before' | 'after', event: React.MouseEvent) => void;
9
10
  onKeyDown?: (event: React.KeyboardEvent) => void;
10
11
  }
11
12
  declare const Character: import("../internals/types").InternalRefForwardingComponent<"li", CharacterProps, never> & Record<string, never>;
@@ -1,17 +1,14 @@
1
1
  'use client';
2
2
  import _extends from "@babel/runtime/helpers/esm/extends";
3
- import React, { useRef } from 'react';
3
+ import React, { useRef, useMemo } from 'react';
4
4
  import contains from 'dom-lib/contains';
5
- import isNil from 'lodash/isNil';
6
5
  import Box from "../internals/Box/index.js";
7
6
  import { forwardRef } from "../internals/utils/index.js";
7
+ import { getStarStatus } from "./utils.js";
8
8
  import { useStyles, useEventCallback } from "../internals/hooks/index.js";
9
- const characterStatus = {
10
- [0]: 'empty',
11
- [0.5]: 'half',
12
- [1]: 'full'
9
+ const getKey = (element, target) => {
10
+ return element && target && contains(element, target) ? 'before' : 'after';
13
11
  };
14
- const getKey = (a, b) => contains(a, b) ? 'before' : 'after';
15
12
  const Character = forwardRef((props, ref) => {
16
13
  const {
17
14
  as = 'li',
@@ -27,27 +24,34 @@ const Character = forwardRef((props, ref) => {
27
24
  ...rest
28
25
  } = props;
29
26
  const {
30
- merge,
31
27
  prefix,
32
- withPrefix
28
+ withPrefix,
29
+ merge
33
30
  } = useStyles(classPrefix);
34
31
  const beforeRef = useRef(null);
35
- const classes = merge(className, withPrefix(!isNil(status) && characterStatus[status]));
36
32
  const handleMouseMove = useEventCallback(event => {
37
33
  onMouseMove === null || onMouseMove === void 0 || onMouseMove(getKey(beforeRef.current, event.target), event);
38
34
  });
39
35
  const handleClick = useEventCallback(event => {
40
36
  onClick === null || onClick === void 0 || onClick(getKey(beforeRef.current, event.target), event);
41
37
  });
38
+ const eventHandlers = useMemo(() => {
39
+ if (disabled) {
40
+ return null;
41
+ }
42
+ return {
43
+ onClick: handleClick,
44
+ onKeyDown,
45
+ onMouseMove: handleMouseMove
46
+ };
47
+ }, [disabled, handleClick, onKeyDown, handleMouseMove]);
42
48
  return /*#__PURE__*/React.createElement(Box, _extends({
43
49
  as: as,
44
50
  ref: ref,
45
- className: classes,
46
- tabIndex: 0,
47
- onClick: disabled ? null : handleClick,
48
- onKeyDown: disabled ? null : onKeyDown,
49
- onMouseMove: disabled ? null : handleMouseMove
50
- }, rest), /*#__PURE__*/React.createElement("div", {
51
+ className: merge(className, withPrefix()),
52
+ tabIndex: disabled ? -1 : 0,
53
+ "data-status": getStarStatus(status)
54
+ }, eventHandlers, rest), /*#__PURE__*/React.createElement("div", {
51
55
  ref: beforeRef,
52
56
  className: prefix('before', {
53
57
  vertical
@@ -1,18 +1,26 @@
1
1
  import React from 'react';
2
- import { BoxProps } from '../internals/Box';
2
+ import { StyledBoxProps } from '../internals/StyledBox';
3
3
  import type { Color, FormControlBaseProps, Size } from '../internals/types';
4
- export interface RateProps<T = number> extends BoxProps, FormControlBaseProps<T> {
4
+ export interface RateProps<T = number> extends Omit<StyledBoxProps, 'name'>, FormControlBaseProps<T> {
5
+ /** Whether to allow semi selection */
5
6
  allowHalf?: boolean;
7
+ /** Custom character of rate */
6
8
  character?: React.ReactNode;
9
+ /** The prefix of the component CSS class */
7
10
  classPrefix?: string;
11
+ /** Whether to allow cancel selection */
8
12
  cleanable?: boolean;
9
13
  /** A rate can have different sizes */
10
14
  size?: Size;
11
15
  /** A rate can have different colors */
12
16
  color?: Color | React.CSSProperties['color'];
17
+ /** Maximum rate */
13
18
  max?: number;
19
+ /** Vertical Rate half */
14
20
  vertical?: boolean;
21
+ /** Render custom character */
15
22
  renderCharacter?: (value: number, index: number) => React.ReactNode;
23
+ /** Callback function when hover state changes */
16
24
  onChangeActive?: (value: T, event: React.SyntheticEvent) => void;
17
25
  }
18
26
  /**
package/esm/Rate/Rate.js CHANGED
@@ -1,15 +1,16 @@
1
1
  'use client';
2
2
  import _extends from "@babel/runtime/helpers/esm/extends";
3
- import React, { useEffect, useCallback, useState, useMemo } from 'react';
3
+ import React from 'react';
4
4
  import isNil from 'lodash/isNil';
5
5
  import Star from '@rsuite/icons/Star';
6
6
  import Character from "./Character.js";
7
7
  import Plaintext from "../internals/Plaintext/index.js";
8
- import Box from "../internals/Box/index.js";
8
+ import StyledBox from "../internals/StyledBox/index.js";
9
9
  import { KEY_VALUES } from "../internals/constants/index.js";
10
10
  import { useControlled, useStyles, useEventCallback } from "../internals/hooks/index.js";
11
- import { forwardRef, shallowEqualArray, isPresetColor, createColorVariables, mergeStyles } from "../internals/utils/index.js";
12
- import { transformValueToCharacterMap, transformCharacterMapToValue } from "./utils.js";
11
+ import { forwardRef, shallowEqualArray, mergeStyles } from "../internals/utils/index.js";
12
+ import { transformStarStatusToValue, getFractionalValue } from "./utils.js";
13
+ import { useRatingStates } from "./useRatingStates.js";
13
14
  import { useCustom } from "../CustomProvider/index.js";
14
15
  /**
15
16
  * The `Rate` component is used for rating. It can be used to evaluate the quality of the content.
@@ -28,7 +29,7 @@ const Rate = forwardRef((props, ref) => {
28
29
  max = 5,
29
30
  readOnly,
30
31
  vertical,
31
- size = 'md',
32
+ size,
32
33
  color,
33
34
  allowHalf = false,
34
35
  value: valueProp,
@@ -42,39 +43,37 @@ const Rate = forwardRef((props, ref) => {
42
43
  ...rest
43
44
  } = propsWithDefaults;
44
45
  const [value, setValue] = useControlled(valueProp, defaultValue);
45
- const getCharacterMap = useCallback(v => {
46
- return transformValueToCharacterMap(typeof v !== 'undefined' ? v : value, max, allowHalf);
47
- }, [allowHalf, max, value]);
48
- const [characterMap, setCharacterMap] = useState(getCharacterMap());
49
- const hoverValue = transformCharacterMapToValue(characterMap);
50
46
  const {
51
47
  merge,
52
48
  withPrefix
53
49
  } = useStyles(classPrefix);
54
- const classes = merge(className, withPrefix(size, isPresetColor(color) && color, {
55
- disabled,
56
- readonly: readOnly
57
- }));
58
- const styles = useMemo(() => mergeStyles(style, createColorVariables(color, '--rs-rate-symbol-checked')), [style, color]);
59
- const resetCharacterMap = useCallback(() => {
60
- setCharacterMap(getCharacterMap());
61
- }, [getCharacterMap]);
62
- useEffect(() => {
63
- // Update characterMap when value is updated.
64
- setCharacterMap(getCharacterMap(valueProp));
65
- }, [valueProp]);
50
+ const classes = merge(className, withPrefix());
51
+
52
+ // Use the custom hook to manage rating star states
53
+ const {
54
+ starStates,
55
+ setStarStates,
56
+ resetStarStates,
57
+ hoverValue,
58
+ getStarStates
59
+ } = useRatingStates({
60
+ value,
61
+ max,
62
+ allowHalf,
63
+ valueProp
64
+ });
66
65
  const handleMouseLeave = useEventCallback(event => {
67
- resetCharacterMap();
66
+ resetStarStates();
68
67
  onChangeActive === null || onChangeActive === void 0 || onChangeActive(value, event);
69
68
  });
70
69
  const handleChangeValue = useEventCallback((index, event) => {
71
- let nextValue = transformCharacterMapToValue(characterMap);
72
- if (cleanable && value === nextValue && getCharacterMap(value)[index] === characterMap[index]) {
70
+ let nextValue = transformStarStatusToValue(starStates);
71
+ if (cleanable && value === nextValue && getStarStates(value)[index] === starStates[index]) {
73
72
  nextValue = 0;
74
73
  }
75
74
  if (nextValue !== value) {
76
75
  setValue(nextValue);
77
- setCharacterMap(getCharacterMap(nextValue));
76
+ setStarStates(getStarStates(nextValue));
78
77
  onChange === null || onChange === void 0 || onChange(nextValue, event);
79
78
  }
80
79
  });
@@ -82,59 +81,67 @@ const Rate = forwardRef((props, ref) => {
82
81
  const {
83
82
  key
84
83
  } = event;
85
- let nextValue = transformCharacterMapToValue(characterMap);
84
+ let nextValue = transformStarStatusToValue(starStates);
86
85
  if (key === KEY_VALUES.RIGHT && nextValue < max) {
87
86
  nextValue = allowHalf ? nextValue + 0.5 : nextValue + 1;
88
87
  } else if (key === KEY_VALUES.LEFT && nextValue > 0) {
89
88
  nextValue = allowHalf ? nextValue - 0.5 : nextValue - 1;
90
89
  }
91
- setCharacterMap(getCharacterMap(nextValue));
90
+ setStarStates(getStarStates(nextValue));
92
91
  if (key === KEY_VALUES.ENTER) {
93
92
  handleChangeValue(index, event);
94
93
  }
95
94
  });
96
- const handleChangeCharacterMap = useEventCallback((index, key, event) => {
97
- const nextCharacterMap = characterMap.map((_item, i) => {
95
+ const handleChangeStarStates = useEventCallback((index, key, event) => {
96
+ const nextStarStates = starStates.map((_item, i) => {
98
97
  if (i === index && key === 'before' && allowHalf) {
99
98
  return 0.5;
100
99
  }
101
100
  return index >= i ? 1 : 0;
102
101
  });
103
- if (!shallowEqualArray(characterMap, nextCharacterMap)) {
104
- setCharacterMap(nextCharacterMap);
105
- onChangeActive === null || onChangeActive === void 0 || onChangeActive(transformCharacterMapToValue(nextCharacterMap), event);
102
+ if (!shallowEqualArray(starStates, nextStarStates)) {
103
+ setStarStates(nextStarStates);
104
+ onChangeActive === null || onChangeActive === void 0 || onChangeActive(transformStarStatusToValue(nextStarStates), event);
106
105
  }
107
106
  });
108
107
  const handleClick = useEventCallback((index, key, event) => {
109
- handleChangeCharacterMap(index, key, event);
108
+ handleChangeStarStates(index, key, event);
110
109
  handleChangeValue(index, event);
111
110
  });
112
111
  if (plaintext) {
113
112
  return /*#__PURE__*/React.createElement(Plaintext, {
114
113
  localeKey: "notSelected",
115
114
  className: className
116
- }, !isNil(value) ? `${value}(${max})` : null);
115
+ }, !isNil(value) ? `${value}/${max}` : null);
117
116
  }
118
- return /*#__PURE__*/React.createElement(Box, _extends({
117
+ const mergedStyle = mergeStyles(style, {
118
+ '--rs-rate-before-size': getFractionalValue(value)
119
+ });
120
+ return /*#__PURE__*/React.createElement(StyledBox, _extends({
119
121
  as: as,
122
+ name: "rate",
123
+ size: size,
124
+ color: color,
120
125
  role: "radiogroup",
121
- tabIndex: 0,
126
+ tabIndex: disabled ? -1 : 0,
122
127
  ref: ref,
123
128
  className: classes,
124
- style: styles,
125
- onMouseLeave: handleMouseLeave
126
- }, rest), characterMap.map((item, index) => /*#__PURE__*/React.createElement(Character, {
129
+ style: mergedStyle,
130
+ onMouseLeave: handleMouseLeave,
131
+ "data-disabled": disabled,
132
+ "data-readonly": readOnly
133
+ }, rest), starStates.map((status, index) => /*#__PURE__*/React.createElement(Character, {
127
134
  role: "radio",
128
135
  "aria-posinset": index + 1,
129
136
  "aria-setsize": max,
130
137
  "aria-checked": value === index + 1,
131
138
  key: index,
132
- status: item,
139
+ status: status,
133
140
  disabled: disabled || readOnly,
134
141
  vertical: vertical,
135
142
  onClick: (key, event) => handleClick(index, key, event),
136
143
  onKeyDown: event => handleKeyDown(index, event),
137
- onMouseMove: (key, event) => handleChangeCharacterMap(index, key, event)
144
+ onMouseMove: (key, event) => handleChangeStarStates(index, key, event)
138
145
  }, renderCharacter ? renderCharacter(hoverValue, index) : character)));
139
146
  });
140
147
  Rate.displayName = 'Rate';
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Represents the status of a star in a rating system.
3
+ * 0: Empty star
4
+ * 0.5: Half-filled star
5
+ * 1: Fully filled star
6
+ * number: Any other fractional value for custom fill levels
7
+ */
8
+ export type StarStatus = 0 | 0.5 | 1 | number;
@@ -0,0 +1,2 @@
1
+ 'use client';
2
+ export {};
@@ -0,0 +1,20 @@
1
+ /// <reference types="react" />
2
+ import type { StarStatus } from './types';
3
+ interface UseRatingStatesParams {
4
+ value: number;
5
+ max: number;
6
+ allowHalf: boolean;
7
+ valueProp?: number;
8
+ }
9
+ interface UseRatingStatesReturn {
10
+ starStates: StarStatus[];
11
+ hoverValue: number;
12
+ setStarStates: React.Dispatch<React.SetStateAction<StarStatus[]>>;
13
+ resetStarStates: () => void;
14
+ getStarStates: (v?: number) => StarStatus[];
15
+ }
16
+ /**
17
+ * Custom hook to manage rating star states for Rate component
18
+ */
19
+ export declare const useRatingStates: ({ value, max, allowHalf, valueProp }: UseRatingStatesParams) => UseRatingStatesReturn;
20
+ export {};
@@ -0,0 +1,43 @@
1
+ 'use client';
2
+ import { useState, useCallback, useEffect } from 'react';
3
+ import { transformValueToStarStatus, transformStarStatusToValue } from "./utils.js";
4
+ /**
5
+ * Custom hook to manage rating star states for Rate component
6
+ */
7
+ export const useRatingStates = _ref => {
8
+ let {
9
+ value,
10
+ max,
11
+ allowHalf,
12
+ valueProp
13
+ } = _ref;
14
+ // Create a function to generate star states based on value
15
+ const getStarStates = useCallback(v => {
16
+ return transformValueToStarStatus(typeof v !== 'undefined' ? v : value, max, allowHalf);
17
+ }, [allowHalf, max, value]);
18
+
19
+ // Initialize star states
20
+ const [starStates, setStarStates] = useState(getStarStates());
21
+
22
+ // Calculate hover value from star states
23
+ const hoverValue = transformStarStatusToValue(starStates);
24
+
25
+ // Function to reset star states to current value
26
+ const resetStarStates = useCallback(() => {
27
+ setStarStates(getStarStates());
28
+ }, [getStarStates]);
29
+
30
+ // Update star states when value prop changes
31
+ useEffect(() => {
32
+ if (typeof valueProp !== 'undefined') {
33
+ setStarStates(getStarStates(valueProp));
34
+ }
35
+ }, [valueProp, getStarStates]);
36
+ return {
37
+ starStates,
38
+ setStarStates,
39
+ resetStarStates,
40
+ hoverValue,
41
+ getStarStates
42
+ };
43
+ };
@@ -1,3 +1,14 @@
1
- export type CharacterType = 0 | 0.5 | 1;
2
- export declare const transformValueToCharacterMap: (value: number, max: number, allowHalf: boolean) => CharacterType[];
3
- export declare const transformCharacterMapToValue: (characterMap: CharacterType[]) => number;
1
+ import type { StarStatus } from './types';
2
+ /**
3
+ * Transforms a numeric value into a character map array.
4
+ */
5
+ export declare const transformValueToStarStatus: (value: number, max: number, allowHalf: boolean) => StarStatus[];
6
+ /**
7
+ * Transforms a character map array into a numeric value.
8
+ */
9
+ export declare const transformStarStatusToValue: (characterMap: StarStatus[]) => number;
10
+ /**
11
+ * Calculates the fractional part of a value as a percentage string.
12
+ */
13
+ export declare const getFractionalValue: (value: number) => string | undefined;
14
+ export declare const getStarStatus: (status?: StarStatus) => any;
package/esm/Rate/utils.js CHANGED
@@ -1,19 +1,58 @@
1
1
  'use client';
2
- export const transformValueToCharacterMap = (value, max, allowHalf) => {
2
+ /**
3
+ * Transforms a numeric value into a character map array.
4
+ */
5
+ export const transformValueToStarStatus = (value, max, allowHalf) => {
3
6
  const characterMap = [];
4
7
  for (let i = 0; i < max; i++) {
5
- if (i < value) {
6
- if (allowHalf && i + 1 > value) {
7
- value && characterMap.push(0.5);
8
+ if (i < value && value >= i + 1) {
9
+ // Fully filled star
10
+ characterMap.push(1);
11
+ } else if (i < value && value < i + 1) {
12
+ // Partially filled star
13
+ if (allowHalf) {
14
+ // Use 0.5 to represent partial fill when half ratings are allowed
15
+ characterMap.push(0.5);
8
16
  } else {
9
- characterMap.push(1);
17
+ // Extract the decimal part
18
+ characterMap.push(value - i);
10
19
  }
11
20
  } else {
21
+ // Empty star
12
22
  characterMap.push(0);
13
23
  }
14
24
  }
15
25
  return characterMap;
16
26
  };
17
- export const transformCharacterMapToValue = characterMap => characterMap.reduce((total, currentValue) => {
27
+
28
+ /**
29
+ * Transforms a character map array into a numeric value.
30
+ */
31
+ export const transformStarStatusToValue = characterMap => characterMap.reduce((total, currentValue) => {
18
32
  return total + currentValue;
19
- });
33
+ });
34
+
35
+ /**
36
+ * Calculates the fractional part of a value as a percentage string.
37
+ */
38
+ export const getFractionalValue = value => {
39
+ if (!value) {
40
+ return undefined;
41
+ }
42
+ const integer = Math.floor(value);
43
+ const decimal = value - integer;
44
+
45
+ // Round to avoid floating-point precision issues
46
+ return decimal ? `${Math.round(decimal * 100)}%` : undefined;
47
+ };
48
+ const starStatusMap = {
49
+ [0]: 'empty',
50
+ [0.5]: 'half',
51
+ [1]: 'full'
52
+ };
53
+ export const getStarStatus = status => {
54
+ if (typeof status === 'number') {
55
+ return starStatusMap[status] || 'frac';
56
+ }
57
+ return null;
58
+ };
@@ -4,12 +4,10 @@ import React, { useState } from 'react';
4
4
  import pick from 'lodash/pick';
5
5
  import isNil from 'lodash/isNil';
6
6
  import isFunction from 'lodash/isFunction';
7
- import omit from 'lodash/omit';
8
7
  import SearchBox from "../internals/SearchBox/index.js";
9
- import Box from "../internals/Box/index.js";
10
8
  import { useStyles, useControlled, useEventCallback } from "../internals/hooks/index.js";
11
9
  import { forwardRef, createChainedFunction, mergeRefs, shallowEqual, getDataGroupBy } from "../internals/utils/index.js";
12
- import { Listbox, ListItem, PickerToggle, PickerToggleTrigger, PickerPopup, useFocusItemValue, usePickerClassName, useSearch, useToggleKeyDownEvent, usePickerRef, pickTriggerPropKeys, omitTriggerPropKeys } from "../internals/Picker/index.js";
10
+ import { Listbox, ListItem, PickerToggle, PickerToggleTrigger, PickerPopup, useFocusItemValue, useSearch, useToggleKeyDownEvent, usePickerRef, triggerPropKeys } from "../internals/Picker/index.js";
13
11
  import { useCustom } from "../CustomProvider/index.js";
14
12
  const emptyArray = [];
15
13
  /**
@@ -21,45 +19,47 @@ const SelectPicker = forwardRef((props, ref) => {
21
19
  propsWithDefaults
22
20
  } = useCustom('SelectPicker', props);
23
21
  const {
24
- as,
25
22
  appearance = 'default',
26
- data = emptyArray,
27
- valueKey = 'value',
28
- labelKey = 'label',
29
- value: valueProp,
23
+ as,
24
+ block,
25
+ className,
26
+ cleanable = true,
30
27
  classPrefix = 'picker',
31
- placeholder,
28
+ data = emptyArray,
32
29
  defaultValue,
33
30
  disabled,
34
- cleanable = true,
31
+ disabledItemValues = emptyArray,
32
+ groupBy,
33
+ id,
34
+ labelKey = 'label',
35
+ listProps,
36
+ listboxMaxHeight = 320,
37
+ locale,
38
+ placeholder,
35
39
  placement = 'bottomStart',
36
- popupClassName,
37
40
  popupAutoWidth = true,
41
+ popupClassName,
38
42
  popupStyle,
39
- listboxMaxHeight = 320,
40
- groupBy,
41
- locale,
42
- toggleAs,
43
- style,
44
43
  searchable = true,
45
- disabledItemValues = emptyArray,
44
+ style,
45
+ toggleAs,
46
+ value: valueProp,
47
+ valueKey = 'value',
46
48
  virtualized,
47
- listProps,
48
- id,
49
- onGroupTitleClick,
50
- searchBy,
51
- onEntered,
52
- onExited,
53
- onClean,
54
- onChange,
55
- onSelect,
56
- onSearch,
57
49
  sort,
50
+ searchBy,
58
51
  renderValue,
59
52
  renderListbox,
60
53
  renderOptionGroup,
61
54
  renderOption,
62
55
  renderExtraFooter,
56
+ onGroupTitleClick,
57
+ onEnter,
58
+ onExit,
59
+ onClean,
60
+ onChange,
61
+ onSelect,
62
+ onSearch,
63
63
  ...rest
64
64
  } = propsWithDefaults;
65
65
  const {
@@ -153,13 +153,13 @@ const SelectPicker = forwardRef((props, ref) => {
153
153
  onMenuPressEnter: handleMenuPressEnter,
154
154
  ...rest
155
155
  });
156
- const handleExited = useEventCallback(() => {
156
+ const handleExit = useEventCallback(() => {
157
157
  resetSearch();
158
158
  setActive(false);
159
159
  onSearch === null || onSearch === void 0 || onSearch('');
160
160
  setFocusItemValue(null);
161
161
  });
162
- const handleEntered = useEventCallback(() => {
162
+ const handleEnter = useEventCallback(() => {
163
163
  setActive(true);
164
164
  setFocusItemValue(value);
165
165
  });
@@ -237,28 +237,27 @@ const SelectPicker = forwardRef((props, ref) => {
237
237
  inputRef: searchInput
238
238
  }), renderListbox ? renderListbox(listbox) : listbox, renderExtraFooter === null || renderExtraFooter === void 0 ? void 0 : renderExtraFooter());
239
239
  };
240
- const [classes, usedClassNamePropKeys] = usePickerClassName({
241
- ...props,
242
- classPrefix,
243
- appearance,
244
- hasValue,
245
- name: 'select',
246
- cleanable
247
- });
240
+ const triggerProps = {
241
+ ...pick(props, triggerPropKeys),
242
+ onEnter: createChainedFunction(handleEnter, onEnter),
243
+ onExit: createChainedFunction(handleExit, onExit)
244
+ };
248
245
  return /*#__PURE__*/React.createElement(PickerToggleTrigger, {
246
+ as: as,
249
247
  id: id,
250
- pickerProps: pick(props, pickTriggerPropKeys),
248
+ name: "select",
249
+ block: block,
250
+ disabled: disabled,
251
+ appearance: appearance,
252
+ triggerProps: triggerProps,
251
253
  ref: trigger,
252
254
  placement: placement,
253
- onEntered: createChainedFunction(handleEntered, onEntered),
254
- onExited: createChainedFunction(handleExited, onExited),
255
- speaker: renderPopup
256
- }, /*#__PURE__*/React.createElement(Box, {
257
- as: as,
258
- className: classes,
255
+ speaker: renderPopup,
256
+ rootRef: root,
259
257
  style: style,
260
- ref: root
261
- }, /*#__PURE__*/React.createElement(PickerToggle, _extends({}, omit(rest, [...omitTriggerPropKeys, ...usedClassNamePropKeys]), {
258
+ classPrefix: classPrefix,
259
+ className: className
260
+ }, /*#__PURE__*/React.createElement(PickerToggle, _extends({
262
261
  ref: target,
263
262
  appearance: appearance,
264
263
  onClean: createChainedFunction(handleClean, onClean),
@@ -271,7 +270,7 @@ const SelectPicker = forwardRef((props, ref) => {
271
270
  focusItemValue: focusItemValue,
272
271
  active: active,
273
272
  placement: placement
274
- }), selectedElement || (locale === null || locale === void 0 ? void 0 : locale.placeholder))));
273
+ }, rest), selectedElement || (locale === null || locale === void 0 ? void 0 : locale.placeholder)));
275
274
  });
276
275
  SelectPicker.displayName = 'SelectPicker';
277
276
  export default SelectPicker;