@grantcodes/ui 2.12.1 → 2.15.2

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 (69) hide show
  1. package/CHANGELOG.md +54 -0
  2. package/README.md +5 -1
  3. package/custom-elements.json +295 -176
  4. package/package.json +11 -3
  5. package/src/components/accordion/accordion-item.css +14 -14
  6. package/src/components/accordion/accordion.css +1 -1
  7. package/src/components/app-bar/app-bar.css +22 -22
  8. package/src/components/app-bar/nav-link.css +10 -11
  9. package/src/components/avatar/avatar.css +5 -6
  10. package/src/components/badge/badge.css +16 -15
  11. package/src/components/breadcrumb/breadcrumb.css +10 -11
  12. package/src/components/button/button.css +112 -24
  13. package/src/components/button/button.stories.js +37 -0
  14. package/src/components/button-group/button-group.css +4 -4
  15. package/src/components/card/card.css +25 -25
  16. package/src/components/code-preview/code-preview.css +6 -6
  17. package/src/components/container/container.css +2 -1
  18. package/src/components/container/container.stories.js +1 -1
  19. package/src/components/countdown/countdown.css +13 -13
  20. package/src/components/cta/cta.component.js +3 -3
  21. package/src/components/cta/cta.css +16 -18
  22. package/src/components/dialog/dialog.css +14 -14
  23. package/src/components/dropdown/dropdown.css +14 -14
  24. package/src/components/dropzone/dropzone.css +11 -12
  25. package/src/components/feature-list/feature-list.css +15 -15
  26. package/src/components/footer/footer-column.css +9 -10
  27. package/src/components/footer/footer.css +13 -13
  28. package/src/components/form-field/form-field.css +6 -6
  29. package/src/components/hero/hero.css +9 -9
  30. package/src/components/loading/loading.css +3 -3
  31. package/src/components/logo-cloud/logo-cloud.css +9 -11
  32. package/src/components/map/map.css +8 -8
  33. package/src/components/media-text/media-text.css +9 -9
  34. package/src/components/newsletter/newsletter.css +21 -21
  35. package/src/components/notice/notice.css +17 -17
  36. package/src/components/person/index.js +1 -0
  37. package/src/components/person/person.component.js +51 -0
  38. package/src/components/person/person.css +39 -0
  39. package/src/components/person/person.js +8 -0
  40. package/src/components/person/person.react.js +9 -0
  41. package/src/components/person/person.stories.js +59 -0
  42. package/src/components/person/person.test.js +69 -0
  43. package/src/components/pricing/pricing.css +34 -36
  44. package/src/components/sidebar/sidebar.css +21 -21
  45. package/src/components/stats/stats.css +14 -16
  46. package/src/components/tabs/internal/tabs-item.component.js +5 -0
  47. package/src/components/tabs/tabs.component.js +4 -2
  48. package/src/components/tabs/tabs.css +15 -15
  49. package/src/components/testimonials/testimonials.component.js +8 -22
  50. package/src/components/testimonials/testimonials.css +12 -31
  51. package/src/components/toast/toast.css +23 -24
  52. package/src/components/tooltip/tooltip.css +6 -6
  53. package/src/css/colors.stories.js +6 -6
  54. package/src/css/elements/a.css +4 -4
  55. package/src/css/elements/forms/input.css +27 -27
  56. package/src/css/elements/forms/label.css +1 -1
  57. package/src/css/elements/media/image.css +1 -0
  58. package/src/css/layers.stories.js +3 -3
  59. package/src/css/reset.css +3 -3
  60. package/src/css/themes/todomap.css +1 -1
  61. package/src/css/tokens.stories.js +16 -16
  62. package/src/css/typography.css +4 -4
  63. package/src/css/util/focus-ring.css +9 -9
  64. package/src/lib/styles/focus-ring.css +9 -9
  65. package/src/main.js +1 -0
  66. package/src/pages/agency.stories.js +5 -4
  67. package/src/pages/blog-post.stories.js +33 -50
  68. package/src/pages/saas-landing.stories.js +8 -7
  69. package/src/react.js +1 -0
@@ -5,7 +5,7 @@ import "../components/button/button.js";
5
5
  import "../components/breadcrumb/breadcrumb.js";
6
6
  import "../components/container/container.js";
7
7
  import "../components/badge/badge.js";
8
- import "../components/avatar/avatar.js";
8
+ import "../components/person/person.js";
9
9
  import "../components/card/card.js";
10
10
  import "../components/cta/cta.js";
11
11
  import "../components/footer/footer.js";
@@ -80,7 +80,7 @@ const footerContent = html`
80
80
  /**
81
81
  * A full blog post page. Demonstrates a reading-focused layout using the
82
82
  * container component for column width control, breadcrumb for navigation
83
- * context, badge for category tagging, avatar for the author byline, and
83
+ * context, badge for category tagging, person for the author byline, and
84
84
  * cards for related posts at the bottom.
85
85
  */
86
86
  export const Default = {
@@ -108,14 +108,14 @@ export const Default = {
108
108
  <!-- Article header -->
109
109
  <grantcodes-container>
110
110
  <div style="max-inline-size: 48rem; margin-inline: auto;">
111
- <grantcodes-breadcrumb style="margin-block: var(--g-theme-spacing-lg);">
111
+ <grantcodes-breadcrumb style="margin-block: var(--g-spacing-lg);">
112
112
  <grantcodes-breadcrumb-item href="/">Home</grantcodes-breadcrumb-item>
113
113
  <grantcodes-breadcrumb-item href="/blog">Blog</grantcodes-breadcrumb-item>
114
114
  <grantcodes-breadcrumb-item current>Shipping faster with async-first teams</grantcodes-breadcrumb-item>
115
115
  </grantcodes-breadcrumb>
116
116
 
117
117
  <div
118
- style="display: flex; flex-direction: column; gap: var(--g-theme-spacing-md);"
118
+ style="display: flex; flex-direction: column; gap: var(--g-spacing-md);"
119
119
  >
120
120
  <grantcodes-badge variant="primary">Engineering</grantcodes-badge>
121
121
 
@@ -123,31 +123,24 @@ export const Default = {
123
123
  Shipping faster with async-first teams
124
124
  </h1>
125
125
 
126
- <p style="var(--g-theme-typography-body-lg);">
126
+ <p style="var(--g-typography-body-lg);">
127
127
  How we restructured communication to remove the hidden cost of
128
128
  synchronous coordination — and what we shipped as a result.
129
129
  </p>
130
130
 
131
131
  <div
132
- style="display: flex; align-items: center; gap: var(--g-theme-spacing-sm); padding-block: var(--g-theme-spacing-md); border-block: 1px solid var(--g-theme-color-border-default);"
132
+ style="display: flex; align-items: center; gap: var(--g-spacing-sm); padding-block: var(--g-spacing-md); border-block: 1px solid var(--g-color-border-default);"
133
133
  >
134
- <grantcodes-avatar
135
- src="https://i.pravatar.cc/80?img=12"
134
+ <grantcodes-person
136
135
  name="Sam Torres"
136
+ avatar="https://i.pravatar.cc/80?img=12"
137
137
  size="small"
138
- ></grantcodes-avatar>
139
- <div>
140
- <p
141
- style="margin: 0; font-weight: var(--g-typography-font-weight-600); color: var(--g-theme-color-content-default); font-size: var(--g-theme-typography-label-font-size);"
142
- >
143
- Sam Torres
144
- </p>
145
- <p
146
- style="margin: 0; color: var(--g-theme-color-content-subtle); font-size: var(--g-theme-typography-meta-font-size);"
147
- >
148
- March 12, 2025 · 8 min read
149
- </p>
150
- </div>
138
+ ></grantcodes-person>
139
+ <span
140
+ style="color: var(--g-color-content-subtle); font-size: var(--g-typography-font-size-xs);"
141
+ >
142
+ March 12, 2025 · 8 min read
143
+ </span>
151
144
  </div>
152
145
  </div>
153
146
  </div>
@@ -158,14 +151,14 @@ export const Default = {
158
151
  <img
159
152
  src="https://placehold.co/1200x500?text=Featured+Image"
160
153
  alt="An abstract illustration of async communication flows"
161
- style="display: block; width: 100%; height: auto; border-radius: var(--g-theme-border-radius-md);"
154
+ style="display: block; width: 100%; height: auto; border-radius: var(--g-border-radius-md);"
162
155
  />
163
156
  </grantcodes-container>
164
157
 
165
158
  <!-- Article body -->
166
159
  <grantcodes-container
167
160
  align="prose"
168
- style="padding-block-end: var(--g-theme-spacing-2xl);"
161
+ style="padding-block-end: var(--g-spacing-2xl);"
169
162
  >
170
163
  <article>
171
164
  <p>
@@ -249,33 +242,27 @@ export const Default = {
249
242
  </p>
250
243
 
251
244
  <div
252
- style="margin-block-start: var(--g-theme-spacing-xl); padding: var(--g-theme-spacing-md); background: var(--g-theme-color-background-subtle); border-radius: var(--g-theme-border-radius-md); display: flex; align-items: center; gap: var(--g-theme-spacing-md);"
245
+ style="margin-block-start: var(--g-spacing-xl); padding: var(--g-spacing-md); background: var(--g-color-background-subtle); border-radius: var(--g-border-radius-md);"
253
246
  >
254
- <grantcodes-avatar
255
- src="https://i.pravatar.cc/80?img=12"
247
+ <grantcodes-person
256
248
  name="Sam Torres"
249
+ avatar="https://i.pravatar.cc/80?img=12"
257
250
  size="medium"
258
- ></grantcodes-avatar>
259
- <div>
260
- <p
261
- style="margin: 0; font-weight: var(--g-typography-font-weight-600); color: var(--g-theme-color-content-default);"
251
+ >
252
+ <span slot="description"
253
+ >CTO at Flowbase. Writes about engineering culture, distributed
254
+ teams, and systems thinking.</span
262
255
  >
263
- Sam Torres
264
- </p>
265
- <p style="font: var(--g-theme-typography-meta);">
266
- CTO at Flowbase. Writes about engineering culture, distributed
267
- teams, and systems thinking.
268
- </p>
269
- </div>
256
+ </grantcodes-person>
270
257
  </div>
271
258
  </article>
272
259
  </grantcodes-container>
273
260
 
274
261
  <!-- Related posts -->
275
- <div style="padding-block: var(--g-theme-spacing-2xl);">
262
+ <div style="padding-block: var(--g-spacing-2xl);">
276
263
  <grantcodes-container>
277
264
  <h2>More from the blog</h2>
278
- <div style="display: grid; grid-template-columns: repeat(auto-fill, minmax(18rem, 1fr)); gap: var(--g-theme-spacing-lg);">
265
+ <div style="display: grid; grid-template-columns: repeat(auto-fill, minmax(18rem, 1fr)); gap: var(--g-spacing-lg);">
279
266
  ${relatedPosts.map(
280
267
  (post) => html`
281
268
  <grantcodes-card>
@@ -284,10 +271,10 @@ export const Default = {
284
271
  style="display: flex; align-items: center; justify-content: space-between;"
285
272
  >
286
273
  <grantcodes-badge variant="neutral">${post.category}</grantcodes-badge>
287
- <span style="font: var(--g-theme-typography-meta);">${post.date}</span>
274
+ <span style="font: var(--g-typography-body-sm-font);">${post.date}</span>
288
275
  </div>
289
276
  <div
290
- style="display: flex; flex-direction: column; gap: var(--g-theme-spacing-sm); flex: 1;"
277
+ style="display: flex; flex-direction: column; gap: var(--g-spacing-sm); flex: 1;"
291
278
  >
292
279
  <h3
293
280
  style="font: var(--g-typography-h6-font);"
@@ -304,17 +291,13 @@ export const Default = {
304
291
  </div>
305
292
  <div
306
293
  slot="footer"
307
- style="display: flex; align-items: center; gap: var(--g-theme-spacing-sm);"
294
+ style="display: flex; align-items: center; gap: var(--g-spacing-sm);"
308
295
  >
309
- <grantcodes-avatar
310
- src="${post.author.avatar}"
296
+ <grantcodes-person
311
297
  name="${post.author.name}"
298
+ avatar="${post.author.avatar}"
312
299
  size="small"
313
- ></grantcodes-avatar>
314
- <span
315
- style="font: var(--g-theme-typography-meta);"
316
- >${post.author.name}</span
317
- >
300
+ ></grantcodes-person>
318
301
  </div>
319
302
  </grantcodes-card>
320
303
  `,
@@ -330,7 +313,7 @@ export const Default = {
330
313
  <div slot="bottom">
331
314
  <p>&copy; 2025 Flowbase, Inc. All rights reserved.</p>
332
315
  </div>
333
- <div slot="bottom" style="display: flex; gap: var(--g-theme-spacing-md);">
316
+ <div slot="bottom" style="display: flex; gap: var(--g-spacing-md);">
334
317
  <a href="/privacy">Privacy</a>
335
318
  <a href="/terms">Terms</a>
336
319
  </div>
@@ -1,5 +1,6 @@
1
1
  import { html } from "lit";
2
2
  import "../components/app-bar/app-bar.js";
3
+ import "../components/app-bar/nav-link.js";
3
4
  import "../components/button/button.js";
4
5
  import "../components/hero/hero.js";
5
6
  import "../components/logo-cloud/logo-cloud.js";
@@ -20,10 +21,10 @@ const meta = {
20
21
  export default meta;
21
22
 
22
23
  const navLinks = html`
23
- <a href="/">Home</a>
24
- <a href="/features">Features</a>
25
- <a href="/pricing">Pricing</a>
26
- <a href="/about">About</a>
24
+ <grantcodes-nav-link><a href="/">Home</a></grantcodes-nav-link>
25
+ <grantcodes-nav-link><a href="/features">Features</a></grantcodes-nav-link>
26
+ <grantcodes-nav-link><a href="/pricing">Pricing</a></grantcodes-nav-link>
27
+ <grantcodes-nav-link><a href="/about">About</a></grantcodes-nav-link>
27
28
  `;
28
29
 
29
30
  const footerContent = html`
@@ -252,7 +253,7 @@ export const Default = {
252
253
  {
253
254
  name: "Team",
254
255
  price: "$49",
255
- period: "/ month",
256
+ period: "month",
256
257
  description: "For growing teams that need to move fast.",
257
258
  features: [
258
259
  { text: "Up to 20 team members", included: true },
@@ -268,7 +269,7 @@ export const Default = {
268
269
  {
269
270
  name: "Enterprise",
270
271
  price: "$149",
271
- period: "/ month",
272
+ period: "month",
272
273
  description: "For large teams with advanced security needs.",
273
274
  features: [
274
275
  { text: "Unlimited team members", included: true },
@@ -297,7 +298,7 @@ export const Default = {
297
298
  <div slot="bottom">
298
299
  <p>&copy; 2025 Flowbase, Inc. All rights reserved.</p>
299
300
  </div>
300
- <div slot="bottom" style="display: flex; gap: var(--g-theme-spacing-md);">
301
+ <div slot="bottom" style="display: flex; gap: var(--g-spacing-md);">
301
302
  <a href="/privacy">Privacy</a>
302
303
  <a href="/terms">Terms</a>
303
304
  <a href="/security">Security</a>
package/src/react.js CHANGED
@@ -34,6 +34,7 @@ export { MediaText } from "./components/media-text/media-text.react.js";
34
34
  export { Newsletter } from "./components/newsletter/newsletter.react.js";
35
35
  export { Notice } from "./components/notice/notice.react.js";
36
36
  export { Pagination } from "./components/pagination/pagination.react.js";
37
+ export { Person } from "./components/person/person.react.js";
37
38
  export { Pricing } from "./components/pricing/pricing.react.js";
38
39
  export { Sidebar } from "./components/sidebar/sidebar.react.js";
39
40
  export { Stats } from "./components/stats/stats.react.js";