react-science 4.0.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/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/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/table/Table.d.ts +3 -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-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/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/table/Table.d.ts +3 -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/package.json +9 -9
- 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/info-panel/InfoPanel.tsx +88 -48
- package/src/components/table/TableHeader.tsx +14 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { MenuItem } from '@blueprintjs/core';
|
|
2
2
|
import { ItemRenderer } from '@blueprintjs/select';
|
|
3
|
-
import { useState } from 'react';
|
|
3
|
+
import { ReactNode, useState } from 'react';
|
|
4
4
|
|
|
5
5
|
type FilterType<SourceType, Type> = Pick<
|
|
6
6
|
SourceType,
|
|
@@ -9,14 +9,17 @@ type FilterType<SourceType, Type> = Pick<
|
|
|
9
9
|
}[keyof SourceType]
|
|
10
10
|
>;
|
|
11
11
|
|
|
12
|
-
interface
|
|
13
|
-
|
|
12
|
+
interface ItemOptions<T> {
|
|
13
|
+
renderItem?: (item: T) => ReactNode;
|
|
14
14
|
defaultSelectedItem?: T;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
interface
|
|
17
|
+
interface BaseOptions<T> extends ItemOptions<T> {
|
|
18
|
+
itemTextKey: keyof FilterType<T, string>;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
interface RenderOptions<T> extends ItemOptions<T> {
|
|
18
22
|
getItemText: (item: T) => string;
|
|
19
|
-
defaultSelectedItem?: T;
|
|
20
23
|
}
|
|
21
24
|
|
|
22
25
|
type SelectOptions<T> = BaseOptions<T> | RenderOptions<T>;
|
|
@@ -91,16 +94,18 @@ function getItemRenderer<T>(value: T, options: SelectOptions<T>) {
|
|
|
91
94
|
{ handleClick, handleFocus, modifiers, index },
|
|
92
95
|
) => {
|
|
93
96
|
const label = getLabel(item, options);
|
|
97
|
+
const { renderItem } = options;
|
|
98
|
+
const { active, disabled } = modifiers;
|
|
94
99
|
return (
|
|
95
100
|
<MenuItem
|
|
96
|
-
active={
|
|
97
|
-
disabled={
|
|
101
|
+
active={active}
|
|
102
|
+
disabled={disabled}
|
|
98
103
|
selected={selectedLabel === label}
|
|
99
104
|
key={index}
|
|
100
105
|
onClick={handleClick}
|
|
101
106
|
onFocus={handleFocus}
|
|
102
107
|
roleStructure="listoption"
|
|
103
|
-
text={label}
|
|
108
|
+
text={renderItem?.(item) || label}
|
|
104
109
|
/>
|
|
105
110
|
);
|
|
106
111
|
};
|
|
@@ -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,50 +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
|
-
style={{
|
|
164
|
-
height: '10px',
|
|
165
|
-
padding: '0 !imporant',
|
|
166
|
-
}}
|
|
167
|
-
>
|
|
168
|
-
<ValueRenderers.Text value={key} />
|
|
169
|
-
{valueCell(value)}
|
|
170
|
-
</Table.Row>
|
|
171
|
-
))}
|
|
172
|
-
</Table>
|
|
173
|
-
</Disclosure.Panel>
|
|
174
|
-
</>
|
|
175
|
-
)}
|
|
176
|
-
</Disclosure>
|
|
210
|
+
<ValueRenderers.Text value={key} />
|
|
211
|
+
{valueCell(value)}
|
|
212
|
+
</Table.Row>
|
|
213
|
+
))}
|
|
214
|
+
</Table>
|
|
215
|
+
</Collapsible.Content>
|
|
216
|
+
</Collapsible.Root>
|
|
177
217
|
);
|
|
178
218
|
})}
|
|
179
219
|
</div>
|
|
@@ -1,9 +1,21 @@
|
|
|
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>
|
|
18
|
+
<thead style={sticky ? headerStyle : undefined}>
|
|
7
19
|
<TableRow bordered={bordered} style={style}>
|
|
8
20
|
{children}
|
|
9
21
|
</TableRow>
|