@grantcodes/ui 2.15.6 → 2.16.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 (300) hide show
  1. package/CHANGELOG.md +67 -0
  2. package/custom-elements.json +476 -346
  3. package/package.json +23 -23
  4. package/src/components/accordion/accordion-item.component.js +17 -19
  5. package/src/components/accordion/accordion-item.css +40 -44
  6. package/src/components/accordion/accordion.component.js +7 -7
  7. package/src/components/accordion/accordion.css +5 -5
  8. package/src/components/accordion/accordion.js +6 -6
  9. package/src/components/accordion/accordion.react.js +6 -6
  10. package/src/components/accordion/accordion.stories.js +10 -10
  11. package/src/components/accordion/accordion.test.js +100 -100
  12. package/src/components/accordion/index.js +6 -6
  13. package/src/components/app-bar/app-bar.component.js +86 -92
  14. package/src/components/app-bar/app-bar.css +187 -203
  15. package/src/components/app-bar/app-bar.js +3 -3
  16. package/src/components/app-bar/app-bar.react.js +9 -9
  17. package/src/components/app-bar/app-bar.stories.js +20 -20
  18. package/src/components/app-bar/app-bar.test.js +190 -237
  19. package/src/components/app-bar/index.js +1 -1
  20. package/src/components/app-bar/nav-link.component.js +7 -9
  21. package/src/components/app-bar/nav-link.css +23 -28
  22. package/src/components/app-bar/nav-link.js +3 -3
  23. package/src/components/app-bar/nav-link.react.js +6 -6
  24. package/src/components/avatar/avatar.component.js +79 -68
  25. package/src/components/avatar/avatar.css +18 -18
  26. package/src/components/avatar/avatar.js +3 -3
  27. package/src/components/avatar/avatar.react.js +6 -6
  28. package/src/components/avatar/avatar.stories.js +24 -23
  29. package/src/components/avatar/avatar.test.js +128 -84
  30. package/src/components/avatar/index.js +1 -1
  31. package/src/components/badge/badge.component.js +23 -23
  32. package/src/components/badge/badge.css +39 -52
  33. package/src/components/badge/badge.js +3 -3
  34. package/src/components/badge/badge.react.js +6 -6
  35. package/src/components/badge/badge.stories.js +23 -23
  36. package/src/components/badge/badge.test.js +53 -68
  37. package/src/components/badge/index.js +1 -1
  38. package/src/components/breadcrumb/breadcrumb.component.js +95 -96
  39. package/src/components/breadcrumb/breadcrumb.css +42 -44
  40. package/src/components/breadcrumb/breadcrumb.js +6 -9
  41. package/src/components/breadcrumb/breadcrumb.react.js +9 -12
  42. package/src/components/breadcrumb/breadcrumb.stories.js +5 -5
  43. package/src/components/breadcrumb/breadcrumb.test.js +139 -151
  44. package/src/components/breadcrumb/index.js +1 -1
  45. package/src/components/button/button.component.js +101 -103
  46. package/src/components/button/button.css +90 -94
  47. package/src/components/button/button.js +3 -3
  48. package/src/components/button/button.react.js +6 -6
  49. package/src/components/button/button.stories.js +25 -25
  50. package/src/components/button/button.test.js +324 -344
  51. package/src/components/button/index.js +1 -1
  52. package/src/components/button-group/button-group.component.js +18 -18
  53. package/src/components/button-group/button-group.css +16 -16
  54. package/src/components/button-group/button-group.js +3 -3
  55. package/src/components/button-group/button-group.react.js +6 -6
  56. package/src/components/button-group/button-group.stories.js +23 -23
  57. package/src/components/button-group/button-group.test.js +54 -54
  58. package/src/components/button-group/index.js +1 -1
  59. package/src/components/card/card.component.js +31 -33
  60. package/src/components/card/card.css +85 -85
  61. package/src/components/card/card.js +4 -4
  62. package/src/components/card/card.react.js +6 -6
  63. package/src/components/card/card.stories.js +27 -26
  64. package/src/components/card/card.test.js +56 -56
  65. package/src/components/card/index.js +1 -1
  66. package/src/components/code-preview/code-preview.component.js +47 -48
  67. package/src/components/code-preview/code-preview.css +11 -11
  68. package/src/components/code-preview/code-preview.js +3 -3
  69. package/src/components/code-preview/code-preview.react.js +6 -6
  70. package/src/components/code-preview/code-preview.stories.js +29 -29
  71. package/src/components/code-preview/code-preview.test.js +112 -135
  72. package/src/components/code-preview/index.js +1 -1
  73. package/src/components/container/container.component.js +27 -27
  74. package/src/components/container/container.css +22 -22
  75. package/src/components/container/container.js +3 -3
  76. package/src/components/container/container.react.js +6 -6
  77. package/src/components/container/container.stories.js +44 -44
  78. package/src/components/container/container.test.js +54 -66
  79. package/src/components/container/index.js +1 -1
  80. package/src/components/countdown/countdown.component.js +160 -162
  81. package/src/components/countdown/countdown.css +50 -34
  82. package/src/components/countdown/countdown.js +3 -3
  83. package/src/components/countdown/countdown.react.js +6 -6
  84. package/src/components/countdown/countdown.stories.js +34 -34
  85. package/src/components/countdown/index.js +1 -1
  86. package/src/components/cta/cta.component.js +77 -81
  87. package/src/components/cta/cta.css +24 -24
  88. package/src/components/cta/cta.js +3 -3
  89. package/src/components/cta/cta.react.js +6 -6
  90. package/src/components/cta/cta.stories.js +32 -32
  91. package/src/components/cta/index.js +1 -1
  92. package/src/components/dialog/dialog.component.js +95 -58
  93. package/src/components/dialog/dialog.css +45 -50
  94. package/src/components/dialog/dialog.js +3 -3
  95. package/src/components/dialog/dialog.react.js +6 -6
  96. package/src/components/dialog/dialog.stories.js +38 -29
  97. package/src/components/dialog/dialog.test.js +188 -102
  98. package/src/components/dialog/index.js +1 -1
  99. package/src/components/dropdown/dropdown.component.js +220 -201
  100. package/src/components/dropdown/dropdown.css +60 -84
  101. package/src/components/dropdown/dropdown.js +6 -9
  102. package/src/components/dropdown/dropdown.react.js +15 -15
  103. package/src/components/dropdown/dropdown.stories.js +10 -10
  104. package/src/components/dropdown/dropdown.test.js +211 -157
  105. package/src/components/dropdown/index.js +1 -1
  106. package/src/components/dropzone/dropzone.component.js +126 -129
  107. package/src/components/dropzone/dropzone.css +35 -37
  108. package/src/components/dropzone/dropzone.js +3 -3
  109. package/src/components/dropzone/dropzone.react.js +6 -6
  110. package/src/components/dropzone/dropzone.stories.js +28 -28
  111. package/src/components/dropzone/dropzone.test.js +91 -99
  112. package/src/components/dropzone/index.js +1 -1
  113. package/src/components/feature-list/feature-list.component.js +78 -86
  114. package/src/components/feature-list/feature-list.css +37 -37
  115. package/src/components/feature-list/feature-list.js +3 -3
  116. package/src/components/feature-list/feature-list.react.js +6 -6
  117. package/src/components/feature-list/feature-list.stories.js +86 -90
  118. package/src/components/feature-list/index.js +1 -1
  119. package/src/components/footer/footer-column.component.js +7 -7
  120. package/src/components/footer/footer-column.css +22 -22
  121. package/src/components/footer/footer.component.js +19 -19
  122. package/src/components/footer/footer.css +38 -38
  123. package/src/components/footer/footer.js +8 -8
  124. package/src/components/footer/footer.react.js +9 -9
  125. package/src/components/footer/footer.stories.js +9 -9
  126. package/src/components/footer/footer.test.js +101 -111
  127. package/src/components/footer/index.js +2 -2
  128. package/src/components/form-field/form-field.component.js +167 -125
  129. package/src/components/form-field/form-field.css +24 -24
  130. package/src/components/form-field/form-field.js +3 -3
  131. package/src/components/form-field/form-field.react.js +6 -6
  132. package/src/components/form-field/form-field.stories.js +53 -44
  133. package/src/components/form-field/form-field.test.js +280 -134
  134. package/src/components/form-field/index.js +1 -1
  135. package/src/components/gallery/gallery-image.component.js +30 -30
  136. package/src/components/gallery/gallery-image.js +3 -3
  137. package/src/components/gallery/gallery-image.react.js +6 -6
  138. package/src/components/gallery/gallery.component.js +24 -17
  139. package/src/components/gallery/gallery.css +79 -72
  140. package/src/components/gallery/gallery.js +3 -3
  141. package/src/components/gallery/gallery.react.js +6 -6
  142. package/src/components/gallery/gallery.stories.js +69 -68
  143. package/src/components/gallery/gallery.test.js +95 -88
  144. package/src/components/gallery/index.js +2 -2
  145. package/src/components/hero/hero.component.js +53 -57
  146. package/src/components/hero/hero.css +27 -27
  147. package/src/components/hero/hero.js +3 -3
  148. package/src/components/hero/hero.react.js +6 -6
  149. package/src/components/hero/hero.stories.js +39 -39
  150. package/src/components/hero/index.js +1 -1
  151. package/src/components/icon/icon.component.js +10 -10
  152. package/src/components/icon/icon.css +13 -13
  153. package/src/components/icon/icon.js +4 -4
  154. package/src/components/icon/icon.react.js +6 -6
  155. package/src/components/icon/icon.stories.js +8 -9
  156. package/src/components/icon/icon.test.js +54 -55
  157. package/src/components/icon/index.js +1 -1
  158. package/src/components/loading/index.js +1 -1
  159. package/src/components/loading/loading.component.js +41 -14
  160. package/src/components/loading/loading.css +47 -30
  161. package/src/components/loading/loading.js +4 -4
  162. package/src/components/loading/loading.react.js +6 -6
  163. package/src/components/loading/loading.stories.js +19 -18
  164. package/src/components/loading/loading.test.js +77 -54
  165. package/src/components/logo-cloud/index.js +1 -1
  166. package/src/components/logo-cloud/logo-cloud.component.js +39 -43
  167. package/src/components/logo-cloud/logo-cloud.css +31 -31
  168. package/src/components/logo-cloud/logo-cloud.js +3 -3
  169. package/src/components/logo-cloud/logo-cloud.react.js +6 -6
  170. package/src/components/logo-cloud/logo-cloud.stories.js +80 -80
  171. package/src/components/map/index.js +1 -1
  172. package/src/components/map/map.component.js +103 -107
  173. package/src/components/map/map.css +22 -22
  174. package/src/components/map/map.js +3 -3
  175. package/src/components/map/map.react.js +6 -6
  176. package/src/components/map/map.stories.js +38 -38
  177. package/src/components/media-text/index.js +1 -1
  178. package/src/components/media-text/media-text.component.js +76 -70
  179. package/src/components/media-text/media-text.css +32 -32
  180. package/src/components/media-text/media-text.js +3 -3
  181. package/src/components/media-text/media-text.react.js +6 -6
  182. package/src/components/media-text/media-text.stories.js +45 -45
  183. package/src/components/media-text/media-text.test.js +72 -0
  184. package/src/components/newsletter/index.js +1 -1
  185. package/src/components/newsletter/newsletter.component.js +56 -64
  186. package/src/components/newsletter/newsletter.css +48 -48
  187. package/src/components/newsletter/newsletter.js +3 -3
  188. package/src/components/newsletter/newsletter.react.js +6 -6
  189. package/src/components/newsletter/newsletter.stories.js +35 -35
  190. package/src/components/notice/index.js +1 -1
  191. package/src/components/notice/notice.component.js +66 -55
  192. package/src/components/notice/notice.css +37 -38
  193. package/src/components/notice/notice.js +3 -3
  194. package/src/components/notice/notice.react.js +6 -6
  195. package/src/components/notice/notice.stories.js +54 -53
  196. package/src/components/notice/notice.test.js +210 -156
  197. package/src/components/pagination/index.js +1 -1
  198. package/src/components/pagination/pagination.component.js +44 -44
  199. package/src/components/pagination/pagination.css +6 -6
  200. package/src/components/pagination/pagination.js +4 -4
  201. package/src/components/pagination/pagination.react.js +6 -6
  202. package/src/components/pagination/pagination.stories.js +20 -18
  203. package/src/components/pagination/pagination.test.js +95 -102
  204. package/src/components/person/index.js +1 -1
  205. package/src/components/person/person.component.js +29 -29
  206. package/src/components/person/person.css +17 -17
  207. package/src/components/person/person.js +4 -4
  208. package/src/components/person/person.react.js +6 -6
  209. package/src/components/person/person.stories.js +34 -33
  210. package/src/components/person/person.test.js +55 -68
  211. package/src/components/pricing/index.js +1 -1
  212. package/src/components/pricing/pricing.component.js +58 -70
  213. package/src/components/pricing/pricing.css +65 -65
  214. package/src/components/pricing/pricing.js +3 -3
  215. package/src/components/pricing/pricing.react.js +6 -6
  216. package/src/components/pricing/pricing.stories.js +96 -96
  217. package/src/components/sidebar/index.js +1 -1
  218. package/src/components/sidebar/sidebar.component.js +157 -130
  219. package/src/components/sidebar/sidebar.css +118 -115
  220. package/src/components/sidebar/sidebar.js +4 -4
  221. package/src/components/sidebar/sidebar.react.js +10 -10
  222. package/src/components/sidebar/sidebar.stories.js +10 -10
  223. package/src/components/sidebar/sidebar.test.js +250 -230
  224. package/src/components/stats/index.js +1 -1
  225. package/src/components/stats/stats.component.js +42 -50
  226. package/src/components/stats/stats.css +29 -29
  227. package/src/components/stats/stats.js +3 -3
  228. package/src/components/stats/stats.react.js +6 -6
  229. package/src/components/stats/stats.stories.js +40 -40
  230. package/src/components/tabs/index.js +2 -2
  231. package/src/components/tabs/internal/tabs-button.component.js +16 -27
  232. package/src/components/tabs/internal/tabs-button.js +3 -3
  233. package/src/components/tabs/internal/tabs-button.react.js +6 -6
  234. package/src/components/tabs/internal/tabs-item.component.js +30 -30
  235. package/src/components/tabs/tab.component.js +9 -11
  236. package/src/components/tabs/tab.js +3 -3
  237. package/src/components/tabs/tab.react.js +6 -6
  238. package/src/components/tabs/tabs.component.js +107 -109
  239. package/src/components/tabs/tabs.css +50 -59
  240. package/src/components/tabs/tabs.js +4 -4
  241. package/src/components/tabs/tabs.react.js +6 -6
  242. package/src/components/tabs/tabs.stories.js +23 -22
  243. package/src/components/tabs/tabs.test.js +201 -147
  244. package/src/components/testimonials/index.js +1 -1
  245. package/src/components/testimonials/testimonials.component.js +47 -51
  246. package/src/components/testimonials/testimonials.css +31 -31
  247. package/src/components/testimonials/testimonials.js +3 -3
  248. package/src/components/testimonials/testimonials.react.js +6 -6
  249. package/src/components/testimonials/testimonials.stories.js +49 -51
  250. package/src/components/toast/index.js +1 -1
  251. package/src/components/toast/toast.component.js +217 -148
  252. package/src/components/toast/toast.css +101 -99
  253. package/src/components/toast/toast.js +6 -9
  254. package/src/components/toast/toast.react.js +12 -12
  255. package/src/components/toast/toast.stories.js +75 -49
  256. package/src/components/toast/toast.test.js +260 -221
  257. package/src/components/tooltip/index.js +1 -1
  258. package/src/components/tooltip/tooltip.component.js +56 -49
  259. package/src/components/tooltip/tooltip.css +61 -50
  260. package/src/components/tooltip/tooltip.js +4 -4
  261. package/src/components/tooltip/tooltip.react.js +6 -6
  262. package/src/components/tooltip/tooltip.stories.js +24 -23
  263. package/src/components/tooltip/tooltip.test.js +143 -155
  264. package/src/constructor.test.js +31 -0
  265. package/src/css/base.css +1 -0
  266. package/src/css/colors.stories.js +120 -122
  267. package/src/css/elements/a.css +28 -28
  268. package/src/css/elements/forms/button.css +1 -1
  269. package/src/css/elements/forms/input.css +80 -80
  270. package/src/css/elements/forms/label.css +3 -3
  271. package/src/css/elements/media/image.css +2 -2
  272. package/src/css/elements.stories.js +48 -49
  273. package/src/css/helpers.css +8 -8
  274. package/src/css/layers.stories.js +5 -5
  275. package/src/css/reset.css +102 -102
  276. package/src/css/themes/todomap.css +1 -1
  277. package/src/css/tokens.stories.js +50 -53
  278. package/src/css/typography.css +30 -32
  279. package/src/css/typography.stories.js +92 -92
  280. package/src/css/util/focus-ring.css +12 -20
  281. package/src/css/view-transitions.css +16 -0
  282. package/src/exports.test.js +89 -105
  283. package/src/icons.js +1 -1
  284. package/src/lib/generate-id.js +1 -1
  285. package/src/lib/slot-presence-controller.js +48 -0
  286. package/src/lib/styles/all.css +38 -37
  287. package/src/lib/styles/focus-ring.css +12 -20
  288. package/src/lib/view-transition.js +42 -0
  289. package/src/lib/view-transition.test.js +105 -0
  290. package/src/main.js +29 -29
  291. package/src/pages/agency.stories.js +59 -59
  292. package/src/pages/blog-post.stories.js +48 -48
  293. package/src/pages/saas-landing.stories.js +180 -180
  294. package/src/react.js +44 -44
  295. package/src/react.test.js +42 -51
  296. package/src/test-utils/assert-helpers.js +39 -58
  297. package/src/test-utils/events.js +32 -34
  298. package/src/test-utils/fixture.js +31 -31
  299. package/src/test-utils/index.js +3 -3
  300. package/src/types.d.ts +3 -3
@@ -2,7 +2,7 @@
2
2
  * Custom assertions for web components
3
3
  */
4
4
 
5
- import { strict as assert } from "node:assert";
5
+ import { strict as assert } from 'node:assert';
6
6
 
7
7
  /**
8
8
  * Asserts that an element has a specific attribute
@@ -11,17 +11,17 @@ import { strict as assert } from "node:assert";
11
11
  * @param {string} expectedValue - The expected attribute value (optional)
12
12
  */
13
13
  export function assertAttribute(element, attribute, expectedValue) {
14
- const hasAttribute = element.hasAttribute(attribute);
15
- assert.ok(hasAttribute, `Element should have attribute "${attribute}"`);
14
+ const hasAttribute = element.hasAttribute(attribute);
15
+ assert.ok(hasAttribute, `Element should have attribute "${attribute}"`);
16
16
 
17
- if (expectedValue !== undefined) {
18
- const actualValue = element.getAttribute(attribute);
19
- assert.strictEqual(
20
- actualValue,
21
- expectedValue,
22
- `Attribute "${attribute}" should be "${expectedValue}" but was "${actualValue}"`,
23
- );
24
- }
17
+ if (expectedValue !== undefined) {
18
+ const actualValue = element.getAttribute(attribute);
19
+ assert.strictEqual(
20
+ actualValue,
21
+ expectedValue,
22
+ `Attribute "${attribute}" should be "${expectedValue}" but was "${actualValue}"`,
23
+ );
24
+ }
25
25
  }
26
26
 
27
27
  /**
@@ -30,8 +30,8 @@ export function assertAttribute(element, attribute, expectedValue) {
30
30
  * @param {string} attribute - The attribute name
31
31
  */
32
32
  export function assertNoAttribute(element, attribute) {
33
- const hasAttribute = element.hasAttribute(attribute);
34
- assert.ok(!hasAttribute, `Element should not have attribute "${attribute}"`);
33
+ const hasAttribute = element.hasAttribute(attribute);
34
+ assert.ok(!hasAttribute, `Element should not have attribute "${attribute}"`);
35
35
  }
36
36
 
37
37
  /**
@@ -40,10 +40,7 @@ export function assertNoAttribute(element, attribute) {
40
40
  * @param {string} className - The class name
41
41
  */
42
42
  export function assertClass(element, className) {
43
- assert.ok(
44
- element.classList.contains(className),
45
- `Element should have class "${className}"`,
46
- );
43
+ assert.ok(element.classList.contains(className), `Element should have class "${className}"`);
47
44
  }
48
45
 
49
46
  /**
@@ -52,10 +49,7 @@ export function assertClass(element, className) {
52
49
  * @param {string} className - The class name
53
50
  */
54
51
  export function assertNoClass(element, className) {
55
- assert.ok(
56
- !element.classList.contains(className),
57
- `Element should not have class "${className}"`,
58
- );
52
+ assert.ok(!element.classList.contains(className), `Element should not have class "${className}"`);
59
53
  }
60
54
 
61
55
  /**
@@ -64,10 +58,7 @@ export function assertNoClass(element, className) {
64
58
  * @param {string} selector - The CSS selector
65
59
  */
66
60
  export function assertSelector(element, selector) {
67
- assert.ok(
68
- element.matches(selector),
69
- `Element should match selector "${selector}"`,
70
- );
61
+ assert.ok(element.matches(selector), `Element should match selector "${selector}"`);
71
62
  }
72
63
 
73
64
  /**
@@ -76,12 +67,12 @@ export function assertSelector(element, selector) {
76
67
  * @param {string} expectedText - The expected text
77
68
  */
78
69
  export function assertTextContent(element, expectedText) {
79
- const actualText = element.textContent?.trim();
80
- assert.strictEqual(
81
- actualText,
82
- expectedText,
83
- `Element text content should be "${expectedText}" but was "${actualText}"`,
84
- );
70
+ const actualText = element.textContent?.trim();
71
+ assert.strictEqual(
72
+ actualText,
73
+ expectedText,
74
+ `Element text content should be "${expectedText}" but was "${actualText}"`,
75
+ );
85
76
  }
86
77
 
87
78
  /**
@@ -90,11 +81,11 @@ export function assertTextContent(element, expectedText) {
90
81
  * @param {string} substring - The substring to find
91
82
  */
92
83
  export function assertTextIncludes(element, substring) {
93
- const text = element.textContent || "";
94
- assert.ok(
95
- text.includes(substring),
96
- `Element text should include "${substring}" but was "${text}"`,
97
- );
84
+ const text = element.textContent || '';
85
+ assert.ok(
86
+ text.includes(substring),
87
+ `Element text should include "${substring}" but was "${text}"`,
88
+ );
98
89
  }
99
90
 
100
91
  /**
@@ -103,11 +94,11 @@ export function assertTextIncludes(element, substring) {
103
94
  * @param {string} selector - The CSS selector to find in shadow root
104
95
  */
105
96
  export function assertShadowElement(element, selector) {
106
- const shadowRoot = element.shadowRoot || element.renderRoot;
107
- assert.ok(shadowRoot, "Element should have a shadow root");
97
+ const shadowRoot = element.shadowRoot || element.renderRoot;
98
+ assert.ok(shadowRoot, 'Element should have a shadow root');
108
99
 
109
- const found = shadowRoot.querySelector(selector);
110
- assert.ok(found, `Shadow root should contain element matching "${selector}"`);
100
+ const found = shadowRoot.querySelector(selector);
101
+ assert.ok(found, `Shadow root should contain element matching "${selector}"`);
111
102
  }
112
103
 
113
104
  /**
@@ -117,7 +108,7 @@ export function assertShadowElement(element, selector) {
117
108
  * @param {string} expectedValue - The expected value (optional)
118
109
  */
119
110
  export function assertAria(element, ariaAttribute, expectedValue) {
120
- assertAttribute(element, ariaAttribute, expectedValue);
111
+ assertAttribute(element, ariaAttribute, expectedValue);
121
112
  }
122
113
 
123
114
  /**
@@ -125,17 +116,9 @@ export function assertAria(element, ariaAttribute, expectedValue) {
125
116
  * @param {HTMLElement} element - The element to check
126
117
  */
127
118
  export function assertVisible(element) {
128
- const style = window.getComputedStyle(element);
129
- assert.notStrictEqual(
130
- style.display,
131
- "none",
132
- "Element should not have display:none",
133
- );
134
- assert.notStrictEqual(
135
- style.visibility,
136
- "hidden",
137
- "Element should not have visibility:hidden",
138
- );
119
+ const style = window.getComputedStyle(element);
120
+ assert.notStrictEqual(style.display, 'none', 'Element should not have display:none');
121
+ assert.notStrictEqual(style.visibility, 'hidden', 'Element should not have visibility:hidden');
139
122
  }
140
123
 
141
124
  /**
@@ -143,10 +126,8 @@ export function assertVisible(element) {
143
126
  * @param {HTMLElement} element - The element to check
144
127
  */
145
128
  export function assertHidden(element) {
146
- const style = window.getComputedStyle(element);
147
- const isHidden =
148
- style.display === "none" ||
149
- style.visibility === "hidden" ||
150
- element.hidden === true;
151
- assert.ok(isHidden, "Element should be hidden");
129
+ const style = window.getComputedStyle(element);
130
+ const isHidden =
131
+ style.display === 'none' || style.visibility === 'hidden' || element.hidden === true;
132
+ assert.ok(isHidden, 'Element should be hidden');
152
133
  }
@@ -10,13 +10,13 @@
10
10
  * @returns {boolean} Returns true if the event was not cancelled
11
11
  */
12
12
  export function dispatchEvent(element, eventName, detail = {}) {
13
- const event = new CustomEvent(eventName, {
14
- detail,
15
- bubbles: true,
16
- composed: true,
17
- cancelable: true,
18
- });
19
- return element.dispatchEvent(event);
13
+ const event = new CustomEvent(eventName, {
14
+ detail,
15
+ bubbles: true,
16
+ composed: true,
17
+ cancelable: true,
18
+ });
19
+ return element.dispatchEvent(event);
20
20
  }
21
21
 
22
22
  /**
@@ -27,22 +27,20 @@ export function dispatchEvent(element, eventName, detail = {}) {
27
27
  * @returns {Promise<Event>} Resolves with the event object
28
28
  */
29
29
  export function waitForEvent(element, eventName, timeout = 3000) {
30
- return new Promise((resolve, reject) => {
31
- const timeoutId = setTimeout(() => {
32
- element.removeEventListener(eventName, handler);
33
- reject(
34
- new Error(`Event "${eventName}" did not fire within ${timeout}ms`),
35
- );
36
- }, timeout);
30
+ return new Promise((resolve, reject) => {
31
+ const timeoutId = setTimeout(() => {
32
+ element.removeEventListener(eventName, handler);
33
+ reject(new Error(`Event "${eventName}" did not fire within ${timeout}ms`));
34
+ }, timeout);
37
35
 
38
- const handler = (event) => {
39
- clearTimeout(timeoutId);
40
- element.removeEventListener(eventName, handler);
41
- resolve(event);
42
- };
36
+ const handler = (event) => {
37
+ clearTimeout(timeoutId);
38
+ element.removeEventListener(eventName, handler);
39
+ resolve(event);
40
+ };
43
41
 
44
- element.addEventListener(eventName, handler);
45
- });
42
+ element.addEventListener(eventName, handler);
43
+ });
46
44
  }
47
45
 
48
46
  /**
@@ -50,7 +48,7 @@ export function waitForEvent(element, eventName, timeout = 3000) {
50
48
  * @param {HTMLElement} element - The element to click
51
49
  */
52
50
  export function click(element) {
53
- element.click();
51
+ element.click();
54
52
  }
55
53
 
56
54
  /**
@@ -59,14 +57,14 @@ export function click(element) {
59
57
  * @param {string} key - The key to press (e.g., 'Enter', 'Escape')
60
58
  * @param {string} type - The event type ('keydown', 'keyup', 'keypress')
61
59
  */
62
- export function keyboard(element, key, type = "keydown") {
63
- const event = new KeyboardEvent(type, {
64
- key,
65
- bubbles: true,
66
- composed: true,
67
- cancelable: true,
68
- });
69
- element.dispatchEvent(event);
60
+ export function keyboard(element, key, type = 'keydown') {
61
+ const event = new KeyboardEvent(type, {
62
+ key,
63
+ bubbles: true,
64
+ composed: true,
65
+ cancelable: true,
66
+ });
67
+ element.dispatchEvent(event);
70
68
  }
71
69
 
72
70
  /**
@@ -74,8 +72,8 @@ export function keyboard(element, key, type = "keydown") {
74
72
  * @param {HTMLElement} element - The element to focus
75
73
  */
76
74
  export function focus(element) {
77
- element.focus();
78
- element.dispatchEvent(new FocusEvent("focus", { bubbles: true }));
75
+ element.focus();
76
+ element.dispatchEvent(new FocusEvent('focus', { bubbles: true }));
79
77
  }
80
78
 
81
79
  /**
@@ -83,6 +81,6 @@ export function focus(element) {
83
81
  * @param {HTMLElement} element - The element to blur
84
82
  */
85
83
  export function blur(element) {
86
- element.blur();
87
- element.dispatchEvent(new FocusEvent("blur", { bubbles: true }));
84
+ element.blur();
85
+ element.dispatchEvent(new FocusEvent('blur', { bubbles: true }));
88
86
  }
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Test utilities for creating and cleaning up web component fixtures
3
3
  */
4
- import { Window } from "happy-dom";
4
+ import { Window } from 'happy-dom';
5
5
 
6
6
  // Initialize happy-dom window
7
7
  const window = new Window();
@@ -17,12 +17,12 @@ globalThis.Event = window.Event;
17
17
 
18
18
  // Polyfill requestAnimationFrame for test environment
19
19
  if (!globalThis.requestAnimationFrame) {
20
- globalThis.requestAnimationFrame = (callback) => {
21
- return setTimeout(callback, 0);
22
- };
23
- globalThis.cancelAnimationFrame = (id) => {
24
- clearTimeout(id);
25
- };
20
+ globalThis.requestAnimationFrame = (callback) => {
21
+ return setTimeout(callback, 0);
22
+ };
23
+ globalThis.cancelAnimationFrame = (id) => {
24
+ clearTimeout(id);
25
+ };
26
26
  }
27
27
 
28
28
  /**
@@ -32,25 +32,25 @@ if (!globalThis.requestAnimationFrame) {
32
32
  * @returns {Promise<HTMLElement>} The created element after it's connected
33
33
  */
34
34
  export async function fixture(tagName, props = {}) {
35
- const element = document.createElement(tagName);
35
+ const element = document.createElement(tagName);
36
36
 
37
- // Set properties
38
- for (const [key, value] of Object.entries(props)) {
39
- element[key] = value;
40
- }
37
+ // Set properties
38
+ for (const [key, value] of Object.entries(props)) {
39
+ element[key] = value;
40
+ }
41
41
 
42
- // Append to body
43
- document.body.appendChild(element);
42
+ // Append to body
43
+ document.body.appendChild(element);
44
44
 
45
- // Wait for element to be fully connected and updated
46
- await new Promise((resolve) => setTimeout(resolve, 0));
45
+ // Wait for element to be fully connected and updated
46
+ await new Promise((resolve) => setTimeout(resolve, 0));
47
47
 
48
- // If it's a LitElement, wait for updateComplete
49
- if (element.updateComplete) {
50
- await element.updateComplete;
51
- }
48
+ // If it's a LitElement, wait for updateComplete
49
+ if (element.updateComplete) {
50
+ await element.updateComplete;
51
+ }
52
52
 
53
- return element;
53
+ return element;
54
54
  }
55
55
 
56
56
  /**
@@ -58,20 +58,20 @@ export async function fixture(tagName, props = {}) {
58
58
  * @param {HTMLElement} element - The element to remove
59
59
  */
60
60
  export function cleanup(element) {
61
- if (element?.parentNode) {
62
- element.parentNode.removeChild(element);
63
- }
61
+ if (element?.parentNode) {
62
+ element.parentNode.removeChild(element);
63
+ }
64
64
  }
65
65
 
66
66
  /**
67
67
  * Removes all elements matching the selector from the document
68
68
  * @param {string} selector - CSS selector for elements to remove
69
69
  */
70
- export function cleanupAll(selector = "*") {
71
- const elements = document.querySelectorAll(selector);
72
- elements.forEach((el) => {
73
- if (el.parentNode) {
74
- el.parentNode.removeChild(el);
75
- }
76
- });
70
+ export function cleanupAll(selector = '*') {
71
+ const elements = document.querySelectorAll(selector);
72
+ elements.forEach((el) => {
73
+ if (el.parentNode) {
74
+ el.parentNode.removeChild(el);
75
+ }
76
+ });
77
77
  }
@@ -2,6 +2,6 @@
2
2
  * Test utilities for web components
3
3
  */
4
4
 
5
- export * from "./assert-helpers.js";
6
- export * from "./events.js";
7
- export * from "./fixture.js";
5
+ export * from './assert-helpers.js';
6
+ export * from './events.js';
7
+ export * from './fixture.js';
package/src/types.d.ts CHANGED
@@ -9,10 +9,10 @@
9
9
  */
10
10
 
11
11
  // Component deep imports
12
- declare module "@grantcodes/ui/components/*";
12
+ declare module '@grantcodes/ui/components/*';
13
13
 
14
14
  // Style imports
15
- declare module "@grantcodes/ui/styles/*";
15
+ declare module '@grantcodes/ui/styles/*';
16
16
 
17
17
  // Font imports
18
- declare module "@grantcodes/ui/fonts/*";
18
+ declare module '@grantcodes/ui/fonts/*';