react-science 0.25.0 → 0.26.2

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 (166) hide show
  1. package/lib/app/explorer/MeasurementExplorer.js +29 -7
  2. package/lib/app/explorer/MeasurementExplorerWithState.js +2 -2
  3. package/lib/app/helpers/MeasurementPlot.js +28 -19
  4. package/lib/app/helpers/react-plot.js +1 -1
  5. package/lib/app/kinds/mass/MassPlotView.js +2 -2
  6. package/lib/app/kinds/mass/MeasurementMassPlot.js +49 -33
  7. package/lib/app/panels/measurement-info/MeasurementInfoPanel.js +13 -58
  8. package/lib/app-data/state/data/data.helpers.js +32 -8
  9. package/lib/components/forms/Checkbox.js +4 -5
  10. package/lib/components/forms/Input.js +3 -87
  11. package/lib/components/forms/TextArea.js +25 -0
  12. package/lib/components/forms/index.js +2 -0
  13. package/lib/components/forms/radio-group/ButtonRadioItem.js +76 -0
  14. package/lib/components/forms/radio-group/ClassicRadioItem.js +92 -0
  15. package/lib/components/forms/radio-group/RadioGroup.js +69 -0
  16. package/lib/components/forms/radio-group/index.js +17 -0
  17. package/lib/components/forms/styles.js +80 -0
  18. package/lib/components/forms/utils/SubText.js +20 -0
  19. package/lib/components/forms/utils/index.js +17 -0
  20. package/lib/components/header/PanelHeader.js +51 -0
  21. package/lib/components/header/index.js +1 -0
  22. package/lib/components/index.js +1 -0
  23. package/lib/components/info-panel/InfoPanel.js +94 -0
  24. package/lib/components/info-panel/index.js +17 -0
  25. package/lib/components/modal/ConfirmModal.js +3 -2
  26. package/lib/components/modal/Modal.js +3 -1
  27. package/lib/components/table/Table.js +2 -2
  28. package/lib/components/toolbar/PanelPreferencesToolbar.js +26 -0
  29. package/lib/components/toolbar/index.js +1 -0
  30. package/lib-esm/app/explorer/MeasurementExplorer.d.ts.map +1 -1
  31. package/lib-esm/app/explorer/MeasurementExplorer.js +30 -8
  32. package/lib-esm/app/explorer/MeasurementExplorer.js.map +1 -1
  33. package/lib-esm/app/explorer/MeasurementExplorerWithState.d.ts.map +1 -1
  34. package/lib-esm/app/explorer/MeasurementExplorerWithState.js +2 -2
  35. package/lib-esm/app/explorer/MeasurementExplorerWithState.js.map +1 -1
  36. package/lib-esm/app/helpers/MeasurementPlot.d.ts +3 -3
  37. package/lib-esm/app/helpers/MeasurementPlot.d.ts.map +1 -1
  38. package/lib-esm/app/helpers/MeasurementPlot.js +28 -19
  39. package/lib-esm/app/helpers/MeasurementPlot.js.map +1 -1
  40. package/lib-esm/app/helpers/react-plot.d.ts.map +1 -1
  41. package/lib-esm/app/helpers/react-plot.js +1 -1
  42. package/lib-esm/app/helpers/react-plot.js.map +1 -1
  43. package/lib-esm/app/kinds/mass/MassPlotView.d.ts.map +1 -1
  44. package/lib-esm/app/kinds/mass/MassPlotView.js +2 -2
  45. package/lib-esm/app/kinds/mass/MassPlotView.js.map +1 -1
  46. package/lib-esm/app/kinds/mass/MeasurementMassPlot.d.ts.map +1 -1
  47. package/lib-esm/app/kinds/mass/MeasurementMassPlot.js +49 -33
  48. package/lib-esm/app/kinds/mass/MeasurementMassPlot.js.map +1 -1
  49. package/lib-esm/app/panels/measurement-info/MeasurementInfoPanel.d.ts.map +1 -1
  50. package/lib-esm/app/panels/measurement-info/MeasurementInfoPanel.js +15 -60
  51. package/lib-esm/app/panels/measurement-info/MeasurementInfoPanel.js.map +1 -1
  52. package/lib-esm/app-data/state/data/data.helpers.d.ts +20 -12
  53. package/lib-esm/app-data/state/data/data.helpers.d.ts.map +1 -1
  54. package/lib-esm/app-data/state/data/data.helpers.js +30 -7
  55. package/lib-esm/app-data/state/data/data.helpers.js.map +1 -1
  56. package/lib-esm/components/forms/Checkbox.d.ts.map +1 -1
  57. package/lib-esm/components/forms/Checkbox.js +1 -2
  58. package/lib-esm/components/forms/Checkbox.js.map +1 -1
  59. package/lib-esm/components/forms/Input.d.ts +4 -2
  60. package/lib-esm/components/forms/Input.d.ts.map +1 -1
  61. package/lib-esm/components/forms/Input.js +3 -87
  62. package/lib-esm/components/forms/Input.js.map +1 -1
  63. package/lib-esm/components/forms/TextArea.d.ts +8 -0
  64. package/lib-esm/components/forms/TextArea.d.ts.map +1 -0
  65. package/lib-esm/components/forms/TextArea.js +19 -0
  66. package/lib-esm/components/forms/TextArea.js.map +1 -0
  67. package/lib-esm/components/forms/index.d.ts +2 -0
  68. package/lib-esm/components/forms/index.d.ts.map +1 -1
  69. package/lib-esm/components/forms/index.js +2 -0
  70. package/lib-esm/components/forms/index.js.map +1 -1
  71. package/lib-esm/components/forms/radio-group/ButtonRadioItem.d.ts +3 -0
  72. package/lib-esm/components/forms/radio-group/ButtonRadioItem.d.ts.map +1 -0
  73. package/lib-esm/components/forms/radio-group/ButtonRadioItem.js +50 -0
  74. package/lib-esm/components/forms/radio-group/ButtonRadioItem.js.map +1 -0
  75. package/lib-esm/components/forms/radio-group/ClassicRadioItem.d.ts +3 -0
  76. package/lib-esm/components/forms/radio-group/ClassicRadioItem.d.ts.map +1 -0
  77. package/lib-esm/components/forms/radio-group/ClassicRadioItem.js +66 -0
  78. package/lib-esm/components/forms/radio-group/ClassicRadioItem.js.map +1 -0
  79. package/lib-esm/components/forms/radio-group/RadioGroup.d.ts +18 -0
  80. package/lib-esm/components/forms/radio-group/RadioGroup.d.ts.map +1 -0
  81. package/lib-esm/components/forms/radio-group/RadioGroup.js +43 -0
  82. package/lib-esm/components/forms/radio-group/RadioGroup.js.map +1 -0
  83. package/lib-esm/components/forms/radio-group/index.d.ts +2 -0
  84. package/lib-esm/components/forms/radio-group/index.d.ts.map +1 -0
  85. package/lib-esm/components/forms/radio-group/index.js +2 -0
  86. package/lib-esm/components/forms/radio-group/index.js.map +1 -0
  87. package/lib-esm/components/forms/styles.d.ts +26 -0
  88. package/lib-esm/components/forms/styles.d.ts.map +1 -0
  89. package/lib-esm/components/forms/styles.js +75 -0
  90. package/lib-esm/components/forms/styles.js.map +1 -0
  91. package/lib-esm/components/forms/utils/SubText.d.ts +7 -0
  92. package/lib-esm/components/forms/utils/SubText.d.ts.map +1 -0
  93. package/lib-esm/components/forms/utils/SubText.js +17 -0
  94. package/lib-esm/components/forms/utils/SubText.js.map +1 -0
  95. package/lib-esm/components/forms/utils/index.d.ts +2 -0
  96. package/lib-esm/components/forms/utils/index.d.ts.map +1 -0
  97. package/lib-esm/components/forms/utils/index.js +2 -0
  98. package/lib-esm/components/forms/utils/index.js.map +1 -0
  99. package/lib-esm/components/header/PanelHeader.d.ts +10 -0
  100. package/lib-esm/components/header/PanelHeader.d.ts.map +1 -0
  101. package/lib-esm/components/header/PanelHeader.js +48 -0
  102. package/lib-esm/components/header/PanelHeader.js.map +1 -0
  103. package/lib-esm/components/header/index.d.ts +1 -0
  104. package/lib-esm/components/header/index.d.ts.map +1 -1
  105. package/lib-esm/components/header/index.js +1 -0
  106. package/lib-esm/components/header/index.js.map +1 -1
  107. package/lib-esm/components/index.d.ts +1 -0
  108. package/lib-esm/components/index.d.ts.map +1 -1
  109. package/lib-esm/components/index.js +1 -0
  110. package/lib-esm/components/index.js.map +1 -1
  111. package/lib-esm/components/info-panel/InfoPanel.d.ts +15 -0
  112. package/lib-esm/components/info-panel/InfoPanel.d.ts.map +1 -0
  113. package/lib-esm/components/info-panel/InfoPanel.js +91 -0
  114. package/lib-esm/components/info-panel/InfoPanel.js.map +1 -0
  115. package/lib-esm/components/info-panel/index.d.ts +2 -0
  116. package/lib-esm/components/info-panel/index.d.ts.map +1 -0
  117. package/lib-esm/components/info-panel/index.js +2 -0
  118. package/lib-esm/components/info-panel/index.js.map +1 -0
  119. package/lib-esm/components/modal/ConfirmModal.d.ts.map +1 -1
  120. package/lib-esm/components/modal/ConfirmModal.js +3 -2
  121. package/lib-esm/components/modal/ConfirmModal.js.map +1 -1
  122. package/lib-esm/components/modal/Modal.d.ts.map +1 -1
  123. package/lib-esm/components/modal/Modal.js +3 -1
  124. package/lib-esm/components/modal/Modal.js.map +1 -1
  125. package/lib-esm/components/table/Table.d.ts +2 -3
  126. package/lib-esm/components/table/Table.d.ts.map +1 -1
  127. package/lib-esm/components/table/Table.js +2 -2
  128. package/lib-esm/components/table/Table.js.map +1 -1
  129. package/lib-esm/components/toolbar/PanelPreferencesToolbar.d.ts +7 -0
  130. package/lib-esm/components/toolbar/PanelPreferencesToolbar.d.ts.map +1 -0
  131. package/lib-esm/components/toolbar/PanelPreferencesToolbar.js +23 -0
  132. package/lib-esm/components/toolbar/PanelPreferencesToolbar.js.map +1 -0
  133. package/lib-esm/components/toolbar/index.d.ts +1 -0
  134. package/lib-esm/components/toolbar/index.d.ts.map +1 -1
  135. package/lib-esm/components/toolbar/index.js +1 -0
  136. package/lib-esm/components/toolbar/index.js.map +1 -1
  137. package/package.json +16 -14
  138. package/src/app/explorer/MeasurementExplorer.tsx +34 -12
  139. package/src/app/explorer/MeasurementExplorerWithState.tsx +2 -2
  140. package/src/app/helpers/MeasurementPlot.tsx +44 -33
  141. package/src/app/helpers/react-plot.tsx +6 -4
  142. package/src/app/kinds/mass/MassPlotView.tsx +2 -2
  143. package/src/app/kinds/mass/MeasurementMassPlot.tsx +57 -37
  144. package/src/app/panels/measurement-info/MeasurementInfoPanel.tsx +14 -84
  145. package/src/app-data/state/data/data.helpers.ts +49 -16
  146. package/src/components/forms/Checkbox.tsx +2 -3
  147. package/src/components/forms/Input.tsx +14 -125
  148. package/src/components/forms/TextArea.tsx +45 -0
  149. package/src/components/forms/index.ts +2 -0
  150. package/src/components/forms/radio-group/ButtonRadioItem.tsx +77 -0
  151. package/src/components/forms/radio-group/ClassicRadioItem.tsx +95 -0
  152. package/src/components/forms/radio-group/RadioGroup.tsx +83 -0
  153. package/src/components/forms/radio-group/index.ts +1 -0
  154. package/src/components/forms/styles.ts +96 -0
  155. package/src/components/forms/utils/SubText.tsx +31 -0
  156. package/src/components/forms/utils/index.ts +1 -0
  157. package/src/components/header/PanelHeader.tsx +75 -0
  158. package/src/components/header/index.ts +1 -0
  159. package/src/components/index.ts +1 -0
  160. package/src/components/info-panel/InfoPanel.tsx +150 -0
  161. package/src/components/info-panel/index.ts +1 -0
  162. package/src/components/modal/ConfirmModal.tsx +3 -2
  163. package/src/components/modal/Modal.tsx +3 -1
  164. package/src/components/table/Table.tsx +3 -5
  165. package/src/components/toolbar/PanelPreferencesToolbar.tsx +46 -0
  166. package/src/components/toolbar/index.ts +1 -0
@@ -7,6 +7,7 @@ export * from './forms/index';
7
7
  export * from './fullscreen/index';
8
8
  export * from './header/index';
9
9
  export * from './hooks/index';
10
+ export * from './info-panel/index';
10
11
  export * from './layout-manager/index';
11
12
  export * from './modal/index';
12
13
  export * from './root-layout/index';
@@ -0,0 +1,150 @@
1
+ /** @jsxImportSource @emotion/react */
2
+ import { css } from '@emotion/react';
3
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment, @typescript-eslint/prefer-ts-expect-error
4
+ // @ts-ignore
5
+ import { Disclosure } from '@headlessui/react';
6
+ import { CSSProperties, useState } from 'react';
7
+ import { FaChevronRight } from 'react-icons/fa';
8
+
9
+ import { Input, ValueRenderers } from '../index';
10
+ import { Table } from '../table/Table';
11
+
12
+ export interface InfoPanelData {
13
+ description: string;
14
+ data: Record<string, string | number | object | any>;
15
+ }
16
+
17
+ interface InfoPanelProps {
18
+ title?: string;
19
+ data?: InfoPanelData[];
20
+ titleStyle?: CSSProperties;
21
+ inputStyle?: CSSProperties;
22
+ tableStyle?: CSSProperties;
23
+ }
24
+ const style = {
25
+ container: css({
26
+ padding: '5px',
27
+ }),
28
+ chevron: (open: boolean) =>
29
+ css({
30
+ rotate: open ? '90deg' : '0deg',
31
+ transition: 'all 0.3s ease-in-out',
32
+ }),
33
+ button: css({
34
+ display: 'flex',
35
+ alignItems: 'center',
36
+ gap: 5,
37
+ padding: '5px 2px',
38
+ }),
39
+ table: css`
40
+ width: 100%;
41
+ td:first-of-type {
42
+ width: 30%;
43
+ }
44
+ `,
45
+ };
46
+
47
+ export function InfoPanel(props: InfoPanelProps) {
48
+ const [search, setSearch] = useState('');
49
+ const {
50
+ title = 'Information',
51
+ data = [],
52
+ titleStyle,
53
+ inputStyle,
54
+ tableStyle,
55
+ } = props;
56
+ function viewData(data: Record<string, string | number | object>) {
57
+ return Object.keys(data)
58
+ .map((key) => {
59
+ const value = data[key];
60
+ if (
61
+ !key.toLowerCase().includes(search.toLowerCase()) &&
62
+ !valueSearch(value, search)
63
+ ) {
64
+ return null;
65
+ }
66
+ return (
67
+ <Table.Row key={key}>
68
+ <ValueRenderers.Text value={key} />
69
+ {valueCell(value)}
70
+ </Table.Row>
71
+ );
72
+ })
73
+ .filter((row) => row !== null);
74
+ }
75
+ return (
76
+ <div css={style.container}>
77
+ <div style={titleStyle}>{title}</div>
78
+ <Input
79
+ placeholder="search for a parameter ..."
80
+ value={search}
81
+ onChange={({ target }) => {
82
+ if (target.value !== undefined) setSearch(target.value);
83
+ }}
84
+ style={inputStyle}
85
+ />
86
+
87
+ {data.map(({ description, data }) => {
88
+ const content = viewData(data);
89
+ return content.length > 0 ? (
90
+ <Disclosure defaultOpen key={description}>
91
+ {({ open }) => (
92
+ <>
93
+ <Disclosure.Button css={style.button}>
94
+ <FaChevronRight css={style.chevron(open)} />
95
+ {description}
96
+ </Disclosure.Button>
97
+ <Disclosure.Panel>
98
+ <Table css={style.table} style={tableStyle}>
99
+ <Table.Header>
100
+ <ValueRenderers.Title value="Parameter" />
101
+ <ValueRenderers.Title value="Value" />
102
+ </Table.Header>
103
+ {content}
104
+ </Table>
105
+ </Disclosure.Panel>
106
+ </>
107
+ )}
108
+ </Disclosure>
109
+ ) : null;
110
+ })}
111
+ </div>
112
+ );
113
+ }
114
+ /**
115
+ * Get the value cell depending on the type of the value
116
+ * @param value - ValueRenderers value.
117
+ * @returns - ValueRenderers component.
118
+ */
119
+ function valueCell(value: number | string | object) {
120
+ switch (typeof value) {
121
+ case 'number':
122
+ return <ValueRenderers.Number value={value} />;
123
+ case 'object':
124
+ return <ValueRenderers.Object value={value} />;
125
+ case 'string':
126
+ return <ValueRenderers.Text value={value} />;
127
+ default:
128
+ <ValueRenderers.Text value={value} />;
129
+ }
130
+ }
131
+
132
+ /**
133
+ * Search a string in different type of values
134
+ *
135
+ * @param value - Value to search in.
136
+ * @param search - Value to search for.
137
+ * @returns - If search exist in value
138
+ */
139
+ function valueSearch(value: number | string | object, search: string): boolean {
140
+ switch (typeof value) {
141
+ case 'number':
142
+ return String(value).includes(search.toLowerCase());
143
+ case 'object':
144
+ return JSON.stringify(value).toLowerCase().includes(search.toLowerCase());
145
+ case 'string':
146
+ return value.toLowerCase().includes(search.toLowerCase());
147
+ default:
148
+ return false;
149
+ }
150
+ }
@@ -0,0 +1 @@
1
+ export * from './InfoPanel';
@@ -38,8 +38,6 @@ const ConfirmModalContents = styled.div<{
38
38
  flex-direction: column;
39
39
  background-color: white;
40
40
  width: 100%;
41
- border-width: 1px;
42
- border-color: transparent;
43
41
  border-radius: 0.5rem;
44
42
  box-shadow:
45
43
  0 0 0 0,
@@ -51,6 +49,9 @@ const ConfirmModalChildrenRoot = styled.div<{ headerColor: string }>`
51
49
  color: ${({ headerColor }) => headerColor};
52
50
  display: flex;
53
51
  flex: 1 1 0%;
52
+ font-weight: bold;
53
+ padding: 20px;
54
+ font-size: 14px;
54
55
  `;
55
56
 
56
57
  const ConfirmModalFooter = styled.div`
@@ -22,7 +22,9 @@ export interface ModalProps {
22
22
 
23
23
  const DialogRoot = styled.dialog`
24
24
  background-color: transparent;
25
-
25
+ :focus {
26
+ outline: none;
27
+ }
26
28
  ::backdrop {
27
29
  background-color: rgba(113, 113, 122, 0.75);
28
30
  }
@@ -3,7 +3,6 @@ import { css } from '@emotion/react';
3
3
  import {
4
4
  Children,
5
5
  createContext,
6
- CSSProperties,
7
6
  isValidElement,
8
7
  ReactElement,
9
8
  ReactNode,
@@ -58,19 +57,18 @@ function splitChildren(children: ReactNode) {
58
57
  }
59
58
  return { Rows, Header };
60
59
  }
61
- export interface TableProps {
60
+ export interface TableProps extends React.HTMLAttributes<HTMLTableElement> {
62
61
  children?: ReactNode;
63
62
  border?: boolean;
64
- style?: CSSProperties;
65
63
  }
66
64
 
67
65
  export function Table(props: TableProps) {
68
- const { border = true, style = {}, children } = props;
66
+ const { border = true, children, ...tableProps } = props;
69
67
  const { Header, Rows } = splitChildren(children);
70
68
  const tableContextValue = useMemo(() => ({ border }), [border]);
71
69
  return (
72
70
  <TableContext.Provider value={tableContextValue}>
73
- <table style={style}>
71
+ <table {...tableProps}>
74
72
  {Header}
75
73
  <tbody>{Rows}</tbody>
76
74
  </table>
@@ -0,0 +1,46 @@
1
+ /** @jsxImportSource @emotion/react */
2
+ import { css } from '@emotion/react';
3
+ import { FaCheck, FaTimes } from 'react-icons/fa';
4
+
5
+ import { Button } from '../button/Button';
6
+
7
+ interface PanelPreferencesToolbarProps {
8
+ onClose?: () => void;
9
+ onSave?: () => void;
10
+ }
11
+
12
+ const styles = {
13
+ toolbar: css({
14
+ display: 'flex',
15
+ flexDirection: 'row-reverse',
16
+ fontSize: 16,
17
+ padding: 3,
18
+ '& > button': {
19
+ padding: 0,
20
+ paddingLeft: 9,
21
+ minWidth: 'auto',
22
+ },
23
+ }),
24
+ };
25
+
26
+ export function PanelPreferencesToolbar(props: PanelPreferencesToolbarProps) {
27
+ const { onClose, onSave } = props;
28
+ return (
29
+ <div css={styles.toolbar}>
30
+ <Button
31
+ onClick={onClose}
32
+ color={{ basic: '#ca0000', hover: '#ca0000' }}
33
+ backgroundColor={{ basic: 'white', hover: 'white' }}
34
+ >
35
+ <FaTimes />
36
+ </Button>
37
+ <Button
38
+ onClick={onSave}
39
+ color={{ basic: 'green', hover: 'green' }}
40
+ backgroundColor={{ basic: 'white', hover: 'white' }}
41
+ >
42
+ <FaCheck />
43
+ </Button>
44
+ </div>
45
+ );
46
+ }
@@ -1 +1,2 @@
1
1
  export * from './Toolbar';
2
+ export * from './PanelPreferencesToolbar';