版博士V2.0程序
No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.
 
 
 
 

126 líneas
3.8 KiB

  1. 'use strict';
  2. const iconSet_getIcon = require('../icon-set/get-icon.cjs');
  3. const icon_defaults = require('../icon/defaults.cjs');
  4. const css_common = require('./common.cjs');
  5. const css_format = require('./format.cjs');
  6. require('../icon/merge.cjs');
  7. require('../icon/transformations.cjs');
  8. require('../icon-set/tree.cjs');
  9. require('../svg/html.cjs');
  10. require('../svg/size.cjs');
  11. require('../svg/url.cjs');
  12. const commonSelector = ".icon--{prefix}";
  13. const iconSelector = ".icon--{prefix}--{name}";
  14. const defaultSelectors = {
  15. commonSelector,
  16. iconSelector,
  17. overrideSelector: commonSelector + iconSelector
  18. };
  19. function getIconsCSSData(iconSet, names, options = {}) {
  20. const css = [];
  21. const errors = [];
  22. const palette = options.color ? true : iconSet.info?.palette;
  23. let mode = options.mode || typeof palette === "boolean" && (palette ? "background" : "mask");
  24. if (!mode) {
  25. for (let i = 0; i < names.length; i++) {
  26. const icon = iconSet_getIcon.getIconData(iconSet, names[i]);
  27. if (icon) {
  28. mode = icon.body.includes("currentColor") ? "mask" : "background";
  29. break;
  30. }
  31. }
  32. if (!mode) {
  33. mode = "mask";
  34. errors.push(
  35. "/* cannot detect icon mode: not set in options and icon set is missing info, rendering as " + mode + " */"
  36. );
  37. }
  38. }
  39. let varName = options.varName;
  40. if (varName === void 0 && mode === "mask") {
  41. varName = "svg";
  42. }
  43. const newOptions = {
  44. ...options,
  45. // Override mode and varName
  46. mode,
  47. varName
  48. };
  49. const { commonSelector: commonSelector2, iconSelector: iconSelector2, overrideSelector } = newOptions.iconSelector ? newOptions : defaultSelectors;
  50. const iconSelectorWithPrefix = iconSelector2.replace(
  51. /{prefix}/g,
  52. iconSet.prefix
  53. );
  54. const commonRules = css_common.getCommonCSSRules(newOptions);
  55. const hasCommonRules = commonSelector2 && commonSelector2 !== iconSelector2;
  56. const commonSelectors = /* @__PURE__ */ new Set();
  57. if (hasCommonRules) {
  58. css.push({
  59. selector: commonSelector2.replace(/{prefix}/g, iconSet.prefix),
  60. rules: commonRules
  61. });
  62. }
  63. for (let i = 0; i < names.length; i++) {
  64. const name = names[i];
  65. const iconData = iconSet_getIcon.getIconData(iconSet, name);
  66. if (!iconData) {
  67. errors.push("/* Could not find icon: " + name + " */");
  68. continue;
  69. }
  70. const rules = css_common.generateItemCSSRules(
  71. { ...icon_defaults.defaultIconProps, ...iconData },
  72. newOptions
  73. );
  74. let requiresOverride = false;
  75. if (hasCommonRules && overrideSelector) {
  76. for (const key in rules) {
  77. if (key in commonRules) {
  78. requiresOverride = true;
  79. }
  80. }
  81. }
  82. const selector = (requiresOverride && overrideSelector ? overrideSelector.replace(/{prefix}/g, iconSet.prefix) : iconSelectorWithPrefix).replace(/{name}/g, name);
  83. css.push({
  84. selector,
  85. rules
  86. });
  87. if (!hasCommonRules) {
  88. commonSelectors.add(selector);
  89. }
  90. }
  91. const result = {
  92. css,
  93. errors
  94. };
  95. if (!hasCommonRules && commonSelectors.size) {
  96. const selector = Array.from(commonSelectors).join(
  97. newOptions.format === "compressed" ? "," : ", "
  98. );
  99. result.common = {
  100. selector,
  101. rules: commonRules
  102. };
  103. }
  104. return result;
  105. }
  106. function getIconsCSS(iconSet, names, options = {}) {
  107. const { css, errors, common } = getIconsCSSData(iconSet, names, options);
  108. if (common) {
  109. if (css.length === 1 && css[0].selector === common.selector) {
  110. css[0].rules = {
  111. // Common first, override later
  112. ...common.rules,
  113. ...css[0].rules
  114. };
  115. } else {
  116. css.unshift(common);
  117. }
  118. }
  119. return css_format.formatCSS(css, options.format) + (errors.length ? "\n" + errors.join("\n") + "\n" : "");
  120. }
  121. exports.getIconsCSS = getIconsCSS;
  122. exports.getIconsCSSData = getIconsCSSData;