@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,146 +1,146 @@
1
1
  <script lang="ts">
2
- import IconButton from '../icon-button/IconButton.svelte';
3
- import { Icon } from '../icons';
4
- import Spinner from '../spinner/Spinner.svelte';
5
- import Tooltip from '../tooltip/Tooltip.svelte';
6
- import { Input } from '../input';
7
- import { tick } from 'svelte';
2
+ import IconButton from '../icon-button/IconButton.svelte';
3
+ import { Icon } from '../icons';
4
+ import Spinner from '../spinner/Spinner.svelte';
5
+ import Tooltip from '../tooltip/Tooltip.svelte';
6
+ import { Input } from '../input';
7
+ import { tick } from 'svelte';
8
8
 
9
- interface Props {
10
- title: string;
11
- value?: string | number | null;
12
- unit?: string | null;
13
- titleTooltip?: string;
14
- showTitleTooltip?: boolean;
15
- editable?: boolean;
16
- onsubmit?: (value: string | number) => void;
17
- inputType?: 'text' | 'number';
18
- }
9
+ interface Props {
10
+ title: string;
11
+ value?: string | number | null;
12
+ unit?: string | null;
13
+ titleTooltip?: string;
14
+ showTitleTooltip?: boolean;
15
+ editable?: boolean;
16
+ onsubmit?: (value: string | number) => void;
17
+ inputType?: 'text' | 'number';
18
+ }
19
19
 
20
- let {
21
- title,
22
- value = null,
23
- unit = '',
24
- titleTooltip = '',
25
- showTitleTooltip = false,
26
- editable = false,
27
- inputType = 'text',
28
- onsubmit
29
- }: Props = $props();
30
- const formattedValue = $derived(typeof value === 'number' ? value.toLocaleString() : value);
31
- let isEditing = $state(false);
32
- let inputValue = $state('');
33
- let inputComponent = $state<Input | null>(null);
20
+ let {
21
+ title,
22
+ value = null,
23
+ unit = '',
24
+ titleTooltip = '',
25
+ showTitleTooltip = false,
26
+ editable = false,
27
+ inputType = 'text',
28
+ onsubmit,
29
+ }: Props = $props();
30
+ const formattedValue = $derived(typeof value === 'number' ? value.toLocaleString() : value);
31
+ let isEditing = $state(false);
32
+ let inputValue = $state('');
33
+ let inputComponent = $state<Input | null>(null);
34
34
 
35
- function startEditing(event?: MouseEvent) {
36
- if (event) {
37
- event.stopPropagation();
38
- }
39
- isEditing = true;
40
- inputValue = value !== null ? value.toString() : '';
41
- }
35
+ function startEditing(event?: MouseEvent) {
36
+ if (event) {
37
+ event.stopPropagation();
38
+ }
39
+ isEditing = true;
40
+ inputValue = value !== null ? value.toString() : '';
41
+ }
42
42
 
43
- function handleCardClick() {
44
- if (editable && !isEditing && value !== null) {
45
- startEditing();
46
- }
47
- }
43
+ function handleCardClick() {
44
+ if (editable && !isEditing && value !== null) {
45
+ startEditing();
46
+ }
47
+ }
48
48
 
49
- function handleInputBlur(event: Event) {
50
- const target = event.target as HTMLInputElement;
51
- inputValue = target.value;
52
- submitValue();
53
- }
49
+ function handleInputBlur(event: Event) {
50
+ const target = event.target as HTMLInputElement;
51
+ inputValue = target.value;
52
+ submitValue();
53
+ }
54
54
 
55
- function handleInputKeydown(event: KeyboardEvent) {
56
- const target = event.target as HTMLInputElement;
57
- inputValue = target.value;
58
- if (event.key === 'Escape') {
59
- isEditing = false;
60
- }
61
- if (event.key === 'Enter') {
62
- submitValue();
63
- }
64
- }
55
+ function handleInputKeydown(event: KeyboardEvent) {
56
+ const target = event.target as HTMLInputElement;
57
+ inputValue = target.value;
58
+ if (event.key === 'Escape') {
59
+ isEditing = false;
60
+ }
61
+ if (event.key === 'Enter') {
62
+ submitValue();
63
+ }
64
+ }
65
65
 
66
- function submitValue() {
67
- if (inputValue.trim() === '') {
68
- isEditing = false;
69
- return;
70
- }
66
+ function submitValue() {
67
+ if (inputValue.trim() === '') {
68
+ isEditing = false;
69
+ return;
70
+ }
71
71
 
72
- // Try to parse as number if possible
73
- const numValue = parseFloat(inputValue);
74
- const newValue = isNaN(numValue) ? inputValue : numValue;
72
+ // Try to parse as number if possible
73
+ const numValue = parseFloat(inputValue);
74
+ const newValue = isNaN(numValue) ? inputValue : numValue;
75
75
 
76
- if (onsubmit) {
77
- onsubmit(newValue);
78
- }
76
+ if (onsubmit) {
77
+ onsubmit(newValue);
78
+ }
79
79
 
80
- isEditing = false;
81
- }
80
+ isEditing = false;
81
+ }
82
82
 
83
- $effect(() => {
84
- if (isEditing && inputComponent) {
85
- tick().then(() => {
86
- inputComponent?.focus();
87
- });
88
- }
89
- });
83
+ $effect(() => {
84
+ if (isEditing && inputComponent) {
85
+ tick().then(() => {
86
+ inputComponent?.focus();
87
+ });
88
+ }
89
+ });
90
90
  </script>
91
91
 
92
92
  <!-- svelte-ignore a11y_no_static_element_interactions -->
93
93
  <div
94
- data-testid="stat-card-body"
95
- class="flex w-full flex-shrink-0 flex-grow basis-0 flex-col items-start gap-2 overflow-clip rounded-lg bg-neutral p-4 text-left transition-colors"
96
- class:hover:bg-neutral-hover={editable && !isEditing && value !== null}
97
- class:cursor-pointer={editable && !isEditing && value !== null}
98
- onclick={editable && !isEditing && value !== null ? handleCardClick : undefined}
99
- onkeydown={editable && !isEditing && value !== null ? handleInputKeydown : undefined}
100
- aria-label={editable && !isEditing && value !== null ? `Edit ${title}` : undefined}
94
+ data-testid="stat-card-body"
95
+ class="flex w-full flex-shrink-0 flex-grow basis-0 flex-col items-start gap-2 overflow-clip rounded-lg bg-neutral p-4 text-left transition-colors"
96
+ class:hover:bg-neutral-hover={editable && !isEditing && value !== null}
97
+ class:cursor-pointer={editable && !isEditing && value !== null}
98
+ onclick={editable && !isEditing && value !== null ? handleCardClick : undefined}
99
+ onkeydown={editable && !isEditing && value !== null ? handleInputKeydown : undefined}
100
+ aria-label={editable && !isEditing && value !== null ? `Edit ${title}` : undefined}
101
101
  >
102
- <p class="flex items-center justify-start gap-2 truncate font-medium text-secondary">
103
- {title}
104
- {#if titleTooltip && showTitleTooltip}
105
- <Tooltip>
106
- {#snippet trigger()}
107
- <Icon iconName="Info" color="icon-tertiary" />
108
- {/snippet}
109
- {#snippet content()}
110
- <span>
111
- {titleTooltip}
112
- </span>
113
- {/snippet}
114
- </Tooltip>
115
- {/if}
116
- </p>
117
- <div class="flex h-8 w-full items-center gap-1">
118
- {#if value !== null}
119
- {#if isEditing}
120
- <div class="flex-1">
121
- <Input
122
- bind:this={inputComponent}
123
- type={inputType}
124
- value={inputValue}
125
- onblur={handleInputBlur}
126
- onkeydown={handleInputKeydown}
127
- />
128
- </div>
129
- {:else}
130
- <div class="flex flex-1 flex-nowrap items-baseline gap-1">
131
- <p class="text-2xl font-medium">{formattedValue}</p>
132
- {#if unit}
133
- <p class="flex-1 truncate text-2xl font-medium text-tertiary">{unit}</p>
134
- {/if}
135
- </div>
136
- {#if editable}
137
- <IconButton onclick={(e) => startEditing(e)}>
138
- <Icon iconName="PencilSimple" />
139
- </IconButton>
140
- {/if}
141
- {/if}
142
- {:else}
143
- <Spinner />
144
- {/if}
145
- </div>
102
+ <p class="flex items-center justify-start gap-2 truncate font-medium text-secondary">
103
+ {title}
104
+ {#if titleTooltip && showTitleTooltip}
105
+ <Tooltip>
106
+ {#snippet trigger()}
107
+ <Icon iconName="Info" color="icon-tertiary" />
108
+ {/snippet}
109
+ {#snippet content()}
110
+ <span>
111
+ {titleTooltip}
112
+ </span>
113
+ {/snippet}
114
+ </Tooltip>
115
+ {/if}
116
+ </p>
117
+ <div class="flex h-8 w-full items-center gap-1">
118
+ {#if value !== null}
119
+ {#if isEditing}
120
+ <div class="flex-1">
121
+ <Input
122
+ bind:this={inputComponent}
123
+ type={inputType}
124
+ value={inputValue}
125
+ onblur={handleInputBlur}
126
+ onkeydown={handleInputKeydown}
127
+ />
128
+ </div>
129
+ {:else}
130
+ <div class="flex flex-1 flex-nowrap items-baseline gap-1">
131
+ <p class="text-2xl font-medium">{formattedValue}</p>
132
+ {#if unit}
133
+ <p class="flex-1 truncate text-2xl font-medium text-tertiary">{unit}</p>
134
+ {/if}
135
+ </div>
136
+ {#if editable}
137
+ <IconButton onclick={(e) => startEditing(e)}>
138
+ <Icon iconName="PencilSimple" />
139
+ </IconButton>
140
+ {/if}
141
+ {/if}
142
+ {:else}
143
+ <Spinner />
144
+ {/if}
145
+ </div>
146
146
  </div>