docs/src/modules/utils/generateMarkdown.ts/generateClasses
function generateClasses(reactAPI: ReactApi, nonJSSComponent: boolean) {
  if (!reactAPI.styles.classes.length) {
    return '';
  }

  if (!reactAPI.styles.name && reactAPI.name.indexOf('Unstyled') === -1) {
    throw new Error(`Missing styles name on ${reactAPI.name} component`);
  }

  let text = '';

  text = `| Rule name | Global class | Description |
|:-----|:-------------|:------------|\n`;
  text += reactAPI.styles.classes
    .map((styleRule) => {
      if (styleRule === '@global') {
        return '| <span class="prop-name">@global</span> | | Apply global styles.';
      }

      const description = reactAPI.styles.descriptions[styleRule];

      if (typeof description === 'undefined' && ['Grid', 'Paper'].indexOf(reactAPI.name) === -1) {
        throw new Error(`The "${styleRule}" style rule is missing a description`);
      }

      return `| <span class="prop-name">${styleRule}</span> | <span class="prop-name">.${
        reactAPI.styles.globalClasses[styleRule]
      }</span> | ${description ? escapeCell(description) : ''}`;
    })
    .join('\n');

  return `## CSS

${text}

You can override the style of the component thanks to one of these customization points:
${
  nonJSSComponent
    ? `
- With a [global class name](/guides/interoperability/#global-css).
- With a rule name as part of the component's [\`styleOverrides\` property](/customization/components/#global-theme-override) in a custom theme.
`
    : `
- With a rule name of the [\`classes\` object prop](/customization/components/#overriding-styles-with-classes).
- With a [global class name](/customization/components/#overriding-styles-with-global-class-names).
- With a theme and an [\`overrides\` property](/customization/globals/#css).

If that's not sufficient, you can check the [implementation of the component](${SOURCE_CODE_ROOT_URL}${normalizePath(
        reactAPI.filename,
      )}) for more detail.
`
}
`;
}