Module: Admin::UiHelper

Defined in:
lib/generators/ruby_cms/templates/helpers/admin/ui_helper.rb

Overview

Shared visual helpers for admin views.

  • admin_crumbs("Audit log") => ["Admin", url: "/admin", "Audit log"]
  • admin_crumbs("Settings", "Permissions")
  • badge_classes(:success) => "bg-green-50 text-green-700 border-green-100"
  • badge_dot_classes(:danger) => "bg-red-500"

Constant Summary collapse

BADGE_PALETTE =
{
  neutral: { bg: "bg-[#faf8f3]", text: "text-[#57534e]", border: "border-[#e9e4d4]", dot: "bg-[#a8a29e]" },
  blue: { bg: "bg-blue-50", text: "text-blue-700", border: "border-blue-100", dot: "bg-blue-500" },
  green: { bg: "bg-green-50",  text: "text-green-700",  border: "border-green-100",  dot: "bg-green-600" },
  amber: { bg: "bg-amber-50",  text: "text-amber-700",  border: "border-amber-100",  dot: "bg-amber-500" },
  red: { bg: "bg-red-50", text: "text-red-700", border: "border-red-100", dot: "bg-red-500" },
  purple: { bg: "bg-purple-50", text: "text-purple-700", border: "border-purple-100", dot: "bg-purple-500" },
  success: { bg: "bg-green-50", text: "text-green-700", border: "border-green-100", dot: "bg-green-600" },
  danger: { bg: "bg-red-50", text: "text-red-700", border: "border-red-100", dot: "bg-red-500" },
  warn: { bg: "bg-amber-50", text: "text-amber-700", border: "border-amber-100", dot: "bg-amber-500" }
}.freeze

Instance Method Summary collapse

Instance Method Details

#admin_crumbs(*labels) ⇒ Object



23
24
25
26
# File 'lib/generators/ruby_cms/templates/helpers/admin/ui_helper.rb', line 23

def admin_crumbs(*labels)
  root_label = t("ruby_cms.admin.breadcrumb.admin", default: "Admin")
  [ { label: root_label, url: admin_root_path } ] + labels.compact.map { |l| { label: l } }
end

#badge_classes(tone = :neutral) ⇒ Object

Returns "bg-X-50 text-X-700 border-X-100" classes for a Tailwind pill.



29
30
31
32
# File 'lib/generators/ruby_cms/templates/helpers/admin/ui_helper.rb', line 29

def badge_classes(tone = :neutral)
  palette = BADGE_PALETTE[tone.to_sym] || BADGE_PALETTE[:neutral]
  "#{palette[:bg]} #{palette[:text]} #{palette[:border]}"
end

#badge_dot_classes(tone = :neutral) ⇒ Object

Returns just the dot bg class (for inline status dots inside pills).



35
36
37
# File 'lib/generators/ruby_cms/templates/helpers/admin/ui_helper.rb', line 35

def badge_dot_classes(tone = :neutral)
  (BADGE_PALETTE[tone.to_sym] || BADGE_PALETTE[:neutral])[:dot]
end

#status_pill(tone, label, dot: true) ⇒ Object

Convenience: render a small dot+label pill.



40
41
42
43
44
45
46
# File 'lib/generators/ruby_cms/templates/helpers/admin/ui_helper.rb', line 40

def status_pill(tone, label, dot: true)
  classes = "inline-flex items-center gap-1.5 px-2 py-0.5 rounded-full text-[11px] font-medium border whitespace-nowrap #{badge_classes(tone)}"
  (:span, class: classes) do
    concat (:span, "", class: "w-1.5 h-1.5 rounded-full #{badge_dot_classes(tone)}") if dot
    concat label
  end
end