UNPKG

2.2 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
5var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
6
7exports.__esModule = true;
8exports.useBootstrapPrefix = useBootstrapPrefix;
9exports.createBootstrapComponent = createBootstrapComponent;
10exports.default = exports.ThemeConsumer = void 0;
11
12var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
13
14var _react = _interopRequireWildcard(require("react"));
15
16var ThemeContext = /*#__PURE__*/_react.default.createContext({});
17
18var Consumer = ThemeContext.Consumer,
19 Provider = ThemeContext.Provider;
20exports.ThemeConsumer = Consumer;
21
22function ThemeProvider(_ref) {
23 var prefixes = _ref.prefixes,
24 children = _ref.children;
25 var copiedPrefixes = (0, _react.useMemo)(function () {
26 return (0, _extends2.default)({}, prefixes);
27 }, [prefixes]);
28 return /*#__PURE__*/_react.default.createElement(Provider, {
29 value: copiedPrefixes
30 }, children);
31}
32
33function useBootstrapPrefix(prefix, defaultPrefix) {
34 var prefixes = (0, _react.useContext)(ThemeContext);
35 return prefix || prefixes[defaultPrefix] || defaultPrefix;
36}
37
38function createBootstrapComponent(Component, opts) {
39 if (typeof opts === 'string') opts = {
40 prefix: opts
41 };
42 var isClassy = Component.prototype && Component.prototype.isReactComponent; // If it's a functional component make sure we don't break it with a ref
43
44 var _opts = opts,
45 prefix = _opts.prefix,
46 _opts$forwardRefAs = _opts.forwardRefAs,
47 forwardRefAs = _opts$forwardRefAs === void 0 ? isClassy ? 'ref' : 'innerRef' : _opts$forwardRefAs;
48
49 var Wrapped = /*#__PURE__*/_react.default.forwardRef(function (_ref2, ref) {
50 var props = (0, _extends2.default)({}, _ref2);
51 props[forwardRefAs] = ref;
52 var bsPrefix = useBootstrapPrefix(props.bsPrefix, prefix);
53 return /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({}, props, {
54 bsPrefix: bsPrefix
55 }));
56 });
57
58 Wrapped.displayName = "Bootstrap(" + (Component.displayName || Component.name) + ")";
59 return Wrapped;
60}
61
62var _default = ThemeProvider;
63exports.default = _default;
\No newline at end of file