@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.
- package/CHANGELOG.md +54 -0
- package/README.md +5 -1
- package/custom-elements.json +295 -176
- package/package.json +11 -3
- package/src/components/accordion/accordion-item.css +14 -14
- package/src/components/accordion/accordion.css +1 -1
- package/src/components/app-bar/app-bar.css +22 -22
- package/src/components/app-bar/nav-link.css +10 -11
- package/src/components/avatar/avatar.css +5 -6
- package/src/components/badge/badge.css +16 -15
- package/src/components/breadcrumb/breadcrumb.css +10 -11
- package/src/components/button/button.css +112 -24
- package/src/components/button/button.stories.js +37 -0
- package/src/components/button-group/button-group.css +4 -4
- package/src/components/card/card.css +25 -25
- package/src/components/code-preview/code-preview.css +6 -6
- package/src/components/container/container.css +2 -1
- package/src/components/container/container.stories.js +1 -1
- package/src/components/countdown/countdown.css +13 -13
- package/src/components/cta/cta.component.js +3 -3
- package/src/components/cta/cta.css +16 -18
- package/src/components/dialog/dialog.css +14 -14
- package/src/components/dropdown/dropdown.css +14 -14
- package/src/components/dropzone/dropzone.css +11 -12
- package/src/components/feature-list/feature-list.css +15 -15
- package/src/components/footer/footer-column.css +9 -10
- package/src/components/footer/footer.css +13 -13
- package/src/components/form-field/form-field.css +6 -6
- package/src/components/hero/hero.css +9 -9
- package/src/components/loading/loading.css +3 -3
- package/src/components/logo-cloud/logo-cloud.css +9 -11
- package/src/components/map/map.css +8 -8
- package/src/components/media-text/media-text.css +9 -9
- package/src/components/newsletter/newsletter.css +21 -21
- package/src/components/notice/notice.css +17 -17
- package/src/components/person/index.js +1 -0
- package/src/components/person/person.component.js +51 -0
- package/src/components/person/person.css +39 -0
- package/src/components/person/person.js +8 -0
- package/src/components/person/person.react.js +9 -0
- package/src/components/person/person.stories.js +59 -0
- package/src/components/person/person.test.js +69 -0
- package/src/components/pricing/pricing.css +34 -36
- package/src/components/sidebar/sidebar.css +21 -21
- package/src/components/stats/stats.css +14 -16
- package/src/components/tabs/internal/tabs-item.component.js +5 -0
- package/src/components/tabs/tabs.component.js +4 -2
- package/src/components/tabs/tabs.css +15 -15
- package/src/components/testimonials/testimonials.component.js +8 -22
- package/src/components/testimonials/testimonials.css +12 -31
- package/src/components/toast/toast.css +23 -24
- package/src/components/tooltip/tooltip.css +6 -6
- package/src/css/colors.stories.js +6 -6
- package/src/css/elements/a.css +4 -4
- package/src/css/elements/forms/input.css +27 -27
- package/src/css/elements/forms/label.css +1 -1
- package/src/css/elements/media/image.css +1 -0
- package/src/css/layers.stories.js +3 -3
- package/src/css/reset.css +3 -3
- package/src/css/themes/todomap.css +1 -1
- package/src/css/tokens.stories.js +16 -16
- package/src/css/typography.css +4 -4
- package/src/css/util/focus-ring.css +9 -9
- package/src/lib/styles/focus-ring.css +9 -9
- package/src/main.js +1 -0
- package/src/pages/agency.stories.js +5 -4
- package/src/pages/blog-post.stories.js +33 -50
- package/src/pages/saas-landing.stories.js +8 -7
- 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/
|
|
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,
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
139
|
-
<
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
251
|
+
>
|
|
252
|
+
<span slot="description"
|
|
253
|
+
>CTO at Flowbase. Writes about engineering culture, distributed
|
|
254
|
+
teams, and systems thinking.</span
|
|
262
255
|
>
|
|
263
|
-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
294
|
+
style="display: flex; align-items: center; gap: var(--g-spacing-sm);"
|
|
308
295
|
>
|
|
309
|
-
<grantcodes-
|
|
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-
|
|
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>© 2025 Flowbase, Inc. All rights reserved.</p>
|
|
332
315
|
</div>
|
|
333
|
-
<div slot="bottom" style="display: flex; gap: var(--g-
|
|
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: "
|
|
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: "
|
|
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>© 2025 Flowbase, Inc. All rights reserved.</p>
|
|
299
300
|
</div>
|
|
300
|
-
<div slot="bottom" style="display: flex; gap: var(--g-
|
|
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";
|