@crowdstrike/glide-core 0.8.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 (152) hide show
  1. package/dist/button-group.button.d.ts +14 -15
  2. package/dist/button-group.button.js +1 -1
  3. package/dist/button-group.button.styles.js +75 -52
  4. package/dist/button-group.button.test.basics.d.ts +1 -1
  5. package/dist/button-group.button.test.basics.js +83 -147
  6. package/dist/button-group.button.test.events.js +8 -67
  7. package/dist/button-group.button.test.focus.js +13 -0
  8. package/dist/button-group.button.test.interactions.d.ts +1 -0
  9. package/dist/button-group.button.test.interactions.js +42 -0
  10. package/dist/button-group.d.ts +7 -10
  11. package/dist/button-group.js +1 -1
  12. package/dist/button-group.stories.d.ts +1 -5
  13. package/dist/button-group.styles.js +18 -6
  14. package/dist/button-group.test.basics.js +113 -234
  15. package/dist/button-group.test.events.js +210 -263
  16. package/dist/button-group.test.focus.d.ts +1 -0
  17. package/dist/button-group.test.focus.js +39 -0
  18. package/dist/button-group.test.interactions.d.ts +1 -0
  19. package/dist/button-group.test.interactions.js +91 -0
  20. package/dist/button.test.basics.js +1 -1
  21. package/dist/checkbox-group.js +1 -1
  22. package/dist/checkbox-group.styles.js +1 -1
  23. package/dist/checkbox-group.test.basics.js +1 -1
  24. package/dist/checkbox-group.test.events.js +4 -4
  25. package/dist/checkbox-group.test.focus.js +4 -3
  26. package/dist/checkbox.d.ts +7 -1
  27. package/dist/checkbox.js +1 -1
  28. package/dist/checkbox.styles.js +10 -0
  29. package/dist/checkbox.test.events.js +4 -4
  30. package/dist/checkbox.test.focus.js +2 -2
  31. package/dist/{checkbox.test.states.js → checkbox.test.interactions.js} +24 -1
  32. package/dist/drawer.js +1 -1
  33. package/dist/dropdown.d.ts +6 -4
  34. package/dist/dropdown.js +1 -1
  35. package/dist/dropdown.option.d.ts +6 -2
  36. package/dist/dropdown.option.js +1 -1
  37. package/dist/dropdown.option.styles.js +13 -0
  38. package/dist/dropdown.option.test.basics.js +6 -3
  39. package/dist/dropdown.option.test.events.js +1 -1
  40. package/dist/dropdown.option.test.focus.js +1 -1
  41. package/dist/dropdown.option.test.interactions.multiple.js +1 -54
  42. package/dist/dropdown.option.test.interactions.single.js +51 -9
  43. package/dist/dropdown.styles.js +20 -19
  44. package/dist/dropdown.test.basics.js +143 -2
  45. package/dist/dropdown.test.basics.multiple.js +5 -2
  46. package/dist/dropdown.test.events.filterable.js +74 -0
  47. package/dist/dropdown.test.events.js +49 -160
  48. package/dist/dropdown.test.events.multiple.js +265 -8
  49. package/dist/dropdown.test.events.single.js +199 -2
  50. package/dist/dropdown.test.focus.filterable.js +9 -5
  51. package/dist/dropdown.test.focus.js +1 -1
  52. package/dist/dropdown.test.focus.multiple.js +1 -1
  53. package/dist/dropdown.test.focus.single.js +1 -1
  54. package/dist/dropdown.test.interactions.filterable.js +68 -11
  55. package/dist/dropdown.test.interactions.js +94 -5
  56. package/dist/dropdown.test.interactions.multiple.js +202 -5
  57. package/dist/dropdown.test.interactions.single.js +68 -6
  58. package/dist/form-controls-layout.test.basics.js +1 -1
  59. package/dist/icon-button.test.basics.js +1 -1
  60. package/dist/icons/checked.d.ts +1 -1
  61. package/dist/icons/checked.js +1 -1
  62. package/dist/icons/magnifying-glass.js +1 -1
  63. package/dist/input.d.ts +0 -6
  64. package/dist/input.js +1 -1
  65. package/dist/input.styles.js +7 -2
  66. package/dist/input.test.basics.js +19 -5
  67. package/dist/input.test.events.js +4 -4
  68. package/dist/input.test.focus.js +4 -4
  69. package/dist/input.test.translations.d.ts +1 -0
  70. package/dist/input.test.translations.js +38 -0
  71. package/dist/input.test.validity.js +133 -4
  72. package/dist/label.d.ts +1 -1
  73. package/dist/label.js +1 -1
  74. package/dist/label.styles.js +22 -13
  75. package/dist/label.test.basics.js +26 -24
  76. package/dist/library/expect-argument-error.js +1 -1
  77. package/dist/library/localize.d.ts +3 -1
  78. package/dist/menu.d.ts +3 -5
  79. package/dist/menu.js +1 -1
  80. package/dist/menu.options.test.basics.js +2 -2
  81. package/dist/menu.styles.js +1 -15
  82. package/dist/menu.test.basics.d.ts +1 -2
  83. package/dist/menu.test.basics.js +22 -6
  84. package/dist/menu.test.focus.d.ts +1 -0
  85. package/dist/menu.test.focus.js +13 -6
  86. package/dist/menu.test.interactions.js +212 -56
  87. package/dist/modal.icon-button.test.basics.js +1 -1
  88. package/dist/modal.js +1 -1
  89. package/dist/modal.styles.js +18 -13
  90. package/dist/modal.tertiary-icon.d.ts +0 -1
  91. package/dist/modal.tertiary-icon.js +1 -1
  92. package/dist/modal.tertiary-icon.test.basics.js +1 -1
  93. package/dist/modal.test.basics.js +1 -1
  94. package/dist/modal.test.events.js +10 -10
  95. package/dist/radio-group.js +1 -1
  96. package/dist/radio-group.styles.js +1 -1
  97. package/dist/radio-group.test.focus.js +3 -3
  98. package/dist/radio.d.ts +1 -0
  99. package/dist/radio.js +1 -1
  100. package/dist/radio.styles.js +33 -0
  101. package/dist/split-container.test.basics.js +4 -0
  102. package/dist/split-link.test.interactions.js +1 -1
  103. package/dist/styles/variables.css +1 -1
  104. package/dist/tab.d.ts +1 -1
  105. package/dist/tab.group.js +1 -1
  106. package/dist/tab.group.test.basics.js +1 -1
  107. package/dist/tab.group.test.interactions.js +198 -2
  108. package/dist/tab.js +1 -1
  109. package/dist/tab.panel.d.ts +1 -0
  110. package/dist/tab.panel.js +1 -1
  111. package/dist/tab.panel.styles.js +11 -1
  112. package/dist/tag.test.basics.js +2 -2
  113. package/dist/textarea.d.ts +0 -1
  114. package/dist/textarea.js +2 -2
  115. package/dist/textarea.stories.d.ts +3 -4
  116. package/dist/textarea.styles.js +14 -3
  117. package/dist/textarea.test.basics.js +80 -44
  118. package/dist/textarea.test.events.js +56 -41
  119. package/dist/textarea.test.translations.d.ts +1 -0
  120. package/dist/textarea.test.translations.js +34 -0
  121. package/dist/textarea.test.validity.js +104 -20
  122. package/dist/toasts.js +1 -1
  123. package/dist/toasts.styles.js +8 -1
  124. package/dist/toasts.test.basics.js +20 -0
  125. package/dist/toggle.js +1 -1
  126. package/dist/toggle.test.focus.js +1 -1
  127. package/dist/toggle.test.interactions.d.ts +1 -0
  128. package/dist/tooltip.d.ts +7 -5
  129. package/dist/tooltip.js +1 -1
  130. package/dist/tooltip.styles.js +90 -25
  131. package/dist/tooltip.test.basics.js +38 -3
  132. package/dist/tooltip.test.interactions.js +136 -34
  133. package/dist/translations/en.js +1 -1
  134. package/dist/translations/fr.js +1 -1
  135. package/dist/translations/ja.js +1 -1
  136. package/dist/tree.d.ts +0 -1
  137. package/dist/tree.item.d.ts +1 -2
  138. package/dist/tree.item.js +1 -1
  139. package/dist/tree.item.menu.d.ts +0 -1
  140. package/dist/tree.item.menu.js +1 -1
  141. package/dist/tree.js +1 -1
  142. package/dist/tree.test.basics.js +1 -1
  143. package/package.json +2 -4
  144. package/dist/drawer.test.floating-components.d.ts +0 -1
  145. package/dist/drawer.test.floating-components.js +0 -52
  146. package/dist/library/set-containing-block.d.ts +0 -15
  147. package/dist/library/set-containing-block.js +0 -1
  148. package/dist/modal.test.floating-components.js +0 -63
  149. /package/dist/{checkbox.test.states.d.ts → button-group.button.test.focus.d.ts} +0 -0
  150. /package/dist/{modal.test.floating-components.d.ts → checkbox.test.interactions.d.ts} +0 -0
  151. /package/dist/{toggle.test.states.d.ts → dropdown.test.events.filterable.d.ts} +0 -0
  152. /package/dist/{toggle.test.states.js → toggle.test.interactions.js} +0 -0
@@ -1,13 +1,15 @@
1
1
  /* eslint-disable @typescript-eslint/no-unused-expressions */
2
- import './menu.button.js';
3
- import './menu.link.js';
4
2
  import { ArgumentError } from 'ow';
5
- import { expect, fixture, html } from '@open-wc/testing';
3
+ import { aTimeout, expect, fixture, html } from '@open-wc/testing';
6
4
  import GlideCoreMenu from './menu.js';
5
+ import GlideCoreMenuButton from './menu.button.js';
6
+ import GlideCoreMenuLink from './menu.link.js';
7
7
  import GlideCoreMenuOptions from './menu.options.js';
8
8
  import expectArgumentError from './library/expect-argument-error.js';
9
9
  import sinon from 'sinon';
10
10
  GlideCoreMenu.shadowRootOptions.mode = 'open';
11
+ GlideCoreMenuButton.shadowRootOptions.mode = 'open';
12
+ GlideCoreMenuLink.shadowRootOptions.mode = 'open';
11
13
  it('registers', async () => {
12
14
  expect(window.customElements.get('glide-core-menu')).to.equal(GlideCoreMenu);
13
15
  });
@@ -38,6 +40,7 @@ it('is accessible', async () => {
38
40
  const target = component.querySelector('button');
39
41
  const options = component.querySelector('glide-core-menu-options');
40
42
  expect(target?.getAttribute('aria-controls')).to.equal(options?.id);
43
+ expect(target?.getAttribute('aria-haspopup')).to.equal('true');
41
44
  expect(options?.ariaLabelledby).to.equal(target?.id);
42
45
  await expect(component).to.be.accessible();
43
46
  });
@@ -49,11 +52,16 @@ it('can be opened', async () => {
49
52
  <glide-core-menu-link label="Link"></glide-core-menu-link>
50
53
  </glide-core-menu-options>
51
54
  </glide-core-menu>`);
55
+ // Wait for Floating UI.
56
+ await aTimeout(0);
52
57
  const defaultSlot = component?.shadowRoot?.querySelector('slot:not([name])');
58
+ const options = component.querySelector('glide-core-menu-options');
53
59
  const target = component.querySelector('button');
60
+ const link = component.querySelector('glide-core-menu-link');
54
61
  expect(component.open).to.be.true;
55
- expect(defaultSlot?.checkVisibility({ checkVisibilityCSS: true })).to.be.true;
62
+ expect(defaultSlot?.checkVisibility()).to.be.true;
56
63
  expect(target?.ariaExpanded).to.equal('true');
64
+ expect(options?.getAttribute('aria-activedescendant')).to.equal(link?.id);
57
65
  });
58
66
  it('can have a default slot', async () => {
59
67
  const component = await fixture(html `<glide-core-menu>
@@ -92,6 +100,8 @@ it('activates the first menu link by default', async () => {
92
100
  </glide-core-menu-options>
93
101
  </glide-core-menu>
94
102
  `);
103
+ // Wait for Floating UI.
104
+ await aTimeout(0);
95
105
  const links = component.querySelectorAll('glide-core-menu-link');
96
106
  const options = component.querySelector('glide-core-menu-options');
97
107
  expect(links[0].privateActive).to.be.true;
@@ -109,6 +119,8 @@ it('activates the first menu button by default', async () => {
109
119
  </glide-core-menu-options>
110
120
  </glide-core-menu>
111
121
  `);
122
+ // Wait for Floating UI.
123
+ await aTimeout(0);
112
124
  const buttons = component.querySelectorAll('glide-core-menu-button');
113
125
  const options = component.querySelector('glide-core-menu-options');
114
126
  expect(buttons[0].privateActive).to.be.true;
@@ -123,10 +135,14 @@ it('is not opened when initially `open` and its target is `disabled`', async ()
123
135
  <glide-core-menu-link label="Link"></glide-core-menu-link>
124
136
  </glide-core-menu-options>
125
137
  </glide-core-menu>`);
138
+ // Wait for Floating UI.
139
+ await aTimeout(0);
126
140
  const defaultSlot = component?.shadowRoot?.querySelector('slot:not([name])');
127
141
  const target = component.querySelector('button');
128
- expect(defaultSlot?.checkVisibility({ checkVisibilityCSS: true })).not.be.ok;
142
+ const options = component.querySelector('glide-core-menu-options');
143
+ expect(defaultSlot?.checkVisibility()).to.be.false;
129
144
  expect(target?.ariaExpanded).to.equal('false');
145
+ expect(options?.getAttribute('aria-activedescendant')).to.equal('');
130
146
  });
131
147
  it('throws if it does not have a default slot', async () => {
132
148
  await expectArgumentError(() => {
@@ -157,7 +173,7 @@ it('throws if it does not have a "target" slot', async () => {
157
173
  spy();
158
174
  }
159
175
  }
160
- expect(spy.called).to.be.true;
176
+ expect(spy.callCount).to.equal(1);
161
177
  });
162
178
  it('sets accessibility attributes', async () => {
163
179
  const component = await fixture(html `<glide-core-menu>
@@ -1 +1,2 @@
1
1
  import './menu.link.js';
2
+ import './menu.options.js';
@@ -1,9 +1,9 @@
1
1
  /* eslint-disable @typescript-eslint/no-unused-expressions */
2
2
  import './menu.link.js';
3
- 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';
4
5
  import { sendKeys } from '@web/test-runner-commands';
5
6
  import GlideCoreMenu from './menu.js';
6
- import GlideCoreMenuOptions from './menu.options.js';
7
7
  GlideCoreMenu.shadowRootOptions.mode = 'open';
8
8
  it('focuses the target on `focus()`', async () => {
9
9
  const component = await fixture(html `<glide-core-menu>
@@ -31,7 +31,7 @@ it('closes when it loses focus', async () => {
31
31
  const defaultSlot = component?.shadowRoot?.querySelector('slot:not([name])');
32
32
  const options = component.querySelector('glide-core-menu-options');
33
33
  expect(component.open).to.be.false;
34
- expect(defaultSlot?.checkVisibility({ checkVisibilityCSS: true })).be.false;
34
+ expect(defaultSlot?.checkVisibility()).be.false;
35
35
  expect(options?.getAttribute('aria-activedescendant')).to.equal('');
36
36
  });
37
37
  it('remains open when the options component is focused', async () => {
@@ -42,13 +42,14 @@ it('remains open when the options component is focused', async () => {
42
42
  <glide-core-menu-link label="Link"></glide-core-menu-link>
43
43
  </glide-core-menu-options>
44
44
  </glide-core-menu>`);
45
+ // Wait for Floating UI.
46
+ await aTimeout(0);
45
47
  component.focus();
46
48
  const options = component.querySelector('glide-core-menu-options');
47
- assert(options instanceof GlideCoreMenuOptions);
48
- options.focus();
49
49
  const defaultSlot = component?.shadowRoot?.querySelector('slot:not([name])');
50
+ options?.focus();
50
51
  expect(component.open).to.be.true;
51
- expect(defaultSlot?.checkVisibility({ checkVisibilityCSS: true })).to.be.true;
52
+ expect(defaultSlot?.checkVisibility()).to.be.true;
52
53
  });
53
54
  it('remains open when an option is focused', async () => {
54
55
  const component = await fixture(html `<glide-core-menu open>
@@ -58,11 +59,15 @@ it('remains open when an option is focused', async () => {
58
59
  <glide-core-menu-link label="Link"></glide-core-menu-link>
59
60
  </glide-core-menu-options>
60
61
  </glide-core-menu>`);
62
+ // Wait for Floating UI.
63
+ await aTimeout(0);
61
64
  component.focus();
65
+ const defaultSlot = component?.shadowRoot?.querySelector('slot:not([name])');
62
66
  const option = component.querySelector('glide-core-menu-link');
63
67
  assert(option);
64
68
  option?.focus();
65
69
  expect(component.open).to.be.true;
70
+ expect(defaultSlot?.checkVisibility()).to.be.true;
66
71
  });
67
72
  it('sets the focused option as active', async () => {
68
73
  const component = await fixture(html `<glide-core-menu open>
@@ -73,6 +78,8 @@ it('sets the focused option as active', async () => {
73
78
  <glide-core-menu-link label="Link"></glide-core-menu-link>
74
79
  </glide-core-menu-options>
75
80
  </glide-core-menu>`);
81
+ // Wait for Floating UI.
82
+ await aTimeout(0);
76
83
  component.focus();
77
84
  const target = component.querySelector('glide-core-menu-button');
78
85
  const link = component.querySelector('glide-core-menu-link');