UNPKG

lucide-react

Version:

A Lucide icon library package for React applications.

65 lines (61 loc) 3 kB
/** * @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