UNPKG

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