react-resizable-panels 2.1.6 → 2.1.8

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 (92) hide show
  1. package/README.md +4 -0
  2. package/dist/declarations/src/Panel.d.ts +1 -1
  3. package/dist/declarations/src/PanelGroup.d.ts +1 -1
  4. package/dist/declarations/src/PanelResizeHandle.d.ts +6 -3
  5. package/dist/react-resizable-panels.browser.cjs.js +90 -94
  6. package/dist/react-resizable-panels.browser.development.cjs.js +90 -94
  7. package/dist/react-resizable-panels.browser.development.esm.js +38 -41
  8. package/dist/react-resizable-panels.browser.esm.js +38 -41
  9. package/dist/react-resizable-panels.cjs.js +90 -94
  10. package/dist/react-resizable-panels.development.cjs.js +90 -94
  11. package/dist/react-resizable-panels.development.esm.js +38 -41
  12. package/dist/react-resizable-panels.development.node.cjs.js +89 -92
  13. package/dist/react-resizable-panels.development.node.esm.js +37 -39
  14. package/dist/react-resizable-panels.esm.js +38 -41
  15. package/dist/react-resizable-panels.node.cjs.js +89 -92
  16. package/dist/react-resizable-panels.node.esm.js +37 -39
  17. package/package.json +7 -2
  18. package/.eslintrc.cjs +0 -27
  19. package/CHANGELOG.md +0 -574
  20. package/dist/declarations/src/vendor/react.d.ts +0 -7
  21. package/jest.config.js +0 -10
  22. package/src/Panel.test.tsx +0 -1084
  23. package/src/Panel.ts +0 -259
  24. package/src/PanelGroup.test.tsx +0 -443
  25. package/src/PanelGroup.ts +0 -999
  26. package/src/PanelGroupContext.ts +0 -42
  27. package/src/PanelResizeHandle.test.tsx +0 -367
  28. package/src/PanelResizeHandle.ts +0 -246
  29. package/src/PanelResizeHandleRegistry.ts +0 -336
  30. package/src/constants.ts +0 -1
  31. package/src/env-conditions/browser.ts +0 -1
  32. package/src/env-conditions/development.ts +0 -1
  33. package/src/env-conditions/node.ts +0 -1
  34. package/src/env-conditions/production.ts +0 -1
  35. package/src/env-conditions/unknown.ts +0 -1
  36. package/src/hooks/useForceUpdate.ts +0 -7
  37. package/src/hooks/useIsomorphicEffect.ts +0 -8
  38. package/src/hooks/useUniqueId.ts +0 -19
  39. package/src/hooks/useWindowSplitterBehavior.ts +0 -90
  40. package/src/hooks/useWindowSplitterPanelGroupBehavior.ts +0 -201
  41. package/src/index.ts +0 -77
  42. package/src/types.ts +0 -5
  43. package/src/utils/adjustLayoutByDelta.test.ts +0 -2061
  44. package/src/utils/adjustLayoutByDelta.ts +0 -308
  45. package/src/utils/arrays.ts +0 -13
  46. package/src/utils/assert.ts +0 -10
  47. package/src/utils/calculateAriaValues.test.ts +0 -106
  48. package/src/utils/calculateAriaValues.ts +0 -45
  49. package/src/utils/calculateDeltaPercentage.ts +0 -63
  50. package/src/utils/calculateDragOffsetPercentage.ts +0 -40
  51. package/src/utils/calculateUnsafeDefaultLayout.test.ts +0 -87
  52. package/src/utils/calculateUnsafeDefaultLayout.ts +0 -50
  53. package/src/utils/callPanelCallbacks.ts +0 -49
  54. package/src/utils/compareLayouts.test.ts +0 -9
  55. package/src/utils/compareLayouts.ts +0 -12
  56. package/src/utils/computePanelFlexBoxStyle.test.ts +0 -123
  57. package/src/utils/computePanelFlexBoxStyle.ts +0 -50
  58. package/src/utils/csp.ts +0 -9
  59. package/src/utils/cursor.ts +0 -103
  60. package/src/utils/debounce.ts +0 -18
  61. package/src/utils/determinePivotIndices.ts +0 -15
  62. package/src/utils/dom/getPanelElement.ts +0 -10
  63. package/src/utils/dom/getPanelElementsForGroup.ts +0 -8
  64. package/src/utils/dom/getPanelGroupElement.ts +0 -21
  65. package/src/utils/dom/getResizeHandleElement.ts +0 -10
  66. package/src/utils/dom/getResizeHandleElementIndex.ts +0 -13
  67. package/src/utils/dom/getResizeHandleElementsForGroup.ts +0 -10
  68. package/src/utils/dom/getResizeHandlePanelIds.ts +0 -19
  69. package/src/utils/events/getResizeEventCoordinates.ts +0 -23
  70. package/src/utils/events/getResizeEventCursorPosition.ts +0 -14
  71. package/src/utils/events/index.ts +0 -13
  72. package/src/utils/getInputType.ts +0 -5
  73. package/src/utils/initializeDefaultStorage.ts +0 -26
  74. package/src/utils/numbers/fuzzyCompareNumbers.test.ts +0 -16
  75. package/src/utils/numbers/fuzzyCompareNumbers.ts +0 -21
  76. package/src/utils/numbers/fuzzyLayoutsEqual.ts +0 -22
  77. package/src/utils/numbers/fuzzyNumbersEqual.ts +0 -9
  78. package/src/utils/rects/getIntersectingRectangle.test.ts +0 -198
  79. package/src/utils/rects/getIntersectingRectangle.ts +0 -28
  80. package/src/utils/rects/intersects.test.ts +0 -197
  81. package/src/utils/rects/intersects.ts +0 -23
  82. package/src/utils/rects/types.ts +0 -6
  83. package/src/utils/resizePanel.test.ts +0 -59
  84. package/src/utils/resizePanel.ts +0 -47
  85. package/src/utils/serialization.ts +0 -87
  86. package/src/utils/test-utils.ts +0 -205
  87. package/src/utils/validatePanelConstraints.test.ts +0 -143
  88. package/src/utils/validatePanelConstraints.ts +0 -69
  89. package/src/utils/validatePanelGroupLayout.test.ts +0 -148
  90. package/src/utils/validatePanelGroupLayout.ts +0 -95
  91. package/src/vendor/react.ts +0 -73
  92. package/src/vendor/stacking-order.ts +0 -139
@@ -1,32 +1,12 @@
1
1
  import * as React from 'react';
2
-
3
- // This module exists to work around Webpack issue https://github.com/webpack/webpack/issues/14814
4
-
5
- // eslint-disable-next-line no-restricted-imports
6
-
7
- const {
8
- createElement,
9
- createContext,
10
- createRef,
11
- forwardRef,
12
- useCallback,
13
- useContext,
14
- useEffect,
15
- useImperativeHandle,
16
- useLayoutEffect,
17
- useMemo,
18
- useRef,
19
- useState
20
- } = React;
21
-
22
- // `Math.random()` and `.slice(0, 5)` prevents bundlers from trying to `import { useId } from 'react'`
23
- const useId = React[`useId${Math.random()}`.slice(0, 5)];
2
+ import { createContext, useRef, forwardRef, createElement, useContext, useImperativeHandle, useState, useCallback, useEffect, useMemo } from 'react';
24
3
 
25
4
  // The "contextmenu" event is not supported as a PointerEvent in all browsers yet, so MouseEvent still need to be handled
26
5
 
27
6
  const PanelGroupContext = createContext(null);
28
7
  PanelGroupContext.displayName = "PanelGroupContext";
29
8
 
9
+ const useId = React["useId".toString()];
30
10
  const wrappedUseId = typeof useId === "function" ? useId : () => null;
31
11
  let counter = 0;
32
12
  function useUniqueId(idFromParams = null) {
@@ -132,7 +112,7 @@ function PanelWithForwardedRef({
132
112
  ...rest,
133
113
  children,
134
114
  className: classNameFromProps,
135
- id: idFromProps,
115
+ id: panelId,
136
116
  style: {
137
117
  ...style,
138
118
  ...styleFromProps
@@ -282,8 +262,8 @@ function intersects(rectOne, rectTwo, strict) {
282
262
  /**
283
263
  * Determine which of two nodes appears in front of the other —
284
264
  * if `a` is in front, returns 1, otherwise returns -1
285
- * @param {HTMLElement} a
286
- * @param {HTMLElement} b
265
+ * @param {HTMLElement | SVGElement} a
266
+ * @param {HTMLElement | SVGElement} b
287
267
  */
288
268
  function compare(a, b) {
289
269
  if (a === b) throw new Error("Cannot compare node with itself");
@@ -321,7 +301,7 @@ function compare(a, b) {
321
301
  }
322
302
  const props = /\b(?:position|zIndex|opacity|transform|webkitTransform|mixBlendMode|filter|webkitFilter|isolation)\b/;
323
303
 
324
- /** @param {HTMLElement} node */
304
+ /** @param {HTMLElement | SVGElement} node */
325
305
  function is_flex_item(node) {
326
306
  var _get_parent;
327
307
  // @ts-ignore
@@ -329,7 +309,7 @@ function is_flex_item(node) {
329
309
  return display === "flex" || display === "inline-flex";
330
310
  }
331
311
 
332
- /** @param {HTMLElement} node */
312
+ /** @param {HTMLElement | SVGElement} node */
333
313
  function creates_stacking_context(node) {
334
314
  const style = getComputedStyle(node);
335
315
 
@@ -354,7 +334,7 @@ function creates_stacking_context(node) {
354
334
  return false;
355
335
  }
356
336
 
357
- /** @param {HTMLElement[]} nodes */
337
+ /** @param {(HTMLElement| SVGElement)[]} nodes */
358
338
  function find_stacking_context(nodes) {
359
339
  let i = nodes.length;
360
340
  while (i--) {
@@ -365,7 +345,7 @@ function find_stacking_context(nodes) {
365
345
  return null;
366
346
  }
367
347
 
368
- /** @param {HTMLElement} node */
348
+ /** @param {HTMLElement | SVGElement} node */
369
349
  function get_z_index(node) {
370
350
  return node && Number(getComputedStyle(node).zIndex) || 0;
371
351
  }
@@ -527,7 +507,7 @@ function recalculateIntersectingHandles({
527
507
  }) {
528
508
  intersectingHandles.splice(0);
529
509
  let targetElement = null;
530
- if (target instanceof HTMLElement) {
510
+ if (target instanceof HTMLElement || target instanceof SVGElement) {
531
511
  targetElement = target;
532
512
  }
533
513
  registeredResizeHandlers.forEach(data => {
@@ -617,7 +597,9 @@ function updateListeners() {
617
597
  body
618
598
  } = ownerDocument;
619
599
  body.removeEventListener("contextmenu", handlePointerUp);
620
- body.removeEventListener("pointerdown", handlePointerDown);
600
+ body.removeEventListener("pointerdown", handlePointerDown, {
601
+ capture: true
602
+ });
621
603
  body.removeEventListener("pointerleave", handlePointerMove);
622
604
  body.removeEventListener("pointermove", handlePointerMove);
623
605
  });
@@ -2117,8 +2099,11 @@ function PanelResizeHandle({
2117
2099
  hitAreaMargins,
2118
2100
  id: idFromProps,
2119
2101
  onBlur,
2102
+ onClick,
2120
2103
  onDragging,
2121
2104
  onFocus,
2105
+ onPointerDown,
2106
+ onPointerUp,
2122
2107
  style: styleFromProps = {},
2123
2108
  tabIndex = 0,
2124
2109
  tagName: Type = "div",
@@ -2129,10 +2114,16 @@ function PanelResizeHandle({
2129
2114
 
2130
2115
  // Use a ref to guard against users passing inline props
2131
2116
  const callbacksRef = useRef({
2132
- onDragging
2117
+ onClick,
2118
+ onDragging,
2119
+ onPointerDown,
2120
+ onPointerUp
2133
2121
  });
2134
2122
  useEffect(() => {
2123
+ callbacksRef.current.onClick = onClick;
2135
2124
  callbacksRef.current.onDragging = onDragging;
2125
+ callbacksRef.current.onPointerDown = onPointerDown;
2126
+ callbacksRef.current.onPointerUp = onPointerUp;
2136
2127
  });
2137
2128
  const panelGroupContext = useContext(PanelGroupContext);
2138
2129
  if (panelGroupContext === null) {
@@ -2172,20 +2163,22 @@ function PanelResizeHandle({
2172
2163
  }
2173
2164
  const element = elementRef.current;
2174
2165
  assert(element, "Element ref not attached");
2166
+ let didMove = false;
2175
2167
  const setResizeHandlerState = (action, isActive, event) => {
2176
2168
  if (isActive) {
2177
2169
  switch (action) {
2178
2170
  case "down":
2179
2171
  {
2180
2172
  setState("drag");
2173
+ didMove = false;
2181
2174
  assert(event, 'Expected event to be defined for "down" action');
2182
2175
  startDragging(resizeHandleId, event);
2183
2176
  const {
2184
- onDragging
2177
+ onDragging,
2178
+ onPointerDown
2185
2179
  } = callbacksRef.current;
2186
- if (onDragging) {
2187
- onDragging(true);
2188
- }
2180
+ onDragging === null || onDragging === void 0 ? void 0 : onDragging(true);
2181
+ onPointerDown === null || onPointerDown === void 0 ? void 0 : onPointerDown();
2189
2182
  break;
2190
2183
  }
2191
2184
  case "move":
@@ -2193,6 +2186,7 @@ function PanelResizeHandle({
2193
2186
  const {
2194
2187
  state
2195
2188
  } = committedValuesRef.current;
2189
+ didMove = true;
2196
2190
  if (state !== "drag") {
2197
2191
  setState("hover");
2198
2192
  }
@@ -2205,10 +2199,14 @@ function PanelResizeHandle({
2205
2199
  setState("hover");
2206
2200
  stopDragging();
2207
2201
  const {
2208
- onDragging
2202
+ onClick,
2203
+ onDragging,
2204
+ onPointerUp
2209
2205
  } = callbacksRef.current;
2210
- if (onDragging) {
2211
- onDragging(false);
2206
+ onDragging === null || onDragging === void 0 ? void 0 : onDragging(false);
2207
+ onPointerUp === null || onPointerUp === void 0 ? void 0 : onPointerUp();
2208
+ if (!didMove) {
2209
+ onClick === null || onClick === void 0 ? void 0 : onClick();
2212
2210
  }
2213
2211
  break;
2214
2212
  }
@@ -1,37 +1,16 @@
1
1
  import * as React from 'react';
2
+ import { createContext, useLayoutEffect, useRef, forwardRef, createElement, useContext, useImperativeHandle, useState, useCallback, useEffect, useMemo } from 'react';
2
3
 
3
4
  const isBrowser = typeof window !== "undefined";
4
5
 
5
- // This module exists to work around Webpack issue https://github.com/webpack/webpack/issues/14814
6
-
7
- // eslint-disable-next-line no-restricted-imports
8
-
9
- const {
10
- createElement,
11
- createContext,
12
- createRef,
13
- forwardRef,
14
- useCallback,
15
- useContext,
16
- useEffect,
17
- useImperativeHandle,
18
- useLayoutEffect,
19
- useMemo,
20
- useRef,
21
- useState
22
- } = React;
23
-
24
- // `Math.random()` and `.slice(0, 5)` prevents bundlers from trying to `import { useId } from 'react'`
25
- const useId = React[`useId${Math.random()}`.slice(0, 5)];
26
- const useLayoutEffect_do_not_use_directly = useLayoutEffect;
27
-
28
6
  // The "contextmenu" event is not supported as a PointerEvent in all browsers yet, so MouseEvent still need to be handled
29
7
 
30
8
  const PanelGroupContext = createContext(null);
31
9
  PanelGroupContext.displayName = "PanelGroupContext";
32
10
 
33
- const useIsomorphicLayoutEffect = isBrowser ? useLayoutEffect_do_not_use_directly : () => {};
11
+ const useIsomorphicLayoutEffect = isBrowser ? useLayoutEffect : () => {};
34
12
 
13
+ const useId = React["useId".toString()];
35
14
  const wrappedUseId = typeof useId === "function" ? useId : () => null;
36
15
  let counter = 0;
37
16
  function useUniqueId(idFromParams = null) {
@@ -159,7 +138,7 @@ function PanelWithForwardedRef({
159
138
  ...rest,
160
139
  children,
161
140
  className: classNameFromProps,
162
- id: idFromProps,
141
+ id: panelId,
163
142
  style: {
164
143
  ...style,
165
144
  ...styleFromProps
@@ -309,8 +288,8 @@ function intersects(rectOne, rectTwo, strict) {
309
288
  /**
310
289
  * Determine which of two nodes appears in front of the other —
311
290
  * if `a` is in front, returns 1, otherwise returns -1
312
- * @param {HTMLElement} a
313
- * @param {HTMLElement} b
291
+ * @param {HTMLElement | SVGElement} a
292
+ * @param {HTMLElement | SVGElement} b
314
293
  */
315
294
  function compare(a, b) {
316
295
  if (a === b) throw new Error("Cannot compare node with itself");
@@ -348,7 +327,7 @@ function compare(a, b) {
348
327
  }
349
328
  const props = /\b(?:position|zIndex|opacity|transform|webkitTransform|mixBlendMode|filter|webkitFilter|isolation)\b/;
350
329
 
351
- /** @param {HTMLElement} node */
330
+ /** @param {HTMLElement | SVGElement} node */
352
331
  function is_flex_item(node) {
353
332
  var _get_parent;
354
333
  // @ts-ignore
@@ -356,7 +335,7 @@ function is_flex_item(node) {
356
335
  return display === "flex" || display === "inline-flex";
357
336
  }
358
337
 
359
- /** @param {HTMLElement} node */
338
+ /** @param {HTMLElement | SVGElement} node */
360
339
  function creates_stacking_context(node) {
361
340
  const style = getComputedStyle(node);
362
341
 
@@ -381,7 +360,7 @@ function creates_stacking_context(node) {
381
360
  return false;
382
361
  }
383
362
 
384
- /** @param {HTMLElement[]} nodes */
363
+ /** @param {(HTMLElement| SVGElement)[]} nodes */
385
364
  function find_stacking_context(nodes) {
386
365
  let i = nodes.length;
387
366
  while (i--) {
@@ -392,7 +371,7 @@ function find_stacking_context(nodes) {
392
371
  return null;
393
372
  }
394
373
 
395
- /** @param {HTMLElement} node */
374
+ /** @param {HTMLElement | SVGElement} node */
396
375
  function get_z_index(node) {
397
376
  return node && Number(getComputedStyle(node).zIndex) || 0;
398
377
  }
@@ -554,7 +533,7 @@ function recalculateIntersectingHandles({
554
533
  }) {
555
534
  intersectingHandles.splice(0);
556
535
  let targetElement = null;
557
- if (target instanceof HTMLElement) {
536
+ if (target instanceof HTMLElement || target instanceof SVGElement) {
558
537
  targetElement = target;
559
538
  }
560
539
  registeredResizeHandlers.forEach(data => {
@@ -644,7 +623,9 @@ function updateListeners() {
644
623
  body
645
624
  } = ownerDocument;
646
625
  body.removeEventListener("contextmenu", handlePointerUp);
647
- body.removeEventListener("pointerdown", handlePointerDown);
626
+ body.removeEventListener("pointerdown", handlePointerDown, {
627
+ capture: true
628
+ });
648
629
  body.removeEventListener("pointerleave", handlePointerMove);
649
630
  body.removeEventListener("pointermove", handlePointerMove);
650
631
  });
@@ -2238,8 +2219,11 @@ function PanelResizeHandle({
2238
2219
  hitAreaMargins,
2239
2220
  id: idFromProps,
2240
2221
  onBlur,
2222
+ onClick,
2241
2223
  onDragging,
2242
2224
  onFocus,
2225
+ onPointerDown,
2226
+ onPointerUp,
2243
2227
  style: styleFromProps = {},
2244
2228
  tabIndex = 0,
2245
2229
  tagName: Type = "div",
@@ -2250,10 +2234,16 @@ function PanelResizeHandle({
2250
2234
 
2251
2235
  // Use a ref to guard against users passing inline props
2252
2236
  const callbacksRef = useRef({
2253
- onDragging
2237
+ onClick,
2238
+ onDragging,
2239
+ onPointerDown,
2240
+ onPointerUp
2254
2241
  });
2255
2242
  useEffect(() => {
2243
+ callbacksRef.current.onClick = onClick;
2256
2244
  callbacksRef.current.onDragging = onDragging;
2245
+ callbacksRef.current.onPointerDown = onPointerDown;
2246
+ callbacksRef.current.onPointerUp = onPointerUp;
2257
2247
  });
2258
2248
  const panelGroupContext = useContext(PanelGroupContext);
2259
2249
  if (panelGroupContext === null) {
@@ -2296,20 +2286,22 @@ function PanelResizeHandle({
2296
2286
  }
2297
2287
  const element = elementRef.current;
2298
2288
  assert(element, "Element ref not attached");
2289
+ let didMove = false;
2299
2290
  const setResizeHandlerState = (action, isActive, event) => {
2300
2291
  if (isActive) {
2301
2292
  switch (action) {
2302
2293
  case "down":
2303
2294
  {
2304
2295
  setState("drag");
2296
+ didMove = false;
2305
2297
  assert(event, 'Expected event to be defined for "down" action');
2306
2298
  startDragging(resizeHandleId, event);
2307
2299
  const {
2308
- onDragging
2300
+ onDragging,
2301
+ onPointerDown
2309
2302
  } = callbacksRef.current;
2310
- if (onDragging) {
2311
- onDragging(true);
2312
- }
2303
+ onDragging === null || onDragging === void 0 ? void 0 : onDragging(true);
2304
+ onPointerDown === null || onPointerDown === void 0 ? void 0 : onPointerDown();
2313
2305
  break;
2314
2306
  }
2315
2307
  case "move":
@@ -2317,6 +2309,7 @@ function PanelResizeHandle({
2317
2309
  const {
2318
2310
  state
2319
2311
  } = committedValuesRef.current;
2312
+ didMove = true;
2320
2313
  if (state !== "drag") {
2321
2314
  setState("hover");
2322
2315
  }
@@ -2329,10 +2322,14 @@ function PanelResizeHandle({
2329
2322
  setState("hover");
2330
2323
  stopDragging();
2331
2324
  const {
2332
- onDragging
2325
+ onClick,
2326
+ onDragging,
2327
+ onPointerUp
2333
2328
  } = callbacksRef.current;
2334
- if (onDragging) {
2335
- onDragging(false);
2329
+ onDragging === null || onDragging === void 0 ? void 0 : onDragging(false);
2330
+ onPointerUp === null || onPointerUp === void 0 ? void 0 : onPointerUp();
2331
+ if (!didMove) {
2332
+ onClick === null || onClick === void 0 ? void 0 : onClick();
2336
2333
  }
2337
2334
  break;
2338
2335
  }