@grantcodes/ui 2.15.7 → 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 +60 -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
@@ -1,89 +1,96 @@
1
- import { describe, it, afterEach } from "node:test";
2
- import { strict as assert } from "node:assert";
3
- import { fixture, cleanup } from "../../test-utils/index.js";
4
- import "./gallery.js";
5
- import "./gallery-image.js";
6
-
7
- describe("Gallery Component", () => {
8
- let element;
9
-
10
- afterEach(() => {
11
- cleanup(element);
12
- });
13
-
14
- it("should render with default properties", async () => {
15
- element = await fixture("grantcodes-gallery");
16
- assert.ok(element, "Element should be created");
17
- assert.ok(element.shadowRoot, "Element should have shadow root");
18
- });
19
-
20
- it("should render gallery wrapper", async () => {
21
- element = await fixture("grantcodes-gallery");
22
- const gallery = element.shadowRoot.querySelector(".gallery");
23
- assert.ok(gallery, "Gallery element should exist");
24
- });
25
-
26
- it("should have slot for gallery items", async () => {
27
- element = await fixture("grantcodes-gallery");
28
- const slot = element.shadowRoot.querySelector("slot");
29
- assert.ok(slot, "Slot should exist");
30
- assert.ok(
31
- slot.classList.contains("gallery__slot"),
32
- "Slot should have gallery__slot class",
33
- );
34
- });
35
-
36
- it("should support multiple image slots", async () => {
37
- element = await fixture("grantcodes-gallery");
38
-
39
- const img1 = document.createElement("img");
40
- img1.src = "image1.jpg";
41
- const img2 = document.createElement("img");
42
- img2.src = "image2.jpg";
43
-
44
- element.appendChild(img1);
45
- element.appendChild(img2);
46
-
47
- await element.updateComplete;
48
-
49
- assert.strictEqual(element.children.length, 2, "Should have two images");
50
- });
51
-
52
- it("should initialize images array", async () => {
53
- element = await fixture("grantcodes-gallery");
54
- assert.ok(Array.isArray(element.images), "Images should be an array");
55
- assert.strictEqual(
56
- element.images.length,
57
- 0,
58
- "Images array should be empty initially",
59
- );
60
- });
61
-
62
- describe("Gallery filmstrip variant", () => {
63
- let element;
64
-
65
- afterEach(() => {
66
- cleanup(element);
67
- });
68
-
69
- it("should have variant property default to 'default'", async () => {
70
- element = await fixture("grantcodes-gallery");
71
- assert.strictEqual(
72
- element.variant,
73
- "default",
74
- "variant should default to 'default'",
75
- );
76
- });
77
-
78
- it("should reflect variant attribute when property is set", async () => {
79
- element = await fixture("grantcodes-gallery");
80
- element.variant = "filmstrip";
81
- await element.updateComplete;
82
- assert.strictEqual(
83
- element.getAttribute("variant"),
84
- "filmstrip",
85
- "variant attribute should be reflected",
86
- );
87
- });
88
- });
1
+ import { strict as assert } from 'node:assert';
2
+ import { afterEach, describe, it } from 'node:test';
3
+ import { cleanup, fixture } from '../../test-utils/index.js';
4
+ import './gallery.js';
5
+ import './gallery-image.js';
6
+
7
+ describe('Gallery Component', () => {
8
+ let element;
9
+
10
+ afterEach(() => {
11
+ cleanup(element);
12
+ });
13
+
14
+ it('should render with default properties', async () => {
15
+ element = await fixture('grantcodes-gallery');
16
+ assert.ok(element, 'Element should be created');
17
+ assert.ok(element.shadowRoot, 'Element should have shadow root');
18
+ });
19
+
20
+ it('should render gallery wrapper', async () => {
21
+ element = await fixture('grantcodes-gallery');
22
+ const gallery = element.shadowRoot.querySelector('.gallery');
23
+ assert.ok(gallery, 'Gallery element should exist');
24
+ });
25
+
26
+ it('should have slot for gallery items', async () => {
27
+ element = await fixture('grantcodes-gallery');
28
+ const slot = element.shadowRoot.querySelector('slot');
29
+ assert.ok(slot, 'Slot should exist');
30
+ assert.ok(slot.classList.contains('gallery__slot'), 'Slot should have gallery__slot class');
31
+ });
32
+
33
+ it('should support multiple image slots', async () => {
34
+ element = await fixture('grantcodes-gallery');
35
+
36
+ const img1 = document.createElement('img');
37
+ img1.src = 'image1.jpg';
38
+ const img2 = document.createElement('img');
39
+ img2.src = 'image2.jpg';
40
+
41
+ element.appendChild(img1);
42
+ element.appendChild(img2);
43
+
44
+ await element.updateComplete;
45
+
46
+ assert.strictEqual(element.children.length, 2, 'Should have two images');
47
+ });
48
+
49
+ it('should initialize images array', async () => {
50
+ element = await fixture('grantcodes-gallery');
51
+ assert.ok(Array.isArray(element.images), 'Images should be an array');
52
+ assert.strictEqual(element.images.length, 0, 'Images array should be empty initially');
53
+ });
54
+
55
+ describe('Gallery filmstrip variant', () => {
56
+ let element;
57
+
58
+ afterEach(() => {
59
+ cleanup(element);
60
+ });
61
+
62
+ it("should have variant property default to 'default'", async () => {
63
+ element = await fixture('grantcodes-gallery');
64
+ assert.strictEqual(element.variant, 'default', "variant should default to 'default'");
65
+ });
66
+
67
+ it('should reflect variant attribute when property is set', async () => {
68
+ element = await fixture('grantcodes-gallery');
69
+ element.variant = 'filmstrip';
70
+ await element.updateComplete;
71
+ assert.strictEqual(
72
+ element.getAttribute('variant'),
73
+ 'filmstrip',
74
+ 'variant attribute should be reflected',
75
+ );
76
+ });
77
+
78
+ it('should make the filmstrip scroller keyboard reachable and named', async () => {
79
+ element = await fixture('grantcodes-gallery', { variant: 'filmstrip' });
80
+
81
+ const slot = element.shadowRoot.querySelector('.gallery__slot');
82
+ assert.strictEqual(slot.getAttribute('tabindex'), '0', 'Scroller should be focusable');
83
+ assert.strictEqual(slot.getAttribute('role'), 'region', 'Scroller should be a region');
84
+ assert.strictEqual(slot.getAttribute('aria-label'), 'Gallery', 'Region should be named');
85
+ });
86
+
87
+ it('should not add a tab stop to the non-scrolling grid', async () => {
88
+ element = await fixture('grantcodes-gallery');
89
+
90
+ const slot = element.shadowRoot.querySelector('.gallery__slot');
91
+ assert.strictEqual(slot.hasAttribute('tabindex'), false, 'Grid should not be a tab stop');
92
+ assert.strictEqual(slot.hasAttribute('role'), false, 'Grid should not be a region');
93
+ assert.strictEqual(slot.hasAttribute('aria-label'), false, 'Grid needs no label');
94
+ });
95
+ });
89
96
  });
@@ -1,2 +1,2 @@
1
- export * from "./gallery.js";
2
- export * from "./gallery-image.js";
1
+ export * from './gallery.js';
2
+ export * from './gallery-image.js';
@@ -1,73 +1,69 @@
1
- import { LitElement, html } from "lit";
2
- import heroStyles from "./hero.css" with { type: "css" };
3
- import "../button/button.js";
1
+ import { html, LitElement } from 'lit';
2
+ import heroStyles from './hero.css' with { type: 'css' };
3
+ import '../button/button.js';
4
4
 
5
5
  export class GrantCodesHero extends LitElement {
6
- static styles = [heroStyles];
6
+ static styles = [heroStyles];
7
7
 
8
- static properties = {
9
- /**
10
- * Main heading text.
11
- * @type {string}
12
- */
13
- title: { type: String },
14
- /**
15
- * Supporting paragraph text shown below the title.
16
- * @type {string}
17
- */
18
- subtitle: { type: String },
19
- /**
20
- * Label for the CTA button. Only rendered when `href` is also set.
21
- * @type {string}
22
- */
23
- button: { type: String },
24
- /**
25
- * URL the CTA button links to.
26
- * @type {string}
27
- */
28
- href: { type: String },
29
- /**
30
- * Controls the vertical height of the hero section.
31
- * @type {'sm' | 'md' | 'lg'}
32
- */
33
- size: { type: String, reflect: true },
34
- /**
35
- * Whether to center-align text content.
36
- * @type {boolean}
37
- */
38
- center: { type: Boolean, reflect: true },
39
- };
8
+ static properties = {
9
+ /**
10
+ * Main heading text.
11
+ * @type {string}
12
+ */
13
+ title: { type: String },
14
+ /**
15
+ * Supporting paragraph text shown below the title.
16
+ * @type {string}
17
+ */
18
+ subtitle: { type: String },
19
+ /**
20
+ * Label for the CTA button. Only rendered when `href` is also set.
21
+ * @type {string}
22
+ */
23
+ button: { type: String },
24
+ /**
25
+ * URL the CTA button links to.
26
+ * @type {string}
27
+ */
28
+ href: { type: String },
29
+ /**
30
+ * Controls the vertical height of the hero section.
31
+ * @type {'sm' | 'md' | 'lg'}
32
+ */
33
+ size: { type: String, reflect: true },
34
+ /**
35
+ * Whether to center-align text content.
36
+ * @type {boolean}
37
+ */
38
+ center: { type: Boolean, reflect: true },
39
+ };
40
40
 
41
- constructor() {
42
- super();
43
- this.title = "";
44
- this.subtitle = "";
45
- this.button = "";
46
- this.href = "";
47
- this.size = "md";
48
- this.center = false;
49
- }
41
+ constructor() {
42
+ super();
43
+ this.title = '';
44
+ this.subtitle = '';
45
+ this.button = '';
46
+ this.href = '';
47
+ this.size = 'md';
48
+ this.center = false;
49
+ }
50
50
 
51
- render() {
52
- return html`
51
+ render() {
52
+ return html`
53
53
  <section class="hero">
54
54
  <div class="hero__container">
55
55
  <h1 class="hero__title">${this.title}</h1>
56
+ ${this.subtitle ? html`<p class="hero__text">${this.subtitle}</p>` : null}
56
57
  ${
57
- this.subtitle
58
- ? html`<p class="hero__text">${this.subtitle}</p>`
59
- : null
60
- }
61
- ${
62
- this.href && this.button
63
- ? html`<grantcodes-button href=${this.href}
58
+ this.href && this.button
59
+ ? html`<grantcodes-button href=${this.href}
64
60
  >${this.button}</grantcodes-button
65
61
  >`
66
- : null
67
- }
62
+ : null
63
+ }
68
64
  <slot></slot>
69
65
  </div>
70
66
  </section>
71
67
  `;
72
- }
68
+ }
73
69
  }
@@ -1,61 +1,61 @@
1
1
  *,
2
2
  *::before,
3
3
  *::after {
4
- box-sizing: border-box;
4
+ box-sizing: border-box;
5
5
  }
6
6
 
7
7
  :host {
8
- display: block;
8
+ display: block;
9
9
  }
10
10
 
11
11
  .hero {
12
- display: flex;
13
- width: 100%;
14
- justify-content: center;
15
- align-items: center;
16
- min-height: 50vh;
17
- padding: var(--g-spacing-2xl) var(--g-spacing-md);
18
- background: linear-gradient(
19
- 135deg,
20
- var(--g-color-background-primary-knockout),
21
- var(--g-color-primary-900)
22
- );
12
+ display: flex;
13
+ width: 100%;
14
+ justify-content: center;
15
+ align-items: center;
16
+ min-height: 50vh;
17
+ padding: var(--g-spacing-2xl) var(--g-spacing-md);
18
+ background: linear-gradient(
19
+ 135deg,
20
+ var(--g-color-background-primary-knockout),
21
+ var(--g-color-primary-900)
22
+ );
23
23
  }
24
24
 
25
25
  .hero__container {
26
- width: 100%;
27
- max-width: 65ch;
28
- gap: var(--g-spacing-lg);
26
+ width: 100%;
27
+ max-width: 65ch;
28
+ gap: var(--g-spacing-lg);
29
29
  }
30
30
 
31
31
  :host([center]) .hero {
32
- text-align: center;
32
+ text-align: center;
33
33
  }
34
34
 
35
35
  :host([center]) .hero__container {
36
- margin-inline: auto;
36
+ margin-inline: auto;
37
37
  }
38
38
 
39
39
  .hero__title {
40
- font: var(--g-typography-h1-font);
41
- color: var(--g-color-content-primary-knockout);
40
+ font: var(--g-typography-h1-font);
41
+ color: var(--g-color-content-primary-knockout);
42
42
  }
43
43
 
44
44
  .hero__text {
45
- font: var(--g-typography-body-lg-font);
46
- color: var(--g-color-content-primary-knockout);
45
+ font: var(--g-typography-body-lg-font);
46
+ color: var(--g-color-content-primary-knockout);
47
47
  }
48
48
 
49
49
  :host([size="sm"]) .hero {
50
- min-height: 30vh;
51
- padding: var(--g-spacing-xl) var(--g-spacing-md);
50
+ min-height: 30vh;
51
+ padding: var(--g-spacing-xl) var(--g-spacing-md);
52
52
  }
53
53
 
54
54
  :host([size="lg"]) .hero {
55
- min-height: 70vh;
56
- padding: var(--g-spacing-3xl) var(--g-spacing-md);
55
+ min-height: 70vh;
56
+ padding: var(--g-spacing-3xl) var(--g-spacing-md);
57
57
  }
58
58
 
59
59
  ::slotted(*) {
60
- color: var(--g-color-content-primary-knockout, #ffffff);
60
+ color: var(--g-color-content-primary-knockout, #ffffff);
61
61
  }
@@ -1,6 +1,6 @@
1
- import { GrantCodesHero } from "./hero.component.js";
1
+ import { GrantCodesHero } from './hero.component.js';
2
2
 
3
- export * from "./hero.component.js";
3
+ export * from './hero.component.js';
4
4
  export default GrantCodesHero;
5
5
 
6
- customElements.define("grantcodes-hero", GrantCodesHero);
6
+ customElements.define('grantcodes-hero', GrantCodesHero);
@@ -1,9 +1,9 @@
1
- import React from "react";
2
- import { createComponent } from "@lit/react";
3
- import { GrantCodesHero } from "./hero.js";
1
+ import { createComponent } from '@lit/react';
2
+ import React from 'react';
3
+ import { GrantCodesHero } from './hero.js';
4
4
 
5
5
  export const Hero = createComponent({
6
- tagName: "grantcodes-hero",
7
- elementClass: GrantCodesHero,
8
- react: React,
6
+ tagName: 'grantcodes-hero',
7
+ elementClass: GrantCodesHero,
8
+ react: React,
9
9
  });
@@ -1,20 +1,20 @@
1
- import { getStorybookHelpers } from "@wc-toolkit/storybook-helpers";
2
- import { html } from "lit";
3
- import "./hero.js";
1
+ import { getStorybookHelpers } from '@wc-toolkit/storybook-helpers';
2
+ import { html } from 'lit';
3
+ import './hero.js';
4
4
 
5
- const { events, args, argTypes } = getStorybookHelpers("grantcodes-hero");
5
+ const { events, args, argTypes } = getStorybookHelpers('grantcodes-hero');
6
6
 
7
7
  const meta = {
8
- title: "Blocks/Hero",
9
- component: "grantcodes-hero",
10
- args,
11
- argTypes,
12
- parameters: {
13
- actions: {
14
- handles: events,
15
- },
16
- layout: "fullscreen",
17
- },
8
+ title: 'Blocks/Hero',
9
+ component: 'grantcodes-hero',
10
+ args,
11
+ argTypes,
12
+ parameters: {
13
+ actions: {
14
+ handles: events,
15
+ },
16
+ layout: 'fullscreen',
17
+ },
18
18
  };
19
19
 
20
20
  export default meta;
@@ -23,34 +23,34 @@ export default meta;
23
23
  * Default hero with title, subtitle, and CTA.
24
24
  */
25
25
  export const Default = {
26
- args: {
27
- title: "Build something great",
28
- subtitle: "A personal web component library with a custom design system.",
29
- button: "Get started",
30
- href: "/docs",
31
- size: "md",
32
- },
26
+ args: {
27
+ title: 'Build something great',
28
+ subtitle: 'A personal web component library with a custom design system.',
29
+ button: 'Get started',
30
+ href: '/docs',
31
+ size: 'md',
32
+ },
33
33
  };
34
34
 
35
35
  /**
36
36
  * Centered hero — explicitly center-aligns text content.
37
37
  */
38
38
  export const Centered = {
39
- args: {
40
- title: "Build something great",
41
- subtitle: "A personal web component library with a custom design system.",
42
- button: "Get started",
43
- href: "/docs",
44
- size: "md",
45
- center: true,
46
- },
39
+ args: {
40
+ title: 'Build something great',
41
+ subtitle: 'A personal web component library with a custom design system.',
42
+ button: 'Get started',
43
+ href: '/docs',
44
+ size: 'md',
45
+ center: true,
46
+ },
47
47
  };
48
48
 
49
49
  /**
50
50
  * Hero with slotted content — custom HTML inside the hero.
51
51
  */
52
52
  export const WithSlottedContent = {
53
- render: () => html`
53
+ render: () => html`
54
54
  <grantcodes-hero
55
55
  title="Event countdown"
56
56
  subtitle="Something exciting is coming soon."
@@ -65,19 +65,19 @@ export const WithSlottedContent = {
65
65
  * Small hero — useful for inner page headers.
66
66
  */
67
67
  export const Small = {
68
- args: {
69
- title: "About this project",
70
- subtitle: "A brief overview of what we're building.",
71
- size: "sm",
72
- },
68
+ args: {
69
+ title: 'About this project',
70
+ subtitle: "A brief overview of what we're building.",
71
+ size: 'sm',
72
+ },
73
73
  };
74
74
 
75
75
  /**
76
76
  * Large hero with no CTA.
77
77
  */
78
78
  export const Large = {
79
- args: {
80
- title: "Welcome",
81
- size: "lg",
82
- },
79
+ args: {
80
+ title: 'Welcome',
81
+ size: 'lg',
82
+ },
83
83
  };
@@ -1 +1 @@
1
- export * from "./hero.js";
1
+ export * from './hero.js';
@@ -1,14 +1,14 @@
1
- import { LitElement } from "lit";
2
- import { html } from "lit/static-html.js";
3
- import iconStyles from "./icon.css" with { type: "css" };
1
+ import { LitElement } from 'lit';
2
+ import { html } from 'lit/static-html.js';
3
+ import iconStyles from './icon.css' with { type: 'css' };
4
4
 
5
5
  export class GrantCodesIcon extends LitElement {
6
- // Styles are scoped to this element: they won't conflict with styles
7
- // on the main page or in other components. Styling API can be exposed
8
- // via CSS custom properties.
9
- static styles = [iconStyles];
6
+ // Styles are scoped to this element: they won't conflict with styles
7
+ // on the main page or in other components. Styling API can be exposed
8
+ // via CSS custom properties.
9
+ static styles = [iconStyles];
10
10
 
11
- render() {
12
- return html`<span class="icon"><slot></slot></span>`;
13
- }
11
+ render() {
12
+ return html`<span class="icon"><slot></slot></span>`;
13
+ }
14
14
  }
@@ -1,32 +1,32 @@
1
1
  *,
2
2
  *::before,
3
3
  *::after {
4
- box-sizing: border-box;
4
+ box-sizing: border-box;
5
5
  }
6
6
 
7
7
  :host {
8
- display: block;
8
+ display: block;
9
9
  }
10
10
 
11
11
  .icon {
12
- display: block;
13
- color: inherit;
14
- width: 1em;
15
- height: 1em;
12
+ display: block;
13
+ color: inherit;
14
+ width: 1em;
15
+ height: 1em;
16
16
  }
17
17
 
18
18
  .icon ::slotted(svg) {
19
- display: block;
20
- width: 100%;
21
- height: 100%;
22
- object-fit: contain;
23
- object-position: center;
19
+ display: block;
20
+ width: 100%;
21
+ height: 100%;
22
+ object-fit: contain;
23
+ object-position: center;
24
24
  }
25
25
 
26
26
  .icon ::slotted(svg:not([fill])) {
27
- fill: currentColor;
27
+ fill: currentColor;
28
28
  }
29
29
 
30
30
  .icon ::slotted(svg:not([stoke])) {
31
- stroke: currentColor;
31
+ stroke: currentColor;
32
32
  }
@@ -1,8 +1,8 @@
1
- import { GrantCodesIcon } from "./icon.component.js";
1
+ import { GrantCodesIcon } from './icon.component.js';
2
2
 
3
- export * from "./icon.component.js";
3
+ export * from './icon.component.js';
4
4
  export default GrantCodesIcon;
5
5
 
6
- if (!customElements.get("grantcodes-icon")) {
7
- customElements.define("grantcodes-icon", GrantCodesIcon);
6
+ if (!customElements.get('grantcodes-icon')) {
7
+ customElements.define('grantcodes-icon', GrantCodesIcon);
8
8
  }