@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,19 +1,19 @@
1
- import { html } from "lit";
2
- import "../components/app-bar/app-bar.js";
3
- import "../components/app-bar/nav-link.js"
4
- import "../components/button/button.js";
5
- import "../components/hero/hero.js";
6
- import "../components/media-text/media-text.js";
7
- import "../components/feature-list/feature-list.js";
8
- import "../components/cta/cta.js";
9
- import "../components/testimonials/testimonials.js";
10
- import "../components/footer/footer.js";
1
+ import { html } from 'lit';
2
+ import '../components/app-bar/app-bar.js';
3
+ import '../components/app-bar/nav-link.js';
4
+ import '../components/button/button.js';
5
+ import '../components/hero/hero.js';
6
+ import '../components/media-text/media-text.js';
7
+ import '../components/feature-list/feature-list.js';
8
+ import '../components/cta/cta.js';
9
+ import '../components/testimonials/testimonials.js';
10
+ import '../components/footer/footer.js';
11
11
 
12
12
  const meta = {
13
- title: "Pages/Agency",
14
- parameters: {
15
- layout: "fullscreen",
16
- },
13
+ title: 'Pages/Agency',
14
+ parameters: {
15
+ layout: 'fullscreen',
16
+ },
17
17
  };
18
18
 
19
19
  export default meta;
@@ -49,7 +49,7 @@ const footerContent = html`
49
49
  * the studio's offering, with a CTA section and testimonials from clients.
50
50
  */
51
51
  export const Default = {
52
- render: () => html`
52
+ render: () => html`
53
53
  <grantcodes-app-bar>
54
54
  <a slot="logo" href="/" style="font-weight: 700; font-size: 1.25rem; text-decoration: none; color: inherit;">
55
55
  Studio North
@@ -76,78 +76,78 @@ export const Default = {
76
76
  title="What we do"
77
77
  columns="3"
78
78
  items=${JSON.stringify([
79
- {
80
- title: "Product design",
81
- description:
82
- "UX research, interaction design, and visual design from concept to delivery.",
83
- icon: "pen-tool",
84
- },
85
- {
86
- title: "Web development",
87
- description:
88
- "Fast, accessible front-ends built with modern tooling and a focus on longevity.",
89
- icon: "code",
90
- },
91
- {
92
- title: "Brand identity",
93
- description:
94
- "Naming, logo, and visual language for startups that want to stand out from day one.",
95
- icon: "layers",
96
- },
97
- ])}
79
+ {
80
+ title: 'Product design',
81
+ description:
82
+ 'UX research, interaction design, and visual design from concept to delivery.',
83
+ icon: 'pen-tool',
84
+ },
85
+ {
86
+ title: 'Web development',
87
+ description:
88
+ 'Fast, accessible front-ends built with modern tooling and a focus on longevity.',
89
+ icon: 'code',
90
+ },
91
+ {
92
+ title: 'Brand identity',
93
+ description:
94
+ 'Naming, logo, and visual language for startups that want to stand out from day one.',
95
+ icon: 'layers',
96
+ },
97
+ ])}
98
98
  ></grantcodes-feature-list>
99
99
 
100
100
  <grantcodes-media-text
101
101
  title="We start by understanding the problem, not the brief"
102
102
  text="Before we open Figma, we spend time with your users, your data, and your team. Good design solves real problems — that only happens when we deeply understand the context. Our discovery phase isn't a box-ticking exercise; it's where the real work starts."
103
- media=${JSON.stringify({ src: "https://placehold.co/640x480?text=Discovery+Workshop", alt: "A team working through a discovery workshop on a whiteboard", kind: "image" })}
104
- cta=${JSON.stringify({ label: "Our process", href: "/process" })}
103
+ media=${JSON.stringify({ src: 'https://placehold.co/640x480?text=Discovery+Workshop', alt: 'A team working through a discovery workshop on a whiteboard', kind: 'image' })}
104
+ cta=${JSON.stringify({ label: 'Our process', href: '/process' })}
105
105
  ></grantcodes-media-text>
106
106
 
107
107
  <grantcodes-media-text
108
108
  title="Design and engineering working side by side"
109
109
  text="We don't throw designs over a wall. Our designers and engineers work in the same room (or the same Slack channel) from day one. That means fewer surprises, faster iteration, and a product that actually looks like the designs."
110
- media=${JSON.stringify({ src: "https://placehold.co/640x480?text=Design+%26+Eng", alt: "Designers and engineers collaborating on a project", kind: "image" })}
111
- cta=${JSON.stringify({ label: "How we work", href: "/about" })}
110
+ media=${JSON.stringify({ src: 'https://placehold.co/640x480?text=Design+%26+Eng', alt: 'Designers and engineers collaborating on a project', kind: 'image' })}
111
+ cta=${JSON.stringify({ label: 'How we work', href: '/about' })}
112
112
  reverse
113
113
  ></grantcodes-media-text>
114
114
 
115
115
  <grantcodes-media-text
116
116
  title="We ship, then we stick around"
117
117
  text="Launch is not the finish line. We offer ongoing retainers for teams who want a trusted design and engineering partner after go-live — whether that's iterating on feedback, scaling the product, or training your internal team."
118
- media=${JSON.stringify({ src: "https://placehold.co/640x480?text=Ongoing+Support", alt: "A chart showing continuous product iteration over time", kind: "image" })}
119
- cta=${JSON.stringify({ label: "Engagement options", href: "/services" })}
118
+ media=${JSON.stringify({ src: 'https://placehold.co/640x480?text=Ongoing+Support', alt: 'A chart showing continuous product iteration over time', kind: 'image' })}
119
+ cta=${JSON.stringify({ label: 'Engagement options', href: '/services' })}
120
120
  ></grantcodes-media-text>
121
121
 
122
122
  <grantcodes-testimonials
123
123
  title="From our clients"
124
124
  layout="list"
125
125
  items=${JSON.stringify([
126
- {
127
- quote:
128
- "Studio North turned a very messy brief into a product that exceeded what we imagined. They pushed back in the right places and delivered something genuinely special.",
129
- name: "Leo Hartmann",
130
- role: "Founder",
131
- company: "Archvault",
132
- avatar: "https://i.pravatar.cc/80?img=53",
133
- },
134
- {
135
- quote:
136
- "Their process is tight. We always knew what was happening, what was coming next, and why. That clarity is rare in agency relationships.",
137
- name: "Chloe Bergstrom",
138
- role: "VP Product",
139
- company: "Meridian Health",
140
- avatar: "https://i.pravatar.cc/80?img=25",
141
- },
142
- ])}
126
+ {
127
+ quote:
128
+ 'Studio North turned a very messy brief into a product that exceeded what we imagined. They pushed back in the right places and delivered something genuinely special.',
129
+ name: 'Leo Hartmann',
130
+ role: 'Founder',
131
+ company: 'Archvault',
132
+ avatar: 'https://i.pravatar.cc/80?img=53',
133
+ },
134
+ {
135
+ quote:
136
+ 'Their process is tight. We always knew what was happening, what was coming next, and why. That clarity is rare in agency relationships.',
137
+ name: 'Chloe Bergstrom',
138
+ role: 'VP Product',
139
+ company: 'Meridian Health',
140
+ avatar: 'https://i.pravatar.cc/80?img=25',
141
+ },
142
+ ])}
143
143
  ></grantcodes-testimonials>
144
144
 
145
145
  <grantcodes-cta
146
146
  eyebrow="Let's talk"
147
147
  title="Have a project in mind?"
148
148
  text="We take on a small number of projects each quarter so we can give each one the attention it deserves. If you're building something meaningful, we'd love to hear about it."
149
- primary-action=${JSON.stringify({ label: "Start a conversation", href: "/contact" })}
150
- secondary-action=${JSON.stringify({ label: "See case studies", href: "/work" })}
149
+ primary-action=${JSON.stringify({ label: 'Start a conversation', href: '/contact' })}
150
+ secondary-action=${JSON.stringify({ label: 'See case studies', href: '/work' })}
151
151
  align="center"
152
152
  ></grantcodes-cta>
153
153
 
@@ -1,55 +1,55 @@
1
- import { html } from "lit";
2
- import "../components/app-bar/app-bar.js";
3
- import "../components/app-bar/nav-link.js";
4
- import "../components/button/button.js";
5
- import "../components/breadcrumb/breadcrumb.js";
6
- import "../components/container/container.js";
7
- import "../components/badge/badge.js";
8
- import "../components/person/person.js";
9
- import "../components/card/card.js";
10
- import "../components/cta/cta.js";
11
- import "../components/footer/footer.js";
1
+ import { html } from 'lit';
2
+ import '../components/app-bar/app-bar.js';
3
+ import '../components/app-bar/nav-link.js';
4
+ import '../components/button/button.js';
5
+ import '../components/breadcrumb/breadcrumb.js';
6
+ import '../components/container/container.js';
7
+ import '../components/badge/badge.js';
8
+ import '../components/person/person.js';
9
+ import '../components/card/card.js';
10
+ import '../components/cta/cta.js';
11
+ import '../components/footer/footer.js';
12
12
 
13
13
  const meta = {
14
- title: "Pages/Blog Post",
15
- parameters: {
16
- layout: "fullscreen",
17
- },
14
+ title: 'Pages/Blog Post',
15
+ parameters: {
16
+ layout: 'fullscreen',
17
+ },
18
18
  };
19
19
 
20
20
  export default meta;
21
21
 
22
22
  const relatedPosts = [
23
- {
24
- category: "Engineering",
25
- title: "How we cut our build times by 60% with better caching",
26
- excerpt:
27
- "A deep dive into the caching strategies we adopted across our CI pipeline and how they compound over time.",
28
- author: { name: "Priya Nair", avatar: "https://i.pravatar.cc/80?img=32" },
29
- date: "Feb 28, 2025",
30
- href: "/blog/build-cache",
31
- },
32
- {
33
- category: "Design",
34
- title: "Writing design tokens that scale across themes",
35
- excerpt:
36
- "Tokens are only as good as the naming conventions behind them. Here's what we learned from three rewrites.",
37
- author: { name: "Leo Hartmann", avatar: "https://i.pravatar.cc/80?img=53" },
38
- date: "Feb 14, 2025",
39
- href: "/blog/design-tokens",
40
- },
41
- {
42
- category: "Culture",
43
- title: "Small teams ship better software — here's why",
44
- excerpt:
45
- "Coordination cost grows faster than headcount. We explore the research and what it means for how we hire.",
46
- author: {
47
- name: "Chloe Bergstrom",
48
- avatar: "https://i.pravatar.cc/80?img=25",
49
- },
50
- date: "Jan 30, 2025",
51
- href: "/blog/small-teams",
52
- },
23
+ {
24
+ category: 'Engineering',
25
+ title: 'How we cut our build times by 60% with better caching',
26
+ excerpt:
27
+ 'A deep dive into the caching strategies we adopted across our CI pipeline and how they compound over time.',
28
+ author: { name: 'Priya Nair', avatar: 'https://i.pravatar.cc/80?img=32' },
29
+ date: 'Feb 28, 2025',
30
+ href: '/blog/build-cache',
31
+ },
32
+ {
33
+ category: 'Design',
34
+ title: 'Writing design tokens that scale across themes',
35
+ excerpt:
36
+ "Tokens are only as good as the naming conventions behind them. Here's what we learned from three rewrites.",
37
+ author: { name: 'Leo Hartmann', avatar: 'https://i.pravatar.cc/80?img=53' },
38
+ date: 'Feb 14, 2025',
39
+ href: '/blog/design-tokens',
40
+ },
41
+ {
42
+ category: 'Culture',
43
+ title: "Small teams ship better software — here's why",
44
+ excerpt:
45
+ 'Coordination cost grows faster than headcount. We explore the research and what it means for how we hire.',
46
+ author: {
47
+ name: 'Chloe Bergstrom',
48
+ avatar: 'https://i.pravatar.cc/80?img=25',
49
+ },
50
+ date: 'Jan 30, 2025',
51
+ href: '/blog/small-teams',
52
+ },
53
53
  ];
54
54
 
55
55
  const footerContent = html`
@@ -84,7 +84,7 @@ const footerContent = html`
84
84
  * cards for related posts at the bottom.
85
85
  */
86
86
  export const Default = {
87
- render: () => html`
87
+ render: () => html`
88
88
  <grantcodes-app-bar sticky>
89
89
  <a
90
90
  slot="logo"
@@ -264,7 +264,7 @@ export const Default = {
264
264
  <h2>More from the blog</h2>
265
265
  <div style="display: grid; grid-template-columns: repeat(auto-fill, minmax(18rem, 1fr)); gap: var(--g-spacing-lg);">
266
266
  ${relatedPosts.map(
267
- (post) => html`
267
+ (post) => html`
268
268
  <grantcodes-card>
269
269
  <div
270
270
  slot="header"
@@ -301,7 +301,7 @@ export const Default = {
301
301
  </div>
302
302
  </grantcodes-card>
303
303
  `,
304
- )}
304
+ )}
305
305
  </div>
306
306
  </grantcodes-container>
307
307
  </div>