@dnb/eufemia
Version:
DNB Eufemia Design System UI Library
52 lines (51 loc) • 1.8 kB
JavaScript
"use client";
import React from 'react';
import clsx from 'clsx';
import Context from "../shared/Context.js";
import { validateDOMAttributes, extendPropsWithContext } from "../shared/component-helper.js";
import { applySpacing } from "../components/space/SpacingUtils.js";
import { createSkeletonClass, skeletonDOMAttributes } from "../components/skeleton/SkeletonHelper.js";
import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
export const defaultProps = {
skeletonMethod: 'font'
};
function Element(localProps) {
const context = React.useContext(Context);
const props = extendPropsWithContext(localProps, defaultProps, {
skeleton: context === null || context === void 0 ? void 0 : context.skeleton
});
const {
className,
internalClass,
as,
ref,
skeleton,
skeletonMethod,
...rest
} = props;
const Tag = as;
const attributes = rest;
const tagClass = internalClass === false ? '' : (internalClass === true ? undefined : internalClass) || (typeof Tag === 'string' ? `dnb-${Tag}` : '');
const internalClassName = clsx(className, createSkeletonClass(skeletonMethod, skeleton, context), !new RegExp(`${tagClass}(\\s|$)`).test(String(className)) && tagClass);
const params = applySpacing(attributes, {
...attributes,
className: internalClassName
}, typeof Tag === 'string' ? `dnb-${Tag}` : null);
validateDOMAttributes(null, params);
skeletonDOMAttributes(params, skeleton, context);
const isFragment = Tag === React.Fragment;
if (!isFragment && typeof Tag !== 'function' && ref) {
;
params.ref = ref;
}
if (isFragment) {
return _jsx(_Fragment, {
children: params.children
});
}
return _jsx(Tag, {
...params
});
}
export default Element;
//# sourceMappingURL=Element.js.map