/**
 * @file SVGO configuration for Simple Icons.
 */

/** @type {import("svgo").Config} */
const config = {
  multipass: true,
  plugins: [
    'cleanupAttrs',
    'inlineStyles',
    'removeDoctype',
    'removeXMLProcInst',
    'removeComments',
    'removeMetadata',
    'removeDesc',
    'removeUselessDefs',
    'removeEditorsNSData',
    'removeEmptyAttrs',
    'removeHiddenElems',
    'removeEmptyText',
    'removeEmptyContainers',
    'cleanupEnableBackground',
    {
      name: 'convertPathData',
      params: {
        // 3 decimals of precision in floating point numbers
        floatPrecision: 3,
        // Some editors (e.g. Adobe Illustrator and Sketch) cannot parse flags
        // without space wrapping
        noSpaceAfterFlags: false,
      },
    },
    'convertTransform',
    {
      name: 'removeUnknownsAndDefaults',
      params: {
        // Keep the 'role' attribute, if it's already defined
        keepRoleAttr: true,
      },
    },
    'removeNonInheritableGroupAttrs',
    {
      // Remove paths with fill="none"
      name: 'removeUselessStrokeAndFill',
      params: {
        removeNone: true,
      },
    },
    'removeUselessStrokeAndFill',
    'removeUnusedNS',
    'cleanupIds',
    'cleanupNumericValues',
    'cleanupListOfValues',
    'moveGroupAttrsToElems',
    'collapseGroups',
    'removeRasterImages',
    {
      // Compound all <path>s into one
      name: 'mergePaths',
      params: {
        force: true,
        noSpaceAfterFlags: false,
      },
    },
    {
      // Convert basic shapes (such as <circle>) to <path>
      name: 'convertShapeToPath',
      params: {
        // Including <arc>
        convertArcs: true,
      },
    },
    'convertEllipseToCircle',
    {
      // Sort the attributes on the <svg> tag
      name: 'sortAttrs',
      params: {
        order: ['role', 'viewBox'],
        xmlnsOrder: 'alphabetical',
      },
    },
    'sortDefsChildren',
    'removeDimensions',
    {
      name: 'removeAttrs',
      params: {
        attrs: [
          'svg:.*(?<!((role)|(viewBox)|(xmlns)))',
          'path:(?!d)',
          'title:*',
        ],
      },
    },
    {
      // Keep the role="img" attribute and automatically add it
      // to the <svg> tag if it's not there already
      name: 'addAttributesToSVGElement',
      params: {
        attributes: [{role: 'img', xmlns: 'http://www.w3.org/2000/svg'}],
      },
    },
    'removeOffCanvasPaths',
    'removeStyleElement',
    'removeScriptElement',
    'reusePaths',
  ],
};

export default config;
