@carbon/ibm-products-web-components 0.39.0 → 0.40.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 (53) hide show
  1. package/custom-elements.json +52 -0
  2. package/es/components/interstitial-screen/interstitial-screen-body.scss.js +1 -1
  3. package/es/components/interstitial-screen/interstitial-screen-footer.scss.js +1 -1
  4. package/es/components/interstitial-screen/interstitial-screen-header.scss.js +1 -1
  5. package/es/components/interstitial-screen/interstitial-screen.scss.js +1 -1
  6. package/es/components/notification-panel/notification.js +1 -1
  7. package/es/components/options-tile/options-tile.d.ts +21 -0
  8. package/es/components/options-tile/options-tile.d.ts.map +1 -1
  9. package/es/components/options-tile/options-tile.js +91 -30
  10. package/es/components/options-tile/options-tile.js.map +1 -1
  11. package/es/components/options-tile/options-tile.scss.js +1 -1
  12. package/es/components/options-tile/options-tile.scss.js.map +1 -1
  13. package/es/components/page-header/page-header-actions-set/page-header-actions-set.d.ts.map +1 -1
  14. package/es/components/page-header/page-header-actions-set/page-header-actions-set.js +3 -2
  15. package/es/components/page-header/page-header-actions-set/page-header-actions-set.js.map +1 -1
  16. package/es/components/page-header/page-header-breadcrumbs-set/page-header-breadcrumbs-set.d.ts.map +1 -1
  17. package/es/components/page-header/page-header-breadcrumbs-set/page-header-breadcrumbs-set.js +3 -2
  18. package/es/components/page-header/page-header-breadcrumbs-set/page-header-breadcrumbs-set.js.map +1 -1
  19. package/es/components/page-header/page-header-scroller.js +1 -1
  20. package/es/components/page-header/page-header-tags-set/page-header-tags-set.d.ts.map +1 -1
  21. package/es/components/page-header/page-header-tags-set/page-header-tags-set.js +3 -2
  22. package/es/components/page-header/page-header-tags-set/page-header-tags-set.js.map +1 -1
  23. package/es/components/page-header/page-header.scss.js +1 -1
  24. package/es/components/page-header/page-header.scss.js.map +1 -1
  25. package/es/package.js +1 -1
  26. package/es-custom/components/interstitial-screen/interstitial-screen-body.scss.js +1 -1
  27. package/es-custom/components/interstitial-screen/interstitial-screen-footer.scss.js +1 -1
  28. package/es-custom/components/interstitial-screen/interstitial-screen-header.scss.js +1 -1
  29. package/es-custom/components/interstitial-screen/interstitial-screen.scss.js +1 -1
  30. package/es-custom/components/notification-panel/notification.js +1 -1
  31. package/es-custom/components/options-tile/options-tile.js +91 -30
  32. package/es-custom/components/options-tile/options-tile.js.map +1 -1
  33. package/es-custom/components/options-tile/options-tile.scss.js +1 -1
  34. package/es-custom/components/options-tile/options-tile.scss.js.map +1 -1
  35. package/es-custom/components/page-header/page-header-actions-set/page-header-actions-set.js +3 -2
  36. package/es-custom/components/page-header/page-header-actions-set/page-header-actions-set.js.map +1 -1
  37. package/es-custom/components/page-header/page-header-breadcrumbs-set/page-header-breadcrumbs-set.js +3 -2
  38. package/es-custom/components/page-header/page-header-breadcrumbs-set/page-header-breadcrumbs-set.js.map +1 -1
  39. package/es-custom/components/page-header/page-header-scroller.js +1 -1
  40. package/es-custom/components/page-header/page-header-tags-set/page-header-tags-set.js +3 -2
  41. package/es-custom/components/page-header/page-header-tags-set/page-header-tags-set.js.map +1 -1
  42. package/es-custom/components/page-header/page-header.scss.js +1 -1
  43. package/es-custom/components/page-header/page-header.scss.js.map +1 -1
  44. package/es-custom/package.js +1 -1
  45. package/lib/components/options-tile/options-tile.d.ts +21 -0
  46. package/lib/components/options-tile/options-tile.d.ts.map +1 -1
  47. package/lib/components/page-header/page-header-actions-set/page-header-actions-set.d.ts.map +1 -1
  48. package/lib/components/page-header/page-header-breadcrumbs-set/page-header-breadcrumbs-set.d.ts.map +1 -1
  49. package/lib/components/page-header/page-header-tags-set/page-header-tags-set.d.ts.map +1 -1
  50. package/package.json +13 -13
  51. package/scss/components/options-tile/options-tile.scss +43 -2
  52. package/scss/components/page-header/page-header.scss +3 -2
  53. package/telemetry.yml +4 -0
@@ -16,7 +16,9 @@ import HostListenerMixin from "@carbon/web-components/es/globals/mixins/host-lis
16
16
  import { carbonElement } from "@carbon/web-components/es/globals/decorators/carbon-element.js";
17
17
  import { iconLoader } from "@carbon/web-components/es/globals/internal/icon-loader.js";
18
18
  import "@carbon/web-components/es/components/layer/index.js";
19
- import ChevronDown20 from "@carbon/icons/es/chevron--down/20";
19
+ import ChevronDown16 from "@carbon/icons/es/chevron--down/16";
20
+ import WarningAltFilled16 from "@carbon/icons/es/warning--alt--filled/16";
21
+ import Locked16 from "@carbon/icons/es/locked/16";
20
22
  //#region src/components/options-tile/options-tile.ts
21
23
  /**
22
24
  * @license
@@ -43,8 +45,13 @@ let CDSOptionsTile = class CDSOptionsTile extends HostListenerMixin(LitElement)
43
45
  this.size = "lg";
44
46
  this.titleId = "";
45
47
  this.titleText = "";
48
+ this.locked = false;
49
+ this.lockedText = "";
50
+ this.warn = false;
51
+ this.warnText = "";
46
52
  this._open = false;
47
53
  this._hasToggle = false;
54
+ this._hasBody = false;
48
55
  }
49
56
  static get eventOpen() {
50
57
  return `${blockEvent}-open`;
@@ -56,6 +63,10 @@ let CDSOptionsTile = class CDSOptionsTile extends HostListenerMixin(LitElement)
56
63
  const toggleElements = e.target?.assignedElements();
57
64
  this._hasToggle = toggleElements && toggleElements.length > 0;
58
65
  }
66
+ _handleBodySlotChange(e) {
67
+ const bodyElements = e.target?.assignedElements();
68
+ this._hasBody = bodyElements && bodyElements.length > 0;
69
+ }
59
70
  _toggle(evt) {
60
71
  const { newState } = evt;
61
72
  this._open = newState === "open";
@@ -78,7 +89,7 @@ let CDSOptionsTile = class CDSOptionsTile extends HostListenerMixin(LitElement)
78
89
  this.dispatchEvent(new CustomEvent(this.constructor.eventClose, init));
79
90
  }
80
91
  render() {
81
- const { _open, _hasToggle, defaultOpen, size, titleId, titleText } = this;
92
+ const { _open, _hasToggle, _hasBody, defaultOpen, size, titleId, titleText, locked, lockedText, warn, warnText } = this;
82
93
  const classes = classMap({
83
94
  [`${blockClass}`]: true,
84
95
  [`${blockClass}--xl`]: size === "xl",
@@ -88,40 +99,73 @@ let CDSOptionsTile = class CDSOptionsTile extends HostListenerMixin(LitElement)
88
99
  [`${blockClass}__header`]: true,
89
100
  [`${blockClass}__header--has-toggle`]: _hasToggle
90
101
  });
91
- return html`
92
- <details
93
- @toggle=${this._toggle}
94
- class="${classes}"
95
- part="options-tile"
96
- open=${defaultOpen || nothing}
97
- >
98
- <summary class="${headerClasses}">
99
- <div class="${blockClass}__header-right">
100
- <slot
101
- name="toggle"
102
- @slotchange=${this._handleToggleSlotChange}
103
- ></slot>
104
- </div>
105
- <div class="${blockClass}__header-left">
106
- ${iconLoader(ChevronDown20, {
102
+ const summaryClasses = classMap({
103
+ [`${blockClass}__summary`]: true,
104
+ [`${blockClass}__summary--warn`]: !!warn,
105
+ [`${blockClass}__summary--locked`]: !!locked
106
+ });
107
+ const renderTitle = () => html`
108
+ <div class="${blockClass}__title-block">
109
+ <p class="${blockClass}__title" id="${titleId}">${titleText}</p>
110
+ <div class="${summaryClasses}">
111
+ ${locked && lockedText ? html`
112
+ ${iconLoader(Locked16, { class: `${blockClass}__summary-icon` })}
113
+ <span class="${blockClass}__summary-text">${lockedText}</span>
114
+ ` : warn && warnText ? html`
115
+ ${iconLoader(WarningAltFilled16, { class: `${blockClass}__summary-icon` })}
116
+ <span class="${blockClass}__summary-text">${warnText}</span>
117
+ ` : html`<slot name="summary"></slot>`}
118
+ </div>
119
+ </div>
120
+ `;
121
+ return _hasBody ? html`
122
+ <details
123
+ @toggle=${this._toggle}
124
+ class="${classes}"
125
+ part="options-tile"
126
+ open=${defaultOpen || nothing}
127
+ >
128
+ <summary class="${headerClasses}">
129
+ <div class="${blockClass}__header-right">
130
+ <slot
131
+ name="toggle"
132
+ @slotchange=${this._handleToggleSlotChange}
133
+ ></slot>
134
+ </div>
135
+ <div class="${blockClass}__header-left">
136
+ ${iconLoader(ChevronDown16, {
107
137
  slot: "icon",
108
138
  class: `${blockClass}__chevron`
109
139
  })}
110
- <div class="${blockClass}__title-block">
111
- <p class="${blockClass}__title" id="${titleId}">${titleText}</p>
112
- <div class="${blockClass}__summary">
113
- <slot name="summary"></slot>
140
+ ${renderTitle()}
114
141
  </div>
142
+ </summary>
143
+ <div class="${blockClass}__body">
144
+ <cds-layer level="1">
145
+ <slot
146
+ name="body"
147
+ @slotchange=${this._handleBodySlotChange}
148
+ ></slot>
149
+ </cds-layer>
150
+ </div>
151
+ </details>
152
+ ` : html`
153
+ <div class="${classes}">
154
+ <div class="${blockClass}__static-content">
155
+ <slot
156
+ name="toggle"
157
+ @slotchange=${this._handleToggleSlotChange}
158
+ style="display: none;"
159
+ ></slot>
160
+ <slot
161
+ name="body"
162
+ @slotchange=${this._handleBodySlotChange}
163
+ style="display: none;"
164
+ ></slot>
165
+ ${renderTitle()}
115
166
  </div>
116
167
  </div>
117
- </summary>
118
- <div class="${blockClass}__body">
119
- <cds-layer level="1">
120
- <slot name="body"></slot>
121
- </cds-layer>
122
- </div>
123
- </details>
124
- `;
168
+ `;
125
169
  }
126
170
  static {
127
171
  this.styles = options_tile_default$1;
@@ -143,8 +187,25 @@ __decorate([property({
143
187
  type: String,
144
188
  reflect: true
145
189
  })], CDSOptionsTile.prototype, "titleText", void 0);
190
+ __decorate([property({
191
+ type: Boolean,
192
+ reflect: true
193
+ })], CDSOptionsTile.prototype, "locked", void 0);
194
+ __decorate([property({
195
+ type: String,
196
+ reflect: true
197
+ })], CDSOptionsTile.prototype, "lockedText", void 0);
198
+ __decorate([property({
199
+ type: Boolean,
200
+ reflect: true
201
+ })], CDSOptionsTile.prototype, "warn", void 0);
202
+ __decorate([property({
203
+ type: String,
204
+ reflect: true
205
+ })], CDSOptionsTile.prototype, "warnText", void 0);
146
206
  __decorate([state()], CDSOptionsTile.prototype, "_open", void 0);
147
207
  __decorate([state()], CDSOptionsTile.prototype, "_hasToggle", void 0);
208
+ __decorate([state()], CDSOptionsTile.prototype, "_hasBody", void 0);
148
209
  CDSOptionsTile = __decorate([carbonElement(`c4p-options-tile`)], CDSOptionsTile);
149
210
  var options_tile_default = CDSOptionsTile;
150
211
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"options-tile.js","names":["styles","customElement"],"sources":["../../../src/components/options-tile/options-tile.ts"],"sourcesContent":["/**\n * @license\n *\n * Copyright IBM Corp. 2025\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, state } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { prefix } from '../../globals/settings';\nimport HostListenerMixin from '@carbon/web-components/es/globals/mixins/host-listener.js';\nimport styles from './options-tile.scss?lit';\nimport { carbonElement as customElement } from '@carbon/web-components/es/globals/decorators/carbon-element.js';\nimport ChevronDown20 from '@carbon/icons/es/chevron--down/20';\nimport { iconLoader } from '@carbon/web-components/es/globals/internal/icon-loader.js';\nimport '@carbon/web-components/es/components/button/index.js';\nimport '@carbon/web-components/es/components/layer/index.js';\n\nexport const blockClass = `${prefix}--options-tile`;\nconst blockEvent = `${prefix}-options-tile`;\n\n/**\n * OptionsTile.\n *\n * @element c4p-options-tile\n * @csspart options-tile The options tile\n * @fires c4p-options-tile-open Custom event fired when tile is opened\n * @fires c4p-options-tile-close Custom event fired when tile is closed\n * */\n\n@customElement(`${prefix}-options-tile`)\nclass CDSOptionsTile extends HostListenerMixin(LitElement) {\n /**\n * Determines if the tile is open by default\n */\n @property({ type: Boolean, reflect: true })\n defaultOpen?: boolean = false;\n\n /**\n * Determines the size of the header\n */\n @property({ type: String, reflect: true })\n size?: 'lg' | 'xl' = 'lg';\n\n /**\n * ID for the title\n */\n @property({ type: String, reflect: true })\n titleId: string = '';\n\n /**\n * Text for the title\n */\n @property({ type: String, reflect: true })\n titleText: string = '';\n\n /**\n * Using the native toggle event handler in details can cause an infinite loop\n * when setting the native open attribute. To combat this, the open state is kept\n * here and only referenced internally.\n */\n @state()\n private _open = false;\n\n /**\n * Tracks whether the toggle slot has content\n */\n @state()\n private _hasToggle = false;\n\n static get eventOpen() {\n return `${blockEvent}-open`;\n }\n\n static get eventClose() {\n return `${blockEvent}-close`;\n }\n\n private _handleToggleSlotChange(e: Event) {\n const target = e.target as HTMLSlotElement;\n const toggleElements = target?.assignedElements();\n this._hasToggle = toggleElements && toggleElements.length > 0;\n }\n\n private _toggle(evt: ToggleEvent) {\n const { newState } = evt;\n this._open = newState === 'open';\n this._open ? this._handleOpen() : this._handleClose();\n }\n\n private _handleOpen() {\n const init = {\n bubbles: true,\n composed: true,\n detail: {\n open: this._open,\n },\n };\n this.dispatchEvent(\n new CustomEvent(\n (this.constructor as typeof CDSOptionsTile).eventOpen,\n init\n )\n );\n }\n\n private _handleClose() {\n const init = {\n bubbles: true,\n composed: true,\n detail: {\n open: this._open,\n },\n };\n this.dispatchEvent(\n new CustomEvent(\n (this.constructor as typeof CDSOptionsTile).eventClose,\n init\n )\n );\n }\n\n render() {\n const { _open, _hasToggle, defaultOpen, size, titleId, titleText } = this;\n const classes = classMap({\n [`${blockClass}`]: true,\n [`${blockClass}--xl`]: size === 'xl',\n [`${blockClass}--open`]: _open,\n });\n\n const headerClasses = classMap({\n [`${blockClass}__header`]: true,\n [`${blockClass}__header--has-toggle`]: _hasToggle,\n });\n\n return html`\n <details\n @toggle=${this._toggle}\n class=\"${classes}\"\n part=\"options-tile\"\n open=${defaultOpen || nothing}\n >\n <summary class=\"${headerClasses}\">\n <div class=\"${blockClass}__header-right\">\n <slot\n name=\"toggle\"\n @slotchange=${this._handleToggleSlotChange}\n ></slot>\n </div>\n <div class=\"${blockClass}__header-left\">\n ${iconLoader(ChevronDown20, {\n slot: 'icon',\n class: `${blockClass}__chevron`,\n })}\n <div class=\"${blockClass}__title-block\">\n <p class=\"${blockClass}__title\" id=\"${titleId}\">${titleText}</p>\n <div class=\"${blockClass}__summary\">\n <slot name=\"summary\"></slot>\n </div>\n </div>\n </div>\n </summary>\n <div class=\"${blockClass}__body\">\n <cds-layer level=\"1\">\n <slot name=\"body\"></slot>\n </cds-layer>\n </div>\n </details>\n `;\n }\n\n static styles = styles;\n}\n\nexport default CDSOptionsTile;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqBA,MAAa,aAAa;AAC1B,MAAM,aAAa;;;;;;;;;AAWnB,IAAA,iBAAA,MACM,uBAAuB,kBAAkB,WAAW,CAAC;;;qBAKjC;cAMH;iBAMH;mBAME;eAQJ;oBAMK;;CAErB,WAAW,YAAY;AACrB,SAAO,GAAG,WAAW;;CAGvB,WAAW,aAAa;AACtB,SAAO,GAAG,WAAW;;CAGvB,wBAAgC,GAAU;EAExC,MAAM,iBADS,EAAE,QACc,kBAAkB;AACjD,OAAK,aAAa,kBAAkB,eAAe,SAAS;;CAG9D,QAAgB,KAAkB;EAChC,MAAM,EAAE,aAAa;AACrB,OAAK,QAAQ,aAAa;AAC1B,OAAK,QAAQ,KAAK,aAAa,GAAG,KAAK,cAAc;;CAGvD,cAAsB;EACpB,MAAM,OAAO;GACX,SAAS;GACT,UAAU;GACV,QAAQ,EACN,MAAM,KAAK,OACZ;GACF;AACD,OAAK,cACH,IAAI,YACD,KAAK,YAAsC,WAC5C,KACD,CACF;;CAGH,eAAuB;EACrB,MAAM,OAAO;GACX,SAAS;GACT,UAAU;GACV,QAAQ,EACN,MAAM,KAAK,OACZ;GACF;AACD,OAAK,cACH,IAAI,YACD,KAAK,YAAsC,YAC5C,KACD,CACF;;CAGH,SAAS;EACP,MAAM,EAAE,OAAO,YAAY,aAAa,MAAM,SAAS,cAAc;EACrE,MAAM,UAAU,SAAS;IACtB,GAAG,eAAe;IAClB,GAAG,WAAW,QAAQ,SAAS;IAC/B,GAAG,WAAW,UAAU;GAC1B,CAAC;EAEF,MAAM,gBAAgB,SAAS;IAC5B,GAAG,WAAW,YAAY;IAC1B,GAAG,WAAW,wBAAwB;GACxC,CAAC;AAEF,SAAO,IAAI;;kBAEG,KAAK,QAAQ;iBACd,QAAQ;;eAEV,eAAe,QAAQ;;0BAEZ,cAAc;wBAChB,WAAW;;;4BAGP,KAAK,wBAAwB;;;wBAGjC,WAAW;cACrB,WAAW,eAAe;GAC1B,MAAM;GACN,OAAO,GAAG,WAAW;GACtB,CAAC,CAAC;0BACW,WAAW;0BACX,WAAW,eAAe,QAAQ,IAAI,UAAU;4BAC9C,WAAW;;;;;;sBAMjB,WAAW;;;;;;;;;gBASfA;;;YAxIf,SAAS;CAAE,MAAM;CAAS,SAAS;CAAM,CAAC,CAAA,EAAA,eAAA,WAAA,eAAA,KAAA,EAAA;YAM1C,SAAS;CAAE,MAAM;CAAQ,SAAS;CAAM,CAAC,CAAA,EAAA,eAAA,WAAA,QAAA,KAAA,EAAA;YAMzC,SAAS;CAAE,MAAM;CAAQ,SAAS;CAAM,CAAC,CAAA,EAAA,eAAA,WAAA,WAAA,KAAA,EAAA;YAMzC,SAAS;CAAE,MAAM;CAAQ,SAAS;CAAM,CAAC,CAAA,EAAA,eAAA,WAAA,aAAA,KAAA,EAAA;YAQzC,OAAO,CAAA,EAAA,eAAA,WAAA,SAAA,KAAA,EAAA;YAMP,OAAO,CAAA,EAAA,eAAA,WAAA,cAAA,KAAA,EAAA;6BArCTC,cAAc,mBAAyB,CAAA,EAAA,eAAA;AAgJxC,IAAA,uBAAe"}
1
+ {"version":3,"file":"options-tile.js","names":["styles","customElement"],"sources":["../../../src/components/options-tile/options-tile.ts"],"sourcesContent":["/**\n * @license\n *\n * Copyright IBM Corp. 2025\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, state } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { prefix } from '../../globals/settings';\nimport HostListenerMixin from '@carbon/web-components/es/globals/mixins/host-listener.js';\nimport styles from './options-tile.scss?lit';\nimport { carbonElement as customElement } from '@carbon/web-components/es/globals/decorators/carbon-element.js';\nimport ChevronDown16 from '@carbon/icons/es/chevron--down/16';\nimport WarningAltFilled16 from '@carbon/icons/es/warning--alt--filled/16';\nimport Locked16 from '@carbon/icons/es/locked/16';\nimport { iconLoader } from '@carbon/web-components/es/globals/internal/icon-loader.js';\nimport '@carbon/web-components/es/components/button/index.js';\nimport '@carbon/web-components/es/components/layer/index.js';\n\nexport const blockClass = `${prefix}--options-tile`;\nconst blockEvent = `${prefix}-options-tile`;\n\n/**\n * OptionsTile.\n *\n * @element c4p-options-tile\n * @csspart options-tile The options tile\n * @fires c4p-options-tile-open Custom event fired when tile is opened\n * @fires c4p-options-tile-close Custom event fired when tile is closed\n * */\n\n@customElement(`${prefix}-options-tile`)\nclass CDSOptionsTile extends HostListenerMixin(LitElement) {\n /**\n * Determines if the tile is open by default\n */\n @property({ type: Boolean, reflect: true })\n defaultOpen?: boolean = false;\n\n /**\n * Determines the size of the header\n */\n @property({ type: String, reflect: true })\n size?: 'lg' | 'xl' = 'lg';\n\n /**\n * ID for the title\n */\n @property({ type: String, reflect: true })\n titleId: string = '';\n\n /**\n * Text for the title\n */\n @property({ type: String, reflect: true })\n titleText: string = '';\n\n /**\n * Whether the OptionsTile is in locked validation state.\n */\n @property({ type: Boolean, reflect: true })\n locked?: boolean = false;\n\n /**\n * Provide a text explaining why the OptionsTile is in locked state.\n */\n @property({ type: String, reflect: true })\n lockedText?: string = '';\n\n /**\n * Whether the OptionsTile is in warning validation state.\n */\n @property({ type: Boolean, reflect: true })\n warn?: boolean = false;\n\n /**\n * Provide a text explaining why the OptionsTile is in warning state.\n */\n @property({ type: String, reflect: true })\n warnText?: string = '';\n\n /**\n * Using the native toggle event handler in details can cause an infinite loop\n * when setting the native open attribute. To combat this, the open state is kept\n * here and only referenced internally.\n */\n @state()\n private _open = false;\n\n /**\n * Tracks whether the toggle slot has content\n */\n @state()\n private _hasToggle = false;\n\n /**\n * Tracks whether the body slot has content\n */\n @state()\n private _hasBody = false;\n\n static get eventOpen() {\n return `${blockEvent}-open`;\n }\n\n static get eventClose() {\n return `${blockEvent}-close`;\n }\n\n private _handleToggleSlotChange(e: Event) {\n const target = e.target as HTMLSlotElement;\n const toggleElements = target?.assignedElements();\n this._hasToggle = toggleElements && toggleElements.length > 0;\n }\n\n private _handleBodySlotChange(e: Event) {\n const target = e.target as HTMLSlotElement;\n const bodyElements = target?.assignedElements();\n this._hasBody = bodyElements && bodyElements.length > 0;\n }\n\n private _toggle(evt: ToggleEvent) {\n const { newState } = evt;\n this._open = newState === 'open';\n this._open ? this._handleOpen() : this._handleClose();\n }\n\n private _handleOpen() {\n const init = {\n bubbles: true,\n composed: true,\n detail: {\n open: this._open,\n },\n };\n this.dispatchEvent(\n new CustomEvent(\n (this.constructor as typeof CDSOptionsTile).eventOpen,\n init\n )\n );\n }\n\n private _handleClose() {\n const init = {\n bubbles: true,\n composed: true,\n detail: {\n open: this._open,\n },\n };\n this.dispatchEvent(\n new CustomEvent(\n (this.constructor as typeof CDSOptionsTile).eventClose,\n init\n )\n );\n }\n\n render() {\n const {\n _open,\n _hasToggle,\n _hasBody,\n defaultOpen,\n size,\n titleId,\n titleText,\n locked,\n lockedText,\n warn,\n warnText,\n } = this;\n const classes = classMap({\n [`${blockClass}`]: true,\n [`${blockClass}--xl`]: size === 'xl',\n [`${blockClass}--open`]: _open,\n });\n\n const headerClasses = classMap({\n [`${blockClass}__header`]: true,\n [`${blockClass}__header--has-toggle`]: _hasToggle,\n });\n\n const summaryClasses = classMap({\n [`${blockClass}__summary`]: true,\n [`${blockClass}__summary--warn`]: !!warn,\n [`${blockClass}__summary--locked`]: !!locked,\n });\n\n const renderTitle = () => html`\n <div class=\"${blockClass}__title-block\">\n <p class=\"${blockClass}__title\" id=\"${titleId}\">${titleText}</p>\n <div class=\"${summaryClasses}\">\n ${locked && lockedText\n ? html`\n ${iconLoader(Locked16, {\n class: `${blockClass}__summary-icon`,\n })}\n <span class=\"${blockClass}__summary-text\">${lockedText}</span>\n `\n : warn && warnText\n ? html`\n ${iconLoader(WarningAltFilled16, {\n class: `${blockClass}__summary-icon`,\n })}\n <span class=\"${blockClass}__summary-text\">${warnText}</span>\n `\n : html`<slot name=\"summary\"></slot>`}\n </div>\n </div>\n `;\n\n return _hasBody\n ? html`\n <details\n @toggle=${this._toggle}\n class=\"${classes}\"\n part=\"options-tile\"\n open=${defaultOpen || nothing}\n >\n <summary class=\"${headerClasses}\">\n <div class=\"${blockClass}__header-right\">\n <slot\n name=\"toggle\"\n @slotchange=${this._handleToggleSlotChange}\n ></slot>\n </div>\n <div class=\"${blockClass}__header-left\">\n ${iconLoader(ChevronDown16, {\n slot: 'icon',\n class: `${blockClass}__chevron`,\n })}\n ${renderTitle()}\n </div>\n </summary>\n <div class=\"${blockClass}__body\">\n <cds-layer level=\"1\">\n <slot\n name=\"body\"\n @slotchange=${this._handleBodySlotChange}\n ></slot>\n </cds-layer>\n </div>\n </details>\n `\n : html`\n <div class=\"${classes}\">\n <div class=\"${blockClass}__static-content\">\n <slot\n name=\"toggle\"\n @slotchange=${this._handleToggleSlotChange}\n style=\"display: none;\"\n ></slot>\n <slot\n name=\"body\"\n @slotchange=${this._handleBodySlotChange}\n style=\"display: none;\"\n ></slot>\n ${renderTitle()}\n </div>\n </div>\n `;\n }\n\n static styles = styles;\n}\n\nexport default CDSOptionsTile;\n"],"mappings":"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"}
@@ -7,7 +7,7 @@
7
7
 
8
8
  import { css } from "lit";
9
9
  //#region src/components/options-tile/options-tile.scss?lit
10
- var options_tile_default = css(["a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{border:0;font:inherit;font-feature-settings:\"liga\" 1;font-size:100%;margin:0;padding:0;vertical-align:baseline}button,input,select,textarea{border-radius:0;font-family:inherit}:root{color-scheme:var(--cds-color-scheme,light)}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}body{background-color:var(--cds-background,#fff);color:var(--cds-text-primary,#161616);line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:none}table{border-collapse:collapse;border-spacing:0}html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}html{font-size:100%}body{font-family:IBM Plex Sans,system-ui,-apple-system,BlinkMacSystemFont,\\.SFNSText-Regular,sans-serif;font-weight:400;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}code{font-family:IBM Plex Mono,system-ui,-apple-system,BlinkMacSystemFont,\\.SFNSText-Regular,monospace}strong{font-weight:600}@media screen and (-ms-high-contrast:active){svg{fill:ButtonText}}h1{font-size:var(--cds-heading-06-font-size,2.625rem);font-weight:var(--cds-heading-06-font-weight,300);letter-spacing:var(--cds-heading-06-letter-spacing,0);line-height:var(--cds-heading-06-line-height,1.199)}h2{font-size:var(--cds-heading-05-font-size,2rem);font-weight:var(--cds-heading-05-font-weight,400);letter-spacing:var(--cds-heading-05-letter-spacing,0);line-height:var(--cds-heading-05-line-height,1.25)}h3{font-size:var(--cds-heading-04-font-size,1.75rem);font-weight:var(--cds-heading-04-font-weight,400);letter-spacing:var(--cds-heading-04-letter-spacing,0);line-height:var(--cds-heading-04-line-height,1.28572)}h4{font-size:var(--cds-heading-03-font-size,1.25rem);font-weight:var(--cds-heading-03-font-weight,400);letter-spacing:var(--cds-heading-03-letter-spacing,0);line-height:var(--cds-heading-03-line-height,1.4)}h5{font-size:var(--cds-heading-02-font-size,1rem);font-weight:var(--cds-heading-02-font-weight,600);letter-spacing:var(--cds-heading-02-letter-spacing,0);line-height:var(--cds-heading-02-line-height,1.5)}h6{font-size:var(--cds-heading-01-font-size,.875rem);font-weight:var(--cds-heading-01-font-weight,600);letter-spacing:var(--cds-heading-01-letter-spacing,.16px);line-height:var(--cds-heading-01-line-height,1.42857)}p{font-size:var(--cds-body-02-font-size,1rem);font-weight:var(--cds-body-02-font-weight,400);letter-spacing:var(--cds-body-02-letter-spacing,0);line-height:var(--cds-body-02-line-height,1.5)}a{color:var(--cds-link-primary,#0062fe)}em{font-style:italic}:host(c4p-options-tile){position:relative}:host(c4p-options-tile) .c4p--options-tile{background:var(--cds-layer-01,#f4f4f4);border-block-end:1px solid var(--cds-border-subtle-01,#c6c6c6);position:relative}:host(c4p-options-tile) .c4p--options-tile ::-webkit-details-marker,:host(c4p-options-tile) .c4p--options-tile ::marker{content:\"\";display:none}:host(c4p-options-tile) .c4p--options-tile__header{align-items:center;block-size:3rem;cursor:pointer;display:flex;justify-content:space-between;padding-inline:1rem;padding-inline-end:1rem}:host(c4p-options-tile) .c4p--options-tile__header:hover{background:var(--cds-background-hover,hsla(0,0%,55%,.12))}:host(c4p-options-tile) .c4p--options-tile__header:focus{outline:2px solid var(--cds-focus,#0f62fe);outline-offset:-2px}:host(c4p-options-tile) .c4p--options-tile__header-left{align-items:center;display:flex}:host(c4p-options-tile) .c4p--options-tile__header-right{align-items:center;block-size:3rem;display:flex;inset-block-start:0;inset-inline-end:0;padding-inline:1rem;position:absolute}:host(c4p-options-tile) .c4p--options-tile__header--has-toggle{inline-size:calc(100% - 6rem)}:host(c4p-options-tile) .c4p--options-tile__title{font-size:var(--cds-heading-compact-01-font-size,.875rem);font-weight:var(--cds-heading-compact-01-font-weight,600);letter-spacing:var(--cds-heading-compact-01-letter-spacing,.16px);line-height:var(--cds-heading-compact-01-line-height,1.28572)}:host(c4p-options-tile) .c4p--options-tile__title-block{margin-inline-end:1rem;margin-inline-start:1rem}:host(c4p-options-tile) .c4p--options-tile__summary{color:var(--cds-text-secondary,#525252);font-size:var(--cds-helper-text-01-font-size,.75rem);letter-spacing:var(--cds-helper-text-01-letter-spacing,.32px);line-height:var(--cds-helper-text-01-line-height,1.33333)}:host(c4p-options-tile) .c4p--options-tile__body{padding-block-end:1.5rem;padding-block-start:.5rem;padding-inline:1rem;padding-inline-start:3rem}:host(c4p-options-tile) .c4p--options-tile--xl .c4p--options-tile__header{block-size:4rem}:host(c4p-options-tile) .c4p--options-tile--xl .c4p--options-tile__summary{margin-block-start:.125rem}:host(c4p-options-tile) .c4p--options-tile--open .c4p--options-tile__chevron{transform:rotate(-180deg)}:host(c4p-options-tile) .c4p--options-tile--open .c4p--options-tile__summary{display:none}"]);
10
+ var options_tile_default = css(["a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{border:0;font:inherit;font-feature-settings:\"liga\" 1;font-size:100%;margin:0;padding:0;vertical-align:baseline}button,input,select,textarea{border-radius:0;font-family:inherit}:root{color-scheme:var(--cds-color-scheme,light)}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}body{background-color:var(--cds-background,#fff);color:var(--cds-text-primary,#161616);line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:none}table{border-collapse:collapse;border-spacing:0}html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}html{font-size:100%}body{font-family:IBM Plex Sans,system-ui,-apple-system,BlinkMacSystemFont,\\.SFNSText-Regular,sans-serif;font-weight:400;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}code{font-family:IBM Plex Mono,system-ui,-apple-system,BlinkMacSystemFont,\\.SFNSText-Regular,monospace}strong{font-weight:600}@media screen and (-ms-high-contrast:active){svg{fill:ButtonText}}h1{font-size:var(--cds-heading-06-font-size,2.625rem);font-weight:var(--cds-heading-06-font-weight,300);letter-spacing:var(--cds-heading-06-letter-spacing,0);line-height:var(--cds-heading-06-line-height,1.199)}h2{font-size:var(--cds-heading-05-font-size,2rem);font-weight:var(--cds-heading-05-font-weight,400);letter-spacing:var(--cds-heading-05-letter-spacing,0);line-height:var(--cds-heading-05-line-height,1.25)}h3{font-size:var(--cds-heading-04-font-size,1.75rem);font-weight:var(--cds-heading-04-font-weight,400);letter-spacing:var(--cds-heading-04-letter-spacing,0);line-height:var(--cds-heading-04-line-height,1.28572)}h4{font-size:var(--cds-heading-03-font-size,1.25rem);font-weight:var(--cds-heading-03-font-weight,400);letter-spacing:var(--cds-heading-03-letter-spacing,0);line-height:var(--cds-heading-03-line-height,1.4)}h5{font-size:var(--cds-heading-02-font-size,1rem);font-weight:var(--cds-heading-02-font-weight,600);letter-spacing:var(--cds-heading-02-letter-spacing,0);line-height:var(--cds-heading-02-line-height,1.5)}h6{font-size:var(--cds-heading-01-font-size,.875rem);font-weight:var(--cds-heading-01-font-weight,600);letter-spacing:var(--cds-heading-01-letter-spacing,.16px);line-height:var(--cds-heading-01-line-height,1.42857)}p{font-size:var(--cds-body-02-font-size,1rem);font-weight:var(--cds-body-02-font-weight,400);letter-spacing:var(--cds-body-02-letter-spacing,0);line-height:var(--cds-body-02-line-height,1.5)}a{color:var(--cds-link-primary,#0062fe)}em{font-style:italic}:host(c4p-options-tile){position:relative}:host(c4p-options-tile) .c4p--options-tile{background:var(--cds-layer-01,#f4f4f4);border-block-end:1px solid var(--cds-border-subtle-01,#c6c6c6);position:relative}:host(c4p-options-tile) .c4p--options-tile ::-webkit-details-marker,:host(c4p-options-tile) .c4p--options-tile ::marker{content:\"\";display:none}:host(c4p-options-tile) .c4p--options-tile__header,:host(c4p-options-tile) .c4p--options-tile__static-content{align-items:center;block-size:3rem;display:flex;justify-content:space-between;padding-inline:1rem;padding-inline-end:1rem}:host(c4p-options-tile) .c4p--options-tile__header{cursor:pointer}:host(c4p-options-tile) .c4p--options-tile__header:hover{background:var(--cds-background-hover,hsla(0,0%,55%,.12))}:host(c4p-options-tile) .c4p--options-tile__header:focus{outline:2px solid var(--cds-focus,#0f62fe);outline-offset:-2px}:host(c4p-options-tile) .c4p--options-tile__header-left{align-items:center;display:flex}:host(c4p-options-tile) .c4p--options-tile__header-right{align-items:center;block-size:3rem;display:flex;inset-block-start:0;inset-inline-end:0;padding-inline:1rem;position:absolute}:host(c4p-options-tile) .c4p--options-tile__header--has-toggle{inline-size:calc(100% - 6rem)}:host(c4p-options-tile) .c4p--options-tile__title{font-size:var(--cds-heading-compact-01-font-size,.875rem);font-weight:var(--cds-heading-compact-01-font-weight,600);letter-spacing:var(--cds-heading-compact-01-letter-spacing,.16px);line-height:var(--cds-heading-compact-01-line-height,1.28572)}:host(c4p-options-tile) .c4p--options-tile__title-block{margin-inline-end:1rem;margin-inline-start:1rem}:host(c4p-options-tile) .c4p--options-tile__summary{align-items:center;color:var(--cds-text-secondary,#525252);display:flex;font-size:var(--cds-helper-text-01-font-size,.75rem);gap:.25rem;letter-spacing:var(--cds-helper-text-01-letter-spacing,.32px);line-height:var(--cds-helper-text-01-line-height,1.33333);margin-block-start:.25rem}:host(c4p-options-tile) .c4p--options-tile__summary--locked{color:var(--cds-text-secondary,#525252)}:host(c4p-options-tile) .c4p--options-tile__summary--warn{color:var(--cds-text-primary,#161616)}:host(c4p-options-tile) .c4p--options-tile__summary--warn svg{color:var(--cds-support-warning,#f1c21b)}:host(c4p-options-tile) .c4p--options-tile__summary--warn svg path[fill=none]{fill:#000}:host(c4p-options-tile) .c4p--options-tile__summary-icon{flex-shrink:0}:host(c4p-options-tile) .c4p--options-tile__summary-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:host(c4p-options-tile) .c4p--options-tile__body{padding-block-end:1.5rem;padding-block-start:.5rem;padding-inline:1rem;padding-inline-start:3rem}:host(c4p-options-tile) .c4p--options-tile--lg .c4p--options-tile__summary{margin-block-start:.125rem}:host(c4p-options-tile) .c4p--options-tile--xl .c4p--options-tile__header{block-size:4rem}:host(c4p-options-tile) .c4p--options-tile--xl .c4p--options-tile__summary{margin-block-start:.125rem}:host(c4p-options-tile) .c4p--options-tile--open .c4p--options-tile__chevron{transform:rotate(-180deg)}:host(c4p-options-tile) .c4p--options-tile--open .c4p--options-tile__summary{display:none}"]);
11
11
  //#endregion
12
12
  export { options_tile_default as default };
13
13
 
@@ -1 +1 @@
1
- {"version":3,"file":"options-tile.scss.js","names":[],"sources":["../../../src/components/options-tile/options-tile.scss?lit"],"sourcesContent":["/*\n* Copyright IBM Corp. 2025, 2025\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\n$css--plex: true !default;\n\n@use 'sass:map';\n@use '@carbon/styles/scss/theme' as *;\n@use '@carbon/styles/scss/spacing' as *;\n@use '@carbon/styles/scss/reset';\n@use '@carbon/styles/scss/type';\n@use '@carbon/styles/scss/config' as carbon-config;\n\n$prefix: 'c4p';\n$block-class: #{$prefix}--options-tile;\n\n:host(#{$prefix}-options-tile) {\n position: relative;\n\n .#{$block-class} {\n position: relative;\n background: $layer-01;\n border-block-end: 1px solid $border-subtle-01;\n\n ::marker,\n ::-webkit-details-marker {\n display: none;\n content: '';\n }\n\n &__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n block-size: $spacing-09;\n cursor: pointer;\n padding-inline: $spacing-05;\n padding-inline-end: $spacing-05;\n\n &:hover {\n background: $background-hover;\n }\n\n &:focus {\n outline: 2px solid $focus;\n outline-offset: -2px;\n }\n\n &-left {\n display: flex;\n align-items: center;\n }\n\n &-right {\n position: absolute;\n display: flex;\n align-items: center;\n block-size: $spacing-09;\n inset-block-start: 0;\n inset-inline-end: 0;\n padding-inline: $spacing-05;\n }\n\n &--has-toggle {\n inline-size: calc(100% - ($spacing-09 + ($spacing-05 * 3)));\n }\n }\n\n &__title {\n @include type.type-style('heading-compact-01');\n\n &-block {\n margin-inline-end: $spacing-05;\n margin-inline-start: $spacing-05;\n }\n }\n\n &__summary {\n @include type.type-style('helper-text-01');\n\n color: $text-secondary;\n }\n\n &__body {\n padding-block-end: $spacing-06;\n padding-block-start: $spacing-03;\n padding-inline: $spacing-05;\n padding-inline-start: $spacing-09;\n }\n }\n\n .#{$block-class}--xl {\n .#{$block-class}__header {\n block-size: $spacing-10;\n }\n\n .#{$block-class}__summary {\n margin-block-start: $spacing-01;\n }\n }\n\n .#{$block-class}--open {\n .#{$block-class}__chevron {\n transform: rotate(-180deg);\n }\n\n .#{$block-class}__summary {\n display: none;\n }\n }\n}\n"],"mappings":""}
1
+ {"version":3,"file":"options-tile.scss.js","names":[],"sources":["../../../src/components/options-tile/options-tile.scss?lit"],"sourcesContent":["/*\n* Copyright IBM Corp. 2025, 2025\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\n$css--plex: true !default;\n\n@use 'sass:map';\n@use '@carbon/styles/scss/theme' as *;\n@use '@carbon/styles/scss/spacing' as *;\n@use '@carbon/styles/scss/colors' as *;\n@use '@carbon/styles/scss/reset';\n@use '@carbon/styles/scss/type';\n@use '@carbon/styles/scss/config' as carbon-config;\n\n$prefix: 'c4p';\n$block-class: #{$prefix}--options-tile;\n\n:host(#{$prefix}-options-tile) {\n position: relative;\n\n .#{$block-class} {\n position: relative;\n background: $layer-01;\n border-block-end: 1px solid $border-subtle-01;\n\n ::marker,\n ::-webkit-details-marker {\n display: none;\n content: '';\n }\n\n &__header,\n &__static-content {\n display: flex;\n align-items: center;\n justify-content: space-between;\n block-size: $spacing-09;\n padding-inline: $spacing-05;\n padding-inline-end: $spacing-05;\n }\n\n &__header {\n cursor: pointer;\n\n &:hover {\n background: $background-hover;\n }\n\n &:focus {\n outline: 2px solid $focus;\n outline-offset: -2px;\n }\n\n &-left {\n display: flex;\n align-items: center;\n }\n\n &-right {\n position: absolute;\n display: flex;\n align-items: center;\n block-size: $spacing-09;\n inset-block-start: 0;\n inset-inline-end: 0;\n padding-inline: $spacing-05;\n }\n\n &--has-toggle {\n inline-size: calc(100% - ($spacing-09 + ($spacing-05 * 3)));\n }\n }\n\n &__title {\n @include type.type-style('heading-compact-01');\n\n &-block {\n margin-inline-end: $spacing-05;\n margin-inline-start: $spacing-05;\n }\n }\n\n &__summary {\n @include type.type-style('helper-text-01');\n\n display: flex;\n align-items: center;\n color: $text-secondary;\n gap: $spacing-02;\n margin-block-start: $spacing-02;\n\n &--locked {\n color: $text-secondary;\n }\n\n &--warn {\n color: $text-primary;\n\n svg {\n color: $support-warning;\n\n path[fill='none'] {\n fill: $black-100;\n }\n }\n }\n\n &-icon {\n flex-shrink: 0;\n }\n\n &-text {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n }\n\n &__body {\n padding-block-end: $spacing-06;\n padding-block-start: $spacing-03;\n padding-inline: $spacing-05;\n padding-inline-start: $spacing-09;\n }\n }\n\n .#{$block-class}--lg {\n .#{$block-class}__summary {\n margin-block-start: $spacing-01;\n }\n }\n\n .#{$block-class}--xl {\n .#{$block-class}__header {\n block-size: $spacing-10;\n }\n\n .#{$block-class}__summary {\n margin-block-start: $spacing-01;\n }\n }\n\n .#{$block-class}--open {\n .#{$block-class}__chevron {\n transform: rotate(-180deg);\n }\n\n .#{$block-class}__summary {\n display: none;\n }\n }\n}\n"],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"page-header-actions-set.d.ts","sourceRoot":"","sources":["../../../../src/components/page-header/page-header-actions-set/page-header-actions-set.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAQ,MAAM,KAAK,CAAC;AAGvC,OAAO,6DAA6D,CAAC;AAQrE,UAAU,UAAU;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAGD,MAAM,CAAC,OAAO,OAAO,uBAAwB,SAAQ,UAAU;IAC7D;;OAEG;IAEH,WAAW,EAAE,UAAU,EAAE,CAAM;IAE/B;;OAEG;IAEH,WAAW,EAAE,UAAU,EAAE,CAAM;IAE/B;;OAEG;IAEH,OAAO,CAAC,SAAS,CAAe;IAEhC;;OAEG;IAEH,OAAO,CAAC,cAAc,CAAe;IAErC,OAAO,CAAC,cAAc,CAA6B;IACnD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,kBAAkB,CAAK;IAE/B,iBAAiB,IAAI,IAAI;IAKzB,YAAY;IAcZ,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IAa/C,OAAO,CAAC,sBAAsB;IAkG9B,oBAAoB;IAQpB,OAAO,CAAC,uBAAuB;IAY/B,MAAM;IAuCN,MAAM,CAAC,MAAM,MAAU;CACxB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,6BAA6B,EAAE,uBAAuB,CAAC;KACxD;CACF"}
1
+ {"version":3,"file":"page-header-actions-set.d.ts","sourceRoot":"","sources":["../../../../src/components/page-header/page-header-actions-set/page-header-actions-set.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAQ,MAAM,KAAK,CAAC;AAIvC,OAAO,6DAA6D,CAAC;AAQrE,UAAU,UAAU;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAGD,MAAM,CAAC,OAAO,OAAO,uBAAwB,SAAQ,UAAU;IAC7D;;OAEG;IAEH,WAAW,EAAE,UAAU,EAAE,CAAM;IAE/B;;OAEG;IAEH,WAAW,EAAE,UAAU,EAAE,CAAM;IAE/B;;OAEG;IAEH,OAAO,CAAC,SAAS,CAAe;IAEhC;;OAEG;IAEH,OAAO,CAAC,cAAc,CAAe;IAErC,OAAO,CAAC,cAAc,CAA6B;IACnD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,kBAAkB,CAAK;IAE/B,iBAAiB,IAAI,IAAI;IAKzB,YAAY;IAcZ,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IAa/C,OAAO,CAAC,sBAAsB;IAkG9B,oBAAoB;IAQpB,OAAO,CAAC,uBAAuB;IAY/B,MAAM;IAuCN,MAAM,CAAC,MAAM,MAAU;CACxB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,6BAA6B,EAAE,uBAAuB,CAAC;KACxD;CACF"}
@@ -9,7 +9,8 @@ import "../../../globals/settings.js";
9
9
  import { __decorate } from "../../../_virtual/_@oxc-project_runtime@0.127.0/helpers/decorate.js";
10
10
  import page_header_actions_set_default$1 from "./page-header-actions-set.scss.js";
11
11
  import { LitElement, html } from "lit";
12
- import { customElement, property, query, state } from "lit/decorators.js";
12
+ import { property, query, state } from "lit/decorators.js";
13
+ import { carbonElement } from "@carbon/web-components/es/globals/decorators/carbon-element.js";
13
14
  import { iconLoader } from "@carbon/web-components/es/globals/internal/icon-loader.js";
14
15
  import { repeat } from "lit/directives/repeat.js";
15
16
  import "@carbon/web-components/es/components/overflow-menu/index.js";
@@ -153,7 +154,7 @@ __decorate([property({
153
154
  })], CDSPageHeaderActionsSet.prototype, "actionsData", void 0);
154
155
  __decorate([query(`.${blockClass}`)], CDSPageHeaderActionsSet.prototype, "container", void 0);
155
156
  __decorate([query(`.${blockClass}__items`)], CDSPageHeaderActionsSet.prototype, "itemsContainer", void 0);
156
- CDSPageHeaderActionsSet = __decorate([customElement(`c4p-page-header-actions-set`)], CDSPageHeaderActionsSet);
157
+ CDSPageHeaderActionsSet = __decorate([carbonElement(`c4p-page-header-actions-set`)], CDSPageHeaderActionsSet);
157
158
  var page_header_actions_set_default = CDSPageHeaderActionsSet;
158
159
  //#endregion
159
160
  export { page_header_actions_set_default as default };
@@ -1 +1 @@
1
- {"version":3,"file":"page-header-actions-set.js","names":["styles"],"sources":["../../../../src/components/page-header/page-header-actions-set/page-header-actions-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 } from 'lit';\nimport { customElement, property, query, state } from 'lit/decorators.js';\nimport { repeat } from 'lit/directives/repeat.js';\nimport '@carbon/web-components/es/components/overflow-menu/index.js';\nimport OverflowMenuVertical16 from '@carbon/icons/es/overflow-menu--vertical/16.js';\nimport { iconLoader } from '@carbon/web-components/es/globals/internal/icon-loader.js';\nimport styles from './page-header-actions-set.scss?lit';\nimport { prefix } from '../../../globals/settings';\n\nconst blockClass = `${prefix}--page-header-actions-set`;\n\ninterface PageAction {\n label: string;\n}\n\n@customElement(`${prefix}-page-header-actions-set`)\nexport default class CDSPageHeaderActionsSet extends LitElement {\n /**\n * Hidden actions that will be rendered in the overflow menu.\n */\n @state()\n hiddenItems: PageAction[] = [];\n\n /**\n * The list of page action labels for overflow menu.\n */\n @property({ type: Array, attribute: 'actions-data', reflect: true })\n actionsData: PageAction[] = [];\n\n /**\n * Container holding all action buttons and the overflow menu.\n */\n @query(`.${blockClass}`)\n private container!: HTMLElement;\n\n /**\n * Items wrapper containing the slotted elements.\n */\n @query(`.${blockClass}__items`)\n private itemsContainer!: HTMLElement;\n\n private resizeObserver: ResizeObserver | undefined;\n private isSetup = false;\n private resizeTimeout: number | undefined;\n private lastContainerWidth = 0;\n\n connectedCallback(): void {\n super.connectedCallback();\n this.style.visibility = 'hidden';\n }\n\n firstUpdated() {\n if (!this.container) {\n return;\n }\n\n this.updateComplete.then(() => {\n requestAnimationFrame(() => {\n this.setupOverflowDetection();\n this.isSetup = true;\n this.style.visibility = 'visible';\n });\n });\n }\n\n updated(changedProperties: Map<string, unknown>) {\n // Only re-setup if actionsData changed and we've already done initial setup\n if (\n this.isSetup &&\n changedProperties.has('actionsData') &&\n !changedProperties.has('hiddenItems')\n ) {\n this.updateComplete.then(() => {\n requestAnimationFrame(() => this.setupOverflowDetection());\n });\n }\n }\n\n private setupOverflowDetection() {\n if (!this.itemsContainer) {\n return;\n }\n\n // Disconnect existing observer if any\n this.resizeObserver?.disconnect();\n\n // Get slotted elements\n const slot = this.shadowRoot?.querySelector('slot') as HTMLSlotElement;\n\n const checkOverflow = () => {\n const slottedElements = slot?.assignedElements() as HTMLElement[];\n\n if (!slottedElements || slottedElements.length === 0) {\n return;\n }\n\n // Use the host element's width as it reflects the actual available space\n const containerWidth =\n this.offsetWidth || this.itemsContainer.clientWidth;\n const overflowMenuWidth = 48; // Approximate width of overflow menu button\n\n // If container has no width yet, skip check\n if (containerWidth === 0) {\n return;\n }\n\n // Prevent resize loop - only recalculate if width changed significantly (>5px)\n if (Math.abs(containerWidth - this.lastContainerWidth) < 5) {\n return;\n }\n this.lastContainerWidth = containerWidth;\n\n // First, check if all items fit without overflow menu\n let totalWidth = 0;\n for (let i = 0; i < slottedElements.length; i++) {\n totalWidth += slottedElements[i].offsetWidth;\n }\n\n // If all items fit, show all and hide overflow menu\n if (totalWidth <= containerWidth) {\n slottedElements.forEach((el) => {\n el.removeAttribute('data-hidden');\n });\n this.hiddenItems = [];\n return;\n }\n\n // Items don't fit, calculate how many can fit with overflow menu\n totalWidth = 0;\n let visibleCount = 0;\n\n for (let i = 0; i < slottedElements.length; i++) {\n const itemWidth = slottedElements[i].offsetWidth;\n\n // Check if this item plus overflow menu would fit\n if (totalWidth + itemWidth + overflowMenuWidth <= containerWidth) {\n totalWidth += itemWidth;\n visibleCount = i + 1;\n } else {\n break;\n }\n }\n\n // Update visibility\n slottedElements.forEach((el, index) => {\n if (index >= visibleCount) {\n el.setAttribute('data-hidden', '');\n } else {\n el.removeAttribute('data-hidden');\n }\n });\n\n // Update hidden items for overflow menu\n this.hiddenItems = this.actionsData?.slice(visibleCount) || [];\n };\n\n // Initial check\n checkOverflow();\n\n // Observe both the host element and items container for size changes with debouncing\n this.resizeObserver = new ResizeObserver(() => {\n // Clear existing timeout\n if (this.resizeTimeout) {\n clearTimeout(this.resizeTimeout);\n }\n\n // Debounce the check to prevent rapid recalculations\n this.resizeTimeout = window.setTimeout(() => {\n checkOverflow();\n }, 100);\n });\n\n this.resizeObserver.observe(this);\n this.resizeObserver.observe(this.itemsContainer);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.resizeObserver?.disconnect();\n if (this.resizeTimeout) {\n clearTimeout(this.resizeTimeout);\n }\n }\n\n private handleOverflowItemClick(index: number) {\n // Get the slot and find the corresponding slotted element\n const slot = this.shadowRoot?.querySelector('slot') as HTMLSlotElement;\n const slottedElements = slot?.assignedElements() as HTMLElement[];\n const hiddenIndex =\n this.actionsData.length - this.hiddenItems.length + index;\n const button = slottedElements[hiddenIndex];\n if (button) {\n button.click();\n }\n }\n\n render() {\n return html`\n <div class=\"${blockClass}\">\n <div class=\"${blockClass}__items\">\n <slot></slot>\n </div>\n\n <div data-offset ?data-hidden=${this.hiddenItems.length === 0}>\n <cds-overflow-menu\n size=\"md\"\n close-on-activation\n enter-delay-ms=\"0\"\n leave-delay-ms=\"0\"\n align=\"left\"\n data-floating-menu-container\n >\n ${iconLoader(OverflowMenuVertical16, {\n class: `${blockClass}__overflow-svg`,\n slot: 'icon',\n })}\n <span slot=\"tooltip-content\">More actions</span>\n <cds-overflow-menu-body flipped>\n ${repeat(\n this.hiddenItems ?? [],\n (_item, index) => index,\n (item, index) => html`\n <cds-overflow-menu-item\n @click=\"${() => this.handleOverflowItemClick(index)}\"\n >\n ${item.label}\n </cds-overflow-menu-item>\n `\n )}\n </cds-overflow-menu-body>\n </cds-overflow-menu>\n </div>\n </div>\n `;\n }\n static styles = styles;\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'c4p-page-header-actions-set': CDSPageHeaderActionsSet;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"page-header-actions-set.js","names":["styles","customElement"],"sources":["../../../../src/components/page-header/page-header-actions-set/page-header-actions-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 } 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 { repeat } from 'lit/directives/repeat.js';\nimport '@carbon/web-components/es/components/overflow-menu/index.js';\nimport OverflowMenuVertical16 from '@carbon/icons/es/overflow-menu--vertical/16.js';\nimport { iconLoader } from '@carbon/web-components/es/globals/internal/icon-loader.js';\nimport styles from './page-header-actions-set.scss?lit';\nimport { prefix } from '../../../globals/settings';\n\nconst blockClass = `${prefix}--page-header-actions-set`;\n\ninterface PageAction {\n label: string;\n}\n\n@customElement(`${prefix}-page-header-actions-set`)\nexport default class CDSPageHeaderActionsSet extends LitElement {\n /**\n * Hidden actions that will be rendered in the overflow menu.\n */\n @state()\n hiddenItems: PageAction[] = [];\n\n /**\n * The list of page action labels for overflow menu.\n */\n @property({ type: Array, attribute: 'actions-data', reflect: true })\n actionsData: PageAction[] = [];\n\n /**\n * Container holding all action buttons and the overflow menu.\n */\n @query(`.${blockClass}`)\n private container!: HTMLElement;\n\n /**\n * Items wrapper containing the slotted elements.\n */\n @query(`.${blockClass}__items`)\n private itemsContainer!: HTMLElement;\n\n private resizeObserver: ResizeObserver | undefined;\n private isSetup = false;\n private resizeTimeout: number | undefined;\n private lastContainerWidth = 0;\n\n connectedCallback(): void {\n super.connectedCallback();\n this.style.visibility = 'hidden';\n }\n\n firstUpdated() {\n if (!this.container) {\n return;\n }\n\n this.updateComplete.then(() => {\n requestAnimationFrame(() => {\n this.setupOverflowDetection();\n this.isSetup = true;\n this.style.visibility = 'visible';\n });\n });\n }\n\n updated(changedProperties: Map<string, unknown>) {\n // Only re-setup if actionsData changed and we've already done initial setup\n if (\n this.isSetup &&\n changedProperties.has('actionsData') &&\n !changedProperties.has('hiddenItems')\n ) {\n this.updateComplete.then(() => {\n requestAnimationFrame(() => this.setupOverflowDetection());\n });\n }\n }\n\n private setupOverflowDetection() {\n if (!this.itemsContainer) {\n return;\n }\n\n // Disconnect existing observer if any\n this.resizeObserver?.disconnect();\n\n // Get slotted elements\n const slot = this.shadowRoot?.querySelector('slot') as HTMLSlotElement;\n\n const checkOverflow = () => {\n const slottedElements = slot?.assignedElements() as HTMLElement[];\n\n if (!slottedElements || slottedElements.length === 0) {\n return;\n }\n\n // Use the host element's width as it reflects the actual available space\n const containerWidth =\n this.offsetWidth || this.itemsContainer.clientWidth;\n const overflowMenuWidth = 48; // Approximate width of overflow menu button\n\n // If container has no width yet, skip check\n if (containerWidth === 0) {\n return;\n }\n\n // Prevent resize loop - only recalculate if width changed significantly (>5px)\n if (Math.abs(containerWidth - this.lastContainerWidth) < 5) {\n return;\n }\n this.lastContainerWidth = containerWidth;\n\n // First, check if all items fit without overflow menu\n let totalWidth = 0;\n for (let i = 0; i < slottedElements.length; i++) {\n totalWidth += slottedElements[i].offsetWidth;\n }\n\n // If all items fit, show all and hide overflow menu\n if (totalWidth <= containerWidth) {\n slottedElements.forEach((el) => {\n el.removeAttribute('data-hidden');\n });\n this.hiddenItems = [];\n return;\n }\n\n // Items don't fit, calculate how many can fit with overflow menu\n totalWidth = 0;\n let visibleCount = 0;\n\n for (let i = 0; i < slottedElements.length; i++) {\n const itemWidth = slottedElements[i].offsetWidth;\n\n // Check if this item plus overflow menu would fit\n if (totalWidth + itemWidth + overflowMenuWidth <= containerWidth) {\n totalWidth += itemWidth;\n visibleCount = i + 1;\n } else {\n break;\n }\n }\n\n // Update visibility\n slottedElements.forEach((el, index) => {\n if (index >= visibleCount) {\n el.setAttribute('data-hidden', '');\n } else {\n el.removeAttribute('data-hidden');\n }\n });\n\n // Update hidden items for overflow menu\n this.hiddenItems = this.actionsData?.slice(visibleCount) || [];\n };\n\n // Initial check\n checkOverflow();\n\n // Observe both the host element and items container for size changes with debouncing\n this.resizeObserver = new ResizeObserver(() => {\n // Clear existing timeout\n if (this.resizeTimeout) {\n clearTimeout(this.resizeTimeout);\n }\n\n // Debounce the check to prevent rapid recalculations\n this.resizeTimeout = window.setTimeout(() => {\n checkOverflow();\n }, 100);\n });\n\n this.resizeObserver.observe(this);\n this.resizeObserver.observe(this.itemsContainer);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.resizeObserver?.disconnect();\n if (this.resizeTimeout) {\n clearTimeout(this.resizeTimeout);\n }\n }\n\n private handleOverflowItemClick(index: number) {\n // Get the slot and find the corresponding slotted element\n const slot = this.shadowRoot?.querySelector('slot') as HTMLSlotElement;\n const slottedElements = slot?.assignedElements() as HTMLElement[];\n const hiddenIndex =\n this.actionsData.length - this.hiddenItems.length + index;\n const button = slottedElements[hiddenIndex];\n if (button) {\n button.click();\n }\n }\n\n render() {\n return html`\n <div class=\"${blockClass}\">\n <div class=\"${blockClass}__items\">\n <slot></slot>\n </div>\n\n <div data-offset ?data-hidden=${this.hiddenItems.length === 0}>\n <cds-overflow-menu\n size=\"md\"\n close-on-activation\n enter-delay-ms=\"0\"\n leave-delay-ms=\"0\"\n align=\"left\"\n data-floating-menu-container\n >\n ${iconLoader(OverflowMenuVertical16, {\n class: `${blockClass}__overflow-svg`,\n slot: 'icon',\n })}\n <span slot=\"tooltip-content\">More actions</span>\n <cds-overflow-menu-body flipped>\n ${repeat(\n this.hiddenItems ?? [],\n (_item, index) => index,\n (item, index) => html`\n <cds-overflow-menu-item\n @click=\"${() => this.handleOverflowItemClick(index)}\"\n >\n ${item.label}\n </cds-overflow-menu-item>\n `\n )}\n </cds-overflow-menu-body>\n </cds-overflow-menu>\n </div>\n </div>\n `;\n }\n static styles = styles;\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'c4p-page-header-actions-set': CDSPageHeaderActionsSet;\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"page-header-breadcrumbs-set.d.ts","sourceRoot":"","sources":["../../../../src/components/page-header/page-header-breadcrumbs-set/page-header-breadcrumbs-set.ts"],"names":[],"mappings":"AACA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAQ,MAAM,KAAK,CAAC;AAIvC,OAAO,0DAA0D,CAAC;AAClE,OAAO,6DAA6D,CAAC;AAIrE,OAAO,sBAAsB,CAAC;AAE9B,OAAO,iCAAiC,CAAC;AAKzC,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAGD,MAAM,CAAC,OAAO,OAAO,2BAA4B,SAAQ,UAAU;IACjE;;OAEG;IAEH,WAAW,EAAE,UAAU,EAAE,CAAM;IAE/B;;OAEG;IAEH,eAAe,EAAE,UAAU,EAAE,CAAM;IAEnC;;OAEG;IAEH,KAAK,SAAM;IAEX;;OAEG;IAEH,OAAO,CAAC,SAAS,CAAe;IAEhC,OAAO,CAAC,eAAe,CAAyC;IAEhE,iBAAiB,IAAI,IAAI;IAKzB,YAAY;IA6CZ,oBAAoB;IAOpB,MAAM;IAsDN,MAAM,CAAC,MAAM,MAAU;CACxB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,iCAAiC,EAAE,2BAA2B,CAAC;KAChE;CACF"}
1
+ {"version":3,"file":"page-header-breadcrumbs-set.d.ts","sourceRoot":"","sources":["../../../../src/components/page-header/page-header-breadcrumbs-set/page-header-breadcrumbs-set.ts"],"names":[],"mappings":"AACA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAQ,MAAM,KAAK,CAAC;AAKvC,OAAO,0DAA0D,CAAC;AAClE,OAAO,6DAA6D,CAAC;AAIrE,OAAO,sBAAsB,CAAC;AAE9B,OAAO,iCAAiC,CAAC;AAKzC,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAGD,MAAM,CAAC,OAAO,OAAO,2BAA4B,SAAQ,UAAU;IACjE;;OAEG;IAEH,WAAW,EAAE,UAAU,EAAE,CAAM;IAE/B;;OAEG;IAEH,eAAe,EAAE,UAAU,EAAE,CAAM;IAEnC;;OAEG;IAEH,KAAK,SAAM;IAEX;;OAEG;IAEH,OAAO,CAAC,SAAS,CAAe;IAEhC,OAAO,CAAC,eAAe,CAAyC;IAEhE,iBAAiB,IAAI,IAAI;IAKzB,YAAY;IA6CZ,oBAAoB;IAOpB,MAAM;IAsDN,MAAM,CAAC,MAAM,MAAU;CACxB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,iCAAiC,EAAE,2BAA2B,CAAC;KAChE;CACF"}
@@ -13,7 +13,8 @@ import "../page-header-title-breadcrumb.js";
13
13
  import page_header_breadcrumbs_set_default$1 from "./page-header-breadcrumbs-set.scss.js";
14
14
  import { classMap } from "lit/directives/class-map.js";
15
15
  import { LitElement, html } from "lit";
16
- import { customElement, property, query } from "lit/decorators.js";
16
+ import { property, query } from "lit/decorators.js";
17
+ import { carbonElement } from "@carbon/web-components/es/globals/decorators/carbon-element.js";
17
18
  import { iconLoader } from "@carbon/web-components/es/globals/internal/icon-loader.js";
18
19
  import { repeat } from "lit/directives/repeat.js";
19
20
  import "@carbon/web-components/es/components/breadcrumb/index.js";
@@ -127,7 +128,7 @@ __decorate([property({
127
128
  })], CDSPageHeaderBreadcrumbsSet.prototype, "breadcrumbsData", void 0);
128
129
  __decorate([property({ type: String })], CDSPageHeaderBreadcrumbsSet.prototype, "title", void 0);
129
130
  __decorate([query(`.${blockClass}`)], CDSPageHeaderBreadcrumbsSet.prototype, "container", void 0);
130
- CDSPageHeaderBreadcrumbsSet = __decorate([customElement(`c4p-page-header-breadcrumbs-set`)], CDSPageHeaderBreadcrumbsSet);
131
+ CDSPageHeaderBreadcrumbsSet = __decorate([carbonElement(`c4p-page-header-breadcrumbs-set`)], CDSPageHeaderBreadcrumbsSet);
131
132
  var page_header_breadcrumbs_set_default = CDSPageHeaderBreadcrumbsSet;
132
133
  //#endregion
133
134
  export { page_header_breadcrumbs_set_default as default };
@@ -1 +1 @@
1
- {"version":3,"file":"page-header-breadcrumbs-set.js","names":["styles"],"sources":["../../../../src/components/page-header/page-header-breadcrumbs-set/page-header-breadcrumbs-set.ts"],"sourcesContent":["// cspell:words currentpage\n/**\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 } from 'lit';\nimport { customElement, property, query } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { repeat } from 'lit/directives/repeat.js';\nimport '@carbon/web-components/es/components/breadcrumb/index.js';\nimport '@carbon/web-components/es/components/overflow-menu/index.js';\nimport { createOverflowHandler } from '../utils';\nimport OverflowMenuHorizontal16 from '@carbon/icons/es/overflow-menu--horizontal/16.js';\nimport { iconLoader } from '@carbon/web-components/es/globals/internal/icon-loader.js';\nimport '../../truncated-text';\nimport styles from './page-header-breadcrumbs-set.scss?lit';\nimport '../page-header-title-breadcrumb';\nimport { prefix } from '../../../globals/settings';\n\nconst blockClass = `${prefix}--page-header-breadcrumbs-set`;\n\ninterface Breadcrumb {\n text: string;\n href: string;\n}\n\n@customElement(`${prefix}-page-header-breadcrumbs-set`)\nexport default class CDSPageHeaderBreadcrumbsSet extends LitElement {\n /**\n * Hidden items that will be rendered in the overflow menu.\n */\n @property({ type: Array })\n hiddenItems: Breadcrumb[] = [];\n\n /**\n * The list of breadcrumbs.\n */\n @property({ type: Array, attribute: 'breadcrumbs-data', reflect: true })\n breadcrumbsData: Breadcrumb[] = [];\n\n /**\n * The page title to display in the title breadcrumb.\n */\n @property({ type: String })\n title = '';\n\n /**\n * Container holding all breadcrumbs and the overflow menu.\n */\n @query(`.${blockClass}`)\n private container!: HTMLElement;\n\n private overflowHandler: { disconnect: () => void } | undefined;\n\n connectedCallback(): void {\n super.connectedCallback();\n this.style.visibility = 'hidden';\n }\n\n firstUpdated() {\n if (!this.container) {\n return;\n }\n const sr = this.shadowRoot;\n const breadcrumb = sr?.querySelector(\n 'cds-breadcrumb'\n ) as HTMLElement | null;\n\n if (breadcrumb) {\n breadcrumb.style.display = 'block';\n\n requestAnimationFrame(() => {\n const ol = breadcrumb.shadowRoot?.querySelector(\n 'ol'\n ) as HTMLElement | null;\n if (ol) {\n ol.style.display = 'flex';\n ol.style.flexWrap = 'unset';\n }\n });\n }\n\n this.updateComplete.then(() => {\n requestAnimationFrame(() => {\n this.overflowHandler = createOverflowHandler({\n offsetValue: 14,\n container: this.container,\n onChange: (visibleItems: HTMLElement[], _) => {\n const totalItems = (this.breadcrumbsData?.length ?? 1) - 1; // Exclude last item\n const hiddenCount = totalItems - visibleItems.length;\n this.hiddenItems =\n this.breadcrumbsData?.slice(0, hiddenCount) ?? [];\n },\n });\n });\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\n disconnectedCallback() {\n super.disconnectedCallback();\n if (this.overflowHandler) {\n this.overflowHandler.disconnect();\n }\n }\n\n render() {\n return html`\n <cds-breadcrumb\n aria-label=\"breadcrumbs\"\n class=${classMap({\n [`${blockClass}`]: true,\n })}\n >\n <cds-breadcrumb-item\n data-fixed\n data-offset\n style=\"display: ${this.hiddenItems?.length >= 1 ? 'flex' : 'none'}\"\n >\n <cds-overflow-menu breadcrumb=\"\" align=\"bottom\">\n ${iconLoader(OverflowMenuHorizontal16, {\n slot: 'icon',\n })}\n <span slot=\"tooltip-content\"> Breadcrumbs </span>\n <cds-overflow-menu-body size=\"sm\">\n ${repeat(\n this.hiddenItems ?? [],\n (item) => item.href ?? item.text,\n (item) => html`\n <cds-overflow-menu-item href=${item.href}>\n ${item.text}\n </cds-overflow-menu-item>\n `\n )}\n </cds-overflow-menu-body>\n </cds-overflow-menu>\n </cds-breadcrumb-item>\n ${repeat(\n this.breadcrumbsData?.slice(this.hiddenItems?.length ?? 0, -1) ?? [],\n (item) => item.href ?? item.text,\n (item) => html`\n <cds-breadcrumb-item>\n <cds-breadcrumb-link href=\"${item.href}\">\n ${item.text}\n </cds-breadcrumb-link>\n </cds-breadcrumb-item>\n `\n )}\n <c4p-page-header-title-breadcrumb data-fixed>\n <cds-breadcrumb-link is-currentpage=\"\">\n <c4p-truncated-text\n value=\"${this.title}\"\n lines=\"1\"\n autoalign\n ></c4p-truncated-text>\n </cds-breadcrumb-link>\n </c4p-page-header-title-breadcrumb>\n </cds-breadcrumb>\n `;\n }\n static styles = styles;\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'c4p-page-header-breadcrumbs-set': CDSPageHeaderBreadcrumbsSet;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwBA,MAAM,aAAa;AAQJ,IAAA,8BAAA,MAAM,oCAAoC,WAAW;;;qBAKtC,EAAE;yBAME,EAAE;eAM1B;;CAUR,oBAA0B;AACxB,QAAM,mBAAmB;AACzB,OAAK,MAAM,aAAa;;CAG1B,eAAe;AACb,MAAI,CAAC,KAAK,UACR;EAGF,MAAM,aADK,KAAK,YACO,cACrB,iBACD;AAED,MAAI,YAAY;AACd,cAAW,MAAM,UAAU;AAE3B,+BAA4B;IAC1B,MAAM,KAAK,WAAW,YAAY,cAChC,KACD;AACD,QAAI,IAAI;AACN,QAAG,MAAM,UAAU;AACnB,QAAG,MAAM,WAAW;;KAEtB;;AAGJ,OAAK,eAAe,WAAW;AAC7B,+BAA4B;AAC1B,SAAK,kBAAkB,sBAAsB;KAC3C,aAAa;KACb,WAAW,KAAK;KAChB,WAAW,cAA6B,MAAM;MAE5C,MAAM,eADc,KAAK,iBAAiB,UAAU,KAAK,IACxB,aAAa;AAC9C,WAAK,cACH,KAAK,iBAAiB,MAAM,GAAG,YAAY,IAAI,EAAE;;KAEtD,CAAC;KACF;IACF;AAIF,mBAAiB;AACf,QAAK,MAAM,aAAa;IACxB;;CAGJ,uBAAuB;AACrB,QAAM,sBAAsB;AAC5B,MAAI,KAAK,gBACP,MAAK,gBAAgB,YAAY;;CAIrC,SAAS;AACP,SAAO,IAAI;;;gBAGC,SAAS,GACd,GAAG,eAAe,MACpB,CAAC,CAAC;;;;;4BAKiB,KAAK,aAAa,UAAU,IAAI,SAAS,OAAO;;;cAG9D,WAAW,0BAA0B,EACrC,MAAM,QACP,CAAC,CAAC;;;gBAGC,OACA,KAAK,eAAe,EAAE,GACrB,SAAS,KAAK,QAAQ,KAAK,OAC3B,SAAS,IAAI;iDACmB,KAAK,KAAK;sBACrC,KAAK,KAAK;;kBAGjB,CAAC;;;;UAIN,OACA,KAAK,iBAAiB,MAAM,KAAK,aAAa,UAAU,GAAG,GAAG,IAAI,EAAE,GACnE,SAAS,KAAK,QAAQ,KAAK,OAC3B,SAAS,IAAI;;2CAEmB,KAAK,KAAK;kBACnC,KAAK,KAAK;;;YAInB,CAAC;;;;uBAIa,KAAK,MAAM;;;;;;;;;;gBAShBA;;;YAtIf,SAAS,EAAE,MAAM,OAAO,CAAC,CAAA,EAAA,4BAAA,WAAA,eAAA,KAAA,EAAA;YAMzB,SAAS;CAAE,MAAM;CAAO,WAAW;CAAoB,SAAS;CAAM,CAAC,CAAA,EAAA,4BAAA,WAAA,mBAAA,KAAA,EAAA;YAMvE,SAAS,EAAE,MAAM,QAAQ,CAAC,CAAA,EAAA,4BAAA,WAAA,SAAA,KAAA,EAAA;YAM1B,MAAM,IAAI,aAAa,CAAA,EAAA,4BAAA,WAAA,aAAA,KAAA,EAAA;0CAvBzB,cAAc,kCAAwC,CAAA,EAAA,4BAAA"}
1
+ {"version":3,"file":"page-header-breadcrumbs-set.js","names":["styles","customElement"],"sources":["../../../../src/components/page-header/page-header-breadcrumbs-set/page-header-breadcrumbs-set.ts"],"sourcesContent":["// cspell:words currentpage\n/**\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 } from 'lit';\nimport { property, query } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { repeat } from 'lit/directives/repeat.js';\nimport { carbonElement as customElement } from '@carbon/web-components/es/globals/decorators/carbon-element.js';\nimport '@carbon/web-components/es/components/breadcrumb/index.js';\nimport '@carbon/web-components/es/components/overflow-menu/index.js';\nimport { createOverflowHandler } from '../utils';\nimport OverflowMenuHorizontal16 from '@carbon/icons/es/overflow-menu--horizontal/16.js';\nimport { iconLoader } from '@carbon/web-components/es/globals/internal/icon-loader.js';\nimport '../../truncated-text';\nimport styles from './page-header-breadcrumbs-set.scss?lit';\nimport '../page-header-title-breadcrumb';\nimport { prefix } from '../../../globals/settings';\n\nconst blockClass = `${prefix}--page-header-breadcrumbs-set`;\n\ninterface Breadcrumb {\n text: string;\n href: string;\n}\n\n@customElement(`${prefix}-page-header-breadcrumbs-set`)\nexport default class CDSPageHeaderBreadcrumbsSet extends LitElement {\n /**\n * Hidden items that will be rendered in the overflow menu.\n */\n @property({ type: Array })\n hiddenItems: Breadcrumb[] = [];\n\n /**\n * The list of breadcrumbs.\n */\n @property({ type: Array, attribute: 'breadcrumbs-data', reflect: true })\n breadcrumbsData: Breadcrumb[] = [];\n\n /**\n * The page title to display in the title breadcrumb.\n */\n @property({ type: String })\n title = '';\n\n /**\n * Container holding all breadcrumbs and the overflow menu.\n */\n @query(`.${blockClass}`)\n private container!: HTMLElement;\n\n private overflowHandler: { disconnect: () => void } | undefined;\n\n connectedCallback(): void {\n super.connectedCallback();\n this.style.visibility = 'hidden';\n }\n\n firstUpdated() {\n if (!this.container) {\n return;\n }\n const sr = this.shadowRoot;\n const breadcrumb = sr?.querySelector(\n 'cds-breadcrumb'\n ) as HTMLElement | null;\n\n if (breadcrumb) {\n breadcrumb.style.display = 'block';\n\n requestAnimationFrame(() => {\n const ol = breadcrumb.shadowRoot?.querySelector(\n 'ol'\n ) as HTMLElement | null;\n if (ol) {\n ol.style.display = 'flex';\n ol.style.flexWrap = 'unset';\n }\n });\n }\n\n this.updateComplete.then(() => {\n requestAnimationFrame(() => {\n this.overflowHandler = createOverflowHandler({\n offsetValue: 14,\n container: this.container,\n onChange: (visibleItems: HTMLElement[], _) => {\n const totalItems = (this.breadcrumbsData?.length ?? 1) - 1; // Exclude last item\n const hiddenCount = totalItems - visibleItems.length;\n this.hiddenItems =\n this.breadcrumbsData?.slice(0, hiddenCount) ?? [];\n },\n });\n });\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\n disconnectedCallback() {\n super.disconnectedCallback();\n if (this.overflowHandler) {\n this.overflowHandler.disconnect();\n }\n }\n\n render() {\n return html`\n <cds-breadcrumb\n aria-label=\"breadcrumbs\"\n class=${classMap({\n [`${blockClass}`]: true,\n })}\n >\n <cds-breadcrumb-item\n data-fixed\n data-offset\n style=\"display: ${this.hiddenItems?.length >= 1 ? 'flex' : 'none'}\"\n >\n <cds-overflow-menu breadcrumb=\"\" align=\"bottom\">\n ${iconLoader(OverflowMenuHorizontal16, {\n slot: 'icon',\n })}\n <span slot=\"tooltip-content\"> Breadcrumbs </span>\n <cds-overflow-menu-body size=\"sm\">\n ${repeat(\n this.hiddenItems ?? [],\n (item) => item.href ?? item.text,\n (item) => html`\n <cds-overflow-menu-item href=${item.href}>\n ${item.text}\n </cds-overflow-menu-item>\n `\n )}\n </cds-overflow-menu-body>\n </cds-overflow-menu>\n </cds-breadcrumb-item>\n ${repeat(\n this.breadcrumbsData?.slice(this.hiddenItems?.length ?? 0, -1) ?? [],\n (item) => item.href ?? item.text,\n (item) => html`\n <cds-breadcrumb-item>\n <cds-breadcrumb-link href=\"${item.href}\">\n ${item.text}\n </cds-breadcrumb-link>\n </cds-breadcrumb-item>\n `\n )}\n <c4p-page-header-title-breadcrumb data-fixed>\n <cds-breadcrumb-link is-currentpage=\"\">\n <c4p-truncated-text\n value=\"${this.title}\"\n lines=\"1\"\n autoalign\n ></c4p-truncated-text>\n </cds-breadcrumb-link>\n </c4p-page-header-title-breadcrumb>\n </cds-breadcrumb>\n `;\n }\n static styles = styles;\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'c4p-page-header-breadcrumbs-set': CDSPageHeaderBreadcrumbsSet;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyBA,MAAM,aAAa;AAQJ,IAAA,8BAAA,MAAM,oCAAoC,WAAW;;;qBAKtC,EAAE;yBAME,EAAE;eAM1B;;CAUR,oBAA0B;AACxB,QAAM,mBAAmB;AACzB,OAAK,MAAM,aAAa;;CAG1B,eAAe;AACb,MAAI,CAAC,KAAK,UACR;EAGF,MAAM,aADK,KAAK,YACO,cACrB,iBACD;AAED,MAAI,YAAY;AACd,cAAW,MAAM,UAAU;AAE3B,+BAA4B;IAC1B,MAAM,KAAK,WAAW,YAAY,cAChC,KACD;AACD,QAAI,IAAI;AACN,QAAG,MAAM,UAAU;AACnB,QAAG,MAAM,WAAW;;KAEtB;;AAGJ,OAAK,eAAe,WAAW;AAC7B,+BAA4B;AAC1B,SAAK,kBAAkB,sBAAsB;KAC3C,aAAa;KACb,WAAW,KAAK;KAChB,WAAW,cAA6B,MAAM;MAE5C,MAAM,eADc,KAAK,iBAAiB,UAAU,KAAK,IACxB,aAAa;AAC9C,WAAK,cACH,KAAK,iBAAiB,MAAM,GAAG,YAAY,IAAI,EAAE;;KAEtD,CAAC;KACF;IACF;AAIF,mBAAiB;AACf,QAAK,MAAM,aAAa;IACxB;;CAGJ,uBAAuB;AACrB,QAAM,sBAAsB;AAC5B,MAAI,KAAK,gBACP,MAAK,gBAAgB,YAAY;;CAIrC,SAAS;AACP,SAAO,IAAI;;;gBAGC,SAAS,GACd,GAAG,eAAe,MACpB,CAAC,CAAC;;;;;4BAKiB,KAAK,aAAa,UAAU,IAAI,SAAS,OAAO;;;cAG9D,WAAW,0BAA0B,EACrC,MAAM,QACP,CAAC,CAAC;;;gBAGC,OACA,KAAK,eAAe,EAAE,GACrB,SAAS,KAAK,QAAQ,KAAK,OAC3B,SAAS,IAAI;iDACmB,KAAK,KAAK;sBACrC,KAAK,KAAK;;kBAGjB,CAAC;;;;UAIN,OACA,KAAK,iBAAiB,MAAM,KAAK,aAAa,UAAU,GAAG,GAAG,IAAI,EAAE,GACnE,SAAS,KAAK,QAAQ,KAAK,OAC3B,SAAS,IAAI;;2CAEmB,KAAK,KAAK;kBACnC,KAAK,KAAK;;;YAInB,CAAC;;;;uBAIa,KAAK,MAAM;;;;;;;;;;gBAShBA;;;YAtIf,SAAS,EAAE,MAAM,OAAO,CAAC,CAAA,EAAA,4BAAA,WAAA,eAAA,KAAA,EAAA;YAMzB,SAAS;CAAE,MAAM;CAAO,WAAW;CAAoB,SAAS;CAAM,CAAC,CAAA,EAAA,4BAAA,WAAA,mBAAA,KAAA,EAAA;YAMvE,SAAS,EAAE,MAAM,QAAQ,CAAC,CAAA,EAAA,4BAAA,WAAA,SAAA,KAAA,EAAA;YAM1B,MAAM,IAAI,aAAa,CAAA,EAAA,4BAAA,WAAA,aAAA,KAAA,EAAA;0CAvBzBC,cAAc,kCAAwC,CAAA,EAAA,4BAAA"}
@@ -17,8 +17,8 @@ import { carbonElement } from "@carbon/web-components/es/globals/decorators/carb
17
17
  import { iconLoader } from "@carbon/web-components/es/globals/internal/icon-loader.js";
18
18
  import Chevron20 from "@carbon/icons/es/chevron--up/20";
19
19
  import CDSButton from "@carbon/web-components/es/components/button/button";
20
- import ChevronDown20 from "@carbon/icons/es/chevron--down/20";
21
20
  import { consume } from "@lit/context";
21
+ import ChevronDown20 from "@carbon/icons/es/chevron--down/20";
22
22
  //#region src/components/page-header/page-header-scroller.ts
23
23
  /**
24
24
  * @license
@@ -1 +1 @@
1
- {"version":3,"file":"page-header-tags-set.d.ts","sourceRoot":"","sources":["../../../../src/components/page-header/page-header-tags-set/page-header-tags-set.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAiB,MAAM,KAAK,CAAC;AAEhD,OAAO,mDAAmD,CAAC;AAC3D,OAAO,oDAAoD,CAAC;AAC5D,OAAO,qDAAqD,CAAC;AAC7D,OAAO,sDAAsD,CAAC;AAE9D,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAOlC,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,UAAU;IAE1D,UAAU,EAAE,OAAO,EAAE,CAAM;IAG3B,QAAQ,EAAE,OAAO,EAAE,CAAM;IAGzB,OAAO,CAAC,SAAS,CAAe;IAGhC,OAAO,CAAC,MAAM,CAAe;IAG7B,OAAO,CAAC,aAAa,CAAS;IAG9B,OAAO,CAAC,SAAS,CAAS;IAG1B,OAAO,CAAC,YAAY,CAAM;IAE1B,OAAO,CAAC,eAAe,CAAyC;IAChE,OAAO,CAAC,cAAc,CAA6B;IAEnD,iBAAiB,IAAI,IAAI;IAKzB,YAAY;IAkBZ,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IAmB/C,oBAAoB;IAOpB,OAAO,CAAC,oBAAoB;IAyB5B,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,mBAAmB,CAIzB;IAEF,OAAO,CAAC,aAAa,CAenB;IAEF,MAAM;IA6HN,MAAM,CAAC,MAAM,MAAU;CACxB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,0BAA0B,EAAE,oBAAoB,CAAC;KAClD;CACF"}
1
+ {"version":3,"file":"page-header-tags-set.d.ts","sourceRoot":"","sources":["../../../../src/components/page-header/page-header-tags-set/page-header-tags-set.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAiB,MAAM,KAAK,CAAC;AAGhD,OAAO,mDAAmD,CAAC;AAC3D,OAAO,oDAAoD,CAAC;AAC5D,OAAO,qDAAqD,CAAC;AAC7D,OAAO,sDAAsD,CAAC;AAE9D,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAOlC,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,UAAU;IAE1D,UAAU,EAAE,OAAO,EAAE,CAAM;IAG3B,QAAQ,EAAE,OAAO,EAAE,CAAM;IAGzB,OAAO,CAAC,SAAS,CAAe;IAGhC,OAAO,CAAC,MAAM,CAAe;IAG7B,OAAO,CAAC,aAAa,CAAS;IAG9B,OAAO,CAAC,SAAS,CAAS;IAG1B,OAAO,CAAC,YAAY,CAAM;IAE1B,OAAO,CAAC,eAAe,CAAyC;IAChE,OAAO,CAAC,cAAc,CAA6B;IAEnD,iBAAiB,IAAI,IAAI;IAKzB,YAAY;IAkBZ,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IAmB/C,oBAAoB;IAOpB,OAAO,CAAC,oBAAoB;IAyB5B,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,mBAAmB,CAIzB;IAEF,OAAO,CAAC,aAAa,CAenB;IAEF,MAAM;IA6HN,MAAM,CAAC,MAAM,MAAU;CACxB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,0BAA0B,EAAE,oBAAoB,CAAC;KAClD;CACF"}
@@ -9,7 +9,8 @@ import "../../../globals/settings.js";
9
9
  import { __decorate } from "../../../_virtual/_@oxc-project_runtime@0.127.0/helpers/decorate.js";
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
- import { customElement, property, query, state } from "lit/decorators.js";
12
+ import { property, query, state } from "lit/decorators.js";
13
+ import { carbonElement } from "@carbon/web-components/es/globals/decorators/carbon-element.js";
13
14
  import "@carbon/web-components/es/components/modal/index.js";
14
15
  import "@carbon/web-components/es/components/link/index.js";
15
16
  import { createOverflowHandler } from "@carbon/utilities";
@@ -201,7 +202,7 @@ __decorate([query("[data-offset]")], CDSPageHeaderTagsSet.prototype, "offset", v
201
202
  __decorate([state()], CDSPageHeaderTagsSet.prototype, "isPopoverOpen", void 0);
202
203
  __decorate([state()], CDSPageHeaderTagsSet.prototype, "modalOpen", void 0);
203
204
  __decorate([state()], CDSPageHeaderTagsSet.prototype, "searchString", void 0);
204
- CDSPageHeaderTagsSet = __decorate([customElement(`c4p-page-header-tags-set`)], CDSPageHeaderTagsSet);
205
+ CDSPageHeaderTagsSet = __decorate([carbonElement(`c4p-page-header-tags-set`)], CDSPageHeaderTagsSet);
205
206
  var page_header_tags_set_default = CDSPageHeaderTagsSet;
206
207
  //#endregion
207
208
  export { page_header_tags_set_default as default };
@@ -1 +1 @@
1
- {"version":3,"file":"page-header-tags-set.js","names":["styles"],"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 { customElement, property, query, state } from 'lit/decorators.js';\nimport '@carbon/web-components/es/components/tag/index.js';\nimport '@carbon/web-components/es/components/link/index.js';\nimport '@carbon/web-components/es/components/modal/index.js';\nimport '@carbon/web-components/es/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-dismissible-tag\n @cds-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-dismissible-tag>`\n : html`<cds-tag type=${tag.type} size=${tag.size}\n >${tag?.text}</cds-tag\n >`}\n </span>\n `\n )}\n <span data-offset ?data-hidden=${this.hiddenTags.length === 0}>\n <cds-popover\n ?open=${this.isPopoverOpen}\n ?highContrast=${true}\n align=${document.dir === 'rtl' ? 'bottom-left' : 'bottom-right'}\n >\n <cds-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-operational-tag>\n <cds-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-dismissible-tag\n @cds-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-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-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-link>\n `\n : nothing}\n </div>\n </cds-popover-content>\n </cds-popover>\n </span>\n </div>\n ${this.hiddenTags.length > 10\n ? html`<cds-modal\n ?open=${this.modalOpen}\n size=\"sm\"\n @cds-modal-closed=${(_: CustomEvent) => (this.modalOpen = false)}\n >\n <cds-modal-header>\n <cds-modal-close-button></cds-modal-close-button>\n <cds-modal-heading>All tags</cds-modal-heading>\n <cds-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-search-input=${(e: CustomEvent) =>\n (this.searchString = e.detail.value)}\n ></cds-search>\n </cds-modal-header>\n <cds-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-dismissible-tag\n @cds-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-dismissible-tag>`\n : html`<cds-tag type=${tag.type} size=${tag.size}\n >${tag?.text}</cds-tag\n >`\n )}\n </div>\n </cds-modal-body>\n </cds-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/components/tag/index.js';\nimport '@carbon/web-components/es/components/link/index.js';\nimport '@carbon/web-components/es/components/modal/index.js';\nimport '@carbon/web-components/es/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-dismissible-tag\n @cds-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-dismissible-tag>`\n : html`<cds-tag type=${tag.type} size=${tag.size}\n >${tag?.text}</cds-tag\n >`}\n </span>\n `\n )}\n <span data-offset ?data-hidden=${this.hiddenTags.length === 0}>\n <cds-popover\n ?open=${this.isPopoverOpen}\n ?highContrast=${true}\n align=${document.dir === 'rtl' ? 'bottom-left' : 'bottom-right'}\n >\n <cds-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-operational-tag>\n <cds-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-dismissible-tag\n @cds-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-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-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-link>\n `\n : nothing}\n </div>\n </cds-popover-content>\n </cds-popover>\n </span>\n </div>\n ${this.hiddenTags.length > 10\n ? html`<cds-modal\n ?open=${this.modalOpen}\n size=\"sm\"\n @cds-modal-closed=${(_: CustomEvent) => (this.modalOpen = false)}\n >\n <cds-modal-header>\n <cds-modal-close-button></cds-modal-close-button>\n <cds-modal-heading>All tags</cds-modal-heading>\n <cds-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-search-input=${(e: CustomEvent) =>\n (this.searchString = e.detail.value)}\n ></cds-search>\n </cds-modal-header>\n <cds-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-dismissible-tag\n @cds-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-dismissible-tag>`\n : html`<cds-tag type=${tag.type} size=${tag.size}\n >${tag?.text}</cds-tag\n >`\n )}\n </div>\n </cds-modal-body>\n </cds-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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"}