@patternfly/elements 2.3.1 → 2.4.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 +4399 -699
- package/package.json +11 -1
- package/pf-accordion/BaseAccordion.js +155 -220
- package/pf-accordion/BaseAccordion.js.map +1 -1
- package/pf-accordion/BaseAccordionHeader.d.ts +1 -0
- package/pf-accordion/BaseAccordionHeader.js +69 -71
- 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 +9 -4
- 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-banner/README.md +60 -0
- package/pf-banner/pf-banner.css +96 -0
- package/pf-banner/pf-banner.d.ts +52 -0
- package/pf-banner/pf-banner.js +85 -0
- package/pf-banner/pf-banner.js.map +1 -0
- package/pf-button/BaseButton.js +17 -16
- 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.css +2 -2
- package/pf-card/BaseCard.js +2 -2
- package/pf-card/BaseCard.js.map +1 -1
- package/pf-card/pf-card.css +4 -4
- package/pf-card/pf-card.js +2 -2
- 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 +36 -33
- 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 +14 -11
- package/pf-code-block/pf-code-block.js.map +1 -1
- package/pf-icon/BaseIcon.js +39 -41
- 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 +17 -14
- 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 +37 -34
- 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 +46 -45
- package/pf-modal/pf-modal.js.map +1 -1
- package/pf-panel/pf-panel.js +7 -6
- package/pf-panel/pf-panel.js.map +1 -1
- package/pf-popover/pf-popover.d.ts +2 -2
- package/pf-popover/pf-popover.js +67 -55
- package/pf-popover/pf-popover.js.map +1 -1
- package/pf-progress/README.md +33 -0
- package/pf-progress/pf-progress.css +210 -0
- package/pf-progress/pf-progress.d.ts +111 -0
- package/pf-progress/pf-progress.js +218 -0
- package/pf-progress/pf-progress.js.map +1 -0
- package/pf-progress-stepper/pf-progress-step.js +11 -10
- package/pf-progress-stepper/pf-progress-step.js.map +1 -1
- package/pf-progress-stepper/pf-progress-stepper.js +16 -13
- 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 +44 -47
- 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-table/README.md +43 -0
- package/pf-table/pf-caption.css +9 -0
- package/pf-table/pf-caption.d.ts +14 -0
- package/pf-table/pf-caption.js +22 -0
- package/pf-table/pf-caption.js.map +1 -0
- package/pf-table/pf-table.css +223 -0
- package/pf-table/pf-table.d.ts +663 -0
- package/pf-table/pf-table.js +767 -0
- package/pf-table/pf-table.js.map +1 -0
- package/pf-table/pf-tbody.css +16 -0
- package/pf-table/pf-tbody.d.ts +15 -0
- package/pf-table/pf-tbody.js +26 -0
- package/pf-table/pf-tbody.js.map +1 -0
- package/pf-table/pf-td.css +105 -0
- package/pf-table/pf-td.d.ts +18 -0
- package/pf-table/pf-td.js +52 -0
- package/pf-table/pf-td.js.map +1 -0
- package/pf-table/pf-th.css +93 -0
- package/pf-table/pf-th.d.ts +27 -0
- package/pf-table/pf-th.js +96 -0
- package/pf-table/pf-th.js.map +1 -0
- package/pf-table/pf-thead.css +19 -0
- package/pf-table/pf-thead.d.ts +16 -0
- package/pf-table/pf-thead.js +37 -0
- package/pf-table/pf-thead.js.map +1 -0
- package/pf-table/pf-tr.css +87 -0
- package/pf-table/pf-tr.d.ts +34 -0
- package/pf-table/pf-tr.js +164 -0
- package/pf-table/pf-tr.js.map +1 -0
- package/pf-tabs/BaseTab.d.ts +3 -0
- package/pf-tabs/BaseTab.js +32 -31
- package/pf-tabs/BaseTab.js.map +1 -1
- package/pf-tabs/BaseTabPanel.js +11 -5
- package/pf-tabs/BaseTabPanel.js.map +1 -1
- package/pf-tabs/BaseTabs.js +116 -135
- 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.d.ts +1 -1
- package/pf-tabs/pf-tab.js +2 -2
- package/pf-tabs/pf-tab.js.map +1 -1
- package/pf-tabs/pf-tabs.d.ts +2 -0
- package/pf-tabs/pf-tabs.js +6 -2
- package/pf-tabs/pf-tabs.js.map +1 -1
- package/pf-text-input/README.md +9 -0
- package/pf-text-input/pf-text-input.css +261 -0
- package/pf-text-input/pf-text-input.d.ts +174 -0
- package/pf-text-input/pf-text-input.js +262 -0
- package/pf-text-input/pf-text-input.js.map +1 -0
- package/pf-tile/pf-tile.js +1 -1
- package/pf-tile/pf-tile.js.map +1 -1
- package/pf-timestamp/pf-timestamp.js +15 -10
- package/pf-timestamp/pf-timestamp.js.map +1 -1
- package/pf-tooltip/BaseTooltip.css +1 -5
- package/pf-tooltip/BaseTooltip.d.ts +3 -0
- package/pf-tooltip/BaseTooltip.js +18 -9
- package/pf-tooltip/BaseTooltip.js.map +1 -1
- package/pf-tooltip/pf-tooltip.css +66 -4
- package/pf-tooltip/pf-tooltip.d.ts +25 -3
- package/pf-tooltip/pf-tooltip.js +144 -5
- package/pf-tooltip/pf-tooltip.js.map +1 -1
- package/pfe.min.js +257 -137
- package/pfe.min.js.map +4 -4
- package/react/pf-accordion/pf-accordion-header.d.ts +3 -5
- package/react/pf-accordion/pf-accordion-panel.d.ts +3 -5
- package/react/pf-accordion/pf-accordion.d.ts +3 -5
- package/react/pf-avatar/pf-avatar.d.ts +3 -5
- package/react/pf-badge/pf-badge.d.ts +3 -5
- package/react/pf-banner/pf-banner.d.ts +4 -0
- package/react/pf-banner/pf-banner.js +10 -0
- package/react/pf-button/pf-button.d.ts +3 -5
- package/react/pf-card/pf-card.d.ts +3 -5
- package/react/pf-clipboard-copy/pf-clipboard-copy.d.ts +3 -5
- package/react/pf-code-block/pf-code-block.d.ts +3 -5
- package/react/pf-icon/pf-icon.d.ts +3 -5
- package/react/pf-jump-links/pf-jump-links-item.d.ts +3 -5
- package/react/pf-jump-links/pf-jump-links-list.d.ts +3 -5
- package/react/pf-jump-links/pf-jump-links.d.ts +3 -5
- package/react/pf-label/pf-label.d.ts +3 -5
- package/react/pf-modal/pf-modal.d.ts +3 -5
- package/react/pf-panel/pf-panel.d.ts +3 -5
- package/react/pf-popover/pf-popover.d.ts +3 -5
- package/react/pf-progress/pf-progress.d.ts +4 -0
- package/react/pf-progress/pf-progress.js +10 -0
- package/react/pf-progress-stepper/pf-progress-step.d.ts +3 -5
- package/react/pf-progress-stepper/pf-progress-stepper.d.ts +3 -5
- package/react/pf-spinner/pf-spinner.d.ts +3 -5
- package/react/pf-switch/pf-switch.d.ts +3 -5
- package/react/pf-table/pf-caption.d.ts +4 -0
- package/react/pf-table/pf-caption.js +10 -0
- package/react/pf-table/pf-table.d.ts +4 -0
- package/react/pf-table/pf-table.js +10 -0
- package/react/pf-table/pf-tbody.d.ts +4 -0
- package/react/pf-table/pf-tbody.js +10 -0
- package/react/pf-table/pf-td.d.ts +4 -0
- package/react/pf-table/pf-td.js +10 -0
- package/react/pf-table/pf-th.d.ts +4 -0
- package/react/pf-table/pf-th.js +10 -0
- package/react/pf-table/pf-thead.d.ts +4 -0
- package/react/pf-table/pf-thead.js +10 -0
- package/react/pf-table/pf-tr.d.ts +4 -0
- package/react/pf-table/pf-tr.js +10 -0
- package/react/pf-tabs/pf-tab-panel.d.ts +3 -5
- package/react/pf-tabs/pf-tab.d.ts +3 -5
- package/react/pf-tabs/pf-tab.js +1 -1
- package/react/pf-tabs/pf-tabs.d.ts +3 -5
- package/react/pf-text-input/pf-text-input.d.ts +4 -0
- package/react/pf-text-input/pf-text-input.js +10 -0
- package/react/pf-tile/pf-tile.d.ts +3 -5
- package/react/pf-timestamp/pf-timestamp.d.ts +3 -5
- package/react/pf-tooltip/pf-tooltip.d.ts +3 -5
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@patternfly/elements",
|
|
3
3
|
"license": "MIT",
|
|
4
|
-
"version": "2.
|
|
4
|
+
"version": "2.4.0",
|
|
5
5
|
"description": "PatternFly Elements",
|
|
6
6
|
"customElements": "custom-elements.json",
|
|
7
7
|
"type": "module",
|
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
"./pf-avatar/pf-avatar.js": "./pf-avatar/pf-avatar.js",
|
|
21
21
|
"./pf-badge/BaseBadge.js": "./pf-badge/BaseBadge.js",
|
|
22
22
|
"./pf-badge/pf-badge.js": "./pf-badge/pf-badge.js",
|
|
23
|
+
"./pf-banner/pf-banner.js": "./pf-banner/pf-banner.js",
|
|
23
24
|
"./pf-button/BaseButton.js": "./pf-button/BaseButton.js",
|
|
24
25
|
"./pf-button/pf-button.js": "./pf-button/pf-button.js",
|
|
25
26
|
"./pf-card/BaseCard.js": "./pf-card/BaseCard.js",
|
|
@@ -40,16 +41,25 @@
|
|
|
40
41
|
"./pf-panel/pf-panel.js": "./pf-panel/pf-panel.js",
|
|
41
42
|
"./pf-progress-stepper/pf-progress-step.js": "./pf-progress-stepper/pf-progress-step.js",
|
|
42
43
|
"./pf-progress-stepper/pf-progress-stepper.js": "./pf-progress-stepper/pf-progress-stepper.js",
|
|
44
|
+
"./pf-progress/pf-progress.js": "./pf-progress/pf-progress.js",
|
|
43
45
|
"./pf-spinner/BaseSpinner.js": "./pf-spinner/BaseSpinner.js",
|
|
44
46
|
"./pf-spinner/pf-spinner.js": "./pf-spinner/pf-spinner.js",
|
|
45
47
|
"./pf-switch/BaseSwitch.js": "./pf-switch/BaseSwitch.js",
|
|
46
48
|
"./pf-switch/pf-switch.js": "./pf-switch/pf-switch.js",
|
|
49
|
+
"./pf-table/pf-table.js": "./pf-table/pf-table.js",
|
|
50
|
+
"./pf-table/pf-thead.js": "./pf-table/pf-thead.js",
|
|
51
|
+
"./pf-table/pf-tbody.js": "./pf-table/pf-tbody.js",
|
|
52
|
+
"./pf-table/pf-tr.js": "./pf-table/pf-tr.js",
|
|
53
|
+
"./pf-table/pf-th.js": "./pf-table/pf-th.js",
|
|
54
|
+
"./pf-table/pf-td.js": "./pf-table/pf-td.js",
|
|
55
|
+
"./pf-table/pf-caption.js": "./pf-table/pf-caption.js",
|
|
47
56
|
"./pf-tabs/BaseTab.js": "./pf-tabs/BaseTab.js",
|
|
48
57
|
"./pf-tabs/BaseTabPanel.js": "./pf-tabs/BaseTabPanel.js",
|
|
49
58
|
"./pf-tabs/BaseTabs.js": "./pf-tabs/BaseTabs.js",
|
|
50
59
|
"./pf-tabs/pf-tab-panel.js": "./pf-tabs/pf-tab-panel.js",
|
|
51
60
|
"./pf-tabs/pf-tab.js": "./pf-tabs/pf-tab.js",
|
|
52
61
|
"./pf-tabs/pf-tabs.js": "./pf-tabs/pf-tabs.js",
|
|
62
|
+
"./pf-text-input/pf-text-input.js": "./pf-text-input/pf-text-input.js",
|
|
53
63
|
"./pf-tile/BaseTile.js": "./pf-tile/BaseTile.js",
|
|
54
64
|
"./pf-tile/pf-tile.js": "./pf-tile/pf-tile.js",
|
|
55
65
|
"./pf-timestamp/pf-timestamp.js": "./pf-timestamp/pf-timestamp.js",
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
var _BaseAccordion_instances, _a, _BaseAccordion_isAccordionChangeEvent, _BaseAccordion_headerIndex, _BaseAccordion_expandedIndex, _BaseAccordion_activeHeader_get, _BaseAccordion_logger, _BaseAccordion_styles, _BaseAccordion_transitionDuration, _BaseAccordion_initialized, _BaseAccordion_mo, _BaseAccordion_init, _BaseAccordion_updateActiveHeader, _BaseAccordion_panelForHeader, _BaseAccordion_expandHeader, _BaseAccordion_expandPanel, _BaseAccordion_collapseHeader, _BaseAccordion_collapsePanel, _BaseAccordion_getAnimationDuration, _BaseAccordion_animate, _BaseAccordion_onChange, _BaseAccordion_allHeaders, _BaseAccordion_allPanels, _BaseAccordion_getIndex;
|
|
2
|
+
import { __classPrivateFieldGet, __classPrivateFieldSet, __decorate } from "tslib";
|
|
2
3
|
import { LitElement, html } from 'lit';
|
|
3
4
|
import { property } from 'lit/decorators/property.js';
|
|
4
5
|
import { NumberListConverter, ComposedEvent } from '@patternfly/pfe-core';
|
|
@@ -26,17 +27,17 @@ export class AccordionCollapseEvent extends ComposedEvent {
|
|
|
26
27
|
class BaseAccordion extends LitElement {
|
|
27
28
|
constructor() {
|
|
28
29
|
super(...arguments);
|
|
29
|
-
|
|
30
|
-
this
|
|
30
|
+
_BaseAccordion_instances.add(this);
|
|
31
|
+
_BaseAccordion_headerIndex.set(this, new RovingTabindexController(this));
|
|
32
|
+
_BaseAccordion_expandedIndex.set(this, []);
|
|
31
33
|
this.expandedSets = new Set();
|
|
32
|
-
this
|
|
33
|
-
this
|
|
34
|
-
this
|
|
34
|
+
_BaseAccordion_logger.set(this, new Logger(this));
|
|
35
|
+
_BaseAccordion_styles.set(this, getComputedStyle(this));
|
|
36
|
+
_BaseAccordion_transitionDuration.set(this, __classPrivateFieldGet(this, _BaseAccordion_instances, "m", _BaseAccordion_getAnimationDuration).call(this));
|
|
35
37
|
// actually is read in #init, by the `||=` operator
|
|
36
|
-
this
|
|
37
|
-
this
|
|
38
|
+
_BaseAccordion_initialized.set(this, false);
|
|
39
|
+
_BaseAccordion_mo.set(this, new MutationObserver(() => __classPrivateFieldGet(this, _BaseAccordion_instances, "m", _BaseAccordion_init).call(this)));
|
|
38
40
|
}
|
|
39
|
-
static { this.styles = [style]; }
|
|
40
41
|
static isAccordion(target) {
|
|
41
42
|
return target instanceof BaseAccordion;
|
|
42
43
|
}
|
|
@@ -46,8 +47,6 @@ class BaseAccordion extends LitElement {
|
|
|
46
47
|
static isPanel(target) {
|
|
47
48
|
return target instanceof BaseAccordionPanel;
|
|
48
49
|
}
|
|
49
|
-
#headerIndex;
|
|
50
|
-
#expandedIndex;
|
|
51
50
|
/**
|
|
52
51
|
* Sets and reflects the currently expanded accordion 0-based indexes.
|
|
53
52
|
* Use commas to separate multiple indexes.
|
|
@@ -58,11 +57,11 @@ class BaseAccordion extends LitElement {
|
|
|
58
57
|
* ```
|
|
59
58
|
*/
|
|
60
59
|
get expandedIndex() {
|
|
61
|
-
return this
|
|
60
|
+
return __classPrivateFieldGet(this, _BaseAccordion_expandedIndex, "f");
|
|
62
61
|
}
|
|
63
62
|
set expandedIndex(value) {
|
|
64
|
-
const old = this
|
|
65
|
-
this
|
|
63
|
+
const old = __classPrivateFieldGet(this, _BaseAccordion_expandedIndex, "f");
|
|
64
|
+
__classPrivateFieldSet(this, _BaseAccordion_expandedIndex, value, "f");
|
|
66
65
|
if (JSON.stringify(old) !== JSON.stringify(value)) {
|
|
67
66
|
this.requestUpdate('expandedIndex', old);
|
|
68
67
|
this.collapseAll().then(async () => {
|
|
@@ -73,35 +72,24 @@ class BaseAccordion extends LitElement {
|
|
|
73
72
|
}
|
|
74
73
|
}
|
|
75
74
|
get headers() {
|
|
76
|
-
return this
|
|
75
|
+
return __classPrivateFieldGet(this, _BaseAccordion_instances, "m", _BaseAccordion_allHeaders).call(this);
|
|
77
76
|
}
|
|
78
77
|
get panels() {
|
|
79
|
-
return this
|
|
78
|
+
return __classPrivateFieldGet(this, _BaseAccordion_instances, "m", _BaseAccordion_allPanels).call(this);
|
|
80
79
|
}
|
|
81
|
-
get #activeHeader() {
|
|
82
|
-
const { headers } = this;
|
|
83
|
-
const index = headers.findIndex(header => header.matches(':focus,:focus-within'));
|
|
84
|
-
return headers.at(index);
|
|
85
|
-
}
|
|
86
|
-
#logger;
|
|
87
|
-
#styles;
|
|
88
|
-
#transitionDuration;
|
|
89
|
-
// actually is read in #init, by the `||=` operator
|
|
90
|
-
#initialized;
|
|
91
80
|
async getUpdateComplete() {
|
|
92
81
|
const c = await super.getUpdateComplete();
|
|
93
82
|
const results = await Promise.all([
|
|
94
|
-
...this
|
|
95
|
-
...this
|
|
83
|
+
...__classPrivateFieldGet(this, _BaseAccordion_instances, "m", _BaseAccordion_allHeaders).call(this).map(x => x.updateComplete),
|
|
84
|
+
...__classPrivateFieldGet(this, _BaseAccordion_instances, "m", _BaseAccordion_allPanels).call(this).map(x => x.updateComplete),
|
|
96
85
|
]);
|
|
97
86
|
return c && results.every(Boolean);
|
|
98
87
|
}
|
|
99
|
-
#mo;
|
|
100
88
|
connectedCallback() {
|
|
101
89
|
super.connectedCallback();
|
|
102
|
-
this.addEventListener('change', this
|
|
103
|
-
this
|
|
104
|
-
this
|
|
90
|
+
this.addEventListener('change', __classPrivateFieldGet(this, _BaseAccordion_instances, "m", _BaseAccordion_onChange));
|
|
91
|
+
__classPrivateFieldGet(this, _BaseAccordion_mo, "f").observe(this, { childList: true });
|
|
92
|
+
__classPrivateFieldGet(this, _BaseAccordion_instances, "m", _BaseAccordion_init).call(this);
|
|
105
93
|
}
|
|
106
94
|
render() {
|
|
107
95
|
return html `
|
|
@@ -112,190 +100,19 @@ class BaseAccordion extends LitElement {
|
|
|
112
100
|
const { headers } = this;
|
|
113
101
|
headers.forEach((header, index) => {
|
|
114
102
|
if (header.expanded) {
|
|
115
|
-
this
|
|
116
|
-
const panel = this
|
|
103
|
+
__classPrivateFieldGet(this, _BaseAccordion_instances, "m", _BaseAccordion_expandHeader).call(this, header, index);
|
|
104
|
+
const panel = __classPrivateFieldGet(this, _BaseAccordion_instances, "m", _BaseAccordion_panelForHeader).call(this, header);
|
|
117
105
|
if (panel) {
|
|
118
|
-
this
|
|
106
|
+
__classPrivateFieldGet(this, _BaseAccordion_instances, "m", _BaseAccordion_expandPanel).call(this, panel);
|
|
119
107
|
}
|
|
120
108
|
}
|
|
121
109
|
});
|
|
122
110
|
}
|
|
123
|
-
/**
|
|
124
|
-
* Initialize the accordion by connecting headers and panels
|
|
125
|
-
* with aria controls and labels; set up the default disclosure
|
|
126
|
-
* state if not set by the author; and check the URL for default
|
|
127
|
-
* open
|
|
128
|
-
*/
|
|
129
|
-
async #init() {
|
|
130
|
-
this.#initialized ||= !!await this.updateComplete;
|
|
131
|
-
this.#headerIndex.initItems(this.headers);
|
|
132
|
-
// Event listener to the accordion header after the accordion has been initialized to add the roving tabindex
|
|
133
|
-
this.addEventListener('focusin', this.#updateActiveHeader);
|
|
134
|
-
this.updateAccessibility();
|
|
135
|
-
}
|
|
136
|
-
#updateActiveHeader() {
|
|
137
|
-
if (this.#activeHeader) {
|
|
138
|
-
this.#headerIndex.updateActiveItem(this.#activeHeader);
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
#panelForHeader(header) {
|
|
142
|
-
const next = header.nextElementSibling;
|
|
143
|
-
if (!BaseAccordion.isPanel(next)) {
|
|
144
|
-
return void this.#logger.error('Sibling element to a header needs to be a panel');
|
|
145
|
-
}
|
|
146
|
-
else {
|
|
147
|
-
return next;
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
#expandHeader(header, index = this.#getIndex(header)) {
|
|
151
|
-
// If this index is not already listed in the expandedSets array, add it
|
|
152
|
-
this.expandedSets.add(index);
|
|
153
|
-
this.#expandedIndex = [...this.expandedSets];
|
|
154
|
-
header.expanded = true;
|
|
155
|
-
}
|
|
156
|
-
async #expandPanel(panel) {
|
|
157
|
-
panel.expanded = true;
|
|
158
|
-
panel.hidden = false;
|
|
159
|
-
await panel.updateComplete;
|
|
160
|
-
const rect = panel.getBoundingClientRect();
|
|
161
|
-
this.#animate(panel, 0, rect.height);
|
|
162
|
-
}
|
|
163
|
-
async #collapseHeader(header, index = this.#getIndex(header)) {
|
|
164
|
-
if (!this.expandedSets) {
|
|
165
|
-
await this.updateComplete;
|
|
166
|
-
}
|
|
167
|
-
this.expandedSets.delete(index);
|
|
168
|
-
header.expanded = false;
|
|
169
|
-
await header.updateComplete;
|
|
170
|
-
}
|
|
171
|
-
async #collapsePanel(panel) {
|
|
172
|
-
await panel.updateComplete;
|
|
173
|
-
if (!panel.expanded) {
|
|
174
|
-
return;
|
|
175
|
-
}
|
|
176
|
-
const rect = panel.getBoundingClientRect();
|
|
177
|
-
panel.expanded = false;
|
|
178
|
-
panel.hidden = true;
|
|
179
|
-
this.#animate(panel, rect.height, 0);
|
|
180
|
-
await panel.updateComplete;
|
|
181
|
-
}
|
|
182
|
-
#getAnimationDuration() {
|
|
183
|
-
if ('computedStyleMap' in this) {
|
|
184
|
-
// @ts-expect-error: https://caniuse.com/?search=computedStyleMap
|
|
185
|
-
return this.computedStyleMap().get('transition-duration')?.to('ms').value;
|
|
186
|
-
}
|
|
187
|
-
else {
|
|
188
|
-
const { transitionDuration } = this.#styles;
|
|
189
|
-
const groups = CSS_TIMING_UNITS_RE.exec(transitionDuration)?.groups;
|
|
190
|
-
if (!groups) {
|
|
191
|
-
return 0;
|
|
192
|
-
}
|
|
193
|
-
const parsed = parseFloat(transitionDuration);
|
|
194
|
-
if (groups.unit === 's') {
|
|
195
|
-
return parsed * 1000;
|
|
196
|
-
}
|
|
197
|
-
else {
|
|
198
|
-
return parsed;
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
async #animate(panel, start, end) {
|
|
203
|
-
if (panel) {
|
|
204
|
-
const header = panel.previousElementSibling;
|
|
205
|
-
const transitionDuration = this.#getAnimationDuration();
|
|
206
|
-
if (transitionDuration) {
|
|
207
|
-
this.#transitionDuration = transitionDuration;
|
|
208
|
-
}
|
|
209
|
-
const duration = this.#transitionDuration ?? 0;
|
|
210
|
-
header?.classList.add('animating');
|
|
211
|
-
panel.classList.add('animating');
|
|
212
|
-
const animation = panel.animate({ height: [`${start}px`, `${end}px`] }, { duration });
|
|
213
|
-
animation.play();
|
|
214
|
-
await animation.finished;
|
|
215
|
-
header?.classList.remove('animating');
|
|
216
|
-
panel.classList.remove('animating');
|
|
217
|
-
panel.style.removeProperty('height');
|
|
218
|
-
panel.hidden = !panel.expanded;
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
#onChange(event) {
|
|
222
|
-
if (this.classList.contains('animating')) {
|
|
223
|
-
return;
|
|
224
|
-
}
|
|
225
|
-
const index = this.#getIndex(event.target);
|
|
226
|
-
if (event.expanded) {
|
|
227
|
-
this.expand(index, event.accordion);
|
|
228
|
-
}
|
|
229
|
-
else {
|
|
230
|
-
this.collapse(index);
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
/**
|
|
234
|
-
* @see https://www.w3.org/TR/wai-aria-practices/#accordion
|
|
235
|
-
*/
|
|
236
|
-
async #onKeydown(evt) {
|
|
237
|
-
const currentHeader = evt.target;
|
|
238
|
-
if (!BaseAccordion.isHeader(currentHeader)) {
|
|
239
|
-
return;
|
|
240
|
-
}
|
|
241
|
-
let newHeader;
|
|
242
|
-
switch (evt.key) {
|
|
243
|
-
case 'ArrowDown':
|
|
244
|
-
evt.preventDefault();
|
|
245
|
-
newHeader = this.#nextHeader();
|
|
246
|
-
break;
|
|
247
|
-
case 'ArrowUp':
|
|
248
|
-
evt.preventDefault();
|
|
249
|
-
newHeader = this.#previousHeader();
|
|
250
|
-
break;
|
|
251
|
-
case 'Home':
|
|
252
|
-
evt.preventDefault();
|
|
253
|
-
newHeader = this.#firstHeader();
|
|
254
|
-
break;
|
|
255
|
-
case 'End':
|
|
256
|
-
evt.preventDefault();
|
|
257
|
-
newHeader = this.#lastHeader();
|
|
258
|
-
break;
|
|
259
|
-
}
|
|
260
|
-
newHeader?.focus?.();
|
|
261
|
-
}
|
|
262
|
-
#allHeaders(accordion = this) {
|
|
263
|
-
return Array.from(accordion.children).filter(BaseAccordion.isHeader);
|
|
264
|
-
}
|
|
265
|
-
#allPanels(accordion = this) {
|
|
266
|
-
return Array.from(accordion.children).filter(BaseAccordion.isPanel);
|
|
267
|
-
}
|
|
268
|
-
#previousHeader() {
|
|
269
|
-
const { headers } = this;
|
|
270
|
-
const newIndex = headers.findIndex(header => header.matches(':focus,:focus-within')) - 1;
|
|
271
|
-
return headers[(newIndex + headers.length) % headers.length];
|
|
272
|
-
}
|
|
273
|
-
#nextHeader() {
|
|
274
|
-
const { headers } = this;
|
|
275
|
-
const newIndex = headers.findIndex(header => header.matches(':focus,:focus-within')) + 1;
|
|
276
|
-
return headers[newIndex % headers.length];
|
|
277
|
-
}
|
|
278
|
-
#firstHeader() {
|
|
279
|
-
return this.headers.at(0);
|
|
280
|
-
}
|
|
281
|
-
#lastHeader() {
|
|
282
|
-
return this.headers.at(-1);
|
|
283
|
-
}
|
|
284
|
-
#getIndex(el) {
|
|
285
|
-
if (BaseAccordion.isHeader(el)) {
|
|
286
|
-
return this.headers.findIndex(header => header.id === el.id);
|
|
287
|
-
}
|
|
288
|
-
if (BaseAccordion.isPanel(el)) {
|
|
289
|
-
return this.panels.findIndex(panel => panel.id === el.id);
|
|
290
|
-
}
|
|
291
|
-
this.#logger.warn('The #getIndex method expects to receive a header or panel element.');
|
|
292
|
-
return -1;
|
|
293
|
-
}
|
|
294
111
|
updateAccessibility() {
|
|
295
112
|
const { headers } = this;
|
|
296
113
|
// For each header in the accordion, attach the aria connections
|
|
297
114
|
headers.forEach(header => {
|
|
298
|
-
const panel = this
|
|
115
|
+
const panel = __classPrivateFieldGet(this, _BaseAccordion_instances, "m", _BaseAccordion_panelForHeader).call(this, header);
|
|
299
116
|
if (panel) {
|
|
300
117
|
header.setAttribute('aria-controls', panel.id);
|
|
301
118
|
panel.setAttribute('aria-labelledby', header.id);
|
|
@@ -321,21 +138,18 @@ class BaseAccordion extends LitElement {
|
|
|
321
138
|
* Accepts an optional parent accordion to search for headers and panels.
|
|
322
139
|
*/
|
|
323
140
|
async expand(index, parentAccordion) {
|
|
324
|
-
|
|
325
|
-
return;
|
|
326
|
-
}
|
|
327
|
-
const allHeaders = this.#allHeaders(parentAccordion);
|
|
141
|
+
const allHeaders = __classPrivateFieldGet(this, _BaseAccordion_instances, "m", _BaseAccordion_allHeaders).call(this, parentAccordion);
|
|
328
142
|
const header = allHeaders[index];
|
|
329
143
|
if (!header) {
|
|
330
144
|
return;
|
|
331
145
|
}
|
|
332
|
-
const panel = this
|
|
146
|
+
const panel = __classPrivateFieldGet(this, _BaseAccordion_instances, "m", _BaseAccordion_panelForHeader).call(this, header);
|
|
333
147
|
if (!panel) {
|
|
334
148
|
return;
|
|
335
149
|
}
|
|
336
150
|
// If the header and panel exist, open both
|
|
337
|
-
this
|
|
338
|
-
this
|
|
151
|
+
__classPrivateFieldGet(this, _BaseAccordion_instances, "m", _BaseAccordion_expandHeader).call(this, header, index),
|
|
152
|
+
__classPrivateFieldGet(this, _BaseAccordion_instances, "m", _BaseAccordion_expandPanel).call(this, panel),
|
|
339
153
|
header.focus();
|
|
340
154
|
this.dispatchEvent(new AccordionExpandEvent(header, panel));
|
|
341
155
|
await this.updateComplete;
|
|
@@ -344,8 +158,8 @@ class BaseAccordion extends LitElement {
|
|
|
344
158
|
* Expands all accordion items.
|
|
345
159
|
*/
|
|
346
160
|
async expandAll() {
|
|
347
|
-
this.headers.forEach(header => this
|
|
348
|
-
this.panels.forEach(panel => this
|
|
161
|
+
this.headers.forEach(header => __classPrivateFieldGet(this, _BaseAccordion_instances, "m", _BaseAccordion_expandHeader).call(this, header));
|
|
162
|
+
this.panels.forEach(panel => __classPrivateFieldGet(this, _BaseAccordion_instances, "m", _BaseAccordion_expandPanel).call(this, panel));
|
|
349
163
|
await this.updateComplete;
|
|
350
164
|
}
|
|
351
165
|
/**
|
|
@@ -357,8 +171,8 @@ class BaseAccordion extends LitElement {
|
|
|
357
171
|
if (!header || !panel) {
|
|
358
172
|
return;
|
|
359
173
|
}
|
|
360
|
-
this
|
|
361
|
-
this
|
|
174
|
+
__classPrivateFieldGet(this, _BaseAccordion_instances, "m", _BaseAccordion_collapseHeader).call(this, header);
|
|
175
|
+
__classPrivateFieldGet(this, _BaseAccordion_instances, "m", _BaseAccordion_collapsePanel).call(this, panel);
|
|
362
176
|
this.dispatchEvent(new AccordionCollapseEvent(header, panel));
|
|
363
177
|
await this.updateComplete;
|
|
364
178
|
}
|
|
@@ -366,11 +180,132 @@ class BaseAccordion extends LitElement {
|
|
|
366
180
|
* Collapses all accordion items.
|
|
367
181
|
*/
|
|
368
182
|
async collapseAll() {
|
|
369
|
-
this.headers.forEach(header => this
|
|
370
|
-
this.panels.forEach(panel => this
|
|
183
|
+
this.headers.forEach(header => __classPrivateFieldGet(this, _BaseAccordion_instances, "m", _BaseAccordion_collapseHeader).call(this, header));
|
|
184
|
+
this.panels.forEach(panel => __classPrivateFieldGet(this, _BaseAccordion_instances, "m", _BaseAccordion_collapsePanel).call(this, panel));
|
|
371
185
|
await this.updateComplete;
|
|
372
186
|
}
|
|
373
187
|
}
|
|
188
|
+
_a = BaseAccordion, _BaseAccordion_headerIndex = new WeakMap(), _BaseAccordion_expandedIndex = new WeakMap(), _BaseAccordion_logger = new WeakMap(), _BaseAccordion_styles = new WeakMap(), _BaseAccordion_transitionDuration = new WeakMap(), _BaseAccordion_initialized = new WeakMap(), _BaseAccordion_mo = new WeakMap(), _BaseAccordion_instances = new WeakSet(), _BaseAccordion_isAccordionChangeEvent = function _BaseAccordion_isAccordionChangeEvent(event) {
|
|
189
|
+
return event instanceof AccordionHeaderChangeEvent;
|
|
190
|
+
}, _BaseAccordion_activeHeader_get = function _BaseAccordion_activeHeader_get() {
|
|
191
|
+
const { headers } = this;
|
|
192
|
+
const index = headers.findIndex(header => header.matches(':focus,:focus-within'));
|
|
193
|
+
return index > -1 ? headers.at(index) : undefined;
|
|
194
|
+
}, _BaseAccordion_init =
|
|
195
|
+
/**
|
|
196
|
+
* Initialize the accordion by connecting headers and panels
|
|
197
|
+
* with aria controls and labels; set up the default disclosure
|
|
198
|
+
* state if not set by the author; and check the URL for default
|
|
199
|
+
* open
|
|
200
|
+
*/
|
|
201
|
+
async function _BaseAccordion_init() {
|
|
202
|
+
__classPrivateFieldSet(this, _BaseAccordion_initialized, __classPrivateFieldGet(this, _BaseAccordion_initialized, "f") || !!await this.updateComplete, "f");
|
|
203
|
+
__classPrivateFieldGet(this, _BaseAccordion_headerIndex, "f").initItems(this.headers);
|
|
204
|
+
// Event listener to the accordion header after the accordion has been initialized to add the roving tabindex
|
|
205
|
+
this.addEventListener('focusin', __classPrivateFieldGet(this, _BaseAccordion_instances, "m", _BaseAccordion_updateActiveHeader));
|
|
206
|
+
this.updateAccessibility();
|
|
207
|
+
}, _BaseAccordion_updateActiveHeader = function _BaseAccordion_updateActiveHeader(event) {
|
|
208
|
+
if (__classPrivateFieldGet(this, _BaseAccordion_instances, "a", _BaseAccordion_activeHeader_get)) {
|
|
209
|
+
__classPrivateFieldGet(this, _BaseAccordion_headerIndex, "f").updateActiveItem(__classPrivateFieldGet(this, _BaseAccordion_instances, "a", _BaseAccordion_activeHeader_get));
|
|
210
|
+
}
|
|
211
|
+
}, _BaseAccordion_panelForHeader = function _BaseAccordion_panelForHeader(header) {
|
|
212
|
+
const next = header.nextElementSibling;
|
|
213
|
+
if (!BaseAccordion.isPanel(next)) {
|
|
214
|
+
return void __classPrivateFieldGet(this, _BaseAccordion_logger, "f").error('Sibling element to a header needs to be a panel');
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
return next;
|
|
218
|
+
}
|
|
219
|
+
}, _BaseAccordion_expandHeader = function _BaseAccordion_expandHeader(header, index = __classPrivateFieldGet(this, _BaseAccordion_instances, "m", _BaseAccordion_getIndex).call(this, header)) {
|
|
220
|
+
// If this index is not already listed in the expandedSets array, add it
|
|
221
|
+
this.expandedSets.add(index);
|
|
222
|
+
__classPrivateFieldSet(this, _BaseAccordion_expandedIndex, [...this.expandedSets], "f");
|
|
223
|
+
header.expanded = true;
|
|
224
|
+
}, _BaseAccordion_expandPanel = async function _BaseAccordion_expandPanel(panel) {
|
|
225
|
+
panel.expanded = true;
|
|
226
|
+
panel.hidden = false;
|
|
227
|
+
await panel.updateComplete;
|
|
228
|
+
const rect = panel.getBoundingClientRect();
|
|
229
|
+
__classPrivateFieldGet(this, _BaseAccordion_instances, "m", _BaseAccordion_animate).call(this, panel, 0, rect.height);
|
|
230
|
+
}, _BaseAccordion_collapseHeader = async function _BaseAccordion_collapseHeader(header, index = __classPrivateFieldGet(this, _BaseAccordion_instances, "m", _BaseAccordion_getIndex).call(this, header)) {
|
|
231
|
+
if (!this.expandedSets) {
|
|
232
|
+
await this.updateComplete;
|
|
233
|
+
}
|
|
234
|
+
this.expandedSets.delete(index);
|
|
235
|
+
header.expanded = false;
|
|
236
|
+
await header.updateComplete;
|
|
237
|
+
}, _BaseAccordion_collapsePanel = async function _BaseAccordion_collapsePanel(panel) {
|
|
238
|
+
await panel.updateComplete;
|
|
239
|
+
if (!panel.expanded) {
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
const rect = panel.getBoundingClientRect();
|
|
243
|
+
panel.expanded = false;
|
|
244
|
+
panel.hidden = true;
|
|
245
|
+
__classPrivateFieldGet(this, _BaseAccordion_instances, "m", _BaseAccordion_animate).call(this, panel, rect.height, 0);
|
|
246
|
+
await panel.updateComplete;
|
|
247
|
+
}, _BaseAccordion_getAnimationDuration = function _BaseAccordion_getAnimationDuration() {
|
|
248
|
+
if ('computedStyleMap' in this) {
|
|
249
|
+
// @ts-expect-error: https://caniuse.com/?search=computedStyleMap
|
|
250
|
+
return this.computedStyleMap().get('transition-duration')?.to('ms').value;
|
|
251
|
+
}
|
|
252
|
+
else {
|
|
253
|
+
const { transitionDuration } = __classPrivateFieldGet(this, _BaseAccordion_styles, "f");
|
|
254
|
+
const groups = CSS_TIMING_UNITS_RE.exec(transitionDuration)?.groups;
|
|
255
|
+
if (!groups) {
|
|
256
|
+
return 0;
|
|
257
|
+
}
|
|
258
|
+
const parsed = parseFloat(transitionDuration);
|
|
259
|
+
if (groups.unit === 's') {
|
|
260
|
+
return parsed * 1000;
|
|
261
|
+
}
|
|
262
|
+
else {
|
|
263
|
+
return parsed;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
}, _BaseAccordion_animate = async function _BaseAccordion_animate(panel, start, end) {
|
|
267
|
+
if (panel) {
|
|
268
|
+
const header = panel.previousElementSibling;
|
|
269
|
+
const transitionDuration = __classPrivateFieldGet(this, _BaseAccordion_instances, "m", _BaseAccordion_getAnimationDuration).call(this);
|
|
270
|
+
if (transitionDuration) {
|
|
271
|
+
__classPrivateFieldSet(this, _BaseAccordion_transitionDuration, transitionDuration, "f");
|
|
272
|
+
}
|
|
273
|
+
const duration = __classPrivateFieldGet(this, _BaseAccordion_transitionDuration, "f") ?? 0;
|
|
274
|
+
header?.classList.add('animating');
|
|
275
|
+
panel.classList.add('animating');
|
|
276
|
+
const animation = panel.animate({ height: [`${start}px`, `${end}px`] }, { duration });
|
|
277
|
+
animation.play();
|
|
278
|
+
await animation.finished;
|
|
279
|
+
header?.classList.remove('animating');
|
|
280
|
+
panel.classList.remove('animating');
|
|
281
|
+
panel.style.removeProperty('height');
|
|
282
|
+
panel.hidden = !panel.expanded;
|
|
283
|
+
}
|
|
284
|
+
}, _BaseAccordion_onChange = function _BaseAccordion_onChange(event) {
|
|
285
|
+
if (__classPrivateFieldGet(BaseAccordion, _a, "m", _BaseAccordion_isAccordionChangeEvent).call(BaseAccordion, event) && !this.classList.contains('animating')) {
|
|
286
|
+
const index = __classPrivateFieldGet(this, _BaseAccordion_instances, "m", _BaseAccordion_getIndex).call(this, event.target);
|
|
287
|
+
if (event.expanded) {
|
|
288
|
+
this.expand(index, event.accordion);
|
|
289
|
+
}
|
|
290
|
+
else {
|
|
291
|
+
this.collapse(index);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
}, _BaseAccordion_allHeaders = function _BaseAccordion_allHeaders(accordion = this) {
|
|
295
|
+
return Array.from(accordion.children).filter(BaseAccordion.isHeader);
|
|
296
|
+
}, _BaseAccordion_allPanels = function _BaseAccordion_allPanels(accordion = this) {
|
|
297
|
+
return Array.from(accordion.children).filter(BaseAccordion.isPanel);
|
|
298
|
+
}, _BaseAccordion_getIndex = function _BaseAccordion_getIndex(el) {
|
|
299
|
+
if (BaseAccordion.isHeader(el)) {
|
|
300
|
+
return this.headers.findIndex(header => header.id === el.id);
|
|
301
|
+
}
|
|
302
|
+
if (BaseAccordion.isPanel(el)) {
|
|
303
|
+
return this.panels.findIndex(panel => panel.id === el.id);
|
|
304
|
+
}
|
|
305
|
+
__classPrivateFieldGet(this, _BaseAccordion_logger, "f").warn('The #getIndex method expects to receive a header or panel element.');
|
|
306
|
+
return -1;
|
|
307
|
+
};
|
|
308
|
+
BaseAccordion.styles = [style];
|
|
374
309
|
__decorate([
|
|
375
310
|
property({
|
|
376
311
|
attribute: 'expanded-index',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseAccordion.js","sourceRoot":"","sources":["BaseAccordion.ts"],"names":[],"mappings":"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","sourcesContent":["import type { TemplateResult } from 'lit';\n\nimport { LitElement, html } from 'lit';\nimport { property } from 'lit/decorators/property.js';\n\nimport { NumberListConverter, ComposedEvent } from '@patternfly/pfe-core';\nimport { Logger } from '@patternfly/pfe-core/controllers/logger.js';\n\nimport { AccordionHeaderChangeEvent, BaseAccordionHeader } from './BaseAccordionHeader.js';\nimport { BaseAccordionPanel } from './BaseAccordionPanel.js';\n\nimport { RovingTabindexController } from '@patternfly/pfe-core/controllers/roving-tabindex-controller.js';\n\nimport style from './BaseAccordion.css';\n\nconst CSS_TIMING_UNITS_RE = /^[0-9.]+(?<unit>[a-zA-Z]+)/g;\n\nexport class AccordionExpandEvent extends ComposedEvent {\n constructor(\n public toggle: BaseAccordionHeader,\n public panel: BaseAccordionPanel,\n ) {\n super('expand');\n }\n}\n\nexport class AccordionCollapseEvent extends ComposedEvent {\n constructor(\n public toggle: BaseAccordionHeader,\n public panel: BaseAccordionPanel,\n ) {\n super('collapse');\n }\n}\n\nexport abstract class BaseAccordion extends LitElement {\n static readonly styles = [style];\n\n static isAccordion(target: EventTarget | null): target is BaseAccordion {\n return target instanceof BaseAccordion;\n }\n\n static isHeader(target: EventTarget | null): target is BaseAccordionHeader {\n return target instanceof BaseAccordionHeader;\n }\n\n static isPanel(target: EventTarget | null): target is BaseAccordionPanel {\n return target instanceof BaseAccordionPanel;\n }\n\n #headerIndex = new RovingTabindexController<BaseAccordionHeader>(this);\n\n #expandedIndex: number[] = [];\n\n /**\n * Sets and reflects the currently expanded accordion 0-based indexes.\n * Use commas to separate multiple indexes.\n * ```html\n * <pf-accordion expanded-index=\"1,2\">\n * ...\n * </pf-accordion>\n * ```\n */\n @property({\n attribute: 'expanded-index',\n converter: NumberListConverter\n })\n get expandedIndex() {\n return this.#expandedIndex;\n }\n\n set expandedIndex(value) {\n const old = this.#expandedIndex;\n this.#expandedIndex = value;\n if (JSON.stringify(old) !== JSON.stringify(value)) {\n this.requestUpdate('expandedIndex', old);\n this.collapseAll().then(async () => {\n for (const i of this.expandedIndex) {\n await this.expand(i, this);\n }\n });\n }\n }\n\n get headers() {\n return this.#allHeaders();\n }\n\n get panels() {\n return this.#allPanels();\n }\n\n get #activeHeader() {\n const { headers } = this;\n const index = headers.findIndex(header => header.matches(':focus,:focus-within'));\n return headers.at(index);\n }\n\n protected expandedSets = new Set<number>();\n\n #logger = new Logger(this);\n\n #styles = getComputedStyle(this);\n\n #transitionDuration = this.#getAnimationDuration();\n\n // actually is read in #init, by the `||=` operator\n #initialized = false;\n\n protected override async getUpdateComplete(): Promise<boolean> {\n const c = await super.getUpdateComplete();\n const results = await Promise.all([\n ...this.#allHeaders().map(x => x.updateComplete),\n ...this.#allPanels().map(x => x.updateComplete),\n ]);\n return c && results.every(Boolean);\n }\n\n #mo = new MutationObserver(() => this.#init());\n\n connectedCallback() {\n super.connectedCallback();\n this.addEventListener('change', this.#onChange as EventListener);\n this.#mo.observe(this, { childList: true });\n this.#init();\n }\n\n render(): TemplateResult {\n return html`\n <slot></slot>\n `;\n }\n\n async firstUpdated() {\n const { headers } = this;\n headers.forEach((header, index) => {\n if (header.expanded) {\n this.#expandHeader(header, index);\n const panel = this.#panelForHeader(header);\n if (panel) {\n this.#expandPanel(panel);\n }\n }\n });\n }\n\n /**\n * Initialize the accordion by connecting headers and panels\n * with aria controls and labels; set up the default disclosure\n * state if not set by the author; and check the URL for default\n * open\n */\n async #init() {\n this.#initialized ||= !!await this.updateComplete;\n this.#headerIndex.initItems(this.headers);\n // Event listener to the accordion header after the accordion has been initialized to add the roving tabindex\n this.addEventListener('focusin', this.#updateActiveHeader as EventListener);\n this.updateAccessibility();\n }\n\n #updateActiveHeader() {\n if (this.#activeHeader) {\n this.#headerIndex.updateActiveItem(this.#activeHeader);\n }\n }\n\n #panelForHeader(header: BaseAccordionHeader) {\n const next = header.nextElementSibling;\n if (!BaseAccordion.isPanel(next)) {\n return void this.#logger.error('Sibling element to a header needs to be a panel');\n } else {\n return next;\n }\n }\n\n #expandHeader(header: BaseAccordionHeader, index = this.#getIndex(header)) {\n // If this index is not already listed in the expandedSets array, add it\n this.expandedSets.add(index);\n this.#expandedIndex = [...this.expandedSets as Set<number>];\n header.expanded = true;\n }\n\n async #expandPanel(panel: BaseAccordionPanel) {\n panel.expanded = true;\n panel.hidden = false;\n\n await panel.updateComplete;\n\n const rect = panel.getBoundingClientRect();\n\n this.#animate(panel, 0, rect.height);\n }\n\n async #collapseHeader(header: BaseAccordionHeader, index = this.#getIndex(header)) {\n if (!this.expandedSets) {\n await this.updateComplete;\n }\n this.expandedSets.delete(index);\n header.expanded = false;\n await header.updateComplete;\n }\n\n async #collapsePanel(panel: BaseAccordionPanel) {\n await panel.updateComplete;\n if (!panel.expanded) {\n return;\n }\n\n const rect = panel.getBoundingClientRect();\n\n panel.expanded = false;\n panel.hidden = true;\n\n this.#animate(panel, rect.height, 0);\n await panel.updateComplete;\n }\n\n #getAnimationDuration(): number {\n if ('computedStyleMap' in this) {\n // @ts-expect-error: https://caniuse.com/?search=computedStyleMap\n return this.computedStyleMap().get('transition-duration')?.to('ms').value;\n } else {\n const { transitionDuration } = this.#styles;\n\n const groups = CSS_TIMING_UNITS_RE.exec(transitionDuration)?.groups;\n\n if (!groups) {\n return 0;\n }\n\n const parsed = parseFloat(transitionDuration);\n\n if (groups.unit === 's') {\n return parsed * 1000;\n } else {\n return parsed;\n }\n }\n }\n\n async #animate(panel: BaseAccordionPanel, start: number, end: number) {\n if (panel) {\n const header = panel.previousElementSibling;\n\n const transitionDuration = this.#getAnimationDuration();\n if (transitionDuration) {\n this.#transitionDuration = transitionDuration;\n }\n\n const duration = this.#transitionDuration ?? 0;\n\n header?.classList.add('animating');\n panel.classList.add('animating');\n\n const animation = panel.animate({ height: [`${start}px`, `${end}px`] }, { duration });\n animation.play();\n await animation.finished;\n\n header?.classList.remove('animating');\n panel.classList.remove('animating');\n\n panel.style.removeProperty('height');\n panel.hidden = !panel.expanded;\n }\n }\n\n #onChange(event: AccordionHeaderChangeEvent) {\n if (this.classList.contains('animating')) {\n return;\n }\n\n const index = this.#getIndex(event.target as Element);\n\n if (event.expanded) {\n this.expand(index, event.accordion);\n } else {\n this.collapse(index);\n }\n }\n\n /**\n * @see https://www.w3.org/TR/wai-aria-practices/#accordion\n */\n async #onKeydown(evt: KeyboardEvent) {\n const currentHeader = evt.target as Element;\n\n if (!BaseAccordion.isHeader(currentHeader)) {\n return;\n }\n\n let newHeader: BaseAccordionHeader | undefined;\n\n switch (evt.key) {\n case 'ArrowDown':\n evt.preventDefault();\n newHeader = this.#nextHeader();\n break;\n case 'ArrowUp':\n evt.preventDefault();\n newHeader = this.#previousHeader();\n break;\n case 'Home':\n evt.preventDefault();\n newHeader = this.#firstHeader();\n break;\n case 'End':\n evt.preventDefault();\n newHeader = this.#lastHeader();\n break;\n }\n\n newHeader?.focus?.();\n }\n\n #allHeaders(accordion: BaseAccordion = this): BaseAccordionHeader[] {\n return Array.from(accordion.children).filter(BaseAccordion.isHeader);\n }\n\n #allPanels(accordion: BaseAccordion = this): BaseAccordionPanel[] {\n return Array.from(accordion.children).filter(BaseAccordion.isPanel);\n }\n\n #previousHeader() {\n const { headers } = this;\n const newIndex = headers.findIndex(header => header.matches(':focus,:focus-within')) - 1;\n return headers[(newIndex + headers.length) % headers.length];\n }\n\n #nextHeader() {\n const { headers } = this;\n const newIndex = headers.findIndex(header => header.matches(':focus,:focus-within')) + 1;\n return headers[newIndex % headers.length];\n }\n\n #firstHeader() {\n return this.headers.at(0);\n }\n\n #lastHeader() {\n return this.headers.at(-1);\n }\n\n #getIndex(el: Element | null) {\n if (BaseAccordion.isHeader(el)) {\n return this.headers.findIndex(header => header.id === el.id);\n }\n\n if (BaseAccordion.isPanel(el)) {\n return this.panels.findIndex(panel => panel.id === el.id);\n }\n\n this.#logger.warn('The #getIndex method expects to receive a header or panel element.');\n return -1;\n }\n\n public updateAccessibility() {\n const { headers } = this;\n\n // For each header in the accordion, attach the aria connections\n headers.forEach(header => {\n const panel = this.#panelForHeader(header);\n if (panel) {\n header.setAttribute('aria-controls', panel.id);\n panel.setAttribute('aria-labelledby', header.id);\n panel.hidden = !panel.expanded;\n }\n });\n }\n\n /**\n * Accepts a 0-based index value (integer) for the set of accordion items to expand or collapse.\n */\n public async toggle(index: number) {\n const { headers } = this;\n const header = headers[index];\n\n if (!header.expanded) {\n await this.expand(index);\n } else {\n await this.collapse(index);\n }\n }\n\n /**\n * Accepts a 0-based index value (integer) for the set of accordion items to expand.\n * Accepts an optional parent accordion to search for headers and panels.\n */\n public async expand(index: number, parentAccordion?: BaseAccordion) {\n if (index === -1) {\n return;\n }\n\n const allHeaders: Array<BaseAccordionHeader> = this.#allHeaders(parentAccordion);\n\n const header = allHeaders[index];\n if (!header) {\n return;\n }\n\n const panel = this.#panelForHeader(header);\n if (!panel) {\n return;\n }\n\n // If the header and panel exist, open both\n this.#expandHeader(header, index),\n this.#expandPanel(panel),\n\n header.focus();\n\n this.dispatchEvent(new AccordionExpandEvent(header, panel));\n\n await this.updateComplete;\n }\n\n /**\n * Expands all accordion items.\n */\n public async expandAll() {\n this.headers.forEach(header => this.#expandHeader(header));\n this.panels.forEach(panel => this.#expandPanel(panel));\n await this.updateComplete;\n }\n\n /**\n * Accepts a 0-based index value (integer) for the set of accordion items to collapse.\n */\n public async collapse(index: number) {\n const header = this.headers.at(index);\n const panel = this.panels.at(index);\n\n if (!header || !panel) {\n return;\n }\n\n this.#collapseHeader(header);\n this.#collapsePanel(panel);\n\n this.dispatchEvent(new AccordionCollapseEvent(header, panel));\n await this.updateComplete;\n }\n\n /**\n * Collapses all accordion items.\n */\n public async collapseAll() {\n this.headers.forEach(header => this.#collapseHeader(header));\n this.panels.forEach(panel => this.#collapsePanel(panel));\n await this.updateComplete;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"BaseAccordion.js","sourceRoot":"","sources":["BaseAccordion.ts"],"names":[],"mappings":"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","sourcesContent":["import type { TemplateResult } from 'lit';\n\nimport { LitElement, html } from 'lit';\nimport { property } from 'lit/decorators/property.js';\n\nimport { NumberListConverter, ComposedEvent } from '@patternfly/pfe-core';\nimport { Logger } from '@patternfly/pfe-core/controllers/logger.js';\n\nimport { AccordionHeaderChangeEvent, BaseAccordionHeader } from './BaseAccordionHeader.js';\nimport { BaseAccordionPanel } from './BaseAccordionPanel.js';\n\nimport { RovingTabindexController } from '@patternfly/pfe-core/controllers/roving-tabindex-controller.js';\n\nimport style from './BaseAccordion.css';\n\nconst CSS_TIMING_UNITS_RE = /^[0-9.]+(?<unit>[a-zA-Z]+)/g;\n\nexport class AccordionExpandEvent extends ComposedEvent {\n constructor(\n public toggle: BaseAccordionHeader,\n public panel: BaseAccordionPanel,\n ) {\n super('expand');\n }\n}\n\nexport class AccordionCollapseEvent extends ComposedEvent {\n constructor(\n public toggle: BaseAccordionHeader,\n public panel: BaseAccordionPanel,\n ) {\n super('collapse');\n }\n}\n\nexport abstract class BaseAccordion extends LitElement {\n static readonly styles = [style];\n\n static isAccordion(target: EventTarget | null): target is BaseAccordion {\n return target instanceof BaseAccordion;\n }\n\n static isHeader(target: EventTarget | null): target is BaseAccordionHeader {\n return target instanceof BaseAccordionHeader;\n }\n\n static isPanel(target: EventTarget | null): target is BaseAccordionPanel {\n return target instanceof BaseAccordionPanel;\n }\n\n static #isAccordionChangeEvent(event: Event): event is AccordionHeaderChangeEvent {\n return event instanceof AccordionHeaderChangeEvent;\n }\n\n #headerIndex = new RovingTabindexController<BaseAccordionHeader>(this);\n\n #expandedIndex: number[] = [];\n\n /**\n * Sets and reflects the currently expanded accordion 0-based indexes.\n * Use commas to separate multiple indexes.\n * ```html\n * <pf-accordion expanded-index=\"1,2\">\n * ...\n * </pf-accordion>\n * ```\n */\n @property({\n attribute: 'expanded-index',\n converter: NumberListConverter\n })\n get expandedIndex() {\n return this.#expandedIndex;\n }\n\n set expandedIndex(value) {\n const old = this.#expandedIndex;\n this.#expandedIndex = value;\n if (JSON.stringify(old) !== JSON.stringify(value)) {\n this.requestUpdate('expandedIndex', old);\n this.collapseAll().then(async () => {\n for (const i of this.expandedIndex) {\n await this.expand(i, this);\n }\n });\n }\n }\n\n get headers() {\n return this.#allHeaders();\n }\n\n get panels() {\n return this.#allPanels();\n }\n\n get #activeHeader() {\n const { headers } = this;\n const index = headers.findIndex(header => header.matches(':focus,:focus-within'));\n return index > -1 ? headers.at(index) : undefined;\n }\n\n protected expandedSets = new Set<number>();\n\n #logger = new Logger(this);\n\n #styles = getComputedStyle(this);\n\n #transitionDuration = this.#getAnimationDuration();\n\n // actually is read in #init, by the `||=` operator\n #initialized = false;\n\n protected override async getUpdateComplete(): Promise<boolean> {\n const c = await super.getUpdateComplete();\n const results = await Promise.all([\n ...this.#allHeaders().map(x => x.updateComplete),\n ...this.#allPanels().map(x => x.updateComplete),\n ]);\n return c && results.every(Boolean);\n }\n\n #mo = new MutationObserver(() => this.#init());\n\n connectedCallback() {\n super.connectedCallback();\n this.addEventListener('change', this.#onChange as EventListener);\n this.#mo.observe(this, { childList: true });\n this.#init();\n }\n\n render(): TemplateResult {\n return html`\n <slot></slot>\n `;\n }\n\n async firstUpdated() {\n const { headers } = this;\n headers.forEach((header, index) => {\n if (header.expanded) {\n this.#expandHeader(header, index);\n const panel = this.#panelForHeader(header);\n if (panel) {\n this.#expandPanel(panel);\n }\n }\n });\n }\n\n /**\n * Initialize the accordion by connecting headers and panels\n * with aria controls and labels; set up the default disclosure\n * state if not set by the author; and check the URL for default\n * open\n */\n async #init() {\n this.#initialized ||= !!await this.updateComplete;\n this.#headerIndex.initItems(this.headers);\n // Event listener to the accordion header after the accordion has been initialized to add the roving tabindex\n this.addEventListener('focusin', this.#updateActiveHeader as EventListener);\n this.updateAccessibility();\n }\n\n #updateActiveHeader(event: FocusEvent) {\n if (this.#activeHeader) {\n this.#headerIndex.updateActiveItem(this.#activeHeader);\n }\n }\n\n #panelForHeader(header: BaseAccordionHeader) {\n const next = header.nextElementSibling;\n if (!BaseAccordion.isPanel(next)) {\n return void this.#logger.error('Sibling element to a header needs to be a panel');\n } else {\n return next;\n }\n }\n\n #expandHeader(header: BaseAccordionHeader, index = this.#getIndex(header)) {\n // If this index is not already listed in the expandedSets array, add it\n this.expandedSets.add(index);\n this.#expandedIndex = [...this.expandedSets as Set<number>];\n header.expanded = true;\n }\n\n async #expandPanel(panel: BaseAccordionPanel) {\n panel.expanded = true;\n panel.hidden = false;\n\n await panel.updateComplete;\n\n const rect = panel.getBoundingClientRect();\n\n this.#animate(panel, 0, rect.height);\n }\n\n async #collapseHeader(header: BaseAccordionHeader, index = this.#getIndex(header)) {\n if (!this.expandedSets) {\n await this.updateComplete;\n }\n this.expandedSets.delete(index);\n header.expanded = false;\n await header.updateComplete;\n }\n\n async #collapsePanel(panel: BaseAccordionPanel) {\n await panel.updateComplete;\n if (!panel.expanded) {\n return;\n }\n\n const rect = panel.getBoundingClientRect();\n\n panel.expanded = false;\n panel.hidden = true;\n\n this.#animate(panel, rect.height, 0);\n await panel.updateComplete;\n }\n\n #getAnimationDuration(): number {\n if ('computedStyleMap' in this) {\n // @ts-expect-error: https://caniuse.com/?search=computedStyleMap\n return this.computedStyleMap().get('transition-duration')?.to('ms').value;\n } else {\n const { transitionDuration } = this.#styles;\n\n const groups = CSS_TIMING_UNITS_RE.exec(transitionDuration)?.groups;\n\n if (!groups) {\n return 0;\n }\n\n const parsed = parseFloat(transitionDuration);\n\n if (groups.unit === 's') {\n return parsed * 1000;\n } else {\n return parsed;\n }\n }\n }\n\n async #animate(panel: BaseAccordionPanel, start: number, end: number) {\n if (panel) {\n const header = panel.previousElementSibling;\n\n const transitionDuration = this.#getAnimationDuration();\n if (transitionDuration) {\n this.#transitionDuration = transitionDuration;\n }\n\n const duration = this.#transitionDuration ?? 0;\n\n header?.classList.add('animating');\n panel.classList.add('animating');\n\n const animation = panel.animate({ height: [`${start}px`, `${end}px`] }, { duration });\n animation.play();\n await animation.finished;\n\n header?.classList.remove('animating');\n panel.classList.remove('animating');\n\n panel.style.removeProperty('height');\n panel.hidden = !panel.expanded;\n }\n }\n\n #onChange(event: AccordionHeaderChangeEvent) {\n if (BaseAccordion.#isAccordionChangeEvent(event) && !this.classList.contains('animating')) {\n const index = this.#getIndex(event.target);\n if (event.expanded) {\n this.expand(index, event.accordion);\n } else {\n this.collapse(index);\n }\n }\n }\n\n #allHeaders(accordion: BaseAccordion = this): BaseAccordionHeader[] {\n return Array.from(accordion.children).filter(BaseAccordion.isHeader);\n }\n\n #allPanels(accordion: BaseAccordion = this): BaseAccordionPanel[] {\n return Array.from(accordion.children).filter(BaseAccordion.isPanel);\n }\n\n #getIndex(el: Element | null) {\n if (BaseAccordion.isHeader(el)) {\n return this.headers.findIndex(header => header.id === el.id);\n }\n\n if (BaseAccordion.isPanel(el)) {\n return this.panels.findIndex(panel => panel.id === el.id);\n }\n\n this.#logger.warn('The #getIndex method expects to receive a header or panel element.');\n return -1;\n }\n\n public updateAccessibility() {\n const { headers } = this;\n\n // For each header in the accordion, attach the aria connections\n headers.forEach(header => {\n const panel = this.#panelForHeader(header);\n if (panel) {\n header.setAttribute('aria-controls', panel.id);\n panel.setAttribute('aria-labelledby', header.id);\n panel.hidden = !panel.expanded;\n }\n });\n }\n\n /**\n * Accepts a 0-based index value (integer) for the set of accordion items to expand or collapse.\n */\n public async toggle(index: number) {\n const { headers } = this;\n const header = headers[index];\n\n if (!header.expanded) {\n await this.expand(index);\n } else {\n await this.collapse(index);\n }\n }\n\n /**\n * Accepts a 0-based index value (integer) for the set of accordion items to expand.\n * Accepts an optional parent accordion to search for headers and panels.\n */\n public async expand(index: number, parentAccordion?: BaseAccordion) {\n const allHeaders: Array<BaseAccordionHeader> = this.#allHeaders(parentAccordion);\n\n const header = allHeaders[index];\n if (!header) {\n return;\n }\n\n const panel = this.#panelForHeader(header);\n if (!panel) {\n return;\n }\n\n // If the header and panel exist, open both\n this.#expandHeader(header, index),\n this.#expandPanel(panel),\n\n header.focus();\n\n this.dispatchEvent(new AccordionExpandEvent(header, panel));\n\n await this.updateComplete;\n }\n\n /**\n * Expands all accordion items.\n */\n public async expandAll() {\n this.headers.forEach(header => this.#expandHeader(header));\n this.panels.forEach(panel => this.#expandPanel(panel));\n await this.updateComplete;\n }\n\n /**\n * Accepts a 0-based index value (integer) for the set of accordion items to collapse.\n */\n public async collapse(index: number) {\n const header = this.headers.at(index);\n const panel = this.panels.at(index);\n\n if (!header || !panel) {\n return;\n }\n\n this.#collapseHeader(header);\n this.#collapsePanel(panel);\n\n this.dispatchEvent(new AccordionCollapseEvent(header, panel));\n await this.updateComplete;\n }\n\n /**\n * Collapses all accordion items.\n */\n public async collapseAll() {\n this.headers.forEach(header => this.#collapseHeader(header));\n this.panels.forEach(panel => this.#collapsePanel(panel));\n await this.updateComplete;\n }\n}\n"]}
|
|
@@ -6,6 +6,7 @@ export declare class AccordionHeaderChangeEvent extends ComposedEvent {
|
|
|
6
6
|
expanded: boolean;
|
|
7
7
|
toggle: BaseAccordionHeader;
|
|
8
8
|
accordion: BaseAccordion;
|
|
9
|
+
target: BaseAccordionHeader;
|
|
9
10
|
constructor(expanded: boolean, toggle: BaseAccordionHeader, accordion: BaseAccordion);
|
|
10
11
|
}
|
|
11
12
|
export declare abstract class BaseAccordionHeader extends LitElement {
|