Class: Plutonium::UI::Layout::IconRail

Inherits:
Component::Base show all
Includes:
Phlex::Slotable
Defined in:
lib/plutonium/ui/layout/icon_rail.rb

Overview

A fixed 56px-wide icon-only navigation rail for the app shell. Renders nav items as icon buttons with tooltips; falls back to a 2-letter abbreviation when an item has no icon.

When items have children:

  • Collapsed (default): hovering the parent shows a CSS flyout to the right

  • Pinned (body.pu-rail-pinned): rail expands to 220px, children collapse inline

Examples:

Basic usage

render IconRail.new(menu: @menu) do |rail|
  rail.with_brand { image_tag("logo.svg", class: "w-8 h-8") }
end

Constant Summary collapse

DEFAULT_MAX_DEPTH =
2

Instance Method Summary collapse

Methods included from Component::Behaviour

#around_template

Methods included from Component::Tokens

#classes, #tokens

Methods included from Component::Kit

#BuildActionButton, #BuildActionsDropdown, #BuildBlock, #BuildBreadcrumbs, #BuildBulkActionsToolbar, #BuildColorModeSelector, #BuildDynaFrameContent, #BuildDynaFrameHost, #BuildEmptyCard, #BuildFrameNavigatorPanel, #BuildModalCentered, #BuildModalSlideover, #BuildPageHeader, #BuildPanel, #BuildRowActionsDropdown, #BuildSkeletonTable, #BuildTabList, #BuildTableFilterPills, #BuildTableInfo, #BuildTablePagination, #BuildTableScopesBar, #BuildTableScopesPills, #BuildTableSearchBar, #BuildTableToolbar, #BuildTableViewSwitcher, #method_missing, #respond_to_missing?

Constructor Details

#initialize(menu: nil, max_depth: DEFAULT_MAX_DEPTH) ⇒ IconRail

Returns a new instance of IconRail.

Parameters:

  • menu (Phlexi::Menu::Builder, nil) (defaults to: nil)

    Menu structure (same shape as SidebarMenu)

  • max_depth (Integer) (defaults to: DEFAULT_MAX_DEPTH)

    Maximum rendering depth (depth 2 supports parent+children)



32
33
34
35
# File 'lib/plutonium/ui/layout/icon_rail.rb', line 32

def initialize(menu: nil, max_depth: DEFAULT_MAX_DEPTH)
  @menu = menu
  @max_depth = max_depth
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class Plutonium::UI::Component::Kit

Instance Method Details

#brandObject

Slot for the brand mark rendered at the top of the rail.



26
# File 'lib/plutonium/ui/layout/icon_rail.rb', line 26

slot :brand

#view_templateObject



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/plutonium/ui/layout/icon_rail.rb', line 37

def view_template
  aside(
    id: "sidebar-navigation",
    data: {controller: "sidebar icon-rail"},
    aria: {label: "Sidebar Navigation"},
    class: "fixed top-0 left-0 z-40 h-screen " \
           "bg-[var(--pu-surface)] border-r border-[var(--pu-border)] " \
           "flex flex-col transition-[width] duration-200 overflow-x-hidden " \
           "-translate-x-full lg:translate-x-0"
  ) do
    render_brand_section
    render_nav_section
    render_footer_section
  end
end