react-resizable-panels 0.0.62 → 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 (73) hide show
  1. package/.eslintrc.cjs +1 -0
  2. package/CHANGELOG.md +9 -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 +255 -519
  11. package/dist/react-resizable-panels.browser.cjs.mjs +2 -1
  12. package/dist/react-resizable-panels.browser.development.cjs.js +281 -575
  13. package/dist/react-resizable-panels.browser.development.cjs.mjs +2 -1
  14. package/dist/react-resizable-panels.browser.development.esm.js +281 -576
  15. package/dist/react-resizable-panels.browser.esm.js +255 -520
  16. package/dist/react-resizable-panels.cjs.js +255 -519
  17. package/dist/react-resizable-panels.cjs.js.map +1 -0
  18. package/dist/react-resizable-panels.cjs.mjs +2 -1
  19. package/dist/react-resizable-panels.development.cjs.js +283 -577
  20. package/dist/react-resizable-panels.development.cjs.mjs +2 -1
  21. package/dist/react-resizable-panels.development.esm.js +283 -578
  22. package/dist/react-resizable-panels.development.node.cjs.js +269 -503
  23. package/dist/react-resizable-panels.development.node.cjs.mjs +2 -1
  24. package/dist/react-resizable-panels.development.node.esm.js +269 -504
  25. package/dist/react-resizable-panels.esm.js +255 -520
  26. package/dist/react-resizable-panels.esm.js.map +1 -0
  27. package/dist/react-resizable-panels.node.cjs.js +241 -445
  28. package/dist/react-resizable-panels.node.cjs.mjs +2 -1
  29. package/dist/react-resizable-panels.node.esm.js +241 -446
  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/computePanelFlexBoxStyle.ts +3 -2
  53. package/src/utils/getResizeEventCursorPosition.ts +2 -0
  54. package/src/utils/resizePanel.test.ts +6 -52
  55. package/src/utils/resizePanel.ts +24 -46
  56. package/src/utils/test-utils.ts +6 -7
  57. package/src/utils/validatePanelConstraints.test.ts +12 -65
  58. package/src/utils/validatePanelConstraints.ts +26 -67
  59. package/src/utils/validatePanelGroupLayout.test.ts +27 -142
  60. package/src/utils/validatePanelGroupLayout.ts +17 -13
  61. package/src/vendor/react.ts +2 -0
  62. package/src/utils/computePercentagePanelConstraints.test.ts +0 -98
  63. package/src/utils/computePercentagePanelConstraints.ts +0 -56
  64. package/src/utils/convertPercentageToPixels.test.ts +0 -9
  65. package/src/utils/convertPercentageToPixels.ts +0 -6
  66. package/src/utils/convertPixelConstraintsToPercentages.test.ts +0 -47
  67. package/src/utils/convertPixelConstraintsToPercentages.ts +0 -72
  68. package/src/utils/convertPixelsToPercentage.test.ts +0 -9
  69. package/src/utils/convertPixelsToPercentage.ts +0 -6
  70. package/src/utils/getPercentageSizeFromMixedSizes.test.ts +0 -47
  71. package/src/utils/getPercentageSizeFromMixedSizes.ts +0 -15
  72. package/src/utils/shouldMonitorPixelBasedConstraints.test.ts +0 -23
  73. 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,14 @@
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
+
8
+ ## 0.0.63
9
+
10
+ - Change default (not-yet-registered) Panel flex-grow style from 0 to 1
11
+
3
12
  ## 0.0.62
4
13
 
5
14
  - Edge case expand/collapse invalid size guard (#220)
@@ -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, };