rsuite 5.78.1 → 5.79.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.
@@ -1,58 +1,7 @@
1
1
  'use client';
2
- import { SchemaModel, ObjectType } from 'schema-typed';
2
+ import { SchemaModel } from 'schema-typed';
3
3
  import { useRef, useCallback } from 'react';
4
- /**
5
- * Convert a flat schema object to a nested schema object
6
- *
7
- * @example
8
- *
9
- * ```js
10
- * const schema = {
11
- * 'address.city': StringType().isRequired('City is required'),
12
- * 'address.street': StringType().isRequired('Street is required')
13
- * };
14
- *
15
- * const result = unflattenSchemaObject(schema);
16
- *
17
- * // result
18
- * {
19
- * address: ObjectType().shape({
20
- * city: StringType().isRequired('City is required'),
21
- * street: StringType().isRequired('Street is required')
22
- * })
23
- * }
24
- * ```
25
- */
26
- function unflattenSchemaObject(schema) {
27
- var result = {};
28
- var $type = Symbol('schema-type');
29
- Object.keys(schema).forEach(function (key) {
30
- if (key.includes('.')) {
31
- var keys = key.split('.');
32
- var lastKey = keys.pop() || '';
33
- var current = result;
34
- keys.forEach(function (subKey) {
35
- var _ref;
36
- current[subKey] = current[subKey] || (_ref = {}, _ref[$type] = 'object-type', _ref);
37
- current = current[subKey];
38
- });
39
- current[lastKey] = schema[key];
40
- } else {
41
- result[key] = schema[key];
42
- }
43
- });
44
- function convertToShape(obj) {
45
- Object.keys(obj).forEach(function (key) {
46
- var _obj$key;
47
- if (((_obj$key = obj[key]) === null || _obj$key === void 0 ? void 0 : _obj$key[$type]) === 'object-type') {
48
- delete obj[key][$type];
49
- obj[key] = ObjectType().shape(convertToShape(obj[key]));
50
- }
51
- });
52
- return obj;
53
- }
54
- return convertToShape(result);
55
- }
4
+ import { constructFlatSchema } from "../utils/constructFlatSchema.js";
56
5
  function useSchemaModel(formModel, nestedField) {
57
6
  var subRulesRef = useRef([]);
58
7
  var pushFieldRule = useCallback(function (name, fieldRule) {
@@ -76,15 +25,15 @@ function useSchemaModel(formModel, nestedField) {
76
25
  if (realSubRules.length === 0) {
77
26
  return formModel;
78
27
  }
79
- var subRuleObject = realSubRules.map(function (_ref2) {
80
- var _ref3;
81
- var name = _ref2.name,
82
- fieldRule = _ref2.fieldRule;
83
- return _ref3 = {}, _ref3[name] = fieldRule.current, _ref3;
28
+ var subRuleObject = realSubRules.map(function (_ref) {
29
+ var _ref2;
30
+ var name = _ref.name,
31
+ fieldRule = _ref.fieldRule;
32
+ return _ref2 = {}, _ref2[name] = fieldRule.current, _ref2;
84
33
  }).reduce(function (a, b) {
85
34
  return Object.assign(a, b);
86
35
  }, {});
87
- return SchemaModel.combine(formModel, SchemaModel(nestedField ? unflattenSchemaObject(subRuleObject) : subRuleObject));
36
+ return SchemaModel.combine(formModel, SchemaModel(nestedField ? constructFlatSchema(subRuleObject) : subRuleObject));
88
37
  }, [formModel, nestedField]);
89
38
  return {
90
39
  getCombinedModel: getCombinedModel,
@@ -0,0 +1,4 @@
1
+ /**
2
+ * combine flat schema to nested schema
3
+ */
4
+ export declare function constructFlatSchema(schema: any): any;
@@ -0,0 +1,38 @@
1
+ 'use client';
2
+ import { ObjectType, ArrayType } from 'schema-typed';
3
+ import set from 'lodash/set';
4
+
5
+ /**
6
+ * combine flat schema to nested schema
7
+ */
8
+ export function constructFlatSchema(schema) {
9
+ var shape = {};
10
+ Object.keys(schema).forEach(function (key) {
11
+ set(shape, key, {
12
+ schema: schema[key],
13
+ primitiveType: true
14
+ });
15
+ });
16
+ function convertShapeToSchema(shape, result, internal) {
17
+ Object.keys(shape).forEach(function (key) {
18
+ var currentShape = shape[key];
19
+ if (Array.isArray(currentShape)) {
20
+ var _ArrayType;
21
+ result[key] = (_ArrayType = ArrayType()).of.apply(_ArrayType, currentShape.map(function (v) {
22
+ if (v.primitiveType) {
23
+ return v.schema;
24
+ }
25
+ return convertShapeToSchema(v, {}, true);
26
+ }));
27
+ } else {
28
+ if (currentShape.primitiveType) {
29
+ result[key] = currentShape.schema;
30
+ } else {
31
+ result[key] = convertShapeToSchema(currentShape, {}, true);
32
+ }
33
+ }
34
+ });
35
+ return internal ? ObjectType().shape(result) : result;
36
+ }
37
+ return convertShapeToSchema(shape, {});
38
+ }
@@ -1,7 +1,7 @@
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
- var _excluded = ["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"];
4
+ var _excluded = ["aria-label", "aria-labelledby", "aria-valuetext", "as", "barClassName", "className", "classPrefix", "constraint", "defaultValue", "disabled", "graduated", "progress", "keepTooltipOpen", "vertical", "readOnly", "min", "max", "step", "value", "handleClassName", "handleStyle", "handleTitle", "tooltip", "getAriaValueText", "renderTooltip", "renderMark", "onChange", "onChangeCommitted"];
5
5
  import React, { useMemo, useRef, useCallback } from 'react';
6
6
  import PropTypes from 'prop-types';
7
7
  import getWidth from 'dom-lib/getWidth';
@@ -40,6 +40,8 @@ var RangeSlider = /*#__PURE__*/React.forwardRef(function (props, ref) {
40
40
  graduated = propsWithDefaults.graduated,
41
41
  _propsWithDefaults$pr = propsWithDefaults.progress,
42
42
  progress = _propsWithDefaults$pr === void 0 ? true : _propsWithDefaults$pr,
43
+ _propsWithDefaults$ke = propsWithDefaults.keepTooltipOpen,
44
+ keepTooltipOpen = _propsWithDefaults$ke === void 0 ? false : _propsWithDefaults$ke,
43
45
  vertical = propsWithDefaults.vertical,
44
46
  readOnly = propsWithDefaults.readOnly,
45
47
  _propsWithDefaults$mi = propsWithDefaults.min,
@@ -295,7 +297,8 @@ var RangeSlider = /*#__PURE__*/React.forwardRef(function (props, ref) {
295
297
  'aria-valuemax': max,
296
298
  'aria-valuemin': min,
297
299
  'aria-label': ariaLabel,
298
- 'aria-labelledby': ariaLabelledby
300
+ 'aria-labelledby': ariaLabelledby,
301
+ keepTooltipOpen: keepTooltipOpen
299
302
  };
300
303
  return /*#__PURE__*/React.createElement(Component, _extends({}, rest, {
301
304
  ref: ref,
@@ -13,6 +13,7 @@ export interface HandleProps extends WithAsProps, React.HTMLAttributes<HTMLDivEl
13
13
  onDragEnd?: (event: React.MouseEvent, dataset?: DOMStringMap) => void;
14
14
  'data-range'?: number[];
15
15
  'data-key'?: string;
16
+ keepTooltipOpen?: boolean;
16
17
  }
17
18
  declare const Handle: RsRefForwardingComponent<'div', HandleProps>;
18
19
  export default Handle;
@@ -1,7 +1,7 @@
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
- var _excluded = ["as", "classPrefix", "className", "disabled", "style", "children", "position", "vertical", "tooltip", "rtl", "value", "role", "tabIndex", "renderTooltip", "onDragStart", "onDragMove", "onDragEnd", "onKeyDown", "data-range", "data-key"];
4
+ var _excluded = ["as", "classPrefix", "className", "disabled", "style", "children", "position", "vertical", "tooltip", "rtl", "value", "role", "tabIndex", "renderTooltip", "onDragStart", "onDragMove", "onDragEnd", "onKeyDown", "data-range", "data-key", "keepTooltipOpen"];
5
5
  import React from 'react';
6
6
  import PropTypes from 'prop-types';
7
7
  import Tooltip from "../Tooltip/index.js";
@@ -33,7 +33,9 @@ var Handle = /*#__PURE__*/React.forwardRef(function (props, ref) {
33
33
  onKeyDown = props.onKeyDown,
34
34
  dataRange = props['data-range'],
35
35
  dateKey = props['data-key'],
36
+ keepTooltipOpen = props.keepTooltipOpen,
36
37
  rest = _objectWithoutPropertiesLoose(props, _excluded);
38
+ var actualTooltip = tooltip || keepTooltipOpen;
37
39
  var horizontalKey = rtl ? 'right' : 'left';
38
40
  var direction = vertical ? 'bottom' : horizontalKey;
39
41
  var styles = _extends({}, style, (_extends2 = {}, _extends2[direction] = position + "%", _extends2));
@@ -41,11 +43,12 @@ var Handle = /*#__PURE__*/React.forwardRef(function (props, ref) {
41
43
  merge = _useClassNames.merge,
42
44
  prefix = _useClassNames.prefix;
43
45
  var _useDrag = useDrag({
44
- tooltip: tooltip,
46
+ tooltip: actualTooltip,
45
47
  disabled: disabled,
46
48
  onDragStart: onDragStart,
47
49
  onDragMove: onDragMove,
48
- onDragEnd: onDragEnd
50
+ onDragEnd: onDragEnd,
51
+ keepTooltipOpen: keepTooltipOpen
49
52
  }),
50
53
  active = _useDrag.active,
51
54
  onMoveStart = _useDrag.onMoveStart,
@@ -53,7 +56,7 @@ var Handle = /*#__PURE__*/React.forwardRef(function (props, ref) {
53
56
  rootRef = _useDrag.rootRef,
54
57
  tooltipRef = _useDrag.tooltipRef;
55
58
  var handleClasses = merge(className, prefix('handle'), {
56
- active: active
59
+ active: active || keepTooltipOpen
57
60
  });
58
61
  return /*#__PURE__*/React.createElement(Component, {
59
62
  role: role,
@@ -68,7 +71,7 @@ var Handle = /*#__PURE__*/React.forwardRef(function (props, ref) {
68
71
  "data-range": dataRange,
69
72
  "data-key": dateKey,
70
73
  "data-testid": "slider-handle"
71
- }, tooltip && /*#__PURE__*/React.createElement(Tooltip, {
74
+ }, actualTooltip && /*#__PURE__*/React.createElement(Tooltip, {
72
75
  "aria-hidden": "true",
73
76
  ref: tooltipRef,
74
77
  className: merge(prefix('tooltip'), 'placement-top')
@@ -52,6 +52,8 @@ export interface SliderProps<T = number> extends WithAsProps, FormControlBasePro
52
52
  getAriaValueText?: (value: number, eventKey?: 'start' | 'end') => string;
53
53
  /** Callback function that is fired when the mouseup is triggered. */
54
54
  onChangeCommitted?: (value: T, event: React.MouseEvent) => void;
55
+ /** If true, tooltip will always be visible even without hover */
56
+ keepTooltipOpen?: boolean;
55
57
  }
56
58
  export declare const sliderPropTypes: {
57
59
  min: PropTypes.Requireable<number>;
@@ -1,7 +1,7 @@
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
- var _excluded = ["aria-label", "aria-labelledby", "aria-valuetext", "as", "graduated", "className", "barClassName", "progress", "vertical", "disabled", "readOnly", "plaintext", "classPrefix", "min", "handleClassName", "handleStyle", "handleTitle", "tooltip", "step", "defaultValue", "value", "max", "placeholder", "getAriaValueText", "renderTooltip", "renderMark", "onChange", "onChangeCommitted"];
4
+ var _excluded = ["aria-label", "aria-labelledby", "aria-valuetext", "as", "graduated", "className", "barClassName", "progress", "vertical", "disabled", "readOnly", "plaintext", "classPrefix", "min", "handleClassName", "handleStyle", "handleTitle", "tooltip", "step", "defaultValue", "value", "max", "placeholder", "getAriaValueText", "renderTooltip", "renderMark", "onChange", "onChangeCommitted", "keepTooltipOpen"];
5
5
  import React, { useCallback, useMemo, useRef } from 'react';
6
6
  import PropTypes from 'prop-types';
7
7
  import getWidth from 'dom-lib/getWidth';
@@ -83,6 +83,7 @@ var Slider = /*#__PURE__*/React.forwardRef(function (props, ref) {
83
83
  renderMark = propsWithDefaults.renderMark,
84
84
  onChange = propsWithDefaults.onChange,
85
85
  onChangeCommitted = propsWithDefaults.onChangeCommitted,
86
+ keepTooltipOpen = propsWithDefaults.keepTooltipOpen,
86
87
  rest = _objectWithoutPropertiesLoose(propsWithDefaults, _excluded);
87
88
  var barRef = useRef(null);
88
89
  var _useClassNames = useClassNames(classPrefix),
@@ -242,6 +243,7 @@ var Slider = /*#__PURE__*/React.forwardRef(function (props, ref) {
242
243
  tooltip: tooltip,
243
244
  rtl: rtl,
244
245
  value: value,
246
+ keepTooltipOpen: keepTooltipOpen,
245
247
  renderTooltip: renderTooltip,
246
248
  onDragMove: handleChangeValue,
247
249
  onKeyDown: handleKeyDown,
@@ -5,6 +5,7 @@ interface DragProps {
5
5
  onDragStart?: (event: React.MouseEvent) => void;
6
6
  onDragMove?: (event: React.DragEvent, dataset?: DOMStringMap) => void;
7
7
  onDragEnd?: (event: React.MouseEvent, dataset?: DOMStringMap) => void;
8
+ keepTooltipOpen?: boolean;
8
9
  }
9
10
  declare const useDrag: (props: DragProps) => {
10
11
  active: boolean;
@@ -11,7 +11,8 @@ var useDrag = function useDrag(props) {
11
11
  disabled = props.disabled,
12
12
  onDragMove = props.onDragMove,
13
13
  onDragEnd = props.onDragEnd,
14
- onDragStart = props.onDragStart;
14
+ onDragStart = props.onDragStart,
15
+ keepTooltipOpen = props.keepTooltipOpen;
15
16
  var _useState = useState(false),
16
17
  active = _useState[0],
17
18
  setActive = _useState[1];
@@ -67,10 +68,13 @@ var useDrag = function useDrag(props) {
67
68
  setTooltipPosition();
68
69
  });
69
70
  useEffect(function () {
71
+ if (keepTooltipOpen) {
72
+ onMouseEnter();
73
+ }
70
74
  return function () {
71
75
  releaseMoves();
72
76
  };
73
- }, [releaseMoves]);
77
+ }, [releaseMoves, keepTooltipOpen]);
74
78
  return {
75
79
  active: active,
76
80
  rootRef: rootRef,
@@ -5,7 +5,7 @@ import { ToastContainerProps } from '../toaster/ToastContainer';
5
5
  * It is often used with the Message and Notification components.
6
6
  * @returns toaster { push, remove, clear }
7
7
  *
8
- * @see https://rsuitejs.com/components/use-toaster/
8
+ * @see https://rsuitejs.com/components/toaster/
9
9
  */
10
10
  declare const useToaster: () => {
11
11
  /**
@@ -9,7 +9,7 @@ import { CustomContext } from "../CustomProvider/CustomProvider.js";
9
9
  * It is often used with the Message and Notification components.
10
10
  * @returns toaster { push, remove, clear }
11
11
  *
12
- * @see https://rsuitejs.com/components/use-toaster/
12
+ * @see https://rsuitejs.com/components/toaster/
13
13
  */
14
14
  var useToaster = function useToaster() {
15
15
  var _useContext = useContext(CustomContext),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rsuite",
3
- "version": "5.78.1",
3
+ "version": "5.79.0",
4
4
  "description": "A suite of react components",
5
5
  "main": "cjs/index.js",
6
6
  "module": "esm/index.js",
@@ -39,7 +39,7 @@
39
39
  "react-use-set": "^1.0.0",
40
40
  "react-window": "^1.8.8",
41
41
  "rsuite-table": "^5.19.1",
42
- "schema-typed": "^2.3.0"
42
+ "schema-typed": "^2.4.1"
43
43
  },
44
44
  "peerDependencies": {
45
45
  "react": ">=16.8.0",