@lskjs/navbar
Version:
LSK ux subrepo: navbar
184 lines (153 loc) • 7.57 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
var _classnames = _interopRequireDefault(require("classnames"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _react = _interopRequireWildcard(require("react"));
var _Dropdown = _interopRequireDefault(require("react-overlays/Dropdown"));
var _uncontrollable = require("uncontrollable");
var _useEventCallback = _interopRequireDefault(require("@restart/hooks/useEventCallback"));
var _DropdownItem = _interopRequireDefault(require("./DropdownItem"));
var _DropdownMenu = _interopRequireDefault(require("./DropdownMenu"));
var _DropdownToggle = _interopRequireDefault(require("./DropdownToggle"));
var _SelectableContext = _interopRequireDefault(require("./SelectableContext"));
var _ThemeProvider = require("./ThemeProvider");
var _createWithBsPrefix = _interopRequireDefault(require("./createWithBsPrefix"));
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _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; }
var propTypes = {
/** @default 'dropdown' */
bsPrefix: _propTypes["default"].string,
/**
* Determines the direction and location of the Menu in relation to it's Toggle.
*/
drop: _propTypes["default"].oneOf(['up', 'left', 'right', 'down']),
as: _propTypes["default"].elementType,
/**
* Align the menu to the right side of the Dropdown toggle
*/
alignRight: _propTypes["default"].bool,
/**
* Whether or not the Dropdown is visible.
*
* @controllable onToggle
*/
show: _propTypes["default"].bool,
/**
* Allow Dropdown to flip in case of an overlapping on the reference element. For more information refer to
* Popper.js's flip [docs](https://popper.js.org/popper-documentation.html#modifiers..flip.enabled).
*
*/
flip: _propTypes["default"].bool,
/**
* A callback fired when the Dropdown wishes to change visibility. Called with the requested
* `show` value, the DOM event, and the source that fired it: `'click'`,`'keydown'`,`'rootClose'`, or `'select'`.
*
* ```js
* function(
* isOpen: boolean,
* event: SyntheticEvent,
* metadata: {
* source: 'select' | 'click' | 'rootClose' | 'keydown'
* }
* ): void
* ```
*
* @controllable show
*/
onToggle: _propTypes["default"].func,
/**
* A callback fired when a menu item is selected.
*
* ```js
* (eventKey: any, event: Object) => any
* ```
*/
onSelect: _propTypes["default"].func,
/**
* Controls the focus behavior for when the Dropdown is opened. Set to
* `true` to always focus the first menu item, `keyboard` to focus only when
* navigating via the keyboard, or `false` to disable completely
*
* The Default behavior is `false` **unless** the Menu has a `role="menu"`
* where it will default to `keyboard` to match the recommended [ARIA Authoring practices](https://www.w3.org/TR/wai-aria-practices-1.1/#menubutton).
*/
focusFirstItemOnShow: _propTypes["default"].oneOf([false, true, 'keyboard']),
/** @private */
navbar: _propTypes["default"].bool
};
var defaultProps = {
navbar: false
};
var Dropdown = /*#__PURE__*/_react["default"].forwardRef(function (uncontrolledProps, ref) {
var _useUncontrolled = (0, _uncontrollable.useUncontrolled)(uncontrolledProps, {
show: 'onToggle'
}),
bsPrefix = _useUncontrolled.bsPrefix,
drop = _useUncontrolled.drop,
show = _useUncontrolled.show,
className = _useUncontrolled.className,
alignRight = _useUncontrolled.alignRight,
onSelect = _useUncontrolled.onSelect,
onToggle = _useUncontrolled.onToggle,
focusFirstItemOnShow = _useUncontrolled.focusFirstItemOnShow,
_useUncontrolled$as = _useUncontrolled.as,
Component = _useUncontrolled$as === void 0 ? 'div' : _useUncontrolled$as,
_4 = _useUncontrolled.navbar,
props = (0, _objectWithoutProperties2["default"])(_useUncontrolled, ["bsPrefix", "drop", "show", "className", "alignRight", "onSelect", "onToggle", "focusFirstItemOnShow", "as", "navbar"]);
var onSelectCtx = (0, _react.useContext)(_SelectableContext["default"]);
var prefix = (0, _ThemeProvider.useBootstrapPrefix)(bsPrefix, 'dropdown');
var handleToggle = (0, _useEventCallback["default"])(function (nextShow, event) {
var source = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : event.type;
if (event.currentTarget === document) source = 'rootClose';
onToggle(nextShow, event, {
source: source
});
});
var handleSelect = (0, _useEventCallback["default"])(function (key, event) {
if (onSelectCtx) onSelectCtx(key, event);
if (onSelect) onSelect(key, event);
handleToggle(false, event, 'select');
});
return /*#__PURE__*/_react["default"].createElement(_SelectableContext["default"].Provider, {
value: handleSelect
}, /*#__PURE__*/_react["default"].createElement(_Dropdown["default"], {
drop: drop,
show: show,
alignEnd: alignRight,
onToggle: handleToggle,
focusFirstItemOnShow: focusFirstItemOnShow,
itemSelector: ".".concat(prefix, "-item:not(.disabled):not(:disabled)")
}, function (_ref) {
var dropdownProps = _ref.props;
return /*#__PURE__*/_react["default"].createElement(Component, (0, _extends2["default"])({}, props, dropdownProps, {
ref: ref,
className: (0, _classnames["default"])(className, show && 'show', (!drop || drop === 'down') && prefix, drop === 'up' && 'dropup', drop === 'right' && 'dropright', drop === 'left' && 'dropleft')
}));
}));
});
Dropdown.displayName = 'Dropdown';
Dropdown.propTypes = propTypes;
Dropdown.defaultProps = defaultProps;
Dropdown.Toggle = _DropdownToggle["default"];
Dropdown.Menu = _DropdownMenu["default"];
Dropdown.Item = _DropdownItem["default"];
Dropdown.Header = (0, _createWithBsPrefix["default"])('dropdown-header', {
defaultProps: {
role: 'heading'
}
});
Dropdown.Divider = (0, _createWithBsPrefix["default"])('dropdown-divider', {
defaultProps: {
role: 'separator'
}
});
var _default = Dropdown;
exports["default"] = _default;
//# sourceMappingURL=Dropdown.js.map