Skip to content
lostcoords / ui
Components

Components Segmented control

Segmented control

Related views and mutually exclusive choices.

Default

Tabs and toggles

Interaction controller
app/javascript/controllers/demo_controller.js
import { Controller } from "@hotwired/stimulus"

export default class extends Controller {
  static targets = ["toast", "toasts"]

  press({ currentTarget }) {
    currentTarget.setAttribute(
      "aria-pressed",
      String(currentTarget.getAttribute("aria-pressed") !== "true"),
    )
  }

  select({ currentTarget }) {
    for (const tab of currentTarget.closest("[role=tablist]").querySelectorAll("[role=tab]")) {
      tab.setAttribute("aria-selected", String(tab === currentTarget))
    }
  }

  choose({ currentTarget }) {
    for (const button of currentTarget.closest("[role=group]").querySelectorAll("button")) {
      button.setAttribute("aria-pressed", String(button === currentTarget))
    }
  }

  toast() {
    this.toastsTarget.append(this.toastTarget.content.cloneNode(true))
  }
}

API reference

segmented_class

segmented_class(extra: nil)
ParameterDefaultValues
extranilAdditional Tailwind classes

segmented_tab_class

segmented_tab_class(active: false, extra: nil)
ParameterDefaultValues
activefalsetrue · false
extranilAdditional Tailwind classes