@reshape-biotech/design-system 2.7.5 → 2.7.9

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 (52) hide show
  1. package/README.md +0 -3
  2. package/dist/components/activity/Activity.stories.svelte +1 -1
  3. package/dist/components/banner/Banner.stories.svelte +4 -4
  4. package/dist/components/banner/Banner.svelte +12 -6
  5. package/dist/components/banner/Banner.svelte.d.ts +2 -1
  6. package/dist/components/button/Button.svelte +2 -2
  7. package/dist/components/card/Card.stories.svelte +2 -2
  8. package/dist/components/card/Card.svelte +1 -1
  9. package/dist/components/card/CardWrapper.svelte +2 -17
  10. package/dist/components/checkbox/Checkbox.svelte +1 -1
  11. package/dist/components/collapsible/components/collapsible-trigger.svelte +1 -1
  12. package/dist/components/combobox/Combobox.stories.svelte +1 -1
  13. package/dist/components/combobox/components/combobox-add.svelte +1 -1
  14. package/dist/components/combobox/components/combobox-content.svelte +1 -1
  15. package/dist/components/combobox/components/combobox-indicator.svelte +1 -1
  16. package/dist/components/datepicker/DatePicker.stories.svelte +1 -1
  17. package/dist/components/datepicker/DatePicker.svelte +1 -1
  18. package/dist/components/drawer/components/drawer-content.svelte +1 -1
  19. package/dist/components/empty-content/EmptyContent.stories.svelte +1 -1
  20. package/dist/components/graphs/index.d.ts +4 -0
  21. package/dist/components/graphs/index.js +1 -0
  22. package/dist/components/icons/index.d.ts +2 -0
  23. package/dist/components/icons/index.js +2 -0
  24. package/dist/components/input/Input.svelte +2 -2
  25. package/dist/components/legend/Legend.stories.svelte +1 -1
  26. package/dist/components/legend/components/legend-root.svelte +2 -2
  27. package/dist/components/list/List.stories.svelte +1 -1
  28. package/dist/components/modal/Modal.stories.svelte +1 -1
  29. package/dist/components/modal/components/modal-content.svelte +1 -1
  30. package/dist/components/multi-cfu-counter/MultiCFUCounter.svelte +79 -77
  31. package/dist/components/notification-popup/NotificationPopup.stories.svelte +1 -1
  32. package/dist/components/notification-popup/NotificationPopup.svelte +1 -1
  33. package/dist/components/pill/Pill.svelte +1 -1
  34. package/dist/components/required-status-indicator/RequiredStatusIndicator.svelte +1 -1
  35. package/dist/components/segmented-control-buttons/SegmentedControlButtons.stories.svelte +1 -1
  36. package/dist/components/select/components/SelectContent.svelte +1 -1
  37. package/dist/components/select/components/SelectItem.svelte +1 -1
  38. package/dist/components/select/components/SelectTrigger.svelte +1 -1
  39. package/dist/components/slider/Slider.svelte +1 -1
  40. package/dist/components/stat-card/StatCard.svelte +1 -1
  41. package/dist/components/status-badge/StatusBadge.stories.svelte +1 -1
  42. package/dist/components/stepper/components/stepper-step.svelte +1 -1
  43. package/dist/components/table/Table.stories.svelte +1 -1
  44. package/dist/components/table/Table.svelte +1 -1
  45. package/dist/components/tag/Tag.stories.svelte +1 -1
  46. package/dist/components/tag/Tag.svelte +4 -5
  47. package/dist/components/toggle-icon-button/ToggleIconButton.stories.svelte +1 -1
  48. package/dist/components/tooltip/Tooltip.svelte +1 -1
  49. package/dist/index.d.ts +53 -53
  50. package/dist/index.js +53 -53
  51. package/dist/tokens/colors.js +1 -1
  52. package/package.json +1 -1
package/README.md CHANGED
@@ -22,19 +22,16 @@ This package contains the core design system for Reshape Biotech frontend projec
22
22
  ### Contents
23
23
 
24
24
  1. **Component Library**
25
-
26
25
  - A collection of shared, reusable Svelte components
27
26
  - Standardized UI elements following Reshape Biotech's design guidelines
28
27
  - Fully typed components with TypeScript support
29
28
 
30
29
  2. **Tailwind Configuration**
31
-
32
30
  - Pre-configured Tailwind CSS setup
33
31
  - Custom theme extensions
34
32
  - Shared utility classes
35
33
 
36
34
  3. **DaisyUI**
37
-
38
35
  - Pre-configured DaisyUI setup
39
36
  - Custom theme extensions
40
37
  - Shared utility classes
@@ -1,6 +1,6 @@
1
1
  <script module lang="ts">
2
2
  import Eye from 'phosphor-svelte/lib/Eye';
3
- import { Icon } from 'design-system';
3
+ import { Icon } from '../icons/index.js';
4
4
  import Button from '../button/Button.svelte';
5
5
  import Activity from './Activity.svelte';
6
6
  import * as Collapsible from '../collapsible/index';
@@ -4,7 +4,7 @@
4
4
  import CheckCircle from 'phosphor-svelte/lib/CheckCircle';
5
5
  import Circle from 'phosphor-svelte/lib/Circle';
6
6
  import WarningCircle from 'phosphor-svelte/lib/WarningCircle';
7
- import { Icon } from 'design-system';
7
+ import { Icon } from '../icons/index.js';
8
8
  import Banner from './Banner.svelte';
9
9
  import Button from '../button/Button.svelte';
10
10
  import { defineMeta } from '@storybook/addon-svelte-csf';
@@ -46,7 +46,7 @@
46
46
  </Story>
47
47
 
48
48
  <Story name="No toggle" asChild>
49
- <Banner type="progress" closable={false}>
49
+ <Banner type="info" closable={false}>
50
50
  {#snippet icon()}
51
51
  <Icon size={20} color="icon-blue" weight="bold">
52
52
  {#snippet children(props)}
@@ -117,7 +117,7 @@
117
117
 
118
118
  <div class="space-y-2">
119
119
  <h4>Progress</h4>
120
- <Banner type="progress">
120
+ <Banner type="info">
121
121
  {#snippet icon()}
122
122
  <Icon size={20} color="icon-blue" weight="bold">
123
123
  {#snippet children(props)}
@@ -126,7 +126,7 @@
126
126
  </Icon>
127
127
  {/snippet}
128
128
  {#snippet content()}
129
- This is a "progress" banner.
129
+ This is a "info" banner.
130
130
  {/snippet}
131
131
  </Banner>
132
132
  </div>
@@ -5,11 +5,12 @@
5
5
  import { Icon } from '../icons/';
6
6
 
7
7
  interface Props {
8
- type?: 'neutral' | 'success' | 'progress' | 'warning' | 'error';
8
+ type?: 'neutral' | 'success' | 'info' | 'warning' | 'error';
9
9
  show?: boolean;
10
10
  closable?: boolean;
11
11
  icon?: Snippet;
12
12
  content: Snippet;
13
+ compact?: boolean;
13
14
  }
14
15
 
15
16
  let {
@@ -18,22 +19,27 @@
18
19
  closable = true,
19
20
  icon,
20
21
  content,
22
+ compact = true,
21
23
  }: Props = $props();
22
24
 
23
25
  const color = {
24
26
  neutral: 'neutral',
25
27
  success: 'success',
26
- progress: 'blue',
28
+ info: 'blue',
27
29
  warning: 'warning',
28
30
  error: 'danger',
29
31
  }[type];
30
32
  </script>
31
33
 
32
34
  {#if show}
33
- <div class="rounded-lg bg-{color} flex w-full items-center justify-between p-3">
34
- <div class="inline-flex w-full items-center justify-start gap-3">
35
+ <div
36
+ class="bg-{color} flex min-h-12 w-full items-center justify-between p-2 {compact
37
+ ? 'rounded-xl'
38
+ : 'rounded-2xl'}"
39
+ >
40
+ <div class="inline-flex w-full items-center justify-start gap-2">
35
41
  {#if icon}
36
- <div class="flex size-5 items-center justify-center text-icon-{color} ">
42
+ <div class="flex items-center justify-center px-1 text-icon-{color}">
37
43
  {@render icon?.()}
38
44
  </div>
39
45
  {/if}
@@ -42,7 +48,7 @@
42
48
  </div>
43
49
  </div>
44
50
  {#if closable}
45
- <IconButton size="sm" onclick={() => (show = false)}>
51
+ <IconButton size="sm" onclick={() => (show = false)} variant="transparent" rounded={false}>
46
52
  <Icon color="icon-secondary" weight="bold" icon={X} />
47
53
  </IconButton>
48
54
  {/if}
@@ -1,10 +1,11 @@
1
1
  import type { Snippet } from 'svelte';
2
2
  interface Props {
3
- type?: 'neutral' | 'success' | 'progress' | 'warning' | 'error';
3
+ type?: 'neutral' | 'success' | 'info' | 'warning' | 'error';
4
4
  show?: boolean;
5
5
  closable?: boolean;
6
6
  icon?: Snippet;
7
7
  content: Snippet;
8
+ compact?: boolean;
8
9
  }
9
10
  declare const Banner: import("svelte").Component<Props, {}, "show">;
10
11
  type Banner = ReturnType<typeof Banner>;
@@ -119,7 +119,7 @@
119
119
 
120
120
  .button:disabled {
121
121
 
122
- border-style: none;
122
+ border-color: transparent;
123
123
 
124
124
  background-color: #12192a0A;
125
125
 
@@ -331,7 +331,7 @@
331
331
  }
332
332
  .btn-transparent-inverse:hover {
333
333
 
334
- background-color: #FFFFFF26
334
+ background-color: #FFFFFF0D
335
335
  }
336
336
  .btn-transparent-inverse:active {
337
337
 
@@ -108,7 +108,7 @@
108
108
  <Story name="Card nested in CardWrapper" args={{ class: 'w-96' }} asChild>
109
109
  <CardWrapper class="w-96" variant="compact">
110
110
  {#snippet Header()}
111
- <h5>Overview</h5>
111
+ <h6>Overview</h6>
112
112
  <span class="text-sm text-success">Active</span>
113
113
  {/snippet}
114
114
  {#snippet children()}
@@ -124,7 +124,7 @@
124
124
  </Card>
125
125
  {/snippet}
126
126
  {#snippet Footer()}
127
- <p class="py-2 text-xs text-secondary">Last updated 2 hours ago</p>
127
+ <p class="px-3 py-2 text-xs text-secondary">Last updated 2 hours ago</p>
128
128
  {/snippet}
129
129
  </CardWrapper>
130
130
  </Story>
@@ -19,7 +19,7 @@
19
19
  </script>
20
20
 
21
21
  <div
22
- class="overflow-hidden rounded-lg border border-static bg-surface shadow-container {additionalClasses}"
22
+ class="overflow-hidden rounded-[10px] border border-static bg-surface shadow-container {additionalClasses}"
23
23
  >
24
24
  {#if Header}
25
25
  <header
@@ -45,7 +45,7 @@
45
45
  {@render children()}
46
46
  </div>
47
47
  {#if Footer}
48
- <footer class="flex min-h-8 w-full items-center px-3">
48
+ <footer class="flex min-h-8 w-full items-center">
49
49
  {@render Footer()}
50
50
  </footer>
51
51
  {/if}
@@ -60,7 +60,7 @@
60
60
 
61
61
  --tw-bg-opacity: 1;
62
62
 
63
- background-color: rgb(250 250 250 / var(--tw-bg-opacity, 1))
63
+ background-color: rgb(249 249 250 / var(--tw-bg-opacity, 1))
64
64
  }
65
65
 
66
66
  .wrapper.default {
@@ -80,19 +80,4 @@
80
80
 
81
81
  padding: 0.125rem
82
82
  }
83
-
84
- .wrapper-footer {
85
-
86
- display: flex;
87
-
88
- min-height: 2rem;
89
-
90
- width: 100%;
91
-
92
- align-items: center;
93
-
94
- padding-left: 1rem;
95
-
96
- padding-right: 1rem
97
- }
98
83
  </style>
@@ -1,7 +1,7 @@
1
1
  <script lang="ts">
2
2
  import Check from 'phosphor-svelte/lib/Check';
3
3
  import Minus from 'phosphor-svelte/lib/Minus';
4
- import { Icon } from 'design-system';
4
+ import { Icon } from '../icons/index.js';
5
5
  import { Checkbox, type CheckboxRootProps } from 'bits-ui';
6
6
 
7
7
  export type CheckboxProps = CheckboxRootProps;
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import CaretDown from 'phosphor-svelte/lib/CaretDown';
3
- import { Icon } from 'design-system';
3
+ import { Icon } from '../../icons/index.js';
4
4
  import { Collapsible } from 'bits-ui';
5
5
  import type { CollapsibleTriggerProps } from '../types';
6
6
 
@@ -1,7 +1,7 @@
1
1
  <script module lang="ts">
2
2
  import Plus from 'phosphor-svelte/lib/Plus';
3
3
  import List from 'phosphor-svelte/lib/List';
4
- import { Icon } from 'design-system';
4
+ import { Icon } from '../icons/index.js';
5
5
  import { defineMeta } from '@storybook/addon-svelte-csf';
6
6
  import { userEvent, within } from '@storybook/test';
7
7
  import { Root as ComboboxRootForMeta } from './index';
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import Plus from 'phosphor-svelte/lib/Plus';
3
- import { Icon } from 'design-system';
3
+ import { Icon } from '../../icons/index.js';
4
4
  import type { Snippet } from 'svelte';
5
5
  import type { HTMLButtonAttributes } from 'svelte/elements';
6
6
 
@@ -1,7 +1,7 @@
1
1
  <script lang="ts">
2
2
  import CaretUp from 'phosphor-svelte/lib/CaretUp';
3
3
  import CaretDown from 'phosphor-svelte/lib/CaretDown';
4
- import { Icon } from 'design-system';
4
+ import { Icon } from '../../icons/index.js';
5
5
  import { Combobox } from 'bits-ui';
6
6
  import type { ComboboxContentProps } from '../types';
7
7
  import { fade } from 'svelte/transition';
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import Check from 'phosphor-svelte/lib/Check';
3
- import { Icon } from 'design-system';
3
+ import { Icon } from '../../icons/index.js';
4
4
  </script>
5
5
 
6
6
  <Icon icon={Check} />
@@ -1,6 +1,6 @@
1
1
  <script module lang="ts">
2
2
  import CalendarBlank from 'phosphor-svelte/lib/CalendarBlank';
3
- import { Icon } from 'design-system';
3
+ import { Icon } from '../icons/index.js';
4
4
  import { defineMeta } from '@storybook/addon-svelte-csf';
5
5
  import { userEvent, within } from '@storybook/test';
6
6
  import { DateTime } from 'luxon';
@@ -1,7 +1,7 @@
1
1
  <script lang="ts">
2
2
  import CaretLeft from 'phosphor-svelte/lib/CaretLeft';
3
3
  import CaretRight from 'phosphor-svelte/lib/CaretRight';
4
- import { Icon } from 'design-system';
4
+ import { Icon } from '../icons/index.js';
5
5
  import { run } from 'svelte/legacy';
6
6
 
7
7
  import { DateTime, type MonthNumbers } from 'luxon';
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import X from 'phosphor-svelte/lib/X';
3
- import { Icon } from 'design-system';
3
+ import { Icon } from '../../icons/index.js';
4
4
  import { Dialog } from 'bits-ui';
5
5
  import { fly } from 'svelte/transition';
6
6
  import type { DrawerContentProps } from '../types';
@@ -1,7 +1,7 @@
1
1
  <script module>
2
2
  import ClockCountdown from 'phosphor-svelte/lib/ClockCountdown';
3
3
  import MagnifyingGlass from 'phosphor-svelte/lib/MagnifyingGlass';
4
- import { Icon } from 'design-system';
4
+ import { Icon } from '../icons/index.js';
5
5
  import { defineMeta } from '@storybook/addon-svelte-csf';
6
6
  import EmptyContent from './EmptyContent.svelte';
7
7
 
@@ -5,3 +5,7 @@ export { default as MultiLineChart } from './multiline/MultiLineChart.svelte';
5
5
  export { default as Matrix } from './matrix/Matrix.svelte';
6
6
  export { default as BarChart } from './bar-chart/BarChart.svelte';
7
7
  export { default as StackedBarChart } from './bar-chart/StackedBarChart.svelte';
8
+ export { createTooltipFormatter } from './utils/tooltipFormatter.js';
9
+ export type { DataPoint, ScatterPlotEchartsEvent } from './scatterplot/Scatterplot.svelte';
10
+ export type { Cell } from './matrix/Matrix.svelte';
11
+ export type { GenericChartProps } from './chart/Chart.svelte';
@@ -5,3 +5,4 @@ export { default as MultiLineChart } from './multiline/MultiLineChart.svelte';
5
5
  export { default as Matrix } from './matrix/Matrix.svelte';
6
6
  export { default as BarChart } from './bar-chart/BarChart.svelte';
7
7
  export { default as StackedBarChart } from './bar-chart/StackedBarChart.svelte';
8
+ export { createTooltipFormatter } from './utils/tooltipFormatter.js';
@@ -5,6 +5,8 @@ export type IconColor = keyof typeof textColor;
5
5
  export type SupportedAnalysisModelIcons = 'pipeline_halos' | 'pipeline_large_colonies' | 'pipeline_microbial_colonies' | 'pipeline_small_colonies' | 'sgs_enteros' | 'general_germination_rate_with_tracking' | 'general_germination_rate_without_tracking' | 'pipeline_insects' | 'pipeline_colony_formation' | 'pipeline_radial_growth' | 'syngenta_health_score_crw' | 'pipeline_seed_germination' | 'syngenta_health_score_faw' | 'syngenta_health_score_sbl' | 'unilever_cfu_count_lowres';
6
6
  export type SupportedPrincipalIcons = 'user' | 'group' | 'organization';
7
7
  export { default as Icon } from './Icon.svelte';
8
+ export { default as AnalysisIcon } from './AnalysisIcon.svelte';
9
+ export { default as PrincipalIcon } from './PrincipalIcon.svelte';
8
10
  export type IconProps = {
9
11
  color?: IconColor | 'inherit';
10
12
  weight?: 'fill' | 'light' | 'regular' | 'thin' | 'bold' | 'duotone';
@@ -1,5 +1,7 @@
1
1
  import {} from 'phosphor-svelte';
2
2
  import { backgroundColor, textColor } from '../../tokens';
3
3
  export { default as Icon } from './Icon.svelte';
4
+ export { default as AnalysisIcon } from './AnalysisIcon.svelte';
5
+ export { default as PrincipalIcon } from './PrincipalIcon.svelte';
4
6
  // Custom Icons
5
7
  export * from './custom';
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import X from 'phosphor-svelte/lib/X';
3
- import { Icon } from 'design-system';
3
+ import { Icon } from '../icons/index.js';
4
4
  import type { Snippet } from 'svelte';
5
5
  import { IconButton } from '../icon-button';
6
6
  import type { HTMLInputAttributes } from 'svelte/elements';
@@ -205,7 +205,7 @@ input::placeholder {
205
205
 
206
206
  --tw-bg-opacity: 1;
207
207
 
208
- background-color: rgb(250 250 250 / var(--tw-bg-opacity, 1))
208
+ background-color: rgb(249 249 250 / var(--tw-bg-opacity, 1))
209
209
  }
210
210
 
211
211
  .transparent {
@@ -5,7 +5,7 @@
5
5
  import { Tooltip } from '../tooltip';
6
6
  import Hash from 'phosphor-svelte/lib/Hash';
7
7
  import CraneTower from 'phosphor-svelte/lib/CraneTower';
8
- import { Icon } from 'design-system';
8
+ import { Icon } from '../icons/index.js';
9
9
  import Tag from '../tag/Tag.svelte';
10
10
 
11
11
  const { Story } = defineMeta({
@@ -9,9 +9,9 @@
9
9
  let { children, items }: Props = $props();
10
10
  </script>
11
11
 
12
- <div class="inline-flex w-full flex-col items-center rounded-[10px] bg-base">
12
+ <div class="inline-flex w-full flex-col items-center rounded-xl bg-base">
13
13
  <div
14
- class="flex w-full px-0.5 pt-0.5 [&>*]:rounded-lg [&>*]:border [&>*]:border-static [&>*]:p-1"
14
+ class="flex w-full px-0.5 pt-0.5 [&>*]:rounded-[10px] [&>*]:border [&>*]:border-static [&>*]:p-1"
15
15
  >
16
16
  {@render children()}
17
17
  </div>
@@ -1,6 +1,6 @@
1
1
  <script module lang="ts">
2
2
  import ArrowUpRight from 'phosphor-svelte/lib/ArrowUpRight';
3
- import { Icon } from 'design-system';
3
+ import { Icon } from '../icons/index.js';
4
4
  import List from './List.svelte';
5
5
  import Tag from '../tag/Tag.svelte';
6
6
  import { defineMeta } from '@storybook/addon-svelte-csf';
@@ -200,7 +200,7 @@
200
200
  <div class="space-y-2">
201
201
  <h4 class="font-medium">Simple Usage:</h4>
202
202
  <pre class="overflow-x-auto rounded bg-surface p-2 text-xs">
203
- {`import { Modal } from 'design-system';
203
+ {`import { Modal } from '../icons/index.js';
204
204
 
205
205
  <Modal.Root>
206
206
  <Modal.Trigger>Open</Modal.Trigger>
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import X from 'phosphor-svelte/lib/X';
3
- import { Icon } from 'design-system';
3
+ import { Icon } from '../../icons/index.js';
4
4
  import { Dialog } from 'bits-ui';
5
5
  import { scale } from 'svelte/transition';
6
6
  import { twMerge } from 'tailwind-merge';
@@ -545,41 +545,41 @@
545
545
  </script>
546
546
 
547
547
  {#snippet UndoResetControls()}
548
- <div class="flex items-center gap-1">
549
- <IconButton
550
- variant="transparent-inverse"
551
- rounded={false}
552
- onclick={undo}
553
- disabled={marks.length === 0 || disabled}
554
- aria-label="Undo last mark"
555
- >
556
- <Icon icon={ArrowUUpLeft} />
557
- </IconButton>
558
- <Divider vertical inverse class="!h-5" />
559
- <Button
560
- variant="transparent-inverse"
561
- size="sm"
562
- onClick={reset}
563
- disabled={marks.length === 0 || disabled}
564
- accessibilityLabel="Reset all marks"
565
- class="!text-primary-inverse"
566
- >
567
- Clear all
568
- </Button>
569
- </div>
548
+ {#if marks.length > 0}
549
+ <div class="flex items-center gap-2">
550
+ <IconButton
551
+ variant="transparent-inverse"
552
+ rounded={false}
553
+ onclick={undo}
554
+ disabled={marks.length === 0 || disabled}
555
+ aria-label="Undo last mark"
556
+ >
557
+ <Icon icon={ArrowUUpLeft} />
558
+ </IconButton>
559
+ <Divider vertical inverse class="!h-4" />
560
+ <Button
561
+ variant="transparent-inverse"
562
+ size="sm"
563
+ onClick={reset}
564
+ disabled={marks.length === 0 || disabled}
565
+ accessibilityLabel="Reset all marks"
566
+ class="!text-primary-inverse"
567
+ >
568
+ Clear all
569
+ </Button>
570
+ </div>
571
+ {/if}
570
572
  {/snippet}
571
573
 
572
574
  {#snippet TopLeftActions()}
573
575
  {#if activeMarkerName && !hideMarkers && !disabled}
574
- <div
575
- class="absolute left-2 top-2 z-20 flex w-full max-w-[calc(100%-1rem)] items-center justify-between rounded-lg border border-interactive-inverse bg-base-inverse px-3 py-2"
576
- >
577
- <div class="flex items-center gap-2">
576
+ <div class="flex h-10 items-center justify-between rounded-lg px-2 py-2">
577
+ <div class="flex items-center gap-3">
578
578
  <div
579
579
  class="flex !h-6 !w-6 shrink-0 items-center justify-center rounded-md"
580
580
  style="background-color: {resolvedActiveMarkerColor()}"
581
581
  >
582
- <Icon size={16} color="primary-inverse" icon={CursorClick} />
582
+ <Icon color="primary-inverse" icon={CursorClick} />
583
583
  </div>
584
584
 
585
585
  <span class="text-sm text-primary-inverse">
@@ -594,7 +594,7 @@
594
594
 
595
595
  {#snippet ZoomControls()}
596
596
  <div
597
- class="absolute bottom-2 right-2 z-20 flex flex-col items-center gap-1 rounded-md border border-interactive-inverse bg-base-inverse p-1 opacity-0 transition-opacity duration-200 group-hover:opacity-100"
597
+ class="absolute bottom-2 right-2 z-20 flex flex-col items-center gap-1 rounded-xl border border-static-inverse bg-base-inverse p-1 opacity-0 transition-opacity duration-200 group-hover:opacity-100"
598
598
  >
599
599
  <IconButton
600
600
  variant="transparent-inverse"
@@ -617,57 +617,59 @@
617
617
  </div>
618
618
  {/snippet}
619
619
 
620
- <div
621
- bind:this={container}
622
- class="group relative h-full w-full overflow-hidden rounded-lg border"
623
- data-testid="manual-cfu-counter"
624
- >
620
+ <div class="flex h-full w-full flex-col gap-1 p-1" data-testid="manual-cfu-counter">
625
621
  {#if !hideMarkers && !disabled}
626
622
  {@render TopLeftActions()}
627
- {@render ZoomControls()}
628
623
  {/if}
629
624
 
630
- <!--
631
- We need to use SVG for this interactive component.
632
- The SVG element is treated as a canvas for clicking, panning, and zooming.
633
- We add accessibility attributes to make it more accessible despite the interactive nature.
634
- -->
635
- <!-- svelte-ignore a11y_click_events_have_key_events -->
636
- <!-- svelte-ignore a11y_no_static_element_interactions -->
637
- <!-- svelte-ignore a11y_no_noninteractive_element_interactions -->
638
- <!-- svelte-ignore a11y_no_noninteractive_tabindex -->
639
- <svg
640
- bind:this={svgElement}
641
- onclick={handleClick}
642
- onmousedown={handleMouseDown}
643
- onmousemove={handleMouseMove}
644
- onmouseup={handleMouseUp}
645
- onmouseleave={handleMouseLeave}
646
- oncontextmenu={handleContextMenu}
647
- onwheel={handleWheel}
648
- class:cursor-grabbing={panningState === 'active'}
649
- class:cursor-grab={!disabled && (panningState === 'ready' || (isShiftPressed && !panningState))}
650
- class:cursor-not-allowed={disabled}
651
- class:cursor-crosshair={!disabled && !panningState && !isShiftPressed}
652
- class="h-full w-full"
653
- role="application"
654
- aria-label={disabled
655
- ? 'CFU Counter (disabled)'
656
- : 'CFU Counter - Click to add markers, right click or shift+click to pan'}
657
- tabindex="0"
658
- >
659
- <g bind:this={viewport} id="viewport" class="h-full w-full">
660
- <image href={imageUrl} x="0" y="0" width="100%" />
661
- <g
662
- bind:this={dotsGroup}
663
- id="dots"
664
- class="pointer-events-none"
665
- aria-hidden={hideMarkers}
666
- class:hidden={hideMarkers}
667
- />
668
- </g>
669
- </svg>
670
-
671
- <!-- Debug info for marks count - useful for testing -->
672
- <span class="sr-only" data-testid="marks-count">{marks.length}</span>
625
+ <div bind:this={container} class="group relative flex-1 overflow-hidden rounded-xl bg-black">
626
+ {#if !hideMarkers && !disabled}
627
+ {@render ZoomControls()}
628
+ {/if}
629
+
630
+ <!--
631
+ We need to use SVG for this interactive component.
632
+ The SVG element is treated as a canvas for clicking, panning, and zooming.
633
+ We add accessibility attributes to make it more accessible despite the interactive nature.
634
+ -->
635
+ <!-- svelte-ignore a11y_click_events_have_key_events -->
636
+ <!-- svelte-ignore a11y_no_static_element_interactions -->
637
+ <!-- svelte-ignore a11y_no_noninteractive_element_interactions -->
638
+ <!-- svelte-ignore a11y_no_noninteractive_tabindex -->
639
+ <svg
640
+ bind:this={svgElement}
641
+ onclick={handleClick}
642
+ onmousedown={handleMouseDown}
643
+ onmousemove={handleMouseMove}
644
+ onmouseup={handleMouseUp}
645
+ onmouseleave={handleMouseLeave}
646
+ oncontextmenu={handleContextMenu}
647
+ onwheel={handleWheel}
648
+ class:cursor-grabbing={panningState === 'active'}
649
+ class:cursor-grab={!disabled &&
650
+ (panningState === 'ready' || (isShiftPressed && !panningState))}
651
+ class:cursor-not-allowed={disabled}
652
+ class:cursor-crosshair={!disabled && !panningState && !isShiftPressed}
653
+ class="h-full w-full focus:outline-none"
654
+ role="application"
655
+ aria-label={disabled
656
+ ? 'CFU Counter (disabled)'
657
+ : 'CFU Counter - Click to add markers, right click or shift+click to pan'}
658
+ tabindex="0"
659
+ >
660
+ <g bind:this={viewport} id="viewport" class="h-full w-full">
661
+ <image href={imageUrl} x="0" y="0" width="100%" />
662
+ <g
663
+ bind:this={dotsGroup}
664
+ id="dots"
665
+ class="pointer-events-none"
666
+ aria-hidden={hideMarkers}
667
+ class:hidden={hideMarkers}
668
+ />
669
+ </g>
670
+ </svg>
671
+
672
+ <!-- Debug info for marks count - useful for testing -->
673
+ <span class="sr-only" data-testid="marks-count">{marks.length}</span>
674
+ </div>
673
675
  </div>
@@ -1,6 +1,6 @@
1
1
  <script module>
2
2
  import Sparkle from 'phosphor-svelte/lib/Sparkle';
3
- import { Icon } from 'design-system';
3
+ import { Icon } from '../icons/index.js';
4
4
  import NotificationPopup from './NotificationPopup.svelte';
5
5
  import { defineMeta } from '@storybook/addon-svelte-csf';
6
6
 
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import X from 'phosphor-svelte/lib/X';
3
- import { Icon } from 'design-system';
3
+ import { Icon } from '../icons/index.js';
4
4
  import { IconButton } from '../icon-button/';
5
5
  import { fade, fly } from 'svelte/transition';
6
6
  import type { Snippet } from 'svelte';
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import X from 'phosphor-svelte/lib/X';
3
- import { Icon } from 'design-system';
3
+ import { Icon } from '../icons/index.js';
4
4
 
5
5
  interface Props {
6
6
  class?: string;
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import CheckCircle from 'phosphor-svelte/lib/CheckCircle';
3
- import { Icon } from 'design-system';
3
+ import { Icon } from '../icons/index.js';
4
4
 
5
5
  type Props = {
6
6
  currentCount: number;
@@ -1,6 +1,6 @@
1
1
  <script module lang="ts">
2
2
  import Star from 'phosphor-svelte/lib/Star';
3
- import { Icon } from 'design-system';
3
+ import { Icon } from '../icons/index.js';
4
4
  import SegmentedControlButtons from './SegmentedControlButtons.svelte';
5
5
  import { defineMeta } from '@storybook/addon-svelte-csf';
6
6
 
@@ -1,7 +1,7 @@
1
1
  <script lang="ts">
2
2
  import CaretUp from 'phosphor-svelte/lib/CaretUp';
3
3
  import CaretDown from 'phosphor-svelte/lib/CaretDown';
4
- import { Icon } from 'design-system';
4
+ import { Icon } from '../../icons/index.js';
5
5
  import { Select as SelectPrimitive } from 'bits-ui';
6
6
  import type { ContentProps } from '../types';
7
7
 
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import Check from 'phosphor-svelte/lib/Check';
3
- import { Icon } from 'design-system';
3
+ import { Icon } from '../../icons/index.js';
4
4
  import { Select as SelectPrimitive } from 'bits-ui';
5
5
  import type { ItemProps, ItemSlotProps } from '../types';
6
6
 
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import CaretDown from 'phosphor-svelte/lib/CaretDown';
3
- import { Icon } from 'design-system';
3
+ import { Icon } from '../../icons/index.js';
4
4
  import { Select as SelectPrimitive } from 'bits-ui';
5
5
  import type { TriggerProps, IconSnippet } from '../types';
6
6
 
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import CaretUpDown from 'phosphor-svelte/lib/CaretUpDown';
3
- import { Icon } from 'design-system';
3
+ import { Icon } from '../icons/index.js';
4
4
 
5
5
  let className = '';
6
6
  export { className as class };
@@ -1,7 +1,7 @@
1
1
  <script lang="ts">
2
2
  import Info from 'phosphor-svelte/lib/Info';
3
3
  import PencilSimple from 'phosphor-svelte/lib/PencilSimple';
4
- import { Icon } from 'design-system';
4
+ import { Icon } from '../icons/index.js';
5
5
  import IconButton from '../icon-button/IconButton.svelte';
6
6
  import Spinner from '../spinner/Spinner.svelte';
7
7
  import Tooltip from '../tooltip/Tooltip.svelte';
@@ -5,7 +5,7 @@
5
5
  import StopCircle from 'phosphor-svelte/lib/StopCircle';
6
6
  import WifiSlash from 'phosphor-svelte/lib/WifiSlash';
7
7
  import WarningCircle from 'phosphor-svelte/lib/WarningCircle';
8
- import { Icon } from 'design-system';
8
+ import { Icon } from '../icons/index.js';
9
9
  import StatusBadge from '../status-badge/StatusBadge.svelte';
10
10
  import Tooltip from '../tooltip/Tooltip.svelte';
11
11
  import ProgressCircle from '../progress-circle/ProgressCircle.svelte';
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import Check from 'phosphor-svelte/lib/Check';
3
- import { Icon } from 'design-system';
3
+ import { Icon } from '../../icons/index.js';
4
4
  import type { Snippet } from 'svelte';
5
5
  import { getContext } from 'svelte';
6
6
  import type { StepState } from '../';
@@ -1,6 +1,6 @@
1
1
  <script module lang="ts">
2
2
  import Phone from 'phosphor-svelte/lib/Phone';
3
- import { Icon } from 'design-system';
3
+ import { Icon } from '../icons/index.js';
4
4
  import Table from './Table.svelte';
5
5
 
6
6
  import { defineMeta } from '@storybook/addon-svelte-csf';
@@ -31,7 +31,7 @@
31
31
  };
32
32
  </script>
33
33
 
34
- <div class="w-full rounded-lg border border-static bg-surface px-5 py-2 shadow-container">
34
+ <div class="w-full rounded-xl border border-static bg-surface px-5 py-2 shadow-container">
35
35
  <table class={`w-full table-fixed sm:table-auto xl:table-${tableLayout}`}>
36
36
  {@render children?.({ THead: THead, TBody: TBody, Tr: Tr, Th: Th, Td: Td })}
37
37
  </table>
@@ -1,6 +1,6 @@
1
1
  <script module lang="ts">
2
2
  import Folder from 'phosphor-svelte/lib/Folder';
3
- import { Icon } from 'design-system';
3
+ import { Icon } from '../icons/index.js';
4
4
  import Tag from './Tag.svelte';
5
5
  import { defineMeta } from '@storybook/addon-svelte-csf';
6
6
 
@@ -35,9 +35,9 @@
35
35
  }: Props = $props();
36
36
 
37
37
  const sizes = {
38
- xs: 'h-5 text-xs p-1',
39
- sm: 'h-6 text-xs p-1.5',
40
- md: 'h-7 text-sm p-2',
38
+ xs: 'h-5 text-xs p-1 rounded',
39
+ sm: 'h-6 text-xs p-1.5 rounded',
40
+ md: 'h-7 text-sm p-2 rounded-md',
41
41
  };
42
42
  let sizeClassName = $derived(sizes[size]);
43
43
 
@@ -115,7 +115,6 @@
115
115
  gap: 0.5rem;
116
116
  overflow: hidden;
117
117
  text-overflow: ellipsis;
118
- white-space: nowrap;
119
- border-radius: 0.25rem
118
+ white-space: nowrap
120
119
  }
121
120
  </style>
@@ -1,6 +1,6 @@
1
1
  <script module lang="ts">
2
2
  import DownloadSimple from 'phosphor-svelte/lib/DownloadSimple';
3
- import { Icon } from 'design-system';
3
+ import { Icon } from '../icons/index.js';
4
4
  import { defineMeta } from '@storybook/addon-svelte-csf';
5
5
  import ToggleIconButton from './ToggleIconButton.svelte';
6
6
 
@@ -50,7 +50,7 @@
50
50
  {side}
51
51
  {align}
52
52
  sideOffset={8}
53
- class={`${className} z-50 max-w-xs text-wrap rounded bg-base-inverse px-2 py-1 text-left text-sm font-normal text-primary-inverse shadow-menu`}
53
+ class={`${className} z-50 max-w-xs text-wrap rounded-md bg-base-inverse px-2 py-1 text-left text-sm font-normal text-primary-inverse shadow-menu`}
54
54
  >
55
55
  {#if content}
56
56
  {@render content()}
package/dist/index.d.ts CHANGED
@@ -1,54 +1,54 @@
1
- export * from './components/activity/';
2
- export * from './components/avatar/';
3
- export * from './components/card/';
4
- export * from './components/banner/';
5
- export * from './components/button/';
6
- export * as Collapsible from './components/collapsible/';
7
- export * as Combobox from './components/combobox/';
8
- export * from './components/graphs';
9
- export * from './components/datepicker/';
10
- export * from './components/divider/';
11
- export * as Drawer from './components/drawer/';
12
- export * from './components/dropdown/';
13
- export * from './components/empty-content/';
14
- export * from './components/icons/';
15
- export * from './components/icons/custom/';
16
- export * from './components/icon-button/';
17
- export * from './components/image';
18
- export * from './components/input/';
19
- export * from './components/list/';
20
- export * as Legend from './components/legend/';
21
- export * from './components/logo/';
22
- export * from './components/markdown/';
23
- export * as Modal from './components/modal/';
24
- export * from './components/manual-cfu-counter/';
25
- export * from './components/multi-cfu-counter/';
26
- export * from './components/notification-popup/';
27
- export * from './components/notifications/';
28
- export * from './components/pill/';
29
- export * from './components/progress-circle/';
30
- export * from './components/required-status-indicator/';
31
- export * from './components/segmented-control-buttons/';
32
- export * as Select from './components/select/';
33
- export * from './components/skeleton-loader/';
34
- export * from './components/slider/';
35
- export * from './components/spinner/';
36
- export * from './components/stat-card/';
37
- export * from './components/status-badge/';
38
- export * from './components/stepper/';
39
- export * from './components/table/';
40
- export * from './components/tabs/';
41
- export * from './components/tag/';
42
- export * from './components/toast/';
43
- export * from './components/toggle-icon-button/';
44
- export * from './components/textarea/index';
45
- export * from './components/tooltip/';
46
- export * from './components/toggle/';
47
- export * from './components/checkbox/';
48
- export { tokens } from './tokens';
49
- export { notifications } from './notifications';
50
- export { colors, borderColor, textColor, backgroundColor, boxShadow, outlineColor } from './tokens';
51
- export * as TokensColors from './tokens/colors';
52
- export * as TokensTypography from './tokens/typography';
53
- export { default as echarts, init } from './echarts-config';
1
+ export * from './components/activity/index.js';
2
+ export * from './components/avatar/index.js';
3
+ export * from './components/card/index.js';
4
+ export * from './components/banner/index.js';
5
+ export * from './components/button/index.js';
6
+ export * as Collapsible from './components/collapsible/index.js';
7
+ export * as Combobox from './components/combobox/index.js';
8
+ export * from './components/graphs/index.js';
9
+ export * from './components/datepicker/index.js';
10
+ export * from './components/divider/index.js';
11
+ export * as Drawer from './components/drawer/index.js';
12
+ export * from './components/dropdown/index.js';
13
+ export * from './components/empty-content/index.js';
14
+ export * from './components/icons/index.js';
15
+ export * from './components/icons/custom/index.js';
16
+ export * from './components/icon-button/index.js';
17
+ export * from './components/image/index.js';
18
+ export * from './components/input/index.js';
19
+ export * from './components/list/index.js';
20
+ export * as Legend from './components/legend/index.js';
21
+ export * from './components/logo/index.js';
22
+ export * from './components/markdown/index.js';
23
+ export * as Modal from './components/modal/index.js';
24
+ export * from './components/manual-cfu-counter/index.js';
25
+ export * from './components/multi-cfu-counter/index.js';
26
+ export * from './components/notification-popup/index.js';
27
+ export * from './components/notifications/index.js';
28
+ export * from './components/pill/index.js';
29
+ export * from './components/progress-circle/index.js';
30
+ export * from './components/required-status-indicator/index.js';
31
+ export * from './components/segmented-control-buttons/index.js';
32
+ export * as Select from './components/select/index.js';
33
+ export * from './components/skeleton-loader/index.js';
34
+ export * from './components/slider/index.js';
35
+ export * from './components/spinner/index.js';
36
+ export * from './components/stat-card/index.js';
37
+ export * from './components/status-badge/index.js';
38
+ export * from './components/stepper/index.js';
39
+ export * from './components/table/index.js';
40
+ export * from './components/tabs/index.js';
41
+ export * from './components/tag/index.js';
42
+ export * from './components/toast/index.js';
43
+ export * from './components/toggle-icon-button/index.js';
44
+ export * from './components/textarea/index.js';
45
+ export * from './components/tooltip/index.js';
46
+ export * from './components/toggle/index.js';
47
+ export * from './components/checkbox/index.js';
48
+ export { tokens } from './tokens.js';
49
+ export { notifications } from './notifications.js';
50
+ export { colors, borderColor, textColor, backgroundColor, boxShadow, outlineColor, } from './tokens.js';
51
+ export * as TokensColors from './tokens/colors.js';
52
+ export * as TokensTypography from './tokens/typography.js';
53
+ export { default as echarts, init } from './echarts-config.js';
54
54
  export type { ECharts, EChartsOption, SeriesOption, LineSeriesOption, BarSeriesOption, ECElementEvent, CallbackDataParams, YAXisOption, } from './echarts-config';
package/dist/index.js CHANGED
@@ -1,57 +1,57 @@
1
1
  // Components
2
- export * from './components/activity/';
3
- export * from './components/avatar/';
4
- export * from './components/card/';
5
- export * from './components/banner/';
6
- export * from './components/button/';
7
- export * as Collapsible from './components/collapsible/';
8
- export * as Combobox from './components/combobox/';
9
- export * from './components/graphs';
10
- export * from './components/datepicker/';
11
- export * from './components/divider/';
12
- export * as Drawer from './components/drawer/';
13
- export * from './components/dropdown/';
14
- export * from './components/empty-content/';
15
- export * from './components/icons/';
16
- export * from './components/icons/custom/';
17
- export * from './components/icon-button/';
18
- export * from './components/image';
19
- export * from './components/input/';
20
- export * from './components/list/';
21
- export * as Legend from './components/legend/';
22
- export * from './components/logo/';
23
- export * from './components/markdown/';
24
- export * as Modal from './components/modal/';
25
- export * from './components/manual-cfu-counter/';
26
- export * from './components/multi-cfu-counter/';
27
- export * from './components/notification-popup/';
28
- export * from './components/notifications/';
29
- export * from './components/pill/';
30
- export * from './components/progress-circle/';
31
- export * from './components/required-status-indicator/';
32
- export * from './components/segmented-control-buttons/';
33
- export * as Select from './components/select/';
34
- export * from './components/skeleton-loader/';
35
- export * from './components/slider/';
36
- export * from './components/spinner/';
37
- export * from './components/stat-card/';
38
- export * from './components/status-badge/';
39
- export * from './components/stepper/';
40
- export * from './components/table/';
41
- export * from './components/tabs/';
42
- export * from './components/tag/';
43
- export * from './components/toast/';
44
- export * from './components/toggle-icon-button/';
45
- export * from './components/textarea/index';
46
- export * from './components/tooltip/';
47
- export * from './components/toggle/';
48
- export * from './components/checkbox/';
2
+ export * from './components/activity/index.js';
3
+ export * from './components/avatar/index.js';
4
+ export * from './components/card/index.js';
5
+ export * from './components/banner/index.js';
6
+ export * from './components/button/index.js';
7
+ export * as Collapsible from './components/collapsible/index.js';
8
+ export * as Combobox from './components/combobox/index.js';
9
+ export * from './components/graphs/index.js';
10
+ export * from './components/datepicker/index.js';
11
+ export * from './components/divider/index.js';
12
+ export * as Drawer from './components/drawer/index.js';
13
+ export * from './components/dropdown/index.js';
14
+ export * from './components/empty-content/index.js';
15
+ export * from './components/icons/index.js';
16
+ export * from './components/icons/custom/index.js';
17
+ export * from './components/icon-button/index.js';
18
+ export * from './components/image/index.js';
19
+ export * from './components/input/index.js';
20
+ export * from './components/list/index.js';
21
+ export * as Legend from './components/legend/index.js';
22
+ export * from './components/logo/index.js';
23
+ export * from './components/markdown/index.js';
24
+ export * as Modal from './components/modal/index.js';
25
+ export * from './components/manual-cfu-counter/index.js';
26
+ export * from './components/multi-cfu-counter/index.js';
27
+ export * from './components/notification-popup/index.js';
28
+ export * from './components/notifications/index.js';
29
+ export * from './components/pill/index.js';
30
+ export * from './components/progress-circle/index.js';
31
+ export * from './components/required-status-indicator/index.js';
32
+ export * from './components/segmented-control-buttons/index.js';
33
+ export * as Select from './components/select/index.js';
34
+ export * from './components/skeleton-loader/index.js';
35
+ export * from './components/slider/index.js';
36
+ export * from './components/spinner/index.js';
37
+ export * from './components/stat-card/index.js';
38
+ export * from './components/status-badge/index.js';
39
+ export * from './components/stepper/index.js';
40
+ export * from './components/table/index.js';
41
+ export * from './components/tabs/index.js';
42
+ export * from './components/tag/index.js';
43
+ export * from './components/toast/index.js';
44
+ export * from './components/toggle-icon-button/index.js';
45
+ export * from './components/textarea/index.js';
46
+ export * from './components/tooltip/index.js';
47
+ export * from './components/toggle/index.js';
48
+ export * from './components/checkbox/index.js';
49
49
  // Styles and Tokens
50
- export { tokens } from './tokens';
51
- export { notifications } from './notifications';
52
- export { colors, borderColor, textColor, backgroundColor, boxShadow, outlineColor } from './tokens';
50
+ export { tokens } from './tokens.js';
51
+ export { notifications } from './notifications.js';
52
+ export { colors, borderColor, textColor, backgroundColor, boxShadow, outlineColor, } from './tokens.js';
53
53
  // Export tokens modules for granular imports
54
- export * as TokensColors from './tokens/colors';
55
- export * as TokensTypography from './tokens/typography';
54
+ export * as TokensColors from './tokens/colors.js';
55
+ export * as TokensTypography from './tokens/typography.js';
56
56
  // Export echarts configuration
57
- export { default as echarts, init } from './echarts-config';
57
+ export { default as echarts, init } from './echarts-config.js';
@@ -1,6 +1,6 @@
1
1
  export const colors = {
2
2
  base: {
3
- mist: '#fafafa',
3
+ mist: '#f9f9fa',
4
4
  snow: '#f6f7f7',
5
5
  white: {
6
6
  default: '#FFFFFF',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reshape-biotech/design-system",
3
- "version": "2.7.5",
3
+ "version": "2.7.9",
4
4
  "scripts": {
5
5
  "dev": "vite dev",
6
6
  "build": "vite build",