react-resizable-panels 0.0.63 → 1.0.0-rc.1

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 (72) hide show
  1. package/.eslintrc.cjs +1 -0
  2. package/CHANGELOG.md +5 -0
  3. package/dist/declarations/src/Panel.d.ts +19 -34
  4. package/dist/declarations/src/PanelGroup.d.ts +9 -13
  5. package/dist/declarations/src/PanelResizeHandle.d.ts +5 -7
  6. package/dist/declarations/src/index.d.ts +2 -2
  7. package/dist/declarations/src/types.d.ts +0 -7
  8. package/dist/declarations/src/utils/assert.d.ts +1 -0
  9. package/dist/declarations/src/vendor/react.d.ts +2 -2
  10. package/dist/react-resizable-panels.browser.cjs.js +252 -517
  11. package/dist/react-resizable-panels.browser.cjs.mjs +2 -1
  12. package/dist/react-resizable-panels.browser.development.cjs.js +278 -573
  13. package/dist/react-resizable-panels.browser.development.cjs.mjs +2 -1
  14. package/dist/react-resizable-panels.browser.development.esm.js +278 -574
  15. package/dist/react-resizable-panels.browser.esm.js +252 -518
  16. package/dist/react-resizable-panels.cjs.js +252 -517
  17. package/dist/react-resizable-panels.cjs.js.map +1 -1
  18. package/dist/react-resizable-panels.cjs.mjs +2 -1
  19. package/dist/react-resizable-panels.development.cjs.js +280 -575
  20. package/dist/react-resizable-panels.development.cjs.mjs +2 -1
  21. package/dist/react-resizable-panels.development.esm.js +280 -576
  22. package/dist/react-resizable-panels.development.node.cjs.js +266 -501
  23. package/dist/react-resizable-panels.development.node.cjs.mjs +2 -1
  24. package/dist/react-resizable-panels.development.node.esm.js +266 -502
  25. package/dist/react-resizable-panels.esm.js +252 -518
  26. package/dist/react-resizable-panels.esm.js.map +1 -1
  27. package/dist/react-resizable-panels.node.cjs.js +238 -443
  28. package/dist/react-resizable-panels.node.cjs.mjs +2 -1
  29. package/dist/react-resizable-panels.node.esm.js +238 -444
  30. package/package.json +1 -1
  31. package/src/Panel.test.tsx +74 -73
  32. package/src/Panel.ts +44 -68
  33. package/src/PanelGroup.test.tsx +43 -42
  34. package/src/PanelGroup.ts +189 -403
  35. package/src/PanelGroupContext.ts +2 -3
  36. package/src/PanelResizeHandle.test.tsx +68 -0
  37. package/src/PanelResizeHandle.ts +31 -22
  38. package/src/hooks/useWindowSplitterBehavior.ts +2 -1
  39. package/src/hooks/useWindowSplitterPanelGroupBehavior.ts +22 -33
  40. package/src/index.ts +4 -3
  41. package/src/types.ts +0 -9
  42. package/src/utils/adjustLayoutByDelta.test.ts +206 -336
  43. package/src/utils/adjustLayoutByDelta.ts +59 -51
  44. package/src/utils/assert.ts +1 -1
  45. package/src/utils/calculateAriaValues.test.ts +6 -11
  46. package/src/utils/calculateAriaValues.ts +7 -29
  47. package/src/utils/calculateDeltaPercentage.ts +8 -15
  48. package/src/utils/calculateDragOffsetPercentage.ts +11 -5
  49. package/src/utils/calculateUnsafeDefaultLayout.test.ts +4 -9
  50. package/src/utils/calculateUnsafeDefaultLayout.ts +13 -18
  51. package/src/utils/callPanelCallbacks.ts +11 -46
  52. package/src/utils/getResizeEventCursorPosition.ts +2 -0
  53. package/src/utils/resizePanel.test.ts +6 -52
  54. package/src/utils/resizePanel.ts +24 -46
  55. package/src/utils/test-utils.ts +6 -7
  56. package/src/utils/validatePanelConstraints.test.ts +12 -65
  57. package/src/utils/validatePanelConstraints.ts +26 -67
  58. package/src/utils/validatePanelGroupLayout.test.ts +27 -142
  59. package/src/utils/validatePanelGroupLayout.ts +17 -13
  60. package/src/vendor/react.ts +2 -0
  61. package/src/utils/computePercentagePanelConstraints.test.ts +0 -98
  62. package/src/utils/computePercentagePanelConstraints.ts +0 -56
  63. package/src/utils/convertPercentageToPixels.test.ts +0 -9
  64. package/src/utils/convertPercentageToPixels.ts +0 -6
  65. package/src/utils/convertPixelConstraintsToPercentages.test.ts +0 -47
  66. package/src/utils/convertPixelConstraintsToPercentages.ts +0 -72
  67. package/src/utils/convertPixelsToPercentage.test.ts +0 -9
  68. package/src/utils/convertPixelsToPercentage.ts +0 -6
  69. package/src/utils/getPercentageSizeFromMixedSizes.test.ts +0 -47
  70. package/src/utils/getPercentageSizeFromMixedSizes.ts +0 -15
  71. package/src/utils/shouldMonitorPixelBasedConstraints.test.ts +0 -23
  72. package/src/utils/shouldMonitorPixelBasedConstraints.ts +0 -13
package/.eslintrc.cjs CHANGED
@@ -9,6 +9,7 @@ module.exports = {
9
9
  plugins: ["@typescript-eslint", "no-restricted-imports", "react-hooks"],
10
10
  root: true,
11
11
  rules: {
12
+ "@typescript-eslint/no-non-null-assertion": "error",
12
13
  "no-restricted-imports": [
13
14
  "error",
14
15
  {
package/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.0.0-rc.1
4
+
5
+ - Remove support for pixel-based Panel constraints; props like `defaultSizePercentage` should now be `defaultSize`
6
+ - Replaced `dataAttributes` prop with `...rest` prop that supports all HTML attributes
7
+
3
8
  ## 0.0.63
4
9
 
5
10
  - Change default (not-yet-registered) Panel flex-grow style from 0 to 1
@@ -1,23 +1,18 @@
1
- import { DataAttributes, MixedSizes } from "./types.js";
2
- import { ElementType, ForwardedRef, PropsWithChildren } from "./vendor/react.js";
1
+ import { ElementType, ForwardedRef, HTMLAttributes, PropsWithChildren } from "./vendor/react.js";
3
2
  export type PanelOnCollapse = () => void;
4
3
  export type PanelOnExpand = () => void;
5
- export type PanelOnResize = (mixedSizes: MixedSizes, prevMixedSizes: MixedSizes | undefined) => void;
4
+ export type PanelOnResize = (size: number, prevSize: number | undefined) => void;
6
5
  export type PanelCallbacks = {
7
6
  onCollapse?: PanelOnCollapse;
8
7
  onExpand?: PanelOnExpand;
9
8
  onResize?: PanelOnResize;
10
9
  };
11
10
  export type PanelConstraints = {
12
- collapsedSizePercentage?: number | undefined;
13
- collapsedSizePixels?: number | undefined;
11
+ collapsedSize?: number | undefined;
14
12
  collapsible?: boolean | undefined;
15
- defaultSizePercentage?: number | undefined;
16
- defaultSizePixels?: number | undefined;
17
- maxSizePercentage?: number | undefined;
18
- maxSizePixels?: number | undefined;
19
- minSizePercentage?: number | undefined;
20
- minSizePixels?: number | undefined;
13
+ defaultSize?: number | undefined;
14
+ maxSize?: number | undefined;
15
+ minSize?: number | undefined;
21
16
  };
22
17
  export type PanelData = {
23
18
  callbacks: PanelCallbacks;
@@ -30,24 +25,19 @@ export type ImperativePanelHandle = {
30
25
  collapse: () => void;
31
26
  expand: () => void;
32
27
  getId(): string;
33
- getSize(): MixedSizes;
28
+ getSize(): number;
34
29
  isCollapsed: () => boolean;
35
30
  isExpanded: () => boolean;
36
- resize: (size: Partial<MixedSizes>) => void;
31
+ resize: (size: number) => void;
37
32
  };
38
- export type PanelProps = PropsWithChildren<{
33
+ export type PanelProps = Omit<HTMLAttributes<ElementType>, "id" | "onResize"> & PropsWithChildren<{
39
34
  className?: string;
40
- collapsedSizePercentage?: number | undefined;
41
- collapsedSizePixels?: number | undefined;
35
+ collapsedSize?: number | undefined;
42
36
  collapsible?: boolean | undefined;
43
- dataAttributes?: DataAttributes;
44
- defaultSizePercentage?: number | undefined;
45
- defaultSizePixels?: number | undefined;
37
+ defaultSize?: number | undefined;
46
38
  id?: string;
47
- maxSizePercentage?: number | undefined;
48
- maxSizePixels?: number | undefined;
49
- minSizePercentage?: number | undefined;
50
- minSizePixels?: number | undefined;
39
+ maxSize?: number | undefined;
40
+ minSize?: number | undefined;
51
41
  onCollapse?: PanelOnCollapse;
52
42
  onExpand?: PanelOnExpand;
53
43
  onResize?: PanelOnResize;
@@ -55,25 +45,20 @@ export type PanelProps = PropsWithChildren<{
55
45
  style?: object;
56
46
  tagName?: ElementType;
57
47
  }>;
58
- export declare function PanelWithForwardedRef({ children, className: classNameFromProps, collapsedSizePercentage, collapsedSizePixels, collapsible, dataAttributes, defaultSizePercentage, defaultSizePixels, forwardedRef, id: idFromProps, maxSizePercentage, maxSizePixels, minSizePercentage, minSizePixels, onCollapse, onExpand, onResize, order, style: styleFromProps, tagName: Type, }: PanelProps & {
48
+ export declare function PanelWithForwardedRef({ children, className: classNameFromProps, collapsedSize, collapsible, defaultSize, forwardedRef, id: idFromProps, maxSize, minSize, onCollapse, onExpand, onResize, order, style: styleFromProps, tagName: Type, ...rest }: PanelProps & {
59
49
  forwardedRef: ForwardedRef<ImperativePanelHandle>;
60
50
  }): import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>>;
61
51
  export declare namespace PanelWithForwardedRef {
62
52
  var displayName: string;
63
53
  }
64
- export declare const Panel: import("react").ForwardRefExoticComponent<{
54
+ export declare const Panel: import("react").ForwardRefExoticComponent<Omit<HTMLAttributes<ElementType>, "id" | "onResize"> & {
65
55
  className?: string | undefined;
66
- collapsedSizePercentage?: number | undefined;
67
- collapsedSizePixels?: number | undefined;
56
+ collapsedSize?: number | undefined;
68
57
  collapsible?: boolean | undefined;
69
- dataAttributes?: DataAttributes | undefined;
70
- defaultSizePercentage?: number | undefined;
71
- defaultSizePixels?: number | undefined;
58
+ defaultSize?: number | undefined;
72
59
  id?: string | undefined;
73
- maxSizePercentage?: number | undefined;
74
- maxSizePixels?: number | undefined;
75
- minSizePercentage?: number | undefined;
76
- minSizePixels?: number | undefined;
60
+ maxSize?: number | undefined;
61
+ minSize?: number | undefined;
77
62
  onCollapse?: PanelOnCollapse | undefined;
78
63
  onExpand?: PanelOnExpand | undefined;
79
64
  onResize?: PanelOnResize | undefined;
@@ -1,36 +1,32 @@
1
- import { DataAttributes, Direction, MixedSizes } from "./types.js";
2
- import { CSSProperties, ElementType, PropsWithChildren } from "./vendor/react.js";
1
+ import { Direction } from "./types.js";
2
+ import { CSSProperties, ElementType, HTMLAttributes, PropsWithChildren } from "./vendor/react.js";
3
3
  export type ImperativePanelGroupHandle = {
4
4
  getId: () => string;
5
- getLayout: () => MixedSizes[];
6
- setLayout: (layout: Partial<MixedSizes>[]) => void;
5
+ getLayout: () => number[];
6
+ setLayout: (layout: number[]) => void;
7
7
  };
8
8
  export type PanelGroupStorage = {
9
9
  getItem(name: string): string | null;
10
10
  setItem(name: string, value: string): void;
11
11
  };
12
- export type PanelGroupOnLayout = (layout: MixedSizes[]) => void;
13
- export type PanelGroupProps = PropsWithChildren<{
12
+ export type PanelGroupOnLayout = (layout: number[]) => void;
13
+ export type PanelGroupProps = Omit<HTMLAttributes<ElementType>, "id"> & PropsWithChildren<{
14
14
  autoSaveId?: string | null;
15
15
  className?: string;
16
- dataAttributes?: DataAttributes;
17
16
  direction: Direction;
18
17
  id?: string | null;
19
- keyboardResizeByPercentage?: number | null;
20
- keyboardResizeByPixels?: number | null;
18
+ keyboardResizeBy?: number | null;
21
19
  onLayout?: PanelGroupOnLayout | null;
22
20
  storage?: PanelGroupStorage;
23
21
  style?: CSSProperties;
24
22
  tagName?: ElementType;
25
23
  }>;
26
- export declare const PanelGroup: import("react").ForwardRefExoticComponent<{
24
+ export declare const PanelGroup: import("react").ForwardRefExoticComponent<Omit<HTMLAttributes<ElementType>, "id"> & {
27
25
  autoSaveId?: string | null | undefined;
28
26
  className?: string | undefined;
29
- dataAttributes?: DataAttributes | undefined;
30
27
  direction: Direction;
31
28
  id?: string | null | undefined;
32
- keyboardResizeByPercentage?: number | null | undefined;
33
- keyboardResizeByPixels?: number | null | undefined;
29
+ keyboardResizeBy?: number | null | undefined;
34
30
  onLayout?: PanelGroupOnLayout | null | undefined;
35
31
  storage?: PanelGroupStorage | undefined;
36
32
  style?: CSSProperties | undefined;
@@ -1,17 +1,15 @@
1
- import { CSSProperties, ElementType, ReactNode } from "./vendor/react.js";
2
- import { DataAttributes } from "./types.js";
1
+ import { CSSProperties, ElementType, HTMLAttributes, PropsWithChildren } from "./vendor/react.js";
3
2
  export type PanelResizeHandleOnDragging = (isDragging: boolean) => void;
4
- export type PanelResizeHandleProps = {
5
- children?: ReactNode;
3
+ export type PanelResizeHandleProps = Omit<HTMLAttributes<ElementType>, "id"> & PropsWithChildren<{
6
4
  className?: string;
7
- dataAttributes?: DataAttributes;
8
5
  disabled?: boolean;
9
6
  id?: string | null;
10
7
  onDragging?: PanelResizeHandleOnDragging;
11
8
  style?: CSSProperties;
9
+ tabIndex?: number;
12
10
  tagName?: ElementType;
13
- };
14
- export declare function PanelResizeHandle({ children, className: classNameFromProps, dataAttributes, disabled, id: idFromProps, onDragging, style: styleFromProps, tagName: Type, }: PanelResizeHandleProps): import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>>;
11
+ }>;
12
+ export declare function PanelResizeHandle({ children, className: classNameFromProps, disabled, id: idFromProps, onDragging, style: styleFromProps, tabIndex, tagName: Type, ...rest }: PanelResizeHandleProps): import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>>;
15
13
  export declare namespace PanelResizeHandle {
16
14
  var displayName: string;
17
15
  }
@@ -1,8 +1,8 @@
1
1
  import { Panel } from "./Panel.js";
2
2
  import { PanelGroup } from "./PanelGroup.js";
3
3
  import { PanelResizeHandle } from "./PanelResizeHandle.js";
4
- import type { MixedSizes } from "./types.js";
4
+ import { assert } from "./utils/assert.js";
5
5
  import type { ImperativePanelHandle, PanelOnCollapse, PanelOnExpand, PanelOnResize, PanelProps } from "./Panel.js";
6
6
  import type { ImperativePanelGroupHandle, PanelGroupOnLayout, PanelGroupProps, PanelGroupStorage } from "./PanelGroup.js";
7
7
  import type { PanelResizeHandleOnDragging, PanelResizeHandleProps } from "./PanelResizeHandle.js";
8
- export { ImperativePanelGroupHandle, ImperativePanelHandle, MixedSizes, PanelGroupOnLayout, PanelGroupProps, PanelGroupStorage, PanelOnCollapse, PanelOnExpand, PanelOnResize, PanelProps, PanelResizeHandleOnDragging, PanelResizeHandleProps, Panel, PanelGroup, PanelResizeHandle, };
8
+ export { ImperativePanelGroupHandle, ImperativePanelHandle, PanelGroupOnLayout, PanelGroupProps, PanelGroupStorage, PanelOnCollapse, PanelOnExpand, PanelOnResize, PanelProps, PanelResizeHandleOnDragging, PanelResizeHandleProps, assert, Panel, PanelGroup, PanelResizeHandle, };
@@ -1,10 +1,3 @@
1
1
  export type Direction = "horizontal" | "vertical";
2
- export type MixedSizes = {
3
- sizePercentage: number;
4
- sizePixels: number;
5
- };
6
2
  export type ResizeEvent = KeyboardEvent | MouseEvent | TouchEvent;
7
3
  export type ResizeHandler = (event: ResizeEvent) => void;
8
- export type DataAttributes = {
9
- [attribute: string]: string | number | boolean | undefined;
10
- };
@@ -0,0 +1 @@
1
+ export declare function assert(expectedCondition: any, message?: string): asserts expectedCondition;
@@ -1,6 +1,6 @@
1
1
  import * as React from "react";
2
- import type { CSSProperties, ElementType, ForwardedRef, MouseEvent, PropsWithChildren, ReactNode, RefObject, TouchEvent } from "react";
2
+ import type { CSSProperties, ElementType, ForwardedRef, HTMLAttributes, MouseEvent, PropsWithChildren, ReactNode, RefObject, TouchEvent } from "react";
3
3
  declare const createElement: typeof React.createElement, createContext: typeof React.createContext, createRef: typeof React.createRef, forwardRef: typeof React.forwardRef, useCallback: typeof React.useCallback, useContext: typeof React.useContext, useEffect: typeof React.useEffect, useImperativeHandle: typeof React.useImperativeHandle, useLayoutEffect: typeof React.useLayoutEffect, useMemo: typeof React.useMemo, useRef: typeof React.useRef, useState: typeof React.useState;
4
4
  declare const useId: () => string;
5
5
  export { createElement, createContext, createRef, forwardRef, useCallback, useContext, useEffect, useId, useImperativeHandle, useLayoutEffect, useMemo, useRef, useState, };
6
- export type { CSSProperties, ElementType, ForwardedRef, MouseEvent, PropsWithChildren, ReactNode, RefObject, TouchEvent, };
6
+ export type { CSSProperties, ElementType, ForwardedRef, HTMLAttributes, MouseEvent, PropsWithChildren, ReactNode, RefObject, TouchEvent, };