consul/ui/packages/consul-ui/app/components/horizontal-kv-list
hc-github-team-consul-core bf42dd6c4c
Backport of Cc 5545: Upgrade HDS packages and modifiers into release/1.17.x (#19245)
* server: run the api checks against the path without params (#19205)

* Clone proto into deepcopy correctly (#19204)

* chore: update version and nightly CI for 1.17 (#19208)

Update version file to 1.18-dev, and replace 1.13 nightly test with
1.17.

* mesh: add validation hook to proxy configuration (#19186)

* mesh: add more validations to Destinations resource (#19202)

* catalog, mesh: implement missing ACL hooks (#19143)

This change adds ACL hooks to the remaining catalog and mesh resources, excluding any computed ones. Those will for now continue using the default operator:x permissions.

It refactors a lot of the common testing functions so that they can be re-used between resources.

There are also some types that we don't yet support (e.g. virtual IPs) that this change adds ACL hooks to for future-proofing.

* NET-5073 - ProxyConfiguration: implement various connection options (#19187)

* NET-5073 - ProxyConfiguration: implement various connection options

* PR feedback - LocalConnection and InboundConnection do not affect exposed routes. configure L7 route destinations. fix connection proto sequence numbers.

* add timeout to L7 Route Destinations

* Relplat 897 copywrite bot workarounds (#19200)

Co-authored-by: Ronald Ekambi <ronekambi@gmail.com>

* mesh: add xRoute ACL hook tenancy tests (#19177)

Enhance the xRoute ACL hook tests to cover tenanted situations.
These tests will only execute in enterprise.

* resource: enforce lowercase v2 resource names (#19218)

* mesh: add DestinationPolicy ACL hook tenancy tests (#19178)

Enhance the DestinationPolicy ACL hook tests to cover tenanted situations.
These tests will only execute in enterprise.

* catalog: add FailoverPolicy ACL hook tenancy test (#19179)

* Upgrade @hashicorp/design-system-tokens to 1.9.0

* Upgrade @hashicorp/design-system-components to 1.8.1

* Upgrade @hashicorp/design-system-components and ember-in-viewport

* Explicitly install ember-modifier@4.1.0

* rename copy-button

* backport of commit 1a1b95127d

* backport of commit b7295ee1a7

* backport of commit 73089ed9ea

* backport of commit cea2ab90e6

* backport of commit 964ef50df3

* backport of commit 0fd98e7e05

* backport of commit 0519b9bd73

* backport of commit 50cbd00683

* backport of commit 838a8a9745

* backport of commit 4882490c6f

* backport of commit 42a9f03a2b

* backport of commit bbedb3fff0

* backport of commit 4576fbee1e

* backport of commit 07584faa58

* backport of commit ef39122bad

* backport of commit c77d8a06f3

* backport of commit 13e3d1cdb5

---------

Co-authored-by: R.B. Boyer <4903+rboyer@users.noreply.github.com>
Co-authored-by: Ashwin Venkatesh <ashwin@hashicorp.com>
Co-authored-by: Michael Zalimeni <michael.zalimeni@hashicorp.com>
Co-authored-by: Iryna Shustava <ishustava@users.noreply.github.com>
Co-authored-by: John Murret <john.murret@hashicorp.com>
Co-authored-by: modrake <12264057+modrake@users.noreply.github.com>
Co-authored-by: Ronald Ekambi <ronekambi@gmail.com>
Co-authored-by: Semir Patel <semir.patel@hashicorp.com>
Co-authored-by: wenincode <tyler.wendlandt@hashicorp.com>
Co-authored-by: Chris Hut <tophernuts@gmail.com>
2023-10-17 14:16:57 +00:00
..
README.mdx Backport of Cc 5545: Upgrade HDS packages and modifiers into release/1.17.x (#19245) 2023-10-17 14:16:57 +00:00
debug.scss [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
skin.scss [COMPLIANCE] License changes (#18443) 2023-08-11 09:12:13 -04:00

README.mdx

---
class: css
---
# horizontal-kv-list

Provides a horizontally stacked list of key/value pairs, commonly used with a
definition/description list.

The keys can be configured to be either, visible, invisible, or with an icon.

- **Icon Configuration:** Add a `class` that describes the key/value pair and configure the icon for that class in the CSS
- **Visible Title Configuration:** Add an empty `class` attribute. A trailing `:`
  will be added to the title (ensure you collapse the whitespace in the `dt`).
- **Invisible Title Configuration:** Don't add a `class` attribute at all, i.e. by default
  the title is not shown.

If you are providing an icon, you should also use the `{{tooltip}}` modifier
to provide a textual tooltip for the icon. Using the `{{tooltip}}` modifier
with no arguments will make it use the text/DOM content of the DOM element it
is attached to, see below for a full usage example.

`<ConsulCopyButton />` components are commonly added to the value, and can be added
to the left or right of the value.

```hbs preview-template
<figure>
  <figcaption>
    All KVs can be specified in a single list
  </figcaption>

  <dl>
    <dt class="kind-terminating-gateway">Kind</dt>
    <dd>
      Terminating Gateway
    </dd>
{{#if true}}
    <dt
      {{tooltip}}
      class="lock-delay"
    >
      Lock Delay
    </dt>
    <dd>10ms</dd>
{{/if}}
    <dt
      {{tooltip}}
      class="ttl"
    >
      TTL
    </dt>
    <dd>
      <ConsulCopyButton
        @value={{"1m30s10ms"}}
        @name="TTL"
      />
      1m30s10ms
    </dd>
    <dt>
      Invisible title
    </dt>
    <dd>
      local
    </dd>
    <dt class>Visible title</dt>
    <dd>
      global
    </dd>
  </dl>

</figure>
<hr />
<figure>
  <figcaption>...or they can all be specified as individual lists (for if you have a component that is already wrapped in a dl, such as our TagList)</figcaption>

  <dl>
    <dt
      class="service-identity"
    >
      Service Identity
    </dt>
    <dd>service-0</dd>
  </dl><dl>
    <dt
      {{tooltip}}
      class="lock-delay"
    >
      Lock Delay
    </dt>
    <dd>10ms</dd>
  </dl><dl>
    <dt
      {{tooltip}}
      class="ttl"
    >
      TTL
    </dt>
    <dd>
      1m30s10ms
      <ConsulCopyButton
        @value={{"1m30s10ms"}}
        @name="TTL"
      />
    </dd>
  </dl><dl>
    <dt>
      No visible title
    </dt>
    <dd>local</dd>
  </dl><dl>
    <dt class>Visible title</dt>
    <dd>global</dd>
  </dl><!--
      Collapse the whitespace but keep our indentation
--><TagList @tags={{array 'one' 'two'}} />

</figure>
<hr />
<figure class="reversed">
  <figcaption>When reversing, you'll probably want to use indiviudual dl's so as to not reverse the order of the KV pairs</figcaption>
  <dl>
      <dt class="kind-terminating-gateway">Kind</dt>
      <dd>
        Terminating Gateway
      </dd>
  </dl>
  <dl>
    <dt
      class="service-identity"
    >
      Service Identity
    </dt>
    <dd>service-0</dd>
  </dl>
  <dl>
    <dt
      {{tooltip}}
      class="lock-delay"
    >
      Lock Delay
    </dt>
    <dd>10ms</dd>
  </dl><dl>
    <dt
      {{tooltip}}
      class="ttl"
    >
      TTL
    </dt>
    <dd>
      <ConsulCopyButton
        @value={{"1m30s10ms"}}
        @name="TTL"
      />
      1m30s10ms
    </dd>
  </dl><dl>
    <dt>
      No visible title
    </dt>
    <dd>local</dd>
  </dl><dl>
    <dt class>Visible title</dt>
    <dd>global</dd>
  </dl>

</figure>
```
When conditionally listing key/values within a single `dl`, be aware that if no key/values should be shown, then you will be left with an empty `dl`. If you collapse the whitespace using handlebars whitespace collapsing `~`, then this empty `dl` will be removed from the flow via CSS. Alternatively consider using multiple `dl`s which can be wrapped with conditionals individually and therefore leave no empty DOM.

When using as individual `dl` lists be aware of whitespace between `dl`s. There are various ways you can counter this:

1. remove the whitespace `</dl><dl>`.
2. Wrap the whitespace in comments `</dl><!-- carriage return --><dl>`
3. Use handlebars whitespace removal `~` as above.
4. Put a `display: inline-flex` on the parent element (this can affect other layout).

Depending on your exact usecase one of the above options may be more suited than others.

```hbs preview-template
<figure>
  <figcaption>
    Conditionally showing multiple key/values sometimes means that you insert an empty `dl` into the DOM
  </figcaption>

  <dl>
    {{~#if false}}
      <dt>Something that might not be set</dt>
      <dd>No value!</dd>
    {{/if~}}
    {{~#if false}}
      <dt>Something that might not be set</dt>
      <dd>No value!</dd>
    {{/if~}}
  </dl>
</figure>
```


```css
dl {
  @extend %horizontal-kv-list;
}
.lock-delay::before {
  @extend %with-delay-mask, %as-pseudo;
  color: var(--token-color-foreground-faint);
}
.ttl::before {
  @extend %with-history-mask, %as-pseudo;
  color: var(--token-color-foreground-action);
}
.service-identity {
  @extend %badge;
}
.kind-terminating-gateway {
  @extend %badge, %badge-with-icon;
}
.kind-terminating-gateway::before {
  @extend %with-gateway-mask, %as-pseudo;
}
.reversed > dl {
  @extend %horizontal-kv-list-reversed;
}
.reversed .service-identity {
  @extend %badge-reversed;
}
.reversed .kind-terminating-gateway {
  @extend %badge-with-icon-reversed;
}
```

## Properties

| Property | Type | Default | Description |
| --- | --- | --- | --- |
| `--horizontal-kv-list-separator-width` | `length-percentage` | `18px` | The width of the whitespace between two sets of key/value pairs |
| `--horizontal-kv-list-key-separator` | `string` | `:` | Separator used for between `Key: Value` for textual key/values |
| `--horizontal-kv-list-key-wrapper-start` | `string` | `(` | Starting wrapper used for wrapping `Value (Key)` for reversed textual key/values |
| `--horizontal-kv-list-key-wrapper-end` | `string` | `)` | Ending wrapper used for wrapping `Value (Key)` for reversed textual key/values |