rsuite 5.4.1 → 5.4.2
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.
- package/CHANGELOG.md +8 -0
- package/Modal/styles/index.less +23 -22
- package/Navbar/styles/index.less +12 -5
- package/cjs/Affix/Affix.js +3 -1
- package/cjs/Disclosure/Disclosure.d.ts +8 -5
- package/cjs/Disclosure/Disclosure.js +49 -9
- package/cjs/Disclosure/DisclosureButton.d.ts +2 -2
- package/cjs/Disclosure/DisclosureContext.d.ts +6 -1
- package/cjs/Dropdown/Dropdown.js +1 -1
- package/cjs/Dropdown/DropdownItem.js +9 -10
- package/cjs/Dropdown/DropdownMenu.js +72 -17
- package/cjs/Modal/Modal.js +34 -22
- package/cjs/Navbar/index.d.ts +1 -0
- package/cjs/Navbar/index.js +4 -3
- package/cjs/Overlay/Modal.js +10 -27
- package/cjs/utils/index.d.ts +1 -0
- package/cjs/utils/index.js +7 -2
- package/cjs/utils/useMount.d.ts +2 -0
- package/cjs/utils/useMount.js +19 -0
- package/dist/rsuite-rtl.css +32 -20
- package/dist/rsuite-rtl.min.css +1 -1
- package/dist/rsuite-rtl.min.css.map +1 -1
- package/dist/rsuite.css +32 -20
- package/dist/rsuite.js +31 -9
- package/dist/rsuite.js.map +1 -1
- package/dist/rsuite.min.css +1 -1
- package/dist/rsuite.min.css.map +1 -1
- package/dist/rsuite.min.js +1 -1
- package/dist/rsuite.min.js.map +1 -1
- package/esm/Affix/Affix.js +4 -2
- package/esm/Disclosure/Disclosure.d.ts +8 -5
- package/esm/Disclosure/Disclosure.js +50 -11
- package/esm/Disclosure/DisclosureButton.d.ts +2 -2
- package/esm/Disclosure/DisclosureContext.d.ts +6 -1
- package/esm/Dropdown/Dropdown.js +1 -1
- package/esm/Dropdown/DropdownItem.js +9 -9
- package/esm/Dropdown/DropdownMenu.js +72 -17
- package/esm/Modal/Modal.js +36 -24
- package/esm/Navbar/index.d.ts +1 -0
- package/esm/Navbar/index.js +1 -0
- package/esm/Overlay/Modal.js +10 -27
- package/esm/utils/index.d.ts +1 -0
- package/esm/utils/index.js +2 -1
- package/esm/utils/useMount.d.ts +2 -0
- package/esm/utils/useMount.js +13 -0
- package/package.json +1 -1
package/esm/Affix/Affix.js
CHANGED
|
@@ -3,7 +3,7 @@ import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWith
|
|
|
3
3
|
import React, { useCallback, useEffect, useRef, useState } from 'react';
|
|
4
4
|
import PropTypes from 'prop-types';
|
|
5
5
|
import getOffset from 'dom-lib/getOffset';
|
|
6
|
-
import { mergeRefs, useClassNames, useElementResize, useEventListener } from '../utils';
|
|
6
|
+
import { mergeRefs, useClassNames, useElementResize, useEventListener, useMount } from '../utils';
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* Get the layout size and offset of the mount element
|
|
@@ -21,7 +21,9 @@ function useOffset(mountRef) {
|
|
|
21
21
|
return mountRef.current;
|
|
22
22
|
}, updateOffset); // Initialize after the first render
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
useMount(updateOffset); // Update after window size changes
|
|
25
|
+
|
|
26
|
+
useEventListener(window, 'resize', updateOffset, false);
|
|
25
27
|
return offset;
|
|
26
28
|
}
|
|
27
29
|
/**
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import DisclosureButton from './DisclosureButton';
|
|
3
3
|
import DisclosureContent from './DisclosureContent';
|
|
4
|
-
export
|
|
4
|
+
export declare type DisclosureTrigger = 'click' | 'mouseover';
|
|
5
|
+
export interface DisclosureRenderProps extends Pick<React.HTMLAttributes<HTMLElement>, 'onMouseOver' | 'onMouseOut'> {
|
|
5
6
|
open: boolean;
|
|
6
7
|
}
|
|
7
8
|
export interface DisclosureProps {
|
|
@@ -13,10 +14,12 @@ export interface DisclosureProps {
|
|
|
13
14
|
hideOnClickOutside?: boolean;
|
|
14
15
|
/** Callback when disclosure button is being activated to update the open state */
|
|
15
16
|
onToggle?: (open: boolean, event: React.SyntheticEvent) => void;
|
|
17
|
+
/** What mouse events should disclosure reacts to */
|
|
18
|
+
trigger?: DisclosureTrigger[];
|
|
16
19
|
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
var Content: typeof DisclosureContent;
|
|
20
|
+
export interface DisclosureComponent extends React.FC<DisclosureProps> {
|
|
21
|
+
Button: typeof DisclosureButton;
|
|
22
|
+
Content: typeof DisclosureContent;
|
|
21
23
|
}
|
|
24
|
+
declare const Disclosure: DisclosureComponent;
|
|
22
25
|
export default Disclosure;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
2
|
// Headless Disclosure
|
|
3
3
|
// Ref: https://w3c.github.io/aria-practices/#disclosure
|
|
4
|
-
import React, { useMemo, useReducer, useRef } from 'react';
|
|
4
|
+
import React, { useMemo, useReducer, useRef, useCallback, useContext } from 'react';
|
|
5
5
|
import DisclosureContext, { DisclosureActionTypes } from './DisclosureContext';
|
|
6
6
|
import DisclosureButton from './DisclosureButton';
|
|
7
7
|
import DisclosureContent from './DisclosureContent';
|
|
@@ -26,14 +26,17 @@ function disclosureReducer(state, action) {
|
|
|
26
26
|
return state;
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
|
|
29
|
+
var Disclosure = /*#__PURE__*/React.memo(function (props) {
|
|
30
30
|
var children = props.children,
|
|
31
31
|
openProp = props.open,
|
|
32
32
|
_props$defaultOpen = props.defaultOpen,
|
|
33
33
|
defaultOpen = _props$defaultOpen === void 0 ? false : _props$defaultOpen,
|
|
34
34
|
_props$hideOnClickOut = props.hideOnClickOutside,
|
|
35
35
|
hideOnClickOutside = _props$hideOnClickOut === void 0 ? false : _props$hideOnClickOut,
|
|
36
|
-
onToggle = props.onToggle
|
|
36
|
+
onToggle = props.onToggle,
|
|
37
|
+
_props$trigger = props.trigger,
|
|
38
|
+
trigger = _props$trigger === void 0 ? ['click'] : _props$trigger;
|
|
39
|
+
var parentDisclosure = useContext(DisclosureContext);
|
|
37
40
|
|
|
38
41
|
var _useReducer = useReducer(disclosureReducer, _extends({}, initialDisclosureState, {
|
|
39
42
|
open: defaultOpen
|
|
@@ -56,20 +59,56 @@ function Disclosure(props) {
|
|
|
56
59
|
});
|
|
57
60
|
}
|
|
58
61
|
});
|
|
62
|
+
var onMouseOver = useCallback(function (event) {
|
|
63
|
+
if (!open) {
|
|
64
|
+
dispatch({
|
|
65
|
+
type: DisclosureActionTypes.Show
|
|
66
|
+
});
|
|
67
|
+
onToggle === null || onToggle === void 0 ? void 0 : onToggle(true, event);
|
|
68
|
+
}
|
|
69
|
+
}, [open, dispatch, onToggle]);
|
|
70
|
+
var onMouseOut = useCallback(function (event) {
|
|
71
|
+
if (open) {
|
|
72
|
+
dispatch({
|
|
73
|
+
type: DisclosureActionTypes.Hide
|
|
74
|
+
});
|
|
75
|
+
onToggle === null || onToggle === void 0 ? void 0 : onToggle(false, event);
|
|
76
|
+
}
|
|
77
|
+
}, [open, dispatch, onToggle]);
|
|
59
78
|
var contextValue = useMemo(function () {
|
|
79
|
+
var cascadeDispatch = function cascadeDispatch(action) {
|
|
80
|
+
var result = dispatch(action);
|
|
81
|
+
|
|
82
|
+
if ('cascade' in action) {
|
|
83
|
+
parentDisclosure === null || parentDisclosure === void 0 ? void 0 : parentDisclosure[1](action);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
return result;
|
|
87
|
+
};
|
|
88
|
+
|
|
60
89
|
return [{
|
|
61
90
|
open: open
|
|
62
|
-
},
|
|
63
|
-
onToggle: onToggle
|
|
91
|
+
}, cascadeDispatch, {
|
|
92
|
+
onToggle: onToggle,
|
|
93
|
+
trigger: trigger
|
|
64
94
|
}];
|
|
65
|
-
}, [open, dispatch, onToggle]);
|
|
95
|
+
}, [parentDisclosure, open, dispatch, onToggle, trigger]);
|
|
96
|
+
var renderProps = useMemo(function () {
|
|
97
|
+
var renderProps = {
|
|
98
|
+
open: open
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
if (trigger.includes('mouseover')) {
|
|
102
|
+
renderProps.onMouseOver = onMouseOver;
|
|
103
|
+
renderProps.onMouseOut = onMouseOut;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
return renderProps;
|
|
107
|
+
}, [open, trigger, onMouseOver, onMouseOut]);
|
|
66
108
|
return /*#__PURE__*/React.createElement(DisclosureContext.Provider, {
|
|
67
109
|
value: contextValue
|
|
68
|
-
}, children(
|
|
69
|
-
|
|
70
|
-
}, containerElementRef));
|
|
71
|
-
}
|
|
72
|
-
|
|
110
|
+
}, children(renderProps, containerElementRef));
|
|
111
|
+
});
|
|
73
112
|
Disclosure.Button = DisclosureButton;
|
|
74
113
|
Disclosure.Content = DisclosureContent;
|
|
75
114
|
export default Disclosure;
|
|
@@ -3,9 +3,9 @@ export interface DisclosureButtonRenderProps {
|
|
|
3
3
|
open: boolean;
|
|
4
4
|
}
|
|
5
5
|
export interface DisclosureButtonProps {
|
|
6
|
-
children: (props: React.
|
|
6
|
+
children: (props: React.HTMLAttributes<HTMLElement> & DisclosureButtonRenderProps, ref: React.Ref<HTMLElement>) => React.ReactElement<React.HTMLAttributes<HTMLElement>>;
|
|
7
7
|
}
|
|
8
|
-
declare function DisclosureButton(props: DisclosureButtonProps): React.ReactElement<React.HTMLAttributes<
|
|
8
|
+
declare function DisclosureButton(props: DisclosureButtonProps): React.ReactElement<React.HTMLAttributes<HTMLElement>, string | React.JSXElementConstructor<any>>;
|
|
9
9
|
declare namespace DisclosureButton {
|
|
10
10
|
var displayName: string;
|
|
11
11
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import React, { Dispatch } from 'react';
|
|
2
|
+
import type { DisclosureTrigger } from './Disclosure';
|
|
2
3
|
export interface DisclosureState {
|
|
3
4
|
open: boolean;
|
|
4
5
|
}
|
|
@@ -7,12 +8,16 @@ export declare enum DisclosureActionTypes {
|
|
|
7
8
|
Hide = 1
|
|
8
9
|
}
|
|
9
10
|
export declare type DisclosureAction = {
|
|
10
|
-
type: DisclosureActionTypes;
|
|
11
|
+
type: DisclosureActionTypes.Show;
|
|
12
|
+
} | {
|
|
13
|
+
type: DisclosureActionTypes.Hide;
|
|
14
|
+
cascade?: boolean;
|
|
11
15
|
};
|
|
12
16
|
export declare type DisclosureContextProps = [
|
|
13
17
|
DisclosureState,
|
|
14
18
|
Dispatch<DisclosureAction>,
|
|
15
19
|
{
|
|
20
|
+
trigger: DisclosureTrigger[];
|
|
16
21
|
onToggle?: (open: boolean, event: React.SyntheticEvent) => void;
|
|
17
22
|
}
|
|
18
23
|
];
|
package/esm/Dropdown/Dropdown.js
CHANGED
|
@@ -15,7 +15,7 @@ import DropdownToggle from './DropdownToggle';
|
|
|
15
15
|
import MenuContext from '../Menu/MenuContext';
|
|
16
16
|
import MenuItem from '../Menu/MenuItem';
|
|
17
17
|
import kebabCase from 'lodash/kebabCase';
|
|
18
|
-
import { NavbarContext } from '../Navbar
|
|
18
|
+
import { NavbarContext } from '../Navbar';
|
|
19
19
|
import Disclosure from '../Disclosure/Disclosure';
|
|
20
20
|
import SidenavDropdown from '../Sidenav/SidenavDropdown';
|
|
21
21
|
import NavContext from '../Nav/NavContext';
|
|
@@ -11,7 +11,6 @@ import { createChainedFunction, mergeRefs, shallowEqual, useClassNames } from '.
|
|
|
11
11
|
import { NavbarContext } from '../Navbar/Navbar';
|
|
12
12
|
import SidenavDropdownItem from '../Sidenav/SidenavDropdownItem';
|
|
13
13
|
import DisclosureContext, { DisclosureActionTypes } from '../Disclosure/DisclosureContext';
|
|
14
|
-
import SafeAnchor from '../SafeAnchor';
|
|
15
14
|
import NavContext from '../Nav/NavContext';
|
|
16
15
|
import useInternalId from '../utils/useInternalId';
|
|
17
16
|
import { DropdownActionType } from './DropdownState';
|
|
@@ -62,7 +61,8 @@ var DropdownItem = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
62
61
|
|
|
63
62
|
var handleClickNavbarDropdownItem = useCallback(function (event) {
|
|
64
63
|
dispatchDisclosure === null || dispatchDisclosure === void 0 ? void 0 : dispatchDisclosure({
|
|
65
|
-
type: DisclosureActionTypes.Hide
|
|
64
|
+
type: DisclosureActionTypes.Hide,
|
|
65
|
+
cascade: true
|
|
66
66
|
});
|
|
67
67
|
handleSelectItem === null || handleSelectItem === void 0 ? void 0 : handleSelectItem(event);
|
|
68
68
|
}, [dispatchDisclosure, handleSelectItem]);
|
|
@@ -129,16 +129,16 @@ var DropdownItem = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
129
129
|
dataAttributes['data-event-key-type'] = typeof eventKey;
|
|
130
130
|
}
|
|
131
131
|
|
|
132
|
-
return
|
|
132
|
+
return renderDropdownItem(_extends({
|
|
133
133
|
ref: ref,
|
|
134
134
|
className: classes,
|
|
135
|
-
|
|
135
|
+
'aria-current': selected || undefined
|
|
136
136
|
}, dataAttributes, restProps, {
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
})
|
|
137
|
+
onClick: createChainedFunction(handleClickNavbarDropdownItem, restProps.onClick),
|
|
138
|
+
children: /*#__PURE__*/React.createElement(React.Fragment, null, icon && /*#__PURE__*/React.cloneElement(icon, {
|
|
139
|
+
className: prefix('menu-icon')
|
|
140
|
+
}), children)
|
|
141
|
+
}));
|
|
142
142
|
}
|
|
143
143
|
|
|
144
144
|
return /*#__PURE__*/React.createElement(MenuItem, {
|
|
@@ -2,7 +2,7 @@ import _taggedTemplateLiteralLoose from "@babel/runtime/helpers/esm/taggedTempla
|
|
|
2
2
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
3
3
|
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
|
|
4
4
|
|
|
5
|
-
var _templateObject, _templateObject2;
|
|
5
|
+
var _templateObject, _templateObject2, _templateObject3, _templateObject4;
|
|
6
6
|
|
|
7
7
|
import React, { useCallback, useContext, useMemo } from 'react';
|
|
8
8
|
import omit from 'lodash/omit';
|
|
@@ -15,8 +15,10 @@ import AngleLeft from '@rsuite/icons/legacy/AngleLeft';
|
|
|
15
15
|
import AngleRight from '@rsuite/icons/legacy/AngleRight';
|
|
16
16
|
import useCustom from '../utils/useCustom';
|
|
17
17
|
import DropdownContext from './DropdownContext';
|
|
18
|
+
import { NavbarContext } from '../Navbar';
|
|
18
19
|
import Menubar from '../Menu/Menubar';
|
|
19
20
|
import SidenavDropdownMenu from '../Sidenav/SidenavDropdownMenu';
|
|
21
|
+
import Disclosure from '../Disclosure';
|
|
20
22
|
|
|
21
23
|
/**
|
|
22
24
|
* The <Dropdown.Menu> API
|
|
@@ -49,6 +51,7 @@ var DropdownMenu = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
49
51
|
|
|
50
52
|
var dropdown = useContext(DropdownContext);
|
|
51
53
|
var sidenav = useContext(SidenavContext);
|
|
54
|
+
var withinNavbar = Boolean(useContext(NavbarContext));
|
|
52
55
|
|
|
53
56
|
var _useCustom = useCustom('DropdownMenu'),
|
|
54
57
|
rtl = _useCustom.rtl;
|
|
@@ -113,21 +116,73 @@ var DropdownMenu = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
113
116
|
disabled = _omit.disabled,
|
|
114
117
|
menuProps = _objectWithoutPropertiesLoose(_omit, ["icon", "className", "disabled"]);
|
|
115
118
|
|
|
116
|
-
var Icon = rtl ? AngleLeft : AngleRight;
|
|
119
|
+
var Icon = rtl ? AngleLeft : AngleRight; // Renders a disclosure when used within <Navbar>
|
|
120
|
+
|
|
121
|
+
if (withinNavbar) {
|
|
122
|
+
return /*#__PURE__*/React.createElement(Disclosure, {
|
|
123
|
+
hideOnClickOutside: true,
|
|
124
|
+
trigger: ['click', 'mouseover']
|
|
125
|
+
}, function (_ref, containerRef) {
|
|
126
|
+
var open = _ref.open,
|
|
127
|
+
props = _objectWithoutPropertiesLoose(_ref, ["open"]);
|
|
128
|
+
|
|
129
|
+
var classes = mergeItemClassNames(className, withItemClassPrefix({
|
|
130
|
+
disabled: disabled,
|
|
131
|
+
open: open,
|
|
132
|
+
submenu: true // focus: hasFocus
|
|
133
|
+
|
|
134
|
+
}));
|
|
135
|
+
return /*#__PURE__*/React.createElement("li", _extends({
|
|
136
|
+
ref: mergeRefs(ref, containerRef),
|
|
137
|
+
className: classes
|
|
138
|
+
}, props), /*#__PURE__*/React.createElement(Disclosure.Button, null, function (_ref2, buttonRef) {
|
|
139
|
+
var open = _ref2.open,
|
|
140
|
+
buttonProps = _objectWithoutPropertiesLoose(_ref2, ["open"]);
|
|
141
|
+
|
|
142
|
+
var classes = mergeItemClassNames(className, prefixItemClassName("pull-" + (rtl ? 'left' : 'right')), prefixItemClassName(_templateObject || (_templateObject = _taggedTemplateLiteralLoose(["toggle"]))), // prefixItemClassName`submenu`,
|
|
143
|
+
withItemClassPrefix({
|
|
144
|
+
'with-icon': icon,
|
|
145
|
+
open: open,
|
|
146
|
+
// active: selected,
|
|
147
|
+
disabled: disabled // focus: active
|
|
148
|
+
|
|
149
|
+
}));
|
|
150
|
+
return /*#__PURE__*/React.createElement("div", _extends({
|
|
151
|
+
ref: mergeRefs(buttonRef, buttonRef),
|
|
152
|
+
className: classes,
|
|
153
|
+
"data-event-key": eventKey,
|
|
154
|
+
"data-event-key-type": typeof eventKey
|
|
155
|
+
}, buttonProps), icon && /*#__PURE__*/React.cloneElement(icon, {
|
|
156
|
+
className: prefix('menu-icon')
|
|
157
|
+
}), title, /*#__PURE__*/React.createElement(Icon, {
|
|
158
|
+
className: prefix(_templateObject2 || (_templateObject2 = _taggedTemplateLiteralLoose(["toggle-icon"])))
|
|
159
|
+
}));
|
|
160
|
+
}), /*#__PURE__*/React.createElement(Disclosure.Content, null, function (_ref3, elementRef) {
|
|
161
|
+
var open = _ref3.open;
|
|
162
|
+
var menuClassName = mergeMenuClassName(className, withMenuClassPrefix());
|
|
163
|
+
return /*#__PURE__*/React.createElement("ul", _extends({
|
|
164
|
+
ref: elementRef,
|
|
165
|
+
className: menuClassName,
|
|
166
|
+
hidden: !open
|
|
167
|
+
}, menuProps), children);
|
|
168
|
+
}));
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
|
|
117
172
|
return /*#__PURE__*/React.createElement(Menu, {
|
|
118
173
|
openMenuOn: ['mouseover', 'click'],
|
|
119
|
-
renderMenuButton: function renderMenuButton(
|
|
120
|
-
var open =
|
|
121
|
-
menuButtonProps = _objectWithoutPropertiesLoose(
|
|
174
|
+
renderMenuButton: function renderMenuButton(_ref4, buttonRef) {
|
|
175
|
+
var open = _ref4.open,
|
|
176
|
+
menuButtonProps = _objectWithoutPropertiesLoose(_ref4, ["open"]);
|
|
122
177
|
|
|
123
178
|
return /*#__PURE__*/React.createElement(MenuItem, {
|
|
124
179
|
disabled: disabled
|
|
125
|
-
}, function (
|
|
126
|
-
var selected =
|
|
127
|
-
active =
|
|
128
|
-
menuitem = _objectWithoutPropertiesLoose(
|
|
180
|
+
}, function (_ref5, menuitemRef) {
|
|
181
|
+
var selected = _ref5.selected,
|
|
182
|
+
active = _ref5.active,
|
|
183
|
+
menuitem = _objectWithoutPropertiesLoose(_ref5, ["selected", "active"]);
|
|
129
184
|
|
|
130
|
-
var classes = mergeItemClassNames(className, prefixItemClassName("pull-" + (rtl ? 'left' : 'right')), prefixItemClassName(
|
|
185
|
+
var classes = mergeItemClassNames(className, prefixItemClassName("pull-" + (rtl ? 'left' : 'right')), prefixItemClassName(_templateObject3 || (_templateObject3 = _taggedTemplateLiteralLoose(["toggle"]))), // prefixItemClassName`submenu`,
|
|
131
186
|
withItemClassPrefix({
|
|
132
187
|
'with-icon': icon,
|
|
133
188
|
open: open,
|
|
@@ -143,13 +198,13 @@ var DropdownMenu = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
143
198
|
}, menuitem, omit(menuButtonProps, ['role'])), icon && /*#__PURE__*/React.cloneElement(icon, {
|
|
144
199
|
className: prefix('menu-icon')
|
|
145
200
|
}), title, /*#__PURE__*/React.createElement(Icon, {
|
|
146
|
-
className: prefix(
|
|
201
|
+
className: prefix(_templateObject4 || (_templateObject4 = _taggedTemplateLiteralLoose(["toggle-icon"])))
|
|
147
202
|
}));
|
|
148
203
|
});
|
|
149
204
|
},
|
|
150
|
-
renderMenuPopup: function renderMenuPopup(
|
|
151
|
-
var open =
|
|
152
|
-
popupProps = _objectWithoutPropertiesLoose(
|
|
205
|
+
renderMenuPopup: function renderMenuPopup(_ref6, popupRef) {
|
|
206
|
+
var open = _ref6.open,
|
|
207
|
+
popupProps = _objectWithoutPropertiesLoose(_ref6, ["open"]);
|
|
153
208
|
|
|
154
209
|
var menuClassName = mergeMenuClassName(className, withMenuClassPrefix());
|
|
155
210
|
return /*#__PURE__*/React.createElement("ul", _extends({
|
|
@@ -159,9 +214,9 @@ var DropdownMenu = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
159
214
|
}, popupProps, menuProps), children);
|
|
160
215
|
},
|
|
161
216
|
onToggleMenu: handleToggleSubmenu
|
|
162
|
-
}, function (
|
|
163
|
-
var open =
|
|
164
|
-
menuContainer = _objectWithoutPropertiesLoose(
|
|
217
|
+
}, function (_ref7, menuContainerRef) {
|
|
218
|
+
var open = _ref7.open,
|
|
219
|
+
menuContainer = _objectWithoutPropertiesLoose(_ref7, ["open"]);
|
|
165
220
|
|
|
166
221
|
var classes = mergeItemClassNames(className, withItemClassPrefix({
|
|
167
222
|
disabled: disabled,
|
package/esm/Modal/Modal.js
CHANGED
|
@@ -4,14 +4,14 @@ import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWith
|
|
|
4
4
|
|
|
5
5
|
var _templateObject, _templateObject2;
|
|
6
6
|
|
|
7
|
-
import React, { useRef, useMemo, useState,
|
|
7
|
+
import React, { useRef, useMemo, useState, useCallback } from 'react';
|
|
8
8
|
import PropTypes from 'prop-types';
|
|
9
9
|
import pick from 'lodash/pick';
|
|
10
10
|
import on from 'dom-lib/on';
|
|
11
11
|
import getAnimationEnd from 'dom-lib/getAnimationEnd';
|
|
12
12
|
import BaseModal, { modalPropTypes } from '../Overlay/Modal';
|
|
13
13
|
import Bounce from '../Animation/Bounce';
|
|
14
|
-
import { useClassNames, mergeRefs, SIZE } from '../utils';
|
|
14
|
+
import { useClassNames, mergeRefs, SIZE, useWillUnmount } from '../utils';
|
|
15
15
|
import ModalDialog, { modalDialogPropTypes } from './ModalDialog';
|
|
16
16
|
import { ModalContext } from './ModalContext';
|
|
17
17
|
import ModalBody from './ModalBody';
|
|
@@ -64,6 +64,10 @@ var Modal = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
64
64
|
merge = _useClassNames.merge,
|
|
65
65
|
prefix = _useClassNames.prefix;
|
|
66
66
|
|
|
67
|
+
var _useState = useState(false),
|
|
68
|
+
shake = _useState[0],
|
|
69
|
+
setShake = _useState[1];
|
|
70
|
+
|
|
67
71
|
var classes = merge(className, prefix(size, {
|
|
68
72
|
full: full
|
|
69
73
|
}));
|
|
@@ -90,24 +94,6 @@ var Modal = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
90
94
|
isDrawer: drawer
|
|
91
95
|
};
|
|
92
96
|
}, [dialogId, onClose, bodyStyles, drawer]);
|
|
93
|
-
|
|
94
|
-
var _useState = useState(false),
|
|
95
|
-
shake = _useState[0],
|
|
96
|
-
setShake = _useState[1];
|
|
97
|
-
|
|
98
|
-
var handleBackdropClick = useCallback(function () {
|
|
99
|
-
// When the value of `backdrop` is `static`, a jitter animation will be added to the dialog when clicked.
|
|
100
|
-
if (backdrop === 'static') {
|
|
101
|
-
setShake(true);
|
|
102
|
-
|
|
103
|
-
if (!transitionEndListener.current && dialogRef.current) {
|
|
104
|
-
//fix: https://github.com/rsuite/rsuite/blob/a93d13c14fb20cc58204babe3331d3c3da3fe1fd/src/Modal/styles/index.less#L59
|
|
105
|
-
transitionEndListener.current = on(dialogRef.current, getAnimationEnd(), function () {
|
|
106
|
-
setShake(false);
|
|
107
|
-
});
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
}, [backdrop]);
|
|
111
97
|
var handleExited = useCallback(function (node) {
|
|
112
98
|
var _transitionEndListene;
|
|
113
99
|
|
|
@@ -124,11 +110,37 @@ var Modal = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
124
110
|
onEntering === null || onEntering === void 0 ? void 0 : onEntering(node);
|
|
125
111
|
onChangeBodyStyles(true);
|
|
126
112
|
}, [onChangeBodyStyles, onEntering]);
|
|
127
|
-
|
|
113
|
+
var handleBackdropClick = useCallback(function (e) {
|
|
114
|
+
if (e.target !== e.currentTarget) {
|
|
115
|
+
return;
|
|
116
|
+
} // When the value of `backdrop` is `static`, a jitter animation will be added to the dialog when clicked.
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
if (backdrop === 'static') {
|
|
120
|
+
setShake(true);
|
|
121
|
+
|
|
122
|
+
if (!transitionEndListener.current && dialogRef.current) {
|
|
123
|
+
//fix: https://github.com/rsuite/rsuite/blob/a93d13c14fb20cc58204babe3331d3c3da3fe1fd/src/Modal/styles/index.less#L59
|
|
124
|
+
transitionEndListener.current = on(dialogRef.current, getAnimationEnd(), function () {
|
|
125
|
+
setShake(false);
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
onClose === null || onClose === void 0 ? void 0 : onClose(e);
|
|
133
|
+
}, [backdrop, onClose]);
|
|
134
|
+
var handleClick = useCallback(function (e) {
|
|
135
|
+
if (dialogRef.current && e.target !== dialogRef.current) {
|
|
136
|
+
handleBackdropClick(e);
|
|
137
|
+
}
|
|
138
|
+
}, [handleBackdropClick]);
|
|
139
|
+
useWillUnmount(function () {
|
|
128
140
|
var _transitionEndListene2;
|
|
129
141
|
|
|
130
142
|
(_transitionEndListene2 = transitionEndListener.current) === null || _transitionEndListene2 === void 0 ? void 0 : _transitionEndListene2.off();
|
|
131
|
-
}
|
|
143
|
+
});
|
|
132
144
|
return /*#__PURE__*/React.createElement(ModalContext.Provider, {
|
|
133
145
|
value: modalContextValue
|
|
134
146
|
}, /*#__PURE__*/React.createElement(BaseModal, _extends({}, rest, {
|
|
@@ -136,7 +148,6 @@ var Modal = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
136
148
|
backdrop: backdrop,
|
|
137
149
|
open: open,
|
|
138
150
|
onClose: onClose,
|
|
139
|
-
onBackdropClick: handleBackdropClick,
|
|
140
151
|
className: prefix(_templateObject || (_templateObject = _taggedTemplateLiteralLoose(["wrapper"]))),
|
|
141
152
|
onEntered: handleEntered,
|
|
142
153
|
onEntering: handleEntering,
|
|
@@ -149,7 +160,8 @@ var Modal = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
149
160
|
transition: animation ? animation : undefined,
|
|
150
161
|
animationProps: animationProps,
|
|
151
162
|
dialogTransitionTimeout: animationTimeout,
|
|
152
|
-
backdropTransitionTimeout: 150
|
|
163
|
+
backdropTransitionTimeout: 150,
|
|
164
|
+
onClick: backdrop ? handleClick : undefined
|
|
153
165
|
}), function (transitionProps, transitionRef) {
|
|
154
166
|
var transitionClassName = transitionProps.className,
|
|
155
167
|
transitionRest = _objectWithoutPropertiesLoose(transitionProps, ["className"]);
|
package/esm/Navbar/index.d.ts
CHANGED
|
@@ -3,4 +3,5 @@ export type { NavbarProps } from './Navbar';
|
|
|
3
3
|
export type { NavbarBodyProps } from './NavbarBody';
|
|
4
4
|
export type { NavbarHeaderProps } from './NavbarHeader';
|
|
5
5
|
export type { NavbarBrandProps } from './NavbarBrand';
|
|
6
|
+
export { NavbarContext } from './Navbar';
|
|
6
7
|
export default Navbar;
|
package/esm/Navbar/index.js
CHANGED
package/esm/Overlay/Modal.js
CHANGED
|
@@ -72,7 +72,6 @@ var Modal = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
72
72
|
open = props.open,
|
|
73
73
|
_props$autoFocus = props.autoFocus,
|
|
74
74
|
autoFocus = _props$autoFocus === void 0 ? true : _props$autoFocus,
|
|
75
|
-
onBackdropClick = props.onBackdropClick,
|
|
76
75
|
onEsc = props.onEsc,
|
|
77
76
|
onExit = props.onExit,
|
|
78
77
|
onExiting = props.onExiting,
|
|
@@ -82,7 +81,7 @@ var Modal = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
82
81
|
onEntered = props.onEntered,
|
|
83
82
|
onClose = props.onClose,
|
|
84
83
|
onOpen = props.onOpen,
|
|
85
|
-
rest = _objectWithoutPropertiesLoose(props, ["as", "children", "transition", "dialogTransitionTimeout", "style", "className", "container", "animationProps", "containerClassName", "keyboard", "enforceFocus", "backdrop", "backdropTransitionTimeout", "backdropStyle", "backdropClassName", "open", "autoFocus", "
|
|
84
|
+
rest = _objectWithoutPropertiesLoose(props, ["as", "children", "transition", "dialogTransitionTimeout", "style", "className", "container", "animationProps", "containerClassName", "keyboard", "enforceFocus", "backdrop", "backdropTransitionTimeout", "backdropStyle", "backdropClassName", "open", "autoFocus", "onEsc", "onExit", "onExiting", "onExited", "onEnter", "onEntering", "onEntered", "onClose", "onOpen"]);
|
|
86
85
|
|
|
87
86
|
var _useState = useState(!open),
|
|
88
87
|
exited = _useState[0],
|
|
@@ -139,17 +138,6 @@ var Modal = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
139
138
|
|
|
140
139
|
handleFocusDialog();
|
|
141
140
|
});
|
|
142
|
-
var handleBackdropClick = useEventCallback(function (event) {
|
|
143
|
-
if (event.target !== event.currentTarget) {
|
|
144
|
-
return;
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
onBackdropClick === null || onBackdropClick === void 0 ? void 0 : onBackdropClick(event);
|
|
148
|
-
|
|
149
|
-
if (backdrop === true) {
|
|
150
|
-
onClose === null || onClose === void 0 ? void 0 : onClose(event);
|
|
151
|
-
}
|
|
152
|
-
});
|
|
153
141
|
var documentKeyDownListener = useRef();
|
|
154
142
|
var documentFocusListener = useRef();
|
|
155
143
|
var handleOpen = useEventCallback(function () {
|
|
@@ -215,11 +203,6 @@ var Modal = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
215
203
|
}
|
|
216
204
|
|
|
217
205
|
var renderBackdrop = function renderBackdrop() {
|
|
218
|
-
var backdropPorps = {
|
|
219
|
-
style: backdropStyle,
|
|
220
|
-
onClick: handleBackdropClick
|
|
221
|
-
};
|
|
222
|
-
|
|
223
206
|
if (Transition) {
|
|
224
207
|
return /*#__PURE__*/React.createElement(Fade, {
|
|
225
208
|
transitionAppear: true,
|
|
@@ -231,18 +214,19 @@ var Modal = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
231
214
|
|
|
232
215
|
return /*#__PURE__*/React.createElement("div", _extends({
|
|
233
216
|
"aria-hidden": true
|
|
234
|
-
}, rest,
|
|
217
|
+
}, rest, {
|
|
218
|
+
style: backdropStyle,
|
|
235
219
|
ref: mergeRefs(modal.setBackdropRef, ref),
|
|
236
220
|
className: classNames(backdropClassName, className)
|
|
237
221
|
}));
|
|
238
222
|
});
|
|
239
223
|
}
|
|
240
224
|
|
|
241
|
-
return /*#__PURE__*/React.createElement("div",
|
|
242
|
-
"aria-hidden": true
|
|
243
|
-
|
|
225
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
226
|
+
"aria-hidden": true,
|
|
227
|
+
style: backdropStyle,
|
|
244
228
|
className: backdropClassName
|
|
245
|
-
})
|
|
229
|
+
});
|
|
246
230
|
};
|
|
247
231
|
|
|
248
232
|
var dialogElement = Transition ? /*#__PURE__*/React.createElement(Transition, _extends({}, animationProps, {
|
|
@@ -259,12 +243,12 @@ var Modal = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
259
243
|
}), children) : children;
|
|
260
244
|
return /*#__PURE__*/React.createElement(OverlayContext.Provider, {
|
|
261
245
|
value: contextValue
|
|
262
|
-
}, /*#__PURE__*/React.createElement(Portal, null, /*#__PURE__*/React.createElement(Component, _extends({}, rest, {
|
|
246
|
+
}, /*#__PURE__*/React.createElement(Portal, null, backdrop && renderBackdrop(), /*#__PURE__*/React.createElement(Component, _extends({}, rest, {
|
|
263
247
|
ref: mergeRefs(modal.setDialogRef, ref),
|
|
264
248
|
style: style,
|
|
265
249
|
className: className,
|
|
266
250
|
tabIndex: -1
|
|
267
|
-
}),
|
|
251
|
+
}), dialogElement)));
|
|
268
252
|
});
|
|
269
253
|
export var modalPropTypes = {
|
|
270
254
|
as: PropTypes.elementType,
|
|
@@ -289,7 +273,6 @@ Modal.propTypes = _extends({}, animationPropTypes, modalPropTypes, {
|
|
|
289
273
|
dialogTransitionTimeout: PropTypes.number,
|
|
290
274
|
backdropTransitionTimeout: PropTypes.number,
|
|
291
275
|
transition: PropTypes.any,
|
|
292
|
-
onEsc: PropTypes.func
|
|
293
|
-
onBackdropClick: PropTypes.func
|
|
276
|
+
onEsc: PropTypes.func
|
|
294
277
|
});
|
|
295
278
|
export default Modal;
|
package/esm/utils/index.d.ts
CHANGED
|
@@ -40,3 +40,4 @@ export { default as useUpdatedRef } from './useUpdatedRef';
|
|
|
40
40
|
export { default as useWillUnmount } from './useWillUnmount';
|
|
41
41
|
export { default as useUpdateEffect } from './useUpdateEffect';
|
|
42
42
|
export { default as useIsMounted } from './useIsMounted';
|
|
43
|
+
export { default as useMount } from './useMount';
|
package/esm/utils/index.js
CHANGED
|
@@ -42,4 +42,5 @@ export { default as useEventCallback } from './useEventCallback';
|
|
|
42
42
|
export { default as useUpdatedRef } from './useUpdatedRef';
|
|
43
43
|
export { default as useWillUnmount } from './useWillUnmount';
|
|
44
44
|
export { default as useUpdateEffect } from './useUpdateEffect';
|
|
45
|
-
export { default as useIsMounted } from './useIsMounted';
|
|
45
|
+
export { default as useIsMounted } from './useIsMounted';
|
|
46
|
+
export { default as useMount } from './useMount';
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { useEffect, useRef } from 'react';
|
|
2
|
+
|
|
3
|
+
var useMount = function useMount(callback) {
|
|
4
|
+
var mountRef = useRef(callback);
|
|
5
|
+
mountRef.current = callback;
|
|
6
|
+
useEffect(function () {
|
|
7
|
+
var _mountRef$current;
|
|
8
|
+
|
|
9
|
+
(_mountRef$current = mountRef.current) === null || _mountRef$current === void 0 ? void 0 : _mountRef$current.call(mountRef);
|
|
10
|
+
}, []);
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export default useMount;
|