react-resizable-panels 2.1.8 → 3.0.0

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 (31) hide show
  1. package/LICENSE +21 -0
  2. package/dist/declarations/src/Panel.d.ts +9 -9
  3. package/dist/declarations/src/PanelGroup.d.ts +10 -10
  4. package/dist/declarations/src/PanelResizeHandle.d.ts +1 -1
  5. package/dist/declarations/src/constants.d.ts +15 -0
  6. package/dist/declarations/src/hooks/usePanelGroupContext.d.ts +4 -0
  7. package/dist/declarations/src/index.d.ts +4 -2
  8. package/dist/{react-resizable-panels.browser.development.esm.js → react-resizable-panels.browser.development.js} +148 -106
  9. package/dist/{react-resizable-panels.browser.esm.js → react-resizable-panels.browser.js} +148 -106
  10. package/dist/react-resizable-panels.d.ts +2 -0
  11. package/dist/{react-resizable-panels.development.esm.js → react-resizable-panels.development.js} +148 -106
  12. package/dist/{react-resizable-panels.development.node.esm.js → react-resizable-panels.development.node.js} +148 -106
  13. package/dist/{react-resizable-panels.esm.js → react-resizable-panels.js} +148 -106
  14. package/dist/{react-resizable-panels.node.esm.js → react-resizable-panels.node.js} +148 -106
  15. package/package.json +25 -47
  16. package/dist/react-resizable-panels.browser.cjs.js +0 -2453
  17. package/dist/react-resizable-panels.browser.cjs.mjs +0 -18
  18. package/dist/react-resizable-panels.browser.development.cjs.js +0 -2559
  19. package/dist/react-resizable-panels.browser.development.cjs.mjs +0 -18
  20. package/dist/react-resizable-panels.cjs.d.mts +0 -2
  21. package/dist/react-resizable-panels.cjs.d.mts.map +0 -1
  22. package/dist/react-resizable-panels.cjs.d.ts +0 -2
  23. package/dist/react-resizable-panels.cjs.d.ts.map +0 -1
  24. package/dist/react-resizable-panels.cjs.js +0 -2455
  25. package/dist/react-resizable-panels.cjs.mjs +0 -18
  26. package/dist/react-resizable-panels.development.cjs.js +0 -2566
  27. package/dist/react-resizable-panels.development.cjs.mjs +0 -18
  28. package/dist/react-resizable-panels.development.node.cjs.js +0 -2332
  29. package/dist/react-resizable-panels.development.node.cjs.mjs +0 -18
  30. package/dist/react-resizable-panels.node.cjs.js +0 -2231
  31. package/dist/react-resizable-panels.node.cjs.mjs +0 -18
@@ -6,6 +6,22 @@ import { createContext, useRef, forwardRef, createElement, useContext, useImpera
6
6
  const PanelGroupContext = createContext(null);
7
7
  PanelGroupContext.displayName = "PanelGroupContext";
8
8
 
9
+ const DATA_ATTRIBUTES = {
10
+ group: "data-panel-group",
11
+ groupDirection: "data-panel-group-direction",
12
+ groupId: "data-panel-group-id",
13
+ panel: "data-panel",
14
+ panelCollapsible: "data-panel-collapsible",
15
+ panelId: "data-panel-id",
16
+ panelSize: "data-panel-size",
17
+ resizeHandle: "data-resize-handle",
18
+ resizeHandleActive: "data-resize-handle-active",
19
+ resizeHandleEnabled: "data-panel-resize-handle-enabled",
20
+ resizeHandleId: "data-panel-resize-handle-id",
21
+ resizeHandleState: "data-resize-handle-state"
22
+ };
23
+ const PRECISION = 10;
24
+
9
25
  const useId = React["useId".toString()];
10
26
  const wrappedUseId = typeof useId === "function" ? useId : () => null;
11
27
  let counter = 0;
@@ -107,11 +123,11 @@ function PanelWithForwardedRef({
107
123
  ...styleFromProps
108
124
  },
109
125
  // CSS selectors
110
- "data-panel": "",
111
- "data-panel-collapsible": collapsible || undefined,
112
- "data-panel-group-id": groupId,
113
- "data-panel-id": panelId,
114
- "data-panel-size": parseFloat("" + style.flexGrow).toFixed(1)
126
+ [DATA_ATTRIBUTES.groupId]: groupId,
127
+ [DATA_ATTRIBUTES.panel]: "",
128
+ [DATA_ATTRIBUTES.panelCollapsible]: collapsible || undefined,
129
+ [DATA_ATTRIBUTES.panelId]: panelId,
130
+ [DATA_ATTRIBUTES.panelSize]: parseFloat("" + style.flexGrow).toFixed(1)
115
131
  });
116
132
  }
117
133
  const Panel = forwardRef((props, ref) => createElement(PanelWithForwardedRef, {
@@ -131,6 +147,7 @@ function setNonce(value) {
131
147
 
132
148
  let currentCursorStyle = null;
133
149
  let enabled = true;
150
+ let prevRuleIndex = -1;
134
151
  let styleElement = null;
135
152
  function disableGlobalCursorStyles() {
136
153
  enabled = false;
@@ -180,9 +197,11 @@ function resetGlobalCursorStyle() {
180
197
  document.head.removeChild(styleElement);
181
198
  currentCursorStyle = null;
182
199
  styleElement = null;
200
+ prevRuleIndex = -1;
183
201
  }
184
202
  }
185
203
  function setGlobalCursorStyle(state, constraintFlags) {
204
+ var _styleElement$sheet$i, _styleElement$sheet2;
186
205
  if (!enabled) {
187
206
  return;
188
207
  }
@@ -199,7 +218,11 @@ function setGlobalCursorStyle(state, constraintFlags) {
199
218
  }
200
219
  document.head.appendChild(styleElement);
201
220
  }
202
- styleElement.innerHTML = `*{cursor: ${style}!important;}`;
221
+ if (prevRuleIndex >= 0) {
222
+ var _styleElement$sheet;
223
+ (_styleElement$sheet = styleElement.sheet) === null || _styleElement$sheet === void 0 ? void 0 : _styleElement$sheet.removeRule(prevRuleIndex);
224
+ }
225
+ prevRuleIndex = (_styleElement$sheet$i = (_styleElement$sheet2 = styleElement.sheet) === null || _styleElement$sheet2 === void 0 ? void 0 : _styleElement$sheet2.insertRule(`*{cursor: ${style} !important;}`)) !== null && _styleElement$sheet$i !== void 0 ? _styleElement$sheet$i : -1;
203
226
  }
204
227
 
205
228
  function isKeyDown(event) {
@@ -430,7 +453,9 @@ function handlePointerDown(event) {
430
453
  if (intersectingHandles.length > 0) {
431
454
  updateResizeHandlerStates("down", event);
432
455
  event.preventDefault();
433
- event.stopPropagation();
456
+ if (!isWithinResizeHandle(target)) {
457
+ event.stopImmediatePropagation();
458
+ }
434
459
  }
435
460
  }
436
461
  function handlePointerMove(event) {
@@ -479,6 +504,9 @@ function handlePointerUp(event) {
479
504
  isPointerDown = false;
480
505
  if (intersectingHandles.length > 0) {
481
506
  event.preventDefault();
507
+ if (!isWithinResizeHandle(target)) {
508
+ event.stopImmediatePropagation();
509
+ }
482
510
  }
483
511
  updateResizeHandlerStates("up", event);
484
512
  recalculateIntersectingHandles({
@@ -489,6 +517,16 @@ function handlePointerUp(event) {
489
517
  updateCursor();
490
518
  updateListeners();
491
519
  }
520
+ function isWithinResizeHandle(element) {
521
+ let currentElement = element;
522
+ while (currentElement) {
523
+ if (currentElement.hasAttribute(DATA_ATTRIBUTES.resizeHandle)) {
524
+ return true;
525
+ }
526
+ currentElement = currentElement.parentElement;
527
+ }
528
+ return false;
529
+ }
492
530
  function recalculateIntersectingHandles({
493
531
  target,
494
532
  x,
@@ -580,49 +618,47 @@ function updateCursor() {
580
618
  resetGlobalCursorStyle();
581
619
  }
582
620
  }
621
+ let listenersAbortController = new AbortController();
583
622
  function updateListeners() {
584
- ownerDocumentCounts.forEach((_, ownerDocument) => {
585
- const {
586
- body
587
- } = ownerDocument;
588
- body.removeEventListener("contextmenu", handlePointerUp);
589
- body.removeEventListener("pointerdown", handlePointerDown, {
590
- capture: true
591
- });
592
- body.removeEventListener("pointerleave", handlePointerMove);
593
- body.removeEventListener("pointermove", handlePointerMove);
594
- });
595
- window.removeEventListener("pointerup", handlePointerUp);
596
- window.removeEventListener("pointercancel", handlePointerUp);
597
- if (registeredResizeHandlers.size > 0) {
598
- if (isPointerDown) {
599
- if (intersectingHandles.length > 0) {
600
- ownerDocumentCounts.forEach((count, ownerDocument) => {
601
- const {
602
- body
603
- } = ownerDocument;
604
- if (count > 0) {
605
- body.addEventListener("contextmenu", handlePointerUp);
606
- body.addEventListener("pointerleave", handlePointerMove);
607
- body.addEventListener("pointermove", handlePointerMove);
608
- }
609
- });
610
- }
611
- window.addEventListener("pointerup", handlePointerUp);
612
- window.addEventListener("pointercancel", handlePointerUp);
613
- } else {
623
+ listenersAbortController.abort();
624
+ listenersAbortController = new AbortController();
625
+ const options = {
626
+ capture: true,
627
+ signal: listenersAbortController.signal
628
+ };
629
+ if (!registeredResizeHandlers.size) {
630
+ return;
631
+ }
632
+ if (isPointerDown) {
633
+ if (intersectingHandles.length > 0) {
614
634
  ownerDocumentCounts.forEach((count, ownerDocument) => {
615
635
  const {
616
636
  body
617
637
  } = ownerDocument;
618
638
  if (count > 0) {
619
- body.addEventListener("pointerdown", handlePointerDown, {
620
- capture: true
621
- });
622
- body.addEventListener("pointermove", handlePointerMove);
639
+ body.addEventListener("contextmenu", handlePointerUp, options);
640
+ body.addEventListener("pointerleave", handlePointerMove, options);
641
+ body.addEventListener("pointermove", handlePointerMove, options);
623
642
  }
624
643
  });
625
644
  }
645
+ ownerDocumentCounts.forEach((_, ownerDocument) => {
646
+ const {
647
+ body
648
+ } = ownerDocument;
649
+ body.addEventListener("pointerup", handlePointerUp, options);
650
+ body.addEventListener("pointercancel", handlePointerUp, options);
651
+ });
652
+ } else {
653
+ ownerDocumentCounts.forEach((count, ownerDocument) => {
654
+ const {
655
+ body
656
+ } = ownerDocument;
657
+ if (count > 0) {
658
+ body.addEventListener("pointerdown", handlePointerDown, options);
659
+ body.addEventListener("pointermove", handlePointerMove, options);
660
+ }
661
+ });
626
662
  }
627
663
  }
628
664
  function updateResizeHandlerStates(action, event) {
@@ -647,8 +683,6 @@ function assert(expectedCondition, message) {
647
683
  }
648
684
  }
649
685
 
650
- const PRECISION = 10;
651
-
652
686
  function fuzzyCompareNumbers(actual, expected, fractionDigits = PRECISION) {
653
687
  if (actual.toFixed(fractionDigits) === expected.toFixed(fractionDigits)) {
654
688
  return 0;
@@ -953,12 +987,12 @@ function adjustLayoutByDelta({
953
987
  }
954
988
 
955
989
  function getResizeHandleElementsForGroup(groupId, scope = document) {
956
- return Array.from(scope.querySelectorAll(`[data-panel-resize-handle-id][data-panel-group-id="${groupId}"]`));
990
+ return Array.from(scope.querySelectorAll(`[${DATA_ATTRIBUTES.resizeHandleId}][data-panel-group-id="${groupId}"]`));
957
991
  }
958
992
 
959
993
  function getResizeHandleElementIndex(groupId, id, scope = document) {
960
994
  const handles = getResizeHandleElementsForGroup(groupId, scope);
961
- const index = handles.findIndex(handle => handle.getAttribute("data-panel-resize-handle-id") === id);
995
+ const index = handles.findIndex(handle => handle.getAttribute(DATA_ATTRIBUTES.resizeHandleId) === id);
962
996
  return index !== null && index !== void 0 ? index : null;
963
997
  }
964
998
 
@@ -983,7 +1017,7 @@ function getPanelGroupElement(id, rootElement = document) {
983
1017
  }
984
1018
 
985
1019
  function getResizeHandleElement(id, scope = document) {
986
- const element = scope.querySelector(`[data-panel-resize-handle-id="${id}"]`);
1020
+ const element = scope.querySelector(`[${DATA_ATTRIBUTES.resizeHandleId}="${id}"]`);
987
1021
  if (element) {
988
1022
  return element;
989
1023
  }
@@ -1028,7 +1062,7 @@ function useWindowSplitterPanelGroupBehavior({
1028
1062
  const handles = getResizeHandleElementsForGroup(groupId, panelGroupElement);
1029
1063
  assert(handles, `No resize handles found for group id "${groupId}"`);
1030
1064
  const cleanupFunctions = handles.map(handle => {
1031
- const handleId = handle.getAttribute("data-panel-resize-handle-id");
1065
+ const handleId = handle.getAttribute(DATA_ATTRIBUTES.resizeHandleId);
1032
1066
  assert(handleId, `Resize handle element has no handle id attribute`);
1033
1067
  const [idBefore, idAfter] = getResizeHandlePanelIds(groupId, handleId, panelDataArray, panelGroupElement);
1034
1068
  if (idBefore == null || idAfter == null) {
@@ -1106,7 +1140,7 @@ function calculateDragOffsetPercentage(event, dragHandleId, direction, initialDr
1106
1140
  const isHorizontal = direction === "horizontal";
1107
1141
  const handleElement = getResizeHandleElement(dragHandleId, panelGroupElement);
1108
1142
  assert(handleElement, `No resize handle element found for id "${dragHandleId}"`);
1109
- const groupId = handleElement.getAttribute("data-panel-group-id");
1143
+ const groupId = handleElement.getAttribute(DATA_ATTRIBUTES.groupId);
1110
1144
  assert(groupId, `Resize handle element has no group id attribute`);
1111
1145
  let {
1112
1146
  initialCursorPosition
@@ -1911,9 +1945,9 @@ function PanelGroupWithForwardedRef({
1911
1945
  ...styleFromProps
1912
1946
  },
1913
1947
  // CSS selectors
1914
- "data-panel-group": "",
1915
- "data-panel-group-direction": direction,
1916
- "data-panel-group-id": groupId
1948
+ [DATA_ATTRIBUTES.group]: "",
1949
+ [DATA_ATTRIBUTES.groupDirection]: direction,
1950
+ [DATA_ATTRIBUTES.groupId]: groupId
1917
1951
  }));
1918
1952
  }
1919
1953
  const PanelGroup = forwardRef((props, ref) => createElement(PanelGroupWithForwardedRef, {
@@ -1972,7 +2006,7 @@ function useWindowSplitterResizeHandlerBehavior({
1972
2006
  case "F6":
1973
2007
  {
1974
2008
  event.preventDefault();
1975
- const groupId = handleElement.getAttribute("data-panel-group-id");
2009
+ const groupId = handleElement.getAttribute(DATA_ATTRIBUTES.groupId);
1976
2010
  assert(groupId, `No group element found for id "${groupId}"`);
1977
2011
  const handles = getResizeHandleElementsForGroup(groupId, panelGroupElement);
1978
2012
  const index = getResizeHandleElementIndex(groupId, handleId, panelGroupElement);
@@ -2064,54 +2098,54 @@ function PanelResizeHandle({
2064
2098
  assert(element, "Element ref not attached");
2065
2099
  let didMove = false;
2066
2100
  const setResizeHandlerState = (action, isActive, event) => {
2067
- if (isActive) {
2068
- switch (action) {
2069
- case "down":
2070
- {
2071
- setState("drag");
2072
- didMove = false;
2073
- assert(event, 'Expected event to be defined for "down" action');
2074
- startDragging(resizeHandleId, event);
2075
- const {
2076
- onDragging,
2077
- onPointerDown
2078
- } = callbacksRef.current;
2079
- onDragging === null || onDragging === void 0 ? void 0 : onDragging(true);
2080
- onPointerDown === null || onPointerDown === void 0 ? void 0 : onPointerDown();
2081
- break;
2082
- }
2083
- case "move":
2084
- {
2085
- const {
2086
- state
2087
- } = committedValuesRef.current;
2088
- didMove = true;
2089
- if (state !== "drag") {
2090
- setState("hover");
2091
- }
2092
- assert(event, 'Expected event to be defined for "move" action');
2093
- resizeHandler(event);
2094
- break;
2095
- }
2096
- case "up":
2097
- {
2101
+ if (!isActive) {
2102
+ setState("inactive");
2103
+ return;
2104
+ }
2105
+ switch (action) {
2106
+ case "down":
2107
+ {
2108
+ setState("drag");
2109
+ didMove = false;
2110
+ assert(event, 'Expected event to be defined for "down" action');
2111
+ startDragging(resizeHandleId, event);
2112
+ const {
2113
+ onDragging,
2114
+ onPointerDown
2115
+ } = callbacksRef.current;
2116
+ onDragging === null || onDragging === void 0 ? void 0 : onDragging(true);
2117
+ onPointerDown === null || onPointerDown === void 0 ? void 0 : onPointerDown();
2118
+ break;
2119
+ }
2120
+ case "move":
2121
+ {
2122
+ const {
2123
+ state
2124
+ } = committedValuesRef.current;
2125
+ didMove = true;
2126
+ if (state !== "drag") {
2098
2127
  setState("hover");
2099
- stopDragging();
2100
- const {
2101
- onClick,
2102
- onDragging,
2103
- onPointerUp
2104
- } = callbacksRef.current;
2105
- onDragging === null || onDragging === void 0 ? void 0 : onDragging(false);
2106
- onPointerUp === null || onPointerUp === void 0 ? void 0 : onPointerUp();
2107
- if (!didMove) {
2108
- onClick === null || onClick === void 0 ? void 0 : onClick();
2109
- }
2110
- break;
2111
2128
  }
2112
- }
2113
- } else {
2114
- setState("inactive");
2129
+ assert(event, 'Expected event to be defined for "move" action');
2130
+ resizeHandler(event);
2131
+ break;
2132
+ }
2133
+ case "up":
2134
+ {
2135
+ setState("hover");
2136
+ stopDragging();
2137
+ const {
2138
+ onClick,
2139
+ onDragging,
2140
+ onPointerUp
2141
+ } = callbacksRef.current;
2142
+ onDragging === null || onDragging === void 0 ? void 0 : onDragging(false);
2143
+ onPointerUp === null || onPointerUp === void 0 ? void 0 : onPointerUp();
2144
+ if (!didMove) {
2145
+ onClick === null || onClick === void 0 ? void 0 : onClick();
2146
+ }
2147
+ break;
2148
+ }
2115
2149
  }
2116
2150
  };
2117
2151
  return registerResizeHandle(resizeHandleId, element, direction, {
@@ -2150,17 +2184,25 @@ function PanelResizeHandle({
2150
2184
  },
2151
2185
  tabIndex,
2152
2186
  // CSS selectors
2153
- "data-panel-group-direction": direction,
2154
- "data-panel-group-id": groupId,
2155
- "data-resize-handle": "",
2156
- "data-resize-handle-active": state === "drag" ? "pointer" : isFocused ? "keyboard" : undefined,
2157
- "data-resize-handle-state": state,
2158
- "data-panel-resize-handle-enabled": !disabled,
2159
- "data-panel-resize-handle-id": resizeHandleId
2187
+ [DATA_ATTRIBUTES.groupDirection]: direction,
2188
+ [DATA_ATTRIBUTES.groupId]: groupId,
2189
+ [DATA_ATTRIBUTES.resizeHandle]: "",
2190
+ [DATA_ATTRIBUTES.resizeHandleActive]: state === "drag" ? "pointer" : isFocused ? "keyboard" : undefined,
2191
+ [DATA_ATTRIBUTES.resizeHandleEnabled]: !disabled,
2192
+ [DATA_ATTRIBUTES.resizeHandleId]: resizeHandleId,
2193
+ [DATA_ATTRIBUTES.resizeHandleState]: state
2160
2194
  });
2161
2195
  }
2162
2196
  PanelResizeHandle.displayName = "PanelResizeHandle";
2163
2197
 
2198
+ function usePanelGroupContext() {
2199
+ const context = useContext(PanelGroupContext);
2200
+ return {
2201
+ direction: context === null || context === void 0 ? void 0 : context.direction,
2202
+ groupId: context === null || context === void 0 ? void 0 : context.groupId
2203
+ };
2204
+ }
2205
+
2164
2206
  function getPanelElement(id, scope = document) {
2165
2207
  const element = scope.querySelector(`[data-panel-id="${id}"]`);
2166
2208
  if (element) {
@@ -2190,4 +2232,4 @@ function getIntersectingRectangle(rectOne, rectTwo, strict) {
2190
2232
  };
2191
2233
  }
2192
2234
 
2193
- export { Panel, PanelGroup, PanelResizeHandle, assert, disableGlobalCursorStyles, enableGlobalCursorStyles, getIntersectingRectangle, getPanelElement, getPanelElementsForGroup, getPanelGroupElement, getResizeHandleElement, getResizeHandleElementIndex, getResizeHandleElementsForGroup, getResizeHandlePanelIds, intersects, setNonce };
2235
+ export { DATA_ATTRIBUTES, Panel, PanelGroup, PanelResizeHandle, assert, disableGlobalCursorStyles, enableGlobalCursorStyles, getIntersectingRectangle, getPanelElement, getPanelElementsForGroup, getPanelGroupElement, getResizeHandleElement, getResizeHandleElementIndex, getResizeHandleElementsForGroup, getResizeHandlePanelIds, intersects, setNonce, usePanelGroupContext };
package/package.json CHANGED
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "name": "react-resizable-panels",
3
- "version": "2.1.8",
3
+ "version": "3.0.0",
4
+ "type": "module",
4
5
  "description": "React components for resizable panel groups/layouts",
5
6
  "author": "Brian Vaughn <brian.david.vaughn@gmail.com>",
6
7
  "license": "MIT",
@@ -9,8 +10,6 @@
9
10
  "url": "git+https://github.com/bvaughn/react-resizable-panels.git"
10
11
  },
11
12
  "source": "src/index.ts",
12
- "main": "dist/react-resizable-panels.cjs.js",
13
- "module": "dist/react-resizable-panels.esm.js",
14
13
  "files": [
15
14
  "dist",
16
15
  "package.json",
@@ -19,38 +18,15 @@
19
18
  ],
20
19
  "exports": {
21
20
  ".": {
22
- "types": {
23
- "import": "./dist/react-resizable-panels.cjs.mjs",
24
- "default": "./dist/react-resizable-panels.cjs.js"
25
- },
21
+ "types": "./dist/react-resizable-panels.js",
26
22
  "development": {
27
- "browser": {
28
- "module": "./dist/react-resizable-panels.browser.development.esm.js",
29
- "import": "./dist/react-resizable-panels.browser.development.cjs.mjs",
30
- "default": "./dist/react-resizable-panels.browser.development.cjs.js"
31
- },
32
- "node": {
33
- "module": "./dist/react-resizable-panels.development.node.esm.js",
34
- "import": "./dist/react-resizable-panels.development.node.cjs.mjs",
35
- "default": "./dist/react-resizable-panels.development.node.cjs.js"
36
- },
37
- "module": "./dist/react-resizable-panels.development.esm.js",
38
- "import": "./dist/react-resizable-panels.development.cjs.mjs",
39
- "default": "./dist/react-resizable-panels.development.cjs.js"
40
- },
41
- "browser": {
42
- "module": "./dist/react-resizable-panels.browser.esm.js",
43
- "import": "./dist/react-resizable-panels.browser.cjs.mjs",
44
- "default": "./dist/react-resizable-panels.browser.cjs.js"
45
- },
46
- "node": {
47
- "module": "./dist/react-resizable-panels.node.esm.js",
48
- "import": "./dist/react-resizable-panels.node.cjs.mjs",
49
- "default": "./dist/react-resizable-panels.node.cjs.js"
23
+ "browser": "./dist/react-resizable-panels.browser.development.js",
24
+ "node": "./dist/react-resizable-panels.development.node.js",
25
+ "default": "./dist/react-resizable-panels.development.js"
50
26
  },
51
- "module": "./dist/react-resizable-panels.esm.js",
52
- "import": "./dist/react-resizable-panels.cjs.mjs",
53
- "default": "./dist/react-resizable-panels.cjs.js"
27
+ "browser": "./dist/react-resizable-panels.browser.js",
28
+ "node": "./dist/react-resizable-panels.node.js",
29
+ "default": "./dist/react-resizable-panels.js"
54
30
  },
55
31
  "./package.json": "./package.json"
56
32
  },
@@ -66,24 +42,17 @@
66
42
  }
67
43
  },
68
44
  "types": "dist/react-resizable-panels.cjs.d.ts",
69
- "scripts": {
70
- "clear": "pnpm run clear:builds & pnpm run clear:node_modules",
71
- "clear:builds": "rm -rf ./packages/*/dist",
72
- "clear:node_modules": "rm -rf ./node_modules",
73
- "lint": "eslint \"src/**/*.{ts,tsx}\"",
74
- "test": "jest --config=jest.config.js",
75
- "test:watch": "jest --config=jest.config.js --watch",
76
- "watch": "parcel watch --port=2345"
77
- },
78
45
  "devDependencies": {
79
46
  "@babel/plugin-proposal-nullish-coalescing-operator": "7.18.6",
80
47
  "@babel/plugin-proposal-optional-chaining": "7.21.0",
48
+ "@vitest/ui": "^3.1.2",
81
49
  "eslint": "^8.37.0",
82
50
  "eslint-plugin-react-hooks": "^4.6.0",
83
- "jest": "^29.7.0",
84
- "jest-environment-jsdom": "^29.7.0",
51
+ "jsdom": "^26.1.0",
85
52
  "react": "experimental",
86
- "react-dom": "experimental"
53
+ "react-dom": "experimental",
54
+ "save-dev": "0.0.1-security",
55
+ "vitest": "^3.1.2"
87
56
  },
88
57
  "peerDependencies": {
89
58
  "react": "^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc",
@@ -91,5 +60,14 @@
91
60
  },
92
61
  "browserslist": [
93
62
  "Chrome 79"
94
- ]
95
- }
63
+ ],
64
+ "scripts": {
65
+ "clear": "pnpm run clear:builds & pnpm run clear:node_modules",
66
+ "clear:builds": "rm -rf ./packages/*/dist",
67
+ "clear:node_modules": "rm -rf ./node_modules",
68
+ "lint": "eslint \"src/**/*.{ts,tsx}\"",
69
+ "test:browser": "vitest",
70
+ "test:node": "vitest -c vitest.node.config.ts",
71
+ "watch": "parcel watch --port=2345"
72
+ }
73
+ }