@crowdstrike/glide-core 0.6.5 → 0.8.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 +44 -5
- package/dist/accordion.test.basics.js +1 -0
- package/dist/accordion.test.events.js +1 -0
- package/dist/button-group.button.test.basics.js +1 -0
- package/dist/button-group.button.test.events.js +1 -0
- package/dist/button-group.test.basics.js +1 -0
- package/dist/button-group.test.events.js +1 -0
- package/dist/button.test.basics.js +1 -0
- package/dist/button.test.events.js +1 -0
- package/dist/button.test.form.js +1 -0
- package/dist/checkbox-group.d.ts +1 -0
- package/dist/checkbox-group.js +1 -1
- package/dist/checkbox-group.test.basics.js +1 -0
- package/dist/checkbox-group.test.events.js +1 -0
- package/dist/checkbox-group.test.focus.js +24 -0
- package/dist/checkbox-group.test.form.js +1 -0
- package/dist/checkbox-group.test.validity.js +1 -0
- package/dist/checkbox.d.ts +3 -1
- package/dist/checkbox.js +1 -1
- package/dist/checkbox.styles.js +4 -5
- package/dist/checkbox.test.basics.js +1 -0
- package/dist/checkbox.test.events.js +1 -0
- package/dist/checkbox.test.focus.js +11 -0
- package/dist/checkbox.test.form.js +1 -0
- package/dist/checkbox.test.states.js +1 -0
- package/dist/checkbox.test.validity.js +1 -0
- package/dist/drawer.styles.js +4 -3
- package/dist/drawer.test.basics.js +1 -0
- package/dist/drawer.test.closing.js +1 -0
- package/dist/drawer.test.events.js +1 -0
- package/dist/drawer.test.floating-components.js +1 -0
- package/dist/drawer.test.methods.js +1 -0
- package/dist/dropdown.d.ts +1 -0
- package/dist/dropdown.js +1 -1
- package/dist/dropdown.option.d.ts +1 -0
- package/dist/dropdown.option.js +1 -1
- package/dist/dropdown.option.test.basics.js +1 -0
- package/dist/dropdown.option.test.basics.multiple.js +1 -0
- package/dist/dropdown.option.test.basics.single.js +1 -0
- package/dist/dropdown.option.test.events.js +1 -0
- package/dist/dropdown.option.test.interactions.multiple.js +1 -0
- package/dist/dropdown.option.test.interactions.single.js +1 -0
- package/dist/dropdown.styles.js +8 -4
- package/dist/dropdown.test.basics.filterable.js +1 -0
- package/dist/dropdown.test.basics.js +1 -0
- package/dist/dropdown.test.basics.multiple.js +1 -1
- package/dist/dropdown.test.basics.single.js +1 -1
- package/dist/dropdown.test.events.js +1 -0
- package/dist/dropdown.test.events.multiple.js +72 -5
- package/dist/dropdown.test.events.single.js +46 -5
- package/dist/dropdown.test.focus.js +11 -2
- package/dist/dropdown.test.focus.multiple.js +0 -1
- package/dist/dropdown.test.form.js +1 -0
- package/dist/dropdown.test.form.multiple.js +1 -0
- package/dist/dropdown.test.form.single.js +1 -0
- package/dist/dropdown.test.interactions.filterable.js +1 -0
- package/dist/dropdown.test.interactions.js +1 -0
- package/dist/dropdown.test.interactions.multiple.js +1 -1
- package/dist/dropdown.test.interactions.single.js +1 -0
- package/dist/dropdown.test.validity.js +1 -0
- package/dist/form-controls-layout.test.basics.js +1 -0
- package/dist/icon-button.test.basics.js +1 -0
- package/dist/input.d.ts +2 -1
- package/dist/input.js +1 -1
- package/dist/input.test.basics.js +1 -0
- package/dist/input.test.events.js +1 -0
- package/dist/input.test.focus.js +6 -3
- package/dist/input.test.form.js +1 -0
- package/dist/input.test.validity.js +1 -0
- package/dist/label.styles.js +11 -11
- package/dist/label.test.basics.js +1 -0
- package/dist/library/localize.d.ts +2 -0
- package/dist/library/ow.test.d.ts +2 -1
- package/dist/library/ow.test.js +8 -3
- package/dist/menu.button.test.basics.js +1 -0
- package/dist/menu.link.test.basics.js +1 -0
- package/dist/menu.options.test.basics.js +1 -0
- package/dist/menu.styles.js +4 -4
- package/dist/menu.test.basics.js +1 -0
- package/dist/menu.test.events.d.ts +1 -0
- package/dist/menu.test.events.js +2 -1
- package/dist/menu.test.focus.js +1 -0
- package/dist/menu.test.interactions.js +1 -0
- package/dist/modal.icon-button.test.basics.js +1 -0
- package/dist/modal.tertiary-icon.test.basics.js +1 -0
- package/dist/modal.test.accessibility.js +1 -0
- package/dist/modal.test.basics.js +1 -0
- package/dist/modal.test.close.js +1 -0
- package/dist/modal.test.events.js +1 -0
- package/dist/modal.test.floating-components.js +1 -0
- package/dist/modal.test.lock-scroll.js +1 -0
- package/dist/modal.test.methods.js +1 -0
- package/dist/modal.test.scrollbars.js +1 -0
- package/dist/radio-group.d.ts +1 -0
- package/dist/radio-group.js +1 -1
- package/dist/radio-group.test.basics.js +1 -0
- package/dist/radio-group.test.events.js +1 -0
- package/dist/radio-group.test.focus.js +20 -0
- package/dist/radio-group.test.form.js +1 -0
- package/dist/radio-group.test.validity.js +1 -0
- package/dist/split-button.test.basics.js +1 -0
- package/dist/split-container.test.basics.js +1 -0
- package/dist/split-link.test.basics.js +1 -0
- package/dist/split-link.test.interactions.js +1 -0
- package/dist/tab.d.ts +0 -2
- package/dist/tab.group.d.ts +3 -5
- package/dist/tab.group.js +1 -1
- package/dist/tab.group.styles.js +27 -13
- package/dist/tab.group.test.basics.js +7 -56
- package/dist/tab.group.test.interactions.d.ts +3 -0
- package/dist/tab.group.test.interactions.js +258 -0
- package/dist/tab.js +1 -1
- package/dist/tab.styles.js +7 -68
- package/dist/tab.test.basics.js +0 -20
- package/dist/tabs.stories.d.ts +1 -2
- package/dist/tag.test.basics.js +1 -0
- package/dist/textarea.d.ts +1 -0
- package/dist/textarea.js +2 -2
- package/dist/textarea.test.basics.js +1 -0
- package/dist/textarea.test.events.js +1 -0
- package/dist/textarea.test.form.js +1 -0
- package/dist/textarea.test.validity.js +14 -1
- package/dist/toggle.test.basics.js +1 -0
- package/dist/toggle.test.events.js +1 -0
- package/dist/toggle.test.states.js +1 -0
- package/dist/tooltip.test.basics.js +1 -0
- package/dist/tooltip.test.interactions.js +1 -0
- package/dist/translations/en.js +1 -1
- package/dist/translations/fr.js +1 -1
- package/dist/translations/ja.js +1 -1
- package/dist/tree.item.d.ts +4 -1
- package/dist/tree.item.js +1 -1
- package/dist/tree.item.menu.js +1 -1
- package/dist/tree.item.test.basics.js +12 -0
- package/dist/tree.js +1 -1
- package/dist/tree.stories.d.ts +1 -0
- package/dist/tree.test.basics.js +7 -0
- package/dist/tree.test.events.js +1 -1
- package/dist/tree.test.focus.js +32 -0
- package/package.json +39 -26
@@ -0,0 +1,258 @@
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-unused-expressions */
|
2
|
+
import './tab.group.js';
|
3
|
+
import './tab.js';
|
4
|
+
import './tab.panel.js';
|
5
|
+
import { expect, fixture, html, waitUntil } from '@open-wc/testing';
|
6
|
+
import { sendKeys } from '@web/test-runner-commands';
|
7
|
+
import GlideCoreTabGroup from './tab.group.js';
|
8
|
+
import GlideCoreTabPanel from './tab.panel.js';
|
9
|
+
import sinon from 'sinon';
|
10
|
+
GlideCoreTabGroup.shadowRootOptions.mode = 'open';
|
11
|
+
GlideCoreTabPanel.shadowRootOptions.mode = 'open';
|
12
|
+
it('renders an end overflow button on end overflow', async () => {
|
13
|
+
const element = await fixture(html `
|
14
|
+
<div style="width:25rem">
|
15
|
+
<glide-core-tab-group>
|
16
|
+
<glide-core-tab slot="nav" panel="1">Tab 1</glide-core-tab>
|
17
|
+
<glide-core-tab slot="nav" panel="2">Tab 2</glide-core-tab>
|
18
|
+
<glide-core-tab slot="nav" panel="3">Tab 3</glide-core-tab>
|
19
|
+
<glide-core-tab slot="nav" panel="4">Tab 4</glide-core-tab>
|
20
|
+
<glide-core-tab slot="nav" panel="5">Tab 5</glide-core-tab>
|
21
|
+
<glide-core-tab slot="nav" panel="6">Tab 6</glide-core-tab>
|
22
|
+
|
23
|
+
<glide-core-tab-panel name="1">Content for Tab 1</glide-core-tab-panel>
|
24
|
+
<glide-core-tab-panel name="2">Content for Tab 2</glide-core-tab-panel>
|
25
|
+
<glide-core-tab-panel name="3">Content for Tab 3</glide-core-tab-panel>
|
26
|
+
<glide-core-tab-panel name="4">Content for Tab 4</glide-core-tab-panel>
|
27
|
+
<glide-core-tab-panel name="5">Content for Tab 5</glide-core-tab-panel>
|
28
|
+
<glide-core-tab-panel name="6">Content for Tab 6</glide-core-tab-panel>
|
29
|
+
</glide-core-tab-group>
|
30
|
+
</div>
|
31
|
+
`);
|
32
|
+
const tabGroup = element.querySelector('glide-core-tab-group');
|
33
|
+
const endOverflowButton = tabGroup?.shadowRoot?.querySelector('[data-test="overflow-end-button"]');
|
34
|
+
expect(endOverflowButton).to.be.not.null;
|
35
|
+
});
|
36
|
+
it('does not render an end overflow button when there is no end overflow', async () => {
|
37
|
+
const element = await fixture(html `
|
38
|
+
<div style="width:25rem">
|
39
|
+
<glide-core-tab-group>
|
40
|
+
<glide-core-tab slot="nav" panel="1">Tab 1</glide-core-tab>
|
41
|
+
<glide-core-tab slot="nav" panel="2">Tab 2</glide-core-tab>
|
42
|
+
<glide-core-tab slot="nav" panel="3">Tab 3</glide-core-tab>
|
43
|
+
<glide-core-tab slot="nav" panel="4">Tab 4</glide-core-tab>
|
44
|
+
<glide-core-tab slot="nav" panel="5">Tab 5</glide-core-tab>
|
45
|
+
<glide-core-tab slot="nav" panel="6">Tab 6</glide-core-tab>
|
46
|
+
|
47
|
+
<glide-core-tab-panel name="1">Content for Tab 1</glide-core-tab-panel>
|
48
|
+
<glide-core-tab-panel name="2">Content for Tab 2</glide-core-tab-panel>
|
49
|
+
<glide-core-tab-panel name="3">Content for Tab 3</glide-core-tab-panel>
|
50
|
+
<glide-core-tab-panel name="4">Content for Tab 4</glide-core-tab-panel>
|
51
|
+
<glide-core-tab-panel name="5">Content for Tab 5</glide-core-tab-panel>
|
52
|
+
<glide-core-tab-panel name="6">Content for Tab 6</glide-core-tab-panel>
|
53
|
+
</glide-core-tab-group>
|
54
|
+
</div>
|
55
|
+
`);
|
56
|
+
const tabGroup = element.querySelector('glide-core-tab-group');
|
57
|
+
const endOverflowButton = tabGroup?.shadowRoot?.querySelector('[data-test="overflow-end-button"]');
|
58
|
+
expect(endOverflowButton).to.be.not.null;
|
59
|
+
endOverflowButton?.click();
|
60
|
+
await waitUntil(() => tabGroup?.shadowRoot?.querySelector('[data-test="overflow-end-button"]') === null);
|
61
|
+
});
|
62
|
+
it('renders a start overflow button on start overflow', async () => {
|
63
|
+
const element = await fixture(html `
|
64
|
+
<div style="width:25rem">
|
65
|
+
<glide-core-tab-group>
|
66
|
+
<glide-core-tab slot="nav" panel="1">Tab 1</glide-core-tab>
|
67
|
+
<glide-core-tab slot="nav" panel="2">Tab 2</glide-core-tab>
|
68
|
+
<glide-core-tab slot="nav" panel="3">Tab 3</glide-core-tab>
|
69
|
+
<glide-core-tab slot="nav" panel="4">Tab 4</glide-core-tab>
|
70
|
+
<glide-core-tab slot="nav" panel="5">Tab 5</glide-core-tab>
|
71
|
+
<glide-core-tab slot="nav" panel="6">Tab 6</glide-core-tab>
|
72
|
+
|
73
|
+
<glide-core-tab-panel name="1">Content for Tab 1</glide-core-tab-panel>
|
74
|
+
<glide-core-tab-panel name="2">Content for Tab 2</glide-core-tab-panel>
|
75
|
+
<glide-core-tab-panel name="3">Content for Tab 3</glide-core-tab-panel>
|
76
|
+
<glide-core-tab-panel name="4">Content for Tab 4</glide-core-tab-panel>
|
77
|
+
<glide-core-tab-panel name="5">Content for Tab 5</glide-core-tab-panel>
|
78
|
+
<glide-core-tab-panel name="6">Content for Tab 6</glide-core-tab-panel>
|
79
|
+
</glide-core-tab-group>
|
80
|
+
</div>
|
81
|
+
`);
|
82
|
+
const tabGroup = element.querySelector('glide-core-tab-group');
|
83
|
+
// Need to get the tab group into a state where there
|
84
|
+
// is overflow on the right -- do this by first scrolling to the right
|
85
|
+
const endOverflowButton = tabGroup?.shadowRoot?.querySelector('[data-test="overflow-end-button"]');
|
86
|
+
expect(endOverflowButton).to.be.not.null;
|
87
|
+
endOverflowButton?.click();
|
88
|
+
await waitUntil(() => tabGroup?.shadowRoot?.querySelector('[data-test="overflow-start-button"]'));
|
89
|
+
});
|
90
|
+
it('does not render a start overflow button when there is no start overflow', async () => {
|
91
|
+
const element = await fixture(html `
|
92
|
+
<div style="width:25rem">
|
93
|
+
<glide-core-tab-group>
|
94
|
+
<glide-core-tab slot="nav" panel="1">Tab 1</glide-core-tab>
|
95
|
+
<glide-core-tab slot="nav" panel="2">Tab 2</glide-core-tab>
|
96
|
+
<glide-core-tab slot="nav" panel="3">Tab 3</glide-core-tab>
|
97
|
+
<glide-core-tab slot="nav" panel="4">Tab 4</glide-core-tab>
|
98
|
+
<glide-core-tab slot="nav" panel="5">Tab 5</glide-core-tab>
|
99
|
+
<glide-core-tab slot="nav" panel="6">Tab 6</glide-core-tab>
|
100
|
+
|
101
|
+
<glide-core-tab-panel name="1">Content for Tab 1</glide-core-tab-panel>
|
102
|
+
<glide-core-tab-panel name="2">Content for Tab 2</glide-core-tab-panel>
|
103
|
+
<glide-core-tab-panel name="3">Content for Tab 3</glide-core-tab-panel>
|
104
|
+
<glide-core-tab-panel name="4">Content for Tab 4</glide-core-tab-panel>
|
105
|
+
<glide-core-tab-panel name="5">Content for Tab 5</glide-core-tab-panel>
|
106
|
+
<glide-core-tab-panel name="6">Content for Tab 6</glide-core-tab-panel>
|
107
|
+
</glide-core-tab-group>
|
108
|
+
</div>
|
109
|
+
`);
|
110
|
+
const tabGroup = element.querySelector('glide-core-tab-group');
|
111
|
+
const endOverflowButton = tabGroup?.shadowRoot?.querySelector('[data-test="overflow-end-button"]');
|
112
|
+
let startOverflowButton = tabGroup?.shadowRoot?.querySelector('[data-test="overflow-start-button"]');
|
113
|
+
expect(endOverflowButton).to.be.not.null;
|
114
|
+
expect(startOverflowButton).to.be.null;
|
115
|
+
endOverflowButton?.click();
|
116
|
+
await waitUntil(() => tabGroup?.shadowRoot?.querySelector('[data-test="overflow-start-button"]'));
|
117
|
+
startOverflowButton = tabGroup?.shadowRoot?.querySelector('[data-test="overflow-start-button"]');
|
118
|
+
startOverflowButton?.click();
|
119
|
+
await waitUntil(() => tabGroup?.shadowRoot?.querySelector('[data-test="overflow-start-button"]') === null);
|
120
|
+
});
|
121
|
+
it('scrolls tabs when overflow buttons are clicked', async () => {
|
122
|
+
const spy = sinon.spy();
|
123
|
+
const element = await fixture(html `
|
124
|
+
<div style="width:25rem">
|
125
|
+
<glide-core-tab-group>
|
126
|
+
<glide-core-tab slot="nav" panel="1">Tab 1</glide-core-tab>
|
127
|
+
<glide-core-tab slot="nav" panel="2">Tab 2</glide-core-tab>
|
128
|
+
<glide-core-tab slot="nav" panel="3">Tab 3</glide-core-tab>
|
129
|
+
<glide-core-tab slot="nav" panel="4">Tab 4</glide-core-tab>
|
130
|
+
<glide-core-tab slot="nav" panel="5">Tab 5</glide-core-tab>
|
131
|
+
<glide-core-tab slot="nav" panel="6">Tab 6</glide-core-tab>
|
132
|
+
|
133
|
+
<glide-core-tab-panel name="1">Content for Tab 1</glide-core-tab-panel>
|
134
|
+
<glide-core-tab-panel name="2">Content for Tab 2</glide-core-tab-panel>
|
135
|
+
<glide-core-tab-panel name="3">Content for Tab 3</glide-core-tab-panel>
|
136
|
+
<glide-core-tab-panel name="4">Content for Tab 4</glide-core-tab-panel>
|
137
|
+
<glide-core-tab-panel name="5">Content for Tab 5</glide-core-tab-panel>
|
138
|
+
<glide-core-tab-panel name="6">Content for Tab 6</glide-core-tab-panel>
|
139
|
+
</glide-core-tab-group>
|
140
|
+
</div>
|
141
|
+
`);
|
142
|
+
const tabGroup = element.querySelector('glide-core-tab-group');
|
143
|
+
tabGroup?.shadowRoot
|
144
|
+
?.querySelector('[role="tablist"]')
|
145
|
+
?.addEventListener('scroll', spy);
|
146
|
+
const endOverflowButton = tabGroup?.shadowRoot?.querySelector('[data-test="overflow-end-button"]');
|
147
|
+
expect(endOverflowButton).to.be.not.null;
|
148
|
+
endOverflowButton?.click();
|
149
|
+
await waitUntil(() => tabGroup?.shadowRoot?.querySelector('[data-test="overflow-end-button"]') === null);
|
150
|
+
expect(spy.called).to.be.true;
|
151
|
+
spy.resetHistory();
|
152
|
+
const startOverflowButton = tabGroup?.shadowRoot?.querySelector('[data-test="overflow-start-button"]');
|
153
|
+
expect(startOverflowButton).to.be.not.null;
|
154
|
+
startOverflowButton?.click();
|
155
|
+
await waitUntil(() => tabGroup?.shadowRoot?.querySelector('[data-test="overflow-start-button"]') === null);
|
156
|
+
expect(spy.called).to.be.true;
|
157
|
+
});
|
158
|
+
it('removes overflow buttons when the component is resized and there is no overflow', async () => {
|
159
|
+
const element = await fixture(html `
|
160
|
+
<div style="width:25rem" data-test="test-parent">
|
161
|
+
<glide-core-tab-group>
|
162
|
+
<glide-core-tab slot="nav" panel="1">Tab 1</glide-core-tab>
|
163
|
+
<glide-core-tab slot="nav" panel="2">Tab 2</glide-core-tab>
|
164
|
+
<glide-core-tab slot="nav" panel="3">Tab 3</glide-core-tab>
|
165
|
+
<glide-core-tab slot="nav" panel="4">Tab 4</glide-core-tab>
|
166
|
+
<glide-core-tab slot="nav" panel="5">Tab 5</glide-core-tab>
|
167
|
+
<glide-core-tab slot="nav" panel="6">Tab 6</glide-core-tab>
|
168
|
+
|
169
|
+
<glide-core-tab-panel name="1">Content for Tab 1</glide-core-tab-panel>
|
170
|
+
<glide-core-tab-panel name="2">Content for Tab 2</glide-core-tab-panel>
|
171
|
+
<glide-core-tab-panel name="3">Content for Tab 3</glide-core-tab-panel>
|
172
|
+
<glide-core-tab-panel name="4">Content for Tab 4</glide-core-tab-panel>
|
173
|
+
<glide-core-tab-panel name="5">Content for Tab 5</glide-core-tab-panel>
|
174
|
+
<glide-core-tab-panel name="6">Content for Tab 6</glide-core-tab-panel>
|
175
|
+
</glide-core-tab-group>
|
176
|
+
</div>
|
177
|
+
`);
|
178
|
+
const tabGroup = element.querySelector('glide-core-tab-group');
|
179
|
+
const endOverflowButton = tabGroup?.shadowRoot?.querySelector('[data-test="overflow-end-button"]');
|
180
|
+
expect(endOverflowButton).to.be.not.null;
|
181
|
+
const container = document?.querySelector('[data-test="test-parent"]');
|
182
|
+
expect(container).to.be.not.null;
|
183
|
+
container.style.width = 'auto';
|
184
|
+
await waitUntil(() => tabGroup?.shadowRoot?.querySelector('[data-test="overflow-start-button"]') === null &&
|
185
|
+
tabGroup?.shadowRoot?.querySelector('[data-test="overflow-end-button"]') === null);
|
186
|
+
});
|
187
|
+
it('renders overflow buttons when the component is resized and there is overflow', async () => {
|
188
|
+
const element = await fixture(html `
|
189
|
+
<div data-test="test-parent">
|
190
|
+
<glide-core-tab-group>
|
191
|
+
<glide-core-tab slot="nav" panel="1">Tab 1</glide-core-tab>
|
192
|
+
<glide-core-tab slot="nav" panel="2">Tab 2</glide-core-tab>
|
193
|
+
<glide-core-tab slot="nav" panel="3">Tab 3</glide-core-tab>
|
194
|
+
<glide-core-tab slot="nav" panel="4">Tab 4</glide-core-tab>
|
195
|
+
<glide-core-tab slot="nav" panel="5">Tab 5</glide-core-tab>
|
196
|
+
<glide-core-tab slot="nav" panel="6">Tab 6</glide-core-tab>
|
197
|
+
|
198
|
+
<glide-core-tab-panel name="1">Content for Tab 1</glide-core-tab-panel>
|
199
|
+
<glide-core-tab-panel name="2">Content for Tab 2</glide-core-tab-panel>
|
200
|
+
<glide-core-tab-panel name="3">Content for Tab 3</glide-core-tab-panel>
|
201
|
+
<glide-core-tab-panel name="4">Content for Tab 4</glide-core-tab-panel>
|
202
|
+
<glide-core-tab-panel name="5">Content for Tab 5</glide-core-tab-panel>
|
203
|
+
<glide-core-tab-panel name="6">Content for Tab 6</glide-core-tab-panel>
|
204
|
+
</glide-core-tab-group>
|
205
|
+
</div>
|
206
|
+
`);
|
207
|
+
const tabGroup = element.querySelector('glide-core-tab-group');
|
208
|
+
const endOverflowButton = tabGroup?.shadowRoot?.querySelector('[data-test="overflow-end-button"]');
|
209
|
+
expect(endOverflowButton).to.be.null;
|
210
|
+
const container = document?.querySelector('[data-test="test-parent"]');
|
211
|
+
expect(container).to.be.not.null;
|
212
|
+
container.style.width = '25rem';
|
213
|
+
await waitUntil(() => tabGroup?.shadowRoot?.querySelector('[data-test="overflow-start-button"]') === null &&
|
214
|
+
tabGroup?.shadowRoot?.querySelector('[data-test="overflow-end-button"]'));
|
215
|
+
});
|
216
|
+
it('scrolls using keyboard when there is overflow and only a few pixels of overflowed tabs are on-screen', async () => {
|
217
|
+
const spy = sinon.spy();
|
218
|
+
const element = await fixture(html `
|
219
|
+
<div style="width: 17rem;">
|
220
|
+
<glide-core-tab-group>
|
221
|
+
<glide-core-tab slot="nav" panel="1">Tab 1</glide-core-tab>
|
222
|
+
<glide-core-tab slot="nav" panel="2">Tab 2</glide-core-tab>
|
223
|
+
<glide-core-tab slot="nav" panel="3">Tab 3</glide-core-tab>
|
224
|
+
<glide-core-tab slot="nav" panel="4">Tab 4</glide-core-tab>
|
225
|
+
|
226
|
+
<glide-core-tab-panel name="1">Content for tab 1 </glide-core-tab-panel>
|
227
|
+
<glide-core-tab-panel name="2">
|
228
|
+
Content for tab 2
|
229
|
+
</glide-core-tab-panel>
|
230
|
+
<glide-core-tab-panel name="3">
|
231
|
+
Content for tab 3
|
232
|
+
</glide-core-tab-panel>
|
233
|
+
<glide-core-tab-panel name="4">
|
234
|
+
Content for tab 4
|
235
|
+
</glide-core-tab-panel>
|
236
|
+
</glide-core-tab-group>
|
237
|
+
</div>
|
238
|
+
`);
|
239
|
+
const tabGroup = element.querySelector('glide-core-tab-group');
|
240
|
+
expect(tabGroup).to.be.not.null;
|
241
|
+
tabGroup?.shadowRoot
|
242
|
+
?.querySelector('[role="tablist"]')
|
243
|
+
?.addEventListener('scroll', spy);
|
244
|
+
tabGroup?.tabElements[0].focus();
|
245
|
+
await sendKeys({ press: 'ArrowRight' });
|
246
|
+
await sendKeys({ press: 'ArrowRight' });
|
247
|
+
await sendKeys({ press: 'ArrowRight' });
|
248
|
+
await waitUntil(() => tabGroup?.shadowRoot?.querySelector('[data-test="overflow-end-button"]') === null);
|
249
|
+
expect(tabGroup?.tabElements[3]).to.have.focus;
|
250
|
+
expect(spy.called).to.be.true;
|
251
|
+
spy.resetHistory();
|
252
|
+
await sendKeys({ press: 'ArrowLeft' });
|
253
|
+
await sendKeys({ press: 'ArrowLeft' });
|
254
|
+
await sendKeys({ press: 'ArrowLeft' });
|
255
|
+
await waitUntil(() => tabGroup?.shadowRoot?.querySelector('[data-test="overflow-start-button"]') === null);
|
256
|
+
expect(tabGroup?.tabElements[0]).to.have.focus;
|
257
|
+
expect(spy.called).to.be.true;
|
258
|
+
});
|
package/dist/tab.js
CHANGED
@@ -1 +1 @@
|
|
1
|
-
var GlideCoreTab_1,__decorate=this&&this.__decorate||function(t,e,i,
|
1
|
+
var GlideCoreTab_1,__decorate=this&&this.__decorate||function(t,e,i,s){var o,a=arguments.length,r=a<3?e:null===s?s=Object.getOwnPropertyDescriptor(e,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(t,e,i,s);else for(var l=t.length-1;l>=0;l--)(o=t[l])&&(r=(a<3?o(r):a>3?o(e,i,r):o(e,i))||r);return a>3&&r&&Object.defineProperty(e,i,r),r};import{LitElement,html}from"lit";import{classMap}from"lit/directives/class-map.js";import{customElement,property}from"lit/decorators.js";import styles from"./tab.styles.js";let GlideCoreTab=class GlideCoreTab extends LitElement{constructor(){super(...arguments),this.panel="",this.active=!1,this.disabled=!1}static{GlideCoreTab_1=this}static{this.instanceCount=0}static{this.shadowRootOptions={...LitElement.shadowRootOptions,mode:"closed"}}static{this.styles=styles}firstUpdated(){this.setAttribute("role","tab"),this.hasAttribute("id")||(this.id="glide-core-tab-"+GlideCoreTab_1.instanceCount++)}render(){return html`<div class="${classMap({component:!0,active:this.active,disabled:this.disabled})}"><span class="container"><slot name="icon"></slot><div class="default-slot"><slot></slot></div></span></div>`}updated(t){t.has("active")&&this.setAttribute("aria-selected",this.active?"true":"false"),t.has("disabled")&&(this.disabled?(this.setAttribute("aria-disabled","true"),this.setAttribute("tabindex","-1")):(this.removeAttribute("aria-disabled"),this.setAttribute("tabindex","0")))}};__decorate([property({reflect:!0})],GlideCoreTab.prototype,"panel",void 0),__decorate([property({type:Boolean,reflect:!0})],GlideCoreTab.prototype,"active",void 0),__decorate([property({type:Boolean,reflect:!0})],GlideCoreTab.prototype,"disabled",void 0),GlideCoreTab=GlideCoreTab_1=__decorate([customElement("glide-core-tab")],GlideCoreTab);export default GlideCoreTab;
|
package/dist/tab.styles.js
CHANGED
@@ -12,16 +12,20 @@ import{css}from"lit";import focusOutline from"./styles/focus-outline.js";export
|
|
12
12
|
.component {
|
13
13
|
align-items: center;
|
14
14
|
cursor: pointer;
|
15
|
-
display: inline-flex;
|
16
15
|
font-family: var(--glide-core-heading-xxs-font-family);
|
17
16
|
font-size: var(--glide-core-heading-xxxs-font-size);
|
18
17
|
font-style: var(--glide-core-heading-xxs-font-style);
|
18
|
+
font-weight: var(--glide-core-body-sm-font-weight);
|
19
19
|
gap: 0.4375rem;
|
20
20
|
justify-content: center;
|
21
21
|
line-height: 1.1875rem;
|
22
22
|
padding-block: var(--glide-core-spacing-xs);
|
23
23
|
padding-inline: var(--glide-core-spacing-md);
|
24
24
|
|
25
|
+
&.active {
|
26
|
+
border-block-end: 2px solid var(--glide-core-border-focus);
|
27
|
+
}
|
28
|
+
|
25
29
|
&:hover {
|
26
30
|
color: var(--glide-core-text-primary);
|
27
31
|
}
|
@@ -35,74 +39,9 @@ import{css}from"lit";import focusOutline from"./styles/focus-outline.js";export
|
|
35
39
|
& .container {
|
36
40
|
border-radius: 0.0625rem;
|
37
41
|
display: flex;
|
42
|
+
flex-shrink: 0;
|
38
43
|
gap: var(--glide-core-spacing-xs);
|
39
|
-
|
40
|
-
|
41
|
-
/* Primary */
|
42
|
-
|
43
|
-
&.primary {
|
44
|
-
border: 1px solid transparent;
|
45
|
-
border-block-end-width: 0;
|
46
|
-
border-end-end-radius: 0;
|
47
|
-
border-end-start-radius: 0;
|
48
|
-
border-start-end-radius: var(--glide-core-spacing-sm);
|
49
|
-
border-start-start-radius: var(--glide-core-spacing-sm);
|
50
|
-
font-weight: var(--glide-core-heading-xxs-font-weight);
|
51
|
-
|
52
|
-
&.active,
|
53
|
-
&:hover:not(.disabled) {
|
54
|
-
background-color: var(--glide-core-surface-base);
|
55
|
-
border: 1px solid var(--glide-core-border-primary);
|
56
|
-
|
57
|
-
/* hide the outer tab-group bottom border */
|
58
|
-
border-block-end: 1px solid var(--glide-core-surface-base);
|
59
|
-
margin-block-end: -1px;
|
60
|
-
}
|
61
|
-
|
62
|
-
& .active.default-slot {
|
63
|
-
background-color: red;
|
64
|
-
}
|
65
|
-
}
|
66
|
-
|
67
|
-
/* Secondary */
|
68
|
-
|
69
|
-
&.secondary {
|
70
|
-
border-color: transparent;
|
71
|
-
border-style: solid;
|
72
|
-
border-width: 1px;
|
73
|
-
font-weight: var(--glide-core-body-sm-font-weight);
|
74
|
-
|
75
|
-
&.active {
|
76
|
-
border-block-end: 2px solid var(--glide-core-border-focus);
|
77
|
-
}
|
78
|
-
}
|
79
|
-
|
80
|
-
/* Vertical */
|
81
|
-
|
82
|
-
&.vertical {
|
83
|
-
flex-direction: column;
|
84
|
-
font-weight: var(--glide-core-body-sm-font-weight);
|
85
|
-
padding-inline: var(--glide-core-spacing-xxs);
|
86
|
-
|
87
|
-
& .default-slot {
|
88
|
-
transform: rotate(180deg);
|
89
|
-
writing-mode: vertical-lr;
|
90
|
-
}
|
91
|
-
|
92
|
-
&.active {
|
93
|
-
border-inline-start: 2px solid var(--glide-core-border-focus);
|
94
|
-
}
|
95
|
-
|
96
|
-
&.active,
|
97
|
-
&.disabled {
|
98
|
-
background-color: var(--glide-core-surface-base);
|
99
|
-
}
|
100
|
-
|
101
|
-
& .container {
|
102
|
-
display: flex;
|
103
|
-
flex-direction: column;
|
104
|
-
gap: var(--glide-core-spacing-xs);
|
105
|
-
}
|
44
|
+
white-space: nowrap;
|
106
45
|
}
|
107
46
|
}
|
108
47
|
`];
|
package/dist/tab.test.basics.js
CHANGED
@@ -12,29 +12,9 @@ it('renders correct markup and sets correct attributes for the default case', as
|
|
12
12
|
await expect(element).to.not.be.accessible();
|
13
13
|
expect(element.active).to.equal(false, 'active defaults to false');
|
14
14
|
expect(element.disabled).to.equal(false, 'disabled defaults to false');
|
15
|
-
expect(element.variant).to.equal('primary');
|
16
15
|
expect(element.getAttribute('aria-disabled')).to.equal(null, 'does not set aria-disabled');
|
17
16
|
expect([...element.shadowRoot.firstElementChild.classList]).to.deep.equal([
|
18
17
|
'component',
|
19
|
-
'primary',
|
20
|
-
]);
|
21
|
-
});
|
22
|
-
it('renders a secondary variant', async () => {
|
23
|
-
const element = await fixture(html `
|
24
|
-
<glide-core-tab variant="secondary">Tab</glide-core-tab>
|
25
|
-
`);
|
26
|
-
expect([...element.shadowRoot.firstElementChild.classList]).to.deep.equal([
|
27
|
-
'component',
|
28
|
-
'secondary',
|
29
|
-
]);
|
30
|
-
});
|
31
|
-
it('renders a vertical variant', async () => {
|
32
|
-
const element = await fixture(html `
|
33
|
-
<glide-core-tab variant="vertical">Tab</glide-core-tab>
|
34
|
-
`);
|
35
|
-
expect([...element.shadowRoot.firstElementChild.classList]).to.deep.equal([
|
36
|
-
'component',
|
37
|
-
'vertical',
|
38
18
|
]);
|
39
19
|
});
|
40
20
|
it('sets the panel attribute', async () => {
|
package/dist/tabs.stories.d.ts
CHANGED
@@ -5,5 +5,4 @@ import type { Meta, StoryObj } from '@storybook/web-components';
|
|
5
5
|
declare const meta: Meta;
|
6
6
|
export default meta;
|
7
7
|
export declare const Primary: StoryObj;
|
8
|
-
export declare const
|
9
|
-
export declare const Vertical: StoryObj;
|
8
|
+
export declare const Overflow: StoryObj;
|
package/dist/tag.test.basics.js
CHANGED
package/dist/textarea.d.ts
CHANGED
package/dist/textarea.js
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
var __decorate=this&&this.__decorate||function(e,t,i,a){var r,o=arguments.length,l=o<3?t:null===a?a=Object.getOwnPropertyDescriptor(t,i):a;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,i,a);else for(var s=e.length-1;s>=0;s--)(r=e[s])&&(l=(o<3?r(l):o>3?r(t,i,l):r(t,i))||l);return o>3&&l&&Object.defineProperty(t,i,l),l};import"./label.js";import{LitElement,html}from"lit";import{classMap}from"lit/directives/class-map.js";import{createRef,ref}from"lit/directives/ref.js";import{customElement,property,state}from"lit/decorators.js";import{ifDefined}from"lit/directives/if-defined.js";import{when}from"lit/directives/when.js";import ow from"./library/ow.js";import styles from"./textarea.styles.js";let GlideCoreTextarea=class GlideCoreTextarea extends LitElement{static{this.formAssociated=!0}static{this.shadowRootOptions={...LitElement.shadowRootOptions,mode:"closed",delegatesFocus:!0}}static{this.styles=styles}blur(){this.#e.value?.blur()}checkValidity(){
|
2
|
-
</textarea></div><div class="meta" data-test-description-container id="meta" slot="description"><slot name="description"></slot>${when(this.maxlength,(()=>html`<div class="${classMap({"character-count":!0,error:this.#o})}" data-test-maxlength>${this.value.length}/${this.maxlength}</div>`))}</div></glide-core-label>`}reportValidity(){
|
1
|
+
var __decorate=this&&this.__decorate||function(e,t,i,a){var r,o=arguments.length,l=o<3?t:null===a?a=Object.getOwnPropertyDescriptor(t,i):a;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,i,a);else for(var s=e.length-1;s>=0;s--)(r=e[s])&&(l=(o<3?r(l):o>3?r(t,i,l):r(t,i))||l);return o>3&&l&&Object.defineProperty(t,i,l),l};import"./label.js";import{LitElement,html}from"lit";import{classMap}from"lit/directives/class-map.js";import{createRef,ref}from"lit/directives/ref.js";import{customElement,property,state}from"lit/decorators.js";import{ifDefined}from"lit/directives/if-defined.js";import{when}from"lit/directives/when.js";import ow from"./library/ow.js";import styles from"./textarea.styles.js";let GlideCoreTextarea=class GlideCoreTextarea extends LitElement{static{this.formAssociated=!0}static{this.shadowRootOptions={...LitElement.shadowRootOptions,mode:"closed",delegatesFocus:!0}}static{this.styles=styles}blur(){this.#e.value?.blur()}checkValidity(){this.isCheckingValidity=!0;const e=this.#t.checkValidity();return this.isCheckingValidity=!1,e}disconnectedCallback(){super.disconnectedCallback(),this.form?.removeEventListener("formdata",this.#i),this.removeEventListener("invalid",this.#a)}get form(){return this.#t.form}get validity(){return this.#t.validity}get willValidate(){return this.#t.willValidate}formAssociatedCallback(){this.form?.addEventListener("formdata",this.#i)}formResetCallback(){this.value=this.getAttribute("value")??""}render(){return html`<glide-core-label split="${ifDefined(this.privateSplit??void 0)}" orientation="${this.orientation}" ?disabled="${this.disabled}" ?error="${this.#r||this.#o}" ?hide="${this.hideLabel}" ?required="${this.required}"><slot name="tooltip" slot="tooltip"></slot><label class="label" for="textarea">${this.label}</label><div class="textarea-container" slot="control"><textarea class="${classMap({error:this.#r||this.#o})}" id="textarea" name="${ifDefined(this.name)}" placeholder="${ifDefined(this.placeholder)}" rows="${this.rows}" autocapitalize="${ifDefined(this.autocapitalize)}" spellcheck="${this.spellcheck}" ?required="${this.required}" ?readonly="${this.readonly}" ?disabled="${this.disabled}" aria-describedby="meta" ${ref(this.#e)} @input="${this.#l}" @change="${this.#s}" @blur="${this.#d}">
|
2
|
+
</textarea></div><div class="meta" data-test-description-container id="meta" slot="description"><slot name="description"></slot>${when(this.maxlength,(()=>html`<div class="${classMap({"character-count":!0,error:this.#o})}" data-test-maxlength>${this.value.length}/${this.maxlength}</div>`))}</div></glide-core-label>`}reportValidity(){this.isReportValidityOrSubmit=!0;const e=this.#t.reportValidity();return this.requestUpdate(),e}updated(){this.#e.value&&(this.#e.value.value=this.value),this.#n()}constructor(){super(),this.value="",this.label="",this.hideLabel=!1,this.orientation="horizontal",this.placeholder="",this.rows=2,this.required=!1,this.readonly=!1,this.disabled=!1,this.spellcheck=!1,this.autocapitalize="on",this.isBlurring=!1,this.isCheckingValidity=!1,this.isReportValidityOrSubmit=!1,this.#e=createRef(),this.#i=({formData:e})=>{this.value.length>0&&this.name&&this.value&&!this.disabled&&e.append(this.name,this.value)},this.#t=this.attachInternals(),this.addEventListener("invalid",this.#a)}#t;#e;#i;get#r(){return!this.disabled&&!this.readonly&&!this.validity.valid&&this.isReportValidityOrSubmit}get#o(){return!(!this.maxlength||this.disabled)&&this.value.length>this.maxlength}#d(){this.isBlurring=!0,this.reportValidity(),this.isBlurring=!1}#s(e){ow(this.#e.value,ow.object.instanceOf(HTMLTextAreaElement));const t=this.#e.value.value;this.value=t,this.#n(),this.dispatchEvent(new Event(e.type,e))}#l(){ow(this.#e.value,ow.object.instanceOf(HTMLTextAreaElement));const e=this.#e.value.value;this.value=e,this.#t.setFormValue(this.value),this.#n()}#a(e){if(e?.preventDefault(),this.isCheckingValidity||this.isBlurring)return;this.isReportValidityOrSubmit=!0;this.form?.querySelector(":invalid")===this&&this.focus()}async#n(){const e=this.#e.value;this.#o?this.#t.setValidity({...e?.validity,tooLong:!0}," ",e):this.#t.setValidity(e?.validity,e?.validationMessage,e),await this.updateComplete}};__decorate([property()],GlideCoreTextarea.prototype,"value",void 0),__decorate([property()],GlideCoreTextarea.prototype,"label",void 0),__decorate([property({attribute:"hide-label",type:Boolean})],GlideCoreTextarea.prototype,"hideLabel",void 0),__decorate([property({reflect:!0})],GlideCoreTextarea.prototype,"orientation",void 0),__decorate([property()],GlideCoreTextarea.prototype,"placeholder",void 0),__decorate([property({reflect:!0,type:Number})],GlideCoreTextarea.prototype,"rows",void 0),__decorate([property({type:Boolean})],GlideCoreTextarea.prototype,"required",void 0),__decorate([property({type:Boolean})],GlideCoreTextarea.prototype,"readonly",void 0),__decorate([property({type:Boolean})],GlideCoreTextarea.prototype,"disabled",void 0),__decorate([property({type:Number,converter:e=>e&&Number.parseInt(e,10)})],GlideCoreTextarea.prototype,"maxlength",void 0),__decorate([property({reflect:!0})],GlideCoreTextarea.prototype,"name",void 0),__decorate([property({type:Boolean})],GlideCoreTextarea.prototype,"spellcheck",void 0),__decorate([property()],GlideCoreTextarea.prototype,"autocapitalize",void 0),__decorate([property()],GlideCoreTextarea.prototype,"privateSplit",void 0),__decorate([state()],GlideCoreTextarea.prototype,"isBlurring",void 0),__decorate([state()],GlideCoreTextarea.prototype,"isCheckingValidity",void 0),__decorate([state()],GlideCoreTextarea.prototype,"isReportValidityOrSubmit",void 0),GlideCoreTextarea=__decorate([customElement("glide-core-textarea")],GlideCoreTextarea);export default GlideCoreTextarea;
|
@@ -1,4 +1,5 @@
|
|
1
|
-
|
1
|
+
/* eslint-disable @typescript-eslint/no-unused-expressions */
|
2
|
+
import { expect, fixture, html } from '@open-wc/testing';
|
2
3
|
import { sendKeys } from '@web/test-runner-commands';
|
3
4
|
import GlideCoreTextarea from './textarea.js';
|
4
5
|
GlideCoreTextarea.shadowRootOptions.mode = 'open';
|
@@ -81,3 +82,15 @@ it('is valid when filled in, disabled, and exceeds `maxlength`', async () => {
|
|
81
82
|
expect(textarea.checkValidity()).to.be.true;
|
82
83
|
expect(textarea.reportValidity()).to.be.true;
|
83
84
|
});
|
85
|
+
it('blurs the textarea and reports validity if `blur` is called', async () => {
|
86
|
+
const textarea = await fixture(html `<glide-core-textarea required></glide-core-textarea>`);
|
87
|
+
textarea.focus();
|
88
|
+
const textareaElement = textarea.shadowRoot?.querySelector('textarea');
|
89
|
+
expect(textarea.shadowRoot?.activeElement === textareaElement).to.be.true;
|
90
|
+
textarea.blur();
|
91
|
+
await textarea.updateComplete;
|
92
|
+
expect(textarea.shadowRoot?.activeElement === null).to.be.true;
|
93
|
+
expect(textarea.validity.valid).to.equal(false);
|
94
|
+
expect(textarea.shadowRoot?.querySelector('glide-core-label')?.error).to.be
|
95
|
+
.true;
|
96
|
+
});
|
package/dist/translations/en.js
CHANGED
@@ -1 +1 @@
|
|
1
|
-
const translation={$code:"en",$name:"English",$dir:"ltr",close:"Close",dismiss:"Dismiss",open:"Open",selectAll:"Select all",clearEntry:"Clear entry",moreInformation:"More information",notifications:"Notifications",removeTag:e=>`Remove tag: ${e}`};export default translation;
|
1
|
+
const translation={$code:"en",$name:"English",$dir:"ltr",close:"Close",dismiss:"Dismiss",open:"Open",selectAll:"Select all",clearEntry:"Clear entry",moreInformation:"More information",nextTab:"Next tab",notifications:"Notifications",previousTab:"Previous tab",removeTag:e=>`Remove tag: ${e}`};export default translation;
|
package/dist/translations/fr.js
CHANGED
@@ -1 +1 @@
|
|
1
|
-
const translation={$code:"fr",$name:"French",$dir:"ltr",close:"Fermer",dismiss:"Congédier",open:"Ouvrir",selectAll:"Tout sélectionner",clearEntry:"Effacer l’entrée",moreInformation:"Plus d’informations",notifications:"Notifications",removeTag:e=>`Supprimer la balise : ${e}`};export default translation;
|
1
|
+
const translation={$code:"fr",$name:"French",$dir:"ltr",close:"Fermer",dismiss:"Congédier",open:"Ouvrir",selectAll:"Tout sélectionner",clearEntry:"Effacer l’entrée",moreInformation:"Plus d’informations",notifications:"Notifications",nextTab:"",previousTab:"",removeTag:e=>`Supprimer la balise : ${e}`};export default translation;
|
package/dist/translations/ja.js
CHANGED
@@ -1 +1 @@
|
|
1
|
-
const translation={$code:"ja",$name:"Japanese",$dir:"ltr",close:"閉じる",dismiss:"無視",open:"オープン",selectAll:"すべて選択",clearEntry:"入力のクリア",moreInformation:"詳細情報",notifications:"通知",removeTag:e=>`タグを削除: ${e}`};export default translation;
|
1
|
+
const translation={$code:"ja",$name:"Japanese",$dir:"ltr",close:"閉じる",dismiss:"無視",open:"オープン",selectAll:"すべて選択",clearEntry:"入力のクリア",moreInformation:"詳細情報",notifications:"通知",nextTab:"",previousTab:"",removeTag:e=>`タグを削除: ${e}`};export default translation;
|
package/dist/tree.item.d.ts
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
import './tree.item.menu.js';
|
2
2
|
import { LitElement } from 'lit';
|
3
|
-
import GlideCoreMenu from './menu.js';
|
3
|
+
import type GlideCoreMenu from './menu.js';
|
4
4
|
declare global {
|
5
5
|
interface HTMLElementTagNameMap {
|
6
6
|
'glide-core-tree-item': GlideCoreTreeItem;
|
@@ -22,6 +22,8 @@ export default class GlideCoreTreeItem extends LitElement {
|
|
22
22
|
label: string;
|
23
23
|
level: number;
|
24
24
|
selected: boolean;
|
25
|
+
removeIndentation: boolean;
|
26
|
+
nonCollapsible: boolean;
|
25
27
|
menuSlotAssignedElements: GlideCoreMenu[];
|
26
28
|
prefixSlotAssignedElements: HTMLElement[];
|
27
29
|
slotElements: GlideCoreTreeItem[];
|
@@ -29,6 +31,7 @@ export default class GlideCoreTreeItem extends LitElement {
|
|
29
31
|
firstUpdated(): void;
|
30
32
|
focus(): void;
|
31
33
|
get hasChildTreeItems(): boolean;
|
34
|
+
get hasExpandIcon(): boolean;
|
32
35
|
render(): import("lit").TemplateResult<1>;
|
33
36
|
/**
|
34
37
|
* Traverses down the tree, selecting the passed-in item,
|
package/dist/tree.item.js
CHANGED
@@ -1 +1 @@
|
|
1
|
-
var __decorate=this&&this.__decorate||function(e,t,i,
|
1
|
+
var __decorate=this&&this.__decorate||function(e,t,i,o){var s,r=arguments.length,l=r<3?t:null===o?o=Object.getOwnPropertyDescriptor(t,i):o;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,i,o);else for(var n=e.length-1;n>=0;n--)(s=e[n])&&(l=(r<3?s(l):r>3?s(t,i,l):s(t,i))||l);return r>3&&l&&Object.defineProperty(t,i,l),l};import"./tree.item.menu.js";import{LitElement,html}from"lit";import{classMap}from"lit/directives/class-map.js";import{createRef,ref}from"lit/directives/ref.js";import{customElement,property,queryAssignedElements,state}from"lit/decorators.js";import{ifDefined}from"lit/directives/if-defined.js";import{when}from"lit/directives/when.js";import styles from"./tree.item.styles.js";let GlideCoreTreeItem=class GlideCoreTreeItem extends LitElement{constructor(){super(...arguments),this.expanded=!1,this.label="",this.level=1,this.selected=!1,this.removeIndentation=!1,this.nonCollapsible=!1,this.childTreeItems=[],this.#e=createRef()}static{this.shadowRootOptions={...LitElement.shadowRootOptions,delegatesFocus:!0,mode:"closed"}}static{this.styles=styles}firstUpdated(){this.#t()}focus(){this.#e.value?.focus()}get hasChildTreeItems(){return this.childTreeItems.length>0}get hasExpandIcon(){return this.hasChildTreeItems&&!this.nonCollapsible}render(){return html`<div class="${classMap({component:!0,expanded:this.expanded,selected:this.selected})}" role="treeitem" aria-label="${this.label}" aria-selected="${ifDefined(this.#i)}" aria-expanded="${ifDefined(this.#o)}"><div class="${classMap({"label-container":!0})}" tabindex="-1" ${ref(this.#e)}><div style="flex-shrink: 0; width:${this.#s};"></div>${when(!this.removeIndentation||this.hasExpandIcon,(()=>html`<div class="expand-icon-container">${when(this.hasExpandIcon,(()=>html`<div><svg aria-hidden="true" class="${classMap({"expand-icon":!0,"expand-icon-expanded":this.expanded})}" width="16" height="16" viewBox="0 0 24 24" fill="none"><path d="M9 18L15 12L9 6" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg></div>`))}</div>`))}<slot name="prefix"></slot><div class="label">${this.label}</div><div class="icon-container"><slot name="menu"></slot><slot name="suffix"></slot></div></div><div class="child-items" role="group"><slot></slot></div></div>`}selectItem(e){let t;for(const i of this.slotElements)if(e===i)i.setAttribute("selected","true"),t=i;else{i.removeAttribute("selected");const o=i.selectItem(e);o&&(t=o)}return t}setContainingBlock(e){for(const t of this.menuSlotAssignedElements)t.setContainingBlock(e)}toggleExpand(){this.expanded=!this.expanded}#e;get#o(){return this.hasChildTreeItems?this.expanded?"true":"false":void 0}get#i(){return this.hasChildTreeItems?void 0:this.selected?"true":"false"}get#s(){return 20*(this.level-1)+"px"}#t(){const e=[];for(const t of this.slotElements)t.level=this.level+1,e.push(t);this.childTreeItems=e}};__decorate([property({type:Boolean})],GlideCoreTreeItem.prototype,"expanded",void 0),__decorate([property({reflect:!0})],GlideCoreTreeItem.prototype,"label",void 0),__decorate([property({type:Number})],GlideCoreTreeItem.prototype,"level",void 0),__decorate([property({type:Boolean})],GlideCoreTreeItem.prototype,"selected",void 0),__decorate([property({type:Boolean,attribute:"remove-indentation"})],GlideCoreTreeItem.prototype,"removeIndentation",void 0),__decorate([property({type:Boolean,attribute:"non-collapsible"})],GlideCoreTreeItem.prototype,"nonCollapsible",void 0),__decorate([queryAssignedElements({slot:"menu"})],GlideCoreTreeItem.prototype,"menuSlotAssignedElements",void 0),__decorate([queryAssignedElements({slot:"prefix"})],GlideCoreTreeItem.prototype,"prefixSlotAssignedElements",void 0),__decorate([queryAssignedElements()],GlideCoreTreeItem.prototype,"slotElements",void 0),__decorate([queryAssignedElements({slot:"suffix"})],GlideCoreTreeItem.prototype,"suffixSlotAssignedElements",void 0),__decorate([state()],GlideCoreTreeItem.prototype,"childTreeItems",void 0),GlideCoreTreeItem=__decorate([customElement("glide-core-tree-item")],GlideCoreTreeItem);export default GlideCoreTreeItem;
|
package/dist/tree.item.menu.js
CHANGED
@@ -1 +1 @@
|
|
1
|
-
var __decorate=this&&this.__decorate||function(e,t,o,l){var r,n=arguments.length,i=n<3?t:null===l?l=Object.getOwnPropertyDescriptor(t,o):l;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)i=Reflect.decorate(e,t,o,l);else for(var m=e.length-1;m>=0;m--)(r=e[m])&&(i=(n<3?r(i):n>3?r(t,o,i):r(t,o))||i);return n>3&&i&&Object.defineProperty(t,o,i),i};import"./icon-button.js";import"./menu.js";import"./menu.options.js";import{LitElement,html}from"lit";import{createRef,ref}from"lit/directives/ref.js";import{customElement,property}from"lit/decorators.js";import{owSlot,owSlotType}from"./library/ow.js";import
|
1
|
+
var __decorate=this&&this.__decorate||function(e,t,o,l){var r,n=arguments.length,i=n<3?t:null===l?l=Object.getOwnPropertyDescriptor(t,o):l;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)i=Reflect.decorate(e,t,o,l);else for(var m=e.length-1;m>=0;m--)(r=e[m])&&(i=(n<3?r(i):n>3?r(t,o,i):r(t,o))||i);return n>3&&i&&Object.defineProperty(t,o,i),i};import"./icon-button.js";import"./menu.js";import"./menu.options.js";import{LitElement,html}from"lit";import{createRef,ref}from"lit/directives/ref.js";import{customElement,property}from"lit/decorators.js";import{owSlot,owSlotType}from"./library/ow.js";import GlideCoreMenuButton from"./menu.button.js";import GlideCoreMenuLink from"./menu.link.js";import ow from"./library/ow.js";import styles from"./tree.item.menu.styles.js";let GlideCoreTreeItemMenu=class GlideCoreTreeItemMenu extends LitElement{constructor(){super(...arguments),this.placement="bottom-start",this.#e=createRef(),this.#t=createRef()}static{this.shadowRootOptions={...LitElement.shadowRootOptions,mode:"closed"}}static{this.styles=styles}firstUpdated(){owSlot(this.#e.value),owSlotType(this.#e.value,[GlideCoreMenuButton,GlideCoreMenuLink])}render(){return html`<glide-core-menu class="component" placement="${this.placement}" ${ref(this.#t)}><glide-core-menu-options><slot @slotchange="${this.#o}" ${ref(this.#e)}></slot></glide-core-menu-options><glide-core-icon-button slot="target" variant="tertiary"><svg width="4" height="14" viewBox="0 0 4 18" fill="none" stroke="currentColor" stroke-width="2"><path d="M2 15C2.55228 15 3 15.4477 3 16C3 16.5523 2.55228 17 2 17C1.44772 17 1 16.5523 1 16C1 15.4477 1.44772 15 2 15Z"/><path d="M2 8C2.55228 8 3 8.44772 3 9C3 9.55228 2.55228 10 2 10C1.44772 10 1 9.55228 1 9C1 8.44772 1.44772 8 2 8Z"/><path d="M2 1C2.55228 1 3 1.44772 3 2C3 2.55228 2.55228 3 2 3C1.44772 3 1 2.55228 1 2C1 1.44772 1.44772 1 2 1Z"/></svg></glide-core-icon-button></glide-core-menu>`}setContainingBlock(e){ow(this.#t.value,ow.object.instanceOf(Element)),this.#t.value.setContainingBlock(e)}#e;#t;#o(){owSlot(this.#e.value),owSlotType(this.#e.value,[GlideCoreMenuButton,GlideCoreMenuLink])}};__decorate([property({reflect:!0})],GlideCoreTreeItemMenu.prototype,"placement",void 0),GlideCoreTreeItemMenu=__decorate([customElement("glide-core-tree-item-menu")],GlideCoreTreeItemMenu);export default GlideCoreTreeItemMenu;
|