react-science 4.1.3 → 6.0.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 (217) hide show
  1. package/lib/app/about/AboutDialogToolbarButton.d.ts +2 -2
  2. package/lib/app/about/AboutDialogToolbarButton.d.ts.map +1 -1
  3. package/lib/app/kinds/ir/IrPeaksPanel.d.ts.map +1 -1
  4. package/lib/app/kinds/ir/IrPeaksPanel.js +7 -18
  5. package/lib/app/kinds/ir/IrPeaksPanel.js.map +1 -1
  6. package/lib/app/panels/SignalProcessingPanel.d.ts.map +1 -1
  7. package/lib/app/panels/SignalProcessingPanel.js +52 -27
  8. package/lib/app/panels/SignalProcessingPanel.js.map +1 -1
  9. package/lib/app/panels/measurements/MeasurementsTable.d.ts.map +1 -1
  10. package/lib/app/panels/measurements/MeasurementsTable.js +6 -6
  11. package/lib/app/panels/measurements/MeasurementsTable.js.map +1 -1
  12. package/lib/app/panels/measurements/measurementPanelContext.d.ts +2 -1
  13. package/lib/app/panels/measurements/measurementPanelContext.d.ts.map +1 -1
  14. package/lib/app/panels/measurements/measurementPanelContext.js.map +1 -1
  15. package/lib/components/color-picker/gradient-select/GradientSelect.d.ts.map +1 -1
  16. package/lib/components/color-picker/gradient-select/GradientSelect.js +11 -38
  17. package/lib/components/color-picker/gradient-select/GradientSelect.js.map +1 -1
  18. package/lib/components/color-picker/react-color/common/Swatch.d.ts +2 -2
  19. package/lib/components/color-picker/react-color/common/interaction.d.ts +2 -2
  20. package/lib/components/dialog/ConfirmDialog.js +3 -3
  21. package/lib/components/dialog/ConfirmDialog.js.map +1 -1
  22. package/lib/components/info-panel/InfoPanel.d.ts.map +1 -1
  23. package/lib/components/info-panel/InfoPanel.js +24 -19
  24. package/lib/components/info-panel/InfoPanel.js.map +1 -1
  25. package/lib/components/logger/FifoLoggerDialog.d.ts.map +1 -1
  26. package/lib/components/logger/FifoLoggerDialog.js +32 -9
  27. package/lib/components/logger/FifoLoggerDialog.js.map +1 -1
  28. package/lib/components/root-layout/css-reset/customPreflight.d.ts.map +1 -1
  29. package/lib/components/table/default_table_cell.d.ts +3 -0
  30. package/lib/components/table/default_table_cell.d.ts.map +1 -0
  31. package/lib/components/table/default_table_cell.js +46 -0
  32. package/lib/components/table/default_table_cell.js.map +1 -0
  33. package/lib/components/table/index.d.ts +2 -1
  34. package/lib/components/table/index.d.ts.map +1 -1
  35. package/lib/components/table/index.js +2 -1
  36. package/lib/components/table/index.js.map +1 -1
  37. package/lib/components/table/table_body.d.ts +9 -0
  38. package/lib/components/table/table_body.d.ts.map +1 -0
  39. package/lib/components/table/table_body.js +19 -0
  40. package/lib/components/table/table_body.js.map +1 -0
  41. package/lib/components/table/table_header.d.ts +8 -0
  42. package/lib/components/table/table_header.d.ts.map +1 -0
  43. package/lib/components/table/table_header.js +16 -0
  44. package/lib/components/table/table_header.js.map +1 -0
  45. package/lib/components/table/table_header_cell.d.ts +7 -0
  46. package/lib/components/table/table_header_cell.d.ts.map +1 -0
  47. package/lib/components/table/table_header_cell.js +22 -0
  48. package/lib/components/table/table_header_cell.js.map +1 -0
  49. package/lib/components/table/table_root.d.ts +18 -0
  50. package/lib/components/table/table_root.d.ts.map +1 -0
  51. package/lib/components/table/table_root.js +23 -0
  52. package/lib/components/table/table_root.js.map +1 -0
  53. package/lib/components/table/table_row_cell.d.ts +7 -0
  54. package/lib/components/table/table_row_cell.d.ts.map +1 -0
  55. package/lib/components/table/table_row_cell.js +10 -0
  56. package/lib/components/table/table_row_cell.js.map +1 -0
  57. package/lib/components/table/table_utils.d.ts +10 -0
  58. package/lib/components/table/table_utils.d.ts.map +1 -0
  59. package/lib/components/table/table_utils.js +8 -0
  60. package/lib/components/table/table_utils.js.map +1 -0
  61. package/lib/components/table/use_table_columns.d.ts +4 -0
  62. package/lib/components/table/use_table_columns.d.ts.map +1 -0
  63. package/lib/components/table/use_table_columns.js +17 -0
  64. package/lib/components/table/use_table_columns.js.map +1 -0
  65. package/lib/components/toolbar/PanelPreferencesToolbar.d.ts +2 -1
  66. package/lib/components/toolbar/PanelPreferencesToolbar.d.ts.map +1 -1
  67. package/lib/components/toolbar/PanelPreferencesToolbar.js.map +1 -1
  68. package/lib/components/toolbar/Toolbar.d.ts +2 -2
  69. package/lib/components/toolbar/Toolbar.d.ts.map +1 -1
  70. package/lib/components/toolbar/Toolbar.js +2 -2
  71. package/lib/components/toolbar/Toolbar.js.map +1 -1
  72. package/lib/components/value-renderers/index.d.ts +0 -1
  73. package/lib/components/value-renderers/index.d.ts.map +1 -1
  74. package/lib/components/value-renderers/index.js +1 -3
  75. package/lib/components/value-renderers/index.js.map +1 -1
  76. package/lib-esm/app/about/AboutDialogToolbarButton.d.ts +2 -2
  77. package/lib-esm/app/about/AboutDialogToolbarButton.d.ts.map +1 -1
  78. package/lib-esm/app/kinds/ir/IrPeaksPanel.d.ts.map +1 -1
  79. package/lib-esm/app/kinds/ir/IrPeaksPanel.js +9 -20
  80. package/lib-esm/app/kinds/ir/IrPeaksPanel.js.map +1 -1
  81. package/lib-esm/app/panels/SignalProcessingPanel.d.ts.map +1 -1
  82. package/lib-esm/app/panels/SignalProcessingPanel.js +54 -29
  83. package/lib-esm/app/panels/SignalProcessingPanel.js.map +1 -1
  84. package/lib-esm/app/panels/measurements/MeasurementsTable.d.ts.map +1 -1
  85. package/lib-esm/app/panels/measurements/MeasurementsTable.js +7 -7
  86. package/lib-esm/app/panels/measurements/MeasurementsTable.js.map +1 -1
  87. package/lib-esm/app/panels/measurements/measurementPanelContext.d.ts +2 -1
  88. package/lib-esm/app/panels/measurements/measurementPanelContext.d.ts.map +1 -1
  89. package/lib-esm/app/panels/measurements/measurementPanelContext.js.map +1 -1
  90. package/lib-esm/components/color-picker/gradient-select/GradientSelect.d.ts.map +1 -1
  91. package/lib-esm/components/color-picker/gradient-select/GradientSelect.js +11 -38
  92. package/lib-esm/components/color-picker/gradient-select/GradientSelect.js.map +1 -1
  93. package/lib-esm/components/color-picker/react-color/common/Swatch.d.ts +2 -2
  94. package/lib-esm/components/color-picker/react-color/common/interaction.d.ts +2 -2
  95. package/lib-esm/components/dialog/ConfirmDialog.js +1 -1
  96. package/lib-esm/components/dialog/ConfirmDialog.js.map +1 -1
  97. package/lib-esm/components/info-panel/InfoPanel.d.ts.map +1 -1
  98. package/lib-esm/components/info-panel/InfoPanel.js +19 -14
  99. package/lib-esm/components/info-panel/InfoPanel.js.map +1 -1
  100. package/lib-esm/components/logger/FifoLoggerDialog.d.ts.map +1 -1
  101. package/lib-esm/components/logger/FifoLoggerDialog.js +31 -8
  102. package/lib-esm/components/logger/FifoLoggerDialog.js.map +1 -1
  103. package/lib-esm/components/root-layout/css-reset/customPreflight.d.ts.map +1 -1
  104. package/lib-esm/components/table/default_table_cell.d.ts +3 -0
  105. package/lib-esm/components/table/default_table_cell.d.ts.map +1 -0
  106. package/lib-esm/components/table/default_table_cell.js +20 -0
  107. package/lib-esm/components/table/default_table_cell.js.map +1 -0
  108. package/lib-esm/components/table/index.d.ts +2 -1
  109. package/lib-esm/components/table/index.d.ts.map +1 -1
  110. package/lib-esm/components/table/index.js +2 -1
  111. package/lib-esm/components/table/index.js.map +1 -1
  112. package/lib-esm/components/table/table_body.d.ts +9 -0
  113. package/lib-esm/components/table/table_body.d.ts.map +1 -0
  114. package/lib-esm/components/table/table_body.js +16 -0
  115. package/lib-esm/components/table/table_body.js.map +1 -0
  116. package/lib-esm/components/table/table_header.d.ts +8 -0
  117. package/lib-esm/components/table/table_header.d.ts.map +1 -0
  118. package/lib-esm/components/table/table_header.js +13 -0
  119. package/lib-esm/components/table/table_header.js.map +1 -0
  120. package/lib-esm/components/table/table_header_cell.d.ts +7 -0
  121. package/lib-esm/components/table/table_header_cell.d.ts.map +1 -0
  122. package/lib-esm/components/table/table_header_cell.js +19 -0
  123. package/lib-esm/components/table/table_header_cell.js.map +1 -0
  124. package/lib-esm/components/table/table_root.d.ts +18 -0
  125. package/lib-esm/components/table/table_root.d.ts.map +1 -0
  126. package/lib-esm/components/table/table_root.js +20 -0
  127. package/lib-esm/components/table/table_root.js.map +1 -0
  128. package/lib-esm/components/table/table_row_cell.d.ts +7 -0
  129. package/lib-esm/components/table/table_row_cell.d.ts.map +1 -0
  130. package/lib-esm/components/table/table_row_cell.js +7 -0
  131. package/lib-esm/components/table/table_row_cell.js.map +1 -0
  132. package/lib-esm/components/table/table_utils.d.ts +10 -0
  133. package/lib-esm/components/table/table_utils.d.ts.map +1 -0
  134. package/lib-esm/components/table/table_utils.js +5 -0
  135. package/lib-esm/components/table/table_utils.js.map +1 -0
  136. package/lib-esm/components/table/use_table_columns.d.ts +4 -0
  137. package/lib-esm/components/table/use_table_columns.d.ts.map +1 -0
  138. package/lib-esm/components/table/use_table_columns.js +14 -0
  139. package/lib-esm/components/table/use_table_columns.js.map +1 -0
  140. package/lib-esm/components/toolbar/PanelPreferencesToolbar.d.ts +2 -1
  141. package/lib-esm/components/toolbar/PanelPreferencesToolbar.d.ts.map +1 -1
  142. package/lib-esm/components/toolbar/PanelPreferencesToolbar.js.map +1 -1
  143. package/lib-esm/components/toolbar/Toolbar.d.ts +2 -2
  144. package/lib-esm/components/toolbar/Toolbar.d.ts.map +1 -1
  145. package/lib-esm/components/toolbar/Toolbar.js +2 -2
  146. package/lib-esm/components/toolbar/Toolbar.js.map +1 -1
  147. package/lib-esm/components/value-renderers/index.d.ts +0 -1
  148. package/lib-esm/components/value-renderers/index.d.ts.map +1 -1
  149. package/lib-esm/components/value-renderers/index.js +0 -1
  150. package/lib-esm/components/value-renderers/index.js.map +1 -1
  151. package/package.json +31 -31
  152. package/src/app/about/AboutDialogToolbarButton.tsx +2 -2
  153. package/src/app/kinds/ir/IrPeaksPanel.tsx +15 -51
  154. package/src/app/panels/SignalProcessingPanel.tsx +99 -82
  155. package/src/app/panels/measurements/MeasurementsTable.tsx +19 -21
  156. package/src/app/panels/measurements/measurementPanelContext.tsx +2 -2
  157. package/src/components/color-picker/gradient-select/GradientSelect.tsx +44 -71
  158. package/src/components/dialog/ConfirmDialog.tsx +1 -1
  159. package/src/components/info-panel/InfoPanel.tsx +33 -34
  160. package/src/components/logger/FifoLoggerDialog.tsx +53 -35
  161. package/src/components/table/default_table_cell.tsx +20 -0
  162. package/src/components/table/index.ts +2 -1
  163. package/src/components/table/table_body.tsx +37 -0
  164. package/src/components/table/table_header.tsx +31 -0
  165. package/src/components/table/table_header_cell.tsx +38 -0
  166. package/src/components/table/table_root.tsx +74 -0
  167. package/src/components/table/table_row_cell.tsx +17 -0
  168. package/src/components/table/table_utils.ts +24 -0
  169. package/src/components/table/use_table_columns.ts +19 -0
  170. package/src/components/toolbar/PanelPreferencesToolbar.tsx +2 -1
  171. package/src/components/toolbar/Toolbar.tsx +6 -7
  172. package/src/components/value-renderers/index.ts +0 -2
  173. package/lib/components/table/Table.d.ts +0 -17
  174. package/lib/components/table/Table.d.ts.map +0 -1
  175. package/lib/components/table/Table.js +0 -38
  176. package/lib/components/table/Table.js.map +0 -1
  177. package/lib/components/table/TableHeader.d.ts +0 -5
  178. package/lib/components/table/TableHeader.d.ts.map +0 -1
  179. package/lib/components/table/TableHeader.js +0 -16
  180. package/lib/components/table/TableHeader.js.map +0 -1
  181. package/lib/components/table/TableRow.d.ts +0 -5
  182. package/lib/components/table/TableRow.d.ts.map +0 -1
  183. package/lib/components/table/TableRow.js +0 -44
  184. package/lib/components/table/TableRow.js.map +0 -1
  185. package/lib/components/table/tableContext.d.ts +0 -7
  186. package/lib/components/table/tableContext.d.ts.map +0 -1
  187. package/lib/components/table/tableContext.js +0 -11
  188. package/lib/components/table/tableContext.js.map +0 -1
  189. package/lib/components/value-renderers/Header.d.ts +0 -7
  190. package/lib/components/value-renderers/Header.d.ts.map +0 -1
  191. package/lib/components/value-renderers/Header.js +0 -14
  192. package/lib/components/value-renderers/Header.js.map +0 -1
  193. package/lib-esm/components/table/Table.d.ts +0 -17
  194. package/lib-esm/components/table/Table.d.ts.map +0 -1
  195. package/lib-esm/components/table/Table.js +0 -35
  196. package/lib-esm/components/table/Table.js.map +0 -1
  197. package/lib-esm/components/table/TableHeader.d.ts +0 -5
  198. package/lib-esm/components/table/TableHeader.d.ts.map +0 -1
  199. package/lib-esm/components/table/TableHeader.js +0 -12
  200. package/lib-esm/components/table/TableHeader.js.map +0 -1
  201. package/lib-esm/components/table/TableRow.d.ts +0 -5
  202. package/lib-esm/components/table/TableRow.d.ts.map +0 -1
  203. package/lib-esm/components/table/TableRow.js +0 -40
  204. package/lib-esm/components/table/TableRow.js.map +0 -1
  205. package/lib-esm/components/table/tableContext.d.ts +0 -7
  206. package/lib-esm/components/table/tableContext.d.ts.map +0 -1
  207. package/lib-esm/components/table/tableContext.js +0 -7
  208. package/lib-esm/components/table/tableContext.js.map +0 -1
  209. package/lib-esm/components/value-renderers/Header.d.ts +0 -7
  210. package/lib-esm/components/value-renderers/Header.d.ts.map +0 -1
  211. package/lib-esm/components/value-renderers/Header.js +0 -11
  212. package/lib-esm/components/value-renderers/Header.js.map +0 -1
  213. package/src/components/table/Table.tsx +0 -70
  214. package/src/components/table/TableHeader.tsx +0 -24
  215. package/src/components/table/TableRow.tsx +0 -82
  216. package/src/components/table/tableContext.ts +0 -7
  217. package/src/components/value-renderers/Header.tsx +0 -18
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-science",
3
- "version": "4.1.3",
3
+ "version": "6.0.0",
4
4
  "description": "React components to build scientific applications UI",
5
5
  "exports": {
6
6
  "./app": {
@@ -51,34 +51,34 @@
51
51
  "test-only": "vitest run --coverage "
52
52
  },
53
53
  "volta": {
54
- "node": "20.14.0"
54
+ "node": "20.16.0"
55
55
  },
56
56
  "overrides": {
57
57
  "react": "^18.3.1",
58
58
  "react-dom": "^18.3.1"
59
59
  },
60
60
  "peerDependencies": {
61
- "@blueprintjs/core": "^5.10.3",
62
- "@blueprintjs/icons": "^5.9.0",
61
+ "@blueprintjs/core": "^5.11.0",
62
+ "@blueprintjs/icons": "^5.11.0",
63
63
  "fifo-logger": "^1.0.0",
64
64
  "react": ">=18.0.0",
65
65
  "react-dom": ">=18.0.0"
66
66
  },
67
67
  "dependencies": {
68
- "@blueprintjs/select": "^5.2.0",
69
- "@emotion/react": "^11.11.4",
70
- "@emotion/styled": "^11.11.5",
68
+ "@blueprintjs/select": "^5.2.2",
69
+ "@emotion/react": "^11.13.0",
70
+ "@emotion/styled": "^11.13.0",
71
71
  "@lukeed/uuid": "^2.0.1",
72
72
  "@popperjs/core": "^2.11.8",
73
73
  "@radix-ui/react-collapsible": "^1.1.0",
74
74
  "@radix-ui/react-radio-group": "^1.2.0",
75
75
  "@radix-ui/react-select": "^2.1.1",
76
- "@tanstack/react-query": "^5.49.0",
77
- "@tanstack/react-table": "^8.17.3",
76
+ "@tanstack/react-query": "^5.51.15",
77
+ "@tanstack/react-table": "^8.19.3",
78
78
  "biologic-converter": "^0.6.0",
79
79
  "cheminfo-types": "^1.7.3",
80
80
  "d3-scale-chromatic": "^3.1.0",
81
- "filelist-utils": "^1.11.0",
81
+ "filelist-utils": "^1.11.1",
82
82
  "immer": "^10.1.1",
83
83
  "jcampconverter": "^9.6.4",
84
84
  "lodash": "^4.17.21",
@@ -86,13 +86,13 @@
86
86
  "ml-peak-shape-generator": "^4.1.2",
87
87
  "ml-signal-processing": "^1.0.4",
88
88
  "ml-spectra-processing": "^14.5.1",
89
- "ms-spectrum": "^3.6.1",
89
+ "ms-spectrum": "^3.6.2",
90
90
  "netcdfjs": "^3.0.0",
91
91
  "react-d3-utils": "^1.0.0",
92
92
  "react-dropzone": "^14.2.3",
93
93
  "react-icons": "^5.2.1",
94
94
  "react-inspector": "^6.0.2",
95
- "react-plot": "^1.4.2",
95
+ "react-plot": "^2.0.0",
96
96
  "react-popper": "^2.3.0",
97
97
  "spc-parser": "^1.0.0",
98
98
  "tinycolor2": "^1.6.0",
@@ -100,43 +100,43 @@
100
100
  "wdf-parser": "^0.3.0"
101
101
  },
102
102
  "devDependencies": {
103
- "@babel/core": "^7.24.7",
103
+ "@babel/core": "^7.24.9",
104
104
  "@babel/preset-react": "^7.24.7",
105
- "@blueprintjs/core": "^5.10.4",
106
- "@blueprintjs/icons": "^5.10.0",
107
- "@playwright/experimental-ct-react": "^1.45.0",
108
- "@playwright/test": "^1.45.0",
109
- "@storybook/addon-essentials": "^8.1.11",
110
- "@storybook/addon-storysource": "^8.1.11",
111
- "@storybook/blocks": "^8.1.11",
112
- "@storybook/react": "^8.1.11",
113
- "@storybook/react-vite": "^8.1.11",
105
+ "@blueprintjs/core": "^5.11.0",
106
+ "@blueprintjs/icons": "^5.11.0",
107
+ "@playwright/experimental-ct-react": "^1.45.3",
108
+ "@playwright/test": "^1.45.3",
109
+ "@storybook/addon-essentials": "^8.2.6",
110
+ "@storybook/addon-storysource": "^8.2.6",
111
+ "@storybook/blocks": "^8.2.6",
112
+ "@storybook/react": "^8.2.6",
113
+ "@storybook/react-vite": "^8.2.6",
114
114
  "@types/babel__core": "^7.20.5",
115
115
  "@types/d3-scale-chromatic": "^3.0.3",
116
- "@types/lodash": "^4.17.6",
116
+ "@types/lodash": "^4.17.7",
117
117
  "@types/react": "^18.3.3",
118
118
  "@types/react-dom": "^18.3.0",
119
119
  "@types/react-inspector": "^4.0.6",
120
120
  "@types/tinycolor2": "^1.4.6",
121
121
  "@vitejs/plugin-react": "^4.3.1",
122
- "@vitest/coverage-v8": "^1.6.0",
122
+ "@vitest/coverage-v8": "^2.0.4",
123
123
  "cheminfo-font": "^1.13.0",
124
124
  "cross-env": "^7.0.3",
125
125
  "eslint": "^8.57.0",
126
- "eslint-config-zakodium": "^11.0.0",
126
+ "eslint-config-zakodium": "^11.2.0",
127
127
  "eslint-plugin-storybook": "^0.8.0",
128
128
  "fifo-logger": "^1.0.0",
129
- "prettier": "^3.3.2",
129
+ "prettier": "^3.3.3",
130
130
  "react": "^18.3.1",
131
131
  "react-dom": "^18.3.1",
132
132
  "react-error-boundary": "^4.0.13",
133
133
  "react-kbs": "^2.1.1",
134
134
  "react-ocl": "^6.1.0",
135
- "rimraf": "^5.0.7",
136
- "storybook": "^8.1.11",
137
- "typescript": "^5.5.2",
138
- "vite": "^5.3.2",
139
- "vitest": "^1.6.0"
135
+ "rimraf": "^6.0.1",
136
+ "storybook": "^8.2.6",
137
+ "typescript": "^5.5.4",
138
+ "vite": "^5.3.5",
139
+ "vitest": "^2.0.4"
140
140
  },
141
141
  "repository": {
142
142
  "type": "git",
@@ -1,12 +1,12 @@
1
1
  import { Dialog, DialogBody } from '@blueprintjs/core';
2
2
  import { IconName } from '@blueprintjs/icons';
3
- import { JSX, ReactNode } from 'react';
3
+ import { type ReactElement, ReactNode } from 'react';
4
4
 
5
5
  import { Toolbar, useOnOff } from '../../components';
6
6
 
7
7
  interface AboutDialogToolbarButtonProps {
8
8
  name: string;
9
- icon: IconName | JSX.Element;
9
+ icon: IconName | ReactElement;
10
10
  body: ReactNode;
11
11
  }
12
12
 
@@ -1,14 +1,8 @@
1
- import {
2
- ColumnDef,
3
- useReactTable,
4
- getCoreRowModel,
5
- SortingState,
6
- getSortedRowModel,
7
- } from '@tanstack/react-table';
1
+ import { ColumnDef, SortingState } from '@tanstack/react-table';
8
2
  import { useState } from 'react';
9
3
 
10
4
  import type { IrPeak } from '../../../app-data/index';
11
- import { Table, ValueRenderers } from '../../../components/index';
5
+ import { Table } from '../../../components/index';
12
6
 
13
7
  export interface IrColumnPreferences<T extends keyof IrPeak = keyof IrPeak> {
14
8
  visible?: boolean;
@@ -53,49 +47,19 @@ export function IrPeaksPanel(props: IrPeaksPanelProps) {
53
47
  }
54
48
 
55
49
  const [sorting, setSorting] = useState<SortingState>([]);
56
- const table = useReactTable({
57
- data: peaks,
58
- columns: defaultColumns,
59
- state: {
60
- sorting,
61
- columnVisibility: getColumnVisibility(),
62
- },
63
- onSortingChange: setSorting,
64
- getCoreRowModel: getCoreRowModel(),
65
- getSortedRowModel: getSortedRowModel(),
66
- });
50
+
67
51
  return (
68
- <Table bordered>
69
- <Table.Header>
70
- {table
71
- .getHeaderGroups()
72
- .map(({ headers }) =>
73
- headers.map((header) => (
74
- <ValueRenderers.Header
75
- style={{ cursor: 'pointer' }}
76
- onClick={header.column.getToggleSortingHandler()}
77
- key={header.id}
78
- value={header.column.columnDef.header?.toString()}
79
- sorted={header.column.getIsSorted()}
80
- />
81
- )),
82
- )}
83
- </Table.Header>
84
- {table.getRowModel().rows.map((row) => (
85
- <Table.Row key={row.id}>
86
- {row.getVisibleCells().map((cell) => {
87
- const value = (cell.column.columnDef.cell as CallableFunction)(
88
- cell.getContext(),
89
- );
90
- return (
91
- <ValueRenderers.Text
92
- key={cell.id}
93
- value={value !== undefined ? value : cell.getValue()}
94
- />
95
- );
96
- })}
97
- </Table.Row>
98
- ))}
99
- </Table>
52
+ <Table
53
+ bordered
54
+ data={peaks}
55
+ columns={defaultColumns}
56
+ reactTable={{
57
+ state: {
58
+ sorting,
59
+ columnVisibility: getColumnVisibility(),
60
+ },
61
+ onSortingChange: setSorting,
62
+ }}
63
+ />
100
64
  );
101
65
  }
@@ -1,7 +1,7 @@
1
1
  import type { FilterXYType } from 'ml-signal-processing';
2
2
  import filterXY from 'ml-signal-processing/FilterXYSchema.json';
3
3
 
4
- import { Button, Table, ValueRenderers } from '../../components/index';
4
+ import { Button, createTableColumnHelper, Table } from '../../components/index';
5
5
 
6
6
  export interface Filter<OptionsType = string | number> {
7
7
  name: FilterXYType['name'];
@@ -35,92 +35,106 @@ const defaultFilters = filterXY.anyOf.map(({ properties }) => {
35
35
  options,
36
36
  };
37
37
  });
38
+
39
+ const columnHelper = createTableColumnHelper<Filter>();
40
+
38
41
  export function SignalProcessingPanel(props: SignalProcessingPanelProps) {
39
42
  const { filters = [], onChange } = props;
40
43
 
44
+ const columns = [
45
+ columnHelper.display({
46
+ header: ' ',
47
+ cell: ({ row }) => {
48
+ return (
49
+ <div style={{ display: 'flex', gap: '3px' }}>
50
+ <Button
51
+ style={{ width: '15px' }}
52
+ intent="success"
53
+ onClick={() => {
54
+ const newFilters = [...filters];
55
+ newFilters.splice(
56
+ row.index + 1,
57
+ 0,
58
+ getDefaultFilter(defaultFilters[0]),
59
+ );
60
+ onChange?.(newFilters);
61
+ }}
62
+ >
63
+ +
64
+ </Button>
65
+ <Button
66
+ style={{ width: '15px' }}
67
+ intent="danger"
68
+ onClick={() => {
69
+ onChange?.(filters.filter((_, j) => j !== row.index));
70
+ }}
71
+ >
72
+ -
73
+ </Button>
74
+ </div>
75
+ );
76
+ },
77
+ }),
78
+ columnHelper.accessor('name', {
79
+ header: 'Name',
80
+ cell: ({ row, getValue }) => {
81
+ return (
82
+ <select
83
+ onChange={({ target }) => {
84
+ const value = Number(target.value);
85
+ if (!Number.isNaN(value)) {
86
+ const filter = getDefaultFilter(defaultFilters[value]);
87
+ const newFilters = [...filters];
88
+ newFilters[row.index] = filter;
89
+ onChange?.(newFilters);
90
+ }
91
+ }}
92
+ style={{ border: '1px solid black' }}
93
+ value={defaultFilters.findIndex((f) => f.name === getValue())}
94
+ >
95
+ {defaultFilters.map(({ name }, i: number) => (
96
+ <option key={name} value={i}>
97
+ {normalCase(name)}
98
+ </option>
99
+ ))}
100
+ </select>
101
+ );
102
+ },
103
+ }),
104
+ columnHelper.accessor('options', {
105
+ header: 'Options',
106
+ cell: ({ row, getValue }) => {
107
+ const options = getValue();
108
+ if (!options) return null;
109
+ return (
110
+ <>
111
+ {Object.entries(
112
+ defaultFilters.find((f) => f.name === row.original.name)
113
+ ?.options || {},
114
+ ).map((option) =>
115
+ optionInput(option, options, (value) => {
116
+ const FilterOptions = {
117
+ ...filters[row.index].options,
118
+ [option[0]]: value,
119
+ };
120
+ const filter = {
121
+ name: filters[row.index].name,
122
+ options: FilterOptions,
123
+ };
124
+ const newFilters = [...filters];
125
+ newFilters[row.index] = filter;
126
+ onChange?.(newFilters);
127
+ }),
128
+ )}
129
+ </>
130
+ );
131
+ },
132
+ }),
133
+ ];
134
+
41
135
  return (
42
136
  <div>
43
- <Table>
44
- <Table.Header>
45
- <ValueRenderers.Header value=" " />
46
- <ValueRenderers.Header value="Name" />
47
- <ValueRenderers.Header value="Options" />
48
- </Table.Header>
49
- {filters.map(({ name, options }, i) => (
50
- <Table.Row key={name} bordered>
51
- <ValueRenderers.Component>
52
- <div style={{ display: 'flex', gap: '3px' }}>
53
- <Button
54
- style={{ width: '15px' }}
55
- intent="success"
56
- onClick={() => {
57
- const newFilters = [...filters];
58
- newFilters.splice(
59
- i + 1,
60
- 0,
61
- getDefaultFilter(defaultFilters[0]),
62
- );
63
- onChange?.(newFilters);
64
- }}
65
- >
66
- +
67
- </Button>
68
- <Button
69
- style={{ width: '15px' }}
70
- intent="danger"
71
- onClick={() => {
72
- onChange?.(filters.filter((_, j) => j !== i));
73
- }}
74
- >
75
- -
76
- </Button>
77
- </div>
78
- </ValueRenderers.Component>
79
- <ValueRenderers.Component>
80
- <select
81
- onChange={({ target }) => {
82
- const value = Number(target.value);
83
- if (!Number.isNaN(value)) {
84
- const filter = getDefaultFilter(defaultFilters[value]);
85
- const newFilters = [...filters];
86
- newFilters[i] = filter;
87
- onChange?.(newFilters);
88
- }
89
- }}
90
- style={{ border: '1px solid black' }}
91
- value={defaultFilters.findIndex((f) => f.name === name)}
92
- >
93
- {defaultFilters.map(({ name }, i: number) => (
94
- <option key={name} value={i}>
95
- {normalCase(name)}
96
- </option>
97
- ))}
98
- </select>
99
- </ValueRenderers.Component>
100
- {options && (
101
- <ValueRenderers.Component>
102
- {Object.entries(
103
- defaultFilters.find((f) => f.name === name)?.options || {},
104
- ).map((option) =>
105
- optionInput(option, options, (value) => {
106
- const FilterOptions = {
107
- ...filters[i].options,
108
- [option[0]]: value,
109
- };
110
- const filter = {
111
- name: filters[i].name,
112
- options: FilterOptions,
113
- };
114
- const newFilters = [...filters];
115
- newFilters[i] = filter;
116
- onChange?.(newFilters);
117
- }),
118
- )}
119
- </ValueRenderers.Component>
120
- )}
121
- </Table.Row>
122
- ))}
123
- </Table>
137
+ <Table data={filters} columns={columns} bordered />
124
138
  {filters.length === 0 && (
125
139
  <Button
126
140
  style={{ width: '15px', margin: '5px 20px' }}
@@ -136,6 +150,7 @@ export function SignalProcessingPanel(props: SignalProcessingPanelProps) {
136
150
  </div>
137
151
  );
138
152
  }
153
+
139
154
  function getDefaultFilter({ options, name }: Filter<FilterOptionsInfo>) {
140
155
  if (options) {
141
156
  const result: Record<string, string | number> = {};
@@ -147,10 +162,12 @@ function getDefaultFilter({ options, name }: Filter<FilterOptionsInfo>) {
147
162
  }
148
163
  return { name };
149
164
  }
165
+
150
166
  function normalCase(str: string) {
151
167
  const result = str.replaceAll(/(?<upper>[A-Z])/g, ' $<upper>').trim();
152
168
  return result.charAt(0).toUpperCase() + result.slice(1);
153
169
  }
170
+
154
171
  function optionInput(
155
172
  [key, { description, choices }]: [string, FilterOptionsInfo],
156
173
  options: Record<string, string | number>,
@@ -3,9 +3,9 @@ import styled from '@emotion/styled';
3
3
  import { useMemo } from 'react';
4
4
 
5
5
  import {
6
+ getMeasurement,
6
7
  MeasurementBase,
7
8
  MeasurementKind,
8
- getMeasurement,
9
9
  useAppDispatch,
10
10
  useAppState,
11
11
  } from '../../../app-data';
@@ -20,10 +20,10 @@ import {
20
20
  import { MeasurementConfigPanel } from '../index';
21
21
 
22
22
  import {
23
- MeasurementColorPreview,
24
23
  MeasurementCheckbox,
25
- MeasurementVisibilityToggle,
24
+ MeasurementColorPreview,
26
25
  MeasurementSelectedVisibilityChange,
26
+ MeasurementVisibilityToggle,
27
27
  useMeasurementPanel,
28
28
  } from '.';
29
29
 
@@ -90,7 +90,7 @@ const MeasurementsTableRowData = styled.tr`
90
90
  line-height: 1.25rem;
91
91
  `;
92
92
 
93
- const MeasurementsIconsContainer = styled.td`
93
+ const MeasurementsIconsContainer = styled.th`
94
94
  display: flex;
95
95
  justify-content: flex-start;
96
96
  align-items: center;
@@ -205,24 +205,22 @@ function MeasurementsTableHeader({
205
205
  return (
206
206
  <thead>
207
207
  <MeasurementsTableHeaderStyled>
208
- <th>
209
- <MeasurementsIconsContainer
210
- style={{
211
- paddingLeft: '26px',
208
+ <MeasurementsIconsContainer
209
+ style={{
210
+ paddingLeft: '26px',
211
+ }}
212
+ >
213
+ <MeasurementCheckbox
214
+ checked={allSelected}
215
+ onSelectCheckbox={() => {
216
+ onSelectLink(!allSelected);
212
217
  }}
213
- >
214
- <MeasurementCheckbox
215
- checked={allSelected}
216
- onSelectCheckbox={() => {
217
- onSelectLink(!allSelected);
218
- }}
219
- />
220
- <MeasurementSelectedVisibilityChange
221
- kind={kind}
222
- isVisible={selectedVisible}
223
- />
224
- </MeasurementsIconsContainer>
225
- </th>
218
+ />
219
+ <MeasurementSelectedVisibilityChange
220
+ kind={kind}
221
+ isVisible={selectedVisible}
222
+ />
223
+ </MeasurementsIconsContainer>
226
224
  <TableHeaderFilename>Filename</TableHeaderFilename>
227
225
  <TableHeaderTechnique>Technique</TableHeaderTechnique>
228
226
  </MeasurementsTableHeaderStyled>
@@ -1,5 +1,5 @@
1
1
  import { Panel } from '@blueprintjs/core';
2
- import { createContext, useContext } from 'react';
2
+ import { createContext, type ReactNode, useContext } from 'react';
3
3
 
4
4
  export interface MeasurementState {
5
5
  openPanel?: (panel: Panel<object>) => void;
@@ -21,7 +21,7 @@ export function MeasurementPanelProvider({
21
21
  children,
22
22
  value,
23
23
  }: {
24
- children: React.ReactNode;
24
+ children: ReactNode;
25
25
  value: MeasurementState;
26
26
  }) {
27
27
  return (
@@ -1,7 +1,8 @@
1
1
  /** @jsxImportSource @emotion/react */
2
2
  import { css } from '@emotion/react';
3
3
  import styled from '@emotion/styled';
4
- import * as Select from '@radix-ui/react-select';
4
+ import { Button, MenuItem } from '@blueprintjs/core';
5
+ import { ItemRenderer, Select } from '@blueprintjs/select';
5
6
  import * as scaleChromatic from 'd3-scale-chromatic';
6
7
  import { FaChevronDown } from 'react-icons/fa';
7
8
 
@@ -53,86 +54,58 @@ export interface GradientSelectProps {
53
54
  value: GradientScaleName;
54
55
  onChange: (value: GradientScaleName) => void;
55
56
  }
56
-
57
+ const renderItem: ItemRenderer<GradientScaleName> = (
58
+ option,
59
+ { handleClick, handleFocus, modifiers },
60
+ ) => {
61
+ if (!modifiers.matchesPredicate) {
62
+ return null;
63
+ }
64
+ return (
65
+ <MenuItem
66
+ active={modifiers.active}
67
+ key={option}
68
+ onClick={handleClick}
69
+ onFocus={handleFocus}
70
+ roleStructure="listoption"
71
+ text={
72
+ <div>
73
+ {option}
74
+ <GradientSelectOption>
75
+ <div style={{ height: 15 }}>
76
+ <FixedGradientPreview gradient={option} />
77
+ </div>
78
+ </GradientSelectOption>
79
+ </div>
80
+ }
81
+ />
82
+ );
83
+ };
57
84
  export function GradientSelect(props: GradientSelectProps) {
58
85
  const { value, onChange } = props;
59
86
  return (
60
87
  <GradientSelectListbox>
61
- <Select.Root value={value} onValueChange={onChange}>
62
- <Select.Trigger
88
+ <Select
89
+ popoverProps={{ matchTargetWidth: true }}
90
+ activeItem={value}
91
+ onItemSelect={onChange}
92
+ items={scaleOptions}
93
+ itemRenderer={renderItem}
94
+ filterable={false}
95
+ fill
96
+ >
97
+ <Button
63
98
  css={css`
64
99
  width: 100%;
65
100
  height: 30px;
66
101
  padding: 4px;
102
+ display: block;
67
103
  `}
68
104
  >
69
- <Select.Value>
70
- <FixedGradientPreview gradient={value} />
71
- <GradientSelectChevron />
72
- </Select.Value>
73
- </Select.Trigger>
74
- <Select.Portal>
75
- <Select.Content
76
- position="popper"
77
- sideOffset={10}
78
- css={css`
79
- background-color: white;
80
- width: var(--radix-select-trigger-width);
81
- border: 1px solid darkgray;
82
- border-radius: 0.25rem;
83
- padding: 4px;
84
- `}
85
- >
86
- <Select.Viewport>
87
- {scaleOptions.map((option) => (
88
- <Select.Item
89
- key={option}
90
- value={option}
91
- css={css`
92
- outline: none;
93
- padding: 8px 0 8px 0;
94
- cursor: pointer;
95
- margin-left: 20px;
96
- &[data-state='checked'] {
97
- font-weight: bold;
98
- }
99
- &[data-state='unchecked'] {
100
- opacity: 1;
101
- }
102
-
103
- &:not([data-highlighted]) span {
104
- margin-left: 12px;
105
- }
106
- &[data-highlighted] {
107
- span {
108
- margin-left: 4px;
109
- }
110
- ::before {
111
- content: '';
112
- display: inline-block;
113
- width: 8px;
114
- height: 8px;
115
- border-radius: 1px;
116
- filter: brightness(60%);
117
- background-color: dimgray;
118
- }
119
- }
120
- `}
121
- >
122
- <Select.ItemText>
123
- {option}
124
- <GradientSelectOption>
125
- <div style={{ height: 15 }}>
126
- <FixedGradientPreview gradient={option} />
127
- </div>
128
- </GradientSelectOption>
129
- </Select.ItemText>
130
- </Select.Item>
131
- ))}
132
- </Select.Viewport>
133
- </Select.Content>
134
- </Select.Portal>
135
- </Select.Root>
105
+ <FixedGradientPreview gradient={value} />
106
+ <GradientSelectChevron />
107
+ </Button>
108
+ </Select>
136
109
  </GradientSelectListbox>
137
110
  );
138
111
  }
@@ -7,7 +7,7 @@ import {
7
7
  } from '@blueprintjs/core';
8
8
  import { css } from '@emotion/react';
9
9
 
10
- import { Button } from '..';
10
+ import { Button } from '../button';
11
11
 
12
12
  interface ConfirmDialogProps extends Omit<DialogProps, 'isCloseButtonShown'> {
13
13
  onConfirm: () => void;