rsuite 5.48.0 → 5.49.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 (146) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/Cascader/styles/index.less +1 -0
  3. package/DatePicker/styles/index.less +18 -11
  4. package/DateRangeInput/package.json +7 -0
  5. package/DateRangePicker/styles/index.less +10 -0
  6. package/InputGroup/styles/index.less +1 -0
  7. package/Picker/styles/index.less +20 -0
  8. package/README.md +34 -24
  9. package/Sidenav/styles/index.less +2 -0
  10. package/cjs/Calendar/CalendarContainer.d.ts +2 -0
  11. package/cjs/Calendar/CalendarContainer.js +11 -4
  12. package/cjs/Calendar/CalendarHeader.js +2 -0
  13. package/cjs/Calendar/MonthDropdown.js +7 -2
  14. package/cjs/Calendar/MonthDropdownItem.js +2 -2
  15. package/cjs/Calendar/Table.js +6 -1
  16. package/cjs/Calendar/TimeDropdown.js +17 -10
  17. package/cjs/Calendar/types.d.ts +1 -0
  18. package/cjs/CustomProvider/CustomProvider.d.ts +13 -0
  19. package/cjs/CustomProvider/CustomProvider.js +2 -2
  20. package/cjs/DateInput/DateField.d.ts +9 -31
  21. package/cjs/DateInput/DateField.js +61 -12
  22. package/cjs/DateInput/DateInput.d.ts +7 -2
  23. package/cjs/DateInput/DateInput.js +74 -92
  24. package/cjs/DateInput/index.d.ts +4 -0
  25. package/cjs/DateInput/index.js +19 -1
  26. package/cjs/DateInput/useDateInputState.d.ts +7 -31
  27. package/cjs/DateInput/useDateInputState.js +39 -15
  28. package/cjs/DateInput/useIsFocused.d.ts +7 -0
  29. package/cjs/DateInput/useIsFocused.js +28 -0
  30. package/cjs/DateInput/useKeyboardInputEvent.d.ts +10 -0
  31. package/cjs/DateInput/useKeyboardInputEvent.js +44 -0
  32. package/cjs/DateInput/utils.d.ts +23 -1
  33. package/cjs/DateInput/utils.js +155 -51
  34. package/cjs/DatePicker/DatePicker.d.ts +20 -7
  35. package/cjs/DatePicker/DatePicker.js +215 -245
  36. package/cjs/DatePicker/PickerIndicator.d.ts +10 -0
  37. package/cjs/DatePicker/PickerIndicator.js +48 -0
  38. package/cjs/DatePicker/PickerLabel.d.ts +9 -0
  39. package/cjs/DatePicker/PickerLabel.js +23 -0
  40. package/cjs/DatePicker/Toolbar.js +3 -21
  41. package/cjs/DatePicker/utils.d.ts +5 -1
  42. package/cjs/DatePicker/utils.js +17 -1
  43. package/cjs/DateRangeInput/DateRangeInput.d.ts +29 -0
  44. package/cjs/DateRangeInput/DateRangeInput.js +244 -0
  45. package/cjs/DateRangeInput/index.d.ts +3 -0
  46. package/cjs/DateRangeInput/index.js +9 -0
  47. package/cjs/DateRangeInput/utils.d.ts +61 -0
  48. package/cjs/DateRangeInput/utils.js +146 -0
  49. package/cjs/DateRangePicker/DateRangePicker.js +12 -2
  50. package/cjs/FormControl/FormControl.js +2 -1
  51. package/cjs/Input/Input.d.ts +11 -0
  52. package/cjs/Input/Input.js +11 -8
  53. package/cjs/MultiCascader/MultiCascader.js +3 -1
  54. package/cjs/Overlay/OverlayTrigger.d.ts +3 -0
  55. package/cjs/Overlay/OverlayTrigger.js +5 -0
  56. package/cjs/Picker/PickerToggle.js +2 -1
  57. package/cjs/Picker/usePickerRef.d.ts +17 -0
  58. package/cjs/Picker/usePickerRef.js +82 -0
  59. package/cjs/index.d.ts +2 -0
  60. package/cjs/index.js +3 -1
  61. package/cjs/locales/index.d.ts +2 -2
  62. package/cjs/useMediaQuery/useMediaQuery.js +2 -2
  63. package/cjs/utils/index.d.ts +2 -0
  64. package/cjs/utils/index.js +8 -2
  65. package/cjs/utils/useCustom.js +1 -1
  66. package/cjs/utils/useIsomorphicLayoutEffect.d.ts +3 -0
  67. package/cjs/utils/useIsomorphicLayoutEffect.js +9 -0
  68. package/dist/rsuite-no-reset-rtl.css +51 -141
  69. package/dist/rsuite-no-reset-rtl.min.css +1 -1
  70. package/dist/rsuite-no-reset-rtl.min.css.map +1 -1
  71. package/dist/rsuite-no-reset.css +51 -141
  72. package/dist/rsuite-no-reset.min.css +1 -1
  73. package/dist/rsuite-no-reset.min.css.map +1 -1
  74. package/dist/rsuite-rtl.css +51 -9
  75. package/dist/rsuite-rtl.min.css +1 -1
  76. package/dist/rsuite-rtl.min.css.map +1 -1
  77. package/dist/rsuite.css +51 -9
  78. package/dist/rsuite.js +4804 -250
  79. package/dist/rsuite.js.map +1 -1
  80. package/dist/rsuite.min.css +1 -1
  81. package/dist/rsuite.min.css.map +1 -1
  82. package/dist/rsuite.min.js +1 -1
  83. package/dist/rsuite.min.js.map +1 -1
  84. package/esm/Calendar/CalendarContainer.d.ts +2 -0
  85. package/esm/Calendar/CalendarContainer.js +12 -5
  86. package/esm/Calendar/CalendarHeader.js +2 -0
  87. package/esm/Calendar/MonthDropdown.js +7 -2
  88. package/esm/Calendar/MonthDropdownItem.js +2 -2
  89. package/esm/Calendar/Table.js +6 -1
  90. package/esm/Calendar/TimeDropdown.js +17 -10
  91. package/esm/Calendar/types.d.ts +1 -0
  92. package/esm/CustomProvider/CustomProvider.d.ts +13 -0
  93. package/esm/CustomProvider/CustomProvider.js +3 -3
  94. package/esm/DateInput/DateField.d.ts +9 -31
  95. package/esm/DateInput/DateField.js +61 -12
  96. package/esm/DateInput/DateInput.d.ts +7 -2
  97. package/esm/DateInput/DateInput.js +77 -95
  98. package/esm/DateInput/index.d.ts +4 -0
  99. package/esm/DateInput/index.js +4 -0
  100. package/esm/DateInput/useDateInputState.d.ts +7 -31
  101. package/esm/DateInput/useDateInputState.js +41 -18
  102. package/esm/DateInput/useIsFocused.d.ts +7 -0
  103. package/esm/DateInput/useIsFocused.js +22 -0
  104. package/esm/DateInput/useKeyboardInputEvent.d.ts +10 -0
  105. package/esm/DateInput/useKeyboardInputEvent.js +38 -0
  106. package/esm/DateInput/utils.d.ts +23 -1
  107. package/esm/DateInput/utils.js +150 -51
  108. package/esm/DatePicker/DatePicker.d.ts +20 -7
  109. package/esm/DatePicker/DatePicker.js +218 -248
  110. package/esm/DatePicker/PickerIndicator.d.ts +10 -0
  111. package/esm/DatePicker/PickerIndicator.js +42 -0
  112. package/esm/DatePicker/PickerLabel.d.ts +9 -0
  113. package/esm/DatePicker/PickerLabel.js +17 -0
  114. package/esm/DatePicker/Toolbar.js +3 -21
  115. package/esm/DatePicker/utils.d.ts +5 -1
  116. package/esm/DatePicker/utils.js +16 -1
  117. package/esm/DateRangeInput/DateRangeInput.d.ts +29 -0
  118. package/esm/DateRangeInput/DateRangeInput.js +237 -0
  119. package/esm/DateRangeInput/index.d.ts +3 -0
  120. package/esm/DateRangeInput/index.js +3 -0
  121. package/esm/DateRangeInput/utils.d.ts +61 -0
  122. package/esm/DateRangeInput/utils.js +137 -0
  123. package/esm/DateRangePicker/DateRangePicker.js +12 -2
  124. package/esm/FormControl/FormControl.js +2 -1
  125. package/esm/Input/Input.d.ts +11 -0
  126. package/esm/Input/Input.js +12 -9
  127. package/esm/MultiCascader/MultiCascader.js +4 -2
  128. package/esm/Overlay/OverlayTrigger.d.ts +3 -0
  129. package/esm/Overlay/OverlayTrigger.js +5 -0
  130. package/esm/Picker/PickerToggle.js +2 -1
  131. package/esm/Picker/usePickerRef.d.ts +17 -0
  132. package/esm/Picker/usePickerRef.js +77 -0
  133. package/esm/index.d.ts +2 -0
  134. package/esm/index.js +1 -0
  135. package/esm/locales/index.d.ts +2 -2
  136. package/esm/useMediaQuery/useMediaQuery.js +2 -2
  137. package/esm/utils/index.d.ts +2 -0
  138. package/esm/utils/index.js +3 -1
  139. package/esm/utils/useCustom.js +2 -2
  140. package/esm/utils/useIsomorphicLayoutEffect.d.ts +3 -0
  141. package/esm/utils/useIsomorphicLayoutEffect.js +4 -0
  142. package/package.json +1 -1
  143. package/styles/color-modes/dark.less +1 -0
  144. package/styles/color-modes/high-contrast.less +1 -0
  145. package/styles/color-modes/light.less +1 -0
  146. package/styles/normalize.less +230 -231
package/CHANGELOG.md CHANGED
@@ -1,3 +1,25 @@
1
+ # [5.49.0](https://github.com/rsuite/rsuite/compare/v5.48.1...v5.49.0) (2023-12-29)
2
+
3
+ ### Bug Fixes
4
+
5
+ - **CSS Reset:** fix `rsuite-no-reset.css` overrides the default styles of the app ([#3527](https://github.com/rsuite/rsuite/issues/3527)) ([dff5804](https://github.com/rsuite/rsuite/commit/dff5804f81c00dfe4f4bb02eac92e070fabcc4f8))
6
+ - **CustomProvider:** fix the flicker when initializing in Dark mode ([#3528](https://github.com/rsuite/rsuite/issues/3528)) ([2bd67fd](https://github.com/rsuite/rsuite/commit/2bd67fd60ddaec9a5925d22e7cee126425b6ad78))
7
+ - **DateRangePicker:** fix layout misalignment due to missing min-width ([#3523](https://github.com/rsuite/rsuite/issues/3523)) ([464af79](https://github.com/rsuite/rsuite/commit/464af7964fe5fb8e434c7113084e6597726f3db6))
8
+
9
+ ### Features
10
+
11
+ - **DatePicker:** supports date selection by using keyboard ([#3515](https://github.com/rsuite/rsuite/issues/3515)) ([bc56cb3](https://github.com/rsuite/rsuite/commit/bc56cb33fb15854a0d3f6c3c3bb6ee3b4036aef5))
12
+ - **DateRangeInput:** add support for DateRangeInput ([#3525](https://github.com/rsuite/rsuite/issues/3525)) ([074245a](https://github.com/rsuite/rsuite/commit/074245a2f5f18028426d896584690d1738606d1c))
13
+ - **Input:** add support for htmlSize prop ([#3526](https://github.com/rsuite/rsuite/issues/3526)) ([62de8ca](https://github.com/rsuite/rsuite/commit/62de8ca14eb2aaf8dde904b3667035cb3f060c23))
14
+
15
+ ## [5.48.1](https://github.com/rsuite/rsuite/compare/v5.48.0...v5.48.1) (2023-12-22)
16
+
17
+ ### Bug Fixes
18
+
19
+ - **build:** fix environment variable undefined error when building ([#3521](https://github.com/rsuite/rsuite/issues/3521)) ([8efa27b](https://github.com/rsuite/rsuite/commit/8efa27b69233d4cd72a4b09dbbd080b15db7d1c0))
20
+ - **DatePicker:** fix `menuStyle` prop not working ([#3509](https://github.com/rsuite/rsuite/issues/3509)) ([aa816be](https://github.com/rsuite/rsuite/commit/aa816be89573f8483335736b67365a0b13848ecf))
21
+ - **useMediaQuery:** fix MediaQueryList not updating status when triggering change event ([#3503](https://github.com/rsuite/rsuite/issues/3503)) ([06b79dd](https://github.com/rsuite/rsuite/commit/06b79dda26ced54b070cda3fd6d70f96a7a7e373))
22
+
1
23
  # [5.48.0](https://github.com/rsuite/rsuite/compare/v5.47.0...v5.48.0) (2023-12-14)
2
24
 
3
25
  ### Bug Fixes
@@ -80,6 +80,7 @@
80
80
  margin: 0;
81
81
  padding: 0;
82
82
  list-style: none;
83
+ font-size: @font-size-base;
83
84
  }
84
85
  }
85
86
 
@@ -8,17 +8,6 @@
8
8
  // DatePicker Picker
9
9
  // ----------------------
10
10
 
11
- // Change the <caret/> & <clean/> vertical position make it align middle.
12
- .rs-picker-date,
13
- .rs-picker-daterange {
14
- &.rs-picker-default {
15
- .rs-picker-toggle-caret,
16
- .rs-picker-toggle-clean {
17
- top: @padding-y - @picker-default-toggle-border-width;
18
- }
19
- }
20
- }
21
-
22
11
  // Toolbar
23
12
  .rs-picker-toolbar {
24
13
  padding: @calendar-picker-padding;
@@ -34,6 +23,24 @@
34
23
  height: 286px;
35
24
  }
36
25
  }
26
+
27
+ .rs-input-group-addon {
28
+ color: var(--rs-text-secondary);
29
+
30
+ .rs-btn-close {
31
+ padding: 0;
32
+ }
33
+ }
34
+
35
+ &.rs-picker-subtle {
36
+ .rs-input-group {
37
+ border-color: transparent;
38
+ }
39
+ }
40
+
41
+ > .rs-input-group.rs-input-group-inside .rs-input {
42
+ padding-right: 0;
43
+ }
37
44
  }
38
45
 
39
46
  // Predefined Ranges
@@ -0,0 +1,7 @@
1
+ {
2
+ "name": "rsuite/DateRangeInput",
3
+ "private": true,
4
+ "main": "../cjs/DateRangeInput/index.js",
5
+ "module": "../esm/DateRangeInput/index.js",
6
+ "types": "../esm/DateRangeInput/index.d.ts"
7
+ }
@@ -4,6 +4,16 @@
4
4
  @import '../../DatePicker/styles/index';
5
5
  @import '../../Calendar/styles/index';
6
6
 
7
+ // Change the <caret/> & <clean/> vertical position make it align middle.
8
+ .rs-picker-daterange {
9
+ &.rs-picker-default {
10
+ .rs-picker-toggle-caret,
11
+ .rs-picker-toggle-clean {
12
+ top: @padding-y - @picker-default-toggle-border-width;
13
+ }
14
+ }
15
+ }
16
+
7
17
  // Date range Picker
8
18
  // ----------------------
9
19
 
@@ -35,6 +35,7 @@
35
35
 
36
36
  & & {
37
37
  outline: none !important;
38
+ border-color: transparent !important;
38
39
  }
39
40
 
40
41
  .rs-input-number,
@@ -80,6 +80,26 @@
80
80
  &.rs-picker-focused {
81
81
  box-shadow: var(--rs-state-focus-shadow);
82
82
  }
83
+
84
+ &-label.rs-input-group-addon {
85
+ color: var(--rs-text-primary);
86
+ padding-right: 4px !important;
87
+ }
88
+
89
+ &-loader {
90
+ width: 14px;
91
+ height: 14px;
92
+ display: flex;
93
+ align-items: center;
94
+ }
95
+
96
+ &-error > .rs-input-group {
97
+ border-color: var(--rs-state-error) !important;
98
+
99
+ &:focus-within {
100
+ outline: var(--rs-state-error-outline) !important;
101
+ }
102
+ }
83
103
  }
84
104
 
85
105
  .rs-picker-toggle {
package/README.md CHANGED
@@ -8,11 +8,13 @@ English | [中文版][readm-cn]
8
8
 
9
9
  [![npm][npm-svg]][npm-home]
10
10
  [![GitHub Actions][actions-svg]][actions-home]
11
- [![codecov](https://codecov.io/gh/rsuite/rsuite/branch/main/graph/badge.svg?token=HGeKd0BD3t)](https://codecov.io/gh/rsuite/rsuite)
11
+ [![npm bundle size][npm-bundle-size-img]][npm-bundle-size]
12
+ [![rsuite.min.js][rsuite-min-js-img]][rsuite-min-js]
13
+ [![codecov][codecov-img]][codecov]
12
14
  [![Discord][discord-svg]][discord-invite]
13
15
  [![Gitter][gitter-svg]][gitter]
14
16
  [![Gitter][gitter-cn-svg]][gitter-cn]
15
- [![Gitpod ready-to-code](https://img.shields.io/badge/Gitpod-ready--to--code-blue?logo=gitpod)](https://gitpod.io/#https://github.com/rsuite/rsuite)
17
+ [![Gitpod ready-to-code][gitpod-img]][gitpod]
16
18
 
17
19
  React Suite is a set of react component libraries for enterprise system products. It is a well-thought-out and developer-friendly UI framework.
18
20
 
@@ -75,7 +77,7 @@ function App() {
75
77
  You can go through [full documentation][rsuite-doc-guide] or start with following sections
76
78
 
77
79
  - [Quick start][rsuite-doc-guide]
78
- - [Customizing themes][rsuite-doc-guide-themes]
80
+ - [Less Customization][rsuite-doc-guide-themes]
79
81
  - [Internationalization][rsuite-doc-guide-intl]
80
82
  - [Right-to-left][rsuite-doc-guide-rtl]
81
83
  - [Components][rsuite-components-overview]
@@ -145,45 +147,53 @@ This project exists thanks to all the people who contribute.
145
147
 
146
148
  React Suite is [MIT licensed][license]. Copyright (c) 2016-present, HYPERS.
147
149
 
148
- [readm-cn]: https://github.com/rsuite/rsuite/blob/master/README_zh.md
150
+ [readm-cn]: https://github.com/rsuite/rsuite/blob/main/README_zh.md
149
151
  [npm-svg]: https://img.shields.io/npm/v/rsuite
150
152
  [npm-home]: https://www.npmjs.com/package/rsuite
151
- [actions-svg]: https://github.com/rsuite/rsuite/workflows/Node.js%20CI/badge.svg?branch=master
152
- [actions-home]: https://github.com/rsuite/rsuite/actions?query=branch%3Amaster+workflow%3A%22Node.js+CI%22
153
+ [npm-bundle-size-img]: https://badgen.net/bundlephobia/minzip/rsuite?icon=npm
154
+ [npm-bundle-size]: https://bundlephobia.com/package/rsuite
155
+ [rsuite-min-js-img]: https://img.badgesize.io/https:/unpkg.com/rsuite/dist/rsuite.min.js?label=rsuite.min.js&compression=gzip
156
+ [rsuite-min-js]: https://unpkg.com/browse/rsuite/dist/rsuite.min.js
157
+ [actions-svg]: https://github.com/rsuite/rsuite/workflows/Node.js%20CI/badge.svg?branch=main
158
+ [actions-home]: https://github.com/rsuite/rsuite/actions?query=branch%3Amain+workflow%3A%22Node.js+CI%22
153
159
  [discord-svg]: https://img.shields.io/badge/Discord-Join%20chat%20%E2%86%92-738bd7.svg
154
160
  [discord-invite]: https://discord.gg/R8mnjwh
155
161
  [rsuite-design]: https://rsuitejs.com/design/default
156
162
  [live-preview-on-codesandbox]: https://codesandbox.io/s/rsuite-template-5vq6zo2z5l
157
163
  [rsuite-doc-guide]: https://rsuitejs.com/en/guide/introduction
158
- [rsuite-doc-guide-themes]: https://rsuitejs.com/en/guide/customization
164
+ [rsuite-doc-guide-themes]: https://rsuitejs.com/en/guide/customization-less
159
165
  [rsuite-doc-guide-intl]: https://rsuitejs.com/en/guide/intl
160
166
  [rsuite-doc-guide-rtl]: https://rsuitejs.com/en/guide/rtl
161
167
  [rsuite-components-overview]: https://rsuitejs.com/en/components/overview
162
168
  [release-notes]: https://github.com/rsuite/rsuite/releases
163
- [contributing]: https://github.com/rsuite/rsuite/blob/master/CONTRIBUTING.md
169
+ [contributing]: https://github.com/rsuite/rsuite/blob/main/CONTRIBUTING.md
164
170
  [prettierrc]: https://github.com/rsuite/rsuite/wiki/.prettierrc
165
171
  [issues-11]: https://github.com/rsuite/rsuite/issues/11
166
172
  [opencollective-svg]: https://opencollective.com/rsuite/tiers/backer.svg?avatarHeight=36
167
173
  [opencollective-home]: https://opencollective.com/rsuite
168
- [license]: https://github.com/rsuite/rsuite/blob/master/LICENSE
174
+ [license]: https://github.com/rsuite/rsuite/blob/main/LICENSE
169
175
  [rsuite-sample]: https://sample.rsuitejs.com/
170
176
  [gitter]: https://gitter.im/rsuite/rsuite?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge
171
177
  [gitter-svg]: https://img.shields.io/gitter/room/rsuite/rsuite?label=chat-english
172
178
  [gitter-cn]: https://gitter.im/rsuite/rsuite-CN?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge
173
179
  [gitter-cn-svg]: https://img.shields.io/gitter/room/rsuite/rsuite?label=chat-chinese
174
180
  [demo-admin]: https://github.com/rsuite/rsuite-management-system
175
- [demo-modular-import]: https://github.com/rsuite/rsuite/tree/master/examples/with-babel-preset-rsuite
176
- [demo-cdn]: https://github.com/rsuite/rsuite/tree/master/examples/cdn
177
- [demo-create-react-app]: https://github.com/rsuite/rsuite/tree/master/examples/create-react-app
178
- [demo-electron]: https://github.com/rsuite/rsuite/tree/master/examples/with-electron
179
- [demo-intl-app]: https://github.com/rsuite/rsuite/tree/master/examples/custom-i18n
180
- [demo-multiple-themes]: https://github.com/rsuite/rsuite/tree/master/examples/custom-multiple-themes
181
- [demo-flow-app]: https://github.com/rsuite/rsuite/tree/master/examples/with-flow
182
- [demo-typescript-app]: https://github.com/rsuite/rsuite/tree/master/examples/with-typescript
183
- [demo-nextjs]: https://github.com/rsuite/rsuite/tree/master/examples/with-nextjs
184
- [demo-umi-app]: https://github.com/rsuite/rsuite/tree/master/examples/with-umi
185
- [demo-rtlcss]: https://github.com/rsuite/rsuite/tree/master/examples/with-rtlcss
186
- [demo-postcss-rtl]: https://github.com/rsuite/rsuite/tree/master/examples/with-postcss-rtl
187
- [demo-nextjs-typescript]: https://github.com/rsuite/rsuite/tree/master/examples/with-nextjs-typescript
188
- [demo-snowpack]: https://github.com/rsuite/rsuite/tree/master/examples/with-snowpack
189
- [demo-vite]: https://github.com/rsuite/rsuite/tree/master/examples/with-vite
181
+ [demo-modular-import]: https://github.com/rsuite/rsuite/tree/main/examples/with-babel-preset-rsuite
182
+ [demo-cdn]: https://github.com/rsuite/rsuite/tree/main/examples/cdn
183
+ [demo-create-react-app]: https://github.com/rsuite/rsuite/tree/main/examples/create-react-app
184
+ [demo-electron]: https://github.com/rsuite/rsuite/tree/main/examples/with-electron
185
+ [demo-intl-app]: https://github.com/rsuite/rsuite/tree/main/examples/custom-i18n
186
+ [demo-multiple-themes]: https://github.com/rsuite/rsuite/tree/main/examples/custom-multiple-themes
187
+ [demo-flow-app]: https://github.com/rsuite/rsuite/tree/main/examples/with-flow
188
+ [demo-typescript-app]: https://github.com/rsuite/rsuite/tree/main/examples/with-typescript
189
+ [demo-nextjs]: https://github.com/rsuite/rsuite/tree/main/examples/with-nextjs
190
+ [demo-umi-app]: https://github.com/rsuite/rsuite/tree/main/examples/with-umi
191
+ [demo-rtlcss]: https://github.com/rsuite/rsuite/tree/main/examples/with-rtlcss
192
+ [demo-postcss-rtl]: https://github.com/rsuite/rsuite/tree/main/examples/with-postcss-rtl
193
+ [demo-nextjs-typescript]: https://github.com/rsuite/rsuite/tree/main/examples/with-nextjs-typescript
194
+ [demo-snowpack]: https://github.com/rsuite/rsuite/tree/main/examples/with-snowpack
195
+ [demo-vite]: https://github.com/rsuite/rsuite/tree/main/examples/with-vite
196
+ [codecov]: https://codecov.io/gh/rsuite/rsuite
197
+ [codecov-img]: https://codecov.io/gh/rsuite/rsuite/branch/main/graph/badge.svg?token=HGeKd0BD3t
198
+ [gitpod]: https://gitpod.io/#https://github.com/rsuite/rsuite
199
+ [gitpod-img]: https://img.shields.io/badge/Gitpod-ready--to--code-blue?logo=gitpod
@@ -49,6 +49,7 @@
49
49
  background: none;
50
50
  padding-right: (@sidenav-padding-horizontal + @sidenav-dropdown-toggle-caret-width);
51
51
  position: relative;
52
+ border-width: 0;
52
53
 
53
54
  .rs-sidenav-collapse-in & {
54
55
  padding-left: @sidenav-level2-retract;
@@ -178,6 +179,7 @@
178
179
  display: block;
179
180
  outline: 0;
180
181
  overflow: hidden;
182
+ text-decoration: none;
181
183
 
182
184
  &:hover,
183
185
  &:focus {
@@ -6,6 +6,8 @@ import { CalendarState } from './useCalendarState';
6
6
  export interface CalendarProps extends WithAsProps, Omit<HTMLAttributes<HTMLDivElement>, 'onSelect' | 'onChange' | 'onMouseMove'>, CalendarHeaderProps {
7
7
  /** The panel render based on date range */
8
8
  dateRange?: Date[];
9
+ /** The Id of the target element that triggers the opening of the calendar */
10
+ targetId?: string;
9
11
  /** Date displayed on the current page */
10
12
  calendarDate: Date;
11
13
  /** Whether to show week numbers */
@@ -34,6 +34,7 @@ var CalendarContainer = /*#__PURE__*/_react.default.forwardRef(function (props,
34
34
  hoverRangeValue = props.hoverRangeValue,
35
35
  _props$isoWeek = props.isoWeek,
36
36
  isoWeek = _props$isoWeek === void 0 ? false : _props$isoWeek,
37
+ targetId = props.targetId,
37
38
  limitEndYear = props.limitEndYear,
38
39
  limitStartYear = props.limitStartYear,
39
40
  locale = props.locale,
@@ -46,7 +47,7 @@ var CalendarContainer = /*#__PURE__*/_react.default.forwardRef(function (props,
46
47
  onToggleMeridian = props.onToggleMeridian,
47
48
  onToggleMonthDropdown = props.onToggleMonthDropdown,
48
49
  onToggleTimeDropdown = props.onToggleTimeDropdown,
49
- calendarDate = props.calendarDate,
50
+ calendarDateProp = props.calendarDate,
50
51
  cellClassName = props.cellClassName,
51
52
  renderCell = props.renderCell,
52
53
  renderTitle = props.renderTitle,
@@ -54,7 +55,7 @@ var CalendarContainer = /*#__PURE__*/_react.default.forwardRef(function (props,
54
55
  showMeridian = props.showMeridian,
55
56
  showWeekNumbers = props.showWeekNumbers,
56
57
  inline = props.inline,
57
- rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "className", "classPrefix", "dateRange", "disabledBackward", "defaultState", "disabledDate", "disabledForward", "format", "hoverRangeValue", "isoWeek", "limitEndYear", "limitStartYear", "locale", "onChangeMonth", "onChangeTime", "onMouseMove", "onMoveBackward", "onMoveForward", "onSelect", "onToggleMeridian", "onToggleMonthDropdown", "onToggleTimeDropdown", "calendarDate", "cellClassName", "renderCell", "renderTitle", "renderToolbar", "showMeridian", "showWeekNumbers", "inline"]);
58
+ rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "className", "classPrefix", "dateRange", "disabledBackward", "defaultState", "disabledDate", "disabledForward", "format", "hoverRangeValue", "isoWeek", "targetId", "limitEndYear", "limitStartYear", "locale", "onChangeMonth", "onChangeTime", "onMouseMove", "onMoveBackward", "onMoveForward", "onSelect", "onToggleMeridian", "onToggleMonthDropdown", "onToggleTimeDropdown", "calendarDate", "cellClassName", "renderCell", "renderTitle", "renderToolbar", "showMeridian", "showWeekNumbers", "inline"]);
58
59
  var _useClassNames = (0, _utils.useClassNames)(classPrefix),
59
60
  withClassPrefix = _useClassNames.withClassPrefix,
60
61
  merge = _useClassNames.merge,
@@ -64,6 +65,9 @@ var CalendarContainer = /*#__PURE__*/_react.default.forwardRef(function (props,
64
65
  reset = _useCalendarState.reset,
65
66
  openMonth = _useCalendarState.openMonth,
66
67
  openTime = _useCalendarState.openTime;
68
+ var calendarDate = (0, _react.useMemo)(function () {
69
+ return (0, _dateUtils.isValid)(calendarDateProp) ? calendarDateProp : new Date();
70
+ }, [calendarDateProp]);
67
71
  var isDisabledDate = (0, _react.useCallback)(function (date) {
68
72
  var _disabledDate;
69
73
  return (_disabledDate = disabledDate === null || disabledDate === void 0 ? void 0 : disabledDate(date)) !== null && _disabledDate !== void 0 ? _disabledDate : false;
@@ -129,6 +133,7 @@ var CalendarContainer = /*#__PURE__*/_react.default.forwardRef(function (props,
129
133
  hoverRangeValue: hoverRangeValue,
130
134
  inSameMonth: inSameThisMonthDate,
131
135
  isoWeek: isoWeek,
136
+ targetId: targetId,
132
137
  locale: locale,
133
138
  onChangeMonth: handleChangeMonth,
134
139
  onChangeTime: onChangeTime,
@@ -139,10 +144,12 @@ var CalendarContainer = /*#__PURE__*/_react.default.forwardRef(function (props,
139
144
  showWeekNumbers: showWeekNumbers,
140
145
  inline: inline
141
146
  };
142
- }, [calendarDate, dateRange, format, handleChangeMonth, hoverRangeValue, inSameThisMonthDate, inline, isDisabledDate, isoWeek, locale, onChangeTime, onMouseMove, onSelect, cellClassName, renderCell, showWeekNumbers]);
147
+ }, [calendarDate, dateRange, format, handleChangeMonth, hoverRangeValue, inSameThisMonthDate, inline, isDisabledDate, isoWeek, targetId, locale, onChangeTime, onMouseMove, onSelect, cellClassName, renderCell, showWeekNumbers]);
143
148
  return /*#__PURE__*/_react.default.createElement(_CalendarContext.CalendarProvider, {
144
149
  value: contextValue
145
- }, /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({}, (0, _dateUtils.omitHideDisabledProps)(rest), {
150
+ }, /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({
151
+ "data-testid": "calendar"
152
+ }, (0, _dateUtils.omitHideDisabledProps)(rest), {
146
153
  className: calendarClasses,
147
154
  ref: ref
148
155
  }), /*#__PURE__*/_react.default.createElement(_CalendarHeader.default, {
@@ -128,6 +128,7 @@ var CalendarHeader = /*#__PURE__*/_react.default.forwardRef(function (props, ref
128
128
  }), hasMonth && monthToolbar, showTime && /*#__PURE__*/_react.default.createElement("div", {
129
129
  className: prefix('time-toolbar')
130
130
  }, /*#__PURE__*/_react.default.createElement(_Button.default, (0, _extends2.default)({}, btnProps, {
131
+ "aria-label": "Select time",
131
132
  className: timeTitleClasses,
132
133
  onClick: onToggleTimeDropdown,
133
134
  disabled: disableSelectTime
@@ -135,6 +136,7 @@ var CalendarHeader = /*#__PURE__*/_react.default.forwardRef(function (props, ref
135
136
  date: date,
136
137
  formatStr: getTimeFormat()
137
138
  })), showMeridian && /*#__PURE__*/_react.default.createElement(_Button.default, (0, _extends2.default)({}, btnProps, {
139
+ "aria-label": "Toggle meridian",
138
140
  className: prefix('meridian'),
139
141
  onClick: onToggleMeridian,
140
142
  disabled: disableSelectTime
@@ -42,7 +42,8 @@ var MonthDropdown = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
42
42
  rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "className", "classPrefix", "limitStartYear", "limitEndYear", "show", "height", "width", "disabledMonth"]);
43
43
  var _useCalendarContext = (0, _CalendarContext.useCalendarContext)(),
44
44
  _useCalendarContext$d = _useCalendarContext.date,
45
- date = _useCalendarContext$d === void 0 ? new Date() : _useCalendarContext$d;
45
+ date = _useCalendarContext$d === void 0 ? new Date() : _useCalendarContext$d,
46
+ targetId = _useCalendarContext.targetId;
46
47
  var _useClassNames = (0, _utils.useClassNames)(classPrefix),
47
48
  prefix = _useClassNames.prefix,
48
49
  merge = _useClassNames.merge,
@@ -76,6 +77,7 @@ var MonthDropdown = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
76
77
  return /*#__PURE__*/_react.default.createElement("div", {
77
78
  className: rowClassName,
78
79
  role: "row",
80
+ "aria-label": "" + year,
79
81
  style: style
80
82
  }, /*#__PURE__*/_react.default.createElement("div", {
81
83
  className: titleClassName,
@@ -99,7 +101,10 @@ var MonthDropdown = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
99
101
  var initialItemIndex = _utils.DateUtils.getYear(date) - startYear;
100
102
  var initialScrollOffset = itemSize * initialItemIndex;
101
103
  return /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({
102
- role: "menu"
104
+ role: "grid",
105
+ "aria-label": "Select month",
106
+ tabIndex: -1,
107
+ id: targetId ? targetId + "-" + classPrefix : undefined
103
108
  }, rest, {
104
109
  ref: ref,
105
110
  className: classes
@@ -61,8 +61,8 @@ var MonthDropdownItem = /*#__PURE__*/_react.default.forwardRef(function (props,
61
61
  return /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({
62
62
  key: month,
63
63
  role: "gridcell",
64
- "aria-selected": active ? true : undefined,
65
- "aria-disabled": disabled ? true : undefined,
64
+ "aria-selected": active,
65
+ "aria-disabled": disabled,
66
66
  "aria-label": ariaLabel,
67
67
  tabIndex: active ? 0 : -1,
68
68
  ref: ref,
@@ -11,6 +11,7 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
11
11
  var _TableRow = _interopRequireDefault(require("./TableRow"));
12
12
  var _TableHeaderRow = _interopRequireDefault(require("./TableHeaderRow"));
13
13
  var _utils = require("../utils");
14
+ var _CalendarContext = require("./CalendarContext");
14
15
  var Table = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
15
16
  var _props$as = props.as,
16
17
  Component = _props$as === void 0 ? 'div' : _props$as,
@@ -24,8 +25,12 @@ var Table = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
24
25
  merge = _useClassNames.merge,
25
26
  withClassPrefix = _useClassNames.withClassPrefix;
26
27
  var classes = merge(className, withClassPrefix());
28
+ var _useCalendarContext = (0, _CalendarContext.useCalendarContext)(),
29
+ targetId = _useCalendarContext.targetId;
27
30
  return /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({
28
- role: "grid"
31
+ role: "grid",
32
+ tabIndex: -1,
33
+ id: targetId ? targetId + "-" + classPrefix : undefined
29
34
  }, rest, {
30
35
  ref: ref,
31
36
  className: classes
@@ -98,7 +98,8 @@ var TimeDropdown = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
98
98
  locale = _useCalendarContext.locale,
99
99
  format = _useCalendarContext.format,
100
100
  date = _useCalendarContext.date,
101
- onSelect = _useCalendarContext.onChangeTime;
101
+ onSelect = _useCalendarContext.onChangeTime,
102
+ targetId = _useCalendarContext.targetId;
102
103
  var rowRef = (0, _react.useRef)(null);
103
104
  (0, _react.useEffect)(function () {
104
105
  var time = getTime({
@@ -149,24 +150,26 @@ var TimeDropdown = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
149
150
  });
150
151
  items.push( /*#__PURE__*/_react.default.createElement("li", {
151
152
  key: i,
152
- role: "menuitem"
153
- }, /*#__PURE__*/_react.default.createElement("a", {
154
- role: "button",
155
- className: itemClasses,
153
+ role: "option",
156
154
  tabIndex: -1,
155
+ "aria-label": i + " " + type,
156
+ "aria-selected": active === i,
157
+ "aria-disabled": disabled,
157
158
  "data-key": type + "-" + i,
158
159
  onClick: !disabled ? (0, _partial.default)(handleClick, type, i) : undefined
160
+ }, /*#__PURE__*/_react.default.createElement("span", {
161
+ className: itemClasses
159
162
  }, showMeridian && type === 'hours' && i === 0 ? '12' : i)));
160
163
  }
161
164
  }
162
165
  return /*#__PURE__*/_react.default.createElement("div", {
163
- className: prefix('column'),
164
- role: "listitem"
166
+ className: prefix('column')
165
167
  }, /*#__PURE__*/_react.default.createElement("div", {
166
168
  className: prefix('column-title')
167
169
  }, locale === null || locale === void 0 ? void 0 : locale[type]), /*#__PURE__*/_react.default.createElement("ul", {
168
170
  "data-type": type,
169
- role: "menu"
171
+ role: "listbox",
172
+ "aria-label": "Select " + type
170
173
  }, items));
171
174
  };
172
175
  var time = getTime({
@@ -174,9 +177,13 @@ var TimeDropdown = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
174
177
  date: date,
175
178
  showMeridian: showMeridian
176
179
  });
177
- var classes = merge(className, rootPrefix(classPrefix));
180
+ var classes = merge(className, rootPrefix(classPrefix), {
181
+ show: show
182
+ });
178
183
  return /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({
179
- role: "list"
184
+ role: "group",
185
+ tabIndex: -1,
186
+ id: targetId ? targetId + "-" + classPrefix : undefined
180
187
  }, _utils.DateUtils.omitHideDisabledProps(rest), {
181
188
  ref: ref,
182
189
  className: classes
@@ -16,6 +16,7 @@ export interface CalendarInnerContextValue {
16
16
  cellClassName?: (date: Date) => string | undefined;
17
17
  showWeekNumbers?: boolean;
18
18
  inline?: boolean;
19
+ targetId?: string;
19
20
  }
20
21
  export interface CalendarContextValue extends CalendarInnerContextValue {
21
22
  locale: CalendarLocale;
@@ -67,6 +67,19 @@ declare const CustomContext: React.Context<CustomProviderProps<{
67
67
  more: string;
68
68
  prev: string;
69
69
  next: string;
70
+ /**
71
+ * Return the date parsed from string using the given format string.
72
+ *
73
+ * Example:
74
+ *
75
+ * import parse from 'date-fns/parse';
76
+ * import eo from 'date-fns/locale/eo'
77
+ *
78
+ * function parseDate(date, formatStr) {
79
+ * return parse(date, formatStr, new Date(), { locale: eo });
80
+ * }
81
+ *
82
+ * */
70
83
  first: string;
71
84
  last: string;
72
85
  limit: string;
@@ -7,7 +7,7 @@ exports.__esModule = true;
7
7
  exports.default = exports.CustomContext = void 0;
8
8
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
9
  var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
10
- var _react = _interopRequireWildcard(require("react"));
10
+ var _react = _interopRequireDefault(require("react"));
11
11
  var _prefix = require("../utils/prefix");
12
12
  var _DOMHelper = require("../DOMHelper");
13
13
  var _ToastContainer = _interopRequireWildcard(require("../toaster/ToastContainer"));
@@ -43,7 +43,7 @@ var CustomProvider = function CustomProvider(props) {
43
43
  disableRipple: disableRipple
44
44
  }, rest);
45
45
  }, [classPrefix, theme, disableRipple, rest]);
46
- (0, _react.useEffect)(function () {
46
+ (0, _utils.useIsomorphicLayoutEffect)(function () {
47
47
  if (_DOMHelper.canUseDOM && theme) {
48
48
  (0, _DOMHelper.addClass)(document.body, (0, _prefix.prefix)(classPrefix, "theme-" + theme));
49
49
 
@@ -1,5 +1,5 @@
1
1
  /// <reference types="react" />
2
- import { type Locale } from 'date-fns';
2
+ import type { Locale } from 'date-fns';
3
3
  export declare const patternMap: {
4
4
  y: string;
5
5
  M: string;
@@ -22,9 +22,12 @@ export declare class DateField extends Object {
22
22
  hour: number | null;
23
23
  minute: number | null;
24
24
  second: number | null;
25
- meridian: 'AM' | 'PM' | null;
26
25
  constructor(format: string, value?: Date | null);
27
26
  }
27
+ interface Action {
28
+ type: string;
29
+ value: any;
30
+ }
28
31
  export declare const useDateField: (format: string, localize: Locale['localize'], date?: Date | null) => {
29
32
  dateField: {
30
33
  year: any;
@@ -38,7 +41,6 @@ export declare const useDateField: (format: string, localize: Locale['localize']
38
41
  hour: number | null;
39
42
  minute: number | null;
40
43
  second: number | null;
41
- meridian: 'AM' | 'PM' | null;
42
44
  constructor: Function;
43
45
  toString(): string;
44
46
  toLocaleString(): string;
@@ -59,7 +61,6 @@ export declare const useDateField: (format: string, localize: Locale['localize']
59
61
  hour: number | null;
60
62
  minute: number | null;
61
63
  second: number | null;
62
- meridian: 'AM' | 'PM' | null;
63
64
  constructor: Function;
64
65
  toString(): string;
65
66
  toLocaleString(): string;
@@ -80,7 +81,6 @@ export declare const useDateField: (format: string, localize: Locale['localize']
80
81
  hour: number | null;
81
82
  minute: number | null;
82
83
  second: number | null;
83
- meridian: 'AM' | 'PM' | null;
84
84
  constructor: Function;
85
85
  toString(): string;
86
86
  toLocaleString(): string;
@@ -101,7 +101,6 @@ export declare const useDateField: (format: string, localize: Locale['localize']
101
101
  day: number | null;
102
102
  minute: number | null;
103
103
  second: number | null;
104
- meridian: 'AM' | 'PM' | null;
105
104
  constructor: Function;
106
105
  toString(): string;
107
106
  toLocaleString(): string;
@@ -122,7 +121,6 @@ export declare const useDateField: (format: string, localize: Locale['localize']
122
121
  day: number | null;
123
122
  hour: number | null;
124
123
  second: number | null;
125
- meridian: 'AM' | 'PM' | null;
126
124
  constructor: Function;
127
125
  toString(): string;
128
126
  toLocaleString(): string;
@@ -143,28 +141,6 @@ export declare const useDateField: (format: string, localize: Locale['localize']
143
141
  day: number | null;
144
142
  hour: number | null;
145
143
  minute: number | null;
146
- meridian: 'AM' | 'PM' | null;
147
- constructor: Function;
148
- toString(): string;
149
- toLocaleString(): string;
150
- valueOf(): Object;
151
- hasOwnProperty(v: PropertyKey): boolean;
152
- isPrototypeOf(v: Object): boolean;
153
- propertyIsEnumerable(v: PropertyKey): boolean;
154
- should: Chai.Assertion;
155
- } | {
156
- meridian: any;
157
- format: string;
158
- patternArray: {
159
- pattern: string;
160
- key: string;
161
- }[];
162
- year: number | null;
163
- month: number | null;
164
- day: number | null;
165
- hour: number | null;
166
- minute: number | null;
167
- second: number | null;
168
144
  constructor: Function;
169
145
  toString(): string;
170
146
  toLocaleString(): string;
@@ -174,7 +150,9 @@ export declare const useDateField: (format: string, localize: Locale['localize']
174
150
  propertyIsEnumerable(v: PropertyKey): boolean;
175
151
  should: Chai.Assertion;
176
152
  };
177
- dispatch: import("react").Dispatch<any>;
178
- toDate: (type: string, value: number | null) => Date;
153
+ dispatch: import("react").Dispatch<Action>;
154
+ toDate: (type?: string, value?: number | null) => Date | null;
179
155
  toDateString: () => string;
156
+ isEmptyValue: (type?: string, value?: number | null) => boolean | undefined;
180
157
  };
158
+ export {};