You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
31 lines
955 B
31 lines
955 B
import classNames from 'classnames';
|
|
import camelize from 'dom-helpers/camelize';
|
|
import * as React from 'react';
|
|
import { useBootstrapPrefix } from './ThemeProvider';
|
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
|
const pascalCase = str => str[0].toUpperCase() + camelize(str).slice(1);
|
|
|
|
// TODO: emstricten & fix the typing here! `createWithBsPrefix<TElementType>...`
|
|
export default function createWithBsPrefix(prefix, {
|
|
displayName = pascalCase(prefix),
|
|
Component,
|
|
defaultProps
|
|
} = {}) {
|
|
const BsComponent = /*#__PURE__*/React.forwardRef(({
|
|
className,
|
|
bsPrefix,
|
|
as: Tag = Component || 'div',
|
|
...props
|
|
}, ref) => {
|
|
const resolvedPrefix = useBootstrapPrefix(bsPrefix, prefix);
|
|
return /*#__PURE__*/_jsx(Tag, {
|
|
ref: ref,
|
|
className: classNames(className, resolvedPrefix),
|
|
...props
|
|
});
|
|
});
|
|
BsComponent.defaultProps = defaultProps;
|
|
BsComponent.displayName = displayName;
|
|
return BsComponent;
|
|
} |