Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
d86e8ac
feat(label-group): add new label-group-element
Sep 11, 2025
7f82f28
chore(label-group): minor updates
Oct 20, 2025
9b251d6
feat(label-group): add new functions and features for label management
Oct 26, 2025
8514436
chore: add changeset for pf-label-group element
Oct 27, 2025
8e3236a
docs(label-group): add demos for closeable,overflow,vertical,header o…
Oct 27, 2025
751df4c
fix: correct config path
Oct 28, 2025
5528dd3
chore: small fixes after review
Oct 28, 2025
72c0833
chore: push current state for debugging build errors
Nov 2, 2025
64688ae
chore(label-group): resolve merge conflicts and update package-lock.json
Nov 3, 2025
616b18d
chore(label-group): fix errors
Nov 4, 2025
12c0d2a
chore(label-group): resolve patch conflict keeping upstream version
Nov 4, 2025
bc5f6c9
chore(label-group): resolve patch conflict keeping upstream version
Nov 4, 2025
5c721a7
docs(label-group): update changeset to follow changelog format
Nov 5, 2025
e211096
chore(label-group): fix whitespace and formatting in demos
Nov 5, 2025
89c762f
Revert changes to package-lock.json per PR review
Nov 5, 2025
16212ee
fix(label-group): make collapsedText placeholder generic
Nov 5, 2025
141781e
fix(label-group): wrap #labels getter with server check to avoid DOM …
Nov 5, 2025
9f82c0b
fix(label-group): wrap #labels getter with server check to avoid DOM …
Nov 5, 2025
fb079ed
fix(label-group): guard DOM access for SSR
Nov 5, 2025
06ada58
docs: update README with latest instructions
Nov 6, 2025
7348fd0
chore(label-group): update pf-label-group.ts
Nov 6, 2025
37a1cb6
feat(label-group): add Functionality
Nov 13, 2025
0dcec75
chore(label-group): apply the reqeasted changes
Nov 16, 2025
2eeae64
feat(label-group): add demo to add label
Michal7290 Nov 19, 2025
626f9f2
Merge remote-tracking branch 'sara/create-pf-lable-group' into create…
Michal7290 Nov 19, 2025
8cfa3ef
feat(label-group): change the demos
Michal7290 Nov 20, 2025
b00fa46
Merge pull request #1 from Michal7290/create-pf-lable-group
saraDahanCode Nov 20, 2025
cffdff2
chore(label-group): transferring the insertion logic from TS to Demos
Nov 20, 2025
266be9c
Merge remote-tracking branch 'upstream/main' into create-pf-lable-group
Jan 15, 2026
2d9e0e8
docs(label-group): remove @defult
Jan 24, 2026
b549e8c
chore(label-group): make the model static
Feb 10, 2026
642b367
Merge branch 'main' into create-pf-lable-group
saraDahanCode Feb 10, 2026
c90b4ff
chore(label-group): separate add-label from label-group
Feb 25, 2026
98002b3
fix(label-group): address review feedback on pf-label-group
bennypowers Mar 27, 2026
fea628a
Merge branch 'main' into create-pf-lable-group
bennypowers Mar 27, 2026
728389f
fix(label-group): guard querySelectorAll for SSR
bennypowers Mar 27, 2026
e465aa7
fix(label-group): add ssr:label event for child discovery
bennypowers Mar 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions .changeset/yummy-eagles-itch.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
---
"@patternfly/elements": minor
---

Added `<pf-label-group>`.

A **label group** is a collection of labels that can be grouped by category
and used to represent one or more values assigned to a single attribute.
When the number of labels exceeds the configured limit, additional labels
are hidden under an overflow indicator.

```html
<pf-label-group>
<span slot="category">Filters</span>
<pf-label removable>Security</pf-label>
<pf-label removable>Performance</pf-label>
<pf-label removable>Networking</pf-label>
</pf-label-group>
```
1 change: 1 addition & 0 deletions elements/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
"./pf-jump-links/pf-jump-links-item.js": "./pf-jump-links/pf-jump-links-item.js",
"./pf-jump-links/pf-jump-links-list.js": "./pf-jump-links/pf-jump-links-list.js",
"./pf-jump-links/pf-jump-links.js": "./pf-jump-links/pf-jump-links.js",
"./pf-label-group/pf-label-group.js": "./pf-label-group/pf-label-group.js",
"./pf-label/pf-label.js": "./pf-label/pf-label.js",
"./pf-select/pf-select.js": "./pf-select/pf-select.js",
"./pf-select/pf-listbox.js": "./pf-select/pf-listbox.js",
Expand Down
46 changes: 46 additions & 0 deletions elements/pf-label-group/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# Label Group
A label group is a collection of labels that can be grouped by category and
used to represent one or more values assigned to a single attribute. When
the number of labels exceeds the configured limit, additional labels are
hidden under an overflow indicator.

Read more about Label Group in the [PatternFly Elements Label Group documentation](https://patternflyelements.org/components/label-group)

## Installation

Load `<pf-label-group>` via CDN:

```html
<script src="https://jspm.dev/@patternfly/elements/pf-label-group/pf-label-group.js"></script>
```

Or, if you are using [NPM](https://npm.im), install it

```bash
npm install @patternfly/elements
```

Then once installed, import it to your application:

```js
import '@patternfly/elements/pf-label-group/pf-label-group.js';
```

## Usage

```html
<pf-label-group>
<pf-label color="blue">Security</pf-label>
<pf-label color="green">Performance</pf-label>
<pf-label color="red">Networking</pf-label>
</pf-label-group>
```

With a category:
```html
<pf-label-group>
<span slot="category">Filters</span>
<pf-label removable>Security</pf-label>
<pf-label removable>Performance</pf-label>
</pf-label-group>
```
9 changes: 9 additions & 0 deletions elements/pf-label-group/demo/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<pf-label-group>
<pf-label color="blue">Blue</pf-label>
<pf-label color="green">Green</pf-label>
<pf-label color="orange">Orange</pf-label>
</pf-label-group>

<script type="module">
import '@patternfly/elements/pf-label-group/pf-label-group.js';
</script>
10 changes: 10 additions & 0 deletions elements/pf-label-group/demo/label-group-closeable.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<pf-label-group closeable>
<span slot="category">Filters</span>
<pf-label color="blue" removable>Security</pf-label>
<pf-label color="green" removable>Performance</pf-label>
<pf-label color="red" removable>Networking</pf-label>
</pf-label-group>

<script type="module">
import '@patternfly/elements/pf-label-group/pf-label-group.js';
</script>
10 changes: 10 additions & 0 deletions elements/pf-label-group/demo/label-group-vertical.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<pf-label-group orientation="vertical">
<span slot="category">Group</span>
<pf-label color="red" icon="info-circle" removable>Label 1</pf-label>
<pf-label color="green" icon="info-circle" removable>Label 2</pf-label>
<pf-label color="blue" icon="info-circle" removable>Label 3</pf-label>
</pf-label-group>

<script type="module">
import '@patternfly/elements/pf-label-group/pf-label-group.js';
</script>
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<pf-label-group>
<span slot="category">Label group with a very long category name</span>
<pf-label color="red" icon="info-circle">Label 1</pf-label>
<pf-label color="blue" icon="info-circle">Label 2</pf-label>
<pf-label color="green" icon="info-circle">Label 3</pf-label>
</pf-label-group>

<script type="module">
import '@patternfly/elements/pf-label-group/pf-label-group.js';
</script>
13 changes: 13 additions & 0 deletions elements/pf-label-group/demo/label-group-with-overflow-labels.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<pf-label-group num-labels="3">
<span slot="category">Tags</span>
<pf-label color="orange" icon="info-circle" removable>Label 1</pf-label>
<pf-label color="purple" icon="info-circle" removable>Label 2</pf-label>
<pf-label color="blue" icon="info-circle" removable>Label 3</pf-label>
<pf-label color="red" icon="info-circle" removable>Label 4</pf-label>
<pf-label color="cyan" icon="info-circle" removable>Label 5</pf-label>
<pf-label color="green" icon="info-circle" removable>Label 6</pf-label>
</pf-label-group>

<script type="module">
import '@patternfly/elements/pf-label-group/pf-label-group.js';
</script>
17 changes: 17 additions & 0 deletions elements/pf-label-group/docs/pf-label-group.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{% renderOverview %}
<pf-label-group></pf-label-group>
{% endrenderOverview %}

{% band header="Usage" %}{% endband %}

{% renderSlots %}{% endrenderSlots %}

{% renderAttributes %}{% endrenderAttributes %}

{% renderMethods %}{% endrenderMethods %}

{% renderEvents %}{% endrenderEvents %}

{% renderCssCustomProperties %}{% endrenderCssCustomProperties %}

{% renderCssParts %}{% endrenderCssParts %}
100 changes: 100 additions & 0 deletions elements/pf-label-group/pf-label-group.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
:host {
--pf-c-label-group__list--MarginBottom: calc(var(--pf-global--spacer--xs, 0.25rem) * -1);
--pf-c-label-group__list--MarginRight: calc(var(--pf-global--spacer--xs, 0.25rem) * -1);
--pf-c-label-group--m-category--PaddingTop: var(--pf-global--spacer--xs, 0.25rem);
--pf-c-label-group--m-category--PaddingRight: var(--pf-global--spacer--xs, 0.25rem);
--pf-c-label-group--m-category--PaddingBottom: var(--pf-global--spacer--xs, 0.25rem);
--pf-c-label-group--m-category--PaddingLeft: var(--pf-global--spacer--sm, 0.5rem);
--pf-c-label-group--m-category--BorderRadius: var(--pf-global--BorderRadius--sm, 3px);
--pf-c-label-group--m-category--BackgroundColor: var(--pf-global--BackgroundColor--200, #f0f0f0);
--pf-c-label-group__label--MarginRight: var(--pf-global--spacer--sm, 0.5rem);
--pf-c-label-group__label--FontSize: var(--pf-global--FontSize--sm, 0.875rem);
--pf-c-label-group__label--MaxWidth: 18ch;
--pf-c-label-group__close--MarginTop: calc(var(--pf-global--spacer--xs, 0.25rem) * -1);
--pf-c-label-group__close--MarginBottom: calc(var(--pf-global--spacer--xs, 0.25rem) * -1);
--pf-c-label-group__list-item--MarginRight: var(--pf-global--spacer--xs, 0.25rem);
--pf-c-label-group__list-item--MarginBottom: var(--pf-global--spacer--xs, 0.25rem);
display: inline-flex;
flex-wrap: wrap;
align-items: center;
min-width: 0;
max-width: 100%;
color: var(--pf-global--Color--100, #151515);
}

[hidden],
.empty,
::slotted([hidden]),
::slotted([overflow-hidden]) {
display: none !important;
}

#outer {
display: inline-flex;
flex: 1;
flex-wrap: wrap;
align-items: center;
min-width: 0;
column-gap: var(--pf-global--spacer--xs, 0.25rem);
border-radius: var(--pf-global--BorderRadius--sm, 3px);
padding: 0 !important;
}

#outer.has-category {
padding:
var(--pf-c-label-group--m-category--PaddingTop)
var(--pf-c-label-group--m-category--PaddingRight)
var(--pf-c-label-group--m-category--PaddingBottom)
var(--pf-c-label-group--m-category--PaddingLeft) !important;
background-color: var(--pf-c-label-group--m-category--BackgroundColor);
}

#labels {
margin-inline-end: var(--pf-c-label-group__list--MarginRight);
margin-block-end: var(--pf-c-label-group__list--MarginBottom);
font-family: var(--pf-global--FontFamily--sans-serif, "RedHatTextUpdated", "Overpass", overpass, helvetica, arial, sans-serif);
font-size: var(--pf-global--FontSize--sm, 14px);
font-weight: var(--pf-global--FontWeight--normal, 400);
line-height: 1.6;
}

#labels ::slotted(pf-label) {
display: inline-flex;
min-width: 0;
margin-inline-end: var(--pf-c-label-group__list-item--MarginRight);
margin-block-end: var(--pf-c-label-group__list-item--MarginBottom);
}

::slotted([slot="category"]) {
display: inline-block;
max-inline-size: var(--pf-c-label-group__label--MaxWidth);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
vertical-align: middle;
margin-inline-end: var(--pf-c-label-group__label--MarginRight);
font-size: var(--pf-c-label-group__label--FontSize);
}

:host([orientation="vertical"]) #outer {
flex-direction: column;
align-items: flex-start;
}

#close-button {
--pf-icon--size: 16px;
margin-block: var(--pf-c-label-group__close--MarginTop) var(--pf-c-label-group__close--MarginBottom);
inset-block-start: 0.125em;
}

.visually-hidden {
border: 0;
clip: rect(0, 0, 0, 0);
block-size: 1px;
margin: -1px;
overflow: hidden;
padding: 0;
position: absolute;
white-space: nowrap;
inline-size: 1px;
}
Loading
Loading