@reshape-biotech/design-system 1.2.6 → 1.2.7

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 (159) hide show
  1. package/README.md +3 -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/combobox/Combobox.stories.svelte +412 -412
  19. package/dist/components/combobox/components/combobox-add.svelte +8 -8
  20. package/dist/components/combobox/components/combobox-content.svelte +39 -39
  21. package/dist/components/combobox/components/combobox-indicator.svelte +1 -1
  22. package/dist/components/datepicker/DatePicker.stories.svelte +196 -196
  23. package/dist/components/datepicker/DatePicker.svelte +173 -173
  24. package/dist/components/divider/Divider.stories.svelte +7 -7
  25. package/dist/components/divider/Divider.svelte +9 -9
  26. package/dist/components/drawer/Drawer.stories.svelte +51 -51
  27. package/dist/components/drawer/Drawer.svelte +33 -33
  28. package/dist/components/drawer/DrawerLabel.svelte +10 -10
  29. package/dist/components/dropdown/Dropdown.stories.svelte +210 -210
  30. package/dist/components/dropdown/Dropdown.svelte +57 -57
  31. package/dist/components/dropdown/components/DropdownContent.svelte +16 -16
  32. package/dist/components/dropdown/components/DropdownMenu.svelte +10 -10
  33. package/dist/components/dropdown/components/DropdownTrigger.svelte +37 -37
  34. package/dist/components/dropdown/components/OutlinedButton.svelte +9 -9
  35. package/dist/components/empty-content/EmptyContent.stories.svelte +38 -38
  36. package/dist/components/empty-content/EmptyContent.svelte +12 -12
  37. package/dist/components/graphs/bar-chart/BarChart.stories.svelte +91 -91
  38. package/dist/components/graphs/bar-chart/BarChart.svelte +147 -147
  39. package/dist/components/graphs/bar-chart/StackedBarChart.stories.svelte +57 -57
  40. package/dist/components/graphs/bar-chart/StackedBarChart.svelte +198 -199
  41. package/dist/components/graphs/chart/Chart.stories.svelte +96 -96
  42. package/dist/components/graphs/chart/Chart.svelte +207 -207
  43. package/dist/components/graphs/line/LineChart.stories.svelte +138 -138
  44. package/dist/components/graphs/line/LineChart.svelte +140 -142
  45. package/dist/components/graphs/matrix/Matrix.stories.svelte +117 -117
  46. package/dist/components/graphs/matrix/Matrix.svelte +141 -141
  47. package/dist/components/graphs/multiline/MultiLineChart.stories.svelte +168 -168
  48. package/dist/components/graphs/multiline/MultiLineChart.svelte +236 -236
  49. package/dist/components/graphs/scatterplot/Scatterplot.stories.svelte +84 -84
  50. package/dist/components/graphs/scatterplot/Scatterplot.svelte +302 -302
  51. package/dist/components/graphs/utils/duration.d.ts +1 -0
  52. package/dist/components/graphs/utils/duration.js +33 -0
  53. package/dist/components/graphs/utils/tooltipFormatter.js +1 -1
  54. package/dist/components/icon-button/IconButton.stories.svelte +64 -64
  55. package/dist/components/icon-button/IconButton.svelte +88 -88
  56. package/dist/components/icons/AnalysisIcon.stories.svelte +18 -18
  57. package/dist/components/icons/AnalysisIcon.svelte +96 -96
  58. package/dist/components/icons/Icon.stories.svelte +111 -111
  59. package/dist/components/icons/Icon.svelte +17 -17
  60. package/dist/components/icons/PrincipalIcon.svelte +59 -59
  61. package/dist/components/icons/custom/Halo.svelte +31 -31
  62. package/dist/components/icons/custom/Well.svelte +27 -27
  63. package/dist/components/icons/index.js +1 -1
  64. package/dist/components/image/Image.svelte +42 -42
  65. package/dist/components/input/Input.stories.svelte +55 -55
  66. package/dist/components/input/Input.svelte +121 -121
  67. package/dist/components/label/Label.stories.svelte +18 -18
  68. package/dist/components/label/Label.svelte +11 -11
  69. package/dist/components/list/List.stories.svelte +84 -84
  70. package/dist/components/list/List.svelte +20 -20
  71. package/dist/components/logo/Logo.stories.svelte +15 -15
  72. package/dist/components/logo/Logo.svelte +30 -30
  73. package/dist/components/manual-cfu-counter/ManualCFUCounter.stories.svelte +102 -102
  74. package/dist/components/manual-cfu-counter/ManualCFUCounter.svelte +557 -557
  75. package/dist/components/manual-cfu-counter/test/ManualCFUCounterTestWrapper.svelte +11 -11
  76. package/dist/components/markdown/Markdown.stories.svelte +10 -10
  77. package/dist/components/markdown/Markdown.svelte +6 -6
  78. package/dist/components/modal/Modal.stories.svelte +29 -29
  79. package/dist/components/modal/Modal.svelte +71 -71
  80. package/dist/components/multi-cfu-counter/MultiCFUCounter.stories.svelte +201 -201
  81. package/dist/components/multi-cfu-counter/MultiCFUCounter.svelte +606 -606
  82. package/dist/components/multi-cfu-counter/test/MultiCFUCounterTestWrapper.svelte +17 -17
  83. package/dist/components/notification-popup/NotificationPopup.stories.svelte +18 -18
  84. package/dist/components/notification-popup/NotificationPopup.svelte +26 -26
  85. package/dist/components/notifications/Notifications.stories.svelte +101 -101
  86. package/dist/components/notifications/Notifications.svelte +9 -9
  87. package/dist/components/pill/Pill.stories.svelte +8 -8
  88. package/dist/components/pill/Pill.svelte +27 -27
  89. package/dist/components/progress-circle/ProgressCircle.stories.svelte +8 -8
  90. package/dist/components/progress-circle/ProgressCircle.svelte +54 -54
  91. package/dist/components/required-status-indicator/RequiredStatusIndicator.stories.svelte +18 -18
  92. package/dist/components/required-status-indicator/RequiredStatusIndicator.svelte +14 -14
  93. package/dist/components/segmented-control-buttons/ControlButton.svelte +36 -36
  94. package/dist/components/segmented-control-buttons/SegmentedControlButtons.stories.svelte +35 -35
  95. package/dist/components/segmented-control-buttons/SegmentedControlButtons.svelte +13 -13
  96. package/dist/components/select/Select.stories.svelte +77 -77
  97. package/dist/components/select/Select.svelte +114 -114
  98. package/dist/components/select-new/Select.stories.svelte +188 -188
  99. package/dist/components/select-new/components/Group.svelte +17 -17
  100. package/dist/components/select-new/components/MultiSelectTrigger.svelte +57 -57
  101. package/dist/components/select-new/components/SelectContent.svelte +22 -22
  102. package/dist/components/select-new/components/SelectGroupHeading.svelte +10 -10
  103. package/dist/components/select-new/components/SelectItem.svelte +25 -25
  104. package/dist/components/select-new/components/SelectTrigger.svelte +38 -38
  105. package/dist/components/sjsf-wrappers/SjsfNumberInputWrapper.svelte +76 -76
  106. package/dist/components/sjsf-wrappers/SjsfNumberInputWrapper.svelte.d.ts +1 -1
  107. package/dist/components/sjsf-wrappers/SjsfTextInputWrapper.svelte +53 -53
  108. package/dist/components/sjsf-wrappers/SjsfTextInputWrapper.svelte.d.ts +1 -1
  109. package/dist/components/sjsf-wrappers/sjsfCustomTheme.js +1 -1
  110. package/dist/components/skeleton-loader/SkeletonLoader.stories.svelte +32 -32
  111. package/dist/components/skeleton-loader/SkeletonLoader.svelte +10 -10
  112. package/dist/components/skeleton-loader/StatcardSkeleton.svelte +9 -9
  113. package/dist/components/skeleton-loader/components/Skeleton.svelte +7 -7
  114. package/dist/components/skeleton-loader/components/SkeletonImage.svelte +12 -12
  115. package/dist/components/slider/Slider.stories.svelte +23 -23
  116. package/dist/components/slider/Slider.svelte +107 -107
  117. package/dist/components/spinner/Spinner.stories.svelte +8 -8
  118. package/dist/components/spinner/Spinner.svelte +18 -18
  119. package/dist/components/stat-card/StatCard.stories.svelte +26 -26
  120. package/dist/components/stat-card/StatCard.svelte +128 -128
  121. package/dist/components/status-badge/StatusBadge.stories.svelte +365 -365
  122. package/dist/components/status-badge/StatusBadge.svelte +54 -54
  123. package/dist/components/stepper/Stepper.stories.svelte +219 -219
  124. package/dist/components/stepper/components/stepper-root.svelte +12 -12
  125. package/dist/components/stepper/components/stepper-step.svelte +83 -83
  126. package/dist/components/table/Table.stories.svelte +87 -87
  127. package/dist/components/table/Table.svelte +32 -32
  128. package/dist/components/table/components/TBody.svelte +7 -7
  129. package/dist/components/table/components/THead.svelte +7 -7
  130. package/dist/components/table/components/Td.svelte +8 -8
  131. package/dist/components/table/components/Th.svelte +8 -8
  132. package/dist/components/table/components/Tr.svelte +11 -11
  133. package/dist/components/tabs/Tabs.stories.svelte +20 -20
  134. package/dist/components/tabs/Tabs.svelte +8 -8
  135. package/dist/components/tabs/components/Content.svelte +8 -8
  136. package/dist/components/tabs/components/Tab.svelte +14 -14
  137. package/dist/components/tabs/components/Tabs.svelte +7 -7
  138. package/dist/components/tag/Tag.stories.svelte +57 -57
  139. package/dist/components/tag/Tag.svelte +95 -95
  140. package/dist/components/textarea/Textarea.stories.svelte +70 -70
  141. package/dist/components/textarea/Textarea.svelte +76 -76
  142. package/dist/components/toast/Toast.stories.svelte +204 -204
  143. package/dist/components/toast/Toast.svelte +53 -53
  144. package/dist/components/toggle/Toggle.stories.svelte +9 -9
  145. package/dist/components/toggle/Toggle.svelte +53 -53
  146. package/dist/components/toggle-icon-button/ToggleIconButton.stories.svelte +152 -152
  147. package/dist/components/toggle-icon-button/ToggleIconButton.svelte +99 -99
  148. package/dist/components/tooltip/Tooltip.stories.svelte +105 -105
  149. package/dist/components/tooltip/Tooltip.svelte +26 -26
  150. package/dist/fonts/index.js +1 -1
  151. package/dist/notifications.d.ts +1 -4
  152. package/dist/notifications.js +1 -1
  153. package/dist/tailwind-safelist.js +406 -406
  154. package/dist/tailwind.preset.js +10 -10
  155. package/dist/tokens/colors.js +18 -18
  156. package/dist/tokens/typography.js +6 -6
  157. package/dist/tokens.js +19 -19
  158. package/dist/types/fonts.d.ts +2 -2
  159. package/package.json +199 -198
@@ -1,241 +1,241 @@
1
1
  <script lang="ts">
2
- import { textColor, borderColor, chartColor, boxShadow } from '../../../tokens';
3
- import Chart, { type GenericChartProps } from '../chart/Chart.svelte';
4
- import type { ECElementEvent, EChartsOption, LineSeriesOption } from 'echarts';
5
- import * as echarts from 'echarts/core';
6
- import { createTooltipFormatter } from '../utils/tooltipFormatter';
7
- import { Duration } from 'luxon';
8
-
9
- interface Groups {
10
- key: string;
11
- series: (number | null)[];
12
- }
13
-
14
- interface MultiLineChartProps extends GenericChartProps {
15
- data: Groups[];
16
- withArea?: boolean;
17
- colors?: Record<string, string>;
18
- withFocus?: boolean;
19
- focusTargetKey?: string;
20
- sumYAxis?: boolean;
21
- captureInterval?: number;
22
- grid?: EChartsOption['grid'];
23
- }
24
-
25
- let {
26
- data,
27
- xAxisName,
28
- yAxisName,
29
- withArea = false,
30
- colors,
31
- withFocus = true,
32
- focusTargetKey,
33
- sumYAxis = true,
34
- captureInterval,
35
- ...props
36
- }: MultiLineChartProps = $props();
37
-
38
- const dataKeyToIndexMap = $derived(new Map(data.map((group, index) => [group.key, index])));
39
-
40
- const longestSeries = data?.reduce(
41
- (acc: (number | null)[], group) => (group.series.length > acc.length ? group.series : acc),
42
- []
43
- ).length;
44
-
45
- const captureIntervals = captureInterval
46
- ? Array(longestSeries)
47
- .fill(null)
48
- .map((_, timeIndex) => {
49
- const seconds = timeIndex * captureInterval;
50
- const duration = Duration.fromObject({ seconds }).shiftTo('days', 'hours', 'minutes');
51
- return duration.days >= 1 ? duration.toFormat('dd:hh:mm') : duration.toFormat('hh:mm');
52
- })
53
- : undefined;
54
-
55
- let focusedSeries = $state<string | undefined>(undefined);
56
-
57
- function handleMouseOver(params: ECElementEvent) {
58
- focusedSeries = params.seriesName;
59
- props.onmouseover?.(params);
60
- }
61
-
62
- function handleMouseOut() {
63
- focusedSeries = undefined;
64
- props.onmouseout?.();
65
- }
66
-
67
- const defaultColors: Record<string, string> = {
68
- accent: chartColor['accent'],
69
- blue: chartColor['blue'],
70
- orange: chartColor['orange'],
71
- plum: chartColor['plum'],
72
- sky: chartColor['sky'],
73
- pear: chartColor['pear'],
74
- pink: chartColor['pink'],
75
- lilac: chartColor['lilac'],
76
- lime: chartColor['lime']
77
- };
78
- const defaultColorRotationArray = $derived(Object.values(defaultColors));
79
-
80
- // Helper function to get color (needed for tooltip formatter config)
81
- const getSeriesColor = (seriesName: string, seriesIndex: number): string => {
82
- if (colors && colors[seriesName]) {
83
- return colors[seriesName];
84
- }
85
- const dataIndex = dataKeyToIndexMap.get(seriesName);
86
- if (dataIndex !== undefined) {
87
- return defaultColorRotationArray[dataIndex % defaultColorRotationArray.length];
88
- }
89
- return defaultColorRotationArray[seriesIndex % defaultColorRotationArray.length]; // Fallback based on index
90
- };
91
-
92
- const toFixedLocaleString = (
93
- value?: number | undefined,
94
- fractionDigits: number | undefined = 0,
95
- locale: string | undefined = undefined
96
- ): string =>
97
- value?.toLocaleString(locale, {
98
- minimumFractionDigits: fractionDigits,
99
- maximumFractionDigits: fractionDigits
100
- }) ?? '';
101
-
102
- let options: EChartsOption = $derived.by(() => ({
103
- grid: {
104
- left: 0,
105
- right: 16,
106
- bottom: 16,
107
- top: 16,
108
- containLabel: true
109
- },
110
- textStyle: {
111
- color: textColor['secondary'],
112
- fontFamily: 'af Another Sans'
113
- },
114
- xAxis: {
115
- type: 'category',
116
- boundaryGap: false,
117
- axisLabel: {
118
- fontSize: 11
119
- },
120
- axisLine: {
121
- onZero: false,
122
- lineStyle: {
123
- color: borderColor['axis']
124
- }
125
- },
126
- data: captureIntervals,
127
- ...props.xAxisOptions
128
- },
129
- yAxis: {
130
- type: 'value',
131
- alignTicks: true,
132
- axisLabel: {
133
- formatter: (value: any) => value.toLocaleString()
134
- } as any,
135
- axisPointer: {
136
- label: {
137
- formatter: (value: any) => toFixedLocaleString(value.value, 2)
138
- }
139
- },
140
- splitLine: {
141
- lineStyle: {
142
- color: borderColor['input'],
143
- type: 'dashed'
144
- }
145
- },
146
- ...props.yAxisOptions
147
- },
148
- selectedMode: 'multiple',
149
- tooltip: {
150
- trigger: 'axis',
151
- axisPointer: {
152
- type: 'line',
153
- z: 0,
154
- lineStyle: {
155
- type: 'solid'
156
- }
157
- },
158
- extraCssText: `box-shadow: ${boxShadow.menu}`,
159
- formatter: createTooltipFormatter({
160
- yAxisName,
161
- yAxisUnit: props.yAxisUnit ?? undefined,
162
- focusedSeriesAccessor: () => focusedSeries,
163
- getSeriesColor,
164
- maxSeriesToShow: 6
165
- })
166
- },
167
- series: data.map((group, index): LineSeriesOption => {
168
- const color =
169
- colors?.[group.key] ?? defaultColorRotationArray[index % defaultColorRotationArray.length];
170
-
171
- // Determine emphasis based on focusTargetKey or withFocus
172
- let emphasisConfig: LineSeriesOption['emphasis'];
173
- if (focusTargetKey) {
174
- if (group.key === focusTargetKey) {
175
- emphasisConfig = { focus: 'series' };
176
- } else {
177
- emphasisConfig = undefined;
178
- }
179
- } else if (withFocus) {
180
- emphasisConfig = { focus: 'series' };
181
- } else {
182
- emphasisConfig = undefined;
183
- }
184
-
185
- // Determine visual style based on focusTargetKey
186
- const isTargeted = focusTargetKey && group.key === focusTargetKey;
187
- const isBlurred = focusTargetKey && !isTargeted;
188
- const lineOpacity = isBlurred ? 0.25 : 1;
189
- const areaOpacityBase = isBlurred ? 0.1 : 0.2; // Lower base opacity for blurred area
190
- const areaOpacityEnd = 0;
191
-
192
- return {
193
- animation: false,
194
- ...(emphasisConfig && { emphasis: emphasisConfig }),
195
- type: 'line',
196
- stack: sumYAxis ? 'total' : undefined,
197
- symbol: 'circle',
198
- progressive: 300,
199
- progressiveThreshold: 1000,
200
- symbolSize: 1,
201
- data: group.series,
202
- triggerLineEvent: true,
203
- name: group.key,
204
- lineStyle: {
205
- color: color,
206
- opacity: lineOpacity
207
- },
208
- itemStyle: {
209
- color: color,
210
- opacity: lineOpacity // Also apply opacity to item markers if needed
211
- },
212
- areaStyle: withArea
213
- ? {
214
- color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
215
- {
216
- offset: 0,
217
- color: echarts.color.modifyAlpha(color, areaOpacityBase)
218
- },
219
- {
220
- offset: 1,
221
- color: echarts.color.modifyAlpha(color, areaOpacityEnd)
222
- }
223
- ])
224
- }
225
- : undefined
226
- };
227
- })
228
- }));
2
+ import { textColor, borderColor, chartColor, boxShadow } from '../../../tokens';
3
+ import Chart, { type GenericChartProps } from '../chart/Chart.svelte';
4
+ import type { ECElementEvent, EChartsOption, LineSeriesOption } from 'echarts';
5
+ import * as echarts from 'echarts/core';
6
+ import { createTooltipFormatter } from '../utils/tooltipFormatter';
7
+ import { Duration } from 'luxon';
8
+ import { formattedDurationCompact } from '../utils/duration';
9
+
10
+ interface Groups {
11
+ key: string;
12
+ series: (number | null)[];
13
+ }
14
+
15
+ interface MultiLineChartProps extends GenericChartProps {
16
+ data: Groups[];
17
+ withArea?: boolean;
18
+ colors?: Record<string, string>;
19
+ withFocus?: boolean;
20
+ focusTargetKey?: string;
21
+ sumYAxis?: boolean;
22
+ captureInterval?: number;
23
+ grid?: EChartsOption['grid'];
24
+ }
25
+
26
+ let {
27
+ data,
28
+ xAxisName,
29
+ yAxisName,
30
+ withArea = false,
31
+ colors,
32
+ withFocus = true,
33
+ focusTargetKey,
34
+ sumYAxis = true,
35
+ captureInterval,
36
+ ...props
37
+ }: MultiLineChartProps = $props();
38
+
39
+ const dataKeyToIndexMap = $derived(new Map(data.map((group, index) => [group.key, index])));
40
+
41
+ const longestSeries = data?.reduce(
42
+ (acc: (number | null)[], group) => (group.series.length > acc.length ? group.series : acc),
43
+ []
44
+ ).length;
45
+
46
+ const captureIntervals = captureInterval
47
+ ? Array(longestSeries)
48
+ .fill(null)
49
+ .map((_, timeIndex) => {
50
+ const seconds = timeIndex * captureInterval;
51
+ return formattedDurationCompact(seconds);
52
+ })
53
+ : undefined;
54
+
55
+ let focusedSeries = $state<string | undefined>(undefined);
56
+
57
+ function handleMouseOver(params: ECElementEvent) {
58
+ focusedSeries = params.seriesName;
59
+ props.onmouseover?.(params);
60
+ }
61
+
62
+ function handleMouseOut() {
63
+ focusedSeries = undefined;
64
+ props.onmouseout?.();
65
+ }
66
+
67
+ const defaultColors: Record<string, string> = {
68
+ accent: chartColor['accent'],
69
+ blue: chartColor['blue'],
70
+ orange: chartColor['orange'],
71
+ plum: chartColor['plum'],
72
+ sky: chartColor['sky'],
73
+ pear: chartColor['pear'],
74
+ pink: chartColor['pink'],
75
+ lilac: chartColor['lilac'],
76
+ lime: chartColor['lime'],
77
+ };
78
+ const defaultColorRotationArray = $derived(Object.values(defaultColors));
79
+
80
+ // Helper function to get color (needed for tooltip formatter config)
81
+ const getSeriesColor = (seriesName: string, seriesIndex: number): string => {
82
+ if (colors && colors[seriesName]) {
83
+ return colors[seriesName];
84
+ }
85
+ const dataIndex = dataKeyToIndexMap.get(seriesName);
86
+ if (dataIndex !== undefined) {
87
+ return defaultColorRotationArray[dataIndex % defaultColorRotationArray.length];
88
+ }
89
+ return defaultColorRotationArray[seriesIndex % defaultColorRotationArray.length]; // Fallback based on index
90
+ };
91
+
92
+ const toFixedLocaleString = (
93
+ value?: number | undefined,
94
+ fractionDigits: number | undefined = 0,
95
+ locale: string | undefined = undefined
96
+ ): string =>
97
+ value?.toLocaleString(locale, {
98
+ minimumFractionDigits: fractionDigits,
99
+ maximumFractionDigits: fractionDigits,
100
+ }) ?? '';
101
+
102
+ let options: EChartsOption = $derived.by(() => ({
103
+ grid: {
104
+ left: 0,
105
+ right: 16,
106
+ bottom: 16,
107
+ top: 16,
108
+ containLabel: true,
109
+ },
110
+ textStyle: {
111
+ color: textColor['secondary'],
112
+ fontFamily: 'af Another Sans',
113
+ },
114
+ xAxis: {
115
+ type: 'category',
116
+ boundaryGap: false,
117
+ axisLabel: {
118
+ fontSize: 11,
119
+ },
120
+ axisLine: {
121
+ onZero: false,
122
+ lineStyle: {
123
+ color: borderColor['axis'],
124
+ },
125
+ },
126
+ data: captureIntervals,
127
+ ...props.xAxisOptions,
128
+ },
129
+ yAxis: {
130
+ type: 'value',
131
+ alignTicks: true,
132
+ axisLabel: {
133
+ formatter: (value: any) => value.toLocaleString(),
134
+ } as any,
135
+ axisPointer: {
136
+ label: {
137
+ formatter: (value: any) => toFixedLocaleString(value.value, 2),
138
+ },
139
+ },
140
+ splitLine: {
141
+ lineStyle: {
142
+ color: borderColor['input'],
143
+ type: 'dashed',
144
+ },
145
+ },
146
+ ...props.yAxisOptions,
147
+ },
148
+ selectedMode: 'multiple',
149
+ tooltip: {
150
+ trigger: 'axis',
151
+ axisPointer: {
152
+ type: 'line',
153
+ z: 0,
154
+ lineStyle: {
155
+ type: 'solid',
156
+ },
157
+ },
158
+ extraCssText: `box-shadow: ${boxShadow.menu}`,
159
+ formatter: createTooltipFormatter({
160
+ yAxisName,
161
+ yAxisUnit: props.yAxisUnit ?? undefined,
162
+ focusedSeriesAccessor: () => focusedSeries,
163
+ getSeriesColor,
164
+ maxSeriesToShow: 6,
165
+ }),
166
+ },
167
+ series: data.map((group, index): LineSeriesOption => {
168
+ const color =
169
+ colors?.[group.key] ?? defaultColorRotationArray[index % defaultColorRotationArray.length];
170
+
171
+ // Determine emphasis based on focusTargetKey or withFocus
172
+ let emphasisConfig: LineSeriesOption['emphasis'];
173
+ if (focusTargetKey) {
174
+ if (group.key === focusTargetKey) {
175
+ emphasisConfig = { focus: 'series' };
176
+ } else {
177
+ emphasisConfig = undefined;
178
+ }
179
+ } else if (withFocus) {
180
+ emphasisConfig = { focus: 'series' };
181
+ } else {
182
+ emphasisConfig = undefined;
183
+ }
184
+
185
+ // Determine visual style based on focusTargetKey
186
+ const isTargeted = focusTargetKey && group.key === focusTargetKey;
187
+ const isBlurred = focusTargetKey && !isTargeted;
188
+ const lineOpacity = isBlurred ? 0.25 : 1;
189
+ const areaOpacityBase = isBlurred ? 0.1 : 0.2; // Lower base opacity for blurred area
190
+ const areaOpacityEnd = 0;
191
+
192
+ return {
193
+ animation: false,
194
+ ...(emphasisConfig && { emphasis: emphasisConfig }),
195
+ type: 'line',
196
+ stack: sumYAxis ? 'total' : undefined,
197
+ symbol: 'circle',
198
+ progressive: 300,
199
+ progressiveThreshold: 1000,
200
+ symbolSize: 1,
201
+ data: group.series,
202
+ triggerLineEvent: true,
203
+ name: group.key,
204
+ lineStyle: {
205
+ color: color,
206
+ opacity: lineOpacity,
207
+ },
208
+ itemStyle: {
209
+ color: color,
210
+ opacity: lineOpacity, // Also apply opacity to item markers if needed
211
+ },
212
+ areaStyle: withArea
213
+ ? {
214
+ color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
215
+ {
216
+ offset: 0,
217
+ color: echarts.color.modifyAlpha(color, areaOpacityBase),
218
+ },
219
+ {
220
+ offset: 1,
221
+ color: echarts.color.modifyAlpha(color, areaOpacityEnd),
222
+ },
223
+ ]),
224
+ }
225
+ : undefined,
226
+ };
227
+ }),
228
+ }));
229
229
  </script>
230
230
 
231
231
  <Chart
232
- {options}
233
- {...{
234
- ...props,
235
-
236
- xAxisName,
237
- yAxisName,
238
- onmouseover: handleMouseOver,
239
- onmouseout: handleMouseOut
240
- }}
232
+ {options}
233
+ {...{
234
+ ...props,
235
+
236
+ xAxisName,
237
+ yAxisName,
238
+ onmouseover: handleMouseOver,
239
+ onmouseout: handleMouseOut,
240
+ }}
241
241
  />