@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,149 @@
1
+ import './dropdown.option.js';
2
+ import { elementUpdated, expect, fixture, html } from '@open-wc/testing';
3
+ import GlideCoreDropdown from './dropdown.js';
4
+ import GlideCoreDropdownOption from './dropdown.option.js';
5
+ GlideCoreDropdown.shadowRootOptions.mode = 'open';
6
+ GlideCoreDropdownOption.shadowRootOptions.mode = 'open';
7
+ it('can be reset', async () => {
8
+ const form = document.createElement('form');
9
+ const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" multiple>
10
+ <glide-core-dropdown-option
11
+ label="One"
12
+ value="one"
13
+ ></glide-core-dropdown-option>
14
+
15
+ <glide-core-dropdown-option
16
+ label="Two"
17
+ value="two"
18
+ ></glide-core-dropdown-option>
19
+ </glide-core-dropdown>`, {
20
+ parentNode: form,
21
+ });
22
+ const options = component.querySelectorAll('glide-core-dropdown-option');
23
+ options[0]?.shadowRoot
24
+ ?.querySelector('[data-test="component"]')
25
+ ?.dispatchEvent(new Event('click'));
26
+ options[1]?.shadowRoot
27
+ ?.querySelector('[data-test="component"]')
28
+ ?.dispatchEvent(new Event('click'));
29
+ form.reset();
30
+ await elementUpdated(component);
31
+ expect(component.value).to.deep.equal([]);
32
+ const label = component.shadowRoot?.querySelector('[data-test="internal-label"]');
33
+ expect(label?.textContent?.trim()).to.equal('Placeholder');
34
+ });
35
+ it('can be reset to the initially selected options', async () => {
36
+ const form = document.createElement('form');
37
+ const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" multiple>
38
+ <glide-core-dropdown-option
39
+ label="One"
40
+ value="one"
41
+ ></glide-core-dropdown-option>
42
+
43
+ <glide-core-dropdown-option
44
+ label="Two"
45
+ value="two"
46
+ selected
47
+ ></glide-core-dropdown-option>
48
+
49
+ <glide-core-dropdown-option
50
+ label="Three"
51
+ value="three"
52
+ selected
53
+ ></glide-core-dropdown-option>
54
+ </glide-core-dropdown>`, {
55
+ parentNode: form,
56
+ });
57
+ component
58
+ .querySelector('glide-core-dropdown-option')
59
+ ?.shadowRoot?.querySelector('[data-test="component"]')
60
+ ?.dispatchEvent(new Event('click'));
61
+ form.reset();
62
+ const tags = component.shadowRoot?.querySelectorAll('[data-test="tag"]');
63
+ expect(tags?.length).to.equal(2);
64
+ expect(tags?.[0].textContent?.trim()).to.equal('Two');
65
+ expect(tags?.[1].textContent?.trim()).to.equal('Three');
66
+ expect(component.value).to.deep.equal(['two', 'three']);
67
+ });
68
+ it('has `formData` value when options are selected', async () => {
69
+ const form = document.createElement('form');
70
+ await fixture(html `<glide-core-dropdown
71
+ label="Label"
72
+ placeholder="Placeholder"
73
+ name="name"
74
+ multiple
75
+ >
76
+ <glide-core-dropdown-option
77
+ label="One"
78
+ value="one"
79
+ selected
80
+ ></glide-core-dropdown-option>
81
+
82
+ <glide-core-dropdown-option
83
+ label="Two"
84
+ value="two"
85
+ selected
86
+ ></glide-core-dropdown-option>
87
+ </glide-core-dropdown>
88
+ >`, {
89
+ parentNode: form,
90
+ });
91
+ const formData = new FormData(form);
92
+ expect(formData.get('name')).to.be.equal('["one","two"]');
93
+ });
94
+ it('has no `formData` value when no option is selected', async () => {
95
+ const form = document.createElement('form');
96
+ await fixture(html `<glide-core-dropdown
97
+ label="Label"
98
+ placeholder="Placeholder"
99
+ name="name"
100
+ multiple
101
+ >
102
+ <glide-core-dropdown-option
103
+ label=""
104
+ value="value"
105
+ ></glide-core-dropdown-option>
106
+ </glide-core-dropdown>`, {
107
+ parentNode: form,
108
+ });
109
+ const formData = new FormData(form);
110
+ expect(formData.get('name')).to.be.null;
111
+ });
112
+ it('has no `formData` value when disabled and an option is selected', async () => {
113
+ const form = document.createElement('form');
114
+ await fixture(html `<glide-core-dropdown
115
+ label="Label"
116
+ placeholder="Placeholder"
117
+ name="name"
118
+ disabled
119
+ multiple
120
+ >
121
+ <glide-core-dropdown-option
122
+ label="Label"
123
+ value="value"
124
+ selected
125
+ ></glide-core-dropdown-option>
126
+ </glide-core-dropdown>`, {
127
+ parentNode: form,
128
+ });
129
+ const formData = new FormData(form);
130
+ expect(formData.get('name')).to.be.null;
131
+ });
132
+ it('has no `formData` value when an option is selected that has no `value`', async () => {
133
+ const form = document.createElement('form');
134
+ await fixture(html `<glide-core-dropdown
135
+ label="Label"
136
+ placeholder="Placeholder"
137
+ name="name"
138
+ multiple
139
+ >
140
+ <glide-core-dropdown-option
141
+ label="Label"
142
+ selected
143
+ ></glide-core-dropdown-option>
144
+ </glide-core-dropdown>`, {
145
+ parentNode: form,
146
+ });
147
+ const formData = new FormData(form);
148
+ expect(formData.get('name')).to.be.null;
149
+ });
@@ -0,0 +1,128 @@
1
+ import './dropdown.option.js';
2
+ import { elementUpdated, expect, fixture, html } from '@open-wc/testing';
3
+ import GlideCoreDropdown from './dropdown.js';
4
+ import GlideCoreDropdownOption from './dropdown.option.js';
5
+ GlideCoreDropdown.shadowRootOptions.mode = 'open';
6
+ GlideCoreDropdownOption.shadowRootOptions.mode = 'open';
7
+ it('can be reset', async () => {
8
+ const form = document.createElement('form');
9
+ const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder">
10
+ <glide-core-dropdown-option
11
+ label="One"
12
+ value="one"
13
+ ></glide-core-dropdown-option>
14
+
15
+ <glide-core-dropdown-option
16
+ label="Two"
17
+ value="two"
18
+ ></glide-core-dropdown-option>
19
+ </glide-core-dropdown>`, {
20
+ parentNode: form,
21
+ });
22
+ component
23
+ .querySelector('glide-core-dropdown-option')
24
+ ?.shadowRoot?.querySelector('[data-test="component"]')
25
+ ?.dispatchEvent(new Event('click'));
26
+ form.reset();
27
+ await elementUpdated(component);
28
+ const label = component.shadowRoot?.querySelector('[data-test="internal-label"]');
29
+ expect(label?.textContent?.trim()).to.equal('Placeholder');
30
+ expect(component.value).to.deep.equal([]);
31
+ });
32
+ it('can be reset to the initially selected option', async () => {
33
+ const form = document.createElement('form');
34
+ const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder">
35
+ <glide-core-dropdown-option
36
+ label="One"
37
+ value="one"
38
+ ></glide-core-dropdown-option>
39
+
40
+ <glide-core-dropdown-option
41
+ label="Two"
42
+ value="two"
43
+ selected
44
+ ></glide-core-dropdown-option>
45
+ </glide-core-dropdown>`, {
46
+ parentNode: form,
47
+ });
48
+ component
49
+ .querySelector('glide-core-dropdown-option')
50
+ ?.shadowRoot?.querySelector('[data-test="component"]')
51
+ ?.dispatchEvent(new Event('click'));
52
+ form.reset();
53
+ const label = component.shadowRoot?.querySelector('[data-test="internal-label"]');
54
+ expect(label?.textContent?.trim()).to.equal('Two');
55
+ expect(component.value).to.deep.equal(['two']);
56
+ });
57
+ it('has `formData` value when an option is selected', async () => {
58
+ const form = document.createElement('form');
59
+ await fixture(html `<glide-core-dropdown
60
+ label="Label"
61
+ placeholder="Placeholder"
62
+ name="name"
63
+ >
64
+ <glide-core-dropdown-option
65
+ label="Label"
66
+ value="value"
67
+ selected
68
+ ></glide-core-dropdown-option>
69
+ </glide-core-dropdown>
70
+ >`, {
71
+ parentNode: form,
72
+ });
73
+ const formData = new FormData(form);
74
+ expect(formData.get('name')).to.be.equal('["value"]');
75
+ });
76
+ it('has no `formData` value when no option is selected', async () => {
77
+ const form = document.createElement('form');
78
+ await fixture(html `<glide-core-dropdown
79
+ label="Label"
80
+ placeholder="Placeholder"
81
+ name="name"
82
+ >
83
+ <glide-core-dropdown-option
84
+ label=""
85
+ value="value"
86
+ ></glide-core-dropdown-option>
87
+ </glide-core-dropdown>`, {
88
+ parentNode: form,
89
+ });
90
+ const formData = new FormData(form);
91
+ expect(formData.get('name')).to.be.null;
92
+ });
93
+ it('has no `formData` value when disabled and an option is selected', async () => {
94
+ const form = document.createElement('form');
95
+ await fixture(html `<glide-core-dropdown
96
+ label="Label"
97
+ placeholder="Placeholder"
98
+ name="name"
99
+ disabled
100
+ >
101
+ <glide-core-dropdown-option
102
+ label="Label"
103
+ value="value"
104
+ selected
105
+ ></glide-core-dropdown-option>
106
+ </glide-core-dropdown>`, {
107
+ parentNode: form,
108
+ });
109
+ const formData = new FormData(form);
110
+ expect(formData.get('name')).to.be.null;
111
+ });
112
+ it('has no `formData` value when an option is selected that has no `value`', async () => {
113
+ const form = document.createElement('form');
114
+ await fixture(html `<glide-core-dropdown
115
+ label="Label"
116
+ placeholder="Placeholder"
117
+ name="name"
118
+ >
119
+ <glide-core-dropdown-option
120
+ label="Label"
121
+ selected
122
+ ></glide-core-dropdown-option>
123
+ </glide-core-dropdown>`, {
124
+ parentNode: form,
125
+ });
126
+ const formData = new FormData(form);
127
+ expect(formData.get('name')).to.be.null;
128
+ });