'use strict'; const iconSet_getIcon = require('../icon-set/get-icon.cjs'); const icon_defaults = require('../icon/defaults.cjs'); const css_common = require('./common.cjs'); const css_format = require('./format.cjs'); require('../icon/merge.cjs'); require('../icon/transformations.cjs'); require('../icon-set/tree.cjs'); require('../svg/html.cjs'); require('../svg/size.cjs'); require('../svg/url.cjs'); const commonSelector = ".icon--{prefix}"; const iconSelector = ".icon--{prefix}--{name}"; const contentSelector = ".icon--{prefix}--{name}::after"; const defaultSelectors = { commonSelector, iconSelector, overrideSelector: commonSelector + iconSelector }; function getIconsCSSData(iconSet, names, options = {}) { const css = []; const errors = []; const palette = options.color ? true : iconSet.info?.palette; let mode = options.mode || typeof palette === "boolean" && (palette ? "background" : "mask"); if (!mode) { for (let i = 0; i < names.length; i++) { const icon = iconSet_getIcon.getIconData(iconSet, names[i]); if (icon) { mode = icon.body.includes("currentColor") ? "mask" : "background"; break; } } if (!mode) { mode = "mask"; errors.push( "/* cannot detect icon mode: not set in options and icon set is missing info, rendering as " + mode + " */" ); } } let varName = options.varName; if (varName === void 0 && mode === "mask") { varName = "svg"; } const newOptions = { ...options, // Override mode and varName mode, varName }; const { commonSelector: commonSelector2, iconSelector: iconSelector2, overrideSelector } = newOptions.iconSelector ? newOptions : defaultSelectors; const iconSelectorWithPrefix = iconSelector2.replace( /{prefix}/g, iconSet.prefix ); const commonRules = { ...options.rules, ...css_common.getCommonCSSRules(newOptions) }; const hasCommonRules = commonSelector2 && commonSelector2 !== iconSelector2; const commonSelectors = /* @__PURE__ */ new Set(); if (hasCommonRules) { css.push({ selector: commonSelector2.replace(/{prefix}/g, iconSet.prefix), rules: commonRules }); } for (let i = 0; i < names.length; i++) { const name = names[i]; const iconData = iconSet_getIcon.getIconData(iconSet, name); if (!iconData) { errors.push("/* Could not find icon: " + name + " */"); continue; } const rules = css_common.generateItemCSSRules( { ...icon_defaults.defaultIconProps, ...iconData }, newOptions ); let requiresOverride = false; if (hasCommonRules && overrideSelector) { for (const key in rules) { if (key in commonRules) { requiresOverride = true; } } } const selector = (requiresOverride && overrideSelector ? overrideSelector.replace(/{prefix}/g, iconSet.prefix) : iconSelectorWithPrefix).replace(/{name}/g, name); css.push({ selector, rules }); if (!hasCommonRules) { commonSelectors.add(selector); } } const result = { css, errors }; if (!hasCommonRules && commonSelectors.size) { const selector = Array.from(commonSelectors).join( newOptions.format === "compressed" ? "," : ", " ); result.common = { selector, rules: commonRules }; } return result; } function getIconsCSS(iconSet, names, options = {}) { const { css, errors, common } = getIconsCSSData(iconSet, names, options); if (common) { if (css.length === 1 && css[0].selector === common.selector) { css[0].rules = { // Common first, override later ...common.rules, ...css[0].rules }; } else { css.unshift(common); } } return css_format.formatCSS(css, options.format) + (errors.length ? "\n" + errors.join("\n") + "\n" : ""); } function getIconsContentCSS(iconSet, names, options) { const errors = []; const css = []; const iconSelectorWithPrefix = (options.iconSelector ?? contentSelector).replace(/{prefix}/g, iconSet.prefix); for (let i = 0; i < names.length; i++) { const name = names[i]; const iconData = iconSet_getIcon.getIconData(iconSet, name); if (!iconData) { errors.push("/* Could not find icon: " + name + " */"); continue; } const content = css_common.generateItemContent( { ...icon_defaults.defaultIconProps, ...iconData }, options ); const selector = iconSelectorWithPrefix.replace(/{name}/g, name); css.push({ selector, rules: { ...options.rules, content } }); } return css_format.formatCSS(css, options.format) + (errors.length ? "\n" + errors.join("\n") + "\n" : ""); } exports.getIconsCSS = getIconsCSS; exports.getIconsCSSData = getIconsCSSData; exports.getIconsContentCSS = getIconsContentCSS;