@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.
Files changed (207) hide show
  1. package/README.md +17 -53
  2. package/dist/accordion.d.ts +10 -10
  3. package/dist/accordion.js +1 -1
  4. package/dist/accordion.stories.d.ts +0 -1
  5. package/dist/accordion.styles.js +36 -38
  6. package/dist/accordion.test.basics.js +13 -95
  7. package/dist/accordion.test.events.js +21 -33
  8. package/dist/accordion.test.focus.d.ts +1 -0
  9. package/dist/accordion.test.focus.js +11 -0
  10. package/dist/accordion.test.interactions.d.ts +1 -0
  11. package/dist/accordion.test.interactions.js +75 -0
  12. package/dist/button-group.button.d.ts +2 -4
  13. package/dist/button-group.button.js +1 -1
  14. package/dist/button-group.button.styles.js +6 -14
  15. package/dist/button-group.button.test.basics.js +8 -17
  16. package/dist/button-group.button.test.interactions.js +4 -4
  17. package/dist/button-group.d.ts +0 -2
  18. package/dist/button-group.test.basics.js +10 -10
  19. package/dist/button-group.test.events.js +2 -2
  20. package/dist/button-group.test.interactions.js +1 -1
  21. package/dist/button.d.ts +7 -10
  22. package/dist/button.js +1 -1
  23. package/dist/button.styles.js +4 -7
  24. package/dist/button.test.basics.js +10 -26
  25. package/dist/button.test.events.js +9 -9
  26. package/dist/checkbox-group.d.ts +3 -4
  27. package/dist/checkbox-group.js +1 -1
  28. package/dist/checkbox-group.styles.js +13 -1
  29. package/dist/checkbox-group.test.basics.js +8 -12
  30. package/dist/checkbox-group.test.focus.js +7 -7
  31. package/dist/checkbox-group.test.interactions.d.ts +1 -0
  32. package/dist/checkbox-group.test.interactions.js +82 -0
  33. package/dist/checkbox.d.ts +5 -4
  34. package/dist/checkbox.js +1 -1
  35. package/dist/checkbox.styles.js +35 -15
  36. package/dist/checkbox.test.basics.js +6 -15
  37. package/dist/checkbox.test.focus.js +4 -2
  38. package/dist/checkbox.test.interactions.js +11 -11
  39. package/dist/drawer.d.ts +2 -5
  40. package/dist/drawer.js +1 -1
  41. package/dist/drawer.test.accessibility.js +8 -8
  42. package/dist/drawer.test.basics.js +16 -16
  43. package/dist/drawer.test.closing.js +18 -16
  44. package/dist/drawer.test.events.js +13 -24
  45. package/dist/drawer.test.methods.js +22 -22
  46. package/dist/dropdown.d.ts +7 -5
  47. package/dist/dropdown.js +1 -1
  48. package/dist/dropdown.option.d.ts +1 -3
  49. package/dist/dropdown.option.js +1 -1
  50. package/dist/dropdown.option.styles.js +31 -19
  51. package/dist/dropdown.option.test.basics.js +4 -4
  52. package/dist/dropdown.styles.js +39 -3
  53. package/dist/dropdown.test.basics.js +8 -13
  54. package/dist/dropdown.test.basics.multiple.js +63 -31
  55. package/dist/dropdown.test.basics.single.js +49 -0
  56. package/dist/dropdown.test.focus.filterable.js +12 -3
  57. package/dist/dropdown.test.focus.js +18 -2
  58. package/dist/dropdown.test.interactions.filterable.js +121 -45
  59. package/dist/dropdown.test.interactions.multiple.js +71 -30
  60. package/dist/dropdown.test.interactions.single.js +26 -4
  61. package/dist/form-controls-layout.d.ts +0 -2
  62. package/dist/icon-button.d.ts +2 -4
  63. package/dist/icon-button.js +1 -1
  64. package/dist/icon-button.test.basics.js +14 -82
  65. package/dist/icon-button.test.focus.d.ts +1 -0
  66. package/dist/icon-button.test.focus.js +13 -0
  67. package/dist/input.d.ts +4 -5
  68. package/dist/input.js +1 -1
  69. package/dist/input.styles.js +4 -4
  70. package/dist/input.test.basics.js +0 -52
  71. package/dist/input.test.events.js +27 -27
  72. package/dist/input.test.focus.js +27 -26
  73. package/dist/input.test.form.js +6 -6
  74. package/dist/input.test.validity.js +130 -130
  75. package/dist/label.d.ts +1 -3
  76. package/dist/label.js +1 -1
  77. package/dist/label.styles.js +5 -6
  78. package/dist/label.test.basics.js +4 -4
  79. package/dist/library/ow.js +1 -1
  80. package/dist/menu.button.d.ts +0 -2
  81. package/dist/menu.button.test.basics.js +3 -3
  82. package/dist/menu.d.ts +1 -4
  83. package/dist/menu.js +1 -1
  84. package/dist/menu.link.d.ts +1 -2
  85. package/dist/menu.link.js +1 -1
  86. package/dist/menu.options.d.ts +0 -2
  87. package/dist/menu.test.events.js +6 -6
  88. package/dist/menu.test.focus.js +5 -18
  89. package/dist/menu.test.interactions.js +48 -24
  90. package/dist/modal.d.ts +6 -17
  91. package/dist/modal.icon-button.d.ts +0 -2
  92. package/dist/modal.icon-button.test.basics.js +3 -3
  93. package/dist/modal.js +1 -1
  94. package/dist/modal.styles.js +13 -19
  95. package/dist/modal.tertiary-icon.d.ts +0 -3
  96. package/dist/modal.tertiary-icon.test.basics.js +3 -3
  97. package/dist/modal.test.basics.js +9 -5
  98. package/dist/modal.test.close.js +2 -2
  99. package/dist/modal.test.events.js +2 -2
  100. package/dist/radio-group.d.ts +0 -3
  101. package/dist/radio-group.js +1 -1
  102. package/dist/radio-group.test.basics.js +61 -61
  103. package/dist/radio-group.test.events.js +13 -13
  104. package/dist/radio-group.test.focus.js +1 -1
  105. package/dist/radio-group.test.form.js +2 -2
  106. package/dist/radio-group.test.validity.js +12 -12
  107. package/dist/radio.d.ts +0 -3
  108. package/dist/radio.styles.js +4 -12
  109. package/dist/split-button.d.ts +8 -11
  110. package/dist/split-button.js +1 -1
  111. package/dist/split-button.primary-button.d.ts +21 -0
  112. package/dist/split-button.primary-button.js +1 -0
  113. package/dist/split-button.primary-button.styles.js +96 -0
  114. package/dist/split-button.primary-button.test.basics.d.ts +1 -0
  115. package/dist/split-button.primary-button.test.basics.js +31 -0
  116. package/dist/split-button.primary-button.test.focus.d.ts +1 -0
  117. package/dist/split-button.primary-button.test.focus.js +14 -0
  118. package/dist/split-button.primary-link.d.ts +19 -0
  119. package/dist/split-button.primary-link.js +1 -0
  120. package/dist/split-button.primary-link.test.basics.d.ts +1 -0
  121. package/dist/split-button.primary-link.test.basics.js +30 -0
  122. package/dist/split-button.primary-link.test.focus.d.ts +1 -0
  123. package/dist/split-button.primary-link.test.focus.js +15 -0
  124. package/dist/split-button.secondary-button.d.ts +25 -0
  125. package/dist/split-button.secondary-button.js +1 -0
  126. package/dist/split-button.secondary-button.styles.js +103 -0
  127. package/dist/split-button.secondary-button.test.basics.d.ts +1 -0
  128. package/dist/split-button.secondary-button.test.basics.js +58 -0
  129. package/dist/split-button.secondary-button.test.focus.d.ts +1 -0
  130. package/dist/split-button.secondary-button.test.focus.js +14 -0
  131. package/dist/split-button.secondary-button.test.interactions.d.ts +2 -0
  132. package/dist/split-button.secondary-button.test.interactions.js +30 -0
  133. package/dist/split-button.stories.d.ts +4 -3
  134. package/dist/split-button.styles.js +1 -94
  135. package/dist/split-button.test.basics.d.ts +2 -1
  136. package/dist/split-button.test.basics.js +67 -80
  137. package/dist/split-button.test.interactions.d.ts +4 -0
  138. package/dist/split-button.test.interactions.js +51 -0
  139. package/dist/styles/opacity-and-scale-animation.js +2 -6
  140. package/dist/styles/variables.css +1 -1
  141. package/dist/tab.d.ts +2 -11
  142. package/dist/tab.group.d.ts +2 -5
  143. package/dist/tab.group.styles.js +12 -15
  144. package/dist/tab.group.test.basics.js +49 -34
  145. package/dist/tab.group.test.interactions.js +17 -14
  146. package/dist/tab.panel.d.ts +0 -3
  147. package/dist/tab.test.basics.js +6 -5
  148. package/dist/tag.d.ts +6 -4
  149. package/dist/tag.js +1 -1
  150. package/dist/tag.styles.js +36 -36
  151. package/dist/tag.test.basics.js +16 -109
  152. package/dist/tag.test.events.js +12 -8
  153. package/dist/tag.test.focus.js +2 -3
  154. package/dist/tag.test.interactions.d.ts +1 -0
  155. package/dist/tag.test.interactions.js +34 -0
  156. package/dist/textarea.d.ts +2 -3
  157. package/dist/textarea.js +2 -2
  158. package/dist/textarea.test.basics.js +8 -8
  159. package/dist/textarea.test.events.js +55 -55
  160. package/dist/textarea.test.form.js +9 -9
  161. package/dist/textarea.test.validity.js +167 -135
  162. package/dist/toasts.d.ts +1 -5
  163. package/dist/toasts.test.basics.js +2 -1
  164. package/dist/toasts.toast.d.ts +1 -4
  165. package/dist/toasts.toast.js +1 -1
  166. package/dist/toasts.toast.styles.js +12 -0
  167. package/dist/toggle.d.ts +0 -2
  168. package/dist/toggle.styles.js +1 -5
  169. package/dist/toggle.test.basics.js +2 -2
  170. package/dist/toggle.test.interactions.js +7 -7
  171. package/dist/tooltip.d.ts +2 -1
  172. package/dist/tooltip.js +1 -1
  173. package/dist/tooltip.styles.js +37 -14
  174. package/dist/tooltip.test.basics.d.ts +1 -1
  175. package/dist/tooltip.test.basics.js +19 -19
  176. package/dist/tree.d.ts +0 -2
  177. package/dist/tree.item.d.ts +5 -7
  178. package/dist/tree.item.icon-button.d.ts +1 -4
  179. package/dist/tree.item.js +1 -1
  180. package/dist/tree.item.menu.d.ts +0 -2
  181. package/dist/tree.item.menu.test.basics.js +9 -9
  182. package/dist/tree.item.styles.js +4 -3
  183. package/dist/tree.item.test.basics.js +43 -31
  184. package/dist/tree.test.basics.js +29 -29
  185. package/dist/tree.test.focus.js +77 -74
  186. package/package.json +12 -14
  187. package/dist/split-container.d.ts +0 -31
  188. package/dist/split-container.js +0 -1
  189. package/dist/split-container.styles.js +0 -132
  190. package/dist/split-container.test.basics.d.ts +0 -3
  191. package/dist/split-container.test.basics.js +0 -445
  192. package/dist/split-container.test.interactions.d.ts +0 -1
  193. package/dist/split-container.test.interactions.js +0 -20
  194. package/dist/split-link.d.ts +0 -25
  195. package/dist/split-link.js +0 -1
  196. package/dist/split-link.test.basics.d.ts +0 -1
  197. package/dist/split-link.test.basics.js +0 -93
  198. package/dist/split-link.test.interactions.d.ts +0 -1
  199. package/dist/split-link.test.interactions.js +0 -20
  200. package/dist/status-indicator.d.ts +0 -30
  201. package/dist/status-indicator.js +0 -1
  202. package/dist/status-indicator.stories.d.ts +0 -5
  203. package/dist/status-indicator.styles.js +0 -58
  204. package/dist/status-indicator.test.basics.d.ts +0 -1
  205. package/dist/status-indicator.test.basics.js +0 -102
  206. /package/dist/{split-container.styles.d.ts → split-button.primary-button.styles.d.ts} +0 -0
  207. /package/dist/{status-indicator.styles.d.ts → split-button.secondary-button.styles.d.ts} +0 -0
@@ -46,14 +46,6 @@ import{css}from"lit";import focusOutline from"./styles/focus-outline.js";import
46
46
  padding: 0;
47
47
  position: absolute;
48
48
 
49
- ::slotted(kbd) {
50
- color: var(--glide-core-text-header-2);
51
- display: inline-block;
52
- font-family: inherit;
53
- font-size: inherit;
54
- white-space: nowrap;
55
- }
56
-
57
49
  &:popover-open {
58
50
  display: flex;
59
51
 
@@ -105,22 +97,53 @@ import{css}from"lit";import focusOutline from"./styles/focus-outline.js";import
105
97
  }
106
98
  }
107
99
 
108
- .default-slot {
100
+ .content {
109
101
  align-items: center;
110
102
  background-color: var(--glide-core-surface-base-dark);
111
103
  border-radius: var(--glide-core-spacing-xs);
112
- color: var(--glide-core-text-selected);
113
- column-gap: var(--glide-core-spacing-xs);
114
104
  display: flex;
115
105
  font-family: var(--glide-core-body-md-font-family);
116
106
  font-size: var(--glide-core-body-sm-font-size);
117
107
  font-style: var(--glide-core-body-sm-font-style);
118
108
  font-weight: var(--glide-core-body-sm-font-weight);
119
- hyphens: auto;
120
109
  inline-size: max-content;
121
110
  inset-block-start: 50%;
122
- max-inline-size: 11.25rem;
123
- overflow-wrap: break-word;
111
+ line-height: var(--glide-core-body-sm-line-height);
124
112
  padding: var(--glide-core-spacing-xs) var(--glide-core-spacing-sm);
113
+
114
+ &.reversed {
115
+ flex-direction: row-reverse;
116
+ }
117
+ }
118
+
119
+ .default-slot {
120
+ color: var(--glide-core-text-selected);
121
+ display: block;
122
+ hyphens: auto;
123
+ max-inline-size: 11.25rem;
124
+ min-inline-size: 1.875rem;
125
+ overflow-wrap: anywhere;
126
+ }
127
+
128
+ .shortcut {
129
+ color: var(--glide-core-text-body-lighter);
130
+ display: none;
131
+ white-space: nowrap;
132
+
133
+ &.visible {
134
+ display: inline-block;
135
+ }
136
+
137
+ &.reversed {
138
+ margin-inline-end: var(--glide-core-spacing-xs);
139
+ }
140
+
141
+ &:not(.reversed) {
142
+ margin-inline-start: var(--glide-core-spacing-xs);
143
+ }
144
+ }
145
+
146
+ kbd {
147
+ font-family: var(--glide-core-body-md-font-family);
125
148
  }
126
149
  `];
@@ -1 +1 @@
1
- import './tooltip.js';
1
+ export {};
@@ -1,5 +1,4 @@
1
1
  /* eslint-disable @typescript-eslint/no-unused-expressions */
2
- import './tooltip.js';
3
2
  import { ArgumentError } from 'ow';
4
3
  import { aTimeout, expect, fixture, html } from '@open-wc/testing';
5
4
  import GlideCoreTooltip from './tooltip.js';
@@ -30,11 +29,11 @@ it('has defaults', async () => {
30
29
  expect(component.open).to.be.false;
31
30
  expect(component.placement).to.be.be.undefined;
32
31
  expect(component.disabled).to.be.false;
33
- expect(component.hasAttribute('disabled')).to.be.false;
32
+ expect(component.shortcut).to.be.deep.equal([]);
34
33
  expect(tooltip?.checkVisibility()).to.be.false;
35
34
  });
36
35
  it('can be open', async () => {
37
- const component = await fixture(html `<glide-core-tooltip aria-label="Label" open>
36
+ const component = await fixture(html `<glide-core-tooltip open>
38
37
  Tooltip
39
38
  <span slot="target" tabindex="0">Target</span>
40
39
  </glide-core-tooltip>`);
@@ -43,29 +42,24 @@ it('can be open', async () => {
43
42
  await aTimeout(0);
44
43
  expect(tooltip?.checkVisibility()).to.be.true;
45
44
  });
46
- it('can have a tooltip', async () => {
47
- const component = await fixture(html `<glide-core-tooltip aria-label="Label">
45
+ it('can have a single-key shortcut', async () => {
46
+ const component = await fixture(html `<glide-core-tooltip .shortcut=${['Enter']}>
48
47
  Tooltip
49
48
  <span slot="target" tabindex="0">Target</span>
50
49
  </glide-core-tooltip>`);
51
- const tooltip = component?.shadowRoot
52
- ?.querySelector('slot:not([name])')
53
- ?.assignedNodes()
54
- .at(0);
55
- expect(tooltip?.textContent?.trim()).to.equal('Tooltip');
50
+ const shortcut = component.shadowRoot?.querySelector('[data-test="shortcut"]');
51
+ expect(shortcut?.textContent?.trim()).to.equal('Enter');
56
52
  });
57
- it('can have a target', async () => {
58
- const component = await fixture(html `<glide-core-tooltip>
53
+ it('can have a multi-key shortcut', async () => {
54
+ const component = await fixture(html `<glide-core-tooltip .shortcut=${['CMD', 'K']}>
59
55
  Tooltip
60
56
  <span slot="target" tabindex="0">Target</span>
61
57
  </glide-core-tooltip>`);
62
- const assignedElements = component.shadowRoot
63
- ?.querySelector('slot[name="target"]')
64
- ?.assignedElements();
65
- expect(assignedElements?.at(0)?.textContent).to.equal('Target');
58
+ const shortcut = component.shadowRoot?.querySelector('[data-test="shortcut"]');
59
+ expect(shortcut?.textContent?.replaceAll(/\s/g, '')).to.equal('CMD+K');
66
60
  });
67
- it('does not open when disabled', async () => {
68
- const component = await fixture(html `<glide-core-tooltip aria-label="Label" open disabled>
61
+ it('is not open when disabled', async () => {
62
+ const component = await fixture(html `<glide-core-tooltip open disabled>
69
63
  Tooltip
70
64
  <span slot="target" tabindex="0">Target</span>
71
65
  </glide-core-tooltip>`);
@@ -89,7 +83,7 @@ it('throws if it does not have a default slot', async () => {
89
83
  it('throws if it does not have a "target" slot', async () => {
90
84
  const spy = sinon.spy();
91
85
  try {
92
- await fixture(html `<glide-core-tooltip> Tooltip </glide-core-tooltip>`);
86
+ await fixture(html `<glide-core-tooltip>Tooltip</glide-core-tooltip>`);
93
87
  }
94
88
  catch (error) {
95
89
  if (error instanceof ArgumentError) {
@@ -98,3 +92,9 @@ it('throws if it does not have a "target" slot', async () => {
98
92
  }
99
93
  expect(spy.callCount).to.equal(1);
100
94
  });
95
+ it('has `placement` coverage', async () => {
96
+ await fixture(html `<glide-core-tooltip open placement="top">
97
+ Tooltip
98
+ <span slot="target" tabindex="0">Target</span>
99
+ </glide-core-tooltip>`);
100
+ });
package/dist/tree.d.ts CHANGED
@@ -6,8 +6,6 @@ declare global {
6
6
  }
7
7
  }
8
8
  /**
9
- * @description A tree containing a hierarchy of Tree Items.
10
- *
11
9
  * @slot - One or more of <glide-core-tree-item>
12
10
  */
13
11
  export default class GlideCoreTree extends LitElement {
@@ -6,12 +6,10 @@ declare global {
6
6
  }
7
7
  }
8
8
  /**
9
- * @description A single node of a Tree.
10
- *
11
- * @slot - One or more of <glide-core-tree-item>, if this tree item contains nested tree items.
12
- * @slot prefix - An optional icon to display before the label.
13
- * @slot suffix - An optional icon to add after the label.
14
- * @slot menu - Place a <glide-core-menu> here, which will be visible on hover or focus
9
+ * @slot - Zero or more of `<glide-core-tree-item>`.
10
+ * @slot prefix - An optional icon before the label.
11
+ * @slot suffix - An optional icon after the label.
12
+ * @slot menu - A `<glide-core-menu>` made visible on hover or focus.
15
13
  */
16
14
  export default class GlideCoreTreeItem extends LitElement {
17
15
  #private;
@@ -25,7 +23,6 @@ export default class GlideCoreTreeItem extends LitElement {
25
23
  nonCollapsible: boolean;
26
24
  slotElements: GlideCoreTreeItem[];
27
25
  suffixSlotAssignedElements: HTMLElement[];
28
- firstUpdated(): void;
29
26
  focus(options?: FocusOptions): void;
30
27
  get hasChildTreeItems(): boolean;
31
28
  get hasExpandIcon(): boolean;
@@ -38,4 +35,5 @@ export default class GlideCoreTreeItem extends LitElement {
38
35
  selectItem(item: GlideCoreTreeItem): GlideCoreTreeItem | undefined;
39
36
  toggleExpand(): void;
40
37
  private childTreeItems;
38
+ private hasPrefixIcon;
41
39
  }
@@ -6,10 +6,7 @@ declare global {
6
6
  }
7
7
  }
8
8
  /**
9
- * @description An icon button that can be used inside of a tree item.
10
- * Provides correct color styling based on tree item state
11
- *
12
- * @slot - Reserved for the icon to display inside of the button.
9
+ * @slot - An icon.
13
10
  */
14
11
  export default class GlideCoreTreeItemIconButton extends LitElement {
15
12
  #private;
package/dist/tree.item.js CHANGED
@@ -1 +1 @@
1
- var _a,GlideCoreTreeItem_1,__decorate=this&&this.__decorate||function(e,t,o,i){var r,s=arguments.length,l=s<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--)(r=e[n])&&(l=(s<3?r(l):s>3?r(t,o,l):r(t,o))||l);return s>3&&l&&Object.defineProperty(t,o,l),l};import"./tree.item.menu.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,queryAssignedElements,state}from"lit/decorators.js";import{ifDefined}from"lit/directives/if-defined.js";import{when}from"lit/directives/when.js";import GlideCoreIconButton from"./icon-button.js";import GlideCoreTreeItemMenu from"./tree.item.menu.js";import ow,{owSlotType}from"./library/ow.js";import styles from"./tree.item.styles.js";let GlideCoreTreeItem=class GlideCoreTreeItem extends LitElement{constructor(){super(...arguments),this.expanded=!1,this.label="",this.level=1,this.selected=!1,this.removeIndentation=!1,this.nonCollapsible=!1,this.childTreeItems=[],this.#e=createRef(),this.#t=new LocalizeController(this),this.#o=createRef()}static{GlideCoreTreeItem_1=this}static{this.shadowRootOptions={...LitElement.shadowRootOptions,delegatesFocus:!0,mode:"closed"}}static{this.styles=styles}firstUpdated(){this.#i()}focus(e){this.#e.value?.focus(e),this.#r(0)}get hasChildTreeItems(){return this.childTreeItems.length>0}get hasExpandIcon(){return this.hasChildTreeItems&&!this.nonCollapsible}render(){return html`<div class="${classMap({component:!0,expanded:this.expanded,selected:this.selected})}" role="treeitem" aria-label="${this.label}" aria-selected="${ifDefined(this.#s)}" aria-expanded="${ifDefined(this.#l)}"><div class="${classMap({"label-container":!0})}" tabindex="-1" @focusout="${this.#n}" @focusin="${this.#a}" ${ref(this.#e)}><div style="flex-shrink: 0; width:${this.#d};"></div>${when(!this.removeIndentation||this.hasExpandIcon,(()=>html`<div class="expand-icon-container">${when(this.hasExpandIcon,(()=>html`<div><svg aria-hidden="true" class="${classMap({"expand-icon":!0,"expand-icon-expanded":this.expanded})}" width="16" height="16" viewBox="0 0 24 24" fill="none"><path d="M9 18L15 12L9 6" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg></div>`))}</div>`))}<slot name="prefix"></slot><div class="label">${this.label}</div><div class="icon-container"><slot name="menu" ${ref(this.#o)} @slotchange="${this.#c}"></slot><slot name="suffix"></slot></div></div><div class="child-items" role="group"><slot></slot></div></div>`}selectItem(e){let t;for(const o of this.slotElements)if(e===o)o.setAttribute("selected","true"),t=o;else{o.removeAttribute("selected");const i=o.selectItem(e);i&&(t=i)}return t}toggleExpand(){this.expanded=!this.expanded}#e;#t;#o;get#l(){return this.hasChildTreeItems?this.expanded?"true":"false":void 0}get#s(){return this.hasChildTreeItems?void 0:this.selected?"true":"false"}#a(e){this.#m(e.target)&&e.stopPropagation()}#n(e){this.#m(e.relatedTarget)?e.stopPropagation():this.#r(-1)}get#d(){return 20*(this.level-1)+"px"}#m(e){return e&&e instanceof HTMLElement&&!(e instanceof GlideCoreTreeItem_1)&&this.contains(e)}#c(){owSlotType(this.#o.value,[GlideCoreTreeItemMenu]);for(const e of this.#o.value.assignedElements())e instanceof GlideCoreTreeItemMenu&&(e.label=this.#t.term("actionsFor",this.label))}#r(e){ow(this.#e.value,ow.object.instanceOf(HTMLElement)),this.#e.value.tabIndex=e;for(const t of this.querySelectorAll("& > glide-core-tree-item-icon-button"))t.tabIndex=e}#i(){const e=[];for(const t of this.slotElements)t.level=this.level+1,e.push(t);this.childTreeItems=e}};__decorate([property({type:Boolean})],GlideCoreTreeItem.prototype,"expanded",void 0),__decorate([property({reflect:!0})],GlideCoreTreeItem.prototype,"label",void 0),__decorate([property({type:Number})],GlideCoreTreeItem.prototype,"level",void 0),__decorate([property({type:Boolean})],GlideCoreTreeItem.prototype,"selected",void 0),__decorate([property({type:Boolean,attribute:"remove-indentation"})],GlideCoreTreeItem.prototype,"removeIndentation",void 0),__decorate([property({type:Boolean,attribute:"non-collapsible"})],GlideCoreTreeItem.prototype,"nonCollapsible",void 0),__decorate([queryAssignedElements()],GlideCoreTreeItem.prototype,"slotElements",void 0),__decorate([queryAssignedElements({slot:"suffix"})],GlideCoreTreeItem.prototype,"suffixSlotAssignedElements",void 0),__decorate([state()],GlideCoreTreeItem.prototype,"childTreeItems",void 0),GlideCoreTreeItem=GlideCoreTreeItem_1=__decorate([customElement("glide-core-tree-item")],GlideCoreTreeItem);export default GlideCoreTreeItem;
1
+ var _a,GlideCoreTreeItem_1,__decorate=this&&this.__decorate||function(e,t,o,i){var l,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var n=e.length-1;n>=0;n--)(l=e[n])&&(s=(r<3?l(s):r>3?l(t,o,s):l(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s};import"./tree.item.menu.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,queryAssignedElements,state}from"lit/decorators.js";import{ifDefined}from"lit/directives/if-defined.js";import{when}from"lit/directives/when.js";import GlideCoreIconButton from"./icon-button.js";import GlideCoreTreeItemMenu from"./tree.item.menu.js";import ow,{owSlotType}from"./library/ow.js";import styles from"./tree.item.styles.js";let GlideCoreTreeItem=class GlideCoreTreeItem extends LitElement{constructor(){super(...arguments),this.expanded=!1,this.label="",this.level=1,this.selected=!1,this.removeIndentation=!1,this.nonCollapsible=!1,this.childTreeItems=[],this.hasPrefixIcon=!1,this.#e=createRef(),this.#t=createRef(),this.#o=new LocalizeController(this),this.#i=createRef(),this.#l=createRef()}static{GlideCoreTreeItem_1=this}static{this.shadowRootOptions={...LitElement.shadowRootOptions,delegatesFocus:!0,mode:"closed"}}static{this.styles=styles}focus(e){this.#t.value?.focus(e),this.#r(0)}get hasChildTreeItems(){return this.childTreeItems.length>0}get hasExpandIcon(){return this.hasChildTreeItems&&!this.nonCollapsible}render(){return html`<div class="${classMap({component:!0,expanded:this.expanded,selected:this.selected})}" role="treeitem" aria-label="${this.label}" aria-selected="${ifDefined(this.#s)}" aria-expanded="${ifDefined(this.#n)}"><div class="${classMap({"label-container":!0,"prefix-icon":this.hasPrefixIcon})}" tabindex="-1" @focusout="${this.#a}" @focusin="${this.#d}" ${ref(this.#t)}><div style="flex-shrink: 0; width:${this.#c};"></div>${when(!this.removeIndentation||this.hasExpandIcon,(()=>html`<div class="expand-icon-container">${when(this.hasExpandIcon,(()=>html`<div><svg aria-hidden="true" class="${classMap({"expand-icon":!0,"expand-icon-expanded":this.expanded})}" width="16" height="16" viewBox="0 0 24 24" fill="none"><path d="M9 18L15 12L9 6" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg></div>`))}</div>`))}<slot name="prefix" ${ref(this.#l)} @slotchange="${this.#h}"></slot><div class="label">${this.label}</div><div class="icon-container"><slot name="menu" ${ref(this.#i)} @slotchange="${this.#m}"></slot><slot name="suffix"></slot></div></div><div class="child-items" role="group"><slot @slotchange="${this.#f}" ${ref(this.#e)}></slot></div></div>`}selectItem(e){let t;for(const o of this.slotElements)if(e===o)o.setAttribute("selected","true"),t=o;else{o.removeAttribute("selected");const i=o.selectItem(e);i&&(t=i)}return t}toggleExpand(){this.expanded=!this.expanded}#e;#t;#o;#i;#l;get#n(){return this.hasChildTreeItems?this.expanded?"true":"false":void 0}get#s(){return this.hasChildTreeItems?void 0:this.selected?"true":"false"}#d(e){this.#p(e.target)&&e.stopPropagation()}#a(e){this.#p(e.relatedTarget)?e.stopPropagation():this.#r(-1)}get#c(){return 20*(this.level-1)+"px"}#p(e){return e&&e instanceof HTMLElement&&!(e instanceof GlideCoreTreeItem_1)&&this.contains(e)}#f(){this.#u()}#m(){owSlotType(this.#i.value,[GlideCoreTreeItemMenu]);for(const e of this.#i.value.assignedElements())e instanceof GlideCoreTreeItemMenu&&(e.label=this.#o.term("actionsFor",this.label))}#h(){const e=this.#l.value?.assignedNodes();this.hasPrefixIcon=Boolean(e&&e.length>0)}#r(e){ow(this.#t.value,ow.object.instanceOf(HTMLElement)),this.#t.value.tabIndex=e;for(const t of this.querySelectorAll("& > glide-core-tree-item-icon-button"))t.tabIndex=e}#u(){const e=[];for(const t of this.slotElements)t.level=this.level+1,e.push(t);this.childTreeItems=e}};__decorate([property({reflect:!0,type:Boolean})],GlideCoreTreeItem.prototype,"expanded",void 0),__decorate([property({reflect:!0})],GlideCoreTreeItem.prototype,"label",void 0),__decorate([property({reflect:!0,type:Number})],GlideCoreTreeItem.prototype,"level",void 0),__decorate([property({reflect:!0,type:Boolean})],GlideCoreTreeItem.prototype,"selected",void 0),__decorate([property({reflect:!0,type:Boolean,attribute:"remove-indentation"})],GlideCoreTreeItem.prototype,"removeIndentation",void 0),__decorate([property({reflect:!0,type:Boolean,attribute:"non-collapsible"})],GlideCoreTreeItem.prototype,"nonCollapsible",void 0),__decorate([queryAssignedElements()],GlideCoreTreeItem.prototype,"slotElements",void 0),__decorate([queryAssignedElements({slot:"suffix"})],GlideCoreTreeItem.prototype,"suffixSlotAssignedElements",void 0),__decorate([state()],GlideCoreTreeItem.prototype,"childTreeItems",void 0),__decorate([state()],GlideCoreTreeItem.prototype,"hasPrefixIcon",void 0),GlideCoreTreeItem=GlideCoreTreeItem_1=__decorate([customElement("glide-core-tree-item")],GlideCoreTreeItem);export default GlideCoreTreeItem;
@@ -9,8 +9,6 @@ declare global {
9
9
  }
10
10
  }
11
11
  /**
12
- * @description A menu built into a tree item. Uses <glide-core-menu>
13
- *
14
12
  * @slot - One or more of <glide-core-menu-link> or <glide-core-menu-button>.
15
13
  * @slot target - A focusable element against which Menu will be positioned. Opens and closes Menu when interacted with.
16
14
  */
@@ -33,33 +33,33 @@ it('throws if the default slot is the incorrect type', async () => {
33
33
  stub.restore();
34
34
  });
35
35
  it('defaults the placement of the menu to bottom start', async () => {
36
- const treeItemMenu = await fixture(html `
36
+ const component = await fixture(html `
37
37
  <glide-core-tree-item-menu>
38
38
  <glide-core-menu-link label="One" url="/one"> </glide-core-menu-link>
39
39
  </glide-core-tree-item-menu>
40
40
  `);
41
- expect(treeItemMenu.shadowRoot?.querySelector('glide-core-menu')?.placement).to.equal('bottom-start');
41
+ expect(component.shadowRoot?.querySelector('glide-core-menu')?.placement).to.equal('bottom-start');
42
42
  });
43
43
  it('can set placement of the menu', async () => {
44
- const treeItemMenu = await fixture(html `
44
+ const component = await fixture(html `
45
45
  <glide-core-tree-item-menu placement="bottom-end">
46
46
  <glide-core-menu-link label="One" url="/one"> </glide-core-menu-link>
47
47
  </glide-core-tree-item-menu>
48
48
  `);
49
- expect(treeItemMenu.shadowRoot?.querySelector('glide-core-menu')?.placement).to.equal('bottom-end');
49
+ expect(component.shadowRoot?.querySelector('glide-core-menu')?.placement).to.equal('bottom-end');
50
50
  });
51
51
  it('can be opened programmatically', async () => {
52
- const treeItemMenu = await fixture(html `
52
+ const component = await fixture(html `
53
53
  <glide-core-tree-item-menu>
54
54
  <glide-core-menu-link label="One" url="/one"> </glide-core-menu-link>
55
55
  </glide-core-tree-item-menu>
56
56
  `);
57
- expect(treeItemMenu.shadowRoot
57
+ expect(component.shadowRoot
58
58
  ?.querySelector('glide-core-menu')
59
59
  ?.getAttribute('open')).to.equal(null);
60
- treeItemMenu.click();
61
- await treeItemMenu.updateComplete;
62
- expect(treeItemMenu.shadowRoot
60
+ component.click();
61
+ await component.updateComplete;
62
+ expect(component.shadowRoot
63
63
  ?.querySelector('glide-core-menu')
64
64
  ?.getAttribute('open')).to.equal('');
65
65
  });
@@ -13,6 +13,7 @@ import{css}from"lit";import focusOutline from"./styles/focus-outline.js";export
13
13
  font-style: var(--glide-core-body-sm-font-style);
14
14
  font-weight: var(--glide-core-body-sm-font-weight);
15
15
  grid-template-columns: repeat(auto-fill, 2.5rem);
16
+ line-height: 1.25rem;
16
17
 
17
18
  --color: var(--glide-core-text-body-1);
18
19
 
@@ -90,10 +91,10 @@ import{css}from"lit";import focusOutline from"./styles/focus-outline.js";export
90
91
  background-color: var(--glide-core-color-dark-blue);
91
92
  }
92
93
  }
93
- }
94
94
 
95
- ::slotted([slot='prefix']) {
96
- margin-inline-end: var(--glide-core-spacing-xs);
95
+ &.prefix-icon .label {
96
+ padding-inline-start: var(--glide-core-spacing-xs);
97
+ }
97
98
  }
98
99
 
99
100
  ::slotted([slot='menu']) {
@@ -12,22 +12,23 @@ it('registers', () => {
12
12
  expect(window.customElements.get('glide-core-tree-item')).to.equal(TreeItem);
13
13
  });
14
14
  it('renders and sets default attributes', async () => {
15
- const treeItem = await fixture(html `
15
+ const component = await fixture(html `
16
16
  <glide-core-tree-item label="Item"></glide-core-tree-item>
17
17
  `);
18
- expect(treeItem.expanded).to.equal(false);
19
- expect(treeItem.label).to.equal('Item');
20
- expect(treeItem.level).to.equal(1);
21
- expect(treeItem.shadowRoot?.querySelector('.expand-icon-container')).to.be.ok;
18
+ expect(component.expanded).to.be.false;
19
+ expect(component.label).to.equal('Item');
20
+ expect(component.level).to.equal(1);
21
+ expect(component.shadowRoot?.querySelector('.expand-icon-container')).to.be
22
+ .ok;
22
23
  });
23
24
  it('does not render expand-icon-container if remove-indentation is set', async () => {
24
- const treeItem = await fixture(html `
25
+ const component = await fixture(html `
25
26
  <glide-core-tree-item
26
27
  label="Item"
27
28
  remove-indentation
28
29
  ></glide-core-tree-item>
29
30
  `);
30
- expect(treeItem.shadowRoot?.querySelector('.expand-icon-container')).to.be
31
+ expect(component.shadowRoot?.querySelector('.expand-icon-container')).to.be
31
32
  .null;
32
33
  });
33
34
  it('renders with a prefix slot', async () => {
@@ -39,14 +40,14 @@ it('renders with a prefix slot', async () => {
39
40
  expect(document.querySelector('[data-prefix]')).to.be.ok;
40
41
  });
41
42
  it('adds label to menu target', async () => {
42
- const treeItem = await fixture(html `
43
+ const component = await fixture(html `
43
44
  <glide-core-tree-item label="Item">
44
45
  <glide-core-tree-item-menu slot="menu" data-menu>
45
46
  <glide-core-menu-link label="Move" url="/move"> </glide-core-menu-link>
46
47
  </glide-core-tree-item-menu>
47
48
  </glide-core-tree-item>
48
49
  `);
49
- const menuTarget = treeItem
50
+ const menuTarget = component
50
51
  .querySelector('glide-core-tree-item-menu')
51
52
  ?.shadowRoot?.querySelector('glide-core-menu')
52
53
  ?.querySelector('glide-core-icon-button');
@@ -61,34 +62,34 @@ it('renders with a suffix slot', async () => {
61
62
  expect(document.querySelector('[data-suffix]')).to.be.ok;
62
63
  });
63
64
  it('does not have an expand icon if there are no child tree items', async () => {
64
- const treeItem = await fixture(html `
65
+ const component = await fixture(html `
65
66
  <glide-core-tree-item label="Item"></glide-core-tree-item>
66
67
  `);
67
- expect(treeItem.shadowRoot?.querySelector('.expand-icon')).to.equal(null);
68
+ expect(component.shadowRoot?.querySelector('.expand-icon')).to.equal(null);
68
69
  });
69
70
  it('can expand', async () => {
70
- const treeItem = await fixture(html `
71
+ const component = await fixture(html `
71
72
  <glide-core-tree-item label="Item">
72
73
  <glide-core-tree-item label="Child Item 1"></glide-core-tree-item>
73
74
  </glide-core-tree-item>
74
75
  `);
75
76
  expect([
76
- ...treeItem.shadowRoot.querySelector('.component').classList,
77
+ ...component.shadowRoot.querySelector('.component').classList,
77
78
  ]).to.deep.equal(['component']);
78
79
  expect([
79
- ...treeItem.shadowRoot.querySelector('.expand-icon').classList,
80
+ ...component.shadowRoot.querySelector('.expand-icon').classList,
80
81
  ]).to.deep.equal(['expand-icon']);
81
- treeItem.toggleExpand();
82
- await treeItem.updateComplete;
82
+ component.toggleExpand();
83
+ await component.updateComplete;
83
84
  expect([
84
- ...treeItem.shadowRoot.querySelector('.component').classList,
85
+ ...component.shadowRoot.querySelector('.component').classList,
85
86
  ]).to.deep.equal(['component', 'expanded']);
86
87
  expect([
87
- ...treeItem.shadowRoot.querySelector('.expand-icon').classList,
88
+ ...component.shadowRoot.querySelector('.expand-icon').classList,
88
89
  ]).to.deep.equal(['expand-icon', 'expand-icon-expanded']);
89
90
  });
90
91
  it('renders child and grandchild tree items', async () => {
91
- const treeItem = await fixture(html `
92
+ const component = await fixture(html `
92
93
  <glide-core-tree-item expanded label="Item">
93
94
  <glide-core-tree-item label="Child Item 1"></glide-core-tree-item>
94
95
  <glide-core-tree-item label="Child Item 2">
@@ -96,16 +97,27 @@ it('renders child and grandchild tree items', async () => {
96
97
  </glide-core-tree-item>
97
98
  </glide-core-tree-item>
98
99
  `);
99
- expect(treeItem.shadowRoot?.querySelector('.expand-icon')).to.be.ok;
100
- const childItems = treeItem.slotElements;
100
+ expect(component.shadowRoot?.querySelector('.expand-icon')).to.be.ok;
101
+ const childItems = component.slotElements;
101
102
  expect(childItems?.length).to.equal(2);
102
103
  expect(childItems?.[0].level).to.equal(2, 'Children are level 2');
103
104
  const grandchildItems = childItems?.[1].slotElements;
104
105
  expect(grandchildItems?.length).to.equal(1);
105
106
  expect(grandchildItems?.[0].level).to.equal(3, 'Grandchildren are level 3');
106
107
  });
108
+ it('sets the level for tree items programmatically added later', async () => {
109
+ const component = await fixture(html `
110
+ <glide-core-tree-item expanded label="Item"></glide-core-tree-item>
111
+ `);
112
+ const newItem = Object.assign(document.createElement('glide-core-tree-item'), {
113
+ label: 'Child',
114
+ });
115
+ component.append(newItem);
116
+ await component.updateComplete;
117
+ expect(newItem.level).to.equal(2);
118
+ });
107
119
  it('can select child and grandchild items', async () => {
108
- const treeItem = await fixture(html `
120
+ const component = await fixture(html `
109
121
  <glide-core-tree-item expanded label="Item">
110
122
  <glide-core-tree-item label="Child Item 1"></glide-core-tree-item>
111
123
  <glide-core-tree-item label="Child Item 2">
@@ -113,14 +125,14 @@ it('can select child and grandchild items', async () => {
113
125
  </glide-core-tree-item>
114
126
  </glide-core-tree-item>
115
127
  `);
116
- const childItems = treeItem.slotElements;
128
+ const childItems = component.slotElements;
117
129
  const grandchildItems = childItems?.[1].slotElements;
118
- treeItem.selectItem(childItems[0]);
119
- expect(childItems[0].selected).to.equal(true);
120
- expect(childItems[1].selected).to.equal(false);
121
- expect(grandchildItems[0].selected).to.equal(false);
122
- treeItem.selectItem(grandchildItems[0]);
123
- expect(childItems[0].selected).to.equal(false);
124
- expect(childItems[1].selected).to.equal(false);
125
- expect(grandchildItems[0].selected).to.equal(true);
130
+ component.selectItem(childItems[0]);
131
+ expect(childItems[0].selected).to.be.true;
132
+ expect(childItems[1].selected).to.be.false;
133
+ expect(grandchildItems[0].selected).to.be.false;
134
+ component.selectItem(grandchildItems[0]);
135
+ expect(childItems[0].selected).to.be.false;
136
+ expect(childItems[1].selected).to.be.false;
137
+ expect(grandchildItems[0].selected).to.be.true;
126
138
  });
@@ -12,15 +12,15 @@ it('registers', async () => {
12
12
  expect(window.customElements.get('glide-core-tree')).to.equal(GlideCoreTree);
13
13
  });
14
14
  it('renders and sets default attributes', async () => {
15
- const tree = await fixture(html `
15
+ const component = await fixture(html `
16
16
  <glide-core-tree>
17
17
  <glide-core-tree-item label="Child Item"></glide-core-tree-item>
18
18
  </glide-core-tree>
19
19
  `);
20
- expect(tree.selectedItem).to.equal(undefined);
20
+ expect(component.selectedItem).to.equal(undefined);
21
21
  });
22
22
  it('can select child and grandchild items', async () => {
23
- const tree = await fixture(html `
23
+ const component = await fixture(html `
24
24
  <glide-core-tree>
25
25
  <glide-core-tree-item label="Child Item 1"></glide-core-tree-item>
26
26
  <glide-core-tree-item label="Child Item 2">
@@ -28,21 +28,21 @@ it('can select child and grandchild items', async () => {
28
28
  </glide-core-tree-item>
29
29
  </glide-core-tree>
30
30
  `);
31
- const childItems = tree.slotElements;
31
+ const childItems = component.slotElements;
32
32
  const grandchildItems = childItems?.[1].slotElements;
33
- tree.selectItem(childItems[0]);
34
- expect(childItems[0].selected).to.equal(true);
35
- expect(tree.selectedItem).to.equal(childItems[0]);
36
- expect(childItems[1].selected).to.equal(false);
37
- expect(grandchildItems[0].selected).to.equal(false);
38
- tree.selectItem(grandchildItems[0]);
39
- expect(childItems[0].selected).to.equal(false);
40
- expect(childItems[1].selected).to.equal(false);
41
- expect(grandchildItems[0].selected).to.equal(true);
42
- expect(tree.selectedItem).to.equal(grandchildItems[0]);
33
+ component.selectItem(childItems[0]);
34
+ expect(childItems[0].selected).to.be.true;
35
+ expect(component.selectedItem).to.equal(childItems[0]);
36
+ expect(childItems[1].selected).to.be.false;
37
+ expect(grandchildItems[0].selected).to.be.false;
38
+ component.selectItem(grandchildItems[0]);
39
+ expect(childItems[0].selected).to.be.false;
40
+ expect(childItems[1].selected).to.be.false;
41
+ expect(grandchildItems[0].selected).to.be.true;
42
+ expect(component.selectedItem).to.equal(grandchildItems[0]);
43
43
  });
44
44
  it('can click child and grandchild items to expand or select them', async () => {
45
- const tree = await fixture(html `
45
+ const component = await fixture(html `
46
46
  <glide-core-tree>
47
47
  <glide-core-tree-item label="Child Item 1"></glide-core-tree-item>
48
48
  <glide-core-tree-item label="Child Item 2">
@@ -53,26 +53,26 @@ it('can click child and grandchild items to expand or select them', async () =>
53
53
  </glide-core-tree-item>
54
54
  </glide-core-tree>
55
55
  `);
56
- const childItems = tree.slotElements;
56
+ const childItems = component.slotElements;
57
57
  const grandchildItems = childItems?.[1].slotElements;
58
58
  // Clicking an item that doesn't have children selects it
59
59
  childItems[0].click();
60
- expect(childItems[0].selected).to.equal(true);
61
- expect(childItems[1].selected).to.equal(false);
62
- expect(grandchildItems[0].selected).to.equal(false);
63
- expect(childItems[1].expanded).to.equal(false);
60
+ expect(childItems[0].selected).to.be.true;
61
+ expect(childItems[1].selected).to.be.false;
62
+ expect(grandchildItems[0].selected).to.be.false;
63
+ expect(childItems[1].expanded).to.be.false;
64
64
  // Clicking an item that has children expands it
65
65
  childItems[1].click();
66
- expect(childItems[1].expanded).to.equal(true);
66
+ expect(childItems[1].expanded).to.be.true;
67
67
  // Can click and select a grandchild item
68
68
  grandchildItems[0].click();
69
- expect(grandchildItems[0].selected).to.equal(true);
69
+ expect(grandchildItems[0].selected).to.be.true;
70
70
  // Can click and select a non-collapsible parent item
71
71
  childItems[2].click();
72
- expect(childItems[2].selected).to.equal(true);
72
+ expect(childItems[2].selected).to.be.true;
73
73
  });
74
74
  it('does not select an item if a tree-item-icon-button is clicked', async () => {
75
- const tree = await fixture(html `
75
+ const component = await fixture(html `
76
76
  <glide-core-tree>
77
77
  <glide-core-tree-item label="Child Item 1">
78
78
  <glide-core-tree-item-icon-button slot="suffix" data-test-icon-button>
@@ -83,15 +83,15 @@ it('does not select an item if a tree-item-icon-button is clicked', async () =>
83
83
  </glide-core-tree-item>
84
84
  </glide-core-tree>
85
85
  `);
86
- const childItems = tree.slotElements;
86
+ const childItems = component.slotElements;
87
87
  const iconButton = childItems[0].querySelector('[data-test-icon-button]');
88
88
  assert(iconButton);
89
89
  iconButton.click();
90
90
  await iconButton.updateComplete;
91
- expect(childItems[0].selected).to.equal(false);
91
+ expect(childItems[0].selected).to.be.false;
92
92
  });
93
93
  it('does not select an item if its menu slot is clicked', async () => {
94
- const tree = await fixture(html `
94
+ const component = await fixture(html `
95
95
  <glide-core-tree>
96
96
  <glide-core-tree-item label="Child Item 1">
97
97
  <glide-core-tree-item-menu slot="menu" data-test-menu>
@@ -100,12 +100,12 @@ it('does not select an item if its menu slot is clicked', async () => {
100
100
  </glide-core-tree-item>
101
101
  </glide-core-tree>
102
102
  `);
103
- const childItems = tree.slotElements;
103
+ const childItems = component.slotElements;
104
104
  const menu = childItems[0].querySelector('[data-test-menu]');
105
105
  assert(menu);
106
106
  menu.click();
107
107
  await menu.updateComplete;
108
- expect(childItems[0].selected).to.equal(false);
108
+ expect(childItems[0].selected).to.be.false;
109
109
  });
110
110
  it('throws if it does not have a default slot', async () => {
111
111
  const spy = sinon.spy();