react-science 23.1.1 → 24.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 (339) hide show
  1. package/lib/components/accordion/accordion_context.d.ts +1 -1
  2. package/lib/components/accordion/accordion_context.js +3 -3
  3. package/lib/components/accordion/accordion_context.js.map +1 -1
  4. package/lib/components/accordion/accordion_context_provider.d.ts.map +1 -1
  5. package/lib/components/accordion/accordion_context_provider.js +3 -3
  6. package/lib/components/accordion/accordion_context_provider.js.map +1 -1
  7. package/lib/components/accordion/accordion_hooks.js +3 -3
  8. package/lib/components/accordion/accordion_hooks.js.map +1 -1
  9. package/lib/components/button/Button.d.ts.map +1 -1
  10. package/lib/components/button/Button.js +3 -2
  11. package/lib/components/button/Button.js.map +1 -1
  12. package/lib/components/color-picker/react-color/ColorPicker.d.ts +2 -2
  13. package/lib/components/color-picker/react-color/ColorPicker.d.ts.map +1 -1
  14. package/lib/components/color-picker/react-color/ColorPicker.js +25 -22
  15. package/lib/components/color-picker/react-color/ColorPicker.js.map +1 -1
  16. package/lib/components/color-picker/react-color/common/Alpha.d.ts +1 -2
  17. package/lib/components/color-picker/react-color/common/Alpha.d.ts.map +1 -1
  18. package/lib/components/color-picker/react-color/common/Alpha.js +5 -6
  19. package/lib/components/color-picker/react-color/common/Alpha.js.map +1 -1
  20. package/lib/components/color-picker/react-color/common/CheckBoard.d.ts +1 -2
  21. package/lib/components/color-picker/react-color/common/CheckBoard.d.ts.map +1 -1
  22. package/lib/components/color-picker/react-color/common/CheckBoard.js +2 -3
  23. package/lib/components/color-picker/react-color/common/CheckBoard.js.map +1 -1
  24. package/lib/components/color-picker/react-color/common/EditableInput.d.ts.map +1 -1
  25. package/lib/components/color-picker/react-color/common/EditableInput.js +30 -26
  26. package/lib/components/color-picker/react-color/common/EditableInput.js.map +1 -1
  27. package/lib/components/color-picker/react-color/common/Hue.d.ts +1 -2
  28. package/lib/components/color-picker/react-color/common/Hue.d.ts.map +1 -1
  29. package/lib/components/color-picker/react-color/common/Hue.js +5 -6
  30. package/lib/components/color-picker/react-color/common/Hue.js.map +1 -1
  31. package/lib/components/color-picker/react-color/common/Saturation.d.ts +1 -2
  32. package/lib/components/color-picker/react-color/common/Saturation.d.ts.map +1 -1
  33. package/lib/components/color-picker/react-color/common/Saturation.js +6 -7
  34. package/lib/components/color-picker/react-color/common/Saturation.js.map +1 -1
  35. package/lib/components/color-picker/react-color/common/Swatch.d.ts.map +1 -1
  36. package/lib/components/color-picker/react-color/common/Swatch.js +10 -11
  37. package/lib/components/color-picker/react-color/common/Swatch.js.map +1 -1
  38. package/lib/components/color-picker/react-color/common/interaction.d.ts +1 -1
  39. package/lib/components/color-picker/react-color/common/interaction.d.ts.map +1 -1
  40. package/lib/components/color-picker/react-color/common/interaction.js +9 -9
  41. package/lib/components/color-picker/react-color/common/interaction.js.map +1 -1
  42. package/lib/components/color-picker/react-color/common/useOnChange.js +2 -2
  43. package/lib/components/color-picker/react-color/common/useOnChange.js.map +1 -1
  44. package/lib/components/color-picker/react-color/helpers/alpha.d.ts +1 -1
  45. package/lib/components/color-picker/react-color/helpers/alpha.d.ts.map +1 -1
  46. package/lib/components/color-picker/react-color/helpers/alpha.js +4 -5
  47. package/lib/components/color-picker/react-color/helpers/alpha.js.map +1 -1
  48. package/lib/components/color-picker/react-color/helpers/color.d.ts.map +1 -1
  49. package/lib/components/color-picker/react-color/helpers/color.js +15 -13
  50. package/lib/components/color-picker/react-color/helpers/color.js.map +1 -1
  51. package/lib/components/color-picker/react-color/helpers/hue.d.ts +1 -1
  52. package/lib/components/color-picker/react-color/helpers/hue.d.ts.map +1 -1
  53. package/lib/components/color-picker/react-color/helpers/hue.js +14 -23
  54. package/lib/components/color-picker/react-color/helpers/hue.js.map +1 -1
  55. package/lib/components/color-picker/react-color/helpers/saturation.d.ts +1 -1
  56. package/lib/components/color-picker/react-color/helpers/saturation.d.ts.map +1 -1
  57. package/lib/components/color-picker/react-color/helpers/saturation.js +3 -3
  58. package/lib/components/color-picker/react-color/helpers/saturation.js.map +1 -1
  59. package/lib/components/color-picker/react-color/sketch/SketchFields.d.ts +1 -1
  60. package/lib/components/color-picker/react-color/sketch/SketchFields.d.ts.map +1 -1
  61. package/lib/components/color-picker/react-color/sketch/SketchFields.js +6 -6
  62. package/lib/components/color-picker/react-color/sketch/SketchFields.js.map +1 -1
  63. package/lib/components/color-picker/react-color/sketch/SketchPresetColors.js +8 -8
  64. package/lib/components/color-picker/react-color/sketch/SketchPresetColors.js.map +1 -1
  65. package/lib/components/dialog/ConfirmDialog.js +2 -2
  66. package/lib/components/dialog/ConfirmDialog.js.map +1 -1
  67. package/lib/components/draggable/draggable.d.ts.map +1 -1
  68. package/lib/components/draggable/draggable.js +10 -9
  69. package/lib/components/draggable/draggable.js.map +1 -1
  70. package/lib/components/form/components/field_groups/svg_text_style.d.ts.map +1 -1
  71. package/lib/components/form/components/field_groups/svg_text_style.js +8 -8
  72. package/lib/components/form/components/field_groups/svg_text_style.js.map +1 -1
  73. package/lib/components/form/components/field_groups/svg_text_style.schema.js +1 -1
  74. package/lib/components/form/components/field_groups/svg_text_style.schema.js.map +1 -1
  75. package/lib/components/form/components/input/checkbox.js +3 -3
  76. package/lib/components/form/components/input/checkbox.js.map +1 -1
  77. package/lib/components/form/components/input/color_picker.js +1 -1
  78. package/lib/components/form/components/input/color_picker.js.map +1 -1
  79. package/lib/components/form/components/input/draggable_numeric_input.js +1 -1
  80. package/lib/components/form/components/input/draggable_numeric_input.js.map +1 -1
  81. package/lib/components/form/components/input/input.js +1 -1
  82. package/lib/components/form/components/input/input.js.map +1 -1
  83. package/lib/components/form/components/input/numeric_input.js +1 -1
  84. package/lib/components/form/components/input/numeric_input.js.map +1 -1
  85. package/lib/components/form/components/input/radio_group.js +1 -1
  86. package/lib/components/form/components/input/radio_group.js.map +1 -1
  87. package/lib/components/form/components/input/select.js +1 -1
  88. package/lib/components/form/components/input/select.js.map +1 -1
  89. package/lib/components/form/components/input/switch.js +1 -1
  90. package/lib/components/form/components/input/switch.js.map +1 -1
  91. package/lib/components/form/components/input/textarea.js +1 -1
  92. package/lib/components/form/components/input/textarea.js.map +1 -1
  93. package/lib/components/form/components/input_groups/form.js +2 -2
  94. package/lib/components/form/components/input_groups/form.js.map +1 -1
  95. package/lib/components/form/components/input_groups/form_context.d.ts +1 -1
  96. package/lib/components/form/components/input_groups/form_context.js +3 -3
  97. package/lib/components/form/components/input_groups/form_context.js.map +1 -1
  98. package/lib/components/form/components/layout/form.d.ts +1 -1
  99. package/lib/components/form/components/layout/form.d.ts.map +1 -1
  100. package/lib/components/form/components/layout/form.js +1 -4
  101. package/lib/components/form/components/layout/form.js.map +1 -1
  102. package/lib/components/form/utils/validators.d.ts +14 -8
  103. package/lib/components/form/utils/validators.d.ts.map +1 -1
  104. package/lib/components/form/utils/validators.js +11 -11
  105. package/lib/components/form/utils/validators.js.map +1 -1
  106. package/lib/components/fullscreen/fullscreen_context.d.ts +1 -1
  107. package/lib/components/fullscreen/fullscreen_context.js +3 -3
  108. package/lib/components/fullscreen/fullscreen_context.js.map +1 -1
  109. package/lib/components/fullscreen/fullscreen_context.provider.d.ts +1 -3
  110. package/lib/components/fullscreen/fullscreen_context.provider.d.ts.map +1 -1
  111. package/lib/components/fullscreen/fullscreen_context.provider.js +3 -3
  112. package/lib/components/fullscreen/fullscreen_context.provider.js.map +1 -1
  113. package/lib/components/hooks/useDoubleClick.js +8 -8
  114. package/lib/components/hooks/useDoubleClick.js.map +1 -1
  115. package/lib/components/hooks/useOnClickOutside.js +2 -2
  116. package/lib/components/hooks/useOnClickOutside.js.map +1 -1
  117. package/lib/components/hooks/useOnOff.d.ts +1 -1
  118. package/lib/components/hooks/useOnOff.d.ts.map +1 -1
  119. package/lib/components/hooks/useOnOff.js +5 -5
  120. package/lib/components/hooks/useOnOff.js.map +1 -1
  121. package/lib/components/hooks/useSelect.d.ts.map +1 -1
  122. package/lib/components/hooks/useSelect.js +4 -3
  123. package/lib/components/hooks/useSelect.js.map +1 -1
  124. package/lib/components/hooks/useToggle.d.ts +1 -1
  125. package/lib/components/hooks/useToggle.d.ts.map +1 -1
  126. package/lib/components/hooks/useToggle.js +2 -2
  127. package/lib/components/hooks/useToggle.js.map +1 -1
  128. package/lib/components/info-panel/InfoPanel.d.ts.map +1 -1
  129. package/lib/components/info-panel/InfoPanel.js +10 -13
  130. package/lib/components/info-panel/InfoPanel.js.map +1 -1
  131. package/lib/components/input/radio-button-group/RadioButtonGroup.d.ts.map +1 -1
  132. package/lib/components/input/radio-button-group/RadioButtonGroup.js +3 -2
  133. package/lib/components/input/radio-button-group/RadioButtonGroup.js.map +1 -1
  134. package/lib/components/logger/FifoLoggerDialog.d.ts.map +1 -1
  135. package/lib/components/logger/FifoLoggerDialog.js +3 -1
  136. package/lib/components/logger/FifoLoggerDialog.js.map +1 -1
  137. package/lib/components/logger/FifoLoggerProvider.d.ts.map +1 -1
  138. package/lib/components/logger/FifoLoggerProvider.js +2 -2
  139. package/lib/components/logger/FifoLoggerProvider.js.map +1 -1
  140. package/lib/components/logger/loggerContext.d.ts +1 -1
  141. package/lib/components/logger/loggerContext.js +1 -1
  142. package/lib/components/logger/useFifoLogger.d.ts.map +1 -1
  143. package/lib/components/logger/useFifoLogger.js +7 -5
  144. package/lib/components/logger/useFifoLogger.js.map +1 -1
  145. package/lib/components/root-layout/root_layout.d.ts.map +1 -1
  146. package/lib/components/root-layout/root_layout.js +5 -3
  147. package/lib/components/root-layout/root_layout.js.map +1 -1
  148. package/lib/components/root-layout/root_layout_context.d.ts +1 -1
  149. package/lib/components/root-layout/root_layout_context.js +3 -3
  150. package/lib/components/root-layout/root_layout_context.js.map +1 -1
  151. package/lib/components/root-layout/root_layout_context.provider.js +2 -2
  152. package/lib/components/root-layout/root_layout_context.provider.js.map +1 -1
  153. package/lib/components/selected-total/SelectedTotal.js +1 -1
  154. package/lib/components/selected-total/SelectedTotal.js.map +1 -1
  155. package/lib/components/split_pane/split_pane.d.ts.map +1 -1
  156. package/lib/components/split_pane/split_pane.js +14 -18
  157. package/lib/components/split_pane/split_pane.js.map +1 -1
  158. package/lib/components/split_pane/split_pane_helpers.js +1 -1
  159. package/lib/components/split_pane/split_pane_helpers.js.map +1 -1
  160. package/lib/components/split_pane/use_split_pane_size.d.ts.map +1 -1
  161. package/lib/components/split_pane/use_split_pane_size.js +4 -3
  162. package/lib/components/split_pane/use_split_pane_size.js.map +1 -1
  163. package/lib/components/table/default_table_cell.d.ts.map +1 -1
  164. package/lib/components/table/default_table_cell.js +6 -14
  165. package/lib/components/table/default_table_cell.js.map +1 -1
  166. package/lib/components/table/flash_row/flashed_row_context.d.ts +1 -1
  167. package/lib/components/table/flash_row/flashed_row_context.js +3 -3
  168. package/lib/components/table/flash_row/flashed_row_context.js.map +1 -1
  169. package/lib/components/table/flash_row/flashed_row_provider.d.ts.map +1 -1
  170. package/lib/components/table/flash_row/flashed_row_provider.js +5 -4
  171. package/lib/components/table/flash_row/flashed_row_provider.js.map +1 -1
  172. package/lib/components/table/flash_row/use_flash_row_effect.d.ts.map +1 -1
  173. package/lib/components/table/flash_row/use_flash_row_effect.js +6 -5
  174. package/lib/components/table/flash_row/use_flash_row_effect.js.map +1 -1
  175. package/lib/components/table/preview_table.js +2 -2
  176. package/lib/components/table/preview_table.js.map +1 -1
  177. package/lib/components/table/preview_table_context.d.ts +2 -2
  178. package/lib/components/table/preview_table_context.js +6 -6
  179. package/lib/components/table/preview_table_context.js.map +1 -1
  180. package/lib/components/table/reorder_rows/draggable_row_context.d.ts +4 -6
  181. package/lib/components/table/reorder_rows/draggable_row_context.d.ts.map +1 -1
  182. package/lib/components/table/reorder_rows/draggable_row_context.js +3 -3
  183. package/lib/components/table/reorder_rows/draggable_row_context.js.map +1 -1
  184. package/lib/components/table/reorder_rows/draggable_row_tr.d.ts.map +1 -1
  185. package/lib/components/table/reorder_rows/draggable_row_tr.js +4 -3
  186. package/lib/components/table/reorder_rows/draggable_row_tr.js.map +1 -1
  187. package/lib/components/table/reorder_rows/item_order_context.d.ts +2 -2
  188. package/lib/components/table/reorder_rows/item_order_context.d.ts.map +1 -1
  189. package/lib/components/table/reorder_rows/item_order_context.js +3 -3
  190. package/lib/components/table/reorder_rows/item_order_context.js.map +1 -1
  191. package/lib/components/table/reorder_rows/item_order_provider.d.ts.map +1 -1
  192. package/lib/components/table/reorder_rows/item_order_provider.js +2 -2
  193. package/lib/components/table/reorder_rows/item_order_provider.js.map +1 -1
  194. package/lib/components/table/reorder_rows/use_drop_monitor.d.ts +2 -2
  195. package/lib/components/table/reorder_rows/use_drop_monitor.d.ts.map +1 -1
  196. package/lib/components/table/reorder_rows/use_drop_monitor.js +4 -4
  197. package/lib/components/table/reorder_rows/use_drop_monitor.js.map +1 -1
  198. package/lib/components/table/table_body.d.ts.map +1 -1
  199. package/lib/components/table/table_body.js +10 -6
  200. package/lib/components/table/table_body.js.map +1 -1
  201. package/lib/components/table/table_features.js +7 -7
  202. package/lib/components/table/table_features.js.map +1 -1
  203. package/lib/components/table/table_header_cell.d.ts +1 -1
  204. package/lib/components/table/table_header_cell.d.ts.map +1 -1
  205. package/lib/components/table/table_root.d.ts +2 -2
  206. package/lib/components/table/table_root.d.ts.map +1 -1
  207. package/lib/components/table/table_root.js +12 -12
  208. package/lib/components/table/table_root.js.map +1 -1
  209. package/lib/components/table/table_utils.d.ts +1 -1
  210. package/lib/components/table/table_utils.d.ts.map +1 -1
  211. package/lib/components/table/table_utils.js.map +1 -1
  212. package/lib/components/table/use_table_columns.d.ts +2 -2
  213. package/lib/components/table/use_table_columns.d.ts.map +1 -1
  214. package/lib/components/table/use_table_columns.js +4 -4
  215. package/lib/components/table/use_table_columns.js.map +1 -1
  216. package/lib/components/table/use_table_scroll.d.ts.map +1 -1
  217. package/lib/components/table/use_table_scroll.js +13 -15
  218. package/lib/components/table/use_table_scroll.js.map +1 -1
  219. package/lib/components/toolbar/OverflowButton.js +5 -5
  220. package/lib/components/toolbar/OverflowButton.js.map +1 -1
  221. package/lib/components/toolbar/Toolbar.d.ts.map +1 -1
  222. package/lib/components/toolbar/Toolbar.js +5 -8
  223. package/lib/components/toolbar/Toolbar.js.map +1 -1
  224. package/lib/components/toolbar/TooltipHelpContent.d.ts.map +1 -1
  225. package/lib/components/toolbar/TooltipHelpContent.js +5 -2
  226. package/lib/components/toolbar/TooltipHelpContent.js.map +1 -1
  227. package/lib/components/toolbar/toolbarContext.d.ts +3 -3
  228. package/lib/components/toolbar/toolbarContext.d.ts.map +1 -1
  229. package/lib/components/toolbar/toolbarContext.js +4 -4
  230. package/lib/components/toolbar/toolbarContext.js.map +1 -1
  231. package/lib/components/toolbar/useCheckOverflow.d.ts.map +1 -1
  232. package/lib/components/toolbar/useCheckOverflow.js +1 -0
  233. package/lib/components/toolbar/useCheckOverflow.js.map +1 -1
  234. package/lib/components/utils/debounce.d.ts +1 -1
  235. package/lib/components/utils/debounce.d.ts.map +1 -1
  236. package/lib/components/utils/debounce.js +3 -3
  237. package/lib/components/utils/debounce.js.map +1 -1
  238. package/lib/components/utils/forward_all_props_except.d.ts +2 -0
  239. package/lib/components/utils/forward_all_props_except.d.ts.map +1 -0
  240. package/lib/components/utils/{shouldForwardPropExcept.js → forward_all_props_except.js} +2 -2
  241. package/lib/components/utils/forward_all_props_except.js.map +1 -0
  242. package/lib/components/utils/svg.d.ts.map +1 -1
  243. package/lib/components/utils/svg.js +12 -6
  244. package/lib/components/utils/svg.js.map +1 -1
  245. package/lib/components/utils/svg_path_builder.d.ts +8 -8
  246. package/lib/components/utils/svg_path_builder.d.ts.map +1 -1
  247. package/lib/components/utils/svg_path_builder.js +16 -14
  248. package/lib/components/utils/svg_path_builder.js.map +1 -1
  249. package/lib/components/utils/throttle.d.ts +1 -1
  250. package/lib/components/utils/throttle.d.ts.map +1 -1
  251. package/lib/components/utils/throttle.js +10 -9
  252. package/lib/components/utils/throttle.js.map +1 -1
  253. package/package.json +47 -47
  254. package/src/components/accordion/accordion_context.ts +3 -3
  255. package/src/components/accordion/accordion_context_provider.tsx +3 -7
  256. package/src/components/accordion/accordion_hooks.ts +3 -3
  257. package/src/components/button/Button.tsx +11 -2
  258. package/src/components/color-picker/react-color/ColorPicker.tsx +36 -30
  259. package/src/components/color-picker/react-color/common/Alpha.tsx +5 -7
  260. package/src/components/color-picker/react-color/common/CheckBoard.tsx +2 -4
  261. package/src/components/color-picker/react-color/common/EditableInput.tsx +35 -29
  262. package/src/components/color-picker/react-color/common/Hue.tsx +5 -7
  263. package/src/components/color-picker/react-color/common/Saturation.tsx +7 -9
  264. package/src/components/color-picker/react-color/common/Swatch.tsx +18 -9
  265. package/src/components/color-picker/react-color/common/interaction.tsx +12 -13
  266. package/src/components/color-picker/react-color/common/useOnChange.tsx +2 -2
  267. package/src/components/color-picker/react-color/helpers/alpha.ts +6 -5
  268. package/src/components/color-picker/react-color/helpers/color.ts +16 -13
  269. package/src/components/color-picker/react-color/helpers/hue.ts +16 -25
  270. package/src/components/color-picker/react-color/helpers/saturation.ts +5 -3
  271. package/src/components/color-picker/react-color/sketch/SketchFields.tsx +8 -8
  272. package/src/components/color-picker/react-color/sketch/SketchPresetColors.tsx +9 -9
  273. package/src/components/dialog/ConfirmDialog.tsx +2 -2
  274. package/src/components/draggable/draggable.tsx +20 -18
  275. package/src/components/form/components/field_groups/svg_text_style.schema.ts +1 -1
  276. package/src/components/form/components/field_groups/svg_text_style.tsx +17 -15
  277. package/src/components/form/components/input/checkbox.tsx +3 -3
  278. package/src/components/form/components/input/color_picker.tsx +1 -1
  279. package/src/components/form/components/input/draggable_numeric_input.tsx +1 -1
  280. package/src/components/form/components/input/input.tsx +1 -1
  281. package/src/components/form/components/input/numeric_input.tsx +1 -1
  282. package/src/components/form/components/input/radio_group.tsx +1 -1
  283. package/src/components/form/components/input/select.tsx +1 -1
  284. package/src/components/form/components/input/switch.tsx +1 -1
  285. package/src/components/form/components/input/textarea.tsx +1 -1
  286. package/src/components/form/components/input_groups/form.tsx +3 -3
  287. package/src/components/form/components/input_groups/form_context.ts +3 -3
  288. package/src/components/form/components/layout/form.tsx +4 -6
  289. package/src/components/form/utils/validators.ts +29 -23
  290. package/src/components/fullscreen/fullscreen_context.provider.tsx +4 -9
  291. package/src/components/fullscreen/fullscreen_context.ts +3 -3
  292. package/src/components/hooks/useDoubleClick.ts +8 -8
  293. package/src/components/hooks/useOnClickOutside.ts +2 -2
  294. package/src/components/hooks/useOnOff.ts +5 -5
  295. package/src/components/hooks/useSelect.tsx +5 -3
  296. package/src/components/hooks/useToggle.ts +2 -2
  297. package/src/components/info-panel/InfoPanel.tsx +12 -16
  298. package/src/components/input/radio-button-group/RadioButtonGroup.tsx +5 -2
  299. package/src/components/logger/FifoLoggerDialog.tsx +1 -0
  300. package/src/components/logger/FifoLoggerProvider.tsx +2 -4
  301. package/src/components/logger/loggerContext.ts +1 -1
  302. package/src/components/logger/useFifoLogger.ts +7 -5
  303. package/src/components/root-layout/root_layout.tsx +6 -3
  304. package/src/components/root-layout/root_layout_context.provider.tsx +3 -3
  305. package/src/components/root-layout/root_layout_context.ts +3 -3
  306. package/src/components/selected-total/SelectedTotal.tsx +1 -1
  307. package/src/components/split_pane/split_pane.tsx +17 -20
  308. package/src/components/split_pane/split_pane_helpers.ts +1 -1
  309. package/src/components/split_pane/use_split_pane_size.tsx +4 -3
  310. package/src/components/table/default_table_cell.tsx +10 -11
  311. package/src/components/table/flash_row/flashed_row_context.ts +3 -3
  312. package/src/components/table/flash_row/flashed_row_provider.tsx +8 -6
  313. package/src/components/table/flash_row/use_flash_row_effect.ts +7 -5
  314. package/src/components/table/preview_table.tsx +3 -3
  315. package/src/components/table/preview_table_context.ts +6 -6
  316. package/src/components/table/reorder_rows/draggable_row_context.ts +6 -10
  317. package/src/components/table/reorder_rows/draggable_row_tr.tsx +11 -6
  318. package/src/components/table/reorder_rows/item_order_context.ts +4 -4
  319. package/src/components/table/reorder_rows/item_order_provider.tsx +2 -6
  320. package/src/components/table/reorder_rows/use_drop_monitor.ts +4 -4
  321. package/src/components/table/table_body.tsx +19 -5
  322. package/src/components/table/table_features.ts +12 -12
  323. package/src/components/table/table_root.tsx +20 -18
  324. package/src/components/table/table_utils.ts +4 -5
  325. package/src/components/table/use_table_columns.ts +7 -7
  326. package/src/components/table/use_table_scroll.ts +18 -21
  327. package/src/components/toolbar/OverflowButton.tsx +5 -5
  328. package/src/components/toolbar/Toolbar.tsx +8 -20
  329. package/src/components/toolbar/TooltipHelpContent.tsx +10 -5
  330. package/src/components/toolbar/toolbarContext.ts +5 -7
  331. package/src/components/toolbar/useCheckOverflow.tsx +1 -0
  332. package/src/components/utils/debounce.ts +5 -5
  333. package/src/components/utils/{shouldForwardPropExcept.ts → forward_all_props_except.ts} +1 -1
  334. package/src/components/utils/svg.ts +5 -2
  335. package/src/components/utils/svg_path_builder.ts +22 -19
  336. package/src/components/utils/throttle.ts +13 -11
  337. package/lib/components/utils/shouldForwardPropExcept.d.ts +0 -2
  338. package/lib/components/utils/shouldForwardPropExcept.d.ts.map +0 -1
  339. package/lib/components/utils/shouldForwardPropExcept.js.map +0 -1
@@ -56,9 +56,11 @@ export const FieldGroupSVGTextStyleFields = withFieldGroup({
56
56
  <Checkbox
57
57
  labelElement={<BoldLabel>Bold</BoldLabel>}
58
58
  name={field.name}
59
- checked={fontWeightToBoolean(field.state.value)}
60
- onChange={(e) =>
61
- field.handleChange(booleanToFontWeight(e.target.checked))
59
+ checked={isBoldFontWeight(field.state.value)}
60
+ onChange={(event) =>
61
+ field.handleChange(
62
+ booleanToFontWeight(event.target.checked),
63
+ )
62
64
  }
63
65
  onBlur={field.handleBlur}
64
66
  />
@@ -69,9 +71,9 @@ export const FieldGroupSVGTextStyleFields = withFieldGroup({
69
71
  <Checkbox
70
72
  labelElement={<ItalicLabel>Italic</ItalicLabel>}
71
73
  name={field.name}
72
- checked={fontStyleToBoolean(field.state.value)}
73
- onChange={(e) =>
74
- field.handleChange(booleanToFontStyle(e.target.checked))
74
+ checked={isItalicFontStyle(field.state.value)}
75
+ onChange={(event) =>
76
+ field.handleChange(booleanToFontStyle(event.target.checked))
75
77
  }
76
78
  onBlur={field.handleBlur}
77
79
  />
@@ -123,7 +125,7 @@ function TextStyleFieldPreview(props: TextStyleFieldPreviewProps) {
123
125
  <TextStyleFieldPreviewErrorContainer>
124
126
  {safeResult.error.issues.map((error) => (
125
127
  <li key={`${error.path.join('.')}-${error.code}`}>
126
- {error.path.join('.')}: ${error.message}
128
+ {error.path.join('.')}: {error.message}
127
129
  </li>
128
130
  ))}
129
131
  </TextStyleFieldPreviewErrorContainer>
@@ -159,22 +161,22 @@ const ItalicLabel = styled.span`
159
161
  font-style: italic;
160
162
  `;
161
163
 
162
- function fontWeightToBoolean(
163
- weight: SvgTextStyleFields['fontWeight'],
164
- ): boolean {
164
+ function isBoldFontWeight(weight: SvgTextStyleFields['fontWeight']): boolean {
165
165
  return weight === 'bold';
166
166
  }
167
167
 
168
168
  function booleanToFontWeight(
169
- weight: boolean,
169
+ isBold: boolean,
170
170
  ): SvgTextStyleFields['fontWeight'] {
171
- return weight ? 'bold' : 'normal';
171
+ return isBold ? 'bold' : 'normal';
172
172
  }
173
173
 
174
- function fontStyleToBoolean(weight: SvgTextStyleFields['fontStyle']): boolean {
174
+ function isItalicFontStyle(weight: SvgTextStyleFields['fontStyle']): boolean {
175
175
  return weight === 'italic';
176
176
  }
177
177
 
178
- function booleanToFontStyle(weight: boolean): SvgTextStyleFields['fontStyle'] {
179
- return weight ? 'italic' : 'normal';
178
+ function booleanToFontStyle(
179
+ isItalic: boolean,
180
+ ): SvgTextStyleFields['fontStyle'] {
181
+ return isItalic ? 'italic' : 'normal';
180
182
  }
@@ -22,14 +22,14 @@ export function Checkbox(props: CheckboxProps) {
22
22
  const field = useFieldContext<boolean>();
23
23
  const error = field
24
24
  .getMeta()
25
- .errors.map((e) => e.message)
25
+ .errors.map((error) => error.message)
26
26
  .at(0);
27
27
 
28
28
  const intent = getIntent(error);
29
29
 
30
30
  function onChange(event: ChangeEvent<HTMLInputElement>) {
31
- const checked = event.target.checked;
32
- return field.handleChange(checked);
31
+ const isChecked = event.target.checked;
32
+ return field.handleChange(isChecked);
33
33
  }
34
34
 
35
35
  return (
@@ -18,7 +18,7 @@ export function ColorPicker(props: ColorPickerProps) {
18
18
  const field = useFieldContext<string>();
19
19
  const error = field
20
20
  .getMeta()
21
- .errors.map((e) => e.message)
21
+ .errors.map((error) => error.message)
22
22
  .at(0);
23
23
 
24
24
  function onChange(color: ChangeCallbackComponentProps) {
@@ -48,7 +48,7 @@ export function DraggableNumericInput(props: DraggableNumericInputProps) {
48
48
  const field = useFieldContext<string>();
49
49
  const error = field
50
50
  .getMeta()
51
- .errors.map((e) => e.message)
51
+ .errors.map((error) => error.message)
52
52
  .at(0);
53
53
 
54
54
  const intent = getIntent(error);
@@ -16,7 +16,7 @@ export function Input(props: InputProps) {
16
16
  const field = useFieldContext<string>();
17
17
  const error = field
18
18
  .getMeta()
19
- .errors.map((e) => e.message)
19
+ .errors.map((error) => error.message)
20
20
  .at(0);
21
21
 
22
22
  function onChange(event: ChangeEvent<HTMLInputElement>) {
@@ -32,7 +32,7 @@ export function NumericInput(props: NumericInputProps) {
32
32
  const field = useFieldContext<string>();
33
33
  const error = field
34
34
  .getMeta()
35
- .errors.map((e) => e.message)
35
+ .errors.map((error) => error.message)
36
36
  .at(0);
37
37
 
38
38
  const intent = getIntent(error);
@@ -38,7 +38,7 @@ export function RadioGroup(props: RadioGroupProps) {
38
38
  const field = useFieldContext<string>();
39
39
  const error = field
40
40
  .getMeta()
41
- .errors.map((e) => e.message)
41
+ .errors.map((error) => error.message)
42
42
  .at(0);
43
43
 
44
44
  function onChange(event: ChangeEvent<HTMLInputElement>) {
@@ -41,7 +41,7 @@ export function Select(props: SelectProps) {
41
41
  const field = useFieldContext<SelectId | undefined>();
42
42
  const error = field
43
43
  .getMeta()
44
- .errors.map((e) => e.message)
44
+ .errors.map((error) => error.message)
45
45
  .at(0);
46
46
 
47
47
  const intent = getIntent(error);
@@ -26,7 +26,7 @@ export function Switch(props: SwitchProps) {
26
26
  const field = useFieldContext<boolean>();
27
27
  const error = field
28
28
  .getMeta()
29
- .errors.map((e) => e.message)
29
+ .errors.map((error) => error.message)
30
30
  .at(0);
31
31
 
32
32
  function onChange(event: ChangeEvent<HTMLInputElement>) {
@@ -20,7 +20,7 @@ export function TextArea(props: TextAreaProps) {
20
20
  const field = useFieldContext<string>();
21
21
  const error = field
22
22
  .getMeta()
23
- .errors.map((e) => e.message)
23
+ .errors.map((error) => error.message)
24
24
  .at(0);
25
25
 
26
26
  function onChange(event: ChangeEvent<HTMLTextAreaElement>) {
@@ -2,7 +2,7 @@ import type { FormHTMLAttributes, ReactNode } from 'react';
2
2
  import { useMemo } from 'react';
3
3
 
4
4
  import type { Layout } from './form_context.js';
5
- import { formContext } from './form_context.js';
5
+ import { FormContext } from './form_context.js';
6
6
 
7
7
  export interface FormProps extends FormHTMLAttributes<HTMLFormElement> {
8
8
  children: ReactNode;
@@ -24,8 +24,8 @@ export function Form(props: FormProps) {
24
24
  }, [layout]);
25
25
 
26
26
  return (
27
- <formContext.Provider value={contextValue}>
27
+ <FormContext value={contextValue}>
28
28
  <form {...otherProps}>{children}</form>
29
- </formContext.Provider>
29
+ </FormContext>
30
30
  );
31
31
  }
@@ -1,11 +1,11 @@
1
- import { createContext, useContext } from 'react';
1
+ import { createContext, use } from 'react';
2
2
 
3
3
  export type Layout = 'inline' | 'stacked';
4
4
 
5
- export const formContext = createContext<{ layout: Layout }>({
5
+ export const FormContext = createContext<{ layout: Layout }>({
6
6
  layout: 'stacked',
7
7
  });
8
8
 
9
9
  export function useFormContext() {
10
- return useContext(formContext);
10
+ return use(FormContext);
11
11
  }
@@ -61,11 +61,7 @@ export const AppForm = minimalForm(
61
61
  event.preventDefault();
62
62
  if (onSubmitStopPropagation) event.stopPropagation();
63
63
 
64
- const meta = onSubmitMeta?.(
65
- // onSubmit event is not typed properly.
66
- // It uses Event instead of SubmitEvent.
67
- event as SyntheticEvent<HTMLFormElement, SubmitEvent>,
68
- );
64
+ const meta = onSubmitMeta?.(event);
69
65
  void form.handleSubmit(meta);
70
66
  }}
71
67
  {...domProps}
@@ -92,7 +88,9 @@ type MinimalProps<Props extends { form: unknown }> = Omit<Props, 'form'> & {
92
88
  'pushFieldValue' | 'insertFieldValue' | 'replaceFieldValue'
93
89
  >;
94
90
  };
95
- type MinimalFunctionComponent<Props> = (props: Props) => ReactNode;
91
+ type MinimalFunctionComponent<Props> = (
92
+ props: Props,
93
+ ) => ReactNode | Promise<ReactNode>;
96
94
 
97
95
  function minimalForm<Props extends { form: unknown }>(
98
96
  component: MinimalFunctionComponent<Props>,
@@ -2,15 +2,21 @@ import type { ZodCodec, ZodNumber, ZodOptional, ZodString } from 'zod';
2
2
  import { z } from 'zod';
3
3
 
4
4
  interface StringToNumberOptionalOptions<
5
- Str extends ZodString,
6
- Num extends ZodNumber,
5
+ StringSchema extends ZodString,
6
+ NumberSchema extends ZodNumber,
7
7
  > {
8
- /** @default z.string() */
9
- strSchema?: Str;
10
- /** @default z.number() */
11
- numSchema?: Num;
12
- /** @default Number */
13
- parse?: (str: string) => number;
8
+ /**
9
+ * @default z.string()
10
+ */
11
+ strSchema?: StringSchema;
12
+ /**
13
+ * @default z.number()
14
+ */
15
+ numSchema?: NumberSchema;
16
+ /**
17
+ * @default Number
18
+ */
19
+ parse?: (value: string) => number;
14
20
  }
15
21
 
16
22
  /**
@@ -18,28 +24,28 @@ interface StringToNumberOptionalOptions<
18
24
  * @param options
19
25
  */
20
26
  export function stringToNumberOptional<
21
- Str extends ZodString = ZodString,
22
- Num extends ZodNumber = ZodNumber,
27
+ StringSchema extends ZodString = ZodString,
28
+ NumberSchema extends ZodNumber = ZodNumber,
23
29
  >(
24
- options: StringToNumberOptionalOptions<Str, Num> = {},
25
- ): ZodCodec<ZodOptional<Str>, ZodOptional<Num>> {
26
- const strSchema = options?.strSchema ?? (z.string() as Str);
27
- const numSchema = options?.numSchema ?? (z.number() as Num);
30
+ options: StringToNumberOptionalOptions<StringSchema, NumberSchema> = {},
31
+ ): ZodCodec<ZodOptional<StringSchema>, ZodOptional<NumberSchema>> {
32
+ const stringSchema = options?.strSchema ?? (z.string() as StringSchema);
33
+ const numberSchema = options?.numSchema ?? (z.number() as NumberSchema);
28
34
  const parse = options?.parse ?? Number;
29
35
 
30
- return z.codec(strSchema.optional(), numSchema.optional(), {
31
- encode: (num) => {
32
- if (num === undefined) return undefined;
36
+ return z.codec(stringSchema.optional(), numberSchema.optional(), {
37
+ encode: (value) => {
38
+ if (value === undefined) return undefined;
33
39
 
34
- return String(num) as z.output<ZodOptional<Str>>;
40
+ return String(value) as z.output<ZodOptional<StringSchema>>;
35
41
  },
36
- decode: (str) => {
37
- if (!str) return undefined;
42
+ decode: (value) => {
43
+ if (!value) return undefined;
38
44
 
39
- const value = parse(str);
40
- if (Number.isNaN(value)) return undefined;
45
+ const parsed = parse(value);
46
+ if (Number.isNaN(parsed)) return undefined;
41
47
 
42
- return value as z.input<ZodOptional<Num>>;
48
+ return parsed as z.input<ZodOptional<NumberSchema>>;
43
49
  },
44
50
  });
45
51
  }
@@ -1,11 +1,8 @@
1
- import type { MutableRefObject, ReactNode } from 'react';
1
+ import type { ReactNode, RefObject } from 'react';
2
2
  import { useMemo } from 'react';
3
3
  import { useFullScreenHandle } from 'react-full-screen';
4
4
 
5
- import { fullscreenContext } from './fullscreen_context.js';
6
-
7
- // Remove for React 19.
8
- type RefObject<T> = MutableRefObject<T>;
5
+ import { FullscreenContext } from './fullscreen_context.js';
9
6
 
10
7
  export interface FullscreenProviderProps {
11
8
  /**
@@ -33,7 +30,7 @@ export function FullScreenProvider(props: FullscreenProviderProps) {
33
30
  onToggleError?.(error, handle.active ? 'exit' : 'enter');
34
31
  }
35
32
  try {
36
- handleToggle().catch(handleError);
33
+ void handleToggle().catch(handleError);
37
34
  } catch (error) {
38
35
  handleError(error);
39
36
  }
@@ -45,8 +42,6 @@ export function FullScreenProvider(props: FullscreenProviderProps) {
45
42
  }, [handle, onToggleError]);
46
43
 
47
44
  return (
48
- <fullscreenContext.Provider value={value}>
49
- {children(handle.node)}
50
- </fullscreenContext.Provider>
45
+ <FullscreenContext value={value}>{children(handle.node)}</FullscreenContext>
51
46
  );
52
47
  }
@@ -1,4 +1,4 @@
1
- import { createContext, useContext } from 'react';
1
+ import { createContext, use } from 'react';
2
2
 
3
3
  interface FullscreenState {
4
4
  isFullScreen: boolean;
@@ -14,10 +14,10 @@ const fullscreenContextInit = {
14
14
  },
15
15
  };
16
16
 
17
- export const fullscreenContext = createContext<ContextType>(
17
+ export const FullscreenContext = createContext<ContextType>(
18
18
  fullscreenContextInit,
19
19
  );
20
20
 
21
21
  export function useFullscreen() {
22
- return useContext(fullscreenContext);
22
+ return use(FullscreenContext);
23
23
  }
@@ -11,27 +11,27 @@ export function useDoubleClick<EventData>({
11
11
  onDoubleClick,
12
12
  delay = 250,
13
13
  }: UseDoubleClickOptions<EventData>) {
14
- const timeout = useRef<number | null>(null);
14
+ const timeoutRef = useRef<number | null>(null);
15
15
  useEffect(() => {
16
16
  return () => {
17
17
  // Cleanup timeout when the component is unmounted.
18
- if (timeout.current) {
19
- window.clearTimeout(timeout.current);
18
+ if (timeoutRef.current) {
19
+ window.clearTimeout(timeoutRef.current);
20
20
  }
21
21
  };
22
22
  }, []);
23
23
  const handleClick = useCallback(
24
24
  (data: EventData) => {
25
- if (timeout.current === null) {
25
+ if (timeoutRef.current === null) {
26
26
  // No recent click. Start timer to wait for possible double click.
27
- timeout.current = window.setTimeout(() => {
28
- timeout.current = null;
27
+ timeoutRef.current = window.setTimeout(() => {
28
+ timeoutRef.current = null;
29
29
  onClick?.(data);
30
30
  }, delay);
31
31
  } else {
32
32
  // A click occured recently. Trigger double click event and stop timer.
33
- window.clearTimeout(timeout.current);
34
- timeout.current = null;
33
+ window.clearTimeout(timeoutRef.current);
34
+ timeoutRef.current = null;
35
35
  onDoubleClick?.(data);
36
36
  }
37
37
  },
@@ -10,6 +10,8 @@ export function useOnClickOutside<T extends Node = Node>(
10
10
  const shadowElement = useRootLayoutContext();
11
11
 
12
12
  useEffect(() => {
13
+ if (shadowElement === null) return;
14
+
13
15
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
14
16
  const listener = (event: any) => {
15
17
  // Do nothing if clicking ref's element or descendent elements
@@ -20,8 +22,6 @@ export function useOnClickOutside<T extends Node = Node>(
20
22
  handler(event);
21
23
  };
22
24
 
23
- if (shadowElement === null) return;
24
-
25
25
  shadowElement.addEventListener('mousedown', listener);
26
26
  shadowElement.addEventListener('touchstart', listener);
27
27
 
@@ -1,11 +1,11 @@
1
1
  import { useCallback, useState } from 'react';
2
2
 
3
3
  export function useOnOff(
4
- initialValue = false,
4
+ isInitialOn = false,
5
5
  ): [isOn: boolean, setOn: () => void, setOff: () => void, toggle: () => void] {
6
- const [isOn, setOnOff] = useState(initialValue);
7
- const setOn = useCallback(() => setOnOff(true), []);
8
- const setOff = useCallback(() => setOnOff(false), []);
9
- const toggle = useCallback(() => setOnOff((isOn) => !isOn), []);
6
+ const [isOn, setIsOn] = useState(isInitialOn);
7
+ const setOn = useCallback(() => setIsOn(true), []);
8
+ const setOff = useCallback(() => setIsOn(false), []);
9
+ const toggle = useCallback(() => setIsOn((isOn) => !isOn), []);
10
10
  return [isOn, setOn, setOff, toggle];
11
11
  }
@@ -55,10 +55,12 @@ export function useSelect<T>(options: UseSelectOptions<T>) {
55
55
  const popoverProps = {
56
56
  onOpened: (node: HTMLElement) => {
57
57
  const firstUl = node.querySelector('ul');
58
- if (firstUl) {
59
- firstUl.tabIndex = 0;
60
- firstUl.focus();
58
+ if (!firstUl) {
59
+ return;
61
60
  }
61
+
62
+ firstUl.tabIndex = 0;
63
+ firstUl.focus();
62
64
  },
63
65
  };
64
66
  const popoverTargetProps = {
@@ -1,8 +1,8 @@
1
1
  import { useOnOff } from './useOnOff.js';
2
2
 
3
3
  export function useToggle(
4
- initialValue = false,
4
+ isInitialOn = false,
5
5
  ): [isOn: boolean, toggle: () => void] {
6
- const [isOn, , , toggle] = useOnOff(initialValue);
6
+ const [isOn, , , toggle] = useOnOff(isInitialOn);
7
7
  return [isOn, toggle];
8
8
  }
@@ -7,7 +7,7 @@ import { P, match } from 'ts-pattern';
7
7
  import { Button } from '../button/Button.js';
8
8
  import { SelectedTotal } from '../selected-total/index.js';
9
9
  import { Table, createTableColumnHelper } from '../table/index.js';
10
- import { shouldForwardPropExcept } from '../utils/shouldForwardPropExcept.js';
10
+ import { forwardAllPropsExcept } from '../utils/forward_all_props_except.ts';
11
11
  import * as ValueRenderers from '../value-renderers/index.js';
12
12
 
13
13
  export interface InfoPanelData {
@@ -26,7 +26,7 @@ interface InfoPanelProps {
26
26
  }
27
27
 
28
28
  const AccordionButton = styled(Button, {
29
- shouldForwardProp: shouldForwardPropExcept(['open']),
29
+ shouldForwardProp: forwardAllPropsExcept(['open']),
30
30
  })<{ open?: boolean }>`
31
31
  z-index: 1;
32
32
  position: sticky;
@@ -132,9 +132,8 @@ export function InfoPanel(props: InfoPanelProps) {
132
132
  includes.push({ parameter, value });
133
133
  continue;
134
134
  }
135
- if (valueSearch(value, search)) {
135
+ if (isValueMatch(value, search)) {
136
136
  valueContains.push({ parameter, value });
137
- continue;
138
137
  }
139
138
  }
140
139
  return [...exactMatch, ...startsWith, ...includes, ...valueContains];
@@ -198,7 +197,7 @@ interface InfoPanelContentProps {
198
197
 
199
198
  const InfoPanelContent = memo((props: InfoPanelContentProps) => {
200
199
  const { filteredData } = props;
201
- const [isOpen, setIsOpen] = useState<string[]>(
200
+ const [openDescriptions, setOpenDescriptions] = useState<string[]>(() =>
202
201
  filteredData.map(({ description }) => description),
203
202
  );
204
203
  return (
@@ -213,15 +212,15 @@ const InfoPanelContent = memo((props: InfoPanelContentProps) => {
213
212
  }}
214
213
  >
215
214
  {filteredData.map(({ description, data }) => {
216
- const open = isOpen.includes(description);
215
+ const isOpen = openDescriptions.includes(description);
217
216
  return (
218
217
  <div key={description}>
219
218
  <AccordionButton
220
- open={open}
219
+ open={isOpen}
221
220
  variant="minimal"
222
221
  onClick={() =>
223
- setIsOpen((pred) =>
224
- open
222
+ setOpenDescriptions((pred) =>
223
+ isOpen
225
224
  ? pred.filter((o) => o !== description)
226
225
  : [...pred, description],
227
226
  )
@@ -231,7 +230,7 @@ const InfoPanelContent = memo((props: InfoPanelContentProps) => {
231
230
  >
232
231
  {description}
233
232
  </AccordionButton>
234
- <InfoPanelCollapse isOpen={open}>
233
+ <InfoPanelCollapse isOpen={isOpen}>
235
234
  <Table
236
235
  data={data}
237
236
  columns={columns}
@@ -272,10 +271,9 @@ function valueCell(value: number | string | object | boolean) {
272
271
  * @param search - Value to search for.
273
272
  * @returns - If search exist in value
274
273
  */
275
- function valueSearch(
274
+ function isValueMatch(
276
275
  value: number | string | object | boolean,
277
276
  search: string,
278
- lowerCase = true,
279
277
  ): boolean {
280
278
  let stringValue = match(value)
281
279
  .with(P.boolean, String)
@@ -288,9 +286,7 @@ function valueSearch(
288
286
  if (stringValue === null) {
289
287
  return true;
290
288
  }
291
- if (lowerCase) {
292
- stringValue = stringValue.toLowerCase();
293
- search = search.toLowerCase();
294
- }
289
+ stringValue = stringValue.toLowerCase();
290
+ search = search.toLowerCase();
295
291
  return stringValue.includes(search);
296
292
  }
@@ -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 { Mandatory } from '@zakodium/utils';
4
5
  import type { ReactElement } from 'react';
5
6
  import { Children, cloneElement } from 'react';
6
7
 
@@ -29,10 +30,12 @@ const RadioButtonContainer = styled.div<{ size?: RadioProps['size'] }>`
29
30
  }
30
31
  `;
31
32
 
33
+ const defaultOptions: Mandatory<RadioButtonGroupProps['options']> = [];
34
+
32
35
  export function RadioButtonGroup(props: RadioButtonGroupProps) {
33
36
  const {
34
37
  disabled: groupDisabled = false,
35
- options = [],
38
+ options = defaultOptions,
36
39
  name,
37
40
  size,
38
41
  selectedValue,
@@ -52,7 +55,7 @@ export function RadioButtonGroup(props: RadioButtonGroupProps) {
52
55
  {options?.map(({ value, label, disabled }, index) => {
53
56
  return (
54
57
  <RadioButton
55
- // eslint-disable-next-line react/no-array-index-key
58
+ // eslint-disable-next-line @eslint-react/no-array-index-key
56
59
  key={index}
57
60
  value={value}
58
61
  label={label}
@@ -119,6 +119,7 @@ export function FifoLoggerDialog(props: FifoLoggerDialogProps) {
119
119
  intent="danger"
120
120
  icon="trash"
121
121
  text="Clear logs"
122
+ // eslint-disable-next-line @eslint-react/immutability
122
123
  onClick={() => logger.clear()}
123
124
  />
124
125
  <Button
@@ -1,15 +1,13 @@
1
1
  import type { FifoLogger } from 'fifo-logger';
2
2
  import type { ReactNode } from 'react';
3
3
 
4
- import { fifoLoggerContext } from './loggerContext.js';
4
+ import { FifoLoggerContext } from './loggerContext.js';
5
5
 
6
6
  export function FifoLoggerProvider(props: {
7
7
  logger: FifoLogger;
8
8
  children: ReactNode;
9
9
  }) {
10
10
  return (
11
- <fifoLoggerContext.Provider value={props.logger}>
12
- {props.children}
13
- </fifoLoggerContext.Provider>
11
+ <FifoLoggerContext value={props.logger}>{props.children}</FifoLoggerContext>
14
12
  );
15
13
  }
@@ -1,4 +1,4 @@
1
1
  import type { FifoLogger } from 'fifo-logger';
2
2
  import { createContext } from 'react';
3
3
 
4
- export const fifoLoggerContext = createContext<FifoLogger | null>(null);
4
+ export const FifoLoggerContext = createContext<FifoLogger | null>(null);
@@ -1,9 +1,9 @@
1
- import { useContext, useEffect, useState } from 'react';
1
+ import { use, useEffect, useState } from 'react';
2
2
 
3
- import { fifoLoggerContext } from './loggerContext.js';
3
+ import { FifoLoggerContext } from './loggerContext.js';
4
4
 
5
5
  export function useFifoLogger() {
6
- const fifoLogger = useContext(fifoLoggerContext);
6
+ const fifoLogger = use(FifoLoggerContext);
7
7
  if (!fifoLogger) {
8
8
  throw new Error('useFifoLogger must be used within a FifoLoggerProvider');
9
9
  }
@@ -14,9 +14,11 @@ export function useFifoLogs() {
14
14
  const logger = useFifoLogger();
15
15
  const [logs, setLogs] = useState(logger.getLogs());
16
16
  useEffect(() => {
17
- logger.addEventListener('change', () => {
17
+ function onChange() {
18
18
  setLogs(logger.getLogs());
19
- });
19
+ }
20
+ logger.addEventListener('change', onChange);
21
+ return () => logger.removeEventListener('change', onChange);
20
22
  }, [logger]);
21
23
  return logs;
22
24
  }