Skip to content

Commit c0d4441

Browse files
committed
Refactor Download CTA to use Button component, update stylings
1 parent efd0cba commit c0d4441

5 files changed

Lines changed: 72 additions & 61 deletions

File tree

‎src/components/Button/server/index.ts‎

Lines changed: 31 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,12 @@
1-
export type ButtonVariant = 'primary' | 'secondary' | 'twitter' | 'success' | 'warning' | 'spotlight' | 'icon'
1+
export type ButtonVariant =
2+
| 'primary'
3+
| 'secondary'
4+
| 'twitter'
5+
| 'success'
6+
| 'success-offset'
7+
| 'warning'
8+
| 'spotlight'
9+
| 'icon'
210
export type ButtonSize = 'small' | 'medium' | 'large'
311
export type ButtonType = 'button' | 'submit' | 'reset'
412
export type IconPosition = 'left' | 'right' | 'only'
@@ -34,14 +42,11 @@ function addClassNames(classList: ClassList, classNames: string) {
3442

3543
const baseButtonClasses =
3644
'inline-flex items-center justify-center text-center align-middle whitespace-nowrap select-none ' +
37-
'no-underline ' +
38-
'relative focus-visible:outline-none ' +
39-
"after:pointer-events-none after:absolute after:content-[''] after:inset-0 after:rounded-none after:border-2 after:border-transparent after:opacity-0 after:transition-opacity after:duration-150 after:ease-out " +
40-
'focus-visible:after:opacity-100 focus-visible:after:[inset:-6px] focus-visible:after:border-spotlight ' +
45+
'no-underline hover:no-underline focus:no-underline focus-visible:no-underline decoration-transparent ' +
46+
'focus:outline-none focus-visible:outline-2 focus-visible:outline-spotlight focus-visible:outline-offset-2 focus-visible:rounded-none ' +
4147
'border-2 border-solid border-transparent rounded-md ' +
4248
'font-bold uppercase tracking-[0.08em] ' +
4349
'text-sm leading-5 ' +
44-
'[box-shadow:var(--shadow-sm)] [text-shadow:var(--shadow-text)] ' +
4550
'transition-[color,background-color,border-color,box-shadow,transform] duration-200 ease-in-out ' +
4651
'disabled:cursor-not-allowed disabled:opacity-[0.65] disabled:pointer-events-none ' +
4752
'aria-disabled:cursor-not-allowed aria-disabled:opacity-[0.65] aria-disabled:pointer-events-none'
@@ -58,30 +63,35 @@ const sizeClasses: Record<ButtonSize, string> = {
5863
const variantClasses: Record<ButtonVariant, string> = {
5964
primary:
6065
'bg-primary text-content ' +
61-
'hover:bg-primary-offset hover:[box-shadow:var(--shadow-hover)] hover:-translate-y-px ' +
62-
'focus-visible:bg-primary-offset focus-visible:[box-shadow:var(--shadow-hover)] focus-visible:-translate-y-px ' +
63-
'active:bg-primary-offset active:[box-shadow:var(--shadow-active)] active:translate-y-px',
66+
'hover:bg-primary-offset hover:[box-shadow:var(--shadow-hover)] ' +
67+
'focus-visible:bg-primary-offset focus-visible:[box-shadow:var(--shadow-hover)] ' +
68+
'active:bg-primary-offset active:[box-shadow:var(--shadow-active)]',
6469
secondary:
6570
'bg-secondary text-content ' +
66-
'hover:bg-secondary-offset hover:[box-shadow:var(--shadow-hover)] hover:-translate-y-px ' +
67-
'focus-visible:bg-secondary-offset focus-visible:[box-shadow:var(--shadow-hover)] focus-visible:-translate-y-px ' +
68-
'active:bg-secondary-offset active:[box-shadow:var(--shadow-active)] active:translate-y-px',
71+
'hover:bg-secondary-offset hover:[box-shadow:var(--shadow-hover)] ' +
72+
'focus-visible:bg-secondary-offset focus-visible:[box-shadow:var(--shadow-hover)] ' +
73+
'active:bg-secondary-offset active:[box-shadow:var(--shadow-active)]',
6974
twitter: 'bg-x border-x text-content hover:bg-transparent hover:text-x focus-visible:bg-transparent focus-visible:text-x',
7075
success:
7176
'bg-success text-white ' +
72-
'hover:bg-success-offset hover:[box-shadow:var(--shadow-hover)] hover:-translate-y-px ' +
73-
'focus-visible:bg-success-offset focus-visible:[box-shadow:var(--shadow-hover)] focus-visible:-translate-y-px ' +
74-
'active:bg-success-offset active:[box-shadow:var(--shadow-active)] active:translate-y-px',
77+
'hover:bg-success-offset hover:[box-shadow:var(--shadow-hover)] ' +
78+
'focus-visible:bg-success-offset focus-visible:[box-shadow:var(--shadow-hover)] ' +
79+
'active:bg-success-offset active:[box-shadow:var(--shadow-active)]',
80+
'success-offset':
81+
'bg-success-offset text-content-inverse ' +
82+
'hover:bg-success hover:[box-shadow:var(--shadow-hover)] ' +
83+
'focus-visible:bg-success focus-visible:[box-shadow:var(--shadow-hover)] ' +
84+
'active:bg-success active:[box-shadow:var(--shadow-active)]',
7585
warning:
7686
'bg-warning text-content ' +
77-
'hover:bg-warning-offset hover:[box-shadow:var(--shadow-hover)] hover:-translate-y-px ' +
78-
'focus-visible:bg-warning-offset focus-visible:[box-shadow:var(--shadow-hover)] focus-visible:-translate-y-px ' +
79-
'active:bg-warning-offset active:[box-shadow:var(--shadow-active)] active:translate-y-px',
87+
'hover:bg-warning-offset hover:[box-shadow:var(--shadow-hover)] ' +
88+
'focus-visible:bg-warning-offset focus-visible:[box-shadow:var(--shadow-hover)] ' +
89+
'active:bg-warning-offset active:[box-shadow:var(--shadow-active)]',
8090
spotlight:
8191
'bg-spotlight text-black ' +
82-
'hover:bg-spotlight-offset hover:[box-shadow:var(--shadow-hover)] hover:-translate-y-px ' +
83-
'focus-visible:bg-spotlight-offset focus-visible:[box-shadow:var(--shadow-hover)] focus-visible:-translate-y-px ' +
84-
'active:bg-spotlight-offset active:[box-shadow:var(--shadow-active)] active:translate-y-px',
92+
'hover:bg-spotlight-offset hover:[box-shadow:var(--shadow-hover)] ' +
93+
'focus-visible:bg-spotlight-offset focus-visible:[box-shadow:var(--shadow-hover)] ' +
94+
'active:bg-spotlight-offset active:[box-shadow:var(--shadow-active)]',
8595
icon:
8696
'aspect-square bg-transparent text-content p-2 ![box-shadow:none] ' +
8797
'hover:bg-page-offset hover:text-primary ' +

‎src/components/CallToAction/Download/index.astro‎

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
* download page, which is implemented by Forms/Download.
55
*/
66
import { BuildError } from '@lib/errors/BuildError'
7+
import Button from '@components/Button/index.astro'
78
import List from '@components/List/index.astro'
89
import Icon from '@components/Icon/index.astro'
910
@@ -74,7 +75,7 @@ const downloadUrl = `/downloads/${normalizedResource}`
7475
</span>
7576
</div>
7677

77-
<h2 id={titleId} class="text-2xl md:text-3xl font-bold text-content mb-3">
78+
<h2 id={titleId} class="text-2xl md:text-3xl font-bold text-primary-offset mb-3">
7879
{title}
7980
</h2>
8081
<p id={descriptionId} class="text-base text-content-offset mb-6 max-w-xl">
@@ -99,37 +100,38 @@ const downloadUrl = `/downloads/${normalizedResource}`
99100
<Icon
100101
icon={"document"}
101102
size={8}
102-
color={"secondary"}
103+
color={"primary-offset"}
103104
/>
104105
</div>
105-
<p class="text-xs text-content-offset">Free resource · Instant access</p>
106+
<p class="text-xs text-content">Free resource · Instant access</p>
106107
</div>
107108

108109
<div class="space-y-3">
109-
<a
110+
<Button
110111
href={downloadUrl}
111-
class="w-full inline-flex items-center justify-center gap-2 px-6 py-3 bg-spotlight hover:bg-spotlight-offset text-white font-semibold rounded-lg text-sm transition-colors no-underline hover:no-underline focus:no-underline focus-visible:no-underline decoration-transparent hover:decoration-transparent focus:decoration-transparent focus-visible:decoration-transparent"
112+
variant="success-offset"
113+
class="w-full gap-2 px-6 py-3 text-content-inverse"
112114
>
113115
<Icon
114116
icon={"download"}
115117
size={5}
116-
color={"secondary"}
118+
color={"content-inverse"}
117119
/>
118-
{buttonText}
119-
</a>
120+
<span class="mt-1">{buttonText}</span>
121+
</Button>
120122
{
121123
secondaryLink && (
122-
<a
124+
<Button
123125
href={secondaryLink.href}
124-
class="w-full inline-flex items-center justify-center px-6 py-3 border border-trim text-content font-semibold rounded-lg text-sm hover:bg-page-offset transition-colors"
125-
>
126-
{secondaryLink.text}
127-
</a>
126+
variant="secondary"
127+
class="w-full mt-2 px-6 py-3 bg-page-offset text-content-inverse hover:bg-page-offset focus-visible:bg-page-offset"
128+
text={secondaryLink.text}
129+
/>
128130
)
129131
}
130132
</div>
131133

132-
<p class="text-xs text-content-offset text-center mt-4">No credit card required.</p>
134+
<p class="text-xs text-content text-center mt-4">No credit card required.</p>
133135
</div>
134136
</div>
135137
</div>

‎src/components/List/layouts/TwoColumnCheckIconsList.astro‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ export type Props = {
1616
1717
const { items, classes, size }: Props = Astro.props
1818
19-
const ulClass = ["grid grid-cols-1 sm:grid-cols-2 gap-2 text-sm text-content-offset mb-1", classes?.ul]
19+
const ulClass = ["grid grid-cols-1 sm:grid-cols-2 gap-2 text-sm text-content mb-1", classes?.ul]
2020
const liClass = ["flex items-center gap-2", classes?.li]
2121
---
2222

@@ -30,7 +30,7 @@ const liClass = ["flex items-center gap-2", classes?.li]
3030
size={size ?? 5}
3131
/>
3232
<span>
33-
<span class="text-content-offset">{item.text}</span>
33+
<span class="text-content">{item.text}</span>
3434
</span>
3535
</li>
3636
))

‎src/components/Pages/Contact/index.astro‎

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -277,22 +277,24 @@ const { content } = Astro.props
277277
</div>
278278
</div>
279279

280-
<div class="space-y-2 mb-6">
281-
<label
282-
for="timeline"
283-
class="block text-content-active text-sm font-medium"
284-
>
285-
{content.form.project.timeline}
286-
</label>
287-
<select
288-
id="timeline"
289-
name="timeline"
290-
class="w-full px-4 py-3 border-2 border-trim rounded-xl bg-note-inverse/25 focus:border-spotlight focus:ring-0 focus:outline-none focus-visible:border-spotlight focus-visible:outline-2 focus-visible:outline-spotlight focus-visible:outline-offset-2 focus-visible:rounded-none transition-colors duration-200 cursor-pointer"
291-
>
292-
{content.form.project.timelineOptions.map((item) => (
293-
<option value={item.value}>{item.text}</option>
294-
))}
295-
</select>
280+
<div class="grid grid-cols-1 md:grid-cols-2 md:gap-6">
281+
<div class="space-y-2 mb-6">
282+
<label
283+
for="timeline"
284+
class="block text-content-active text-sm font-medium"
285+
>
286+
{content.form.project.timeline}
287+
</label>
288+
<select
289+
id="timeline"
290+
name="timeline"
291+
class="w-full px-4 py-3 border-2 border-trim rounded-xl bg-note-inverse/25 focus:border-spotlight focus:ring-0 focus:outline-none focus-visible:border-spotlight focus-visible:outline-2 focus-visible:outline-spotlight focus-visible:outline-offset-2 focus-visible:rounded-none transition-colors duration-200 cursor-pointer"
292+
>
293+
{content.form.project.timelineOptions.map((item) => (
294+
<option value={item.value}>{item.text}</option>
295+
))}
296+
</select>
297+
</div>
296298
</div>
297299

298300
<div class="space-y-2">

‎src/components/Pages/NotFound/index.astro‎

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
---
2+
import Button from '@components/Button/index.astro'
3+
24
export interface Props {
35
content: {
46
buttonText: string
@@ -9,15 +11,10 @@ const { content } = Astro.props
911
---
1012

1113
<div class="max-w-4xl mx-auto w-full block py-2 md:py-4">
12-
<div class="max-w-lg w-full">
14+
<div class="max-w-lg w-full mx-auto">
1315
<div class="mb-8 text-center">
14-
<div class="space-y-4">
15-
<a
16-
href={"/"}
17-
class="inline-flex items-center justify-center px-6 py-3 border border-transparent text-base font-medium rounded-lg text-white bg-spotlight hover:bg-spotlight-offset focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-primary transition-colors duration-200"
18-
>
19-
{content.buttonText}
20-
</a>
16+
<div class="flex flex-row justify-center items-center w-full">
17+
<Button href="/" variant="secondary" class="text-content-inverse" text={content.buttonText} />
2118
</div>
2219
</div>
2320
</div>

0 commit comments

Comments
 (0)