@patternfly/elements 2.2.2 → 2.3.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 +32 -45
- package/package.json +4 -3
- package/pf-accordion/BaseAccordion.d.ts +2 -1
- package/pf-accordion/BaseAccordion.js +239 -210
- package/pf-accordion/BaseAccordion.js.map +1 -1
- package/pf-accordion/BaseAccordionHeader.js +71 -69
- package/pf-accordion/BaseAccordionHeader.js.map +1 -1
- package/pf-accordion/BaseAccordionPanel.js +2 -2
- package/pf-accordion/BaseAccordionPanel.js.map +1 -1
- package/pf-accordion/pf-accordion-header.js +4 -9
- package/pf-accordion/pf-accordion-header.js.map +1 -1
- package/pf-accordion/pf-accordion-panel.js +1 -1
- package/pf-accordion/pf-accordion-panel.js.map +1 -1
- package/pf-accordion/pf-accordion.js +1 -1
- package/pf-accordion/pf-accordion.js.map +1 -1
- package/pf-avatar/BaseAvatar.js +1 -1
- package/pf-avatar/BaseAvatar.js.map +1 -1
- package/pf-avatar/pf-avatar.js +1 -1
- package/pf-avatar/pf-avatar.js.map +1 -1
- package/pf-badge/BaseBadge.js +1 -1
- package/pf-badge/BaseBadge.js.map +1 -1
- package/pf-badge/pf-badge.js +1 -1
- package/pf-badge/pf-badge.js.map +1 -1
- package/pf-button/BaseButton.js +16 -17
- package/pf-button/BaseButton.js.map +1 -1
- package/pf-button/pf-button.js +1 -1
- package/pf-button/pf-button.js.map +1 -1
- package/pf-card/BaseCard.js +1 -1
- package/pf-card/BaseCard.js.map +1 -1
- package/pf-card/pf-card.js +1 -1
- package/pf-card/pf-card.js.map +1 -1
- package/pf-clipboard-copy/BaseClipboardCopy.js +1 -1
- package/pf-clipboard-copy/BaseClipboardCopy.js.map +1 -1
- package/pf-clipboard-copy/pf-clipboard-copy.js +33 -36
- package/pf-clipboard-copy/pf-clipboard-copy.js.map +1 -1
- package/pf-code-block/BaseCodeBlock.js +1 -1
- package/pf-code-block/BaseCodeBlock.js.map +1 -1
- package/pf-code-block/pf-code-block.js +11 -14
- package/pf-code-block/pf-code-block.js.map +1 -1
- package/pf-icon/BaseIcon.js +41 -39
- package/pf-icon/BaseIcon.js.map +1 -1
- package/pf-icon/pf-icon.js +2 -2
- package/pf-icon/pf-icon.js.map +1 -1
- package/pf-jump-links/pf-jump-links-item.js +14 -17
- package/pf-jump-links/pf-jump-links-item.js.map +1 -1
- package/pf-jump-links/pf-jump-links-list.js +1 -1
- package/pf-jump-links/pf-jump-links-list.js.map +1 -1
- package/pf-jump-links/pf-jump-links.js +34 -37
- package/pf-jump-links/pf-jump-links.js.map +1 -1
- package/pf-label/BaseLabel.js +1 -1
- package/pf-label/BaseLabel.js.map +1 -1
- package/pf-label/pf-label.js +2 -2
- package/pf-label/pf-label.js.map +1 -1
- package/pf-modal/pf-modal.js +45 -46
- package/pf-modal/pf-modal.js.map +1 -1
- package/pf-panel/pf-panel.js +6 -7
- package/pf-panel/pf-panel.js.map +1 -1
- package/pf-popover/pf-popover.js +48 -51
- package/pf-popover/pf-popover.js.map +1 -1
- package/pf-progress-stepper/pf-progress-step.js +10 -11
- package/pf-progress-stepper/pf-progress-step.js.map +1 -1
- package/pf-progress-stepper/pf-progress-stepper.js +13 -16
- package/pf-progress-stepper/pf-progress-stepper.js.map +1 -1
- package/pf-spinner/BaseSpinner.js +1 -1
- package/pf-spinner/BaseSpinner.js.map +1 -1
- package/pf-spinner/pf-spinner.js +1 -1
- package/pf-spinner/pf-spinner.js.map +1 -1
- package/pf-switch/BaseSwitch.js +47 -44
- package/pf-switch/BaseSwitch.js.map +1 -1
- package/pf-switch/pf-switch.js +1 -1
- package/pf-switch/pf-switch.js.map +1 -1
- package/pf-tabs/BaseTab.js +31 -29
- package/pf-tabs/BaseTab.js.map +1 -1
- package/pf-tabs/BaseTabPanel.js +5 -11
- package/pf-tabs/BaseTabPanel.js.map +1 -1
- package/pf-tabs/BaseTabs.js +135 -116
- package/pf-tabs/BaseTabs.js.map +1 -1
- package/pf-tabs/pf-tab-panel.js +1 -1
- package/pf-tabs/pf-tab-panel.js.map +1 -1
- package/pf-tabs/pf-tab.js +1 -1
- package/pf-tabs/pf-tab.js.map +1 -1
- package/pf-tabs/pf-tabs.js +2 -2
- package/pf-tabs/pf-tabs.js.map +1 -1
- package/pf-tile/pf-tile.js +1 -1
- package/pf-tile/pf-tile.js.map +1 -1
- package/pf-timestamp/pf-timestamp.d.ts +8 -5
- package/pf-timestamp/pf-timestamp.js +21 -66
- package/pf-timestamp/pf-timestamp.js.map +1 -1
- package/pf-tooltip/BaseTooltip.js +7 -13
- package/pf-tooltip/BaseTooltip.js.map +1 -1
- package/pf-tooltip/pf-tooltip.js +1 -1
- package/pf-tooltip/pf-tooltip.js.map +1 -1
- package/pfe.min.js +121 -121
- package/pfe.min.js.map +4 -4
- package/react/pf-accordion/pf-accordion-header.js +12 -0
- package/react/pf-accordion/pf-accordion-panel.js +10 -0
- package/react/pf-accordion/pf-accordion.js +13 -0
- package/react/pf-avatar/pf-avatar.js +10 -0
- package/react/pf-badge/pf-badge.js +10 -0
- package/react/pf-button/pf-button.js +10 -0
- package/react/pf-card/pf-card.js +10 -0
- package/react/pf-clipboard-copy/pf-clipboard-copy.js +10 -0
- package/react/pf-code-block/pf-code-block.js +10 -0
- package/react/pf-icon/pf-icon.js +13 -0
- package/react/pf-jump-links/pf-jump-links-item.js +13 -0
- package/react/pf-jump-links/pf-jump-links-list.js +10 -0
- package/react/pf-jump-links/pf-jump-links.js +12 -0
- package/react/pf-label/pf-label.js +12 -0
- package/react/pf-modal/pf-modal.js +13 -0
- package/react/pf-panel/pf-panel.js +10 -0
- package/react/pf-popover/pf-popover.js +10 -0
- package/react/pf-progress-stepper/pf-progress-step.js +10 -0
- package/react/pf-progress-stepper/pf-progress-stepper.js +10 -0
- package/react/pf-spinner/pf-spinner.js +10 -0
- package/react/pf-switch/pf-switch.js +12 -0
- package/react/pf-tabs/pf-tab-panel.js +10 -0
- package/react/pf-tabs/pf-tab.js +12 -0
- package/react/pf-tabs/pf-tabs.js +10 -0
- package/react/pf-tile/pf-tile.js +10 -0
- package/react/pf-timestamp/pf-timestamp.js +10 -0
- package/react/pf-tooltip/pf-tooltip.js +10 -0
package/pf-icon/BaseIcon.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
import { __classPrivateFieldGet, __classPrivateFieldSet, __decorate } from "tslib";
|
|
1
|
+
import { __decorate } from "tslib";
|
|
3
2
|
import { LitElement, html } from 'lit';
|
|
4
3
|
import { property } from 'lit/decorators/property.js';
|
|
5
4
|
import { state } from 'lit/decorators/state.js';
|
|
@@ -28,9 +27,8 @@ class IconLoadError extends ErrorEvent {
|
|
|
28
27
|
class BaseIcon extends LitElement {
|
|
29
28
|
constructor() {
|
|
30
29
|
super(...arguments);
|
|
31
|
-
_BaseIcon_instances.add(this);
|
|
32
30
|
/** Icon set */
|
|
33
|
-
this.set =
|
|
31
|
+
this.set = this.#class.defaultIconSet;
|
|
34
32
|
/** Icon name */
|
|
35
33
|
this.icon = '';
|
|
36
34
|
/**
|
|
@@ -40,9 +38,10 @@ class BaseIcon extends LitElement {
|
|
|
40
38
|
* - `lazy` (default): wait for the element to enter the viewport before loading
|
|
41
39
|
*/
|
|
42
40
|
this.loading = 'lazy';
|
|
43
|
-
|
|
44
|
-
|
|
41
|
+
this.#intersecting = false;
|
|
42
|
+
this.#logger = new Logger(this);
|
|
45
43
|
}
|
|
44
|
+
static { this.styles = [style]; }
|
|
46
45
|
static addIconSet(setName, getter) {
|
|
47
46
|
if (typeof getter !== 'function') {
|
|
48
47
|
Logger.warn(`[${this.name}.addIconSet(setName, getter)]: getter must be a function`);
|
|
@@ -54,18 +53,49 @@ class BaseIcon extends LitElement {
|
|
|
54
53
|
}
|
|
55
54
|
}
|
|
56
55
|
}
|
|
56
|
+
static { this.getIconUrl = (set, icon) => new URL(`./icons/${set}/${icon}.js`, import.meta.url); }
|
|
57
|
+
static { this.onIntersect = records => records.forEach(({ isIntersecting, target }) => {
|
|
58
|
+
const icon = target;
|
|
59
|
+
icon.#intersecting = isIntersecting;
|
|
60
|
+
ric(() => {
|
|
61
|
+
if (icon.#intersecting) {
|
|
62
|
+
icon.load();
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
}); }
|
|
66
|
+
static { this.io = new IntersectionObserver(this.onIntersect); }
|
|
67
|
+
static { this.getters = new Map(); }
|
|
68
|
+
static { this.instances = new Set(); }
|
|
69
|
+
#intersecting;
|
|
70
|
+
#logger;
|
|
71
|
+
get #class() {
|
|
72
|
+
return this.constructor;
|
|
73
|
+
}
|
|
74
|
+
#lazyLoad() {
|
|
75
|
+
this.#class.io.observe(this);
|
|
76
|
+
if (this.#intersecting) {
|
|
77
|
+
this.load();
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
#iconChanged() {
|
|
81
|
+
switch (this.loading) {
|
|
82
|
+
case 'idle': return void ric(() => this.load());
|
|
83
|
+
case 'lazy': return void this.#lazyLoad();
|
|
84
|
+
case 'eager': return void this.load();
|
|
85
|
+
}
|
|
86
|
+
}
|
|
57
87
|
connectedCallback() {
|
|
58
88
|
super.connectedCallback();
|
|
59
|
-
|
|
89
|
+
this.#class.instances.add(this);
|
|
60
90
|
}
|
|
61
91
|
willUpdate(changed) {
|
|
62
92
|
if (changed.has('icon')) {
|
|
63
|
-
|
|
93
|
+
this.#iconChanged();
|
|
64
94
|
}
|
|
65
95
|
}
|
|
66
96
|
disconnectedCallback() {
|
|
67
97
|
super.disconnectedCallback();
|
|
68
|
-
|
|
98
|
+
this.#class.instances.delete(this);
|
|
69
99
|
}
|
|
70
100
|
render() {
|
|
71
101
|
const content = this.content ?? ''; /* eslint-disable indent */
|
|
@@ -78,7 +108,7 @@ class BaseIcon extends LitElement {
|
|
|
78
108
|
}
|
|
79
109
|
async load() {
|
|
80
110
|
const { set, icon, } = this;
|
|
81
|
-
const getter =
|
|
111
|
+
const getter = this.#class.getters.get(set) ?? this.#class.getIconUrl;
|
|
82
112
|
let spec = 'UNKNOWN ICON';
|
|
83
113
|
if (set && icon) {
|
|
84
114
|
try {
|
|
@@ -96,40 +126,12 @@ class BaseIcon extends LitElement {
|
|
|
96
126
|
}
|
|
97
127
|
catch (error) {
|
|
98
128
|
const event = new IconLoadError(spec, error);
|
|
99
|
-
|
|
129
|
+
this.#logger.error(error.message);
|
|
100
130
|
this.dispatchEvent(event);
|
|
101
131
|
}
|
|
102
132
|
}
|
|
103
133
|
}
|
|
104
134
|
}
|
|
105
|
-
_a = BaseIcon, _BaseIcon_intersecting = new WeakMap(), _BaseIcon_logger = new WeakMap(), _BaseIcon_instances = new WeakSet(), _BaseIcon_class_get = function _BaseIcon_class_get() {
|
|
106
|
-
return this.constructor;
|
|
107
|
-
}, _BaseIcon_lazyLoad = function _BaseIcon_lazyLoad() {
|
|
108
|
-
__classPrivateFieldGet(this, _BaseIcon_instances, "a", _BaseIcon_class_get).io.observe(this);
|
|
109
|
-
if (__classPrivateFieldGet(this, _BaseIcon_intersecting, "f")) {
|
|
110
|
-
this.load();
|
|
111
|
-
}
|
|
112
|
-
}, _BaseIcon_iconChanged = function _BaseIcon_iconChanged() {
|
|
113
|
-
switch (this.loading) {
|
|
114
|
-
case 'idle': return void ric(() => this.load());
|
|
115
|
-
case 'lazy': return void __classPrivateFieldGet(this, _BaseIcon_instances, "m", _BaseIcon_lazyLoad).call(this);
|
|
116
|
-
case 'eager': return void this.load();
|
|
117
|
-
}
|
|
118
|
-
};
|
|
119
|
-
BaseIcon.styles = [style];
|
|
120
|
-
BaseIcon.getIconUrl = (set, icon) => new URL(`./icons/${set}/${icon}.js`, import.meta.url);
|
|
121
|
-
BaseIcon.onIntersect = records => records.forEach(({ isIntersecting, target }) => {
|
|
122
|
-
const icon = target;
|
|
123
|
-
__classPrivateFieldSet(icon, _BaseIcon_intersecting, isIntersecting, "f");
|
|
124
|
-
ric(() => {
|
|
125
|
-
if (__classPrivateFieldGet(icon, _BaseIcon_intersecting, "f")) {
|
|
126
|
-
icon.load();
|
|
127
|
-
}
|
|
128
|
-
});
|
|
129
|
-
});
|
|
130
|
-
BaseIcon.io = new IntersectionObserver(_a.onIntersect);
|
|
131
|
-
BaseIcon.getters = new Map();
|
|
132
|
-
BaseIcon.instances = new Set();
|
|
133
135
|
__decorate([
|
|
134
136
|
property()
|
|
135
137
|
], BaseIcon.prototype, "set", void 0);
|
package/pf-icon/BaseIcon.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseIcon.js","sourceRoot":"","sources":["BaseIcon.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"BaseIcon.js","sourceRoot":"","sources":["BaseIcon.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PropertyValues } from 'lit';\n\nimport { LitElement, html } from 'lit';\nimport { property } from 'lit/decorators/property.js';\nimport { state } from 'lit/decorators/state.js';\nimport { Logger } from '@patternfly/pfe-core/controllers/logger.js';\n\nimport style from './BaseIcon.css';\n\nexport type URLGetter = (set: string, icon: string) => URL | string;\n\n/** requestIdleCallback when available, requestAnimationFrame when not */\nconst ric = window.requestIdleCallback ?? window.requestAnimationFrame;\n\n/** Fired when an icon fails to load */\nclass IconLoadError extends ErrorEvent {\n constructor(\n pathname: string,\n /** The original error when importing the icon module */\n public originalError: Error\n ) {\n super('error', { message: `Could not load icon at ${pathname}` });\n }\n}\n\n/**\n * Icon component lazy-loads icons and allows custom icon sets\n *\n * @slot - Slotted content is used as a fallback in case the icon doesn't load\n * @fires load - Fired when an icon is loaded and rendered\n * @fires error - Fired when an icon fails to load\n * @csspart fallback - Container for the fallback (i.e. slotted) content\n */\nexport abstract class BaseIcon extends LitElement {\n public static readonly styles = [style];\n\n public static addIconSet(setName: string, getter: typeof BaseIcon['getIconUrl']) {\n if (typeof getter !== 'function') {\n Logger.warn(`[${this.name}.addIconSet(setName, getter)]: getter must be a function`);\n } else {\n this.getters.set(setName, getter);\n for (const instance of this.instances) {\n instance.load();\n }\n }\n }\n\n public static getIconUrl: URLGetter = (set: string, icon: string) =>\n new URL(`./icons/${set}/${icon}.js`, import.meta.url);\n\n private static onIntersect: IntersectionObserverCallback = records =>\n records.forEach(({ isIntersecting, target }) => {\n const icon = target as BaseIcon;\n icon.#intersecting = isIntersecting;\n ric(() => {\n if (icon.#intersecting) {\n icon.load();\n }\n });\n });\n\n private static io = new IntersectionObserver(this.onIntersect);\n\n private static getters = new Map<string, URLGetter>();\n\n private static instances = new Set<BaseIcon>();\n\n declare public static defaultIconSet: string;\n\n /** Icon set */\n @property() set = this.#class.defaultIconSet;\n\n /** Icon name */\n @property({ reflect: true }) icon = '';\n\n /** Size of the icon */\n abstract size: string;\n\n /**\n * Controls how eager the element will be to load the icon data\n * - `eager`: eagerly load the icon, blocking the main thread\n * - `idle`: wait for the browser to attain an idle state before loading\n * - `lazy` (default): wait for the element to enter the viewport before loading\n */\n @property() loading?: 'idle' | 'lazy' | 'eager' = 'lazy';\n\n /** Icon content. Any value that lit can render */\n @state() private content?: unknown;\n\n #intersecting = false;\n\n #logger = new Logger(this);\n\n get #class(): typeof BaseIcon {\n return this.constructor as typeof BaseIcon;\n }\n\n #lazyLoad() {\n this.#class.io.observe(this);\n if (this.#intersecting) {\n this.load();\n }\n }\n\n #iconChanged() {\n switch (this.loading) {\n case 'idle': return void ric(() => this.load());\n case 'lazy': return void this.#lazyLoad();\n case 'eager': return void this.load();\n }\n }\n\n connectedCallback() {\n super.connectedCallback();\n this.#class.instances.add(this);\n }\n\n willUpdate(changed: PropertyValues<this>) {\n if (changed.has('icon')) {\n this.#iconChanged();\n }\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.#class.instances.delete(this);\n }\n\n render() {\n const content = this.content ?? ''; /* eslint-disable indent */\n return html`\n <div id=\"container\" aria-hidden=\"true\">${content\n }<span part=\"fallback\" ?hidden=${!!content}>\n <slot></slot>\n </span>\n </div>\n `;/* eslint-enable indent */\n }\n\n protected async load() {\n const { set, icon, } = this;\n const getter = this.#class.getters.get(set) ?? this.#class.getIconUrl;\n let spec = 'UNKNOWN ICON';\n if (set && icon) {\n try {\n const gotten = getter(set, icon);\n if (gotten instanceof URL) {\n spec = gotten.pathname;\n } else {\n spec = gotten;\n }\n const mod = await import(spec);\n this.content = mod.default instanceof Node ? mod.default.cloneNode(true) : mod.default;\n await this.updateComplete;\n this.dispatchEvent(new Event('load', { bubbles: true }));\n } catch (error: unknown) {\n const event = new IconLoadError(spec, error as Error);\n this.#logger.error((error as IconLoadError).message);\n this.dispatchEvent(event);\n }\n }\n }\n}\n"]}
|
package/pf-icon/pf-icon.js
CHANGED
|
@@ -19,9 +19,9 @@ let PfIcon = class PfIcon extends BaseIcon {
|
|
|
19
19
|
/** Size of the icon */
|
|
20
20
|
this.size = 'sm';
|
|
21
21
|
}
|
|
22
|
+
static { this.styles = [...BaseIcon.styles, style]; }
|
|
23
|
+
static { this.defaultIconSet = 'fas'; }
|
|
22
24
|
};
|
|
23
|
-
PfIcon.styles = [...BaseIcon.styles, style];
|
|
24
|
-
PfIcon.defaultIconSet = 'fas';
|
|
25
25
|
__decorate([
|
|
26
26
|
property({ reflect: true })
|
|
27
27
|
], PfIcon.prototype, "size", void 0);
|
package/pf-icon/pf-icon.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pf-icon.js","sourceRoot":"","sources":["pf-icon.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;;;AAItD;;;;;;;;GAQG;AAEH,IAAa,MAAM,GAAnB,MAAa,MAAO,SAAQ,QAAQ;IAApC;;QAKE,uBAAuB;QACM,SAAI,GAA8B,IAAI,CAAC;IACtE,CAAC
|
|
1
|
+
{"version":3,"file":"pf-icon.js","sourceRoot":"","sources":["pf-icon.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;;;AAItD;;;;;;;;GAQG;AAEH,IAAa,MAAM,GAAnB,MAAa,MAAO,SAAQ,QAAQ;IAApC;;QAKE,uBAAuB;QACM,SAAI,GAA8B,IAAI,CAAC;IACtE,CAAC;aANwB,WAAM,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,AAA9B,CAA+B;aAE9C,mBAAc,GAAG,KAAK,AAAR,CAAS;;AAGR;IAA5B,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;oCAAwC;AANzD,MAAM;IADlB,aAAa,CAAC,SAAS,CAAC;GACZ,MAAM,CAOlB;SAPY,MAAM","sourcesContent":["import { BaseIcon } from './BaseIcon.js';\nimport { customElement } from 'lit/decorators/custom-element.js';\nimport { property } from 'lit/decorators/property.js';\n\nimport style from './pf-icon.css';\n\n/**\n * An **icon** component is a container that allows for icons of varying dimensions to\n * seamlessly replace each other without shifting surrounding content.\n *\n * @slot - Slotted content is used as a fallback in case the icon doesn't load\n * @fires load - Fired when an icon is loaded and rendered\n * @fires error - Fired when an icon fails to load\n * @csspart fallback - Container for the fallback (i.e. slotted) content\n */\n@customElement('pf-icon')\nexport class PfIcon extends BaseIcon {\n public static readonly styles = [...BaseIcon.styles, style];\n\n public static defaultIconSet = 'fas';\n\n /** Size of the icon */\n @property({ reflect: true }) size: 'sm' | 'md' | 'lg' | 'xl' = 'sm';\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'pf-icon': PfIcon;\n }\n}\n"]}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
import { __classPrivateFieldGet, __decorate } from "tslib";
|
|
1
|
+
import { __decorate } from "tslib";
|
|
3
2
|
import { html, LitElement } from 'lit';
|
|
4
3
|
import { customElement } from 'lit/decorators/custom-element.js';
|
|
5
4
|
import { property } from 'lit/decorators/property.js';
|
|
@@ -19,39 +18,37 @@ import { observed } from '@patternfly/pfe-core/decorators/observed.js';
|
|
|
19
18
|
let PfJumpLinksItem = class PfJumpLinksItem extends LitElement {
|
|
20
19
|
constructor() {
|
|
21
20
|
super(...arguments);
|
|
22
|
-
_PfJumpLinksItem_instances.add(this);
|
|
23
21
|
/** Whether this item is active. */
|
|
24
22
|
this.active = false;
|
|
25
|
-
|
|
23
|
+
this.#internals = new InternalsController(this, {
|
|
26
24
|
role: 'listitem'
|
|
27
|
-
})
|
|
25
|
+
});
|
|
28
26
|
}
|
|
27
|
+
static { this.styles = [style]; }
|
|
28
|
+
static { this.shadowRootOptions = { ...LitElement.shadowRootOptions, delegatesFocus: true }; }
|
|
29
|
+
#internals;
|
|
29
30
|
connectedCallback() {
|
|
30
31
|
super.connectedCallback();
|
|
31
32
|
this.activeChanged();
|
|
32
33
|
}
|
|
33
34
|
render() {
|
|
34
35
|
return html `
|
|
35
|
-
<a href="${ifDefined(this.href)}" @focus="${
|
|
36
|
+
<a href="${ifDefined(this.href)}" @focus="${this.#onFocus}" @click="${this.#onClick}">
|
|
36
37
|
<slot></slot>
|
|
37
38
|
</a>
|
|
38
39
|
<slot name="subsection"></slot>
|
|
39
40
|
`;
|
|
40
41
|
}
|
|
41
42
|
activeChanged() {
|
|
42
|
-
|
|
43
|
+
this.#internals.ariaCurrent = this.active ? 'location' : null;
|
|
44
|
+
}
|
|
45
|
+
#onClick() {
|
|
46
|
+
this.dispatchEvent(new Event('select', { bubbles: true }));
|
|
47
|
+
}
|
|
48
|
+
#onFocus() {
|
|
49
|
+
this.dispatchEvent(new Event('focus', { bubbles: true }));
|
|
43
50
|
}
|
|
44
51
|
};
|
|
45
|
-
_PfJumpLinksItem_internals = new WeakMap();
|
|
46
|
-
_PfJumpLinksItem_instances = new WeakSet();
|
|
47
|
-
_PfJumpLinksItem_onClick = function _PfJumpLinksItem_onClick() {
|
|
48
|
-
this.dispatchEvent(new Event('select', { bubbles: true }));
|
|
49
|
-
};
|
|
50
|
-
_PfJumpLinksItem_onFocus = function _PfJumpLinksItem_onFocus() {
|
|
51
|
-
this.dispatchEvent(new Event('focus', { bubbles: true }));
|
|
52
|
-
};
|
|
53
|
-
PfJumpLinksItem.styles = [style];
|
|
54
|
-
PfJumpLinksItem.shadowRootOptions = { ...LitElement.shadowRootOptions, delegatesFocus: true };
|
|
55
52
|
__decorate([
|
|
56
53
|
observed('activeChanged'),
|
|
57
54
|
property({ type: Boolean, reflect: true })
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pf-jump-links-item.js","sourceRoot":"","sources":["pf-jump-links-item.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pf-jump-links-item.js","sourceRoot":"","sources":["pf-jump-links-item.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAEtD,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAEzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0DAA0D,CAAC;;;AAI/F,OAAO,EAAE,QAAQ,EAAE,MAAM,6CAA6C,CAAC;AAEvE;;;;;;;GAOG;AAEH,IAAa,eAAe,GAA5B,MAAa,eAAgB,SAAQ,UAAU;IAA/C;;QAKE,mCAAmC;QAES,WAAM,GAAG,KAAK,CAAC;QAK3D,eAAU,GAAG,IAAI,mBAAmB,CAAC,IAAI,EAAE;YACzC,IAAI,EAAE,UAAU;SACjB,CAAC,CAAC;IA2BL,CAAC;aAxCiB,WAAM,GAAG,CAAC,KAAK,CAAC,AAAV,CAAW;aAEjB,sBAAiB,GAAmB,EAAE,GAAG,UAAU,CAAC,iBAAiB,EAAE,cAAc,EAAE,IAAI,EAAE,AAA5E,CAA6E;IAS9G,UAAU,CAEP;IAEM,iBAAiB;QACxB,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC1B,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAA;iBACE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,QAAQ,aAAa,IAAI,CAAC,QAAQ;;;;KAIpF,CAAC;IACJ,CAAC;IAEO,aAAa;QACnB,IAAI,CAAC,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;IAChE,CAAC;IAED,QAAQ;QACN,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,QAAQ;QACN,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC5D,CAAC;;AAjC2C;IAD3C,QAAQ,CAAC,eAAe,CAAC;IACzB,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;+CAAgB;AAG9B;IAA5B,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;6CAAe;AAVhC,eAAe;IAD3B,aAAa,CAAC,oBAAoB,CAAC;GACvB,eAAe,CAyC3B;SAzCY,eAAe","sourcesContent":["import { html, LitElement } from 'lit';\nimport { customElement } from 'lit/decorators/custom-element.js';\nimport { property } from 'lit/decorators/property.js';\n\nimport { ifDefined } from 'lit/directives/if-defined.js';\n\nimport { InternalsController } from '@patternfly/pfe-core/controllers/internals-controller.js';\n\nimport style from './pf-jump-links-item.css';\n\nimport { observed } from '@patternfly/pfe-core/decorators/observed.js';\n\n/**\n * @cssprop --pf-c-jump-links__link--PaddingTop -- padding around the link\n * @cssprop --pf-c-jump-links__link--PaddingRight\n * @cssprop --pf-c-jump-links__link--PaddingBottom\n * @cssprop --pf-c-jump-links__link--PaddingLeft\n * @cssprop --pf-c-jump-links__link--OutlineOffset\n * @cssprop --pf-c-jump-links__link-text--Color\n */\n@customElement('pf-jump-links-item')\nexport class PfJumpLinksItem extends LitElement {\n static readonly styles = [style];\n\n static readonly shadowRootOptions: ShadowRootInit = { ...LitElement.shadowRootOptions, delegatesFocus: true };\n\n /** Whether this item is active. */\n @observed('activeChanged')\n @property({ type: Boolean, reflect: true }) active = false;\n\n /** hypertext reference for this link */\n @property({ reflect: true }) href?: string;\n\n #internals = new InternalsController(this, {\n role: 'listitem'\n });\n\n override connectedCallback() {\n super.connectedCallback();\n this.activeChanged();\n }\n\n render() {\n return html`\n <a href=\"${ifDefined(this.href)}\" @focus=\"${this.#onFocus}\" @click=\"${this.#onClick}\">\n <slot></slot>\n </a>\n <slot name=\"subsection\"></slot>\n `;\n }\n\n private activeChanged() {\n this.#internals.ariaCurrent = this.active ? 'location' : null;\n }\n\n #onClick() {\n this.dispatchEvent(new Event('select', { bubbles: true }));\n }\n\n #onFocus() {\n this.dispatchEvent(new Event('focus', { bubbles: true }));\n }\n}\n\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'pf-jump-links-item': PfJumpLinksItem;\n }\n}\n"]}
|
|
@@ -9,6 +9,7 @@ const style = css `:host{display:block}#container{display:contents;--pf-c-jump-l
|
|
|
9
9
|
* @cssprop --pf-c-jump-links__list__list__link--PaddingLeft
|
|
10
10
|
*/
|
|
11
11
|
let PfJumpLinksList = class PfJumpLinksList extends LitElement {
|
|
12
|
+
static { this.styles = [style]; }
|
|
12
13
|
render() {
|
|
13
14
|
return html `
|
|
14
15
|
<div id="container" role="listbox">
|
|
@@ -17,7 +18,6 @@ let PfJumpLinksList = class PfJumpLinksList extends LitElement {
|
|
|
17
18
|
`;
|
|
18
19
|
}
|
|
19
20
|
};
|
|
20
|
-
PfJumpLinksList.styles = [style];
|
|
21
21
|
PfJumpLinksList = __decorate([
|
|
22
22
|
customElement('pf-jump-links-list')
|
|
23
23
|
], PfJumpLinksList);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pf-jump-links-list.js","sourceRoot":"","sources":["pf-jump-links-list.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;;;AAIjE;;;;GAIG;AAEH,IAAa,eAAe,GAA5B,MAAa,eAAgB,SAAQ,UAAU;
|
|
1
|
+
{"version":3,"file":"pf-jump-links-list.js","sourceRoot":"","sources":["pf-jump-links-list.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;;;AAIjE;;;;GAIG;AAEH,IAAa,eAAe,GAA5B,MAAa,eAAgB,SAAQ,UAAU;aAC7B,WAAM,GAAG,CAAC,KAAK,CAAC,AAAV,CAAW;IAEjC,MAAM;QACJ,OAAO,IAAI,CAAA;;;;KAIV,CAAC;IACJ,CAAC;;AATU,eAAe;IAD3B,aAAa,CAAC,oBAAoB,CAAC;GACvB,eAAe,CAU3B;SAVY,eAAe","sourcesContent":["import { html, LitElement } from 'lit';\nimport { customElement } from 'lit/decorators/custom-element.js';\n\nimport style from './pf-jump-links-list.css';\n\n/**\n * @cssprop --pf-c-jump-links__list__list__link--PaddingTop -- padding around each link\n * @cssprop --pf-c-jump-links__list__list__link--PaddingBottom\n * @cssprop --pf-c-jump-links__list__list__link--PaddingLeft\n */\n@customElement('pf-jump-links-list')\nexport class PfJumpLinksList extends LitElement {\n static readonly styles = [style];\n\n render() {\n return html`\n <div id=\"container\" role=\"listbox\">\n <slot></slot>\n </div>\n `;\n }\n}\n\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'pf-jump-links-list': PfJumpLinksList;\n }\n}\n"]}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
import { __classPrivateFieldGet, __classPrivateFieldSet, __decorate } from "tslib";
|
|
1
|
+
import { __decorate } from "tslib";
|
|
3
2
|
import { html, LitElement } from 'lit';
|
|
4
3
|
import { customElement } from 'lit/decorators/custom-element.js';
|
|
5
4
|
import { property } from 'lit/decorators/property.js';
|
|
@@ -60,7 +59,6 @@ const style = css `[hidden]{display:none!important}:host{display:block}#containe
|
|
|
60
59
|
let PfJumpLinks = class PfJumpLinks extends LitElement {
|
|
61
60
|
constructor() {
|
|
62
61
|
super(...arguments);
|
|
63
|
-
_PfJumpLinks_instances.add(this);
|
|
64
62
|
/** Whether the element features a disclosure widget around the nav items */
|
|
65
63
|
this.expandable = false;
|
|
66
64
|
/** Whether the expandable element's disclosure widget is expanded */
|
|
@@ -71,66 +69,65 @@ let PfJumpLinks = class PfJumpLinks extends LitElement {
|
|
|
71
69
|
this.centered = false;
|
|
72
70
|
/** Offset to add to the scroll position, potentially for a masthead which content scrolls under. */
|
|
73
71
|
this.offset = 0;
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
72
|
+
this.#initialized = false;
|
|
73
|
+
this.#rovingTabindexController = new RovingTabindexController(this);
|
|
74
|
+
this.#spy = new ScrollSpyController(this, {
|
|
77
75
|
rootMargin: `${this.offset}px 0px 0px 0px`,
|
|
78
76
|
tagNames: ['pf-jump-links-item'],
|
|
79
|
-
})
|
|
77
|
+
});
|
|
80
78
|
}
|
|
79
|
+
static { this.styles = [style]; }
|
|
80
|
+
#initialized;
|
|
81
|
+
#rovingTabindexController;
|
|
82
|
+
#spy;
|
|
81
83
|
connectedCallback() {
|
|
82
84
|
super.connectedCallback();
|
|
83
|
-
this.addEventListener('select',
|
|
85
|
+
this.addEventListener('select', this.#onSelect);
|
|
84
86
|
}
|
|
85
87
|
updated(changed) {
|
|
86
88
|
if (changed.has('offset')) {
|
|
87
|
-
|
|
89
|
+
this.#spy.rootMargin = `${this.offset ?? 0}px 0px 0px 0px`;
|
|
88
90
|
}
|
|
89
91
|
}
|
|
90
92
|
render() {
|
|
91
93
|
return html `
|
|
92
94
|
<nav id="container">${this.expandable ? html `
|
|
93
|
-
<details ?open="${this.expanded}" @toggle="${
|
|
95
|
+
<details ?open="${this.expanded}" @toggle="${this.#onToggle}">
|
|
94
96
|
<summary>
|
|
95
97
|
<pf-icon icon="chevron-right"></pf-icon>
|
|
96
98
|
<span id="label">${this.label}</span>
|
|
97
99
|
</summary>
|
|
98
|
-
<slot role="listbox" @slotchange="${
|
|
100
|
+
<slot role="listbox" @slotchange="${this.#updateItems}"></slot>
|
|
99
101
|
</details>` : html `
|
|
100
102
|
<span id="label">${this.label}</span>
|
|
101
|
-
<slot role="listbox" @slotchange="${
|
|
103
|
+
<slot role="listbox" @slotchange="${this.#updateItems}"></slot>`}
|
|
102
104
|
</nav>
|
|
103
105
|
`;
|
|
104
106
|
}
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
107
|
+
#updateItems() {
|
|
108
|
+
const items = Array.from(this.querySelectorAll(':is(pf-jump-links-item, pf-jump-links-list)'))
|
|
109
|
+
.flatMap(i => [
|
|
110
|
+
...i.shadowRoot?.querySelectorAll('a') ?? [],
|
|
111
|
+
...i.querySelectorAll('a') ?? [],
|
|
112
|
+
]);
|
|
113
|
+
if (this.#initialized) {
|
|
114
|
+
this.#rovingTabindexController.updateItems(items);
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
this.#rovingTabindexController.initItems(items);
|
|
118
|
+
this.#initialized = true;
|
|
119
|
+
}
|
|
118
120
|
}
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
__classPrivateFieldSet(this, _PfJumpLinks_initialized, true, "f");
|
|
121
|
+
async #onSelect(event) {
|
|
122
|
+
this.#spy.setActive(event.target);
|
|
122
123
|
}
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
if (event.target instanceof HTMLDetailsElement) {
|
|
129
|
-
this.expanded = event.target.open;
|
|
124
|
+
#onToggle(event) {
|
|
125
|
+
if (event.target instanceof HTMLDetailsElement) {
|
|
126
|
+
this.expanded = event.target.open;
|
|
127
|
+
}
|
|
128
|
+
this.dispatchEvent(new Event('toggle'));
|
|
130
129
|
}
|
|
131
|
-
this.dispatchEvent(new Event('toggle'));
|
|
132
130
|
};
|
|
133
|
-
PfJumpLinks.styles = [style];
|
|
134
131
|
__decorate([
|
|
135
132
|
property({ reflect: true, type: Boolean })
|
|
136
133
|
], PfJumpLinks.prototype, "expandable", void 0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pf-jump-links.js","sourceRoot":"","sources":["pf-jump-links.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pf-jump-links.js","sourceRoot":"","sources":["pf-jump-links.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAEtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,2DAA2D,CAAC;AAChG,OAAO,EAAE,wBAAwB,EAAE,MAAM,gEAAgE,CAAC;AAE1G,OAAO,yCAAyC,CAAC;AAEjD,OAAO,yBAAyB,CAAC;;;AAIjC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AAEH,IAAa,WAAW,GAAxB,MAAa,WAAY,SAAQ,UAAU;IAA3C;;QAGE,4EAA4E;QAChC,eAAU,GAAG,KAAK,CAAC;QAE/D,qEAAqE;QACzB,aAAQ,GAAG,KAAK,CAAC;QAE7D,gEAAgE;QACpB,aAAQ,GAAG,KAAK,CAAC;QAE7D,kCAAkC;QACU,aAAQ,GAAG,KAAK,CAAC;QAE7D,oGAAoG;QACxE,WAAM,GAAG,CAAC,CAAC;QAKvC,iBAAY,GAAG,KAAK,CAAC;QAErB,8BAAyB,GAAG,IAAI,wBAAwB,CAAC,IAAI,CAAC,CAAC;QAE/D,SAAI,GAAG,IAAI,mBAAmB,CAAC,IAAI,EAAE;YACnC,UAAU,EAAE,GAAG,IAAI,CAAC,MAAM,gBAAgB;YAC1C,QAAQ,EAAE,CAAC,oBAAoB,CAAC;SACjC,CAAC,CAAC;IAqDL,CAAC;aAhFiB,WAAM,GAAG,CAAC,KAAK,CAAC,AAAV,CAAW;IAoBjC,YAAY,CAAS;IAErB,yBAAyB,CAAsC;IAE/D,IAAI,CAGD;IAEM,iBAAiB;QACxB,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC1B,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAClD,CAAC;IAEQ,OAAO,CAAC,OAA6B;QAC5C,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;YACzB,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC;SAC5D;IACH,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAA;4BACa,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAA;0BACxB,IAAI,CAAC,QAAQ,cAAc,IAAI,CAAC,SAAS;;;+BAGpC,IAAI,CAAC,KAAK;;8CAEK,IAAI,CAAC,YAAY;mBAC5C,CAAC,CAAC,CAAC,IAAI,CAAA;2BACC,IAAI,CAAC,KAAK;4CACO,IAAI,CAAC,YAAY,WAAW;;KAEnE,CAAC;IACJ,CAAC;IAED,YAAY;QACV,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,6CAA6C,CAAC,CAAC;aAC3F,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACZ,GAAG,CAAC,CAAC,UAAU,EAAE,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE;YAC5C,GAAG,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE;SACjC,CAAC,CAAC;QACL,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,IAAI,CAAC,yBAAyB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;SACnD;aAAM;YACL,IAAI,CAAC,yBAAyB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAChD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;SAC1B;IACH,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,KAAY;QAC1B,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IAED,SAAS,CAAC,KAAY;QACpB,IAAI,KAAK,CAAC,MAAM,YAAY,kBAAkB,EAAE;YAC9C,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;SACnC;QACD,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC1C,CAAC;;AA5E2C;IAA3C,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;+CAAoB;AAGnB;IAA3C,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;6CAAkB;AAGjB;IAA3C,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;6CAAkB;AAGjB;IAA3C,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;6CAAkB;AAGjC;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;2CAAY;AAG3B;IAAX,QAAQ,EAAE;0CAAgB;AAnBhB,WAAW;IADvB,aAAa,CAAC,eAAe,CAAC;GAClB,WAAW,CAiFvB;SAjFY,WAAW","sourcesContent":["import { html, LitElement } from 'lit';\nimport { customElement } from 'lit/decorators/custom-element.js';\nimport { property } from 'lit/decorators/property.js';\n\nimport { ScrollSpyController } from '@patternfly/pfe-core/controllers/scroll-spy-controller.js';\nimport { RovingTabindexController } from '@patternfly/pfe-core/controllers/roving-tabindex-controller.js';\n\nimport '@patternfly/elements/pf-icon/pf-icon.js';\n\nimport './pf-jump-links-item.js';\n\nimport style from './pf-jump-links.css';\n\n/**\n * **Jump links** allow users to navigate to sections within a page.\n *\n * @fires toggle - when the `expanded` disclosure widget is toggled\n * @slot - Place pf-jump-links-items here\n *\n * @cssprop --pf-c-jump-links__list--Display\n * @cssprop --pf-c-jump-links__list--FlexDirection\n * @cssprop --pf-c-jump-links__list--PaddingTop -- padding around the list of links\n * @cssprop --pf-c-jump-links__list--PaddingRight\n * @cssprop --pf-c-jump-links__list--PaddingBottom\n * @cssprop --pf-c-jump-links__list--PaddingLeft\n * @cssprop --pf-c-jump-links__list--Visibility\n * @cssprop --pf-c-jump-links__list--before--BorderColor\n * @cssprop --pf-c-jump-links__list--before--BorderTopWidth\n * @cssprop --pf-c-jump-links__list--before--BorderRightWidth\n * @cssprop --pf-c-jump-links__list--before--BorderBottomWidth\n * @cssprop --pf-c-jump-links__list--before--BorderLeftWidth\n * @cssprop --pf-c-jump-links__toggle--MarginBottom--base\n *\n * @cssprop --pf-c-jump-links__toggle--MarginTop -- padding around the expandable jump links disclosure widget.\n * @cssprop --pf-c-jump-links__toggle--MarginBottom\n * @cssprop --pf-c-jump-links__toggle--MarginBottom--base\n * @cssprop --pf-c-jump-links__toggle--MarginLeft\n * @cssprop --pf-c-jump-links__toggle-text--Color\n * @cssprop --pf-c-button--PaddingTop -- padding around the expandable jump links disclosure widget.\n * @cssprop --pf-c-button--PaddingRight\n * @cssprop --pf-c-button--PaddingBottom\n * @cssprop --pf-c-button--PaddingLeft\n *\n * @cssprop --pf-c-jump-links__toggle-icon--Rotate\n * @cssprop --pf-c-jump-links__toggle-icon--Transition\n * @cssprop --pf-c-jump-links__toggle-text--MarginLeft\n *\n * @cssprop --pf-c-jump-links--m-expanded__toggle--MarginBottom\n * @cssprop --pf-c-jump-links--m-expanded__toggle-icon--Rotate\n * @cssprop --pf-c-jump-links--m-expanded__toggle-icon--Color\n *\n * @cssprop --pf-c-jump-links--m-vertical__list--PaddingTop\n * @cssprop --pf-c-jump-links--m-vertical__list--PaddingRight\n * @cssprop --pf-c-jump-links--m-vertical__list--PaddingBottom\n * @cssprop --pf-c-jump-links--m-vertical__list--PaddingLeft\n * @cssprop --pf-c-jump-links--m-vertical__list--before--BorderTopWidth\n * @cssprop --pf-c-jump-links--m-vertical__list--before--BorderLeftWidth\n * @cssprop --pf-c-jump-links--m-vertical__item--m-current__link--before--BorderTopWidth\n * @cssprop --pf-c-jump-links--m-vertical__item--m-current__link--before--BorderLeftWidth\n * @cssprop --pf-c-jump-links--m-vertical__list--FlexDirection\n */\n@customElement('pf-jump-links')\nexport class PfJumpLinks extends LitElement {\n static readonly styles = [style];\n\n /** Whether the element features a disclosure widget around the nav items */\n @property({ reflect: true, type: Boolean }) expandable = false;\n\n /** Whether the expandable element's disclosure widget is expanded */\n @property({ reflect: true, type: Boolean }) expanded = false;\n\n /** Whether the layout of children is vertical or horizontal. */\n @property({ reflect: true, type: Boolean }) vertical = false;\n\n /** Whether to center children. */\n @property({ reflect: true, type: Boolean }) centered = false;\n\n /** Offset to add to the scroll position, potentially for a masthead which content scrolls under. */\n @property({ type: Number }) offset = 0;\n\n /** Label to add to nav element. */\n @property() label?: string;\n\n #initialized = false;\n\n #rovingTabindexController = new RovingTabindexController(this);\n\n #spy = new ScrollSpyController(this, {\n rootMargin: `${this.offset}px 0px 0px 0px`,\n tagNames: ['pf-jump-links-item'],\n });\n\n override connectedCallback() {\n super.connectedCallback();\n this.addEventListener('select', this.#onSelect);\n }\n\n override updated(changed: Map<string, unknown>) {\n if (changed.has('offset')) {\n this.#spy.rootMargin = `${this.offset ?? 0}px 0px 0px 0px`;\n }\n }\n\n render() {\n return html`\n <nav id=\"container\">${this.expandable ? html`\n <details ?open=\"${this.expanded}\" @toggle=\"${this.#onToggle}\">\n <summary>\n <pf-icon icon=\"chevron-right\"></pf-icon>\n <span id=\"label\">${this.label}</span>\n </summary>\n <slot role=\"listbox\" @slotchange=\"${this.#updateItems}\"></slot>\n </details>` : html`\n <span id=\"label\">${this.label}</span>\n <slot role=\"listbox\" @slotchange=\"${this.#updateItems}\"></slot>`}\n </nav>\n `;\n }\n\n #updateItems() {\n const items = Array.from(this.querySelectorAll(':is(pf-jump-links-item, pf-jump-links-list)'))\n .flatMap(i => [\n ...i.shadowRoot?.querySelectorAll('a') ?? [],\n ...i.querySelectorAll('a') ?? [],\n ]);\n if (this.#initialized) {\n this.#rovingTabindexController.updateItems(items);\n } else {\n this.#rovingTabindexController.initItems(items);\n this.#initialized = true;\n }\n }\n\n async #onSelect(event: Event) {\n this.#spy.setActive(event.target);\n }\n\n #onToggle(event: Event) {\n if (event.target instanceof HTMLDetailsElement) {\n this.expanded = event.target.open;\n }\n this.dispatchEvent(new Event('toggle'));\n }\n}\n\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'pf-jump-links': PfJumpLinks;\n }\n}\n"]}
|
package/pf-label/BaseLabel.js
CHANGED
|
@@ -12,6 +12,7 @@ class BaseLabel extends LitElement {
|
|
|
12
12
|
/** Represents the state of the anonymous and icon slots */
|
|
13
13
|
this.slots = new SlotController(this, null, 'icon');
|
|
14
14
|
}
|
|
15
|
+
static { this.styles = [styles]; }
|
|
15
16
|
render() {
|
|
16
17
|
const { variant, color, icon } = this;
|
|
17
18
|
const hasIcon = !!icon || this.slots.hasSlotted('icon');
|
|
@@ -25,6 +26,5 @@ class BaseLabel extends LitElement {
|
|
|
25
26
|
`;
|
|
26
27
|
}
|
|
27
28
|
}
|
|
28
|
-
BaseLabel.styles = [styles];
|
|
29
29
|
export { BaseLabel };
|
|
30
30
|
//# sourceMappingURL=BaseLabel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseLabel.js","sourceRoot":"","sources":["BaseLabel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAEvD,OAAO,EAAE,cAAc,EAAE,MAAM,qDAAqD,CAAC;;;AAIrF;;EAEE;AACF,MAAsB,SAAU,SAAQ,UAAU;IAAlD;;QASE,2DAA2D;QACjD,UAAK,GAAG,IAAI,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAgC3D,CAAC;
|
|
1
|
+
{"version":3,"file":"BaseLabel.js","sourceRoot":"","sources":["BaseLabel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAEvD,OAAO,EAAE,cAAc,EAAE,MAAM,qDAAqD,CAAC;;;AAIrF;;EAEE;AACF,MAAsB,SAAU,SAAQ,UAAU;IAAlD;;QASE,2DAA2D;QACjD,UAAK,GAAG,IAAI,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAgC3D,CAAC;aAzCiB,WAAM,GAAG,CAAC,MAAM,CAAC,AAAX,CAAY;IAWzB,MAAM;QACb,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;QACtC,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACxD,OAAO,IAAI,CAAA;;oBAEK,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;wCACrD,IAAI,CAAC,iBAAiB,EAAE,EAAE;;UAExD,IAAI,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE;;KAEhC,CAAC;IACJ,CAAC;;SAvBmB,SAAS","sourcesContent":["import { LitElement, html } from 'lit';\nimport { classMap } from 'lit/directives/class-map.js';\n\nimport { SlotController } from '@patternfly/pfe-core/controllers/slot-controller.js';\n\nimport styles from './BaseLabel.css';\n\n/**\n * Base label class\n*/\nexport abstract class BaseLabel extends LitElement {\n static readonly styles = [styles];\n\n abstract variant?: string;\n\n abstract color?: string;\n\n abstract icon?: string;\n\n /** Represents the state of the anonymous and icon slots */\n protected slots = new SlotController(this, null, 'icon');\n\n override render() {\n const { variant, color, icon } = this;\n const hasIcon = !!icon || this.slots.hasSlotted('icon');\n return html`\n <span id=\"container\"\n class=${classMap({ hasIcon, [variant ?? '']: !!variant, [color ?? '']: !!color })}>\n <slot name=\"icon\" part=\"icon\">${this.renderDefaultIcon?.()}</slot>\n <slot id=\"text\"></slot>\n ${this.renderSuffix?.() ?? ''}\n </span>\n `;\n }\n\n /**\n * Fallback content for the icon slot. When the `icon` attribute is set, it\n * should render an icon corresponding to the value.\n *\n * @example ```html\n * <pf-icon icon=${this.icon}></pf-icon>\n * ```\n */\n protected abstract renderDefaultIcon?(): unknown;\n\n /**\n * Optional override to render content after the anonymous slot.\n * @example ```html\n * <button id=\"close-button\">X</button>\n * ```\n */\n protected abstract renderSuffix?(): unknown;\n}\n"]}
|
package/pf-label/pf-label.js
CHANGED
|
@@ -112,6 +112,8 @@ let PfLabel = class PfLabel extends BaseLabel {
|
|
|
112
112
|
/** Flag indicating the label is removable */
|
|
113
113
|
this.removable = false;
|
|
114
114
|
}
|
|
115
|
+
static { this.styles = [...BaseLabel.styles, styles]; }
|
|
116
|
+
static { this.shadowRootOptions = { ...BaseLabel.shadowRootOptions, delegatesFocus: true }; }
|
|
115
117
|
render() {
|
|
116
118
|
const { compact, truncated } = this;
|
|
117
119
|
return html `
|
|
@@ -137,8 +139,6 @@ let PfLabel = class PfLabel extends BaseLabel {
|
|
|
137
139
|
`;
|
|
138
140
|
}
|
|
139
141
|
};
|
|
140
|
-
PfLabel.styles = [...BaseLabel.styles, styles];
|
|
141
|
-
PfLabel.shadowRootOptions = { ...BaseLabel.shadowRootOptions, delegatesFocus: true };
|
|
142
142
|
__decorate([
|
|
143
143
|
property()
|
|
144
144
|
], PfLabel.prototype, "variant", void 0);
|
package/pf-label/pf-label.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pf-label.js","sourceRoot":"","sources":["pf-label.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAC3B,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAEvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,6CAA6C,CAAC;;;AAoBrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmFG;AAEH,IAAa,OAAO,GAApB,MAAa,OAAQ,SAAQ,SAAS;IAAtC;;QAKE;;;;WAIG;QACS,YAAO,GAAiB,QAAQ,CAAC;QAE7C;;WAEG;QACS,UAAK,GAAe,MAAM,CAAC;QAKvC,2CAA2C;QACd,YAAO,GAAG,KAAK,CAAC;QAE7C,yDAAyD;QAC5B,cAAS,GAAG,KAAK,CAAC;QAE/C,6CAA6C;QAChB,cAAS,GAAG,KAAK,CAAC;IA+BjD,CAAC;IA1BU,MAAM;QACb,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;QACpC,OAAO,IAAI,CAAA;uCACwB,QAAQ,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,KAAK,KAAK,CAAC,MAAM,EAAE;KACrF,CAAC;IACJ,CAAC;IAEkB,iBAAiB;QAClC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;uBACV,IAAI,CAAC,IAAI;KAC3B,CAAC;IACJ,CAAC;IAEkB,YAAY;QAC7B,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;0CACI,CAAC,IAAI,CAAC,SAAS;;8BAE3B,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;6BACrD,IAAI,CAAC,gBAAgB,IAAI,QAAQ;;;;;;KAMzD,CAAC;IACJ,CAAC;;AAxDe,cAAM,GAAG,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,AAAhC,CAAiC;AAEvC,yBAAiB,GAAmB,EAAE,GAAG,SAAS,CAAC,iBAAiB,EAAE,cAAc,EAAE,IAAI,EAAE,AAA3E,CAA4E;AAOjG;IAAX,QAAQ,EAAE;wCAAkC;AAKjC;IAAX,QAAQ,EAAE;sCAA4B;AAG3B;IAAX,QAAQ,EAAE;qCAAe;AAGG;IAA5B,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;wCAAiB;AAGhB;IAA5B,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;0CAAmB;AAGlB;IAA5B,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;0CAAmB;AAGA;IAA9C,QAAQ,CAAC,EAAE,SAAS,EAAE,oBAAoB,EAAE,CAAC;iDAA2B;AA9B9D,OAAO;IADnB,aAAa,CAAC,UAAU,CAAC;GACb,OAAO,CA0DnB;SA1DY,OAAO","sourcesContent":["import { html } from 'lit';\nimport { customElement } from 'lit/decorators/custom-element.js';\nimport { property } from 'lit/decorators/property.js';\nimport { classMap } from 'lit/directives/class-map.js';\n\nimport { ComposedEvent } from '@patternfly/pfe-core';\n\nimport { BaseLabel } from './BaseLabel.js';\n\nimport '@patternfly/elements/pf-button/pf-button.js';\n\nimport styles from './pf-label.css';\n\nexport type LabelVariant = (\n | 'filled'\n | 'outline'\n);\n\nexport type LabelColor = (\n | 'blue'\n | 'cyan'\n | 'green'\n | 'orange'\n | 'purple'\n | 'red'\n | 'grey'\n | 'gold'\n)\n\n/**\n * The **label** component allows users to add specific element captions for user\n * clarity and convenience.\n *\n * @summary Allows users to display meta data in a stylized form.\n *\n * @fires close - when a removable label's close button is clicked\n *\n * @cssprop {<length>} --pf-c-label--FontSize {@default `0.875em`}\n *\n * @cssprop {<length>} --pf-c-label--PaddingTop {@default `0.25rem`}\n * @cssprop {<length>} --pf-c-label--PaddingRight {@default `0.5rem`}\n * @cssprop {<length>} --pf-c-label--PaddingBottom {@default `0.25rem`}\n * @cssprop {<length>} --pf-c-label--PaddingLeft {@default `0.5rem`}\n *\n * @cssprop {<color>} --pf-c-label--Color {@default `#151515`}\n * @cssprop {<color>} --pf-c-label--BackgroundColor {@default `#f5f5f5`}\n *\n * @cssprop {<length>} --pf-c-label--BorderRadius {@default `30em`}\n *\n * @cssprop {<length>} --pf-c-label__content--MaxWidth {@default `100%`}\n * @cssprop {<color>} --pf-c-label__content--Color {@default `#151515`}\n * @cssprop {<length>} --pf-c-label__content--before--BorderWidth {@default `1px`}\n * @cssprop {<color>} --pf-c-label__content--before--BorderColor {@default `#d2d2d2`}\n *\n * @cssprop {<color>} --pf-c-label--m-outline__content--Color {@default `#151515`}\n * @cssprop {<color>} --pf-c-label--m-outline--BackgroundColor {@default `#ffffff`}\n *\n * @cssprop {<color>} --pf-c-label--m-blue__content--Color {@default `#002952`}\n * @cssprop {<color>} --pf-c-label--m-blue--BackgroundColor {@default `#e7f1fa`}\n * @cssprop {<color>} --pf-c-label--m-blue__content--before--BorderColor {@default `#bee1f4`}\n * @cssprop {<color>} --pf-c-label--m-outline--m-blue__content--Color {@default `#06c`}\n *\n * @cssprop {<color>} --pf-c-label--m-cyan__content--Color {@default `#3b1f00`}\n * @cssprop {<color>} --pf-c-label--m-cyan--BackgroundColor {@default `#f2f9f9`}\n * @cssprop {<color>} --pf-c-label--m-cyan__content--before--BorderColor {@default `#a2d9d9`}\n * @cssprop {<color>} --pf-c-label--m-outline--m-cyan__content--Color {@default `#005f60`}\n *\n * @cssprop {<color>} --pf-c-label--m-green__content--Color {@default `#1e4f18`}\n * @cssprop {<color>} --pf-c-label--m-green--BackgroundColor {@default `#f3faf2`}\n * @cssprop {<color>} --pf-c-label--m-green__content--before--BorderColor {@default `#bde5b8`}\n * @cssprop {<color>} --pf-c-label--m-outline--m-green__content--Color {@default `#3e8635`}\n *\n * @cssprop {<color>} --pf-c-label--m-orange__content--Color {@default `#003737`}\n * @cssprop {<color>} --pf-c-label--m-orange--BackgroundColor {@default `#fff6ec`}\n * @cssprop {<color>} --pf-c-label--m-orange__content--before--BorderColor {@default `#f4b678`}\n * @cssprop {<color>} --pf-c-label--m-outline--m-orange__content--Color {@default `#8f4700`}\n *\n * @cssprop {<color>} --pf-c-label--m-purple__content--Color {@default `#1f0066`}\n * @cssprop {<color>} --pf-c-label--m-purple--BackgroundColor {@default `#f2f0fc`}\n * @cssprop {<color>} --pf-c-label--m-purple__content--before--BorderColor {@default `#cbc1ff`}\n * @cssprop {<color>} --pf-c-label--m-outline--m-purple__content--Color {@default `#6753ac`}\n *\n * @cssprop {<color>} --pf-c-label--m-red__content--Color {@default `#7d1007`}\n * @cssprop {<color>} --pf-c-label--m-red--BackgroundColor {@default `#faeae8`}\n * @cssprop {<color>} --pf-c-label--m-red__content--before--BorderColor {@default `#c9190b`}\n * @cssprop {<color>} --pf-c-label--m-outline--m-red__content--Color {@default `#c9190b`}\n *\n * @cssprop {<color>} --pf-c-label--m-gold__content--Color {@default `#3d2c00`}\n * @cssprop {<color>} --pf-c-label--m-gold--BackgroundColor {@default `#fdf7e7`}\n * @cssprop {<color>} --pf-c-label--m-gold__content--before--BorderColor {@default `#f9e0a2`}\n * @cssprop {<color>} --pf-c-label--m-outline--m-gold__content--Color {@default `#795600`}\n\n * @cssprop {<color>} --pf-c-label--m-blue__icon--Color {@default `#06c`}\n * @cssprop {<color>} --pf-c-label--m-cyan__icon--Color {@default `#009596`}\n * @cssprop {<color>} --pf-c-label--m-green__icon--Color {@default `#3e8635`}\n * @cssprop {<color>} --pf-c-label--m-orange__icon--Color {@default `#ec7a08`}\n * @cssprop {<color>} --pf-c-label--m-red__icon--Color {@default `#c9190b`}\n * @cssprop {<color>} --pf-c-label--m-gold__icon--Color {@default `#f0ab00`}\n *\n * @csspart icon - container for the label icon\n * @csspart close-button - container for removable labels' close button\n *\n * @slot icon\n * Contains the labels's icon, e.g. web-icon-alert-success.\n *\n * @slot\n * Must contain the text for the label.\n *\n * @cssprop {<length>} --pf-c-label--m-compact--PaddingTop {@default `0`}\n * @cssprop {<length>} --pf-c-label--m-compact--PaddingRight {@default `0.5rem`}\n * @cssprop {<length>} --pf-c-label--m-compact--PaddingBottom {@default `0`}\n * @cssprop {<length>} --pf-c-label--m-compact--PaddingLeft {@default `0.5rem`}\n */\n@customElement('pf-label')\nexport class PfLabel extends BaseLabel {\n static readonly styles = [...BaseLabel.styles, styles];\n\n static readonly shadowRootOptions: ShadowRootInit = { ...BaseLabel.shadowRootOptions, delegatesFocus: true };\n\n /**\n * Changes the style of the label.\n * - Filled: Colored background with colored border.\n * - Outline: White background with colored border.\n */\n @property() variant: LabelVariant = 'filled';\n\n /**\n * Changes the color of the label\n */\n @property() color: LabelColor = 'grey';\n\n /** Shorthand for the `icon` slot, the value is icon name */\n @property() icon?: string;\n\n /** Flag indicating the label is compact */\n @property({ type: Boolean }) compact = false;\n\n /** Flag indicating the label text should be truncated */\n @property({ type: Boolean }) truncated = false;\n\n /** Flag indicating the label is removable */\n @property({ type: Boolean }) removable = false;\n\n /** Text label for a removable label's close button */\n @property({ attribute: 'close-button-label' }) closeButtonLabel?: string;\n\n override render() {\n const { compact, truncated } = this;\n return html`\n <span id=\"pf-container\" class=\"${classMap({ compact, truncated })}\">${super.render()}</span>\n `;\n }\n\n protected override renderDefaultIcon() {\n return !this.icon ? '' : html`\n <pf-icon icon=\"${this.icon}\" size=\"sm\"></pf-icon>\n `;\n }\n\n protected override renderSuffix() {\n return !this.removable ? '' : html`\n <span part=\"close-button\" ?hidden=${!this.removable}>\n <pf-button plain\n @click=\"${() => this.dispatchEvent(new ComposedEvent('close'))}\"\n label=\"${this.closeButtonLabel ?? 'remove'}\">\n <svg viewBox=\"0 0 352 512\">\n <path d=\"M242.72 256l100.07-100.07c12.28-12.28 12.28-32.19 0-44.48l-22.24-22.24c-12.28-12.28-32.19-12.28-44.48 0L176 189.28 75.93 89.21c-12.28-12.28-32.19-12.28-44.48 0L9.21 111.45c-12.28 12.28-12.28 32.19 0 44.48L109.28 256 9.21 356.07c-12.28 12.28-12.28 32.19 0 44.48l22.24 22.24c12.28 12.28 32.2 12.28 44.48 0L176 322.72l100.07 100.07c12.28 12.28 32.2 12.28 44.48 0l22.24-22.24c12.28-12.28 12.28-32.19 0-44.48L242.72 256z\"/>\n </svg>\n </pf-button>\n </span>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'pf-label': PfLabel;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"pf-label.js","sourceRoot":"","sources":["pf-label.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAC3B,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAEvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,6CAA6C,CAAC;;;AAoBrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmFG;AAEH,IAAa,OAAO,GAApB,MAAa,OAAQ,SAAQ,SAAS;IAAtC;;QAKE;;;;WAIG;QACS,YAAO,GAAiB,QAAQ,CAAC;QAE7C;;WAEG;QACS,UAAK,GAAe,MAAM,CAAC;QAKvC,2CAA2C;QACd,YAAO,GAAG,KAAK,CAAC;QAE7C,yDAAyD;QAC5B,cAAS,GAAG,KAAK,CAAC;QAE/C,6CAA6C;QAChB,cAAS,GAAG,KAAK,CAAC;IA+BjD,CAAC;aAzDiB,WAAM,GAAG,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,AAAhC,CAAiC;aAEvC,sBAAiB,GAAmB,EAAE,GAAG,SAAS,CAAC,iBAAiB,EAAE,cAAc,EAAE,IAAI,EAAE,AAA3E,CAA4E;IA6BpG,MAAM;QACb,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;QACpC,OAAO,IAAI,CAAA;uCACwB,QAAQ,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,KAAK,KAAK,CAAC,MAAM,EAAE;KACrF,CAAC;IACJ,CAAC;IAEkB,iBAAiB;QAClC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;uBACV,IAAI,CAAC,IAAI;KAC3B,CAAC;IACJ,CAAC;IAEkB,YAAY;QAC7B,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;0CACI,CAAC,IAAI,CAAC,SAAS;;8BAE3B,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;6BACrD,IAAI,CAAC,gBAAgB,IAAI,QAAQ;;;;;;KAMzD,CAAC;IACJ,CAAC;;AA/CW;IAAX,QAAQ,EAAE;wCAAkC;AAKjC;IAAX,QAAQ,EAAE;sCAA4B;AAG3B;IAAX,QAAQ,EAAE;qCAAe;AAGG;IAA5B,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;wCAAiB;AAGhB;IAA5B,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;0CAAmB;AAGlB;IAA5B,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;0CAAmB;AAGA;IAA9C,QAAQ,CAAC,EAAE,SAAS,EAAE,oBAAoB,EAAE,CAAC;iDAA2B;AA9B9D,OAAO;IADnB,aAAa,CAAC,UAAU,CAAC;GACb,OAAO,CA0DnB;SA1DY,OAAO","sourcesContent":["import { html } from 'lit';\nimport { customElement } from 'lit/decorators/custom-element.js';\nimport { property } from 'lit/decorators/property.js';\nimport { classMap } from 'lit/directives/class-map.js';\n\nimport { ComposedEvent } from '@patternfly/pfe-core';\n\nimport { BaseLabel } from './BaseLabel.js';\n\nimport '@patternfly/elements/pf-button/pf-button.js';\n\nimport styles from './pf-label.css';\n\nexport type LabelVariant = (\n | 'filled'\n | 'outline'\n);\n\nexport type LabelColor = (\n | 'blue'\n | 'cyan'\n | 'green'\n | 'orange'\n | 'purple'\n | 'red'\n | 'grey'\n | 'gold'\n)\n\n/**\n * The **label** component allows users to add specific element captions for user\n * clarity and convenience.\n *\n * @summary Allows users to display meta data in a stylized form.\n *\n * @fires close - when a removable label's close button is clicked\n *\n * @cssprop {<length>} --pf-c-label--FontSize {@default `0.875em`}\n *\n * @cssprop {<length>} --pf-c-label--PaddingTop {@default `0.25rem`}\n * @cssprop {<length>} --pf-c-label--PaddingRight {@default `0.5rem`}\n * @cssprop {<length>} --pf-c-label--PaddingBottom {@default `0.25rem`}\n * @cssprop {<length>} --pf-c-label--PaddingLeft {@default `0.5rem`}\n *\n * @cssprop {<color>} --pf-c-label--Color {@default `#151515`}\n * @cssprop {<color>} --pf-c-label--BackgroundColor {@default `#f5f5f5`}\n *\n * @cssprop {<length>} --pf-c-label--BorderRadius {@default `30em`}\n *\n * @cssprop {<length>} --pf-c-label__content--MaxWidth {@default `100%`}\n * @cssprop {<color>} --pf-c-label__content--Color {@default `#151515`}\n * @cssprop {<length>} --pf-c-label__content--before--BorderWidth {@default `1px`}\n * @cssprop {<color>} --pf-c-label__content--before--BorderColor {@default `#d2d2d2`}\n *\n * @cssprop {<color>} --pf-c-label--m-outline__content--Color {@default `#151515`}\n * @cssprop {<color>} --pf-c-label--m-outline--BackgroundColor {@default `#ffffff`}\n *\n * @cssprop {<color>} --pf-c-label--m-blue__content--Color {@default `#002952`}\n * @cssprop {<color>} --pf-c-label--m-blue--BackgroundColor {@default `#e7f1fa`}\n * @cssprop {<color>} --pf-c-label--m-blue__content--before--BorderColor {@default `#bee1f4`}\n * @cssprop {<color>} --pf-c-label--m-outline--m-blue__content--Color {@default `#06c`}\n *\n * @cssprop {<color>} --pf-c-label--m-cyan__content--Color {@default `#3b1f00`}\n * @cssprop {<color>} --pf-c-label--m-cyan--BackgroundColor {@default `#f2f9f9`}\n * @cssprop {<color>} --pf-c-label--m-cyan__content--before--BorderColor {@default `#a2d9d9`}\n * @cssprop {<color>} --pf-c-label--m-outline--m-cyan__content--Color {@default `#005f60`}\n *\n * @cssprop {<color>} --pf-c-label--m-green__content--Color {@default `#1e4f18`}\n * @cssprop {<color>} --pf-c-label--m-green--BackgroundColor {@default `#f3faf2`}\n * @cssprop {<color>} --pf-c-label--m-green__content--before--BorderColor {@default `#bde5b8`}\n * @cssprop {<color>} --pf-c-label--m-outline--m-green__content--Color {@default `#3e8635`}\n *\n * @cssprop {<color>} --pf-c-label--m-orange__content--Color {@default `#003737`}\n * @cssprop {<color>} --pf-c-label--m-orange--BackgroundColor {@default `#fff6ec`}\n * @cssprop {<color>} --pf-c-label--m-orange__content--before--BorderColor {@default `#f4b678`}\n * @cssprop {<color>} --pf-c-label--m-outline--m-orange__content--Color {@default `#8f4700`}\n *\n * @cssprop {<color>} --pf-c-label--m-purple__content--Color {@default `#1f0066`}\n * @cssprop {<color>} --pf-c-label--m-purple--BackgroundColor {@default `#f2f0fc`}\n * @cssprop {<color>} --pf-c-label--m-purple__content--before--BorderColor {@default `#cbc1ff`}\n * @cssprop {<color>} --pf-c-label--m-outline--m-purple__content--Color {@default `#6753ac`}\n *\n * @cssprop {<color>} --pf-c-label--m-red__content--Color {@default `#7d1007`}\n * @cssprop {<color>} --pf-c-label--m-red--BackgroundColor {@default `#faeae8`}\n * @cssprop {<color>} --pf-c-label--m-red__content--before--BorderColor {@default `#c9190b`}\n * @cssprop {<color>} --pf-c-label--m-outline--m-red__content--Color {@default `#c9190b`}\n *\n * @cssprop {<color>} --pf-c-label--m-gold__content--Color {@default `#3d2c00`}\n * @cssprop {<color>} --pf-c-label--m-gold--BackgroundColor {@default `#fdf7e7`}\n * @cssprop {<color>} --pf-c-label--m-gold__content--before--BorderColor {@default `#f9e0a2`}\n * @cssprop {<color>} --pf-c-label--m-outline--m-gold__content--Color {@default `#795600`}\n\n * @cssprop {<color>} --pf-c-label--m-blue__icon--Color {@default `#06c`}\n * @cssprop {<color>} --pf-c-label--m-cyan__icon--Color {@default `#009596`}\n * @cssprop {<color>} --pf-c-label--m-green__icon--Color {@default `#3e8635`}\n * @cssprop {<color>} --pf-c-label--m-orange__icon--Color {@default `#ec7a08`}\n * @cssprop {<color>} --pf-c-label--m-red__icon--Color {@default `#c9190b`}\n * @cssprop {<color>} --pf-c-label--m-gold__icon--Color {@default `#f0ab00`}\n *\n * @csspart icon - container for the label icon\n * @csspart close-button - container for removable labels' close button\n *\n * @slot icon\n * Contains the labels's icon, e.g. web-icon-alert-success.\n *\n * @slot\n * Must contain the text for the label.\n *\n * @cssprop {<length>} --pf-c-label--m-compact--PaddingTop {@default `0`}\n * @cssprop {<length>} --pf-c-label--m-compact--PaddingRight {@default `0.5rem`}\n * @cssprop {<length>} --pf-c-label--m-compact--PaddingBottom {@default `0`}\n * @cssprop {<length>} --pf-c-label--m-compact--PaddingLeft {@default `0.5rem`}\n */\n@customElement('pf-label')\nexport class PfLabel extends BaseLabel {\n static readonly styles = [...BaseLabel.styles, styles];\n\n static readonly shadowRootOptions: ShadowRootInit = { ...BaseLabel.shadowRootOptions, delegatesFocus: true };\n\n /**\n * Changes the style of the label.\n * - Filled: Colored background with colored border.\n * - Outline: White background with colored border.\n */\n @property() variant: LabelVariant = 'filled';\n\n /**\n * Changes the color of the label\n */\n @property() color: LabelColor = 'grey';\n\n /** Shorthand for the `icon` slot, the value is icon name */\n @property() icon?: string;\n\n /** Flag indicating the label is compact */\n @property({ type: Boolean }) compact = false;\n\n /** Flag indicating the label text should be truncated */\n @property({ type: Boolean }) truncated = false;\n\n /** Flag indicating the label is removable */\n @property({ type: Boolean }) removable = false;\n\n /** Text label for a removable label's close button */\n @property({ attribute: 'close-button-label' }) closeButtonLabel?: string;\n\n override render() {\n const { compact, truncated } = this;\n return html`\n <span id=\"pf-container\" class=\"${classMap({ compact, truncated })}\">${super.render()}</span>\n `;\n }\n\n protected override renderDefaultIcon() {\n return !this.icon ? '' : html`\n <pf-icon icon=\"${this.icon}\" size=\"sm\"></pf-icon>\n `;\n }\n\n protected override renderSuffix() {\n return !this.removable ? '' : html`\n <span part=\"close-button\" ?hidden=${!this.removable}>\n <pf-button plain\n @click=\"${() => this.dispatchEvent(new ComposedEvent('close'))}\"\n label=\"${this.closeButtonLabel ?? 'remove'}\">\n <svg viewBox=\"0 0 352 512\">\n <path d=\"M242.72 256l100.07-100.07c12.28-12.28 12.28-32.19 0-44.48l-22.24-22.24c-12.28-12.28-32.19-12.28-44.48 0L176 189.28 75.93 89.21c-12.28-12.28-32.19-12.28-44.48 0L9.21 111.45c-12.28 12.28-12.28 32.19 0 44.48L109.28 256 9.21 356.07c-12.28 12.28-12.28 32.19 0 44.48l22.24 22.24c12.28 12.28 32.2 12.28 44.48 0L176 322.72l100.07 100.07c12.28 12.28 32.2 12.28 44.48 0l22.24-22.24c12.28-12.28 12.28-32.19 0-44.48L242.72 256z\"/>\n </svg>\n </pf-button>\n </span>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'pf-label': PfLabel;\n }\n}\n"]}
|