@jetbrains/ring-ui 8.0.0-beta.1 → 8.0.0-beta.11

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 (211) hide show
  1. package/babel.config.js +1 -9
  2. package/components/alert/alert-actions.d.ts +4 -0
  3. package/components/alert/alert-actions.js +5 -0
  4. package/components/alert/alert-heading.d.ts +4 -0
  5. package/components/alert/alert-heading.js +6 -0
  6. package/components/alert/alert.css +63 -22
  7. package/components/alert/alert.d.ts +14 -1
  8. package/components/alert/alert.js +34 -19
  9. package/components/alert/container.css +1 -2
  10. package/components/alert-service/alert-service.d.ts +2 -1
  11. package/components/alert-service/alert-service.js +8 -4
  12. package/components/auth/auth-core.d.ts +5 -9
  13. package/components/auth/auth-core.js +56 -15
  14. package/components/auth-dialog-service/auth-dialog-service.js +5 -2
  15. package/components/avatar/avatar-info.js +0 -2
  16. package/components/avatar/avatar-size.d.ts +0 -4
  17. package/components/avatar/avatar-size.js +0 -4
  18. package/components/avatar/avatar.js +0 -6
  19. package/components/avatar/fallback-avatar.js +0 -28
  20. package/components/avatar-stack/avatar-stack.js +1 -1
  21. package/components/banner/banner.css +3 -3
  22. package/components/button/button.css +4 -4
  23. package/components/button/button.d.ts +0 -4
  24. package/components/button/button.js +2 -7
  25. package/components/button-group/button-group.css +5 -5
  26. package/components/checkbox/checkbox.d.ts +1 -1
  27. package/components/collapse/collapse-content.d.ts +7 -0
  28. package/components/collapse/collapse-content.js +44 -11
  29. package/components/collapse/collapse-context.d.ts +2 -0
  30. package/components/collapse/collapse-context.js +2 -0
  31. package/components/collapse/collapse-control.js +2 -2
  32. package/components/collapse/collapse.css +8 -2
  33. package/components/collapse/collapse.d.ts +9 -0
  34. package/components/collapse/collapse.js +12 -3
  35. package/components/{expand → collapsible-group}/collapsible-group.css +7 -1
  36. package/components/collapsible-group/collapsible-group.d.ts +33 -0
  37. package/components/{expand → collapsible-group}/collapsible-group.js +13 -21
  38. package/components/confirm/confirm.js +12 -8
  39. package/components/confirm-service/confirm-service.js +5 -2
  40. package/components/data-list/data-list.d.ts +1 -1
  41. package/components/data-list/data-list.mock.d.ts +1 -1
  42. package/components/data-list/item.d.ts +1 -1
  43. package/components/data-list/selection.d.ts +1 -1
  44. package/components/data-list/selection.js +1 -1
  45. package/components/date-picker/consts.d.ts +1 -0
  46. package/components/date-picker/date-input.js +6 -2
  47. package/components/date-picker/months.js +2 -2
  48. package/components/date-picker/use-scroll-behavior.js +5 -6
  49. package/components/date-picker/years.js +2 -2
  50. package/components/dialog/dialog-controls.d.ts +13 -0
  51. package/components/dialog/dialog-controls.js +17 -0
  52. package/components/dialog/dialog-geometry.d.ts +31 -0
  53. package/components/dialog/dialog-geometry.js +48 -0
  54. package/components/dialog/dialog.css +166 -27
  55. package/components/dialog/dialog.d.ts +15 -7
  56. package/components/dialog/dialog.js +110 -29
  57. package/components/dropdown-menu/dropdown-menu.d.ts +4 -4
  58. package/components/dropdown-menu/dropdown-menu.js +4 -4
  59. package/components/editable-heading/editable-heading.d.ts +1 -2
  60. package/components/editable-heading/editable-heading.js +18 -19
  61. package/components/global/compose-refs.d.ts +2 -1
  62. package/components/global/compose-refs.js +24 -8
  63. package/components/global/create-stateful-context.js +5 -5
  64. package/components/global/focus-with-temporary-tabindex.d.ts +11 -0
  65. package/components/global/focus-with-temporary-tabindex.js +21 -0
  66. package/components/global/get-viewport-size.d.ts +5 -0
  67. package/components/global/get-viewport-size.js +5 -0
  68. package/components/global/intersection-observer-context.d.ts +31 -11
  69. package/components/global/intersection-observer-context.js +47 -28
  70. package/components/global/is-within-interactive-element.d.ts +6 -0
  71. package/components/global/is-within-interactive-element.js +26 -0
  72. package/components/global/is-within-navigable-element.d.ts +6 -0
  73. package/components/global/is-within-navigable-element.js +27 -0
  74. package/components/global/parse-css-duration.d.ts +5 -0
  75. package/components/global/parse-css-duration.js +13 -0
  76. package/components/global/rerender-hoc.d.ts +4 -2
  77. package/components/global/rerender-hoc.js +4 -4
  78. package/components/global/schedule-with-cleanup.d.ts +12 -0
  79. package/components/global/schedule-with-cleanup.js +34 -0
  80. package/components/{legacy-table/selection.d.ts → global/table-selection.d.ts} +14 -14
  81. package/components/{legacy-table/selection.js → global/table-selection.js} +2 -2
  82. package/components/global/theme.d.ts +4 -3
  83. package/components/global/theme.js +8 -8
  84. package/components/global/variables.css +18 -28
  85. package/components/global/variables.interface.d.ts +0 -4
  86. package/components/global/variables_dark.css +18 -25
  87. package/components/header/header.css +3 -3
  88. package/components/http/http.d.ts +2 -2
  89. package/components/http/http.js +6 -17
  90. package/components/i18n/i18n-context.js +1 -1
  91. package/components/i18n/i18n.d.ts +1 -0
  92. package/components/i18n/messages.json +1 -0
  93. package/components/icon/icon.css +0 -27
  94. package/components/icon/icon.d.ts +0 -1
  95. package/components/icon/icon.js +2 -4
  96. package/components/input/input.d.ts +1 -1
  97. package/components/island/adaptive-island-hoc.js +4 -4
  98. package/components/island/content.d.ts +7 -2
  99. package/components/island/content.js +5 -5
  100. package/components/island/header.js +1 -1
  101. package/components/legacy-table/cell.js +1 -1
  102. package/components/legacy-table/header-cell.js +1 -1
  103. package/components/legacy-table/header.js +1 -1
  104. package/components/legacy-table/multitable.d.ts +1 -1
  105. package/components/legacy-table/row.d.ts +1 -1
  106. package/components/legacy-table/row.js +1 -1
  107. package/components/legacy-table/selection-adapter.d.ts +3 -3
  108. package/components/legacy-table/selection-shortcuts-hoc.d.ts +5 -5
  109. package/components/legacy-table/simple-table.d.ts +2 -2
  110. package/components/legacy-table/simple-table.js +3 -3
  111. package/components/legacy-table/smart-table.d.ts +5 -5
  112. package/components/legacy-table/smart-table.js +3 -3
  113. package/components/legacy-table/table.js +1 -1
  114. package/components/list/consts.d.ts +0 -1
  115. package/components/list/consts.js +0 -1
  116. package/components/list/list.d.ts +0 -4
  117. package/components/login-dialog/service.js +5 -2
  118. package/components/panel/panel.css +1 -1
  119. package/components/popup/popup.d.ts +2 -0
  120. package/components/popup/popup.js +2 -2
  121. package/components/popup/popup.target.d.ts +3 -2
  122. package/components/popup/popup.target.js +4 -6
  123. package/components/query-assist/query-assist.d.ts +3 -1
  124. package/components/query-assist/query-assist.js +2 -2
  125. package/components/radio/radio-item.d.ts +3 -3
  126. package/components/radio/radio-item.js +3 -4
  127. package/components/radio/radio.d.ts +2 -2
  128. package/components/radio/radio.js +1 -1
  129. package/components/select/select-popup.d.ts +3 -2
  130. package/components/select/select-popup.js +3 -3
  131. package/components/select/select.d.ts +6 -2
  132. package/components/select/select.js +2 -4
  133. package/components/selection-toolbar/selection-toolbar.css +86 -0
  134. package/components/selection-toolbar/selection-toolbar.d.ts +11 -0
  135. package/components/selection-toolbar/selection-toolbar.js +23 -0
  136. package/components/slider/slider.js +4 -5
  137. package/components/tab-trap/tab-trap.d.ts +3 -3
  138. package/components/tab-trap/tab-trap.js +3 -5
  139. package/components/table/default-item-renderer.d.ts +41 -11
  140. package/components/table/default-item-renderer.js +60 -47
  141. package/components/table/internal/reorder-animation-context.d.ts +21 -0
  142. package/components/table/internal/reorder-animation-context.js +60 -0
  143. package/components/table/internal/reorder-handle.d.ts +9 -0
  144. package/components/table/internal/reorder-handle.js +334 -0
  145. package/components/table/internal/reorder-layout-context.d.ts +16 -0
  146. package/components/table/internal/reorder-layout-context.js +69 -0
  147. package/components/table/internal/table-header.d.ts +1 -0
  148. package/components/table/internal/table-header.js +143 -0
  149. package/components/table/internal/virtualization.d.ts +41 -0
  150. package/components/table/{table-virtualize.js → internal/virtualization.js} +82 -46
  151. package/components/table/item-virtualization.d.ts +37 -0
  152. package/components/table/item-virtualization.js +26 -0
  153. package/components/table/reorder-animation.d.ts +37 -0
  154. package/components/table/reorder-animation.js +11 -0
  155. package/components/table/reorder-item-layout.d.ts +32 -0
  156. package/components/table/reorder-item-layout.js +23 -0
  157. package/components/table/table-const.d.ts +8 -6
  158. package/components/table/table-const.js +7 -5
  159. package/components/table/table-primitives.d.ts +64 -0
  160. package/components/table/table-primitives.js +34 -0
  161. package/components/table/table-props.d.ts +304 -0
  162. package/components/table/table-props.js +1 -0
  163. package/components/table/table.css +179 -67
  164. package/components/table/table.d.ts +231 -224
  165. package/components/table/table.js +327 -2
  166. package/components/tag/tag.css +3 -3
  167. package/components/tags-input/tags-input.d.ts +3 -1
  168. package/components/tooltip/tooltip.d.ts +2 -1
  169. package/components/tooltip/tooltip.js +6 -5
  170. package/components/upload/upload.d.ts +4 -3
  171. package/components/upload/upload.js +3 -7
  172. package/components/user-agreement/service.js +5 -2
  173. package/components/user-agreement/user-agreement.css +2 -8
  174. package/components/user-agreement/user-agreement.js +8 -10
  175. package/components/user-card/smart-user-card-tooltip.d.ts +1 -1
  176. package/components/util-stories.d.ts +26 -0
  177. package/components/util-stories.js +61 -0
  178. package/package.json +47 -50
  179. package/components/content-layout/content-layout.css +0 -109
  180. package/components/content-layout/content-layout.d.ts +0 -20
  181. package/components/content-layout/content-layout.js +0 -40
  182. package/components/content-layout/sidebar.d.ts +0 -26
  183. package/components/content-layout/sidebar.js +0 -71
  184. package/components/date-picker/use-intersection-observer.d.ts +0 -6
  185. package/components/date-picker/use-intersection-observer.js +0 -48
  186. package/components/expand/collapsible-group.d.ts +0 -16
  187. package/components/global/composeRefs.d.ts +0 -6
  188. package/components/global/composeRefs.js +0 -7
  189. package/components/global/use-event-callback.d.ts +0 -1
  190. package/components/global/use-event-callback.js +0 -15
  191. package/components/grid/col.d.ts +0 -16
  192. package/components/grid/col.js +0 -35
  193. package/components/grid/grid.css +0 -920
  194. package/components/grid/grid.d.ts +0 -13
  195. package/components/grid/grid.js +0 -19
  196. package/components/grid/row.d.ts +0 -21
  197. package/components/grid/row.js +0 -41
  198. package/components/old-browsers-message/__mocks__/old-browsers-message.js +0 -1
  199. package/components/old-browsers-message/old-browsers-message-stop.d.ts +0 -1
  200. package/components/old-browsers-message/old-browsers-message-stop.js +0 -2
  201. package/components/old-browsers-message/old-browsers-message.css +0 -26
  202. package/components/old-browsers-message/old-browsers-message.d.ts +0 -5
  203. package/components/old-browsers-message/old-browsers-message.js +0 -86
  204. package/components/old-browsers-message/white-list.d.ts +0 -2
  205. package/components/old-browsers-message/white-list.js +0 -24
  206. package/components/table/table-base.d.ts +0 -24
  207. package/components/table/table-base.js +0 -79
  208. package/components/table/table-component.d.ts +0 -53
  209. package/components/table/table-component.js +0 -101
  210. package/components/table/table-virtualize.d.ts +0 -32
  211. /package/components/legacy-table/{table.css → legacy-table.css} +0 -0
@@ -1,32 +1,45 @@
1
- import { createContext, useContext, useEffect, useState } from 'react';
1
+ import { createContext, use, useEffect, useState } from 'react';
2
2
  /**
3
+ * @internal
4
+ */
5
+ const noopIntersectionObserverHandle = {
6
+ observe: () => () => { },
7
+ };
8
+ /**
9
+ * Multiple components can share a single `IntersectionObserver` instance through this context.
10
+ *
3
11
  * Usage:
4
12
  *
5
13
  * ```tsx
6
- * <IntersectionObserverContext.Provider value={useIntersectionObserverHandle()}>
14
+ * <IntersectionObserverContext value={useIntersectionObserverHandle()}>
7
15
  * <YourComponent />
8
- * </IntersectionObserverContext.Provider>
16
+ * </IntersectionObserverContext>
9
17
  *
10
18
  * function YourComponent() {
11
19
  * // Contains the current isIntersecting value
12
20
  * const isIntersecting = useIsIntersecting(elementRef);
13
- * // Or, to get updates instead:
14
- * useIsIntersectingListener(elementRef, newIsIntersecting => {
15
- * // ...
21
+ *
22
+ * // Or, to manually work with the IntersectionObserverHandle:
23
+ * const handle = use(IntersectionObserverContext);
24
+ * useEffect(() => {
25
+ * return handle.observe(elementRef.current, isIntersecting => { ... })
16
26
  * })
17
27
  * }
18
28
  * ```
19
29
  */
20
- export const IntersectionObserverContext = createContext(null);
30
+ export const IntersectionObserverContext = createContext(noopIntersectionObserverHandle);
31
+ /**
32
+ * Creates an IntersectionObserverHandle suitable for {@link IntersectionObserverContext}.
33
+ */
21
34
  export function useIntersectionObserverHandle(rootRef, rootMargin, scrollMargin) {
22
- const [handle, setHandle] = useState(null);
35
+ const [handle, setHandle] = useState(noopIntersectionObserverHandle);
23
36
  useEffect(() => {
24
37
  const root = rootRef?.current;
25
- const elementToOnChange = new Map();
38
+ const callbacksByElement = new Map();
26
39
  const observer = new IntersectionObserver(entries => {
27
40
  for (const entry of entries) {
28
- const onChange = elementToOnChange.get(entry.target);
29
- onChange?.(entry.isIntersecting);
41
+ const callbacks = callbacksByElement.get(entry.target);
42
+ callbacks?.forEach(cb => cb(entry.isIntersecting));
30
43
  }
31
44
  }, {
32
45
  root,
@@ -35,38 +48,44 @@ export function useIntersectionObserverHandle(rootRef, rootMargin, scrollMargin)
35
48
  });
36
49
  setHandle({
37
50
  observe(element, onChange) {
38
- elementToOnChange.set(element, onChange);
39
- observer.observe(element);
51
+ if (!callbacksByElement.has(element)) {
52
+ callbacksByElement.set(element, []);
53
+ observer.observe(element);
54
+ }
55
+ callbacksByElement.get(element).push(onChange);
40
56
  return () => {
41
- elementToOnChange.delete(element);
42
- observer.unobserve(element);
57
+ const callbacks = callbacksByElement.get(element);
58
+ if (!callbacks)
59
+ return;
60
+ const index = callbacks.indexOf(onChange);
61
+ if (index !== -1) {
62
+ callbacks.splice(index, 1);
63
+ }
64
+ if (!callbacks.length) {
65
+ callbacksByElement.delete(element);
66
+ observer.unobserve(element);
67
+ }
43
68
  };
44
69
  },
45
70
  });
46
71
  return () => {
47
72
  observer.disconnect();
48
- setHandle(null);
73
+ setHandle(noopIntersectionObserverHandle);
49
74
  };
50
75
  }, [rootRef, rootMargin, scrollMargin]);
51
76
  return handle;
52
77
  }
78
+ /**
79
+ * Returns whether the referenced element is currently intersecting.
80
+ */
53
81
  export function useIsIntersecting(elementRef) {
54
- const handle = useContext(IntersectionObserverContext);
82
+ const handle = use(IntersectionObserverContext);
55
83
  const [isIntersecting, setIsIntersecting] = useState(false);
56
84
  useEffect(() => {
57
85
  const element = elementRef.current;
58
- if (!element || !handle)
86
+ if (!element)
59
87
  return;
60
88
  return handle.observe(element, setIsIntersecting);
61
- }, [handle, elementRef, setIsIntersecting]);
89
+ }, [handle, elementRef]);
62
90
  return isIntersecting;
63
91
  }
64
- export function useIsIntersectingListener(elementRef, onChange) {
65
- const handle = useContext(IntersectionObserverContext);
66
- useEffect(() => {
67
- const element = elementRef.current;
68
- if (!element || !handle)
69
- return;
70
- return handle.observe(element, onChange);
71
- }, [handle, elementRef, onChange]);
72
- }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * If this function returns `false`, the event may be interpreted as a click
3
+ * or tap on a "empty space" rather than on an interactive element such as
4
+ * a button or a link.
5
+ */
6
+ export declare function isWithinInteractiveElement(target: EventTarget | null): boolean;
@@ -0,0 +1,26 @@
1
+ const interactiveSelector = [
2
+ 'a',
3
+ 'button',
4
+ 'details',
5
+ 'input',
6
+ 'label',
7
+ 'option',
8
+ 'select',
9
+ 'summary',
10
+ 'textarea',
11
+ '[contenteditable]',
12
+ '[role="button"]',
13
+ '[role="checkbox"]',
14
+ '[role="link"]',
15
+ '[role="radio"]',
16
+ '[role="switch"]',
17
+ '[role="tab"]',
18
+ ].join();
19
+ /**
20
+ * If this function returns `false`, the event may be interpreted as a click
21
+ * or tap on a "empty space" rather than on an interactive element such as
22
+ * a button or a link.
23
+ */
24
+ export function isWithinInteractiveElement(target) {
25
+ return target instanceof Element && target.closest(interactiveSelector) != null;
26
+ }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Returns whether the event target is within an element that is expected to
3
+ * handle keyboard navigation itself, so container-level keyboard shortcuts
4
+ * should generally be ignored.
5
+ */
6
+ export declare function isWithinNavigableElement(target: EventTarget | null): boolean;
@@ -0,0 +1,27 @@
1
+ const navigableSelector = [
2
+ 'input:not([type="button"]):not([type="checkbox"]):not([type="color"]):not([type="file"]):not([type="hidden"]):not([type="image"]):not([type="reset"]):not([type="submit"])',
3
+ 'textarea',
4
+ 'select',
5
+ '[contenteditable]',
6
+ '[role="combobox"]',
7
+ '[role="grid"]',
8
+ '[role="listbox"]',
9
+ '[role="menu"]',
10
+ '[role="menubar"]',
11
+ '[role="radiogroup"]',
12
+ '[role="searchbox"]',
13
+ '[role="slider"]',
14
+ '[role="spinbutton"]',
15
+ '[role="tablist"]',
16
+ '[role="textbox"]',
17
+ '[role="tree"]',
18
+ '[role="treegrid"]',
19
+ ].join();
20
+ /**
21
+ * Returns whether the event target is within an element that is expected to
22
+ * handle keyboard navigation itself, so container-level keyboard shortcuts
23
+ * should generally be ignored.
24
+ */
25
+ export function isWithinNavigableElement(target) {
26
+ return target instanceof Element && target.closest(navigableSelector) != null;
27
+ }
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Parses a CSS duration string (e.g., "500ms", "2s") and returns the duration in milliseconds.
3
+ * Returns the `defaultVal` if the input string is not a valid CSS duration.
4
+ */
5
+ export declare function parseCssDuration(duration: string, defaultVal?: number): number;
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Parses a CSS duration string (e.g., "500ms", "2s") and returns the duration in milliseconds.
3
+ * Returns the `defaultVal` if the input string is not a valid CSS duration.
4
+ */
5
+ export function parseCssDuration(duration, defaultVal = 0) {
6
+ const match = duration.match(/(\d+(\.\d+)?)(s|ms)/);
7
+ if (!match)
8
+ return defaultVal;
9
+ const value = parseFloat(match[1]);
10
+ const unit = match[3];
11
+ // eslint-disable-next-line no-magic-numbers
12
+ return unit === 's' ? value * 1000 : value;
13
+ }
@@ -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;
@@ -20,8 +20,6 @@
20
20
  --ring-border-disabled-color: rgb(var(--ring-border-disabled-components)); /* #ebecf0 */
21
21
  --ring-border-selected-disabled-components: 201, 204, 214;
22
22
  --ring-border-selected-disabled-color: rgb(var(--ring-border-selected-disabled-components)); /* #c9ccd6 */
23
- --ring-border-disabled-active-components: var(--ring-border-hover-components);
24
- --ring-border-disabled-active-color: var(--ring-border-hover-color); /* TODO: remove in 8.0 in favor of --ring-border-hover-color */
25
23
  --ring-icon-disabled-components: 168, 173, 189;
26
24
  --ring-icon-disabled-color: rgb(var(--ring-icon-disabled-components)); /* #A8ADBD */
27
25
  --ring-border-hover-components: 160, 189, 248;
@@ -36,8 +34,6 @@
36
34
  --ring-icon-hover-color: rgb(var(--ring-icon-hover-components)); /* #5a5d6b */
37
35
  --ring-main-components: 51, 105, 214;
38
36
  --ring-main-color: rgb(var(--ring-main-components)); /* #3369D6 */
39
- --ring-action-link-components: var(--ring-link-components);
40
- --ring-action-link-color: var(--ring-link-color); /* #315FBD */ /* TODO: remove in 8.0 in favor of --ring-link-color */
41
37
  --ring-main-hover-components: 49, 95, 189;
42
38
  --ring-main-hover-color: rgb(var(--ring-main-hover-components)); /* #315FBD */
43
39
  --ring-main-success-components: 31, 128, 57;
@@ -48,18 +44,18 @@
48
44
  --ring-main-error-color: rgb(var(--ring-main-error-components)); /* #CC3645 */
49
45
  --ring-main-error-hover-components: 188, 48, 62;
50
46
  --ring-main-error-hover-color: rgb(var(--ring-main-error-hover-components)); /* #BC303E */
51
- --ring-main-warning-components: 229, 109, 23;
52
- --ring-main-warning-color: rgb(var(--ring-main-warning-components)); /* #E56D17 */
53
- --ring-main-warning-hover-components: 206, 97, 23;
54
- --ring-main-warning-hover-color: rgb(var(--ring-main-warning-hover-components)); /* #CE6117 */
47
+ --ring-main-warning-components: 255, 175, 15;
48
+ --ring-main-warning-color: rgb(var(--ring-main-warning-components)); /* #FFAF0F */
49
+ --ring-main-warning-hover-components: 223, 147, 3;
50
+ --ring-main-warning-hover-color: rgb(var(--ring-main-warning-hover-components)); /* #DF9303 */
55
51
  --ring-main-purple-components: 131, 77, 240;
56
52
  --ring-main-purple-color: rgb(var(--ring-main-purple-components)); /* #834DF0 */
57
53
  --ring-main-purple-hover-components: 116, 68, 212;
58
54
  --ring-main-purple-hover-color: rgb(var(--ring-main-purple-hover-components)); /* #7444D4 */
59
55
  --ring-icon-error-components: 204, 54, 69;
60
56
  --ring-icon-error-color: rgb(var(--ring-icon-error-components)); /* #CC3645 */
61
- --ring-icon-warning-components: 229, 109, 23;
62
- --ring-icon-warning-color: rgb(var(--ring-icon-warning-components)); /* #E56D17 */
57
+ --ring-icon-warning-components: 223, 147, 3;
58
+ --ring-icon-warning-color: rgb(var(--ring-icon-warning-components)); /* #DF9303 */
63
59
  --ring-icon-success-components: 32, 138, 60;
64
60
  --ring-icon-success-color: rgb(var(--ring-icon-success-components)); /* #208A3C */
65
61
  --ring-icon-highlight-components: 255, 175, 15;
@@ -74,10 +70,10 @@
74
70
  --ring-error-border-color: rgb(var(--ring-error-border-components)); /* #F2B6BB */
75
71
  --ring-error-border-hover-components: 228, 106, 118;
76
72
  --ring-error-border-hover-color: rgb(var(--ring-error-border-hover-components)); /* #E46A76 */
77
- --ring-warning-border-components: 242, 177, 129;
78
- --ring-warning-border-color: rgb(var(--ring-warning-border-components)); /* #F2B181 */
79
- --ring-warning-border-hover-components: 236, 143, 76;
80
- --ring-warning-border-hover-color: rgb(var(--ring-warning-border-hover-components)); /* #EC8F4C */
73
+ --ring-warning-border-components: 254, 210, 119;
74
+ --ring-warning-border-color: rgb(var(--ring-warning-border-components)); /* #FED277 */
75
+ --ring-warning-border-hover-components: 253, 189, 61;
76
+ --ring-warning-border-hover-color: rgb(var(--ring-warning-border-hover-components)); /* #FDBD3D */
81
77
  --ring-highlight-border-components: 254, 210, 119;
82
78
  --ring-highlight-border-color: rgb(var(--ring-highlight-border-components)); /* #FED277 */
83
79
  --ring-highlight-border-hover-components: 253, 189, 61;
@@ -94,8 +90,6 @@
94
90
  --ring-popup-shadow-color: rgba(var(--ring-popup-border-components), 0.1);
95
91
  --ring-popup-secondary-shadow-color: rgba(var(--ring-popup-border-components), 0.04);
96
92
  --ring-message-shadow-color: rgba(var(--ring-popup-border-components), 0.3);
97
- --ring-pinned-shadow-components: 108, 112, 126;
98
- --ring-pinned-shadow-color: rgb(var(--ring-pinned-shadow-components)); /* #6C707E */ /* TODO remove in 8.0 */
99
93
  --ring-button-danger-hover-components: 219, 59, 75;
100
94
  --ring-button-danger-hover-color: rgb(var(--ring-button-danger-hover-components)); /* #DB3B4B */
101
95
  --ring-button-primary-border-components: 46, 85, 163;
@@ -108,16 +102,14 @@
108
102
  /* Text */
109
103
  --ring-search-components: 112, 156, 245;
110
104
  --ring-search-color: rgb(var(--ring-search-components)); /* #709CF5 */
111
- --ring-hint-components: 46, 85, 163;
112
- --ring-hint-color: rgb(var(--ring-hint-components)); /* #2E55A3 */ /* TODO: remove in 8.0 */
113
105
  --ring-link-components: 49, 95, 189;
114
106
  --ring-link-color: rgb(var(--ring-link-components)); /* #315FBD */
115
107
  --ring-link-hover-components: 46, 85, 163;
116
108
  --ring-link-hover-color: rgb(var(--ring-link-hover-components)); /* #2E55A3 */
117
109
  --ring-error-components: 204, 54, 69;
118
110
  --ring-error-color: rgb(var(--ring-error-components)); /* #CC3645 */
119
- --ring-warning-components: 182, 84, 22;
120
- --ring-warning-color: rgb(var(--ring-warning-components)); /* #B65416 */ /* Prefer using warning icon + regular text color */
111
+ --ring-warning-components: 156, 97, 0;
112
+ --ring-warning-color: rgb(var(--ring-warning-components)); /* #9C6100 */ /* Prefer using warning icon + regular text color */
121
113
  --ring-success-components: 31, 117, 54;
122
114
  --ring-success-color: rgb(var(--ring-success-components)); /* #1F7536 */ /* Prefer using success icon + regular text color */
123
115
  --ring-purple-text-components: 131, 77, 240;
@@ -154,8 +146,8 @@
154
146
  --ring-tag-hover-background-color: rgb(var(--ring-tag-hover-background-components)); /* #DFE1E5 */
155
147
  --ring-removed-background-components: 250, 212, 216;
156
148
  --ring-removed-background-color: rgb(var(--ring-removed-background-components)); /* #FAD4D8 */
157
- --ring-warning-background-components: 252, 230, 214;
158
- --ring-warning-background-color: rgb(var(--ring-warning-background-components)); /* #FCE6D6 */
149
+ --ring-warning-background-components: 255, 241, 209;
150
+ --ring-warning-background-color: rgb(var(--ring-warning-background-components)); /* #FFF1D1 */
159
151
  --ring-highlight-background-components: 255, 241, 209;
160
152
  --ring-highlight-background-color: rgb(var(--ring-highlight-background-components)); /* #FFF1D1 */
161
153
  --ring-added-background-components: 197, 229, 204;
@@ -167,13 +159,11 @@
167
159
  --ring-disabled-selected-background-components: 235, 236, 240;
168
160
  --ring-disabled-selected-background-color: rgb(var(--ring-disabled-selected-background-components)); /* #EBECF0 */
169
161
  --ring-button-danger-active-color: var(--ring-error-container-light-color); /* #FAD4D8 */
170
- --ring-button-loader-background: rgba(var(--ring-white-text-components), 0.4); /* TODO remove in 8.0 */
171
- --ring-button-primary-background-color: var(--ring-main-color); /* TODO remove in 8.0 */
172
162
  --ring-table-loader-background-color: rgba(var(--ring-content-background-components), 0.5); /* #FFFFFF50 */
173
163
  --ring-removed-subtle-background-components: 255, 235, 236;
174
164
  --ring-removed-subtle-background-color: rgb(var(--ring-removed-subtle-background-components)); /* #FFEBEC */
175
- --ring-warning-subtle-background-components: 255, 244, 235;
176
- --ring-warning-subtle-background-color: rgb(var(--ring-warning-subtle-background-components)); /* #FFF4EB */
165
+ --ring-warning-subtle-background-components: 255, 246, 222;
166
+ --ring-warning-subtle-background-color: rgb(var(--ring-warning-subtle-background-components)); /* #FFF6DE */
177
167
  --ring-highlight-subtle-background-components: 255, 246, 222;
178
168
  --ring-highlight-subtle-background-color: rgb(var(--ring-highlight-subtle-background-components)); /* #FFF6DE */
179
169
  --ring-added-subtle-background-components: 230, 247, 233;
@@ -186,8 +176,8 @@
186
176
  --ring-success-container-light-color: rgb(var(--ring-success-container-light-components)); /* #F2FCF3 */
187
177
  --ring-error-container-light-components: 255, 242, 243;
188
178
  --ring-error-container-light-color: rgb(var(--ring-error-container-light-components)); /* #FFF2F3 */
189
- --ring-warning-container-light-components: 255, 248, 243;
190
- --ring-warning-container-light-color: rgb(var(--ring-warning-container-light-components)); /* #FFF8F3 */
179
+ --ring-warning-container-light-components: 255, 250, 235;
180
+ --ring-warning-container-light-color: rgb(var(--ring-warning-container-light-components)); /* #FFFAEB */
191
181
  --ring-highlight-container-light-components: 255, 250, 235;
192
182
  --ring-highlight-container-light-color: rgb(var(--ring-highlight-container-light-components)); /* #FFFAEB */
193
183
  --ring-grey-container-light-components: 247, 248, 250;
@@ -19,11 +19,9 @@ export interface RingCSSProperties {
19
19
  '--ring-popup-border-color'?: Property.BorderColor;
20
20
  '--ring-popup-shadow-color'?: Property.Color;
21
21
  '--ring-message-shadow-color'?: Property.Color;
22
- '--ring-pinned-shadow-color'?: Property.Color;
23
22
  '--ring-button-danger-hover-color'?: Property.Color;
24
23
  '--ring-button-primary-border-color'?: Property.Color;
25
24
  '--ring-search-color'?: Property.Color;
26
- '--ring-hint-color'?: Property.Color;
27
25
  '--ring-link-color'?: Property.Color;
28
26
  '--ring-link-hover-color'?: Property.Color;
29
27
  '--ring-error-color'?: Property.Color;
@@ -49,8 +47,6 @@ export interface RingCSSProperties {
49
47
  '--ring-disabled-background-color'?: Property.BackgroundColor;
50
48
  '--ring-disabled-selected-background-color'?: Property.BackgroundColor;
51
49
  '--ring-button-danger-active-color'?: Property.BackgroundColor;
52
- '--ring-button-loader-background'?: Property.BackgroundColor;
53
- '--ring-button-primary-background-color'?: Property.BackgroundColor;
54
50
  '--ring-code-background-color'?: Property.BackgroundColor;
55
51
  '--ring-code-color'?: Property.Color;
56
52
  '--ring-code-comment-color'?: Property.Color;