@reshape-biotech/design-system 1.2.6 → 2.0.0

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.
Files changed (187) hide show
  1. package/README.md +5 -1
  2. package/dist/app.css +97 -97
  3. package/dist/components/activity/Activity.stories.svelte +104 -104
  4. package/dist/components/activity/Activity.svelte +112 -112
  5. package/dist/components/avatar/Avatar.stories.svelte +23 -23
  6. package/dist/components/avatar/Avatar.svelte +54 -54
  7. package/dist/components/banner/Banner.stories.svelte +105 -105
  8. package/dist/components/banner/Banner.svelte +42 -42
  9. package/dist/components/button/Button.stories.svelte +61 -61
  10. package/dist/components/button/Button.svelte +95 -95
  11. package/dist/components/card/Card.stories.svelte +112 -112
  12. package/dist/components/card/Card.svelte +18 -18
  13. package/dist/components/checkbox/Checkbox.stories.svelte +8 -8
  14. package/dist/components/checkbox/Checkbox.svelte +17 -17
  15. package/dist/components/collapsible/Collapsible.stories.svelte +26 -26
  16. package/dist/components/collapsible/components/collapsible-content.svelte +20 -20
  17. package/dist/components/collapsible/components/collapsible-trigger.svelte +12 -12
  18. package/dist/components/collapsible/index.d.ts +1 -1
  19. package/dist/components/combobox/Combobox.stories.svelte +412 -412
  20. package/dist/components/combobox/components/combobox-add.svelte +8 -8
  21. package/dist/components/combobox/components/combobox-content.svelte +39 -39
  22. package/dist/components/combobox/components/combobox-indicator.svelte +1 -1
  23. package/dist/components/combobox/index.d.ts +1 -1
  24. package/dist/components/datepicker/DatePicker.stories.svelte +196 -196
  25. package/dist/components/datepicker/DatePicker.svelte +173 -173
  26. package/dist/components/divider/Divider.stories.svelte +7 -7
  27. package/dist/components/divider/Divider.svelte +9 -9
  28. package/dist/components/drawer/Drawer.stories.svelte +51 -51
  29. package/dist/components/drawer/Drawer.svelte +33 -33
  30. package/dist/components/drawer/DrawerLabel.svelte +10 -10
  31. package/dist/components/dropdown/Dropdown.stories.svelte +210 -210
  32. package/dist/components/dropdown/Dropdown.svelte +57 -57
  33. package/dist/components/dropdown/components/DropdownContent.svelte +16 -16
  34. package/dist/components/dropdown/components/DropdownMenu.svelte +10 -10
  35. package/dist/components/dropdown/components/DropdownTrigger.svelte +37 -37
  36. package/dist/components/dropdown/components/OutlinedButton.svelte +9 -9
  37. package/dist/components/empty-content/EmptyContent.stories.svelte +38 -38
  38. package/dist/components/empty-content/EmptyContent.svelte +12 -12
  39. package/dist/components/graphs/bar-chart/BarChart.stories.svelte +91 -91
  40. package/dist/components/graphs/bar-chart/BarChart.svelte +147 -147
  41. package/dist/components/graphs/bar-chart/StackedBarChart.stories.svelte +57 -57
  42. package/dist/components/graphs/bar-chart/StackedBarChart.svelte +198 -199
  43. package/dist/components/graphs/chart/Chart.stories.svelte +96 -96
  44. package/dist/components/graphs/chart/Chart.svelte +207 -207
  45. package/dist/components/graphs/line/LineChart.stories.svelte +138 -138
  46. package/dist/components/graphs/line/LineChart.svelte +140 -142
  47. package/dist/components/graphs/matrix/Matrix.stories.svelte +117 -117
  48. package/dist/components/graphs/matrix/Matrix.svelte +141 -141
  49. package/dist/components/graphs/multiline/MultiLineChart.stories.svelte +168 -168
  50. package/dist/components/graphs/multiline/MultiLineChart.svelte +236 -236
  51. package/dist/components/graphs/scatterplot/Scatterplot.stories.svelte +84 -84
  52. package/dist/components/graphs/scatterplot/Scatterplot.svelte +302 -302
  53. package/dist/components/graphs/utils/duration.d.ts +1 -0
  54. package/dist/components/graphs/utils/duration.js +33 -0
  55. package/dist/components/graphs/utils/tooltipFormatter.js +1 -1
  56. package/dist/components/icon-button/IconButton.stories.svelte +64 -64
  57. package/dist/components/icon-button/IconButton.svelte +88 -88
  58. package/dist/components/icons/AnalysisIcon.stories.svelte +18 -18
  59. package/dist/components/icons/AnalysisIcon.svelte +96 -96
  60. package/dist/components/icons/Icon.stories.svelte +111 -111
  61. package/dist/components/icons/Icon.svelte +17 -17
  62. package/dist/components/icons/PrincipalIcon.svelte +59 -59
  63. package/dist/components/icons/custom/Halo.svelte +31 -31
  64. package/dist/components/icons/custom/Well.svelte +27 -27
  65. package/dist/components/icons/index.js +1 -1
  66. package/dist/components/image/Image.svelte +42 -42
  67. package/dist/components/input/Input.stories.svelte +55 -55
  68. package/dist/components/input/Input.svelte +121 -121
  69. package/dist/components/label/Label.stories.svelte +18 -18
  70. package/dist/components/label/Label.svelte +11 -11
  71. package/dist/components/list/List.stories.svelte +84 -84
  72. package/dist/components/list/List.svelte +20 -20
  73. package/dist/components/logo/Logo.stories.svelte +15 -15
  74. package/dist/components/logo/Logo.svelte +30 -30
  75. package/dist/components/manual-cfu-counter/ManualCFUCounter.stories.svelte +102 -102
  76. package/dist/components/manual-cfu-counter/ManualCFUCounter.svelte +557 -557
  77. package/dist/components/manual-cfu-counter/test/ManualCFUCounterTestWrapper.svelte +11 -11
  78. package/dist/components/markdown/Markdown.stories.svelte +10 -10
  79. package/dist/components/markdown/Markdown.svelte +6 -6
  80. package/dist/components/modal/Modal.stories.svelte +29 -29
  81. package/dist/components/modal/Modal.svelte +71 -71
  82. package/dist/components/multi-cfu-counter/MultiCFUCounter.stories.svelte +201 -201
  83. package/dist/components/multi-cfu-counter/MultiCFUCounter.svelte +606 -606
  84. package/dist/components/multi-cfu-counter/test/MultiCFUCounterTestWrapper.svelte +17 -17
  85. package/dist/components/notification-popup/NotificationPopup.stories.svelte +18 -18
  86. package/dist/components/notification-popup/NotificationPopup.svelte +26 -26
  87. package/dist/components/notifications/Notifications.stories.svelte +101 -101
  88. package/dist/components/notifications/Notifications.svelte +9 -9
  89. package/dist/components/pill/Pill.stories.svelte +8 -8
  90. package/dist/components/pill/Pill.svelte +27 -27
  91. package/dist/components/progress-circle/ProgressCircle.stories.svelte +8 -8
  92. package/dist/components/progress-circle/ProgressCircle.svelte +54 -54
  93. package/dist/components/required-status-indicator/RequiredStatusIndicator.stories.svelte +18 -18
  94. package/dist/components/required-status-indicator/RequiredStatusIndicator.svelte +14 -14
  95. package/dist/components/segmented-control-buttons/ControlButton.svelte +36 -36
  96. package/dist/components/segmented-control-buttons/SegmentedControlButtons.stories.svelte +35 -35
  97. package/dist/components/segmented-control-buttons/SegmentedControlButtons.svelte +13 -13
  98. package/dist/components/select/Select.stories.svelte +200 -94
  99. package/dist/components/select/Select.stories.svelte.d.ts +1 -1
  100. package/dist/components/select/components/Group.svelte +24 -0
  101. package/dist/components/select/components/MultiSelectTrigger.svelte +66 -0
  102. package/dist/components/select/components/SelectContent.svelte +33 -0
  103. package/dist/components/select/components/SelectGroupHeading.svelte +19 -0
  104. package/dist/components/select/components/SelectItem.svelte +39 -0
  105. package/dist/components/select/components/SelectTrigger.svelte +48 -0
  106. package/dist/components/select/index.d.ts +10 -7
  107. package/dist/components/select/index.js +12 -1
  108. package/dist/components/sjsf-wrappers/SjsfNumberInputWrapper.svelte +102 -87
  109. package/dist/components/sjsf-wrappers/SjsfNumberInputWrapper.svelte.d.ts +1 -1
  110. package/dist/components/sjsf-wrappers/SjsfTextInputWrapper.svelte +53 -53
  111. package/dist/components/sjsf-wrappers/SjsfTextInputWrapper.svelte.d.ts +1 -1
  112. package/dist/components/sjsf-wrappers/sjsfCustomTheme.js +1 -1
  113. package/dist/components/skeleton-loader/SkeletonLoader.stories.svelte +32 -32
  114. package/dist/components/skeleton-loader/SkeletonLoader.svelte +10 -10
  115. package/dist/components/skeleton-loader/StatcardSkeleton.svelte +9 -9
  116. package/dist/components/skeleton-loader/components/Skeleton.svelte +7 -7
  117. package/dist/components/skeleton-loader/components/SkeletonImage.svelte +12 -12
  118. package/dist/components/slider/Slider.stories.svelte +23 -23
  119. package/dist/components/slider/Slider.svelte +107 -107
  120. package/dist/components/spinner/Spinner.stories.svelte +8 -8
  121. package/dist/components/spinner/Spinner.svelte +18 -18
  122. package/dist/components/stat-card/StatCard.stories.svelte +26 -26
  123. package/dist/components/stat-card/StatCard.svelte +128 -128
  124. package/dist/components/status-badge/StatusBadge.stories.svelte +365 -365
  125. package/dist/components/status-badge/StatusBadge.svelte +54 -54
  126. package/dist/components/stepper/Stepper.stories.svelte +219 -219
  127. package/dist/components/stepper/components/stepper-root.svelte +12 -12
  128. package/dist/components/stepper/components/stepper-step.svelte +83 -83
  129. package/dist/components/table/Table.stories.svelte +87 -87
  130. package/dist/components/table/Table.svelte +32 -32
  131. package/dist/components/table/components/TBody.svelte +7 -7
  132. package/dist/components/table/components/THead.svelte +7 -7
  133. package/dist/components/table/components/Td.svelte +8 -8
  134. package/dist/components/table/components/Th.svelte +8 -8
  135. package/dist/components/table/components/Tr.svelte +11 -11
  136. package/dist/components/tabs/Tabs.stories.svelte +20 -20
  137. package/dist/components/tabs/Tabs.svelte +8 -8
  138. package/dist/components/tabs/components/Content.svelte +8 -8
  139. package/dist/components/tabs/components/Tab.svelte +14 -14
  140. package/dist/components/tabs/components/Tabs.svelte +7 -7
  141. package/dist/components/tag/Tag.stories.svelte +57 -57
  142. package/dist/components/tag/Tag.svelte +95 -95
  143. package/dist/components/textarea/Textarea.stories.svelte +70 -70
  144. package/dist/components/textarea/Textarea.svelte +76 -76
  145. package/dist/components/toast/Toast.stories.svelte +204 -204
  146. package/dist/components/toast/Toast.svelte +53 -53
  147. package/dist/components/toggle/Toggle.stories.svelte +9 -9
  148. package/dist/components/toggle/Toggle.svelte +53 -53
  149. package/dist/components/toggle-icon-button/ToggleIconButton.stories.svelte +152 -152
  150. package/dist/components/toggle-icon-button/ToggleIconButton.svelte +99 -99
  151. package/dist/components/tooltip/Tooltip.stories.svelte +85 -111
  152. package/dist/components/tooltip/Tooltip.svelte +57 -46
  153. package/dist/components/tooltip/Tooltip.svelte.d.ts +1 -1
  154. package/dist/components/tooltip/TooltipTest.svelte +31 -0
  155. package/dist/components/tooltip/TooltipTest.svelte.d.ts +11 -0
  156. package/dist/fonts/index.js +1 -1
  157. package/dist/index.d.ts +0 -1
  158. package/dist/index.js +0 -1
  159. package/dist/notifications.d.ts +1 -4
  160. package/dist/notifications.js +1 -1
  161. package/dist/tailwind-safelist.js +406 -406
  162. package/dist/tailwind.preset.js +10 -10
  163. package/dist/tokens/colors.js +18 -18
  164. package/dist/tokens/typography.js +6 -6
  165. package/dist/tokens.js +19 -19
  166. package/dist/types/fonts.d.ts +2 -2
  167. package/package.json +199 -204
  168. package/dist/components/select/Select.svelte +0 -139
  169. package/dist/components/select/Select.svelte.d.ts +0 -60
  170. package/dist/components/select-new/Select.stories.svelte +0 -219
  171. package/dist/components/select-new/Select.stories.svelte.d.ts +0 -19
  172. package/dist/components/select-new/components/Group.svelte +0 -24
  173. package/dist/components/select-new/components/MultiSelectTrigger.svelte +0 -66
  174. package/dist/components/select-new/components/SelectContent.svelte +0 -33
  175. package/dist/components/select-new/components/SelectGroupHeading.svelte +0 -19
  176. package/dist/components/select-new/components/SelectItem.svelte +0 -39
  177. package/dist/components/select-new/components/SelectTrigger.svelte +0 -48
  178. package/dist/components/select-new/index.d.ts +0 -10
  179. package/dist/components/select-new/index.js +0 -12
  180. /package/dist/components/{select-new → select}/components/Group.svelte.d.ts +0 -0
  181. /package/dist/components/{select-new → select}/components/MultiSelectTrigger.svelte.d.ts +0 -0
  182. /package/dist/components/{select-new → select}/components/SelectContent.svelte.d.ts +0 -0
  183. /package/dist/components/{select-new → select}/components/SelectGroupHeading.svelte.d.ts +0 -0
  184. /package/dist/components/{select-new → select}/components/SelectItem.svelte.d.ts +0 -0
  185. /package/dist/components/{select-new → select}/components/SelectTrigger.svelte.d.ts +0 -0
  186. /package/dist/components/{select-new → select}/types.d.ts +0 -0
  187. /package/dist/components/{select-new → select}/types.js +0 -0
@@ -1,124 +1,124 @@
1
1
  <script lang="ts">
2
- import type { Snippet } from 'svelte';
3
- import { IconButton } from '../icon-button';
4
- import { Icon } from '../icons';
5
- import type { HTMLInputAttributes } from 'svelte/elements';
6
-
7
- interface InputProps extends Omit<HTMLInputAttributes, 'size' | 'prefix' | 'suffix'> {
8
- label?: string | null;
9
- id?: string | undefined;
10
- validator?: (a: string | number) => boolean;
11
- prefix?: Snippet<[any]>;
12
- suffix?: Snippet;
13
- error?: Snippet;
14
- input?: HTMLInputElement;
15
- size?: 'xs' | 'sm' | 'md' | 'lg' | 'dynamic';
16
- transparent?: boolean;
17
- clearable?: boolean;
18
- onclear?: () => void;
19
- class?: string;
20
- oninput?: (event: Event) => void;
21
- onblur?: (event: FocusEvent) => void;
22
- }
23
-
24
- let {
25
- label = null,
26
- value = $bindable(),
27
- type = 'text',
28
- validator = (_) => {
29
- return true;
30
- },
31
- prefix,
32
- suffix,
33
- error,
34
- input = $bindable(),
35
- size = 'md',
36
- transparent = false,
37
- clearable = false,
38
- onclear = () => {},
39
- class: className,
40
- oninput,
41
- onblur,
42
- ...rest
43
- }: InputProps = $props();
44
-
45
- export function focus() {
46
- input?.focus();
47
- }
48
-
49
- let valid = $state(true);
50
-
51
- const inputId = crypto.randomUUID();
52
- const id = $derived(rest.id ?? inputId);
53
- function handleInput(event: Event) {
54
- if (rest.readonly) return;
55
- const target = event.target as HTMLInputElement;
56
- value = target.value;
57
- oninput?.(event);
58
- }
59
-
60
- function handleBlur(event: FocusEvent & { currentTarget: EventTarget & HTMLInputElement }) {
61
- valid = validator(value);
62
- onblur?.(event);
63
- }
2
+ import type { Snippet } from 'svelte';
3
+ import { IconButton } from '../icon-button';
4
+ import { Icon } from '../icons';
5
+ import type { HTMLInputAttributes } from 'svelte/elements';
6
+
7
+ interface InputProps extends Omit<HTMLInputAttributes, 'size' | 'prefix' | 'suffix'> {
8
+ label?: string | null;
9
+ id?: string | undefined;
10
+ validator?: (a: string | number) => boolean;
11
+ prefix?: Snippet<[any]>;
12
+ suffix?: Snippet;
13
+ error?: Snippet;
14
+ input?: HTMLInputElement;
15
+ size?: 'xs' | 'sm' | 'md' | 'lg' | 'dynamic';
16
+ transparent?: boolean;
17
+ clearable?: boolean;
18
+ onclear?: () => void;
19
+ class?: string;
20
+ oninput?: (event: Event) => void;
21
+ onblur?: (event: FocusEvent) => void;
22
+ }
23
+
24
+ let {
25
+ label = null,
26
+ value = $bindable(),
27
+ type = 'text',
28
+ validator = (_) => {
29
+ return true;
30
+ },
31
+ prefix,
32
+ suffix,
33
+ error,
34
+ input = $bindable(),
35
+ size = 'md',
36
+ transparent = false,
37
+ clearable = false,
38
+ onclear = () => {},
39
+ class: className,
40
+ oninput,
41
+ onblur,
42
+ ...rest
43
+ }: InputProps = $props();
44
+
45
+ export function focus() {
46
+ input?.focus();
47
+ }
48
+
49
+ let valid = $state(true);
50
+
51
+ const inputId = crypto.randomUUID();
52
+ const id = $derived(rest.id ?? inputId);
53
+ function handleInput(event: Event) {
54
+ if (rest.readonly) return;
55
+ const target = event.target as HTMLInputElement;
56
+ value = target.value;
57
+ oninput?.(event);
58
+ }
59
+
60
+ function handleBlur(event: FocusEvent & { currentTarget: EventTarget & HTMLInputElement }) {
61
+ valid = validator(value);
62
+ onblur?.(event);
63
+ }
64
64
  </script>
65
65
 
66
66
  <div class="w-full">
67
- {#if label}
68
- <label for={id ?? inputId} class="block px-1 py-2 text-sm text-secondary">
69
- {label}
70
- {#if rest.required}
71
- <span class="ml-0.5 text-danger">*</span>
72
- {/if}
73
- </label>
74
- {/if}
75
-
76
- <div
77
- class="flex w-full items-center gap-1 rounded-lg border border-input bg-surface shadow-input size-{size}"
78
- class:border-transparent={transparent}
79
- class:shadow-input={!transparent}
80
- class:!border-error={!valid}
81
- >
82
- <div class="whitespace-nowrap text-secondary">
83
- {@render prefix?.({ valid })}
84
- </div>
85
- <input
86
- {id}
87
- class="inline leading-none"
88
- class:has-text={value}
89
- class:has-placeholder={rest.placeholder}
90
- aria-label={label}
91
- {type}
92
- oninput={handleInput}
93
- onblur={handleBlur}
94
- bind:this={input}
95
- bind:value
96
- {...rest}
97
- />
98
- <div class="whitespace-nowrap text-secondary">
99
- {@render suffix?.()}
100
- </div>
101
-
102
- {#if clearable && value}
103
- <IconButton
104
- variant="transparent"
105
- size="xs"
106
- onclick={() => {
107
- value = '';
108
- input?.focus();
109
- onclear();
110
- }}
111
- >
112
- <Icon iconName="X" />
113
- </IconButton>
114
- {/if}
115
- </div>
116
-
117
- {@render error?.()}
67
+ {#if label}
68
+ <label for={id ?? inputId} class="block px-1 py-2 text-sm text-secondary">
69
+ {label}
70
+ {#if rest.required}
71
+ <span class="ml-0.5 text-danger">*</span>
72
+ {/if}
73
+ </label>
74
+ {/if}
75
+
76
+ <div
77
+ class="flex w-full items-center gap-1 rounded-lg border border-input bg-surface shadow-input size-{size}"
78
+ class:border-transparent={transparent}
79
+ class:shadow-input={!transparent}
80
+ class:!border-error={!valid}
81
+ >
82
+ <div class="whitespace-nowrap text-secondary">
83
+ {@render prefix?.({ valid })}
84
+ </div>
85
+ <input
86
+ {id}
87
+ class="inline leading-none"
88
+ class:has-text={value}
89
+ class:has-placeholder={rest.placeholder}
90
+ aria-label={label}
91
+ {type}
92
+ oninput={handleInput}
93
+ onblur={handleBlur}
94
+ bind:this={input}
95
+ bind:value
96
+ {...rest}
97
+ />
98
+ <div class="whitespace-nowrap text-secondary">
99
+ {@render suffix?.()}
100
+ </div>
101
+
102
+ {#if clearable && value}
103
+ <IconButton
104
+ variant="transparent"
105
+ size="xs"
106
+ onclick={() => {
107
+ value = '';
108
+ input?.focus();
109
+ onclear();
110
+ }}
111
+ >
112
+ <Icon iconName="X" />
113
+ </IconButton>
114
+ {/if}
115
+ </div>
116
+
117
+ {@render error?.()}
118
118
  </div>
119
119
 
120
120
  <style>
121
- input {
121
+ input {
122
122
 
123
123
  width: 100%;
124
124
 
@@ -129,19 +129,19 @@
129
129
  outline-offset: 2px
130
130
  }
131
131
 
132
- div:not(:focus-within):hover {
132
+ div:not(:focus-within):hover {
133
133
 
134
134
  border-color: #5750ee40
135
135
  }
136
136
 
137
- div:focus-within {
137
+ div:focus-within {
138
138
 
139
139
  --tw-border-opacity: 1;
140
140
 
141
141
  border-color: rgb(87 80 238 / var(--tw-border-opacity, 1))
142
142
  }
143
143
 
144
- .size-xs {
144
+ .size-xs {
145
145
 
146
146
  height: 1.5rem;
147
147
 
@@ -152,7 +152,7 @@
152
152
  line-height: 1rem
153
153
  }
154
154
 
155
- .size-sm {
155
+ .size-sm {
156
156
 
157
157
  height: 2rem;
158
158
 
@@ -165,7 +165,7 @@
165
165
  padding-bottom: 0.5rem
166
166
  }
167
167
 
168
- .size-md {
168
+ .size-md {
169
169
 
170
170
  height: 2.5rem;
171
171
 
@@ -178,7 +178,7 @@
178
178
  padding-bottom: 0.5rem
179
179
  }
180
180
 
181
- .size-lg {
181
+ .size-lg {
182
182
 
183
183
  height: 3rem;
184
184
 
@@ -195,7 +195,7 @@
195
195
  line-height: 1.5rem
196
196
  }
197
197
 
198
- .size-dynamic {
198
+ .size-dynamic {
199
199
 
200
200
  height: auto;
201
201
 
@@ -1,17 +1,17 @@
1
1
  <script module lang="ts">
2
- import { defineMeta } from '@storybook/addon-svelte-csf';
3
- import Label from './Label.svelte';
2
+ import { defineMeta } from '@storybook/addon-svelte-csf';
3
+ import Label from './Label.svelte';
4
4
 
5
- const { Story } = defineMeta({
6
- title: 'Design System/Label',
7
- component: Label,
8
- argTypes: {
9
- text: { control: 'text' },
10
- forId: { control: 'text' },
11
- required: { control: 'boolean' },
12
- class: { control: 'text' }
13
- }
14
- });
5
+ const { Story } = defineMeta({
6
+ title: 'Design System/Label',
7
+ component: Label,
8
+ argTypes: {
9
+ text: { control: 'text' },
10
+ forId: { control: 'text' },
11
+ required: { control: 'boolean' },
12
+ class: { control: 'text' },
13
+ },
14
+ });
15
15
  </script>
16
16
 
17
17
  <Story name="Default" args={{ text: 'Email Address', forId: 'email' }} />
@@ -19,10 +19,10 @@
19
19
  <Story name="Required" args={{ text: 'Password', forId: 'password', required: true }} />
20
20
 
21
21
  <Story
22
- name="With Custom Class"
23
- args={{
24
- text: 'Custom Styled Label',
25
- forId: 'custom',
26
- class: 'text-lg text-primary font-bold'
27
- }}
22
+ name="With Custom Class"
23
+ args={{
24
+ text: 'Custom Styled Label',
25
+ forId: 'custom',
26
+ class: 'text-lg text-primary font-bold',
27
+ }}
28
28
  />
@@ -1,17 +1,17 @@
1
1
  <script lang="ts">
2
- interface Props {
3
- forId: string;
4
- text: string;
5
- required?: boolean;
6
- class?: string;
7
- }
2
+ interface Props {
3
+ forId: string;
4
+ text: string;
5
+ required?: boolean;
6
+ class?: string;
7
+ }
8
8
 
9
- const { forId, text, required = false, class: className }: Props = $props();
9
+ const { forId, text, required = false, class: className }: Props = $props();
10
10
  </script>
11
11
 
12
12
  <label for={forId} class="block text-sm text-secondary {className ?? ''}">
13
- {text}
14
- {#if required}
15
- <span class="ml-0.5 text-danger">*</span>
16
- {/if}
13
+ {text}
14
+ {#if required}
15
+ <span class="ml-0.5 text-danger">*</span>
16
+ {/if}
17
17
  </label>
@@ -1,97 +1,97 @@
1
1
  <script module lang="ts">
2
- import List from './List.svelte';
3
- import Tag from '../tag/Tag.svelte';
4
- import { defineMeta } from '@storybook/addon-svelte-csf';
5
- import { Icon } from '../icons';
2
+ import List from './List.svelte';
3
+ import Tag from '../tag/Tag.svelte';
4
+ import { defineMeta } from '@storybook/addon-svelte-csf';
5
+ import { Icon } from '../icons';
6
6
 
7
- const { Story } = defineMeta({
8
- component: List,
9
- title: 'Design System/List',
10
- tags: ['autodocs']
11
- });
7
+ const { Story } = defineMeta({
8
+ component: List,
9
+ title: 'Design System/List',
10
+ tags: ['autodocs'],
11
+ });
12
12
 
13
- const items: { name: string; licenses: string; repository: string }[] = [
14
- { name: 'Formik', licenses: 'MIT', repository: 'somewhere' },
15
- { name: 'Formik', licenses: 'MIT', repository: 'somewhere' },
16
- { name: 'Formik', licenses: 'MIT', repository: 'somewhere' },
17
- { name: 'Formik', licenses: 'MIT', repository: 'somewhere' }
18
- ];
13
+ const items: { name: string; licenses: string; repository: string }[] = [
14
+ { name: 'Formik', licenses: 'MIT', repository: 'somewhere' },
15
+ { name: 'Formik', licenses: 'MIT', repository: 'somewhere' },
16
+ { name: 'Formik', licenses: 'MIT', repository: 'somewhere' },
17
+ { name: 'Formik', licenses: 'MIT', repository: 'somewhere' },
18
+ ];
19
19
  </script>
20
20
 
21
21
  <Story name="Default" args={{}} asChild>
22
- <List {items}>
23
- {#snippet item(item)}
24
- <div class="flex min-h-2 flex-row gap-2">
25
- <div class="flex flex-row justify-start gap-2">
26
- <div class="max-w-56 truncate font-bold">
27
- {item.name}
28
- </div>
29
- {#if item.licenses}
30
- <Tag>
31
- {item.licenses}
32
- </Tag>
33
- {/if}
34
- </div>
35
- <div class="flex grow flex-row justify-end gap-3">
36
- {#if item.repository}
37
- <div class="flex flex-row items-center gap-1">
38
- <a
39
- href={item.repository}
40
- class="text-secondary"
41
- target="_blank"
42
- rel="noopener noreferrer"
43
- >
44
- Repository
45
- </a>
46
- <Icon iconName="ArrowUpRight" />
47
- </div>
48
- {/if}
49
- </div>
50
- </div>
51
- {/snippet}
52
- </List>
22
+ <List {items}>
23
+ {#snippet item(item)}
24
+ <div class="flex min-h-2 flex-row gap-2">
25
+ <div class="flex flex-row justify-start gap-2">
26
+ <div class="max-w-56 truncate font-bold">
27
+ {item.name}
28
+ </div>
29
+ {#if item.licenses}
30
+ <Tag>
31
+ {item.licenses}
32
+ </Tag>
33
+ {/if}
34
+ </div>
35
+ <div class="flex grow flex-row justify-end gap-3">
36
+ {#if item.repository}
37
+ <div class="flex flex-row items-center gap-1">
38
+ <a
39
+ href={item.repository}
40
+ class="text-secondary"
41
+ target="_blank"
42
+ rel="noopener noreferrer"
43
+ >
44
+ Repository
45
+ </a>
46
+ <Icon iconName="ArrowUpRight" />
47
+ </div>
48
+ {/if}
49
+ </div>
50
+ </div>
51
+ {/snippet}
52
+ </List>
53
53
  </Story>
54
54
 
55
55
  <Story name="Compact" args={{ variant: 'compact' }} asChild>
56
- <List {items} variant="compact">
57
- {#snippet item(item)}
58
- <div class="flex min-h-2 flex-row gap-2">
59
- <div class="flex flex-row justify-start gap-2">
60
- <div class="max-w-56 truncate font-bold">
61
- {item.name}
62
- </div>
63
- {#if item.licenses}
64
- <Tag>
65
- {item.licenses}
66
- </Tag>
67
- {/if}
68
- </div>
69
- <div class="flex grow flex-row justify-end gap-3">
70
- {#if item.repository}
71
- <div class="flex flex-row items-center gap-1">
72
- <a
73
- href={item.repository}
74
- class="text-gray-700"
75
- target="_blank"
76
- rel="noopener noreferrer"
77
- >
78
- Repository
79
- </a>
80
- <Icon iconName="ArrowUpRight" />
81
- </div>
82
- {/if}
83
- </div>
84
- </div>
85
- {/snippet}
86
- </List>
56
+ <List {items} variant="compact">
57
+ {#snippet item(item)}
58
+ <div class="flex min-h-2 flex-row gap-2">
59
+ <div class="flex flex-row justify-start gap-2">
60
+ <div class="max-w-56 truncate font-bold">
61
+ {item.name}
62
+ </div>
63
+ {#if item.licenses}
64
+ <Tag>
65
+ {item.licenses}
66
+ </Tag>
67
+ {/if}
68
+ </div>
69
+ <div class="flex grow flex-row justify-end gap-3">
70
+ {#if item.repository}
71
+ <div class="flex flex-row items-center gap-1">
72
+ <a
73
+ href={item.repository}
74
+ class="text-gray-700"
75
+ target="_blank"
76
+ rel="noopener noreferrer"
77
+ >
78
+ Repository
79
+ </a>
80
+ <Icon iconName="ArrowUpRight" />
81
+ </div>
82
+ {/if}
83
+ </div>
84
+ </div>
85
+ {/snippet}
86
+ </List>
87
87
  </Story>
88
88
 
89
89
  <Story name="Loading" asChild>
90
- <List variant="compact" items={[{}, {}, {}]}>
91
- {#snippet item({})}
92
- <div class="flex h-8 w-full items-center">
93
- <div class="skeleton h-6 w-full bg-neutral"></div>
94
- </div>
95
- {/snippet}
96
- </List>
90
+ <List variant="compact" items={[{}, {}, {}]}>
91
+ {#snippet item({})}
92
+ <div class="flex h-8 w-full items-center">
93
+ <div class="skeleton h-6 w-full bg-neutral"></div>
94
+ </div>
95
+ {/snippet}
96
+ </List>
97
97
  </Story>
@@ -1,26 +1,26 @@
1
1
  <script lang="ts" generics="T">
2
- import type { Overflow } from '../../tailwind';
3
- import type { Snippet } from 'svelte';
4
-
5
- type Props = {
6
- items: T[];
7
- item: Snippet<[T]>;
8
- overflow?: Overflow;
9
- variant?: 'compact' | 'default';
10
- };
11
- let { items, item, overflow = 'overflow-y-auto', variant = 'default' }: Props = $props();
2
+ import type { Overflow } from '../../tailwind';
3
+ import type { Snippet } from 'svelte';
4
+
5
+ type Props = {
6
+ items: T[];
7
+ item: Snippet<[T]>;
8
+ overflow?: Overflow;
9
+ variant?: 'compact' | 'default';
10
+ };
11
+ let { items, item, overflow = 'overflow-y-auto', variant = 'default' }: Props = $props();
12
12
  </script>
13
13
 
14
14
  <div class="{`listStyles ${variant === 'compact' ? 'compact' : 'default'} ${overflow} `}}">
15
- {#each items as currentItem, i}
16
- <div class="item">
17
- {@render item(currentItem)}
18
- </div>
19
- {/each}
15
+ {#each items as currentItem, i}
16
+ <div class="item">
17
+ {@render item(currentItem)}
18
+ </div>
19
+ {/each}
20
20
  </div>
21
21
 
22
22
  <style>
23
- .listStyles {
23
+ .listStyles {
24
24
 
25
25
  display: flex;
26
26
 
@@ -35,12 +35,12 @@
35
35
  border-radius: 0.25rem
36
36
  }
37
37
 
38
- .listStyles.default {
38
+ .listStyles.default {
39
39
 
40
40
  gap: 1rem
41
41
  }
42
42
 
43
- .listStyles.compact {
43
+ .listStyles.compact {
44
44
 
45
45
  gap: 0px;
46
46
 
@@ -53,7 +53,7 @@
53
53
  padding-right: 1rem
54
54
  }
55
55
 
56
- .listStyles.compact :global(> .item:not(:last-child)) {
56
+ .listStyles.compact :global(> .item:not(:last-child)) {
57
57
 
58
58
  border-bottom-width: 1px;
59
59
 
@@ -62,7 +62,7 @@
62
62
  border-color: #12192a14
63
63
  }
64
64
 
65
- .listStyles :global(.item) {
65
+ .listStyles :global(.item) {
66
66
 
67
67
  align-self: stretch
68
68
  }
@@ -1,21 +1,21 @@
1
1
  <script module>
2
- import { defineMeta } from '@storybook/addon-svelte-csf';
3
- import Logo from './Logo.svelte';
2
+ import { defineMeta } from '@storybook/addon-svelte-csf';
3
+ import Logo from './Logo.svelte';
4
4
 
5
- // More on how to set up stories at: https://storybook.js.org/docs/writing-stories
6
- const { Story } = defineMeta({
7
- title: 'Design System/Logo',
8
- component: Logo,
9
- tags: ['autodocs']
10
- });
5
+ // More on how to set up stories at: https://storybook.js.org/docs/writing-stories
6
+ const { Story } = defineMeta({
7
+ title: 'Design System/Logo',
8
+ component: Logo,
9
+ tags: ['autodocs'],
10
+ });
11
11
  </script>
12
12
 
13
13
  <Story name="Base" asChild>
14
- <div class="flex flex-col gap-4">
15
- <Logo size="xs" />
16
- <Logo size="sm" />
17
- <Logo size="md" />
18
- <Logo size="lg" />
19
- <Logo size="xl" />
20
- </div>
14
+ <div class="flex flex-col gap-4">
15
+ <Logo size="xs" />
16
+ <Logo size="sm" />
17
+ <Logo size="md" />
18
+ <Logo size="lg" />
19
+ <Logo size="xl" />
20
+ </div>
21
21
  </Story>