@appbuckets/react-ui
Version:
Just Another React UI Framework
115 lines (107 loc) • 3.28 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var tslib = require('tslib');
var React = require('react');
var clsx = require('clsx');
var realyFastDeepClone = require('rfdc');
var BucketTheme_default = require('./BucketTheme.default.js');
function _interopDefaultLegacy(e) {
return e && typeof e === 'object' && 'default' in e ? e : { default: e };
}
function _interopNamespace(e) {
if (e && e.__esModule) return e;
var n = Object.create(null);
if (e) {
Object.keys(e).forEach(function (k) {
if (k !== 'default') {
var d = Object.getOwnPropertyDescriptor(e, k);
Object.defineProperty(
n,
k,
d.get
? d
: {
enumerable: true,
get: function () {
return e[k];
},
}
);
}
});
}
n['default'] = e;
return Object.freeze(n);
}
var React__namespace = /*#__PURE__*/ _interopNamespace(React);
var clsx__default = /*#__PURE__*/ _interopDefaultLegacy(clsx);
var realyFastDeepClone__default =
/*#__PURE__*/ _interopDefaultLegacy(realyFastDeepClone);
/* --------
* Build the Deep Clone Function
* -------- */
var deepClone = realyFastDeepClone__default['default']();
/* --------
* Prebuild the Context
* -------- */
var ThemeContext = React__namespace.createContext(undefined);
function useBucketTheme() {
/** Get the current context value */
var currentContext = React__namespace.useContext(ThemeContext);
/** Allow hook call outside content, returning the default object */
if (!currentContext) {
return {
theme: BucketTheme_default.defaultBucketThemeConfig,
};
}
/** Return the Context if exists */
return currentContext;
}
/* --------
* Define an Hook to get Theme Options
* -------- */
function useComponentProps(componentName) {
/** Get the theme */
var _a = useBucketTheme(),
_b = componentName,
componentProps = _a.theme[_b];
return React__namespace.useMemo(
function () {
return deepClone(componentProps);
},
[componentProps]
);
}
function useWithDefaultProps(componentName, props) {
/** Get the Theme Component Props */
var componentProps = useComponentProps(componentName);
/** Produce props unions */
var propsUnions = tslib.__assign(tslib.__assign({}, componentProps), props);
/** Merge classNames */
if (componentProps.className || props.className) {
propsUnions.className = clsx__default['default'](
componentProps.className,
props.className
);
}
/** Merge style */
if (componentProps.style || props.style) {
propsUnions.style = tslib.__assign(
tslib.__assign({}, componentProps.style),
props.style
);
}
return propsUnions;
}
function withDefaultProps(componentName, Component) {
return function (receivedProps) {
/** Merge props with default */
var props = useWithDefaultProps(componentName, receivedProps);
/** Return the Component */
return React__namespace.createElement(Component, tslib.__assign({}, props));
};
}
exports.ThemeContext = ThemeContext;
exports.useComponentProps = useComponentProps;
exports.useWithDefaultProps = useWithDefaultProps;
exports.withDefaultProps = withDefaultProps;