react-science 19.11.0 → 20.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 (234) hide show
  1. package/lib/components/accordion/accordion.d.ts +2 -2
  2. package/lib/components/accordion/accordion.d.ts.map +1 -1
  3. package/lib/components/accordion/accordion_context_provider.d.ts +1 -1
  4. package/lib/components/accordion/accordion_context_provider.d.ts.map +1 -1
  5. package/lib/components/activity_bar/activity_bar.d.ts +2 -2
  6. package/lib/components/activity_bar/activity_bar.d.ts.map +1 -1
  7. package/lib/components/activity_bar/activity_bar.js +5 -1
  8. package/lib/components/activity_bar/activity_bar.js.map +1 -1
  9. package/lib/components/activity_panel/activity_panel.d.ts +2 -2
  10. package/lib/components/activity_panel/activity_panel.d.ts.map +1 -1
  11. package/lib/components/button/Button.d.ts +1 -1
  12. package/lib/components/button/Button.d.ts.map +1 -1
  13. package/lib/components/button/Button.js +30 -22
  14. package/lib/components/button/Button.js.map +1 -1
  15. package/lib/components/color-picker/color-picker-dropdown/ColorPickerDropdown.d.ts +3 -3
  16. package/lib/components/color-picker/color-picker-dropdown/ColorPickerDropdown.d.ts.map +1 -1
  17. package/lib/components/color-picker/color-picker-dropdown/ColorPickerDropdown.js +2 -2
  18. package/lib/components/color-picker/color-picker-dropdown/ColorPickerDropdown.js.map +1 -1
  19. package/lib/components/color-picker/gradient_select/gradient_select.d.ts +1 -1
  20. package/lib/components/color-picker/gradient_select/gradient_select.d.ts.map +1 -1
  21. package/lib/components/color-picker/gradient_select/gradient_select.js +1 -1
  22. package/lib/components/color-picker/gradient_select/gradient_select.js.map +1 -1
  23. package/lib/components/color-picker/preview/ColorPreview.d.ts +1 -1
  24. package/lib/components/color-picker/preview/ColorPreview.d.ts.map +1 -1
  25. package/lib/components/color-picker/preview/FixedColorPreview.d.ts +1 -1
  26. package/lib/components/color-picker/preview/FixedColorPreview.d.ts.map +1 -1
  27. package/lib/components/color-picker/preview/FixedGradientPreview.d.ts +1 -1
  28. package/lib/components/color-picker/preview/FixedGradientPreview.d.ts.map +1 -1
  29. package/lib/components/color-picker/react-color/ColorPicker.d.ts +1 -1
  30. package/lib/components/color-picker/react-color/ColorPicker.d.ts.map +1 -1
  31. package/lib/components/color-picker/react-color/ColorPicker.js +2 -2
  32. package/lib/components/color-picker/react-color/ColorPicker.js.map +1 -1
  33. package/lib/components/color-picker/react-color/common/Alpha.d.ts +1 -1
  34. package/lib/components/color-picker/react-color/common/Alpha.d.ts.map +1 -1
  35. package/lib/components/color-picker/react-color/common/CheckBoard.d.ts +1 -1
  36. package/lib/components/color-picker/react-color/common/CheckBoard.d.ts.map +1 -1
  37. package/lib/components/color-picker/react-color/common/EditableInput.d.ts +1 -1
  38. package/lib/components/color-picker/react-color/common/EditableInput.d.ts.map +1 -1
  39. package/lib/components/color-picker/react-color/common/Hue.d.ts +1 -1
  40. package/lib/components/color-picker/react-color/common/Hue.d.ts.map +1 -1
  41. package/lib/components/color-picker/react-color/common/Saturation.d.ts +1 -1
  42. package/lib/components/color-picker/react-color/common/Saturation.d.ts.map +1 -1
  43. package/lib/components/color-picker/react-color/sketch/SketchFields.d.ts +2 -2
  44. package/lib/components/color-picker/react-color/sketch/SketchFields.d.ts.map +1 -1
  45. package/lib/components/color-picker/react-color/sketch/SketchPresetColors.d.ts +1 -1
  46. package/lib/components/color-picker/react-color/sketch/SketchPresetColors.d.ts.map +1 -1
  47. package/lib/components/dialog/ConfirmDialog.d.ts +1 -1
  48. package/lib/components/dialog/ConfirmDialog.d.ts.map +1 -1
  49. package/lib/components/doi/doi.d.ts +1 -1
  50. package/lib/components/doi/doi.d.ts.map +1 -1
  51. package/lib/components/doi/doi_logo.d.ts +1 -1
  52. package/lib/components/doi/doi_logo.d.ts.map +1 -1
  53. package/lib/components/drop-zone/DropZone.d.ts +2 -2
  54. package/lib/components/drop-zone/DropZone.d.ts.map +1 -1
  55. package/lib/components/form/components/input/checkbox.d.ts +1 -1
  56. package/lib/components/form/components/input/checkbox.d.ts.map +1 -1
  57. package/lib/components/form/components/input/color_picker.d.ts +1 -1
  58. package/lib/components/form/components/input/color_picker.d.ts.map +1 -1
  59. package/lib/components/form/components/input/input.d.ts +1 -1
  60. package/lib/components/form/components/input/input.d.ts.map +1 -1
  61. package/lib/components/form/components/input/numeric_input.d.ts +2 -1
  62. package/lib/components/form/components/input/numeric_input.d.ts.map +1 -1
  63. package/lib/components/form/components/input/numeric_input.js.map +1 -1
  64. package/lib/components/form/components/input/radio_group.d.ts +1 -1
  65. package/lib/components/form/components/input/radio_group.d.ts.map +1 -1
  66. package/lib/components/form/components/input/radio_group.js.map +1 -1
  67. package/lib/components/form/components/input/reset_button.d.ts +1 -1
  68. package/lib/components/form/components/input/reset_button.d.ts.map +1 -1
  69. package/lib/components/form/components/input/select.d.ts +1 -1
  70. package/lib/components/form/components/input/select.d.ts.map +1 -1
  71. package/lib/components/form/components/input/submit_button.d.ts +1 -1
  72. package/lib/components/form/components/input/submit_button.d.ts.map +1 -1
  73. package/lib/components/form/components/input/submit_button.js +2 -2
  74. package/lib/components/form/components/input/submit_button.js.map +1 -1
  75. package/lib/components/form/components/input/switch.d.ts +1 -1
  76. package/lib/components/form/components/input/switch.d.ts.map +1 -1
  77. package/lib/components/form/components/input_groups/form.d.ts +1 -1
  78. package/lib/components/form/components/input_groups/form.d.ts.map +1 -1
  79. package/lib/components/form/components/input_groups/form_group.d.ts +1 -1
  80. package/lib/components/form/components/input_groups/form_group.d.ts.map +1 -1
  81. package/lib/components/form/components/layout/Section.d.ts +1 -1
  82. package/lib/components/form/components/layout/Section.d.ts.map +1 -1
  83. package/lib/components/fullscreen/fullscreen_context.provider.d.ts +4 -2
  84. package/lib/components/fullscreen/fullscreen_context.provider.d.ts.map +1 -1
  85. package/lib/components/fullscreen/fullscreen_context.provider.js.map +1 -1
  86. package/lib/components/fullscreen/fullscreen_toolbar_button.d.ts +1 -1
  87. package/lib/components/fullscreen/fullscreen_toolbar_button.d.ts.map +1 -1
  88. package/lib/components/header/Header.d.ts +1 -1
  89. package/lib/components/header/Header.d.ts.map +1 -1
  90. package/lib/components/header/PanelHeader.d.ts +1 -1
  91. package/lib/components/header/PanelHeader.d.ts.map +1 -1
  92. package/lib/components/icon.d.ts +1 -1
  93. package/lib/components/icon.d.ts.map +1 -1
  94. package/lib/components/info-panel/InfoPanel.d.ts +1 -1
  95. package/lib/components/info-panel/InfoPanel.d.ts.map +1 -1
  96. package/lib/components/info-panel/InfoPanel.js +13 -10
  97. package/lib/components/info-panel/InfoPanel.js.map +1 -1
  98. package/lib/components/inline_editable_renderer/inline_editable_renderer.d.ts +1 -1
  99. package/lib/components/inline_editable_renderer/inline_editable_renderer.d.ts.map +1 -1
  100. package/lib/components/input/radio-button-group/RadioButton.d.ts +1 -1
  101. package/lib/components/input/radio-button-group/RadioButton.d.ts.map +1 -1
  102. package/lib/components/input/radio-button-group/RadioButtonGroup.d.ts +1 -1
  103. package/lib/components/input/radio-button-group/RadioButtonGroup.d.ts.map +1 -1
  104. package/lib/components/input/radio-button-group/RadioButtonGroup.js +5 -4
  105. package/lib/components/input/radio-button-group/RadioButtonGroup.js.map +1 -1
  106. package/lib/components/input/utils/SubText.d.ts +1 -1
  107. package/lib/components/input/utils/SubText.d.ts.map +1 -1
  108. package/lib/components/logger/FifoLoggerDialog.d.ts +1 -1
  109. package/lib/components/logger/FifoLoggerDialog.d.ts.map +1 -1
  110. package/lib/components/logger/FifoLoggerProvider.d.ts +1 -1
  111. package/lib/components/logger/FifoLoggerProvider.d.ts.map +1 -1
  112. package/lib/components/logger/FifoLoggerToolbarItem.d.ts +1 -1
  113. package/lib/components/logger/FifoLoggerToolbarItem.d.ts.map +1 -1
  114. package/lib/components/root-layout/root_layout.d.ts +1 -1
  115. package/lib/components/root-layout/root_layout.d.ts.map +1 -1
  116. package/lib/components/root-layout/root_layout.js +1 -2
  117. package/lib/components/root-layout/root_layout.js.map +1 -1
  118. package/lib/components/root-layout/root_layout_context.provider.d.ts +1 -1
  119. package/lib/components/root-layout/root_layout_context.provider.d.ts.map +1 -1
  120. package/lib/components/selected-total/SelectedTotal.d.ts +1 -1
  121. package/lib/components/selected-total/SelectedTotal.d.ts.map +1 -1
  122. package/lib/components/split_pane/split_pane.d.ts +1 -1
  123. package/lib/components/split_pane/split_pane.d.ts.map +1 -1
  124. package/lib/components/split_pane/split_pane.js.map +1 -1
  125. package/lib/components/split_pane/use_split_pane_size.d.ts +1 -1
  126. package/lib/components/split_pane/use_split_pane_size.d.ts.map +1 -1
  127. package/lib/components/svg/styled/svg_styled_line.d.ts +1 -1
  128. package/lib/components/svg/styled/svg_styled_line.d.ts.map +1 -1
  129. package/lib/components/svg/styled/svg_styled_path.d.ts +1 -1
  130. package/lib/components/svg/styled/svg_styled_path.d.ts.map +1 -1
  131. package/lib/components/svg/styled/svg_styled_text.d.ts +1 -1
  132. package/lib/components/svg/styled/svg_styled_text.d.ts.map +1 -1
  133. package/lib/components/table/default_table_cell.d.ts +1 -1
  134. package/lib/components/table/default_table_cell.d.ts.map +1 -1
  135. package/lib/components/table/flash_row/flashed_row_provider.d.ts +1 -1
  136. package/lib/components/table/flash_row/flashed_row_provider.d.ts.map +1 -1
  137. package/lib/components/table/flash_row/use_flash_row_effect.d.ts +1 -1
  138. package/lib/components/table/flash_row/use_flash_row_effect.d.ts.map +1 -1
  139. package/lib/components/table/flash_row/use_flash_row_effect.js.map +1 -1
  140. package/lib/components/table/preview_table.d.ts +1 -1
  141. package/lib/components/table/preview_table.d.ts.map +1 -1
  142. package/lib/components/table/reorder_rows/draggable_row_context.d.ts +4 -2
  143. package/lib/components/table/reorder_rows/draggable_row_context.d.ts.map +1 -1
  144. package/lib/components/table/reorder_rows/draggable_row_context.js.map +1 -1
  145. package/lib/components/table/reorder_rows/draggable_row_tr.d.ts +1 -1
  146. package/lib/components/table/reorder_rows/draggable_row_tr.d.ts.map +1 -1
  147. package/lib/components/table/reorder_rows/draggable_row_tr.js.map +1 -1
  148. package/lib/components/table/reorder_rows/item_data.d.ts +1 -1
  149. package/lib/components/table/reorder_rows/item_data.d.ts.map +1 -1
  150. package/lib/components/table/reorder_rows/item_data.js.map +1 -1
  151. package/lib/components/table/reorder_rows/item_order_provider.d.ts +1 -1
  152. package/lib/components/table/reorder_rows/item_order_provider.d.ts.map +1 -1
  153. package/lib/components/table/reorder_rows/item_order_provider.js +10 -5
  154. package/lib/components/table/reorder_rows/item_order_provider.js.map +1 -1
  155. package/lib/components/table/reorder_rows/table_drag_row_handler.d.ts +1 -1
  156. package/lib/components/table/reorder_rows/table_drag_row_handler.d.ts.map +1 -1
  157. package/lib/components/table/reorder_rows/use_drop_monitor.d.ts +1 -1
  158. package/lib/components/table/reorder_rows/use_drop_monitor.d.ts.map +1 -1
  159. package/lib/components/table/reorder_rows/use_drop_monitor.js.map +1 -1
  160. package/lib/components/table/table_body.d.ts +1 -1
  161. package/lib/components/table/table_body.d.ts.map +1 -1
  162. package/lib/components/table/table_header.d.ts +1 -1
  163. package/lib/components/table/table_header.d.ts.map +1 -1
  164. package/lib/components/table/table_header_cell.d.ts +1 -1
  165. package/lib/components/table/table_header_cell.d.ts.map +1 -1
  166. package/lib/components/table/table_root.d.ts +2 -2
  167. package/lib/components/table/table_root.d.ts.map +1 -1
  168. package/lib/components/table/table_row.d.ts +3 -3
  169. package/lib/components/table/table_row.d.ts.map +1 -1
  170. package/lib/components/table/table_row.js.map +1 -1
  171. package/lib/components/table/table_row_cell.d.ts +1 -1
  172. package/lib/components/table/table_row_cell.d.ts.map +1 -1
  173. package/lib/components/table/table_scroll_container.d.ts +2 -2
  174. package/lib/components/table/table_scroll_container.d.ts.map +1 -1
  175. package/lib/components/table/use_table_scroll.d.ts +1 -1
  176. package/lib/components/table/use_table_scroll.d.ts.map +1 -1
  177. package/lib/components/toolbar/OverflowButton.d.ts +3 -3
  178. package/lib/components/toolbar/OverflowButton.d.ts.map +1 -1
  179. package/lib/components/toolbar/OverflowButton.js +2 -4
  180. package/lib/components/toolbar/OverflowButton.js.map +1 -1
  181. package/lib/components/toolbar/PanelPreferencesToolbar.d.ts +1 -1
  182. package/lib/components/toolbar/PanelPreferencesToolbar.d.ts.map +1 -1
  183. package/lib/components/toolbar/Toolbar.d.ts +8 -301
  184. package/lib/components/toolbar/Toolbar.d.ts.map +1 -1
  185. package/lib/components/toolbar/Toolbar.js +13 -13
  186. package/lib/components/toolbar/Toolbar.js.map +1 -1
  187. package/lib/components/toolbar/TooltipHelpContent.d.ts +1 -1
  188. package/lib/components/toolbar/TooltipHelpContent.d.ts.map +1 -1
  189. package/lib/components/toolbar/useCheckOverflow.d.ts +2 -1
  190. package/lib/components/toolbar/useCheckOverflow.d.ts.map +1 -1
  191. package/lib/components/toolbar/useCheckOverflow.js.map +1 -1
  192. package/lib/components/value-renderers/Boolean.d.ts +1 -1
  193. package/lib/components/value-renderers/Boolean.d.ts.map +1 -1
  194. package/lib/components/value-renderers/Color.d.ts +1 -1
  195. package/lib/components/value-renderers/Color.d.ts.map +1 -1
  196. package/lib/components/value-renderers/Component.d.ts +1 -1
  197. package/lib/components/value-renderers/Component.d.ts.map +1 -1
  198. package/lib/components/value-renderers/Number.d.ts +1 -1
  199. package/lib/components/value-renderers/Number.d.ts.map +1 -1
  200. package/lib/components/value-renderers/ObjectRenderer.d.ts +1 -1
  201. package/lib/components/value-renderers/ObjectRenderer.d.ts.map +1 -1
  202. package/lib/components/value-renderers/Text.d.ts +1 -1
  203. package/lib/components/value-renderers/Text.d.ts.map +1 -1
  204. package/lib/components/value-renderers/Title.d.ts +1 -1
  205. package/lib/components/value-renderers/Title.d.ts.map +1 -1
  206. package/package.json +49 -51
  207. package/src/components/activity_bar/activity_bar.tsx +5 -1
  208. package/src/components/button/Button.tsx +39 -42
  209. package/src/components/color-picker/color-picker-dropdown/ColorPickerDropdown.tsx +8 -6
  210. package/src/components/color-picker/gradient_select/gradient_select.tsx +1 -1
  211. package/src/components/color-picker/react-color/ColorPicker.tsx +8 -4
  212. package/src/components/color-picker/react-color/sketch/SketchFields.tsx +1 -1
  213. package/src/components/form/components/input/numeric_input.tsx +2 -0
  214. package/src/components/form/components/input/radio_group.tsx +2 -2
  215. package/src/components/form/components/input/submit_button.tsx +2 -2
  216. package/src/components/fullscreen/fullscreen_context.provider.tsx +4 -1
  217. package/src/components/info-panel/InfoPanel.tsx +13 -12
  218. package/src/components/input/radio-button-group/RadioButtonGroup.tsx +9 -4
  219. package/src/components/root-layout/root_layout.tsx +2 -4
  220. package/src/components/split_pane/split_pane.tsx +5 -2
  221. package/src/components/split_pane/use_split_pane_size.tsx +1 -1
  222. package/src/components/table/flash_row/use_flash_row_effect.ts +1 -1
  223. package/src/components/table/reorder_rows/draggable_row_context.ts +5 -2
  224. package/src/components/table/reorder_rows/draggable_row_tr.tsx +1 -1
  225. package/src/components/table/reorder_rows/item_data.ts +4 -1
  226. package/src/components/table/reorder_rows/item_order_provider.tsx +8 -6
  227. package/src/components/table/reorder_rows/use_drop_monitor.ts +1 -1
  228. package/src/components/table/table_root.tsx +1 -1
  229. package/src/components/table/table_row.tsx +3 -3
  230. package/src/components/table/table_scroll_container.tsx +3 -3
  231. package/src/components/table/use_table_scroll.ts +1 -1
  232. package/src/components/toolbar/OverflowButton.tsx +9 -10
  233. package/src/components/toolbar/Toolbar.tsx +36 -29
  234. package/src/components/toolbar/useCheckOverflow.tsx +2 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Title.d.ts","sourceRoot":"","sources":["../../../src/components/value-renderers/Title.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD,MAAM,WAAW,UAAW,SAAQ,mBAAmB;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAMD,wBAAgB,KAAK,CAAC,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,EAAE,UAAU,2CAEpD"}
1
+ {"version":3,"file":"Title.d.ts","sourceRoot":"","sources":["../../../src/components/value-renderers/Title.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD,MAAM,WAAW,UAAW,SAAQ,mBAAmB;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAMD,wBAAgB,KAAK,CAAC,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,EAAE,UAAU,+BAEpD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-science",
3
- "version": "19.11.0",
3
+ "version": "20.1.0",
4
4
  "description": "React components to build scientific applications UI",
5
5
  "type": "module",
6
6
  "exports": {
@@ -23,7 +23,7 @@
23
23
  "createData": "npm run prepack && node scripts/createData",
24
24
  "dev": "echo Use npm run dev-app or npm run storybook && exit 1",
25
25
  "dev-app": "vite --open /pages/demo.html",
26
- "eslint": "eslint . --cache --max-warnings=40",
26
+ "eslint": "eslint . --cache --max-warnings=39",
27
27
  "eslint-fix": "npm run eslint -- --fix",
28
28
  "playwright": "npm run playwright-ct -- --project chromium && npm run playwright-e2e -- --project chromium",
29
29
  "playwright-ct": "playwright test -c playwright-ct.config.mts",
@@ -48,22 +48,23 @@
48
48
  },
49
49
  "homepage": "https://github.com/zakodium-oss/react-science#readme",
50
50
  "peerDependencies": {
51
- "@blueprintjs/core": "^6.0.0",
52
- "@blueprintjs/icons": "^6.0.0",
53
- "@blueprintjs/select": "^6.0.0",
54
- "fifo-logger": "^1.0.0 || ^2.0.0",
55
- "react": ">=18.0.0",
56
- "react-dom": ">=18.0.0"
51
+ "@blueprintjs/core": "^6.16.0",
52
+ "@blueprintjs/icons": "^6.11.0",
53
+ "@blueprintjs/select": "^6.3.0",
54
+ "fifo-logger": "^2.0.1",
55
+ "react": "^18.3.1 || ^19.2.7",
56
+ "react-dom": "^18.3.1 || ^19.2.7"
57
57
  },
58
58
  "dependencies": {
59
- "@atlaskit/pragmatic-drag-and-drop": "^1.8.0",
59
+ "@atlaskit/pragmatic-drag-and-drop": "^1.8.1",
60
60
  "@atlaskit/pragmatic-drag-and-drop-auto-scroll": "^2.1.5",
61
- "@atlaskit/pragmatic-drag-and-drop-hitbox": "^1.1.0",
61
+ "@atlaskit/pragmatic-drag-and-drop-hitbox": "^1.2.0",
62
62
  "@emotion/styled": "^11.14.1",
63
- "@radix-ui/react-use-controllable-state": "^1.2.2",
64
- "@tanstack/react-form": "^1.29.0",
63
+ "@radix-ui/react-use-controllable-state": "^1.2.3",
64
+ "@tanstack/react-form": "^1.33.0",
65
+ "@tanstack/react-store": "^0.11.0",
65
66
  "@tanstack/react-table": "^8.21.3",
66
- "@tanstack/react-virtual": "^3.13.24",
67
+ "@tanstack/react-virtual": "^3.14.2",
67
68
  "@zakodium/pdnd-esm": "^1.0.2",
68
69
  "d3-scale-chromatic": "^3.1.0",
69
70
  "react-d3-utils": "^3.1.2",
@@ -73,66 +74,63 @@
73
74
  "react-inspector": "^9.0.0",
74
75
  "tinycolor2": "^1.6.0",
75
76
  "ts-pattern": "^5.9.0",
76
- "zod": "^4.3.6"
77
+ "zod": "^4.4.3"
77
78
  },
78
79
  "devDependencies": {
79
- "@blueprintjs/core": "6.0.0",
80
- "@blueprintjs/icons": "6.0.0",
81
- "@blueprintjs/select": "6.0.0",
80
+ "@blueprintjs/core": "6.16.0",
81
+ "@blueprintjs/icons": "6.11.0",
82
+ "@blueprintjs/select": "6.3.0",
82
83
  "@floating-ui/react": "^0.27.19",
83
- "@playwright/experimental-ct-react": "^1.59.1",
84
- "@playwright/test": "^1.59.1",
85
- "@storybook/addon-docs": "^10.3.5",
86
- "@storybook/react-vite": "^10.3.5",
87
- "@tanstack/react-query": "^5.99.0",
84
+ "@playwright/experimental-ct-react": "^1.60.0",
85
+ "@playwright/test": "^1.60.0",
86
+ "@storybook/addon-docs": "^10.4.3",
87
+ "@storybook/react-vite": "^10.4.3",
88
+ "@tanstack/react-query": "^5.101.0",
88
89
  "@types/babel__core": "^7.20.5",
89
90
  "@types/d3-scale-chromatic": "^3.1.0",
90
- "@types/node": "^24.7.0",
91
- "@types/react": "^18.3.12",
92
- "@types/react-dom": "^18.3.1",
91
+ "@types/node": "^24.13.1",
92
+ "@types/react": "^18.3.31",
93
+ "@types/react-dom": "^18.3.7",
93
94
  "@types/tinycolor2": "^1.4.6",
94
- "@vitejs/plugin-react": "^6.0.1",
95
- "@vitest/coverage-v8": "^4.1.4",
95
+ "@vitejs/plugin-react": "^6.0.2",
96
+ "@vitest/coverage-v8": "^4.1.8",
96
97
  "@zakodium/tsconfig": "^1.0.5",
97
98
  "biologic-converter": "^1.0.0",
98
- "cheminfo-font": "^1.26.0",
99
+ "cheminfo-font": "^1.27.0",
99
100
  "cheminfo-types": "^1.15.0",
100
101
  "cross-env": "^10.1.0",
101
- "eslint": "^9.39.2",
102
+ "eslint": "^9.39.4",
102
103
  "eslint-config-zakodium": "^20.0.0",
103
- "eslint-plugin-storybook": "^10.3.5",
104
- "fifo-logger": "^2.0.1",
104
+ "eslint-plugin-storybook": "^10.4.3",
105
+ "fifo-logger": "2.0.1",
105
106
  "filelist-utils": "^1.11.3",
106
- "immer": "^11.1.4",
107
- "jcampconverter": "^12.2.7",
108
- "ml-gsd": "^13.1.1",
109
- "ml-peak-shape-generator": "^4.2.0",
110
- "ml-signal-processing": "^2.2.0",
111
- "ml-spectra-processing": "^14.28.1",
112
- "ms-spectrum": "^3.10.0",
107
+ "immer": "^11.1.8",
108
+ "jcampconverter": "^12.3.3",
109
+ "ml-gsd": "^14.1.0",
110
+ "ml-peak-shape-generator": "^5.1.0",
111
+ "ml-signal-processing": "^2.2.1",
112
+ "ml-spectra-processing": "^14.29.0",
113
+ "ms-spectrum": "^3.10.1",
113
114
  "netcdfjs": "^4.0.0",
114
115
  "postcss-styled-syntax": "^0.7.1",
115
- "prettier": "^3.8.3",
116
- "react": "^18.3.1",
117
- "react-dom": "^18.3.1",
118
- "react-error-boundary": "^6.1.1",
116
+ "prettier": "^3.8.4",
117
+ "react": "18.3.1",
118
+ "react-dom": "18.3.1",
119
+ "react-error-boundary": "^6.1.2",
119
120
  "react-kbs": "^3.1.0",
120
- "react-ocl": "^8.7.0",
121
+ "react-ocl": "^8.7.1",
121
122
  "react-plot": "^3.1.2",
122
123
  "rimraf": "^6.1.3",
123
124
  "spc-parser": "^2.0.0",
124
- "storybook": "^10.3.5",
125
- "stylelint": "^17.8.0",
125
+ "storybook": "^10.4.3",
126
+ "stylelint": "^17.13.0",
126
127
  "stylelint-config-standard": "^40.0.0",
127
128
  "typescript": "^6.0.3",
128
- "vite": "^8.0.8",
129
- "vitest": "^4.1.4",
129
+ "vite": "^8.0.16",
130
+ "vitest": "^4.1.8",
130
131
  "wdf-parser": "^1.0.0"
131
132
  },
132
133
  "volta": {
133
- "node": "24.15.0"
134
- },
135
- "overrides": {
136
- "storybook": "$storybook"
134
+ "node": "24.16.0"
137
135
  }
138
136
  }
@@ -43,8 +43,12 @@ export function ActivityBar(props: ActivityBarProps) {
43
43
  const ActivityButton = styled(Button)`
44
44
  font-size: 1.125em;
45
45
  width: fit-content;
46
+
47
+ /* Override the padding set by the large button group */
48
+ padding: var(--bp-surface-spacing) calc(var(--bp-surface-spacing) * 2) !important;
49
+
46
50
  .${Classes.ICON} {
47
- color: ${Colors.DARK_GRAY3};
51
+ color: ${Colors.DARK_GRAY3} !important;
48
52
  }
49
53
 
50
54
  .${Classes.TAG} {
@@ -7,11 +7,10 @@ import type {
7
7
  import {
8
8
  AnchorButton,
9
9
  Button as BlueprintButton,
10
- Icon,
10
+ Classes,
11
11
  Tag,
12
12
  Tooltip,
13
13
  } from '@blueprintjs/core';
14
- import type { CSSObject } from '@emotion/styled';
15
14
  import styled from '@emotion/styled';
16
15
  import type { ReactNode } from 'react';
17
16
 
@@ -41,21 +40,40 @@ const ButtonTag = styled(Tag)`
41
40
  z-index: 20;
42
41
  `;
43
42
 
44
- // Setting the line-height makes sure regular sized buttons have a
45
- // height consistent with the input fields and across variants.
46
- // Using the same line height as in the blueprint docs.
47
- const buttonStyles: CSSObject = {
48
- lineHeight: 1.15,
49
- position: 'relative',
50
- };
43
+ interface InnerButtonProps {
44
+ isIconButton: boolean;
45
+ }
46
+
47
+ /*
48
+ Setting the line-height makes sure that when passing regular text in icons instead of an svg, they are vertically centered
49
+ max-width makes sure buttons with tag or hoverability indicator (both implying absolutely positioned elements) keep their intended width
50
+ When a button just has an icon, we override BP styles and remove the margin-right, because if it also has tag prop this is required to keep the layout correct.
51
+ */
52
+ const buttonStyles = ({ isIconButton }: InnerButtonProps) => `
53
+ line-height: 1em;
54
+ position: relative;
55
+ max-width: ${isIconButton ? '30px' : 'none'};
56
+
57
+ & .${Classes.ICON} {
58
+ ${isIconButton ? 'margin-right: 0px;' : ''}
59
+ }
60
+ `;
51
61
 
52
- const TooltipAnchorButton = styled(AnchorButton)<{
53
- children: ReactNode;
54
- }>(buttonStyles);
62
+ function shouldForwardButtonProp(propName: string) {
63
+ return propName !== 'isIconButton';
64
+ }
55
65
 
56
- const TooltipButton = styled(BlueprintButton)<{ children: ReactNode }>(
57
- buttonStyles,
58
- );
66
+ const TooltipAnchorButton = styled(AnchorButton, {
67
+ shouldForwardProp: shouldForwardButtonProp,
68
+ })<InnerButtonProps>`
69
+ ${(props) => buttonStyles(props)}
70
+ `;
71
+
72
+ const TooltipButton = styled(BlueprintButton, {
73
+ shouldForwardProp: shouldForwardButtonProp,
74
+ })<InnerButtonProps>`
75
+ ${(props) => buttonStyles(props)}
76
+ `;
59
77
 
60
78
  export function Button(props: ButtonProps) {
61
79
  const { tooltipProps = {}, children, tag, tagProps, ...buttonProps } = props;
@@ -80,34 +98,13 @@ export function Button(props: ButtonProps) {
80
98
  <InnerButton
81
99
  {...targetProps}
82
100
  {...buttonProps}
83
- icon={
84
- /*
85
- icon and children will be children of the same node.
86
- Blueprintjs' stylesheet treats the presence of multiple child elements
87
- as there being icon and text, styling the icon with a right margin
88
- so that the text is not right next to it.
89
- In blueprint alone, this only happens when the button has children.
90
- Here, we need to handle the case when the button has a tag, which
91
- adds a sibling but should not affect the margin on its own.
92
- */
93
- tag ? (
94
- <>
95
- {children ? (
96
- <Icon icon={buttonProps.icon} />
97
- ) : (
98
- <div style={{ display: 'contents' }}>
99
- <Icon icon={buttonProps.icon} />
100
- </div>
101
- )}
102
- <ButtonTag round intent="success" {...tagProps}>
103
- {tag}
104
- </ButtonTag>
105
- </>
106
- ) : (
107
- buttonProps.icon
108
- )
109
- }
101
+ isIconButton={!children && !buttonProps.text}
110
102
  >
103
+ {tag && (
104
+ <ButtonTag round intent="success" {...tagProps}>
105
+ {tag}
106
+ </ButtonTag>
107
+ )}
111
108
  {children}
112
109
  </InnerButton>
113
110
  )}
@@ -1,5 +1,5 @@
1
- import type { PopoverProps } from '@blueprintjs/core';
2
- import { Popover } from '@blueprintjs/core';
1
+ import type { PopoverNextProps } from '@blueprintjs/core';
2
+ import { PopoverNext } from '@blueprintjs/core';
3
3
  import styled from '@emotion/styled';
4
4
 
5
5
  import FixedColorPreview from '../preview/FixedColorPreview.js';
@@ -16,7 +16,7 @@ export interface ColorPickerDropdownProps extends Pick<
16
16
  | 'onChangeComplete'
17
17
  | 'onBlur'
18
18
  > {
19
- popoverProps?: Omit<PopoverProps, 'content'>;
19
+ popoverProps?: Omit<PopoverNextProps, 'content'>;
20
20
 
21
21
  /**
22
22
  * To link with label
@@ -45,10 +45,12 @@ export function ColorPickerDropdown(props: ColorPickerDropdownProps) {
45
45
  const { hex } = colorHelper.toState(color || 'white');
46
46
 
47
47
  return (
48
- <Popover
48
+ <PopoverNext
49
49
  targetProps={{ style: { width: '100%' } }}
50
50
  content={<ColorPicker color={color} {...otherProps} />}
51
- minimal
51
+ shouldReturnFocusOnClose={false}
52
+ animation="minimal"
53
+ arrow={false}
52
54
  {...popoverProps}
53
55
  >
54
56
  <ColorPickerRoot type="button" id={id}>
@@ -56,6 +58,6 @@ export function ColorPickerDropdown(props: ColorPickerDropdownProps) {
56
58
  <FixedColorPreview color={hex} />
57
59
  </ColorPickerPreview>
58
60
  </ColorPickerRoot>
59
- </Popover>
61
+ </PopoverNext>
60
62
  );
61
63
  }
@@ -26,7 +26,7 @@ const GradientSelectChevron = styled(FaChevronDown)`
26
26
  right: 0.5rem;
27
27
  `;
28
28
 
29
- const GradientSelectOption = styled.li`
29
+ const GradientSelectOption = styled.div`
30
30
  display: flex;
31
31
  flex-direction: column;
32
32
  padding-top: 5px;
@@ -6,6 +6,7 @@ import { defaultColorPalette } from '../palette.js';
6
6
 
7
7
  import { Alpha, CheckBoard, Hue, Saturation } from './common/index.js';
8
8
  import * as colorHelper from './helpers/color.js';
9
+ import type { SketchFieldsProps } from './sketch/SketchFields.js';
9
10
  import SketchFields from './sketch/SketchFields.js';
10
11
  import SketchPresetColors from './sketch/SketchPresetColors.js';
11
12
 
@@ -168,11 +169,14 @@ export function ColorPicker(props: ColorPickerProps) {
168
169
  setState(colorHelper.toState(color, 0));
169
170
  }
170
171
 
171
- const handleChange = useCallback(
172
- (data: any, event: any) => {
172
+ const handleChange = useCallback<SketchFieldsProps['onChange']>(
173
+ (data, event) => {
173
174
  const isValidColor = colorHelper.simpleCheckForValidColor(data);
174
175
  if (isValidColor) {
175
- const colors = colorHelper.toState(data, data.h || state.oldHue);
176
+ const colors = colorHelper.toState(
177
+ data,
178
+ ('h' in data && data.h) || state.oldHue,
179
+ );
176
180
  setState(colors);
177
181
  if (onChangeComplete) {
178
182
  debounceRef.current(onChangeComplete, colors, event);
@@ -245,7 +249,7 @@ export function ColorPicker(props: ColorPickerProps) {
245
249
  />
246
250
  <SketchPresetColors
247
251
  colors={presetColors}
248
- onClick={(data, e) => handleChange?.(data as ChangeCallbackProps, e)}
252
+ onClick={(data, e) => handleChange(data, e)}
249
253
  onSwatchHover={handleSwatchHover}
250
254
  />
251
255
  </div>
@@ -5,7 +5,7 @@ import type { HSL, RGB } from '../ColorPicker.js';
5
5
  import { EditableInput } from '../common/index.js';
6
6
  import * as color from '../helpers/color.js';
7
7
 
8
- interface SketchFieldsProps {
8
+ export interface SketchFieldsProps {
9
9
  onChange: (
10
10
  data: (RGB | HSL | { hex: string }) & { source: string },
11
11
  e: Event,
@@ -10,6 +10,8 @@ interface NumericInputProps extends FormGroupInputProps, BPNumericInputProps {
10
10
  step?: number;
11
11
  min?: number;
12
12
  max?: number;
13
+
14
+ autoFocus?: boolean;
13
15
  }
14
16
 
15
17
  export function NumericInput(props: NumericInputProps) {
@@ -1,6 +1,6 @@
1
1
  import type { RadioGroupProps as BPRadioGroupProps } from '@blueprintjs/core';
2
2
  import { RadioGroup as BPRadioGroup } from '@blueprintjs/core';
3
- import type { FormEvent } from 'react';
3
+ import type { ChangeEvent } from 'react';
4
4
 
5
5
  import { useFieldContext } from '../../context/use_ts_form.ts';
6
6
  import { useFormContext } from '../input_groups/form_context.ts';
@@ -41,7 +41,7 @@ export function RadioGroup(props: RadioGroupProps) {
41
41
  .errors.map((e) => e.message)
42
42
  .at(0);
43
43
 
44
- function onChange(event: FormEvent<HTMLInputElement>) {
44
+ function onChange(event: ChangeEvent<HTMLInputElement>) {
45
45
  return field.handleChange(event.currentTarget.value);
46
46
  }
47
47
 
@@ -1,4 +1,4 @@
1
- import { useStore } from '@tanstack/react-form';
1
+ import { useSelector } from '@tanstack/react-store';
2
2
 
3
3
  import type { ButtonProps } from '../../../button/index.js';
4
4
  import { Button } from '../../../button/index.js';
@@ -10,7 +10,7 @@ export function SubmitButton(props: SubmitButtonProps) {
10
10
  const { intent, disabled, ...otherProps } = props;
11
11
 
12
12
  const form = useFormContext();
13
- const isSubmitting = useStore(form.store, (state) => state.isSubmitting);
13
+ const isSubmitting = useSelector(form.store, (state) => state.isSubmitting);
14
14
 
15
15
  return (
16
16
  <Button
@@ -4,12 +4,15 @@ import { useFullScreenHandle } from 'react-full-screen';
4
4
 
5
5
  import { fullscreenContext } from './fullscreen_context.js';
6
6
 
7
+ // Remove for React 19.
8
+ type RefObject<T> = MutableRefObject<T>;
9
+
7
10
  export interface FullscreenProviderProps {
8
11
  /**
9
12
  * Callback providing the ref which should be passed to the element that can be displayed fullscreen.
10
13
  * @param ref
11
14
  */
12
- children: (ref: MutableRefObject<HTMLDivElement | null>) => ReactNode;
15
+ children: (ref: RefObject<HTMLDivElement | null>) => ReactNode;
13
16
  /**
14
17
  * Callback which will be called in case toggling results in an error.
15
18
  * @param error - The error that happened. Value is not necessarily an instance of `Error` and may even be `undefined`.
@@ -277,19 +277,20 @@ function valueSearch(
277
277
  search: string,
278
278
  lowerCase = true,
279
279
  ): boolean {
280
+ let stringValue = match(value)
281
+ .with(P.boolean, String)
282
+ .with(P.number, String)
283
+ .with(P.string, (value) => {
284
+ return value === 'true' ? 'yes' : value === 'false' ? 'no' : value;
285
+ })
286
+ .with({}, (value) => JSON.stringify(value))
287
+ .otherwise(() => null);
288
+ if (stringValue === null) {
289
+ return true;
290
+ }
280
291
  if (lowerCase) {
281
- value = String(value as unknown).toLowerCase();
292
+ stringValue = stringValue.toLowerCase();
282
293
  search = search.toLowerCase();
283
294
  }
284
- return match(value)
285
- .with(P.boolean, (value) => String(value).includes(search))
286
- .with(P.number, (value) => String(value).includes(search))
287
- .with(P.string, (value) => {
288
- const newValue =
289
- value === 'true' ? 'yes' : value === 'false' ? 'no' : value;
290
-
291
- return newValue.includes(search);
292
- })
293
- .with({}, (value) => JSON.stringify(value).includes(search))
294
- .otherwise(() => true);
295
+ return stringValue.includes(search);
295
296
  }
@@ -1,6 +1,7 @@
1
1
  import type { RadioGroupProps, RadioProps } from '@blueprintjs/core';
2
2
  import { RadioGroup } from '@blueprintjs/core';
3
3
  import styled from '@emotion/styled';
4
+ import type { ReactElement } from 'react';
4
5
  import { Children, cloneElement } from 'react';
5
6
 
6
7
  import { RadioButton } from './RadioButton.js';
@@ -68,13 +69,17 @@ export function RadioButtonGroup(props: RadioButtonGroupProps) {
68
69
  return child;
69
70
  }
70
71
  if (child.type === RadioButton) {
71
- return cloneElement(child, {
72
- ...child.props,
72
+ const radioChild = child as ReactElement<
73
+ RadioProps,
74
+ typeof RadioButton
75
+ >;
76
+ return cloneElement(radioChild, {
77
+ ...radioChild.props,
73
78
  size,
74
79
  name,
75
80
  onChange,
76
- checked: child.props.value === selectedValue,
77
- disabled: groupDisabled || child.props.disabled,
81
+ checked: radioChild.props.value === selectedValue,
82
+ disabled: groupDisabled || radioChild.props.disabled,
78
83
  });
79
84
  }
80
85
  return child;
@@ -1,5 +1,5 @@
1
1
  import { BlueprintProvider, FocusStyleManager } from '@blueprintjs/core';
2
- import type { CSSProperties, MutableRefObject, ReactNode } from 'react';
2
+ import type { CSSProperties, ReactNode } from 'react';
3
3
  import { useCallback, useState } from 'react';
4
4
 
5
5
  import { AccordionProvider } from '../accordion/index.js';
@@ -43,9 +43,7 @@ export function RootLayout(props: RootLayoutProps) {
43
43
  id="root-layout"
44
44
  ref={(node) => {
45
45
  if (node) {
46
- const mutableRef =
47
- fullscreenRef as MutableRefObject<HTMLDivElement>;
48
- mutableRef.current = node;
46
+ fullscreenRef.current = node;
49
47
  refCallback(node);
50
48
  }
51
49
  }}
@@ -3,9 +3,9 @@ import styled from '@emotion/styled';
3
3
  import { useControllableState } from '@radix-ui/react-use-controllable-state';
4
4
  import type {
5
5
  CSSProperties,
6
+ MutableRefObject,
6
7
  PointerEvent as ReactPointerEvent,
7
8
  ReactNode,
8
- RefObject,
9
9
  } from 'react';
10
10
  import { useEffect, useReducer, useRef } from 'react';
11
11
  import { useResizeObserver } from 'react-d3-utils';
@@ -15,6 +15,9 @@ import type { SplitPaneSize, SplitPaneType } from './split_pane_helpers.js';
15
15
  import { parseSize, serializeSize } from './split_pane_helpers.js';
16
16
  import { useSplitPaneSize } from './use_split_pane_size.js';
17
17
 
18
+ // Remove for React 19.
19
+ type RefObject<T> = MutableRefObject<T>;
20
+
18
21
  export type SplitPaneDirection = 'vertical' | 'horizontal';
19
22
  export type SplitPaneSide = 'start' | 'end';
20
23
 
@@ -223,7 +226,7 @@ interface SplitterProps {
223
226
  direction: SplitPaneDirection;
224
227
  isOpen: boolean;
225
228
  isResizing: boolean;
226
- splitterRef: RefObject<HTMLDivElement>;
229
+ splitterRef: RefObject<HTMLDivElement | null>;
227
230
  }
228
231
 
229
232
  function Splitter(props: SplitterProps) {
@@ -12,7 +12,7 @@ import { serializeSize } from './split_pane_helpers.js';
12
12
  interface UseSplitPaneSizeOptions {
13
13
  controlledSide: SplitPaneSide;
14
14
  direction: SplitPaneDirection;
15
- splitterRef: RefObject<HTMLDivElement>;
15
+ splitterRef: RefObject<HTMLDivElement | null>;
16
16
  sizeType: SplitPaneType;
17
17
  onSizeChange: (newSize: ParsedSplitPaneSize) => void;
18
18
  onResize?: (newSize: SplitPaneSize) => void;
@@ -6,7 +6,7 @@ import { useFlashedRowContext } from './flashed_row_context.js';
6
6
 
7
7
  export function useFlashRowEffect(
8
8
  id: string,
9
- tableRowRef: RefObject<HTMLTableRowElement>,
9
+ tableRowRef: RefObject<HTMLTableRowElement | null>,
10
10
  ) {
11
11
  const [flashedItemId, setFlashedItemId] = useFlashedRowContext();
12
12
  useEffect(() => {
@@ -1,11 +1,14 @@
1
- import type { RefObject } from 'react';
1
+ import type { MutableRefObject } from 'react';
2
2
  import { createContext, useContext } from 'react';
3
3
 
4
4
  import type { DraggableItemState } from './item_data.js';
5
5
 
6
+ // Remove for React 19.
7
+ type RefObject<T> = MutableRefObject<T>;
8
+
6
9
  export interface DraggableRowContext {
7
10
  state: DraggableItemState;
8
- dragHandleRef: RefObject<HTMLButtonElement>;
11
+ dragHandleRef: RefObject<HTMLButtonElement | null>;
9
12
  }
10
13
 
11
14
  export const draggableRowContext = createContext<DraggableRowContext | null>(
@@ -73,7 +73,7 @@ export function TableDraggableRowTr<TData extends RowData>(
73
73
  );
74
74
  }
75
75
 
76
- const data = getItemData(row as Row<unknown>, instanceId);
76
+ const data = getItemData(row, instanceId);
77
77
 
78
78
  return combine(
79
79
  draggable({
@@ -11,7 +11,10 @@ export interface ItemData {
11
11
  [key: symbol]: unknown;
12
12
  }
13
13
 
14
- export function getItemData(row: Row<unknown>, instanceId: symbol): ItemData {
14
+ export function getItemData<RowType>(
15
+ row: Row<RowType>,
16
+ instanceId: symbol,
17
+ ): ItemData {
15
18
  return {
16
19
  [itemKey]: true,
17
20
  id: row.id,
@@ -43,14 +43,16 @@ export function ItemOrderProvider<T = unknown>(
43
43
  [items, onOrderChanged],
44
44
  );
45
45
 
46
- const value = useMemo(
47
- () => ({
46
+ const value = useMemo(() => {
47
+ // This assertion is necessary because the provider cannot contain the
48
+ // T type instantiated by this component.
49
+ const contextItems = items as Array<Row<unknown>>;
50
+ return {
48
51
  reorderItem,
49
- items: items as Array<Row<unknown>>,
52
+ items: contextItems,
50
53
  instanceId,
51
- }),
52
- [reorderItem, items, instanceId],
53
- );
54
+ };
55
+ }, [reorderItem, items, instanceId]);
54
56
 
55
57
  return (
56
58
  <itemOrderContext.Provider value={value}>
@@ -21,7 +21,7 @@ import { useItemOrder } from './item_order_context.js';
21
21
  * @param enabled Enable or disable the monitoring.
22
22
  */
23
23
  export function useDropMonitor(
24
- scrollElementRef: RefObject<Element>,
24
+ scrollElementRef: RefObject<Element | null>,
25
25
  enabled: boolean,
26
26
  ) {
27
27
  const { reorderItem, items } = useItemOrder();