@crowdstrike/glide-core 0.9.5 → 0.10.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 +17 -53
- package/dist/accordion.d.ts +10 -10
- package/dist/accordion.js +1 -1
- package/dist/accordion.stories.d.ts +0 -1
- package/dist/accordion.styles.js +36 -38
- package/dist/accordion.test.basics.js +13 -95
- package/dist/accordion.test.events.js +21 -33
- package/dist/accordion.test.focus.d.ts +1 -0
- package/dist/accordion.test.focus.js +11 -0
- package/dist/accordion.test.interactions.d.ts +1 -0
- package/dist/accordion.test.interactions.js +75 -0
- package/dist/button-group.button.d.ts +2 -4
- package/dist/button-group.button.js +1 -1
- package/dist/button-group.button.styles.js +6 -14
- package/dist/button-group.button.test.basics.js +8 -17
- package/dist/button-group.button.test.interactions.js +4 -4
- package/dist/button-group.d.ts +0 -2
- package/dist/button-group.test.basics.js +10 -10
- package/dist/button-group.test.events.js +2 -2
- package/dist/button-group.test.interactions.js +1 -1
- package/dist/button.d.ts +7 -10
- package/dist/button.js +1 -1
- package/dist/button.styles.js +4 -7
- package/dist/button.test.basics.js +10 -26
- package/dist/button.test.events.js +9 -9
- package/dist/checkbox-group.d.ts +3 -4
- package/dist/checkbox-group.js +1 -1
- package/dist/checkbox-group.styles.js +13 -1
- package/dist/checkbox-group.test.basics.js +8 -12
- package/dist/checkbox-group.test.focus.js +7 -7
- package/dist/checkbox-group.test.interactions.d.ts +1 -0
- package/dist/checkbox-group.test.interactions.js +82 -0
- package/dist/checkbox.d.ts +5 -4
- package/dist/checkbox.js +1 -1
- package/dist/checkbox.styles.js +35 -15
- package/dist/checkbox.test.basics.js +6 -15
- package/dist/checkbox.test.focus.js +4 -2
- package/dist/checkbox.test.interactions.js +11 -11
- package/dist/drawer.d.ts +2 -5
- package/dist/drawer.js +1 -1
- package/dist/drawer.test.accessibility.js +8 -8
- package/dist/drawer.test.basics.js +16 -16
- package/dist/drawer.test.closing.js +18 -16
- package/dist/drawer.test.events.js +13 -24
- package/dist/drawer.test.methods.js +22 -22
- package/dist/dropdown.d.ts +7 -5
- package/dist/dropdown.js +1 -1
- package/dist/dropdown.option.d.ts +1 -3
- package/dist/dropdown.option.js +1 -1
- package/dist/dropdown.option.styles.js +31 -19
- package/dist/dropdown.option.test.basics.js +4 -4
- package/dist/dropdown.styles.js +39 -3
- package/dist/dropdown.test.basics.js +8 -13
- package/dist/dropdown.test.basics.multiple.js +63 -31
- package/dist/dropdown.test.basics.single.js +49 -0
- package/dist/dropdown.test.focus.filterable.js +12 -3
- package/dist/dropdown.test.focus.js +18 -2
- package/dist/dropdown.test.interactions.filterable.js +121 -45
- package/dist/dropdown.test.interactions.multiple.js +71 -30
- package/dist/dropdown.test.interactions.single.js +26 -4
- package/dist/form-controls-layout.d.ts +0 -2
- package/dist/icon-button.d.ts +2 -4
- package/dist/icon-button.js +1 -1
- package/dist/icon-button.test.basics.js +14 -82
- package/dist/icon-button.test.focus.d.ts +1 -0
- package/dist/icon-button.test.focus.js +13 -0
- package/dist/input.d.ts +4 -5
- package/dist/input.js +1 -1
- package/dist/input.styles.js +4 -4
- package/dist/input.test.basics.js +0 -52
- package/dist/input.test.events.js +27 -27
- package/dist/input.test.focus.js +27 -26
- package/dist/input.test.form.js +6 -6
- package/dist/input.test.validity.js +130 -130
- package/dist/label.d.ts +1 -3
- package/dist/label.js +1 -1
- package/dist/label.styles.js +5 -6
- package/dist/label.test.basics.js +4 -4
- package/dist/library/ow.js +1 -1
- package/dist/menu.button.d.ts +0 -2
- package/dist/menu.button.test.basics.js +3 -3
- package/dist/menu.d.ts +1 -4
- package/dist/menu.js +1 -1
- package/dist/menu.link.d.ts +1 -2
- package/dist/menu.link.js +1 -1
- package/dist/menu.options.d.ts +0 -2
- package/dist/menu.test.events.js +6 -6
- package/dist/menu.test.focus.js +5 -18
- package/dist/menu.test.interactions.js +48 -24
- package/dist/modal.d.ts +6 -17
- package/dist/modal.icon-button.d.ts +0 -2
- package/dist/modal.icon-button.test.basics.js +3 -3
- package/dist/modal.js +1 -1
- package/dist/modal.styles.js +13 -19
- package/dist/modal.tertiary-icon.d.ts +0 -3
- package/dist/modal.tertiary-icon.test.basics.js +3 -3
- package/dist/modal.test.basics.js +9 -5
- package/dist/modal.test.close.js +2 -2
- package/dist/modal.test.events.js +2 -2
- package/dist/radio-group.d.ts +0 -3
- package/dist/radio-group.js +1 -1
- package/dist/radio-group.test.basics.js +61 -61
- package/dist/radio-group.test.events.js +13 -13
- package/dist/radio-group.test.focus.js +1 -1
- package/dist/radio-group.test.form.js +2 -2
- package/dist/radio-group.test.validity.js +12 -12
- package/dist/radio.d.ts +0 -3
- package/dist/radio.styles.js +4 -12
- package/dist/split-button.d.ts +8 -11
- package/dist/split-button.js +1 -1
- package/dist/split-button.primary-button.d.ts +21 -0
- package/dist/split-button.primary-button.js +1 -0
- package/dist/split-button.primary-button.styles.js +96 -0
- package/dist/split-button.primary-button.test.basics.d.ts +1 -0
- package/dist/split-button.primary-button.test.basics.js +31 -0
- package/dist/split-button.primary-button.test.focus.d.ts +1 -0
- package/dist/split-button.primary-button.test.focus.js +14 -0
- package/dist/split-button.primary-link.d.ts +19 -0
- package/dist/split-button.primary-link.js +1 -0
- package/dist/split-button.primary-link.test.basics.d.ts +1 -0
- package/dist/split-button.primary-link.test.basics.js +30 -0
- package/dist/split-button.primary-link.test.focus.d.ts +1 -0
- package/dist/split-button.primary-link.test.focus.js +15 -0
- package/dist/split-button.secondary-button.d.ts +25 -0
- package/dist/split-button.secondary-button.js +1 -0
- package/dist/split-button.secondary-button.styles.js +103 -0
- package/dist/split-button.secondary-button.test.basics.d.ts +1 -0
- package/dist/split-button.secondary-button.test.basics.js +58 -0
- package/dist/split-button.secondary-button.test.focus.d.ts +1 -0
- package/dist/split-button.secondary-button.test.focus.js +14 -0
- package/dist/split-button.secondary-button.test.interactions.d.ts +2 -0
- package/dist/split-button.secondary-button.test.interactions.js +30 -0
- package/dist/split-button.stories.d.ts +4 -3
- package/dist/split-button.styles.js +1 -94
- package/dist/split-button.test.basics.d.ts +2 -1
- package/dist/split-button.test.basics.js +67 -80
- package/dist/split-button.test.interactions.d.ts +4 -0
- package/dist/split-button.test.interactions.js +51 -0
- package/dist/styles/opacity-and-scale-animation.js +2 -6
- package/dist/styles/variables.css +1 -1
- package/dist/tab.d.ts +2 -11
- package/dist/tab.group.d.ts +2 -5
- package/dist/tab.group.styles.js +12 -15
- package/dist/tab.group.test.basics.js +49 -34
- package/dist/tab.group.test.interactions.js +17 -14
- package/dist/tab.panel.d.ts +0 -3
- package/dist/tab.test.basics.js +6 -5
- package/dist/tag.d.ts +6 -4
- package/dist/tag.js +1 -1
- package/dist/tag.styles.js +36 -36
- package/dist/tag.test.basics.js +16 -109
- package/dist/tag.test.events.js +12 -8
- package/dist/tag.test.focus.js +2 -3
- package/dist/tag.test.interactions.d.ts +1 -0
- package/dist/tag.test.interactions.js +34 -0
- package/dist/textarea.d.ts +2 -3
- package/dist/textarea.js +2 -2
- package/dist/textarea.test.basics.js +8 -8
- package/dist/textarea.test.events.js +55 -55
- package/dist/textarea.test.form.js +9 -9
- package/dist/textarea.test.validity.js +167 -135
- package/dist/toasts.d.ts +1 -5
- package/dist/toasts.test.basics.js +2 -1
- package/dist/toasts.toast.d.ts +1 -4
- package/dist/toasts.toast.js +1 -1
- package/dist/toasts.toast.styles.js +12 -0
- package/dist/toggle.d.ts +0 -2
- package/dist/toggle.styles.js +1 -5
- package/dist/toggle.test.basics.js +2 -2
- package/dist/toggle.test.interactions.js +7 -7
- package/dist/tooltip.d.ts +2 -1
- package/dist/tooltip.js +1 -1
- package/dist/tooltip.styles.js +37 -14
- package/dist/tooltip.test.basics.d.ts +1 -1
- package/dist/tooltip.test.basics.js +19 -19
- package/dist/tree.d.ts +0 -2
- package/dist/tree.item.d.ts +5 -7
- package/dist/tree.item.icon-button.d.ts +1 -4
- package/dist/tree.item.js +1 -1
- package/dist/tree.item.menu.d.ts +0 -2
- package/dist/tree.item.menu.test.basics.js +9 -9
- package/dist/tree.item.styles.js +4 -3
- package/dist/tree.item.test.basics.js +43 -31
- package/dist/tree.test.basics.js +29 -29
- package/dist/tree.test.focus.js +77 -74
- package/package.json +12 -14
- package/dist/split-container.d.ts +0 -31
- package/dist/split-container.js +0 -1
- package/dist/split-container.styles.js +0 -132
- package/dist/split-container.test.basics.d.ts +0 -3
- package/dist/split-container.test.basics.js +0 -445
- package/dist/split-container.test.interactions.d.ts +0 -1
- package/dist/split-container.test.interactions.js +0 -20
- package/dist/split-link.d.ts +0 -25
- package/dist/split-link.js +0 -1
- package/dist/split-link.test.basics.d.ts +0 -1
- package/dist/split-link.test.basics.js +0 -93
- package/dist/split-link.test.interactions.d.ts +0 -1
- package/dist/split-link.test.interactions.js +0 -20
- package/dist/status-indicator.d.ts +0 -30
- package/dist/status-indicator.js +0 -1
- package/dist/status-indicator.stories.d.ts +0 -5
- package/dist/status-indicator.styles.js +0 -58
- package/dist/status-indicator.test.basics.d.ts +0 -1
- package/dist/status-indicator.test.basics.js +0 -102
- /package/dist/{split-container.styles.d.ts → split-button.primary-button.styles.d.ts} +0 -0
- /package/dist/{status-indicator.styles.d.ts → split-button.secondary-button.styles.d.ts} +0 -0
@@ -4,177 +4,209 @@ import { sendKeys } from '@web/test-runner-commands';
|
|
4
4
|
import GlideCoreTextarea from './textarea.js';
|
5
5
|
GlideCoreTextarea.shadowRootOptions.mode = 'open';
|
6
6
|
it('is valid by default', async () => {
|
7
|
-
const
|
8
|
-
expect(
|
9
|
-
expect(
|
10
|
-
expect(
|
11
|
-
expect(
|
12
|
-
expect(
|
13
|
-
await elementUpdated(
|
14
|
-
expect(
|
7
|
+
const component = await fixture(html `<glide-core-textarea></glide-core-textarea>`);
|
8
|
+
expect(component.validity?.valid).to.be.true;
|
9
|
+
expect(component.validity?.valueMissing).to.be.false;
|
10
|
+
expect(component.validity?.tooLong).to.be.false;
|
11
|
+
expect(component.checkValidity()).to.be.true;
|
12
|
+
expect(component.reportValidity()).to.be.true;
|
13
|
+
await elementUpdated(component);
|
14
|
+
expect(component.shadowRoot
|
15
|
+
?.querySelector('textarea')
|
16
|
+
?.getAttribute('aria-invalid')).to.equal('false');
|
15
17
|
});
|
16
18
|
it('is valid after being filled in and required', async () => {
|
17
|
-
const
|
18
|
-
|
19
|
+
const component = await fixture(html `<glide-core-textarea required></glide-core-textarea>`);
|
20
|
+
component.focus();
|
19
21
|
await sendKeys({ type: 'value' });
|
20
|
-
expect(
|
21
|
-
expect(
|
22
|
-
expect(
|
23
|
-
expect(
|
24
|
-
expect(
|
25
|
-
await elementUpdated(
|
26
|
-
expect(
|
22
|
+
expect(component.validity?.valid).to.be.true;
|
23
|
+
expect(component.validity?.valueMissing).to.be.false;
|
24
|
+
expect(component.validity?.tooLong).to.be.false;
|
25
|
+
expect(component.checkValidity()).to.be.true;
|
26
|
+
expect(component.reportValidity()).to.be.true;
|
27
|
+
await elementUpdated(component);
|
28
|
+
expect(component.shadowRoot
|
29
|
+
?.querySelector('textarea')
|
30
|
+
?.getAttribute('aria-invalid')).to.equal('false');
|
27
31
|
});
|
28
32
|
it('is invalid if no value and required', async () => {
|
29
|
-
const
|
30
|
-
expect(
|
31
|
-
expect(
|
32
|
-
expect(
|
33
|
-
expect(
|
34
|
-
expect(
|
35
|
-
expect(
|
36
|
-
await elementUpdated(
|
37
|
-
expect(
|
33
|
+
const component = await fixture(html `<glide-core-textarea required></glide-core-textarea>`);
|
34
|
+
expect(component.validity?.valid).to.be.false;
|
35
|
+
expect(component.validity?.valueMissing).to.be.true;
|
36
|
+
expect(component.validity?.tooLong).to.be.false;
|
37
|
+
expect(component.willValidate).to.be.true;
|
38
|
+
expect(component.checkValidity()).to.be.false;
|
39
|
+
expect(component.reportValidity()).to.be.false;
|
40
|
+
await elementUpdated(component);
|
41
|
+
expect(component.shadowRoot
|
42
|
+
?.querySelector('textarea')
|
43
|
+
?.getAttribute('aria-invalid')).to.equal('true');
|
38
44
|
});
|
39
45
|
it('is valid when empty and does not exceed `maxlength`', async () => {
|
40
|
-
const
|
41
|
-
expect(
|
42
|
-
expect(
|
43
|
-
expect(
|
44
|
-
expect(
|
45
|
-
expect(
|
46
|
-
await elementUpdated(
|
47
|
-
expect(
|
46
|
+
const component = await fixture(html `<glide-core-textarea maxlength="3"></glide-core-textarea>`);
|
47
|
+
expect(component.validity?.valid).to.be.true;
|
48
|
+
expect(component.validity?.valueMissing).to.be.false;
|
49
|
+
expect(component.validity?.tooLong).to.be.false;
|
50
|
+
expect(component.checkValidity()).to.be.true;
|
51
|
+
expect(component.reportValidity()).to.be.true;
|
52
|
+
await elementUpdated(component);
|
53
|
+
expect(component.shadowRoot
|
54
|
+
?.querySelector('textarea')
|
55
|
+
?.getAttribute('aria-invalid')).to.equal('false');
|
48
56
|
});
|
49
57
|
it('is valid when filled in and does not exceed `maxlength`', async () => {
|
50
|
-
const
|
51
|
-
|
58
|
+
const component = await fixture(html `<glide-core-textarea maxlength="3"></glide-core-textarea>`);
|
59
|
+
component.focus();
|
52
60
|
await sendKeys({ type: 'abc' });
|
53
|
-
expect(
|
54
|
-
expect(
|
55
|
-
expect(
|
56
|
-
expect(
|
57
|
-
expect(
|
58
|
-
await elementUpdated(
|
59
|
-
expect(
|
61
|
+
expect(component.validity?.valid).to.be.true;
|
62
|
+
expect(component.validity?.valueMissing).to.be.false;
|
63
|
+
expect(component.validity?.tooLong).to.be.false;
|
64
|
+
expect(component.checkValidity()).to.be.true;
|
65
|
+
expect(component.reportValidity()).to.be.true;
|
66
|
+
await elementUpdated(component);
|
67
|
+
expect(component.shadowRoot
|
68
|
+
?.querySelector('textarea')
|
69
|
+
?.getAttribute('aria-invalid')).to.equal('false');
|
60
70
|
});
|
61
71
|
it('is invalid when filled in and exceeds `maxlength`', async () => {
|
62
|
-
const
|
63
|
-
|
72
|
+
const component = await fixture(html `<glide-core-textarea maxlength="3"></glide-core-textarea>`);
|
73
|
+
component.focus();
|
64
74
|
await sendKeys({ type: 'value' });
|
65
|
-
expect(
|
66
|
-
expect(
|
67
|
-
expect(
|
68
|
-
expect(
|
69
|
-
expect(
|
70
|
-
await elementUpdated(
|
71
|
-
expect(
|
75
|
+
expect(component.validity?.valid).to.be.false;
|
76
|
+
expect(component.validity?.valueMissing).to.be.false;
|
77
|
+
expect(component.validity?.tooLong).to.be.true;
|
78
|
+
expect(component.checkValidity()).to.be.false;
|
79
|
+
expect(component.reportValidity()).to.be.false;
|
80
|
+
await elementUpdated(component);
|
81
|
+
expect(component.shadowRoot
|
82
|
+
?.querySelector('textarea')
|
83
|
+
?.getAttribute('aria-invalid')).to.equal('true');
|
72
84
|
});
|
73
85
|
it('is valid if no value but required and disabled', async () => {
|
74
|
-
const
|
75
|
-
expect(
|
76
|
-
expect(
|
77
|
-
expect(
|
78
|
-
expect(
|
79
|
-
expect(
|
80
|
-
await elementUpdated(
|
81
|
-
expect(
|
86
|
+
const component = await fixture(html `<glide-core-textarea required disabled></glide-core-textarea>`);
|
87
|
+
expect(component.validity?.valid).to.be.true;
|
88
|
+
expect(component.validity?.valueMissing).to.be.false;
|
89
|
+
expect(component.validity?.tooLong).to.be.false;
|
90
|
+
expect(component.checkValidity()).to.be.true;
|
91
|
+
expect(component.reportValidity()).to.be.true;
|
92
|
+
await elementUpdated(component);
|
93
|
+
expect(component.shadowRoot
|
94
|
+
?.querySelector('textarea')
|
95
|
+
?.getAttribute('aria-invalid')).to.equal('false');
|
82
96
|
});
|
83
97
|
it('updates validity when `required` and `value` is changed programmatically', async () => {
|
84
|
-
const
|
85
|
-
expect(
|
86
|
-
expect(
|
87
|
-
expect(
|
88
|
-
expect(
|
89
|
-
await elementUpdated(
|
90
|
-
expect(
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
expect(
|
96
|
-
expect(
|
97
|
-
|
98
|
-
expect(
|
98
|
+
const component = await fixture(html `<glide-core-textarea label="Label" required></glide-core-textarea>`);
|
99
|
+
expect(component.validity?.valid).to.be.false;
|
100
|
+
expect(component.validity?.valueMissing).to.be.true;
|
101
|
+
expect(component.checkValidity()).to.be.false;
|
102
|
+
expect(component.reportValidity()).to.be.false;
|
103
|
+
await elementUpdated(component);
|
104
|
+
expect(component.shadowRoot
|
105
|
+
?.querySelector('textarea')
|
106
|
+
?.getAttribute('aria-invalid')).to.equal('true');
|
107
|
+
component.value = 'text';
|
108
|
+
await elementUpdated(component);
|
109
|
+
expect(component.validity?.valid).to.be.true;
|
110
|
+
expect(component.validity?.valueMissing).to.be.false;
|
111
|
+
expect(component.checkValidity()).to.be.true;
|
112
|
+
expect(component.reportValidity()).to.be.true;
|
113
|
+
await elementUpdated(component);
|
114
|
+
expect(component.shadowRoot
|
115
|
+
?.querySelector('textarea')
|
116
|
+
?.getAttribute('aria-invalid')).to.equal('false');
|
99
117
|
// Resetting the value to empty to ensure it goes
|
100
118
|
// back to an invalid state
|
101
|
-
|
102
|
-
await elementUpdated(
|
103
|
-
expect(
|
104
|
-
expect(
|
105
|
-
expect(
|
106
|
-
expect(
|
107
|
-
expect(
|
119
|
+
component.value = '';
|
120
|
+
await elementUpdated(component);
|
121
|
+
expect(component.validity?.valid).to.be.false;
|
122
|
+
expect(component.validity?.valueMissing).to.be.true;
|
123
|
+
expect(component.checkValidity()).to.be.false;
|
124
|
+
expect(component.reportValidity()).to.be.false;
|
125
|
+
expect(component.shadowRoot
|
126
|
+
?.querySelector('textarea')
|
127
|
+
?.getAttribute('aria-invalid')).to.equal('true');
|
108
128
|
});
|
109
129
|
it('is invalid when `value` is empty and `required` is set to `true` programmatically', async () => {
|
110
|
-
const
|
111
|
-
expect(
|
112
|
-
expect(
|
113
|
-
expect(
|
114
|
-
expect(
|
115
|
-
await elementUpdated(
|
116
|
-
expect(
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
expect(
|
122
|
-
expect(
|
123
|
-
expect(
|
130
|
+
const component = await fixture(html `<glide-core-textarea label="Label"></glide-core-textarea>`);
|
131
|
+
expect(component.validity?.valid).to.be.true;
|
132
|
+
expect(component.validity?.valueMissing).to.be.false;
|
133
|
+
expect(component.checkValidity()).to.be.true;
|
134
|
+
expect(component.reportValidity()).to.be.true;
|
135
|
+
await elementUpdated(component);
|
136
|
+
expect(component.shadowRoot
|
137
|
+
?.querySelector('textarea')
|
138
|
+
?.getAttribute('aria-invalid')).to.equal('false');
|
139
|
+
component.required = true;
|
140
|
+
await elementUpdated(component);
|
141
|
+
expect(component.validity?.valid).to.be.false;
|
142
|
+
expect(component.validity?.valueMissing).to.be.true;
|
143
|
+
expect(component.checkValidity()).to.be.false;
|
144
|
+
expect(component.reportValidity()).to.be.false;
|
145
|
+
expect(component.shadowRoot
|
146
|
+
?.querySelector('textarea')
|
147
|
+
?.getAttribute('aria-invalid')).to.equal('true');
|
124
148
|
});
|
125
149
|
it('is valid when `value` is empty and `required` is set to `false` programmatically', async () => {
|
126
|
-
const
|
127
|
-
expect(
|
128
|
-
expect(
|
129
|
-
expect(
|
130
|
-
expect(
|
131
|
-
await elementUpdated(
|
132
|
-
expect(
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
expect(
|
138
|
-
expect(
|
139
|
-
expect(
|
150
|
+
const component = await fixture(html `<glide-core-textarea label="Label" required></glide-core-textarea>`);
|
151
|
+
expect(component.validity?.valid).to.be.false;
|
152
|
+
expect(component.validity?.valueMissing).to.be.true;
|
153
|
+
expect(component.checkValidity()).to.be.false;
|
154
|
+
expect(component.reportValidity()).to.be.false;
|
155
|
+
await elementUpdated(component);
|
156
|
+
expect(component.shadowRoot
|
157
|
+
?.querySelector('textarea')
|
158
|
+
?.getAttribute('aria-invalid')).to.equal('true');
|
159
|
+
component.required = false;
|
160
|
+
await elementUpdated(component);
|
161
|
+
expect(component.validity?.valid).to.be.true;
|
162
|
+
expect(component.validity?.valueMissing).to.be.false;
|
163
|
+
expect(component.checkValidity()).to.be.true;
|
164
|
+
expect(component.reportValidity()).to.be.true;
|
165
|
+
expect(component.shadowRoot
|
166
|
+
?.querySelector('textarea')
|
167
|
+
?.getAttribute('aria-invalid')).to.equal('false');
|
140
168
|
});
|
141
169
|
it('is valid when filled in, disabled, and value exceeds `maxlength`', async () => {
|
142
|
-
const
|
170
|
+
const component = await fixture(html `<glide-core-textarea
|
143
171
|
value="value"
|
144
172
|
disabled
|
145
173
|
maxlength="3"
|
146
174
|
></glide-core-textarea>`);
|
147
|
-
expect(
|
148
|
-
expect(
|
149
|
-
expect(
|
150
|
-
expect(
|
151
|
-
expect(
|
152
|
-
await elementUpdated(
|
153
|
-
expect(
|
175
|
+
expect(component.validity?.valid).to.be.true;
|
176
|
+
expect(component.validity?.valueMissing).to.be.false;
|
177
|
+
expect(component.validity?.tooLong).to.be.false;
|
178
|
+
expect(component.checkValidity()).to.be.true;
|
179
|
+
expect(component.reportValidity()).to.be.true;
|
180
|
+
await elementUpdated(component);
|
181
|
+
expect(component.shadowRoot
|
182
|
+
?.querySelector('textarea')
|
183
|
+
?.getAttribute('aria-invalid')).to.equal('false');
|
154
184
|
});
|
155
185
|
it('is valid when filled in, readonly, and value exceeds `maxlength`', async () => {
|
156
|
-
const
|
186
|
+
const component = await fixture(html `<glide-core-textarea
|
157
187
|
value="value"
|
158
188
|
readonly
|
159
189
|
maxlength="3"
|
160
190
|
></glide-core-textarea>`);
|
161
|
-
expect(
|
162
|
-
expect(
|
163
|
-
expect(
|
164
|
-
expect(
|
165
|
-
expect(
|
166
|
-
await elementUpdated(
|
167
|
-
expect(
|
191
|
+
expect(component.validity?.valid).to.be.true;
|
192
|
+
expect(component.validity?.valueMissing).to.be.false;
|
193
|
+
expect(component.validity?.tooLong).to.be.false;
|
194
|
+
expect(component.checkValidity()).to.be.true;
|
195
|
+
expect(component.reportValidity()).to.be.true;
|
196
|
+
await elementUpdated(component);
|
197
|
+
expect(component.shadowRoot
|
198
|
+
?.querySelector('textarea')
|
199
|
+
?.getAttribute('aria-invalid')).to.equal('false');
|
168
200
|
});
|
169
201
|
it('blurs the textarea and reports validity if `blur` is called', async () => {
|
170
|
-
const
|
171
|
-
|
172
|
-
const textareaElement =
|
173
|
-
expect(
|
174
|
-
|
175
|
-
await
|
176
|
-
expect(
|
177
|
-
expect(
|
178
|
-
expect(
|
202
|
+
const component = await fixture(html `<glide-core-textarea required></glide-core-textarea>`);
|
203
|
+
component.focus();
|
204
|
+
const textareaElement = component.shadowRoot?.querySelector('textarea');
|
205
|
+
expect(component.shadowRoot?.activeElement === textareaElement).to.be.true;
|
206
|
+
component.blur();
|
207
|
+
await component.updateComplete;
|
208
|
+
expect(component.shadowRoot?.activeElement === null).to.be.true;
|
209
|
+
expect(component.validity.valid).to.be.false;
|
210
|
+
expect(component.shadowRoot?.querySelector('glide-core-private-label')?.error)
|
179
211
|
.to.be.true;
|
180
212
|
});
|
package/dist/toasts.d.ts
CHANGED
@@ -11,10 +11,6 @@ export interface Toast {
|
|
11
11
|
variant: 'informational' | 'success';
|
12
12
|
duration?: number;
|
13
13
|
}
|
14
|
-
/**
|
15
|
-
* @description A container and controller for toast messages.
|
16
|
-
|
17
|
-
*/
|
18
14
|
export default class GlideCoreToasts extends LitElement {
|
19
15
|
#private;
|
20
16
|
static shadowRootOptions: ShadowRootInit;
|
@@ -25,7 +21,7 @@ export default class GlideCoreToasts extends LitElement {
|
|
25
21
|
* Minimum: `5000`. Default: `5000`. For a Toast that never auto-hides, set to `Infinity`
|
26
22
|
* */
|
27
23
|
add(toast: Toast): import("./toasts.toast.js").default & {
|
28
|
-
variant: "
|
24
|
+
variant: "informational" | "success";
|
29
25
|
label: string;
|
30
26
|
description: string;
|
31
27
|
duration: number | undefined;
|
@@ -1,3 +1,4 @@
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-unused-expressions */
|
1
2
|
import { assert, expect, fixture, html } from '@open-wc/testing';
|
2
3
|
import GlideCoreToasts from './toasts.js';
|
3
4
|
GlideCoreToasts.shadowRootOptions.mode = 'open';
|
@@ -96,7 +97,7 @@ it('is hidden unless there are toasts displayed', async () => {
|
|
96
97
|
const component = await fixture(html `<glide-core-toasts></glide-core-toasts>`);
|
97
98
|
const shadowComponent = component.shadowRoot?.querySelector('.component');
|
98
99
|
assert(shadowComponent);
|
99
|
-
expect(shadowComponent.hasAttribute('popover')).to.
|
100
|
+
expect(shadowComponent.hasAttribute('popover')).to.be.false;
|
100
101
|
expect(getComputedStyle(shadowComponent).display).to.equal('none');
|
101
102
|
component.add({
|
102
103
|
label: 'Test toast',
|
package/dist/toasts.toast.d.ts
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
import './icon-button.js';
|
2
|
-
import './status-indicator.js';
|
3
2
|
import './tooltip.js';
|
4
3
|
import { LitElement } from 'lit';
|
5
4
|
import type { Toast } from './toasts.js';
|
@@ -10,9 +9,7 @@ declare global {
|
|
10
9
|
}
|
11
10
|
/**
|
12
11
|
* @private
|
13
|
-
*
|
14
|
-
* @description A message that animates onto the screen
|
15
|
-
*/
|
12
|
+
* */
|
16
13
|
export default class GlideCoreToast extends LitElement {
|
17
14
|
#private;
|
18
15
|
static shadowRootOptions: ShadowRootInit;
|
package/dist/toasts.toast.js
CHANGED
@@ -1 +1 @@
|
|
1
|
-
var __decorate=this&&this.__decorate||function(e,t,o,i){var s,r=arguments.length,l=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,o,i);else for(var
|
1
|
+
var __decorate=this&&this.__decorate||function(e,t,o,i){var s,r=arguments.length,l=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,o,i);else for(var n=e.length-1;n>=0;n--)(s=e[n])&&(l=(r<3?s(l):r>3?s(t,o,l):s(t,o))||l);return r>3&&l&&Object.defineProperty(t,o,l),l};import"./icon-button.js";import"./tooltip.js";import{LitElement,html}from"lit";import{LocalizeController}from"./library/localize.js";import{classMap}from"lit/directives/class-map.js";import{createRef,ref}from"lit/directives/ref.js";import{customElement,property}from"lit/decorators.js";import{when}from"lit/directives/when.js";import styles from"./toasts.toast.styles.js";let GlideCoreToast=class GlideCoreToast extends LitElement{constructor(){super(...arguments),this.duration=5e3,this.#e=createRef(),this.#t=new LocalizeController(this)}static{this.shadowRootOptions={...LitElement.shadowRootOptions,mode:"closed"}}static{this.styles=styles}close(){const e=this.#e?.value;e?.addEventListener("transitionend",(()=>{e?.classList?.remove("open"),e?.classList?.remove("closing"),e?.classList?.add("closed"),this.dispatchEvent(new Event("close",{bubbles:!0}))}),{once:!0}),e?.classList?.add("closing")}firstUpdated(){requestAnimationFrame((()=>{this.open()}))}open(){const e=Math.max(this.duration??0,5e3);e<Number.POSITIVE_INFINITY&&setTimeout((()=>{this.close()}),e),this.#e?.value?.classList?.add("open")}render(){return html`<div class="${classMap({component:!0,[this.variant]:!0})}" role="alert" aria-labelledby="label description" ${ref(this.#e)}>${when("success"===this.#o,(()=>html`<svg aria-hidden="true" class="${classMap({icon:!0,success:!0})}" fill="none" height="16" width="16" viewBox="0 0 24 24"><path clip-rule="evenodd" d="M12 23C18.0751 23 23 18.0751 23 12C23 5.92487 18.0751 1 12 1C5.92487 1 1 5.92487 1 12C1 18.0751 5.92487 23 12 23ZM16.7071 9.70711C17.0976 9.31658 17.0976 8.68342 16.7071 8.29289C16.3166 7.90237 15.6834 7.90237 15.2929 8.29289L10 13.5858L7.70711 11.2929C7.31658 10.9024 6.68342 10.9024 6.29289 11.2929C5.90237 11.6834 5.90237 12.3166 6.29289 12.7071L9.29289 15.7071C9.68342 16.0976 10.3166 16.0976 10.7071 15.7071L16.7071 9.70711Z" fill="currentColor" fill-rule="evenodd"/></svg>`),(()=>html`<svg aria-hidden="true" class="${classMap({icon:!0,"warning-informational":!0})}" fill="none" height="16" width="16" viewBox="0 0 24 24"><path clip-rule="evenodd" d="M12 23C18.0751 23 23 18.0751 23 12C23 5.92487 18.0751 1 12 1C5.92487 1 1 5.92487 1 12C1 18.0751 5.92487 23 12 23ZM13 8C13 7.44772 12.5523 7 12 7C11.4477 7 11 7.44772 11 8V12C11 12.5523 11.4477 13 12 13C12.5523 13 13 12.5523 13 12V8ZM12 17C12.5523 17 13 16.5523 13 16C13 15.4477 12.5523 15 12 15C11.4477 15 11 15.4477 11 16C11 16.5523 11.4477 17 12 17Z" fill="currentColor" fill-rule="evenodd"/></svg>`))}<div class="label" id="label">${this.label}</div><glide-core-icon-button label="${this.#t.term("close")}" variant="tertiary" class="close-button" @click="${this.#i}"><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><path d="M6 6L18 18" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><path d="M18 6L6 18" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg></glide-core-icon-button><div class="description" id="description">${this.description}</div></div>`}#e;#t;#i(){this.close()}get#o(){return{informational:"warning-informational",success:"success"}[this.variant]}};__decorate([property({reflect:!0})],GlideCoreToast.prototype,"label",void 0),__decorate([property({reflect:!0})],GlideCoreToast.prototype,"description",void 0),__decorate([property()],GlideCoreToast.prototype,"variant",void 0),__decorate([property({type:Number})],GlideCoreToast.prototype,"duration",void 0),GlideCoreToast=__decorate([customElement("glide-core-toast")],GlideCoreToast);export default GlideCoreToast;
|
@@ -42,10 +42,13 @@ import{css}from"lit";export default[css`
|
|
42
42
|
}
|
43
43
|
|
44
44
|
.icon {
|
45
|
+
block-size: 1.25rem;
|
45
46
|
grid-column: 1;
|
47
|
+
inline-size: 1.25rem;
|
46
48
|
}
|
47
49
|
|
48
50
|
.label {
|
51
|
+
color: var(--glide-core-text-body-2);
|
49
52
|
font-size: var(--glide-core-heading-xs-font-size);
|
50
53
|
font-weight: var(--glide-core-heading-xs-font-weight);
|
51
54
|
grid-column: 2;
|
@@ -58,6 +61,15 @@ import{css}from"lit";export default[css`
|
|
58
61
|
}
|
59
62
|
|
60
63
|
.description {
|
64
|
+
color: var(--glide-core-text-body-2);
|
61
65
|
grid-column: 2;
|
62
66
|
}
|
67
|
+
|
68
|
+
.success {
|
69
|
+
color: var(--glide-core-status-success);
|
70
|
+
}
|
71
|
+
|
72
|
+
.warning-informational {
|
73
|
+
color: var(--glide-core-status-warning-informational);
|
74
|
+
}
|
63
75
|
`];
|
package/dist/toggle.d.ts
CHANGED
package/dist/toggle.styles.js
CHANGED
@@ -31,10 +31,6 @@ Use the ":checked" pseudo class on the host and throughout when browsers support
|
|
31
31
|
justify-content: center;
|
32
32
|
position: relative;
|
33
33
|
|
34
|
-
&:has(input:focus-visible) {
|
35
|
-
outline-offset: 4px;
|
36
|
-
}
|
37
|
-
|
38
34
|
&:has(input:checked:not(:disabled)) {
|
39
35
|
background-color: var(--glide-core-surface-primary);
|
40
36
|
border-color: transparent;
|
@@ -45,7 +41,7 @@ Use the ":checked" pseudo class on the host and throughout when browsers support
|
|
45
41
|
}
|
46
42
|
|
47
43
|
&:has(input:disabled) {
|
48
|
-
background-color: var(--glide-core-surface-disabled);
|
44
|
+
background-color: var(--glide-core-surface-unselected-disabled);
|
49
45
|
|
50
46
|
&::before {
|
51
47
|
box-shadow: none;
|
@@ -58,12 +58,12 @@ it('can have a tooltip', async () => {
|
|
58
58
|
it('can be checked', async () => {
|
59
59
|
const component = await fixture(html `<glide-core-toggle checked></glide-core-toggle> `);
|
60
60
|
expect(component.hasAttribute('checked')).to.be.true;
|
61
|
-
expect(component.checked).to.
|
61
|
+
expect(component.checked).to.be.true;
|
62
62
|
const input = component.shadowRoot?.querySelector('[data-test="input"]');
|
63
63
|
expect(input?.getAttribute('aria-checked')).to.equal('true');
|
64
64
|
});
|
65
65
|
it('can be disabled', async () => {
|
66
66
|
const component = await fixture(html `<glide-core-toggle disabled></glide-core-toggle> `);
|
67
67
|
expect(component.hasAttribute('disabled')).to.be.true;
|
68
|
-
expect(component.disabled).to.
|
68
|
+
expect(component.disabled).to.be.true;
|
69
69
|
});
|
@@ -6,7 +6,7 @@ it('is checked after being clicked', async () => {
|
|
6
6
|
const component = await fixture(html `<glide-core-toggle label="Label"></glide-core-toggle>`);
|
7
7
|
component.click();
|
8
8
|
await elementUpdated(component);
|
9
|
-
expect(component.checked).to.
|
9
|
+
expect(component.checked).to.be.true;
|
10
10
|
expect(component.hasAttribute('checked')).to.be.false;
|
11
11
|
const input = component.shadowRoot?.querySelector('[data-test="input"]');
|
12
12
|
expect(input?.getAttribute('aria-checked')).to.equal('true');
|
@@ -15,7 +15,7 @@ it('is unchecked after being clicked', async () => {
|
|
15
15
|
const component = await fixture(html `<glide-core-toggle label="Label" checked></glide-core-toggle>`);
|
16
16
|
component.click();
|
17
17
|
await elementUpdated(component);
|
18
|
-
expect(component.checked).to.
|
18
|
+
expect(component.checked).to.be.false;
|
19
19
|
expect(component.hasAttribute('checked')).to.be.true;
|
20
20
|
const input = component.shadowRoot?.querySelector('[data-test="input"]');
|
21
21
|
expect(input?.getAttribute('aria-checked')).to.equal('false');
|
@@ -28,7 +28,7 @@ it('is still checked after being clicked when checked but disabled', async () =>
|
|
28
28
|
></glide-core-toggle>`);
|
29
29
|
component.click();
|
30
30
|
await elementUpdated(component);
|
31
|
-
expect(component.checked).to.
|
31
|
+
expect(component.checked).to.be.true;
|
32
32
|
expect(component.hasAttribute('checked')).to.be.true;
|
33
33
|
const input = component.shadowRoot?.querySelector('[data-test="input"]');
|
34
34
|
expect(input?.getAttribute('aria-checked')).to.equal('true');
|
@@ -38,7 +38,7 @@ it('is still unchecked after being clicked when unchecked and disabled', async (
|
|
38
38
|
component.click();
|
39
39
|
await elementUpdated(component);
|
40
40
|
expect(component.hasAttribute('checked')).to.be.false;
|
41
|
-
expect(component.checked).to.
|
41
|
+
expect(component.checked).to.be.false;
|
42
42
|
const input = component.shadowRoot?.querySelector('[data-test="input"]');
|
43
43
|
expect(input?.getAttribute('aria-checked')).to.equal('false');
|
44
44
|
});
|
@@ -51,7 +51,7 @@ it('is unchecked after being clicked then forcibly unchecked via a "change" list
|
|
51
51
|
component.click();
|
52
52
|
await elementUpdated(component);
|
53
53
|
expect(component.hasAttribute('checked')).to.be.false;
|
54
|
-
expect(component.checked).to.
|
54
|
+
expect(component.checked).to.be.false;
|
55
55
|
const input = component.shadowRoot?.querySelector('[data-test="input"]');
|
56
56
|
expect(input?.getAttribute('aria-checked')).to.equal('false');
|
57
57
|
});
|
@@ -64,7 +64,7 @@ it('is unchecked after being clicked then forcibly unchecked via an "input" list
|
|
64
64
|
component.click();
|
65
65
|
await elementUpdated(component);
|
66
66
|
expect(component.hasAttribute('checked')).to.be.false;
|
67
|
-
expect(component.checked).to.
|
67
|
+
expect(component.checked).to.be.false;
|
68
68
|
const input = component.shadowRoot?.querySelector('[data-test="input"]');
|
69
69
|
expect(input?.getAttribute('aria-checked')).to.equal('false');
|
70
70
|
});
|
@@ -75,7 +75,7 @@ it('remains unchecked when its "click" event is canceled', async () => {
|
|
75
75
|
});
|
76
76
|
component.click();
|
77
77
|
expect(component.hasAttribute('checked')).to.be.false;
|
78
|
-
expect(component.checked).to.
|
78
|
+
expect(component.checked).to.be.false;
|
79
79
|
const input = component.shadowRoot?.querySelector('[data-test="input"]');
|
80
80
|
expect(input?.getAttribute('aria-checked')).to.equal('false');
|
81
81
|
});
|
package/dist/tooltip.d.ts
CHANGED
@@ -5,7 +5,7 @@ declare global {
|
|
5
5
|
}
|
6
6
|
}
|
7
7
|
/**
|
8
|
-
* @slot - The content of the tooltip.
|
8
|
+
* @slot - The primary content of the tooltip.
|
9
9
|
* @slot target - The element to which the tooltip should anchor.
|
10
10
|
*/
|
11
11
|
export default class GlideCoreTooltip extends LitElement {
|
@@ -18,6 +18,7 @@ export default class GlideCoreTooltip extends LitElement {
|
|
18
18
|
get open(): boolean;
|
19
19
|
set open(isOpen: boolean);
|
20
20
|
placement?: 'bottom' | 'left' | 'right' | 'top';
|
21
|
+
shortcut: string[];
|
21
22
|
disconnectedCallback(): void;
|
22
23
|
firstUpdated(): void;
|
23
24
|
render(): import("lit").TemplateResult<1>;
|
package/dist/tooltip.js
CHANGED
@@ -1 +1 @@
|
|
1
|
-
var __decorate=this&&this.__decorate||function(e,t,o,
|
1
|
+
var __decorate=this&&this.__decorate||function(e,t,o,i){var l,s=arguments.length,a=s<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(e,t,o,i);else for(var r=e.length-1;r>=0;r--)(l=e[r])&&(a=(s<3?l(a):s>3?l(t,o,a):l(t,o))||a);return s>3&&a&&Object.defineProperty(t,o,a),a};import{LitElement,html}from"lit";import{arrow,autoUpdate,computePosition,flip,limitShift,offset,shift}from"@floating-ui/dom";import{choose}from"lit/directives/choose.js";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{map}from"lit/directives/map.js";import ow,{owSlot}from"./library/ow.js";import styles from"./tooltip.styles.js";let GlideCoreTooltip=class GlideCoreTooltip extends LitElement{constructor(){super(...arguments),this.offset=4,this.shortcut=[],this.effectivePlacement=this.placement??"bottom",this.#e=createRef(),this.#t=createRef(),this.#o=!1,this.#i=!1,this.#l=createRef(),this.#s=createRef(),this.#a=createRef()}static{this.shadowRootOptions={...LitElement.shadowRootOptions,delegatesFocus:!0,mode:"closed"}}static{this.styles=styles}get disabled(){return this.#o}set disabled(e){this.#o=e,this.open&&!e?this.#r():this.#n()}get open(){return this.#i}set open(e){this.#i=e,e&&!this.disabled?this.#r():this.#n()}disconnectedCallback(){super.disconnectedCallback(),clearTimeout(this.#f),clearTimeout(this.#h)}firstUpdated(){owSlot(this.#t.value),owSlot(this.#s.value),ow(this.#a.value,ow.object.instanceOf(HTMLElement)),this.#a.value.popover="manual",this.open&&!this.disabled&&this.#r()}render(){return html`<div class="component" data-test="component" @mouseover="${this.#p}" @mouseout="${this.#c}"><div aria-labelledby="${ifDefined(this.disabled?void 0:"tooltip")}" class="target" data-test="target" slot="target" @focusin="${this.#d}" @focusout="${this.#m}" @keydown="${this.#u}" ${ref(this.#l)}><slot @slotchange="${this.#v}" ${ref(this.#s)} name="target"></slot></div><div class="${classMap({tooltip:!0,[this.effectivePlacement]:!0})}" id="tooltip" data-test="tooltip" data-open-delay="300" data-close-delay="200" role="${ifDefined(this.disabled?void 0:"tooltip")}" ${ref(this.#a)}><div class="${classMap({arrow:!0,[this.effectivePlacement]:!0})}" data-test="arrow" ${ref(this.#e)}>${choose(this.effectivePlacement,[["top",()=>html`<svg viewBox="0 0 10 6" fill="none"><path d="M4.23178 5.07814C4.63157 5.55789 5.36843 5.55789 5.76822 5.07813L10 -7.9486e-08L-2.62268e-07 3.57628e-07L4.23178 5.07814Z" fill="#212121"/></svg>`],["right",()=>html`<svg viewBox="0 0 6 10" fill="none"><path d="M0.921865 4.23178C0.442111 4.63157 0.442112 5.36843 0.921866 5.76822L6 10L6 -2.62268e-07L0.921865 4.23178Z" fill="#212121"/></svg>`],["bottom",()=>html`<svg viewBox="0 0 10 6" fill="none"><path d="M4.23178 0.921865C4.63157 0.442111 5.36843 0.442112 5.76822 0.921866L10 6L-2.62268e-07 6L4.23178 0.921865Z" fill="#212121"/></svg>`],["left",()=>html`<svg viewBox="0 0 6 10" fill="none"><path d="M5.07814 4.23178C5.55789 4.63157 5.55789 5.36843 5.07813 5.76822L-4.37114e-07 10L0 -2.62268e-07L5.07814 4.23178Z" fill="#212121"/></svg>`]])}</div><span aria-label="${ifDefined(this.disabled?void 0:"Tooltip: ")}"></span><div class="${classMap({content:!0,reversed:"left"===this.effectivePlacement})}"><slot class="default-slot" @slotchange="${this.#g}" ${ref(this.#t)}></slot><kbd class="${classMap({shortcut:!0,reversed:"left"===this.effectivePlacement,visible:this.shortcut.length>0})}" data-test="shortcut">${1===this.shortcut.length?this.shortcut.at(0):map(this.shortcut,((e,t)=>html`<kbd>${e}</kbd> ${t===this.shortcut.length-1?"":" + "}`))}</kbd></div></div></div>`}#e;#R;#f;#t;#o;#i;#h;#l;#s;#a;#E(){clearTimeout(this.#f)}#n(){this.#a.value?.hidePopover(),this.#R&&this.#R()}#g(){owSlot(this.#t.value)}#d(){this.open=!0}#m(){this.open=!1}#u(e){"Escape"===e.key&&(this.open=!1)}#c(){this.#w(),clearTimeout(this.#h)}#p(){ow(this.#a.value,ow.object.instanceOf(HTMLElement)),this.#E(),this.#h=setTimeout((()=>{this.open=!0}),Number(this.#a.value.dataset.openDelay))}#v(){owSlot(this.#s.value)}#w(){ow(this.#a.value,ow.object.instanceOf(HTMLElement)),this.#f=setTimeout((()=>{this.open=!1}),Number(this.#a.value.dataset.closeDelay))}#r(){this.disabled||(this.#R?.(),this.#l.value&&this.#a.value&&(this.#R=autoUpdate(this.#l.value,this.#a.value,(()=>{(async()=>{if(this.#l.value&&this.#a.value&&this.#e.value){const{x:e,y:t,placement:o,middlewareData:i}=await computePosition(this.#l.value,this.#a.value,{placement:this.placement,middleware:[offset(this.offset),flip({fallbackStrategy:"initialPlacement"}),shift({limiter:limitShift({offset:20})}),arrow({element:this.#e.value})]});Object.assign(this.#a.value.style,{left:`${e}px`,top:`${t}px`}),Object.assign(this.#e.value.style,{left:i.arrow?.x?`${i.arrow.x}px`:null,top:i.arrow?.y?`${i.arrow.y}px`:null}),this.effectivePlacement=o,this.#a.value.showPopover()}})()}))))}};__decorate([property({reflect:!0,type:Boolean})],GlideCoreTooltip.prototype,"disabled",null),__decorate([property({reflect:!0,type:Number})],GlideCoreTooltip.prototype,"offset",void 0),__decorate([property({reflect:!0,type:Boolean})],GlideCoreTooltip.prototype,"open",null),__decorate([property()],GlideCoreTooltip.prototype,"placement",void 0),__decorate([property({reflect:!0,type:Array})],GlideCoreTooltip.prototype,"shortcut",void 0),__decorate([state()],GlideCoreTooltip.prototype,"effectivePlacement",void 0),GlideCoreTooltip=__decorate([customElement("glide-core-tooltip")],GlideCoreTooltip);export default GlideCoreTooltip;
|