@crowdstrike/glide-core 0.5.1 → 0.6.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 (242) hide show
  1. package/README.md +11 -1
  2. package/dist/accordion.js +1 -1
  3. package/dist/accordion.styles.js +5 -4
  4. package/dist/accordion.test.basics.js +109 -0
  5. package/dist/accordion.test.events.js +39 -0
  6. package/dist/button-group.button.js +1 -1
  7. package/dist/button-group.button.styles.js +6 -5
  8. package/dist/button-group.button.test.basics.js +169 -0
  9. package/dist/button-group.button.test.events.js +73 -0
  10. package/dist/button-group.js +1 -1
  11. package/dist/button-group.styles.js +3 -3
  12. package/dist/button-group.test.basics.js +268 -0
  13. package/dist/button-group.test.events.js +291 -0
  14. package/dist/button.d.ts +3 -2
  15. package/dist/button.js +1 -1
  16. package/dist/button.styles.js +5 -5
  17. package/dist/button.test.basics.js +202 -0
  18. package/dist/button.test.events.js +25 -0
  19. package/dist/button.test.form.js +49 -0
  20. package/dist/checkbox-group.js +1 -1
  21. package/dist/checkbox-group.styles.js +2 -2
  22. package/dist/checkbox-group.test.basics.js +119 -0
  23. package/dist/checkbox-group.test.events.js +110 -0
  24. package/dist/checkbox-group.test.focus.js +45 -0
  25. package/dist/checkbox-group.test.form.js +130 -0
  26. package/dist/checkbox-group.test.validity.js +75 -0
  27. package/dist/checkbox.js +1 -1
  28. package/dist/checkbox.styles.js +7 -4
  29. package/dist/checkbox.test.basics.js +89 -0
  30. package/dist/checkbox.test.events.js +87 -0
  31. package/dist/checkbox.test.focus.js +38 -0
  32. package/dist/checkbox.test.form.js +115 -0
  33. package/dist/checkbox.test.states.js +62 -0
  34. package/dist/checkbox.test.validity.js +51 -0
  35. package/dist/drawer.d.ts +2 -2
  36. package/dist/drawer.js +1 -15
  37. package/dist/drawer.styles.js +14 -4
  38. package/dist/drawer.test.accessibility.js +22 -0
  39. package/dist/drawer.test.basics.js +43 -0
  40. package/dist/drawer.test.closing.js +37 -0
  41. package/dist/drawer.test.events.js +52 -0
  42. package/dist/drawer.test.floating-components.d.ts +1 -0
  43. package/dist/drawer.test.floating-components.js +51 -0
  44. package/dist/drawer.test.methods.js +34 -0
  45. package/dist/dropdown.d.ts +4 -2
  46. package/dist/dropdown.js +1 -1
  47. package/dist/dropdown.option.d.ts +0 -2
  48. package/dist/dropdown.option.js +1 -1
  49. package/dist/dropdown.option.styles.js +2 -2
  50. package/dist/dropdown.option.test.basics.js +59 -0
  51. package/dist/dropdown.option.test.basics.multiple.js +26 -0
  52. package/dist/dropdown.option.test.basics.single.js +20 -0
  53. package/dist/dropdown.option.test.events.js +27 -0
  54. package/dist/dropdown.option.test.focus.js +11 -0
  55. package/dist/dropdown.option.test.interactions.multiple.js +82 -0
  56. package/dist/dropdown.option.test.interactions.single.js +22 -0
  57. package/dist/dropdown.styles.js +26 -6
  58. package/dist/dropdown.test.basics.filterable.js +84 -0
  59. package/dist/dropdown.test.basics.js +233 -0
  60. package/dist/dropdown.test.basics.multiple.js +270 -0
  61. package/dist/dropdown.test.basics.single.js +79 -0
  62. package/dist/dropdown.test.events.js +268 -0
  63. package/dist/dropdown.test.events.multiple.js +130 -0
  64. package/dist/dropdown.test.focus.d.ts +1 -0
  65. package/dist/dropdown.test.focus.filterable.js +154 -0
  66. package/dist/dropdown.test.focus.js +28 -0
  67. package/dist/dropdown.test.focus.multiple.js +181 -0
  68. package/dist/dropdown.test.focus.single.js +53 -0
  69. package/dist/dropdown.test.form.js +140 -0
  70. package/dist/dropdown.test.form.multiple.js +149 -0
  71. package/dist/dropdown.test.form.single.js +128 -0
  72. package/dist/dropdown.test.interactions.filterable.js +449 -0
  73. package/dist/dropdown.test.interactions.js +446 -0
  74. package/dist/dropdown.test.interactions.multiple.js +908 -0
  75. package/dist/dropdown.test.interactions.single.js +466 -0
  76. package/dist/dropdown.test.validity.js +46 -0
  77. package/dist/icon-button.d.ts +3 -2
  78. package/dist/icon-button.js +1 -1
  79. package/dist/icon-button.styles.js +12 -12
  80. package/dist/icon-button.test.basics.js +110 -0
  81. package/dist/icons/checked.js +1 -1
  82. package/dist/icons/magnifying-glass.js +1 -1
  83. package/dist/input.js +1 -1
  84. package/dist/input.styles.js +4 -3
  85. package/dist/input.test.basics.js +169 -0
  86. package/dist/input.test.events.js +97 -0
  87. package/dist/input.test.focus.js +54 -0
  88. package/dist/input.test.form.js +56 -0
  89. package/dist/input.test.validity.js +50 -0
  90. package/dist/label.js +1 -1
  91. package/dist/label.styles.js +13 -15
  92. package/dist/label.test.basics.js +129 -0
  93. package/dist/library/expect-argument-error.js +1 -1
  94. package/dist/library/localize.d.ts +17 -0
  95. package/dist/library/localize.js +1 -0
  96. package/dist/library/ow.js +1 -1
  97. package/dist/library/ow.test.js +55 -0
  98. package/dist/library/set-containing-block.d.ts +15 -0
  99. package/dist/library/set-containing-block.js +1 -0
  100. package/dist/menu.button.d.ts +1 -2
  101. package/dist/menu.button.js +1 -1
  102. package/dist/menu.button.styles.js +3 -3
  103. package/dist/menu.button.test.basics.js +42 -0
  104. package/dist/menu.d.ts +7 -2
  105. package/dist/menu.js +1 -1
  106. package/dist/menu.link.d.ts +1 -2
  107. package/dist/menu.link.js +1 -1
  108. package/dist/menu.link.styles.js +3 -3
  109. package/dist/menu.link.test.basics.js +46 -0
  110. package/dist/menu.options.d.ts +22 -0
  111. package/dist/menu.options.js +1 -0
  112. package/dist/menu.options.styles.d.ts +2 -0
  113. package/dist/menu.options.styles.js +33 -0
  114. package/dist/menu.options.test.basics.d.ts +2 -0
  115. package/dist/menu.options.test.basics.js +43 -0
  116. package/dist/menu.stories.d.ts +1 -0
  117. package/dist/menu.styles.js +7 -31
  118. package/dist/menu.test.basics.d.ts +1 -0
  119. package/dist/menu.test.basics.js +183 -0
  120. package/dist/menu.test.focus.d.ts +0 -1
  121. package/dist/menu.test.focus.js +84 -0
  122. package/dist/menu.test.interactions.d.ts +1 -1
  123. package/dist/menu.test.interactions.js +664 -0
  124. package/dist/modal.icon-button.js +1 -1
  125. package/dist/modal.icon-button.styles.js +2 -2
  126. package/dist/modal.icon-button.test.basics.js +45 -0
  127. package/dist/modal.js +1 -15
  128. package/dist/modal.styles.js +4 -7
  129. package/dist/modal.tertiary-icon.d.ts +1 -0
  130. package/dist/modal.tertiary-icon.js +1 -1
  131. package/dist/modal.tertiary-icon.test.basics.js +59 -0
  132. package/dist/modal.test.accessibility.js +48 -0
  133. package/dist/modal.test.basics.js +203 -0
  134. package/dist/modal.test.close.js +38 -0
  135. package/dist/modal.test.events.js +110 -0
  136. package/dist/modal.test.floating-components.d.ts +1 -0
  137. package/dist/modal.test.floating-components.js +62 -0
  138. package/dist/modal.test.lock-scroll.js +76 -0
  139. package/dist/modal.test.methods.js +23 -0
  140. package/dist/modal.test.scrollbars.js +19 -0
  141. package/dist/radio-group.js +1 -1
  142. package/dist/radio-group.styles.js +20 -24
  143. package/dist/radio-group.test.basics.js +323 -0
  144. package/dist/radio-group.test.events.js +277 -0
  145. package/dist/radio-group.test.focus.js +75 -0
  146. package/dist/radio-group.test.form.js +104 -0
  147. package/dist/radio-group.test.validity.js +228 -0
  148. package/dist/radio.js +1 -1
  149. package/dist/radio.styles.js +14 -31
  150. package/dist/split-button.d.ts +27 -0
  151. package/dist/split-button.js +1 -0
  152. package/dist/split-button.stories.d.ts +17 -0
  153. package/dist/split-button.styles.d.ts +2 -0
  154. package/dist/split-button.styles.js +102 -0
  155. package/dist/split-button.test.basics.d.ts +1 -0
  156. package/dist/split-button.test.basics.js +99 -0
  157. package/dist/split-container.d.ts +31 -0
  158. package/dist/split-container.js +1 -0
  159. package/dist/split-container.styles.d.ts +2 -0
  160. package/dist/split-container.styles.js +134 -0
  161. package/dist/split-container.test.basics.d.ts +3 -0
  162. package/dist/split-container.test.basics.js +440 -0
  163. package/dist/split-container.test.interactions.d.ts +1 -0
  164. package/dist/split-container.test.interactions.js +20 -0
  165. package/dist/split-link.d.ts +25 -0
  166. package/dist/split-link.js +1 -0
  167. package/dist/split-link.test.basics.d.ts +1 -0
  168. package/dist/split-link.test.basics.js +92 -0
  169. package/dist/split-link.test.interactions.d.ts +1 -0
  170. package/dist/split-link.test.interactions.js +19 -0
  171. package/dist/status-indicator.js +1 -1
  172. package/dist/status-indicator.styles.js +2 -2
  173. package/dist/status-indicator.test.basics.js +102 -0
  174. package/dist/styles/focus-outline.js +1 -4
  175. package/dist/styles/variables.css +1 -1
  176. package/dist/styles/visually-hidden.js +1 -11
  177. package/dist/tab.group.js +1 -1
  178. package/dist/tab.group.styles.js +2 -2
  179. package/dist/tab.group.test.basics.js +185 -0
  180. package/dist/tab.js +1 -1
  181. package/dist/tab.panel.js +1 -1
  182. package/dist/tab.panel.styles.js +3 -3
  183. package/dist/tab.styles.js +80 -55
  184. package/dist/tab.test.basics.js +71 -0
  185. package/dist/tag.js +1 -1
  186. package/dist/tag.styles.js +4 -3
  187. package/dist/tag.test.basics.js +118 -0
  188. package/dist/tag.test.events.js +16 -0
  189. package/dist/tag.test.focus.js +11 -0
  190. package/dist/tag.test.translations.d.ts +1 -0
  191. package/dist/tag.test.translations.js +25 -0
  192. package/dist/textarea.js +2 -2
  193. package/dist/textarea.styles.js +5 -4
  194. package/dist/textarea.test.basics.js +140 -0
  195. package/dist/textarea.test.events.js +204 -0
  196. package/dist/textarea.test.form.js +70 -0
  197. package/dist/textarea.test.validity.js +83 -0
  198. package/dist/toasts.js +1 -1
  199. package/dist/toasts.styles.js +2 -2
  200. package/dist/toasts.test.basics.js +94 -0
  201. package/dist/toasts.toast.js +1 -1
  202. package/dist/toasts.toast.styles.js +5 -2
  203. package/dist/toasts.toast.test.basics.js +139 -0
  204. package/dist/toggle.js +1 -1
  205. package/dist/toggle.styles.js +3 -3
  206. package/dist/toggle.test.basics.js +68 -0
  207. package/dist/toggle.test.events.js +29 -0
  208. package/dist/toggle.test.focus.js +9 -0
  209. package/dist/toggle.test.states.js +43 -0
  210. package/dist/tooltip.d.ts +2 -0
  211. package/dist/tooltip.js +1 -1
  212. package/dist/tooltip.styles.js +5 -3
  213. package/dist/tooltip.test.basics.js +64 -0
  214. package/dist/tooltip.test.interactions.js +78 -0
  215. package/dist/translations/en.d.ts +3 -0
  216. package/dist/translations/en.js +1 -0
  217. package/dist/translations/fr.d.ts +3 -0
  218. package/dist/translations/fr.js +1 -0
  219. package/dist/translations/ja.d.ts +3 -0
  220. package/dist/translations/ja.js +1 -0
  221. package/dist/tree.d.ts +1 -0
  222. package/dist/tree.item.d.ts +3 -1
  223. package/dist/tree.item.icon-button.js +1 -1
  224. package/dist/tree.item.icon-button.styles.js +2 -2
  225. package/dist/tree.item.icon-button.test.basics.js +13 -0
  226. package/dist/tree.item.js +1 -1
  227. package/dist/tree.item.menu.d.ts +2 -0
  228. package/dist/tree.item.menu.js +1 -1
  229. package/dist/tree.item.menu.styles.js +2 -2
  230. package/dist/tree.item.menu.test.basics.js +33 -0
  231. package/dist/tree.item.styles.js +23 -8
  232. package/dist/tree.item.test.basics.js +102 -0
  233. package/dist/tree.js +1 -1
  234. package/dist/tree.stories.d.ts +1 -0
  235. package/dist/tree.styles.js +2 -2
  236. package/dist/tree.test.aria.js +86 -0
  237. package/dist/tree.test.basics.js +123 -0
  238. package/dist/tree.test.events.js +19 -0
  239. package/dist/tree.test.focus.js +261 -0
  240. package/package.json +25 -18
  241. /package/dist/{dropdown.option.test.focus.multiple.d.ts → dropdown.option.test.focus.d.ts} +0 -0
  242. /package/dist/{dropdown.option.test.focus.single.d.ts → dropdown.test.events.multiple.d.ts} +0 -0
@@ -0,0 +1,268 @@
1
+ import './button-group.js';
2
+ import { elementUpdated, expect, fixture, html } from '@open-wc/testing';
3
+ import GlideCoreButtonGroup from './button-group.js';
4
+ import GlideCoreButtonGroupButton from './button-group.button.js';
5
+ import expectArgumentError from './library/expect-argument-error.js';
6
+ GlideCoreButtonGroup.shadowRootOptions.mode = 'open';
7
+ GlideCoreButtonGroupButton.shadowRootOptions.mode = 'open';
8
+ it('registers', async () => {
9
+ expect(window.customElements.get('glide-core-button-group')).to.equal(GlideCoreButtonGroup);
10
+ });
11
+ it('is accessible', async () => {
12
+ const element = await fixture(html `<glide-core-button-group label="label"
13
+ ><glide-core-button-group-button value="value"
14
+ >Button</glide-core-button-group-button
15
+ ></glide-core-button-group
16
+ >`);
17
+ await expect(element).to.be.accessible();
18
+ });
19
+ it('renders a label and unordered list', async () => {
20
+ const element = await fixture(html `<glide-core-button-group label="label"
21
+ ><glide-core-button-group-button value="value"
22
+ >Button</glide-core-button-group-button
23
+ ></glide-core-button-group
24
+ >`);
25
+ const ulElement = element.shadowRoot?.querySelector('ul');
26
+ const labelElement = element.shadowRoot?.querySelector('div.label');
27
+ expect(ulElement).to.not.be.null;
28
+ expect(labelElement).to.not.be.null;
29
+ expect(ulElement).to.have.attribute('aria-labelledby', labelElement?.id);
30
+ });
31
+ it('does not render a label when not given', async () => {
32
+ const element = await fixture(html `<glide-core-button-group
33
+ ><glide-core-button-group-button value="value"
34
+ >Button</glide-core-button-group-button
35
+ ></glide-core-button-group
36
+ >`);
37
+ const ulElement = element.shadowRoot?.querySelector('ul');
38
+ const labelElement = element.shadowRoot?.querySelector('label');
39
+ expect(ulElement).to.not.be.null;
40
+ expect(labelElement).to.be.null;
41
+ });
42
+ it('assigns buttons the correct positional presentation when in a group', async () => {
43
+ await fixture(html `<glide-core-button-group>
44
+ <glide-core-button-group-button value="value-1"
45
+ >Button 1</glide-core-button-group-button
46
+ >
47
+ <glide-core-button-group-button value="value-2"
48
+ >Button 2</glide-core-button-group-button
49
+ >
50
+ <glide-core-button-group-button value="value-3"
51
+ >Button 3</glide-core-button-group-button
52
+ >
53
+ <glide-core-button-group-button value="value-4"
54
+ >Button 4</glide-core-button-group-button
55
+ >
56
+ </glide-core-button-group>`);
57
+ const buttonElements = document.querySelectorAll('glide-core-button-group-button');
58
+ expect(buttonElements.length).to.equal(4);
59
+ const liElement1 = buttonElements[0].shadowRoot?.querySelector('li');
60
+ expect(liElement1).to.have.class('first');
61
+ const liElement2 = buttonElements[1].shadowRoot?.querySelector('li');
62
+ expect(liElement2).to.have.class('inner');
63
+ const liElement3 = buttonElements[2].shadowRoot?.querySelector('li');
64
+ expect(liElement3).to.have.class('inner');
65
+ const liElement4 = buttonElements[3].shadowRoot?.querySelector('li');
66
+ expect(liElement4).to.have.class('last');
67
+ });
68
+ it('buttons have a vertical presention when attribute "orientation" is set to "vertical"', async () => {
69
+ await fixture(html `<glide-core-button-group orientation="vertical"
70
+ ><glide-core-button-group-button value="value"
71
+ >Button</glide-core-button-group-button
72
+ >
73
+ <glide-core-button-group-button value="value-2"
74
+ >Button 2</glide-core-button-group-button
75
+ >
76
+ </glide-core-button-group>`);
77
+ const buttonElements = document.querySelectorAll('glide-core-button-group-button');
78
+ const liElement1 = buttonElements[0]?.shadowRoot?.querySelector('li');
79
+ const liElement2 = buttonElements[1]?.shadowRoot?.querySelector('li');
80
+ expect(buttonElements[0]).to.have.attribute('vertical');
81
+ expect(liElement1).to.have.class('vertical');
82
+ expect(buttonElements[1]).to.have.attribute('vertical');
83
+ expect(liElement2).to.have.class('vertical');
84
+ });
85
+ it('does not have a vertical presention when the "orientation" is not set to "vertical"', async () => {
86
+ await fixture(html `<glide-core-button-group label="label">
87
+ <glide-core-button-group-button value="value"
88
+ >Button</glide-core-button-group-button
89
+ >
90
+ <glide-core-button-group-button value="value-2"
91
+ >Button 2</glide-core-button-group-button
92
+ >
93
+ </glide-core-button-group>`);
94
+ const buttonElements = document.querySelectorAll('glide-core-button-group-button');
95
+ const liElement1 = buttonElements[0]?.shadowRoot?.querySelector('li');
96
+ const liElement2 = buttonElements[1]?.shadowRoot?.querySelector('li');
97
+ expect(buttonElements[0]).to.not.have.attribute('vertical');
98
+ expect(liElement1).to.not.have.class('vertical');
99
+ expect(buttonElements[1]).to.not.have.attribute('vertical');
100
+ expect(liElement2).to.not.have.class('vertical');
101
+ });
102
+ it('reacts to "orientation" attribute when changed from "horizontal" to "vertical"', async () => {
103
+ const element = await fixture(html `<glide-core-button-group label="label" orientation="horizontal"
104
+ ><glide-core-button-group-button value="value"
105
+ >Button</glide-core-button-group-button
106
+ ></glide-core-button-group
107
+ >`);
108
+ const buttonElement = document.querySelector('glide-core-button-group-button');
109
+ const liElement = buttonElement?.shadowRoot?.querySelector('li');
110
+ expect(liElement).to.not.have.class('vertical');
111
+ element.setAttribute('orientation', 'vertical');
112
+ // wait for attributes to be set on li
113
+ await elementUpdated(element);
114
+ expect(liElement).to.have.class('vertical');
115
+ element.setAttribute('orientation', 'horizontal');
116
+ // wait for attributes to be set on li
117
+ await elementUpdated(element);
118
+ await expect(liElement).to.not.have.class('vertical');
119
+ });
120
+ it('applies an "icon-only" variant to buttons when set on the group', async () => {
121
+ await fixture(html `<glide-core-button-group label="label" variant="icon-only"
122
+ ><glide-core-button-group-button value="value"
123
+ ><span slot="prefix">Prefix 1</span>Button
124
+ 1</glide-core-button-group-button
125
+ >
126
+ <glide-core-button-group-button value="value-2"
127
+ ><span slot="prefix">Prefix 2</span>Button
128
+ 2</glide-core-button-group-button
129
+ >
130
+ </glide-core-button-group>`);
131
+ const buttonElements = document.querySelectorAll('glide-core-button-group-button');
132
+ const liElement1 = buttonElements[0]?.shadowRoot?.querySelector('li');
133
+ const liElement2 = buttonElements[1]?.shadowRoot?.querySelector('li');
134
+ expect(buttonElements[0]).to.have.attribute('variant', 'icon-only');
135
+ expect(liElement1).to.have.class('icon-only');
136
+ expect(buttonElements[1]).to.have.attribute('variant', 'icon-only');
137
+ expect(liElement2).to.have.class('icon-only');
138
+ });
139
+ it('does not apply an "icon-only" variant to buttons when not set on the group', async () => {
140
+ await fixture(html `<glide-core-button-group label="label"
141
+ ><glide-core-button-group-button value="value"
142
+ >Button</glide-core-button-group-button
143
+ >
144
+ <glide-core-button-group-button value="value-2"
145
+ >Button 2</glide-core-button-group-button
146
+ >
147
+ </glide-core-button-group>`);
148
+ const buttonElements = document.querySelectorAll('glide-core-button-group-button');
149
+ const liElement1 = buttonElements[0]?.shadowRoot?.querySelector('li');
150
+ const liElement2 = buttonElements[1]?.shadowRoot?.querySelector('li');
151
+ expect(buttonElements[0]).to.not.have.attribute('variant');
152
+ expect(liElement1).to.not.have.class('icon-only');
153
+ expect(buttonElements[1]).to.not.have.attribute('variant');
154
+ expect(liElement2).to.not.have.class('icon-only');
155
+ });
156
+ it('reacts to variant "icon-only" attribute when added and removed', async () => {
157
+ await fixture(html `<glide-core-button-group label="label"
158
+ ><glide-core-button-group-button value="value"
159
+ ><span slot="prefix">Prefix</span>Button</glide-core-button-group-button
160
+ ></glide-core-button-group
161
+ >`);
162
+ const element = document.querySelector('glide-core-button-group');
163
+ const buttonElement = document.querySelector('glide-core-button-group-button');
164
+ expect(element).to.not.be.null;
165
+ expect(buttonElement).to.not.be.null;
166
+ expect(buttonElement).to.not.have.attribute('variant');
167
+ element?.setAttribute('variant', 'icon-only');
168
+ // wait for attributes to be set
169
+ await elementUpdated(element);
170
+ expect(buttonElement).to.have.attribute('variant', 'icon-only');
171
+ element?.removeAttribute('variant');
172
+ // wait for attributes to be set
173
+ await elementUpdated(element);
174
+ expect(buttonElement).to.not.have.attribute('variant');
175
+ });
176
+ it('throws an error when an element other than `glide-core-button-group-button` is a child of the default slot', async () => {
177
+ await expectArgumentError(() => {
178
+ return fixture(html `
179
+ <glide-core-button-group label="label">
180
+ <div>Content</div>
181
+ </glide-core-button-group>
182
+ `);
183
+ });
184
+ });
185
+ it('throws an error when the group has no children', async () => {
186
+ await expectArgumentError(() => {
187
+ return fixture(html `<glide-core-button-group label="label"> </glide-core-button-group>`);
188
+ });
189
+ });
190
+ it("has a tabble button if it's the first element in a button group", async () => {
191
+ await fixture(html `<glide-core-button-group>
192
+ <glide-core-button-group-button value="value-1"
193
+ >Button 1</glide-core-button-group-button
194
+ >
195
+ <glide-core-button-group-button value="value-2"
196
+ >Button 2</glide-core-button-group-button
197
+ >
198
+ <glide-core-button-group-button value="value-3"
199
+ >Button 3</glide-core-button-group-button
200
+ >
201
+ </glide-core-button-group>`);
202
+ const buttonElements = document.querySelectorAll('glide-core-button-group-button');
203
+ expect(buttonElements.length).to.equal(3);
204
+ const liElement1 = buttonElements[0].shadowRoot?.querySelector('li');
205
+ expect(liElement1).to.have.attribute('tabindex', '0');
206
+ const liElement2 = buttonElements[1].shadowRoot?.querySelector('li');
207
+ expect(liElement2).to.have.attribute('tabindex', '-1');
208
+ const liElement3 = buttonElements[2].shadowRoot?.querySelector('li');
209
+ expect(liElement3).to.have.attribute('tabindex', '-1');
210
+ });
211
+ it('has the first non-disabled button set as tabbable when in a group', async () => {
212
+ await fixture(html `<glide-core-button-group>
213
+ <glide-core-button-group-button value="value-1" disabled
214
+ >Button 1</glide-core-button-group-button
215
+ >
216
+ <glide-core-button-group-button value="value-2"
217
+ >Button 2</glide-core-button-group-button
218
+ >
219
+ <glide-core-button-group-button value="value-3"
220
+ >Button 3</glide-core-button-group-button
221
+ >
222
+ </glide-core-button-group>`);
223
+ const buttonElements = document.querySelectorAll('glide-core-button-group-button');
224
+ expect(buttonElements.length).to.equal(3);
225
+ const liElement1 = buttonElements[0].shadowRoot?.querySelector('li');
226
+ expect(liElement1).to.have.attribute('tabindex', '-1');
227
+ const liElement2 = buttonElements[1].shadowRoot?.querySelector('li');
228
+ expect(liElement2).to.have.attribute('tabindex', '0');
229
+ const liElement3 = buttonElements[2].shadowRoot?.querySelector('li');
230
+ expect(liElement3).to.have.attribute('tabindex', '-1');
231
+ });
232
+ it('has the "selected" button as tabbable and others are not when in a group', async () => {
233
+ await fixture(html `<glide-core-button-group>
234
+ <glide-core-button-group-button value="value-1"
235
+ >Button 1</glide-core-button-group-button
236
+ >
237
+ <glide-core-button-group-button value="value-2" selected
238
+ >Button 2</glide-core-button-group-button
239
+ >
240
+ <glide-core-button-group-button value="value-3"
241
+ >Button 3</glide-core-button-group-button
242
+ >
243
+ </glide-core-button-group>`);
244
+ const buttonElements = document.querySelectorAll('glide-core-button-group-button');
245
+ expect(buttonElements.length).to.equal(3);
246
+ const liElement1 = buttonElements[0].shadowRoot?.querySelector('li');
247
+ expect(liElement1).to.have.attribute('tabindex', '-1');
248
+ const liElement2 = buttonElements[1].shadowRoot?.querySelector('li');
249
+ expect(liElement2).to.have.attribute('tabindex', '0');
250
+ const liElement3 = buttonElements[2].shadowRoot?.querySelector('li');
251
+ expect(liElement3).to.have.attribute('tabindex', '-1');
252
+ });
253
+ it('initially no button sets itself as tabbable if all are disabled in a group', async () => {
254
+ await fixture(html `<glide-core-button-group>
255
+ <glide-core-button-group-button value="value-1" disabled
256
+ >Button 1</glide-core-button-group-button
257
+ >
258
+ <glide-core-button-group-button value="value-2" disabled
259
+ >Button 2</glide-core-button-group-button
260
+ >
261
+ </glide-core-button-group>`);
262
+ const buttonElements = document.querySelectorAll('glide-core-button-group-button');
263
+ expect(buttonElements.length).to.equal(2);
264
+ const liElement1 = buttonElements[0].shadowRoot?.querySelector('li');
265
+ expect(liElement1).to.have.attribute('tabindex', '-1');
266
+ const liElement2 = buttonElements[1].shadowRoot?.querySelector('li');
267
+ expect(liElement2).to.have.attribute('tabindex', '-1');
268
+ });
@@ -0,0 +1,291 @@
1
+ import './button-group.button.js';
2
+ import { elementUpdated, expect, fixture, html, oneEvent, } from '@open-wc/testing';
3
+ import { sendKeys } from '@web/test-runner-commands';
4
+ import GlideCoreButtonGroup from './button-group.js';
5
+ import GlideCoreButtonGroupButton from './button-group.button.js';
6
+ GlideCoreButtonGroup.shadowRootOptions.mode = 'open';
7
+ GlideCoreButtonGroupButton.shadowRootOptions.mode = 'open';
8
+ it('emits a change event when arrow keys are pressed', async () => {
9
+ await fixture(html `<glide-core-button-group>
10
+ <glide-core-button-group-button value="value-1"
11
+ >Button 1</glide-core-button-group-button
12
+ >
13
+ <glide-core-button-group-button value="value-2" selected
14
+ >Button 2</glide-core-button-group-button
15
+ >
16
+ <glide-core-button-group-button value="value-3"
17
+ >Button 3</glide-core-button-group-button
18
+ >
19
+ </glide-core-button-group>`);
20
+ const buttonElements = document.querySelectorAll('glide-core-button-group-button');
21
+ await sendKeys({ press: 'Tab' });
22
+ // This pattern is adopted from https://open-wc.org/docs/testing/helpers/#testing-events
23
+ // Without the setTimeout the test fails. An `await` is used since `sendKeys` returns a
24
+ // promise, however the test seems to work without it. Keeping `await` here until this can
25
+ // be investigated further.
26
+ setTimeout(async () => await sendKeys({ press: 'ArrowLeft' }));
27
+ const changeEventLeft = await oneEvent(buttonElements[0], 'change');
28
+ expect(changeEventLeft instanceof Event).to.be.true;
29
+ expect(changeEventLeft.bubbles).to.be.true;
30
+ setTimeout(async () => await sendKeys({ press: 'ArrowRight' }));
31
+ const changeEventRight = await oneEvent(buttonElements[1], 'change');
32
+ expect(changeEventRight instanceof Event).to.be.true;
33
+ expect(changeEventRight.bubbles).to.be.true;
34
+ setTimeout(async () => await sendKeys({ press: 'ArrowUp' }));
35
+ const changeEventUp = await oneEvent(buttonElements[0], 'change');
36
+ expect(changeEventUp instanceof Event).to.be.true;
37
+ expect(changeEventUp.bubbles).to.be.true;
38
+ setTimeout(async () => await sendKeys({ press: 'ArrowDown' }));
39
+ const changeEventDown = await oneEvent(buttonElements[1], 'change');
40
+ expect(changeEventDown instanceof Event).to.be.true;
41
+ expect(changeEventDown.bubbles).to.be.true;
42
+ });
43
+ it('emits an input event when arrow keys are pressed', async () => {
44
+ await fixture(html `<glide-core-button-group>
45
+ <glide-core-button-group-button value="value-1"
46
+ >Button 1</glide-core-button-group-button
47
+ >
48
+ <glide-core-button-group-button value="value-2" selected
49
+ >Button 2</glide-core-button-group-button
50
+ >
51
+ <glide-core-button-group-button value="value-3"
52
+ >Button 3</glide-core-button-group-button
53
+ >
54
+ </glide-core-button-group>`);
55
+ const buttonElements = document.querySelectorAll('glide-core-button-group-button');
56
+ await sendKeys({ press: 'Tab' });
57
+ setTimeout(async () => await sendKeys({ press: 'ArrowLeft' }));
58
+ const inputEventLeft = await oneEvent(buttonElements[0], 'input');
59
+ expect(inputEventLeft instanceof Event).to.be.true;
60
+ expect(inputEventLeft.bubbles).to.be.true;
61
+ setTimeout(async () => await sendKeys({ press: 'ArrowRight' }));
62
+ const inputEventRight = await oneEvent(buttonElements[1], 'input');
63
+ expect(inputEventRight instanceof Event).to.be.true;
64
+ expect(inputEventRight.bubbles).to.be.true;
65
+ setTimeout(async () => await sendKeys({ press: 'ArrowUp' }));
66
+ const inputEventUp = await oneEvent(buttonElements[0], 'input');
67
+ expect(inputEventUp instanceof Event).to.be.true;
68
+ expect(inputEventUp.bubbles).to.be.true;
69
+ setTimeout(async () => await sendKeys({ press: 'ArrowDown' }));
70
+ const inputEventDown = await oneEvent(buttonElements[1], 'input');
71
+ expect(inputEventDown instanceof Event).to.be.true;
72
+ expect(inputEventDown.bubbles).to.be.true;
73
+ });
74
+ it('moves focus to previous button when left or up arrow keys are pressed', async () => {
75
+ await fixture(html `<glide-core-button-group>
76
+ <glide-core-button-group-button value="value-1"
77
+ >Button 1</glide-core-button-group-button
78
+ >
79
+ <glide-core-button-group-button value="value-2"
80
+ >Button 2</glide-core-button-group-button
81
+ >
82
+ <glide-core-button-group-button value="value-3" selected
83
+ >Button 3</glide-core-button-group-button
84
+ >
85
+ </glide-core-button-group>`);
86
+ const buttonElements = document.querySelectorAll('glide-core-button-group-button');
87
+ await sendKeys({ press: 'Tab' });
88
+ await sendKeys({ press: 'ArrowLeft' });
89
+ expect(buttonElements[1]).to.have.focus;
90
+ await sendKeys({ press: 'ArrowUp' });
91
+ expect(buttonElements[0]).to.have.focus;
92
+ });
93
+ it('moves focus to last button when left or up arrow keys are pressed on the first button', async () => {
94
+ await fixture(html `<glide-core-button-group>
95
+ <glide-core-button-group-button value="value-1" selected
96
+ >Button 1</glide-core-button-group-button
97
+ >
98
+ <glide-core-button-group-button value="value-2"
99
+ >Button 2</glide-core-button-group-button
100
+ >
101
+ <glide-core-button-group-button value="value-3"
102
+ >Button 3</glide-core-button-group-button
103
+ >
104
+ </glide-core-button-group>`);
105
+ const buttonElements = document.querySelectorAll('glide-core-button-group-button');
106
+ await sendKeys({ press: 'Tab' });
107
+ await sendKeys({ press: 'ArrowLeft' });
108
+ expect(buttonElements[2]).to.have.focus;
109
+ buttonElements[0].focus();
110
+ await sendKeys({ press: ' ' });
111
+ await sendKeys({ press: 'ArrowUp' });
112
+ expect(buttonElements[2]).to.have.focus;
113
+ });
114
+ it('moves focus to next button when right or down arrow keys are pressed', async () => {
115
+ await fixture(html `<glide-core-button-group>
116
+ <glide-core-button-group-button value="value-1" selected
117
+ >Button 1</glide-core-button-group-button
118
+ >
119
+ <glide-core-button-group-button value="value-2"
120
+ >Button 2</glide-core-button-group-button
121
+ >
122
+ <glide-core-button-group-button value="value-3"
123
+ >Button 3</glide-core-button-group-button
124
+ >
125
+ </glide-core-button-group>`);
126
+ const buttonElements = document.querySelectorAll('glide-core-button-group-button');
127
+ await sendKeys({ press: 'Tab' });
128
+ await sendKeys({ press: 'ArrowRight' });
129
+ expect(buttonElements[1]).to.have.focus;
130
+ await sendKeys({ press: 'ArrowDown' });
131
+ expect(buttonElements[2]).to.have.focus;
132
+ });
133
+ it('moves focus to first button when right or down arrow keys are pressed on the last button', async () => {
134
+ await fixture(html `<glide-core-button-group>
135
+ <glide-core-button-group-button value="value-1"
136
+ >Button 1</glide-core-button-group-button
137
+ >
138
+ <glide-core-button-group-button value="value-2"
139
+ >Button 2</glide-core-button-group-button
140
+ >
141
+ <glide-core-button-group-button value="value-3" selected
142
+ >Button 3</glide-core-button-group-button
143
+ >
144
+ </glide-core-button-group>`);
145
+ const buttonElements = document.querySelectorAll('glide-core-button-group-button');
146
+ await sendKeys({ press: 'Tab' });
147
+ await sendKeys({ press: 'ArrowRight' });
148
+ expect(buttonElements[0]).to.have.focus;
149
+ buttonElements[2].focus();
150
+ await sendKeys({ press: ' ' });
151
+ expect(buttonElements[2]).to.have.focus;
152
+ await sendKeys({ press: 'ArrowDown' });
153
+ expect(buttonElements[0]).to.have.focus;
154
+ });
155
+ it('moves focus to previous enabled button when pressing left or up arrow keys', async () => {
156
+ await fixture(html `<glide-core-button-group>
157
+ <glide-core-button-group-button value="value-1"
158
+ >Button 1</glide-core-button-group-button
159
+ >
160
+ <glide-core-button-group-button value="value-2" disabled
161
+ >Button 2</glide-core-button-group-button
162
+ >
163
+ <glide-core-button-group-button value="value-3" selected
164
+ >Button 3</glide-core-button-group-button
165
+ >
166
+ </glide-core-button-group>`);
167
+ const buttonElements = document.querySelectorAll('glide-core-button-group-button');
168
+ await sendKeys({ press: 'Tab' });
169
+ await sendKeys({ press: 'ArrowLeft' });
170
+ expect(buttonElements[0]).to.have.focus;
171
+ buttonElements[2].focus();
172
+ await sendKeys({ press: ' ' });
173
+ expect(buttonElements[2]).to.have.focus;
174
+ await sendKeys({ press: 'ArrowUp' });
175
+ expect(buttonElements[0]).to.have.focus;
176
+ });
177
+ it('moves focus to next enabled button when pressing right or down arrow keys', async () => {
178
+ await fixture(html `<glide-core-button-group>
179
+ <glide-core-button-group-button value="value-1" selected
180
+ >Button 1</glide-core-button-group-button
181
+ >
182
+ <glide-core-button-group-button value="value-2" disabled
183
+ >Button 2</glide-core-button-group-button
184
+ >
185
+ <glide-core-button-group-button value="value-3"
186
+ >Button 3</glide-core-button-group-button
187
+ >
188
+ </glide-core-button-group>`);
189
+ const buttonElements = document.querySelectorAll('glide-core-button-group-button');
190
+ await sendKeys({ press: 'Tab' });
191
+ await sendKeys({ press: 'ArrowRight' });
192
+ expect(buttonElements[2]).to.have.focus;
193
+ buttonElements[0].focus();
194
+ await sendKeys({ press: ' ' });
195
+ expect(buttonElements[0]).to.have.focus;
196
+ await sendKeys({ press: 'ArrowDown' });
197
+ expect(buttonElements[2]).to.have.focus;
198
+ });
199
+ it('does not move focus if there is only one button when pressing arrow keys', async () => {
200
+ await fixture(html `<glide-core-button-group>
201
+ <glide-core-button-group-button value="value-1"
202
+ >Button 1</glide-core-button-group-button
203
+ >
204
+ </glide-core-button-group>`);
205
+ const buttonElement = document.querySelector('glide-core-button-group-button');
206
+ await sendKeys({ press: 'Tab' });
207
+ await sendKeys({ press: 'ArrowLeft' });
208
+ expect(buttonElement).to.have.focus;
209
+ await sendKeys({ press: 'ArrowRight' });
210
+ expect(buttonElement).to.have.focus;
211
+ await sendKeys({ press: 'ArrowUp' });
212
+ expect(buttonElement).to.have.focus;
213
+ await sendKeys({ press: 'ArrowDown' });
214
+ expect(buttonElement).to.have.focus;
215
+ });
216
+ it('changes the "selected" attribute when clicking', async () => {
217
+ const element = await fixture(html `<glide-core-button-group>
218
+ <glide-core-button-group-button value="value-1" selected
219
+ >Button 1</glide-core-button-group-button
220
+ >
221
+ <glide-core-button-group-button value="value-2"
222
+ >Button 2</glide-core-button-group-button
223
+ >
224
+ <glide-core-button-group-button value="value-3"
225
+ >Button 3</glide-core-button-group-button
226
+ >
227
+ </glide-core-button-group>`);
228
+ const buttonElements = document.querySelectorAll('glide-core-button-group-button');
229
+ const liElement = buttonElements[2].shadowRoot.querySelector('li');
230
+ expect(liElement).to.exist;
231
+ liElement?.click();
232
+ await elementUpdated(element);
233
+ expect(buttonElements[2]).to.have.focus;
234
+ expect(buttonElements[2]).to.have.attribute('selected');
235
+ expect(buttonElements[0]).to.not.have.attribute('selected');
236
+ });
237
+ it('does not change focus nor the "selected" attribute when clicking a disabled button', async () => {
238
+ const element = await fixture(html `<glide-core-button-group>
239
+ <glide-core-button-group-button value="value-1" selected
240
+ >Button 1</glide-core-button-group-button
241
+ >
242
+ <glide-core-button-group-button value="value-2" disabled
243
+ >Button 2</glide-core-button-group-button
244
+ >
245
+ </glide-core-button-group>`);
246
+ const buttonElements = document.querySelectorAll('glide-core-button-group-button');
247
+ await sendKeys({ press: 'Tab' });
248
+ const liElement = buttonElements[0].shadowRoot.querySelector('li');
249
+ expect(liElement).to.exist;
250
+ liElement?.click();
251
+ await elementUpdated(element);
252
+ expect(buttonElements[0]).to.have.focus;
253
+ expect(buttonElements[0]).to.have.attribute('selected');
254
+ expect(buttonElements[1]).to.not.have.attribute('selected');
255
+ });
256
+ it('changes the "selected" attribute when pressing arrow and space keys', async () => {
257
+ await fixture(html `<glide-core-button-group>
258
+ <glide-core-button-group-button value="value-1" selected
259
+ >Button 1</glide-core-button-group-button
260
+ >
261
+ <glide-core-button-group-button value="value-2"
262
+ >Button 2</glide-core-button-group-button
263
+ >
264
+ <glide-core-button-group-button value="value-3"
265
+ >Button 3</glide-core-button-group-button
266
+ >
267
+ </glide-core-button-group>`);
268
+ const buttonElements = document.querySelectorAll('glide-core-button-group-button');
269
+ await sendKeys({ press: 'Tab' });
270
+ await sendKeys({ press: 'ArrowRight' });
271
+ expect(buttonElements[1]).to.have.focus;
272
+ expect(buttonElements[1]).to.have.attribute('selected');
273
+ expect(buttonElements[0]).to.not.have.attribute('selected');
274
+ await sendKeys({ press: 'ArrowDown' });
275
+ expect(buttonElements[2]).to.have.focus;
276
+ expect(buttonElements[2]).to.have.attribute('selected');
277
+ expect(buttonElements[1]).to.not.have.attribute('selected');
278
+ await sendKeys({ press: 'ArrowUp' });
279
+ expect(buttonElements[1]).to.have.focus;
280
+ expect(buttonElements[1]).to.have.attribute('selected');
281
+ expect(buttonElements[2]).to.not.have.attribute('selected');
282
+ await sendKeys({ press: 'ArrowLeft' });
283
+ expect(buttonElements[0]).to.have.focus;
284
+ expect(buttonElements[0]).to.have.attribute('selected');
285
+ expect(buttonElements[1]).to.not.have.attribute('selected');
286
+ buttonElements[2].focus();
287
+ await sendKeys({ press: ' ' });
288
+ expect(buttonElements[2]).to.have.focus;
289
+ expect(buttonElements[2]).to.have.attribute('selected');
290
+ expect(buttonElements[0]).to.not.have.attribute('selected');
291
+ });
package/dist/button.d.ts CHANGED
@@ -14,8 +14,9 @@ export default class GlideCoreButton extends LitElement {
14
14
  static formAssociated: boolean;
15
15
  static shadowRootOptions: ShadowRootInit;
16
16
  static styles: import("lit").CSSResult[];
17
- ariaExpanded: string | null;
18
- ariaHasPopup: string | null;
17
+ ariaExpanded: 'true' | 'false' | null;
18
+ ariaHasPopup: 'true' | 'false' | 'menu' | 'listbox' | 'tree' | 'grid' | 'dialog' | null;
19
+ ariaControls: string | null;
19
20
  disabled: boolean;
20
21
  type: 'button' | 'submit' | 'reset';
21
22
  variant: 'primary' | 'secondary' | 'tertiary';
package/dist/button.js CHANGED
@@ -1 +1 @@
1
- "use strict";var I=Object.defineProperty;var D=Object.getOwnPropertyDescriptor;var a=(s,e,t,o)=>{for(var n=o>1?void 0:o?D(e,t):e,x=s.length-1,b;x>=0;x--)(b=s[x])&&(n=(o?b(e,t,n):b(n))||n);return o&&n&&I(e,t,n),n};var E=(s,e,t)=>{if(!e.has(s))throw TypeError("Cannot "+t)};var l=(s,e,t)=>(E(s,e,"read from private field"),t?t.call(s):e.get(s)),i=(s,e,t)=>{if(e.has(s))throw TypeError("Cannot add the same private member more than once");e instanceof WeakSet?e.add(s):e.set(s,t)},M=(s,e,t,o)=>(E(s,e,"write to private field"),o?o.call(s,t):e.set(s,t),t);var f=(s,e,t)=>(E(s,e,"access private method"),t);var m,u,c,p,d,w,g,P,y,T,S,k,v,z;import{LitElement as H,html as K}from"lit";import{classMap as O}from"lit/directives/class-map.js";import{createRef as $,ref as R}from"lit/directives/ref.js";import{customElement as q,property as h,state as L}from"lit/decorators.js";import{owSlot as N}from"./library/ow.js";import A from"./button.styles.js";let r=class extends H{constructor(){super();i(this,d);i(this,g);i(this,y);i(this,S);i(this,v);this.ariaExpanded=null;this.ariaHasPopup=null;this.disabled=!1;this.type="button";this.variant="primary";this.size="large";this.hasPrefixSlot=!1;this.hasSuffixSlot=!1;i(this,m,$());i(this,u,void 0);i(this,c,$());i(this,p,$());M(this,u,this.attachInternals())}get form(){return l(this,u).form}firstUpdated(){N(l(this,m).value)}render(){return K`<button class="${O({component:!0,primary:this.variant==="primary",secondary:this.variant==="secondary",tertiary:this.variant==="tertiary",large:this.size==="large",small:this.size==="small","has-prefix":this.hasPrefixSlot,"has-suffix":this.hasSuffixSlot})}" type="${this.type}" ?disabled="${this.disabled}" @click="${f(this,d,w)}" @keydown="${f(this,y,T)}"><slot name="prefix" @slotchange="${f(this,S,k)}" ${R(l(this,c))}></slot><slot @slotchange="${f(this,g,P)}" ${R(l(this,m))}></slot><slot name="suffix" @slotchange="${f(this,v,z)}" ${R(l(this,p))}></slot></button>`}};m=new WeakMap,u=new WeakMap,c=new WeakMap,p=new WeakMap,d=new WeakSet,w=function(){if(this.type!=="button"){if(this.type==="submit"){this.form?.requestSubmit();return}this.form?.reset()}},g=new WeakSet,P=function(){N(l(this,m).value)},y=new WeakSet,T=function(t){["Enter"].includes(t.key)&&(t.preventDefault(),f(this,d,w).call(this))},S=new WeakSet,k=function(){const t=l(this,c).value?.assignedNodes();this.hasPrefixSlot=!!(t&&t.length>0)},v=new WeakSet,z=function(){const t=l(this,p).value?.assignedNodes();this.hasSuffixSlot=!!(t&&t.length>0)},r.formAssociated=!0,r.shadowRootOptions={...H.shadowRootOptions,delegatesFocus:!0,mode:"closed"},r.styles=A,a([h({reflect:!0})],r.prototype,"ariaExpanded",2),a([h({reflect:!0})],r.prototype,"ariaHasPopup",2),a([h({type:Boolean,reflect:!0})],r.prototype,"disabled",2),a([h()],r.prototype,"type",2),a([h({reflect:!0})],r.prototype,"variant",2),a([h({reflect:!0})],r.prototype,"size",2),a([L()],r.prototype,"hasPrefixSlot",2),a([L()],r.prototype,"hasSuffixSlot",2),r=a([q("glide-core-button")],r);export{r as default};
1
+ var __decorate=this&&this.__decorate||function(t,e,o,i){var r,s=arguments.length,a=s<3?e:null===i?i=Object.getOwnPropertyDescriptor(e,o):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(t,e,o,i);else for(var l=t.length-1;l>=0;l--)(r=t[l])&&(a=(s<3?r(a):s>3?r(e,o,a):r(e,o))||a);return s>3&&a&&Object.defineProperty(e,o,a),a};import{LitElement,html}from"lit";import{classMap}from"lit/directives/class-map.js";import{createRef,ref}from"lit/directives/ref.js";import{customElement,property,state}from"lit/decorators.js";import{ifDefined}from"lit/directives/if-defined.js";import{owSlot}from"./library/ow.js";import styles from"./button.styles.js";let GlideCoreButton=class GlideCoreButton extends LitElement{static{this.formAssociated=!0}static{this.shadowRootOptions={...LitElement.shadowRootOptions,delegatesFocus:!0,mode:"closed"}}static{this.styles=styles}get form(){return this.#t.form}firstUpdated(){owSlot(this.#e.value)}render(){return html`<button aria-controls="${ifDefined(this.ariaControls??void 0)}" aria-expanded="${ifDefined(this.ariaExpanded??void 0)}" aria-haspopup="${ifDefined(this.ariaHasPopup??void 0)}" class="${classMap({component:!0,primary:"primary"===this.variant,secondary:"secondary"===this.variant,tertiary:"tertiary"===this.variant,large:"large"===this.size,small:"small"===this.size,"has-prefix":this.hasPrefixSlot,"has-suffix":this.hasSuffixSlot})}" type="${this.type}" ?disabled="${this.disabled}" @click="${this.#o}" @keydown="${this.#i}"><slot name="prefix" @slotchange="${this.#r}" ${ref(this.#s)}></slot><slot @slotchange="${this.#a}" ${ref(this.#e)}></slot><slot name="suffix" @slotchange="${this.#l}" ${ref(this.#n)}></slot></button>`}constructor(){super(),this.ariaExpanded=null,this.ariaHasPopup=null,this.ariaControls=null,this.disabled=!1,this.type="button",this.variant="primary",this.size="large",this.hasPrefixSlot=!1,this.hasSuffixSlot=!1,this.#e=createRef(),this.#s=createRef(),this.#n=createRef(),this.#t=this.attachInternals()}#e;#t;#s;#n;#o(){"button"!==this.type&&("submit"!==this.type?this.form?.reset():this.form?.requestSubmit())}#a(){owSlot(this.#e.value)}#i(t){["Enter"].includes(t.key)&&(t.preventDefault(),this.#o())}#r(){const t=this.#s.value?.assignedNodes();this.hasPrefixSlot=!!(t&&t.length>0)}#l(){const t=this.#n.value?.assignedNodes();this.hasSuffixSlot=!!(t&&t.length>0)}};__decorate([property({attribute:"aria-expanded",reflect:!0})],GlideCoreButton.prototype,"ariaExpanded",void 0),__decorate([property({attribute:"aria-haspopup",reflect:!0})],GlideCoreButton.prototype,"ariaHasPopup",void 0),__decorate([property({attribute:"aria-controls",reflect:!0})],GlideCoreButton.prototype,"ariaControls",void 0),__decorate([property({type:Boolean,reflect:!0})],GlideCoreButton.prototype,"disabled",void 0),__decorate([property()],GlideCoreButton.prototype,"type",void 0),__decorate([property({reflect:!0})],GlideCoreButton.prototype,"variant",void 0),__decorate([property({reflect:!0})],GlideCoreButton.prototype,"size",void 0),__decorate([state()],GlideCoreButton.prototype,"hasPrefixSlot",void 0),__decorate([state()],GlideCoreButton.prototype,"hasSuffixSlot",void 0),GlideCoreButton=__decorate([customElement("glide-core-button")],GlideCoreButton);export default GlideCoreButton;
@@ -1,4 +1,4 @@
1
- "use strict";import{css as e}from"lit";import r from"./styles/focus-outline.js";export default[e`
1
+ import{css}from"lit";import focusOutline from"./styles/focus-outline.js";export default[css`
2
2
  :host {
3
3
  /* Contains elements with "padding" and "width". Inline by default. */
4
4
  display: inline-block;
@@ -7,7 +7,7 @@
7
7
  .component {
8
8
  align-items: center;
9
9
  border-color: transparent;
10
- border-radius: var(--glide-core-spacing-sm);
10
+ border-radius: 0.75rem;
11
11
  border-style: solid;
12
12
  border-width: 1px;
13
13
  cursor: pointer;
@@ -29,11 +29,11 @@
29
29
  }
30
30
 
31
31
  &:focus-visible {
32
- ${r};
32
+ ${focusOutline};
33
33
  }
34
34
 
35
35
  &:disabled {
36
- cursor: default;
36
+ cursor: not-allowed;
37
37
  opacity: 1;
38
38
  }
39
39
 
@@ -130,4 +130,4 @@
130
130
  min-inline-size: 4.375rem;
131
131
  }
132
132
  }
133
- `];
133
+ `];