@jetbrains/ring-ui 8.0.0-beta.2 → 8.0.0-beta.4

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 (121) hide show
  1. package/babel.config.js +1 -1
  2. package/components/auth-dialog-service/auth-dialog-service.js +2 -2
  3. package/components/checkbox/checkbox.d.ts +1 -1
  4. package/components/collapse/collapse-content.js +2 -2
  5. package/components/collapse/collapse-control.js +2 -2
  6. package/components/collapse/collapse.js +2 -2
  7. package/components/collapsible-group/collapsible-group.css +138 -0
  8. package/components/collapsible-group/collapsible-group.d.ts +20 -0
  9. package/components/collapsible-group/collapsible-group.js +73 -0
  10. package/components/confirm-service/confirm-service.js +2 -2
  11. package/components/data-list/data-list.d.ts +1 -1
  12. package/components/data-list/data-list.mock.d.ts +1 -1
  13. package/components/data-list/item.d.ts +1 -1
  14. package/components/data-list/selection.d.ts +1 -1
  15. package/components/data-list/selection.js +1 -1
  16. package/components/date-picker/months.js +2 -2
  17. package/components/date-picker/use-scroll-behavior.js +5 -6
  18. package/components/date-picker/years.js +2 -2
  19. package/components/dialog/dialog.d.ts +2 -2
  20. package/components/dialog/dialog.js +2 -2
  21. package/components/dropdown-menu/dropdown-menu.d.ts +4 -4
  22. package/components/dropdown-menu/dropdown-menu.js +4 -4
  23. package/components/editable-heading/editable-heading.d.ts +1 -2
  24. package/components/editable-heading/editable-heading.js +18 -19
  25. package/components/expand/collapsible-group.css +23 -89
  26. package/components/expand/collapsible-group.d.ts +8 -16
  27. package/components/expand/collapsible-group.js +13 -72
  28. package/components/global/compose-refs.d.ts +2 -1
  29. package/components/global/compose-refs.js +24 -8
  30. package/components/global/create-stateful-context.js +5 -5
  31. package/components/global/focus-with-temporary-tabindex.d.ts +11 -0
  32. package/components/global/focus-with-temporary-tabindex.js +21 -0
  33. package/components/global/intersection-observer-context.d.ts +31 -11
  34. package/components/global/intersection-observer-context.js +47 -28
  35. package/components/global/is-within-interactive-element.d.ts +6 -0
  36. package/components/global/is-within-interactive-element.js +26 -0
  37. package/components/global/is-within-navigable-element.d.ts +6 -0
  38. package/components/global/is-within-navigable-element.js +27 -0
  39. package/components/global/parse-css-duration.d.ts +5 -0
  40. package/components/global/parse-css-duration.js +13 -0
  41. package/components/global/rerender-hoc.d.ts +4 -2
  42. package/components/global/rerender-hoc.js +4 -4
  43. package/components/global/schedule-with-cleanup.d.ts +12 -0
  44. package/components/global/schedule-with-cleanup.js +34 -0
  45. package/components/{legacy-table/selection.d.ts → global/table-selection.d.ts} +14 -14
  46. package/components/{legacy-table/selection.js → global/table-selection.js} +2 -2
  47. package/components/global/theme.d.ts +4 -3
  48. package/components/global/theme.js +8 -8
  49. package/components/i18n/i18n-context.js +1 -1
  50. package/components/input/input.d.ts +1 -1
  51. package/components/island/adaptive-island-hoc.js +4 -4
  52. package/components/island/content.d.ts +7 -2
  53. package/components/island/content.js +5 -5
  54. package/components/legacy-table/cell.js +1 -1
  55. package/components/legacy-table/header-cell.js +1 -1
  56. package/components/legacy-table/header.js +1 -1
  57. package/components/legacy-table/multitable.d.ts +1 -1
  58. package/components/legacy-table/row.d.ts +1 -1
  59. package/components/legacy-table/row.js +1 -1
  60. package/components/legacy-table/selection-adapter.d.ts +3 -3
  61. package/components/legacy-table/selection-shortcuts-hoc.d.ts +5 -5
  62. package/components/legacy-table/simple-table.d.ts +2 -2
  63. package/components/legacy-table/simple-table.js +3 -3
  64. package/components/legacy-table/smart-table.d.ts +5 -5
  65. package/components/legacy-table/smart-table.js +3 -3
  66. package/components/legacy-table/table.js +1 -1
  67. package/components/login-dialog/service.js +2 -2
  68. package/components/popup/popup.d.ts +2 -0
  69. package/components/popup/popup.js +2 -2
  70. package/components/popup/popup.target.d.ts +3 -2
  71. package/components/popup/popup.target.js +4 -6
  72. package/components/query-assist/query-assist.d.ts +3 -1
  73. package/components/query-assist/query-assist.js +2 -2
  74. package/components/radio/radio-item.d.ts +3 -3
  75. package/components/radio/radio-item.js +3 -4
  76. package/components/radio/radio.d.ts +2 -2
  77. package/components/radio/radio.js +1 -1
  78. package/components/select/select-popup.d.ts +1 -1
  79. package/components/select/select.d.ts +4 -2
  80. package/components/slider/slider.js +4 -5
  81. package/components/tab-trap/tab-trap.d.ts +3 -3
  82. package/components/tab-trap/tab-trap.js +3 -5
  83. package/components/table/default-item-renderer.d.ts +35 -11
  84. package/components/table/default-item-renderer.js +47 -47
  85. package/components/table/internal/column-animation.d.ts +16 -0
  86. package/components/table/internal/column-animation.js +45 -0
  87. package/components/table/internal/table-header.d.ts +4 -0
  88. package/components/table/internal/table-header.js +357 -0
  89. package/components/table/internal/virtual-items.d.ts +34 -0
  90. package/components/table/{table-virtualize.js → internal/virtual-items.js} +78 -44
  91. package/components/table/item-virtualization.d.ts +35 -0
  92. package/components/table/item-virtualization.js +28 -0
  93. package/components/table/table-const.d.ts +40 -6
  94. package/components/table/table-const.js +14 -5
  95. package/components/table/table-primitives.d.ts +21 -0
  96. package/components/table/table-primitives.js +25 -0
  97. package/components/table/table-props.d.ts +280 -0
  98. package/components/table/table-props.js +1 -0
  99. package/components/table/table.css +171 -66
  100. package/components/table/table.d.ts +205 -224
  101. package/components/table/table.js +298 -2
  102. package/components/tags-input/tags-input.d.ts +3 -1
  103. package/components/tooltip/tooltip.js +2 -2
  104. package/components/upload/upload.d.ts +4 -3
  105. package/components/upload/upload.js +3 -7
  106. package/components/user-agreement/service.js +2 -2
  107. package/components/util-stories.d.ts +26 -0
  108. package/components/util-stories.js +61 -0
  109. package/package.json +41 -41
  110. package/components/date-picker/use-intersection-observer.d.ts +0 -6
  111. package/components/date-picker/use-intersection-observer.js +0 -48
  112. package/components/global/composeRefs.d.ts +0 -6
  113. package/components/global/composeRefs.js +0 -7
  114. package/components/global/use-event-callback.d.ts +0 -1
  115. package/components/global/use-event-callback.js +0 -15
  116. package/components/table/table-base.d.ts +0 -24
  117. package/components/table/table-base.js +0 -79
  118. package/components/table/table-component.d.ts +0 -53
  119. package/components/table/table-component.js +0 -101
  120. package/components/table/table-virtualize.d.ts +0 -32
  121. /package/components/legacy-table/{table.css → legacy-table.css} +0 -0
@@ -1,4 +1,4 @@
1
- import { Component, type PropsWithoutRef } from 'react';
1
+ import { Component, type Ref, type PropsWithoutRef } from 'react';
2
2
  export interface RerenderableComponent<P, S> extends Component<P, S> {
3
3
  node?: HTMLElement | null;
4
4
  }
@@ -7,4 +7,6 @@ export interface RerenderableComponentClass<P, S> {
7
7
  }
8
8
  export default function rerenderHOC<P extends {}, C extends Component<P, unknown>>(ComposedComponent: {
9
9
  new (props: P): C;
10
- }): import("react").ForwardRefExoticComponent<PropsWithoutRef<P> & import("react").RefAttributes<C>>;
10
+ }): ({ ref, ...props }: PropsWithoutRef<P> & {
11
+ ref?: Ref<C>;
12
+ }) => import("react").JSX.Element;
@@ -1,4 +1,4 @@
1
- import { Component, forwardRef } from 'react';
1
+ import { Component } from 'react';
2
2
  import { createComposedRef } from './compose-refs';
3
3
  export default function rerenderHOC(ComposedComponent) {
4
4
  class Rerenderer extends Component {
@@ -9,7 +9,7 @@ export default function rerenderHOC(ComposedComponent) {
9
9
  return (<ComposedComponent {...this.state} ref={instance => ref(instance ? { ...instance, rerender: this.setState.bind(this) } : null)}/>);
10
10
  }
11
11
  }
12
- return forwardRef(function RerendererForwardRef(props, ref) {
13
- return <Rerenderer props={props} forwardedRef={ref}/>;
14
- });
12
+ return function RerendererForwardRef({ ref, ...props }) {
13
+ return <Rerenderer props={props} forwardedRef={ref ?? null}/>;
14
+ };
15
15
  }
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Schedules a timeout and returns a function that cancels it.
3
+ *
4
+ * Useful from React effects.
5
+ */
6
+ export declare function setTimeoutWithCleanup(callback: () => void, delay?: number): () => void;
7
+ /**
8
+ * Schedules an animation frame and returns a function that cancels it.
9
+ *
10
+ * Useful from React effects.
11
+ */
12
+ export declare function requestAnimationFrameWithCleanup(callback: () => void): () => void;
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Schedules a timeout and returns a function that cancels it.
3
+ *
4
+ * Useful from React effects.
5
+ */
6
+ export function setTimeoutWithCleanup(callback, delay = 0) {
7
+ let timerId = window.setTimeout(() => {
8
+ callback();
9
+ timerId = null;
10
+ }, delay);
11
+ return () => {
12
+ if (timerId != null) {
13
+ window.clearTimeout(timerId);
14
+ timerId = null;
15
+ }
16
+ };
17
+ }
18
+ /**
19
+ * Schedules an animation frame and returns a function that cancels it.
20
+ *
21
+ * Useful from React effects.
22
+ */
23
+ export function requestAnimationFrameWithCleanup(callback) {
24
+ let rafId = requestAnimationFrame(() => {
25
+ callback();
26
+ rafId = null;
27
+ });
28
+ return () => {
29
+ if (rafId != null) {
30
+ cancelAnimationFrame(rafId);
31
+ rafId = null;
32
+ }
33
+ };
34
+ }
@@ -17,7 +17,7 @@ export interface CloneWithConfig<T> {
17
17
  selected?: Set<T> | readonly T[] | null | undefined;
18
18
  focused?: T | null | undefined;
19
19
  }
20
- export default class Selection<T> {
20
+ export default class TableSelection<T> {
21
21
  protected _rawData: readonly T[];
22
22
  protected _getChildren: (item: T) => readonly T[];
23
23
  protected _data: Set<T>;
@@ -28,19 +28,19 @@ export default class Selection<T> {
28
28
  constructor({ data, selected, focused, getKey, getChildren, isItemSelectable, }?: TableSelectionConfig<T>);
29
29
  protected _buildData(data: readonly T[] | null | undefined): Set<T>;
30
30
  protected _buildSelected(data: Set<T>, selected: Set<T>): Set<T>;
31
- cloneWith({ data, selected, focused }: CloneWithConfig<T>): Selection<T>;
32
- focus(value: T | null | undefined): Selection<T>;
33
- moveUp(): Selection<T> | undefined;
34
- moveDown(): Selection<T> | undefined;
35
- moveStart(): Selection<T> | undefined;
36
- moveEnd(): Selection<T> | undefined;
37
- select(value?: T | null): Selection<T>;
38
- deselect(value?: T | null): Selection<T>;
39
- toggleSelection(value?: T | null): Selection<T>;
40
- selectAll(): Selection<T>;
41
- resetFocus(): Selection<T>;
42
- resetSelection(): Selection<T>;
43
- reset(): Selection<T>;
31
+ cloneWith({ data, selected, focused }: CloneWithConfig<T>): TableSelection<T>;
32
+ focus(value: T | null | undefined): TableSelection<T>;
33
+ moveUp(): TableSelection<T> | undefined;
34
+ moveDown(): TableSelection<T> | undefined;
35
+ moveStart(): TableSelection<T> | undefined;
36
+ moveEnd(): TableSelection<T> | undefined;
37
+ select(value?: T | null): TableSelection<T>;
38
+ deselect(value?: T | null): TableSelection<T>;
39
+ toggleSelection(value?: T | null): TableSelection<T>;
40
+ selectAll(): TableSelection<T>;
41
+ resetFocus(): TableSelection<T>;
42
+ resetSelection(): TableSelection<T>;
43
+ reset(): TableSelection<T>;
44
44
  isFocused(value: T | null): boolean;
45
45
  isSelected(value: T | null): boolean;
46
46
  getFocused(): T | null;
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @deprecated SelectionItem is deprecated. Use your own item type and provide a `getKey` function instead if there is no `id` identifier in your item type.
3
3
  */
4
- export default class Selection {
4
+ export default class TableSelection {
5
5
  _rawData;
6
6
  _getChildren;
7
7
  _data;
@@ -15,7 +15,7 @@ export default class Selection {
15
15
  return item.id;
16
16
  }
17
17
  // If there's no id provided on item and no getKey supplied, fail fast with a clear message
18
- throw new Error('Selection: getKey is required when items have no "id" property');
18
+ throw new Error('TableSelection: getKey is required when items have no "id" property');
19
19
  }, getChildren = () => [], isItemSelectable = () => true, } = {}) {
20
20
  this._rawData = data;
21
21
  this._getChildren = getChildren;
@@ -1,4 +1,4 @@
1
- import { type HTMLAttributes, type ReactElement, type FunctionComponent } from 'react';
1
+ import { type HTMLAttributes, type Ref, type ReactElement, type FunctionComponent } from 'react';
2
2
  declare enum Theme {
3
3
  AUTO = "auto",
4
4
  LIGHT = "light",
@@ -18,11 +18,12 @@ export interface WithThemeClassesProps {
18
18
  export declare function WithThemeClasses({ theme, children }: WithThemeClassesProps): ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
19
19
  export declare function applyTheme(theme: Theme.DARK | Theme.LIGHT, container: HTMLElement): void;
20
20
  type WrapperType = FunctionComponent<HTMLAttributes<HTMLElement> & React.RefAttributes<HTMLElement>>;
21
- export interface ThemeProviderProps extends HTMLAttributes<HTMLDivElement> {
21
+ export interface ThemeProviderProps extends HTMLAttributes<HTMLElement> {
22
+ ref?: Ref<HTMLElement>;
22
23
  theme?: Theme;
23
24
  passToPopups?: boolean;
24
25
  WrapperComponent?: WrapperType;
25
26
  target?: HTMLElement;
26
27
  }
27
- export declare const ThemeProvider: import("react").ForwardRefExoticComponent<ThemeProviderProps & import("react").RefAttributes<HTMLElement>>;
28
+ export declare function ThemeProvider({ ref, ...props }: ThemeProviderProps): import("react").JSX.Element;
28
29
  export default Theme;
@@ -1,4 +1,4 @@
1
- import { useState, useEffect, forwardRef, createContext, } from 'react';
1
+ import { useState, useEffect, createContext, } from 'react';
2
2
  import classNames from 'classnames';
3
3
  import defaultStyles from './variables.css';
4
4
  import styles from './variables_dark.css';
@@ -47,9 +47,9 @@ export function applyTheme(theme, container) {
47
47
  container.classList.add(defaultStyles.light);
48
48
  }
49
49
  }
50
- const DefaultWrapper = forwardRef(function Wrapper(props, ref) {
51
- return <div {...props} ref={ref}/>;
52
- });
50
+ function DefaultWrapper(props) {
51
+ return <div {...props}/>;
52
+ }
53
53
  function ThemeProviderInner({ theme = Theme.AUTO, className, passToPopups, children, WrapperComponent = DefaultWrapper, target, wrapperRef, ...restProps }) {
54
54
  const systemTheme = useTheme();
55
55
  const resolvedTheme = theme === Theme.AUTO ? systemTheme : theme;
@@ -60,13 +60,13 @@ function ThemeProviderInner({ theme = Theme.AUTO, className, passToPopups, child
60
60
  }
61
61
  }, [resolvedTheme, target]);
62
62
  const themeClasses = useThemeClasses(theme);
63
- return (<ThemeContext.Provider value={themeValue}>
63
+ return (<ThemeContext value={themeValue}>
64
64
  <WrapperComponent ref={wrapperRef} className={target ? undefined : classNames(className, themeClasses)} {...restProps}>
65
65
  {children}
66
66
  </WrapperComponent>
67
- </ThemeContext.Provider>);
67
+ </ThemeContext>);
68
68
  }
69
- export const ThemeProvider = forwardRef(function ThemeProvider(props, ref) {
69
+ export function ThemeProvider({ ref, ...props }) {
70
70
  return <ThemeProviderInner {...props} wrapperRef={ref}/>;
71
- });
71
+ }
72
72
  export default Theme;
@@ -9,5 +9,5 @@ export const I18nContextHolder = ({ children, messages }) => {
9
9
  useEffect(() => {
10
10
  setTranslations(messages);
11
11
  }, [messages]);
12
- return <I18nContext.Provider value={{ messages, translate }}>{children}</I18nContext.Provider>;
12
+ return <I18nContext value={{ messages, translate }}>{children}</I18nContext>;
13
13
  };
@@ -69,7 +69,7 @@ export declare class Input extends PureComponent<InputProps> {
69
69
  stretch(el: HTMLElement | null | undefined): void;
70
70
  adapt(): void;
71
71
  inputRef: (el: HTMLInputElement | HTMLTextAreaElement | null) => void;
72
- composedInputRef: import("memoize-one").MemoizedFn<(...refs: (Ref<HTMLInputElement | HTMLTextAreaElement> | undefined)[]) => (value: T | null) => void>;
72
+ composedInputRef: import("memoize-one").MemoizedFn<(...refs: (Ref<HTMLInputElement | HTMLTextAreaElement> | undefined)[]) => (value: T | null) => () => void>;
73
73
  clear: (e: React.MouseEvent<HTMLButtonElement>) => void;
74
74
  handleInputChange: (e: React.ChangeEvent<HTMLInputElement>) => void;
75
75
  handleTextareaChange: (e: React.ChangeEvent<HTMLTextAreaElement>) => void;
@@ -17,11 +17,11 @@ export default function adaptiveIslandHOC(ComposedComponent) {
17
17
  }
18
18
  };
19
19
  render() {
20
- return (<PhaseContext.Provider value={this.state.phase}>
21
- <ScrollHandlerContext.Provider value={this.onContentScroll}>
20
+ return (<PhaseContext value={this.state.phase}>
21
+ <ScrollHandlerContext value={this.onContentScroll}>
22
22
  <ComposedComponent {...this.props}/>
23
- </ScrollHandlerContext.Provider>
24
- </PhaseContext.Provider>);
23
+ </ScrollHandlerContext>
24
+ </PhaseContext>);
25
25
  }
26
26
  };
27
27
  }
@@ -1,11 +1,13 @@
1
- import { Component, type HTMLAttributes } from 'react';
1
+ import { Component, type Ref, type HTMLAttributes } from 'react';
2
2
  import createResizeDetector from 'element-resize-detector';
3
3
  export interface IslandContentProps extends Omit<HTMLAttributes<HTMLElement>, 'onScroll'> {
4
+ ref?: Ref<Content>;
4
5
  fade?: boolean | null | undefined;
5
6
  onScrollToBottom?: (() => void) | null | undefined;
6
7
  scrollableWrapperClassName?: string | null | undefined;
7
8
  }
8
9
  export interface IslandContentInnerProps extends IslandContentProps {
10
+ ref?: Ref<Content>;
9
11
  onScroll: (node: HTMLElement) => void;
10
12
  bottomBorder: boolean;
11
13
  }
@@ -29,5 +31,8 @@ declare class Content extends Component<IslandContentInnerProps> {
29
31
  setScrollableNodeAndCalculatePosition: (node: HTMLElement | null) => void;
30
32
  render(): import("react").JSX.Element;
31
33
  }
32
- declare const ContentWrapper: import("react").ForwardRefExoticComponent<IslandContentProps & import("react").RefAttributes<Content>>;
34
+ declare const ContentWrapper: {
35
+ ({ ...props }: IslandContentProps): import("react").JSX.Element;
36
+ displayName: string;
37
+ };
33
38
  export default ContentWrapper;
@@ -1,4 +1,4 @@
1
- import { forwardRef, Component } from 'react';
1
+ import { Component } from 'react';
2
2
  import classNames from 'classnames';
3
3
  import createResizeDetector from 'element-resize-detector';
4
4
  import scheduleRAF from '../global/schedule-raf';
@@ -57,7 +57,7 @@ class Content extends Component {
57
57
  this.calculateScrollPosition();
58
58
  };
59
59
  render() {
60
- const { children, className, bottomBorder, scrollableWrapperClassName, onScroll, onScrollToBottom, fade, tabIndex, ...restProps } = this.props;
60
+ const { ref, children, className, bottomBorder, scrollableWrapperClassName, onScroll, onScrollToBottom, fade, tabIndex, ...restProps } = this.props;
61
61
  const { scrolledToTop, scrolledToBottom } = this.state;
62
62
  const classes = classNames(styles.content, className, {
63
63
  [styles.contentWithTopFade]: fade && !scrolledToTop,
@@ -75,11 +75,11 @@ class Content extends Component {
75
75
  </div>);
76
76
  }
77
77
  }
78
- const ContentWrapper = forwardRef((props, ref) => (<ScrollHandlerContext.Consumer>
78
+ const ContentWrapper = ({ ...props }) => (<ScrollHandlerContext.Consumer>
79
79
  {onScroll => {
80
80
  const addProps = onScroll ? { onScroll, bottomBorder: true } : {};
81
- return <Content {...props} {...addProps} ref={ref}/>;
81
+ return <Content {...props} {...addProps}/>;
82
82
  }}
83
- </ScrollHandlerContext.Consumer>));
83
+ </ScrollHandlerContext.Consumer>);
84
84
  ContentWrapper.displayName = 'ContentWrapper';
85
85
  export default ContentWrapper;
@@ -1,7 +1,7 @@
1
1
  import { PureComponent } from 'react';
2
2
  import classNames from 'classnames';
3
3
  import dataTests from '../global/data-tests';
4
- import style from './table.css';
4
+ import style from './legacy-table.css';
5
5
  export default class Cell extends PureComponent {
6
6
  render() {
7
7
  const classes = classNames(style.cell, this.props.className);
@@ -4,7 +4,7 @@ import sortableIcon from '@jetbrains/icons/unsorted-12px';
4
4
  import sortedIcon from '@jetbrains/icons/chevron-12px-down';
5
5
  import Icon from '../icon/icon';
6
6
  import dataTests from '../global/data-tests';
7
- import style from './table.css';
7
+ import style from './legacy-table.css';
8
8
  export default class HeaderCell extends PureComponent {
9
9
  static defaultProps = {
10
10
  onSort: () => { },
@@ -3,7 +3,7 @@ import classNames from 'classnames';
3
3
  import Checkbox from '../checkbox/checkbox';
4
4
  import getUID from '../global/get-uid';
5
5
  import HeaderCell from './header-cell';
6
- import style from './table.css';
6
+ import style from './legacy-table.css';
7
7
  export default class Header extends PureComponent {
8
8
  static defaultProps = {
9
9
  selectable: true,
@@ -1,6 +1,6 @@
1
1
  import { PureComponent, type ReactElement } from 'react';
2
2
  import { type TableAttrs } from './table';
3
- import { type SelectionItem } from './selection';
3
+ import { type SelectionItem } from '../global/table-selection';
4
4
  type TableComponent = ReactElement<TableAttrs<SelectionItem>>;
5
5
  export interface MultiTableProps {
6
6
  children: TableComponent[];
@@ -55,7 +55,7 @@ export default class Row<T extends object> extends PureComponent<RowProps<T>> {
55
55
  onDoubleClick: () => void;
56
56
  row?: HTMLElement | null;
57
57
  rowRef: (el: HTMLElement | null) => void;
58
- composedRowRef: import("memoize-one").MemoizedFn<(...refs: (React.Ref<HTMLElement> | undefined)[]) => (value: T_1 | null) => void>;
58
+ composedRowRef: import("memoize-one").MemoizedFn<(...refs: (React.Ref<HTMLElement> | undefined)[]) => (value: T_1 | null) => () => void>;
59
59
  render(): React.JSX.Element;
60
60
  }
61
61
  export type RowAttrs<T extends object> = React.JSX.LibraryManagedAttributes<typeof Row, RowProps<T>>;
@@ -11,7 +11,7 @@ import dataTests from '../global/data-tests';
11
11
  import getUID from '../global/get-uid';
12
12
  import { createComposedRef } from '../global/compose-refs';
13
13
  import Cell from './cell';
14
- import style from './table.css';
14
+ import style from './legacy-table.css';
15
15
  const DragHandle = ({ alwaysShowDragHandle, dragHandleTitle = 'Drag to reorder' }) => {
16
16
  const classes = classNames(style.dragHandle, {
17
17
  [style.visibleDragHandle]: alwaysShowDragHandle,
@@ -1,6 +1,6 @@
1
- import type Selection from './selection';
2
- import type { SelectionItem } from './selection';
3
- export default function selectionAdapter(getSelection: () => Selection<SelectionItem>): {
1
+ import type TableSelection from '../global/table-selection';
2
+ import type { SelectionItem } from '../global/table-selection';
3
+ export default function selectionAdapter(getSelection: () => TableSelection<SelectionItem>): {
4
4
  readonly size: number;
5
5
  readonly items: SelectionItem[];
6
6
  };
@@ -1,16 +1,16 @@
1
1
  import { type ComponentClass } from 'react';
2
2
  import { type ShortcutsMap } from '../shortcuts/core';
3
- import type Selection from './selection';
3
+ import type TableSelection from '../global/table-selection';
4
4
  export interface SelectionShortcutsOuterProps<T extends object> {
5
- selection: Selection<T>;
5
+ selection: TableSelection<T>;
6
6
  selectable?: boolean | undefined;
7
- onSelect?: ((selection: Selection<T>) => void) | undefined;
7
+ onSelect?: ((selection: TableSelection<T>) => void) | undefined;
8
8
  shortcuts?: ShortcutsMap | undefined;
9
9
  }
10
10
  export interface SelectionShortcutsAddProps<T extends object> {
11
- selection: Selection<T>;
11
+ selection: TableSelection<T>;
12
12
  selectable: boolean;
13
- onSelect: (selection: Selection<T>) => void;
13
+ onSelect: (selection: TableSelection<T>) => void;
14
14
  shortcutsMap: ShortcutsMap;
15
15
  }
16
16
  export type SelectionShortcutsProps<T extends object, P> = Omit<P, keyof SelectionShortcutsAddProps<T>> & SelectionShortcutsOuterProps<T>;
@@ -1,6 +1,6 @@
1
1
  import { PureComponent } from 'react';
2
2
  import { type TableAttrs } from './table';
3
- import Selection, { type SelectionItem } from './selection';
3
+ import TableSelection, { type SelectionItem } from '../global/table-selection';
4
4
  export interface SimpleTableProps<T extends SelectionItem> extends Omit<TableAttrs<T>, 'selection' | 'onSelect' | 'selectable'> {
5
5
  }
6
6
  declare class SimpleTable<T extends SelectionItem> extends PureComponent<SimpleTableProps<T>> {
@@ -9,7 +9,7 @@ declare class SimpleTable<T extends SelectionItem> extends PureComponent<SimpleT
9
9
  wideFirstColumn: boolean;
10
10
  };
11
11
  state: {
12
- selection: Selection<T>;
12
+ selection: TableSelection<T>;
13
13
  };
14
14
  classes: string;
15
15
  render(): import("react").JSX.Element;
@@ -1,15 +1,15 @@
1
1
  import { PureComponent } from 'react';
2
2
  import classNames from 'classnames';
3
3
  import Table from './table';
4
- import Selection from './selection';
5
- import style from './table.css';
4
+ import TableSelection from '../global/table-selection';
5
+ import style from './legacy-table.css';
6
6
  class SimpleTable extends PureComponent {
7
7
  static defaultProps = {
8
8
  selectable: false,
9
9
  wideFirstColumn: false,
10
10
  };
11
11
  state = {
12
- selection: new Selection({
12
+ selection: new TableSelection({
13
13
  data: this.props.data,
14
14
  }),
15
15
  };
@@ -1,19 +1,19 @@
1
1
  import { PureComponent } from 'react';
2
2
  import { type TableAttrs } from './table';
3
- import Selection, { type SelectionItem } from './selection';
3
+ import TableSelection, { type SelectionItem } from '../global/table-selection';
4
4
  export interface SmartTableProps<T extends SelectionItem> extends Omit<TableAttrs<T>, 'selection' | 'onSelect'> {
5
- onSelectionChange: (selection: Selection<T>) => void;
6
- selection?: Selection<T>;
5
+ onSelectionChange: (selection: TableSelection<T>) => void;
6
+ selection?: TableSelection<T>;
7
7
  }
8
8
  declare class SmartTable<T extends SelectionItem> extends PureComponent<SmartTableProps<T>> {
9
9
  static defaultProps: {
10
10
  onSelectionChange: () => void;
11
11
  };
12
12
  state: {
13
- selection: Selection<T>;
13
+ selection: TableSelection<T>;
14
14
  };
15
15
  UNSAFE_componentWillReceiveProps(nextProps: SmartTableProps<T>): void;
16
- onSelect: (selection: Selection<T>) => void;
16
+ onSelect: (selection: TableSelection<T>) => void;
17
17
  render(): import("react").JSX.Element;
18
18
  }
19
19
  export default SmartTable;
@@ -1,12 +1,12 @@
1
1
  import { PureComponent } from 'react';
2
2
  import Table from './table';
3
- import Selection from './selection';
3
+ import TableSelection from '../global/table-selection';
4
4
  class SmartTable extends PureComponent {
5
5
  static defaultProps = {
6
6
  onSelectionChange: () => { },
7
7
  };
8
8
  state = {
9
- selection: new Selection({
9
+ selection: new TableSelection({
10
10
  data: this.props.data,
11
11
  isItemSelectable: this.props.isItemSelectable,
12
12
  }),
@@ -18,7 +18,7 @@ class SmartTable extends PureComponent {
18
18
  }
19
19
  else if (this.props.data !== data || this.props.isItemSelectable !== isItemSelectable) {
20
20
  this.setState({
21
- selection: new Selection({ data, isItemSelectable }),
21
+ selection: new TableSelection({ data, isItemSelectable }),
22
22
  });
23
23
  }
24
24
  }
@@ -13,7 +13,7 @@ import Header from './header';
13
13
  import selectionShortcutsHOC from './selection-shortcuts-hoc';
14
14
  import disableHoverHOC from './disable-hover-hoc';
15
15
  import Row from './row-with-focus-sensor';
16
- import style from './table.css';
16
+ import style from './legacy-table.css';
17
17
  /**
18
18
  * Interactive table with selection and keyboard navigation support.
19
19
  */
@@ -7,9 +7,9 @@ const reactRoot = createRoot(containerElement);
7
7
  * Renders LoginDialog into virtual node to skip maintaining container
8
8
  */
9
9
  function renderLoginDialog(props) {
10
- reactRoot.render(<ControlsHeightContext.Provider value={getGlobalControlsHeight()}>
10
+ reactRoot.render(<ControlsHeightContext value={getGlobalControlsHeight()}>
11
11
  <LoginDialog {...props}/>
12
- </ControlsHeightContext.Provider>);
12
+ </ControlsHeightContext>);
13
13
  }
14
14
  function noop() { }
15
15
  export default function showAuthDialog(props = { onCancel: noop }) {
@@ -45,6 +45,8 @@ export interface BasePopupProps {
45
45
  onMouseUp?: ((e: React.MouseEvent<HTMLElement>) => void) | undefined;
46
46
  onMouseOver?: ((e: React.SyntheticEvent<HTMLElement>) => void) | undefined;
47
47
  onMouseOut?: ((e: React.SyntheticEvent<HTMLElement>) => void) | undefined;
48
+ onMouseEnter?: ((e: React.MouseEvent<HTMLElement>) => void) | undefined;
49
+ onMouseLeave?: ((e: React.MouseEvent<HTMLElement>) => void) | undefined;
48
50
  onContextMenu?: ((e: React.MouseEvent<HTMLElement>) => void) | undefined;
49
51
  onDirectionChange?: ((direction: Directions) => void) | null | undefined;
50
52
  onShow?: (() => void) | null | undefined;
@@ -282,7 +282,7 @@ export default class Popup extends PureComponent {
282
282
  esc: this._onEscPress,
283
283
  };
284
284
  render() {
285
- const { className, style, hidden, attached, keepMounted, client, onMouseDown, onMouseUp, onMouseOver, onMouseOut, onContextMenu, 'data-test': dataTest, largeBorderRadius, } = this.props;
285
+ const { className, style, hidden, attached, keepMounted, client, onMouseDown, onMouseUp, onMouseOver, onMouseOut, onMouseEnter, onMouseLeave, onContextMenu, 'data-test': dataTest, largeBorderRadius, } = this.props;
286
286
  const showing = this.state.display === Display.SHOWING;
287
287
  const direction = (this.state.direction || '').toLowerCase().replace(/[_]/g, '-');
288
288
  return (<ThemeContext.Consumer>
@@ -305,7 +305,7 @@ export default class Popup extends PureComponent {
305
305
 
306
306
  {client !== false &&
307
307
  (keepMounted || !hidden) &&
308
- createPortal(<PopupTarget id={this.uid} ref={this.containerRef} onMouseOver={onMouseOver} onFocus={onMouseOver} onMouseOut={onMouseOut} onBlur={onMouseOut} onContextMenu={onContextMenu}>
308
+ createPortal(<PopupTarget id={this.uid} ref={this.containerRef} onMouseOver={onMouseOver} onFocus={onMouseOver} onMouseOut={onMouseOut} onBlur={onMouseOut} onMouseEnter={onMouseEnter} onMouseLeave={onMouseLeave} onContextMenu={onContextMenu}>
309
309
  <div data-test={dataTests('ring-popup', dataTest)} data-test-shown={!hidden && !showing} data-test-direction={direction} ref={this.popupRef} className={classes} style={style} onMouseDown={onMouseDown} onMouseUp={onMouseUp}
310
310
  // mouse handlers are used to track clicking on inner elements
311
311
  role='presentation'>
@@ -1,13 +1,14 @@
1
- import { type HTMLAttributes, type ReactNode } from 'react';
1
+ import { type HTMLAttributes, type Ref, type ReactNode } from 'react';
2
2
  interface ComplexConfig {
3
3
  target: string | Element | undefined;
4
4
  cssPositioning?: boolean;
5
5
  }
6
6
  export declare const PopupTargetContext: import("react").Context<string | Element | ComplexConfig | undefined>;
7
7
  export interface PopupTargetProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {
8
+ ref?: Ref<HTMLDivElement>;
8
9
  id: string;
9
10
  children: ReactNode | ((target: ReactNode) => ReactNode);
10
11
  }
11
12
  export declare function normalizePopupTarget(value: string | Element | undefined | ComplexConfig): string | Element | undefined;
12
- export declare const PopupTarget: import("react").ForwardRefExoticComponent<PopupTargetProps & import("react").RefAttributes<HTMLDivElement>>;
13
+ export declare function PopupTarget({ ref, id, children, ...restProps }: PopupTargetProps): import("react").JSX.Element;
13
14
  export {};
@@ -1,13 +1,11 @@
1
- import { createContext, forwardRef } from 'react';
1
+ import { createContext } from 'react';
2
2
  export const PopupTargetContext = createContext(undefined);
3
3
  export function normalizePopupTarget(value) {
4
4
  return typeof value === 'string' || value instanceof Element ? value : value?.target;
5
5
  }
6
- export const PopupTarget = forwardRef(function PopupTarget({ id, children, ...restProps }, ref) {
6
+ export function PopupTarget({ ref, id, children, ...restProps }) {
7
7
  const target = (<div {...restProps} data-portaltarget={id} ref={ref}>
8
8
  {typeof children !== 'function' && children}
9
9
  </div>);
10
- return (<PopupTargetContext.Provider value={id}>
11
- {typeof children === 'function' ? children(target) : target}
12
- </PopupTargetContext.Provider>);
13
- });
10
+ return (<PopupTargetContext value={id}>{typeof children === 'function' ? children(target) : target}</PopupTargetContext>);
11
+ }
@@ -285,5 +285,7 @@ export default class QueryAssist extends Component<QueryAssistProps> {
285
285
  render(): React.JSX.Element;
286
286
  }
287
287
  export type QueryAssistAttrs = React.JSX.LibraryManagedAttributes<typeof QueryAssist, QueryAssistProps>;
288
- export declare const RerenderableQueryAssist: React.ForwardRefExoticComponent<QueryAssistProps & React.RefAttributes<QueryAssist>>;
288
+ export declare const RerenderableQueryAssist: ({ ref, ...props }: QueryAssistProps & {
289
+ ref?: React.Ref<QueryAssist> | undefined;
290
+ }) => React.JSX.Element;
289
291
  export {};
@@ -733,7 +733,7 @@ export default class QueryAssist extends Component {
733
733
  [styles.hugePlaceholder]: huge,
734
734
  [styles.withoutGlass]: !glass || (!renderLoader && huge),
735
735
  });
736
- return (<ControlsHeightContext.Provider value={ControlsHeight.M}>
736
+ return (<ControlsHeightContext value={ControlsHeight.M}>
737
737
  <I18nContext.Consumer>
738
738
  {({ translate }) => (<div data-test={dataTests('ring-query-assist', dataTest)} className={containerClasses} role='presentation' ref={this.nodeRef}>
739
739
  {this.state.shortcuts && <Shortcuts map={this.shortcutsMap} scope={this.shortcutsScope}/>}
@@ -768,7 +768,7 @@ export default class QueryAssist extends Component {
768
768
  </div>)}
769
769
  </div>)}
770
770
  </I18nContext.Consumer>
771
- </ControlsHeightContext.Provider>);
771
+ </ControlsHeightContext>);
772
772
  }
773
773
  }
774
774
  export const RerenderableQueryAssist = rerenderHOC(QueryAssist);
@@ -1,4 +1,4 @@
1
- import { Component, type InputHTMLAttributes, type ReactNode } from 'react';
1
+ import { Component, type Ref, type InputHTMLAttributes, type ReactNode } from 'react';
2
2
  export interface RadioProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'onChange'> {
3
3
  value?: string | undefined;
4
4
  onChange?: ((value: string) => void) | null | undefined;
@@ -17,7 +17,7 @@ export declare class RadioItemInner extends Component<RadioItemInnerProps> {
17
17
  render(): import("react").JSX.Element;
18
18
  }
19
19
  export interface RadioItemProps extends RadioItemInnerProps {
20
+ ref?: Ref<RadioItemInner>;
20
21
  value: string;
21
22
  }
22
- declare const RadioItem: import("react").ForwardRefExoticComponent<RadioItemProps & import("react").RefAttributes<RadioItemInner>>;
23
- export default RadioItem;
23
+ export default function RadioItem({ ref, ...props }: RadioItemProps): import("react").JSX.Element;
@@ -1,4 +1,4 @@
1
- import { Component, createContext, forwardRef } from 'react';
1
+ import { Component, createContext } from 'react';
2
2
  import classNames from 'classnames';
3
3
  import getUID from '../global/get-uid';
4
4
  import ControlHelp from '../control-help/control-help';
@@ -28,9 +28,8 @@ export class RadioItemInner extends Component {
28
28
  </label>);
29
29
  }
30
30
  }
31
- const RadioItem = forwardRef(function RadioItem(props, ref) {
31
+ export default function RadioItem({ ref, ...props }) {
32
32
  return (<RadioContext.Consumer>
33
33
  {({ value, onChange, ...restContext }) => (<RadioItemInner ref={ref} {...restContext} checked={value !== undefined ? value === props.value : undefined} onChange={onChange ? () => onChange(props.value) : undefined} {...props}/>)}
34
34
  </RadioContext.Consumer>);
35
- });
36
- export default RadioItem;
35
+ }