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.
Files changed (46) hide show
  1. package/lib/components/button/Button.d.ts +1 -1
  2. package/lib/components/button/Button.d.ts.map +1 -1
  3. package/lib/components/button/Button.js +3 -2
  4. package/lib/components/button/Button.js.map +1 -1
  5. package/lib/components/color-picker/gradient-select/GradientSelect.d.ts +1 -1
  6. package/lib/components/color-picker/gradient-select/GradientSelect.d.ts.map +1 -1
  7. package/lib/components/color-picker/gradient-select/GradientSelect.js +45 -23
  8. package/lib/components/color-picker/gradient-select/GradientSelect.js.map +1 -1
  9. package/lib/components/hooks/useSelect.d.ts +7 -5
  10. package/lib/components/hooks/useSelect.d.ts.map +1 -1
  11. package/lib/components/hooks/useSelect.js +3 -1
  12. package/lib/components/hooks/useSelect.js.map +1 -1
  13. package/lib/components/info-panel/InfoPanel.d.ts.map +1 -1
  14. package/lib/components/info-panel/InfoPanel.js +78 -20
  15. package/lib/components/info-panel/InfoPanel.js.map +1 -1
  16. package/lib/components/table/Table.d.ts +3 -1
  17. package/lib/components/table/TableHeader.d.ts +3 -1
  18. package/lib/components/table/TableHeader.d.ts.map +1 -1
  19. package/lib/components/table/TableHeader.js +8 -2
  20. package/lib/components/table/TableHeader.js.map +1 -1
  21. package/lib-esm/components/button/Button.d.ts +1 -1
  22. package/lib-esm/components/button/Button.d.ts.map +1 -1
  23. package/lib-esm/components/button/Button.js +3 -2
  24. package/lib-esm/components/button/Button.js.map +1 -1
  25. package/lib-esm/components/color-picker/gradient-select/GradientSelect.d.ts +1 -1
  26. package/lib-esm/components/color-picker/gradient-select/GradientSelect.d.ts.map +1 -1
  27. package/lib-esm/components/color-picker/gradient-select/GradientSelect.js +45 -23
  28. package/lib-esm/components/color-picker/gradient-select/GradientSelect.js.map +1 -1
  29. package/lib-esm/components/hooks/useSelect.d.ts +7 -5
  30. package/lib-esm/components/hooks/useSelect.d.ts.map +1 -1
  31. package/lib-esm/components/hooks/useSelect.js +3 -1
  32. package/lib-esm/components/hooks/useSelect.js.map +1 -1
  33. package/lib-esm/components/info-panel/InfoPanel.d.ts.map +1 -1
  34. package/lib-esm/components/info-panel/InfoPanel.js +52 -17
  35. package/lib-esm/components/info-panel/InfoPanel.js.map +1 -1
  36. package/lib-esm/components/table/Table.d.ts +3 -1
  37. package/lib-esm/components/table/TableHeader.d.ts +3 -1
  38. package/lib-esm/components/table/TableHeader.d.ts.map +1 -1
  39. package/lib-esm/components/table/TableHeader.js +8 -2
  40. package/lib-esm/components/table/TableHeader.js.map +1 -1
  41. package/package.json +9 -9
  42. package/src/components/button/Button.tsx +12 -5
  43. package/src/components/color-picker/gradient-select/GradientSelect.tsx +82 -46
  44. package/src/components/hooks/useSelect.tsx +13 -8
  45. package/src/components/info-panel/InfoPanel.tsx +88 -48
  46. 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 BaseOptions<T> {
13
- itemTextKey: keyof FilterType<T, string>;
12
+ interface ItemOptions<T> {
13
+ renderItem?: (item: T) => ReactNode;
14
14
  defaultSelectedItem?: T;
15
15
  }
16
16
 
17
- interface RenderOptions<T> {
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={modifiers.active}
97
- disabled={modifiers.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 { Disclosure } from '@headlessui/react';
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 style={titleStyle}>{title}</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
- zIndex: 10,
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="search for a parameter ..."
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
- gap: '5px',
173
+ overflowY: 'auto',
174
+ flex: 1,
137
175
  }}
138
176
  >
139
177
  {filteredData.map(({ description, data }) => {
140
178
  return (
141
- <Disclosure defaultOpen key={description}>
142
- {({ open }) => (
143
- <>
144
- <Disclosure.Button css={style.button}>
145
- <Icon icon="chevron-right" css={style.chevron(open)} />
146
- {description}
147
- </Disclosure.Button>
148
- <Disclosure.Panel>
149
- <Table
150
- striped
151
- css={css({
152
- width: '100%',
153
- })}
154
- compact
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
- <Table.Header>
157
- <ValueRenderers.Header value="Parameter" />
158
- <ValueRenderers.Header value="Value" />
159
- </Table.Header>
160
- {data.map(([key, value]) => (
161
- <Table.Row
162
- key={key}
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
- export const TableHeader = ({ children, bordered, style }: TableProps) => {
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>