@crowdstrike/glide-core 0.5.1 → 0.6.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/README.md +11 -1
- package/dist/accordion.js +1 -1
- package/dist/accordion.styles.js +5 -4
- package/dist/accordion.test.basics.js +109 -0
- package/dist/accordion.test.events.js +39 -0
- package/dist/button-group.button.js +1 -1
- package/dist/button-group.button.styles.js +6 -5
- package/dist/button-group.button.test.basics.js +169 -0
- package/dist/button-group.button.test.events.js +73 -0
- package/dist/button-group.js +1 -1
- package/dist/button-group.styles.js +3 -3
- package/dist/button-group.test.basics.js +268 -0
- package/dist/button-group.test.events.js +291 -0
- package/dist/button.d.ts +3 -2
- package/dist/button.js +1 -1
- package/dist/button.styles.js +5 -5
- package/dist/button.test.basics.js +202 -0
- package/dist/button.test.events.js +25 -0
- package/dist/button.test.form.js +49 -0
- package/dist/checkbox-group.js +1 -1
- package/dist/checkbox-group.styles.js +2 -2
- package/dist/checkbox-group.test.basics.js +119 -0
- package/dist/checkbox-group.test.events.js +110 -0
- package/dist/checkbox-group.test.focus.js +45 -0
- package/dist/checkbox-group.test.form.js +130 -0
- package/dist/checkbox-group.test.validity.js +75 -0
- package/dist/checkbox.js +1 -1
- package/dist/checkbox.styles.js +7 -4
- package/dist/checkbox.test.basics.js +89 -0
- package/dist/checkbox.test.events.js +87 -0
- package/dist/checkbox.test.focus.js +38 -0
- package/dist/checkbox.test.form.js +115 -0
- package/dist/checkbox.test.states.js +62 -0
- package/dist/checkbox.test.validity.js +51 -0
- package/dist/drawer.d.ts +2 -2
- package/dist/drawer.js +1 -15
- package/dist/drawer.styles.js +14 -4
- package/dist/drawer.test.accessibility.js +22 -0
- package/dist/drawer.test.basics.js +43 -0
- package/dist/drawer.test.closing.js +37 -0
- package/dist/drawer.test.events.js +52 -0
- package/dist/drawer.test.floating-components.d.ts +1 -0
- package/dist/drawer.test.floating-components.js +51 -0
- package/dist/drawer.test.methods.js +34 -0
- package/dist/dropdown.d.ts +4 -2
- package/dist/dropdown.js +1 -1
- package/dist/dropdown.option.d.ts +0 -2
- package/dist/dropdown.option.js +1 -1
- package/dist/dropdown.option.styles.js +2 -2
- package/dist/dropdown.option.test.basics.js +59 -0
- package/dist/dropdown.option.test.basics.multiple.js +26 -0
- package/dist/dropdown.option.test.basics.single.js +20 -0
- package/dist/dropdown.option.test.events.js +27 -0
- package/dist/dropdown.option.test.focus.js +11 -0
- package/dist/dropdown.option.test.interactions.multiple.js +82 -0
- package/dist/dropdown.option.test.interactions.single.js +22 -0
- package/dist/dropdown.styles.js +26 -6
- package/dist/dropdown.test.basics.filterable.js +84 -0
- package/dist/dropdown.test.basics.js +233 -0
- package/dist/dropdown.test.basics.multiple.js +270 -0
- package/dist/dropdown.test.basics.single.js +79 -0
- package/dist/dropdown.test.events.js +268 -0
- package/dist/dropdown.test.events.multiple.js +130 -0
- package/dist/dropdown.test.focus.d.ts +1 -0
- package/dist/dropdown.test.focus.filterable.js +154 -0
- package/dist/dropdown.test.focus.js +28 -0
- package/dist/dropdown.test.focus.multiple.js +181 -0
- package/dist/dropdown.test.focus.single.js +53 -0
- package/dist/dropdown.test.form.js +140 -0
- package/dist/dropdown.test.form.multiple.js +149 -0
- package/dist/dropdown.test.form.single.js +128 -0
- package/dist/dropdown.test.interactions.filterable.js +449 -0
- package/dist/dropdown.test.interactions.js +446 -0
- package/dist/dropdown.test.interactions.multiple.js +908 -0
- package/dist/dropdown.test.interactions.single.js +466 -0
- package/dist/dropdown.test.validity.js +46 -0
- package/dist/icon-button.d.ts +3 -2
- package/dist/icon-button.js +1 -1
- package/dist/icon-button.styles.js +12 -12
- package/dist/icon-button.test.basics.js +110 -0
- package/dist/icons/checked.js +1 -1
- package/dist/icons/magnifying-glass.js +1 -1
- package/dist/input.js +1 -1
- package/dist/input.styles.js +4 -3
- package/dist/input.test.basics.js +169 -0
- package/dist/input.test.events.js +97 -0
- package/dist/input.test.focus.js +54 -0
- package/dist/input.test.form.js +56 -0
- package/dist/input.test.validity.js +50 -0
- package/dist/label.js +1 -1
- package/dist/label.styles.js +13 -15
- package/dist/label.test.basics.js +129 -0
- package/dist/library/expect-argument-error.js +1 -1
- package/dist/library/localize.d.ts +17 -0
- package/dist/library/localize.js +1 -0
- package/dist/library/ow.js +1 -1
- package/dist/library/ow.test.js +55 -0
- package/dist/library/set-containing-block.d.ts +15 -0
- package/dist/library/set-containing-block.js +1 -0
- package/dist/menu.button.d.ts +1 -2
- package/dist/menu.button.js +1 -1
- package/dist/menu.button.styles.js +3 -3
- package/dist/menu.button.test.basics.js +42 -0
- package/dist/menu.d.ts +7 -2
- package/dist/menu.js +1 -1
- package/dist/menu.link.d.ts +1 -2
- package/dist/menu.link.js +1 -1
- package/dist/menu.link.styles.js +3 -3
- package/dist/menu.link.test.basics.js +46 -0
- package/dist/menu.options.d.ts +22 -0
- package/dist/menu.options.js +1 -0
- package/dist/menu.options.styles.d.ts +2 -0
- package/dist/menu.options.styles.js +33 -0
- package/dist/menu.options.test.basics.d.ts +2 -0
- package/dist/menu.options.test.basics.js +43 -0
- package/dist/menu.stories.d.ts +1 -0
- package/dist/menu.styles.js +7 -31
- package/dist/menu.test.basics.d.ts +1 -0
- package/dist/menu.test.basics.js +183 -0
- package/dist/menu.test.focus.d.ts +0 -1
- package/dist/menu.test.focus.js +84 -0
- package/dist/menu.test.interactions.d.ts +1 -1
- package/dist/menu.test.interactions.js +664 -0
- package/dist/modal.icon-button.js +1 -1
- package/dist/modal.icon-button.styles.js +2 -2
- package/dist/modal.icon-button.test.basics.js +45 -0
- package/dist/modal.js +1 -15
- package/dist/modal.styles.js +4 -7
- package/dist/modal.tertiary-icon.d.ts +1 -0
- package/dist/modal.tertiary-icon.js +1 -1
- package/dist/modal.tertiary-icon.test.basics.js +59 -0
- package/dist/modal.test.accessibility.js +48 -0
- package/dist/modal.test.basics.js +203 -0
- package/dist/modal.test.close.js +38 -0
- package/dist/modal.test.events.js +110 -0
- package/dist/modal.test.floating-components.d.ts +1 -0
- package/dist/modal.test.floating-components.js +62 -0
- package/dist/modal.test.lock-scroll.js +76 -0
- package/dist/modal.test.methods.js +23 -0
- package/dist/modal.test.scrollbars.js +19 -0
- package/dist/radio-group.js +1 -1
- package/dist/radio-group.styles.js +20 -24
- package/dist/radio-group.test.basics.js +323 -0
- package/dist/radio-group.test.events.js +277 -0
- package/dist/radio-group.test.focus.js +75 -0
- package/dist/radio-group.test.form.js +104 -0
- package/dist/radio-group.test.validity.js +228 -0
- package/dist/radio.js +1 -1
- package/dist/radio.styles.js +14 -31
- package/dist/split-button.d.ts +27 -0
- package/dist/split-button.js +1 -0
- package/dist/split-button.stories.d.ts +17 -0
- package/dist/split-button.styles.d.ts +2 -0
- package/dist/split-button.styles.js +102 -0
- package/dist/split-button.test.basics.d.ts +1 -0
- package/dist/split-button.test.basics.js +99 -0
- package/dist/split-container.d.ts +31 -0
- package/dist/split-container.js +1 -0
- package/dist/split-container.styles.d.ts +2 -0
- package/dist/split-container.styles.js +134 -0
- package/dist/split-container.test.basics.d.ts +3 -0
- package/dist/split-container.test.basics.js +440 -0
- package/dist/split-container.test.interactions.d.ts +1 -0
- package/dist/split-container.test.interactions.js +20 -0
- package/dist/split-link.d.ts +25 -0
- package/dist/split-link.js +1 -0
- package/dist/split-link.test.basics.d.ts +1 -0
- package/dist/split-link.test.basics.js +92 -0
- package/dist/split-link.test.interactions.d.ts +1 -0
- package/dist/split-link.test.interactions.js +19 -0
- package/dist/status-indicator.js +1 -1
- package/dist/status-indicator.styles.js +2 -2
- package/dist/status-indicator.test.basics.js +102 -0
- package/dist/styles/focus-outline.js +1 -4
- package/dist/styles/variables.css +1 -1
- package/dist/styles/visually-hidden.js +1 -11
- package/dist/tab.group.js +1 -1
- package/dist/tab.group.styles.js +2 -2
- package/dist/tab.group.test.basics.js +185 -0
- package/dist/tab.js +1 -1
- package/dist/tab.panel.js +1 -1
- package/dist/tab.panel.styles.js +3 -3
- package/dist/tab.styles.js +80 -55
- package/dist/tab.test.basics.js +71 -0
- package/dist/tag.js +1 -1
- package/dist/tag.styles.js +4 -3
- package/dist/tag.test.basics.js +118 -0
- package/dist/tag.test.events.js +16 -0
- package/dist/tag.test.focus.js +11 -0
- package/dist/tag.test.translations.d.ts +1 -0
- package/dist/tag.test.translations.js +25 -0
- package/dist/textarea.js +2 -2
- package/dist/textarea.styles.js +5 -4
- package/dist/textarea.test.basics.js +140 -0
- package/dist/textarea.test.events.js +204 -0
- package/dist/textarea.test.form.js +70 -0
- package/dist/textarea.test.validity.js +83 -0
- package/dist/toasts.js +1 -1
- package/dist/toasts.styles.js +2 -2
- package/dist/toasts.test.basics.js +94 -0
- package/dist/toasts.toast.js +1 -1
- package/dist/toasts.toast.styles.js +5 -2
- package/dist/toasts.toast.test.basics.js +139 -0
- package/dist/toggle.js +1 -1
- package/dist/toggle.styles.js +3 -3
- package/dist/toggle.test.basics.js +68 -0
- package/dist/toggle.test.events.js +29 -0
- package/dist/toggle.test.focus.js +9 -0
- package/dist/toggle.test.states.js +43 -0
- package/dist/tooltip.d.ts +2 -0
- package/dist/tooltip.js +1 -1
- package/dist/tooltip.styles.js +5 -3
- package/dist/tooltip.test.basics.js +64 -0
- package/dist/tooltip.test.interactions.js +78 -0
- package/dist/translations/en.d.ts +3 -0
- package/dist/translations/en.js +1 -0
- package/dist/translations/fr.d.ts +3 -0
- package/dist/translations/fr.js +1 -0
- package/dist/translations/ja.d.ts +3 -0
- package/dist/translations/ja.js +1 -0
- package/dist/tree.d.ts +1 -0
- package/dist/tree.item.d.ts +3 -1
- package/dist/tree.item.icon-button.js +1 -1
- package/dist/tree.item.icon-button.styles.js +2 -2
- package/dist/tree.item.icon-button.test.basics.js +13 -0
- package/dist/tree.item.js +1 -1
- package/dist/tree.item.menu.d.ts +2 -0
- package/dist/tree.item.menu.js +1 -1
- package/dist/tree.item.menu.styles.js +2 -2
- package/dist/tree.item.menu.test.basics.js +33 -0
- package/dist/tree.item.styles.js +23 -8
- package/dist/tree.item.test.basics.js +102 -0
- package/dist/tree.js +1 -1
- package/dist/tree.stories.d.ts +1 -0
- package/dist/tree.styles.js +2 -2
- package/dist/tree.test.aria.js +86 -0
- package/dist/tree.test.basics.js +123 -0
- package/dist/tree.test.events.js +19 -0
- package/dist/tree.test.focus.js +261 -0
- package/package.json +25 -18
- /package/dist/{dropdown.option.test.focus.multiple.d.ts → dropdown.option.test.focus.d.ts} +0 -0
- /package/dist/{dropdown.option.test.focus.single.d.ts → dropdown.test.events.multiple.d.ts} +0 -0
@@ -0,0 +1,261 @@
|
|
1
|
+
import './tree.js';
|
2
|
+
import { assert, expect, fixture, html } from '@open-wc/testing';
|
3
|
+
import { sendKeys } from '@web/test-runner-commands';
|
4
|
+
import GlideCoreTree from './tree.js';
|
5
|
+
import GlideCoreTreeItem from './tree.item.js';
|
6
|
+
import GlideCoreTreeItemIconButton from './tree.item.icon-button.js';
|
7
|
+
import GlideCoreTreeItemMenu from './tree.item.menu.js';
|
8
|
+
GlideCoreTree.shadowRootOptions.mode = 'open';
|
9
|
+
it('focuses the first tree item when tree is focused, if there are no selected items', async () => {
|
10
|
+
const tree = await fixture(html `
|
11
|
+
<glide-core-tree>
|
12
|
+
<glide-core-tree-item label="Child Item 1">
|
13
|
+
<glide-core-tree-item label="Grandchild Item 1"></glide-core-tree-item>
|
14
|
+
</glide-core-tree-item>
|
15
|
+
<glide-core-tree-item label="Child Item 2"></glide-core-tree-item>
|
16
|
+
</glide-core-tree>
|
17
|
+
`);
|
18
|
+
tree.dispatchEvent(new Event('focusin'));
|
19
|
+
const childItems = tree.slotElements;
|
20
|
+
assert(document.activeElement instanceof GlideCoreTreeItem);
|
21
|
+
expect(document.activeElement?.label).to.equal(childItems[0].label);
|
22
|
+
});
|
23
|
+
it('focuses the selected tree item on `focus()`, if there is one', async () => {
|
24
|
+
const tree = await fixture(html `
|
25
|
+
<glide-core-tree>
|
26
|
+
<glide-core-tree-item label="Child Item 1"></glide-core-tree-item>
|
27
|
+
<glide-core-tree-item label="Child Item 2"></glide-core-tree-item>
|
28
|
+
</glide-core-tree>
|
29
|
+
`);
|
30
|
+
const childItems = tree.slotElements;
|
31
|
+
tree.selectItem(childItems[1]);
|
32
|
+
tree.dispatchEvent(new Event('focusin'));
|
33
|
+
await tree.updateComplete;
|
34
|
+
assert(document.activeElement instanceof GlideCoreTreeItem);
|
35
|
+
expect(document.activeElement?.label).to.equal(childItems[1].label);
|
36
|
+
});
|
37
|
+
it('expands a tree item if right arrow is pressed', async () => {
|
38
|
+
const tree = await fixture(html `
|
39
|
+
<glide-core-tree>
|
40
|
+
<glide-core-tree-item label="Child Item 1">
|
41
|
+
<glide-core-tree-item label="Grandchild Item 1"></glide-core-tree-item>
|
42
|
+
</glide-core-tree-item>
|
43
|
+
<glide-core-tree-item label="Child Item 2"></glide-core-tree-item>
|
44
|
+
</glide-core-tree>
|
45
|
+
`);
|
46
|
+
const childItems = tree.slotElements;
|
47
|
+
tree.dispatchEvent(new Event('focusin'));
|
48
|
+
await sendKeys({ press: 'ArrowRight' });
|
49
|
+
expect(childItems[0].expanded).to.equal(true);
|
50
|
+
assert(document.activeElement instanceof GlideCoreTreeItem);
|
51
|
+
expect(document.activeElement?.label).to.equal(childItems[0].label, 'focus does not move');
|
52
|
+
});
|
53
|
+
it(`focuses on an expanded tree item's child if right arrow is pressed`, async () => {
|
54
|
+
const tree = await fixture(html `
|
55
|
+
<glide-core-tree>
|
56
|
+
<glide-core-tree-item label="Child Item 1" expanded>
|
57
|
+
<glide-core-tree-item label="Grandchild Item 1"></glide-core-tree-item>
|
58
|
+
</glide-core-tree-item>
|
59
|
+
<glide-core-tree-item label="Child Item 2"></glide-core-tree-item>
|
60
|
+
</glide-core-tree>
|
61
|
+
`);
|
62
|
+
const childItems = tree.slotElements;
|
63
|
+
tree.dispatchEvent(new Event('focusin'));
|
64
|
+
await sendKeys({ press: 'ArrowRight' });
|
65
|
+
assert(document.activeElement instanceof GlideCoreTreeItem);
|
66
|
+
expect(document.activeElement?.label).to.equal(childItems[0].slotElements[0].label);
|
67
|
+
});
|
68
|
+
it('collapses an expanded tree item if left arrow is pressed', async () => {
|
69
|
+
const tree = await fixture(html `
|
70
|
+
<glide-core-tree>
|
71
|
+
<glide-core-tree-item label="Child Item 1" expanded>
|
72
|
+
<glide-core-tree-item label="Grandchild Item 1"></glide-core-tree-item>
|
73
|
+
</glide-core-tree-item>
|
74
|
+
<glide-core-tree-item label="Child Item 2"></glide-core-tree-item>
|
75
|
+
</glide-core-tree>
|
76
|
+
`);
|
77
|
+
const childItems = tree.slotElements;
|
78
|
+
tree.dispatchEvent(new Event('focusin'));
|
79
|
+
await sendKeys({ press: 'ArrowLeft' });
|
80
|
+
expect(childItems[0].expanded).to.equal(false);
|
81
|
+
assert(document.activeElement instanceof GlideCoreTreeItem);
|
82
|
+
expect(document.activeElement?.label).to.equal(childItems[0].label, 'focus does not move');
|
83
|
+
});
|
84
|
+
it(`focuses on a collapsed tree item's parent if left arrow is pressed`, async () => {
|
85
|
+
const tree = await fixture(html `
|
86
|
+
<glide-core-tree>
|
87
|
+
<glide-core-tree-item label="Child Item 1">
|
88
|
+
<glide-core-tree-item label="Grandchild Item 1"></glide-core-tree-item>
|
89
|
+
</glide-core-tree-item>
|
90
|
+
<glide-core-tree-item label="Child Item 2"></glide-core-tree-item>
|
91
|
+
</glide-core-tree>
|
92
|
+
`);
|
93
|
+
const childItems = tree.slotElements;
|
94
|
+
const grandchildItems = childItems[0].slotElements;
|
95
|
+
grandchildItems[0].focus();
|
96
|
+
await sendKeys({ press: 'ArrowLeft' });
|
97
|
+
assert(document.activeElement instanceof GlideCoreTreeItem);
|
98
|
+
expect(document.activeElement?.label).to.equal(childItems[0].label);
|
99
|
+
});
|
100
|
+
it('moves down the non-expanded tree items with down arrow', async () => {
|
101
|
+
const tree = await fixture(html `
|
102
|
+
<glide-core-tree>
|
103
|
+
<glide-core-tree-item label="Child Item 1" expanded>
|
104
|
+
<glide-core-tree-item label="Grandchild Item 1"></glide-core-tree-item>
|
105
|
+
</glide-core-tree-item>
|
106
|
+
<glide-core-tree-item label="Child Item 2">
|
107
|
+
<glide-core-tree-item label="Grandchild Item 2"></glide-core-tree-item>
|
108
|
+
</glide-core-tree-item>
|
109
|
+
<glide-core-tree-item label="Child Item 3"></glide-core-tree-item>
|
110
|
+
</glide-core-tree>
|
111
|
+
`);
|
112
|
+
const childItems = tree.slotElements;
|
113
|
+
tree.dispatchEvent(new Event('focusin'));
|
114
|
+
await sendKeys({ press: 'ArrowDown' });
|
115
|
+
assert(document.activeElement instanceof GlideCoreTreeItem);
|
116
|
+
expect(document.activeElement?.label).to.equal(childItems[0].slotElements[0].label, 'moves to child item if expanded');
|
117
|
+
await sendKeys({ press: 'ArrowDown' });
|
118
|
+
expect(document.activeElement?.label).to.equal(childItems[1].label, 'moves from last child for next parent');
|
119
|
+
await sendKeys({ press: 'ArrowDown' });
|
120
|
+
expect(document.activeElement?.label).to.equal(childItems[2].label, 'Does not navigate to collapsed tree items');
|
121
|
+
await sendKeys({ press: 'ArrowDown' });
|
122
|
+
expect(document.activeElement?.label).to.equal(childItems[2].label, 'Does not move if at the last item');
|
123
|
+
});
|
124
|
+
it('moves up the non-expanded tree items with up arrow', async () => {
|
125
|
+
const tree = await fixture(html `
|
126
|
+
<glide-core-tree>
|
127
|
+
<glide-core-tree-item label="Child Item 1">
|
128
|
+
<glide-core-tree-item label="Grandchild Item 1"></glide-core-tree-item>
|
129
|
+
</glide-core-tree-item>
|
130
|
+
<glide-core-tree-item label="Child Item 2" expanded>
|
131
|
+
<glide-core-tree-item label="Grandchild Item 2"></glide-core-tree-item>
|
132
|
+
</glide-core-tree-item>
|
133
|
+
</glide-core-tree>
|
134
|
+
`);
|
135
|
+
const childItems = tree.slotElements;
|
136
|
+
// Start at the last item
|
137
|
+
childItems[1].slotElements[0].focus();
|
138
|
+
await sendKeys({ press: 'ArrowUp' });
|
139
|
+
assert(document.activeElement instanceof GlideCoreTreeItem);
|
140
|
+
expect(document.activeElement?.label).to.equal(childItems[1].label);
|
141
|
+
await sendKeys({ press: 'ArrowUp' });
|
142
|
+
expect(document.activeElement?.label).to.equal(childItems[0].label, 'Does not navigate to collapsed tree items');
|
143
|
+
await sendKeys({ press: 'ArrowUp' });
|
144
|
+
expect(document.activeElement?.label).to.equal(childItems[0].label, 'Does not move if at the first item');
|
145
|
+
});
|
146
|
+
it('moves to the first item when Home is pressed', async () => {
|
147
|
+
const tree = await fixture(html `
|
148
|
+
<glide-core-tree>
|
149
|
+
<glide-core-tree-item label="Child Item 1">
|
150
|
+
<glide-core-tree-item label="Grandchild Item 1"></glide-core-tree-item>
|
151
|
+
</glide-core-tree-item>
|
152
|
+
<glide-core-tree-item label="Child Item 2" expanded>
|
153
|
+
<glide-core-tree-item label="Grandchild Item 2"></glide-core-tree-item>
|
154
|
+
</glide-core-tree-item>
|
155
|
+
</glide-core-tree>
|
156
|
+
`);
|
157
|
+
const childItems = tree.slotElements;
|
158
|
+
// Start at the last item
|
159
|
+
childItems[1].slotElements[0].focus();
|
160
|
+
await sendKeys({ press: 'Home' });
|
161
|
+
assert(document.activeElement instanceof GlideCoreTreeItem);
|
162
|
+
expect(document.activeElement?.label).to.equal(childItems[0].label);
|
163
|
+
});
|
164
|
+
it('moves to the last item when End is pressed', async () => {
|
165
|
+
const tree = await fixture(html `
|
166
|
+
<glide-core-tree>
|
167
|
+
<glide-core-tree-item label="Child Item 1">
|
168
|
+
<glide-core-tree-item label="Grandchild Item 1"></glide-core-tree-item>
|
169
|
+
</glide-core-tree-item>
|
170
|
+
<glide-core-tree-item label="Child Item 2" expanded>
|
171
|
+
<glide-core-tree-item label="Grandchild Item 2"></glide-core-tree-item>
|
172
|
+
</glide-core-tree-item>
|
173
|
+
</glide-core-tree>
|
174
|
+
`);
|
175
|
+
const childItems = tree.slotElements;
|
176
|
+
// Start at the first item
|
177
|
+
childItems[0].focus();
|
178
|
+
await sendKeys({ press: 'End' });
|
179
|
+
assert(document.activeElement instanceof GlideCoreTreeItem);
|
180
|
+
expect(document.activeElement?.label).to.equal(childItems[1].slotElements[0].label);
|
181
|
+
});
|
182
|
+
it('selects or expands/collapses node when Enter is pressed', async () => {
|
183
|
+
const tree = await fixture(html `
|
184
|
+
<glide-core-tree>
|
185
|
+
<glide-core-tree-item label="Child Item 1"></glide-core-tree-item>
|
186
|
+
<glide-core-tree-item label="Child Item 2">
|
187
|
+
<glide-core-tree-item label="Grandchild Item 1"></glide-core-tree-item>
|
188
|
+
</glide-core-tree-item>
|
189
|
+
</glide-core-tree>
|
190
|
+
`);
|
191
|
+
const childItems = tree.slotElements;
|
192
|
+
const grandchildItems = childItems?.[1].slotElements;
|
193
|
+
// For an item that doesn't have children, selects it
|
194
|
+
childItems[0].focus();
|
195
|
+
await sendKeys({ press: 'Enter' });
|
196
|
+
expect(childItems[0].selected).to.equal(true);
|
197
|
+
expect(childItems[1].selected).to.equal(false);
|
198
|
+
expect(grandchildItems[0].selected).to.equal(false);
|
199
|
+
expect(childItems[1].expanded).to.equal(false);
|
200
|
+
// For an item that has children, expands it
|
201
|
+
childItems[1].focus();
|
202
|
+
await sendKeys({ press: 'Enter' });
|
203
|
+
expect(childItems[1].expanded).to.equal(true);
|
204
|
+
// Can select a grandchild item
|
205
|
+
grandchildItems[0].focus();
|
206
|
+
await sendKeys({ press: 'Enter' });
|
207
|
+
expect(grandchildItems[0].selected).to.equal(true);
|
208
|
+
});
|
209
|
+
it('does nothing if some other key is pressed', async () => {
|
210
|
+
const tree = await fixture(html `
|
211
|
+
<glide-core-tree>
|
212
|
+
<glide-core-tree-item label="Child Item 1">
|
213
|
+
<glide-core-tree-item label="Grandchild Item 1"></glide-core-tree-item>
|
214
|
+
</glide-core-tree-item>
|
215
|
+
<glide-core-tree-item label="Child Item 2" expanded>
|
216
|
+
<glide-core-tree-item label="Grandchild Item 2"></glide-core-tree-item>
|
217
|
+
</glide-core-tree-item>
|
218
|
+
</glide-core-tree>
|
219
|
+
`);
|
220
|
+
const childItems = tree.slotElements;
|
221
|
+
// Start at the first item
|
222
|
+
childItems[0].focus();
|
223
|
+
await sendKeys({ press: 'a' });
|
224
|
+
assert(document.activeElement instanceof GlideCoreTreeItem);
|
225
|
+
expect(document.activeElement?.label).to.equal(childItems[0].label);
|
226
|
+
});
|
227
|
+
it('can use the keyboard to navigate to a tree item icon button', async () => {
|
228
|
+
const tree = await fixture(html `
|
229
|
+
<glide-core-tree>
|
230
|
+
<glide-core-tree-item label="Child Item 1">
|
231
|
+
<glide-core-tree-item-icon-button slot="suffix">
|
232
|
+
<svg viewBox="0 0 24 24">
|
233
|
+
<path d="M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z" />
|
234
|
+
</svg>
|
235
|
+
</glide-core-tree-item-icon-button>
|
236
|
+
</glide-core-tree-item>
|
237
|
+
</glide-core-tree>
|
238
|
+
`);
|
239
|
+
tree.dispatchEvent(new Event('focusin'));
|
240
|
+
const childItems = tree.slotElements;
|
241
|
+
childItems[0].focus();
|
242
|
+
await sendKeys({ press: 'Tab' });
|
243
|
+
assert(document.activeElement instanceof GlideCoreTreeItemIconButton);
|
244
|
+
});
|
245
|
+
it('can use the keyboard to navigate to a tree item menu', async () => {
|
246
|
+
const tree = await fixture(html `
|
247
|
+
<glide-core-tree>
|
248
|
+
<glide-core-tree-item label="Child Item 1">
|
249
|
+
<glide-core-tree-item-menu slot="menu">
|
250
|
+
<glide-core-menu-link label="Edit" url="/edit">
|
251
|
+
</glide-core-menu-link>
|
252
|
+
</glide-core-tree-item-menu>
|
253
|
+
</glide-core-tree-item>
|
254
|
+
</glide-core-tree>
|
255
|
+
`);
|
256
|
+
tree.dispatchEvent(new Event('focusin'));
|
257
|
+
const childItems = tree.slotElements;
|
258
|
+
childItems[0].focus();
|
259
|
+
await sendKeys({ press: 'Tab' });
|
260
|
+
assert(document.activeElement instanceof GlideCoreTreeItemMenu);
|
261
|
+
});
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@crowdstrike/glide-core",
|
3
|
-
"version": "0.
|
3
|
+
"version": "0.6.0",
|
4
4
|
"description": "CrowdStrike's Glide Design System components package for providing web components",
|
5
5
|
"author": "CrowdStrike UX Team",
|
6
6
|
"license": "Apache-2.0",
|
@@ -29,6 +29,7 @@
|
|
29
29
|
"./styles/*": null,
|
30
30
|
"./label.js": null,
|
31
31
|
"./toasts.toast.js": null,
|
32
|
+
"./library/set-containing-block.js": "./dist/set-containing-block.js",
|
32
33
|
"./styles/fonts.css": "./dist/styles/fonts.css",
|
33
34
|
"./styles/variables.css": "./dist/styles/variables.css"
|
34
35
|
},
|
@@ -37,7 +38,9 @@
|
|
37
38
|
"pnpm": ">= 8"
|
38
39
|
},
|
39
40
|
"dependencies": {
|
40
|
-
"@floating-ui/dom": "^1.
|
41
|
+
"@floating-ui/dom": "^1.6.8",
|
42
|
+
"@shoelace-style/localize": "^3.1.2",
|
43
|
+
"composed-offset-position": "^0.0.6",
|
41
44
|
"ow": "^1.1.1"
|
42
45
|
},
|
43
46
|
"devDependencies": {
|
@@ -45,15 +48,15 @@
|
|
45
48
|
"@eslint/js": "^8.56.0",
|
46
49
|
"@open-wc/testing": "^3.2.2",
|
47
50
|
"@rollup/plugin-commonjs": "^25.0.7",
|
48
|
-
"@storybook/addon-essentials": "^8.
|
49
|
-
"@storybook/addon-links": "^8.
|
50
|
-
"@storybook/blocks": "^8.
|
51
|
-
"@storybook/core-events": "^8.
|
52
|
-
"@storybook/manager-api": "^8.
|
53
|
-
"@storybook/preview-api": "^8.
|
54
|
-
"@storybook/theming": "^8.
|
55
|
-
"@storybook/web-components": "^8.
|
56
|
-
"@storybook/web-components-vite": "^8.
|
51
|
+
"@storybook/addon-essentials": "^8.2.1",
|
52
|
+
"@storybook/addon-links": "^8.2.1",
|
53
|
+
"@storybook/blocks": "^8.2.1",
|
54
|
+
"@storybook/core-events": "^8.2.1",
|
55
|
+
"@storybook/manager-api": "^8.2.1",
|
56
|
+
"@storybook/preview-api": "^8.2.1",
|
57
|
+
"@storybook/theming": "^8.2.1",
|
58
|
+
"@storybook/web-components": "^8.2.1",
|
59
|
+
"@storybook/web-components-vite": "^8.2.1",
|
57
60
|
"@stylistic/eslint-plugin": "^1.7.0",
|
58
61
|
"@types/mocha": "^10.0.6",
|
59
62
|
"@types/sinon": "^17.0.3",
|
@@ -68,6 +71,7 @@
|
|
68
71
|
"eslint-config-prettier": "^9.1.0",
|
69
72
|
"eslint-plugin-lit": "^1.11.0",
|
70
73
|
"eslint-plugin-lit-a11y": "^4.1.2",
|
74
|
+
"eslint-plugin-no-only-tests": "^3.1.0",
|
71
75
|
"eslint-plugin-sort-class-members": "^1.20.0",
|
72
76
|
"eslint-plugin-sort-imports-es6-autofix": "^0.6.0",
|
73
77
|
"eslint-plugin-unicorn": "^50.0.1",
|
@@ -83,14 +87,16 @@
|
|
83
87
|
"postcss": "^8.4.38",
|
84
88
|
"postcss-lit": "^1.1.1",
|
85
89
|
"prettier": "3.1.0",
|
90
|
+
"rimraf": "^5.0.7",
|
86
91
|
"sinon": "^17.0.1",
|
87
|
-
"storybook": "^8.
|
92
|
+
"storybook": "^8.2.1",
|
88
93
|
"stylelint": "^16.3.1",
|
89
94
|
"stylelint-config-standard": "^36.0.0",
|
90
95
|
"stylelint-order": "^6.0.4",
|
91
96
|
"stylelint-prettier": "^5.0.0",
|
92
97
|
"stylelint-use-logical": "^2.1.2",
|
93
98
|
"stylelint-use-nesting": "^5.1.1",
|
99
|
+
"terser": "^5.31.1",
|
94
100
|
"ts-lit-plugin": "^2.0.2",
|
95
101
|
"typescript": "^5.3.3",
|
96
102
|
"typescript-eslint": "^7.8.0",
|
@@ -101,13 +107,13 @@
|
|
101
107
|
},
|
102
108
|
"scripts": {
|
103
109
|
"start": "per-env",
|
104
|
-
"start:development": "storybook dev --config-dir .storybook --disable-telemetry --port 6006",
|
105
|
-
"start:
|
106
|
-
"start:production
|
107
|
-
"start:production:components
|
110
|
+
"start:development": "storybook dev --config-dir .storybook --disable-telemetry --port 6006 --ci",
|
111
|
+
"start:development:comment": "Upon running this script, a new tab will **not** automatically open due to the `--ci` flag. This may be a bit unexpected as it is not the default behavior. One must manually navigate to the Storybook URL provided in the terminal.",
|
112
|
+
"start:production": "rimraf ./dist && npm-run-all --parallel start:production:components start:production:storybook start:production:stylesheets --aggregate-output --print-label",
|
113
|
+
"start:production:components": "tsc --outDir ./dist && node ./terser.js",
|
108
114
|
"start:production:figma": "pnpm dt export-variables && pnpm dt build-tokens && pnpm dt build-styles",
|
109
115
|
"start:production:storybook": "storybook build --config-dir .storybook --disable-telemetry --output-dir ./dist/storybook",
|
110
|
-
"start:production:stylesheets": "node ./esbuild.
|
116
|
+
"start:production:stylesheets": "node ./esbuild.js",
|
111
117
|
"format": "per-env",
|
112
118
|
"format:development": "prettier . --write && stylelint '**/*.styles.ts' --custom-syntax postcss-lit --fix",
|
113
119
|
"format:production": "prettier . --check && stylelint '**/*.styles.ts' --custom-syntax postcss-lit --no-color",
|
@@ -124,6 +130,7 @@
|
|
124
130
|
"test:development:serve": "npx http-server dist/coverage/lcov-report --silent",
|
125
131
|
"test:development:web-test-runner": "web-test-runner --watch",
|
126
132
|
"test:production": "npm-run-all --parallel test:production:* start:production:stylesheets --aggregate-output --print-label",
|
127
|
-
"test:production:web-test-runner": "web-test-runner"
|
133
|
+
"test:production:web-test-runner": "web-test-runner",
|
134
|
+
"postinstall": "pnpm dlx playwright install --with-deps"
|
128
135
|
}
|
129
136
|
}
|
File without changes
|
File without changes
|