UNPKG

5.12 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
5exports.__esModule = true;
6exports.default = void 0;
7
8var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
10var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
11
12var _react = _interopRequireDefault(require("react"));
13
14var _propTypes = _interopRequireDefault(require("prop-types"));
15
16var _Button = _interopRequireDefault(require("./Button"));
17
18var _ButtonGroup = _interopRequireDefault(require("./ButtonGroup"));
19
20var _Dropdown = _interopRequireDefault(require("./Dropdown"));
21
22var _DropdownMenu = require("./DropdownMenu");
23
24var _excluded = ["id", "bsPrefix", "size", "variant", "title", "type", "toggleLabel", "children", "onClick", "href", "target", "menuAlign", "menuRole", "renderMenuOnMount", "rootCloseEvent"];
25var propTypes = {
26 /**
27 * An html id attribute for the Toggle button, necessary for assistive technologies, such as screen readers.
28 * @type {string|number}
29 * @required
30 */
31 id: _propTypes.default.any,
32
33 /**
34 * Accessible label for the toggle; the value of `title` if not specified.
35 */
36 toggleLabel: _propTypes.default.string,
37
38 /** An `href` passed to the non-toggle Button */
39 href: _propTypes.default.string,
40
41 /** An anchor `target` passed to the non-toggle Button */
42 target: _propTypes.default.string,
43
44 /** An `onClick` handler passed to the non-toggle Button */
45 onClick: _propTypes.default.func,
46
47 /** The content of the non-toggle Button. */
48 title: _propTypes.default.node.isRequired,
49
50 /** A `type` passed to the non-toggle Button */
51 type: _propTypes.default.string,
52
53 /** Disables both Buttons */
54 disabled: _propTypes.default.bool,
55
56 /**
57 * Aligns the dropdown menu responsively.
58 *
59 * _see [DropdownMenu](#dropdown-menu-props) for more details_
60 *
61 * @type {"left"|"right"|{ sm: "left"|"right" }|{ md: "left"|"right" }|{ lg: "left"|"right" }|{ xl: "left"|"right"} }
62 */
63 menuAlign: _DropdownMenu.alignPropType,
64
65 /** An ARIA accessible role applied to the Menu component. When set to 'menu', The dropdown */
66 menuRole: _propTypes.default.string,
67
68 /** Whether to render the dropdown menu in the DOM before the first time it is shown */
69 renderMenuOnMount: _propTypes.default.bool,
70
71 /**
72 * Which event when fired outside the component will cause it to be closed.
73 *
74 * _see [DropdownMenu](#dropdown-menu-props) for more details_
75 */
76 rootCloseEvent: _propTypes.default.string,
77
78 /** @ignore */
79 bsPrefix: _propTypes.default.string,
80
81 /** @ignore */
82 variant: _propTypes.default.string,
83
84 /** @ignore */
85 size: _propTypes.default.string
86};
87var defaultProps = {
88 toggleLabel: 'Toggle dropdown',
89 type: 'button'
90};
91/**
92 * A convenience component for simple or general use split button dropdowns. Renders a
93 * `ButtonGroup` containing a `Button` and a `Button` toggle for the `Dropdown`. All `children`
94 * are passed directly to the default `Dropdown.Menu`. This component accepts all of [`Dropdown`'s
95 * props](#dropdown-props).
96 *
97 * _All unknown props are passed through to the `Dropdown` component._
98 * The Button `variant`, `size` and `bsPrefix` props are passed to the button and toggle,
99 * and menu-related props are passed to the `Dropdown.Menu`
100 */
101
102var SplitButton = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
103 var id = _ref.id,
104 bsPrefix = _ref.bsPrefix,
105 size = _ref.size,
106 variant = _ref.variant,
107 title = _ref.title,
108 type = _ref.type,
109 toggleLabel = _ref.toggleLabel,
110 children = _ref.children,
111 onClick = _ref.onClick,
112 href = _ref.href,
113 target = _ref.target,
114 menuAlign = _ref.menuAlign,
115 menuRole = _ref.menuRole,
116 renderMenuOnMount = _ref.renderMenuOnMount,
117 rootCloseEvent = _ref.rootCloseEvent,
118 props = (0, _objectWithoutPropertiesLoose2.default)(_ref, _excluded);
119 return /*#__PURE__*/_react.default.createElement(_Dropdown.default, (0, _extends2.default)({
120 ref: ref
121 }, props, {
122 as: _ButtonGroup.default
123 }), /*#__PURE__*/_react.default.createElement(_Button.default, {
124 size: size,
125 variant: variant,
126 disabled: props.disabled,
127 bsPrefix: bsPrefix,
128 href: href,
129 target: target,
130 onClick: onClick,
131 type: type
132 }, title), /*#__PURE__*/_react.default.createElement(_Dropdown.default.Toggle, {
133 split: true,
134 id: id ? id.toString() : undefined,
135 size: size,
136 variant: variant,
137 disabled: props.disabled,
138 childBsPrefix: bsPrefix
139 }, /*#__PURE__*/_react.default.createElement("span", {
140 className: "sr-only"
141 }, toggleLabel)), /*#__PURE__*/_react.default.createElement(_Dropdown.default.Menu, {
142 align: menuAlign,
143 role: menuRole,
144 renderOnMount: renderMenuOnMount,
145 rootCloseEvent: rootCloseEvent
146 }, children));
147});
148
149SplitButton.propTypes = propTypes;
150SplitButton.defaultProps = defaultProps;
151SplitButton.displayName = 'SplitButton';
152var _default = SplitButton;
153exports.default = _default;
154module.exports = exports["default"];
\No newline at end of file