button component
This commit is contained in:
parent
9c267b973f
commit
4da813f841
3 changed files with 82 additions and 1 deletions
30
src/lib/components/Button.stories.svelte
Normal file
30
src/lib/components/Button.stories.svelte
Normal file
|
|
@ -0,0 +1,30 @@
|
||||||
|
<script module lang="ts">
|
||||||
|
import { defineMeta } from '@storybook/addon-svelte-csf';
|
||||||
|
import Button from './Button.svelte';
|
||||||
|
import { fn } from '@storybook/test';
|
||||||
|
|
||||||
|
const { Story } = defineMeta({
|
||||||
|
title: 'Button',
|
||||||
|
component: Button,
|
||||||
|
tags: ['autodocs'],
|
||||||
|
args: {
|
||||||
|
onClick: fn()
|
||||||
|
},
|
||||||
|
argTypes: {
|
||||||
|
size: {
|
||||||
|
control: 'select',
|
||||||
|
options: ['small', 'normal', 'large'],
|
||||||
|
defaultValue: 'normal'
|
||||||
|
},
|
||||||
|
backgroundColor: {
|
||||||
|
control: 'color'
|
||||||
|
},
|
||||||
|
primary: {
|
||||||
|
control: 'boolean',
|
||||||
|
defaultValue: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<Story name="Default" args={{ label: 'Button', size: 'normal', primary: true }} />
|
||||||
51
src/lib/components/Button.svelte
Normal file
51
src/lib/components/Button.svelte
Normal file
|
|
@ -0,0 +1,51 @@
|
||||||
|
<script lang="ts">
|
||||||
|
import type { HTMLButtonAttributes } from 'svelte/elements';
|
||||||
|
|
||||||
|
let {
|
||||||
|
type = 'button',
|
||||||
|
onClick,
|
||||||
|
label,
|
||||||
|
size = 'normal',
|
||||||
|
backgroundColor,
|
||||||
|
primary = false
|
||||||
|
}: {
|
||||||
|
type: HTMLButtonAttributes['type'];
|
||||||
|
onClick: () => void;
|
||||||
|
label: string;
|
||||||
|
size: 'small' | 'normal' | 'large';
|
||||||
|
backgroundColor: string;
|
||||||
|
primary: boolean;
|
||||||
|
} = $props();
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<button
|
||||||
|
{type}
|
||||||
|
onclick={onClick}
|
||||||
|
class={`button button--${size}`}
|
||||||
|
style:background-color={backgroundColor}
|
||||||
|
class:button--primary={primary}
|
||||||
|
class:button--secondary={!primary}
|
||||||
|
>
|
||||||
|
{label}
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.button {
|
||||||
|
@apply inline-block cursor-pointer rounded-full border-0 font-medium leading-none transition-colors;
|
||||||
|
}
|
||||||
|
.button--small {
|
||||||
|
@apply px-2 py-0.5 text-sm;
|
||||||
|
}
|
||||||
|
.button--normal {
|
||||||
|
@apply px-2 py-1 text-base;
|
||||||
|
}
|
||||||
|
.button--large {
|
||||||
|
@apply px-2.5 py-1 text-xl;
|
||||||
|
}
|
||||||
|
.button--primary {
|
||||||
|
@apply bg-rose-500 text-slate-700 hover:opacity-80;
|
||||||
|
}
|
||||||
|
.button--secondary {
|
||||||
|
@apply bg-teal-600 text-white hover:opacity-80;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
@ -18,7 +18,7 @@
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
.navbar {
|
.navbar {
|
||||||
@apply flex items-center justify-between border-b-slate-200 bg-slate-100 px-6 py-2 drop-shadow;
|
@apply flex items-center justify-between border-slate-200 bg-slate-100 px-6 py-2 drop-shadow;
|
||||||
}
|
}
|
||||||
|
|
||||||
.navbar h1 {
|
.navbar h1 {
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue