diff --git a/src/shared/ui/Button/Button.stories.svelte b/src/shared/ui/Button/Button.stories.svelte new file mode 100644 index 0000000..dafbcc8 --- /dev/null +++ b/src/shared/ui/Button/Button.stories.svelte @@ -0,0 +1,58 @@ + + + + {#snippet template(args)} + + {/snippet} + + + + {#snippet template(args)} + + {/snippet} + + + + {#snippet template(args)} + + {/snippet} + + + + {#snippet template(args)} + + {/snippet} + + + + {#snippet template()} +
+ + + +
+ {/snippet} +
+ + + {#snippet template()} + + {/snippet} + diff --git a/src/shared/ui/Button/Button.svelte b/src/shared/ui/Button/Button.svelte new file mode 100644 index 0000000..23e8bee --- /dev/null +++ b/src/shared/ui/Button/Button.svelte @@ -0,0 +1,58 @@ + + + + diff --git a/src/shared/ui/Button/Button.test.ts b/src/shared/ui/Button/Button.test.ts new file mode 100644 index 0000000..74b4921 --- /dev/null +++ b/src/shared/ui/Button/Button.test.ts @@ -0,0 +1,20 @@ +import { render } from '@testing-library/svelte'; +import { describe, expect, it } from 'vitest'; +import Button from './Button.svelte'; + +describe('Button', () => { + it('renders children', () => { + const { getByText } = render(Button, { props: { children: () => 'Click me' } }); + expect(getByText('Click me')).toBeTruthy(); + }); + + it('is disabled when disabled prop is true', () => { + const { container } = render(Button, { props: { disabled: true } }); + expect(container.querySelector('button')?.disabled).toBe(true); + }); + + it('applies primary variant styles', () => { + const { container } = render(Button, { props: { variant: 'primary' } }); + expect(container.querySelector('button')?.className).toContain('bg-burnt-oxide'); + }); +}); diff --git a/src/shared/ui/Button/index.ts b/src/shared/ui/Button/index.ts new file mode 100644 index 0000000..8bb4659 --- /dev/null +++ b/src/shared/ui/Button/index.ts @@ -0,0 +1,2 @@ +export { default as Button } from './Button.svelte'; +export type { ButtonVariant, ButtonSize } from './types'; diff --git a/src/shared/ui/Button/types.ts b/src/shared/ui/Button/types.ts new file mode 100644 index 0000000..3dd4c02 --- /dev/null +++ b/src/shared/ui/Button/types.ts @@ -0,0 +1,2 @@ +export type ButtonVariant = 'primary' | 'secondary' | 'outline' | 'ghost'; +export type ButtonSize = 'sm' | 'md' | 'lg'; diff --git a/src/shared/ui/index.ts b/src/shared/ui/index.ts index 230042e..6f8d6da 100644 --- a/src/shared/ui/index.ts +++ b/src/shared/ui/index.ts @@ -1,2 +1,2 @@ -export { default as Button } from './Button.svelte'; -export { default as Input } from './Input.svelte'; +export * from './Badge'; +export * from './Button';