@reshape-biotech/design-system 0.0.36 → 0.0.38
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/dist/components/button/Button.svelte +93 -19
- package/dist/components/drawer/Drawer.stories.svelte +9 -9
- package/dist/components/drawer/Drawer.svelte +2 -5
- package/dist/components/drawer/Drawer.svelte.d.ts +1 -3
- package/dist/components/dropdown/Dropdown.stories.svelte +30 -30
- package/dist/components/dropdown/Dropdown.svelte +3 -6
- package/dist/components/dropdown/Dropdown.svelte.d.ts +2 -4
- package/dist/components/table/Table.stories.svelte +17 -17
- package/dist/components/table/Table.svelte +6 -8
- package/dist/components/table/Table.svelte.d.ts +5 -7
- package/dist/components/tabs/Tabs.stories.svelte +9 -11
- package/dist/components/tabs/Tabs.svelte +2 -4
- package/dist/components/tabs/Tabs.svelte.d.ts +7 -1
- package/dist/tailwind-safelist.d.ts +5 -0
- package/dist/tailwind-safelist.js +61 -6
- package/package.json +1 -1
|
@@ -40,24 +40,8 @@
|
|
|
40
40
|
| 'outline'
|
|
41
41
|
| 'secondary-inverse';
|
|
42
42
|
|
|
43
|
-
|
|
44
|
-
|
|
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]);
|
|
43
|
+
let variantClass = $derived(`btn-${variant}`);
|
|
44
|
+
let sizeClass = $derived(`btn-size-${size}`);
|
|
61
45
|
</script>
|
|
62
46
|
|
|
63
47
|
<button
|
|
@@ -74,7 +58,7 @@
|
|
|
74
58
|
{id}
|
|
75
59
|
{tabindex}
|
|
76
60
|
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 {
|
|
61
|
+
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 {variantClass} {sizeClass} {className}"
|
|
78
62
|
data-testid={dataTestId}
|
|
79
63
|
>
|
|
80
64
|
{#if loading}
|
|
@@ -83,3 +67,93 @@
|
|
|
83
67
|
{@render children?.()}
|
|
84
68
|
{/if}
|
|
85
69
|
</button>
|
|
70
|
+
|
|
71
|
+
<style>
|
|
72
|
+
/* Size variants */
|
|
73
|
+
.btn-size-sm {
|
|
74
|
+
height: 2rem;
|
|
75
|
+
padding-left: 0.75rem;
|
|
76
|
+
padding-right: 0.75rem;
|
|
77
|
+
padding-top: 0.5rem;
|
|
78
|
+
padding-bottom: 0.5rem
|
|
79
|
+
}
|
|
80
|
+
.btn-size-md {
|
|
81
|
+
height: 2.5rem;
|
|
82
|
+
padding-left: 1.25rem;
|
|
83
|
+
padding-right: 1.25rem;
|
|
84
|
+
padding-top: 0.75rem;
|
|
85
|
+
padding-bottom: 0.75rem
|
|
86
|
+
}
|
|
87
|
+
.btn-size-lg {
|
|
88
|
+
height: 3rem;
|
|
89
|
+
padding-left: 1.5rem;
|
|
90
|
+
padding-right: 1.5rem;
|
|
91
|
+
padding-top: 1rem;
|
|
92
|
+
padding-bottom: 1rem
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/* Button variants */
|
|
96
|
+
.btn-primary {
|
|
97
|
+
--tw-bg-opacity: 1;
|
|
98
|
+
background-color: rgb(87 80 238 / var(--tw-bg-opacity, 1));
|
|
99
|
+
--tw-text-opacity: 1;
|
|
100
|
+
color: rgb(255 255 255 / var(--tw-text-opacity, 1))
|
|
101
|
+
}
|
|
102
|
+
.btn-primary:hover {
|
|
103
|
+
--tw-bg-opacity: 1;
|
|
104
|
+
background-color: rgb(71 65 193 / var(--tw-bg-opacity, 1))
|
|
105
|
+
}
|
|
106
|
+
.btn-secondary {
|
|
107
|
+
background-color: #12192a0d;
|
|
108
|
+
--tw-text-opacity: 1;
|
|
109
|
+
color: rgb(18 25 42 / var(--tw-text-opacity, 1))
|
|
110
|
+
}
|
|
111
|
+
.btn-secondary:hover {
|
|
112
|
+
background-color: #12192A1A
|
|
113
|
+
}
|
|
114
|
+
.btn-secondary:active {
|
|
115
|
+
background-color: #12192a0d
|
|
116
|
+
}
|
|
117
|
+
.btn-transparent {
|
|
118
|
+
background-color: transparent;
|
|
119
|
+
--tw-text-opacity: 1;
|
|
120
|
+
color: rgb(18 25 42 / var(--tw-text-opacity, 1))
|
|
121
|
+
}
|
|
122
|
+
.btn-transparent:hover {
|
|
123
|
+
background-color: #12192a0d
|
|
124
|
+
}
|
|
125
|
+
.btn-danger {
|
|
126
|
+
--tw-bg-opacity: 1;
|
|
127
|
+
background-color: rgb(235 70 71 / var(--tw-bg-opacity, 1));
|
|
128
|
+
--tw-text-opacity: 1;
|
|
129
|
+
color: rgb(255 255 255 / var(--tw-text-opacity, 1))
|
|
130
|
+
}
|
|
131
|
+
.btn-danger:hover {
|
|
132
|
+
--tw-bg-opacity: 1;
|
|
133
|
+
background-color: rgb(191 57 58 / var(--tw-bg-opacity, 1))
|
|
134
|
+
}
|
|
135
|
+
.btn-outline {
|
|
136
|
+
border-width: 1px;
|
|
137
|
+
border-color: #12192A26;
|
|
138
|
+
background-color: transparent;
|
|
139
|
+
--tw-text-opacity: 1;
|
|
140
|
+
color: rgb(18 25 42 / var(--tw-text-opacity, 1))
|
|
141
|
+
}
|
|
142
|
+
.btn-outline:hover {
|
|
143
|
+
background-color: #12192A1A
|
|
144
|
+
}
|
|
145
|
+
.btn-outline:disabled {
|
|
146
|
+
border-style: none
|
|
147
|
+
}
|
|
148
|
+
.btn-secondary-inverse {
|
|
149
|
+
background-color: #FFFFFF0D;
|
|
150
|
+
--tw-text-opacity: 1;
|
|
151
|
+
color: rgb(255 255 255 / var(--tw-text-opacity, 1))
|
|
152
|
+
}
|
|
153
|
+
.btn-secondary-inverse:hover {
|
|
154
|
+
background-color: #FFFFFF26
|
|
155
|
+
}
|
|
156
|
+
.btn-secondary-inverse:active {
|
|
157
|
+
background-color: #FFFFFF0D
|
|
158
|
+
}
|
|
159
|
+
</style>
|
|
@@ -14,11 +14,11 @@
|
|
|
14
14
|
<Story name="Base">
|
|
15
15
|
<div class="py-12">
|
|
16
16
|
<Drawer id="my-drawer">
|
|
17
|
-
{#snippet trigger({
|
|
17
|
+
{#snippet trigger({ DrawerLabel })}
|
|
18
18
|
<div>
|
|
19
|
-
<
|
|
19
|
+
<DrawerLabel id="my-drawer" classes="btn btn-primary rounded-full "
|
|
20
20
|
>Open Drawer
|
|
21
|
-
</
|
|
21
|
+
</DrawerLabel>
|
|
22
22
|
</div>
|
|
23
23
|
{/snippet}
|
|
24
24
|
{#snippet content()}
|
|
@@ -35,10 +35,10 @@
|
|
|
35
35
|
<Story name="Open">
|
|
36
36
|
<div class="py-12">
|
|
37
37
|
<Drawer id="my-drawer" open controlled>
|
|
38
|
-
{#snippet trigger({
|
|
39
|
-
<
|
|
38
|
+
{#snippet trigger({ DrawerLabel })}
|
|
39
|
+
<DrawerLabel id="my-drawer" classes="btn btn-primary rounded-full "
|
|
40
40
|
>Open Drawer
|
|
41
|
-
</
|
|
41
|
+
</DrawerLabel>
|
|
42
42
|
{/snippet}
|
|
43
43
|
{#snippet content()}
|
|
44
44
|
<div>
|
|
@@ -54,10 +54,10 @@
|
|
|
54
54
|
<Story name="Open Left">
|
|
55
55
|
<div class="py-12">
|
|
56
56
|
<Drawer id="my-drawer" side="left">
|
|
57
|
-
{#snippet trigger({
|
|
58
|
-
<
|
|
57
|
+
{#snippet trigger({ DrawerLabel })}
|
|
58
|
+
<DrawerLabel id="my-drawer" classes="btn btn-primary rounded-full "
|
|
59
59
|
>Open Drawer
|
|
60
|
-
</
|
|
60
|
+
</DrawerLabel>
|
|
61
61
|
{/snippet}
|
|
62
62
|
{#snippet content()}
|
|
63
63
|
<div>
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
// Open only works when controlled is true
|
|
9
9
|
open?: boolean;
|
|
10
10
|
side?: 'left' | 'right';
|
|
11
|
-
trigger?: Snippet<[{
|
|
11
|
+
trigger?: Snippet<[{ DrawerLabel: typeof DrawerLabel }]>;
|
|
12
12
|
content: Snippet;
|
|
13
13
|
}
|
|
14
14
|
|
|
@@ -20,9 +20,6 @@
|
|
|
20
20
|
trigger,
|
|
21
21
|
content
|
|
22
22
|
}: Props = $props();
|
|
23
|
-
const C = {
|
|
24
|
-
DrawerLabel
|
|
25
|
-
};
|
|
26
23
|
</script>
|
|
27
24
|
|
|
28
25
|
<div class={`drawer-auto-gutter drawer`} class:drawer-end={side === 'right'}>
|
|
@@ -33,7 +30,7 @@
|
|
|
33
30
|
{/if}
|
|
34
31
|
|
|
35
32
|
<div class="drawer-content">
|
|
36
|
-
{@render trigger?.({
|
|
33
|
+
{@render trigger?.({ DrawerLabel })}
|
|
37
34
|
</div>
|
|
38
35
|
<div class="drawer-side" inert={controlled ? !open : false}>
|
|
39
36
|
<label for={id} aria-label="close sidebar" class="drawer-overlay"></label>
|
|
@@ -15,16 +15,16 @@
|
|
|
15
15
|
{#snippet trigger({ Trigger })}
|
|
16
16
|
<Trigger>Dropdown</Trigger>
|
|
17
17
|
{/snippet}
|
|
18
|
-
{#snippet content({
|
|
18
|
+
{#snippet content({ DropdownMenu })}
|
|
19
19
|
<div>
|
|
20
|
-
<
|
|
20
|
+
<DropdownMenu class="w-full">
|
|
21
21
|
<li>
|
|
22
22
|
<p>1st item</p>
|
|
23
23
|
</li>
|
|
24
24
|
<li>
|
|
25
25
|
<p>2nd item</p>
|
|
26
26
|
</li>
|
|
27
|
-
</
|
|
27
|
+
</DropdownMenu>
|
|
28
28
|
</div>
|
|
29
29
|
{/snippet}
|
|
30
30
|
</Dropdown>
|
|
@@ -37,16 +37,16 @@
|
|
|
37
37
|
{#snippet trigger({ Trigger })}
|
|
38
38
|
<Trigger variant="secondary">Dropdown</Trigger>
|
|
39
39
|
{/snippet}
|
|
40
|
-
{#snippet content({
|
|
40
|
+
{#snippet content({ DropdownMenu })}
|
|
41
41
|
<div>
|
|
42
|
-
<
|
|
42
|
+
<DropdownMenu class="w-full">
|
|
43
43
|
<li>
|
|
44
44
|
<p>1st item</p>
|
|
45
45
|
</li>
|
|
46
46
|
<li>
|
|
47
47
|
<p>2nd item</p>
|
|
48
48
|
</li>
|
|
49
|
-
</
|
|
49
|
+
</DropdownMenu>
|
|
50
50
|
</div>
|
|
51
51
|
{/snippet}
|
|
52
52
|
</Dropdown>
|
|
@@ -58,16 +58,16 @@
|
|
|
58
58
|
{#snippet trigger({ Trigger })}
|
|
59
59
|
<Trigger variant="transparent">Dropdown</Trigger>
|
|
60
60
|
{/snippet}
|
|
61
|
-
{#snippet content({
|
|
61
|
+
{#snippet content({ DropdownMenu })}
|
|
62
62
|
<div>
|
|
63
|
-
<
|
|
63
|
+
<DropdownMenu class="w-full">
|
|
64
64
|
<li>
|
|
65
65
|
<p>1st item</p>
|
|
66
66
|
</li>
|
|
67
67
|
<li>
|
|
68
68
|
<p>2nd item</p>
|
|
69
69
|
</li>
|
|
70
|
-
</
|
|
70
|
+
</DropdownMenu>
|
|
71
71
|
</div>
|
|
72
72
|
{/snippet}
|
|
73
73
|
</Dropdown>
|
|
@@ -79,16 +79,16 @@
|
|
|
79
79
|
{#snippet trigger({ Trigger })}
|
|
80
80
|
<Trigger variant="danger">Dropdown</Trigger>
|
|
81
81
|
{/snippet}
|
|
82
|
-
{#snippet content({
|
|
82
|
+
{#snippet content({ DropdownMenu })}
|
|
83
83
|
<div>
|
|
84
|
-
<
|
|
84
|
+
<DropdownMenu class="w-full">
|
|
85
85
|
<li>
|
|
86
86
|
<p>1st item</p>
|
|
87
87
|
</li>
|
|
88
88
|
<li>
|
|
89
89
|
<p>2nd item</p>
|
|
90
90
|
</li>
|
|
91
|
-
</
|
|
91
|
+
</DropdownMenu>
|
|
92
92
|
</div>
|
|
93
93
|
{/snippet}
|
|
94
94
|
</Dropdown>
|
|
@@ -103,16 +103,16 @@
|
|
|
103
103
|
<Trigger>Bottom</Trigger>
|
|
104
104
|
{/snippet}
|
|
105
105
|
|
|
106
|
-
{#snippet content({
|
|
106
|
+
{#snippet content({ DropdownMenu })}
|
|
107
107
|
<div>
|
|
108
|
-
<
|
|
108
|
+
<DropdownMenu class="w-[120px]">
|
|
109
109
|
<li>
|
|
110
110
|
<p>1st item</p>
|
|
111
111
|
</li>
|
|
112
112
|
<li>
|
|
113
113
|
<p>2nd item</p>
|
|
114
114
|
</li>
|
|
115
|
-
</
|
|
115
|
+
</DropdownMenu>
|
|
116
116
|
</div>
|
|
117
117
|
{/snippet}
|
|
118
118
|
</Dropdown>
|
|
@@ -120,16 +120,16 @@
|
|
|
120
120
|
{#snippet trigger({ Trigger })}
|
|
121
121
|
<Trigger>Top</Trigger>
|
|
122
122
|
{/snippet}
|
|
123
|
-
{#snippet content({
|
|
123
|
+
{#snippet content({ DropdownMenu })}
|
|
124
124
|
<div>
|
|
125
|
-
<
|
|
125
|
+
<DropdownMenu class="w-[120px]">
|
|
126
126
|
<li>
|
|
127
127
|
<p>1st item</p>
|
|
128
128
|
</li>
|
|
129
129
|
<li>
|
|
130
130
|
<p>2nd item</p>
|
|
131
131
|
</li>
|
|
132
|
-
</
|
|
132
|
+
</DropdownMenu>
|
|
133
133
|
</div>
|
|
134
134
|
{/snippet}
|
|
135
135
|
</Dropdown>
|
|
@@ -137,16 +137,16 @@
|
|
|
137
137
|
{#snippet trigger({ Trigger })}
|
|
138
138
|
<Trigger>Right</Trigger>
|
|
139
139
|
{/snippet}
|
|
140
|
-
{#snippet content({
|
|
140
|
+
{#snippet content({ DropdownMenu })}
|
|
141
141
|
<div>
|
|
142
|
-
<
|
|
142
|
+
<DropdownMenu class="w-[120px]">
|
|
143
143
|
<li>
|
|
144
144
|
<p>1st item</p>
|
|
145
145
|
</li>
|
|
146
146
|
<li>
|
|
147
147
|
<p>2nd item</p>
|
|
148
148
|
</li>
|
|
149
|
-
</
|
|
149
|
+
</DropdownMenu>
|
|
150
150
|
</div>
|
|
151
151
|
{/snippet}
|
|
152
152
|
</Dropdown>
|
|
@@ -154,16 +154,16 @@
|
|
|
154
154
|
{#snippet trigger({ Trigger })}
|
|
155
155
|
<Trigger>Left</Trigger>
|
|
156
156
|
{/snippet}
|
|
157
|
-
{#snippet content({
|
|
157
|
+
{#snippet content({ DropdownMenu })}
|
|
158
158
|
<div>
|
|
159
|
-
<
|
|
159
|
+
<DropdownMenu class="w-[120px]">
|
|
160
160
|
<li>
|
|
161
161
|
<p>1st item</p>
|
|
162
162
|
</li>
|
|
163
163
|
<li>
|
|
164
164
|
<p>2nd item</p>
|
|
165
165
|
</li>
|
|
166
|
-
</
|
|
166
|
+
</DropdownMenu>
|
|
167
167
|
</div>
|
|
168
168
|
{/snippet}
|
|
169
169
|
</Dropdown>
|
|
@@ -177,16 +177,16 @@
|
|
|
177
177
|
{#snippet trigger({ Trigger })}
|
|
178
178
|
<Trigger>Dropdown</Trigger>
|
|
179
179
|
{/snippet}
|
|
180
|
-
{#snippet content({
|
|
180
|
+
{#snippet content({ DropdownMenu })}
|
|
181
181
|
<div>
|
|
182
|
-
<
|
|
182
|
+
<DropdownMenu>
|
|
183
183
|
<li>
|
|
184
184
|
<p>1st item</p>
|
|
185
185
|
</li>
|
|
186
186
|
<li>
|
|
187
187
|
<p>2nd item</p>
|
|
188
188
|
</li>
|
|
189
|
-
</
|
|
189
|
+
</DropdownMenu>
|
|
190
190
|
</div>
|
|
191
191
|
{/snippet}
|
|
192
192
|
</Dropdown>
|
|
@@ -199,14 +199,14 @@
|
|
|
199
199
|
{#snippet trigger({ Trigger })}
|
|
200
200
|
<Trigger>Dropdown</Trigger>
|
|
201
201
|
{/snippet}
|
|
202
|
-
{#snippet content({
|
|
202
|
+
{#snippet content({ DropdownContent })}
|
|
203
203
|
<div>
|
|
204
|
-
<
|
|
204
|
+
<DropdownContent>
|
|
205
205
|
<div>
|
|
206
206
|
<p>This is a dropdown with other content</p>
|
|
207
207
|
<p>It doesn't have to be list items</p>
|
|
208
208
|
</div>
|
|
209
|
-
</
|
|
209
|
+
</DropdownContent>
|
|
210
210
|
</div>
|
|
211
211
|
{/snippet}
|
|
212
212
|
</Dropdown>
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
class?: string;
|
|
14
14
|
trigger?: Snippet<[{ Trigger: typeof DropdownTrigger }]>;
|
|
15
15
|
content?: Snippet<
|
|
16
|
-
[{
|
|
16
|
+
[{ DropdownContent: typeof DropdownContent; DropdownMenu: typeof DropdownMenu }]
|
|
17
17
|
>;
|
|
18
18
|
}
|
|
19
19
|
|
|
@@ -28,10 +28,7 @@
|
|
|
28
28
|
content
|
|
29
29
|
}: Props = $props();
|
|
30
30
|
|
|
31
|
-
let C = {
|
|
32
|
-
DropdownMenu,
|
|
33
|
-
DropdownContent
|
|
34
|
-
};
|
|
31
|
+
let C = {};
|
|
35
32
|
|
|
36
33
|
const closeDropdown = () => {
|
|
37
34
|
open = false;
|
|
@@ -66,6 +63,6 @@
|
|
|
66
63
|
onkeydown={handleKeyDown}
|
|
67
64
|
onclick={handleItemClick}
|
|
68
65
|
>
|
|
69
|
-
{@render content?.({
|
|
66
|
+
{@render content?.({ DropdownMenu, DropdownContent })}
|
|
70
67
|
</div>
|
|
71
68
|
</div>
|
|
@@ -66,25 +66,25 @@
|
|
|
66
66
|
|
|
67
67
|
<Story name="Base">
|
|
68
68
|
<Table>
|
|
69
|
-
{#snippet children({
|
|
70
|
-
<
|
|
71
|
-
<
|
|
72
|
-
<
|
|
73
|
-
<
|
|
74
|
-
<
|
|
75
|
-
<
|
|
76
|
-
</
|
|
77
|
-
</
|
|
78
|
-
<
|
|
69
|
+
{#snippet children({ THead, TBody, Tr, Th, Td })}
|
|
70
|
+
<THead>
|
|
71
|
+
<Tr>
|
|
72
|
+
<Th>Name</Th>
|
|
73
|
+
<Th>Age</Th>
|
|
74
|
+
<Th class="w-[100px]">Role</Th>
|
|
75
|
+
<Th class="w-6"></Th>
|
|
76
|
+
</Tr>
|
|
77
|
+
</THead>
|
|
78
|
+
<TBody>
|
|
79
79
|
{#each users as user}
|
|
80
|
-
<
|
|
81
|
-
<
|
|
82
|
-
<
|
|
83
|
-
<
|
|
84
|
-
<
|
|
85
|
-
</
|
|
80
|
+
<Tr disabled={user.role === 'deactivated'}>
|
|
81
|
+
<Td>{user.name}</Td>
|
|
82
|
+
<Td>{user.age}</Td>
|
|
83
|
+
<Td>{user.role}</Td>
|
|
84
|
+
<Td><IconButton disabled={user.role === 'deactivated'}><Phone /></IconButton></Td>
|
|
85
|
+
</Tr>
|
|
86
86
|
{/each}
|
|
87
|
-
</
|
|
87
|
+
</TBody>
|
|
88
88
|
{/snippet}
|
|
89
89
|
</Table>
|
|
90
90
|
</Story>
|
|
@@ -11,13 +11,11 @@
|
|
|
11
11
|
children?: Snippet<
|
|
12
12
|
[
|
|
13
13
|
{
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
Td: typeof Td;
|
|
20
|
-
};
|
|
14
|
+
THead: typeof THead;
|
|
15
|
+
TBody: typeof TBody;
|
|
16
|
+
Tr: typeof Tr;
|
|
17
|
+
Th: typeof Th;
|
|
18
|
+
Td: typeof Td;
|
|
21
19
|
}
|
|
22
20
|
]
|
|
23
21
|
>;
|
|
@@ -35,7 +33,7 @@
|
|
|
35
33
|
|
|
36
34
|
<div class="w-full rounded-lg bg-surface px-6 pb-1 pt-3">
|
|
37
35
|
<table class={`w-full table-fixed sm:table-auto xl:table-${tableLayout}`}>
|
|
38
|
-
{@render children?.({
|
|
36
|
+
{@render children?.({ THead: THead, TBody: TBody, Tr: Tr, Th: Th, Td: Td })}
|
|
39
37
|
</table>
|
|
40
38
|
</div>
|
|
41
39
|
|
|
@@ -8,13 +8,11 @@ interface Props {
|
|
|
8
8
|
tableLayout?: 'fixed' | 'auto';
|
|
9
9
|
children?: Snippet<[
|
|
10
10
|
{
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
Td: typeof Td;
|
|
17
|
-
};
|
|
11
|
+
THead: typeof THead;
|
|
12
|
+
TBody: typeof TBody;
|
|
13
|
+
Tr: typeof Tr;
|
|
14
|
+
Th: typeof Th;
|
|
15
|
+
Td: typeof Td;
|
|
18
16
|
}
|
|
19
17
|
]>;
|
|
20
18
|
}
|
|
@@ -13,18 +13,16 @@
|
|
|
13
13
|
|
|
14
14
|
<Story name="Primary">
|
|
15
15
|
<Tabs>
|
|
16
|
-
{#snippet children({
|
|
17
|
-
<
|
|
18
|
-
<
|
|
19
|
-
<
|
|
20
|
-
<
|
|
21
|
-
</
|
|
16
|
+
{#snippet children({ Tabs, Tab, Content })}
|
|
17
|
+
<Tabs>
|
|
18
|
+
<Tab active={activeTab === 'tab-1'} onClick={() => (activeTab = 'tab-1')}>Tab 1</Tab>
|
|
19
|
+
<Tab active={activeTab === 'tab-2'} onClick={() => (activeTab = 'tab-2')}>Tab 2</Tab>
|
|
20
|
+
<Tab active={activeTab === 'tab-3'} onClick={() => (activeTab = 'tab-3')}>Tab 3</Tab>
|
|
21
|
+
</Tabs>
|
|
22
22
|
|
|
23
|
-
<
|
|
24
|
-
|
|
25
|
-
<
|
|
26
|
-
|
|
27
|
-
<C.Content show={activeTab === 'tab-3'}>Showing tab 3 content</C.Content>
|
|
23
|
+
<Content show={activeTab === 'tab-1'}>Showing tab 1 content</Content>
|
|
24
|
+
<Content show={activeTab === 'tab-2'}>Showing tab 2 content</Content>
|
|
25
|
+
<Content show={activeTab === 'tab-3'}>Showing tab 3 content</Content>
|
|
28
26
|
{/snippet}
|
|
29
27
|
</Tabs>
|
|
30
28
|
</Story>
|
|
@@ -4,12 +4,10 @@
|
|
|
4
4
|
import Tab from './components/Tab.svelte';
|
|
5
5
|
import Tabs from './components/Tabs.svelte';
|
|
6
6
|
interface Props {
|
|
7
|
-
children?: Snippet<[
|
|
7
|
+
children?: Snippet<[{ Tabs: typeof Tabs; Tab: typeof Tab; Content: typeof Content }]>;
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
let { children }: Props = $props();
|
|
11
|
-
|
|
12
|
-
const C = { Tabs, Tab, Content };
|
|
13
11
|
</script>
|
|
14
12
|
|
|
15
|
-
{@render children?.({
|
|
13
|
+
{@render children?.({ Tabs, Tab, Content })}
|
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
import type { Snippet } from 'svelte';
|
|
2
|
+
import Content from './components/Content.svelte';
|
|
3
|
+
import Tab from './components/Tab.svelte';
|
|
2
4
|
import Tabs from './components/Tabs.svelte';
|
|
3
5
|
interface Props {
|
|
4
|
-
children?: Snippet<[
|
|
6
|
+
children?: Snippet<[{
|
|
7
|
+
Tabs: typeof Tabs;
|
|
8
|
+
Tab: typeof Tab;
|
|
9
|
+
Content: typeof Content;
|
|
10
|
+
}]>;
|
|
5
11
|
}
|
|
6
12
|
declare const Tabs: import("svelte").Component<Props, {}, "">;
|
|
7
13
|
type Tabs = ReturnType<typeof Tabs>;
|
|
@@ -11,6 +11,7 @@ export const sizes: string[];
|
|
|
11
11
|
export const display: string[];
|
|
12
12
|
export const rounded: string[];
|
|
13
13
|
export const tables: string[];
|
|
14
|
+
export const leading: string[];
|
|
14
15
|
export const flexLayout: string[];
|
|
15
16
|
export const spacing: string[];
|
|
16
17
|
export const sizing: string[];
|
|
@@ -18,5 +19,9 @@ export const positioning: string[];
|
|
|
18
19
|
export const cursors: string[];
|
|
19
20
|
export const misc: string[];
|
|
20
21
|
export const daisyui: string[];
|
|
22
|
+
export const hoverVariants: string[];
|
|
23
|
+
export const focusVariants: string[];
|
|
24
|
+
export const disabledVariants: string[];
|
|
25
|
+
export const activeVariants: string[];
|
|
21
26
|
export const safelist: string[];
|
|
22
27
|
export const responsive: string[];
|
|
@@ -73,7 +73,8 @@ export const borders = [
|
|
|
73
73
|
'border-interactive',
|
|
74
74
|
'border-hover',
|
|
75
75
|
'border-focus',
|
|
76
|
-
'border-danger'
|
|
76
|
+
'border-danger',
|
|
77
|
+
'border-transparent'
|
|
77
78
|
];
|
|
78
79
|
|
|
79
80
|
export const shadows = [
|
|
@@ -137,6 +138,8 @@ export const rounded = [
|
|
|
137
138
|
|
|
138
139
|
export const tables = ['table-fixed', 'table-auto'];
|
|
139
140
|
|
|
141
|
+
export const leading = ['leading-4', 'leading-5', 'leading-6', 'leading-7'];
|
|
142
|
+
|
|
140
143
|
export const flexLayout = [
|
|
141
144
|
'flex',
|
|
142
145
|
'inline-flex',
|
|
@@ -155,6 +158,7 @@ export const flexLayout = [
|
|
|
155
158
|
'text-left',
|
|
156
159
|
'text-right',
|
|
157
160
|
'text-center',
|
|
161
|
+
'text-base',
|
|
158
162
|
'gap-1',
|
|
159
163
|
'gap-2',
|
|
160
164
|
'gap-3',
|
|
@@ -193,10 +197,7 @@ export const sizing = [
|
|
|
193
197
|
'h-5',
|
|
194
198
|
'h-6',
|
|
195
199
|
'h-7',
|
|
196
|
-
'h-
|
|
197
|
-
'h-10',
|
|
198
|
-
'h-11',
|
|
199
|
-
'h-12',
|
|
200
|
+
'h-16',
|
|
200
201
|
'h-28',
|
|
201
202
|
'h-screen',
|
|
202
203
|
'w-4',
|
|
@@ -225,6 +226,7 @@ export const misc = [
|
|
|
225
226
|
'active:red',
|
|
226
227
|
'active:bg-neutral',
|
|
227
228
|
'active:bg-neutral-inverse',
|
|
229
|
+
'[&>*>.control-button]:flex-col',
|
|
228
230
|
'[&>svg]:w-4',
|
|
229
231
|
'[&>svg]:h-4',
|
|
230
232
|
'[&>svg]:w-5',
|
|
@@ -387,6 +389,55 @@ export const daisyui = [
|
|
|
387
389
|
'stack'
|
|
388
390
|
];
|
|
389
391
|
|
|
392
|
+
// Add hover variants
|
|
393
|
+
export const hoverVariants = [
|
|
394
|
+
'hover:bg-neutral'
|
|
395
|
+
// 'hover:bg-neutral-hover',
|
|
396
|
+
// 'hover:bg-neutral-darker-hover',
|
|
397
|
+
// 'hover:bg-neutral-inverse-hover',
|
|
398
|
+
// 'hover:bg-accent-hover',
|
|
399
|
+
// 'hover:bg-accent-inverse-hover',
|
|
400
|
+
// 'hover:bg-success-hover',
|
|
401
|
+
// 'hover:bg-success-inverse-hover',
|
|
402
|
+
// 'hover:bg-warning-hover',
|
|
403
|
+
// 'hover:bg-warning-inverse-hover',
|
|
404
|
+
// 'hover:bg-danger-hover',
|
|
405
|
+
// 'hover:bg-danger-inverse-hover',
|
|
406
|
+
// 'hover:bg-blue-hover',
|
|
407
|
+
// 'hover:bg-orange-hover',
|
|
408
|
+
// 'hover:bg-orange-inverse-hover',
|
|
409
|
+
// 'hover:bg-sky-hover',
|
|
410
|
+
// 'hover:bg-sky-inverse-hover'
|
|
411
|
+
];
|
|
412
|
+
|
|
413
|
+
// Add focus variants
|
|
414
|
+
export const focusVariants = [
|
|
415
|
+
'focus:outline-none',
|
|
416
|
+
'focus:ring-2',
|
|
417
|
+
'focus:ring-offset-2',
|
|
418
|
+
'focus:border-focus',
|
|
419
|
+
'focus-visible:outline-none',
|
|
420
|
+
'focus-visible:ring-2'
|
|
421
|
+
];
|
|
422
|
+
|
|
423
|
+
// Add disabled variants
|
|
424
|
+
export const disabledVariants = [
|
|
425
|
+
'disabled:bg-neutral',
|
|
426
|
+
'disabled:opacity-50',
|
|
427
|
+
'disabled:cursor-not-allowed',
|
|
428
|
+
'disabled:text-tertiary',
|
|
429
|
+
'disabled:border-none'
|
|
430
|
+
];
|
|
431
|
+
|
|
432
|
+
// Add active variants
|
|
433
|
+
export const activeVariants = [
|
|
434
|
+
'active:bg-neutral',
|
|
435
|
+
'active:bg-neutral-inverse',
|
|
436
|
+
'active:red',
|
|
437
|
+
'active:scale-95',
|
|
438
|
+
'active:transform'
|
|
439
|
+
];
|
|
440
|
+
|
|
390
441
|
// Export all arrays as a single safelist
|
|
391
442
|
export const safelist = [
|
|
392
443
|
...textColors,
|
|
@@ -408,7 +459,11 @@ export const safelist = [
|
|
|
408
459
|
...positioning,
|
|
409
460
|
...cursors,
|
|
410
461
|
...misc,
|
|
411
|
-
...daisyui
|
|
462
|
+
...daisyui,
|
|
463
|
+
...hoverVariants,
|
|
464
|
+
...focusVariants,
|
|
465
|
+
...disabledVariants,
|
|
466
|
+
...activeVariants
|
|
412
467
|
];
|
|
413
468
|
|
|
414
469
|
export const responsive = ['sm:w-[460px]', 'md:flex', 'lg:block', 'sm:gap-2'];
|