@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
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { run } from 'svelte/legacy';
|
|
3
|
+
|
|
4
|
+
import { DateTime, type MonthNumbers } from 'luxon';
|
|
5
|
+
import { CaretLeft, CaretRight } from 'phosphor-svelte';
|
|
6
|
+
|
|
7
|
+
interface Props {
|
|
8
|
+
selectedDate: DateTime | undefined;
|
|
9
|
+
onClick?: any;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
let { selectedDate = $bindable(), onClick = (date: DateTime) => {} }: Props = $props();
|
|
13
|
+
|
|
14
|
+
const arrDays = ['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su'];
|
|
15
|
+
let today = DateTime.local();
|
|
16
|
+
const currentDay = today.day;
|
|
17
|
+
const currentMonth = today.month;
|
|
18
|
+
const currentYear = today.year;
|
|
19
|
+
let shownMonth = $state(today.month);
|
|
20
|
+
let shownYear = $state(today.year);
|
|
21
|
+
let selectedDay: number | undefined = $state();
|
|
22
|
+
let selectedMonth: number | undefined = $state();
|
|
23
|
+
let selectedYear: number | undefined = $state();
|
|
24
|
+
let rows = $state(initRows());
|
|
25
|
+
|
|
26
|
+
run(() => {
|
|
27
|
+
if (selectedDate) {
|
|
28
|
+
selectedDay = selectedDate.day;
|
|
29
|
+
selectedMonth = selectedDate.month;
|
|
30
|
+
selectedYear = selectedDate.year;
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
affectedRows();
|
|
35
|
+
|
|
36
|
+
function initRows() {
|
|
37
|
+
return [
|
|
38
|
+
[0, 0, 0, 0, 0, 0, 0],
|
|
39
|
+
[0, 0, 0, 0, 0, 0, 0],
|
|
40
|
+
[0, 0, 0, 0, 0, 0, 0],
|
|
41
|
+
[0, 0, 0, 0, 0, 0, 0],
|
|
42
|
+
[0, 0, 0, 0, 0, 0, 0],
|
|
43
|
+
[0, 0, 0, 0, 0, 0, 0]
|
|
44
|
+
];
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function affectedRows() {
|
|
48
|
+
rows = initRows();
|
|
49
|
+
const firstDayOfCurrentMonth = DateTime.local(shownYear, shownMonth, 1).weekday - 1; // 0-based index
|
|
50
|
+
const lastDayOfCurrentMonth = DateTime.local(shownYear, shownMonth, 1).daysInMonth;
|
|
51
|
+
|
|
52
|
+
if (lastDayOfCurrentMonth === undefined) {
|
|
53
|
+
// Handle invalid date
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
let iRow = 0;
|
|
58
|
+
let iCol = firstDayOfCurrentMonth; // Start at the correct weekday
|
|
59
|
+
let cpt = 1; // Start from day 1
|
|
60
|
+
|
|
61
|
+
for (iRow = 0; iRow < 6; iRow++) {
|
|
62
|
+
while (iCol < 7 && cpt <= lastDayOfCurrentMonth) {
|
|
63
|
+
rows[iRow][iCol] = cpt++;
|
|
64
|
+
iCol++;
|
|
65
|
+
}
|
|
66
|
+
iCol = 0; // Reset for the next row
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
function previousMonth() {
|
|
71
|
+
let dt = DateTime.local(shownYear, shownMonth).minus({ months: 1 });
|
|
72
|
+
shownMonth = dt.month as MonthNumbers;
|
|
73
|
+
shownYear = dt.year;
|
|
74
|
+
affectedRows();
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
function nextMonth() {
|
|
78
|
+
let dt = DateTime.local(shownYear, shownMonth).plus({ months: 1 });
|
|
79
|
+
shownMonth = dt.month as MonthNumbers;
|
|
80
|
+
shownYear = dt.year;
|
|
81
|
+
affectedRows();
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
function selectDate(y: number, m: number, d: number) {
|
|
85
|
+
selectedDate = DateTime.local(y, m, d);
|
|
86
|
+
onClick(selectedDate);
|
|
87
|
+
}
|
|
88
|
+
</script>
|
|
89
|
+
|
|
90
|
+
<!-- svelte-ignore a11y_click_events_have_key_events -->
|
|
91
|
+
<!-- svelte-ignore a11y_no_static_element_interactions -->
|
|
92
|
+
<div class="calendar-container" onclick={(e) => e.stopPropagation()}>
|
|
93
|
+
<div class="calendar">
|
|
94
|
+
<div class="calendar-header">
|
|
95
|
+
<div class="month-year">
|
|
96
|
+
<button class="btn-custom p-2" onclick={previousMonth} aria-label="calendar backward">
|
|
97
|
+
<CaretLeft class="text-secondary" weight="bold" size="0.75rem" />
|
|
98
|
+
</button>
|
|
99
|
+
<h4>
|
|
100
|
+
{DateTime.local(shownYear, shownMonth).toFormat('MMM yyyy')}
|
|
101
|
+
</h4>
|
|
102
|
+
<div>
|
|
103
|
+
<button class="btn-custom p-2" onclick={nextMonth} aria-label="calendar forward">
|
|
104
|
+
<CaretRight class="text-secondary" weight="bold" size="0.75rem" />
|
|
105
|
+
</button>
|
|
106
|
+
</div>
|
|
107
|
+
</div>
|
|
108
|
+
</div>
|
|
109
|
+
<div class="calendar-body">
|
|
110
|
+
<table>
|
|
111
|
+
<thead>
|
|
112
|
+
<tr>
|
|
113
|
+
{#each arrDays as day}
|
|
114
|
+
<th>
|
|
115
|
+
<p>{day}</p>
|
|
116
|
+
</th>
|
|
117
|
+
{/each}
|
|
118
|
+
</tr>
|
|
119
|
+
</thead>
|
|
120
|
+
<tbody>
|
|
121
|
+
{#each rows as col}
|
|
122
|
+
<tr>
|
|
123
|
+
{#each col as dayOfMonth}
|
|
124
|
+
<td>
|
|
125
|
+
{#if dayOfMonth > 0}
|
|
126
|
+
<div class="date-container">
|
|
127
|
+
<p
|
|
128
|
+
class={dayOfMonth === selectedDay &&
|
|
129
|
+
selectedMonth === shownMonth &&
|
|
130
|
+
selectedYear === shownYear
|
|
131
|
+
? 'date selected-date'
|
|
132
|
+
: 'date'}
|
|
133
|
+
>
|
|
134
|
+
<button
|
|
135
|
+
onclick={() => {
|
|
136
|
+
selectDate(shownYear, shownMonth, dayOfMonth);
|
|
137
|
+
}}
|
|
138
|
+
>
|
|
139
|
+
{dayOfMonth}
|
|
140
|
+
</button>
|
|
141
|
+
</p>
|
|
142
|
+
{#if dayOfMonth === currentDay && shownMonth === currentMonth && shownYear === currentYear && dayOfMonth != selectedDay}
|
|
143
|
+
<svg
|
|
144
|
+
class="current-date-indicator text-accent"
|
|
145
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
146
|
+
width="4"
|
|
147
|
+
height="4"
|
|
148
|
+
viewBox="0 0 4 4"
|
|
149
|
+
>
|
|
150
|
+
<circle cx="2" cy="2" r="2" fill="currentColor" />
|
|
151
|
+
</svg>
|
|
152
|
+
{/if}
|
|
153
|
+
</div>
|
|
154
|
+
{/if}
|
|
155
|
+
</td>
|
|
156
|
+
{/each}
|
|
157
|
+
</tr>
|
|
158
|
+
{/each}
|
|
159
|
+
</tbody>
|
|
160
|
+
</table>
|
|
161
|
+
</div>
|
|
162
|
+
</div>
|
|
163
|
+
</div>
|
|
164
|
+
|
|
165
|
+
<style>
|
|
166
|
+
.calendar-container {
|
|
167
|
+
display: flex;
|
|
168
|
+
width: 312px;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
.calendar {
|
|
172
|
+
overflow: hidden;
|
|
173
|
+
border-radius: 0.5rem;
|
|
174
|
+
--tw-bg-opacity: 1;
|
|
175
|
+
background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
|
|
176
|
+
padding: 1rem;
|
|
177
|
+
--tw-shadow: 0px 16px 24px 0px rgba(18, 25, 42, 0.16);
|
|
178
|
+
--tw-shadow-colored: 0px 16px 24px 0px var(--tw-shadow-color);
|
|
179
|
+
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
.month-year {
|
|
183
|
+
display: flex;
|
|
184
|
+
align-items: center;
|
|
185
|
+
justify-content: space-between;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
.month-year .btn-custom {
|
|
189
|
+
background: none;
|
|
190
|
+
border: none;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
.calendar-body {
|
|
194
|
+
display: flex;
|
|
195
|
+
align-items: center;
|
|
196
|
+
justify-content: space-between;
|
|
197
|
+
padding-top: 22px;
|
|
198
|
+
overflow-x: auto;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
table {
|
|
202
|
+
width: 100%;
|
|
203
|
+
border-spacing: 0;
|
|
204
|
+
border-collapse: collapse;
|
|
205
|
+
margin: 0;
|
|
206
|
+
padding: 0;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
table thead th p {
|
|
210
|
+
text-align: center;
|
|
211
|
+
font-size: 0.75rem;
|
|
212
|
+
line-height: 1rem;
|
|
213
|
+
font-weight: 400;
|
|
214
|
+
--tw-text-opacity: 1;
|
|
215
|
+
color: rgb(136 140 148 / var(--tw-text-opacity, 1));
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
td {
|
|
219
|
+
width: 40px;
|
|
220
|
+
height: 40px;
|
|
221
|
+
}
|
|
222
|
+
table th,
|
|
223
|
+
table td {
|
|
224
|
+
box-sizing: border-box;
|
|
225
|
+
padding: 0;
|
|
226
|
+
margin: 0;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
.date-container {
|
|
230
|
+
position: relative;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
.date-container .current-date-indicator {
|
|
234
|
+
position: absolute;
|
|
235
|
+
top: 20px;
|
|
236
|
+
left: 18px;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
.date {
|
|
240
|
+
display: flex;
|
|
241
|
+
cursor: pointer;
|
|
242
|
+
align-items: center;
|
|
243
|
+
justify-content: center;
|
|
244
|
+
font-size: 0.875rem;
|
|
245
|
+
line-height: 1.25rem;
|
|
246
|
+
font-weight: 400;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
.date :hover,
|
|
250
|
+
.date :focus {
|
|
251
|
+
height: 2.5rem;
|
|
252
|
+
width: 2.5rem;
|
|
253
|
+
border-radius: 0.5rem;
|
|
254
|
+
--tw-bg-opacity: 1;
|
|
255
|
+
background-color: rgb(87 80 238 / var(--tw-bg-opacity, 1));
|
|
256
|
+
--tw-text-opacity: 1;
|
|
257
|
+
color: rgb(255 255 255 / var(--tw-text-opacity, 1));
|
|
258
|
+
z-index: 1;
|
|
259
|
+
display: flex;
|
|
260
|
+
align-items: center;
|
|
261
|
+
justify-content: center;
|
|
262
|
+
cursor: pointer;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
.selected-date {
|
|
266
|
+
height: 2.5rem;
|
|
267
|
+
width: 2.5rem;
|
|
268
|
+
border-radius: 0.5rem;
|
|
269
|
+
--tw-bg-opacity: 1;
|
|
270
|
+
background-color: rgb(87 80 238 / var(--tw-bg-opacity, 1));
|
|
271
|
+
--tw-text-opacity: 1;
|
|
272
|
+
color: rgb(255 255 255 / var(--tw-text-opacity, 1));
|
|
273
|
+
display: flex;
|
|
274
|
+
align-items: center;
|
|
275
|
+
justify-content: center;
|
|
276
|
+
cursor: pointer;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
.date button {
|
|
280
|
+
border: none;
|
|
281
|
+
background: none;
|
|
282
|
+
}
|
|
283
|
+
</style>
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { DateTime } from 'luxon';
|
|
2
|
+
interface Props {
|
|
3
|
+
selectedDate: DateTime | undefined;
|
|
4
|
+
onClick?: any;
|
|
5
|
+
}
|
|
6
|
+
declare const DatePicker: import("svelte").Component<Props, {}, "selectedDate">;
|
|
7
|
+
type DatePicker = ReturnType<typeof DatePicker>;
|
|
8
|
+
export default DatePicker;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<script module>
|
|
2
|
+
import Divider from './Divider.svelte';
|
|
3
|
+
import { defineMeta } from '@storybook/addon-svelte-csf';
|
|
4
|
+
|
|
5
|
+
const { Story } = defineMeta({
|
|
6
|
+
component: Divider,
|
|
7
|
+
title: 'Design System/Divider',
|
|
8
|
+
tags: ['autodocs']
|
|
9
|
+
});
|
|
10
|
+
</script>
|
|
11
|
+
|
|
12
|
+
<Story name="Primary">
|
|
13
|
+
<Divider />
|
|
14
|
+
</Story>
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export default Divider;
|
|
2
|
+
type Divider = SvelteComponent<{
|
|
3
|
+
[x: string]: never;
|
|
4
|
+
}, {
|
|
5
|
+
[evt: string]: CustomEvent<any>;
|
|
6
|
+
}, {}> & {
|
|
7
|
+
$$bindings?: string | undefined;
|
|
8
|
+
};
|
|
9
|
+
declare const Divider: $$__sveltets_2_IsomorphicComponent<{
|
|
10
|
+
[x: string]: never;
|
|
11
|
+
}, {
|
|
12
|
+
[evt: string]: CustomEvent<any>;
|
|
13
|
+
}, {}, {}, string>;
|
|
14
|
+
import Divider from './Divider.svelte';
|
|
15
|
+
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> {
|
|
16
|
+
new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
|
|
17
|
+
$$bindings?: Bindings;
|
|
18
|
+
} & Exports;
|
|
19
|
+
(internal: unknown, props: {
|
|
20
|
+
$$events?: Events;
|
|
21
|
+
$$slots?: Slots;
|
|
22
|
+
}): Exports & {
|
|
23
|
+
$set?: any;
|
|
24
|
+
$on?: any;
|
|
25
|
+
};
|
|
26
|
+
z_$$bindings?: Bindings;
|
|
27
|
+
}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
<script module>
|
|
2
|
+
import { defineMeta } from '@storybook/addon-svelte-csf';
|
|
3
|
+
import Button from 'design-system/components/button/Button.svelte';
|
|
4
|
+
import Drawer from './Drawer.svelte';
|
|
5
|
+
|
|
6
|
+
const { Story } = defineMeta({
|
|
7
|
+
component: Drawer,
|
|
8
|
+
title: 'Design System/Drawer',
|
|
9
|
+
tags: ['autodocs']
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
let open = false;
|
|
13
|
+
</script>
|
|
14
|
+
|
|
15
|
+
<Story name="Base">
|
|
16
|
+
<div class="py-12">
|
|
17
|
+
<Drawer id="my-drawer">
|
|
18
|
+
{#snippet trigger({ C })}
|
|
19
|
+
<div>
|
|
20
|
+
<C.DrawerLabel id="my-drawer" classes="btn btn-primary rounded-full "
|
|
21
|
+
>Open Drawer
|
|
22
|
+
</C.DrawerLabel>
|
|
23
|
+
</div>
|
|
24
|
+
{/snippet}
|
|
25
|
+
{#snippet content()}
|
|
26
|
+
<div>
|
|
27
|
+
<div>
|
|
28
|
+
<p>Drawer content here</p>
|
|
29
|
+
</div>
|
|
30
|
+
</div>
|
|
31
|
+
{/snippet}
|
|
32
|
+
</Drawer>
|
|
33
|
+
</div>
|
|
34
|
+
</Story>
|
|
35
|
+
|
|
36
|
+
<Story name="Open">
|
|
37
|
+
<div class="py-12">
|
|
38
|
+
<Drawer id="my-drawer" open controlled>
|
|
39
|
+
{#snippet trigger({ C })}
|
|
40
|
+
<div>
|
|
41
|
+
<C.DrawerLabel id="my-drawer" classes="btn btn-primary rounded-full "
|
|
42
|
+
>Open Drawer
|
|
43
|
+
</C.DrawerLabel>
|
|
44
|
+
</div>
|
|
45
|
+
{/snippet}
|
|
46
|
+
{#snippet content()}
|
|
47
|
+
<div>
|
|
48
|
+
<div>
|
|
49
|
+
<p>Drawer content here</p>
|
|
50
|
+
</div>
|
|
51
|
+
</div>
|
|
52
|
+
{/snippet}
|
|
53
|
+
</Drawer>
|
|
54
|
+
</div>
|
|
55
|
+
</Story>
|
|
56
|
+
|
|
57
|
+
<Story name="With Button">
|
|
58
|
+
<div class="py-12">
|
|
59
|
+
<Drawer id="my-drawer" controlled bind:open>
|
|
60
|
+
{#snippet trigger()}
|
|
61
|
+
<div>
|
|
62
|
+
<Button
|
|
63
|
+
onClick={() => {
|
|
64
|
+
open = !open;
|
|
65
|
+
}}>Export</Button
|
|
66
|
+
>
|
|
67
|
+
</div>
|
|
68
|
+
{/snippet}
|
|
69
|
+
{#snippet content()}
|
|
70
|
+
<div>
|
|
71
|
+
<div>
|
|
72
|
+
<p>Drawer content here</p>
|
|
73
|
+
</div>
|
|
74
|
+
</div>
|
|
75
|
+
{/snippet}
|
|
76
|
+
</Drawer>
|
|
77
|
+
</div>
|
|
78
|
+
</Story>
|
|
79
|
+
|
|
80
|
+
<Story name="Open Left">
|
|
81
|
+
<div class="py-12">
|
|
82
|
+
<Drawer id="my-drawer" side="left">
|
|
83
|
+
{#snippet trigger({ C })}
|
|
84
|
+
<div>
|
|
85
|
+
<C.DrawerLabel id="my-drawer" classes="btn btn-primary rounded-full "
|
|
86
|
+
>Open Drawer
|
|
87
|
+
</C.DrawerLabel>
|
|
88
|
+
</div>
|
|
89
|
+
{/snippet}
|
|
90
|
+
{#snippet content()}
|
|
91
|
+
<div>
|
|
92
|
+
<div>
|
|
93
|
+
<p>Drawer content here</p>
|
|
94
|
+
</div>
|
|
95
|
+
</div>
|
|
96
|
+
{/snippet}
|
|
97
|
+
</Drawer>
|
|
98
|
+
</div>
|
|
99
|
+
</Story>
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export default Drawer;
|
|
2
|
+
type Drawer = SvelteComponent<{
|
|
3
|
+
[x: string]: never;
|
|
4
|
+
}, {
|
|
5
|
+
[evt: string]: CustomEvent<any>;
|
|
6
|
+
}, {}> & {
|
|
7
|
+
$$bindings?: string | undefined;
|
|
8
|
+
};
|
|
9
|
+
declare const Drawer: $$__sveltets_2_IsomorphicComponent<{
|
|
10
|
+
[x: string]: never;
|
|
11
|
+
}, {
|
|
12
|
+
[evt: string]: CustomEvent<any>;
|
|
13
|
+
}, {}, {}, string>;
|
|
14
|
+
import Drawer from './Drawer.svelte';
|
|
15
|
+
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> {
|
|
16
|
+
new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
|
|
17
|
+
$$bindings?: Bindings;
|
|
18
|
+
} & Exports;
|
|
19
|
+
(internal: unknown, props: {
|
|
20
|
+
$$events?: Events;
|
|
21
|
+
$$slots?: Slots;
|
|
22
|
+
}): Exports & {
|
|
23
|
+
$set?: any;
|
|
24
|
+
$on?: any;
|
|
25
|
+
};
|
|
26
|
+
z_$$bindings?: Bindings;
|
|
27
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { Snippet } from 'svelte';
|
|
3
|
+
import DrawerLabel from './DrawerLabel.svelte';
|
|
4
|
+
|
|
5
|
+
interface Props {
|
|
6
|
+
id: string;
|
|
7
|
+
controlled?: boolean;
|
|
8
|
+
// Open only works when controlled is true
|
|
9
|
+
open?: boolean;
|
|
10
|
+
side?: 'left' | 'right';
|
|
11
|
+
trigger?: Snippet<[any]>;
|
|
12
|
+
content?: Snippet;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
let {
|
|
16
|
+
id,
|
|
17
|
+
controlled = false,
|
|
18
|
+
open = $bindable(false),
|
|
19
|
+
side = 'right',
|
|
20
|
+
trigger,
|
|
21
|
+
content
|
|
22
|
+
}: Props = $props();
|
|
23
|
+
const C = {
|
|
24
|
+
DrawerLabel
|
|
25
|
+
};
|
|
26
|
+
</script>
|
|
27
|
+
|
|
28
|
+
<div class={`drawer-auto-gutter drawer`} class:drawer-end={side === 'right'}>
|
|
29
|
+
{#if controlled}
|
|
30
|
+
<input {id} type="checkbox" class="drawer-toggle" bind:checked={open} />
|
|
31
|
+
{:else}
|
|
32
|
+
<input {id} type="checkbox" class="drawer-toggle" />
|
|
33
|
+
{/if}
|
|
34
|
+
|
|
35
|
+
<div class="drawer-content">
|
|
36
|
+
<!-- Page content here -->
|
|
37
|
+
{@render trigger?.({ C })}
|
|
38
|
+
</div>
|
|
39
|
+
<div class="drawer-side" inert={controlled ? !open : false}>
|
|
40
|
+
<label for={id} aria-label="close sidebar" class="drawer-overlay"></label>
|
|
41
|
+
<div class="h-screen w-full bg-base sm:w-[460px]">
|
|
42
|
+
{@render content?.()}
|
|
43
|
+
</div>
|
|
44
|
+
</div>
|
|
45
|
+
</div>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Snippet } from 'svelte';
|
|
2
|
+
interface Props {
|
|
3
|
+
id: string;
|
|
4
|
+
controlled?: boolean;
|
|
5
|
+
open?: boolean;
|
|
6
|
+
side?: 'left' | 'right';
|
|
7
|
+
trigger?: Snippet<[any]>;
|
|
8
|
+
content?: Snippet;
|
|
9
|
+
}
|
|
10
|
+
declare const Drawer: import("svelte").Component<Props, {}, "open">;
|
|
11
|
+
type Drawer = ReturnType<typeof Drawer>;
|
|
12
|
+
export default Drawer;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { Snippet } from 'svelte';
|
|
3
|
+
|
|
4
|
+
interface Props {
|
|
5
|
+
id: string;
|
|
6
|
+
classes?: string;
|
|
7
|
+
children?: Snippet;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
let { id, classes = '', children }: Props = $props();
|
|
11
|
+
</script>
|
|
12
|
+
|
|
13
|
+
<label for={id} class={`${classes} drawer-button`}>{@render children?.()}</label>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Snippet } from 'svelte';
|
|
2
|
+
interface Props {
|
|
3
|
+
id: string;
|
|
4
|
+
classes?: string;
|
|
5
|
+
children?: Snippet;
|
|
6
|
+
}
|
|
7
|
+
declare const DrawerLabel: import("svelte").Component<Props, {}, "">;
|
|
8
|
+
type DrawerLabel = ReturnType<typeof DrawerLabel>;
|
|
9
|
+
export default DrawerLabel;
|