@reshape-biotech/design-system 0.0.22 → 0.0.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +30 -38
- package/dist/components/banner/Banner.stories.svelte +129 -0
- package/dist/components/banner/Banner.stories.svelte.d.ts +19 -0
- package/dist/components/banner/Banner.svelte +59 -0
- package/dist/components/banner/Banner.svelte.d.ts +11 -0
- package/dist/components/button/Button.stories.svelte +37 -0
- package/dist/components/button/Button.stories.svelte.d.ts +19 -0
- package/dist/components/button/Button.svelte +85 -0
- package/dist/components/button/Button.svelte.d.ts +17 -0
- package/dist/components/datepicker/DatePicker.svelte +283 -0
- package/dist/components/datepicker/DatePicker.svelte.d.ts +8 -0
- package/dist/components/divider/Divider.stories.svelte +14 -0
- package/dist/components/divider/Divider.stories.svelte.d.ts +27 -0
- package/dist/components/divider/Divider.svelte +9 -0
- package/dist/components/divider/Divider.svelte.d.ts +6 -0
- package/dist/components/drawer/Drawer.stories.svelte +99 -0
- package/dist/components/drawer/Drawer.stories.svelte.d.ts +27 -0
- package/dist/components/drawer/Drawer.svelte +45 -0
- package/dist/components/drawer/Drawer.svelte.d.ts +12 -0
- package/dist/components/drawer/DrawerLabel.svelte +13 -0
- package/dist/components/drawer/DrawerLabel.svelte.d.ts +9 -0
- package/dist/components/dropdown/Dropdown.stories.svelte +214 -0
- package/dist/components/dropdown/Dropdown.stories.svelte.d.ts +27 -0
- package/dist/components/dropdown/Dropdown.svelte +69 -0
- package/dist/components/dropdown/Dropdown.svelte.d.ts +14 -0
- package/dist/components/dropdown/components/DropdownContent.svelte +29 -0
- package/dist/components/dropdown/components/DropdownContent.svelte.d.ts +10 -0
- package/dist/components/dropdown/components/DropdownMenu.svelte +23 -0
- package/dist/components/dropdown/components/DropdownMenu.svelte.d.ts +8 -0
- package/dist/components/dropdown/components/DropdownTrigger.svelte +44 -0
- package/dist/components/dropdown/components/DropdownTrigger.svelte.d.ts +12 -0
- package/dist/components/icon-button/IconButton.stories.svelte +52 -0
- package/dist/components/icon-button/IconButton.stories.svelte.d.ts +19 -0
- package/dist/components/icon-button/IconButton.svelte +71 -0
- package/dist/components/icon-button/IconButton.svelte.d.ts +14 -0
- package/dist/components/image/Image.svelte +56 -0
- package/dist/components/image/Image.svelte.d.ts +7 -0
- package/dist/components/input/Input.stories.svelte +81 -0
- package/dist/components/input/Input.stories.svelte.d.ts +27 -0
- package/dist/components/input/Input.svelte +131 -0
- package/dist/components/input/Input.svelte.d.ts +20 -0
- package/dist/components/list/List.stories.svelte +97 -0
- package/dist/components/list/List.stories.svelte.d.ts +19 -0
- package/dist/components/list/List.svelte +75 -0
- package/dist/components/list/List.svelte.d.ts +24 -0
- package/dist/components/markdown/Markdown.stories.svelte +41 -0
- package/dist/components/markdown/Markdown.stories.svelte.d.ts +27 -0
- package/dist/components/markdown/Markdown.svelte +12 -0
- package/dist/components/markdown/Markdown.svelte.d.ts +6 -0
- package/dist/components/modal/Modal.stories.svelte +41 -0
- package/dist/components/modal/Modal.stories.svelte.d.ts +19 -0
- package/dist/components/modal/Modal.svelte +56 -0
- package/dist/components/modal/Modal.svelte.d.ts +16 -0
- package/dist/components/notification-popup/NotificationPopup.stories.svelte +27 -0
- package/dist/components/notification-popup/NotificationPopup.stories.svelte.d.ts +27 -0
- package/dist/components/notification-popup/NotificationPopup.svelte +31 -0
- package/dist/components/notification-popup/NotificationPopup.svelte.d.ts +11 -0
- package/dist/components/pill/Pill.svelte +39 -0
- package/dist/components/pill/Pill.svelte.d.ts +10 -0
- package/dist/components/progress-circle/ProgressCircle.svelte +79 -0
- package/dist/components/progress-circle/ProgressCircle.svelte.d.ts +7 -0
- package/dist/components/segmented-control-buttons/ControlButton.svelte +59 -0
- package/dist/components/segmented-control-buttons/ControlButton.svelte.d.ts +14 -0
- package/dist/components/segmented-control-buttons/SegmentedControlButtons.stories.svelte +45 -0
- package/dist/components/segmented-control-buttons/SegmentedControlButtons.stories.svelte.d.ts +19 -0
- package/dist/components/segmented-control-buttons/SegmentedControlButtons.svelte +21 -0
- package/dist/components/segmented-control-buttons/SegmentedControlButtons.svelte.d.ts +10 -0
- package/dist/components/select/Select.stories.svelte +113 -0
- package/dist/components/select/Select.stories.svelte.d.ts +19 -0
- package/dist/components/select/Select.svelte +137 -0
- package/dist/components/select/Select.svelte.d.ts +60 -0
- package/dist/components/select/index.d.ts +6 -0
- package/dist/components/select/index.js +1 -0
- package/dist/components/skeleton-loader/HorizontalCardSkeleton.svelte +31 -0
- package/dist/components/skeleton-loader/HorizontalCardSkeleton.svelte.d.ts +5 -0
- package/dist/components/skeleton-loader/ProjectCardSkeleton.svelte +12 -0
- package/dist/components/skeleton-loader/ProjectCardSkeleton.svelte.d.ts +18 -0
- package/dist/components/skeleton-loader/SkeletonLoader.stories.svelte +71 -0
- package/dist/components/skeleton-loader/SkeletonLoader.stories.svelte.d.ts +27 -0
- package/dist/components/skeleton-loader/SkeletonLoader.svelte +17 -0
- package/dist/components/skeleton-loader/SkeletonLoader.svelte.d.ts +9 -0
- package/dist/components/skeleton-loader/StatcardSkeleton.svelte +17 -0
- package/dist/components/skeleton-loader/StatcardSkeleton.svelte.d.ts +18 -0
- package/dist/components/skeleton-loader/components/Skeleton.svelte +14 -0
- package/dist/components/skeleton-loader/components/Skeleton.svelte.d.ts +8 -0
- package/dist/components/skeleton-loader/components/SkeletonImage.svelte +14 -0
- package/dist/components/skeleton-loader/components/SkeletonImage.svelte.d.ts +26 -0
- package/dist/components/skeleton-loader/index.d.ts +5 -0
- package/dist/components/skeleton-loader/index.js +5 -0
- package/dist/components/slider/Slider.stories.svelte +37 -0
- package/dist/components/slider/Slider.stories.svelte.d.ts +27 -0
- package/dist/components/slider/Slider.svelte +117 -0
- package/dist/components/slider/Slider.svelte.d.ts +29 -0
- package/dist/components/spinner/Spinner.svelte +27 -0
- package/dist/components/spinner/Spinner.svelte.d.ts +6 -0
- package/dist/components/stat-card/StatCard.stories.svelte +31 -0
- package/dist/components/stat-card/StatCard.stories.svelte.d.ts +27 -0
- package/dist/components/stat-card/StatCard.svelte +46 -0
- package/dist/components/stat-card/StatCard.svelte.d.ts +9 -0
- package/dist/components/status-badge/StatusBadge.stories.svelte +401 -0
- package/dist/components/status-badge/StatusBadge.stories.svelte.d.ts +19 -0
- package/dist/components/status-badge/StatusBadge.svelte +147 -0
- package/dist/components/status-badge/StatusBadge.svelte.d.ts +12 -0
- package/dist/components/table/Table.stories.svelte +86 -0
- package/dist/components/table/Table.stories.svelte.d.ts +24 -0
- package/dist/components/table/Table.svelte +33 -0
- package/dist/components/table/Table.svelte.d.ts +8 -0
- package/dist/components/table/components/Td.svelte +14 -0
- package/dist/components/table/components/Td.svelte.d.ts +8 -0
- package/dist/components/table/components/Th.svelte +15 -0
- package/dist/components/table/components/Th.svelte.d.ts +9 -0
- package/dist/components/table/components/Tr.svelte +31 -0
- package/dist/components/table/components/Tr.svelte.d.ts +8 -0
- package/dist/components/tabs/Tabs.stories.svelte +30 -0
- package/dist/components/tabs/Tabs.stories.svelte.d.ts +27 -0
- package/dist/components/tabs/Tabs.svelte +15 -0
- package/dist/components/tabs/Tabs.svelte.d.ts +8 -0
- package/dist/components/tabs/components/Content.svelte +15 -0
- package/dist/components/tabs/components/Content.svelte.d.ts +9 -0
- package/dist/components/tabs/components/Tab.svelte +21 -0
- package/dist/components/tabs/components/Tab.svelte.d.ts +10 -0
- package/dist/components/tabs/components/Tabs.svelte +14 -0
- package/dist/components/tabs/components/Tabs.svelte.d.ts +8 -0
- package/dist/components/tag/Tag.stories.svelte +50 -0
- package/dist/components/tag/Tag.stories.svelte.d.ts +19 -0
- package/dist/components/tag/Tag.svelte +104 -0
- package/dist/components/tag/Tag.svelte.d.ts +11 -0
- package/dist/components/toast/Toast.svelte +66 -0
- package/dist/components/toast/Toast.svelte.d.ts +5 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/tailwind-safelist.d.ts +14 -0
- package/dist/tailwind-safelist.js +148 -0
- package/dist/tailwind.preset.d.ts +1 -0
- package/dist/tokens.d.ts +314 -36
- package/dist/tokens.js +235 -248
- package/package.json +5 -6
- package/dist/tailwind-safelist.txt +0 -142
package/README.md
CHANGED
|
@@ -1,58 +1,50 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
Everything you need to build a Svelte library, powered by [`create-svelte`](https://github.com/sveltejs/kit/tree/main/packages/create-svelte).
|
|
4
|
-
|
|
5
|
-
Read more about creating a library [in the docs](https://svelte.dev/docs/kit/packaging).
|
|
6
|
-
|
|
7
|
-
## Creating a project
|
|
1
|
+
## Publishing
|
|
8
2
|
|
|
9
|
-
|
|
3
|
+
Set the package version in the `package.json` file.
|
|
4
|
+
To build your library:
|
|
10
5
|
|
|
11
6
|
```bash
|
|
12
|
-
|
|
13
|
-
npx sv create
|
|
14
|
-
|
|
15
|
-
# create a new project in my-app
|
|
16
|
-
npx sv create my-app
|
|
7
|
+
bun run package
|
|
17
8
|
```
|
|
18
9
|
|
|
19
|
-
## Developing
|
|
20
|
-
|
|
21
|
-
Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server:
|
|
22
|
-
|
|
23
10
|
```bash
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
# or start the server and open the app in a new browser tab
|
|
27
|
-
npm run dev -- --open
|
|
11
|
+
bun publish
|
|
28
12
|
```
|
|
29
13
|
|
|
30
|
-
|
|
14
|
+
## About the Design System
|
|
31
15
|
|
|
32
|
-
|
|
16
|
+
This package contains the core design system for Reshape Biotech frontend projects, providing a consistent and reusable set of components and styles.
|
|
33
17
|
|
|
34
|
-
|
|
18
|
+
### Contents
|
|
35
19
|
|
|
36
|
-
|
|
37
|
-
npm run package
|
|
38
|
-
```
|
|
20
|
+
1. **Component Library**
|
|
39
21
|
|
|
40
|
-
|
|
22
|
+
- A collection of shared, reusable React components
|
|
23
|
+
- Standardized UI elements following Reshape Biotech's design guidelines
|
|
24
|
+
- Fully typed components with TypeScript support
|
|
41
25
|
|
|
42
|
-
|
|
43
|
-
npm run build
|
|
44
|
-
```
|
|
26
|
+
2. **Tailwind Configuration**
|
|
45
27
|
|
|
46
|
-
|
|
28
|
+
- Pre-configured Tailwind CSS setup
|
|
29
|
+
- Custom theme extensions
|
|
30
|
+
- Shared utility classes
|
|
47
31
|
|
|
48
|
-
|
|
32
|
+
3. **DaisyUI**
|
|
49
33
|
|
|
50
|
-
|
|
34
|
+
- Pre-configured DaisyUI setup
|
|
35
|
+
- Custom theme extensions
|
|
36
|
+
- Shared utility classes
|
|
51
37
|
|
|
52
|
-
|
|
38
|
+
4. **Design Tokens**
|
|
39
|
+
- Color palette
|
|
40
|
+
- Typography
|
|
41
|
+
- Shadow definitions
|
|
53
42
|
|
|
54
|
-
|
|
43
|
+
### Usage
|
|
55
44
|
|
|
56
|
-
|
|
57
|
-
|
|
45
|
+
Import components and styles from the design system:
|
|
46
|
+
|
|
47
|
+
```typescript
|
|
48
|
+
import { Button, Card } from '@reshape/design-system';
|
|
49
|
+
import '@reshape/design-system/styles.css';
|
|
58
50
|
```
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
<script module lang="ts">
|
|
2
|
+
import { Info, Warning as WarningIcon } from 'phosphor-svelte';
|
|
3
|
+
import Banner from './Banner.svelte';
|
|
4
|
+
import { defineMeta } from '@storybook/addon-svelte-csf';
|
|
5
|
+
import Button from 'design-system/components/button/Button.svelte';
|
|
6
|
+
|
|
7
|
+
const { Story } = defineMeta({
|
|
8
|
+
component: Banner,
|
|
9
|
+
title: 'Design System/Banner',
|
|
10
|
+
tags: ['autodocs']
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
let showBanner = $state(true);
|
|
14
|
+
</script>
|
|
15
|
+
|
|
16
|
+
<Story name="Well finding warning">
|
|
17
|
+
<Banner type="warning" closable={false}>
|
|
18
|
+
{#snippet icon()}
|
|
19
|
+
<WarningIcon size="100%" weight="bold" />
|
|
20
|
+
{/snippet}
|
|
21
|
+
{#snippet content()}
|
|
22
|
+
Our system couldn't find the wells in some plates. Analysis can't be done. For more help, <a
|
|
23
|
+
href="https://docs.reshapebiotech.com/reshape-biotech-knowledgebase/general-info/troubleshooting/well-detection"
|
|
24
|
+
>check our documentation</a
|
|
25
|
+
>
|
|
26
|
+
or <a href="mailto:support@reshapebiotech.com">contact us</a>.
|
|
27
|
+
{/snippet}
|
|
28
|
+
</Banner>
|
|
29
|
+
</Story>
|
|
30
|
+
|
|
31
|
+
<Story name="No icon">
|
|
32
|
+
<Banner type="success">
|
|
33
|
+
{#snippet content()}
|
|
34
|
+
This banner has no icon.
|
|
35
|
+
{/snippet}
|
|
36
|
+
</Banner>
|
|
37
|
+
</Story>
|
|
38
|
+
|
|
39
|
+
<Story name="No toggle">
|
|
40
|
+
<Banner type="progress" closable={false}>
|
|
41
|
+
{#snippet icon()}
|
|
42
|
+
<Info size="100%" weight="bold" />
|
|
43
|
+
{/snippet}
|
|
44
|
+
{#snippet content()}
|
|
45
|
+
This banner has no toggle.
|
|
46
|
+
{/snippet}
|
|
47
|
+
</Banner>
|
|
48
|
+
</Story>
|
|
49
|
+
|
|
50
|
+
<Story name="Toggle back on">
|
|
51
|
+
<div class="h-28">
|
|
52
|
+
<Button onClick={() => (showBanner = true)} disabled={showBanner}>Toggle banner back on</Button>
|
|
53
|
+
<br />
|
|
54
|
+
<br />
|
|
55
|
+
|
|
56
|
+
<Banner type="error" bind:show={showBanner}>
|
|
57
|
+
{#snippet icon()}
|
|
58
|
+
<Info size="100%" weight="bold" />
|
|
59
|
+
{/snippet}
|
|
60
|
+
{#snippet content()}
|
|
61
|
+
This banner can be toggled off with the "x" to the right and back on with the button above.
|
|
62
|
+
{/snippet}
|
|
63
|
+
</Banner>
|
|
64
|
+
</div>
|
|
65
|
+
</Story>
|
|
66
|
+
|
|
67
|
+
<Story name="Type variations">
|
|
68
|
+
<div class="space-y-4">
|
|
69
|
+
<div class="space-y-2">
|
|
70
|
+
<h4>Neutral</h4>
|
|
71
|
+
<Banner type="neutral">
|
|
72
|
+
{#snippet icon()}
|
|
73
|
+
<Info size="100%" weight="bold" />
|
|
74
|
+
{/snippet}
|
|
75
|
+
{#snippet content()}
|
|
76
|
+
This is a "neutral" banner.
|
|
77
|
+
{/snippet}
|
|
78
|
+
</Banner>
|
|
79
|
+
</div>
|
|
80
|
+
|
|
81
|
+
<div class="space-y-2">
|
|
82
|
+
<h4>Success</h4>
|
|
83
|
+
<Banner type="success">
|
|
84
|
+
{#snippet icon()}
|
|
85
|
+
<Info size="100%" weight="bold" />
|
|
86
|
+
{/snippet}
|
|
87
|
+
{#snippet content()}
|
|
88
|
+
This is a "success" banner.
|
|
89
|
+
{/snippet}
|
|
90
|
+
</Banner>
|
|
91
|
+
</div>
|
|
92
|
+
|
|
93
|
+
<div class="space-y-2">
|
|
94
|
+
<h4>Progress</h4>
|
|
95
|
+
<Banner type="progress">
|
|
96
|
+
{#snippet icon()}
|
|
97
|
+
<Info size="100%" weight="bold" />
|
|
98
|
+
{/snippet}
|
|
99
|
+
{#snippet content()}
|
|
100
|
+
This is a "progress" banner.
|
|
101
|
+
{/snippet}
|
|
102
|
+
</Banner>
|
|
103
|
+
</div>
|
|
104
|
+
|
|
105
|
+
<div class="space-y-2">
|
|
106
|
+
<h4>Warning</h4>
|
|
107
|
+
<Banner type="warning">
|
|
108
|
+
{#snippet icon()}
|
|
109
|
+
<Info size="100%" weight="bold" />
|
|
110
|
+
{/snippet}
|
|
111
|
+
{#snippet content()}
|
|
112
|
+
This is a "warning" banner.
|
|
113
|
+
{/snippet}
|
|
114
|
+
</Banner>
|
|
115
|
+
</div>
|
|
116
|
+
|
|
117
|
+
<div class="space-y-2">
|
|
118
|
+
<h4>Error</h4>
|
|
119
|
+
<Banner type="error">
|
|
120
|
+
{#snippet icon()}
|
|
121
|
+
<Info size="100%" weight="bold" />
|
|
122
|
+
{/snippet}
|
|
123
|
+
{#snippet content()}
|
|
124
|
+
This is an "error" banner.
|
|
125
|
+
{/snippet}
|
|
126
|
+
</Banner>
|
|
127
|
+
</div>
|
|
128
|
+
</div>
|
|
129
|
+
</Story>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import Banner from './Banner.svelte';
|
|
2
|
+
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
|
3
|
+
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
4
|
+
$$bindings?: Bindings;
|
|
5
|
+
} & Exports;
|
|
6
|
+
(internal: unknown, props: {
|
|
7
|
+
$$events?: Events;
|
|
8
|
+
$$slots?: Slots;
|
|
9
|
+
}): Exports & {
|
|
10
|
+
$set?: any;
|
|
11
|
+
$on?: any;
|
|
12
|
+
};
|
|
13
|
+
z_$$bindings?: Bindings;
|
|
14
|
+
}
|
|
15
|
+
declare const Banner: $$__sveltets_2_IsomorphicComponent<Record<string, never>, {
|
|
16
|
+
[evt: string]: CustomEvent<any>;
|
|
17
|
+
}, {}, {}, string>;
|
|
18
|
+
type Banner = InstanceType<typeof Banner>;
|
|
19
|
+
export default Banner;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { X } from 'phosphor-svelte';
|
|
3
|
+
import type { Snippet } from 'svelte';
|
|
4
|
+
import IconButton from 'design-system/components/icon-button/IconButton.svelte';
|
|
5
|
+
|
|
6
|
+
interface Props {
|
|
7
|
+
type?: 'neutral' | 'success' | 'progress' | 'warning' | 'error';
|
|
8
|
+
show?: boolean;
|
|
9
|
+
closable?: boolean;
|
|
10
|
+
icon?: Snippet;
|
|
11
|
+
content: Snippet;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
let {
|
|
15
|
+
type = 'neutral',
|
|
16
|
+
show = $bindable(true),
|
|
17
|
+
closable = true,
|
|
18
|
+
icon,
|
|
19
|
+
content
|
|
20
|
+
}: Props = $props();
|
|
21
|
+
|
|
22
|
+
const color = {
|
|
23
|
+
neutral: 'neutral',
|
|
24
|
+
success: 'success',
|
|
25
|
+
progress: 'blue',
|
|
26
|
+
warning: 'warning',
|
|
27
|
+
error: 'danger'
|
|
28
|
+
}[type];
|
|
29
|
+
</script>
|
|
30
|
+
|
|
31
|
+
{#if show}
|
|
32
|
+
<div class="rounded-lg bg-{color} flex h-11 w-full items-center justify-between p-3">
|
|
33
|
+
<div class="inline-flex items-center justify-start gap-3">
|
|
34
|
+
{#if icon}
|
|
35
|
+
<div class="size-5 text-icon-{color} ">
|
|
36
|
+
{@render icon?.()}
|
|
37
|
+
</div>
|
|
38
|
+
{/if}
|
|
39
|
+
<div class="content text-sm">
|
|
40
|
+
{@render content?.()}
|
|
41
|
+
</div>
|
|
42
|
+
</div>
|
|
43
|
+
{#if closable}
|
|
44
|
+
<IconButton size="sm" onclick={() => (show = false)}>
|
|
45
|
+
<X class="text-icon-secondary" weight="bold" />
|
|
46
|
+
</IconButton>
|
|
47
|
+
{/if}
|
|
48
|
+
</div>
|
|
49
|
+
{/if}
|
|
50
|
+
|
|
51
|
+
<style>
|
|
52
|
+
.content :global(a) {
|
|
53
|
+
font-size: 0.875rem;
|
|
54
|
+
line-height: 1.25rem;
|
|
55
|
+
--tw-text-opacity: 1;
|
|
56
|
+
color: rgb(18 25 42 / var(--tw-text-opacity, 1));
|
|
57
|
+
text-decoration-line: underline
|
|
58
|
+
}
|
|
59
|
+
</style>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Snippet } from 'svelte';
|
|
2
|
+
interface Props {
|
|
3
|
+
type?: 'neutral' | 'success' | 'progress' | 'warning' | 'error';
|
|
4
|
+
show?: boolean;
|
|
5
|
+
closable?: boolean;
|
|
6
|
+
icon?: Snippet;
|
|
7
|
+
content: Snippet;
|
|
8
|
+
}
|
|
9
|
+
declare const Banner: import("svelte").Component<Props, {}, "show">;
|
|
10
|
+
type Banner = ReturnType<typeof Banner>;
|
|
11
|
+
export default Banner;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
<script module lang="ts">
|
|
2
|
+
import { defineMeta } from '@storybook/addon-svelte-csf';
|
|
3
|
+
import Button from './Button.svelte';
|
|
4
|
+
|
|
5
|
+
const { Story } = defineMeta({
|
|
6
|
+
component: Button,
|
|
7
|
+
title: 'Design System/Button',
|
|
8
|
+
tags: ['autodocs']
|
|
9
|
+
});
|
|
10
|
+
</script>
|
|
11
|
+
|
|
12
|
+
<Story name="Primary">
|
|
13
|
+
<Button variant="primary">Button</Button>
|
|
14
|
+
</Story>
|
|
15
|
+
<Story name="Medium">
|
|
16
|
+
<Button variant="primary" size="md">Button</Button>
|
|
17
|
+
</Story>
|
|
18
|
+
<Story name="Small">
|
|
19
|
+
<Button variant="primary" size="sm">Button</Button>
|
|
20
|
+
</Story>
|
|
21
|
+
|
|
22
|
+
<Story name="Secondary">
|
|
23
|
+
<Button variant="secondary">Button</Button>
|
|
24
|
+
</Story>
|
|
25
|
+
|
|
26
|
+
<Story name="Danger">
|
|
27
|
+
<Button variant="danger">Button</Button>
|
|
28
|
+
</Story>
|
|
29
|
+
<Story name="Transparent">
|
|
30
|
+
<Button variant="transparent">Button</Button>
|
|
31
|
+
</Story>
|
|
32
|
+
<Story name="Disabled">
|
|
33
|
+
<Button disabled>Button</Button>
|
|
34
|
+
</Story>
|
|
35
|
+
<Story name="Loading">
|
|
36
|
+
<Button loading>Button</Button>
|
|
37
|
+
</Story>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import Button from './Button.svelte';
|
|
2
|
+
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
|
3
|
+
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
4
|
+
$$bindings?: Bindings;
|
|
5
|
+
} & Exports;
|
|
6
|
+
(internal: unknown, props: {
|
|
7
|
+
$$events?: Events;
|
|
8
|
+
$$slots?: Slots;
|
|
9
|
+
}): Exports & {
|
|
10
|
+
$set?: any;
|
|
11
|
+
$on?: any;
|
|
12
|
+
};
|
|
13
|
+
z_$$bindings?: Bindings;
|
|
14
|
+
}
|
|
15
|
+
declare const Button: $$__sveltets_2_IsomorphicComponent<Record<string, never>, {
|
|
16
|
+
[evt: string]: CustomEvent<any>;
|
|
17
|
+
}, {}, {}, string>;
|
|
18
|
+
type Button = InstanceType<typeof Button>;
|
|
19
|
+
export default Button;
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import Spinner from 'design-system/components/spinner/Spinner.svelte';
|
|
3
|
+
import type { Snippet } from 'svelte';
|
|
4
|
+
|
|
5
|
+
interface Props {
|
|
6
|
+
class?: string;
|
|
7
|
+
onClick?: (event?: MouseEvent) => void;
|
|
8
|
+
type?: 'button' | 'submit' | 'reset' | null | undefined;
|
|
9
|
+
loading?: boolean;
|
|
10
|
+
disabled?: boolean;
|
|
11
|
+
accessibilityLabel?: string;
|
|
12
|
+
size?: 'sm' | 'md' | 'lg';
|
|
13
|
+
id?: string | undefined;
|
|
14
|
+
tabindex?: number | undefined;
|
|
15
|
+
variant?: Variant;
|
|
16
|
+
children?: Snippet;
|
|
17
|
+
dataTestId?: string;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
let {
|
|
21
|
+
class: className = '',
|
|
22
|
+
onClick = () => {},
|
|
23
|
+
type = 'button',
|
|
24
|
+
loading = false,
|
|
25
|
+
disabled = false,
|
|
26
|
+
accessibilityLabel = '',
|
|
27
|
+
size = 'lg',
|
|
28
|
+
id = undefined,
|
|
29
|
+
tabindex = undefined,
|
|
30
|
+
variant = 'primary',
|
|
31
|
+
children,
|
|
32
|
+
dataTestId = undefined
|
|
33
|
+
}: Props = $props();
|
|
34
|
+
|
|
35
|
+
type Variant =
|
|
36
|
+
| 'primary'
|
|
37
|
+
| 'secondary'
|
|
38
|
+
| 'transparent'
|
|
39
|
+
| 'danger'
|
|
40
|
+
| 'outline'
|
|
41
|
+
| 'secondary-inverse';
|
|
42
|
+
|
|
43
|
+
const Variants: Record<Variant, string> = {
|
|
44
|
+
primary: 'bg-accent-inverse text-primary-inverse hover:bg-accent-inverse-hover ',
|
|
45
|
+
secondary: 'bg-neutral text-primary hover:bg-neutral-hover active:bg-neutral',
|
|
46
|
+
transparent: 'bg-transparent text-primary hover:bg-neutral active:red',
|
|
47
|
+
danger: 'bg-danger-inverse text-primary-inverse hover:bg-danger-inverse-hover ',
|
|
48
|
+
outline:
|
|
49
|
+
'bg-transparent text-primary border border-interactive hover:bg-neutral-hover disabled:border-none',
|
|
50
|
+
'secondary-inverse':
|
|
51
|
+
'bg-neutral-inverse text-primary-inverse hover:bg-neutral-inverse-hover active:bg-neutral-inverse'
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
const sizes = {
|
|
55
|
+
sm: 'h-8 px-3 py-2',
|
|
56
|
+
md: 'h-10 px-5 py-3',
|
|
57
|
+
lg: 'h-12 px-6 py-4'
|
|
58
|
+
};
|
|
59
|
+
let sizeClassName = $derived(sizes[size]);
|
|
60
|
+
let colorClassName = $derived(Variants[variant]);
|
|
61
|
+
</script>
|
|
62
|
+
|
|
63
|
+
<button
|
|
64
|
+
aria-label={accessibilityLabel}
|
|
65
|
+
onclick={(e) => {
|
|
66
|
+
if (!loading) {
|
|
67
|
+
onClick(e);
|
|
68
|
+
} else {
|
|
69
|
+
e.preventDefault();
|
|
70
|
+
}
|
|
71
|
+
}}
|
|
72
|
+
{type}
|
|
73
|
+
{disabled}
|
|
74
|
+
{id}
|
|
75
|
+
{tabindex}
|
|
76
|
+
class:cursor-wait={loading}
|
|
77
|
+
class="inline-flex items-center justify-center gap-2 rounded-full text-base font-medium leading-6 duration-150 disabled:bg-neutral disabled:text-tertiary {colorClassName} {sizeClassName} {className}"
|
|
78
|
+
data-testid={dataTestId}
|
|
79
|
+
>
|
|
80
|
+
{#if loading}
|
|
81
|
+
<Spinner />
|
|
82
|
+
{:else}
|
|
83
|
+
{@render children?.()}
|
|
84
|
+
{/if}
|
|
85
|
+
</button>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Snippet } from 'svelte';
|
|
2
|
+
declare const Button: import("svelte").Component<{
|
|
3
|
+
class?: string;
|
|
4
|
+
onClick?: (event?: MouseEvent) => void;
|
|
5
|
+
type?: "button" | "submit" | "reset" | null | undefined;
|
|
6
|
+
loading?: boolean;
|
|
7
|
+
disabled?: boolean;
|
|
8
|
+
accessibilityLabel?: string;
|
|
9
|
+
size?: "sm" | "md" | "lg";
|
|
10
|
+
id?: string | undefined;
|
|
11
|
+
tabindex?: number | undefined;
|
|
12
|
+
variant?: "primary" | "secondary" | "transparent" | "danger" | "outline" | "secondary-inverse";
|
|
13
|
+
children?: Snippet;
|
|
14
|
+
dataTestId?: string;
|
|
15
|
+
}, {}, "">;
|
|
16
|
+
type Button = ReturnType<typeof Button>;
|
|
17
|
+
export default Button;
|