@crowdstrike/glide-core 0.5.1 → 0.5.2

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 (208) hide show
  1. package/dist/accordion.js +1 -1
  2. package/dist/accordion.styles.js +4 -4
  3. package/dist/accordion.test.basics.js +109 -0
  4. package/dist/accordion.test.events.js +39 -0
  5. package/dist/button-group.button.js +1 -1
  6. package/dist/button-group.button.styles.js +4 -4
  7. package/dist/button-group.button.test.basics.js +169 -0
  8. package/dist/button-group.button.test.events.js +73 -0
  9. package/dist/button-group.js +1 -1
  10. package/dist/button-group.styles.js +3 -3
  11. package/dist/button-group.test.basics.js +268 -0
  12. package/dist/button-group.test.events.js +291 -0
  13. package/dist/button.js +1 -1
  14. package/dist/button.styles.js +4 -4
  15. package/dist/button.test.basics.js +196 -0
  16. package/dist/button.test.events.js +25 -0
  17. package/dist/button.test.form.js +49 -0
  18. package/dist/checkbox-group.js +1 -1
  19. package/dist/checkbox-group.styles.js +2 -2
  20. package/dist/checkbox-group.test.basics.js +119 -0
  21. package/dist/checkbox-group.test.events.js +110 -0
  22. package/dist/checkbox-group.test.focus.js +45 -0
  23. package/dist/checkbox-group.test.form.js +130 -0
  24. package/dist/checkbox-group.test.validity.js +75 -0
  25. package/dist/checkbox.js +1 -1
  26. package/dist/checkbox.styles.js +3 -3
  27. package/dist/checkbox.test.basics.js +89 -0
  28. package/dist/checkbox.test.events.js +87 -0
  29. package/dist/checkbox.test.focus.js +38 -0
  30. package/dist/checkbox.test.form.js +115 -0
  31. package/dist/checkbox.test.states.js +62 -0
  32. package/dist/checkbox.test.validity.js +51 -0
  33. package/dist/drawer.d.ts +2 -2
  34. package/dist/drawer.js +1 -15
  35. package/dist/drawer.styles.js +18 -4
  36. package/dist/drawer.test.accessibility.js +22 -0
  37. package/dist/drawer.test.basics.js +43 -0
  38. package/dist/drawer.test.closing.js +37 -0
  39. package/dist/drawer.test.events.js +52 -0
  40. package/dist/drawer.test.methods.js +34 -0
  41. package/dist/dropdown.d.ts +4 -2
  42. package/dist/dropdown.js +1 -1
  43. package/dist/dropdown.option.d.ts +0 -2
  44. package/dist/dropdown.option.js +1 -1
  45. package/dist/dropdown.option.styles.js +2 -2
  46. package/dist/dropdown.option.test.basics.js +59 -0
  47. package/dist/dropdown.option.test.basics.multiple.js +26 -0
  48. package/dist/dropdown.option.test.basics.single.js +20 -0
  49. package/dist/dropdown.option.test.events.js +27 -0
  50. package/dist/dropdown.option.test.focus.js +11 -0
  51. package/dist/dropdown.option.test.interactions.multiple.js +87 -0
  52. package/dist/dropdown.option.test.interactions.single.js +22 -0
  53. package/dist/dropdown.styles.js +25 -6
  54. package/dist/dropdown.test.basics.filterable.js +84 -0
  55. package/dist/dropdown.test.basics.js +233 -0
  56. package/dist/dropdown.test.basics.multiple.js +270 -0
  57. package/dist/dropdown.test.basics.single.js +79 -0
  58. package/dist/dropdown.test.events.js +268 -0
  59. package/dist/dropdown.test.events.multiple.js +130 -0
  60. package/dist/dropdown.test.focus.d.ts +1 -0
  61. package/dist/dropdown.test.focus.filterable.js +154 -0
  62. package/dist/dropdown.test.focus.js +18 -0
  63. package/dist/dropdown.test.focus.multiple.js +181 -0
  64. package/dist/dropdown.test.focus.single.js +53 -0
  65. package/dist/dropdown.test.form.js +140 -0
  66. package/dist/dropdown.test.form.multiple.js +149 -0
  67. package/dist/dropdown.test.form.single.js +128 -0
  68. package/dist/dropdown.test.interactions.filterable.js +385 -0
  69. package/dist/dropdown.test.interactions.js +446 -0
  70. package/dist/dropdown.test.interactions.multiple.js +908 -0
  71. package/dist/dropdown.test.interactions.single.js +466 -0
  72. package/dist/dropdown.test.validity.js +46 -0
  73. package/dist/icon-button.js +1 -1
  74. package/dist/icon-button.styles.js +3 -3
  75. package/dist/icon-button.test.basics.js +103 -0
  76. package/dist/icons/checked.js +1 -1
  77. package/dist/icons/magnifying-glass.js +1 -1
  78. package/dist/input.js +1 -1
  79. package/dist/input.styles.js +3 -3
  80. package/dist/input.test.basics.js +169 -0
  81. package/dist/input.test.events.js +97 -0
  82. package/dist/input.test.focus.js +54 -0
  83. package/dist/input.test.form.js +56 -0
  84. package/dist/input.test.validity.js +50 -0
  85. package/dist/label.js +1 -1
  86. package/dist/label.styles.js +3 -3
  87. package/dist/label.test.basics.js +129 -0
  88. package/dist/library/expect-argument-error.js +1 -1
  89. package/dist/library/ow.js +1 -1
  90. package/dist/library/ow.test.js +55 -0
  91. package/dist/menu.button.d.ts +1 -2
  92. package/dist/menu.button.js +1 -1
  93. package/dist/menu.button.styles.js +3 -3
  94. package/dist/menu.button.test.basics.js +42 -0
  95. package/dist/menu.d.ts +4 -0
  96. package/dist/menu.js +1 -1
  97. package/dist/menu.link.d.ts +1 -2
  98. package/dist/menu.link.js +1 -1
  99. package/dist/menu.link.styles.js +3 -3
  100. package/dist/menu.link.test.basics.js +46 -0
  101. package/dist/menu.styles.js +6 -6
  102. package/dist/menu.test.basics.js +161 -0
  103. package/dist/menu.test.focus.d.ts +0 -1
  104. package/dist/menu.test.focus.js +66 -0
  105. package/dist/menu.test.interactions.d.ts +0 -1
  106. package/dist/menu.test.interactions.js +522 -0
  107. package/dist/modal.icon-button.js +1 -1
  108. package/dist/modal.icon-button.styles.js +2 -2
  109. package/dist/modal.icon-button.test.basics.js +45 -0
  110. package/dist/modal.js +1 -15
  111. package/dist/modal.styles.js +4 -4
  112. package/dist/modal.tertiary-icon.js +1 -1
  113. package/dist/modal.tertiary-icon.test.basics.js +59 -0
  114. package/dist/modal.test.accessibility.js +48 -0
  115. package/dist/modal.test.basics.js +203 -0
  116. package/dist/modal.test.close.js +38 -0
  117. package/dist/modal.test.events.js +110 -0
  118. package/dist/modal.test.lock-scroll.js +76 -0
  119. package/dist/modal.test.methods.js +23 -0
  120. package/dist/modal.test.scrollbars.js +19 -0
  121. package/dist/radio-group.js +1 -1
  122. package/dist/radio-group.styles.js +2 -2
  123. package/dist/radio-group.test.basics.js +323 -0
  124. package/dist/radio-group.test.events.js +277 -0
  125. package/dist/radio-group.test.focus.js +75 -0
  126. package/dist/radio-group.test.form.js +104 -0
  127. package/dist/radio-group.test.validity.js +228 -0
  128. package/dist/radio.js +1 -1
  129. package/dist/radio.styles.js +4 -4
  130. package/dist/split-button.d.ts +24 -0
  131. package/dist/split-button.js +1 -0
  132. package/dist/split-button.stories.d.ts +17 -0
  133. package/dist/split-button.styles.d.ts +2 -0
  134. package/dist/split-button.styles.js +103 -0
  135. package/dist/split-button.test.basics.d.ts +1 -0
  136. package/dist/split-button.test.basics.js +84 -0
  137. package/dist/split-container.d.ts +30 -0
  138. package/dist/split-container.js +1 -0
  139. package/dist/split-container.styles.d.ts +2 -0
  140. package/dist/split-container.styles.js +132 -0
  141. package/dist/split-container.test.basics.d.ts +3 -0
  142. package/dist/split-container.test.basics.js +445 -0
  143. package/dist/split-container.test.interactions.d.ts +1 -0
  144. package/dist/split-container.test.interactions.js +20 -0
  145. package/dist/split-link.d.ts +25 -0
  146. package/dist/split-link.js +1 -0
  147. package/dist/split-link.test.basics.d.ts +1 -0
  148. package/dist/split-link.test.basics.js +92 -0
  149. package/dist/split-link.test.interactions.d.ts +1 -0
  150. package/dist/split-link.test.interactions.js +19 -0
  151. package/dist/status-indicator.js +1 -1
  152. package/dist/status-indicator.styles.js +2 -2
  153. package/dist/status-indicator.test.basics.js +102 -0
  154. package/dist/styles/focus-outline.js +1 -4
  155. package/dist/styles/visually-hidden.js +1 -11
  156. package/dist/tab.group.js +1 -1
  157. package/dist/tab.group.styles.js +2 -2
  158. package/dist/tab.group.test.basics.js +185 -0
  159. package/dist/tab.js +1 -1
  160. package/dist/tab.panel.js +1 -1
  161. package/dist/tab.panel.styles.js +3 -3
  162. package/dist/tab.styles.js +2 -2
  163. package/dist/tab.test.basics.js +71 -0
  164. package/dist/tag.js +1 -1
  165. package/dist/tag.styles.js +3 -3
  166. package/dist/tag.test.basics.js +118 -0
  167. package/dist/tag.test.events.js +16 -0
  168. package/dist/tag.test.focus.js +11 -0
  169. package/dist/textarea.js +2 -2
  170. package/dist/textarea.styles.js +3 -3
  171. package/dist/textarea.test.basics.js +140 -0
  172. package/dist/textarea.test.events.js +204 -0
  173. package/dist/textarea.test.form.js +70 -0
  174. package/dist/textarea.test.validity.js +83 -0
  175. package/dist/toasts.js +1 -1
  176. package/dist/toasts.styles.js +2 -2
  177. package/dist/toasts.test.basics.js +94 -0
  178. package/dist/toasts.toast.js +1 -1
  179. package/dist/toasts.toast.styles.js +5 -2
  180. package/dist/toasts.toast.test.basics.js +139 -0
  181. package/dist/toggle.js +1 -1
  182. package/dist/toggle.styles.js +3 -3
  183. package/dist/toggle.test.basics.js +64 -0
  184. package/dist/toggle.test.events.js +29 -0
  185. package/dist/toggle.test.focus.js +9 -0
  186. package/dist/toggle.test.states.js +35 -0
  187. package/dist/tooltip.js +1 -1
  188. package/dist/tooltip.styles.js +3 -3
  189. package/dist/tooltip.test.basics.js +64 -0
  190. package/dist/tooltip.test.interactions.js +78 -0
  191. package/dist/tree.item.icon-button.js +1 -1
  192. package/dist/tree.item.icon-button.styles.js +2 -2
  193. package/dist/tree.item.icon-button.test.basics.js +13 -0
  194. package/dist/tree.item.js +1 -1
  195. package/dist/tree.item.menu.js +1 -1
  196. package/dist/tree.item.menu.styles.js +2 -2
  197. package/dist/tree.item.menu.test.basics.js +34 -0
  198. package/dist/tree.item.styles.js +2 -2
  199. package/dist/tree.item.test.basics.js +102 -0
  200. package/dist/tree.js +1 -1
  201. package/dist/tree.styles.js +2 -2
  202. package/dist/tree.test.aria.js +86 -0
  203. package/dist/tree.test.basics.js +123 -0
  204. package/dist/tree.test.events.js +19 -0
  205. package/dist/tree.test.focus.js +261 -0
  206. package/package.json +18 -16
  207. /package/dist/{dropdown.option.test.focus.multiple.d.ts → dropdown.option.test.focus.d.ts} +0 -0
  208. /package/dist/{dropdown.option.test.focus.single.d.ts → dropdown.test.events.multiple.d.ts} +0 -0
@@ -0,0 +1,130 @@
1
+ import './checkbox.js';
2
+ import { assert, expect, fixture, html } from '@open-wc/testing';
3
+ import GlideCoreCheckboxGroup from './checkbox-group.js';
4
+ GlideCoreCheckboxGroup.shadowRootOptions.mode = 'open';
5
+ it('exposes standard form control properties and methods', async () => {
6
+ const form = document.createElement('form');
7
+ const component = await fixture(html `<glide-core-checkbox-group label="Checkbox Group">
8
+ <glide-core-checkbox label="Checkbox"></glide-core-checkbox>
9
+ </glide-core-checkbox-group>`, { parentNode: form });
10
+ expect(component.form).to.equal(form);
11
+ expect(component.validity instanceof ValidityState).to.be.true;
12
+ expect(component.willValidate).to.be.true;
13
+ expect(component.checkValidity).to.be.a('function');
14
+ expect(component.reportValidity).to.be.a('function');
15
+ });
16
+ it('can be reset', async () => {
17
+ const form = document.createElement('form');
18
+ const component = await fixture(html `<glide-core-checkbox-group label="Checkbox Group">
19
+ <glide-core-checkbox
20
+ label="Checkbox"
21
+ value="value"
22
+ checked
23
+ ></glide-core-checkbox>
24
+ </glide-core-checkbox-group>`, {
25
+ parentNode: form,
26
+ });
27
+ const checkbox = component.querySelector('glide-core-checkbox');
28
+ assert(checkbox);
29
+ checkbox.checked = false;
30
+ form.reset();
31
+ expect(component.value).to.deep.equal(['value']);
32
+ });
33
+ it('has `formData` when the checkboxes are checked', async () => {
34
+ const form = document.createElement('form');
35
+ await fixture(html `<glide-core-checkbox-group label="Checkbox Group" name="name">
36
+ <glide-core-checkbox
37
+ label="One"
38
+ value="one"
39
+ checked
40
+ ></glide-core-checkbox>
41
+ <glide-core-checkbox
42
+ label="Two"
43
+ value="two"
44
+ checked
45
+ ></glide-core-checkbox>
46
+ </glide-core-checkbox-group>`, {
47
+ parentNode: form,
48
+ });
49
+ const formData = new FormData(form);
50
+ expect(formData.get('name')).to.be.equal('["one","two"]');
51
+ });
52
+ it('has `formData` when the checkbox is checked and indeterminate', async () => {
53
+ const form = document.createElement('form');
54
+ await fixture(html `<glide-core-checkbox-group label="Checkbox Group" name="name">
55
+ <glide-core-checkbox
56
+ label="Checkbox"
57
+ value="value"
58
+ checked
59
+ indeterminate
60
+ ></glide-core-checkbox>
61
+ </glide-core-checkbox-group>`, {
62
+ parentNode: form,
63
+ });
64
+ const formData = new FormData(form);
65
+ expect(formData.get('name')).to.be.equal('["value"]');
66
+ });
67
+ it('has no `formData` when the checkboxes are unchecked', async () => {
68
+ const form = document.createElement('form');
69
+ await fixture(html `<glide-core-checkbox-group label="Checkbox Group" name="name">
70
+ <glide-core-checkbox label="One" value="one"></glide-core-checkbox>
71
+ <glide-core-checkbox label="Two" value="two"></glide-core-checkbox>
72
+ </glide-core-checkbox-group>`, {
73
+ parentNode: form,
74
+ });
75
+ const formData = new FormData(form);
76
+ expect(formData.get('name')).to.be.null;
77
+ });
78
+ it('has no `formData` when disabled and the checkbox is checked', async () => {
79
+ const form = document.createElement('form');
80
+ await fixture(html `<glide-core-checkbox-group label="Checkbox Group" name="name" disabled>
81
+ <glide-core-checkbox
82
+ label="Checkbox"
83
+ value="value"
84
+ checked
85
+ ></glide-core-checkbox>
86
+ </glide-core-checkbox-group>`, {
87
+ parentNode: form,
88
+ });
89
+ const formData = new FormData(form);
90
+ expect(formData.get('name')).to.be.null;
91
+ });
92
+ it('has no `formData` when the checkbox is checked but disabled', async () => {
93
+ const form = document.createElement('form');
94
+ await fixture(html `<glide-core-checkbox-group label="Checkbox Group" name="name">
95
+ <glide-core-checkbox
96
+ label="Checkbox"
97
+ value="value"
98
+ checked
99
+ disabled
100
+ ></glide-core-checkbox>
101
+ </glide-core-checkbox-group>`, {
102
+ parentNode: form,
103
+ });
104
+ const formData = new FormData(form);
105
+ expect(formData.get('name')).to.be.null;
106
+ });
107
+ it('has no `formData` when without a `name` but the checkbox is checked', async () => {
108
+ const form = document.createElement('form');
109
+ await fixture(html `<glide-core-checkbox-group label="Checkbox Group">
110
+ <glide-core-checkbox
111
+ label="Checkbox"
112
+ value="value"
113
+ checked
114
+ ></glide-core-checkbox>
115
+ </glide-core-checkbox-group>`, {
116
+ parentNode: form,
117
+ });
118
+ const formData = new FormData(form);
119
+ expect(formData.get('name')).to.be.null;
120
+ });
121
+ it('has no `formData` value when the checkbox is checked but without a `value`', async () => {
122
+ const form = document.createElement('form');
123
+ await fixture(html `<glide-core-checkbox-group label="Checkbox Group" name="name">
124
+ <glide-core-checkbox label="Checkbox" checked></glide-core-checkbox>
125
+ </glide-core-checkbox-group>`, {
126
+ parentNode: form,
127
+ });
128
+ const formData = new FormData(form);
129
+ expect(formData.get('name')).to.be.null;
130
+ });
@@ -0,0 +1,75 @@
1
+ import './checkbox.js';
2
+ import { elementUpdated, expect, fixture, html } from '@open-wc/testing';
3
+ import GlideCoreCheckboxGroup from './checkbox-group.js';
4
+ GlideCoreCheckboxGroup.shadowRootOptions.mode = 'open';
5
+ it('is valid if not required and the checkbox is unchecked', async () => {
6
+ const component = await fixture(html `<glide-core-checkbox-group label="Checkbox Group">
7
+ <glide-core-checkbox label="Checkbox" value="value"></glide-core-checkbox>
8
+ </glide-core-checkbox-group>`);
9
+ expect(component.validity.valid).to.be.true;
10
+ expect(component.validity?.valueMissing).to.be.false;
11
+ expect(component.checkValidity()).to.be.true;
12
+ expect(component.reportValidity()).to.be.true;
13
+ });
14
+ it('is valid if required and the checkbox is checked', async () => {
15
+ const component = await fixture(html `<glide-core-checkbox-group label="Checkbox Group" required>
16
+ <glide-core-checkbox label="Checkbox" value="value"></glide-core-checkbox>
17
+ </glide-core-checkbox-group>`);
18
+ component.querySelector('glide-core-checkbox')?.click();
19
+ expect(component.validity.valid).to.be.true;
20
+ expect(component.validity?.valueMissing).to.be.false;
21
+ expect(component.checkValidity()).to.be.true;
22
+ expect(component.reportValidity()).to.be.true;
23
+ });
24
+ it('is invalid if required and the checkbox is unchecked', async () => {
25
+ const component = await fixture(html `<glide-core-checkbox-group label="Checkbox Group" required>
26
+ <glide-core-checkbox label="Checkbox" value="value"></glide-core-checkbox>
27
+ </glide-core-checkbox-group>`);
28
+ expect(component.validity.valid).to.be.false;
29
+ expect(component.validity?.valueMissing).to.be.true;
30
+ expect(component.checkValidity()).to.be.false;
31
+ expect(component.reportValidity()).to.be.false;
32
+ });
33
+ it('is invalid after being unchecked when required', async () => {
34
+ const component = await fixture(html `<glide-core-checkbox-group label="Checkbox Group" required>
35
+ <glide-core-checkbox
36
+ label="Checkbox"
37
+ value="value"
38
+ checked
39
+ ></glide-core-checkbox>
40
+ </glide-core-checkbox-group>`);
41
+ component.querySelector('glide-core-checkbox')?.click();
42
+ expect(component.validity.valid).to.be.false;
43
+ expect(component.validity?.valueMissing).to.be.true;
44
+ expect(component.checkValidity()).to.be.false;
45
+ expect(component.reportValidity()).to.be.false;
46
+ });
47
+ it('is both invalid and valid if required but disabled and the checkbox is unchecked', async () => {
48
+ const component = await fixture(html `<glide-core-checkbox-group label="Checkbox Group" disabled required>
49
+ <glide-core-checkbox label="Checkbox" value="value"></glide-core-checkbox>
50
+ </glide-core-checkbox-group>`);
51
+ expect(component.validity.valid).to.be.false;
52
+ expect(component.validity?.valueMissing).to.be.true;
53
+ expect(component.checkValidity()).to.be.true;
54
+ expect(component.reportValidity()).to.be.true;
55
+ });
56
+ it('sets the checkbox as valid when `required` is set to `false` dynamically', async () => {
57
+ const form = document.createElement('form');
58
+ const component = await fixture(html `<glide-core-checkbox-group label="Checkbox Group" required>
59
+ <glide-core-checkbox label="Checkbox" value="value"></glide-core-checkbox>
60
+ </glide-core-checkbox-group>`, { parentNode: form });
61
+ component.required = false;
62
+ await elementUpdated(component);
63
+ const checkbox = component.querySelector('glide-core-checkbox');
64
+ expect(checkbox?.validity.valid).to.be.true;
65
+ });
66
+ it('sets the checkbox as invalid when `required` is set to `true` dynamically', async () => {
67
+ const form = document.createElement('form');
68
+ const component = await fixture(html `<glide-core-checkbox-group label="Checkbox Group">
69
+ <glide-core-checkbox label="Checkbox" value="value"></glide-core-checkbox>
70
+ </glide-core-checkbox-group>`, { parentNode: form });
71
+ component.required = true;
72
+ await elementUpdated(component);
73
+ const checkbox = component.querySelector('glide-core-checkbox');
74
+ expect(checkbox?.validity.valid).to.be.false;
75
+ });
package/dist/checkbox.js CHANGED
@@ -1 +1 @@
1
- "use strict";var M=Object.defineProperty;var B=Object.getOwnPropertyDescriptor;var r=(s,a,t,c)=>{for(var o=c>1?void 0:c?B(a,t):a,f=s.length-1,y;f>=0;f--)(y=s[f])&&(o=(c?y(a,t,o):y(o))||o);return c&&o&&M(a,t,o),o};var b=(s,a,t)=>{if(!a.has(s))throw TypeError("Cannot "+t)};var i=(s,a,t)=>(b(s,a,"read from private field"),t?t.call(s):a.get(s)),u=(s,a,t)=>{if(a.has(s))throw TypeError("Cannot add the same private member more than once");a instanceof WeakSet?a.add(s):a.set(s,t)},k=(s,a,t,c)=>(b(s,a,"write to private field"),c?c.call(s,t):a.set(s,t),t);var g=(s,a,t)=>(b(s,a,"access private method"),t);var d,l,p,h,m,v,V;import"./label.js";import{LitElement as E,html as $}from"lit";import{classMap as L}from"lit/directives/class-map.js";import{createRef as O,ref as w}from"lit/directives/ref.js";import{customElement as S,property as n,state as q}from"lit/decorators.js";import{svg as F}from"lit/static-html.js";import{when as H}from"lit/directives/when.js";import I from"./icons/checked.js";import T from"./checkbox.styles.js";const R=F`<svg class="indeterminate-icon" fill="none" height="14" viewBox="0 0 24 24" width="14"><path d="M8 10C8 8.89543 8.89543 8 10 8H14.7929C15.2383 8 15.4614 8.53857 15.1464 8.85355L8.85355 15.1464C8.53857 15.4614 8 15.2383 8 14.7929V10Z" fill="currentColor"/></svg>`;let e=class extends E{constructor(){super();u(this,h);u(this,v);this.checked=!1;this.internallyInert=!1;this.disabled=!1;this.hideLabel=!1;this.indeterminate=!1;this.orientation="horizontal";this.required=!1;this.value="";this.isCheckingValidity=!1;this.isReportValidityOrSubmit=!1;u(this,d,O());u(this,l,void 0);u(this,p,({formData:t})=>{this.checked&&this.name&&this.value&&!this.disabled&&t.append(this.name,this.value)});k(this,l,this.attachInternals()),this.addEventListener("invalid",t=>{t?.preventDefault(),this.isCheckingValidity||(this.isReportValidityOrSubmit=!0,this.focus())})}get form(){return i(this,l).form}checkValidity(){return this.isCheckingValidity=!0,i(this,l).checkValidity()}click(){i(this,d).value?.click()}disconnectedCallback(){super.disconnectedCallback(),this.form?.removeEventListener("formdata",i(this,p))}get validity(){return this.privateVariant==="minimal"?i(this,l).validity:(this.required&&!this.checked?i(this,l).setValidity({valueMissing:!0}," ",i(this,d).value):i(this,l).setValidity({}),i(this,l).validity)}focus(t){i(this,d).value?.focus(t)}formAssociatedCallback(){this.form?.addEventListener("formdata",i(this,p))}formResetCallback(){this.checked=this.getAttribute("checked")==="",this.indeterminate=this.getAttribute("indeterminate")===""}render(){return $`<div class="component" data-test="component">${H(this.privateVariant==="minimal",()=>$`<label class="label-and-input-and-checkbox" part="private-label-and-input-and-checkbox"><div class="input-and-checkbox"><input aria-invalid="${i(this,h,m)}" data-test="input" type="checkbox" .checked="${this.checked}" ?disabled="${this.disabled}" ?required="${this.required}" @change="${g(this,v,V)}" ?inert="${this.internallyInert}" ${w(i(this,d))}><div class="${L({checkbox:!0,disabled:this.disabled,error:i(this,h,m)})}"><div class="checked-icon">${I}</div>${R}</div></div>${this.label}</label>`,()=>$`<glide-core-label orientation="${this.orientation}" ?disabled="${this.disabled}" ?error="${i(this,h,m)}" ?hide="${this.hideLabel}" ?required="${this.required}"><slot name="tooltip" slot="tooltip"></slot><label for="input">${this.label}</label><div class="input-and-checkbox" slot="control"><input aria-describedby="summary description" aria-invalid="${i(this,h,m)}" data-test="input" id="input" type="checkbox" .checked="${this.checked}" ?disabled="${this.disabled}" ?required="${this.required}" @change="${g(this,v,V)}" ${w(i(this,d))}><div class="${L({checkbox:!0,disabled:this.disabled,error:i(this,h,m)})}"><div class="checked-icon">${I}</div>${R}</div></div><div id="summary" slot="summary">${this.summary}</div><slot id="description" name="description" slot="description"></slot></glide-core-label>`)}</div>`}reportValidity(){return i(this,l).reportValidity()}setValidity(t,c,o){return i(this,l).setValidity(t,c,o)}get willValidate(){return i(this,l).willValidate}updated(){i(this,d).value&&(i(this,d).value.indeterminate=this.indeterminate)}};d=new WeakMap,l=new WeakMap,p=new WeakMap,h=new WeakSet,m=function(){return this.privateVariant==="minimal"?!this.validity.valid:this.required&&!this.disabled&&!this.validity.valid&&this.isReportValidityOrSubmit},v=new WeakSet,V=function(t){t.target instanceof HTMLInputElement&&(this.checked=t.target.checked),this.indeterminate=!1,this.dispatchEvent(new Event(t.type,t))},e.formAssociated=!0,e.shadowRootOptions={...E.shadowRootOptions,mode:"closed"},e.styles=T,r([n({type:Boolean})],e.prototype,"checked",2),r([n({attribute:"internally-inert",type:Boolean})],e.prototype,"internallyInert",2),r([n({reflect:!0,type:Boolean})],e.prototype,"disabled",2),r([n({attribute:"hide-label",type:Boolean})],e.prototype,"hideLabel",2),r([n({type:Boolean})],e.prototype,"indeterminate",2),r([n({reflect:!0})],e.prototype,"label",2),r([n({reflect:!0})],e.prototype,"orientation",2),r([n({reflect:!0})],e.prototype,"name",2),r([n({attribute:"private-variant"})],e.prototype,"privateVariant",2),r([n({reflect:!0,type:Boolean})],e.prototype,"required",2),r([n({reflect:!0})],e.prototype,"summary",2),r([n({reflect:!0})],e.prototype,"value",2),r([q()],e.prototype,"isCheckingValidity",2),r([q()],e.prototype,"isReportValidityOrSubmit",2),e=r([S("glide-core-checkbox")],e);export{e as default};
1
+ var __decorate=this&&this.__decorate||function(e,t,i,o){var a,r=arguments.length,s=r<3?t:null===o?o=Object.getOwnPropertyDescriptor(t,i):o;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,i,o);else for(var n=e.length-1;n>=0;n--)(a=e[n])&&(s=(r<3?a(s):r>3?a(t,i,s):a(t,i))||s);return r>3&&s&&Object.defineProperty(t,i,s),s};import"./label.js";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{svg}from"lit/static-html.js";import{when}from"lit/directives/when.js";import checkedIcon from"./icons/checked.js";import styles from"./checkbox.styles.js";const indeterminateIcon=svg`<svg class="indeterminate-icon" fill="none" height="14" viewBox="0 0 24 24" width="14"><path d="M8 10C8 8.89543 8.89543 8 10 8H14.7929C15.2383 8 15.4614 8.53857 15.1464 8.85355L8.85355 15.1464C8.53857 15.4614 8 15.2383 8 14.7929V10Z" fill="currentColor"/></svg>`;let GlideCoreCheckbox=class GlideCoreCheckbox extends LitElement{static{this.formAssociated=!0}static{this.shadowRootOptions={...LitElement.shadowRootOptions,mode:"closed"}}static{this.styles=styles}get form(){return this.#e.form}checkValidity(){return this.isCheckingValidity=!0,this.#e.checkValidity()}click(){this.#t.value?.click()}disconnectedCallback(){super.disconnectedCallback(),this.form?.removeEventListener("formdata",this.#i)}get validity(){return"minimal"===this.privateVariant||(this.required&&!this.checked?this.#e.setValidity({valueMissing:!0}," ",this.#t.value):this.#e.setValidity({})),this.#e.validity}focus(e){this.#t.value?.focus(e)}formAssociatedCallback(){this.form?.addEventListener("formdata",this.#i)}formResetCallback(){this.checked=""===this.getAttribute("checked"),this.indeterminate=""===this.getAttribute("indeterminate")}render(){return html`<div class="component" data-test="component">${when("minimal"===this.privateVariant,(()=>html`<label class="label-and-input-and-checkbox" part="private-label-and-input-and-checkbox"><div class="input-and-checkbox"><input aria-invalid="${this.#o}" data-test="input" type="checkbox" .checked="${this.checked}" .inert="${this.internallyInert}" ?disabled="${this.disabled}" ?required="${this.required}" @change="${this.#a}" ${ref(this.#t)}><div class="${classMap({checkbox:!0,disabled:this.disabled,error:this.#o})}"><div class="checked-icon">${checkedIcon}</div>${indeterminateIcon}</div></div>${this.label}</label>`),(()=>html`<glide-core-label orientation="${this.orientation}" ?disabled="${this.disabled}" ?error="${this.#o}" ?hide="${this.hideLabel}" ?required="${this.required}"><slot name="tooltip" slot="tooltip"></slot><label for="input">${this.label}</label><div class="input-and-checkbox" slot="control"><input aria-describedby="summary description" aria-invalid="${this.#o}" data-test="input" id="input" type="checkbox" .checked="${this.checked}" ?disabled="${this.disabled}" ?required="${this.required}" @change="${this.#a}" ${ref(this.#t)}><div class="${classMap({checkbox:!0,disabled:this.disabled,error:this.#o})}"><div class="checked-icon">${checkedIcon}</div>${indeterminateIcon}</div></div><div id="summary" slot="summary">${this.summary}</div><slot id="description" name="description" slot="description"></slot></glide-core-label>`))}</div>`}reportValidity(){return this.#e.reportValidity()}setValidity(e,t,i){return this.#e.setValidity(e,t,i)}get willValidate(){return this.#e.willValidate}updated(){this.#t.value&&(this.#t.value.indeterminate=this.indeterminate)}constructor(){super(),this.checked=!1,this.internallyInert=!1,this.disabled=!1,this.hideLabel=!1,this.indeterminate=!1,this.orientation="horizontal",this.required=!1,this.value="",this.isCheckingValidity=!1,this.isReportValidityOrSubmit=!1,this.#t=createRef(),this.#i=({formData:e})=>{this.checked&&this.name&&this.value&&!this.disabled&&e.append(this.name,this.value)},this.#e=this.attachInternals(),this.addEventListener("invalid",(e=>{e?.preventDefault(),this.isCheckingValidity||(this.isReportValidityOrSubmit=!0,this.focus())}))}#t;#e;#i;get#o(){return"minimal"===this.privateVariant?!this.validity.valid:this.required&&!this.disabled&&!this.validity.valid&&this.isReportValidityOrSubmit}#a(e){e.target instanceof HTMLInputElement&&(this.checked=e.target.checked),this.indeterminate=!1,this.dispatchEvent(new Event(e.type,e))}};__decorate([property({type:Boolean})],GlideCoreCheckbox.prototype,"checked",void 0),__decorate([property({attribute:"internally-inert",type:Boolean})],GlideCoreCheckbox.prototype,"internallyInert",void 0),__decorate([property({reflect:!0,type:Boolean})],GlideCoreCheckbox.prototype,"disabled",void 0),__decorate([property({attribute:"hide-label",type:Boolean})],GlideCoreCheckbox.prototype,"hideLabel",void 0),__decorate([property({type:Boolean})],GlideCoreCheckbox.prototype,"indeterminate",void 0),__decorate([property({reflect:!0})],GlideCoreCheckbox.prototype,"label",void 0),__decorate([property({reflect:!0})],GlideCoreCheckbox.prototype,"orientation",void 0),__decorate([property({reflect:!0})],GlideCoreCheckbox.prototype,"name",void 0),__decorate([property({attribute:"private-variant"})],GlideCoreCheckbox.prototype,"privateVariant",void 0),__decorate([property({reflect:!0,type:Boolean})],GlideCoreCheckbox.prototype,"required",void 0),__decorate([property({reflect:!0})],GlideCoreCheckbox.prototype,"summary",void 0),__decorate([property({reflect:!0})],GlideCoreCheckbox.prototype,"value",void 0),__decorate([state()],GlideCoreCheckbox.prototype,"isCheckingValidity",void 0),__decorate([state()],GlideCoreCheckbox.prototype,"isReportValidityOrSubmit",void 0),GlideCoreCheckbox=__decorate([customElement("glide-core-checkbox")],GlideCoreCheckbox);export default GlideCoreCheckbox;
@@ -1,4 +1,4 @@
1
- "use strict";import{css as e}from"lit";import i 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
  /*
3
3
  Most states are handled on the host. But ":checked" and ":indeterminate" are
4
4
  handled on the input because browsers don't support those classes on the host.
@@ -81,7 +81,7 @@ when browsers support them.
81
81
  }
82
82
 
83
83
  &:focus-visible ~ .checkbox {
84
- ${i};
84
+ ${focusOutline};
85
85
  outline-offset: 4px;
86
86
  }
87
87
 
@@ -113,4 +113,4 @@ when browsers support them.
113
113
  .indeterminate-icon {
114
114
  display: none;
115
115
  }
116
- `];
116
+ `];
@@ -0,0 +1,89 @@
1
+ import { expect, fixture, html } from '@open-wc/testing';
2
+ import GlideCoreCheckbox from './checkbox.js';
3
+ GlideCoreCheckbox.shadowRootOptions.mode = 'open';
4
+ it('registers', async () => {
5
+ expect(window.customElements.get('glide-core-checkbox')).to.equal(GlideCoreCheckbox);
6
+ });
7
+ it('has defaults', async () => {
8
+ const component = await fixture(html `<glide-core-checkbox label="Label"></glide-core-checkbox>`);
9
+ expect(component.hasAttribute('checked')).to.be.false;
10
+ expect(component.checked).to.be.false;
11
+ expect(component.hasAttribute('disabled')).to.be.false;
12
+ expect(component.disabled).to.be.false;
13
+ expect(component.hasAttribute('hide-label')).to.be.false;
14
+ expect(component.hideLabel).to.be.false;
15
+ expect(component.hasAttribute('indeterminate')).to.be.false;
16
+ expect(component.indeterminate).to.be.false;
17
+ expect(component.getAttribute('name')).to.be.null;
18
+ expect(component.name).to.equal(undefined);
19
+ expect(component.getAttribute('orientation')).to.equal('horizontal');
20
+ expect(component.orientation).to.equal('horizontal');
21
+ expect(component.hasAttribute('required')).to.be.false;
22
+ expect(component.required).to.be.false;
23
+ expect(component.getAttribute('summary')).to.be.null;
24
+ expect(component.summary).to.equal(undefined);
25
+ expect(component.getAttribute('value')).to.equal('');
26
+ expect(component.value).to.equal('');
27
+ });
28
+ it('is accessible', async () => {
29
+ const component = await fixture(html `<glide-core-checkbox label="Label">
30
+ <div slot="tooltip">Tooltip</div>
31
+ <div slot="description">Description</div>
32
+ </glide-core-checkbox>`);
33
+ await expect(component).to.be.accessible();
34
+ });
35
+ it('can have a label', async () => {
36
+ const component = await fixture(html `<glide-core-checkbox label="Label">
37
+ <div slot="description">Description</div>
38
+ </glide-core-checkbox>`);
39
+ const label = component.shadowRoot?.querySelector('label');
40
+ expect(label?.textContent?.trim()).to.equal('Label');
41
+ });
42
+ it('can have a description', async () => {
43
+ const component = await fixture(html `<glide-core-checkbox label="Label">
44
+ <div slot="description">Description</div>
45
+ </glide-core-checkbox>`);
46
+ const assignedElements = component.shadowRoot
47
+ ?.querySelector('slot[name="description"]')
48
+ ?.assignedElements();
49
+ expect(assignedElements?.at(0)?.textContent).to.equal('Description');
50
+ });
51
+ it('can have a name', async () => {
52
+ const component = await fixture(html `<glide-core-checkbox name="name"></glide-core-checkbox> `);
53
+ expect(component.getAttribute('name')).to.equal('name');
54
+ expect(component.name).to.equal('name');
55
+ });
56
+ it('can have a summary', async () => {
57
+ const component = await fixture(html `<glide-core-checkbox summary="Summary"></glide-core-checkbox> `);
58
+ expect(component.getAttribute('summary')).to.equal('Summary');
59
+ expect(component.summary).to.equal('Summary');
60
+ });
61
+ it('can have a tooltip', async () => {
62
+ const component = await fixture(html `<glide-core-checkbox label="Label">
63
+ <div slot="tooltip">Tooltip</div>
64
+ </glide-core-checkbox>`);
65
+ const assignedElements = component.shadowRoot
66
+ ?.querySelector('slot[name="tooltip"]')
67
+ ?.assignedElements();
68
+ expect(assignedElements?.at(0)?.textContent).to.equal('Tooltip');
69
+ });
70
+ it('can be checked', async () => {
71
+ const component = await fixture(html `<glide-core-checkbox checked></glide-core-checkbox> `);
72
+ expect(component.hasAttribute('checked')).to.be.true;
73
+ expect(component.checked).to.equal(true);
74
+ });
75
+ it('can be disabled', async () => {
76
+ const component = await fixture(html `<glide-core-checkbox disabled></glide-core-checkbox> `);
77
+ expect(component.hasAttribute('disabled')).to.be.true;
78
+ expect(component.disabled).to.equal(true);
79
+ });
80
+ it('can be indeterminate', async () => {
81
+ const component = await fixture(html `<glide-core-checkbox indeterminate></glide-core-checkbox> `);
82
+ expect(component.hasAttribute('indeterminate')).to.be.true;
83
+ expect(component.indeterminate).to.equal(true);
84
+ });
85
+ it('can be required', async () => {
86
+ const component = await fixture(html `<glide-core-checkbox required></glide-core-checkbox> `);
87
+ expect(component.hasAttribute('required')).to.be.true;
88
+ expect(component.required).to.equal(true);
89
+ });
@@ -0,0 +1,87 @@
1
+ import * as sinon from 'sinon';
2
+ import { aTimeout, expect, fixture, html, oneEvent } from '@open-wc/testing';
3
+ import GlideCoreCheckbox from './checkbox.js';
4
+ GlideCoreCheckbox.shadowRootOptions.mode = 'open';
5
+ // `await aTimeout(0)` is used throughout. Using `oneEvent` instead and
6
+ // expecting it to throw would work. But it wouldn't throw until its
7
+ // timeout, which would make for a slow test. Its timeout can likely be
8
+ // configured. But waiting a turn of the event loop, after which the event
9
+ // will have been dispatched, gets the job done as well.
10
+ it('dispatches a "click" event when clicked', async () => {
11
+ const component = await fixture(html `<glide-core-checkbox label="Label"></glide-core-checkbox>`);
12
+ setTimeout(() => component.click());
13
+ const event = await oneEvent(component, 'click');
14
+ expect(event instanceof PointerEvent).to.be.true;
15
+ expect(event.bubbles).to.be.true;
16
+ });
17
+ it('dispatches a "change" event when clicked', async () => {
18
+ const component = await fixture(html `<glide-core-checkbox label="Label"></glide-core-checkbox>`);
19
+ setTimeout(() => component.click());
20
+ const event = await oneEvent(component, 'change');
21
+ expect(event instanceof Event).to.be.true;
22
+ expect(event.bubbles).to.be.true;
23
+ });
24
+ it('dispatches an "input" event when clicked', async () => {
25
+ const component = await fixture(html `<glide-core-checkbox label="Label"></glide-core-checkbox>`);
26
+ setTimeout(() => component.click());
27
+ const event = await oneEvent(component, 'input');
28
+ expect(event instanceof Event).to.be.true;
29
+ expect(event.bubbles).to.be.true;
30
+ });
31
+ it('dispatches an "invalid" event on submit when required and unchecked', async () => {
32
+ const form = document.createElement('form');
33
+ const component = await fixture(html `<glide-core-checkbox required></glide-core-checkbox>`, { parentNode: form });
34
+ setTimeout(() => form.requestSubmit());
35
+ const event = await oneEvent(component, 'invalid');
36
+ expect(event instanceof Event).to.be.true;
37
+ });
38
+ it('dispatches an "invalid" event after `checkValidity` is called when required and unchecked', async () => {
39
+ const form = document.createElement('form');
40
+ const component = await fixture(html `<glide-core-checkbox required></glide-core-checkbox>`, { parentNode: form });
41
+ setTimeout(() => component.checkValidity());
42
+ const event = await oneEvent(component, 'invalid');
43
+ expect(event instanceof Event).to.be.true;
44
+ });
45
+ it('dispatches an "invalid" event after `reportValidity` is called when required and unchecked', async () => {
46
+ const form = document.createElement('form');
47
+ const component = await fixture(html `<glide-core-checkbox required></glide-core-checkbox>`, { parentNode: form });
48
+ setTimeout(() => component.reportValidity());
49
+ const event = await oneEvent(component, 'invalid');
50
+ expect(event instanceof Event).to.be.true;
51
+ });
52
+ it('does not dispatch an "invalid" event after `checkValidity` is called when not required', async () => {
53
+ const form = document.createElement('form');
54
+ const component = await fixture(html `<glide-core-checkbox label="Label"></glide-core-checkbox>`, { parentNode: form });
55
+ const spy = sinon.spy();
56
+ component.addEventListener('invalid', spy);
57
+ component.checkValidity();
58
+ await aTimeout(0);
59
+ expect(spy.notCalled).to.be.true;
60
+ });
61
+ it('does not dispatch an "invalid" event after `checkValidity` is called when required and unchecked but disabled', async () => {
62
+ const form = document.createElement('form');
63
+ const component = await fixture(html `<glide-core-checkbox disabled required></glide-core-checkbox>`, { parentNode: form });
64
+ const spy = sinon.spy();
65
+ component.addEventListener('invalid', spy);
66
+ component.checkValidity();
67
+ await aTimeout(0);
68
+ expect(spy.notCalled).to.be.true;
69
+ });
70
+ it('does not dispatch an "invalid" event when `reportValidity` is called when not required,', async () => {
71
+ const form = document.createElement('form');
72
+ const component = await fixture(html `<glide-core-checkbox label="Label"></glide-core-checkbox>`, { parentNode: form });
73
+ const spy = sinon.spy();
74
+ component.addEventListener('invalid', spy);
75
+ component.reportValidity();
76
+ await aTimeout(0);
77
+ expect(spy.notCalled).to.be.true;
78
+ });
79
+ it('does not dispatch an "invalid" event when `reportValidity` is called when required and unchecked but disabled', async () => {
80
+ const form = document.createElement('form');
81
+ const component = await fixture(html `<glide-core-checkbox disabled required></glide-core-checkbox>`, { parentNode: form });
82
+ const spy = sinon.spy();
83
+ component.addEventListener('invalid', spy);
84
+ component.reportValidity();
85
+ await aTimeout(0);
86
+ expect(spy.notCalled).to.be.true;
87
+ });
@@ -0,0 +1,38 @@
1
+ import { expect, fixture, html } from '@open-wc/testing';
2
+ import GlideCoreCheckbox from './checkbox.js';
3
+ GlideCoreCheckbox.shadowRootOptions.mode = 'open';
4
+ it('focuses the input when `focus` is called', async () => {
5
+ const component = await fixture(html `<glide-core-checkbox label="Label"></glide-core-checkbox>`);
6
+ component.focus();
7
+ const input = component.shadowRoot?.querySelector('[data-test="input"]');
8
+ expect(component.shadowRoot?.activeElement).to.equal(input);
9
+ });
10
+ it('focuses the input after submit when required and unchecked', async () => {
11
+ const form = document.createElement('form');
12
+ const component = await fixture(html `<glide-core-checkbox label="Label" required></glide-core-checkbox>`, {
13
+ parentNode: form,
14
+ });
15
+ form.requestSubmit();
16
+ const input = component.shadowRoot?.querySelector('[data-test="input"]');
17
+ expect(component.shadowRoot?.activeElement).to.be.equal(input);
18
+ });
19
+ it('focuses the input after `reportValidity` is called when required and unchecked', async () => {
20
+ const form = document.createElement('form');
21
+ const component = await fixture(html `<glide-core-checkbox label="Label" required></glide-core-checkbox>`, { parentNode: form });
22
+ component.reportValidity();
23
+ const input = component.shadowRoot?.querySelector('[data-test="input"]');
24
+ expect(component.shadowRoot?.activeElement).to.equal(input);
25
+ });
26
+ it('focuses the input after `requestSubmit` is called when required and unchecked', async () => {
27
+ const form = document.createElement('form');
28
+ const component = await fixture(html `<glide-core-checkbox label="Label" required></glide-core-checkbox>`, { parentNode: form });
29
+ form.requestSubmit();
30
+ const input = component.shadowRoot?.querySelector('[data-test="input"]');
31
+ expect(component.shadowRoot?.activeElement).to.equal(input);
32
+ });
33
+ it('does not focus the input after `checkValidity` is called', async () => {
34
+ const form = document.createElement('form');
35
+ const component = await fixture(html `<glide-core-checkbox label="Label" required></glide-core-checkbox>`, { parentNode: form });
36
+ component.checkValidity();
37
+ expect(component.shadowRoot?.activeElement).to.equal(null);
38
+ });
@@ -0,0 +1,115 @@
1
+ import { expect, fixture, html } from '@open-wc/testing';
2
+ import GlideCoreCheckbox from './checkbox.js';
3
+ GlideCoreCheckbox.shadowRootOptions.mode = 'open';
4
+ it('exposes standard form control properties and methods', async () => {
5
+ const form = document.createElement('form');
6
+ const component = await fixture(html `<glide-core-checkbox label="Label"></glide-core-checkbox>`, { parentNode: form });
7
+ expect(component.form).to.equal(form);
8
+ expect(component.validity instanceof ValidityState).to.be.true;
9
+ expect(component.willValidate).to.be.true;
10
+ expect(component.checkValidity).to.be.a('function');
11
+ expect(component.reportValidity).to.be.a('function');
12
+ });
13
+ it('can be reset', async () => {
14
+ const form = document.createElement('form');
15
+ const component = await fixture(html `<glide-core-checkbox
16
+ label="Label"
17
+ checked
18
+ indeterminate
19
+ ></glide-core-checkbox>`, {
20
+ parentNode: form,
21
+ });
22
+ component.checked = false;
23
+ component.indeterminate = false;
24
+ form.reset();
25
+ expect(component.checked).to.be.true;
26
+ expect(component.indeterminate).to.be.true;
27
+ });
28
+ it('has `formData` value when checked', async () => {
29
+ const form = document.createElement('form');
30
+ await fixture(html `<glide-core-checkbox
31
+ label="Label"
32
+ name="name"
33
+ value="value"
34
+ checked
35
+ ></glide-core-checkbox>`, {
36
+ parentNode: form,
37
+ });
38
+ const formData = new FormData(form);
39
+ expect(formData.get('name')).to.be.equal('value');
40
+ });
41
+ it('has `formData` value when checked and indeterminate', async () => {
42
+ const form = document.createElement('form');
43
+ await fixture(html `<glide-core-checkbox
44
+ name="name"
45
+ value="value"
46
+ checked
47
+ indeterminate
48
+ ></glide-core-checkbox>`, {
49
+ parentNode: form,
50
+ });
51
+ const formData = new FormData(form);
52
+ expect(formData.get('name')).to.be.equal('value');
53
+ });
54
+ it('has no `formData` value when unchecked', async () => {
55
+ const form = document.createElement('form');
56
+ await fixture(html `<glide-core-checkbox
57
+ label="Label"
58
+ name="name"
59
+ value="value"
60
+ ></glide-core-checkbox>`, {
61
+ parentNode: form,
62
+ });
63
+ const formData = new FormData(form);
64
+ expect(formData.get('name')).to.be.null;
65
+ });
66
+ it('has no `formData` value when unchecked and indeterminate', async () => {
67
+ const form = document.createElement('form');
68
+ await fixture(html `<glide-core-checkbox
69
+ label="Label"
70
+ name="name"
71
+ value="value"
72
+ indeterminate
73
+ ></glide-core-checkbox>`, {
74
+ parentNode: form,
75
+ });
76
+ const formData = new FormData(form);
77
+ expect(formData.get('name')).to.be.null;
78
+ });
79
+ it('has no `formData` value when checked but disabled', async () => {
80
+ const form = document.createElement('form');
81
+ await fixture(html `<glide-core-checkbox
82
+ name="name"
83
+ value="value"
84
+ checked
85
+ disabled
86
+ ></glide-core-checkbox>`, {
87
+ parentNode: form,
88
+ });
89
+ const formData = new FormData(form);
90
+ expect(formData.get('name')).to.be.null;
91
+ });
92
+ it('has no `formData` value when checked but without a `name`', async () => {
93
+ const form = document.createElement('form');
94
+ await fixture(html `<glide-core-checkbox
95
+ label="Label"
96
+ value="value"
97
+ checked
98
+ ></glide-core-checkbox>`, {
99
+ parentNode: form,
100
+ });
101
+ const formData = new FormData(form);
102
+ expect(formData.get('name')).to.be.null;
103
+ });
104
+ it('has no `formData` value when checked but without a `value`', async () => {
105
+ const form = document.createElement('form');
106
+ await fixture(html `<glide-core-checkbox
107
+ label="Label"
108
+ name="name"
109
+ checked
110
+ ></glide-core-checkbox>`, {
111
+ parentNode: form,
112
+ });
113
+ const formData = new FormData(form);
114
+ expect(formData.get('name')).to.be.null;
115
+ });