@itwin/itwinui-react
Version:
A react component library for iTwinUI
65 lines (64 loc) • 1.93 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', {
value: true,
});
Object.defineProperty(exports, 'polymorphic', {
enumerable: true,
get: function () {
return polymorphic;
},
});
const _interop_require_default = require('@swc/helpers/_/_interop_require_default');
const _interop_require_wildcard = require('@swc/helpers/_/_interop_require_wildcard');
const _react = /*#__PURE__*/ _interop_require_wildcard._(require('react'));
const _classnames = /*#__PURE__*/ _interop_require_default._(
require('classnames'),
);
const _useGlobals = require('../hooks/useGlobals.js');
const _styles = require('../../styles.js');
const _base = (defaultElement) => (className, attrs) => {
let Comp = _react.forwardRef(({ as = defaultElement, ...props }, ref) => {
props = {
...attrs,
...props,
className: getScopedClassName(
(0, _classnames.default)(className, attrs?.className, props.className),
),
};
let Element = as || 'div';
if (
'button' === Element ||
'a' === Element ||
('input' === Element && 'checkbox' === props.type)
) {
var _props;
(_props = props).tabIndex ?? (_props.tabIndex = 0);
}
(0, _useGlobals.useGlobals)();
return _react.createElement(Element, {
ref: ref,
...props,
});
});
if ('development' === process.env.NODE_ENV)
Comp.displayName = getDisplayNameFromClass(className);
return Comp;
};
const polymorphic = new Proxy(
{},
{
get: (target, prop) => {
if ('string' == typeof prop) return _base(prop);
return Reflect.get(target, prop);
},
},
);
const getDisplayNameFromClass = (str) => {
let camel = str.replace(/-([a-z])/g, (g) => g[1].toUpperCase());
return camel.substring(3);
};
const getScopedClassName = (className = '') =>
className
.split(' ')
.map((c) => (c in _styles.styles ? _styles.styles[c] : c))
.join(' ') || null;