# frozen_string_literal: true module Primer # `Heading` should be used to communicate page organization and hierarchy. # # - Set tag to one of `:h1`, `:h2`, `:h3`, `:h4`, `:h5`, `:h6` based on what is appropriate for the page context. # - Use `Heading` as the title of a section or sub section. # - Do not use `Heading` for styling alone. For simply styling text, consider using <%= link_to_component(Primer::TextComponent) %> with relevant <%= link_to_typography_docs %> # such as `font_size` and `font_weight`. # - Do not jump heading levels. For instance, do not follow a `

` with an `

`. Heading levels should increase by one in ascending order. # # @accessibility # While sighted users rely on visual cues such as font size changes to determine what the heading is, assistive technology users rely on programatic cues that can be read out. # When text on a page is visually implied to be a heading, ensure that it is coded as a heading. Additionally, visually implied heading level and coded heading level should be # consistent. [See WCAG success criteria: 1.3.1: Info and Relationships](https://www.w3.org/WAI/WCAG21/Understanding/info-and-relationships.html) # # Headings allow assistive technology users to quickly navigate around a page. Navigation to text that is not meant to be a heading can be a confusing experience. # <%= link_to_heading_practices %> class HeadingComponent < Primer::Component status :beta TAG_FALLBACK = :h2 TAG_OPTIONS = [:h1, TAG_FALLBACK, :h3, :h4, :h5, :h6].freeze # @example Default # <%= render(Primer::HeadingComponent.new(tag: :h1)) { "H1 Text" } %> # <%= render(Primer::HeadingComponent.new(tag: :h2)) { "H2 Text" } %> # <%= render(Primer::HeadingComponent.new(tag: :h3)) { "H3 Text" } %> # <%= render(Primer::HeadingComponent.new(tag: :h4)) { "H4 Text" } %> # <%= render(Primer::HeadingComponent.new(tag: :h5)) { "H5 Text" } %> # <%= render(Primer::HeadingComponent.new(tag: :h6)) { "H6 Text" } %> # # @param tag [String] <%= one_of(Primer::HeadingComponent::TAG_OPTIONS) %> # @param system_arguments [Hash] <%= link_to_system_arguments_docs %> def initialize(tag:, **system_arguments) @system_arguments = system_arguments @system_arguments[:tag] = fetch_or_fallback(TAG_OPTIONS, tag, TAG_FALLBACK) end def call render(Primer::BaseComponent.new(**@system_arguments)) { content } end end end