code: def render_body(self) -> BlockContent:
      content: list[Block | str] = []
  
      if self.protocols_renders:
          content.extend(
              [
                  Header(2, "Protocols"),
                  *[str(r) for r in self.protocols_renders],
              ]
          )
  
      if self.typevars_renders:
          content.extend(
              [
                  Header(2, "Type Variables"),
                  *[str(r) for r in self.typevars_renders],
              ]
          )
  
      if self.typealiases_renders:
          content.extend(
              [
                  Header(2, "Type Aliases"),
                  *[str(r) for r in self.typealiases_renders],
              ]
          )
  
      return Blocks(content)
  
imports: from __future__ import annotations
  from dataclasses import dataclass
  from functools import cached_property
  from pathlib import Path
  from typing import TYPE_CHECKING, cast
  from quartodoc import layout
  from quartodoc.autosummary import Builder, get_object
  from quartodoc.pandoc.blocks import Block, BlockContent, Blocks, Header
  from .pandoc.blocks import Meta
  from .render import RenderDocAttribute, RenderDocClass, get_render_type
  from .utils import griffe_to_doc, is_protocol, is_typealias, is_typevar
label_desc: Use image node_id 4 for calling the TypeSections obj's underlying member method code with example usage: obj.render_body() and returns: Blocks