feat: add Button component with primary and secondary styles, including disabled state
This commit is contained in:
@@ -0,0 +1,37 @@
|
|||||||
|
@use '../../styles/tokens/typography' as *;
|
||||||
|
|
||||||
|
.button {
|
||||||
|
width: fit-content;
|
||||||
|
padding: var(--nds-spacing-sm) var(--nds-spacing-md);
|
||||||
|
border-radius: var(--nds-radius-sm);
|
||||||
|
@include text-base;
|
||||||
|
cursor: pointer;
|
||||||
|
&__primary {
|
||||||
|
background-color: var(--nds-primary);
|
||||||
|
color: var(--nds-text);
|
||||||
|
&:hover:not(.button--disabled) {
|
||||||
|
background-color: var(--nds-secondary);
|
||||||
|
}
|
||||||
|
&:active:not(.button--disabled) {
|
||||||
|
background-color: var(--nds-accent);
|
||||||
|
color: var(--nds-background);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&__secondary {
|
||||||
|
border: var(--nds-border-width-medium) solid;
|
||||||
|
border-color: var(--nds-primary);
|
||||||
|
color: var(--nds-primary);
|
||||||
|
&:hover:not(.button--disabled) {
|
||||||
|
border-color: var(--nds-secondary);
|
||||||
|
}
|
||||||
|
&:active:not(.button--disabled) {
|
||||||
|
border-color: var(--nds-accent);
|
||||||
|
color: var(--nds-accent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&--disabled {
|
||||||
|
cursor: not-allowed;
|
||||||
|
background-color: var(--nds-disabled);
|
||||||
|
color: var(--nds-neutral);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
---
|
||||||
|
export interface Props {
|
||||||
|
type: 'primary' | 'secondary';
|
||||||
|
disabled?: boolean;
|
||||||
|
}
|
||||||
|
const { type, disabled = false } = Astro.props;
|
||||||
|
---
|
||||||
|
|
||||||
|
<div class={`button button__${type} ${disabled ? 'button--disabled' : ''}`}>
|
||||||
|
<slot/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
@use './_button.scss';
|
||||||
|
</style>
|
||||||
@@ -6,3 +6,4 @@ export { default as Toggle } from './Toggle/toggle.astro';
|
|||||||
export { default as Tab } from './Tabs/tab.astro';
|
export { default as Tab } from './Tabs/tab.astro';
|
||||||
export { default as TabItem } from './Tabs/tabItem.astro';
|
export { default as TabItem } from './Tabs/tabItem.astro';
|
||||||
export { default as TabContent } from './Tabs/tabContent.astro';
|
export { default as TabContent } from './Tabs/tabContent.astro';
|
||||||
|
export { default as Button } from './Button/button.astro';
|
||||||
@@ -5,6 +5,7 @@ import Toggle from '../components/Toggle/toggle.astro';
|
|||||||
import Tab from '../components/Tabs/tab.astro';
|
import Tab from '../components/Tabs/tab.astro';
|
||||||
import TabItem from '../components/Tabs/tabItem.astro';
|
import TabItem from '../components/Tabs/tabItem.astro';
|
||||||
import TabContent from '../components/Tabs/tabContent.astro';
|
import TabContent from '../components/Tabs/tabContent.astro';
|
||||||
|
import Button from '../components/Button/button.astro';
|
||||||
import {
|
import {
|
||||||
Arrow2Icon, BinIcon, BurgerIcon, CalendarIcon, CheckIcon, CloseIcon,
|
Arrow2Icon, BinIcon, BurgerIcon, CalendarIcon, CheckIcon, CloseIcon,
|
||||||
CodeIcon, CubeIcon, DownloadIcon, FilterIcon, HelpIcon, HomeIcon,
|
CodeIcon, CubeIcon, DownloadIcon, FilterIcon, HelpIcon, HomeIcon,
|
||||||
@@ -19,6 +20,14 @@ const initialChecked = true;
|
|||||||
<Layout>
|
<Layout>
|
||||||
<main>
|
<main>
|
||||||
<h1>Nova Design System</h1>
|
<h1>Nova Design System</h1>
|
||||||
|
<section>
|
||||||
|
<h2>Button</h2>
|
||||||
|
<div style="display: flex; flex-direction: column; gap: var(--nds-spacing-md);">
|
||||||
|
<Button type="primary">Primary Button</Button>
|
||||||
|
<Button type="secondary">Secondary Button</Button>
|
||||||
|
<Button type="primary" disabled>disabled</Button>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<h2>Tabs</h2>
|
<h2>Tabs</h2>
|
||||||
<div style="display: flex; flex-direction: column; gap: var(--nds-spacing-md);">
|
<div style="display: flex; flex-direction: column; gap: var(--nds-spacing-md);">
|
||||||
|
|||||||
Reference in New Issue
Block a user