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,35 +1,14 @@
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)];
24
- const useLayoutEffect_do_not_use_directly = useLayoutEffect;
2
+ import { createContext, useLayoutEffect, useRef, forwardRef, createElement, useContext, useImperativeHandle, useState, useCallback, useEffect, useMemo } from 'react';
25
3
 
26
4
  // The "contextmenu" event is not supported as a PointerEvent in all browsers yet, so MouseEvent still need to be handled
27
5
 
28
6
  const PanelGroupContext = createContext(null);
29
7
  PanelGroupContext.displayName = "PanelGroupContext";
30
8
 
31
- const useIsomorphicLayoutEffect = useLayoutEffect_do_not_use_directly ;
9
+ const useIsomorphicLayoutEffect = useLayoutEffect ;
32
10
 
11
+ const useId = React["useId".toString()];
33
12
  const wrappedUseId = typeof useId === "function" ? useId : () => null;
34
13
  let counter = 0;
35
14
  function useUniqueId(idFromParams = null) {
@@ -163,7 +142,7 @@ function PanelWithForwardedRef({
163
142
  ...rest,
164
143
  children,
165
144
  className: classNameFromProps,
166
- id: idFromProps,
145
+ id: panelId,
167
146
  style: {
168
147
  ...style,
169
148
  ...styleFromProps
@@ -313,8 +292,8 @@ function intersects(rectOne, rectTwo, strict) {
313
292
  /**
314
293
  * Determine which of two nodes appears in front of the other —
315
294
  * if `a` is in front, returns 1, otherwise returns -1
316
- * @param {HTMLElement} a
317
- * @param {HTMLElement} b
295
+ * @param {HTMLElement | SVGElement} a
296
+ * @param {HTMLElement | SVGElement} b
318
297
  */
319
298
  function compare(a, b) {
320
299
  if (a === b) throw new Error("Cannot compare node with itself");
@@ -352,7 +331,7 @@ function compare(a, b) {
352
331
  }
353
332
  const props = /\b(?:position|zIndex|opacity|transform|webkitTransform|mixBlendMode|filter|webkitFilter|isolation)\b/;
354
333
 
355
- /** @param {HTMLElement} node */
334
+ /** @param {HTMLElement | SVGElement} node */
356
335
  function is_flex_item(node) {
357
336
  var _get_parent;
358
337
  // @ts-ignore
@@ -360,7 +339,7 @@ function is_flex_item(node) {
360
339
  return display === "flex" || display === "inline-flex";
361
340
  }
362
341
 
363
- /** @param {HTMLElement} node */
342
+ /** @param {HTMLElement | SVGElement} node */
364
343
  function creates_stacking_context(node) {
365
344
  const style = getComputedStyle(node);
366
345
 
@@ -385,7 +364,7 @@ function creates_stacking_context(node) {
385
364
  return false;
386
365
  }
387
366
 
388
- /** @param {HTMLElement[]} nodes */
367
+ /** @param {(HTMLElement| SVGElement)[]} nodes */
389
368
  function find_stacking_context(nodes) {
390
369
  let i = nodes.length;
391
370
  while (i--) {
@@ -396,7 +375,7 @@ function find_stacking_context(nodes) {
396
375
  return null;
397
376
  }
398
377
 
399
- /** @param {HTMLElement} node */
378
+ /** @param {HTMLElement | SVGElement} node */
400
379
  function get_z_index(node) {
401
380
  return node && Number(getComputedStyle(node).zIndex) || 0;
402
381
  }
@@ -558,7 +537,7 @@ function recalculateIntersectingHandles({
558
537
  }) {
559
538
  intersectingHandles.splice(0);
560
539
  let targetElement = null;
561
- if (target instanceof HTMLElement) {
540
+ if (target instanceof HTMLElement || target instanceof SVGElement) {
562
541
  targetElement = target;
563
542
  }
564
543
  registeredResizeHandlers.forEach(data => {
@@ -648,7 +627,9 @@ function updateListeners() {
648
627
  body
649
628
  } = ownerDocument;
650
629
  body.removeEventListener("contextmenu", handlePointerUp);
651
- body.removeEventListener("pointerdown", handlePointerDown);
630
+ body.removeEventListener("pointerdown", handlePointerDown, {
631
+ capture: true
632
+ });
652
633
  body.removeEventListener("pointerleave", handlePointerMove);
653
634
  body.removeEventListener("pointermove", handlePointerMove);
654
635
  });
@@ -2342,8 +2323,11 @@ function PanelResizeHandle({
2342
2323
  hitAreaMargins,
2343
2324
  id: idFromProps,
2344
2325
  onBlur,
2326
+ onClick,
2345
2327
  onDragging,
2346
2328
  onFocus,
2329
+ onPointerDown,
2330
+ onPointerUp,
2347
2331
  style: styleFromProps = {},
2348
2332
  tabIndex = 0,
2349
2333
  tagName: Type = "div",
@@ -2354,10 +2338,16 @@ function PanelResizeHandle({
2354
2338
 
2355
2339
  // Use a ref to guard against users passing inline props
2356
2340
  const callbacksRef = useRef({
2357
- onDragging
2341
+ onClick,
2342
+ onDragging,
2343
+ onPointerDown,
2344
+ onPointerUp
2358
2345
  });
2359
2346
  useEffect(() => {
2347
+ callbacksRef.current.onClick = onClick;
2360
2348
  callbacksRef.current.onDragging = onDragging;
2349
+ callbacksRef.current.onPointerDown = onPointerDown;
2350
+ callbacksRef.current.onPointerUp = onPointerUp;
2361
2351
  });
2362
2352
  const panelGroupContext = useContext(PanelGroupContext);
2363
2353
  if (panelGroupContext === null) {
@@ -2400,20 +2390,22 @@ function PanelResizeHandle({
2400
2390
  }
2401
2391
  const element = elementRef.current;
2402
2392
  assert(element, "Element ref not attached");
2393
+ let didMove = false;
2403
2394
  const setResizeHandlerState = (action, isActive, event) => {
2404
2395
  if (isActive) {
2405
2396
  switch (action) {
2406
2397
  case "down":
2407
2398
  {
2408
2399
  setState("drag");
2400
+ didMove = false;
2409
2401
  assert(event, 'Expected event to be defined for "down" action');
2410
2402
  startDragging(resizeHandleId, event);
2411
2403
  const {
2412
- onDragging
2404
+ onDragging,
2405
+ onPointerDown
2413
2406
  } = callbacksRef.current;
2414
- if (onDragging) {
2415
- onDragging(true);
2416
- }
2407
+ onDragging === null || onDragging === void 0 ? void 0 : onDragging(true);
2408
+ onPointerDown === null || onPointerDown === void 0 ? void 0 : onPointerDown();
2417
2409
  break;
2418
2410
  }
2419
2411
  case "move":
@@ -2421,6 +2413,7 @@ function PanelResizeHandle({
2421
2413
  const {
2422
2414
  state
2423
2415
  } = committedValuesRef.current;
2416
+ didMove = true;
2424
2417
  if (state !== "drag") {
2425
2418
  setState("hover");
2426
2419
  }
@@ -2433,10 +2426,14 @@ function PanelResizeHandle({
2433
2426
  setState("hover");
2434
2427
  stopDragging();
2435
2428
  const {
2436
- onDragging
2429
+ onClick,
2430
+ onDragging,
2431
+ onPointerUp
2437
2432
  } = callbacksRef.current;
2438
- if (onDragging) {
2439
- onDragging(false);
2433
+ onDragging === null || onDragging === void 0 ? void 0 : onDragging(false);
2434
+ onPointerUp === null || onPointerUp === void 0 ? void 0 : onPointerUp();
2435
+ if (!didMove) {
2436
+ onClick === null || onClick === void 0 ? void 0 : onClick();
2440
2437
  }
2441
2438
  break;
2442
2439
  }
@@ -1,35 +1,14 @@
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)];
24
- const useLayoutEffect_do_not_use_directly = useLayoutEffect;
2
+ import { createContext, useLayoutEffect, useRef, forwardRef, createElement, useContext, useImperativeHandle, useState, useCallback, useEffect, useMemo } from 'react';
25
3
 
26
4
  // The "contextmenu" event is not supported as a PointerEvent in all browsers yet, so MouseEvent still need to be handled
27
5
 
28
6
  const PanelGroupContext = createContext(null);
29
7
  PanelGroupContext.displayName = "PanelGroupContext";
30
8
 
31
- const useIsomorphicLayoutEffect = useLayoutEffect_do_not_use_directly ;
9
+ const useIsomorphicLayoutEffect = useLayoutEffect ;
32
10
 
11
+ const useId = React["useId".toString()];
33
12
  const wrappedUseId = typeof useId === "function" ? useId : () => null;
34
13
  let counter = 0;
35
14
  function useUniqueId(idFromParams = null) {
@@ -157,7 +136,7 @@ function PanelWithForwardedRef({
157
136
  ...rest,
158
137
  children,
159
138
  className: classNameFromProps,
160
- id: idFromProps,
139
+ id: panelId,
161
140
  style: {
162
141
  ...style,
163
142
  ...styleFromProps
@@ -307,8 +286,8 @@ function intersects(rectOne, rectTwo, strict) {
307
286
  /**
308
287
  * Determine which of two nodes appears in front of the other —
309
288
  * if `a` is in front, returns 1, otherwise returns -1
310
- * @param {HTMLElement} a
311
- * @param {HTMLElement} b
289
+ * @param {HTMLElement | SVGElement} a
290
+ * @param {HTMLElement | SVGElement} b
312
291
  */
313
292
  function compare(a, b) {
314
293
  if (a === b) throw new Error("Cannot compare node with itself");
@@ -346,7 +325,7 @@ function compare(a, b) {
346
325
  }
347
326
  const props = /\b(?:position|zIndex|opacity|transform|webkitTransform|mixBlendMode|filter|webkitFilter|isolation)\b/;
348
327
 
349
- /** @param {HTMLElement} node */
328
+ /** @param {HTMLElement | SVGElement} node */
350
329
  function is_flex_item(node) {
351
330
  var _get_parent;
352
331
  // @ts-ignore
@@ -354,7 +333,7 @@ function is_flex_item(node) {
354
333
  return display === "flex" || display === "inline-flex";
355
334
  }
356
335
 
357
- /** @param {HTMLElement} node */
336
+ /** @param {HTMLElement | SVGElement} node */
358
337
  function creates_stacking_context(node) {
359
338
  const style = getComputedStyle(node);
360
339
 
@@ -379,7 +358,7 @@ function creates_stacking_context(node) {
379
358
  return false;
380
359
  }
381
360
 
382
- /** @param {HTMLElement[]} nodes */
361
+ /** @param {(HTMLElement| SVGElement)[]} nodes */
383
362
  function find_stacking_context(nodes) {
384
363
  let i = nodes.length;
385
364
  while (i--) {
@@ -390,7 +369,7 @@ function find_stacking_context(nodes) {
390
369
  return null;
391
370
  }
392
371
 
393
- /** @param {HTMLElement} node */
372
+ /** @param {HTMLElement | SVGElement} node */
394
373
  function get_z_index(node) {
395
374
  return node && Number(getComputedStyle(node).zIndex) || 0;
396
375
  }
@@ -552,7 +531,7 @@ function recalculateIntersectingHandles({
552
531
  }) {
553
532
  intersectingHandles.splice(0);
554
533
  let targetElement = null;
555
- if (target instanceof HTMLElement) {
534
+ if (target instanceof HTMLElement || target instanceof SVGElement) {
556
535
  targetElement = target;
557
536
  }
558
537
  registeredResizeHandlers.forEach(data => {
@@ -642,7 +621,9 @@ function updateListeners() {
642
621
  body
643
622
  } = ownerDocument;
644
623
  body.removeEventListener("contextmenu", handlePointerUp);
645
- body.removeEventListener("pointerdown", handlePointerDown);
624
+ body.removeEventListener("pointerdown", handlePointerDown, {
625
+ capture: true
626
+ });
646
627
  body.removeEventListener("pointerleave", handlePointerMove);
647
628
  body.removeEventListener("pointermove", handlePointerMove);
648
629
  });
@@ -2236,8 +2217,11 @@ function PanelResizeHandle({
2236
2217
  hitAreaMargins,
2237
2218
  id: idFromProps,
2238
2219
  onBlur,
2220
+ onClick,
2239
2221
  onDragging,
2240
2222
  onFocus,
2223
+ onPointerDown,
2224
+ onPointerUp,
2241
2225
  style: styleFromProps = {},
2242
2226
  tabIndex = 0,
2243
2227
  tagName: Type = "div",
@@ -2248,10 +2232,16 @@ function PanelResizeHandle({
2248
2232
 
2249
2233
  // Use a ref to guard against users passing inline props
2250
2234
  const callbacksRef = useRef({
2251
- onDragging
2235
+ onClick,
2236
+ onDragging,
2237
+ onPointerDown,
2238
+ onPointerUp
2252
2239
  });
2253
2240
  useEffect(() => {
2241
+ callbacksRef.current.onClick = onClick;
2254
2242
  callbacksRef.current.onDragging = onDragging;
2243
+ callbacksRef.current.onPointerDown = onPointerDown;
2244
+ callbacksRef.current.onPointerUp = onPointerUp;
2255
2245
  });
2256
2246
  const panelGroupContext = useContext(PanelGroupContext);
2257
2247
  if (panelGroupContext === null) {
@@ -2294,20 +2284,22 @@ function PanelResizeHandle({
2294
2284
  }
2295
2285
  const element = elementRef.current;
2296
2286
  assert(element, "Element ref not attached");
2287
+ let didMove = false;
2297
2288
  const setResizeHandlerState = (action, isActive, event) => {
2298
2289
  if (isActive) {
2299
2290
  switch (action) {
2300
2291
  case "down":
2301
2292
  {
2302
2293
  setState("drag");
2294
+ didMove = false;
2303
2295
  assert(event, 'Expected event to be defined for "down" action');
2304
2296
  startDragging(resizeHandleId, event);
2305
2297
  const {
2306
- onDragging
2298
+ onDragging,
2299
+ onPointerDown
2307
2300
  } = callbacksRef.current;
2308
- if (onDragging) {
2309
- onDragging(true);
2310
- }
2301
+ onDragging === null || onDragging === void 0 ? void 0 : onDragging(true);
2302
+ onPointerDown === null || onPointerDown === void 0 ? void 0 : onPointerDown();
2311
2303
  break;
2312
2304
  }
2313
2305
  case "move":
@@ -2315,6 +2307,7 @@ function PanelResizeHandle({
2315
2307
  const {
2316
2308
  state
2317
2309
  } = committedValuesRef.current;
2310
+ didMove = true;
2318
2311
  if (state !== "drag") {
2319
2312
  setState("hover");
2320
2313
  }
@@ -2327,10 +2320,14 @@ function PanelResizeHandle({
2327
2320
  setState("hover");
2328
2321
  stopDragging();
2329
2322
  const {
2330
- onDragging
2323
+ onClick,
2324
+ onDragging,
2325
+ onPointerUp
2331
2326
  } = callbacksRef.current;
2332
- if (onDragging) {
2333
- onDragging(false);
2327
+ onDragging === null || onDragging === void 0 ? void 0 : onDragging(false);
2328
+ onPointerUp === null || onPointerUp === void 0 ? void 0 : onPointerUp();
2329
+ if (!didMove) {
2330
+ onClick === null || onClick === void 0 ? void 0 : onClick();
2334
2331
  }
2335
2332
  break;
2336
2333
  }