react-science 19.10.4 → 20.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 (251) 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/EditableInput.js +2 -3
  40. package/lib/components/color-picker/react-color/common/EditableInput.js.map +1 -1
  41. package/lib/components/color-picker/react-color/common/Hue.d.ts +1 -1
  42. package/lib/components/color-picker/react-color/common/Hue.d.ts.map +1 -1
  43. package/lib/components/color-picker/react-color/common/Hue.js +7 -7
  44. package/lib/components/color-picker/react-color/common/Hue.js.map +1 -1
  45. package/lib/components/color-picker/react-color/common/Saturation.d.ts +1 -1
  46. package/lib/components/color-picker/react-color/common/Saturation.d.ts.map +1 -1
  47. package/lib/components/color-picker/react-color/sketch/SketchFields.d.ts +2 -2
  48. package/lib/components/color-picker/react-color/sketch/SketchFields.d.ts.map +1 -1
  49. package/lib/components/color-picker/react-color/sketch/SketchPresetColors.d.ts +1 -1
  50. package/lib/components/color-picker/react-color/sketch/SketchPresetColors.d.ts.map +1 -1
  51. package/lib/components/dialog/ConfirmDialog.d.ts +1 -1
  52. package/lib/components/dialog/ConfirmDialog.d.ts.map +1 -1
  53. package/lib/components/doi/doi.d.ts +1 -1
  54. package/lib/components/doi/doi.d.ts.map +1 -1
  55. package/lib/components/doi/doi_logo.d.ts +1 -1
  56. package/lib/components/doi/doi_logo.d.ts.map +1 -1
  57. package/lib/components/drop-zone/DropZone.d.ts +2 -2
  58. package/lib/components/drop-zone/DropZone.d.ts.map +1 -1
  59. package/lib/components/form/components/input/checkbox.d.ts +1 -1
  60. package/lib/components/form/components/input/checkbox.d.ts.map +1 -1
  61. package/lib/components/form/components/input/color_picker.d.ts +1 -1
  62. package/lib/components/form/components/input/color_picker.d.ts.map +1 -1
  63. package/lib/components/form/components/input/input.d.ts +1 -1
  64. package/lib/components/form/components/input/input.d.ts.map +1 -1
  65. package/lib/components/form/components/input/numeric_input.d.ts +1 -1
  66. package/lib/components/form/components/input/numeric_input.d.ts.map +1 -1
  67. package/lib/components/form/components/input/radio_group.d.ts +1 -1
  68. package/lib/components/form/components/input/radio_group.d.ts.map +1 -1
  69. package/lib/components/form/components/input/radio_group.js.map +1 -1
  70. package/lib/components/form/components/input/reset_button.d.ts +1 -1
  71. package/lib/components/form/components/input/reset_button.d.ts.map +1 -1
  72. package/lib/components/form/components/input/select.d.ts +1 -1
  73. package/lib/components/form/components/input/select.d.ts.map +1 -1
  74. package/lib/components/form/components/input/submit_button.d.ts +1 -1
  75. package/lib/components/form/components/input/submit_button.d.ts.map +1 -1
  76. package/lib/components/form/components/input/switch.d.ts +1 -1
  77. package/lib/components/form/components/input/switch.d.ts.map +1 -1
  78. package/lib/components/form/components/input_groups/form.d.ts +1 -1
  79. package/lib/components/form/components/input_groups/form.d.ts.map +1 -1
  80. package/lib/components/form/components/input_groups/form_group.d.ts +1 -1
  81. package/lib/components/form/components/input_groups/form_group.d.ts.map +1 -1
  82. package/lib/components/form/components/layout/Section.d.ts +1 -1
  83. package/lib/components/form/components/layout/Section.d.ts.map +1 -1
  84. package/lib/components/fullscreen/fullscreen_context.provider.d.ts +3 -3
  85. package/lib/components/fullscreen/fullscreen_context.provider.d.ts.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/use_split_pane_size.d.ts +1 -1
  125. package/lib/components/split_pane/use_split_pane_size.d.ts.map +1 -1
  126. package/lib/components/svg/styled/svg_styled_line.d.ts +1 -1
  127. package/lib/components/svg/styled/svg_styled_line.d.ts.map +1 -1
  128. package/lib/components/svg/styled/svg_styled_path.d.ts +1 -1
  129. package/lib/components/svg/styled/svg_styled_path.d.ts.map +1 -1
  130. package/lib/components/svg/styled/svg_styled_text.d.ts +1 -1
  131. package/lib/components/svg/styled/svg_styled_text.d.ts.map +1 -1
  132. package/lib/components/table/default_table_cell.d.ts +1 -1
  133. package/lib/components/table/default_table_cell.d.ts.map +1 -1
  134. package/lib/components/table/flash_row/flashed_row_provider.d.ts +1 -1
  135. package/lib/components/table/flash_row/flashed_row_provider.d.ts.map +1 -1
  136. package/lib/components/table/flash_row/use_flash_row_effect.d.ts +1 -1
  137. package/lib/components/table/flash_row/use_flash_row_effect.d.ts.map +1 -1
  138. package/lib/components/table/flash_row/use_flash_row_effect.js.map +1 -1
  139. package/lib/components/table/preview_table.d.ts +1 -1
  140. package/lib/components/table/preview_table.d.ts.map +1 -1
  141. package/lib/components/table/reorder_rows/draggable_row_context.d.ts +1 -1
  142. package/lib/components/table/reorder_rows/draggable_row_context.d.ts.map +1 -1
  143. package/lib/components/table/reorder_rows/draggable_row_tr.d.ts +1 -1
  144. package/lib/components/table/reorder_rows/draggable_row_tr.d.ts.map +1 -1
  145. package/lib/components/table/reorder_rows/draggable_row_tr.js.map +1 -1
  146. package/lib/components/table/reorder_rows/item_data.d.ts +1 -1
  147. package/lib/components/table/reorder_rows/item_data.d.ts.map +1 -1
  148. package/lib/components/table/reorder_rows/item_data.js.map +1 -1
  149. package/lib/components/table/reorder_rows/item_order_provider.d.ts +1 -1
  150. package/lib/components/table/reorder_rows/item_order_provider.d.ts.map +1 -1
  151. package/lib/components/table/reorder_rows/item_order_provider.js +10 -5
  152. package/lib/components/table/reorder_rows/item_order_provider.js.map +1 -1
  153. package/lib/components/table/reorder_rows/table_drag_row_handler.d.ts +1 -1
  154. package/lib/components/table/reorder_rows/table_drag_row_handler.d.ts.map +1 -1
  155. package/lib/components/table/reorder_rows/use_drop_monitor.d.ts +1 -1
  156. package/lib/components/table/reorder_rows/use_drop_monitor.d.ts.map +1 -1
  157. package/lib/components/table/reorder_rows/use_drop_monitor.js.map +1 -1
  158. package/lib/components/table/table_body.d.ts +1 -1
  159. package/lib/components/table/table_body.d.ts.map +1 -1
  160. package/lib/components/table/table_body.js +1 -1
  161. package/lib/components/table/table_body.js.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_root.js +4 -1
  169. package/lib/components/table/table_root.js.map +1 -1
  170. package/lib/components/table/table_row.d.ts +3 -3
  171. package/lib/components/table/table_row.d.ts.map +1 -1
  172. package/lib/components/table/table_row.js.map +1 -1
  173. package/lib/components/table/table_row_cell.d.ts +1 -1
  174. package/lib/components/table/table_row_cell.d.ts.map +1 -1
  175. package/lib/components/table/table_scroll_container.d.ts +2 -2
  176. package/lib/components/table/table_scroll_container.d.ts.map +1 -1
  177. package/lib/components/table/use_table_scroll.d.ts +1 -1
  178. package/lib/components/table/use_table_scroll.d.ts.map +1 -1
  179. package/lib/components/table/use_table_scroll.js +0 -1
  180. package/lib/components/table/use_table_scroll.js.map +1 -1
  181. package/lib/components/toolbar/OverflowButton.d.ts +3 -3
  182. package/lib/components/toolbar/OverflowButton.d.ts.map +1 -1
  183. package/lib/components/toolbar/OverflowButton.js +2 -4
  184. package/lib/components/toolbar/OverflowButton.js.map +1 -1
  185. package/lib/components/toolbar/PanelPreferencesToolbar.d.ts +1 -1
  186. package/lib/components/toolbar/PanelPreferencesToolbar.d.ts.map +1 -1
  187. package/lib/components/toolbar/Toolbar.d.ts +10 -303
  188. package/lib/components/toolbar/Toolbar.d.ts.map +1 -1
  189. package/lib/components/toolbar/Toolbar.js +16 -16
  190. package/lib/components/toolbar/Toolbar.js.map +1 -1
  191. package/lib/components/toolbar/TooltipHelpContent.d.ts +1 -1
  192. package/lib/components/toolbar/TooltipHelpContent.d.ts.map +1 -1
  193. package/lib/components/toolbar/TooltipHelpContent.js +1 -3
  194. package/lib/components/toolbar/TooltipHelpContent.js.map +1 -1
  195. package/lib/components/toolbar/useCheckOverflow.d.ts +2 -1
  196. package/lib/components/toolbar/useCheckOverflow.d.ts.map +1 -1
  197. package/lib/components/toolbar/useCheckOverflow.js.map +1 -1
  198. package/lib/components/utils/index.d.ts +1 -0
  199. package/lib/components/utils/index.d.ts.map +1 -1
  200. package/lib/components/utils/index.js +1 -0
  201. package/lib/components/utils/index.js.map +1 -1
  202. package/lib/components/utils/svg.d.ts +42 -0
  203. package/lib/components/utils/svg.d.ts.map +1 -0
  204. package/lib/components/utils/svg.js +60 -0
  205. package/lib/components/utils/svg.js.map +1 -0
  206. package/lib/components/value-renderers/Boolean.d.ts +1 -1
  207. package/lib/components/value-renderers/Boolean.d.ts.map +1 -1
  208. package/lib/components/value-renderers/Color.d.ts +1 -1
  209. package/lib/components/value-renderers/Color.d.ts.map +1 -1
  210. package/lib/components/value-renderers/Component.d.ts +1 -1
  211. package/lib/components/value-renderers/Component.d.ts.map +1 -1
  212. package/lib/components/value-renderers/Number.d.ts +1 -1
  213. package/lib/components/value-renderers/Number.d.ts.map +1 -1
  214. package/lib/components/value-renderers/ObjectRenderer.d.ts +1 -1
  215. package/lib/components/value-renderers/ObjectRenderer.d.ts.map +1 -1
  216. package/lib/components/value-renderers/Text.d.ts +1 -1
  217. package/lib/components/value-renderers/Text.d.ts.map +1 -1
  218. package/lib/components/value-renderers/Title.d.ts +1 -1
  219. package/lib/components/value-renderers/Title.d.ts.map +1 -1
  220. package/package.json +58 -61
  221. package/src/components/activity_bar/activity_bar.tsx +5 -1
  222. package/src/components/button/Button.tsx +39 -42
  223. package/src/components/color-picker/color-picker-dropdown/ColorPickerDropdown.tsx +8 -6
  224. package/src/components/color-picker/gradient_select/gradient_select.tsx +1 -1
  225. package/src/components/color-picker/react-color/ColorPicker.tsx +8 -4
  226. package/src/components/color-picker/react-color/common/EditableInput.tsx +2 -4
  227. package/src/components/color-picker/react-color/common/Hue.tsx +16 -9
  228. package/src/components/color-picker/react-color/sketch/SketchFields.tsx +1 -1
  229. package/src/components/form/components/input/radio_group.tsx +2 -2
  230. package/src/components/fullscreen/fullscreen_context.provider.tsx +2 -2
  231. package/src/components/info-panel/InfoPanel.tsx +13 -12
  232. package/src/components/input/radio-button-group/RadioButtonGroup.tsx +9 -4
  233. package/src/components/root-layout/root_layout.tsx +2 -4
  234. package/src/components/split_pane/split_pane.tsx +1 -1
  235. package/src/components/split_pane/use_split_pane_size.tsx +1 -1
  236. package/src/components/table/flash_row/use_flash_row_effect.ts +1 -1
  237. package/src/components/table/reorder_rows/draggable_row_context.ts +1 -1
  238. package/src/components/table/reorder_rows/draggable_row_tr.tsx +1 -1
  239. package/src/components/table/reorder_rows/item_data.ts +4 -1
  240. package/src/components/table/reorder_rows/item_order_provider.tsx +8 -6
  241. package/src/components/table/reorder_rows/use_drop_monitor.ts +1 -1
  242. package/src/components/table/table_body.tsx +4 -2
  243. package/src/components/table/table_root.tsx +3 -1
  244. package/src/components/table/table_row.tsx +3 -3
  245. package/src/components/table/table_scroll_container.tsx +3 -3
  246. package/src/components/table/use_table_scroll.ts +1 -2
  247. package/src/components/toolbar/OverflowButton.tsx +9 -10
  248. package/src/components/toolbar/Toolbar.tsx +48 -31
  249. package/src/components/toolbar/useCheckOverflow.tsx +2 -1
  250. package/src/components/utils/index.ts +1 -0
  251. package/src/components/utils/svg.ts +120 -0
@@ -1,10 +1,17 @@
1
1
  import type {
2
2
  ButtonGroupProps,
3
3
  Intent,
4
- PopoverProps,
4
+ PopoverNextProps,
5
5
  TooltipProps,
6
6
  } from '@blueprintjs/core';
7
- import { ButtonGroup, Classes, Colors, Icon, Popover } from '@blueprintjs/core';
7
+ import {
8
+ ButtonGroup,
9
+ Classes,
10
+ Colors,
11
+ Icon,
12
+ PopoverNext,
13
+ } from '@blueprintjs/core';
14
+ import type { StyledComponent } from '@emotion/styled';
8
15
  import styled from '@emotion/styled';
9
16
  import type { MouseEvent, ReactNode } from 'react';
10
17
  import { useLayoutEffect, useMemo, useRef } from 'react';
@@ -33,7 +40,9 @@ interface ToolbarBaseProps {
33
40
  }
34
41
 
35
42
  export interface ToolbarProps
36
- extends ToolbarBaseProps, Pick<ButtonGroupProps, 'children' | 'vertical'> {
43
+ extends
44
+ ToolbarBaseProps,
45
+ Pick<ButtonGroupProps, 'children' | 'vertical' | 'aria-label'> {
37
46
  /**
38
47
  * The type of interaction which triggers a popover to open.
39
48
  * This prop only affects children which are `Toolbar.PopoverItem`.
@@ -55,7 +64,10 @@ export interface ToolbarProps
55
64
  export interface ToolbarItemProps
56
65
  extends
57
66
  ToolbarBaseProps,
58
- Pick<ButtonProps, 'id' | 'icon' | 'active' | 'tag' | 'tagProps'> {
67
+ Pick<
68
+ ButtonProps,
69
+ 'id' | 'icon' | 'active' | 'tag' | 'tagProps' | 'aria-label'
70
+ > {
59
71
  tooltip?: TooltipProps['content'];
60
72
  tooltipProps?: Omit<TooltipProps, 'content'>;
61
73
  onClick?: (event: MouseEvent) => void;
@@ -66,7 +78,7 @@ interface ToolbarItemInternalProps extends ToolbarItemProps {
66
78
  }
67
79
 
68
80
  export interface ToolbarPopoverItemProps extends Omit<
69
- PopoverProps,
81
+ PopoverNextProps,
70
82
  'targetProps'
71
83
  > {
72
84
  itemProps: ToolbarItemProps;
@@ -91,7 +103,7 @@ const Container = styled.div<ContainerProps>`
91
103
  width: 100%;
92
104
  `;
93
105
 
94
- export const ToolbarButton = styled(Button)`
106
+ export const ToolbarButton: StyledComponent<ButtonProps> = styled(Button)`
95
107
  .${Classes.ICON} {
96
108
  /* Color of icon in button is lighter in Blueprintjs. We want a better contrast in the toolbars */
97
109
  color: ${Colors.DARK_GRAY3} !important;
@@ -117,6 +129,7 @@ export function Toolbar(props: ToolbarProps) {
117
129
  popoverInteractionKind,
118
130
  overflow = 'wrap',
119
131
  overflowButtonProps,
132
+ 'aria-label': ariaLabel,
120
133
  } = props;
121
134
 
122
135
  const { placement = 'end' } = overflowButtonProps || {};
@@ -148,7 +161,7 @@ export function Toolbar(props: ToolbarProps) {
148
161
 
149
162
  function update() {
150
163
  const lastElement = ref.current?.lastElementChild;
151
- if (!lastElement) {
164
+ if (!ref.current || !lastElement) {
152
165
  return;
153
166
  }
154
167
  ref.current.style.width = 'initial';
@@ -174,6 +187,8 @@ export function Toolbar(props: ToolbarProps) {
174
187
  return (
175
188
  <ToolbarProvider value={contextValue}>
176
189
  <ButtonGroup
190
+ role="toolbar"
191
+ aria-label={ariaLabel}
177
192
  ref={ref}
178
193
  key={String(vertical)}
179
194
  vertical={vertical}
@@ -193,6 +208,8 @@ export function Toolbar(props: ToolbarProps) {
193
208
  <ToolbarProvider value={contextValue}>
194
209
  <Container vertical={vertical} placement={placement}>
195
210
  <ButtonGroup
211
+ role="toolbar"
212
+ aria-label={ariaLabel}
196
213
  ref={ref}
197
214
  // Reset because of layout effect above
198
215
  // TODO: remove once the workaround is no longer needed
@@ -263,28 +280,26 @@ function ToolbarItemInternal(props: ToolbarItemInternalProps) {
263
280
  width: 'fit-content',
264
281
  }}
265
282
  icon={
266
- <>
267
- {isPopover ? (
268
- <>
269
- {/*For the icon to be properly styled, it should not have any siblings*/}
270
- <div style={{ display: 'contents' }}>{normalizedIcon}</div>
271
- <Icon
272
- icon="caret-right"
273
- size={9}
274
- style={{
275
- transform: 'rotate(45deg)',
276
- position: 'absolute',
277
- bottom: 0,
278
- right: 0,
279
- width: 9,
280
- height: 9,
281
- }}
282
- />
283
- </>
284
- ) : (
285
- normalizedIcon
286
- )}
287
- </>
283
+ isPopover ? (
284
+ <div style={{ display: 'contents' }}>
285
+ {/*For the icon to be properly styled, it should not have any siblings*/}
286
+ <div style={{ display: 'contents' }}>{normalizedIcon}</div>
287
+ <Icon
288
+ icon="caret-right"
289
+ size={9}
290
+ style={{
291
+ transform: 'rotate(45deg)',
292
+ position: 'absolute',
293
+ bottom: 0,
294
+ right: 0,
295
+ width: 9,
296
+ height: 9,
297
+ }}
298
+ />
299
+ </div>
300
+ ) : (
301
+ normalizedIcon
302
+ )
288
303
  }
289
304
  onClick={onClick}
290
305
  tooltipProps={
@@ -306,7 +321,7 @@ function ToolbarItemInternal(props: ToolbarItemInternalProps) {
306
321
 
307
322
  Toolbar.Item = ToolbarItem;
308
323
 
309
- const ToolbarPopover = styled(Popover)`
324
+ const ToolbarPopover = styled(PopoverNext)`
310
325
  .${Classes.ICON} {
311
326
  color: ${Colors.DARK_GRAY3};
312
327
  }
@@ -320,7 +335,9 @@ Toolbar.PopoverItem = function ToolbarPopoverItem(
320
335
 
321
336
  return (
322
337
  <ToolbarPopover
323
- minimal
338
+ shouldReturnFocusOnClose={false}
339
+ animation="minimal"
340
+ arrow={false}
324
341
  disabled={disabled}
325
342
  placement={vertical ? 'right-start' : 'bottom-start'}
326
343
  interactionKind={popoverInteractionKind}
@@ -1,9 +1,10 @@
1
+ import type { RefObject } from 'react';
1
2
  import { useLayoutEffect, useState } from 'react';
2
3
 
3
4
  import type { Overflow } from './Toolbar.tsx';
4
5
 
5
6
  interface UseCheckOverflowOptions {
6
- containerRef: React.RefObject<HTMLDivElement>;
7
+ containerRef: RefObject<HTMLDivElement | null>;
7
8
  vertical: boolean;
8
9
  overflow: Overflow;
9
10
  }
@@ -1,3 +1,4 @@
1
1
  export * from './assert.js';
2
2
  export * from './debounce.js';
3
3
  export * from './throttle.js';
4
+ export * from './svg.js';
@@ -0,0 +1,120 @@
1
+ import { assert } from './assert.ts';
2
+
3
+ export interface ExportSVGOptions {
4
+ /**
5
+ * CSS Selector to remove from the SVG.
6
+ *
7
+ * @example '[data-no-export="true"]' And add `data-no-export="true"` attribute to the elements you don't want in the exported SVG.
8
+ * @default undefined (Will not remove any elements)
9
+ */
10
+ removeFromSelector?: string;
11
+
12
+ /**
13
+ * Add a background to the SVG. It can be useful to integrate exported svg in diapositive documents.
14
+ *
15
+ * @default false
16
+ */
17
+ addBackground?: boolean;
18
+
19
+ /**
20
+ * Background color of the SVG. You can use any valid CSS color.
21
+ *
22
+ * @default 'white' (It needs `addBackground: true` to work)
23
+ */
24
+ backgroundColor?: string;
25
+
26
+ /**
27
+ * Custom mutations to apply to the SVG.
28
+ */
29
+ customMutations?: (svg: SVGSVGElement) => void;
30
+ }
31
+
32
+ /**
33
+ * Export an SVG element to a string.
34
+ *
35
+ * @param base
36
+ * @param options
37
+ *
38
+ * @return The outerHTML of the SVG element.
39
+ */
40
+ export function exportSVG(
41
+ base: SVGSVGElement,
42
+ options: ExportSVGOptions = {},
43
+ ): string {
44
+ const {
45
+ removeFromSelector,
46
+ addBackground = false,
47
+ backgroundColor = 'white',
48
+ customMutations,
49
+ } = options;
50
+
51
+ const svg = base.cloneNode(true) as SVGSVGElement;
52
+
53
+ // cleanup svg
54
+ if (removeFromSelector) {
55
+ const items = svg.querySelectorAll(removeFromSelector);
56
+ for (const item of items) {
57
+ item.remove();
58
+ }
59
+ }
60
+
61
+ if (addBackground) {
62
+ const background = document.createElementNS(
63
+ 'http://www.w3.org/2000/svg',
64
+ 'rect',
65
+ );
66
+ background.setAttribute('x', '0');
67
+ background.setAttribute('y', '0');
68
+ background.setAttribute('width', '100%');
69
+ background.setAttribute('height', '100%');
70
+ background.setAttribute('fill', backgroundColor);
71
+ svg.prepend(background);
72
+ }
73
+
74
+ customMutations?.(svg);
75
+
76
+ return svg.outerHTML;
77
+ }
78
+
79
+ /**
80
+ * Export an SVG element to a PNG blob.
81
+ *
82
+ * @param base
83
+ * @param options
84
+ */
85
+ export async function exportSVGAsPNG(
86
+ base: SVGSVGElement,
87
+ options: ExportSVGOptions = {},
88
+ ): Promise<Blob> {
89
+ const {
90
+ removeFromSelector,
91
+ addBackground = false,
92
+ backgroundColor = 'white',
93
+ customMutations,
94
+ } = options;
95
+
96
+ const svg = exportSVG(base, {
97
+ removeFromSelector,
98
+ addBackground: false,
99
+ customMutations,
100
+ });
101
+ const svgBlob = new Blob([svg], { type: 'image/svg+xml' });
102
+
103
+ const img = new Image();
104
+ img.src = URL.createObjectURL(svgBlob);
105
+ await img.decode().finally(() => URL.revokeObjectURL(img.src));
106
+
107
+ const canvas = new OffscreenCanvas(img.naturalWidth, img.naturalHeight);
108
+ const ctx = canvas.getContext('2d');
109
+ assert(ctx);
110
+
111
+ if (addBackground) {
112
+ ctx.fillStyle = backgroundColor;
113
+ ctx.fillRect(0, 0, canvas.width, canvas.height);
114
+ }
115
+
116
+ ctx.drawImage(img, 0, 0);
117
+
118
+ const png = await canvas.convertToBlob({ type: 'image/png' });
119
+ return png;
120
+ }