@carbon/ibm-products-web-components 0.48.0 → 0.49.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/custom-elements.json +55 -17
- package/es/components/page-header/_story-assets/overflowHandler.d.ts.map +1 -1
- package/es/components/page-header/_story-assets/overflowHandler.js +1 -1
- package/es/components/page-header/_story-assets/overflowHandler.js.map +1 -1
- package/es/components/page-header/context.d.ts +3 -0
- package/es/components/page-header/context.d.ts.map +1 -1
- package/es/components/page-header/context.js +4 -1
- package/es/components/page-header/context.js.map +1 -1
- package/es/components/page-header/page-header-actions-set/page-header-actions-set.d.ts +4 -0
- package/es/components/page-header/page-header-actions-set/page-header-actions-set.d.ts.map +1 -1
- package/es/components/page-header/page-header-actions-set/page-header-actions-set.js +22 -13
- package/es/components/page-header/page-header-actions-set/page-header-actions-set.js.map +1 -1
- package/es/components/page-header/page-header-breadcrumb.d.ts +1 -1
- package/es/components/page-header/page-header-breadcrumb.d.ts.map +1 -1
- package/es/components/page-header/page-header-breadcrumb.js +4 -2
- package/es/components/page-header/page-header-breadcrumb.js.map +1 -1
- package/es/components/page-header/page-header-breadcrumbs-set/page-header-breadcrumbs-set.d.ts +11 -2
- package/es/components/page-header/page-header-breadcrumbs-set/page-header-breadcrumbs-set.d.ts.map +1 -1
- package/es/components/page-header/page-header-breadcrumbs-set/page-header-breadcrumbs-set.js +37 -21
- package/es/components/page-header/page-header-breadcrumbs-set/page-header-breadcrumbs-set.js.map +1 -1
- package/es/components/page-header/page-header-content-text.d.ts +8 -0
- package/es/components/page-header/page-header-content-text.d.ts.map +1 -1
- package/es/components/page-header/page-header-content-text.js +21 -5
- package/es/components/page-header/page-header-content-text.js.map +1 -1
- package/es/components/page-header/page-header-content.d.ts +13 -0
- package/es/components/page-header/page-header-content.d.ts.map +1 -1
- package/es/components/page-header/page-header-content.js +37 -14
- package/es/components/page-header/page-header-content.js.map +1 -1
- package/es/components/page-header/page-header-hero-image.d.ts +3 -0
- package/es/components/page-header/page-header-hero-image.d.ts.map +1 -1
- package/es/components/page-header/page-header-hero-image.js +3 -0
- package/es/components/page-header/page-header-hero-image.js.map +1 -1
- package/es/components/page-header/page-header-scroller.d.ts +1 -0
- package/es/components/page-header/page-header-scroller.d.ts.map +1 -1
- package/es/components/page-header/page-header-scroller.js +7 -3
- package/es/components/page-header/page-header-scroller.js.map +1 -1
- package/es/components/page-header/page-header-tabs.d.ts +1 -0
- package/es/components/page-header/page-header-tabs.d.ts.map +1 -1
- package/es/components/page-header/page-header-tabs.js +24 -10
- package/es/components/page-header/page-header-tabs.js.map +1 -1
- package/es/components/page-header/page-header-tags-set/page-header-tags-set.d.ts +2 -1
- package/es/components/page-header/page-header-tags-set/page-header-tags-set.d.ts.map +1 -1
- package/es/components/page-header/page-header-tags-set/page-header-tags-set.js +38 -17
- package/es/components/page-header/page-header-tags-set/page-header-tags-set.js.map +1 -1
- package/es/components/page-header/page-header-tags-set/page-header-tags-set.scss.js +1 -1
- package/es/components/page-header/page-header-tags-set/page-header-tags-set.scss.js.map +1 -1
- package/es/components/page-header/page-header-tags-set/utils.d.ts +0 -8
- package/es/components/page-header/page-header-tags-set/utils.d.ts.map +1 -1
- package/es/components/page-header/page-header-tags-set/utils.js +0 -34
- package/es/components/page-header/page-header-title-breadcrumb.d.ts.map +1 -1
- package/es/components/page-header/page-header-title-breadcrumb.js +8 -5
- package/es/components/page-header/page-header-title-breadcrumb.js.map +1 -1
- package/es/components/page-header/page-header.d.ts +15 -0
- package/es/components/page-header/page-header.d.ts.map +1 -1
- package/es/components/page-header/page-header.js +80 -34
- package/es/components/page-header/page-header.js.map +1 -1
- package/es/components/page-header/page-header.scss.js +1 -1
- package/es/components/page-header/page-header.scss.js.map +1 -1
- package/es/components/tearsheet/tearsheet.scss.js +1 -1
- package/es/components/tearsheet-preview/tearsheet-header-content.scss.js +1 -1
- package/es/components/tearsheet-preview/tearsheet-header-content.scss.js.map +1 -1
- package/es/components/tearsheet-preview/tearsheet-header.scss.js +1 -1
- package/es/components/tearsheet-preview/tearsheet-header.scss.js.map +1 -1
- package/es/components/tearsheet-preview/tearsheet-navigation-bar.scss.js +1 -1
- package/es/components/tearsheet-preview/tearsheet.scss.js +1 -1
- package/es/components/tearsheet-preview/tearsheet.scss.js.map +1 -1
- package/es/ibm-products-web-components/package.js +1 -1
- package/es-custom/components/page-header/_story-assets/overflowHandler.js +1 -1
- package/es-custom/components/page-header/_story-assets/overflowHandler.js.map +1 -1
- package/es-custom/components/page-header/context.js +4 -1
- package/es-custom/components/page-header/context.js.map +1 -1
- package/es-custom/components/page-header/page-header-actions-set/page-header-actions-set.js +22 -13
- package/es-custom/components/page-header/page-header-actions-set/page-header-actions-set.js.map +1 -1
- package/es-custom/components/page-header/page-header-breadcrumb.js +4 -2
- package/es-custom/components/page-header/page-header-breadcrumb.js.map +1 -1
- package/es-custom/components/page-header/page-header-breadcrumbs-set/page-header-breadcrumbs-set.js +37 -21
- package/es-custom/components/page-header/page-header-breadcrumbs-set/page-header-breadcrumbs-set.js.map +1 -1
- package/es-custom/components/page-header/page-header-content-text.js +21 -5
- package/es-custom/components/page-header/page-header-content-text.js.map +1 -1
- package/es-custom/components/page-header/page-header-content.js +37 -14
- package/es-custom/components/page-header/page-header-content.js.map +1 -1
- package/es-custom/components/page-header/page-header-hero-image.js +3 -0
- package/es-custom/components/page-header/page-header-hero-image.js.map +1 -1
- package/es-custom/components/page-header/page-header-scroller.js +7 -3
- package/es-custom/components/page-header/page-header-scroller.js.map +1 -1
- package/es-custom/components/page-header/page-header-tabs.js +24 -10
- package/es-custom/components/page-header/page-header-tabs.js.map +1 -1
- package/es-custom/components/page-header/page-header-tags-set/page-header-tags-set.js +38 -17
- package/es-custom/components/page-header/page-header-tags-set/page-header-tags-set.js.map +1 -1
- package/es-custom/components/page-header/page-header-tags-set/page-header-tags-set.scss.js +1 -1
- package/es-custom/components/page-header/page-header-tags-set/page-header-tags-set.scss.js.map +1 -1
- package/es-custom/components/page-header/page-header-tags-set/utils.js +0 -34
- package/es-custom/components/page-header/page-header-title-breadcrumb.js +8 -5
- package/es-custom/components/page-header/page-header-title-breadcrumb.js.map +1 -1
- package/es-custom/components/page-header/page-header.js +80 -34
- package/es-custom/components/page-header/page-header.js.map +1 -1
- package/es-custom/components/page-header/page-header.scss.js +1 -1
- package/es-custom/components/page-header/page-header.scss.js.map +1 -1
- package/es-custom/components/tearsheet/tearsheet.scss.js +1 -1
- package/es-custom/components/tearsheet-preview/tearsheet-header-content.scss.js +1 -1
- package/es-custom/components/tearsheet-preview/tearsheet-header-content.scss.js.map +1 -1
- package/es-custom/components/tearsheet-preview/tearsheet-header.scss.js +1 -1
- package/es-custom/components/tearsheet-preview/tearsheet-header.scss.js.map +1 -1
- package/es-custom/components/tearsheet-preview/tearsheet-navigation-bar.scss.js +1 -1
- package/es-custom/components/tearsheet-preview/tearsheet.scss.js +1 -1
- package/es-custom/components/tearsheet-preview/tearsheet.scss.js.map +1 -1
- package/es-custom/ibm-products-web-components/package.js +1 -1
- package/lib/components/page-header/_story-assets/overflowHandler.d.ts.map +1 -1
- package/lib/components/page-header/context.d.ts +3 -0
- package/lib/components/page-header/context.d.ts.map +1 -1
- package/lib/components/page-header/page-header-actions-set/page-header-actions-set.d.ts +4 -0
- package/lib/components/page-header/page-header-actions-set/page-header-actions-set.d.ts.map +1 -1
- package/lib/components/page-header/page-header-breadcrumb.d.ts +1 -1
- package/lib/components/page-header/page-header-breadcrumb.d.ts.map +1 -1
- package/lib/components/page-header/page-header-breadcrumbs-set/page-header-breadcrumbs-set.d.ts +11 -2
- package/lib/components/page-header/page-header-breadcrumbs-set/page-header-breadcrumbs-set.d.ts.map +1 -1
- package/lib/components/page-header/page-header-content-text.d.ts +8 -0
- package/lib/components/page-header/page-header-content-text.d.ts.map +1 -1
- package/lib/components/page-header/page-header-content.d.ts +13 -0
- package/lib/components/page-header/page-header-content.d.ts.map +1 -1
- package/lib/components/page-header/page-header-hero-image.d.ts +3 -0
- package/lib/components/page-header/page-header-hero-image.d.ts.map +1 -1
- package/lib/components/page-header/page-header-scroller.d.ts +1 -0
- package/lib/components/page-header/page-header-scroller.d.ts.map +1 -1
- package/lib/components/page-header/page-header-tabs.d.ts +1 -0
- package/lib/components/page-header/page-header-tabs.d.ts.map +1 -1
- package/lib/components/page-header/page-header-tags-set/page-header-tags-set.d.ts +2 -1
- package/lib/components/page-header/page-header-tags-set/page-header-tags-set.d.ts.map +1 -1
- package/lib/components/page-header/page-header-tags-set/utils.d.ts +0 -8
- package/lib/components/page-header/page-header-tags-set/utils.d.ts.map +1 -1
- package/lib/components/page-header/page-header-title-breadcrumb.d.ts.map +1 -1
- package/lib/components/page-header/page-header.d.ts +15 -0
- package/lib/components/page-header/page-header.d.ts.map +1 -1
- package/package.json +4 -4
- package/scss/components/page-header/page-header-tags-set/page-header-tags-set.scss +16 -4
- package/scss/components/page-header/page-header.scss +31 -17
- package/scss/components/tearsheet-preview/tearsheet-header-content.scss +32 -6
- package/scss/components/tearsheet-preview/tearsheet-header.scss +4 -0
- package/scss/components/tearsheet-preview/tearsheet.scss +20 -1
- package/telemetry.yml +4 -1
- package/es/components/page-header/page-header-tags-set/utils.js.map +0 -1
- package/es-custom/components/page-header/page-header-tags-set/utils.js.map +0 -1
package/es-custom/components/page-header/page-header-breadcrumbs-set/page-header-breadcrumbs-set.js
CHANGED
|
@@ -13,7 +13,7 @@ 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 { property, query } from "lit/decorators.js";
|
|
16
|
+
import { property, query, state } from "lit/decorators.js";
|
|
17
17
|
import { carbonElement } from "@carbon/web-components/es/globals/decorators/carbon-element.js";
|
|
18
18
|
import { iconLoader } from "@carbon/web-components/es/globals/internal/icon-loader.js";
|
|
19
19
|
import '@carbon/web-components/es-custom/components/breadcrumb/index.js';
|
|
@@ -33,12 +33,19 @@ const blockClass = `c4p--page-header-breadcrumbs-set`;
|
|
|
33
33
|
let CDSPageHeaderBreadcrumbsSet = class CDSPageHeaderBreadcrumbsSet extends LitElement {
|
|
34
34
|
constructor(..._args) {
|
|
35
35
|
super(..._args);
|
|
36
|
-
this.
|
|
36
|
+
this._hiddenItems = [];
|
|
37
37
|
this.breadcrumbsData = [];
|
|
38
38
|
this.title = "";
|
|
39
|
+
this._hasBreadcrumbContent = false;
|
|
39
40
|
this.breadcrumbAriaLabel = "breadcrumbs";
|
|
40
41
|
this.overflowAriaLabel = "More breadcrumbs";
|
|
41
42
|
}
|
|
43
|
+
/**
|
|
44
|
+
* Handles slotchange for the breadcrumb-content slot.
|
|
45
|
+
*/
|
|
46
|
+
_handleBreadcrumbContentSlotChange({ target }) {
|
|
47
|
+
this._hasBreadcrumbContent = target.assignedNodes({ flatten: true }).length > 0;
|
|
48
|
+
}
|
|
42
49
|
connectedCallback() {
|
|
43
50
|
super.connectedCallback();
|
|
44
51
|
this.style.visibility = "hidden";
|
|
@@ -61,9 +68,12 @@ let CDSPageHeaderBreadcrumbsSet = class CDSPageHeaderBreadcrumbsSet extends LitE
|
|
|
61
68
|
this.overflowHandler = createOverflowHandler({
|
|
62
69
|
offsetValue: 14,
|
|
63
70
|
container: this.container,
|
|
64
|
-
onChange: (
|
|
65
|
-
const
|
|
66
|
-
this.
|
|
71
|
+
onChange: (_visibleItems, hiddenItems) => {
|
|
72
|
+
const navigableItems = Array.from(this.container.children).filter((el) => !el.hasAttribute("data-fixed") && !el.hasAttribute("data-offset"));
|
|
73
|
+
this._hiddenItems = hiddenItems.map((el) => {
|
|
74
|
+
const idx = navigableItems.indexOf(el);
|
|
75
|
+
return idx !== -1 ? this.breadcrumbsData?.[idx] : void 0;
|
|
76
|
+
}).filter((item) => item !== void 0);
|
|
67
77
|
}
|
|
68
78
|
});
|
|
69
79
|
});
|
|
@@ -81,11 +91,19 @@ let CDSPageHeaderBreadcrumbsSet = class CDSPageHeaderBreadcrumbsSet extends LitE
|
|
|
81
91
|
<cds-custom-breadcrumb
|
|
82
92
|
aria-label="${this.breadcrumbAriaLabel}"
|
|
83
93
|
class=${classMap({ [`${blockClass}`]: true })}
|
|
94
|
+
?no-trailing-slash="${!this.title}"
|
|
84
95
|
>
|
|
96
|
+
${repeat(this.breadcrumbsData ?? [], (item) => item.href ?? item.text, (item) => html`
|
|
97
|
+
<cds-custom-breadcrumb-item>
|
|
98
|
+
<cds-custom-breadcrumb-link href="${item.href}">
|
|
99
|
+
${item.text}
|
|
100
|
+
</cds-custom-breadcrumb-link>
|
|
101
|
+
</cds-custom-breadcrumb-item>
|
|
102
|
+
`)}
|
|
85
103
|
<cds-custom-breadcrumb-item
|
|
86
104
|
data-fixed
|
|
87
105
|
data-offset
|
|
88
|
-
style="display: ${this.
|
|
106
|
+
style="display: ${this._hiddenItems?.length >= 1 ? "flex" : "none"}"
|
|
89
107
|
>
|
|
90
108
|
<cds-custom-overflow-menu
|
|
91
109
|
breadcrumb=""
|
|
@@ -93,9 +111,9 @@ let CDSPageHeaderBreadcrumbsSet = class CDSPageHeaderBreadcrumbsSet extends LitE
|
|
|
93
111
|
aria-label="${this.overflowAriaLabel}"
|
|
94
112
|
>
|
|
95
113
|
${iconLoader(OverflowMenuHorizontal16, { slot: "icon" })}
|
|
96
|
-
<span slot="tooltip-content"
|
|
114
|
+
<span slot="tooltip-content">${this.overflowAriaLabel}</span>
|
|
97
115
|
<cds-custom-overflow-menu-body size="sm">
|
|
98
|
-
${repeat(this.
|
|
116
|
+
${repeat(this._hiddenItems ?? [], (item) => item.href ?? item.text, (item) => html`
|
|
99
117
|
<cds-custom-overflow-menu-item href=${item.href}>
|
|
100
118
|
${item.text}
|
|
101
119
|
</cds-custom-overflow-menu-item>
|
|
@@ -103,20 +121,17 @@ let CDSPageHeaderBreadcrumbsSet = class CDSPageHeaderBreadcrumbsSet extends LitE
|
|
|
103
121
|
</cds-custom-overflow-menu-body>
|
|
104
122
|
</cds-custom-overflow-menu>
|
|
105
123
|
</cds-custom-breadcrumb-item>
|
|
106
|
-
${repeat(this.breadcrumbsData?.slice(this.hiddenItems?.length ?? 0, -1) ?? [], (item) => item.href ?? item.text, (item) => html`
|
|
107
|
-
<cds-custom-breadcrumb-item>
|
|
108
|
-
<cds-custom-breadcrumb-link href="${item.href}">
|
|
109
|
-
${item.text}
|
|
110
|
-
</cds-custom-breadcrumb-link>
|
|
111
|
-
</cds-custom-breadcrumb-item>
|
|
112
|
-
`)}
|
|
113
124
|
<c4p-page-header-title-breadcrumb data-fixed>
|
|
114
125
|
<cds-custom-breadcrumb-link is-currentpage="">
|
|
115
|
-
<
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
126
|
+
<slot
|
|
127
|
+
name="breadcrumb-content"
|
|
128
|
+
@slotchange=${this._handleBreadcrumbContentSlotChange}
|
|
129
|
+
></slot>
|
|
130
|
+
${!this._hasBreadcrumbContent ? html`<c4p-truncated-text
|
|
131
|
+
value="${this.title}"
|
|
132
|
+
lines="1"
|
|
133
|
+
autoalign
|
|
134
|
+
></c4p-truncated-text>` : null}
|
|
120
135
|
</cds-custom-breadcrumb-link>
|
|
121
136
|
</c4p-page-header-title-breadcrumb>
|
|
122
137
|
</cds-custom-breadcrumb>
|
|
@@ -126,13 +141,14 @@ let CDSPageHeaderBreadcrumbsSet = class CDSPageHeaderBreadcrumbsSet extends LitE
|
|
|
126
141
|
this.styles = page_header_breadcrumbs_set_default$1;
|
|
127
142
|
}
|
|
128
143
|
};
|
|
129
|
-
__decorate([
|
|
144
|
+
__decorate([state()], CDSPageHeaderBreadcrumbsSet.prototype, "_hiddenItems", void 0);
|
|
130
145
|
__decorate([property({
|
|
131
146
|
type: Array,
|
|
132
147
|
attribute: "breadcrumbs-data",
|
|
133
148
|
reflect: true
|
|
134
149
|
})], CDSPageHeaderBreadcrumbsSet.prototype, "breadcrumbsData", void 0);
|
|
135
150
|
__decorate([property({ type: String })], CDSPageHeaderBreadcrumbsSet.prototype, "title", void 0);
|
|
151
|
+
__decorate([state()], CDSPageHeaderBreadcrumbsSet.prototype, "_hasBreadcrumbContent", void 0);
|
|
136
152
|
__decorate([property({
|
|
137
153
|
type: String,
|
|
138
154
|
attribute: "breadcrumb-aria-label",
|
|
@@ -1 +1 @@
|
|
|
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-custom/components/breadcrumb/index.js';\nimport '@carbon/web-components/es-custom/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 * Aria label for the breadcrumb navigation.\n */\n @property({ type: String, attribute: 'breadcrumb-aria-label', reflect: true })\n breadcrumbAriaLabel = 'breadcrumbs';\n\n /**\n * Aria label for the breadcrumb overflow menu button.\n */\n @property({ type: String, attribute: 'overflow-aria-label', reflect: true })\n overflowAriaLabel = 'More breadcrumbs';\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-custom-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-custom-breadcrumb\n aria-label=\"${this.breadcrumbAriaLabel}\"\n class=${classMap({\n [`${blockClass}`]: true,\n })}\n >\n <cds-custom-breadcrumb-item\n data-fixed\n data-offset\n style=\"display: ${this.hiddenItems?.length >= 1 ? 'flex' : 'none'}\"\n >\n <cds-custom-overflow-menu\n breadcrumb=\"\"\n align=\"bottom\"\n aria-label=\"${this.overflowAriaLabel}\"\n >\n ${iconLoader(OverflowMenuHorizontal16, {\n slot: 'icon',\n })}\n <span slot=\"tooltip-content\"> Breadcrumbs </span>\n <cds-custom-overflow-menu-body size=\"sm\">\n ${repeat(\n this.hiddenItems ?? [],\n (item) => item.href ?? item.text,\n (item) => html`\n <cds-custom-overflow-menu-item href=${item.href}>\n ${item.text}\n </cds-custom-overflow-menu-item>\n `\n )}\n </cds-custom-overflow-menu-body>\n </cds-custom-overflow-menu>\n </cds-custom-breadcrumb-item>\n ${repeat(\n this.breadcrumbsData?.slice(this.hiddenItems?.length ?? 0, -1) ?? [],\n (item) => item.href ?? item.text,\n (item) => html`\n <cds-custom-breadcrumb-item>\n <cds-custom-breadcrumb-link href=\"${item.href}\">\n ${item.text}\n </cds-custom-breadcrumb-link>\n </cds-custom-breadcrumb-item>\n `\n )}\n <c4p-page-header-title-breadcrumb data-fixed>\n <cds-custom-breadcrumb-link is-currentpage=\"\">\n <c4p-truncated-text\n value=\"${this.title}\"\n lines=\"1\"\n autoalign\n ></c4p-truncated-text>\n </cds-custom-breadcrumb-link>\n </c4p-page-header-title-breadcrumb>\n </cds-custom-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;6BAMc;2BAMF;;CAUpB,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;;sBAEO,KAAK,oBAAoB;gBAC/B,SAAS,GACd,GAAG,eAAe,MACpB,CAAC,CAAC;;;;;4BAKiB,KAAK,aAAa,UAAU,IAAI,SAAS,OAAO;;;;;0BAKlD,KAAK,kBAAkB;;cAEnC,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;;;YAtJf,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,SAAS;CAAE,MAAM;CAAQ,WAAW;CAAyB,SAAS;CAAM,CAAC,CAAA,EAAA,4BAAA,WAAA,uBAAA,KAAA,EAAA;YAM7E,SAAS;CAAE,MAAM;CAAQ,WAAW;CAAuB,SAAS;CAAM,CAAC,CAAA,EAAA,4BAAA,WAAA,qBAAA,KAAA,EAAA;YAM3E,MAAM,IAAI,aAAa,CAAA,EAAA,4BAAA,WAAA,aAAA,KAAA,EAAA;0CAnCzBC,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, state } 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-custom/components/breadcrumb/index.js';\nimport '@carbon/web-components/es-custom/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 * Data items currently collapsed into the overflow menu.\n * Derived from the DOM nodes the overflow handler marks as hidden.\n */\n @state()\n private _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 * Whether custom breadcrumb-content slot content is present.\n */\n @state()\n private _hasBreadcrumbContent = false;\n\n /**\n * Aria label for the breadcrumb navigation.\n */\n @property({ type: String, attribute: 'breadcrumb-aria-label', reflect: true })\n breadcrumbAriaLabel = 'breadcrumbs';\n\n /**\n * Aria label for the breadcrumb overflow menu button.\n */\n @property({ type: String, attribute: 'overflow-aria-label', reflect: true })\n overflowAriaLabel = 'More breadcrumbs';\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 /**\n * Handles slotchange for the breadcrumb-content slot.\n */\n protected _handleBreadcrumbContentSlotChange({ target }: Event) {\n this._hasBreadcrumbContent =\n (target as HTMLSlotElement).assignedNodes({ flatten: true }).length > 0;\n }\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-custom-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: (\n _visibleItems: HTMLElement[],\n hiddenItems: HTMLElement[]\n ) => {\n // All breadcrumb items stay in the DOM at all times — the overflow\n // handler hides them via the data-hidden attribute (caught by CSS).\n // Here we only need to know *which* data items are hidden so the\n // overflow menu can list them. Map each hidden DOM node back to its\n // breadcrumbsData entry by position among the non-fixed, non-offset\n // children, matching the React approach where hidden DOM nodes are\n // passed directly to the overflow menu render prop.\n const navigableItems = Array.from(this.container.children).filter(\n (el) =>\n !el.hasAttribute('data-fixed') &&\n !el.hasAttribute('data-offset')\n ) as HTMLElement[];\n this._hiddenItems = hiddenItems\n .map((el) => {\n const idx = navigableItems.indexOf(el);\n return idx !== -1 ? this.breadcrumbsData?.[idx] : undefined;\n })\n .filter((item): item is Breadcrumb => item !== undefined);\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-custom-breadcrumb\n aria-label=\"${this.breadcrumbAriaLabel}\"\n class=${classMap({\n [`${blockClass}`]: true,\n })}\n ?no-trailing-slash=\"${!this.title}\"\n >\n ${repeat(\n this.breadcrumbsData ?? [],\n (item) => item.href ?? item.text,\n (item) => html`\n <cds-custom-breadcrumb-item>\n <cds-custom-breadcrumb-link href=\"${item.href}\">\n ${item.text}\n </cds-custom-breadcrumb-link>\n </cds-custom-breadcrumb-item>\n `\n )}\n <cds-custom-breadcrumb-item\n data-fixed\n data-offset\n style=\"display: ${this._hiddenItems?.length >= 1 ? 'flex' : 'none'}\"\n >\n <cds-custom-overflow-menu\n breadcrumb=\"\"\n align=\"bottom\"\n aria-label=\"${this.overflowAriaLabel}\"\n >\n ${iconLoader(OverflowMenuHorizontal16, {\n slot: 'icon',\n })}\n <span slot=\"tooltip-content\">${this.overflowAriaLabel}</span>\n <cds-custom-overflow-menu-body size=\"sm\">\n ${repeat(\n this._hiddenItems ?? [],\n (item) => item.href ?? item.text,\n (item) => html`\n <cds-custom-overflow-menu-item href=${item.href}>\n ${item.text}\n </cds-custom-overflow-menu-item>\n `\n )}\n </cds-custom-overflow-menu-body>\n </cds-custom-overflow-menu>\n </cds-custom-breadcrumb-item>\n <c4p-page-header-title-breadcrumb data-fixed>\n <cds-custom-breadcrumb-link is-currentpage=\"\">\n <slot\n name=\"breadcrumb-content\"\n @slotchange=${this._handleBreadcrumbContentSlotChange}\n ></slot>\n ${!this._hasBreadcrumbContent\n ? html`<c4p-truncated-text\n value=\"${this.title}\"\n lines=\"1\"\n autoalign\n ></c4p-truncated-text>`\n : null}\n </cds-custom-breadcrumb-link>\n </c4p-page-header-title-breadcrumb>\n </cds-custom-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;;;sBAM7B,EAAE;yBAMP,EAAE;eAM1B;+BAMwB;6BAMV;2BAMF;;;;;CAapB,mCAA6C,EAAE,UAAiB;AAC9D,OAAK,wBACF,OAA2B,cAAc,EAAE,SAAS,MAAM,CAAC,CAAC,SAAS;;CAG1E,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,WACE,eACA,gBACG;MAQH,MAAM,iBAAiB,MAAM,KAAK,KAAK,UAAU,SAAS,CAAC,QACxD,OACC,CAAC,GAAG,aAAa,aAAa,IAC9B,CAAC,GAAG,aAAa,cAAc,CAClC;AACD,WAAK,eAAe,YACjB,KAAK,OAAO;OACX,MAAM,MAAM,eAAe,QAAQ,GAAG;AACtC,cAAO,QAAQ,KAAK,KAAK,kBAAkB,OAAO,KAAA;QAClD,CACD,QAAQ,SAA6B,SAAS,KAAA,EAAU;;KAE9D,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;;sBAEO,KAAK,oBAAoB;gBAC/B,SAAS,GACd,GAAG,eAAe,MACpB,CAAC,CAAC;8BACmB,CAAC,KAAK,MAAM;;UAEhC,OACA,KAAK,mBAAmB,EAAE,GACzB,SAAS,KAAK,QAAQ,KAAK,OAC3B,SAAS,IAAI;;2CAEmB,KAAK,KAAK;kBACnC,KAAK,KAAK;;;YAInB,CAAC;;;;4BAIkB,KAAK,cAAc,UAAU,IAAI,SAAS,OAAO;;;;;0BAKnD,KAAK,kBAAkB;;cAEnC,WAAW,0BAA0B,EACrC,MAAM,QACP,CAAC,CAAC;2CAC4B,KAAK,kBAAkB;;gBAElD,OACA,KAAK,gBAAgB,EAAE,GACtB,SAAS,KAAK,QAAQ,KAAK,OAC3B,SAAS,IAAI;iDACmB,KAAK,KAAK;sBACrC,KAAK,KAAK;;kBAGjB,CAAC;;;;;;;;4BAQY,KAAK,mCAAmC;;cAEtD,CAAC,KAAK,wBACJ,IAAI;2BACO,KAAK,MAAM;;;0CAItB,KAAK;;;;;;;gBAMHA;;;YA5Lf,OAAO,CAAA,EAAA,4BAAA,WAAA,gBAAA,KAAA,EAAA;YAMP,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,OAAO,CAAA,EAAA,4BAAA,WAAA,yBAAA,KAAA,EAAA;YAMP,SAAS;CAAE,MAAM;CAAQ,WAAW;CAAyB,SAAS;CAAM,CAAC,CAAA,EAAA,4BAAA,WAAA,uBAAA,KAAA,EAAA;YAM7E,SAAS;CAAE,MAAM;CAAQ,WAAW;CAAuB,SAAS;CAAM,CAAC,CAAA,EAAA,4BAAA,WAAA,qBAAA,KAAA,EAAA;YAM3E,MAAM,IAAI,aAAa,CAAA,EAAA,4BAAA,WAAA,aAAA,KAAA,EAAA;0CA1CzBC,cAAc,kCAAwC,CAAA,EAAA,4BAAA"}
|
|
@@ -9,7 +9,7 @@ import "../../globals/settings.js";
|
|
|
9
9
|
import { __decorate } from "../../_virtual/_@oxc-project_runtime@0.127.0/helpers/decorate.js";
|
|
10
10
|
import page_header_default from "./page-header.scss.js";
|
|
11
11
|
import { LitElement, html } from "lit";
|
|
12
|
-
import { property } from "lit/decorators.js";
|
|
12
|
+
import { property, state } from "lit/decorators.js";
|
|
13
13
|
import { carbonElement } from "@carbon/web-components/es/globals/decorators/carbon-element.js";
|
|
14
14
|
import { html as html$1, unsafeStatic } from "lit/static-html.js";
|
|
15
15
|
//#region src/components/page-header/page-header-content-text.ts
|
|
@@ -30,14 +30,29 @@ let CDSPageHeaderContentText = class CDSPageHeaderContentText extends LitElement
|
|
|
30
30
|
super(..._args);
|
|
31
31
|
this.subtitle = "";
|
|
32
32
|
this.subtitleLevel = "h2";
|
|
33
|
+
this._hasSubtitleSlotContent = false;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Handles `slotchange` for the subtitle-content slot.
|
|
37
|
+
*/
|
|
38
|
+
_handleSubtitleSlotChange({ target }) {
|
|
39
|
+
this._hasSubtitleSlotContent = target.assignedNodes({ flatten: true }).length > 0;
|
|
33
40
|
}
|
|
34
41
|
render() {
|
|
35
|
-
const { subtitle, subtitleLevel } = this;
|
|
42
|
+
const { subtitle, subtitleLevel, _hasSubtitleSlotContent: hasSubtitleSlotContent } = this;
|
|
36
43
|
const subtitleTag = unsafeStatic(subtitleLevel);
|
|
37
44
|
return html`
|
|
38
|
-
${subtitle
|
|
39
|
-
|
|
40
|
-
|
|
45
|
+
${subtitle || hasSubtitleSlotContent ? html$1`<${subtitleTag} class="${"c4p"}--page-header__content__subtitle">
|
|
46
|
+
<slot
|
|
47
|
+
name="subtitle-content"
|
|
48
|
+
@slotchange=${this._handleSubtitleSlotChange}
|
|
49
|
+
></slot>
|
|
50
|
+
${!hasSubtitleSlotContent && subtitle ? subtitle : null}
|
|
51
|
+
</${subtitleTag}>` : html`<slot
|
|
52
|
+
name="subtitle-content"
|
|
53
|
+
@slotchange=${this._handleSubtitleSlotChange}
|
|
54
|
+
style="display:none"
|
|
55
|
+
></slot>`}
|
|
41
56
|
<slot></slot>
|
|
42
57
|
`;
|
|
43
58
|
}
|
|
@@ -50,6 +65,7 @@ __decorate([property({
|
|
|
50
65
|
type: String,
|
|
51
66
|
attribute: "subtitle-level"
|
|
52
67
|
})], CDSPageHeaderContentText.prototype, "subtitleLevel", void 0);
|
|
68
|
+
__decorate([state()], CDSPageHeaderContentText.prototype, "_hasSubtitleSlotContent", void 0);
|
|
53
69
|
CDSPageHeaderContentText = __decorate([carbonElement(`c4p-page-header-content-text`)], CDSPageHeaderContentText);
|
|
54
70
|
var page_header_content_text_default = CDSPageHeaderContentText;
|
|
55
71
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-header-content-text.js","names":["styles","customElement"],"sources":["../../../src/components/page-header/page-header-content-text.ts"],"sourcesContent":["/**\n * @license\n *\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\nimport { LitElement, html } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { unsafeStatic, html as staticHtml } from 'lit/static-html.js';\nimport { prefix } from '../../globals/settings';\nimport styles from './page-header.scss?lit';\nimport { carbonElement as customElement } from '@carbon/web-components/es/globals/decorators/carbon-element.js';\n\n/**\n * Page header Content Text.\n * @element c4p-page-header-content-text\n */\n@customElement(`${prefix}-page-header-content-text`)\nclass CDSPageHeaderContentText extends LitElement {\n /**\n * Subtitle text of the page-header-content\n */\n @property()\n subtitle = '';\n\n /**\n * Heading level for the subtitle (h2-h6).\n */\n @property({ type: String, attribute: 'subtitle-level' })\n subtitleLevel: 'h2' | 'h3' | 'h4' | 'h5' | 'h6' = 'h2';\n\n render() {\n const {
|
|
1
|
+
{"version":3,"file":"page-header-content-text.js","names":["styles","customElement"],"sources":["../../../src/components/page-header/page-header-content-text.ts"],"sourcesContent":["/**\n * @license\n *\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\nimport { LitElement, html } from 'lit';\nimport { property, state } from 'lit/decorators.js';\nimport { unsafeStatic, html as staticHtml } from 'lit/static-html.js';\nimport { prefix } from '../../globals/settings';\nimport styles from './page-header.scss?lit';\nimport { carbonElement as customElement } from '@carbon/web-components/es/globals/decorators/carbon-element.js';\n\n/**\n * Page header Content Text.\n * @element c4p-page-header-content-text\n */\n@customElement(`${prefix}-page-header-content-text`)\nclass CDSPageHeaderContentText extends LitElement {\n /**\n * Subtitle text of the page-header-content\n */\n @property()\n subtitle = '';\n\n /**\n * Heading level for the subtitle (h2-h6).\n */\n @property({ type: String, attribute: 'subtitle-level' })\n subtitleLevel: 'h2' | 'h3' | 'h4' | 'h5' | 'h6' = 'h2';\n\n /**\n * Whether the `subtitle-content` slot has content assigned to it.\n */\n @state()\n private _hasSubtitleSlotContent = false;\n\n /**\n * Handles `slotchange` for the subtitle-content slot.\n */\n protected _handleSubtitleSlotChange({ target }: Event) {\n this._hasSubtitleSlotContent =\n (target as HTMLSlotElement).assignedNodes({ flatten: true }).length > 0;\n }\n\n render() {\n const {\n subtitle,\n subtitleLevel,\n _hasSubtitleSlotContent: hasSubtitleSlotContent,\n } = this;\n const subtitleTag = unsafeStatic(subtitleLevel);\n\n const showSubtitle = subtitle || hasSubtitleSlotContent;\n\n return html`\n ${showSubtitle\n ? staticHtml`<${subtitleTag} class=\"${prefix}--page-header__content__subtitle\">\n <slot\n name=\"subtitle-content\"\n @slotchange=${this._handleSubtitleSlotChange}\n ></slot>\n ${!hasSubtitleSlotContent && subtitle ? subtitle : null}\n </${subtitleTag}>`\n : html`<slot\n name=\"subtitle-content\"\n @slotchange=${this._handleSubtitleSlotChange}\n style=\"display:none\"\n ></slot>`}\n <slot></slot>\n `;\n }\n\n static styles = styles;\n}\n\nexport default CDSPageHeaderContentText;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAoBA,IAAA,2BAAA,MACM,iCAAiC,WAAW;;;kBAKrC;uBAMuC;iCAMhB;;;;;CAKlC,0BAAoC,EAAE,UAAiB;AACrD,OAAK,0BACF,OAA2B,cAAc,EAAE,SAAS,MAAM,CAAC,CAAC,SAAS;;CAG1E,SAAS;EACP,MAAM,EACJ,UACA,eACA,yBAAyB,2BACvB;EACJ,MAAM,cAAc,aAAa,cAAc;AAI/C,SAAO,IAAI;QAFU,YAAY,yBAI3B,MAAU,IAAI,YAAY,UAAA,MAAiB;;;4BAGzB,KAAK,0BAA0B;;cAE7C,CAAC,0BAA0B,WAAW,WAAW,KAAK;cACtD,YAAY,KAChB,IAAI;;0BAEY,KAAK,0BAA0B;;oBAErC;;;;;gBAKFA;;;YAnDf,UAAU,CAAA,EAAA,yBAAA,WAAA,YAAA,KAAA,EAAA;YAMV,SAAS;CAAE,MAAM;CAAQ,WAAW;CAAkB,CAAC,CAAA,EAAA,yBAAA,WAAA,iBAAA,KAAA,EAAA;YAMvD,OAAO,CAAA,EAAA,yBAAA,WAAA,2BAAA,KAAA,EAAA;uCAjBTC,cAAc,+BAAqC,CAAA,EAAA,yBAAA;AA2DpD,IAAA,mCAAe"}
|
|
@@ -11,7 +11,7 @@ import page_header_default from "./page-header.scss.js";
|
|
|
11
11
|
import { pageHeaderContext } from "./context.js";
|
|
12
12
|
import { classMap } from "lit/directives/class-map.js";
|
|
13
13
|
import { LitElement, html } from "lit";
|
|
14
|
-
import { property, state } from "lit/decorators.js";
|
|
14
|
+
import { property, query, state } from "lit/decorators.js";
|
|
15
15
|
import { carbonElement } from "@carbon/web-components/es/globals/decorators/carbon-element.js";
|
|
16
16
|
import '@carbon/web-components/es-custom/components/tooltip/index.js';
|
|
17
17
|
import { consume } from "@lit/context";
|
|
@@ -33,6 +33,7 @@ let CDSPageHeaderContent = class CDSPageHeaderContent extends LitElement {
|
|
|
33
33
|
constructor(..._args) {
|
|
34
34
|
super(..._args);
|
|
35
35
|
this._hasContextualActions = false;
|
|
36
|
+
this._hasTitleSlotContent = false;
|
|
36
37
|
this.title = "";
|
|
37
38
|
this.titleLevel = "h1";
|
|
38
39
|
this._hasEllipsisApplied = false;
|
|
@@ -42,11 +43,24 @@ let CDSPageHeaderContent = class CDSPageHeaderContent extends LitElement {
|
|
|
42
43
|
* Handles `slotchange` event.
|
|
43
44
|
*/
|
|
44
45
|
_handleSlotChange({ target }) {
|
|
45
|
-
this._hasContextualActions =
|
|
46
|
+
this._hasContextualActions = target.assignedNodes().length > 0;
|
|
46
47
|
if (this._hasContextualActions) this.setAttribute("contextual-actions", "true");
|
|
47
48
|
else this.removeAttribute("contextual-actions");
|
|
48
49
|
this.requestUpdate();
|
|
49
50
|
}
|
|
51
|
+
/**
|
|
52
|
+
* Handles `slotchange` for the title slot.
|
|
53
|
+
*/
|
|
54
|
+
_handleTitleSlotChange({ target }) {
|
|
55
|
+
this._hasTitleSlotContent = target.assignedNodes({ flatten: true }).length > 0;
|
|
56
|
+
}
|
|
57
|
+
firstUpdated() {
|
|
58
|
+
this.dispatchEvent(new CustomEvent(`c4p-page-header-content-actions-registered`, {
|
|
59
|
+
bubbles: true,
|
|
60
|
+
composed: true,
|
|
61
|
+
detail: { actionsEl: this._pageActionsEl }
|
|
62
|
+
}));
|
|
63
|
+
}
|
|
50
64
|
updated() {
|
|
51
65
|
const textContainer = this.shadowRoot?.querySelector(`.c4p--page-header__content__title`);
|
|
52
66
|
if (!textContainer || this._hasEllipsisApplied === true) return;
|
|
@@ -54,9 +68,11 @@ let CDSPageHeaderContent = class CDSPageHeaderContent extends LitElement {
|
|
|
54
68
|
}
|
|
55
69
|
render() {
|
|
56
70
|
const { title, withinGrid, _hasEllipsisApplied: hasEllipsisApplied, _handleSlotChange: handleSlotChange, context } = this;
|
|
57
|
-
const { contentActionsClipped } = context ?? {};
|
|
71
|
+
const { contentActionsClipped, fullWidthGrid, narrowGrid } = context ?? {};
|
|
58
72
|
const gridClasses = classMap({
|
|
59
73
|
[`cds-custom--css-grid`]: !withinGrid,
|
|
74
|
+
[`cds-custom--css-grid--full-width`]: !withinGrid && !!fullWidthGrid,
|
|
75
|
+
[`cds-custom--css-grid--narrow`]: !withinGrid && !!narrowGrid,
|
|
60
76
|
[`cds-custom--subgrid cds-custom--subgrid--wide`]: withinGrid
|
|
61
77
|
});
|
|
62
78
|
const contentActionClasses = classMap({
|
|
@@ -64,6 +80,7 @@ let CDSPageHeaderContent = class CDSPageHeaderContent extends LitElement {
|
|
|
64
80
|
[`c4p--page-header__content__page-actions--clipped`]: contentActionsClipped
|
|
65
81
|
});
|
|
66
82
|
const titleTag = unsafeStatic(this.titleLevel);
|
|
83
|
+
const { _hasTitleSlotContent: hasTitleSlotContent } = this;
|
|
67
84
|
return html` <div class="${gridClasses}">
|
|
68
85
|
<div
|
|
69
86
|
class="${"cds-custom"}--sm:col-span-4 ${"cds-custom"}--md:col-span-8 ${"cds-custom"}--lg:col-span-16 ${"cds-custom"}--css-grid-column"
|
|
@@ -72,18 +89,22 @@ let CDSPageHeaderContent = class CDSPageHeaderContent extends LitElement {
|
|
|
72
89
|
<div class="${"c4p"}--page-header__content__start">
|
|
73
90
|
<div class="${"c4p"}--page-header__content__title-container">
|
|
74
91
|
<slot name="icon"></slot>
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
92
|
+
<slot
|
|
93
|
+
name="title"
|
|
94
|
+
@slotchange=${this._handleTitleSlotChange}
|
|
95
|
+
></slot>
|
|
96
|
+
${!hasTitleSlotContent ? hasEllipsisApplied ? html`
|
|
97
|
+
<cds-custom-definition-tooltip>
|
|
98
|
+
<span slot="definition">${title}</span>
|
|
99
|
+
${html$1`<${titleTag} class="${"c4p"}--page-header__content__title">
|
|
100
|
+
${title}
|
|
101
|
+
</${titleTag}>`}
|
|
102
|
+
</cds-custom-definition-tooltip>
|
|
103
|
+
` : html$1`
|
|
104
|
+
<${titleTag} class="${"c4p"}--page-header__content__title">
|
|
79
105
|
${title}
|
|
80
|
-
</${titleTag}
|
|
81
|
-
|
|
82
|
-
` : html$1`
|
|
83
|
-
<${titleTag} class="${"c4p"}--page-header__content__title">
|
|
84
|
-
${title}
|
|
85
|
-
</${titleTag}>
|
|
86
|
-
`}
|
|
106
|
+
</${titleTag}>
|
|
107
|
+
` : null}
|
|
87
108
|
</div>
|
|
88
109
|
<slot
|
|
89
110
|
name="contextual-actions"
|
|
@@ -102,6 +123,7 @@ let CDSPageHeaderContent = class CDSPageHeaderContent extends LitElement {
|
|
|
102
123
|
this.styles = page_header_default;
|
|
103
124
|
}
|
|
104
125
|
};
|
|
126
|
+
__decorate([state()], CDSPageHeaderContent.prototype, "_hasTitleSlotContent", void 0);
|
|
105
127
|
__decorate([property()], CDSPageHeaderContent.prototype, "title", void 0);
|
|
106
128
|
__decorate([property({
|
|
107
129
|
type: String,
|
|
@@ -116,6 +138,7 @@ __decorate([consume({
|
|
|
116
138
|
context: pageHeaderContext,
|
|
117
139
|
subscribe: true
|
|
118
140
|
})], CDSPageHeaderContent.prototype, "context", void 0);
|
|
141
|
+
__decorate([query(`.c4p--page-header__content__page-actions`)], CDSPageHeaderContent.prototype, "_pageActionsEl", void 0);
|
|
119
142
|
CDSPageHeaderContent = __decorate([carbonElement(`c4p-page-header-content`)], CDSPageHeaderContent);
|
|
120
143
|
var page_header_content_default = CDSPageHeaderContent;
|
|
121
144
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-header-content.js","names":["styles","customElement"],"sources":["../../../src/components/page-header/page-header-content.ts"],"sourcesContent":["/**\n * @license\n *\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\nimport { LitElement, html } from 'lit';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { property, state } from 'lit/decorators.js';\nimport { consume } from '@lit/context';\nimport { unsafeStatic, html as staticHtml } from 'lit/static-html.js';\nimport { prefix, carbonPrefix } from '../../globals/settings';\nimport '@carbon/web-components/es-custom/components/tooltip/index.js';\nimport styles from './page-header.scss?lit';\nimport { carbonElement as customElement } from '@carbon/web-components/es/globals/decorators/carbon-element.js';\nimport { pageHeaderContext } from './context';\n\n/**\n * Page header content.\n * @element c4p-page-header-content\n */\n@customElement(`${prefix}-page-header-content`)\nclass CDSPageHeaderContent extends LitElement {\n /**\n * Set to `true` if there are contextual actions\n */\n private _hasContextualActions = false;\n\n /**\n * Handles `slotchange` event.\n */\n protected _handleSlotChange({ target }: Event) {\n this._hasContextualActions
|
|
1
|
+
{"version":3,"file":"page-header-content.js","names":["styles","customElement"],"sources":["../../../src/components/page-header/page-header-content.ts"],"sourcesContent":["/**\n * @license\n *\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\nimport { LitElement, html } from 'lit';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { property, query, state } from 'lit/decorators.js';\nimport { consume } from '@lit/context';\nimport { unsafeStatic, html as staticHtml } from 'lit/static-html.js';\nimport { prefix, carbonPrefix } from '../../globals/settings';\nimport '@carbon/web-components/es-custom/components/tooltip/index.js';\nimport styles from './page-header.scss?lit';\nimport { carbonElement as customElement } from '@carbon/web-components/es/globals/decorators/carbon-element.js';\nimport { pageHeaderContext } from './context';\n\n/**\n * Page header content.\n * @element c4p-page-header-content\n */\n@customElement(`${prefix}-page-header-content`)\nclass CDSPageHeaderContent extends LitElement {\n /**\n * Set to `true` if there are contextual actions\n */\n private _hasContextualActions = false;\n\n /**\n * Set to `true` if there is custom title slot content\n */\n @state()\n private _hasTitleSlotContent = false;\n\n /**\n * Handles `slotchange` event.\n */\n protected _handleSlotChange({ target }: Event) {\n this._hasContextualActions =\n (target as HTMLSlotElement).assignedNodes().length > 0;\n if (this._hasContextualActions) {\n this.setAttribute('contextual-actions', 'true');\n } else {\n this.removeAttribute('contextual-actions');\n }\n this.requestUpdate();\n }\n\n /**\n * Handles `slotchange` for the title slot.\n */\n protected _handleTitleSlotChange({ target }: Event) {\n this._hasTitleSlotContent =\n (target as HTMLSlotElement).assignedNodes({ flatten: true }).length > 0;\n }\n\n /**\n * Title text of the page-header-content\n */\n @property()\n title = '';\n\n /**\n * Heading level for the title (h1-h6).\n */\n @property({ type: String, attribute: 'title-level' })\n titleLevel: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' = 'h1';\n\n /**\n * Set to `true` if the tag text has ellipsis applied\n */\n @state()\n _hasEllipsisApplied = false;\n\n /**\n * Set to `true` if the breadcrumb bar is sitting within a grid\n * (ie. when used in tandem with page-header-hero-image)\n */\n @property({ attribute: 'within-grid', type: Boolean })\n withinGrid = false;\n\n @consume({ context: pageHeaderContext, subscribe: true })\n context;\n\n /**\n * The page-actions wrapper element. Observed by the root for contentActionsClipped.\n */\n @query(`.${prefix}--page-header__content__page-actions`)\n private _pageActionsEl!: HTMLElement;\n\n firstUpdated() {\n // Notify the root page-header of the page-actions container element so it\n // can observe it with IntersectionObserver instead of the full content element.\n this.dispatchEvent(\n new CustomEvent(`${prefix}-page-header-content-actions-registered`, {\n bubbles: true,\n composed: true,\n detail: { actionsEl: this._pageActionsEl },\n })\n );\n }\n\n updated() {\n const textContainer = this.shadowRoot?.querySelector(\n `.${prefix}--page-header__content__title`\n );\n\n if (!textContainer || this._hasEllipsisApplied === true) {\n return;\n }\n\n this._hasEllipsisApplied =\n textContainer.scrollHeight > textContainer.clientHeight;\n }\n\n render() {\n const {\n title,\n withinGrid,\n _hasEllipsisApplied: hasEllipsisApplied,\n _handleSlotChange: handleSlotChange,\n context,\n } = this;\n\n const { contentActionsClipped, fullWidthGrid, narrowGrid } = context ?? {};\n\n const gridClasses = classMap({\n [`${carbonPrefix}--css-grid`]: !withinGrid,\n [`${carbonPrefix}--css-grid--full-width`]: !withinGrid && !!fullWidthGrid,\n [`${carbonPrefix}--css-grid--narrow`]: !withinGrid && !!narrowGrid,\n [`${carbonPrefix}--subgrid ${carbonPrefix}--subgrid--wide`]: withinGrid,\n });\n\n const contentActionClasses = classMap({\n [`${prefix}--page-header__content__page-actions`]: true,\n [`${prefix}--page-header__content__page-actions--clipped`]:\n contentActionsClipped,\n });\n\n const titleTag = unsafeStatic(this.titleLevel);\n const { _hasTitleSlotContent: hasTitleSlotContent } = this;\n\n return html` <div class=\"${gridClasses}\">\n <div\n class=\"${carbonPrefix}--sm:col-span-4 ${carbonPrefix}--md:col-span-8 ${carbonPrefix}--lg:col-span-16 ${carbonPrefix}--css-grid-column\"\n >\n <div class=\"${prefix}--page-header__content__title-wrapper\">\n <div class=\"${prefix}--page-header__content__start\">\n <div class=\"${prefix}--page-header__content__title-container\">\n <slot name=\"icon\"></slot>\n <slot\n name=\"title\"\n @slotchange=${this._handleTitleSlotChange}\n ></slot>\n ${!hasTitleSlotContent\n ? hasEllipsisApplied\n ? html`\n <cds-custom-definition-tooltip>\n <span slot=\"definition\">${title}</span>\n ${staticHtml`<${titleTag} class=\"${prefix}--page-header__content__title\">\n ${title}\n </${titleTag}>`}\n </cds-custom-definition-tooltip>\n `\n : staticHtml`\n <${titleTag} class=\"${prefix}--page-header__content__title\">\n ${title}\n </${titleTag}>\n `\n : null}\n </div>\n <slot\n name=\"contextual-actions\"\n @slotchange=${handleSlotChange}\n ></slot>\n </div>\n <div class=\"${contentActionClasses}\">\n <slot name=\"page-actions\"></slot>\n </div>\n </div>\n <slot></slot>\n </div>\n </div>`;\n }\n\n static styles = styles;\n}\n\nexport default CDSPageHeaderContent;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwBA,IAAA,uBAAA,MACM,6BAA6B,WAAW;;;+BAIZ;8BAMD;eA4BvB;oBAM8C;6BAMhC;oBAOT;;;;;CA1Cb,kBAA4B,EAAE,UAAiB;AAC7C,OAAK,wBACF,OAA2B,eAAe,CAAC,SAAS;AACvD,MAAI,KAAK,sBACP,MAAK,aAAa,sBAAsB,OAAO;MAE/C,MAAK,gBAAgB,qBAAqB;AAE5C,OAAK,eAAe;;;;;CAMtB,uBAAiC,EAAE,UAAiB;AAClD,OAAK,uBACF,OAA2B,cAAc,EAAE,SAAS,MAAM,CAAC,CAAC,SAAS;;CAqC1E,eAAe;AAGb,OAAK,cACH,IAAI,YAAY,8CAAoD;GAClE,SAAS;GACT,UAAU;GACV,QAAQ,EAAE,WAAW,KAAK,gBAAgB;GAC3C,CAAC,CACH;;CAGH,UAAU;EACR,MAAM,gBAAgB,KAAK,YAAY,cACrC,oCACD;AAED,MAAI,CAAC,iBAAiB,KAAK,wBAAwB,KACjD;AAGF,OAAK,sBACH,cAAc,eAAe,cAAc;;CAG/C,SAAS;EACP,MAAM,EACJ,OACA,YACA,qBAAqB,oBACrB,mBAAmB,kBACnB,YACE;EAEJ,MAAM,EAAE,uBAAuB,eAAe,eAAe,WAAW,EAAE;EAE1E,MAAM,cAAc,SAAS;IAC1B,kBAA8B,CAAC;IAC/B,8BAA0C,CAAC,cAAc,CAAC,CAAC;IAC3D,0BAAsC,CAAC,cAAc,CAAC,CAAC;IACvD,oCAA4D;GAC9D,CAAC;EAEF,MAAM,uBAAuB,SAAS;IACnC,4CAAkD;IAClD,qDACC;GACH,CAAC;EAEF,MAAM,WAAW,aAAa,KAAK,WAAW;EAC9C,MAAM,EAAE,sBAAsB,wBAAwB;AAEtD,SAAO,IAAI,gBAAgB,YAAY;;uBAEb,kBAAA,MAA+B,kBAAA,MAA+B,mBAAA,MAAgC;;4BAE/F;8BACE;gCACE;;;;8BAIH,KAAK,uBAAuB;;gBAE1C,CAAC,sBACC,qBACE,IAAI;;kDAE0B,MAAM;0BAC9B,MAAU,IAAI,SAAS,UAAA,MAAiB;gCAClC,MAAM;gCACN,SAAS,GAAG;;wBAGxB,MAAU;yBACL,SAAS,UAAA,MAAiB;0BACzB,MAAM;0BACN,SAAS;wBAEjB,KAAK;;;;4BAIK,iBAAiB;;;wBAGrB,qBAAqB;;;;;;;;;gBAS3BA;;;YA1Jf,OAAO,CAAA,EAAA,qBAAA,WAAA,wBAAA,KAAA,EAAA;YA4BP,UAAU,CAAA,EAAA,qBAAA,WAAA,SAAA,KAAA,EAAA;YAMV,SAAS;CAAE,MAAM;CAAQ,WAAW;CAAe,CAAC,CAAA,EAAA,qBAAA,WAAA,cAAA,KAAA,EAAA;YAMpD,OAAO,CAAA,EAAA,qBAAA,WAAA,uBAAA,KAAA,EAAA;YAOP,SAAS;CAAE,WAAW;CAAe,MAAM;CAAS,CAAC,CAAA,EAAA,qBAAA,WAAA,cAAA,KAAA,EAAA;YAGrD,QAAQ;CAAE,SAAS;CAAmB,WAAW;CAAM,CAAC,CAAA,EAAA,qBAAA,WAAA,WAAA,KAAA,EAAA;YAMxD,MAAM,2CAAiD,CAAA,EAAA,qBAAA,WAAA,kBAAA,KAAA,EAAA;mCAlEzDC,cAAc,0BAAgC,CAAA,EAAA,qBAAA;AAuK/C,IAAA,8BAAe"}
|
|
@@ -23,6 +23,9 @@ import { carbonElement } from "@carbon/web-components/es/globals/decorators/carb
|
|
|
23
23
|
/**
|
|
24
24
|
* Page header Hero Image.
|
|
25
25
|
* @element c4p-page-header-hero-image
|
|
26
|
+
* @slot - Slotted content (typically an `<img>`). Slotted images must include
|
|
27
|
+
* a descriptive `alt` attribute for informative images, or `alt=""` for
|
|
28
|
+
* decorative images, to meet WCAG 2.2 SC 1.1.1 (Non-text Content).
|
|
26
29
|
*/
|
|
27
30
|
let CDSPageHeaderHeroImage = class CDSPageHeaderHeroImage extends LitElement {
|
|
28
31
|
constructor(..._args) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-header-hero-image.js","names":["styles","customElement"],"sources":["../../../src/components/page-header/page-header-hero-image.ts"],"sourcesContent":["/**\n * @license\n *\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\nimport { LitElement, html } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { prefix } from '../../globals/settings';\nimport styles from './page-header.scss?lit';\nimport { carbonElement as customElement } from '@carbon/web-components/es/globals/decorators/carbon-element.js';\n\n/**\n * Page header Hero Image.\n * @element c4p-page-header-hero-image\n */\n@customElement(`${prefix}-page-header-hero-image`)\nclass CDSPageHeaderHeroImage extends LitElement {\n /**\n * Specify how the image should fit within the container.\n * - 'cover': Image fills container, may crop edges (default for hero images)\n * - 'contain': Image fits within container, may show empty space\n * - 'fill': Image stretches to fill container\n * - 'none': Image uses its natural size\n */\n @property({ type: String, attribute: 'object-fit', reflect: true })\n objectFit: 'cover' | 'contain' | 'fill' | 'none' = 'cover';\n\n render() {\n const blockClass = `${prefix}--page-header`;\n const classes = `${blockClass}__hero-image ${blockClass}__hero-image--object-fit-${this.objectFit}`;\n\n return html`\n <div\n class=\"${classes}\"\n style=\"--object-fit: ${this.objectFit}; --object-position: center\"\n >\n <slot></slot>\n </div>\n `;\n }\n\n static styles = styles;\n}\n\nexport default CDSPageHeaderHeroImage;\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"page-header-hero-image.js","names":["styles","customElement"],"sources":["../../../src/components/page-header/page-header-hero-image.ts"],"sourcesContent":["/**\n * @license\n *\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\nimport { LitElement, html } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { prefix } from '../../globals/settings';\nimport styles from './page-header.scss?lit';\nimport { carbonElement as customElement } from '@carbon/web-components/es/globals/decorators/carbon-element.js';\n\n/**\n * Page header Hero Image.\n * @element c4p-page-header-hero-image\n * @slot - Slotted content (typically an `<img>`). Slotted images must include\n * a descriptive `alt` attribute for informative images, or `alt=\"\"` for\n * decorative images, to meet WCAG 2.2 SC 1.1.1 (Non-text Content).\n */\n@customElement(`${prefix}-page-header-hero-image`)\nclass CDSPageHeaderHeroImage extends LitElement {\n /**\n * Specify how the image should fit within the container.\n * - 'cover': Image fills container, may crop edges (default for hero images)\n * - 'contain': Image fits within container, may show empty space\n * - 'fill': Image stretches to fill container\n * - 'none': Image uses its natural size\n */\n @property({ type: String, attribute: 'object-fit', reflect: true })\n objectFit: 'cover' | 'contain' | 'fill' | 'none' = 'cover';\n\n render() {\n const blockClass = `${prefix}--page-header`;\n const classes = `${blockClass}__hero-image ${blockClass}__hero-image--object-fit-${this.objectFit}`;\n\n return html`\n <div\n class=\"${classes}\"\n style=\"--object-fit: ${this.objectFit}; --object-position: center\"\n >\n <slot></slot>\n </div>\n `;\n }\n\n static styles = styles;\n}\n\nexport default CDSPageHeaderHeroImage;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsBA,IAAA,yBAAA,MACM,+BAA+B,WAAW;;;mBASK;;CAEnD,SAAS;EACP,MAAM,aAAa;AAGnB,SAAO,IAAI;;iBAEE,GAJM,WAAW,eAAe,WAAW,2BAA2B,KAAK,YAInE;+BACM,KAAK,UAAU;;;;;;;gBAO5BA;;;YAjBf,SAAS;CAAE,MAAM;CAAQ,WAAW;CAAc,SAAS;CAAM,CAAC,CAAA,EAAA,uBAAA,WAAA,aAAA,KAAA,EAAA;qCATpEC,cAAc,6BAAmC,CAAA,EAAA,uBAAA;AA6BlD,IAAA,iCAAe"}
|
|
@@ -7,11 +7,12 @@
|
|
|
7
7
|
|
|
8
8
|
import "../../globals/settings.js";
|
|
9
9
|
import { __decorate } from "../../_virtual/_@oxc-project_runtime@0.127.0/helpers/decorate.js";
|
|
10
|
+
import page_header_default from "./page-header.scss.js";
|
|
10
11
|
import { pageHeaderContext } from "./context.js";
|
|
11
12
|
import { scrollableAncestorInner } from "./utils.js";
|
|
12
13
|
import { classMap } from "lit/directives/class-map.js";
|
|
13
14
|
import { html } from "lit";
|
|
14
|
-
import { property } from "lit/decorators.js";
|
|
15
|
+
import { property, state } from "lit/decorators.js";
|
|
15
16
|
import '@carbon/web-components/es-custom/components/button/index.js';
|
|
16
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";
|
|
@@ -81,7 +82,7 @@ let PageHeaderScroller = class PageHeaderScroller extends CDSButton {
|
|
|
81
82
|
[`c4p--page-header-scroller-collapsed`]: !!context?.fullyCollapsed,
|
|
82
83
|
[`c4p--page-header-scroller-icon`]: true
|
|
83
84
|
})}
|
|
84
|
-
|
|
85
|
+
label=${context?.fullyCollapsed ? this.expandText : this.collapseText}
|
|
85
86
|
@click=${this._handleScroller}
|
|
86
87
|
>
|
|
87
88
|
${context?.fullyCollapsed ? html`${iconLoader(ChevronDown20, { slot: "icon" })}` : html`${iconLoader(Chevron20, { slot: "icon" })}`}
|
|
@@ -90,6 +91,9 @@ let PageHeaderScroller = class PageHeaderScroller extends CDSButton {
|
|
|
90
91
|
</span>
|
|
91
92
|
</cds-custom-icon-button>`;
|
|
92
93
|
}
|
|
94
|
+
static {
|
|
95
|
+
this.styles = page_header_default;
|
|
96
|
+
}
|
|
93
97
|
};
|
|
94
98
|
__decorate([property({
|
|
95
99
|
reflect: true,
|
|
@@ -128,7 +132,7 @@ __decorate([property({ reflect: true })], PageHeaderScroller.prototype, "size",
|
|
|
128
132
|
__decorate([consume({
|
|
129
133
|
context: pageHeaderContext,
|
|
130
134
|
subscribe: true
|
|
131
|
-
})], PageHeaderScroller.prototype, "context", void 0);
|
|
135
|
+
}), state()], PageHeaderScroller.prototype, "context", void 0);
|
|
132
136
|
PageHeaderScroller = __decorate([carbonElement(`c4p-page-header-scroller`)], PageHeaderScroller);
|
|
133
137
|
//#endregion
|
|
134
138
|
export { PageHeaderScroller };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-header-scroller.js","names":["customElement"],"sources":["../../../src/components/page-header/page-header-scroller.ts"],"sourcesContent":["/**\n * @license\n *\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\nimport { html } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { carbonElement as customElement } from '@carbon/web-components/es/globals/decorators/carbon-element.js';\nimport Chevron20 from '@carbon/icons/es/chevron--up/20';\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-custom/components/button/index.js';\nimport { pageHeaderContext } from './context';\nimport { consume } from '@lit/context';\nimport CDSButton from '@carbon/web-components/es/components/button/button';\nimport { prefix } from '../../globals/settings';\nimport { scrollableAncestorInner } from './utils';\n\n/**\n * Page header Scroller button\n * @element c4p-page-header-scroller\n */\n@customElement(`${prefix}-page-header-scroller`)\nexport class PageHeaderScroller extends CDSButton {\n /**\n * Specify how the trigger should align with the tooltip\n */\n @property({ reflect: true, type: String })\n align = 'top';\n\n /**\n * Specify whether a auto align functionality should be applied\n */\n @property({ type: Boolean, reflect: true })\n autoalign = true;\n\n /**\n * Determines whether the tooltip should close when inner content is activated (click, Enter or Space)\n */\n @property({ attribute: 'close-on-activation', reflect: true, type: Boolean })\n closeOnActivation = true;\n\n /**\n * Specify the collapse text for the scroller button\n */\n @property({ reflect: true, type: String })\n collapseText = 'Collapse';\n\n /**\n * Specify whether the tooltip should be open when it first renders\n */\n @property({ reflect: true, type: Boolean })\n defaultOpen = false;\n\n /**\n * Specify the duration in milliseconds to delay before displaying the tooltip\n */\n @property({ attribute: 'enter-delay-ms', type: Number })\n enterDelayMs = 100;\n\n /**\n * Specify the expand text for the scroller button\n */\n @property({ reflect: true, type: String })\n expandText = 'Expand';\n\n /**\n * Specify the duration in milliseconds to delay before hiding the tooltip\n */\n @property({ attribute: 'leave-delay-ms', type: Number })\n leaveDelayMs = 300;\n\n /**\n * Specify the size of the Button. Defaults to `md`.\n */\n @property({ reflect: true })\n size = 'md';\n\n @consume({ context: pageHeaderContext, subscribe: true })\n context;\n\n protected _renderTooltipContent() {\n return html`\n <cds-custom-tooltip-content>\n <slot name=\"tooltip-content\"></slot>\n </cds-custom-tooltip-content>\n `;\n }\n\n private _handleScroller = () => {\n const { root, fullyCollapsed } = this.context;\n const contentElement = root.querySelector(`${prefix}-page-header-content`);\n if (!contentElement) {\n return;\n }\n const scrollableTarget = scrollableAncestorInner(\n contentElement\n ) as HTMLElement;\n\n // Page header content is not fully collapsed\n if (!fullyCollapsed) {\n const pageHeaderContentHeight = contentElement.offsetHeight;\n scrollableTarget?.scrollTo({\n top: pageHeaderContentHeight, // headerTopValue, check if breadcrumb bar is included\n behavior: 'smooth',\n });\n } else {\n // Page header content is fully collapsed\n scrollableTarget?.scrollTo({ top: 0, behavior: 'smooth' });\n }\n };\n\n render() {\n const {\n align,\n closeOnActivation,\n defaultOpen,\n enterDelayMs,\n leaveDelayMs,\n disabled,\n isSelected,\n size,\n context,\n autoalign,\n } = this;\n\n const iconClasses = classMap({\n [`${prefix}--page-header-scroller-collapsed`]: !!context?.fullyCollapsed,\n [`${prefix}--page-header-scroller-icon`]: true,\n });\n return html`<cds-custom-icon-button\n align=${align}\n ?close-on-activation=${closeOnActivation}\n ?defaultOpen=${defaultOpen}\n ?disabled=${disabled}\n enter-delay-ms=${enterDelayMs}\n ?isSelected=${isSelected}\n kind=\"ghost\"\n leave-delay-ms=${leaveDelayMs}\n size=${size}\n ?autoalign=${autoalign}\n class=${iconClasses}\n
|
|
1
|
+
{"version":3,"file":"page-header-scroller.js","names":["styles","customElement"],"sources":["../../../src/components/page-header/page-header-scroller.ts"],"sourcesContent":["/**\n * @license\n *\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\nimport { html } from 'lit';\nimport styles from './page-header.scss?lit';\nimport { property, state } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { carbonElement as customElement } from '@carbon/web-components/es/globals/decorators/carbon-element.js';\nimport Chevron20 from '@carbon/icons/es/chevron--up/20';\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-custom/components/button/index.js';\nimport { pageHeaderContext } from './context';\nimport { consume } from '@lit/context';\nimport CDSButton from '@carbon/web-components/es/components/button/button';\nimport { prefix } from '../../globals/settings';\nimport { scrollableAncestorInner } from './utils';\n\n/**\n * Page header Scroller button\n * @element c4p-page-header-scroller\n */\n@customElement(`${prefix}-page-header-scroller`)\nexport class PageHeaderScroller extends CDSButton {\n /**\n * Specify how the trigger should align with the tooltip\n */\n @property({ reflect: true, type: String })\n align = 'top';\n\n /**\n * Specify whether a auto align functionality should be applied\n */\n @property({ type: Boolean, reflect: true })\n autoalign = true;\n\n /**\n * Determines whether the tooltip should close when inner content is activated (click, Enter or Space)\n */\n @property({ attribute: 'close-on-activation', reflect: true, type: Boolean })\n closeOnActivation = true;\n\n /**\n * Specify the collapse text for the scroller button\n */\n @property({ reflect: true, type: String })\n collapseText = 'Collapse';\n\n /**\n * Specify whether the tooltip should be open when it first renders\n */\n @property({ reflect: true, type: Boolean })\n defaultOpen = false;\n\n /**\n * Specify the duration in milliseconds to delay before displaying the tooltip\n */\n @property({ attribute: 'enter-delay-ms', type: Number })\n enterDelayMs = 100;\n\n /**\n * Specify the expand text for the scroller button\n */\n @property({ reflect: true, type: String })\n expandText = 'Expand';\n\n /**\n * Specify the duration in milliseconds to delay before hiding the tooltip\n */\n @property({ attribute: 'leave-delay-ms', type: Number })\n leaveDelayMs = 300;\n\n /**\n * Specify the size of the Button. Defaults to `md`.\n */\n @property({ reflect: true })\n size = 'md';\n\n @consume({ context: pageHeaderContext, subscribe: true })\n @state()\n context;\n\n protected _renderTooltipContent() {\n return html`\n <cds-custom-tooltip-content>\n <slot name=\"tooltip-content\"></slot>\n </cds-custom-tooltip-content>\n `;\n }\n\n private _handleScroller = () => {\n const { root, fullyCollapsed } = this.context;\n const contentElement = root.querySelector(`${prefix}-page-header-content`);\n if (!contentElement) {\n return;\n }\n const scrollableTarget = scrollableAncestorInner(\n contentElement\n ) as HTMLElement;\n\n // Page header content is not fully collapsed\n if (!fullyCollapsed) {\n const pageHeaderContentHeight = contentElement.offsetHeight;\n scrollableTarget?.scrollTo({\n top: pageHeaderContentHeight, // headerTopValue, check if breadcrumb bar is included\n behavior: 'smooth',\n });\n } else {\n // Page header content is fully collapsed\n scrollableTarget?.scrollTo({ top: 0, behavior: 'smooth' });\n }\n };\n\n render() {\n const {\n align,\n closeOnActivation,\n defaultOpen,\n enterDelayMs,\n leaveDelayMs,\n disabled,\n isSelected,\n size,\n context,\n autoalign,\n } = this;\n\n const iconClasses = classMap({\n [`${prefix}--page-header-scroller-collapsed`]: !!context?.fullyCollapsed,\n [`${prefix}--page-header-scroller-icon`]: true,\n });\n return html`<cds-custom-icon-button\n align=${align}\n ?close-on-activation=${closeOnActivation}\n ?defaultOpen=${defaultOpen}\n ?disabled=${disabled}\n enter-delay-ms=${enterDelayMs}\n ?isSelected=${isSelected}\n kind=\"ghost\"\n leave-delay-ms=${leaveDelayMs}\n size=${size}\n ?autoalign=${autoalign}\n class=${iconClasses}\n label=${context?.fullyCollapsed ? this.expandText : this.collapseText}\n @click=${this._handleScroller}\n >\n ${context?.fullyCollapsed\n ? html`${iconLoader(ChevronDown20, { slot: 'icon' })}`\n : html`${iconLoader(Chevron20, { slot: 'icon' })}`}\n <span slot=\"tooltip-content\">\n ${context?.fullyCollapsed ? this.expandText : this.collapseText}\n </span>\n </cds-custom-icon-button>`;\n }\n static styles = styles;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BO,IAAA,qBAAA,MAAM,2BAA2B,UAAU;;;eAKxC;mBAMI;2BAMQ;sBAML;qBAMD;sBAMC;oBAMF;sBAME;cAMR;+BAcyB;GAC9B,MAAM,EAAE,MAAM,mBAAmB,KAAK;GACtC,MAAM,iBAAiB,KAAK,cAAc,0BAAgC;AAC1E,OAAI,CAAC,eACH;GAEF,MAAM,mBAAmB,wBACvB,eACD;AAGD,OAAI,CAAC,gBAAgB;IACnB,MAAM,0BAA0B,eAAe;AAC/C,sBAAkB,SAAS;KACzB,KAAK;KACL,UAAU;KACX,CAAC;SAGF,mBAAkB,SAAS;IAAE,KAAK;IAAG,UAAU;IAAU,CAAC;;;CA3B9D,wBAAkC;AAChC,SAAO,IAAI;;;;;;CA8Bb,SAAS;EACP,MAAM,EACJ,OACA,mBACA,aACA,cACA,cACA,UACA,YACA,MACA,SACA,cACE;AAMJ,SAAO,IAAI;cACD,MAAM;6BACS,kBAAkB;qBAC1B,YAAY;kBACf,SAAS;uBACJ,aAAa;oBAChB,WAAW;;uBAER,aAAa;aACvB,KAAK;mBACC,UAAU;cAdL,SAAS;IAC1B,wCAA8C,CAAC,CAAC,SAAS;IACzD,mCAAyC;GAC3C,CAYoB,CAAC;cACZ,SAAS,iBAAiB,KAAK,aAAa,KAAK,aAAa;eAC7D,KAAK,gBAAgB;;QAE5B,SAAS,iBACP,IAAI,GAAG,WAAW,eAAe,EAAE,MAAM,QAAQ,CAAC,KAClD,IAAI,GAAG,WAAW,WAAW,EAAE,MAAM,QAAQ,CAAC,GAAG;;UAEjD,SAAS,iBAAiB,KAAK,aAAa,KAAK,aAAa;;;;;gBAItDA;;;YA/Hf,SAAS;CAAE,SAAS;CAAM,MAAM;CAAQ,CAAC,CAAA,EAAA,mBAAA,WAAA,SAAA,KAAA,EAAA;YAMzC,SAAS;CAAE,MAAM;CAAS,SAAS;CAAM,CAAC,CAAA,EAAA,mBAAA,WAAA,aAAA,KAAA,EAAA;YAM1C,SAAS;CAAE,WAAW;CAAuB,SAAS;CAAM,MAAM;CAAS,CAAC,CAAA,EAAA,mBAAA,WAAA,qBAAA,KAAA,EAAA;YAM5E,SAAS;CAAE,SAAS;CAAM,MAAM;CAAQ,CAAC,CAAA,EAAA,mBAAA,WAAA,gBAAA,KAAA,EAAA;YAMzC,SAAS;CAAE,SAAS;CAAM,MAAM;CAAS,CAAC,CAAA,EAAA,mBAAA,WAAA,eAAA,KAAA,EAAA;YAM1C,SAAS;CAAE,WAAW;CAAkB,MAAM;CAAQ,CAAC,CAAA,EAAA,mBAAA,WAAA,gBAAA,KAAA,EAAA;YAMvD,SAAS;CAAE,SAAS;CAAM,MAAM;CAAQ,CAAC,CAAA,EAAA,mBAAA,WAAA,cAAA,KAAA,EAAA;YAMzC,SAAS;CAAE,WAAW;CAAkB,MAAM;CAAQ,CAAC,CAAA,EAAA,mBAAA,WAAA,gBAAA,KAAA,EAAA;YAMvD,SAAS,EAAE,SAAS,MAAM,CAAC,CAAA,EAAA,mBAAA,WAAA,QAAA,KAAA,EAAA;YAG3B,QAAQ;CAAE,SAAS;CAAmB,WAAW;CAAM,CAAC,EACxD,OAAO,CAAA,EAAA,mBAAA,WAAA,WAAA,KAAA,EAAA;iCAzDTC,cAAc,2BAAiC,CAAA,EAAA,mBAAA"}
|
|
@@ -8,9 +8,12 @@
|
|
|
8
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_default from "./page-header.scss.js";
|
|
11
|
+
import { pageHeaderContext } from "./context.js";
|
|
12
|
+
import { classMap } from "lit/directives/class-map.js";
|
|
11
13
|
import { LitElement, html } from "lit";
|
|
12
|
-
import { property } from "lit/decorators.js";
|
|
14
|
+
import { property, state } from "lit/decorators.js";
|
|
13
15
|
import { carbonElement } from "@carbon/web-components/es/globals/decorators/carbon-element.js";
|
|
16
|
+
import { consume } from "@lit/context";
|
|
14
17
|
//#region src/components/page-header/page-header-tabs.ts
|
|
15
18
|
/**
|
|
16
19
|
* @license
|
|
@@ -48,17 +51,24 @@ let CDSPageHeaderTabs = class CDSPageHeaderTabs extends LitElement {
|
|
|
48
51
|
}
|
|
49
52
|
}
|
|
50
53
|
render() {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
54
|
+
const { fullWidthGrid, narrowGrid } = this.context ?? {};
|
|
55
|
+
return html`
|
|
56
|
+
<div class="${classMap({
|
|
57
|
+
[`cds-custom--css-grid`]: true,
|
|
58
|
+
[`cds-custom--css-grid--full-width`]: !!fullWidthGrid,
|
|
59
|
+
[`cds-custom--css-grid--narrow`]: !!narrowGrid
|
|
60
|
+
})}">
|
|
61
|
+
<div
|
|
62
|
+
class="${"cds-custom"}--sm:col-span-4 ${"cds-custom"}--md:col-span-8 ${"cds-custom"}--lg:col-span-16 ${"cds-custom"}--css-grid-column"
|
|
63
|
+
>
|
|
64
|
+
<div class="${"c4p"}--page-header__tab-bar--tablist">
|
|
65
|
+
<slot></slot>
|
|
66
|
+
<slot name="tags"></slot>
|
|
67
|
+
</div>
|
|
58
68
|
</div>
|
|
69
|
+
<slot name="scroller"></slot>
|
|
59
70
|
</div>
|
|
60
|
-
|
|
61
|
-
</div>`;
|
|
71
|
+
`;
|
|
62
72
|
}
|
|
63
73
|
static {
|
|
64
74
|
this.styles = page_header_default;
|
|
@@ -68,6 +78,10 @@ __decorate([property({
|
|
|
68
78
|
type: Boolean,
|
|
69
79
|
attribute: "disable-sticky-tab-bar"
|
|
70
80
|
})], CDSPageHeaderTabs.prototype, "disableStickyTabBar", void 0);
|
|
81
|
+
__decorate([consume({
|
|
82
|
+
context: pageHeaderContext,
|
|
83
|
+
subscribe: true
|
|
84
|
+
}), state()], CDSPageHeaderTabs.prototype, "context", void 0);
|
|
71
85
|
CDSPageHeaderTabs = __decorate([carbonElement(`c4p-page-header-tabs`)], CDSPageHeaderTabs);
|
|
72
86
|
var page_header_tabs_default = CDSPageHeaderTabs;
|
|
73
87
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-header-tabs.js","names":["styles","customElement"],"sources":["../../../src/components/page-header/page-header-tabs.ts"],"sourcesContent":["/**\n * @license\n *\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\nimport { LitElement, html } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { prefix, carbonPrefix } from '../../globals/settings';\nimport styles from './page-header.scss?lit';\nimport { carbonElement as customElement } from '@carbon/web-components/es/globals/decorators/carbon-element.js';\nimport CDSPageHeader from './page-header';\n\n/**\n * Page header Tabs Bar.\n * @element c4p-page-header-tabs\n */\n@customElement(`${prefix}-page-header-tabs`)\nclass CDSPageHeaderTabs extends LitElement {\n /**\n * Disable sticky positioning for the tab bar\n */\n @property({ type: Boolean, attribute: 'disable-sticky-tab-bar' })\n disableStickyTabBar = false;\n\n connectedCallback() {\n super.connectedCallback();\n this.updateContext();\n }\n\n updated(changedProperties: Map<string, any>) {\n super.updated(changedProperties);\n if (changedProperties.has('disableStickyTabBar')) {\n this.updateContext();\n }\n }\n\n private updateContext() {\n const pageHeader = this.closest(`${prefix}-page-header`) as CDSPageHeader;\n if (pageHeader) {\n // Create a new object to trigger reactivity\n pageHeader.context = {\n ...pageHeader.context,\n disableStickyTabBar: this.disableStickyTabBar,\n };\n // Force update\n pageHeader.requestUpdate('context');\n }\n }\n\n render() {\n
|
|
1
|
+
{"version":3,"file":"page-header-tabs.js","names":["styles","customElement"],"sources":["../../../src/components/page-header/page-header-tabs.ts"],"sourcesContent":["/**\n * @license\n *\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\nimport { LitElement, html } from 'lit';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { property, state } from 'lit/decorators.js';\nimport { consume } from '@lit/context';\nimport { prefix, carbonPrefix } from '../../globals/settings';\nimport styles from './page-header.scss?lit';\nimport { carbonElement as customElement } from '@carbon/web-components/es/globals/decorators/carbon-element.js';\nimport CDSPageHeader from './page-header';\nimport { pageHeaderContext } from './context';\n\n/**\n * Page header Tabs Bar.\n * @element c4p-page-header-tabs\n */\n@customElement(`${prefix}-page-header-tabs`)\nclass CDSPageHeaderTabs extends LitElement {\n /**\n * Disable sticky positioning for the tab bar\n */\n @property({ type: Boolean, attribute: 'disable-sticky-tab-bar' })\n disableStickyTabBar = false;\n\n @consume({ context: pageHeaderContext, subscribe: true })\n @state()\n context;\n\n connectedCallback() {\n super.connectedCallback();\n this.updateContext();\n }\n\n updated(changedProperties: Map<string, any>) {\n super.updated(changedProperties);\n if (changedProperties.has('disableStickyTabBar')) {\n this.updateContext();\n }\n }\n\n private updateContext() {\n const pageHeader = this.closest(`${prefix}-page-header`) as CDSPageHeader;\n if (pageHeader) {\n // Create a new object to trigger reactivity\n pageHeader.context = {\n ...pageHeader.context,\n disableStickyTabBar: this.disableStickyTabBar,\n };\n // Force update\n pageHeader.requestUpdate('context');\n }\n }\n\n render() {\n const { fullWidthGrid, narrowGrid } = this.context ?? {};\n const gridClasses = classMap({\n [`${carbonPrefix}--css-grid`]: true,\n [`${carbonPrefix}--css-grid--full-width`]: !!fullWidthGrid,\n [`${carbonPrefix}--css-grid--narrow`]: !!narrowGrid,\n });\n return html`\n <div class=\"${gridClasses}\">\n <div\n class=\"${carbonPrefix}--sm:col-span-4 ${carbonPrefix}--md:col-span-8 ${carbonPrefix}--lg:col-span-16 ${carbonPrefix}--css-grid-column\"\n >\n <div class=\"${prefix}--page-header__tab-bar--tablist\">\n <slot></slot>\n <slot name=\"tags\"></slot>\n </div>\n </div>\n <slot name=\"scroller\"></slot>\n </div>\n `;\n }\n\n static styles = styles;\n}\n\nexport default CDSPageHeaderTabs;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuBA,IAAA,oBAAA,MACM,0BAA0B,WAAW;;;6BAKnB;;CAMtB,oBAAoB;AAClB,QAAM,mBAAmB;AACzB,OAAK,eAAe;;CAGtB,QAAQ,mBAAqC;AAC3C,QAAM,QAAQ,kBAAkB;AAChC,MAAI,kBAAkB,IAAI,sBAAsB,CAC9C,MAAK,eAAe;;CAIxB,gBAAwB;EACtB,MAAM,aAAa,KAAK,QAAQ,kBAAwB;AACxD,MAAI,YAAY;AAEd,cAAW,UAAU;IACnB,GAAG,WAAW;IACd,qBAAqB,KAAK;IAC3B;AAED,cAAW,cAAc,UAAU;;;CAIvC,SAAS;EACP,MAAM,EAAE,eAAe,eAAe,KAAK,WAAW,EAAE;AAMxD,SAAO,IAAI;oBALS,SAAS;IAC1B,kBAA8B;IAC9B,8BAA0C,CAAC,CAAC;IAC5C,0BAAsC,CAAC,CAAC;GAC1C,CAE0B,CAAC;;yBAEA,kBAAA,MAA+B,kBAAA,MAA+B,mBAAA,MAAgC;;8BAE/F;;;;;;;;;;gBAUbA;;;YAtDf,SAAS;CAAE,MAAM;CAAS,WAAW;CAA0B,CAAC,CAAA,EAAA,kBAAA,WAAA,uBAAA,KAAA,EAAA;YAGhE,QAAQ;CAAE,SAAS;CAAmB,WAAW;CAAM,CAAC,EACxD,OAAO,CAAA,EAAA,kBAAA,WAAA,WAAA,KAAA,EAAA;gCATTC,cAAc,uBAA6B,CAAA,EAAA,kBAAA;AA8D5C,IAAA,2BAAe"}
|