@crowdstrike/glide-core 0.7.0 → 0.9.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.
Files changed (203) hide show
  1. package/README.md +44 -5
  2. package/dist/accordion.test.basics.js +1 -0
  3. package/dist/accordion.test.events.js +1 -0
  4. package/dist/button-group.button.d.ts +14 -15
  5. package/dist/button-group.button.js +1 -1
  6. package/dist/button-group.button.styles.js +75 -52
  7. package/dist/button-group.button.test.basics.d.ts +1 -1
  8. package/dist/button-group.button.test.basics.js +84 -147
  9. package/dist/button-group.button.test.events.js +9 -67
  10. package/dist/button-group.button.test.focus.js +13 -0
  11. package/dist/button-group.button.test.interactions.d.ts +1 -0
  12. package/dist/button-group.button.test.interactions.js +42 -0
  13. package/dist/button-group.d.ts +7 -10
  14. package/dist/button-group.js +1 -1
  15. package/dist/button-group.stories.d.ts +1 -5
  16. package/dist/button-group.styles.js +18 -6
  17. package/dist/button-group.test.basics.js +114 -234
  18. package/dist/button-group.test.events.js +211 -263
  19. package/dist/button-group.test.focus.d.ts +1 -0
  20. package/dist/button-group.test.focus.js +39 -0
  21. package/dist/button-group.test.interactions.d.ts +1 -0
  22. package/dist/button-group.test.interactions.js +91 -0
  23. package/dist/button.test.basics.js +2 -1
  24. package/dist/button.test.events.js +1 -0
  25. package/dist/button.test.form.js +1 -0
  26. package/dist/checkbox-group.js +1 -1
  27. package/dist/checkbox-group.styles.js +1 -1
  28. package/dist/checkbox-group.test.basics.js +2 -1
  29. package/dist/checkbox-group.test.events.js +5 -4
  30. package/dist/checkbox-group.test.focus.js +5 -3
  31. package/dist/checkbox-group.test.form.js +1 -0
  32. package/dist/checkbox-group.test.validity.js +1 -0
  33. package/dist/checkbox.d.ts +7 -1
  34. package/dist/checkbox.js +1 -1
  35. package/dist/checkbox.styles.js +11 -3
  36. package/dist/checkbox.test.basics.js +1 -0
  37. package/dist/checkbox.test.events.js +5 -4
  38. package/dist/checkbox.test.focus.js +2 -2
  39. package/dist/checkbox.test.form.js +1 -0
  40. package/dist/{checkbox.test.states.js → checkbox.test.interactions.js} +25 -1
  41. package/dist/checkbox.test.validity.js +1 -0
  42. package/dist/drawer.js +1 -1
  43. package/dist/drawer.test.basics.js +1 -0
  44. package/dist/drawer.test.closing.js +1 -0
  45. package/dist/drawer.test.events.js +1 -0
  46. package/dist/drawer.test.methods.js +1 -0
  47. package/dist/dropdown.d.ts +6 -4
  48. package/dist/dropdown.js +1 -1
  49. package/dist/dropdown.option.d.ts +7 -2
  50. package/dist/dropdown.option.js +1 -1
  51. package/dist/dropdown.option.styles.js +13 -0
  52. package/dist/dropdown.option.test.basics.js +7 -3
  53. package/dist/dropdown.option.test.basics.multiple.js +1 -0
  54. package/dist/dropdown.option.test.basics.single.js +1 -0
  55. package/dist/dropdown.option.test.events.js +2 -1
  56. package/dist/dropdown.option.test.focus.js +1 -1
  57. package/dist/dropdown.option.test.interactions.multiple.js +2 -54
  58. package/dist/dropdown.option.test.interactions.single.js +52 -9
  59. package/dist/dropdown.styles.js +20 -19
  60. package/dist/dropdown.test.basics.filterable.js +1 -0
  61. package/dist/dropdown.test.basics.js +144 -2
  62. package/dist/dropdown.test.basics.multiple.js +6 -3
  63. package/dist/dropdown.test.basics.single.js +1 -1
  64. package/dist/dropdown.test.events.filterable.js +74 -0
  65. package/dist/dropdown.test.events.js +50 -160
  66. package/dist/dropdown.test.events.multiple.js +268 -10
  67. package/dist/dropdown.test.events.single.js +202 -4
  68. package/dist/dropdown.test.focus.filterable.js +9 -5
  69. package/dist/dropdown.test.focus.js +2 -1
  70. package/dist/dropdown.test.focus.multiple.js +1 -2
  71. package/dist/dropdown.test.focus.single.js +1 -1
  72. package/dist/dropdown.test.form.js +1 -0
  73. package/dist/dropdown.test.form.multiple.js +1 -0
  74. package/dist/dropdown.test.form.single.js +1 -0
  75. package/dist/dropdown.test.interactions.filterable.js +69 -11
  76. package/dist/dropdown.test.interactions.js +95 -5
  77. package/dist/dropdown.test.interactions.multiple.js +203 -6
  78. package/dist/dropdown.test.interactions.single.js +69 -6
  79. package/dist/dropdown.test.validity.js +1 -0
  80. package/dist/form-controls-layout.test.basics.js +2 -1
  81. package/dist/icon-button.test.basics.js +2 -1
  82. package/dist/icons/checked.d.ts +1 -1
  83. package/dist/icons/checked.js +1 -1
  84. package/dist/icons/magnifying-glass.js +1 -1
  85. package/dist/input.d.ts +0 -6
  86. package/dist/input.js +1 -1
  87. package/dist/input.styles.js +7 -2
  88. package/dist/input.test.basics.js +20 -5
  89. package/dist/input.test.events.js +5 -4
  90. package/dist/input.test.focus.js +5 -4
  91. package/dist/input.test.form.js +1 -0
  92. package/dist/input.test.translations.d.ts +1 -0
  93. package/dist/input.test.translations.js +38 -0
  94. package/dist/input.test.validity.js +134 -4
  95. package/dist/label.d.ts +1 -1
  96. package/dist/label.js +1 -1
  97. package/dist/label.styles.js +29 -20
  98. package/dist/label.test.basics.js +27 -24
  99. package/dist/library/expect-argument-error.js +1 -1
  100. package/dist/library/localize.d.ts +5 -1
  101. package/dist/library/ow.test.d.ts +2 -1
  102. package/dist/library/ow.test.js +8 -3
  103. package/dist/menu.button.test.basics.js +1 -0
  104. package/dist/menu.d.ts +3 -5
  105. package/dist/menu.js +1 -1
  106. package/dist/menu.link.test.basics.js +1 -0
  107. package/dist/menu.options.test.basics.js +3 -2
  108. package/dist/menu.styles.js +1 -15
  109. package/dist/menu.test.basics.d.ts +1 -2
  110. package/dist/menu.test.basics.js +23 -6
  111. package/dist/menu.test.events.d.ts +1 -0
  112. package/dist/menu.test.events.js +2 -1
  113. package/dist/menu.test.focus.d.ts +1 -0
  114. package/dist/menu.test.focus.js +14 -6
  115. package/dist/menu.test.interactions.js +213 -56
  116. package/dist/modal.icon-button.test.basics.js +2 -1
  117. package/dist/modal.js +1 -1
  118. package/dist/modal.styles.js +18 -13
  119. package/dist/modal.tertiary-icon.d.ts +0 -1
  120. package/dist/modal.tertiary-icon.js +1 -1
  121. package/dist/modal.tertiary-icon.test.basics.js +2 -1
  122. package/dist/modal.test.accessibility.js +1 -0
  123. package/dist/modal.test.basics.js +2 -1
  124. package/dist/modal.test.close.js +1 -0
  125. package/dist/modal.test.events.js +11 -10
  126. package/dist/modal.test.lock-scroll.js +1 -0
  127. package/dist/modal.test.methods.js +1 -0
  128. package/dist/modal.test.scrollbars.js +1 -0
  129. package/dist/radio-group.js +1 -1
  130. package/dist/radio-group.styles.js +1 -1
  131. package/dist/radio-group.test.basics.js +1 -0
  132. package/dist/radio-group.test.events.js +1 -0
  133. package/dist/radio-group.test.focus.js +4 -3
  134. package/dist/radio-group.test.form.js +1 -0
  135. package/dist/radio-group.test.validity.js +1 -0
  136. package/dist/radio.d.ts +1 -0
  137. package/dist/radio.js +1 -1
  138. package/dist/radio.styles.js +33 -0
  139. package/dist/split-button.test.basics.js +1 -0
  140. package/dist/split-container.test.basics.js +5 -0
  141. package/dist/split-link.test.basics.js +1 -0
  142. package/dist/split-link.test.interactions.js +2 -1
  143. package/dist/styles/variables.css +1 -1
  144. package/dist/tab.d.ts +1 -3
  145. package/dist/tab.group.d.ts +3 -5
  146. package/dist/tab.group.js +1 -1
  147. package/dist/tab.group.styles.js +27 -13
  148. package/dist/tab.group.test.basics.js +8 -57
  149. package/dist/tab.group.test.interactions.d.ts +3 -0
  150. package/dist/tab.group.test.interactions.js +454 -0
  151. package/dist/tab.js +1 -1
  152. package/dist/tab.panel.d.ts +1 -0
  153. package/dist/tab.panel.js +1 -1
  154. package/dist/tab.panel.styles.js +11 -1
  155. package/dist/tab.styles.js +7 -68
  156. package/dist/tab.test.basics.js +0 -20
  157. package/dist/tabs.stories.d.ts +1 -2
  158. package/dist/tag.test.basics.js +3 -2
  159. package/dist/textarea.d.ts +0 -1
  160. package/dist/textarea.js +2 -2
  161. package/dist/textarea.stories.d.ts +3 -4
  162. package/dist/textarea.styles.js +14 -3
  163. package/dist/textarea.test.basics.js +81 -44
  164. package/dist/textarea.test.events.js +57 -41
  165. package/dist/textarea.test.form.js +1 -0
  166. package/dist/textarea.test.translations.d.ts +1 -0
  167. package/dist/textarea.test.translations.js +34 -0
  168. package/dist/textarea.test.validity.js +105 -20
  169. package/dist/toasts.js +1 -1
  170. package/dist/toasts.styles.js +8 -1
  171. package/dist/toasts.test.basics.js +20 -0
  172. package/dist/toggle.js +1 -1
  173. package/dist/toggle.test.basics.js +1 -0
  174. package/dist/toggle.test.events.js +1 -0
  175. package/dist/toggle.test.focus.js +1 -1
  176. package/dist/toggle.test.interactions.d.ts +1 -0
  177. package/dist/{toggle.test.states.js → toggle.test.interactions.js} +1 -0
  178. package/dist/tooltip.d.ts +7 -5
  179. package/dist/tooltip.js +1 -1
  180. package/dist/tooltip.styles.js +90 -25
  181. package/dist/tooltip.test.basics.js +39 -3
  182. package/dist/tooltip.test.interactions.js +137 -34
  183. package/dist/translations/en.js +1 -1
  184. package/dist/translations/fr.js +1 -1
  185. package/dist/translations/ja.js +1 -1
  186. package/dist/tree.d.ts +0 -1
  187. package/dist/tree.item.d.ts +2 -3
  188. package/dist/tree.item.js +1 -1
  189. package/dist/tree.item.menu.d.ts +0 -1
  190. package/dist/tree.item.menu.js +1 -1
  191. package/dist/tree.item.test.basics.js +1 -0
  192. package/dist/tree.js +1 -1
  193. package/dist/tree.test.basics.js +2 -1
  194. package/dist/tree.test.events.js +1 -1
  195. package/package.json +40 -29
  196. package/dist/drawer.test.floating-components.d.ts +0 -1
  197. package/dist/drawer.test.floating-components.js +0 -51
  198. package/dist/library/set-containing-block.d.ts +0 -15
  199. package/dist/library/set-containing-block.js +0 -1
  200. package/dist/modal.test.floating-components.js +0 -62
  201. /package/dist/{checkbox.test.states.d.ts → button-group.button.test.focus.d.ts} +0 -0
  202. /package/dist/{modal.test.floating-components.d.ts → checkbox.test.interactions.d.ts} +0 -0
  203. /package/dist/{toggle.test.states.d.ts → dropdown.test.events.filterable.d.ts} +0 -0
@@ -20,25 +20,11 @@ import{css}from"lit";export default[css`
20
20
  border-radius: var(--glide-core-spacing-xs);
21
21
  box-shadow: var(--glide-core-shadow-lg);
22
22
  box-sizing: border-box;
23
- display: flex;
24
23
  inline-size: max-content;
25
- inset-block-start: 0;
26
- inset-inline-start: 0;
24
+ inset: unset;
27
25
  margin-block: 0;
28
26
  min-inline-size: 9.375rem;
29
27
  padding: var(--glide-core-spacing-xxxs);
30
28
  position: absolute;
31
- visibility: hidden;
32
-
33
- /*
34
- ".container" is relative and many Menus may be stacked in a column.
35
- This ensures the ".menu" of Menus earlier in the column aren't obscured
36
- by the ".target-container" that come later.
37
- */
38
- z-index: 1;
39
-
40
- &.visible {
41
- visibility: visible;
42
- }
43
29
  }
44
30
  `];
@@ -1,2 +1 @@
1
- import './menu.button.js';
2
- import './menu.link.js';
1
+ export {};
@@ -1,12 +1,15 @@
1
- import './menu.button.js';
2
- import './menu.link.js';
1
+ /* eslint-disable @typescript-eslint/no-unused-expressions */
3
2
  import { ArgumentError } from 'ow';
4
- import { expect, fixture, html } from '@open-wc/testing';
3
+ import { aTimeout, expect, fixture, html } from '@open-wc/testing';
5
4
  import GlideCoreMenu from './menu.js';
5
+ import GlideCoreMenuButton from './menu.button.js';
6
+ import GlideCoreMenuLink from './menu.link.js';
6
7
  import GlideCoreMenuOptions from './menu.options.js';
7
8
  import expectArgumentError from './library/expect-argument-error.js';
8
9
  import sinon from 'sinon';
9
10
  GlideCoreMenu.shadowRootOptions.mode = 'open';
11
+ GlideCoreMenuButton.shadowRootOptions.mode = 'open';
12
+ GlideCoreMenuLink.shadowRootOptions.mode = 'open';
10
13
  it('registers', async () => {
11
14
  expect(window.customElements.get('glide-core-menu')).to.equal(GlideCoreMenu);
12
15
  });
@@ -37,6 +40,7 @@ it('is accessible', async () => {
37
40
  const target = component.querySelector('button');
38
41
  const options = component.querySelector('glide-core-menu-options');
39
42
  expect(target?.getAttribute('aria-controls')).to.equal(options?.id);
43
+ expect(target?.getAttribute('aria-haspopup')).to.equal('true');
40
44
  expect(options?.ariaLabelledby).to.equal(target?.id);
41
45
  await expect(component).to.be.accessible();
42
46
  });
@@ -48,11 +52,16 @@ it('can be opened', async () => {
48
52
  <glide-core-menu-link label="Link"></glide-core-menu-link>
49
53
  </glide-core-menu-options>
50
54
  </glide-core-menu>`);
55
+ // Wait for Floating UI.
56
+ await aTimeout(0);
51
57
  const defaultSlot = component?.shadowRoot?.querySelector('slot:not([name])');
58
+ const options = component.querySelector('glide-core-menu-options');
52
59
  const target = component.querySelector('button');
60
+ const link = component.querySelector('glide-core-menu-link');
53
61
  expect(component.open).to.be.true;
54
- expect(defaultSlot?.checkVisibility({ checkVisibilityCSS: true })).to.be.true;
62
+ expect(defaultSlot?.checkVisibility()).to.be.true;
55
63
  expect(target?.ariaExpanded).to.equal('true');
64
+ expect(options?.getAttribute('aria-activedescendant')).to.equal(link?.id);
56
65
  });
57
66
  it('can have a default slot', async () => {
58
67
  const component = await fixture(html `<glide-core-menu>
@@ -91,6 +100,8 @@ it('activates the first menu link by default', async () => {
91
100
  </glide-core-menu-options>
92
101
  </glide-core-menu>
93
102
  `);
103
+ // Wait for Floating UI.
104
+ await aTimeout(0);
94
105
  const links = component.querySelectorAll('glide-core-menu-link');
95
106
  const options = component.querySelector('glide-core-menu-options');
96
107
  expect(links[0].privateActive).to.be.true;
@@ -108,6 +119,8 @@ it('activates the first menu button by default', async () => {
108
119
  </glide-core-menu-options>
109
120
  </glide-core-menu>
110
121
  `);
122
+ // Wait for Floating UI.
123
+ await aTimeout(0);
111
124
  const buttons = component.querySelectorAll('glide-core-menu-button');
112
125
  const options = component.querySelector('glide-core-menu-options');
113
126
  expect(buttons[0].privateActive).to.be.true;
@@ -122,10 +135,14 @@ it('is not opened when initially `open` and its target is `disabled`', async ()
122
135
  <glide-core-menu-link label="Link"></glide-core-menu-link>
123
136
  </glide-core-menu-options>
124
137
  </glide-core-menu>`);
138
+ // Wait for Floating UI.
139
+ await aTimeout(0);
125
140
  const defaultSlot = component?.shadowRoot?.querySelector('slot:not([name])');
126
141
  const target = component.querySelector('button');
127
- expect(defaultSlot?.checkVisibility({ checkVisibilityCSS: true })).not.be.ok;
142
+ const options = component.querySelector('glide-core-menu-options');
143
+ expect(defaultSlot?.checkVisibility()).to.be.false;
128
144
  expect(target?.ariaExpanded).to.equal('false');
145
+ expect(options?.getAttribute('aria-activedescendant')).to.equal('');
129
146
  });
130
147
  it('throws if it does not have a default slot', async () => {
131
148
  await expectArgumentError(() => {
@@ -156,7 +173,7 @@ it('throws if it does not have a "target" slot', async () => {
156
173
  spy();
157
174
  }
158
175
  }
159
- expect(spy.called).to.be.true;
176
+ expect(spy.callCount).to.equal(1);
160
177
  });
161
178
  it('sets accessibility attributes', async () => {
162
179
  const component = await fixture(html `<glide-core-menu>
@@ -1,2 +1,3 @@
1
+ import './menu.js';
1
2
  import './menu.link.js';
2
3
  import './menu.options.js';
@@ -1,7 +1,8 @@
1
+ /* eslint-disable @typescript-eslint/no-unused-expressions */
2
+ import './menu.js';
1
3
  import './menu.link.js';
2
4
  import './menu.options.js';
3
5
  import { expect, fixture, html, oneEvent } from '@open-wc/testing';
4
- import GlideCoreMenu from './menu.js';
5
6
  it('dispatches a "click" event when a link is clicked', async () => {
6
7
  const component = await fixture(html `<glide-core-menu open>
7
8
  <button slot="target">Target</button>
@@ -1 +1,2 @@
1
1
  import './menu.link.js';
2
+ import './menu.options.js';
@@ -1,8 +1,9 @@
1
+ /* eslint-disable @typescript-eslint/no-unused-expressions */
1
2
  import './menu.link.js';
2
- import { assert, elementUpdated, expect, fixture, html, } from '@open-wc/testing';
3
+ import './menu.options.js';
4
+ import { aTimeout, assert, elementUpdated, expect, fixture, html, } from '@open-wc/testing';
3
5
  import { sendKeys } from '@web/test-runner-commands';
4
6
  import GlideCoreMenu from './menu.js';
5
- import GlideCoreMenuOptions from './menu.options.js';
6
7
  GlideCoreMenu.shadowRootOptions.mode = 'open';
7
8
  it('focuses the target on `focus()`', async () => {
8
9
  const component = await fixture(html `<glide-core-menu>
@@ -30,7 +31,7 @@ it('closes when it loses focus', async () => {
30
31
  const defaultSlot = component?.shadowRoot?.querySelector('slot:not([name])');
31
32
  const options = component.querySelector('glide-core-menu-options');
32
33
  expect(component.open).to.be.false;
33
- expect(defaultSlot?.checkVisibility({ checkVisibilityCSS: true })).be.false;
34
+ expect(defaultSlot?.checkVisibility()).be.false;
34
35
  expect(options?.getAttribute('aria-activedescendant')).to.equal('');
35
36
  });
36
37
  it('remains open when the options component is focused', async () => {
@@ -41,13 +42,14 @@ it('remains open when the options component is focused', async () => {
41
42
  <glide-core-menu-link label="Link"></glide-core-menu-link>
42
43
  </glide-core-menu-options>
43
44
  </glide-core-menu>`);
45
+ // Wait for Floating UI.
46
+ await aTimeout(0);
44
47
  component.focus();
45
48
  const options = component.querySelector('glide-core-menu-options');
46
- assert(options instanceof GlideCoreMenuOptions);
47
- options.focus();
48
49
  const defaultSlot = component?.shadowRoot?.querySelector('slot:not([name])');
50
+ options?.focus();
49
51
  expect(component.open).to.be.true;
50
- expect(defaultSlot?.checkVisibility({ checkVisibilityCSS: true })).to.be.true;
52
+ expect(defaultSlot?.checkVisibility()).to.be.true;
51
53
  });
52
54
  it('remains open when an option is focused', async () => {
53
55
  const component = await fixture(html `<glide-core-menu open>
@@ -57,11 +59,15 @@ it('remains open when an option is focused', async () => {
57
59
  <glide-core-menu-link label="Link"></glide-core-menu-link>
58
60
  </glide-core-menu-options>
59
61
  </glide-core-menu>`);
62
+ // Wait for Floating UI.
63
+ await aTimeout(0);
60
64
  component.focus();
65
+ const defaultSlot = component?.shadowRoot?.querySelector('slot:not([name])');
61
66
  const option = component.querySelector('glide-core-menu-link');
62
67
  assert(option);
63
68
  option?.focus();
64
69
  expect(component.open).to.be.true;
70
+ expect(defaultSlot?.checkVisibility()).to.be.true;
65
71
  });
66
72
  it('sets the focused option as active', async () => {
67
73
  const component = await fixture(html `<glide-core-menu open>
@@ -72,6 +78,8 @@ it('sets the focused option as active', async () => {
72
78
  <glide-core-menu-link label="Link"></glide-core-menu-link>
73
79
  </glide-core-menu-options>
74
80
  </glide-core-menu>`);
81
+ // Wait for Floating UI.
82
+ await aTimeout(0);
75
83
  component.focus();
76
84
  const target = component.querySelector('glide-core-menu-button');
77
85
  const link = component.querySelector('glide-core-menu-link');