@carbon/ibm-products-web-components 0.48.0 → 0.49.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. package/custom-elements.json +55 -17
  2. package/es/components/page-header/_story-assets/overflowHandler.d.ts.map +1 -1
  3. package/es/components/page-header/_story-assets/overflowHandler.js +1 -1
  4. package/es/components/page-header/_story-assets/overflowHandler.js.map +1 -1
  5. package/es/components/page-header/context.d.ts +3 -0
  6. package/es/components/page-header/context.d.ts.map +1 -1
  7. package/es/components/page-header/context.js +4 -1
  8. package/es/components/page-header/context.js.map +1 -1
  9. package/es/components/page-header/page-header-actions-set/page-header-actions-set.d.ts +4 -0
  10. package/es/components/page-header/page-header-actions-set/page-header-actions-set.d.ts.map +1 -1
  11. package/es/components/page-header/page-header-actions-set/page-header-actions-set.js +22 -13
  12. package/es/components/page-header/page-header-actions-set/page-header-actions-set.js.map +1 -1
  13. package/es/components/page-header/page-header-breadcrumb.d.ts +1 -1
  14. package/es/components/page-header/page-header-breadcrumb.d.ts.map +1 -1
  15. package/es/components/page-header/page-header-breadcrumb.js +4 -2
  16. package/es/components/page-header/page-header-breadcrumb.js.map +1 -1
  17. package/es/components/page-header/page-header-breadcrumbs-set/page-header-breadcrumbs-set.d.ts +11 -2
  18. package/es/components/page-header/page-header-breadcrumbs-set/page-header-breadcrumbs-set.d.ts.map +1 -1
  19. package/es/components/page-header/page-header-breadcrumbs-set/page-header-breadcrumbs-set.js +37 -21
  20. package/es/components/page-header/page-header-breadcrumbs-set/page-header-breadcrumbs-set.js.map +1 -1
  21. package/es/components/page-header/page-header-content-text.d.ts +8 -0
  22. package/es/components/page-header/page-header-content-text.d.ts.map +1 -1
  23. package/es/components/page-header/page-header-content-text.js +21 -5
  24. package/es/components/page-header/page-header-content-text.js.map +1 -1
  25. package/es/components/page-header/page-header-content.d.ts +13 -0
  26. package/es/components/page-header/page-header-content.d.ts.map +1 -1
  27. package/es/components/page-header/page-header-content.js +37 -14
  28. package/es/components/page-header/page-header-content.js.map +1 -1
  29. package/es/components/page-header/page-header-hero-image.d.ts +3 -0
  30. package/es/components/page-header/page-header-hero-image.d.ts.map +1 -1
  31. package/es/components/page-header/page-header-hero-image.js +3 -0
  32. package/es/components/page-header/page-header-hero-image.js.map +1 -1
  33. package/es/components/page-header/page-header-scroller.d.ts +1 -0
  34. package/es/components/page-header/page-header-scroller.d.ts.map +1 -1
  35. package/es/components/page-header/page-header-scroller.js +7 -3
  36. package/es/components/page-header/page-header-scroller.js.map +1 -1
  37. package/es/components/page-header/page-header-tabs.d.ts +1 -0
  38. package/es/components/page-header/page-header-tabs.d.ts.map +1 -1
  39. package/es/components/page-header/page-header-tabs.js +24 -10
  40. package/es/components/page-header/page-header-tabs.js.map +1 -1
  41. package/es/components/page-header/page-header-tags-set/page-header-tags-set.d.ts +2 -1
  42. package/es/components/page-header/page-header-tags-set/page-header-tags-set.d.ts.map +1 -1
  43. package/es/components/page-header/page-header-tags-set/page-header-tags-set.js +38 -17
  44. package/es/components/page-header/page-header-tags-set/page-header-tags-set.js.map +1 -1
  45. package/es/components/page-header/page-header-tags-set/page-header-tags-set.scss.js +1 -1
  46. package/es/components/page-header/page-header-tags-set/page-header-tags-set.scss.js.map +1 -1
  47. package/es/components/page-header/page-header-tags-set/utils.d.ts +0 -8
  48. package/es/components/page-header/page-header-tags-set/utils.d.ts.map +1 -1
  49. package/es/components/page-header/page-header-tags-set/utils.js +0 -34
  50. package/es/components/page-header/page-header-title-breadcrumb.d.ts.map +1 -1
  51. package/es/components/page-header/page-header-title-breadcrumb.js +8 -5
  52. package/es/components/page-header/page-header-title-breadcrumb.js.map +1 -1
  53. package/es/components/page-header/page-header.d.ts +15 -0
  54. package/es/components/page-header/page-header.d.ts.map +1 -1
  55. package/es/components/page-header/page-header.js +80 -34
  56. package/es/components/page-header/page-header.js.map +1 -1
  57. package/es/components/page-header/page-header.scss.js +1 -1
  58. package/es/components/page-header/page-header.scss.js.map +1 -1
  59. package/es/components/tearsheet/tearsheet.scss.js +1 -1
  60. package/es/components/tearsheet-preview/tearsheet-header-content.scss.js +1 -1
  61. package/es/components/tearsheet-preview/tearsheet-header-content.scss.js.map +1 -1
  62. package/es/components/tearsheet-preview/tearsheet-header.scss.js +1 -1
  63. package/es/components/tearsheet-preview/tearsheet-header.scss.js.map +1 -1
  64. package/es/components/tearsheet-preview/tearsheet-navigation-bar.scss.js +1 -1
  65. package/es/components/tearsheet-preview/tearsheet.scss.js +1 -1
  66. package/es/components/tearsheet-preview/tearsheet.scss.js.map +1 -1
  67. package/es/ibm-products-web-components/package.js +1 -1
  68. package/es-custom/components/page-header/_story-assets/overflowHandler.js +1 -1
  69. package/es-custom/components/page-header/_story-assets/overflowHandler.js.map +1 -1
  70. package/es-custom/components/page-header/context.js +4 -1
  71. package/es-custom/components/page-header/context.js.map +1 -1
  72. package/es-custom/components/page-header/page-header-actions-set/page-header-actions-set.js +22 -13
  73. package/es-custom/components/page-header/page-header-actions-set/page-header-actions-set.js.map +1 -1
  74. package/es-custom/components/page-header/page-header-breadcrumb.js +4 -2
  75. package/es-custom/components/page-header/page-header-breadcrumb.js.map +1 -1
  76. package/es-custom/components/page-header/page-header-breadcrumbs-set/page-header-breadcrumbs-set.js +37 -21
  77. package/es-custom/components/page-header/page-header-breadcrumbs-set/page-header-breadcrumbs-set.js.map +1 -1
  78. package/es-custom/components/page-header/page-header-content-text.js +21 -5
  79. package/es-custom/components/page-header/page-header-content-text.js.map +1 -1
  80. package/es-custom/components/page-header/page-header-content.js +37 -14
  81. package/es-custom/components/page-header/page-header-content.js.map +1 -1
  82. package/es-custom/components/page-header/page-header-hero-image.js +3 -0
  83. package/es-custom/components/page-header/page-header-hero-image.js.map +1 -1
  84. package/es-custom/components/page-header/page-header-scroller.js +7 -3
  85. package/es-custom/components/page-header/page-header-scroller.js.map +1 -1
  86. package/es-custom/components/page-header/page-header-tabs.js +24 -10
  87. package/es-custom/components/page-header/page-header-tabs.js.map +1 -1
  88. package/es-custom/components/page-header/page-header-tags-set/page-header-tags-set.js +38 -17
  89. package/es-custom/components/page-header/page-header-tags-set/page-header-tags-set.js.map +1 -1
  90. package/es-custom/components/page-header/page-header-tags-set/page-header-tags-set.scss.js +1 -1
  91. package/es-custom/components/page-header/page-header-tags-set/page-header-tags-set.scss.js.map +1 -1
  92. package/es-custom/components/page-header/page-header-tags-set/utils.js +0 -34
  93. package/es-custom/components/page-header/page-header-title-breadcrumb.js +8 -5
  94. package/es-custom/components/page-header/page-header-title-breadcrumb.js.map +1 -1
  95. package/es-custom/components/page-header/page-header.js +80 -34
  96. package/es-custom/components/page-header/page-header.js.map +1 -1
  97. package/es-custom/components/page-header/page-header.scss.js +1 -1
  98. package/es-custom/components/page-header/page-header.scss.js.map +1 -1
  99. package/es-custom/components/tearsheet/tearsheet.scss.js +1 -1
  100. package/es-custom/components/tearsheet-preview/tearsheet-header-content.scss.js +1 -1
  101. package/es-custom/components/tearsheet-preview/tearsheet-header-content.scss.js.map +1 -1
  102. package/es-custom/components/tearsheet-preview/tearsheet-header.scss.js +1 -1
  103. package/es-custom/components/tearsheet-preview/tearsheet-header.scss.js.map +1 -1
  104. package/es-custom/components/tearsheet-preview/tearsheet-navigation-bar.scss.js +1 -1
  105. package/es-custom/components/tearsheet-preview/tearsheet.scss.js +1 -1
  106. package/es-custom/components/tearsheet-preview/tearsheet.scss.js.map +1 -1
  107. package/es-custom/ibm-products-web-components/package.js +1 -1
  108. package/lib/components/page-header/_story-assets/overflowHandler.d.ts.map +1 -1
  109. package/lib/components/page-header/context.d.ts +3 -0
  110. package/lib/components/page-header/context.d.ts.map +1 -1
  111. package/lib/components/page-header/page-header-actions-set/page-header-actions-set.d.ts +4 -0
  112. package/lib/components/page-header/page-header-actions-set/page-header-actions-set.d.ts.map +1 -1
  113. package/lib/components/page-header/page-header-breadcrumb.d.ts +1 -1
  114. package/lib/components/page-header/page-header-breadcrumb.d.ts.map +1 -1
  115. package/lib/components/page-header/page-header-breadcrumbs-set/page-header-breadcrumbs-set.d.ts +11 -2
  116. package/lib/components/page-header/page-header-breadcrumbs-set/page-header-breadcrumbs-set.d.ts.map +1 -1
  117. package/lib/components/page-header/page-header-content-text.d.ts +8 -0
  118. package/lib/components/page-header/page-header-content-text.d.ts.map +1 -1
  119. package/lib/components/page-header/page-header-content.d.ts +13 -0
  120. package/lib/components/page-header/page-header-content.d.ts.map +1 -1
  121. package/lib/components/page-header/page-header-hero-image.d.ts +3 -0
  122. package/lib/components/page-header/page-header-hero-image.d.ts.map +1 -1
  123. package/lib/components/page-header/page-header-scroller.d.ts +1 -0
  124. package/lib/components/page-header/page-header-scroller.d.ts.map +1 -1
  125. package/lib/components/page-header/page-header-tabs.d.ts +1 -0
  126. package/lib/components/page-header/page-header-tabs.d.ts.map +1 -1
  127. package/lib/components/page-header/page-header-tags-set/page-header-tags-set.d.ts +2 -1
  128. package/lib/components/page-header/page-header-tags-set/page-header-tags-set.d.ts.map +1 -1
  129. package/lib/components/page-header/page-header-tags-set/utils.d.ts +0 -8
  130. package/lib/components/page-header/page-header-tags-set/utils.d.ts.map +1 -1
  131. package/lib/components/page-header/page-header-title-breadcrumb.d.ts.map +1 -1
  132. package/lib/components/page-header/page-header.d.ts +15 -0
  133. package/lib/components/page-header/page-header.d.ts.map +1 -1
  134. package/package.json +4 -4
  135. package/scss/components/page-header/page-header-tags-set/page-header-tags-set.scss +16 -4
  136. package/scss/components/page-header/page-header.scss +31 -17
  137. package/scss/components/tearsheet-preview/tearsheet-header-content.scss +32 -6
  138. package/scss/components/tearsheet-preview/tearsheet-header.scss +4 -0
  139. package/scss/components/tearsheet-preview/tearsheet.scss +20 -1
  140. package/telemetry.yml +4 -1
  141. package/es/components/page-header/page-header-tags-set/utils.js.map +0 -1
  142. package/es-custom/components/page-header/page-header-tags-set/utils.js.map +0 -1
@@ -10,9 +10,9 @@ import { __decorate } from "../../../_virtual/_@oxc-project_runtime@0.127.0/help
10
10
  import page_header_tags_set_default$1 from "./page-header-tags-set.scss.js";
11
11
  import { LitElement, html, nothing } from "lit";
12
12
  import { property, query, state } from "lit/decorators.js";
13
+ import '@carbon/web-components/es-custom/components/button/index.js';
13
14
  import { carbonElement } from "@carbon/web-components/es/globals/decorators/carbon-element.js";
14
15
  import '@carbon/web-components/es-custom/components/modal/index.js';
15
- import '@carbon/web-components/es-custom/components/link/index.js';
16
16
  import '@carbon/web-components/es-custom/components/search/index.js';
17
17
  import '@carbon/web-components/es-custom/components/tag/index.js';
18
18
  import { createOverflowHandler } from "@carbon/utilities";
@@ -40,10 +40,15 @@ let CDSPageHeaderTagsSet = class CDSPageHeaderTagsSet extends LitElement {
40
40
  this.handleDismiss = (e, tag) => {
41
41
  e.stopPropagation();
42
42
  e.preventDefault();
43
- this.tagsData = this.tagsData.filter((t) => t.text !== tag.text);
43
+ const dismissedIndex = this.tagsData.findIndex((t) => t === tag);
44
+ this.tagsData = this.tagsData.filter((t) => t !== tag);
44
45
  this.shadowRoot?.querySelectorAll("[data-hidden]:not([data-offset])").forEach((el) => el.removeAttribute("data-hidden"));
45
- const remaining = this.hiddenTags.filter((t) => t.text !== tag.text);
46
- if (this.hiddenTags.length === 2 && remaining[0]) this.shadowRoot?.querySelector(`#${remaining[0].text}`)?.removeAttribute("data-hidden");
46
+ const remaining = this.hiddenTags.filter((t) => t !== tag);
47
+ if (this.hiddenTags.length === 2 && remaining[0]) {
48
+ const originalIndex = this.tagsData.findIndex((t) => t === remaining[0]);
49
+ const adjustedIndex = originalIndex >= 0 ? originalIndex : dismissedIndex > 0 ? dismissedIndex - 1 : 0;
50
+ this.shadowRoot?.querySelector(`#${this._tagId(adjustedIndex)}`)?.removeAttribute("data-hidden");
51
+ }
47
52
  };
48
53
  }
49
54
  connectedCallback() {
@@ -94,14 +99,17 @@ let CDSPageHeaderTagsSet = class CDSPageHeaderTagsSet extends LitElement {
94
99
  handleTogglePopover(event) {
95
100
  if (event instanceof PointerEvent || event instanceof KeyboardEvent && [" ", "Enter"].includes(event.key)) this.isPopoverOpen = !this.isPopoverOpen;
96
101
  }
102
+ _tagId(index) {
103
+ return `c4p--page-header-tag-${index}`;
104
+ }
97
105
  render() {
98
106
  return html` <div class=${blockClass}>
99
- ${this.tagsData.map((tag) => html`
100
- <span id=${tag?.text}>
107
+ ${this.tagsData.map((tag, index) => html`
108
+ <span id=${this._tagId(index)}>
101
109
  ${tag?.onClose ? html`<cds-custom-dismissible-tag
102
110
  @cds-custom-dismissible-tag-beingclosed=${(e) => this.handleDismiss(e, tag)}
103
111
  text=${tag?.text}
104
- tag-title="Provide a custom title to the tag"
112
+ tag-title=${tag?.text}
105
113
  type=${tag.type}
106
114
  size=${tag.size}
107
115
  ></cds-custom-dismissible-tag>` : html`<cds-custom-tag type=${tag.type} size=${tag.size}
@@ -110,6 +118,14 @@ let CDSPageHeaderTagsSet = class CDSPageHeaderTagsSet extends LitElement {
110
118
  </span>
111
119
  `)}
112
120
  <span data-offset ?data-hidden=${this.hiddenTags.length === 0}>
121
+ <span
122
+ role="status"
123
+ aria-live="polite"
124
+ aria-atomic="true"
125
+ class="${blockClass}__hidden-count-announcement"
126
+ >
127
+ ${this.hiddenTags.length > 0 ? `${this.hiddenTags.length} more tags` : ""}
128
+ </span>
113
129
  <cds-custom-popover
114
130
  ?open=${this.isPopoverOpen}
115
131
  ?highContrast=${true}
@@ -119,6 +135,9 @@ let CDSPageHeaderTagsSet = class CDSPageHeaderTagsSet extends LitElement {
119
135
  size=${this.tagsData[0]?.size}
120
136
  title="+${this.hiddenTags.length}"
121
137
  text="+${this.hiddenTags.length}"
138
+ aria-label="${this.hiddenTags.length} more tags"
139
+ aria-expanded=${this.isPopoverOpen ? "true" : "false"}
140
+ aria-haspopup="true"
122
141
  @click=${this.handleTogglePopover}
123
142
  @keydown=${this.handleTogglePopover}
124
143
  ></cds-custom-operational-tag>
@@ -129,24 +148,26 @@ let CDSPageHeaderTagsSet = class CDSPageHeaderTagsSet extends LitElement {
129
148
  <cds-custom-dismissible-tag
130
149
  @cds-custom-dismissible-tag-beingclosed=${(e) => this.handleDismiss(e, tag)}
131
150
  text=${tag?.text}
132
- tag-title="Provide a custom title to the tag"
151
+ tag-title=${tag?.text}
133
152
  type=${tag.type}
134
153
  size=${tag.size}
135
154
  ></cds-custom-dismissible-tag>
136
155
  </div>
137
- ` : html`<p class="${blockClass}__popover-tag">
138
- ${tag?.text}
139
- </p>`) : nothing}
156
+ ` : html`<cds-custom-tag
157
+ class="${blockClass}__popover-tag"
158
+ type=${tag.type}
159
+ size=${tag.size}
160
+ >${tag?.text}</cds-custom-tag
161
+ >`) : nothing}
140
162
  ${this.hiddenTags.length > 10 ? html`
141
- <cds-custom-link
163
+ <cds-custom-button
142
164
  class="${blockClass}__view-all"
165
+ kind="ghost"
166
+ size="sm"
143
167
  @click=${() => this.modalOpen = true}
144
- @keydown=${(e) => {
145
- if (e.key === " ") this.modalOpen = true;
146
- }}
147
168
  >
148
169
  View all tags
149
- </cds-custom-link>
170
+ </cds-custom-button>
150
171
  ` : nothing}
151
172
  </div>
152
173
  </cds-custom-popover-content>
@@ -177,7 +198,7 @@ let CDSPageHeaderTagsSet = class CDSPageHeaderTagsSet extends LitElement {
177
198
  ${this.tagsData.filter((tag) => tag.text && new RegExp(this.searchString, "i").test(tag.text)).map((tag) => tag.onClose ? html`<cds-custom-dismissible-tag
178
199
  @cds-custom-dismissible-tag-beingclosed=${(e) => this.handleDismiss(e, tag)}
179
200
  text=${tag?.text}
180
- tag-title="Provide a custom title to the tag"
201
+ tag-title=${tag?.text}
181
202
  type=${tag.type}
182
203
  size=${tag.size}
183
204
  ></cds-custom-dismissible-tag>` : html`<cds-custom-tag type=${tag.type} size=${tag.size}
@@ -1 +1 @@
1
- {"version":3,"file":"page-header-tags-set.js","names":["styles","customElement"],"sources":["../../../../src/components/page-header/page-header-tags-set/page-header-tags-set.ts"],"sourcesContent":["/**\n * @license\n *\n * Copyright IBM Corp. 2025, 2026\n *\n * This source code is licensed under the Apache-2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { LitElement, html, nothing } from 'lit';\nimport { property, query, state } from 'lit/decorators.js';\nimport { carbonElement as customElement } from '@carbon/web-components/es/globals/decorators/carbon-element.js';\nimport '@carbon/web-components/es-custom/components/tag/index.js';\nimport '@carbon/web-components/es-custom/components/link/index.js';\nimport '@carbon/web-components/es-custom/components/modal/index.js';\nimport '@carbon/web-components/es-custom/components/search/index.js';\nimport { createOverflowHandler } from '@carbon/utilities';\nimport { TagType } from './utils';\nimport styles from './page-header-tags-set.scss?lit';\nimport { prefix } from '../../../globals/settings';\n\nconst blockClass = `${prefix}--page-header-tags-set`;\n\n@customElement(`${prefix}-page-header-tags-set`)\nexport default class CDSPageHeaderTagsSet extends LitElement {\n @state()\n hiddenTags: TagType[] = [];\n\n @property({ type: Array, attribute: 'tags-data', reflect: true })\n tagsData: TagType[] = [];\n\n @query(`.${blockClass}`)\n private container!: HTMLElement;\n\n @query('[data-offset]')\n private offset!: HTMLElement;\n\n @state()\n private isPopoverOpen = false;\n\n @state()\n private modalOpen = false;\n\n @state()\n private searchString = '';\n\n private overflowHandler: { disconnect: () => void } | undefined;\n private resizeObserver: ResizeObserver | undefined; // only for observing width changes of offset\n\n connectedCallback(): void {\n super.connectedCallback();\n this.style.visibility = 'hidden';\n }\n\n firstUpdated() {\n // setup overflow handler by observing offset by default\n // dynamic changes in offset sizes re-initializes the handler to account for the new offset size\n this.resizeObserver = new ResizeObserver(() => {\n this.setupOverflowHandler();\n });\n this.resizeObserver.observe(this.offset);\n\n // On first render, all elements are initially visible. so hiding `this` visibility in connectedCallback\n // The handler runs on the second render to hide specific elements as needed.\n // The following line restores visibility after layout settles, allowing for smoother transitions.\n setTimeout(() => {\n this.style.visibility = 'visible';\n });\n\n document.addEventListener('click', this.handleDocumentClick);\n }\n\n updated(changedProperties: Map<string, unknown>) {\n // setup overflow handler whenever tags data changes to account for the new item sizes\n if (changedProperties.has('tagsData')) {\n const previousIsPopoverOpen = this.isPopoverOpen;\n this.updateComplete.then(() => {\n this.hiddenTags = [];\n this.isPopoverOpen = previousIsPopoverOpen;\n this.setupOverflowHandler();\n });\n }\n\n if (!this.hiddenTags.length) {\n const lastItem = this.shadowRoot?.querySelector(\n '[data-hidden]:not([data-offset])'\n );\n lastItem?.removeAttribute('data-hidden');\n }\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.overflowHandler?.disconnect();\n this.resizeObserver?.disconnect();\n document.removeEventListener('click', this.handleDocumentClick);\n }\n\n private setupOverflowHandler() {\n if (!this.container) {\n return;\n }\n\n // Disconnect existing handler if any\n this.overflowHandler?.disconnect();\n\n this.overflowHandler = createOverflowHandler({\n container: this.container,\n onChange: (_, hiddenItems: HTMLElement[]) => {\n const filteredChildren = Array.from(this.container.children).filter(\n (child) =>\n !child.hasAttribute('data-offset') &&\n !child.hasAttribute('data-fixed')\n );\n\n this.hiddenTags = hiddenItems.map((hiddenItem) => {\n const index = filteredChildren.indexOf(hiddenItem);\n return this.tagsData[index];\n });\n },\n });\n }\n\n private handleTogglePopover(event: Event) {\n if (\n event instanceof PointerEvent ||\n (event instanceof KeyboardEvent && [' ', 'Enter'].includes(event.key))\n ) {\n this.isPopoverOpen = !this.isPopoverOpen;\n }\n }\n\n private handleDocumentClick = (event: Event) => {\n if (event.target !== this) {\n this.isPopoverOpen = false;\n }\n };\n\n private handleDismiss = (e: CustomEvent, tag: TagType) => {\n e.stopPropagation();\n e.preventDefault();\n\n this.tagsData = this.tagsData.filter((t) => t.text !== tag.text);\n this.shadowRoot\n ?.querySelectorAll('[data-hidden]:not([data-offset])')\n .forEach((el) => el.removeAttribute('data-hidden'));\n\n const remaining = this.hiddenTags.filter((t) => t.text !== tag.text);\n if (this.hiddenTags.length === 2 && remaining[0]) {\n this.shadowRoot\n ?.querySelector(`#${remaining[0].text}`)\n ?.removeAttribute('data-hidden');\n }\n };\n\n render() {\n return html` <div class=${blockClass}>\n ${this.tagsData.map(\n (tag) => html`\n <span id=${tag?.text}>\n ${tag?.onClose\n ? html`<cds-custom-dismissible-tag\n @cds-custom-dismissible-tag-beingclosed=${(e: CustomEvent) =>\n this.handleDismiss(e, tag)}\n text=${tag?.text}\n tag-title=\"Provide a custom title to the tag\"\n type=${tag.type}\n size=${tag.size}\n ></cds-custom-dismissible-tag>`\n : html`<cds-custom-tag type=${tag.type} size=${tag.size}\n >${tag?.text}</cds-custom-tag\n >`}\n </span>\n `\n )}\n <span data-offset ?data-hidden=${this.hiddenTags.length === 0}>\n <cds-custom-popover\n ?open=${this.isPopoverOpen}\n ?highContrast=${true}\n align=${document.dir === 'rtl' ? 'bottom-left' : 'bottom-right'}\n >\n <cds-custom-operational-tag\n size=${this.tagsData[0]?.size}\n title=\"+${this.hiddenTags.length}\"\n text=\"+${this.hiddenTags.length}\"\n @click=${this.handleTogglePopover}\n @keydown=${this.handleTogglePopover}\n ></cds-custom-operational-tag>\n <cds-custom-popover-content>\n <div class=\"${`${blockClass}__popover-container`}\">\n ${this.hiddenTags.length > 0\n ? this.hiddenTags.slice(0, 10).map((tag) =>\n tag.onClose\n ? html`\n <div>\n <cds-custom-dismissible-tag\n @cds-custom-dismissible-tag-beingclosed=${(\n e: CustomEvent\n ) => this.handleDismiss(e, tag)}\n text=${tag?.text}\n tag-title=\"Provide a custom title to the tag\"\n type=${tag.type}\n size=${tag.size}\n ></cds-custom-dismissible-tag>\n </div>\n `\n : html`<p class=\"${blockClass}__popover-tag\">\n ${tag?.text}\n </p>`\n )\n : nothing}\n ${this.hiddenTags.length > 10\n ? html`\n <cds-custom-link\n class=\"${blockClass}__view-all\"\n @click=${() => (this.modalOpen = true)}\n @keydown=${(e: KeyboardEvent) => {\n if (e.key === ' ') {\n this.modalOpen = true;\n }\n }}\n >\n View all tags\n </cds-custom-link>\n `\n : nothing}\n </div>\n </cds-custom-popover-content>\n </cds-custom-popover>\n </span>\n </div>\n ${this.hiddenTags.length > 10\n ? html`<cds-custom-modal\n ?open=${this.modalOpen}\n size=\"sm\"\n @cds-custom-modal-closed=${(_: CustomEvent) => (this.modalOpen = false)}\n >\n <cds-custom-modal-header>\n <cds-custom-modal-close-button></cds-custom-modal-close-button>\n <cds-custom-modal-heading>All tags</cds-custom-modal-heading>\n <cds-custom-search\n size=\"lg\"\n close-button-label-text=\"Clear search input\"\n value=\"${this.searchString}\"\n class=\"${blockClass}__modal-tags-search\"\n label-text=\"Search\"\n placeholder=\"Search all tags\"\n type=\"text\"\n @cds-custom-search-input=${(e: CustomEvent) =>\n (this.searchString = e.detail.value)}\n ></cds-custom-search>\n </cds-custom-modal-header>\n <cds-custom-modal-body>\n <div class=\"${blockClass}__modal-tags-container\">\n ${this.tagsData\n .filter(\n (tag) =>\n tag.text &&\n new RegExp(this.searchString, 'i').test(tag.text)\n )\n .map((tag) =>\n tag.onClose\n ? html`<cds-custom-dismissible-tag\n @cds-custom-dismissible-tag-beingclosed=${(e: CustomEvent) =>\n this.handleDismiss(e, tag)}\n text=${tag?.text}\n tag-title=\"Provide a custom title to the tag\"\n type=${tag.type}\n size=${tag.size}\n ></cds-custom-dismissible-tag>`\n : html`<cds-custom-tag type=${tag.type} size=${tag.size}\n >${tag?.text}</cds-custom-tag\n >`\n )}\n </div>\n </cds-custom-modal-body>\n </cds-custom-modal>`\n : nothing}`;\n }\n\n static styles = styles;\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'c4p-page-header-tags-set': CDSPageHeaderTagsSet;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"page-header-tags-set.js","names":["styles","customElement"],"sources":["../../../../src/components/page-header/page-header-tags-set/page-header-tags-set.ts"],"sourcesContent":["/**\n * @license\n *\n * Copyright IBM Corp. 2025, 2026\n *\n * This source code is licensed under the Apache-2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { LitElement, html, nothing } from 'lit';\nimport { property, query, state } from 'lit/decorators.js';\nimport { carbonElement as customElement } from '@carbon/web-components/es/globals/decorators/carbon-element.js';\nimport '@carbon/web-components/es-custom/components/tag/index.js';\nimport '@carbon/web-components/es-custom/components/button/index.js';\nimport '@carbon/web-components/es-custom/components/modal/index.js';\nimport '@carbon/web-components/es-custom/components/search/index.js';\nimport { createOverflowHandler } from '@carbon/utilities';\nimport { TagType } from './utils';\nimport styles from './page-header-tags-set.scss?lit';\nimport { prefix } from '../../../globals/settings';\n\nconst blockClass = `${prefix}--page-header-tags-set`;\n\n@customElement(`${prefix}-page-header-tags-set`)\nexport default class CDSPageHeaderTagsSet extends LitElement {\n @state()\n hiddenTags: TagType[] = [];\n\n @property({ type: Array, attribute: 'tags-data', reflect: true })\n tagsData: TagType[] = [];\n\n @query(`.${blockClass}`)\n private container!: HTMLElement;\n\n @query('[data-offset]')\n private offset!: HTMLElement;\n\n @state()\n private isPopoverOpen = false;\n\n @state()\n private modalOpen = false;\n\n @state()\n private searchString = '';\n\n private overflowHandler: { disconnect: () => void } | undefined;\n private resizeObserver: ResizeObserver | undefined; // only for observing width changes of offset\n\n connectedCallback(): void {\n super.connectedCallback();\n this.style.visibility = 'hidden';\n }\n\n firstUpdated() {\n // setup overflow handler by observing offset by default\n // dynamic changes in offset sizes re-initializes the handler to account for the new offset size\n this.resizeObserver = new ResizeObserver(() => {\n this.setupOverflowHandler();\n });\n this.resizeObserver.observe(this.offset);\n\n // On first render, all elements are initially visible. so hiding `this` visibility in connectedCallback\n // The handler runs on the second render to hide specific elements as needed.\n // The following line restores visibility after layout settles, allowing for smoother transitions.\n setTimeout(() => {\n this.style.visibility = 'visible';\n });\n\n document.addEventListener('click', this.handleDocumentClick);\n }\n\n updated(changedProperties: Map<string, unknown>) {\n // setup overflow handler whenever tags data changes to account for the new item sizes\n if (changedProperties.has('tagsData')) {\n const previousIsPopoverOpen = this.isPopoverOpen;\n this.updateComplete.then(() => {\n this.hiddenTags = [];\n this.isPopoverOpen = previousIsPopoverOpen;\n this.setupOverflowHandler();\n });\n }\n\n if (!this.hiddenTags.length) {\n const lastItem = this.shadowRoot?.querySelector(\n '[data-hidden]:not([data-offset])'\n );\n lastItem?.removeAttribute('data-hidden');\n }\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.overflowHandler?.disconnect();\n this.resizeObserver?.disconnect();\n document.removeEventListener('click', this.handleDocumentClick);\n }\n\n private setupOverflowHandler() {\n if (!this.container) {\n return;\n }\n\n // Disconnect existing handler if any\n this.overflowHandler?.disconnect();\n\n this.overflowHandler = createOverflowHandler({\n container: this.container,\n onChange: (_, hiddenItems: HTMLElement[]) => {\n const filteredChildren = Array.from(this.container.children).filter(\n (child) =>\n !child.hasAttribute('data-offset') &&\n !child.hasAttribute('data-fixed')\n );\n\n this.hiddenTags = hiddenItems.map((hiddenItem) => {\n const index = filteredChildren.indexOf(hiddenItem);\n return this.tagsData[index];\n });\n },\n });\n }\n\n private handleTogglePopover(event: Event) {\n if (\n event instanceof PointerEvent ||\n (event instanceof KeyboardEvent && [' ', 'Enter'].includes(event.key))\n ) {\n this.isPopoverOpen = !this.isPopoverOpen;\n }\n }\n\n private handleDocumentClick = (event: Event) => {\n if (event.target !== this) {\n this.isPopoverOpen = false;\n }\n };\n\n private _tagId(index: number) {\n return `${prefix}--page-header-tag-${index}`;\n }\n\n private handleDismiss = (e: CustomEvent, tag: TagType) => {\n e.stopPropagation();\n e.preventDefault();\n\n const dismissedIndex = this.tagsData.findIndex((t) => t === tag);\n this.tagsData = this.tagsData.filter((t) => t !== tag);\n this.shadowRoot\n ?.querySelectorAll('[data-hidden]:not([data-offset])')\n .forEach((el) => el.removeAttribute('data-hidden'));\n\n const remaining = this.hiddenTags.filter((t) => t !== tag);\n if (this.hiddenTags.length === 2 && remaining[0]) {\n // Find the original index of the remaining tag before the dismissed item shifted indices\n const originalIndex = this.tagsData.findIndex((t) => t === remaining[0]);\n const adjustedIndex =\n originalIndex >= 0\n ? originalIndex\n : dismissedIndex > 0\n ? dismissedIndex - 1\n : 0;\n this.shadowRoot\n ?.querySelector(`#${this._tagId(adjustedIndex)}`)\n ?.removeAttribute('data-hidden');\n }\n };\n\n render() {\n return html` <div class=${blockClass}>\n ${this.tagsData.map(\n (tag, index) => html`\n <span id=${this._tagId(index)}>\n ${tag?.onClose\n ? html`<cds-custom-dismissible-tag\n @cds-custom-dismissible-tag-beingclosed=${(e: CustomEvent) =>\n this.handleDismiss(e, tag)}\n text=${tag?.text}\n tag-title=${tag?.text}\n type=${tag.type}\n size=${tag.size}\n ></cds-custom-dismissible-tag>`\n : html`<cds-custom-tag type=${tag.type} size=${tag.size}\n >${tag?.text}</cds-custom-tag\n >`}\n </span>\n `\n )}\n <span data-offset ?data-hidden=${this.hiddenTags.length === 0}>\n <span\n role=\"status\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n class=\"${blockClass}__hidden-count-announcement\"\n >\n ${this.hiddenTags.length > 0\n ? `${this.hiddenTags.length} more tags`\n : ''}\n </span>\n <cds-custom-popover\n ?open=${this.isPopoverOpen}\n ?highContrast=${true}\n align=${document.dir === 'rtl' ? 'bottom-left' : 'bottom-right'}\n >\n <cds-custom-operational-tag\n size=${this.tagsData[0]?.size}\n title=\"+${this.hiddenTags.length}\"\n text=\"+${this.hiddenTags.length}\"\n aria-label=\"${this.hiddenTags.length} more tags\"\n aria-expanded=${this.isPopoverOpen ? 'true' : 'false'}\n aria-haspopup=\"true\"\n @click=${this.handleTogglePopover}\n @keydown=${this.handleTogglePopover}\n ></cds-custom-operational-tag>\n <cds-custom-popover-content>\n <div class=\"${`${blockClass}__popover-container`}\">\n ${this.hiddenTags.length > 0\n ? this.hiddenTags.slice(0, 10).map((tag) =>\n tag.onClose\n ? html`\n <div>\n <cds-custom-dismissible-tag\n @cds-custom-dismissible-tag-beingclosed=${(\n e: CustomEvent\n ) => this.handleDismiss(e, tag)}\n text=${tag?.text}\n tag-title=${tag?.text}\n type=${tag.type}\n size=${tag.size}\n ></cds-custom-dismissible-tag>\n </div>\n `\n : html`<cds-custom-tag\n class=\"${blockClass}__popover-tag\"\n type=${tag.type}\n size=${tag.size}\n >${tag?.text}</cds-custom-tag\n >`\n )\n : nothing}\n ${this.hiddenTags.length > 10\n ? html`\n <cds-custom-button\n class=\"${blockClass}__view-all\"\n kind=\"ghost\"\n size=\"sm\"\n @click=${() => (this.modalOpen = true)}\n >\n View all tags\n </cds-custom-button>\n `\n : nothing}\n </div>\n </cds-custom-popover-content>\n </cds-custom-popover>\n </span>\n </div>\n ${this.hiddenTags.length > 10\n ? html`<cds-custom-modal\n ?open=${this.modalOpen}\n size=\"sm\"\n @cds-custom-modal-closed=${(_: CustomEvent) => (this.modalOpen = false)}\n >\n <cds-custom-modal-header>\n <cds-custom-modal-close-button></cds-custom-modal-close-button>\n <cds-custom-modal-heading>All tags</cds-custom-modal-heading>\n <cds-custom-search\n size=\"lg\"\n close-button-label-text=\"Clear search input\"\n value=\"${this.searchString}\"\n class=\"${blockClass}__modal-tags-search\"\n label-text=\"Search\"\n placeholder=\"Search all tags\"\n type=\"text\"\n @cds-custom-search-input=${(e: CustomEvent) =>\n (this.searchString = e.detail.value)}\n ></cds-custom-search>\n </cds-custom-modal-header>\n <cds-custom-modal-body>\n <div class=\"${blockClass}__modal-tags-container\">\n ${this.tagsData\n .filter(\n (tag) =>\n tag.text &&\n new RegExp(this.searchString, 'i').test(tag.text)\n )\n .map((tag) =>\n tag.onClose\n ? html`<cds-custom-dismissible-tag\n @cds-custom-dismissible-tag-beingclosed=${(e: CustomEvent) =>\n this.handleDismiss(e, tag)}\n text=${tag?.text}\n tag-title=${tag?.text}\n type=${tag.type}\n size=${tag.size}\n ></cds-custom-dismissible-tag>`\n : html`<cds-custom-tag type=${tag.type} size=${tag.size}\n >${tag?.text}</cds-custom-tag\n >`\n )}\n </div>\n </cds-custom-modal-body>\n </cds-custom-modal>`\n : nothing}`;\n }\n\n static styles = styles;\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'c4p-page-header-tags-set': CDSPageHeaderTagsSet;\n }\n}\n"],"mappings":"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"}