UNPKG

5.26 kBJavaScriptView Raw
1"use strict";
2"use client";
3
4var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
5exports.__esModule = true;
6exports.default = void 0;
7var _classnames = _interopRequireDefault(require("classnames"));
8var React = _interopRequireWildcard(require("react"));
9var _Dropdown = _interopRequireDefault(require("@restart/ui/Dropdown"));
10var _uncontrollable = require("uncontrollable");
11var _useEventCallback = _interopRequireDefault(require("@restart/hooks/useEventCallback"));
12var _DropdownContext = _interopRequireDefault(require("./DropdownContext"));
13var _DropdownDivider = _interopRequireDefault(require("./DropdownDivider"));
14var _DropdownHeader = _interopRequireDefault(require("./DropdownHeader"));
15var _DropdownItem = _interopRequireDefault(require("./DropdownItem"));
16var _DropdownItemText = _interopRequireDefault(require("./DropdownItemText"));
17var _DropdownMenu = _interopRequireWildcard(require("./DropdownMenu"));
18var _DropdownToggle = _interopRequireDefault(require("./DropdownToggle"));
19var _InputGroupContext = _interopRequireDefault(require("./InputGroupContext"));
20var _ThemeProvider = require("./ThemeProvider");
21var _types = require("./types");
22var _jsxRuntime = require("react/jsx-runtime");
23function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
24function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
25const Dropdown = /*#__PURE__*/React.forwardRef((pProps, ref) => {
26 const {
27 bsPrefix,
28 drop = 'down',
29 show,
30 className,
31 align = 'start',
32 onSelect,
33 onToggle,
34 focusFirstItemOnShow,
35 // Need to define the default "as" during prop destructuring to be compatible with styled-components github.com/react-bootstrap/react-bootstrap/issues/3595
36 as: Component = 'div',
37 navbar: _4,
38 autoClose = true,
39 ...props
40 } = (0, _uncontrollable.useUncontrolled)(pProps, {
41 show: 'onToggle'
42 });
43 const isInputGroup = (0, React.useContext)(_InputGroupContext.default);
44 const prefix = (0, _ThemeProvider.useBootstrapPrefix)(bsPrefix, 'dropdown');
45 const isRTL = (0, _ThemeProvider.useIsRTL)();
46 const isClosingPermitted = source => {
47 // autoClose=false only permits close on button click
48 if (autoClose === false) return source === 'click';
49
50 // autoClose=inside doesn't permit close on rootClose
51 if (autoClose === 'inside') return source !== 'rootClose';
52
53 // autoClose=outside doesn't permit close on select
54 if (autoClose === 'outside') return source !== 'select';
55 return true;
56 };
57 const handleToggle = (0, _useEventCallback.default)((nextShow, meta) => {
58 if (meta.originalEvent.currentTarget === document && (meta.source !== 'keydown' || meta.originalEvent.key === 'Escape')) meta.source = 'rootClose';
59 if (isClosingPermitted(meta.source)) onToggle == null ? void 0 : onToggle(nextShow, meta);
60 });
61 const alignEnd = align === 'end';
62 const placement = (0, _DropdownMenu.getDropdownMenuPlacement)(alignEnd, drop, isRTL);
63 const contextValue = (0, React.useMemo)(() => ({
64 align,
65 drop,
66 isRTL
67 }), [align, drop, isRTL]);
68 const directionClasses = {
69 down: prefix,
70 'down-centered': `${prefix}-center`,
71 up: 'dropup',
72 'up-centered': 'dropup-center dropup',
73 end: 'dropend',
74 start: 'dropstart'
75 };
76 return /*#__PURE__*/(0, _jsxRuntime.jsx)(_DropdownContext.default.Provider, {
77 value: contextValue,
78 children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Dropdown.default, {
79 placement: placement,
80 show: show,
81 onSelect: onSelect,
82 onToggle: handleToggle,
83 focusFirstItemOnShow: focusFirstItemOnShow,
84 itemSelector: `.${prefix}-item:not(.disabled):not(:disabled)`,
85 children: isInputGroup ? props.children : /*#__PURE__*/(0, _jsxRuntime.jsx)(Component, {
86 ...props,
87 ref: ref,
88 className: (0, _classnames.default)(className, show && 'show', directionClasses[drop])
89 })
90 })
91 });
92});
93Dropdown.displayName = 'Dropdown';
94var _default = Object.assign(Dropdown, {
95 Toggle: _DropdownToggle.default,
96 Menu: _DropdownMenu.default,
97 Item: _DropdownItem.default,
98 ItemText: _DropdownItemText.default,
99 Divider: _DropdownDivider.default,
100 Header: _DropdownHeader.default
101});
102exports.default = _default;
103module.exports = exports.default;
\No newline at end of file