mirror of
https://github.com/dsoaress/link-free.git
synced 2026-08-16 22:46:04 +01:00
feat: add base styles
This commit is contained in:
13
src/components/Button/index.tsx
Normal file
13
src/components/Button/index.tsx
Normal file
@@ -0,0 +1,13 @@
|
||||
import { VariantProps } from '@stitches/react'
|
||||
import { ButtonHTMLAttributes, ReactNode } from 'react'
|
||||
|
||||
import { Wrapper } from './styles'
|
||||
|
||||
type ButtonProps = VariantProps<typeof Wrapper> &
|
||||
ButtonHTMLAttributes<HTMLButtonElement> & {
|
||||
children: ReactNode
|
||||
}
|
||||
|
||||
export function Button({ children, ...rest }: ButtonProps) {
|
||||
return <Wrapper {...rest}>{children}</Wrapper>
|
||||
}
|
||||
214
src/components/Button/styles.ts
Normal file
214
src/components/Button/styles.ts
Normal file
@@ -0,0 +1,214 @@
|
||||
import { styled, theme } from '../../styles/stitches.config'
|
||||
|
||||
type Color = keyof typeof theme.colors
|
||||
|
||||
const colorVariantFn = (
|
||||
lightColor: Color,
|
||||
regularColor: Color,
|
||||
darkColor: Color,
|
||||
darkerColor: Color
|
||||
) => ({
|
||||
background: theme.colors[regularColor],
|
||||
borderColor: theme.colors[regularColor],
|
||||
color: theme.colors[lightColor],
|
||||
|
||||
'&:hover': {
|
||||
background: theme.colors[darkColor],
|
||||
borderColor: theme.colors[darkColor]
|
||||
},
|
||||
|
||||
'&:active': {
|
||||
background: theme.colors[darkerColor],
|
||||
borderColor: theme.colors[darkerColor]
|
||||
}
|
||||
})
|
||||
|
||||
const outlineVariantFn = (lightColor: Color, regularColor: Color, darkColor: Color) => ({
|
||||
color: theme.colors[darkColor],
|
||||
|
||||
'&:hover': {
|
||||
background: theme.colors[lightColor]
|
||||
},
|
||||
|
||||
'&:active': {
|
||||
background: theme.colors[regularColor]
|
||||
}
|
||||
})
|
||||
|
||||
export const Wrapper = styled('button', {
|
||||
display: 'flex',
|
||||
alignItems: 'center',
|
||||
justifyContent: 'center',
|
||||
width: '100%',
|
||||
height: '3rem',
|
||||
borderWidth: '2.5px',
|
||||
borderStyle: 'solid',
|
||||
fontSize: '1rem',
|
||||
fontWeight: 'bold',
|
||||
cursor: 'pointer',
|
||||
transition: 'all 0.25s ease-in-out',
|
||||
|
||||
'&:hover': {
|
||||
transform: 'translateY(-0.15rem)'
|
||||
},
|
||||
|
||||
variants: {
|
||||
color: {
|
||||
slate: colorVariantFn('slate50', 'slate600', 'slate700', 'slate800'),
|
||||
gray: colorVariantFn('gray50', 'gray600', 'gray700', 'gray800'),
|
||||
zinc: colorVariantFn('zinc50', 'zinc600', 'zinc700', 'zinc800'),
|
||||
neutral: colorVariantFn('neutral50', 'neutral600', 'neutral700', 'neutral800'),
|
||||
stone: colorVariantFn('stone50', 'stone600', 'stone700', 'stone800'),
|
||||
red: colorVariantFn('red50', 'red600', 'red700', 'red800'),
|
||||
orange: colorVariantFn('orange50', 'orange600', 'orange700', 'orange800'),
|
||||
amber: colorVariantFn('amber50', 'amber600', 'amber700', 'amber800'),
|
||||
yellow: colorVariantFn('yellow50', 'yellow600', 'yellow700', 'yellow800'),
|
||||
lime: colorVariantFn('lime50', 'lime600', 'lime700', 'lime800'),
|
||||
green: colorVariantFn('green50', 'green600', 'green700', 'green800'),
|
||||
emerald: colorVariantFn('emerald50', 'emerald600', 'emerald700', 'emerald800'),
|
||||
teal: colorVariantFn('teal50', 'teal600', 'teal700', 'teal800'),
|
||||
cyan: colorVariantFn('cyan50', 'cyan600', 'cyan700', 'cyan800'),
|
||||
sky: colorVariantFn('sky50', 'sky600', 'sky700', 'sky800'),
|
||||
blue: colorVariantFn('blue50', 'blue600', 'blue700', 'blue800'),
|
||||
indigo: colorVariantFn('indigo50', 'indigo600', 'indigo700', 'indigo800'),
|
||||
violet: colorVariantFn('violet50', 'violet600', 'violet700', 'violet800'),
|
||||
purple: colorVariantFn('purple50', 'purple600', 'purple700', 'purple800'),
|
||||
fuchsia: colorVariantFn('fuchsia50', 'fuchsia600', 'fuchsia700', 'fuchsia800'),
|
||||
pink: colorVariantFn('pink50', 'pink600', 'pink700', 'pink800'),
|
||||
rose: colorVariantFn('rose50', 'rose600', 'rose700', 'rose800')
|
||||
},
|
||||
|
||||
schema: {
|
||||
square: {
|
||||
borderRadius: '0'
|
||||
},
|
||||
rounded: {
|
||||
borderRadius: '0.5rem'
|
||||
},
|
||||
pill: {
|
||||
borderRadius: '9999px'
|
||||
},
|
||||
outline: {
|
||||
background: 'transparent'
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
compoundVariants: [
|
||||
{
|
||||
color: 'slate',
|
||||
schema: 'outline',
|
||||
css: outlineVariantFn('slate50', 'slate100', 'slate600')
|
||||
},
|
||||
{
|
||||
color: 'gray',
|
||||
schema: 'outline',
|
||||
css: outlineVariantFn('gray50', 'gray100', 'gray600')
|
||||
},
|
||||
{
|
||||
color: 'zinc',
|
||||
schema: 'outline',
|
||||
css: outlineVariantFn('zinc50', 'zinc100', 'zinc600')
|
||||
},
|
||||
{
|
||||
color: 'neutral',
|
||||
schema: 'outline',
|
||||
css: outlineVariantFn('neutral50', 'neutral100', 'neutral600')
|
||||
},
|
||||
{
|
||||
color: 'stone',
|
||||
schema: 'outline',
|
||||
css: outlineVariantFn('stone50', 'stone100', 'stone600')
|
||||
},
|
||||
{
|
||||
color: 'red',
|
||||
schema: 'outline',
|
||||
css: outlineVariantFn('red50', 'red100', 'red600')
|
||||
},
|
||||
{
|
||||
color: 'orange',
|
||||
schema: 'outline',
|
||||
css: outlineVariantFn('orange50', 'orange100', 'orange600')
|
||||
},
|
||||
{
|
||||
color: 'amber',
|
||||
schema: 'outline',
|
||||
css: outlineVariantFn('amber50', 'amber100', 'amber600')
|
||||
},
|
||||
{
|
||||
color: 'yellow',
|
||||
schema: 'outline',
|
||||
css: outlineVariantFn('yellow50', 'yellow100', 'yellow600')
|
||||
},
|
||||
{
|
||||
color: 'lime',
|
||||
schema: 'outline',
|
||||
css: outlineVariantFn('lime50', 'lime100', 'lime600')
|
||||
},
|
||||
{
|
||||
color: 'green',
|
||||
schema: 'outline',
|
||||
css: outlineVariantFn('green50', 'green100', 'green600')
|
||||
},
|
||||
{
|
||||
color: 'emerald',
|
||||
schema: 'outline',
|
||||
css: outlineVariantFn('emerald50', 'emerald100', 'emerald600')
|
||||
},
|
||||
{
|
||||
color: 'teal',
|
||||
schema: 'outline',
|
||||
css: outlineVariantFn('teal50', 'teal100', 'teal600')
|
||||
},
|
||||
{
|
||||
color: 'cyan',
|
||||
schema: 'outline',
|
||||
css: outlineVariantFn('cyan50', 'cyan100', 'cyan600')
|
||||
},
|
||||
{
|
||||
color: 'sky',
|
||||
schema: 'outline',
|
||||
css: outlineVariantFn('sky50', 'sky100', 'sky600')
|
||||
},
|
||||
{
|
||||
color: 'blue',
|
||||
schema: 'outline',
|
||||
css: outlineVariantFn('blue50', 'blue100', 'blue600')
|
||||
},
|
||||
{
|
||||
color: 'indigo',
|
||||
schema: 'outline',
|
||||
css: outlineVariantFn('indigo50', 'indigo100', 'indigo600')
|
||||
},
|
||||
{
|
||||
color: 'violet',
|
||||
schema: 'outline',
|
||||
css: outlineVariantFn('violet50', 'violet100', 'violet600')
|
||||
},
|
||||
{
|
||||
color: 'purple',
|
||||
schema: 'outline',
|
||||
css: outlineVariantFn('purple50', 'purple100', 'purple600')
|
||||
},
|
||||
{
|
||||
color: 'fuchsia',
|
||||
schema: 'outline',
|
||||
css: outlineVariantFn('fuchsia50', 'fuchsia100', 'fuchsia600')
|
||||
},
|
||||
{
|
||||
color: 'pink',
|
||||
schema: 'outline',
|
||||
css: outlineVariantFn('pink50', 'pink100', 'pink600')
|
||||
},
|
||||
{
|
||||
color: 'rose',
|
||||
schema: 'outline',
|
||||
css: outlineVariantFn('rose50', 'rose100', 'rose600')
|
||||
}
|
||||
],
|
||||
|
||||
defaultVariants: {
|
||||
color: 'teal',
|
||||
schema: 'outline'
|
||||
}
|
||||
})
|
||||
@@ -1,7 +1,31 @@
|
||||
import { Button } from '../components/Button'
|
||||
|
||||
export default function Home() {
|
||||
const links = [
|
||||
{
|
||||
label: 'Home',
|
||||
href: '#'
|
||||
},
|
||||
{
|
||||
label: 'About',
|
||||
href: '/about'
|
||||
},
|
||||
{
|
||||
label: 'Contact',
|
||||
href: '/contact'
|
||||
}
|
||||
]
|
||||
|
||||
return (
|
||||
<div>
|
||||
<h1>Hello</h1>
|
||||
{links.map(link => (
|
||||
<>
|
||||
<Button color="sky" schema="square" key={link.href}>
|
||||
{link.label}
|
||||
</Button>
|
||||
<br />
|
||||
</>
|
||||
))}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
@@ -1,5 +1,249 @@
|
||||
import { createStitches } from '@stitches/react'
|
||||
|
||||
export const { css, styled, globalCss, theme, keyframes, getCssText } = createStitches({
|
||||
theme: {}
|
||||
theme: {
|
||||
colors: {
|
||||
slate50: '#f8fafc',
|
||||
slate100: '#f1f5f9',
|
||||
slate200: '#e2e8f0',
|
||||
slate300: '#cbd5e1',
|
||||
slate400: '#94a3b8',
|
||||
slate500: '#64748b',
|
||||
slate600: '#475569',
|
||||
slate700: '#334155',
|
||||
slate800: '#1e293b',
|
||||
slate900: '#0f172a',
|
||||
|
||||
gray50: '#f9fafb',
|
||||
gray100: '#f3f4f6',
|
||||
gray200: '#e5e7eb',
|
||||
gray300: '#d1d5db',
|
||||
gray400: '#9ca3af',
|
||||
gray500: '#6b7280',
|
||||
gray600: '#4b5563',
|
||||
gray700: '#374151',
|
||||
gray800: '#1f2937',
|
||||
gray900: '#111827',
|
||||
|
||||
zinc50: '#fafafa',
|
||||
zinc100: '#f4f4f5',
|
||||
zinc200: '#e4e4e7',
|
||||
zinc300: '#d4d4d8',
|
||||
zinc400: '#a1a1aa',
|
||||
zinc500: '#71717a',
|
||||
zinc600: '#52525b',
|
||||
zinc700: '#3f3f46',
|
||||
zinc800: '#27272a',
|
||||
zinc900: '#18181b',
|
||||
|
||||
neutral50: '#fafafa',
|
||||
neutral100: '#f5f5f5',
|
||||
neutral200: '#e5e5e5',
|
||||
neutral300: '#d4d4d4',
|
||||
neutral400: '#a3a3a3',
|
||||
neutral500: '#737373',
|
||||
neutral600: '#525252',
|
||||
neutral700: '#404040',
|
||||
neutral800: '#262626',
|
||||
neutral900: '#171717',
|
||||
|
||||
stone50: '#fafaf9',
|
||||
stone100: '#f5f5f4',
|
||||
stone200: '#e7e5e4',
|
||||
stone300: '#d6d3d1',
|
||||
stone400: '#a8a29e',
|
||||
stone500: '#78716c',
|
||||
stone600: '#57534e',
|
||||
stone700: '#44403c',
|
||||
stone800: '#292524',
|
||||
stone900: '#1c1917',
|
||||
|
||||
red50: '#fef2f2',
|
||||
red100: '#fee2e2',
|
||||
red200: '#fecaca',
|
||||
red300: '#fca5a5',
|
||||
red400: '#f87171',
|
||||
red500: '#ef4444',
|
||||
red600: '#dc2626',
|
||||
red700: '#b91c1c',
|
||||
red800: '#991b1b',
|
||||
red900: '#7f1d1d',
|
||||
|
||||
orange50: '#fff7ed',
|
||||
orange100: '#ffedd5',
|
||||
orange200: '#fed7aa',
|
||||
orange300: '#fdba74',
|
||||
orange400: '#fb923c',
|
||||
orange500: '#f97316',
|
||||
orange600: '#ea580c',
|
||||
orange700: '#c2410c',
|
||||
orange800: '#9a3412',
|
||||
orange900: '#7c2d12',
|
||||
|
||||
amber50: '#fffbeb',
|
||||
amber100: '#fef3c7',
|
||||
amber200: '#fde68a',
|
||||
amber300: '#fcd34d',
|
||||
amber400: '#fbbf24',
|
||||
amber500: '#f59e0b',
|
||||
amber600: '#d97706',
|
||||
amber700: '#b45309',
|
||||
amber800: '#92400e',
|
||||
amber900: '#78350f',
|
||||
|
||||
yellow50: '#fefce8',
|
||||
yellow100: '#fef9c3',
|
||||
yellow200: '#fef08a',
|
||||
yellow300: '#fde047',
|
||||
yellow400: '#facc15',
|
||||
yellow500: '#eab308',
|
||||
yellow600: '#ca8a04',
|
||||
yellow700: '#a16207',
|
||||
yellow800: '#854d0e',
|
||||
yellow900: '#713f12',
|
||||
|
||||
lime50: '#f7fee7',
|
||||
lime100: '#ecfccb',
|
||||
lime200: '#d9f99d',
|
||||
lime300: '#bef264',
|
||||
lime400: '#a3e635',
|
||||
lime500: '#84cc16',
|
||||
lime600: '#65a30d',
|
||||
lime700: '#4d7c0f',
|
||||
lime800: '#3f6212',
|
||||
lime900: '#365314',
|
||||
|
||||
green50: '#f0fdf4',
|
||||
green100: '#dcfce7',
|
||||
green200: '#bbf7d0',
|
||||
green300: '#86efac',
|
||||
green400: '#4ade80',
|
||||
green500: '#22c55e',
|
||||
green600: '#16a34a',
|
||||
green700: '#15803d',
|
||||
green800: '#166534',
|
||||
green900: '#14532d',
|
||||
|
||||
emerald50: '#ecfdf5',
|
||||
emerald100: '#d1fae5',
|
||||
emerald200: '#a7f3d0',
|
||||
emerald300: '#6ee7b7',
|
||||
emerald400: '#34d399',
|
||||
emerald500: '#10b981',
|
||||
emerald600: '#059669',
|
||||
emerald700: '#047857',
|
||||
emerald800: '#065f46',
|
||||
emerald900: '#064e3b',
|
||||
|
||||
teal50: '#f0fdfa',
|
||||
teal100: '#ccfbf1',
|
||||
teal200: '#99f6e4',
|
||||
teal300: '#5eead4',
|
||||
teal400: '#2dd4bf',
|
||||
teal500: '#14b8a6',
|
||||
teal600: '#0d9488',
|
||||
teal700: '#0f766e',
|
||||
teal800: '#115e59',
|
||||
teal900: '#134e4a',
|
||||
|
||||
cyan50: '#ecfeff',
|
||||
cyan100: '#cffafe',
|
||||
cyan200: '#a5f3fc',
|
||||
cyan300: '#67e8f9',
|
||||
cyan400: '#22d3ee',
|
||||
cyan500: '#06b6d4',
|
||||
cyan600: '#0891b2',
|
||||
cyan700: '#0e7490',
|
||||
cyan800: '#155e75',
|
||||
cyan900: '#164e63',
|
||||
|
||||
sky50: '#f0f9ff',
|
||||
sky100: '#e0f2fe',
|
||||
sky200: '#bae6fd',
|
||||
sky300: '#7dd3fc',
|
||||
sky400: '#38bdf8',
|
||||
sky500: '#0ea5e9',
|
||||
sky600: '#0284c7',
|
||||
sky700: '#0369a1',
|
||||
sky800: '#075985',
|
||||
sky900: '#0c4a6e',
|
||||
|
||||
blue50: '#eff6ff',
|
||||
blue100: '#dbeafe',
|
||||
blue200: '#bfdbfe',
|
||||
blue300: '#93c5fd',
|
||||
blue400: '#60a5fa',
|
||||
blue500: '#3b82f6',
|
||||
blue600: '#2563eb',
|
||||
blue700: '#1d4ed8',
|
||||
blue800: '#1e40af',
|
||||
blue900: '#1e3a8a',
|
||||
|
||||
indigo50: '#eef2ff',
|
||||
indigo100: '#e0e7ff',
|
||||
indigo200: '#c7d2fe',
|
||||
indigo300: '#a5b4fc',
|
||||
indigo400: '#818cf8',
|
||||
indigo500: '#6366f1',
|
||||
indigo600: '#4f46e5',
|
||||
indigo700: '#4338ca',
|
||||
indigo800: '#3730a3',
|
||||
indigo900: '#312e81',
|
||||
|
||||
violet50: '#f5f3ff',
|
||||
violet100: '#ede9fe',
|
||||
violet200: '#ddd6fe',
|
||||
violet300: '#c4b5fd',
|
||||
violet400: '#a78bfa',
|
||||
violet500: '#8b5cf6',
|
||||
violet600: '#7c3aed',
|
||||
violet700: '#6d28d9',
|
||||
violet800: '#5b21b6',
|
||||
violet900: '#4c1d95',
|
||||
|
||||
purple50: '#faf5ff',
|
||||
purple100: '#f3e8ff',
|
||||
purple200: '#e9d5ff',
|
||||
purple300: '#d8b4fe',
|
||||
purple400: '#c084fc',
|
||||
purple500: '#a855f7',
|
||||
purple600: '#9333ea',
|
||||
purple700: '#7e22ce',
|
||||
purple800: '#6b21a8',
|
||||
purple900: '#581c87',
|
||||
|
||||
fuchsia50: '#fdf4ff',
|
||||
fuchsia100: '#fae8ff',
|
||||
fuchsia200: '#f5d0fe',
|
||||
fuchsia300: '#f0abfc',
|
||||
fuchsia400: '#e879f9',
|
||||
fuchsia500: '#d946ef',
|
||||
fuchsia600: '#c026d3',
|
||||
fuchsia700: '#a21caf',
|
||||
fuchsia800: '#86198f',
|
||||
fuchsia900: '#701a75',
|
||||
|
||||
pink50: '#fdf2f8',
|
||||
pink100: '#fce7f3',
|
||||
pink200: '#fbcfe8',
|
||||
pink300: '#f9a8d4',
|
||||
pink400: '#f472b6',
|
||||
pink500: '#ec4899',
|
||||
pink600: '#db2777',
|
||||
pink700: '#be185d',
|
||||
pink800: '#9d174d',
|
||||
pink900: '#831843',
|
||||
|
||||
rose50: '#fff1f2',
|
||||
rose100: '#ffe4e6',
|
||||
rose200: '#fecdd3',
|
||||
rose300: '#fda4af',
|
||||
rose400: '#fb7185',
|
||||
rose500: '#f43f5e',
|
||||
rose600: '#e11d48',
|
||||
rose700: '#be123c',
|
||||
rose800: '#9f1239',
|
||||
rose900: '#881337'
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user