@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
@@ -1,139 +1,116 @@
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";
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
4
 
5
5
  // Skip entire test file - importing code-preview.js loads Shiki which causes memory issues
6
6
  // Even with lazy loading, the import itself can trigger Shiki initialization
7
- describe.skip("Code Preview Component", () => {
8
- // Import moved inside describe.skip to prevent loading
9
- // import "./code-preview.js";
10
- // Entire suite skipped: Shiki code highlighting library causes memory issues in tests
11
- // Even importing the component can trigger Shiki loading which freezes tests
12
- let element;
13
-
14
- afterEach(() => {
15
- cleanup(element);
16
- });
17
-
18
- // Skip most tests to avoid memory issues with Shiki
19
- // Only test basic rendering and properties
20
-
21
- it("should render with default properties", async () => {
22
- element = await fixture("grantcodes-code-preview");
23
- assert.ok(element, "Element should be created");
24
- assert.ok(element.shadowRoot, "Element should have shadow root");
25
- });
26
-
27
- it("should have language property defaulting to html", async () => {
28
- element = await fixture("grantcodes-code-preview");
29
- assert.strictEqual(
30
- element.language,
31
- "html",
32
- "Language should default to html",
33
- );
34
- });
35
-
36
- it("should have theme property defaulting to aurora-x", async () => {
37
- element = await fixture("grantcodes-code-preview");
38
- assert.strictEqual(
39
- element.theme,
40
- "aurora-x",
41
- "Theme should default to aurora-x",
42
- );
43
- });
44
-
45
- it("should support different languages", async () => {
46
- element = await fixture("grantcodes-code-preview", {
47
- language: "javascript",
48
- });
49
-
50
- assert.strictEqual(
51
- element.language,
52
- "javascript",
53
- "Language should be javascript",
54
- );
55
- });
56
-
57
- it("should support different themes", async () => {
58
- element = await fixture("grantcodes-code-preview", {
59
- theme: "github-dark",
60
- });
61
-
62
- assert.strictEqual(
63
- element.theme,
64
- "github-dark",
65
- "Theme should be github-dark",
66
- );
67
- });
68
-
69
- it("should render code preview wrapper", async () => {
70
- element = await fixture("grantcodes-code-preview");
71
- const preview = element.shadowRoot.querySelector(".code-preview");
72
- assert.ok(preview, "Code preview wrapper should exist");
73
- });
74
-
75
- it("should render pre element", async () => {
76
- element = await fixture("grantcodes-code-preview");
77
- await element.updateComplete;
78
- const pre = element.shadowRoot.querySelector("pre");
79
- assert.ok(pre, "Pre element should exist");
80
- });
81
-
82
- it.skip("should have slot for code content", async () => {
83
- // Skipped: Can cause memory issues
84
- element = await fixture("grantcodes-code-preview");
85
- await element.updateComplete;
86
- await new Promise((resolve) => setTimeout(resolve, 10));
87
- const pre = element.shadowRoot.querySelector("pre");
88
- assert.ok(pre, "Pre element should exist");
89
- const slot = pre?.querySelector("slot");
90
- assert.ok(slot, "Slot should exist for code content");
91
- });
92
-
93
- it.skip("should handle code highlighting", async () => {
94
- // Skipped: Shiki is memory-intensive and causes test suite to freeze
95
- element = await fixture("grantcodes-code-preview", {
96
- language: "javascript",
97
- });
98
-
99
- element.textContent = "const x = 42;";
100
-
101
- await element.updateComplete;
102
-
103
- // The doHighlight method is called in firstUpdated
104
- // Shiki highlighting happens asynchronously
105
- const preview = element.shadowRoot.querySelector(".code-preview");
106
- assert.ok(preview, "Preview should exist after highlighting");
107
- });
108
-
109
- it.skip("should initialize codePreview property", async () => {
110
- // Skipped: Can cause memory issues
111
- element = await fixture("grantcodes-code-preview");
112
- assert.strictEqual(
113
- element.codePreview,
114
- null,
115
- "codePreview should be null initially",
116
- );
117
- });
118
-
119
- it.skip("should set codePreview in firstUpdated", async () => {
120
- // Skipped: Can cause memory issues
121
- element = await fixture("grantcodes-code-preview");
122
- await element.updateComplete;
123
- assert.ok(
124
- element.codePreview !== null,
125
- "codePreview should be set after firstUpdated",
126
- );
127
- });
128
-
129
- it.skip("should support various programming languages", async () => {
130
- // Skipped: Shiki is memory-intensive and causes test suite to freeze
131
- const languages = ["javascript", "typescript", "python", "css", "json"];
132
-
133
- for (const lang of languages) {
134
- element = await fixture("grantcodes-code-preview", { language: lang });
135
- assert.strictEqual(element.language, lang, `Language should be ${lang}`);
136
- cleanup(element);
137
- }
138
- });
7
+ describe.skip('Code Preview Component', () => {
8
+ // Import moved inside describe.skip to prevent loading
9
+ // import "./code-preview.js";
10
+ // Entire suite skipped: Shiki code highlighting library causes memory issues in tests
11
+ // Even importing the component can trigger Shiki loading which freezes tests
12
+ let element;
13
+
14
+ afterEach(() => {
15
+ cleanup(element);
16
+ });
17
+
18
+ // Skip most tests to avoid memory issues with Shiki
19
+ // Only test basic rendering and properties
20
+
21
+ it('should render with default properties', async () => {
22
+ element = await fixture('grantcodes-code-preview');
23
+ assert.ok(element, 'Element should be created');
24
+ assert.ok(element.shadowRoot, 'Element should have shadow root');
25
+ });
26
+
27
+ it('should have language property defaulting to html', async () => {
28
+ element = await fixture('grantcodes-code-preview');
29
+ assert.strictEqual(element.language, 'html', 'Language should default to html');
30
+ });
31
+
32
+ it('should have theme property defaulting to aurora-x', async () => {
33
+ element = await fixture('grantcodes-code-preview');
34
+ assert.strictEqual(element.theme, 'aurora-x', 'Theme should default to aurora-x');
35
+ });
36
+
37
+ it('should support different languages', async () => {
38
+ element = await fixture('grantcodes-code-preview', {
39
+ language: 'javascript',
40
+ });
41
+
42
+ assert.strictEqual(element.language, 'javascript', 'Language should be javascript');
43
+ });
44
+
45
+ it('should support different themes', async () => {
46
+ element = await fixture('grantcodes-code-preview', {
47
+ theme: 'github-dark',
48
+ });
49
+
50
+ assert.strictEqual(element.theme, 'github-dark', 'Theme should be github-dark');
51
+ });
52
+
53
+ it('should render code preview wrapper', async () => {
54
+ element = await fixture('grantcodes-code-preview');
55
+ const preview = element.shadowRoot.querySelector('.code-preview');
56
+ assert.ok(preview, 'Code preview wrapper should exist');
57
+ });
58
+
59
+ it('should render pre element', async () => {
60
+ element = await fixture('grantcodes-code-preview');
61
+ await element.updateComplete;
62
+ const pre = element.shadowRoot.querySelector('pre');
63
+ assert.ok(pre, 'Pre element should exist');
64
+ });
65
+
66
+ it.skip('should have slot for code content', async () => {
67
+ // Skipped: Can cause memory issues
68
+ element = await fixture('grantcodes-code-preview');
69
+ await element.updateComplete;
70
+ await new Promise((resolve) => setTimeout(resolve, 10));
71
+ const pre = element.shadowRoot.querySelector('pre');
72
+ assert.ok(pre, 'Pre element should exist');
73
+ const slot = pre?.querySelector('slot');
74
+ assert.ok(slot, 'Slot should exist for code content');
75
+ });
76
+
77
+ it.skip('should handle code highlighting', async () => {
78
+ // Skipped: Shiki is memory-intensive and causes test suite to freeze
79
+ element = await fixture('grantcodes-code-preview', {
80
+ language: 'javascript',
81
+ });
82
+
83
+ element.textContent = 'const x = 42;';
84
+
85
+ await element.updateComplete;
86
+
87
+ // The doHighlight method is called in firstUpdated
88
+ // Shiki highlighting happens asynchronously
89
+ const preview = element.shadowRoot.querySelector('.code-preview');
90
+ assert.ok(preview, 'Preview should exist after highlighting');
91
+ });
92
+
93
+ it.skip('should initialize codePreview property', async () => {
94
+ // Skipped: Can cause memory issues
95
+ element = await fixture('grantcodes-code-preview');
96
+ assert.strictEqual(element.codePreview, null, 'codePreview should be null initially');
97
+ });
98
+
99
+ it.skip('should set codePreview in firstUpdated', async () => {
100
+ // Skipped: Can cause memory issues
101
+ element = await fixture('grantcodes-code-preview');
102
+ await element.updateComplete;
103
+ assert.ok(element.codePreview !== null, 'codePreview should be set after firstUpdated');
104
+ });
105
+
106
+ it.skip('should support various programming languages', async () => {
107
+ // Skipped: Shiki is memory-intensive and causes test suite to freeze
108
+ const languages = ['javascript', 'typescript', 'python', 'css', 'json'];
109
+
110
+ for (const lang of languages) {
111
+ element = await fixture('grantcodes-code-preview', { language: lang });
112
+ assert.strictEqual(element.language, lang, `Language should be ${lang}`);
113
+ cleanup(element);
114
+ }
115
+ });
139
116
  });
@@ -1 +1 @@
1
- export * from "./code-preview.js";
1
+ export * from './code-preview.js';
@@ -1,39 +1,39 @@
1
- import { LitElement, html } from "lit";
2
- import { classMap } from "lit/directives/class-map.js";
3
- import containerStyles from "./container.css" with { type: "css" };
1
+ import { html, LitElement } from 'lit';
2
+ import { classMap } from 'lit/directives/class-map.js';
3
+ import containerStyles from './container.css' with { type: 'css' };
4
4
 
5
5
  export class GrantCodesContainer 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 = [containerStyles];
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 = [containerStyles];
10
10
 
11
- static properties = {
12
- align: { type: String },
13
- nopad: { type: Boolean },
14
- };
11
+ static properties = {
12
+ align: { type: String },
13
+ nopad: { type: Boolean },
14
+ };
15
15
 
16
- constructor() {
17
- super();
16
+ constructor() {
17
+ super();
18
18
 
19
- this.align = "default";
20
- this.nopad = false;
21
- }
19
+ this.align = 'default';
20
+ this.nopad = false;
21
+ }
22
22
 
23
- render() {
24
- const classes = classMap({
25
- container: true,
26
- "container--wide": this.align === "wide",
27
- "container--full": this.align === "full",
28
- "container--prose": this.align === "prose",
29
- "container--viewport": this.align === "viewport",
30
- "container--nopad": this.nopad,
31
- });
23
+ render() {
24
+ const classes = classMap({
25
+ container: true,
26
+ 'container--wide': this.align === 'wide',
27
+ 'container--full': this.align === 'full',
28
+ 'container--prose': this.align === 'prose',
29
+ 'container--viewport': this.align === 'viewport',
30
+ 'container--nopad': this.nopad,
31
+ });
32
32
 
33
- return html`
33
+ return html`
34
34
  <div class=${classes}>
35
35
  <slot></slot>
36
36
  </div>
37
37
  `;
38
- }
38
+ }
39
39
  }
@@ -1,44 +1,44 @@
1
1
  *,
2
2
  *::before,
3
3
  *::after {
4
- box-sizing: border-box;
4
+ box-sizing: border-box;
5
5
  }
6
6
 
7
7
  .container {
8
- display: flex;
9
- flex-direction: column;
10
- justify-content: flex-start;
11
- align-items: stretch;
12
- inline-size: 1200px;
13
- max-inline-size: 100%;
14
- padding-inline: var(--g-spacing-md);
15
- margin-inline: auto;
16
- background-color: inherit;
8
+ display: flex;
9
+ flex-direction: column;
10
+ justify-content: flex-start;
11
+ align-items: stretch;
12
+ inline-size: 1200px;
13
+ max-inline-size: 100%;
14
+ padding-inline: var(--g-spacing-md);
15
+ margin-inline: auto;
16
+ background-color: inherit;
17
17
  }
18
18
 
19
19
  .container--prose {
20
- inline-size: 100%;
21
- max-inline-size: 65ch;
20
+ inline-size: 100%;
21
+ max-inline-size: 65ch;
22
22
  }
23
23
 
24
24
  .container--wide {
25
- inline-size: 1400px;
25
+ inline-size: 1400px;
26
26
  }
27
27
 
28
28
  .container--full {
29
- inline-size: 100%;
29
+ inline-size: 100%;
30
30
  }
31
31
 
32
32
  .container--viewport {
33
- inset-inline-start: 50%;
34
- position: relative;
35
- inset-inline-end: 50%;
36
- margin-inline-start: -50dvw;
37
- margin-inline-end: -50dvw;
38
- max-inline-size: 100dvw;
39
- inline-size: 100dvw;
33
+ inset-inline-start: 50%;
34
+ position: relative;
35
+ inset-inline-end: 50%;
36
+ margin-inline-start: -50dvw;
37
+ margin-inline-end: -50dvw;
38
+ max-inline-size: 100dvw;
39
+ inline-size: 100dvw;
40
40
  }
41
41
 
42
42
  .container--nopad {
43
- padding-inline: 0;
43
+ padding-inline: 0;
44
44
  }
@@ -1,6 +1,6 @@
1
- import { GrantCodesContainer } from "./container.component.js";
1
+ import { GrantCodesContainer } from './container.component.js';
2
2
 
3
- export * from "./container.component.js";
3
+ export * from './container.component.js';
4
4
  export default GrantCodesContainer;
5
5
 
6
- customElements.define("grantcodes-container", GrantCodesContainer);
6
+ customElements.define('grantcodes-container', GrantCodesContainer);
@@ -1,9 +1,9 @@
1
- import React from "react";
2
- import { createComponent } from "@lit/react";
3
- import { GrantCodesContainer } from "./container.js";
1
+ import { createComponent } from '@lit/react';
2
+ import React from 'react';
3
+ import { GrantCodesContainer } from './container.js';
4
4
 
5
5
  export const Container = createComponent({
6
- tagName: "grantcodes-container",
7
- elementClass: GrantCodesContainer,
8
- react: React,
6
+ tagName: 'grantcodes-container',
7
+ elementClass: GrantCodesContainer,
8
+ react: React,
9
9
  });
@@ -1,41 +1,41 @@
1
- import { html } from "lit/static-html.js";
2
- import { getStorybookHelpers } from "@wc-toolkit/storybook-helpers";
3
- const { events, args, argTypes, template } = getStorybookHelpers(
4
- "grantcodes-container",
5
- );
6
- import "./container.js";
1
+ import { getStorybookHelpers } from '@wc-toolkit/storybook-helpers';
2
+ import { html } from 'lit/static-html.js';
3
+
4
+ const { events, args, argTypes, template } = getStorybookHelpers('grantcodes-container');
5
+
6
+ import './container.js';
7
7
 
8
8
  const meta = {
9
- title: "Components/Container",
10
- component: "grantcodes-container",
11
- args: {
12
- ...args,
13
- content: "This content is inside the container.",
14
- align: undefined,
15
- nopad: false,
16
- },
17
- argTypes: {
18
- ...argTypes,
19
- align: {
20
- type: "string",
21
- options: ["default", "wide", "full", "viewport", "prose"],
22
- control: { type: "radio" },
23
- },
24
- },
25
- render: (args) =>
26
- template(
27
- args,
28
- html`<div
9
+ title: 'Components/Container',
10
+ component: 'grantcodes-container',
11
+ args: {
12
+ ...args,
13
+ content: 'This content is inside the container.',
14
+ align: undefined,
15
+ nopad: false,
16
+ },
17
+ argTypes: {
18
+ ...argTypes,
19
+ align: {
20
+ type: 'string',
21
+ options: ['default', 'wide', 'full', 'viewport', 'prose'],
22
+ control: { type: 'radio' },
23
+ },
24
+ },
25
+ render: (args) =>
26
+ template(
27
+ args,
28
+ html`<div
29
29
  style="background-color: var(--g-color-background-subtle)"
30
30
  >
31
31
  ${args.content}
32
32
  </div>`,
33
- ),
34
- parameters: {
35
- actions: {
36
- handles: events,
37
- },
38
- },
33
+ ),
34
+ parameters: {
35
+ actions: {
36
+ handles: events,
37
+ },
38
+ },
39
39
  };
40
40
 
41
41
  export default meta;
@@ -43,25 +43,25 @@ export default meta;
43
43
  export const Container = {};
44
44
 
45
45
  export const WideContainer = {
46
- args: {
47
- align: "wide",
48
- },
46
+ args: {
47
+ align: 'wide',
48
+ },
49
49
  };
50
50
 
51
51
  export const FullContainer = {
52
- args: {
53
- align: "full",
54
- },
52
+ args: {
53
+ align: 'full',
54
+ },
55
55
  };
56
56
 
57
57
  export const ViewportContainer = {
58
- args: {
59
- align: "viewport",
60
- },
58
+ args: {
59
+ align: 'viewport',
60
+ },
61
61
  };
62
62
 
63
63
  export const ProseContainer = {
64
- args: {
65
- align: "prose",
66
- },
64
+ args: {
65
+ align: 'prose',
66
+ },
67
67
  };