react-science 3.1.0 → 4.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/app/hooks/file-loading.d.ts +3 -2
- package/lib/app/hooks/file-loading.d.ts.map +1 -1
- package/lib/app/hooks/file-loading.js +12 -12
- package/lib/app/hooks/file-loading.js.map +1 -1
- package/lib/app/panels/SignalProcessingPanel.js +1 -1
- package/lib/app/panels/SignalProcessingPanel.js.map +1 -1
- package/lib/app-data/loaders/biologicLoader.d.ts +2 -2
- package/lib/app-data/loaders/biologicLoader.d.ts.map +1 -1
- package/lib/app-data/loaders/biologicLoader.js +4 -4
- package/lib/app-data/loaders/biologicLoader.js.map +1 -1
- package/lib/app-data/loaders/cdfLoader.d.ts +2 -2
- package/lib/app-data/loaders/cdfLoader.d.ts.map +1 -1
- package/lib/app-data/loaders/cdfLoader.js +6 -9
- package/lib/app-data/loaders/cdfLoader.js.map +1 -1
- package/lib/app-data/loaders/jcampLoader.d.ts +2 -2
- package/lib/app-data/loaders/jcampLoader.d.ts.map +1 -1
- package/lib/app-data/loaders/jcampLoader.js +10 -13
- package/lib/app-data/loaders/jcampLoader.js.map +1 -1
- package/lib/app-data/loaders/loadMeasurements.d.ts +4 -3
- package/lib/app-data/loaders/loadMeasurements.d.ts.map +1 -1
- package/lib/app-data/loaders/loadMeasurements.js +3 -3
- package/lib/app-data/loaders/loadMeasurements.js.map +1 -1
- package/lib/app-data/loaders/proprietary/agilent/cary500Loader.d.ts +3 -2
- package/lib/app-data/loaders/proprietary/agilent/cary500Loader.d.ts.map +1 -1
- package/lib/app-data/loaders/proprietary/agilent/cary500Loader.js +4 -9
- package/lib/app-data/loaders/proprietary/agilent/cary500Loader.js.map +1 -1
- package/lib/app-data/loaders/spcLoader.d.ts +2 -2
- package/lib/app-data/loaders/spcLoader.d.ts.map +1 -1
- package/lib/app-data/loaders/spcLoader.js +3 -8
- package/lib/app-data/loaders/spcLoader.js.map +1 -1
- package/lib/app-data/loaders/utility/measurementLoader.d.ts +2 -2
- package/lib/app-data/loaders/utility/measurementLoader.d.ts.map +1 -1
- package/lib/app-data/loaders/utility/measurementLoader.js.map +1 -1
- package/lib/app-data/loaders/wdfLoader.d.ts +2 -2
- package/lib/app-data/loaders/wdfLoader.d.ts.map +1 -1
- package/lib/app-data/loaders/wdfLoader.js +3 -9
- package/lib/app-data/loaders/wdfLoader.js.map +1 -1
- package/lib/components/button/Button.d.ts +1 -1
- package/lib/components/button/Button.d.ts.map +1 -1
- package/lib/components/button/Button.js +3 -2
- package/lib/components/button/Button.js.map +1 -1
- package/lib/components/color-picker/gradient-select/GradientSelect.d.ts +1 -1
- package/lib/components/color-picker/gradient-select/GradientSelect.d.ts.map +1 -1
- package/lib/components/color-picker/gradient-select/GradientSelect.js +45 -23
- package/lib/components/color-picker/gradient-select/GradientSelect.js.map +1 -1
- package/lib/components/hooks/useSelect.d.ts +7 -5
- package/lib/components/hooks/useSelect.d.ts.map +1 -1
- package/lib/components/hooks/useSelect.js +3 -1
- package/lib/components/hooks/useSelect.js.map +1 -1
- package/lib/components/index.d.ts +2 -1
- package/lib/components/index.d.ts.map +1 -1
- package/lib/components/index.js +2 -1
- package/lib/components/index.js.map +1 -1
- package/lib/components/info-panel/InfoPanel.d.ts.map +1 -1
- package/lib/components/info-panel/InfoPanel.js +78 -20
- package/lib/components/info-panel/InfoPanel.js.map +1 -1
- package/lib/components/logger/FifoLoggerDialog.d.ts +10 -0
- package/lib/components/logger/FifoLoggerDialog.d.ts.map +1 -0
- package/lib/components/logger/FifoLoggerDialog.js +55 -0
- package/lib/components/logger/FifoLoggerDialog.js.map +1 -0
- package/lib/components/logger/FifoLoggerProvider.d.ts +7 -0
- package/lib/components/logger/FifoLoggerProvider.d.ts.map +1 -0
- package/lib/components/logger/FifoLoggerProvider.js +10 -0
- package/lib/components/logger/FifoLoggerProvider.js.map +1 -0
- package/lib/components/logger/FifoLoggerToolbarItem.d.ts +2 -0
- package/lib/components/logger/FifoLoggerToolbarItem.d.ts.map +1 -0
- package/lib/components/logger/FifoLoggerToolbarItem.js +39 -0
- package/lib/components/logger/FifoLoggerToolbarItem.js.map +1 -0
- package/lib/components/logger/index.d.ts +5 -0
- package/lib/components/logger/index.d.ts.map +1 -0
- package/lib/components/logger/index.js +21 -0
- package/lib/components/logger/index.js.map +1 -0
- package/lib/components/logger/loggerContext.d.ts +4 -0
- package/lib/components/logger/loggerContext.d.ts.map +1 -0
- package/lib/components/logger/loggerContext.js +6 -0
- package/lib/components/logger/loggerContext.js.map +1 -0
- package/lib/components/logger/useFifoLogger.d.ts +3 -0
- package/lib/components/logger/useFifoLogger.d.ts.map +1 -0
- package/lib/components/logger/useFifoLogger.js +25 -0
- package/lib/components/logger/useFifoLogger.js.map +1 -0
- package/lib/components/table/Table.d.ts +4 -3
- package/lib/components/table/Table.d.ts.map +1 -1
- package/lib/components/table/Table.js +2 -2
- package/lib/components/table/Table.js.map +1 -1
- package/lib/components/table/TableHeader.d.ts +3 -1
- package/lib/components/table/TableHeader.d.ts.map +1 -1
- package/lib/components/table/TableHeader.js +8 -2
- package/lib/components/table/TableHeader.js.map +1 -1
- package/lib/components/table/TableRow.d.ts +1 -1
- package/lib/components/table/TableRow.d.ts.map +1 -1
- package/lib/components/table/TableRow.js +9 -22
- package/lib/components/table/TableRow.js.map +1 -1
- package/lib/components/table/tableContext.d.ts +0 -2
- package/lib/components/table/tableContext.d.ts.map +1 -1
- package/lib/components/table/tableContext.js +1 -1
- package/lib/components/table/tableContext.js.map +1 -1
- package/lib/components/toolbar/TooltipHelpContent.d.ts +11 -0
- package/lib/components/toolbar/TooltipHelpContent.d.ts.map +1 -0
- package/lib/components/toolbar/TooltipHelpContent.js +102 -0
- package/lib/components/toolbar/TooltipHelpContent.js.map +1 -0
- package/lib/components/toolbar/index.d.ts +1 -0
- package/lib/components/toolbar/index.d.ts.map +1 -1
- package/lib/components/toolbar/index.js +1 -0
- package/lib/components/toolbar/index.js.map +1 -1
- package/lib-esm/app/hooks/file-loading.d.ts +3 -2
- package/lib-esm/app/hooks/file-loading.d.ts.map +1 -1
- package/lib-esm/app/hooks/file-loading.js +9 -9
- package/lib-esm/app/hooks/file-loading.js.map +1 -1
- package/lib-esm/app/panels/SignalProcessingPanel.js +1 -1
- package/lib-esm/app/panels/SignalProcessingPanel.js.map +1 -1
- package/lib-esm/app-data/loaders/biologicLoader.d.ts +2 -2
- package/lib-esm/app-data/loaders/biologicLoader.d.ts.map +1 -1
- package/lib-esm/app-data/loaders/biologicLoader.js +4 -4
- package/lib-esm/app-data/loaders/biologicLoader.js.map +1 -1
- package/lib-esm/app-data/loaders/cdfLoader.d.ts +2 -2
- package/lib-esm/app-data/loaders/cdfLoader.d.ts.map +1 -1
- package/lib-esm/app-data/loaders/cdfLoader.js +6 -9
- package/lib-esm/app-data/loaders/cdfLoader.js.map +1 -1
- package/lib-esm/app-data/loaders/jcampLoader.d.ts +2 -2
- package/lib-esm/app-data/loaders/jcampLoader.d.ts.map +1 -1
- package/lib-esm/app-data/loaders/jcampLoader.js +10 -13
- package/lib-esm/app-data/loaders/jcampLoader.js.map +1 -1
- package/lib-esm/app-data/loaders/loadMeasurements.d.ts +4 -3
- package/lib-esm/app-data/loaders/loadMeasurements.d.ts.map +1 -1
- package/lib-esm/app-data/loaders/loadMeasurements.js +3 -3
- package/lib-esm/app-data/loaders/loadMeasurements.js.map +1 -1
- package/lib-esm/app-data/loaders/proprietary/agilent/cary500Loader.d.ts +3 -2
- package/lib-esm/app-data/loaders/proprietary/agilent/cary500Loader.d.ts.map +1 -1
- package/lib-esm/app-data/loaders/proprietary/agilent/cary500Loader.js +5 -10
- package/lib-esm/app-data/loaders/proprietary/agilent/cary500Loader.js.map +1 -1
- package/lib-esm/app-data/loaders/spcLoader.d.ts +2 -2
- package/lib-esm/app-data/loaders/spcLoader.d.ts.map +1 -1
- package/lib-esm/app-data/loaders/spcLoader.js +4 -9
- package/lib-esm/app-data/loaders/spcLoader.js.map +1 -1
- package/lib-esm/app-data/loaders/utility/measurementLoader.d.ts +2 -2
- package/lib-esm/app-data/loaders/utility/measurementLoader.d.ts.map +1 -1
- package/lib-esm/app-data/loaders/utility/measurementLoader.js.map +1 -1
- package/lib-esm/app-data/loaders/wdfLoader.d.ts +2 -2
- package/lib-esm/app-data/loaders/wdfLoader.d.ts.map +1 -1
- package/lib-esm/app-data/loaders/wdfLoader.js +3 -9
- package/lib-esm/app-data/loaders/wdfLoader.js.map +1 -1
- package/lib-esm/components/button/Button.d.ts +1 -1
- package/lib-esm/components/button/Button.d.ts.map +1 -1
- package/lib-esm/components/button/Button.js +3 -2
- package/lib-esm/components/button/Button.js.map +1 -1
- package/lib-esm/components/color-picker/gradient-select/GradientSelect.d.ts +1 -1
- package/lib-esm/components/color-picker/gradient-select/GradientSelect.d.ts.map +1 -1
- package/lib-esm/components/color-picker/gradient-select/GradientSelect.js +45 -23
- package/lib-esm/components/color-picker/gradient-select/GradientSelect.js.map +1 -1
- package/lib-esm/components/hooks/useSelect.d.ts +7 -5
- package/lib-esm/components/hooks/useSelect.d.ts.map +1 -1
- package/lib-esm/components/hooks/useSelect.js +3 -1
- package/lib-esm/components/hooks/useSelect.js.map +1 -1
- package/lib-esm/components/index.d.ts +2 -1
- package/lib-esm/components/index.d.ts.map +1 -1
- package/lib-esm/components/index.js +2 -1
- package/lib-esm/components/index.js.map +1 -1
- package/lib-esm/components/info-panel/InfoPanel.d.ts.map +1 -1
- package/lib-esm/components/info-panel/InfoPanel.js +52 -17
- package/lib-esm/components/info-panel/InfoPanel.js.map +1 -1
- package/lib-esm/components/logger/FifoLoggerDialog.d.ts +10 -0
- package/lib-esm/components/logger/FifoLoggerDialog.d.ts.map +1 -0
- package/lib-esm/components/logger/FifoLoggerDialog.js +48 -0
- package/lib-esm/components/logger/FifoLoggerDialog.js.map +1 -0
- package/lib-esm/components/logger/FifoLoggerProvider.d.ts +7 -0
- package/lib-esm/components/logger/FifoLoggerProvider.d.ts.map +1 -0
- package/lib-esm/components/logger/FifoLoggerProvider.js +6 -0
- package/lib-esm/components/logger/FifoLoggerProvider.js.map +1 -0
- package/lib-esm/components/logger/FifoLoggerToolbarItem.d.ts +2 -0
- package/lib-esm/components/logger/FifoLoggerToolbarItem.d.ts.map +1 -0
- package/lib-esm/components/logger/FifoLoggerToolbarItem.js +35 -0
- package/lib-esm/components/logger/FifoLoggerToolbarItem.js.map +1 -0
- package/lib-esm/components/logger/index.d.ts +5 -0
- package/lib-esm/components/logger/index.d.ts.map +1 -0
- package/lib-esm/components/logger/index.js +5 -0
- package/lib-esm/components/logger/index.js.map +1 -0
- package/lib-esm/components/logger/loggerContext.d.ts +4 -0
- package/lib-esm/components/logger/loggerContext.d.ts.map +1 -0
- package/lib-esm/components/logger/loggerContext.js +3 -0
- package/lib-esm/components/logger/loggerContext.js.map +1 -0
- package/lib-esm/components/logger/useFifoLogger.d.ts +3 -0
- package/lib-esm/components/logger/useFifoLogger.d.ts.map +1 -0
- package/lib-esm/components/logger/useFifoLogger.js +20 -0
- package/lib-esm/components/logger/useFifoLogger.js.map +1 -0
- package/lib-esm/components/table/Table.d.ts +4 -3
- package/lib-esm/components/table/Table.d.ts.map +1 -1
- package/lib-esm/components/table/Table.js +2 -2
- package/lib-esm/components/table/Table.js.map +1 -1
- package/lib-esm/components/table/TableHeader.d.ts +3 -1
- package/lib-esm/components/table/TableHeader.d.ts.map +1 -1
- package/lib-esm/components/table/TableHeader.js +8 -2
- package/lib-esm/components/table/TableHeader.js.map +1 -1
- package/lib-esm/components/table/TableRow.d.ts +1 -1
- package/lib-esm/components/table/TableRow.d.ts.map +1 -1
- package/lib-esm/components/table/TableRow.js +6 -19
- package/lib-esm/components/table/TableRow.js.map +1 -1
- package/lib-esm/components/table/tableContext.d.ts +0 -2
- package/lib-esm/components/table/tableContext.d.ts.map +1 -1
- package/lib-esm/components/table/tableContext.js +1 -1
- package/lib-esm/components/table/tableContext.js.map +1 -1
- package/lib-esm/components/toolbar/TooltipHelpContent.d.ts +11 -0
- package/lib-esm/components/toolbar/TooltipHelpContent.d.ts.map +1 -0
- package/lib-esm/components/toolbar/TooltipHelpContent.js +95 -0
- package/lib-esm/components/toolbar/TooltipHelpContent.js.map +1 -0
- package/lib-esm/components/toolbar/index.d.ts +1 -0
- package/lib-esm/components/toolbar/index.d.ts.map +1 -1
- package/lib-esm/components/toolbar/index.js +1 -0
- package/lib-esm/components/toolbar/index.js.map +1 -1
- package/package.json +15 -13
- package/src/app/hooks/file-loading.ts +12 -10
- package/src/app/panels/SignalProcessingPanel.tsx +1 -1
- package/src/app-data/loaders/biologicLoader.ts +6 -5
- package/src/app-data/loaders/cdfLoader.ts +8 -13
- package/src/app-data/loaders/jcampLoader.ts +11 -15
- package/src/app-data/loaders/loadMeasurements.ts +6 -5
- package/src/app-data/loaders/proprietary/agilent/cary500Loader.ts +8 -16
- package/src/app-data/loaders/spcLoader.ts +6 -12
- package/src/app-data/loaders/utility/measurementLoader.ts +2 -3
- package/src/app-data/loaders/wdfLoader.ts +5 -12
- package/src/components/button/Button.tsx +12 -5
- package/src/components/color-picker/gradient-select/GradientSelect.tsx +82 -46
- package/src/components/hooks/useSelect.tsx +13 -8
- package/src/components/index.ts +2 -1
- package/src/components/info-panel/InfoPanel.tsx +88 -49
- package/src/components/logger/FifoLoggerDialog.tsx +129 -0
- package/src/components/logger/FifoLoggerProvider.tsx +15 -0
- package/src/components/logger/FifoLoggerToolbarItem.tsx +59 -0
- package/src/components/logger/index.ts +4 -0
- package/src/components/logger/loggerContext.ts +4 -0
- package/src/components/logger/useFifoLogger.ts +22 -0
- package/src/components/table/Table.tsx +1 -6
- package/src/components/table/TableHeader.tsx +15 -3
- package/src/components/table/TableRow.tsx +4 -23
- package/src/components/table/tableContext.ts +1 -1
- package/src/components/toolbar/TooltipHelpContent.tsx +173 -0
- package/src/components/toolbar/index.ts +1 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/** @jsxImportSource @emotion/react */
|
|
2
2
|
import { Icon, InputGroup } from '@blueprintjs/core';
|
|
3
3
|
import { css } from '@emotion/react';
|
|
4
|
-
import
|
|
4
|
+
import * as Collapsible from '@radix-ui/react-collapsible';
|
|
5
5
|
import { CSSProperties, useCallback, useMemo, useState } from 'react';
|
|
6
6
|
|
|
7
7
|
import { ValueRenderers } from '../index';
|
|
@@ -19,19 +19,49 @@ interface InfoPanelProps {
|
|
|
19
19
|
inputStyle?: CSSProperties;
|
|
20
20
|
}
|
|
21
21
|
const style = {
|
|
22
|
+
content: css({
|
|
23
|
+
overflow: 'hidden',
|
|
24
|
+
"&[data-state='open']": {
|
|
25
|
+
animation: 'slideDown 300ms ease-out',
|
|
26
|
+
},
|
|
27
|
+
'&[data-state="closed"]': {
|
|
28
|
+
animation: 'slideUp 300ms ease-out',
|
|
29
|
+
},
|
|
30
|
+
'@keyframes slideDown': {
|
|
31
|
+
from: {
|
|
32
|
+
height: 0,
|
|
33
|
+
},
|
|
34
|
+
to: { height: 'var(--radix-collapsible-content-height)' },
|
|
35
|
+
},
|
|
36
|
+
'@keyframes slideUp': {
|
|
37
|
+
from: {
|
|
38
|
+
height: 'var(--radix-collapsible-content-height)',
|
|
39
|
+
},
|
|
40
|
+
to: { height: 0 },
|
|
41
|
+
},
|
|
42
|
+
}),
|
|
22
43
|
container: css({
|
|
23
|
-
padding: '5px',
|
|
44
|
+
padding: '5px 0 0 0',
|
|
45
|
+
height: '100%',
|
|
46
|
+
display: 'flex',
|
|
47
|
+
flexDirection: 'column',
|
|
48
|
+
}),
|
|
49
|
+
chevron: css({
|
|
50
|
+
transition: 'all 0.3s ease-in-out',
|
|
24
51
|
}),
|
|
25
|
-
chevron: (open: boolean) =>
|
|
26
|
-
css({
|
|
27
|
-
rotate: open ? '90deg' : '0deg',
|
|
28
|
-
transition: 'all 0.3s ease-in-out',
|
|
29
|
-
}),
|
|
30
52
|
button: css({
|
|
53
|
+
zIndex: 10,
|
|
54
|
+
position: 'sticky',
|
|
55
|
+
height: 30,
|
|
56
|
+
top: 0,
|
|
57
|
+
"&[data-state='open'] > span": {
|
|
58
|
+
rotate: '90deg',
|
|
59
|
+
},
|
|
60
|
+
cursor: 'pointer',
|
|
31
61
|
borderBottom: '1px solid #f5f5f5',
|
|
62
|
+
backgroundColor: 'white',
|
|
32
63
|
display: 'flex',
|
|
33
64
|
alignItems: 'center',
|
|
34
|
-
gap: 5,
|
|
35
65
|
padding: '5px 2px',
|
|
36
66
|
width: '100%',
|
|
37
67
|
':hover': {
|
|
@@ -95,13 +125,19 @@ export function InfoPanel(props: InfoPanelProps) {
|
|
|
95
125
|
}, [data, viewData]);
|
|
96
126
|
return (
|
|
97
127
|
<div css={style.container}>
|
|
98
|
-
<div
|
|
128
|
+
<div
|
|
129
|
+
style={{
|
|
130
|
+
padding: '0 5px',
|
|
131
|
+
...titleStyle,
|
|
132
|
+
}}
|
|
133
|
+
>
|
|
134
|
+
{title}
|
|
135
|
+
</div>
|
|
99
136
|
<div
|
|
100
137
|
tabIndex={0}
|
|
101
138
|
css={css({
|
|
102
|
-
|
|
139
|
+
padding: '0 5px',
|
|
103
140
|
marginTop: '5px',
|
|
104
|
-
position: 'sticky',
|
|
105
141
|
backgroundColor: 'white',
|
|
106
142
|
top: '5px',
|
|
107
143
|
display: 'flex',
|
|
@@ -114,7 +150,7 @@ export function InfoPanel(props: InfoPanelProps) {
|
|
|
114
150
|
css={css({
|
|
115
151
|
flexGrow: 1,
|
|
116
152
|
})}
|
|
117
|
-
placeholder="
|
|
153
|
+
placeholder="Search for a parameter"
|
|
118
154
|
value={search}
|
|
119
155
|
onChange={({ target }) => {
|
|
120
156
|
if (target.value !== undefined) {
|
|
@@ -130,51 +166,54 @@ export function InfoPanel(props: InfoPanelProps) {
|
|
|
130
166
|
</div>
|
|
131
167
|
<div
|
|
132
168
|
style={{
|
|
169
|
+
position: 'relative',
|
|
133
170
|
marginTop: '5px',
|
|
134
171
|
display: 'flex',
|
|
135
172
|
flexDirection: 'column',
|
|
136
|
-
|
|
173
|
+
overflowY: 'auto',
|
|
174
|
+
flex: 1,
|
|
137
175
|
}}
|
|
138
176
|
>
|
|
139
177
|
{filteredData.map(({ description, data }) => {
|
|
140
178
|
return (
|
|
141
|
-
<
|
|
142
|
-
{
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
<
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
179
|
+
<Collapsible.Root
|
|
180
|
+
key={description}
|
|
181
|
+
className="CollapsibleRoot"
|
|
182
|
+
defaultOpen
|
|
183
|
+
>
|
|
184
|
+
<Collapsible.Trigger asChild css={style.button}>
|
|
185
|
+
<div>
|
|
186
|
+
<Icon icon="chevron-right" css={style.chevron} />
|
|
187
|
+
{description}
|
|
188
|
+
</div>
|
|
189
|
+
</Collapsible.Trigger>
|
|
190
|
+
<Collapsible.Content css={style.content}>
|
|
191
|
+
<Table
|
|
192
|
+
striped
|
|
193
|
+
css={css({
|
|
194
|
+
width: '100%',
|
|
195
|
+
})}
|
|
196
|
+
compact
|
|
197
|
+
>
|
|
198
|
+
<Table.Header>
|
|
199
|
+
<ValueRenderers.Header value="Parameter" />
|
|
200
|
+
<ValueRenderers.Header value="Value" />
|
|
201
|
+
</Table.Header>
|
|
202
|
+
{data.map(([key, value]) => (
|
|
203
|
+
<Table.Row
|
|
204
|
+
key={key}
|
|
205
|
+
style={{
|
|
206
|
+
height: '10px',
|
|
207
|
+
padding: '0 !imporant',
|
|
208
|
+
}}
|
|
155
209
|
>
|
|
156
|
-
<
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
bordered
|
|
164
|
-
style={{
|
|
165
|
-
height: '10px',
|
|
166
|
-
padding: '0 !imporant',
|
|
167
|
-
}}
|
|
168
|
-
>
|
|
169
|
-
<ValueRenderers.Text value={key} />
|
|
170
|
-
{valueCell(value)}
|
|
171
|
-
</Table.Row>
|
|
172
|
-
))}
|
|
173
|
-
</Table>
|
|
174
|
-
</Disclosure.Panel>
|
|
175
|
-
</>
|
|
176
|
-
)}
|
|
177
|
-
</Disclosure>
|
|
210
|
+
<ValueRenderers.Text value={key} />
|
|
211
|
+
{valueCell(value)}
|
|
212
|
+
</Table.Row>
|
|
213
|
+
))}
|
|
214
|
+
</Table>
|
|
215
|
+
</Collapsible.Content>
|
|
216
|
+
</Collapsible.Root>
|
|
178
217
|
);
|
|
179
218
|
})}
|
|
180
219
|
</div>
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/** @jsxImportSource @emotion/react */
|
|
2
|
+
|
|
3
|
+
import { Dialog, DialogBody, DialogFooter } from '@blueprintjs/core';
|
|
4
|
+
import { css } from '@emotion/react';
|
|
5
|
+
import styled from '@emotion/styled';
|
|
6
|
+
import type { LogEntry } from 'fifo-logger';
|
|
7
|
+
import { CSSProperties } from 'react';
|
|
8
|
+
|
|
9
|
+
import { Button, Table, useFifoLogger, ValueRenderers } from '../index';
|
|
10
|
+
|
|
11
|
+
const ActionsFooter = styled.div`
|
|
12
|
+
display: flex;
|
|
13
|
+
gap: 3px;
|
|
14
|
+
`;
|
|
15
|
+
|
|
16
|
+
interface RowIndexCellProps {
|
|
17
|
+
pillColor: CSSProperties['backgroundColor'];
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const RowIndexCell = styled.div<RowIndexCellProps>`
|
|
21
|
+
::before {
|
|
22
|
+
content: '';
|
|
23
|
+
display: inline-block;
|
|
24
|
+
width: 10px;
|
|
25
|
+
height: 10px;
|
|
26
|
+
margin-right: 5px;
|
|
27
|
+
border-radius: 7px;
|
|
28
|
+
filter: brightness(60%);
|
|
29
|
+
background-color: ${({ pillColor }) => pillColor};
|
|
30
|
+
}
|
|
31
|
+
`;
|
|
32
|
+
|
|
33
|
+
export interface FifoLoggerDialogProps {
|
|
34
|
+
isOpen: boolean;
|
|
35
|
+
onClose: () => void;
|
|
36
|
+
logs: LogEntry[];
|
|
37
|
+
unseen: number;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export function FifoLoggerDialog(props: FifoLoggerDialogProps) {
|
|
41
|
+
const logger = useFifoLogger();
|
|
42
|
+
return (
|
|
43
|
+
<Dialog
|
|
44
|
+
shouldReturnFocusOnClose={false}
|
|
45
|
+
isOpen={props.isOpen}
|
|
46
|
+
onClose={props.onClose}
|
|
47
|
+
title="Logs"
|
|
48
|
+
icon="info-sign"
|
|
49
|
+
css={css`
|
|
50
|
+
min-width: 800px;
|
|
51
|
+
min-height: 500px;
|
|
52
|
+
max-height: 80vh;
|
|
53
|
+
max-width: 1000px;
|
|
54
|
+
`}
|
|
55
|
+
>
|
|
56
|
+
<DialogBody>
|
|
57
|
+
<Table
|
|
58
|
+
compact
|
|
59
|
+
bordered
|
|
60
|
+
css={css`
|
|
61
|
+
width: 100%;
|
|
62
|
+
`}
|
|
63
|
+
>
|
|
64
|
+
<Table.Header>
|
|
65
|
+
<ValueRenderers.Header value="#" />
|
|
66
|
+
<ValueRenderers.Header value="Time" />
|
|
67
|
+
<ValueRenderers.Header value="Level" />
|
|
68
|
+
<ValueRenderers.Header value="Message" />
|
|
69
|
+
</Table.Header>
|
|
70
|
+
{props.logs.map((logEntry, idx) => (
|
|
71
|
+
<Table.Row
|
|
72
|
+
key={logEntry.id}
|
|
73
|
+
style={{
|
|
74
|
+
backgroundColor: rowBackgroundColor[logEntry.levelLabel],
|
|
75
|
+
}}
|
|
76
|
+
>
|
|
77
|
+
<ValueRenderers.Component>
|
|
78
|
+
<RowIndexCell
|
|
79
|
+
pillColor={
|
|
80
|
+
idx >= props.unseen
|
|
81
|
+
? 'transparent'
|
|
82
|
+
: rowBackgroundColor[logEntry.levelLabel]
|
|
83
|
+
}
|
|
84
|
+
>
|
|
85
|
+
{String(idx + 1)}
|
|
86
|
+
</RowIndexCell>
|
|
87
|
+
</ValueRenderers.Component>
|
|
88
|
+
<ValueRenderers.Text
|
|
89
|
+
value={new Date(logEntry.time).toLocaleTimeString()}
|
|
90
|
+
/>
|
|
91
|
+
<ValueRenderers.Text value={logEntry.levelLabel} />
|
|
92
|
+
<ValueRenderers.Text value={logEntry.message} />
|
|
93
|
+
</Table.Row>
|
|
94
|
+
))}
|
|
95
|
+
</Table>
|
|
96
|
+
</DialogBody>
|
|
97
|
+
<DialogFooter
|
|
98
|
+
actions={
|
|
99
|
+
<ActionsFooter>
|
|
100
|
+
<Button
|
|
101
|
+
outlined
|
|
102
|
+
intent="danger"
|
|
103
|
+
icon="trash"
|
|
104
|
+
text="Clear logs"
|
|
105
|
+
onClick={() => logger.clear()}
|
|
106
|
+
/>
|
|
107
|
+
<Button
|
|
108
|
+
outlined
|
|
109
|
+
intent="none"
|
|
110
|
+
text="Close"
|
|
111
|
+
onClick={props.onClose}
|
|
112
|
+
/>
|
|
113
|
+
</ActionsFooter>
|
|
114
|
+
}
|
|
115
|
+
/>
|
|
116
|
+
</Dialog>
|
|
117
|
+
);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// "fatal" | "error" | "warn" | "info" | "debug" | "trace" | "silent"
|
|
121
|
+
const rowBackgroundColor: Record<string, CSSProperties['backgroundColor']> = {
|
|
122
|
+
fatal: 'pink',
|
|
123
|
+
error: 'pink',
|
|
124
|
+
warn: 'lightyellow',
|
|
125
|
+
info: 'lightgreen',
|
|
126
|
+
debug: 'lightgrey',
|
|
127
|
+
trace: 'lightgrey',
|
|
128
|
+
silent: 'lightgrey',
|
|
129
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { FifoLogger } from 'fifo-logger';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
|
|
4
|
+
import { fifoLoggerContext } from './loggerContext';
|
|
5
|
+
|
|
6
|
+
export function FifoLoggerProvider(props: {
|
|
7
|
+
logger: FifoLogger;
|
|
8
|
+
children: ReactNode;
|
|
9
|
+
}) {
|
|
10
|
+
return (
|
|
11
|
+
<fifoLoggerContext.Provider value={props.logger}>
|
|
12
|
+
{props.children}
|
|
13
|
+
</fifoLoggerContext.Provider>
|
|
14
|
+
);
|
|
15
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { Intent } from '@blueprintjs/core';
|
|
2
|
+
import type { LogEntry } from 'fifo-logger';
|
|
3
|
+
import { useState } from 'react';
|
|
4
|
+
|
|
5
|
+
import { useOnOff } from '../hooks';
|
|
6
|
+
import { Toolbar } from '../toolbar';
|
|
7
|
+
|
|
8
|
+
import { FifoLoggerDialog } from './FifoLoggerDialog';
|
|
9
|
+
import { useFifoLogs } from './useFifoLogger';
|
|
10
|
+
|
|
11
|
+
export function FifoLoggerToolbarItem() {
|
|
12
|
+
const [seen, setSeen] = useState(0);
|
|
13
|
+
const [isOpen, open, close] = useOnOff(false);
|
|
14
|
+
const logs = useFifoLogs();
|
|
15
|
+
|
|
16
|
+
const unseen = logs.length - seen;
|
|
17
|
+
return (
|
|
18
|
+
<>
|
|
19
|
+
<Toolbar.Item
|
|
20
|
+
icon="bug"
|
|
21
|
+
tooltip="Logs"
|
|
22
|
+
onClick={open}
|
|
23
|
+
tag={unseen > 0 ? unseen : undefined}
|
|
24
|
+
tagProps={{
|
|
25
|
+
intent: getIntent(logs),
|
|
26
|
+
style: {
|
|
27
|
+
pointerEvents: 'none',
|
|
28
|
+
},
|
|
29
|
+
}}
|
|
30
|
+
/>
|
|
31
|
+
<FifoLoggerDialog
|
|
32
|
+
isOpen={isOpen}
|
|
33
|
+
unseen={unseen}
|
|
34
|
+
onClose={() => {
|
|
35
|
+
setSeen(logs.length);
|
|
36
|
+
close();
|
|
37
|
+
}}
|
|
38
|
+
logs={logs}
|
|
39
|
+
/>
|
|
40
|
+
</>
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function getIntent(logs: LogEntry[]): Intent {
|
|
45
|
+
const maxLevel = Math.max(
|
|
46
|
+
...logs.map((log) => log.level),
|
|
47
|
+
) as LogEntry['level'];
|
|
48
|
+
return intentMap[maxLevel || 0];
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const intentMap: Record<LogEntry['level'], Intent> = {
|
|
52
|
+
60: 'danger',
|
|
53
|
+
50: 'danger',
|
|
54
|
+
40: 'warning',
|
|
55
|
+
30: 'success',
|
|
56
|
+
20: 'none',
|
|
57
|
+
10: 'none',
|
|
58
|
+
0: 'none',
|
|
59
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { useContext, useEffect, useState } from 'react';
|
|
2
|
+
|
|
3
|
+
import { fifoLoggerContext } from './loggerContext';
|
|
4
|
+
|
|
5
|
+
export function useFifoLogger() {
|
|
6
|
+
const fifoLogger = useContext(fifoLoggerContext);
|
|
7
|
+
if (!fifoLogger) {
|
|
8
|
+
throw new Error('useFifoLogger must be used within a FifoLoggerProvider');
|
|
9
|
+
}
|
|
10
|
+
return fifoLogger;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export function useFifoLogs() {
|
|
14
|
+
const logger = useFifoLogger();
|
|
15
|
+
const [logs, setLogs] = useState(logger.getLogs());
|
|
16
|
+
useEffect(() => {
|
|
17
|
+
logger.addEventListener('change', () => {
|
|
18
|
+
setLogs(logger.getLogs());
|
|
19
|
+
});
|
|
20
|
+
}, [logger]);
|
|
21
|
+
return logs;
|
|
22
|
+
}
|
|
@@ -34,13 +34,11 @@ export interface TableProps extends React.HTMLAttributes<HTMLTableElement> {
|
|
|
34
34
|
compact?: boolean;
|
|
35
35
|
interactive?: boolean;
|
|
36
36
|
striped?: boolean;
|
|
37
|
-
hasBorder?: boolean;
|
|
38
37
|
color?: string;
|
|
39
38
|
}
|
|
40
39
|
|
|
41
40
|
export function Table(props: TableProps) {
|
|
42
41
|
const {
|
|
43
|
-
hasBorder = false,
|
|
44
42
|
bordered = false,
|
|
45
43
|
compact = false,
|
|
46
44
|
interactive = false,
|
|
@@ -51,10 +49,7 @@ export function Table(props: TableProps) {
|
|
|
51
49
|
} = props;
|
|
52
50
|
const { Header, Rows } = splitChildren(children);
|
|
53
51
|
|
|
54
|
-
const tableContextValue = useMemo(
|
|
55
|
-
() => ({ hasBorder, color }),
|
|
56
|
-
[hasBorder, color],
|
|
57
|
-
);
|
|
52
|
+
const tableContextValue = useMemo(() => ({ color }), [color]);
|
|
58
53
|
return (
|
|
59
54
|
<TableContext.Provider value={tableContextValue}>
|
|
60
55
|
<HTMLTable
|
|
@@ -1,10 +1,22 @@
|
|
|
1
1
|
import type { TableProps } from './Table';
|
|
2
2
|
import { TableRow } from './TableRow';
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
const headerStyle: React.CSSProperties = {
|
|
5
|
+
position: 'sticky',
|
|
6
|
+
top: 0,
|
|
7
|
+
zIndex: 10,
|
|
8
|
+
backgroundColor: 'white',
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
export const TableHeader = ({
|
|
12
|
+
children,
|
|
13
|
+
bordered,
|
|
14
|
+
style,
|
|
15
|
+
sticky,
|
|
16
|
+
}: TableProps & { sticky?: boolean }) => {
|
|
5
17
|
return (
|
|
6
|
-
<thead>
|
|
7
|
-
<TableRow
|
|
18
|
+
<thead style={sticky ? headerStyle : undefined}>
|
|
19
|
+
<TableRow bordered={bordered} style={style}>
|
|
8
20
|
{children}
|
|
9
21
|
</TableRow>
|
|
10
22
|
</thead>
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
/** @jsxImportSource @emotion/react */
|
|
2
|
-
import { css } from '@emotion/react';
|
|
3
1
|
import {
|
|
4
2
|
Children,
|
|
5
3
|
HTMLAttributes,
|
|
@@ -23,28 +21,16 @@ import { useTableContext } from './tableContext';
|
|
|
23
21
|
|
|
24
22
|
export type TableRowProps = TableProps & HTMLAttributes<HTMLTableRowElement>;
|
|
25
23
|
|
|
26
|
-
const styles = {
|
|
27
|
-
hasBorder: css({
|
|
28
|
-
border: '0.5px solid rgb(0, 0, 0)',
|
|
29
|
-
padding: '5px',
|
|
30
|
-
position: 'relative',
|
|
31
|
-
}),
|
|
32
|
-
noBorder: css({
|
|
33
|
-
padding: '5px',
|
|
34
|
-
position: 'relative',
|
|
35
|
-
}),
|
|
36
|
-
};
|
|
37
|
-
|
|
38
24
|
export const TableRow = ({
|
|
39
25
|
children,
|
|
40
26
|
style = {},
|
|
41
|
-
|
|
27
|
+
bordered = false,
|
|
42
28
|
...other
|
|
43
29
|
}: TableRowProps) => {
|
|
44
30
|
const { cells } = useRowChildren(children);
|
|
45
31
|
return (
|
|
46
32
|
<tr
|
|
47
|
-
style={{ border:
|
|
33
|
+
style={{ border: bordered ? '1px solid black' : '', ...style }}
|
|
48
34
|
{...other}
|
|
49
35
|
>
|
|
50
36
|
{cells}
|
|
@@ -54,7 +40,7 @@ export const TableRow = ({
|
|
|
54
40
|
|
|
55
41
|
function useRowChildren(children: ReactNode) {
|
|
56
42
|
const cells: ReactElement[] = [];
|
|
57
|
-
const {
|
|
43
|
+
const { color } = useTableContext();
|
|
58
44
|
for (const child of Children.toArray(children)) {
|
|
59
45
|
if (
|
|
60
46
|
typeof child === 'object' &&
|
|
@@ -69,11 +55,7 @@ function useRowChildren(children: ReactNode) {
|
|
|
69
55
|
) {
|
|
70
56
|
if (child.type === Header) {
|
|
71
57
|
cells.push(
|
|
72
|
-
<th
|
|
73
|
-
key={child.key}
|
|
74
|
-
style={{ color }}
|
|
75
|
-
css={hasBorder ? styles.hasBorder : styles.noBorder}
|
|
76
|
-
>
|
|
58
|
+
<th key={child.key} style={{ color }}>
|
|
77
59
|
{child}
|
|
78
60
|
</th>,
|
|
79
61
|
);
|
|
@@ -85,7 +67,6 @@ function useRowChildren(children: ReactNode) {
|
|
|
85
67
|
color,
|
|
86
68
|
position: 'relative',
|
|
87
69
|
}}
|
|
88
|
-
css={hasBorder ? styles.hasBorder : styles.noBorder}
|
|
89
70
|
>
|
|
90
71
|
{child}
|
|
91
72
|
</td>,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createContext, useContext } from 'react';
|
|
2
2
|
|
|
3
|
-
export const TableContext = createContext({
|
|
3
|
+
export const TableContext = createContext({ color: '' });
|
|
4
4
|
export function useTableContext() {
|
|
5
5
|
const context = useContext(TableContext);
|
|
6
6
|
return context;
|