class Primer::Yard::LookbookPage

def generate

def generate
  path = File.expand_path(
    File.join(
      *%w[.. .. .. previews pages forms inputs],
      "#{docs.short_name.dasherize.underscore}.md.erb"
    ), __dir__
  )
  documented_methods = docs.non_slot_methods.select do |mtd|
    [component.name, "Primer::Forms::Dsl::InputMethods"].include?(mtd.parent.title)
  end
  preview_methods = PREVIEW_MAP[component]
  preview_erbs = preview_methods.map do |preview_method|
    if Primer::FormsPreview.instance_methods.exclude?(preview_method)
      raise "Preview '#{preview_method}' does not exist in Primer::FormsPreview"
    end
    # rubocop:enable Style/IfUnlessModifier
    "<%= embed Primer::FormsPreview, #{preview_method.inspect} %>"
  end
  # rubocop:enable Lint/UselessAssignment
  # rubocop:disable Security/Eval
  File.open(path, "w") do |f|
    f.write(eval(Erubi::Engine.new(<<~ERB, trim: true).src))
      ---
      title: <%= docs.title.underscore.titleize %>
      id: <%= page_id %>
      ---
      <%= docs.base_docstring %>
      ## Usage
      ```ruby
      <%= docs.tags(:form_usage).first.text %>
      ```
      <% specific_args = specific_args_from(docs.params) %>
      <% unless specific_args.empty? %>
      ## Arguments
      <%= generate_args_table(specific_args) %>
      <% end %>
      ## Common arguments
      <%= generate_args_table(common_args_from(docs.params)) %>
      <% unless documented_methods.empty? %>
      ## Methods
        <% documented_methods.each do |method_docs| %>
      ### `#<%= method_docs.signature.sub(/def /, "") %>`
      <%= method_docs.base_docstring %>
          <% param_tags = method_docs.tags(:param) %>
          <% if param_tags.any? %>
      <%= generate_args_table(param_tags) %>
          <% end %>
        <% end %>
      <% end %>
      <% unless preview_methods.empty? %>
      ## Examples
      <%= preview_erbs.join("\n") %>
      <% end %>
    ERB
  end
  # rubocop:enable Security/Eval
end