Flex

Component

Interactive examples and API documentation

Basic Flex
Basic horizontal flex layout.
Code
<%= render(Hakumi::Flex::Component.new(gap: :middle, align: :start, class: "demo-flex-container")) do %>
  <%= render(Hakumi::Button::Component.new(type: :primary)) { "Primary" } %>
  <%= render(Hakumi::Button::Component.new) { "Default" } %>
  <%= render(Hakumi::Button::Component.new(type: :dashed)) { "Dashed" } %>
  <%= render(Hakumi::Button::Component.new(type: :text)) { "Text" } %>
<% end %>
Vertical Flex
Vertical flex layout.
Code
<%= render(Hakumi::Flex::Component.new(vertical: true, gap: :middle, class: "demo-flex-container")) do %>
  <%= render(Hakumi::Button::Component.new(type: :primary)) { "Primary" } %>
  <%= render(Hakumi::Button::Component.new) { "Default" } %>
  <%= render(Hakumi::Button::Component.new(type: :dashed)) { "Dashed" } %>
<% end %>
Wrap
Flex wrap behavior.
Code
<%= render(Hakumi::Flex::Component.new(wrap: :wrap, gap: :small, class: "demo-flex-container", style: "width: 100%; border: 1px solid #d9d9d9; padding: 10px;")) do %>
  <% 10.times do |i| %>
    <%= render(Hakumi::Button::Component.new) { "Button #{i + 1}" } %>
  <% end %>
<% end %>
Gap
Different gap sizes.
Code
<%= render(Hakumi::Space::Component.new(direction: :vertical, size: :middle, class: "demo-flex-container")) do %>
  <%= render(Hakumi::Flex::Component.new(gap: :small)) do %>
    <%= render(Hakumi::Button::Component.new(type: :primary)) { "Small Gap" } %>
    <%= render(Hakumi::Button::Component.new(type: :primary)) { "Small Gap" } %>
  <% end %>

  <%= render(Hakumi::Flex::Component.new(gap: :middle)) do %>
    <%= render(Hakumi::Button::Component.new(type: :primary)) { "Middle Gap" } %>
    <%= render(Hakumi::Button::Component.new(type: :primary)) { "Middle Gap" } %>
  <% end %>

  <%= render(Hakumi::Flex::Component.new(gap: :large)) do %>
    <%= render(Hakumi::Button::Component.new(type: :primary)) { "Large Gap" } %>
    <%= render(Hakumi::Button::Component.new(type: :primary)) { "Large Gap" } %>
  <% end %>
<% end %>
Align & Justify
Alignment and justification options.
Code
<%= render(
  Hakumi::Flex::Component.new(
    vertical: true,
    gap: :middle,
    style: "width: 100%;"
  )
) do %>
  <%= render(
    Hakumi::Flex::Component.new(
      justify: :space_between,
      align: :center,
      style: "width: 100%; border: 1px solid #d9d9d9; padding: 10px;"
    )
  ) do %>
    <%= render(Hakumi::Button::Component.new(type: :primary)) { "Start" } %>
    <%= render(Hakumi::Button::Component.new) { "Center" } %>
    <%= render(Hakumi::Button::Component.new(type: :primary)) { "End" } %>
  <% end %>

  <%= render(
    Hakumi::Flex::Component.new(
      justify: :center,
      align: :center,
      style: "width: 100%; border: 1px solid #d9d9d9; padding: 10px; height: 100px;"
    )
  ) do %>
    <%= render(Hakumi::Button::Component.new(type: :primary)) { "Centered" } %>
  <% end %>
<% end %>

Flex API

Prop Type Default Description
vertical Boolean false Switch layout to column direction.
wrap :wrap | :nowrap or :wrap-reverse :nowrap Flex-wrap behavior.
justify :start | :end | :center or :space-between | :space-around | :space-evenly :start Horizontal distribution of items.
align :start | :end | :center | :baseline or :stretch :start Cross-axis alignment.
gap :small | :middle | :large | Numeric or String - Spacing between items (token or explicit css value).
component Symbol :div HTML tag used for the wrapper.
content slot Slot - Flex items to render.
**html_options Keyword args - Extra attributes merged into the wrapper. Pass as kwargs (e.g., `class:`, `style:`, `data:`).