rsuite 5.54.0 → 5.55.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 (83) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/Pagination/styles/index.css +3 -0
  3. package/Pagination/styles/pagination-group.less +4 -0
  4. package/cjs/Calendar/CalendarContainer.d.ts +4 -0
  5. package/cjs/Calendar/CalendarContainer.js +3 -1
  6. package/cjs/Calendar/TableCell.js +3 -2
  7. package/cjs/Calendar/types.d.ts +1 -0
  8. package/cjs/Cascader/DropdownMenu.js +3 -1
  9. package/cjs/Cascader/TreeView.js +3 -1
  10. package/cjs/DOMHelper/index.d.ts +23 -32
  11. package/cjs/DatePicker/DatePicker.d.ts +6 -0
  12. package/cjs/DatePicker/DatePicker.js +3 -2
  13. package/cjs/DateRangePicker/DateRangePicker.js +3 -2
  14. package/cjs/InputNumber/InputNumber.d.ts +36 -11
  15. package/cjs/InputNumber/InputNumber.js +47 -28
  16. package/cjs/Pagination/LimitPicker.d.ts +15 -0
  17. package/cjs/Pagination/LimitPicker.js +51 -0
  18. package/cjs/Pagination/Pagination.js +7 -8
  19. package/cjs/Pagination/PaginationButton.js +3 -18
  20. package/cjs/Pagination/PaginationGroup.d.ts +35 -7
  21. package/cjs/Pagination/PaginationGroup.js +77 -98
  22. package/cjs/RangeSlider/RangeSlider.js +14 -11
  23. package/cjs/Slider/Handle.js +19 -62
  24. package/cjs/Slider/ProgressBar.js +2 -1
  25. package/cjs/Slider/Slider.js +14 -10
  26. package/cjs/Slider/useDrag.d.ts +16 -0
  27. package/cjs/Slider/useDrag.js +88 -0
  28. package/cjs/Slider/utils.d.ts +6 -2
  29. package/cjs/Slider/utils.js +15 -1
  30. package/cjs/internals/Overlay/positionUtils.d.ts +1 -6
  31. package/cjs/locales/cs_CZ.d.ts +120 -0
  32. package/cjs/locales/cs_CZ.js +88 -0
  33. package/cjs/locales/index.d.ts +1 -0
  34. package/cjs/locales/index.js +4 -2
  35. package/dist/rsuite-no-reset-rtl.css +3 -0
  36. package/dist/rsuite-no-reset-rtl.min.css +1 -1
  37. package/dist/rsuite-no-reset-rtl.min.css.map +1 -1
  38. package/dist/rsuite-no-reset.css +3 -0
  39. package/dist/rsuite-no-reset.min.css +1 -1
  40. package/dist/rsuite-no-reset.min.css.map +1 -1
  41. package/dist/rsuite-rtl.css +3 -0
  42. package/dist/rsuite-rtl.min.css +1 -1
  43. package/dist/rsuite-rtl.min.css.map +1 -1
  44. package/dist/rsuite.css +3 -0
  45. package/dist/rsuite.js +88 -55
  46. package/dist/rsuite.js.map +1 -1
  47. package/dist/rsuite.min.css +1 -1
  48. package/dist/rsuite.min.css.map +1 -1
  49. package/dist/rsuite.min.js +1 -1
  50. package/dist/rsuite.min.js.map +1 -1
  51. package/esm/Calendar/CalendarContainer.d.ts +4 -0
  52. package/esm/Calendar/CalendarContainer.js +3 -1
  53. package/esm/Calendar/TableCell.js +5 -4
  54. package/esm/Calendar/types.d.ts +1 -0
  55. package/esm/Cascader/DropdownMenu.js +3 -1
  56. package/esm/Cascader/TreeView.js +3 -1
  57. package/esm/DOMHelper/index.d.ts +23 -32
  58. package/esm/DatePicker/DatePicker.d.ts +6 -0
  59. package/esm/DatePicker/DatePicker.js +3 -2
  60. package/esm/DateRangePicker/DateRangePicker.js +3 -2
  61. package/esm/InputNumber/InputNumber.d.ts +36 -11
  62. package/esm/InputNumber/InputNumber.js +49 -30
  63. package/esm/Pagination/LimitPicker.d.ts +15 -0
  64. package/esm/Pagination/LimitPicker.js +44 -0
  65. package/esm/Pagination/Pagination.js +7 -7
  66. package/esm/Pagination/PaginationButton.js +4 -18
  67. package/esm/Pagination/PaginationGroup.d.ts +35 -7
  68. package/esm/Pagination/PaginationGroup.js +79 -98
  69. package/esm/RangeSlider/RangeSlider.js +15 -12
  70. package/esm/Slider/Handle.js +19 -61
  71. package/esm/Slider/ProgressBar.js +2 -1
  72. package/esm/Slider/Slider.js +16 -12
  73. package/esm/Slider/useDrag.d.ts +16 -0
  74. package/esm/Slider/useDrag.js +82 -0
  75. package/esm/Slider/utils.d.ts +6 -2
  76. package/esm/Slider/utils.js +15 -3
  77. package/esm/internals/Overlay/positionUtils.d.ts +1 -6
  78. package/esm/locales/cs_CZ.d.ts +120 -0
  79. package/esm/locales/cs_CZ.js +82 -0
  80. package/esm/locales/index.d.ts +1 -0
  81. package/esm/locales/index.js +2 -1
  82. package/locales/cs_CZ/package.json +7 -0
  83. package/package.json +2 -2
@@ -1,19 +1,47 @@
1
1
  import { PaginationProps } from './Pagination';
2
2
  import { RsRefForwardingComponent } from '../@types/common';
3
- declare type LayoutType = 'total' | '-' | 'pager' | '|' | 'limit' | 'skip';
3
+ /**
4
+ * The layout of the paging component.
5
+ */
6
+ declare type LayoutType = 'total' | 'pager' | 'limit' | 'skip' | '-' | '|';
4
7
  export interface PaginationGroupProps extends PaginationProps {
5
- /** Customize the layout of a paging component */
8
+ /**
9
+ * Customize the layout of a paging component.
10
+ * - `total` Component used to display the total.
11
+ * - `pager` Component used to display the page number.
12
+ * - `limit` Component used to display the number of rows per page.
13
+ * - `skip` Component used to jump to a page.
14
+ * - `-` Placeholder, take up the remaining space.
15
+ * - `|` Divider
16
+ *
17
+ * @default ['pager']
18
+ */
6
19
  layout?: LayoutType[];
7
- /** Customizes the options of the rows per page select field. */
20
+ /**
21
+ * Customizes the options of the rows per page select field.
22
+ */
8
23
  limitOptions?: number[];
9
- /** Customize the layout of a paging component */
24
+ /**
25
+ * Customize the layout of a paging component.
26
+ */
10
27
  limit?: number;
11
- /** Total number of data entries */
28
+ /**
29
+ * Total number of data entries.
30
+ */
12
31
  total: number;
13
- /** Callback fired when the page is changed */
32
+ /**
33
+ * Callback fired when the page is changed.
34
+ */
14
35
  onChangePage?: (page: number) => void;
15
- /** Callback fired when the number of rows per page is changed */
36
+ /**
37
+ * Callback fired when the number of rows per page is changed.
38
+ */
16
39
  onChangeLimit?: (limit: number) => void;
17
40
  }
41
+ /**
42
+ * Pagination component for displaying page numbers.
43
+ *
44
+ * @see https://rsuitejs.com/components/pagination
45
+ */
18
46
  declare const PaginationGroup: RsRefForwardingComponent<'div', PaginationGroupProps>;
19
47
  export default PaginationGroup;
@@ -1,73 +1,52 @@
1
1
  'use client';
2
2
  import _extends from "@babel/runtime/helpers/esm/extends";
3
3
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
4
- import React, { useCallback } from 'react';
4
+ import React from 'react';
5
5
  import PropTypes from 'prop-types';
6
6
  import classNames from 'classnames';
7
7
  import Pagination from './Pagination';
8
- import SelectPicker from '../SelectPicker';
9
8
  import Divider from '../Divider';
10
9
  import Input from '../Input';
11
- import { tplTransform, useClassNames, useCustom, useControlled } from '../utils';
12
- var LimitPicker = function LimitPicker(props) {
13
- var disabled = props.disabled,
14
- limitOptions = props.limitOptions,
15
- locale = props.locale,
16
- limit = props.limit,
17
- onChangeLimit = props.onChangeLimit,
18
- size = props.size,
19
- prefix = props.prefix;
20
- var disabledPicker = typeof disabled === 'function' ? disabled('picker') : Boolean(disabled);
21
- var formatlimitOptions = limitOptions.map(function (item) {
22
- return {
23
- value: item,
24
- label: locale.limit && tplTransform(locale.limit, item)
25
- };
26
- });
27
- return /*#__PURE__*/React.createElement("div", {
28
- className: prefix('limit')
29
- }, /*#__PURE__*/React.createElement(SelectPicker, {
30
- size: size,
31
- cleanable: false,
32
- searchable: false,
33
- placement: "topStart",
34
- data: formatlimitOptions,
35
- value: limit,
36
- onChange: onChangeLimit // fixme don't use any
37
- ,
38
- menuStyle: {
39
- minWidth: 'auto'
40
- },
41
- disabled: disabledPicker
42
- }));
43
- };
10
+ import { tplTransform, useClassNames, useCustom, useControlled, useEventCallback } from '../utils';
11
+ import LimitPicker from './LimitPicker';
12
+
13
+ /**
14
+ * The layout of the paging component.
15
+ */
16
+
44
17
  var defaultLayout = ['pager'];
45
18
  var defaultLimitOptions = [30, 50, 100];
19
+
20
+ /**
21
+ * Pagination component for displaying page numbers.
22
+ *
23
+ * @see https://rsuitejs.com/components/pagination
24
+ */
46
25
  var PaginationGroup = /*#__PURE__*/React.forwardRef(function (props, ref) {
47
26
  var _props$as = props.as,
48
27
  Component = _props$as === void 0 ? 'div' : _props$as,
28
+ activePageProp = props.activePage,
49
29
  _props$classPrefix = props.classPrefix,
50
30
  classPrefix = _props$classPrefix === void 0 ? 'pagination-group' : _props$classPrefix,
31
+ className = props.className,
32
+ disabled = props.disabled,
51
33
  size = props.size,
34
+ style = props.style,
52
35
  total = props.total,
53
36
  prev = props.prev,
54
37
  next = props.next,
55
38
  first = props.first,
56
39
  last = props.last,
57
- maxButtons = props.maxButtons,
58
- className = props.className,
59
40
  _props$limitOptions = props.limitOptions,
60
41
  limitOptions = _props$limitOptions === void 0 ? defaultLimitOptions : _props$limitOptions,
61
42
  limitProp = props.limit,
62
- activePageProp = props.activePage,
63
- disabled = props.disabled,
64
- style = props.style,
65
43
  localeProp = props.locale,
66
44
  _props$layout = props.layout,
67
45
  layout = _props$layout === void 0 ? defaultLayout : _props$layout,
46
+ maxButtons = props.maxButtons,
68
47
  onChangePage = props.onChangePage,
69
48
  onChangeLimit = props.onChangeLimit,
70
- rest = _objectWithoutPropertiesLoose(props, ["as", "classPrefix", "size", "total", "prev", "next", "first", "last", "maxButtons", "className", "limitOptions", "limit", "activePage", "disabled", "style", "locale", "layout", "onChangePage", "onChangeLimit"]);
49
+ rest = _objectWithoutPropertiesLoose(props, ["as", "activePage", "classPrefix", "className", "disabled", "size", "style", "total", "prev", "next", "first", "last", "limitOptions", "limit", "locale", "layout", "maxButtons", "onChangePage", "onChangeLimit"]);
71
50
  var _useClassNames = useClassNames(classPrefix),
72
51
  merge = _useClassNames.merge,
73
52
  prefix = _useClassNames.prefix,
@@ -82,80 +61,82 @@ var PaginationGroup = /*#__PURE__*/React.forwardRef(function (props, ref) {
82
61
  locale = _useCustom.locale;
83
62
  var pages = Math.floor(total / limit) + (total % limit ? 1 : 0);
84
63
  var classes = merge(className, withClassPrefix(size));
85
- var handleInputBlur = useCallback(function (event) {
64
+ var handleInputBlur = useEventCallback(function (event) {
86
65
  var value = parseInt(event.target.value);
87
66
  if (value > 0 && value <= pages) {
88
67
  onChangePage === null || onChangePage === void 0 ? void 0 : onChangePage(value);
89
68
  setActivePage(value);
90
69
  }
91
70
  event.target.value = '';
92
- }, [onChangePage, pages, setActivePage]);
93
- var handleInputPressEnter = useCallback(function (event) {
71
+ });
72
+ var handleInputPressEnter = useEventCallback(function (event) {
94
73
  var _event$target;
95
74
  (_event$target = event.target) === null || _event$target === void 0 ? void 0 : _event$target.blur();
96
- }, []);
97
- var handleChangeLimit = useCallback(function (value) {
75
+ });
76
+ var handleChangeLimit = useEventCallback(function (value) {
98
77
  setLimit(value);
99
78
  onChangeLimit === null || onChangeLimit === void 0 ? void 0 : onChangeLimit(value);
100
- }, [onChangeLimit, setLimit]);
79
+ });
101
80
  return /*#__PURE__*/React.createElement(Component, {
102
81
  ref: ref,
103
82
  className: classes,
104
83
  style: style
105
84
  }, layout.map(function (key, index) {
106
85
  var onlyKey = "" + key + index;
107
- if (key === '-') {
108
- return /*#__PURE__*/React.createElement("div", {
109
- className: prefix('grow'),
110
- key: onlyKey
111
- });
112
- } else if (key === '|') {
113
- return /*#__PURE__*/React.createElement(Divider, {
114
- vertical: true,
115
- key: onlyKey
116
- });
117
- } else if (key === 'pager') {
118
- return /*#__PURE__*/React.createElement(Pagination, _extends({
119
- key: onlyKey,
120
- size: size,
121
- prev: prev,
122
- next: next,
123
- first: first,
124
- last: last,
125
- maxButtons: maxButtons,
126
- pages: pages,
127
- disabled: disabled,
128
- onSelect: onChangePage // fixme don't use any
129
- ,
130
- activePage: activePage
131
- }, rest));
132
- } else if (key === 'total') {
133
- return /*#__PURE__*/React.createElement("div", {
134
- key: onlyKey,
135
- className: prefix('total')
136
- }, locale.total && tplTransform(locale.total, total));
137
- } else if (key === 'skip') {
138
- return /*#__PURE__*/React.createElement("div", {
139
- key: onlyKey,
140
- className: classNames(prefix('skip'))
141
- }, locale.skip && tplTransform(locale.skip, /*#__PURE__*/React.createElement(Input, {
142
- size: size,
143
- onBlur: handleInputBlur,
144
- onPressEnter: handleInputPressEnter
145
- })));
146
- } else if (key === 'limit') {
147
- return /*#__PURE__*/React.createElement(LimitPicker, {
148
- key: onlyKey,
149
- size: size,
150
- locale: locale,
151
- limit: limit,
152
- onChangeLimit: handleChangeLimit,
153
- limitOptions: limitOptions,
154
- disabled: disabled,
155
- prefix: prefix
156
- });
86
+ switch (key) {
87
+ case '-':
88
+ return /*#__PURE__*/React.createElement("div", {
89
+ className: prefix('grow'),
90
+ key: onlyKey
91
+ });
92
+ case '|':
93
+ return /*#__PURE__*/React.createElement(Divider, {
94
+ vertical: true,
95
+ key: onlyKey
96
+ });
97
+ case 'pager':
98
+ return /*#__PURE__*/React.createElement(Pagination, _extends({
99
+ key: onlyKey,
100
+ size: size,
101
+ prev: prev,
102
+ next: next,
103
+ first: first,
104
+ last: last,
105
+ maxButtons: maxButtons,
106
+ pages: pages,
107
+ disabled: disabled,
108
+ onSelect: onChangePage // fixme don't use any
109
+ ,
110
+ activePage: activePage
111
+ }, rest));
112
+ case 'total':
113
+ return /*#__PURE__*/React.createElement("div", {
114
+ key: onlyKey,
115
+ className: prefix('total')
116
+ }, locale.total && tplTransform(locale.total, total));
117
+ case 'skip':
118
+ return /*#__PURE__*/React.createElement("div", {
119
+ key: onlyKey,
120
+ className: classNames(prefix('skip'))
121
+ }, locale.skip && tplTransform(locale.skip, /*#__PURE__*/React.createElement(Input, {
122
+ size: size,
123
+ onBlur: handleInputBlur,
124
+ onPressEnter: handleInputPressEnter
125
+ })));
126
+ case 'limit':
127
+ return /*#__PURE__*/React.createElement(LimitPicker, {
128
+ key: onlyKey,
129
+ size: size,
130
+ locale: locale,
131
+ limit: limit,
132
+ onChangeLimit: handleChangeLimit,
133
+ limitOptions: limitOptions,
134
+ disabled: disabled,
135
+ prefix: prefix
136
+ });
137
+ default:
138
+ return key;
157
139
  }
158
- return key;
159
140
  }));
160
141
  });
161
142
  PaginationGroup.displayName = 'PaginationGroup';
@@ -11,7 +11,7 @@ import { sliderPropTypes } from '../Slider/Slider';
11
11
  import ProgressBar from '../Slider/ProgressBar';
12
12
  import Handle from '../Slider/Handle';
13
13
  import Graduated from '../Slider/Graduated';
14
- import { precisionMath, checkValue } from '../Slider/utils';
14
+ import { precisionMath, checkValue, getPosition } from '../Slider/utils';
15
15
  import { tupleType } from '../internals/propTypes';
16
16
  var defaultDefaultValue = [0, 0];
17
17
 
@@ -27,17 +27,17 @@ var RangeSlider = /*#__PURE__*/React.forwardRef(function (props, ref) {
27
27
  Component = _props$as === void 0 ? 'div' : _props$as,
28
28
  barClassName = props.barClassName,
29
29
  className = props.className,
30
+ _props$classPrefix = props.classPrefix,
31
+ classPrefix = _props$classPrefix === void 0 ? 'slider' : _props$classPrefix,
30
32
  constraint = props.constraint,
31
33
  _props$defaultValue = props.defaultValue,
32
34
  defaultValue = _props$defaultValue === void 0 ? defaultDefaultValue : _props$defaultValue,
35
+ disabled = props.disabled,
33
36
  graduated = props.graduated,
34
37
  _props$progress = props.progress,
35
38
  progress = _props$progress === void 0 ? true : _props$progress,
36
39
  vertical = props.vertical,
37
- disabled = props.disabled,
38
40
  readOnly = props.readOnly,
39
- _props$classPrefix = props.classPrefix,
40
- classPrefix = _props$classPrefix === void 0 ? 'slider' : _props$classPrefix,
41
41
  _props$min = props.min,
42
42
  min = _props$min === void 0 ? 0 : _props$min,
43
43
  _props$max = props.max,
@@ -55,7 +55,7 @@ var RangeSlider = /*#__PURE__*/React.forwardRef(function (props, ref) {
55
55
  renderMark = props.renderMark,
56
56
  onChange = props.onChange,
57
57
  onChangeCommitted = props.onChangeCommitted,
58
- rest = _objectWithoutPropertiesLoose(props, ["aria-label", "aria-labelledby", "aria-valuetext", "as", "barClassName", "className", "constraint", "defaultValue", "graduated", "progress", "vertical", "disabled", "readOnly", "classPrefix", "min", "max", "step", "value", "handleClassName", "handleStyle", "handleTitle", "tooltip", "getAriaValueText", "renderTooltip", "renderMark", "onChange", "onChangeCommitted"]);
58
+ rest = _objectWithoutPropertiesLoose(props, ["aria-label", "aria-labelledby", "aria-valuetext", "as", "barClassName", "className", "classPrefix", "constraint", "defaultValue", "disabled", "graduated", "progress", "vertical", "readOnly", "min", "max", "step", "value", "handleClassName", "handleStyle", "handleTitle", "tooltip", "getAriaValueText", "renderTooltip", "renderMark", "onChange", "onChangeCommitted"]);
59
59
  var barRef = useRef(null);
60
60
 
61
61
  // Define the parameter position of the handle
@@ -116,7 +116,10 @@ var RangeSlider = /*#__PURE__*/React.forwardRef(function (props, ref) {
116
116
  }, [count, getBarHeight, getBarWidth, step, vertical]);
117
117
  var getValueByPosition = useCallback(function (event) {
118
118
  var barOffset = getOffset(barRef.current);
119
- var offset = vertical ? barOffset.top + barOffset.height - event.pageY : event.pageX - barOffset.left;
119
+ var _getPosition = getPosition(event),
120
+ pageX = _getPosition.pageX,
121
+ pageY = _getPosition.pageY;
122
+ var offset = vertical ? barOffset.top + barOffset.height - pageY : pageX - barOffset.left;
120
123
  var val = rtl && !vertical ? barOffset.width - offset : offset;
121
124
  return getValueByOffset(val) + min;
122
125
  }, [getValueByOffset, min, rtl, vertical]);
@@ -181,7 +184,7 @@ var RangeSlider = /*#__PURE__*/React.forwardRef(function (props, ref) {
181
184
  /**
182
185
  * Callback function that is fired when the mouseup is triggered
183
186
  */
184
- var handleChangeCommitted = useCallback(function (event, dataset) {
187
+ var handleChangeCommitted = useEventCallback(function (event, dataset) {
185
188
  if (disabled || readOnly) {
186
189
  return;
187
190
  }
@@ -190,8 +193,8 @@ var RangeSlider = /*#__PURE__*/React.forwardRef(function (props, ref) {
190
193
  setValue(nextValue);
191
194
  onChangeCommitted === null || onChangeCommitted === void 0 ? void 0 : onChangeCommitted(nextValue, event);
192
195
  }
193
- }, [disabled, readOnly, getNextValue, isRangeMatchingConstraint, setValue, onChangeCommitted]);
194
- var handleKeyDown = useCallback(function (event) {
196
+ });
197
+ var handleKeyDown = useEventCallback(function (event) {
195
198
  var _event$target;
196
199
  var _event$target$dataset = (_event$target = event.target) === null || _event$target === void 0 ? void 0 : _event$target['dataset'],
197
200
  key = _event$target$dataset.key;
@@ -230,8 +233,8 @@ var RangeSlider = /*#__PURE__*/React.forwardRef(function (props, ref) {
230
233
  setValue(nextValue);
231
234
  onChange === null || onChange === void 0 ? void 0 : onChange(nextValue, event);
232
235
  }
233
- }, [max, min, onChange, rtl, isRangeMatchingConstraint, setValue, step, value]);
234
- var handleBarClick = useCallback(function (event) {
236
+ });
237
+ var handleBarClick = useEventCallback(function (event) {
235
238
  if (disabled || readOnly) {
236
239
  return;
237
240
  }
@@ -253,7 +256,7 @@ var RangeSlider = /*#__PURE__*/React.forwardRef(function (props, ref) {
253
256
  onChange === null || onChange === void 0 ? void 0 : onChange(nextValue, event);
254
257
  onChangeCommitted === null || onChangeCommitted === void 0 ? void 0 : onChangeCommitted(nextValue, event);
255
258
  }
256
- }, [disabled, readOnly, getValidValue, getValueByPosition, isRangeMatchingConstraint, onChange, onChangeCommitted, setValue, value]);
259
+ });
257
260
  var handleProps = useMemo(function () {
258
261
  return [{
259
262
  value: value[0],
@@ -1,14 +1,12 @@
1
1
  'use client';
2
2
  import _extends from "@babel/runtime/helpers/esm/extends";
3
3
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
4
- import React, { useState, useRef, useEffect, useCallback } from 'react';
4
+ import React from 'react';
5
5
  import PropTypes from 'prop-types';
6
- import DOMMouseMoveTracker from 'dom-lib/DOMMouseMoveTracker';
7
- import addStyle from 'dom-lib/addStyle';
8
- import getWidth from 'dom-lib/getWidth';
9
6
  import Tooltip from '../Tooltip';
10
7
  import { useClassNames, mergeRefs } from '../utils';
11
8
  import Input from './Input';
9
+ import useDrag from './useDrag';
12
10
  var Handle = /*#__PURE__*/React.forwardRef(function (props, ref) {
13
11
  var _extends2;
14
12
  var _props$as = props.as,
@@ -34,80 +32,40 @@ var Handle = /*#__PURE__*/React.forwardRef(function (props, ref) {
34
32
  dataRange = props['data-range'],
35
33
  dateKey = props['data-key'],
36
34
  rest = _objectWithoutPropertiesLoose(props, ["as", "classPrefix", "className", "disabled", "style", "children", "position", "vertical", "tooltip", "rtl", "value", "role", "tabIndex", "renderTooltip", "onDragStart", "onDragMove", "onDragEnd", "onKeyDown", "data-range", "data-key"]);
37
- var _useState = useState(false),
38
- active = _useState[0],
39
- setActive = _useState[1];
40
- var rootRef = useRef(null);
41
35
  var horizontalKey = rtl ? 'right' : 'left';
42
36
  var direction = vertical ? 'bottom' : horizontalKey;
43
37
  var styles = _extends({}, style, (_extends2 = {}, _extends2[direction] = position + "%", _extends2));
44
38
  var _useClassNames = useClassNames(classPrefix),
45
39
  merge = _useClassNames.merge,
46
40
  prefix = _useClassNames.prefix;
41
+ var _useDrag = useDrag({
42
+ tooltip: tooltip,
43
+ disabled: disabled,
44
+ onDragStart: onDragStart,
45
+ onDragMove: onDragMove,
46
+ onDragEnd: onDragEnd
47
+ }),
48
+ active = _useDrag.active,
49
+ onMoveStart = _useDrag.onMoveStart,
50
+ onMouseEnter = _useDrag.onMouseEnter,
51
+ rootRef = _useDrag.rootRef,
52
+ tooltipRef = _useDrag.tooltipRef;
47
53
  var handleClasses = merge(className, prefix('handle'), {
48
54
  active: active
49
55
  });
50
- var tooltipRef = useRef(null);
51
- var mouseMoveTracker = useRef();
52
- var releaseMouseMoves = useCallback(function () {
53
- var _mouseMoveTracker$cur;
54
- (_mouseMoveTracker$cur = mouseMoveTracker.current) === null || _mouseMoveTracker$cur === void 0 ? void 0 : _mouseMoveTracker$cur.releaseMouseMoves();
55
- mouseMoveTracker.current = null;
56
- }, []);
57
- var setTooltipPosition = useCallback(function () {
58
- var tooltipElement = tooltipRef.current;
59
- if (tooltip && tooltipElement) {
60
- var width = getWidth(tooltipElement);
61
- addStyle(tooltipElement, 'left', "-" + width / 2 + "px");
62
- }
63
- }, [tooltip]);
64
- var handleDragMove = useCallback(function (_deltaX, _deltaY, event) {
65
- var _mouseMoveTracker$cur2;
66
- if ((_mouseMoveTracker$cur2 = mouseMoveTracker.current) !== null && _mouseMoveTracker$cur2 !== void 0 && _mouseMoveTracker$cur2.isDragging()) {
67
- var _rootRef$current;
68
- onDragMove === null || onDragMove === void 0 ? void 0 : onDragMove(event, (_rootRef$current = rootRef.current) === null || _rootRef$current === void 0 ? void 0 : _rootRef$current.dataset);
69
- setTooltipPosition();
70
- }
71
- }, [onDragMove, setTooltipPosition]);
72
- var handleDragEnd = useCallback(function (event) {
73
- var _rootRef$current2;
74
- setActive(false);
75
- releaseMouseMoves();
76
- onDragEnd === null || onDragEnd === void 0 ? void 0 : onDragEnd(event, (_rootRef$current2 = rootRef.current) === null || _rootRef$current2 === void 0 ? void 0 : _rootRef$current2.dataset);
77
- }, [onDragEnd, releaseMouseMoves]);
78
- var getMouseMoveTracker = useCallback(function () {
79
- return mouseMoveTracker.current || new DOMMouseMoveTracker(handleDragMove, handleDragEnd, document.body);
80
- }, [handleDragEnd, handleDragMove]);
81
- var handleMouseDown = useCallback(function (event) {
82
- var _mouseMoveTracker$cur3, _rootRef$current3;
83
- if (disabled) {
84
- return;
85
- }
86
- mouseMoveTracker.current = getMouseMoveTracker();
87
- (_mouseMoveTracker$cur3 = mouseMoveTracker.current) === null || _mouseMoveTracker$cur3 === void 0 ? void 0 : _mouseMoveTracker$cur3.captureMouseMoves(event);
88
- (_rootRef$current3 = rootRef.current) === null || _rootRef$current3 === void 0 ? void 0 : _rootRef$current3.focus();
89
- setActive(true);
90
- onDragStart === null || onDragStart === void 0 ? void 0 : onDragStart(event);
91
- }, [disabled, getMouseMoveTracker, onDragStart]);
92
- var handleMouseEnter = useCallback(function () {
93
- setTooltipPosition();
94
- }, [setTooltipPosition]);
95
- useEffect(function () {
96
- return function () {
97
- releaseMouseMoves();
98
- };
99
- }, [releaseMouseMoves]);
100
56
  return /*#__PURE__*/React.createElement(Component, {
101
57
  role: role,
102
58
  tabIndex: tabIndex,
103
59
  ref: mergeRefs(ref, rootRef),
104
60
  className: handleClasses,
105
- onMouseDown: handleMouseDown,
106
- onMouseEnter: handleMouseEnter,
61
+ onMouseDown: onMoveStart,
62
+ onMouseEnter: onMouseEnter,
63
+ onTouchStart: onMoveStart,
107
64
  onKeyDown: onKeyDown,
108
65
  style: styles,
109
66
  "data-range": dataRange,
110
- "data-key": dateKey
67
+ "data-key": dateKey,
68
+ "data-testid": "slider-handle"
111
69
  }, tooltip && /*#__PURE__*/React.createElement(Tooltip, {
112
70
  "aria-hidden": "true",
113
71
  ref: tooltipRef,
@@ -28,7 +28,8 @@ var ProgressBar = /*#__PURE__*/React.forwardRef(function (props, ref) {
28
28
  return /*#__PURE__*/React.createElement(Component, {
29
29
  ref: ref,
30
30
  style: styles,
31
- className: classes
31
+ className: classes,
32
+ "data-testid": "slider-progress-bar"
32
33
  });
33
34
  });
34
35
  ProgressBar.displayName = 'ProgressBar';
@@ -9,8 +9,8 @@ import getOffset from 'dom-lib/getOffset';
9
9
  import ProgressBar from './ProgressBar';
10
10
  import Handle from './Handle';
11
11
  import Graduated from './Graduated';
12
- import { useClassNames, useControlled, useCustom } from '../utils';
13
- import { precisionMath, checkValue } from './utils';
12
+ import { useClassNames, useControlled, useCustom, useEventCallback } from '../utils';
13
+ import { precisionMath, checkValue, getPosition } from './utils';
14
14
  import Plaintext from '../internals/Plaintext';
15
15
  export var sliderPropTypes = {
16
16
  min: PropTypes.number,
@@ -139,7 +139,10 @@ var Slider = /*#__PURE__*/React.forwardRef(function (props, ref) {
139
139
  */
140
140
  var getValueByPosition = useCallback(function (event) {
141
141
  var barOffset = getOffset(barRef.current);
142
- var offset = vertical ? barOffset.top + barOffset.height - event.pageY : event.pageX - barOffset.left;
142
+ var _getPosition = getPosition(event),
143
+ pageX = _getPosition.pageX,
144
+ pageY = _getPosition.pageY;
145
+ var offset = vertical ? barOffset.top + barOffset.height - pageY : pageX - barOffset.left;
143
146
  var offsetValue = rtl && !vertical ? barOffset.width - offset : offset;
144
147
  return getValueByOffset(offsetValue) + min;
145
148
  }, [getValueByOffset, min, rtl, vertical]);
@@ -147,30 +150,30 @@ var Slider = /*#__PURE__*/React.forwardRef(function (props, ref) {
147
150
  /**
148
151
  * Callback function that is fired when the mousemove is triggered
149
152
  */
150
- var handleChangeValue = useCallback(function (event) {
153
+ var handleChangeValue = useEventCallback(function (event) {
151
154
  if (disabled || readOnly) {
152
155
  return;
153
156
  }
154
157
  var nextValue = getValidValue(getValueByPosition(event));
155
158
  setValue(nextValue);
156
159
  onChange === null || onChange === void 0 ? void 0 : onChange(nextValue, event);
157
- }, [disabled, getValidValue, getValueByPosition, onChange, readOnly, setValue]);
160
+ });
158
161
 
159
162
  /**
160
163
  * Callback function that is fired when the mouseup is triggered
161
164
  */
162
- var handleChangeCommitted = useCallback(function (event) {
165
+ var handleChangeCommitted = useEventCallback(function (event) {
163
166
  if (disabled || readOnly) {
164
167
  return;
165
168
  }
166
169
  var nextValue = getValidValue(getValueByPosition(event));
167
170
  onChangeCommitted === null || onChangeCommitted === void 0 ? void 0 : onChangeCommitted(nextValue, event);
168
- }, [disabled, getValidValue, getValueByPosition, onChangeCommitted, readOnly]);
169
- var handleClickBar = useCallback(function (event) {
171
+ });
172
+ var handleClickBar = useEventCallback(function (event) {
170
173
  handleChangeValue(event);
171
174
  handleChangeCommitted(event);
172
- }, [handleChangeCommitted, handleChangeValue]);
173
- var handleKeyDown = useCallback(function (event) {
175
+ });
176
+ var handleKeyDown = useEventCallback(function (event) {
174
177
  var nextValue;
175
178
  var increaseKey = rtl ? 'ArrowLeft' : 'ArrowRight';
176
179
  var decreaseKey = rtl ? 'ArrowRight' : 'ArrowLeft';
@@ -197,7 +200,7 @@ var Slider = /*#__PURE__*/React.forwardRef(function (props, ref) {
197
200
  event.preventDefault();
198
201
  setValue(nextValue);
199
202
  onChange === null || onChange === void 0 ? void 0 : onChange(nextValue, event);
200
- }, [max, min, onChange, rtl, setValue, step, value]);
203
+ });
201
204
  if (plaintext) {
202
205
  return /*#__PURE__*/React.createElement(Plaintext, {
203
206
  localeKey: "notSelected",
@@ -212,7 +215,8 @@ var Slider = /*#__PURE__*/React.forwardRef(function (props, ref) {
212
215
  }), /*#__PURE__*/React.createElement("div", {
213
216
  ref: barRef,
214
217
  className: merge(barClassName, prefix('bar')),
215
- onClick: handleClickBar
218
+ onClick: handleClickBar,
219
+ "data-testid": "slider-bar"
216
220
  }, progress && /*#__PURE__*/React.createElement(ProgressBar, {
217
221
  rtl: rtl,
218
222
  vertical: vertical,
@@ -0,0 +1,16 @@
1
+ /// <reference types="react" />
2
+ interface DragProps {
3
+ tooltip?: boolean;
4
+ disabled?: boolean;
5
+ onDragStart?: (event: React.MouseEvent) => void;
6
+ onDragMove?: (event: React.DragEvent, dataset?: DOMStringMap) => void;
7
+ onDragEnd?: (event: React.MouseEvent, dataset?: DOMStringMap) => void;
8
+ }
9
+ declare const useDrag: (props: DragProps) => {
10
+ active: boolean;
11
+ rootRef: import("react").RefObject<HTMLDivElement>;
12
+ tooltipRef: import("react").RefObject<HTMLDivElement>;
13
+ onMoveStart: (...args: any[]) => any;
14
+ onMouseEnter: (...args: any[]) => any;
15
+ };
16
+ export default useDrag;