@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,173 +1,173 @@
1
1
  <script module lang="ts">
2
- import { defineMeta } from '@storybook/addon-svelte-csf';
3
- import type { ECElementEvent } from 'echarts';
4
- import { within, userEvent } from '@storybook/test';
5
- import LineChart from './LineChart.svelte';
2
+ import { defineMeta } from '@storybook/addon-svelte-csf';
3
+ import type { ECElementEvent } from 'echarts';
4
+ import { within, userEvent } from '@storybook/test';
5
+ import LineChart from './LineChart.svelte';
6
6
 
7
- const { Story } = defineMeta({
8
- component: LineChart,
9
- title: 'Design System/Graphs/LineChart',
10
- tags: ['autodocs']
11
- });
7
+ const { Story } = defineMeta({
8
+ component: LineChart,
9
+ title: 'Design System/Graphs/LineChart',
10
+ tags: ['autodocs'],
11
+ });
12
12
 
13
- const xAxisName = 'Time';
14
- const yAxisName = 'Count';
13
+ const xAxisName = 'Time';
14
+ const yAxisName = 'Count';
15
15
 
16
- const data = [
17
- 10.0, 8.04, 8.07, 6.95, 13.0, 7.58, 9.05, 8.81, 11.0, 8.33, 14.0, 7.66, 13.4, 6.81, 10.0, 6.33,
18
- 14.0, 8.96, 12.5, 6.82, 9.15, 7.2, 11.5, 7.2, 3.03, 4.23, 12.2, 7.83, 2.02, 4.47, 1.05, 3.33,
19
- 4.05, 4.96, 6.03, 7.24, 12.0, 6.26, 12.0, 8.84, 7.08, 5.82, 5.02
20
- ];
16
+ const data = [
17
+ 10.0, 8.04, 8.07, 6.95, 13.0, 7.58, 9.05, 8.81, 11.0, 8.33, 14.0, 7.66, 13.4, 6.81, 10.0, 6.33,
18
+ 14.0, 8.96, 12.5, 6.82, 9.15, 7.2, 11.5, 7.2, 3.03, 4.23, 12.2, 7.83, 2.02, 4.47, 1.05, 3.33,
19
+ 4.05, 4.96, 6.03, 7.24, 12.0, 6.26, 12.0, 8.84, 7.08, 5.82, 5.02,
20
+ ];
21
21
 
22
- const bigData = Array.from({ length: 1000 }, (_, i) => i);
22
+ const bigData = Array.from({ length: 1000 }, (_, i) => i);
23
23
 
24
- function handleItemClick(params: ECElementEvent) {
25
- console.log(params);
26
- }
24
+ function handleItemClick(params: ECElementEvent) {
25
+ console.log(params);
26
+ }
27
27
 
28
- function handleMouseOver(params: ECElementEvent) {
29
- console.log(params);
30
- }
28
+ function handleMouseOver(params: ECElementEvent) {
29
+ console.log(params);
30
+ }
31
31
 
32
- function handleMouseOut() {
33
- console.log('mouse out');
34
- }
32
+ function handleMouseOut() {
33
+ console.log('mouse out');
34
+ }
35
35
 
36
- // State for interactive current location story
37
- let interactivetimeIndex = $state(3);
38
- const interactiveChartData = [10, 8, 13, 7, 9, 6, 11];
36
+ // State for interactive current location story
37
+ let interactivetimeIndex = $state(3);
38
+ const interactiveChartData = [10, 8, 13, 7, 9, 6, 11];
39
39
  </script>
40
40
 
41
41
  <Story name="Base" asChild>
42
- <div class="h-[400px] w-full">
43
- <LineChart
44
- {xAxisName}
45
- {yAxisName}
46
- yAxisUnit="mm²"
47
- {data}
48
- onitemclick={handleItemClick}
49
- onmouseover={handleMouseOver}
50
- onmouseout={handleMouseOut}
51
- />
52
- </div>
42
+ <div class="h-[400px] w-full">
43
+ <LineChart
44
+ {xAxisName}
45
+ {yAxisName}
46
+ yAxisUnit="mm²"
47
+ {data}
48
+ onitemclick={handleItemClick}
49
+ onmouseover={handleMouseOver}
50
+ onmouseout={handleMouseOut}
51
+ />
52
+ </div>
53
53
  </Story>
54
54
 
55
55
  <Story name="Large datasets with capture intervals" asChild>
56
- <div class="h-[400px] w-full">
57
- <LineChart
58
- {xAxisName}
59
- {yAxisName}
60
- data={bigData}
61
- onitemclick={handleItemClick}
62
- onmouseover={handleMouseOver}
63
- onmouseout={handleMouseOut}
64
- />
65
- </div>
56
+ <div class="h-[400px] w-full">
57
+ <LineChart
58
+ {xAxisName}
59
+ {yAxisName}
60
+ data={bigData}
61
+ onitemclick={handleItemClick}
62
+ onmouseover={handleMouseOver}
63
+ onmouseout={handleMouseOut}
64
+ />
65
+ </div>
66
66
  </Story>
67
67
  <Story name="With Area Gradient" asChild>
68
- <div class="h-[400px] w-full">
69
- <LineChart
70
- {xAxisName}
71
- {yAxisName}
72
- {data}
73
- withArea
74
- onitemclick={handleItemClick}
75
- onmouseover={handleMouseOver}
76
- onmouseout={handleMouseOut}
77
- />
78
- </div>
68
+ <div class="h-[400px] w-full">
69
+ <LineChart
70
+ {xAxisName}
71
+ {yAxisName}
72
+ {data}
73
+ withArea
74
+ onitemclick={handleItemClick}
75
+ onmouseover={handleMouseOver}
76
+ onmouseout={handleMouseOut}
77
+ />
78
+ </div>
79
79
  </Story>
80
80
  <Story name="Custom Color" asChild>
81
- <div class="h-[400px] w-full">
82
- <LineChart
83
- {xAxisName}
84
- {yAxisName}
85
- {data}
86
- color="#e01b5c"
87
- onitemclick={handleItemClick}
88
- onmouseover={handleMouseOver}
89
- onmouseout={handleMouseOut}
90
- />
91
- </div>
81
+ <div class="h-[400px] w-full">
82
+ <LineChart
83
+ {xAxisName}
84
+ {yAxisName}
85
+ {data}
86
+ color="#e01b5c"
87
+ onitemclick={handleItemClick}
88
+ onmouseover={handleMouseOver}
89
+ onmouseout={handleMouseOut}
90
+ />
91
+ </div>
92
92
  </Story>
93
93
  <Story name="Custom Color with Area" asChild>
94
- <div class="h-[400px] w-full">
95
- <LineChart
96
- {xAxisName}
97
- {yAxisName}
98
- {data}
99
- color="#3ba272"
100
- withArea
101
- onitemclick={handleItemClick}
102
- onmouseover={handleMouseOver}
103
- onmouseout={handleMouseOut}
104
- />
105
- </div>
94
+ <div class="h-[400px] w-full">
95
+ <LineChart
96
+ {xAxisName}
97
+ {yAxisName}
98
+ {data}
99
+ color="#3ba272"
100
+ withArea
101
+ onitemclick={handleItemClick}
102
+ onmouseover={handleMouseOver}
103
+ onmouseout={handleMouseOut}
104
+ />
105
+ </div>
106
106
  </Story>
107
107
  <Story name="With Current Location" asChild>
108
- <div class="h-[400px] w-full">
109
- <LineChart {xAxisName} yAxisName="Value" data={[10, 8, 13, 7, 9, 6, 11]} timeIndex={3} />
110
- </div>
108
+ <div class="h-[400px] w-full">
109
+ <LineChart {xAxisName} yAxisName="Value" data={[10, 8, 13, 7, 9, 6, 11]} timeIndex={3} />
110
+ </div>
111
111
  </Story>
112
112
  <Story name="With Capture Interval" asChild>
113
- <div class="h-[400px] w-full">
114
- <LineChart
115
- {xAxisName}
116
- yAxisName="Value"
117
- data={[10, 8, 13, 7, 9, 6, 11, 15, 12, 8, 14, 16]}
118
- captureInterval={3600}
119
- />
120
- </div>
113
+ <div class="h-[400px] w-full">
114
+ <LineChart
115
+ {xAxisName}
116
+ yAxisName="Value"
117
+ data={[10, 8, 13, 7, 9, 6, 11, 15, 12, 8, 14, 16]}
118
+ captureInterval={3600}
119
+ />
120
+ </div>
121
121
  </Story>
122
122
  <Story name="With Capture Interval - Short Duration" asChild>
123
- <div class="h-[400px] w-full">
124
- <LineChart
125
- {xAxisName}
126
- yAxisName="Value"
127
- data={[10, 8, 13, 7, 9, 6, 11, 15, 12, 8, 14, 16]}
128
- captureInterval={600}
129
- />
130
- </div>
123
+ <div class="h-[400px] w-full">
124
+ <LineChart
125
+ {xAxisName}
126
+ yAxisName="Value"
127
+ data={[10, 8, 13, 7, 9, 6, 11, 15, 12, 8, 14, 16]}
128
+ captureInterval={600}
129
+ />
130
+ </div>
131
131
  </Story>
132
132
  <Story
133
- name="Interactive Current Location"
134
- asChild
135
- play={async ({ canvasElement }) => {
136
- const canvas = within(canvasElement);
133
+ name="Interactive Current Location"
134
+ asChild
135
+ play={async ({ canvasElement }) => {
136
+ const canvas = within(canvasElement);
137
137
 
138
- // Find the input field by its label
139
- const input = canvas.getByLabelText('Current Location X:');
138
+ // Find the input field by its label
139
+ const input = canvas.getByLabelText('Current Location X:');
140
140
 
141
- // Clear the input and type a new value
142
- await userEvent.clear(input);
143
- await userEvent.type(input, '5');
144
- await new Promise((resolve) => setTimeout(resolve, 1000));
141
+ // Clear the input and type a new value
142
+ await userEvent.clear(input);
143
+ await userEvent.type(input, '5');
144
+ await new Promise((resolve) => setTimeout(resolve, 1000));
145
145
 
146
- await userEvent.clear(input);
147
- await userEvent.type(input, '2');
146
+ await userEvent.clear(input);
147
+ await userEvent.type(input, '2');
148
148
 
149
- // Add a small delay to observe the change if running interactively
150
- await new Promise((resolve) => setTimeout(resolve, 500));
151
- }}
149
+ // Add a small delay to observe the change if running interactively
150
+ await new Promise((resolve) => setTimeout(resolve, 500));
151
+ }}
152
152
  >
153
- <div class="flex h-[450px] w-full flex-col gap-4">
154
- <label class="flex items-center gap-2">
155
- Current Location X:
156
- <input
157
- type="number"
158
- bind:value={interactivetimeIndex}
159
- min="0"
160
- max={interactiveChartData.length - 1}
161
- class="w-20 rounded border p-1"
162
- />
163
- </label>
164
- <div class="h-full w-full">
165
- <LineChart
166
- {xAxisName}
167
- yAxisName="Value"
168
- data={interactiveChartData}
169
- timeIndex={interactivetimeIndex}
170
- />
171
- </div>
172
- </div>
153
+ <div class="flex h-[450px] w-full flex-col gap-4">
154
+ <label class="flex items-center gap-2">
155
+ Current Location X:
156
+ <input
157
+ type="number"
158
+ bind:value={interactivetimeIndex}
159
+ min="0"
160
+ max={interactiveChartData.length - 1}
161
+ class="w-20 rounded border p-1"
162
+ />
163
+ </label>
164
+ <div class="h-full w-full">
165
+ <LineChart
166
+ {xAxisName}
167
+ yAxisName="Value"
168
+ data={interactiveChartData}
169
+ timeIndex={interactivetimeIndex}
170
+ />
171
+ </div>
172
+ </div>
173
173
  </Story>
@@ -1,153 +1,151 @@
1
1
  <script lang="ts">
2
- import { textColor, borderColor, chartColor, boxShadow } from '../../../tokens';
3
- import Chart from '../chart/Chart.svelte';
4
- import type { EChartsOption } from 'echarts';
5
- import * as echarts from 'echarts/core';
6
- import type { GenericChartProps } from '../chart/Chart.svelte';
7
- import { createTooltipFormatter } from '../utils/tooltipFormatter';
8
- import { Duration } from 'luxon';
2
+ import { textColor, borderColor, chartColor, boxShadow } from '../../../tokens';
3
+ import Chart from '../chart/Chart.svelte';
4
+ import type { EChartsOption } from 'echarts';
5
+ import * as echarts from 'echarts/core';
6
+ import type { GenericChartProps } from '../chart/Chart.svelte';
7
+ import { createTooltipFormatter } from '../utils/tooltipFormatter';
8
+ import { formattedDurationCompact } from '../utils/duration';
9
9
 
10
- interface LineChartProps extends GenericChartProps {
11
- data: (number | null)[];
12
- withArea?: boolean;
13
- color?: string;
14
- grid?: EChartsOption['grid'];
15
- captureInterval?: number;
16
- }
10
+ interface LineChartProps extends GenericChartProps {
11
+ data: (number | null)[];
12
+ withArea?: boolean;
13
+ color?: string;
14
+ grid?: EChartsOption['grid'];
15
+ captureInterval?: number;
16
+ }
17
17
 
18
- let {
19
- data,
20
- xAxisName,
21
- yAxisName,
22
- withArea = false,
23
- color = chartColor['accent'],
24
- captureInterval,
25
- ...props
26
- }: LineChartProps = $props();
18
+ let {
19
+ data,
20
+ xAxisName,
21
+ yAxisName,
22
+ withArea = false,
23
+ color = chartColor['accent'],
24
+ captureInterval,
25
+ ...props
26
+ }: LineChartProps = $props();
27
27
 
28
- const formatTooltip = createTooltipFormatter({
29
- yAxisName: yAxisName,
30
- yAxisUnit: props.yAxisUnit
31
- });
28
+ const formatTooltip = createTooltipFormatter({
29
+ yAxisName: yAxisName,
30
+ yAxisUnit: props.yAxisUnit,
31
+ });
32
32
 
33
- const toFixedLocaleString = (
34
- value?: number | undefined,
35
- fractionDigits: number | undefined = 0,
36
- locale: string | undefined = undefined
37
- ): string =>
38
- value?.toLocaleString(locale, {
39
- minimumFractionDigits: fractionDigits,
40
- maximumFractionDigits: fractionDigits
41
- }) ?? '';
33
+ const toFixedLocaleString = (
34
+ value?: number | undefined,
35
+ fractionDigits: number | undefined = 0,
36
+ locale: string | undefined = undefined
37
+ ): string =>
38
+ value?.toLocaleString(locale, {
39
+ minimumFractionDigits: fractionDigits,
40
+ maximumFractionDigits: fractionDigits,
41
+ }) ?? '';
42
42
 
43
- const captureIntervals = captureInterval
44
- ? Array(data.length)
45
- .fill(null)
46
- .map((_, timeIndex) => {
47
- const seconds = timeIndex * captureInterval;
48
- const duration = Duration.fromObject({ seconds }).shiftTo('days', 'hours', 'minutes');
49
- return duration.days >= 1 ? duration.toFormat('dd:hh:mm') : duration.toFormat('hh:mm');
50
- })
51
- : undefined;
43
+ const captureIntervals = captureInterval
44
+ ? Array(data.length)
45
+ .fill(null)
46
+ .map((_, timeIndex) => {
47
+ const seconds = timeIndex * captureInterval;
48
+ return formattedDurationCompact(seconds);
49
+ })
50
+ : undefined;
52
51
 
53
- let options: EChartsOption = $derived({
54
- grid: {
55
- containLabel: true,
56
- left: 0,
57
- right: 16,
58
- bottom: 16,
59
- top: 16
60
- },
61
- textStyle: {
62
- color: textColor['secondary'],
63
- fontFamily: 'af Another Sans'
64
- },
65
- xAxis: {
66
- type: 'category',
67
- boundaryGap: false,
68
- axisLabel: {
69
- fontSize: 11
70
- },
71
- axisLine: {
72
- onZero: false,
73
- lineStyle: {
74
- color: borderColor['axis']
75
- }
76
- },
77
- data: captureIntervals,
78
- ...props.xAxisOptions
79
- } as any as EChartsOption['xAxis'],
80
- yAxis: {
81
- type: 'value',
82
- alignTicks: true,
83
- axisLabel: {
84
- formatter: (value: any) => value.toLocaleString()
85
- } as any,
86
- axisPointer: {
87
- label: {
88
- formatter: (value: any) => toFixedLocaleString(value.value, 2)
89
- }
90
- },
91
- splitLine: {
92
- lineStyle: {
93
- color: borderColor['input'],
94
- type: 'dashed'
95
- }
96
- },
97
- ...props.yAxisOptions
98
- },
99
- selectedMode: 'multiple',
100
- series: {
101
- type: 'line',
102
- symbol: 'circle',
103
- name: yAxisName,
104
- symbolSize: 1,
105
- data: data,
106
- lineStyle: {
107
- color: color
108
- },
109
- itemStyle: {
110
- color: color
111
- },
112
- areaStyle: withArea
113
- ? {
114
- color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
115
- {
116
- offset: 0,
117
- color: echarts.color.modifyAlpha(color, 0.2)
118
- },
119
- {
120
- offset: 1,
121
- color: echarts.color.modifyAlpha(color, 0)
122
- }
123
- ])
124
- }
125
- : undefined
126
- },
127
- tooltip: {
128
- axisPointer: {
129
- type: 'line',
130
- z: 0,
131
- lineStyle: {
132
- type: 'solid',
133
- color: borderColor['axis']
134
- }
135
- },
136
- trigger: 'axis',
137
- borderWidth: 0,
138
- borderRadius: 6,
139
- extraCssText: `box-shadow: ${boxShadow.menu}`,
140
- formatter: formatTooltip
141
- }
142
- });
143
- console.log('LineChart options:', options);
52
+ let options: EChartsOption = $derived({
53
+ grid: {
54
+ containLabel: true,
55
+ left: 0,
56
+ right: 16,
57
+ bottom: 16,
58
+ top: 16,
59
+ },
60
+ textStyle: {
61
+ color: textColor['secondary'],
62
+ fontFamily: 'af Another Sans',
63
+ },
64
+ xAxis: {
65
+ type: 'category',
66
+ boundaryGap: false,
67
+ axisLabel: {
68
+ fontSize: 11,
69
+ },
70
+ axisLine: {
71
+ onZero: false,
72
+ lineStyle: {
73
+ color: borderColor['axis'],
74
+ },
75
+ },
76
+ data: captureIntervals,
77
+ ...props.xAxisOptions,
78
+ } as any as EChartsOption['xAxis'],
79
+ yAxis: {
80
+ type: 'value',
81
+ alignTicks: true,
82
+ axisLabel: {
83
+ formatter: (value: any) => value.toLocaleString(),
84
+ } as any,
85
+ axisPointer: {
86
+ label: {
87
+ formatter: (value: any) => toFixedLocaleString(value.value, 2),
88
+ },
89
+ },
90
+ splitLine: {
91
+ lineStyle: {
92
+ color: borderColor['input'],
93
+ type: 'dashed',
94
+ },
95
+ },
96
+ ...props.yAxisOptions,
97
+ },
98
+ selectedMode: 'multiple',
99
+ series: {
100
+ type: 'line',
101
+ symbol: 'circle',
102
+ name: yAxisName,
103
+ symbolSize: 1,
104
+ data: data,
105
+ lineStyle: {
106
+ color: color,
107
+ },
108
+ itemStyle: {
109
+ color: color,
110
+ },
111
+ areaStyle: withArea
112
+ ? {
113
+ color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
114
+ {
115
+ offset: 0,
116
+ color: echarts.color.modifyAlpha(color, 0.2),
117
+ },
118
+ {
119
+ offset: 1,
120
+ color: echarts.color.modifyAlpha(color, 0),
121
+ },
122
+ ]),
123
+ }
124
+ : undefined,
125
+ },
126
+ tooltip: {
127
+ axisPointer: {
128
+ type: 'line',
129
+ z: 0,
130
+ lineStyle: {
131
+ type: 'solid',
132
+ color: borderColor['axis'],
133
+ },
134
+ },
135
+ trigger: 'axis',
136
+ borderWidth: 0,
137
+ borderRadius: 6,
138
+ extraCssText: `box-shadow: ${boxShadow.menu}`,
139
+ formatter: formatTooltip,
140
+ },
141
+ });
144
142
  </script>
145
143
 
146
144
  <Chart
147
- {options}
148
- {...{
149
- ...props,
150
- xAxisName,
151
- yAxisName
152
- }}
145
+ {options}
146
+ {...{
147
+ ...props,
148
+ xAxisName,
149
+ yAxisName,
150
+ }}
153
151
  />