lucide-react
Version:
A Lucide icon library package for React applications.
65 lines (61 loc) • 3 kB
JavaScript
/**
* @license lucide-react v1.46.0 - ISC
*
* This source code is licensed under the ISC license.
* See the LICENSE file in the root directory of this source tree.
*/
import defaultAttributes from './defaultAttributes.mjs';
import { mergeClasses } from '../utils/mergeClasses.mjs';
function isDefined(value) {
return value !== null && value !== void 0;
}
function buildLucideIconNode(icon, params = {}) {
const attributeNames = params.attributeNames ?? {};
const getAttributeName = (attributeName) => attributeNames[attributeName] ?? attributeName;
const viewBoxWidth = icon.size ?? icon.width ?? defaultAttributes["width"];
const viewBoxHeight = icon.size ?? icon.height ?? defaultAttributes["height"];
const aliasClassNames = icon.aliases?.filter((alias) => typeof alias === "string" && alias.trim() !== "").map((alias) => `lucide-${alias}`) ?? [];
const iconClassNames = [...icon.name ? [`lucide-${icon.name}`] : [], ...aliasClassNames];
const classNamesFromClassName = params.className?.split(" ").filter(Boolean) ?? [];
const className = params.includeDefaultClasses === false ? mergeClasses(...classNamesFromClassName) : mergeClasses("lucide", ...iconClassNames, ...classNamesFromClassName);
const calculatedStrokeWidth = params.absoluteStrokeWidth ? Number(params.strokeWidth ?? defaultAttributes["stroke-width"]) * Number(icon.size ?? icon.width ?? defaultAttributes["width"]) / Number(params.size ?? params.width ?? defaultAttributes["width"]) : params.strokeWidth ?? defaultAttributes["stroke-width"];
const attributes = {
...Object.entries(defaultAttributes).reduce((attrs, [attrName, value]) => {
attrs[getAttributeName(attrName)] = value;
return attrs;
}, {}),
..."color" in params && params.color && {
[getAttributeName("stroke")]: params.color
},
..."size" in params && isDefined(params.size) && {
[getAttributeName("width")]: params.size,
[getAttributeName("height")]: params.size
},
..."width" in params && isDefined(params.width) && {
[getAttributeName("width")]: params.width
},
..."height" in params && isDefined(params.height) && {
[getAttributeName("height")]: params.height
},
[getAttributeName("stroke-width")]: calculatedStrokeWidth,
...className && {
[getAttributeName("class")]: className
},
[getAttributeName("viewBox")]: `0 0 ${viewBoxWidth} ${viewBoxHeight}`,
...params.hasA11yProp === false ? {
[getAttributeName("aria-hidden")]: "true"
} : {},
..."attributes" in params && params.attributes
};
return [
"svg",
attributes,
icon.node.map((child) => {
const [name, attrs, children] = child;
const nextAttrs = params.nonScalingStroke ? { [getAttributeName("vector-effect")]: "non-scaling-stroke", ...attrs } : attrs;
return children ? [name, nextAttrs, children] : [name, nextAttrs];
})
];
}
export { buildLucideIconNode as default };
//# sourceMappingURL=buildLucideIconNode.mjs.map