@crowdstrike/glide-core 0.8.0 → 0.9.1

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 (181) hide show
  1. package/dist/accordion.d.ts +7 -3
  2. package/dist/button-group.button.d.ts +12 -16
  3. package/dist/button-group.button.js +1 -1
  4. package/dist/button-group.button.styles.js +76 -52
  5. package/dist/button-group.button.test.basics.d.ts +1 -1
  6. package/dist/button-group.button.test.basics.js +83 -147
  7. package/dist/button-group.button.test.events.js +8 -67
  8. package/dist/button-group.button.test.focus.js +13 -0
  9. package/dist/button-group.button.test.interactions.d.ts +1 -0
  10. package/dist/button-group.button.test.interactions.js +42 -0
  11. package/dist/button-group.d.ts +10 -10
  12. package/dist/button-group.js +1 -1
  13. package/dist/button-group.stories.d.ts +1 -5
  14. package/dist/button-group.styles.js +18 -6
  15. package/dist/button-group.test.basics.js +113 -234
  16. package/dist/button-group.test.events.js +210 -263
  17. package/dist/button-group.test.focus.d.ts +1 -0
  18. package/dist/button-group.test.focus.js +39 -0
  19. package/dist/button-group.test.interactions.d.ts +1 -0
  20. package/dist/button-group.test.interactions.js +91 -0
  21. package/dist/button.d.ts +3 -0
  22. package/dist/button.test.basics.js +1 -1
  23. package/dist/checkbox-group.d.ts +6 -2
  24. package/dist/checkbox-group.js +1 -1
  25. package/dist/checkbox-group.stories.d.ts +1 -1
  26. package/dist/checkbox-group.styles.js +1 -1
  27. package/dist/checkbox-group.test.basics.js +1 -1
  28. package/dist/checkbox-group.test.events.js +4 -4
  29. package/dist/checkbox-group.test.focus.js +4 -3
  30. package/dist/checkbox.d.ts +12 -5
  31. package/dist/checkbox.js +1 -1
  32. package/dist/checkbox.stories.d.ts +1 -1
  33. package/dist/checkbox.styles.js +10 -0
  34. package/dist/checkbox.test.basics.js +15 -6
  35. package/dist/checkbox.test.events.js +16 -8
  36. package/dist/checkbox.test.focus.js +3 -3
  37. package/dist/checkbox.test.form.js +1 -0
  38. package/dist/checkbox.test.interactions.js +123 -0
  39. package/dist/drawer.d.ts +5 -5
  40. package/dist/drawer.js +1 -1
  41. package/dist/drawer.stories.d.ts +0 -1
  42. package/dist/dropdown.d.ts +9 -6
  43. package/dist/dropdown.js +1 -1
  44. package/dist/dropdown.option.d.ts +6 -2
  45. package/dist/dropdown.option.js +1 -1
  46. package/dist/dropdown.option.styles.js +13 -0
  47. package/dist/dropdown.option.test.basics.js +6 -3
  48. package/dist/dropdown.option.test.events.js +1 -1
  49. package/dist/dropdown.option.test.focus.js +1 -1
  50. package/dist/dropdown.option.test.interactions.multiple.js +1 -54
  51. package/dist/dropdown.option.test.interactions.single.js +51 -9
  52. package/dist/dropdown.styles.js +20 -19
  53. package/dist/dropdown.test.basics.js +143 -2
  54. package/dist/dropdown.test.basics.multiple.js +5 -2
  55. package/dist/dropdown.test.events.filterable.js +74 -0
  56. package/dist/dropdown.test.events.js +49 -160
  57. package/dist/dropdown.test.events.multiple.js +265 -8
  58. package/dist/dropdown.test.events.single.js +199 -2
  59. package/dist/dropdown.test.focus.filterable.js +9 -5
  60. package/dist/dropdown.test.focus.js +1 -1
  61. package/dist/dropdown.test.focus.multiple.js +1 -1
  62. package/dist/dropdown.test.focus.single.js +1 -1
  63. package/dist/dropdown.test.interactions.filterable.js +68 -11
  64. package/dist/dropdown.test.interactions.js +94 -5
  65. package/dist/dropdown.test.interactions.multiple.js +202 -5
  66. package/dist/dropdown.test.interactions.single.js +68 -6
  67. package/dist/form-controls-layout.test.basics.js +1 -1
  68. package/dist/icon-button.d.ts +2 -0
  69. package/dist/icon-button.test.basics.js +1 -1
  70. package/dist/icons/checked.d.ts +1 -1
  71. package/dist/icons/checked.js +1 -1
  72. package/dist/icons/magnifying-glass.js +1 -1
  73. package/dist/input.d.ts +4 -9
  74. package/dist/input.js +1 -1
  75. package/dist/input.styles.js +7 -2
  76. package/dist/input.test.basics.js +19 -5
  77. package/dist/input.test.events.js +4 -4
  78. package/dist/input.test.focus.js +4 -4
  79. package/dist/input.test.translations.d.ts +1 -0
  80. package/dist/input.test.translations.js +38 -0
  81. package/dist/input.test.validity.js +133 -4
  82. package/dist/label.d.ts +1 -1
  83. package/dist/label.js +1 -1
  84. package/dist/label.styles.js +25 -13
  85. package/dist/label.test.basics.js +26 -24
  86. package/dist/library/expect-argument-error.js +1 -1
  87. package/dist/library/localize.d.ts +4 -1
  88. package/dist/menu.d.ts +3 -5
  89. package/dist/menu.js +1 -1
  90. package/dist/menu.options.test.basics.js +2 -2
  91. package/dist/menu.styles.js +1 -15
  92. package/dist/menu.test.basics.d.ts +1 -2
  93. package/dist/menu.test.basics.js +22 -6
  94. package/dist/menu.test.events.js +197 -7
  95. package/dist/menu.test.focus.d.ts +1 -0
  96. package/dist/menu.test.focus.js +13 -6
  97. package/dist/menu.test.interactions.js +214 -58
  98. package/dist/modal.icon-button.test.basics.js +1 -1
  99. package/dist/modal.js +1 -1
  100. package/dist/modal.stories.d.ts +1 -0
  101. package/dist/modal.styles.js +18 -13
  102. package/dist/modal.tertiary-icon.d.ts +0 -1
  103. package/dist/modal.tertiary-icon.js +1 -1
  104. package/dist/modal.tertiary-icon.test.basics.js +3 -3
  105. package/dist/modal.test.basics.js +1 -1
  106. package/dist/modal.test.events.js +10 -10
  107. package/dist/radio-group.d.ts +4 -3
  108. package/dist/radio-group.js +1 -1
  109. package/dist/radio-group.stories.d.ts +1 -1
  110. package/dist/radio-group.styles.js +1 -1
  111. package/dist/radio-group.test.focus.js +3 -3
  112. package/dist/radio.d.ts +2 -2
  113. package/dist/radio.js +1 -1
  114. package/dist/radio.styles.js +33 -0
  115. package/dist/split-container.d.ts +1 -1
  116. package/dist/split-container.test.basics.js +4 -0
  117. package/dist/split-link.test.interactions.js +1 -1
  118. package/dist/status-indicator.d.ts +1 -1
  119. package/dist/styles/variables.css +1 -1
  120. package/dist/tab.d.ts +1 -1
  121. package/dist/tab.group.js +1 -1
  122. package/dist/tab.group.test.basics.js +1 -1
  123. package/dist/tab.group.test.interactions.js +198 -2
  124. package/dist/tab.js +1 -1
  125. package/dist/tab.panel.d.ts +1 -0
  126. package/dist/tab.panel.js +1 -1
  127. package/dist/tab.panel.styles.js +11 -1
  128. package/dist/tabs.stories.d.ts +1 -0
  129. package/dist/tag.d.ts +3 -6
  130. package/dist/tag.test.basics.js +2 -2
  131. package/dist/textarea.d.ts +4 -4
  132. package/dist/textarea.js +2 -2
  133. package/dist/textarea.stories.d.ts +3 -4
  134. package/dist/textarea.styles.js +14 -3
  135. package/dist/textarea.test.basics.js +80 -44
  136. package/dist/textarea.test.events.js +56 -41
  137. package/dist/textarea.test.translations.d.ts +1 -0
  138. package/dist/textarea.test.translations.js +34 -0
  139. package/dist/textarea.test.validity.js +104 -20
  140. package/dist/toasts.js +1 -1
  141. package/dist/toasts.styles.js +8 -1
  142. package/dist/toasts.test.basics.js +20 -0
  143. package/dist/toggle.d.ts +3 -3
  144. package/dist/toggle.js +1 -1
  145. package/dist/toggle.stories.d.ts +1 -1
  146. package/dist/toggle.test.focus.js +1 -1
  147. package/dist/toggle.test.interactions.d.ts +1 -0
  148. package/dist/{toggle.test.states.js → toggle.test.interactions.js} +26 -0
  149. package/dist/tooltip.d.ts +9 -7
  150. package/dist/tooltip.js +1 -1
  151. package/dist/tooltip.styles.js +90 -25
  152. package/dist/tooltip.test.basics.js +38 -3
  153. package/dist/tooltip.test.interactions.js +136 -34
  154. package/dist/translations/en.js +1 -1
  155. package/dist/translations/fr.js +1 -1
  156. package/dist/translations/ja.js +1 -1
  157. package/dist/tree.d.ts +1 -2
  158. package/dist/tree.item.d.ts +1 -5
  159. package/dist/tree.item.icon-button.d.ts +1 -0
  160. package/dist/tree.item.icon-button.js +1 -1
  161. package/dist/tree.item.icon-button.test.basics.js +9 -0
  162. package/dist/tree.item.js +1 -1
  163. package/dist/tree.item.menu.d.ts +2 -1
  164. package/dist/tree.item.menu.js +1 -1
  165. package/dist/tree.item.menu.test.basics.js +15 -0
  166. package/dist/tree.item.styles.js +2 -0
  167. package/dist/tree.item.test.basics.d.ts +2 -1
  168. package/dist/tree.item.test.basics.js +46 -4
  169. package/dist/tree.js +1 -1
  170. package/dist/tree.test.basics.js +1 -1
  171. package/dist/tree.test.focus.js +91 -4
  172. package/package.json +3 -4
  173. package/dist/checkbox.test.states.js +0 -63
  174. package/dist/drawer.test.floating-components.d.ts +0 -1
  175. package/dist/drawer.test.floating-components.js +0 -52
  176. package/dist/library/set-containing-block.d.ts +0 -15
  177. package/dist/library/set-containing-block.js +0 -1
  178. package/dist/modal.test.floating-components.js +0 -63
  179. /package/dist/{checkbox.test.states.d.ts → button-group.button.test.focus.d.ts} +0 -0
  180. /package/dist/{modal.test.floating-components.d.ts → checkbox.test.interactions.d.ts} +0 -0
  181. /package/dist/{toggle.test.states.d.ts → dropdown.test.events.filterable.d.ts} +0 -0
@@ -34,6 +34,23 @@ it('focuses the selected tree item on `focus()`, if there is one', async () => {
34
34
  assert(document.activeElement instanceof GlideCoreTreeItem);
35
35
  expect(document.activeElement?.label).to.equal(childItems[1].label);
36
36
  });
37
+ it('does not focus the selected tree item on `focus()` if collapsed', async () => {
38
+ const tree = await fixture(html `
39
+ <glide-core-tree>
40
+ <glide-core-tree-item label="Child Item 1"> </glide-core-tree-item>
41
+ <glide-core-tree-item label="Child Item 2">
42
+ <glide-core-tree-item
43
+ label="Grandchild Item 1"
44
+ selected
45
+ ></glide-core-tree-item>
46
+ </glide-core-tree-item>
47
+ </glide-core-tree>
48
+ `);
49
+ const childItems = tree.slotElements;
50
+ tree.dispatchEvent(new Event('focusin'));
51
+ await tree.updateComplete;
52
+ expect(document.activeElement === childItems[0]).to.equal(true);
53
+ });
37
54
  it('expands a tree item if right arrow is pressed', async () => {
38
55
  const tree = await fixture(html `
39
56
  <glide-core-tree>
@@ -100,8 +117,12 @@ it(`focuses on a non-collapsible tree item's parent if left arrow is pressed`, a
100
117
  it(`focuses on a collapsed tree item's parent if left arrow is pressed`, async () => {
101
118
  const tree = await fixture(html `
102
119
  <glide-core-tree>
103
- <glide-core-tree-item label="Child Item 1">
104
- <glide-core-tree-item label="Grandchild Item 1"></glide-core-tree-item>
120
+ <glide-core-tree-item expanded label="Child Item 1">
121
+ <glide-core-tree-item label="Grandchild Item 1">
122
+ <glide-core-tree-item
123
+ label="Great Grandchild Item 1"
124
+ ></glide-core-tree-item>
125
+ </glide-core-tree-item>
105
126
  </glide-core-tree-item>
106
127
  <glide-core-tree-item label="Child Item 2"></glide-core-tree-item>
107
128
  </glide-core-tree>
@@ -110,8 +131,7 @@ it(`focuses on a collapsed tree item's parent if left arrow is pressed`, async (
110
131
  const grandchildItems = childItems[0].slotElements;
111
132
  grandchildItems[0].focus();
112
133
  await sendKeys({ press: 'ArrowLeft' });
113
- assert(document.activeElement instanceof GlideCoreTreeItem);
114
- expect(document.activeElement?.label).to.equal(childItems[0].label);
134
+ expect(document.activeElement === childItems[0]).to.equal(true);
115
135
  });
116
136
  it('moves down the non-expanded tree items with down arrow', async () => {
117
137
  const tree = await fixture(html `
@@ -291,3 +311,70 @@ it('can use the keyboard to navigate to a tree item menu', async () => {
291
311
  await sendKeys({ press: 'Tab' });
292
312
  assert(document.activeElement instanceof GlideCoreTreeItemMenu);
293
313
  });
314
+ it('does not focus on a tree item icon button unless that tree item is focused', async () => {
315
+ const tree = await fixture(html `
316
+ <glide-core-tree>
317
+ <glide-core-tree-item label="Child Item 1"> </glide-core-tree-item>
318
+ <glide-core-tree-item label="Child Item 2">
319
+ <glide-core-tree-item-icon-button slot="suffix">
320
+ <svg viewBox="0 0 24 24">
321
+ <path d="M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z" />
322
+ </svg>
323
+ </glide-core-tree-item-icon-button>
324
+ </glide-core-tree-item>
325
+ </glide-core-tree>
326
+ `);
327
+ tree.dispatchEvent(new Event('focusin'));
328
+ const childItems = tree.slotElements;
329
+ childItems[0].focus();
330
+ await sendKeys({ press: 'Tab' });
331
+ expect(document.activeElement === document.body).to.equal(true);
332
+ childItems[1].focus();
333
+ await sendKeys({ press: 'Tab' });
334
+ expect(document.activeElement instanceof GlideCoreTreeItemIconButton).to.equal(true);
335
+ await sendKeys({ down: 'Shift' });
336
+ await sendKeys({ press: 'Tab' });
337
+ await sendKeys({ up: 'Shift' });
338
+ expect(document.activeElement === childItems[1]).to.equal(true, 'can keyboard navigate back to the parent Tree Item');
339
+ });
340
+ it('does not focus on a tree item menu unless that tree item is focused', async () => {
341
+ const tree = await fixture(html `
342
+ <glide-core-tree>
343
+ <glide-core-tree-item label="Child Item 1"> </glide-core-tree-item>
344
+ <glide-core-tree-item label="Child Item 2">
345
+ <glide-core-tree-item-menu slot="menu">
346
+ <glide-core-menu-link label="Edit" url="/edit">
347
+ </glide-core-menu-link>
348
+ </glide-core-tree-item-menu>
349
+ </glide-core-tree-item>
350
+ </glide-core-tree>
351
+ `);
352
+ tree.dispatchEvent(new Event('focusin'));
353
+ const childItems = tree.slotElements;
354
+ childItems[0].focus();
355
+ await sendKeys({ press: 'Tab' });
356
+ expect(document.activeElement === document.body).to.equal(true);
357
+ childItems[1].focus();
358
+ await sendKeys({ press: 'Tab' });
359
+ expect(document.activeElement instanceof GlideCoreTreeItemMenu).to.equal(true);
360
+ });
361
+ it('does not select a tree item if Enter is pressed while its tree item icon button is focused', async () => {
362
+ const tree = await fixture(html `
363
+ <glide-core-tree>
364
+ <glide-core-tree-item label="Child Item 1">
365
+ <glide-core-tree-item-icon-button slot="suffix">
366
+ <svg viewBox="0 0 24 24">
367
+ <path d="M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z" />
368
+ </svg>
369
+ </glide-core-tree-item-icon-button>
370
+ </glide-core-tree-item>
371
+ </glide-core-tree>
372
+ `);
373
+ tree.dispatchEvent(new Event('focusin'));
374
+ const childItems = tree.slotElements;
375
+ childItems[0].focus();
376
+ await sendKeys({ press: 'Tab' });
377
+ expect(document.activeElement instanceof GlideCoreTreeItemIconButton).to.equal(true);
378
+ await sendKeys({ press: 'Enter' });
379
+ expect(childItems[0].hasAttribute('selected')).to.equal(false);
380
+ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@crowdstrike/glide-core",
3
- "version": "0.8.0",
3
+ "version": "0.9.1",
4
4
  "description": "CrowdStrike's Glide Design System components package for providing web components",
5
5
  "author": "CrowdStrike UX Team",
6
6
  "license": "Apache-2.0",
@@ -13,7 +13,6 @@
13
13
  "dist",
14
14
  "!dist/eslint",
15
15
  "!dist/icons/storybook.*",
16
- "!dist/src",
17
16
  "!dist/storybook",
18
17
  "!dist/*.test.js",
19
18
  "!dist/*.stories.js"
@@ -29,14 +28,12 @@
29
28
  "./styles/*": null,
30
29
  "./label.js": null,
31
30
  "./toasts.toast.js": null,
32
- "./library/set-containing-block.js": "./dist/library/set-containing-block.js",
33
31
  "./styles/fonts.css": "./dist/styles/fonts.css",
34
32
  "./styles/variables.css": "./dist/styles/variables.css"
35
33
  },
36
34
  "dependencies": {
37
35
  "@floating-ui/dom": "^1.6.8",
38
36
  "@shoelace-style/localize": "^3.1.2",
39
- "composed-offset-position": "^0.0.6",
40
37
  "nanoid": "^5.0.7",
41
38
  "ow": "^1.1.1"
42
39
  },
@@ -73,12 +70,14 @@
73
70
  "@web/test-runner-commands": "^0.9.0",
74
71
  "@web/test-runner-playwright": "^0.11.0",
75
72
  "chalk": "^5.3.0",
73
+ "cheerio": "^1.0.0",
76
74
  "esbuild": "^0.19.12",
77
75
  "eslint": "^8.56.0",
78
76
  "eslint-config-prettier": "^9.1.0",
79
77
  "eslint-plugin-lit": "^1.11.0",
80
78
  "eslint-plugin-lit-a11y": "^4.1.2",
81
79
  "eslint-plugin-no-only-tests": "^3.1.0",
80
+ "eslint-plugin-no-skip-tests": "^1.1.0",
82
81
  "eslint-plugin-sort-class-members": "^1.20.0",
83
82
  "eslint-plugin-sort-imports-es6-autofix": "^0.6.0",
84
83
  "eslint-plugin-unicorn": "^50.0.1",
@@ -1,63 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-unused-expressions */
2
- import { elementUpdated, expect, fixture, html } from '@open-wc/testing';
3
- import GlideCoreCheckbox from './checkbox.js';
4
- GlideCoreCheckbox.shadowRootOptions.mode = 'open';
5
- it('is checked after being clicked', async () => {
6
- const component = await fixture(html `<glide-core-checkbox></glide-core-checkbox>`);
7
- component.click();
8
- await elementUpdated(component);
9
- expect(component.checked).to.equal(true);
10
- expect(component.hasAttribute('checked')).to.be.false;
11
- });
12
- it('is unchecked after being clicked', async () => {
13
- const component = await fixture(html `<glide-core-checkbox checked></glide-core-checkbox>`);
14
- component.click();
15
- await elementUpdated(component);
16
- expect(component.checked).to.equal(false);
17
- expect(component.hasAttribute('checked')).to.be.true;
18
- });
19
- it('is checked and not indeterminate after being clicked when unchecked and indeterminate', async () => {
20
- const component = await fixture(html `<glide-core-checkbox indeterminate></glide-core-checkbox>`);
21
- component.click();
22
- await elementUpdated(component);
23
- const input = component.shadowRoot?.querySelector('[data-test="input"]');
24
- expect(input?.indeterminate).to.be.false;
25
- expect(component.checked).to.equal(true);
26
- expect(component.indeterminate).to.equal(false);
27
- expect(component.hasAttribute('checked')).to.be.false;
28
- expect(component.hasAttribute('indeterminate')).to.be.true;
29
- });
30
- it('is unchecked and not indeterminate after being clicked when checked and indeterminate', async () => {
31
- const component = await fixture(html `<glide-core-checkbox checked indeterminate></glide-core-checkbox>`);
32
- component.click();
33
- await elementUpdated(component);
34
- const input = component.shadowRoot?.querySelector('[data-test="input"]');
35
- expect(input?.indeterminate).to.be.false;
36
- expect(component.checked).to.equal(false);
37
- expect(component.indeterminate).to.equal(false);
38
- expect(component.hasAttribute('checked')).to.be.true;
39
- expect(component.hasAttribute('indeterminate')).to.be.true;
40
- });
41
- it('is still checked after being clicked when checked but disabled', async () => {
42
- const component = await fixture(html `<glide-core-checkbox checked disabled></glide-core-checkbox>`);
43
- component.click();
44
- await elementUpdated(component);
45
- expect(component.checked).to.equal(true);
46
- expect(component.hasAttribute('checked')).to.be.true;
47
- });
48
- it('is still unchecked after being clicked when unchecked and disabled', async () => {
49
- const component = await fixture(html `<glide-core-checkbox disabled></glide-core-checkbox>`);
50
- component.click();
51
- await elementUpdated(component);
52
- expect(component.hasAttribute('checked')).to.be.false;
53
- expect(component.checked).to.equal(false);
54
- });
55
- it('is still indeterminate after being clicked when unchecked and disabled', async () => {
56
- const component = await fixture(html `<glide-core-checkbox disabled indeterminate></glide-core-checkbox>`);
57
- component.click();
58
- await elementUpdated(component);
59
- const input = component.shadowRoot?.querySelector('[data-test="input"]');
60
- expect(input?.indeterminate).to.be.true;
61
- expect(component.indeterminate).to.equal(true);
62
- expect(component.hasAttribute('indeterminate')).to.be.true;
63
- });
@@ -1 +0,0 @@
1
- import './drawer.js';
@@ -1,52 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-unused-expressions */
2
- import './drawer.js';
3
- import { expect, fixture, html } from '@open-wc/testing';
4
- import GlideCoreDrawer from './drawer.js';
5
- import GlideCoreTreeItemMenu from './tree.item.menu.js';
6
- GlideCoreDrawer.shadowRootOptions.mode = 'open';
7
- GlideCoreTreeItemMenu.shadowRootOptions.mode = 'open';
8
- it('sets containing block for tooltips', async () => {
9
- const drawer = await fixture(html `<glide-core-drawer>
10
- <div>Some other element</div>
11
- <glide-core-tooltip>
12
- Tooltip
13
- <span slot="target">Target</span>
14
- </glide-core-tooltip>
15
- </glide-core-drawer>`);
16
- const containingBlock = drawer.shadowRoot?.querySelector('aside');
17
- drawer.open();
18
- const tooltip = drawer.querySelector('glide-core-tooltip');
19
- expect(tooltip?.containingBlock === containingBlock).to.be.true;
20
- });
21
- it('sets containing block for menus', async () => {
22
- const drawer = await fixture(html `<glide-core-drawer>
23
- <glide-core-menu>
24
- <glide-core-menu-options>
25
- <glide-core-menu-link label="One" url="/one"> </glide-core-menu-link>
26
- </glide-core-menu-options>
27
-
28
- <div slot="target">Target</div>
29
- </glide-core-menu>
30
- </glide-core-drawer>`);
31
- const containingBlock = drawer.shadowRoot?.querySelector('aside');
32
- drawer.open();
33
- const menu = drawer.querySelector('glide-core-menu');
34
- expect(menu?.containingBlock === containingBlock).to.be.true;
35
- });
36
- it('sets containing block for tree item menu', async () => {
37
- const drawer = await fixture(html `<glide-core-drawer>
38
- <glide-core-tree>
39
- <glide-core-tree-item label="yup">
40
- <glide-core-tree-item-menu slot="menu">
41
- <glide-core-menu-link label="Edit" url="/edit">
42
- </glide-core-menu-link>
43
- </glide-core-tree-item-menu>
44
- </glide-core-tree-item>
45
- </glide-core-tree>
46
- </glide-core-drawer>`);
47
- const containingBlock = drawer.shadowRoot?.querySelector('aside');
48
- drawer.open();
49
- const treeItemMenu = drawer.querySelector('glide-core-tree-item-menu');
50
- const menu = treeItemMenu?.shadowRoot?.querySelector('glide-core-menu');
51
- expect(menu?.containingBlock === containingBlock).to.be.true;
52
- });
@@ -1,15 +0,0 @@
1
- interface Arguments {
2
- elements: Element[];
3
- containingBlock: Element;
4
- }
5
- /**
6
- * Sets the containing block for all child elements that might contain
7
- * floating-ui components (i.e. tooltips, popovers, or menus),
8
- * for cases where the containing block element is inside a closed shadow DOM,
9
- * and therefore wouldn't be able to be detected by floating-ui's getOffsetParent calculations.
10
- * Necessary when the containing block has something like a backdrop-filter
11
- * https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block
12
- * https://github.com/floating-ui/floating-ui/issues/2955
13
- */
14
- export declare function setContainingBlock({ elements, containingBlock }: Arguments): void;
15
- export {};
@@ -1 +0,0 @@
1
- import GlideCoreMenu from"../menu.js";import GlideCoreTooltip from"../tooltip.js";import GlideCoreTree from"../tree.js";export function setContainingBlock({elements:o,containingBlock:e}){const i=o.filter((o=>o instanceof GlideCoreTooltip||o instanceof GlideCoreMenu||o instanceof GlideCoreTree));for(const o of i)o.setContainingBlock(e)}
@@ -1,63 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-unused-expressions */
2
- import { expect, fixture, html } from '@open-wc/testing';
3
- import GlideCoreModal from './modal.js';
4
- import GlideCoreModalTertiaryIcon from './modal.tertiary-icon.js';
5
- import GlideCoreTreeItemMenu from './tree.item.menu.js';
6
- GlideCoreModal.shadowRootOptions.mode = 'open';
7
- GlideCoreModalTertiaryIcon.shadowRootOptions.mode = 'open';
8
- GlideCoreTreeItemMenu.shadowRootOptions.mode = 'open';
9
- it('sets containing block for tooltips', async () => {
10
- const element = await fixture(html `<glide-core-modal label="Modal title">
11
- <glide-core-tooltip>
12
- Tooltip
13
- <span slot="target">Target</span>
14
- </glide-core-tooltip>
15
- <glide-core-modal-tertiary-icon
16
- slot="tertiary"
17
- label="Information"
18
- tooltip-placement="right"
19
- >
20
- Icon
21
- </glide-core-modal-tertiary-icon>
22
- </glide-core-modal>`);
23
- const containingBlock = element.shadowRoot?.querySelector('dialog');
24
- element.showModal();
25
- const tooltip = element.querySelector('glide-core-tooltip');
26
- expect(tooltip?.containingBlock === containingBlock).to.be.true;
27
- const tertiaryIconTooltip = element
28
- .querySelector('glide-core-modal-tertiary-icon')
29
- ?.shadowRoot?.querySelector('glide-core-tooltip');
30
- expect(tertiaryIconTooltip?.containingBlock === containingBlock).to.be.true;
31
- });
32
- it('sets containing block for menus', async () => {
33
- const element = await fixture(html `<glide-core-modal label="Modal title">
34
- <glide-core-menu>
35
- <glide-core-menu-options>
36
- <glide-core-menu-link label="One" url="/one"> </glide-core-menu-link>
37
- </glide-core-menu-options>
38
-
39
- <div slot="target">Target</div>
40
- </glide-core-menu>
41
- </glide-core-modal>`);
42
- const containingBlock = element.shadowRoot?.querySelector('dialog');
43
- element.showModal();
44
- const menu = element.querySelector('glide-core-menu');
45
- expect(menu?.containingBlock === containingBlock).to.be.true;
46
- });
47
- it('sets containing block for tree item menu', async () => {
48
- const element = await fixture(html `<glide-core-modal label="Modal title">
49
- <glide-core-tree>
50
- <glide-core-tree-item label="yup">
51
- <glide-core-tree-item-menu slot="menu">
52
- <glide-core-menu-link label="Edit" url="/edit">
53
- </glide-core-menu-link>
54
- </glide-core-tree-item-menu>
55
- </glide-core-tree-item>
56
- </glide-core-tree>
57
- </glide-core-modal>`);
58
- const containingBlock = element.shadowRoot?.querySelector('dialog');
59
- element.showModal();
60
- const treeItemMenu = element.querySelector('glide-core-tree-item-menu');
61
- const menu = treeItemMenu?.shadowRoot?.querySelector('glide-core-menu');
62
- expect(menu?.containingBlock === containingBlock).to.be.true;
63
- });