@patternfly/elements 2.0.0-rc.4 → 2.0.0-rc.5
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/package.json +2 -1
- package/pf-accordion/BaseAccordion.js +1 -1
- package/pf-accordion/BaseAccordionHeader.js +1 -1
- package/pf-accordion/BaseAccordionPanel.js +1 -1
- package/pf-accordion/README.md +44 -0
- package/pf-accordion/pf-accordion-header.js +1 -1
- package/pf-accordion/pf-accordion-panel.js +1 -1
- package/pf-accordion/pf-accordion.js +1 -1
- package/pf-avatar/BaseAvatar.js +1 -1
- package/pf-avatar/README.md +31 -0
- package/pf-avatar/pf-avatar.js +1 -1
- package/pf-badge/BaseBadge.js +1 -1
- package/pf-badge/README.md +57 -0
- package/pf-badge/pf-badge.js +1 -1
- package/pf-button/BaseButton.js +1 -1
- package/pf-button/README.md +61 -0
- package/pf-button/pf-button.js +1 -1
- package/pf-card/BaseCard.js +1 -1
- package/pf-card/README.md +34 -0
- package/pf-card/pf-card.js +1 -1
- package/pf-clipboard-copy/BaseClipboardCopy.js +1 -1
- package/pf-clipboard-copy/README.md +8 -0
- package/pf-clipboard-copy/pf-clipboard-copy.js +1 -1
- package/pf-code-block/BaseCodeBlock.js +1 -1
- package/pf-code-block/README.md +77 -0
- package/pf-code-block/pf-code-block.js +1 -1
- package/pf-icon/BaseIcon.js +1 -1
- package/pf-icon/README.md +86 -0
- package/pf-icon/pf-icon.js +1 -1
- package/pf-jump-links/README.md +27 -0
- package/pf-jump-links/pf-jump-links-item.js +1 -1
- package/pf-jump-links/pf-jump-links-list.js +1 -1
- package/pf-jump-links/pf-jump-links.js +1 -1
- package/pf-label/BaseLabel.js +1 -1
- package/pf-label/README.md +61 -0
- package/pf-label/pf-label.js +1 -1
- package/pf-modal/README.md +63 -0
- package/pf-modal/pf-modal.js +1 -1
- package/pf-panel/README.md +10 -0
- package/pf-panel/pf-panel.js +1 -1
- package/pf-progress-stepper/README.md +41 -0
- package/pf-progress-stepper/pf-progress-step.js +1 -1
- package/pf-progress-stepper/pf-progress-stepper.js +1 -1
- package/pf-spinner/BaseSpinner.js +1 -1
- package/pf-spinner/README.md +46 -0
- package/pf-spinner/pf-spinner.js +1 -1
- package/pf-switch/BaseSwitch.js +1 -1
- package/pf-switch/README.md +91 -0
- package/pf-switch/pf-switch.js +1 -1
- package/pf-tabs/BaseTab.js +1 -1
- package/pf-tabs/BaseTabPanel.js +1 -1
- package/pf-tabs/BaseTabs.js +1 -1
- package/pf-tabs/README.md +40 -0
- package/pf-tabs/pf-tab-panel.js +1 -1
- package/pf-tabs/pf-tab.js +1 -1
- package/pf-tabs/pf-tabs.js +1 -1
- package/pf-tile/README.md +12 -0
- package/pf-tile/pf-tile.js +1 -1
- package/pf-timestamp/README.md +64 -0
- package/pf-timestamp/pf-timestamp.js +1 -1
- package/pf-tooltip/BaseTooltip.js +1 -1
- package/pf-tooltip/README.md +64 -0
- package/pf-tooltip/pf-tooltip.js +1 -1
- package/pf-accordion/demo/demo.css +0 -9
- package/pf-accordion/demo/pf-accordion.js +0 -10
- package/pf-accordion/test/pf-accordion.e2e.d.ts +0 -1
- package/pf-accordion/test/pf-accordion.e2e.js +0 -11
- package/pf-accordion/test/pf-accordion.e2e.js.map +0 -1
- package/pf-accordion/test/pf-accordion.spec.d.ts +0 -1
- package/pf-accordion/test/pf-accordion.spec.js +0 -971
- package/pf-accordion/test/pf-accordion.spec.js.map +0 -1
- package/pf-avatar/demo/demo.css +0 -18
- package/pf-avatar/demo/pf-avatar.js +0 -1
- package/pf-avatar/test/pf-avatar.e2e.d.ts +0 -1
- package/pf-avatar/test/pf-avatar.e2e.js +0 -11
- package/pf-avatar/test/pf-avatar.e2e.js.map +0 -1
- package/pf-avatar/test/pf-avatar.spec.d.ts +0 -1
- package/pf-avatar/test/pf-avatar.spec.js +0 -42
- package/pf-avatar/test/pf-avatar.spec.js.map +0 -1
- package/pf-badge/demo/demo.css +0 -9
- package/pf-badge/demo/pf-badge.js +0 -8
- package/pf-badge/test/pf-badge.e2e.d.ts +0 -1
- package/pf-badge/test/pf-badge.e2e.js +0 -11
- package/pf-badge/test/pf-badge.e2e.js.map +0 -1
- package/pf-badge/test/pf-badge.spec.d.ts +0 -1
- package/pf-badge/test/pf-badge.spec.js +0 -49
- package/pf-badge/test/pf-badge.spec.js.map +0 -1
- package/pf-button/demo/demo.css +0 -11
- package/pf-button/demo/form-control.js +0 -15
- package/pf-button/demo/pf-button.js +0 -28
- package/pf-button/test/pf-button.e2e.d.ts +0 -1
- package/pf-button/test/pf-button.e2e.js +0 -11
- package/pf-button/test/pf-button.e2e.js.map +0 -1
- package/pf-button/test/pf-button.spec.d.ts +0 -1
- package/pf-button/test/pf-button.spec.js +0 -94
- package/pf-button/test/pf-button.spec.js.map +0 -1
- package/pf-card/demo/demo.css +0 -44
- package/pf-card/demo/pf-card.js +0 -23
- package/pf-card/test/pf-card.e2e.d.ts +0 -1
- package/pf-card/test/pf-card.e2e.js +0 -11
- package/pf-card/test/pf-card.e2e.js.map +0 -1
- package/pf-card/test/pf-card.spec.d.ts +0 -1
- package/pf-card/test/pf-card.spec.js +0 -153
- package/pf-card/test/pf-card.spec.js.map +0 -1
- package/pf-clipboard-copy/demo/demo.css +0 -12
- package/pf-clipboard-copy/demo/pf-clipboard-copy.js +0 -1
- package/pf-clipboard-copy/test/pf-clipboard-copy.e2e.d.ts +0 -1
- package/pf-clipboard-copy/test/pf-clipboard-copy.e2e.js +0 -11
- package/pf-clipboard-copy/test/pf-clipboard-copy.e2e.js.map +0 -1
- package/pf-clipboard-copy/test/pf-clipboard-copy.spec.d.ts +0 -1
- package/pf-clipboard-copy/test/pf-clipboard-copy.spec.js +0 -100
- package/pf-clipboard-copy/test/pf-clipboard-copy.spec.js.map +0 -1
- package/pf-code-block/demo/demo.css +0 -4
- package/pf-code-block/demo/pf-code-block.js +0 -2
- package/pf-code-block/test/pf-code-block.e2e.d.ts +0 -1
- package/pf-code-block/test/pf-code-block.e2e.js +0 -11
- package/pf-code-block/test/pf-code-block.e2e.js.map +0 -1
- package/pf-code-block/test/pf-code-block.spec.d.ts +0 -1
- package/pf-code-block/test/pf-code-block.spec.js +0 -86
- package/pf-code-block/test/pf-code-block.spec.js.map +0 -1
- package/pf-icon/demo/custom-icon-sets.js +0 -5
- package/pf-icon/demo/demo.css +0 -53
- package/pf-icon/demo/icons/rh/boba-tea.js +0 -5
- package/pf-icon/demo/icons/rh/lifecycle.js +0 -3
- package/pf-icon/demo/pf-icon.js +0 -68
- package/pf-icon/test/pf-icon.e2e.d.ts +0 -1
- package/pf-icon/test/pf-icon.e2e.js +0 -11
- package/pf-icon/test/pf-icon.e2e.js.map +0 -1
- package/pf-icon/test/pf-icon.spec.d.ts +0 -1
- package/pf-icon/test/pf-icon.spec.js +0 -127
- package/pf-icon/test/pf-icon.spec.js.map +0 -1
- package/pf-icon/test/rh-icon-aed.js +0 -2
- package/pf-icon/test/rh-icon-api.js +0 -2
- package/pf-icon/test/rh-icon-atom.js +0 -2
- package/pf-icon/test/rh-icon-bike.js +0 -2
- package/pf-jump-links/demo/demo.css +0 -4
- package/pf-jump-links/demo/pf-jump-links.js +0 -4
- package/pf-jump-links/demo/scrollspy-with-subsections.css +0 -60
- package/pf-jump-links/demo/scrollspy-with-subsections.js +0 -34
- package/pf-jump-links/test/pf-jump-links.e2e.d.ts +0 -1
- package/pf-jump-links/test/pf-jump-links.e2e.js +0 -11
- package/pf-jump-links/test/pf-jump-links.e2e.js.map +0 -1
- package/pf-jump-links/test/pf-jump-links.spec.d.ts +0 -1
- package/pf-jump-links/test/pf-jump-links.spec.js +0 -88
- package/pf-jump-links/test/pf-jump-links.spec.js.map +0 -1
- package/pf-label/demo/demo.css +0 -37
- package/pf-label/demo/pf-label.js +0 -10
- package/pf-label/test/pf-label.e2e.d.ts +0 -1
- package/pf-label/test/pf-label.e2e.js +0 -11
- package/pf-label/test/pf-label.e2e.js.map +0 -1
- package/pf-label/test/pf-label.spec.d.ts +0 -1
- package/pf-label/test/pf-label.spec.js +0 -108
- package/pf-label/test/pf-label.spec.js.map +0 -1
- package/pf-modal/demo/demo.css +0 -32
- package/pf-modal/demo/pf-modal.js +0 -10
- package/pf-modal/test/pf-modal.e2e.d.ts +0 -1
- package/pf-modal/test/pf-modal.e2e.js +0 -13
- package/pf-modal/test/pf-modal.e2e.js.map +0 -1
- package/pf-modal/test/pf-modal.spec.d.ts +0 -1
- package/pf-modal/test/pf-modal.spec.js +0 -209
- package/pf-modal/test/pf-modal.spec.js.map +0 -1
- package/pf-panel/demo/demo.css +0 -7
- package/pf-panel/demo/pf-panel.js +0 -1
- package/pf-panel/test/pf-panel.e2e.d.ts +0 -1
- package/pf-panel/test/pf-panel.e2e.js +0 -11
- package/pf-panel/test/pf-panel.e2e.js.map +0 -1
- package/pf-panel/test/pf-panel.spec.d.ts +0 -1
- package/pf-panel/test/pf-panel.spec.js +0 -19
- package/pf-panel/test/pf-panel.spec.js.map +0 -1
- package/pf-progress-stepper/demo/demo.css +0 -10
- package/pf-progress-stepper/demo/pf-progress-stepper.js +0 -13
- package/pf-progress-stepper/test/pf-progress-stepper.e2e.d.ts +0 -1
- package/pf-progress-stepper/test/pf-progress-stepper.e2e.js +0 -11
- package/pf-progress-stepper/test/pf-progress-stepper.e2e.js.map +0 -1
- package/pf-progress-stepper/test/pf-progress-stepper.spec.d.ts +0 -1
- package/pf-progress-stepper/test/pf-progress-stepper.spec.js +0 -13
- package/pf-progress-stepper/test/pf-progress-stepper.spec.js.map +0 -1
- package/pf-spinner/demo/demo.css +0 -2
- package/pf-spinner/demo/pf-spinner.js +0 -2
- package/pf-spinner/test/pf-spinner.e2e.d.ts +0 -1
- package/pf-spinner/test/pf-spinner.e2e.js +0 -11
- package/pf-spinner/test/pf-spinner.e2e.js.map +0 -1
- package/pf-spinner/test/pf-spinner.spec.d.ts +0 -1
- package/pf-spinner/test/pf-spinner.spec.js +0 -52
- package/pf-spinner/test/pf-spinner.spec.js.map +0 -1
- package/pf-switch/demo/demo.css +0 -32
- package/pf-switch/demo/pf-switch.js +0 -13
- package/pf-switch/test/pf-switch.e2e.d.ts +0 -1
- package/pf-switch/test/pf-switch.e2e.js +0 -11
- package/pf-switch/test/pf-switch.e2e.js.map +0 -1
- package/pf-switch/test/pf-switch.spec.d.ts +0 -1
- package/pf-switch/test/pf-switch.spec.js +0 -164
- package/pf-switch/test/pf-switch.spec.js.map +0 -1
- package/pf-tabs/demo/demo.css +0 -62
- package/pf-tabs/demo/pf-tabs.js +0 -44
- package/pf-tabs/test/pf-tabs.e2e.d.ts +0 -1
- package/pf-tabs/test/pf-tabs.e2e.js +0 -13
- package/pf-tabs/test/pf-tabs.e2e.js.map +0 -1
- package/pf-tabs/test/pf-tabs.spec.d.ts +0 -1
- package/pf-tabs/test/pf-tabs.spec.js +0 -234
- package/pf-tabs/test/pf-tabs.spec.js.map +0 -1
- package/pf-tile/demo/demo.css +0 -59
- package/pf-tile/demo/pf-tile.js +0 -21
- package/pf-tile/test/pf-tile.e2e.d.ts +0 -1
- package/pf-tile/test/pf-tile.e2e.js +0 -11
- package/pf-tile/test/pf-tile.e2e.js.map +0 -1
- package/pf-tile/test/pf-tile.spec.d.ts +0 -1
- package/pf-tile/test/pf-tile.spec.js +0 -51
- package/pf-tile/test/pf-tile.spec.js.map +0 -1
- package/pf-timestamp/demo/pf-timestamp.js +0 -3
- package/pf-timestamp/test/pf-timestamp.e2e.d.ts +0 -1
- package/pf-timestamp/test/pf-timestamp.e2e.js +0 -12
- package/pf-timestamp/test/pf-timestamp.e2e.js.map +0 -1
- package/pf-timestamp/test/pf-timestamp.spec.d.ts +0 -1
- package/pf-timestamp/test/pf-timestamp.spec.js +0 -139
- package/pf-timestamp/test/pf-timestamp.spec.js.map +0 -1
- package/pf-tooltip/demo/demo.css +0 -39
- package/pf-tooltip/demo/performance.js +0 -45
- package/pf-tooltip/demo/pf-tooltip.js +0 -7
- package/pf-tooltip/test/pf-tooltip.e2e.d.ts +0 -1
- package/pf-tooltip/test/pf-tooltip.e2e.js +0 -11
- package/pf-tooltip/test/pf-tooltip.e2e.js.map +0 -1
- package/pf-tooltip/test/pf-tooltip.spec.d.ts +0 -1
- package/pf-tooltip/test/pf-tooltip.spec.js +0 -50
- package/pf-tooltip/test/pf-tooltip.spec.js.map +0 -1
|
@@ -1,234 +0,0 @@
|
|
|
1
|
-
import { expect, html, nextFrame, aTimeout } from '@open-wc/testing';
|
|
2
|
-
import { createFixture } from '@patternfly/pfe-tools/test/create-fixture.js';
|
|
3
|
-
import { a11ySnapshot } from '@patternfly/pfe-tools/test/a11y-snapshot.js';
|
|
4
|
-
import { setViewport, sendKeys } from '@web/test-runner-commands';
|
|
5
|
-
import { BaseTab } from '../BaseTab.js';
|
|
6
|
-
import { PfTabs } from '../pf-tabs.js';
|
|
7
|
-
import { PfTab } from '../pf-tab.js';
|
|
8
|
-
import '@patternfly/pfe-tools/test/stub-logger.js';
|
|
9
|
-
const TEMPLATE = html `
|
|
10
|
-
<pf-tabs>
|
|
11
|
-
<pf-tab slot="tab" active>Users</pf-tab>
|
|
12
|
-
<pf-tab-panel>Users</pf-tab-panel>
|
|
13
|
-
<pf-tab slot="tab">Containers</pf-tab>
|
|
14
|
-
<pf-tab-panel>Containers</pf-tab-panel>
|
|
15
|
-
<pf-tab slot="tab">Database</pf-tab>
|
|
16
|
-
<pf-tab-panel>Database</pf-tab-panel>
|
|
17
|
-
<pf-tab slot="tab" disabled>Disabled</pf-tab>
|
|
18
|
-
<pf-tab-panel>Disabled</pf-tab-panel>
|
|
19
|
-
<pf-tab slot="tab" aria-disabled="true">Aria Disabled</pf-tab>
|
|
20
|
-
<pf-tab-panel>Aria Disabled</pf-tab-panel>
|
|
21
|
-
</pf-tabs>
|
|
22
|
-
`;
|
|
23
|
-
const DISABLED = html `
|
|
24
|
-
<pf-tabs>
|
|
25
|
-
<pf-tab slot="tab" disabled>Users</pf-tab>
|
|
26
|
-
<pf-tab-panel>Users</pf-tab-panel>
|
|
27
|
-
<pf-tab slot="tab">Containers</pf-tab>
|
|
28
|
-
<pf-tab-panel>Containers</pf-tab-panel>
|
|
29
|
-
<pf-tab slot="tab">Database</pf-tab>
|
|
30
|
-
<pf-tab-panel>Database</pf-tab-panel>
|
|
31
|
-
<pf-tab slot="tab" disabled>Disabled</pf-tab>
|
|
32
|
-
<pf-tab-panel>Disabled</pf-tab-panel>
|
|
33
|
-
<pf-tab slot="tab" aria-disabled="true">Aria Disabled</pf-tab>
|
|
34
|
-
<pf-tab-panel>Aria Disabled</pf-tab-panel>
|
|
35
|
-
</pf-tabs>
|
|
36
|
-
`;
|
|
37
|
-
describe('<pf-tabs>', function () {
|
|
38
|
-
it('should upgrade', async function () {
|
|
39
|
-
const el = await createFixture(TEMPLATE);
|
|
40
|
-
expect(el, 'pf-tabs should be an instance of PfeTabs')
|
|
41
|
-
.to.be.an.instanceOf(customElements.get('pf-tabs'))
|
|
42
|
-
.and
|
|
43
|
-
.to.be.an.instanceOf(PfTabs);
|
|
44
|
-
});
|
|
45
|
-
it('should apply correct aria attributes', async function () {
|
|
46
|
-
const el = await createFixture(TEMPLATE);
|
|
47
|
-
await nextFrame();
|
|
48
|
-
const tabs = el.querySelectorAll('pf-tab');
|
|
49
|
-
const tabPanels = el.querySelectorAll('pf-tab-panels');
|
|
50
|
-
tabs.forEach(function (tab, index) {
|
|
51
|
-
const tabId = tab.getAttribute('id');
|
|
52
|
-
const tabControls = tab.getAttribute('aria-controls');
|
|
53
|
-
tabPanels.forEach(function (panel, pindex) {
|
|
54
|
-
if (index === pindex) {
|
|
55
|
-
expect(panel.getAttribute('aria-labelledby')).to.equal(tabId);
|
|
56
|
-
expect(panel.id).to.equal(tabControls);
|
|
57
|
-
}
|
|
58
|
-
});
|
|
59
|
-
});
|
|
60
|
-
});
|
|
61
|
-
it('should activate the first focusable tab when first tab is disabled and no active is given', async function () {
|
|
62
|
-
const el = await createFixture(DISABLED);
|
|
63
|
-
await nextFrame();
|
|
64
|
-
const secondTab = el.querySelector('pf-tab:nth-of-type(2)');
|
|
65
|
-
expect(secondTab.hasAttribute('active')).to.equal(true);
|
|
66
|
-
});
|
|
67
|
-
it('should activate tab when given an active attribute', async function () {
|
|
68
|
-
const el = await createFixture(TEMPLATE);
|
|
69
|
-
const tab = el.querySelector('pf-tab:nth-of-type(3)');
|
|
70
|
-
tab.setAttribute('active', '');
|
|
71
|
-
await nextFrame();
|
|
72
|
-
expect(tab.hasAttribute('active'), 'active attr').to.equal(true);
|
|
73
|
-
const panel = (await a11ySnapshot()).children.find(x => x.role === 'tabpanel');
|
|
74
|
-
expect(panel?.name, 'active panel').to.equal('Database');
|
|
75
|
-
});
|
|
76
|
-
it('should activate tab when activeIndex property is changed', async function () {
|
|
77
|
-
const el = await createFixture(TEMPLATE);
|
|
78
|
-
el.activeIndex = 2;
|
|
79
|
-
await nextFrame();
|
|
80
|
-
el.activeIndex = 0;
|
|
81
|
-
await nextFrame();
|
|
82
|
-
const tab = el.querySelector('pf-tab:first-of-type');
|
|
83
|
-
expect(tab.hasAttribute('active')).to.equal(true);
|
|
84
|
-
const panel = (await a11ySnapshot()).children.find(x => x.role === 'tabpanel');
|
|
85
|
-
expect(panel?.name, 'active panel').to.equal('Users');
|
|
86
|
-
});
|
|
87
|
-
it('should change focus when keyboard navigation is used', async function () {
|
|
88
|
-
const el = await createFixture(TEMPLATE);
|
|
89
|
-
await el.updateComplete;
|
|
90
|
-
const firstTab = el.querySelector('pf-tab:first-of-type');
|
|
91
|
-
const secondTab = el.querySelector('pf-tab:nth-of-type(2)')?.id;
|
|
92
|
-
firstTab?.focus();
|
|
93
|
-
await nextFrame();
|
|
94
|
-
const initial = document.activeElement?.id;
|
|
95
|
-
await sendKeys({ down: 'ArrowRight' });
|
|
96
|
-
await nextFrame();
|
|
97
|
-
const after = document.activeElement?.id;
|
|
98
|
-
expect(initial).to.not.equal(after);
|
|
99
|
-
expect(secondTab).to.equal(after);
|
|
100
|
-
});
|
|
101
|
-
it('should open panel at same index of selected tab', async function () {
|
|
102
|
-
const el = await createFixture(TEMPLATE);
|
|
103
|
-
await nextFrame();
|
|
104
|
-
el.activeIndex = 1;
|
|
105
|
-
await nextFrame();
|
|
106
|
-
const inactivePanel = el.querySelector('pf-tab-panel:first-of-type');
|
|
107
|
-
/* given active-key of 1 on a zero based index, nth-of-type(n) takes a 1 based index = 2. */
|
|
108
|
-
const activePanel = el.querySelector('pf-tab-panel:nth-of-type(2)');
|
|
109
|
-
expect(inactivePanel.hasAttribute('hidden')).to.equal(true);
|
|
110
|
-
expect(activePanel.hasAttribute('hidden')).to.equal(false);
|
|
111
|
-
});
|
|
112
|
-
describe('vertical tabs', function () {
|
|
113
|
-
it('should have vertical styles', async function () {
|
|
114
|
-
const el = await createFixture(TEMPLATE);
|
|
115
|
-
el.setAttribute('vertical', '');
|
|
116
|
-
await nextFrame();
|
|
117
|
-
const tabs = el.shadowRoot.querySelector('[part="tabs"]');
|
|
118
|
-
const tabsVerticalStyles = getComputedStyle(tabs).flexDirection;
|
|
119
|
-
expect(tabsVerticalStyles).to.be.equal('column');
|
|
120
|
-
});
|
|
121
|
-
});
|
|
122
|
-
describe('disabled tabs', function () {
|
|
123
|
-
beforeEach(async function () {
|
|
124
|
-
await setViewport({ width: 320, height: 640 });
|
|
125
|
-
});
|
|
126
|
-
it('should aria-disable the tab if disabled', async function () {
|
|
127
|
-
const el = await createFixture(TEMPLATE);
|
|
128
|
-
const disabledTab = el.querySelector('pf-tab:nth-of-type(2)');
|
|
129
|
-
disabledTab.disabled = true;
|
|
130
|
-
await nextFrame();
|
|
131
|
-
const tab = (await a11ySnapshot()).children.find(x => x.role === 'tab' && x.name === 'Containers');
|
|
132
|
-
expect(tab?.disabled).to.be.true;
|
|
133
|
-
});
|
|
134
|
-
it('should have disabled css styles if disabled', async function () {
|
|
135
|
-
const el = await createFixture(TEMPLATE);
|
|
136
|
-
const disabledTab = el.querySelector('pf-tab:first-of-type');
|
|
137
|
-
disabledTab.setAttribute('disabled', 'disabled');
|
|
138
|
-
await nextFrame();
|
|
139
|
-
const button = disabledTab.shadowRoot.firstElementChild;
|
|
140
|
-
const disabledStyles = getComputedStyle(button).backgroundColor;
|
|
141
|
-
expect(disabledStyles).to.equal('rgb(245, 245, 245)');
|
|
142
|
-
});
|
|
143
|
-
it('should have disabled css styles if aria-disabled attribute is true', async function () {
|
|
144
|
-
const el = await createFixture(TEMPLATE);
|
|
145
|
-
const disabledTab = el.querySelector('pf-tab:first-of-type');
|
|
146
|
-
disabledTab.setAttribute('aria-disabled', 'true');
|
|
147
|
-
await nextFrame();
|
|
148
|
-
const button = disabledTab.shadowRoot.firstElementChild;
|
|
149
|
-
const disabledStyles = getComputedStyle(button).backgroundColor;
|
|
150
|
-
expect(disabledStyles).to.equal('rgb(245, 245, 245)');
|
|
151
|
-
});
|
|
152
|
-
});
|
|
153
|
-
describe('on small screen', function () {
|
|
154
|
-
beforeEach(async function () {
|
|
155
|
-
await setViewport({ width: 320, height: 640 });
|
|
156
|
-
});
|
|
157
|
-
it('should overflow if too wide', async function () {
|
|
158
|
-
const el = await createFixture(TEMPLATE);
|
|
159
|
-
const tabs = el.shadowRoot.querySelector('[part="tabs"]');
|
|
160
|
-
const tabsOverflow = getComputedStyle(tabs).overflowX === 'auto';
|
|
161
|
-
expect(tabsOverflow).to.equal(true);
|
|
162
|
-
});
|
|
163
|
-
it('should have visible scroll buttons if overflowed', async function () {
|
|
164
|
-
const el = await createFixture(TEMPLATE);
|
|
165
|
-
// Property 'scrollTimeoutDelay' is protected and only accessible within class 'PfeTabs' and its subclasses.
|
|
166
|
-
// using 150 as a static representation.
|
|
167
|
-
await aTimeout(150);
|
|
168
|
-
const previousTab = el.shadowRoot.querySelector('#previousTab');
|
|
169
|
-
const nextTab = el.shadowRoot.querySelector('#nextTab');
|
|
170
|
-
const prevDisplayStyle = getComputedStyle(previousTab).display;
|
|
171
|
-
const nextDisplayStyle = getComputedStyle(nextTab).display;
|
|
172
|
-
expect(prevDisplayStyle).to.not.equal('none');
|
|
173
|
-
expect(nextDisplayStyle).to.not.equal('none');
|
|
174
|
-
});
|
|
175
|
-
});
|
|
176
|
-
describe('manual activation', function () {
|
|
177
|
-
let element;
|
|
178
|
-
let firstTab;
|
|
179
|
-
let secondTab;
|
|
180
|
-
let initialFocus;
|
|
181
|
-
let afterFocus;
|
|
182
|
-
beforeEach(async function () {
|
|
183
|
-
element = await createFixture(html `
|
|
184
|
-
<pf-tabs manual>
|
|
185
|
-
<pf-tab slot="tab" active>Users</pf-tab>
|
|
186
|
-
<pf-tab-panel>Users</pf-tab-panel>
|
|
187
|
-
<pf-tab slot="tab">Containers</pf-tab>
|
|
188
|
-
<pf-tab-panel>Containers</pf-tab-panel>
|
|
189
|
-
<pf-tab slot="tab">Database</pf-tab>
|
|
190
|
-
<pf-tab-panel>Database</pf-tab-panel>
|
|
191
|
-
<pf-tab slot="tab" disabled>Disabled</pf-tab>
|
|
192
|
-
<pf-tab-panel>Disabled</pf-tab-panel>
|
|
193
|
-
<pf-tab slot="tab" aria-disabled="true">Aria Disabled</pf-tab>
|
|
194
|
-
<pf-tab-panel>Aria Disabled</pf-tab-panel>
|
|
195
|
-
</pf-tabs>
|
|
196
|
-
`);
|
|
197
|
-
[firstTab, secondTab] = element.querySelectorAll('pf-tab');
|
|
198
|
-
await element.updateComplete;
|
|
199
|
-
await nextFrame();
|
|
200
|
-
initialFocus = document.activeElement;
|
|
201
|
-
});
|
|
202
|
-
describe('pressing right arrow', function () {
|
|
203
|
-
beforeEach(async function () {
|
|
204
|
-
firstTab?.focus();
|
|
205
|
-
await sendKeys({ down: 'ArrowRight' });
|
|
206
|
-
await element.updateComplete;
|
|
207
|
-
await nextFrame();
|
|
208
|
-
afterFocus = document.activeElement;
|
|
209
|
-
});
|
|
210
|
-
it('should not activate second tab', function () {
|
|
211
|
-
expect(firstTab.active).to.be.true;
|
|
212
|
-
expect(secondTab.active).to.be.false;
|
|
213
|
-
expect(initialFocus).to.be.ok
|
|
214
|
-
.and.to.not.equal(afterFocus)
|
|
215
|
-
.and.to.not.equal(secondTab);
|
|
216
|
-
});
|
|
217
|
-
describe('then pressing enter', function () {
|
|
218
|
-
beforeEach(async function () {
|
|
219
|
-
await sendKeys({ down: 'Enter' });
|
|
220
|
-
await nextFrame();
|
|
221
|
-
afterFocus = document.activeElement;
|
|
222
|
-
});
|
|
223
|
-
it('should activate second tab', async function () {
|
|
224
|
-
expect(firstTab.active).to.be.false;
|
|
225
|
-
expect(secondTab.active).to.be.true;
|
|
226
|
-
expect(afterFocus).to.equal(secondTab)
|
|
227
|
-
.and.to.not.equal(initialFocus)
|
|
228
|
-
.and.to.not.equal(firstTab);
|
|
229
|
-
});
|
|
230
|
-
});
|
|
231
|
-
});
|
|
232
|
-
});
|
|
233
|
-
});
|
|
234
|
-
//# sourceMappingURL=pf-tabs.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pf-tabs.spec.js","sourceRoot":"","sources":["pf-tabs.spec.ts"],"names":[],"mappings":"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","sourcesContent":["import { expect, html, nextFrame, aTimeout } from '@open-wc/testing';\nimport { createFixture } from '@patternfly/pfe-tools/test/create-fixture.js';\nimport { a11ySnapshot } from '@patternfly/pfe-tools/test/a11y-snapshot.js';\nimport { setViewport, sendKeys } from '@web/test-runner-commands';\n\nimport { BaseTab } from '../BaseTab.js';\nimport { PfTabs } from '../pf-tabs.js';\nimport { PfTab } from '../pf-tab.js';\n\nimport '@patternfly/pfe-tools/test/stub-logger.js';\n\nconst TEMPLATE = html`\n <pf-tabs>\n <pf-tab slot=\"tab\" active>Users</pf-tab>\n <pf-tab-panel>Users</pf-tab-panel>\n <pf-tab slot=\"tab\">Containers</pf-tab>\n <pf-tab-panel>Containers</pf-tab-panel>\n <pf-tab slot=\"tab\">Database</pf-tab>\n <pf-tab-panel>Database</pf-tab-panel>\n <pf-tab slot=\"tab\" disabled>Disabled</pf-tab>\n <pf-tab-panel>Disabled</pf-tab-panel>\n <pf-tab slot=\"tab\" aria-disabled=\"true\">Aria Disabled</pf-tab>\n <pf-tab-panel>Aria Disabled</pf-tab-panel>\n </pf-tabs>\n `;\n\nconst DISABLED = html`\n <pf-tabs>\n <pf-tab slot=\"tab\" disabled>Users</pf-tab>\n <pf-tab-panel>Users</pf-tab-panel>\n <pf-tab slot=\"tab\">Containers</pf-tab>\n <pf-tab-panel>Containers</pf-tab-panel>\n <pf-tab slot=\"tab\">Database</pf-tab>\n <pf-tab-panel>Database</pf-tab-panel>\n <pf-tab slot=\"tab\" disabled>Disabled</pf-tab>\n <pf-tab-panel>Disabled</pf-tab-panel>\n <pf-tab slot=\"tab\" aria-disabled=\"true\">Aria Disabled</pf-tab>\n <pf-tab-panel>Aria Disabled</pf-tab-panel>\n </pf-tabs>\n`;\n\ndescribe('<pf-tabs>', function() {\n it('should upgrade', async function() {\n const el = await createFixture<PfTabs>(TEMPLATE);\n expect(el, 'pf-tabs should be an instance of PfeTabs')\n .to.be.an.instanceOf(customElements.get('pf-tabs'))\n .and\n .to.be.an.instanceOf(PfTabs);\n });\n\n it('should apply correct aria attributes', async function() {\n const el = await createFixture<PfTabs>(TEMPLATE);\n await nextFrame();\n const tabs = el.querySelectorAll('pf-tab');\n const tabPanels = el.querySelectorAll('pf-tab-panels');\n\n tabs.forEach(function(tab: Element, index: number) {\n const tabId = tab.getAttribute('id');\n const tabControls = tab.getAttribute('aria-controls');\n tabPanels.forEach(function(panel: Element, pindex: number) {\n if (index === pindex) {\n expect(panel.getAttribute('aria-labelledby')).to.equal(tabId);\n expect(panel.id).to.equal(tabControls);\n }\n });\n });\n });\n\n it('should activate the first focusable tab when first tab is disabled and no active is given', async function() {\n const el = await createFixture<PfTabs>(DISABLED);\n await nextFrame();\n const secondTab = el.querySelector('pf-tab:nth-of-type(2)');\n expect(secondTab!.hasAttribute('active')).to.equal(true);\n });\n\n it('should activate tab when given an active attribute', async function() {\n const el = await createFixture<PfTabs>(TEMPLATE);\n const tab = el.querySelector('pf-tab:nth-of-type(3)');\n tab!.setAttribute('active', '');\n await nextFrame();\n expect(tab!.hasAttribute('active'), 'active attr').to.equal(true);\n const panel = (await a11ySnapshot()).children.find(x => x.role === 'tabpanel');\n expect(panel?.name, 'active panel').to.equal('Database');\n });\n\n it('should activate tab when activeIndex property is changed', async function() {\n const el = await createFixture<PfTabs>(TEMPLATE);\n el.activeIndex = 2;\n await nextFrame();\n el.activeIndex = 0;\n await nextFrame();\n const tab = el.querySelector('pf-tab:first-of-type');\n expect(tab!.hasAttribute('active')).to.equal(true);\n const panel = (await a11ySnapshot()).children.find(x => x.role === 'tabpanel');\n expect(panel?.name, 'active panel').to.equal('Users');\n });\n\n it('should change focus when keyboard navigation is used', async function() {\n const el = await createFixture<PfTabs>(TEMPLATE);\n await el.updateComplete;\n const firstTab = el.querySelector('pf-tab:first-of-type') as HTMLElement;\n const secondTab = el.querySelector('pf-tab:nth-of-type(2)')?.id;\n firstTab?.focus();\n await nextFrame();\n const initial = document.activeElement?.id;\n await sendKeys({ down: 'ArrowRight' });\n await nextFrame();\n const after = document.activeElement?.id;\n expect(initial).to.not.equal(after);\n expect(secondTab).to.equal(after);\n });\n\n it('should open panel at same index of selected tab', async function() {\n const el = await createFixture<PfTabs>(TEMPLATE);\n await nextFrame();\n el.activeIndex = 1;\n await nextFrame();\n const inactivePanel = el.querySelector('pf-tab-panel:first-of-type');\n /* given active-key of 1 on a zero based index, nth-of-type(n) takes a 1 based index = 2. */\n const activePanel = el.querySelector('pf-tab-panel:nth-of-type(2)');\n expect(inactivePanel!.hasAttribute('hidden')).to.equal(true);\n expect(activePanel!.hasAttribute('hidden')).to.equal(false);\n });\n\n describe('vertical tabs', function() {\n it('should have vertical styles', async function() {\n const el = await createFixture<PfTabs>(TEMPLATE);\n el.setAttribute('vertical', '');\n await nextFrame();\n const tabs = el.shadowRoot!.querySelector('[part=\"tabs\"]')!;\n const tabsVerticalStyles = getComputedStyle(tabs).flexDirection;\n expect(tabsVerticalStyles).to.be.equal('column');\n });\n });\n\n describe('disabled tabs', function() {\n beforeEach(async function() {\n await setViewport({ width: 320, height: 640 });\n });\n\n it('should aria-disable the tab if disabled', async function() {\n const el = await createFixture<PfTabs>(TEMPLATE);\n const disabledTab = el.querySelector('pf-tab:nth-of-type(2)')! as BaseTab;\n disabledTab.disabled = true;\n await nextFrame();\n const tab = (await a11ySnapshot()).children.find(x => x.role === 'tab' && x.name === 'Containers');\n expect(tab?.disabled).to.be.true;\n });\n\n it('should have disabled css styles if disabled', async function() {\n const el = await createFixture<PfTabs>(TEMPLATE);\n const disabledTab = el.querySelector('pf-tab:first-of-type')!;\n disabledTab.setAttribute('disabled', 'disabled');\n await nextFrame();\n const button = disabledTab!.shadowRoot!.firstElementChild!;\n const disabledStyles = getComputedStyle(button).backgroundColor;\n expect(disabledStyles).to.equal('rgb(245, 245, 245)');\n });\n\n it('should have disabled css styles if aria-disabled attribute is true', async function() {\n const el = await createFixture<PfTabs>(TEMPLATE);\n const disabledTab = el.querySelector('pf-tab:first-of-type')!;\n disabledTab.setAttribute('aria-disabled', 'true');\n await nextFrame();\n const button = disabledTab!.shadowRoot!.firstElementChild!;\n const disabledStyles = getComputedStyle(button).backgroundColor;\n expect(disabledStyles).to.equal('rgb(245, 245, 245)');\n });\n });\n\n describe('on small screen', function() {\n beforeEach(async function() {\n await setViewport({ width: 320, height: 640 });\n });\n\n it('should overflow if too wide', async function() {\n const el = await createFixture<PfTabs>(TEMPLATE);\n const tabs = el.shadowRoot!.querySelector('[part=\"tabs\"]')!;\n const tabsOverflow = getComputedStyle(tabs).overflowX === 'auto';\n expect(tabsOverflow).to.equal(true);\n });\n\n it('should have visible scroll buttons if overflowed', async function() {\n const el = await createFixture<PfTabs>(TEMPLATE);\n // Property 'scrollTimeoutDelay' is protected and only accessible within class 'PfeTabs' and its subclasses.\n // using 150 as a static representation.\n await aTimeout(150);\n const previousTab = el.shadowRoot!.querySelector('#previousTab')!;\n const nextTab = el.shadowRoot!.querySelector('#nextTab')!;\n const prevDisplayStyle = getComputedStyle(previousTab).display;\n const nextDisplayStyle = getComputedStyle(nextTab).display;\n expect(prevDisplayStyle ).to.not.equal('none');\n expect(nextDisplayStyle).to.not.equal('none');\n });\n });\n\n describe('manual activation', function() {\n let element: PfTabs;\n let firstTab: PfTab;\n let secondTab: PfTab;\n let initialFocus: Element|null;\n let afterFocus: Element|null;\n beforeEach(async function() {\n element = await createFixture<PfTabs>(html`\n <pf-tabs manual>\n <pf-tab slot=\"tab\" active>Users</pf-tab>\n <pf-tab-panel>Users</pf-tab-panel>\n <pf-tab slot=\"tab\">Containers</pf-tab>\n <pf-tab-panel>Containers</pf-tab-panel>\n <pf-tab slot=\"tab\">Database</pf-tab>\n <pf-tab-panel>Database</pf-tab-panel>\n <pf-tab slot=\"tab\" disabled>Disabled</pf-tab>\n <pf-tab-panel>Disabled</pf-tab-panel>\n <pf-tab slot=\"tab\" aria-disabled=\"true\">Aria Disabled</pf-tab>\n <pf-tab-panel>Aria Disabled</pf-tab-panel>\n </pf-tabs>\n `);\n [firstTab, secondTab] = element.querySelectorAll('pf-tab');\n await element.updateComplete;\n await nextFrame();\n initialFocus = document.activeElement;\n });\n\n describe('pressing right arrow', function() {\n beforeEach(async function() {\n firstTab?.focus();\n await sendKeys({ down: 'ArrowRight' });\n await element.updateComplete;\n await nextFrame();\n afterFocus = document.activeElement;\n });\n it('should not activate second tab', function() {\n expect(firstTab.active).to.be.true;\n expect(secondTab.active).to.be.false;\n expect(initialFocus).to.be.ok\n .and.to.not.equal(afterFocus)\n .and.to.not.equal(secondTab);\n });\n describe('then pressing enter', function() {\n beforeEach(async function() {\n await sendKeys({ down: 'Enter' });\n await nextFrame();\n afterFocus = document.activeElement;\n });\n it('should activate second tab', async function() {\n expect(firstTab.active).to.be.false;\n expect(secondTab.active).to.be.true;\n expect(afterFocus).to.equal(secondTab)\n .and.to.not.equal(initialFocus)\n .and.to.not.equal(firstTab);\n });\n });\n });\n });\n});\n"]}
|
package/pf-tile/demo/demo.css
DELETED
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
:host {
|
|
2
|
-
display: block;
|
|
3
|
-
}
|
|
4
|
-
|
|
5
|
-
section {
|
|
6
|
-
margin: 0 auto;
|
|
7
|
-
padding: 0 16px 32px;
|
|
8
|
-
width: 100%;
|
|
9
|
-
max-width: 1008px;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
.pf-l-flex {
|
|
13
|
-
display: var(--pf-l-flex--Display, flex);
|
|
14
|
-
flex-wrap: var(--pf-l-flex--FlexWrap, wrap);
|
|
15
|
-
align-items: var(--pf-l-flex--AlignItems, baseline);
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
.pf-l-flex > * {
|
|
19
|
-
order: var(--pf-l-flex--item--Order, 0);
|
|
20
|
-
max-width: 100%;
|
|
21
|
-
margin-right: var(--pf-l-flex--spacer, var(--pf-l-flex--spacer-base, 1rem));
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
.pf-l-flex > .pf-m-flex-1 {
|
|
25
|
-
flex: 1 0 0;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
@media screen and (min-width: 576px) {
|
|
29
|
-
.pf-l-flex > * {
|
|
30
|
-
order: var(--pf-l-flex--item--Order-on-sm, var(--pf-l-flex--item--Order, 0));
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
@media screen and (min-width: 768px) {
|
|
34
|
-
.pf-l-flex > * {
|
|
35
|
-
order: var(--pf-l-flex--item--Order-on-md, var(--pf-l-flex--item--Order-on-sm, var(--pf-l-flex--item--Order, 0)));
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
@media screen and (min-width: 992px) {
|
|
39
|
-
.pf-l-flex > * {
|
|
40
|
-
order: var(--pf-l-flex--item--Order-on-lg, var(--pf-l-flex--item--Order-on-md, var(--pf-l-flex--item--Order-on-sm, var(--pf-l-flex--item--Order, 0))));
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
@media screen and (min-width: 1200px) {
|
|
44
|
-
.pf-l-flex > * {
|
|
45
|
-
order: var(--pf-l-flex--item--Order-on-xl, var(--pf-l-flex--item--Order-on-lg, var(--pf-l-flex--item--Order-on-md, var(--pf-l-flex--item--Order-on-sm, var(--pf-l-flex--item--Order, 0)))));
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
@media screen and (min-width: 1450px) {
|
|
49
|
-
.pf-l-flex > * {
|
|
50
|
-
order: var(--pf-l-flex--item--Order-on-2xl, var(--pf-l-flex--item--Order-on-xl, var(--pf-l-flex--item--Order-on-lg, var(--pf-l-flex--item--Order-on-md, var(--pf-l-flex--item--Order-on-sm, var(--pf-l-flex--item--Order, 0))))));
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
.pf-l-flex > *:last-child {
|
|
54
|
-
--pf-l-flex--spacer: 0;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
.pf-l-flex.pf-m-flex {
|
|
58
|
-
display: var(--pf-l-flex--Display, flex);
|
|
59
|
-
}
|
package/pf-tile/demo/pf-tile.js
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import '@patternfly/elements/pf-tile/pf-tile.js';
|
|
2
|
-
|
|
3
|
-
const container = document.getElementById('keyboard-interaction');
|
|
4
|
-
|
|
5
|
-
function selectByEvent(event) {
|
|
6
|
-
const tile = event.composedPath().find(node => node.localName === 'pf-tile');
|
|
7
|
-
if (tile) {
|
|
8
|
-
for (const child of container.querySelectorAll('pf-tile')) {
|
|
9
|
-
child.selected = tile === child && !child.disabled;
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
container.addEventListener('click', selectByEvent);
|
|
14
|
-
container.addEventListener('keydown', function(event) {
|
|
15
|
-
switch (event.key) {
|
|
16
|
-
case ' ':
|
|
17
|
-
case 'Enter':
|
|
18
|
-
event.preventDefault();
|
|
19
|
-
selectByEvent(event);
|
|
20
|
-
}
|
|
21
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { test } from '@playwright/test';
|
|
2
|
-
import { PfeDemoPage } from '@patternfly/pfe-tools/test/playwright/PfeDemoPage.js';
|
|
3
|
-
const tagName = 'pf-tile';
|
|
4
|
-
test.describe(tagName, () => {
|
|
5
|
-
test('snapshot', async ({ page }) => {
|
|
6
|
-
const componentPage = new PfeDemoPage(page, tagName);
|
|
7
|
-
await componentPage.navigate();
|
|
8
|
-
await componentPage.snapshot();
|
|
9
|
-
});
|
|
10
|
-
});
|
|
11
|
-
//# sourceMappingURL=pf-tile.e2e.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pf-tile.e2e.js","sourceRoot":"","sources":["pf-tile.e2e.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,sDAAsD,CAAC;AAEnF,MAAM,OAAO,GAAG,SAAS,CAAC;AAE1B,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;IAC1B,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QAClC,MAAM,aAAa,GAAG,IAAI,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,aAAa,CAAC,QAAQ,EAAE,CAAC;QAC/B,MAAM,aAAa,CAAC,QAAQ,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { test } from '@playwright/test';\nimport { PfeDemoPage } from '@patternfly/pfe-tools/test/playwright/PfeDemoPage.js';\n\nconst tagName = 'pf-tile';\n\ntest.describe(tagName, () => {\n test('snapshot', async ({ page }) => {\n const componentPage = new PfeDemoPage(page, tagName);\n await componentPage.navigate();\n await componentPage.snapshot();\n });\n});\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { expect, html, nextFrame } from '@open-wc/testing';
|
|
2
|
-
import { createFixture } from '@patternfly/pfe-tools/test/create-fixture.js';
|
|
3
|
-
import { PfTile } from '@patternfly/elements/pf-tile/pf-tile.js';
|
|
4
|
-
const TEMPLATE = html `
|
|
5
|
-
<pf-tile>
|
|
6
|
-
<pf-icon slot="icon" set="fas" icon="bell" size="md" loading="idle"></pf-icon>
|
|
7
|
-
Default Content
|
|
8
|
-
<div slot="body">Subtext goes here</div>
|
|
9
|
-
</pf-tile>
|
|
10
|
-
`;
|
|
11
|
-
describe('<pf-tile>', function () {
|
|
12
|
-
it('should upgrade', async function () {
|
|
13
|
-
const el = await createFixture(TEMPLATE);
|
|
14
|
-
const klass = customElements.get('pf-tile');
|
|
15
|
-
expect(el)
|
|
16
|
-
.to.be.an.instanceOf(klass)
|
|
17
|
-
.and
|
|
18
|
-
.to.be.an.instanceOf(PfTile);
|
|
19
|
-
});
|
|
20
|
-
it('should have a selected styles when selected', async function () {
|
|
21
|
-
const el = await createFixture(TEMPLATE);
|
|
22
|
-
el.selected = true;
|
|
23
|
-
await nextFrame();
|
|
24
|
-
const { height } = getComputedStyle(el, ':after');
|
|
25
|
-
expect(height).to.equal('3px');
|
|
26
|
-
const { backgroundColor } = getComputedStyle(el, ':after');
|
|
27
|
-
expect(backgroundColor).to.equal('rgb(0, 102, 204)');
|
|
28
|
-
// TODO: don't test shadowroots
|
|
29
|
-
const { color } = getComputedStyle(el.shadowRoot.querySelector('[part="icon"]'));
|
|
30
|
-
expect(color).to.be.equal('rgb(0, 102, 204)');
|
|
31
|
-
});
|
|
32
|
-
it('should be flex direction column if stacked', async function () {
|
|
33
|
-
const el = await createFixture(TEMPLATE);
|
|
34
|
-
el.stacked = 'md';
|
|
35
|
-
await nextFrame();
|
|
36
|
-
// TODO: don't test shadowroots
|
|
37
|
-
const { flexDirection } = getComputedStyle(el.shadowRoot.querySelector('[part="header"]'));
|
|
38
|
-
expect(flexDirection).to.equal('column');
|
|
39
|
-
});
|
|
40
|
-
it('should have disabled styles when disabled', async function () {
|
|
41
|
-
const el = await createFixture(TEMPLATE);
|
|
42
|
-
el.setAttribute('disabled', '');
|
|
43
|
-
await nextFrame();
|
|
44
|
-
const { backgroundColor } = getComputedStyle(el);
|
|
45
|
-
expect(backgroundColor).to.equal('rgb(240, 240, 240)');
|
|
46
|
-
// TODO: don't test shadowroots
|
|
47
|
-
const { color } = getComputedStyle(el.shadowRoot.querySelector('[part="title"]'));
|
|
48
|
-
expect(color).to.equal('rgb(106, 110, 115)');
|
|
49
|
-
});
|
|
50
|
-
});
|
|
51
|
-
//# sourceMappingURL=pf-tile.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pf-tile.spec.js","sourceRoot":"","sources":["pf-tile.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,8CAA8C,CAAC;AAC7E,OAAO,EAAE,MAAM,EAAE,MAAM,yCAAyC,CAAC;AAEjE,MAAM,QAAQ,GAAG,IAAI,CAAA;;;;;;CAMpB,CAAC;AAGF,QAAQ,CAAC,WAAW,EAAE;IACpB,EAAE,CAAC,gBAAgB,EAAE,KAAK;QACxB,MAAM,EAAE,GAAG,MAAM,aAAa,CAAU,QAAQ,CAAC,CAAC;QAClD,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC5C,MAAM,CAAC,EAAE,CAAC;aACP,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC;aAC1B,GAAG;aACH,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK;QACrD,MAAM,EAAE,GAAG,MAAM,aAAa,CAAU,QAAQ,CAAC,CAAC;QAClD,EAAE,CAAC,QAAQ,GAAG,IAAI,CAAC;QACnB,MAAM,SAAS,EAAE,CAAC;QAClB,MAAM,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QAClD,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC/B,MAAM,EAAE,eAAe,EAAE,GAAG,gBAAgB,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QAC3D,MAAM,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACrD,+BAA+B;QAC/B,MAAM,EAAE,KAAK,EAAE,GAAG,gBAAgB,CAAC,EAAE,CAAC,UAAW,CAAC,aAAa,CAAC,eAAe,CAAE,CAAC,CAAC;QACnF,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK;QACpD,MAAM,EAAE,GAAG,MAAM,aAAa,CAAU,QAAQ,CAAC,CAAC;QAClD,EAAE,CAAC,OAAO,GAAG,IAAI,CAAC;QAClB,MAAM,SAAS,EAAE,CAAC;QAClB,+BAA+B;QAC/B,MAAM,EAAE,aAAa,EAAE,GAAG,gBAAgB,CAAC,EAAE,CAAC,UAAW,CAAC,aAAa,CAAC,iBAAiB,CAAE,CAAC,CAAC;QAC7F,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK;QACnD,MAAM,EAAE,GAAG,MAAM,aAAa,CAAU,QAAQ,CAAC,CAAC;QAClD,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAChC,MAAM,SAAS,EAAE,CAAC;QAClB,MAAM,EAAE,eAAe,EAAE,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;QACjD,MAAM,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QACvD,+BAA+B;QAC/B,MAAM,EAAE,KAAK,EAAE,GAAG,gBAAgB,CAAC,EAAE,CAAC,UAAW,CAAC,aAAa,CAAC,gBAAgB,CAAE,CAAC,CAAC;QACpF,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { expect, html, nextFrame } from '@open-wc/testing';\nimport { createFixture } from '@patternfly/pfe-tools/test/create-fixture.js';\nimport { PfTile } from '@patternfly/elements/pf-tile/pf-tile.js';\n\nconst TEMPLATE = html`\n <pf-tile>\n <pf-icon slot=\"icon\" set=\"fas\" icon=\"bell\" size=\"md\" loading=\"idle\"></pf-icon>\n Default Content\n <div slot=\"body\">Subtext goes here</div>\n </pf-tile>\n`;\n\n\ndescribe('<pf-tile>', function() {\n it('should upgrade', async function() {\n const el = await createFixture <PfTile>(TEMPLATE);\n const klass = customElements.get('pf-tile');\n expect(el)\n .to.be.an.instanceOf(klass)\n .and\n .to.be.an.instanceOf(PfTile);\n });\n\n it('should have a selected styles when selected', async function() {\n const el = await createFixture <PfTile>(TEMPLATE);\n el.selected = true;\n await nextFrame();\n const { height } = getComputedStyle(el, ':after');\n expect(height).to.equal('3px');\n const { backgroundColor } = getComputedStyle(el, ':after');\n expect(backgroundColor).to.equal('rgb(0, 102, 204)');\n // TODO: don't test shadowroots\n const { color } = getComputedStyle(el.shadowRoot!.querySelector('[part=\"icon\"]')!);\n expect(color).to.be.equal('rgb(0, 102, 204)');\n });\n\n it('should be flex direction column if stacked', async function() {\n const el = await createFixture <PfTile>(TEMPLATE);\n el.stacked = 'md';\n await nextFrame();\n // TODO: don't test shadowroots\n const { flexDirection } = getComputedStyle(el.shadowRoot!.querySelector('[part=\"header\"]')!);\n expect(flexDirection).to.equal('column');\n });\n\n it('should have disabled styles when disabled', async function() {\n const el = await createFixture <PfTile>(TEMPLATE);\n el.setAttribute('disabled', '');\n await nextFrame();\n const { backgroundColor } = getComputedStyle(el);\n expect(backgroundColor).to.equal('rgb(240, 240, 240)');\n // TODO: don't test shadowroots\n const { color } = getComputedStyle(el.shadowRoot!.querySelector('[part=\"title\"]')!);\n expect(color).to.equal('rgb(106, 110, 115)');\n });\n});\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { test } from '@playwright/test';
|
|
2
|
-
import { PfeDemoPage } from '@patternfly/pfe-tools/test/playwright/PfeDemoPage.js';
|
|
3
|
-
const tagName = 'pf-timestamp';
|
|
4
|
-
test.describe(tagName, () => {
|
|
5
|
-
test('snapshot', async ({ page }) => {
|
|
6
|
-
const componentPage = new PfeDemoPage(page, tagName);
|
|
7
|
-
await componentPage.navigate();
|
|
8
|
-
await page.$eval('#realtime', el => el.closest('section')?.remove());
|
|
9
|
-
await componentPage.snapshot();
|
|
10
|
-
});
|
|
11
|
-
});
|
|
12
|
-
//# sourceMappingURL=pf-timestamp.e2e.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pf-timestamp.e2e.js","sourceRoot":"","sources":["pf-timestamp.e2e.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,sDAAsD,CAAC;AAEnF,MAAM,OAAO,GAAG,cAAc,CAAC;AAE/B,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;IAC1B,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QAClC,MAAM,aAAa,GAAG,IAAI,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,aAAa,CAAC,QAAQ,EAAE,CAAC;QAC/B,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QACrE,MAAM,aAAa,CAAC,QAAQ,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { test } from '@playwright/test';\nimport { PfeDemoPage } from '@patternfly/pfe-tools/test/playwright/PfeDemoPage.js';\n\nconst tagName = 'pf-timestamp';\n\ntest.describe(tagName, () => {\n test('snapshot', async ({ page }) => {\n const componentPage = new PfeDemoPage(page, tagName);\n await componentPage.navigate();\n await page.$eval('#realtime', el => el.closest('section')?.remove());\n await componentPage.snapshot();\n });\n});\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
import { expect, html } from '@open-wc/testing';
|
|
2
|
-
import { createFixture } from '@patternfly/pfe-tools/test/create-fixture.js';
|
|
3
|
-
import { PfTimestamp } from '@patternfly/elements/pf-timestamp/pf-timestamp.js';
|
|
4
|
-
describe('<pf-timestamp>', function () {
|
|
5
|
-
it('should upgrade', async function () {
|
|
6
|
-
const element = await createFixture(html `<pf-timestamp></pf-timestamp>`);
|
|
7
|
-
expect(element, 'the <pf-timestamp> should be an instance of PfTimestamp')
|
|
8
|
-
.to.be.an.instanceof(customElements.get('pf-timestamp'))
|
|
9
|
-
.and
|
|
10
|
-
.to.be.an.instanceof(PfTimestamp);
|
|
11
|
-
});
|
|
12
|
-
it('should show the current date by default with default formatting', async function () {
|
|
13
|
-
const element = await createFixture(html `
|
|
14
|
-
<pf-timestamp></pf-timestamp>
|
|
15
|
-
`);
|
|
16
|
-
const expected = new Date().toLocaleString();
|
|
17
|
-
expect(element.time).to.equal(expected);
|
|
18
|
-
});
|
|
19
|
-
it('should set the correct ISO date on the datetime attribute in the time element', async function () {
|
|
20
|
-
const date = new Date('Sat Jan 01 2022 00:00:00');
|
|
21
|
-
const dateString = date.toString();
|
|
22
|
-
const expected = date.toISOString();
|
|
23
|
-
const element = await createFixture(html `
|
|
24
|
-
<pf-timestamp date="${dateString}"></pf-timestamp>
|
|
25
|
-
`);
|
|
26
|
-
expect(element.isoString).to.equal(expected);
|
|
27
|
-
});
|
|
28
|
-
it('should show a passed in date with default formatting', async function () {
|
|
29
|
-
const dateString = 'Sat Jan 01 2022 00:00:00';
|
|
30
|
-
const element = await createFixture(html `
|
|
31
|
-
<pf-timestamp date="${dateString}"></pf-timestamp>
|
|
32
|
-
`);
|
|
33
|
-
expect(element.time).to.equal(new Date(dateString).toLocaleString());
|
|
34
|
-
});
|
|
35
|
-
it('should show custom formatting when date-format and time-format are passed in', async function () {
|
|
36
|
-
const dateString = 'Sat Jan 01 2022 00:00:00';
|
|
37
|
-
const expected = new Date(dateString).toLocaleString('en-US', { dateStyle: 'full', timeStyle: 'short' });
|
|
38
|
-
const element = await createFixture(html `
|
|
39
|
-
<pf-timestamp date="${dateString}" date-format="full" time-format="short"></pf-timestamp>
|
|
40
|
-
`);
|
|
41
|
-
expect(element.time).to.equal(expected);
|
|
42
|
-
});
|
|
43
|
-
it('should show only a date when date-format is passed in', async function () {
|
|
44
|
-
const dateString = 'Sat Jan 01 2022 00:00:00';
|
|
45
|
-
const expected = new Date(dateString).toLocaleString('en-US', { dateStyle: 'full' });
|
|
46
|
-
const element = await createFixture(html `
|
|
47
|
-
<pf-timestamp date="${dateString}" date-format="full"></pf-timestamp>
|
|
48
|
-
`);
|
|
49
|
-
expect(element.time).to.equal(expected);
|
|
50
|
-
});
|
|
51
|
-
it('should show only time when time-format is passed in', async function () {
|
|
52
|
-
const dateString = 'Sat Jan 01 2022 00:00:00';
|
|
53
|
-
const expected = new Date(dateString).toLocaleString('en-US', { timeStyle: 'short' });
|
|
54
|
-
const element = await createFixture(html `
|
|
55
|
-
<pf-timestamp date="${dateString}" time-format="short"></pf-timestamp>
|
|
56
|
-
`);
|
|
57
|
-
expect(element.time).to.equal(expected);
|
|
58
|
-
});
|
|
59
|
-
it('should show custom formatting when customFormat is passed in', async function () {
|
|
60
|
-
const dateString = 'Sat Jan 01 2022 00:00:00';
|
|
61
|
-
const options = {
|
|
62
|
-
year: '2-digit',
|
|
63
|
-
month: 'short',
|
|
64
|
-
weekday: 'short',
|
|
65
|
-
day: 'numeric',
|
|
66
|
-
hour: 'numeric'
|
|
67
|
-
};
|
|
68
|
-
const expected = new Date(dateString).toLocaleString('en-US', options);
|
|
69
|
-
const element = await createFixture(html `
|
|
70
|
-
<pf-timestamp date="Sat Jan 01 2022 00:00:00" .customFormat=${options}></pf-timestamp>
|
|
71
|
-
`);
|
|
72
|
-
expect(element.time).to.equal(expected);
|
|
73
|
-
});
|
|
74
|
-
it('should show a custom suffix when display-suffix is passed in', async function () {
|
|
75
|
-
const dateString = 'Sat Jan 01 2022 00:00:00';
|
|
76
|
-
const suffix = 'US Eastern';
|
|
77
|
-
const expected = `${new Date(dateString).toLocaleString('en-US')} ${suffix}`;
|
|
78
|
-
const element = await createFixture(html `
|
|
79
|
-
<pf-timestamp date="${dateString}" display-suffix="${suffix}"></pf-timestamp>
|
|
80
|
-
`);
|
|
81
|
-
expect(element.time).to.equal(expected);
|
|
82
|
-
});
|
|
83
|
-
it('should show a 12 hour time', async function () {
|
|
84
|
-
const dateString = 'Sat Jan 01 2022 13:00:00';
|
|
85
|
-
const expected = new Date(dateString).toLocaleString('en-US');
|
|
86
|
-
const element = await createFixture(html `
|
|
87
|
-
<pf-timestamp date="${dateString}"></pf-timestamp>
|
|
88
|
-
`);
|
|
89
|
-
expect(element.time).to.equal(expected);
|
|
90
|
-
});
|
|
91
|
-
it('should show a 24 hour time when hour-12 is set to false', async function () {
|
|
92
|
-
const dateString = 'Sat Jan 01 2022 13:00:00';
|
|
93
|
-
const expected = new Date(dateString).toLocaleString('en-US', { hour12: false });
|
|
94
|
-
const element = await createFixture(html `
|
|
95
|
-
<pf-timestamp date="${dateString}" hour-12="false"></pf-timestamp>
|
|
96
|
-
`);
|
|
97
|
-
expect(element.time).to.equal(expected);
|
|
98
|
-
});
|
|
99
|
-
it('should show with locale passed in', async function () {
|
|
100
|
-
const date = new Date(2022, 1, 1).toString();
|
|
101
|
-
const expected = new Date(date).toLocaleString('en-GB');
|
|
102
|
-
const element = await createFixture(html `
|
|
103
|
-
<pf-timestamp date="${date}" locale="en-GB"></pf-timestamp>
|
|
104
|
-
`);
|
|
105
|
-
expect(element.time).to.equal(expected);
|
|
106
|
-
});
|
|
107
|
-
it('should show a 12 hour time by default for US locale', async function () {
|
|
108
|
-
const date = new Date(2022, 1, 1, 13, 0).toString();
|
|
109
|
-
const expected = new Date(date).toLocaleString('en-US');
|
|
110
|
-
const element = await createFixture(html `
|
|
111
|
-
<pf-timestamp date="${date}" locale="en-US"></pf-timestamp>
|
|
112
|
-
`);
|
|
113
|
-
expect(element.time).to.equal(expected);
|
|
114
|
-
});
|
|
115
|
-
it('should show a 24 hour time for US locale when hour-12 is false', async function () {
|
|
116
|
-
const date = new Date(2022, 1, 1, 13, 0).toString();
|
|
117
|
-
const expected = new Date(date).toLocaleString('en-US', { hour12: false });
|
|
118
|
-
const element = await createFixture(html `
|
|
119
|
-
<pf-timestamp date="${date}" locale="en-US" hour-12="false"></pf-timestamp>
|
|
120
|
-
`);
|
|
121
|
-
expect(element.time).to.equal(expected);
|
|
122
|
-
});
|
|
123
|
-
it('should show a 12 hour time for a 24 hour locale when hour-12 is passed', async function () {
|
|
124
|
-
const date = new Date(2022, 1, 1, 13, 0).toString();
|
|
125
|
-
const expected = new Date(date).toLocaleString('en-GB', { hour12: true });
|
|
126
|
-
const element = await createFixture(html `
|
|
127
|
-
<pf-timestamp date="${date}" locale="en-GB" hour-12></pf-timestamp>
|
|
128
|
-
`);
|
|
129
|
-
expect(element.time).to.equal(expected);
|
|
130
|
-
});
|
|
131
|
-
it('should show relative time', async function () {
|
|
132
|
-
const date = new Date(2015, 7, 9, 14, 57, 0);
|
|
133
|
-
const element = await createFixture(html `
|
|
134
|
-
<pf-timestamp date="${date.toString()}" relative></pf-timestamp>
|
|
135
|
-
`);
|
|
136
|
-
expect(element.time).to.match(/\d+ years ago/);
|
|
137
|
-
});
|
|
138
|
-
});
|
|
139
|
-
//# sourceMappingURL=pf-timestamp.spec.js.map
|