consul/ui/packages/consul-ui/app/components/tab-nav
hashicorp-copywrite[bot] 5fb9df1640
[COMPLIANCE] License changes (#18443)
* Adding explicit MPL license for sub-package

This directory and its subdirectories (packages) contain files licensed with the MPLv2 `LICENSE` file in this directory and are intentionally licensed separately from the BSL `LICENSE` file at the root of this repository.

* Adding explicit MPL license for sub-package

This directory and its subdirectories (packages) contain files licensed with the MPLv2 `LICENSE` file in this directory and are intentionally licensed separately from the BSL `LICENSE` file at the root of this repository.

* Updating the license from MPL to Business Source License

Going forward, this project will be licensed under the Business Source License v1.1. Please see our blog post for more details at <Blog URL>, FAQ at www.hashicorp.com/licensing-faq, and details of the license at www.hashicorp.com/bsl.

* add missing license headers

* Update copyright file headers to BUSL-1.1

* Update copyright file headers to BUSL-1.1

* Update copyright file headers to BUSL-1.1

* Update copyright file headers to BUSL-1.1

* Update copyright file headers to BUSL-1.1

* Update copyright file headers to BUSL-1.1

* Update copyright file headers to BUSL-1.1

* Update copyright file headers to BUSL-1.1

* Update copyright file headers to BUSL-1.1

* Update copyright file headers to BUSL-1.1

* Update copyright file headers to BUSL-1.1

* Update copyright file headers to BUSL-1.1

* Update copyright file headers to BUSL-1.1

* Update copyright file headers to BUSL-1.1

* Update copyright file headers to BUSL-1.1

---------

Co-authored-by: hashicorp-copywrite[bot] <110428419+hashicorp-copywrite[bot]@users.noreply.github.com>
2023-08-11 09:12:13 -04:00
..
README.mdx ui: Make our old TabNav component easily usable with a state machine (#13705) 2022-07-14 09:30:07 +01:00
index.hbs [COMPLIANCE] License changes (#18443) 2023-08-11 09:12:13 -04:00
index.js [COMPLIANCE] License changes (#18443) 2023-08-11 09:12:13 -04:00
index.scss [COMPLIANCE] License changes (#18443) 2023-08-11 09:12:13 -04:00
layout.scss [COMPLIANCE] License changes (#18443) 2023-08-11 09:12:13 -04:00
pageobject.js [COMPLIANCE] License changes (#18443) 2023-08-11 09:12:13 -04:00
skin.scss [COMPLIANCE] License changes (#18443) 2023-08-11 09:12:13 -04:00

README.mdx

---
state: needs-love
---
# TabNav

`<TabNav />` renders a list of items as linked tabs (there is also an option
to use labels vs anchors for links for radio button based tabs).

Each item in the list should be a hash of `label`, `href` and `selected`.

- `label`: The text to show
- `href`: a href, probably generated via `href-to`
- `selected`: whether the item is in the selected state or not, probably
  of the state to transition to.

There are two similar event handlers, `@onclick` and `@onTabClick`.

When using `@onclick`, the `item.label` is passed to the handler. When using
`@onTabClick` the entire 'item' is passed instead, therefore you can add
arbitrary properties to the 'item' to be used in the handler.


**Please note:** This component should probably be rebuilt using contextual
components, and real events. Alternatively this could be hand built with native
HTML using the same `nav/ul/li/a` pattern and you could just use the CSS
component to style it. Unless there is a reason to do this, this component
should be used pending a refactor (please remove this note once refactored into
contextual components)

```hbs preview-template
<figure>
  <figcaption>A TabNav with a conditional button using `compact` which removes empty values from arrays</figcaption>
<TabNav @items={{
  compact
      (array
          (hash label="Health Checks" href="#" selected=true)
          (hash label="Service Instances" href="#" selected=(is-href "docs.something"))
(if false (hash label="Don't show me" href="#" selected=false) '')
          (hash label="Lock Sessions" href="#" selected=false)
          (hash label="Metadata" href="#" selected=false)
      )
}}/>
</figure>
```

A TabNav with using a `StateMachine.dispatch`

```hbs
<figure>
  <figcaption>A TabNav with using a StateMachine.dispatch</figcaption>
  <TabNav @items={{
    compact
      (array
        (hash
          label="1"
          selected=(state-matches fsm.state 'one')
          state="ONE"
        )
        (hash
          label="2"
          selected=(state-matches fsm.state 'two')
          state="TWO"
        )
      )
    }}
    @onTabClicked={{pick 'state' fsm.dispatch}}
  />
</figure>
```

```css
.tab-nav {
  @extend %tab-nav;
}
```