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.
- package/LICENSE +21 -0
- package/dist/declarations/src/Panel.d.ts +9 -9
- package/dist/declarations/src/PanelGroup.d.ts +10 -10
- package/dist/declarations/src/PanelResizeHandle.d.ts +1 -1
- package/dist/declarations/src/constants.d.ts +15 -0
- package/dist/declarations/src/hooks/usePanelGroupContext.d.ts +4 -0
- package/dist/declarations/src/index.d.ts +4 -2
- package/dist/{react-resizable-panels.browser.development.esm.js → react-resizable-panels.browser.development.js} +148 -106
- package/dist/{react-resizable-panels.browser.esm.js → react-resizable-panels.browser.js} +148 -106
- package/dist/react-resizable-panels.d.ts +2 -0
- package/dist/{react-resizable-panels.development.esm.js → react-resizable-panels.development.js} +148 -106
- package/dist/{react-resizable-panels.development.node.esm.js → react-resizable-panels.development.node.js} +148 -106
- package/dist/{react-resizable-panels.esm.js → react-resizable-panels.js} +148 -106
- package/dist/{react-resizable-panels.node.esm.js → react-resizable-panels.node.js} +148 -106
- package/package.json +25 -47
- package/dist/react-resizable-panels.browser.cjs.js +0 -2453
- package/dist/react-resizable-panels.browser.cjs.mjs +0 -18
- package/dist/react-resizable-panels.browser.development.cjs.js +0 -2559
- package/dist/react-resizable-panels.browser.development.cjs.mjs +0 -18
- package/dist/react-resizable-panels.cjs.d.mts +0 -2
- package/dist/react-resizable-panels.cjs.d.mts.map +0 -1
- package/dist/react-resizable-panels.cjs.d.ts +0 -2
- package/dist/react-resizable-panels.cjs.d.ts.map +0 -1
- package/dist/react-resizable-panels.cjs.js +0 -2455
- package/dist/react-resizable-panels.cjs.mjs +0 -18
- package/dist/react-resizable-panels.development.cjs.js +0 -2566
- package/dist/react-resizable-panels.development.cjs.mjs +0 -18
- package/dist/react-resizable-panels.development.node.cjs.js +0 -2332
- package/dist/react-resizable-panels.development.node.cjs.mjs +0 -18
- package/dist/react-resizable-panels.node.cjs.js +0 -2231
- package/dist/react-resizable-panels.node.cjs.mjs +0 -18
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2023 Brian Vaughn
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -51,20 +51,20 @@ export declare function PanelWithForwardedRef({ children, className: classNameFr
|
|
|
51
51
|
export declare namespace PanelWithForwardedRef {
|
|
52
52
|
var displayName: string;
|
|
53
53
|
}
|
|
54
|
-
export declare const Panel: import("react").ForwardRefExoticComponent<Omit<HTMLAttributes<HTMLObjectElement | HTMLElement |
|
|
55
|
-
className?: string
|
|
54
|
+
export declare const Panel: import("react").ForwardRefExoticComponent<Omit<HTMLAttributes<HTMLObjectElement | HTMLElement | HTMLAnchorElement | HTMLAreaElement | HTMLAudioElement | HTMLBaseElement | HTMLQuoteElement | HTMLBodyElement | HTMLBRElement | HTMLButtonElement | HTMLCanvasElement | HTMLTableCaptionElement | HTMLTableColElement | HTMLDataElement | HTMLDataListElement | HTMLModElement | HTMLDetailsElement | HTMLDialogElement | HTMLDivElement | HTMLDListElement | HTMLEmbedElement | HTMLFieldSetElement | HTMLFormElement | HTMLHeadingElement | HTMLHeadElement | HTMLHRElement | HTMLHtmlElement | HTMLIFrameElement | HTMLImageElement | HTMLInputElement | HTMLLabelElement | HTMLLegendElement | HTMLLIElement | HTMLLinkElement | HTMLMapElement | HTMLMenuElement | HTMLMetaElement | HTMLMeterElement | HTMLOListElement | HTMLOptGroupElement | HTMLOptionElement | HTMLOutputElement | HTMLParagraphElement | HTMLPictureElement | HTMLPreElement | HTMLProgressElement | HTMLScriptElement | HTMLSelectElement | HTMLSlotElement | HTMLSourceElement | HTMLSpanElement | HTMLStyleElement | HTMLTableElement | HTMLTableSectionElement | HTMLTableCellElement | HTMLTemplateElement | HTMLTextAreaElement | HTMLTimeElement | HTMLTitleElement | HTMLTableRowElement | HTMLTrackElement | HTMLUListElement | HTMLVideoElement>, "id" | "onResize"> & {
|
|
55
|
+
className?: string;
|
|
56
56
|
collapsedSize?: number | undefined;
|
|
57
57
|
collapsible?: boolean | undefined;
|
|
58
58
|
defaultSize?: number | undefined;
|
|
59
|
-
id?: string
|
|
59
|
+
id?: string;
|
|
60
60
|
maxSize?: number | undefined;
|
|
61
61
|
minSize?: number | undefined;
|
|
62
|
-
onCollapse?: PanelOnCollapse
|
|
63
|
-
onExpand?: PanelOnExpand
|
|
64
|
-
onResize?: PanelOnResize
|
|
65
|
-
order?: number
|
|
66
|
-
style?: object
|
|
62
|
+
onCollapse?: PanelOnCollapse;
|
|
63
|
+
onExpand?: PanelOnExpand;
|
|
64
|
+
onResize?: PanelOnResize;
|
|
65
|
+
order?: number;
|
|
66
|
+
style?: object;
|
|
67
67
|
tagName?: keyof HTMLElementTagNameMap | undefined;
|
|
68
68
|
} & {
|
|
69
|
-
children?: import("react").ReactNode;
|
|
69
|
+
children?: import("react").ReactNode | undefined;
|
|
70
70
|
} & import("react").RefAttributes<ImperativePanelHandle>>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Direction } from "./types.js";
|
|
2
1
|
import { CSSProperties, HTMLAttributes, PropsWithChildren } from "react";
|
|
2
|
+
import { Direction } from "./types.js";
|
|
3
3
|
export type ImperativePanelGroupHandle = {
|
|
4
4
|
getId: () => string;
|
|
5
5
|
getLayout: () => number[];
|
|
@@ -23,16 +23,16 @@ export type PanelGroupProps = Omit<HTMLAttributes<keyof HTMLElementTagNameMap>,
|
|
|
23
23
|
dir?: "auto" | "ltr" | "rtl" | undefined;
|
|
24
24
|
}>;
|
|
25
25
|
export declare const PanelGroup: import("react").ForwardRefExoticComponent<Omit<HTMLAttributes<keyof HTMLElementTagNameMap>, "id"> & {
|
|
26
|
-
autoSaveId?: string | null
|
|
27
|
-
className?: string
|
|
26
|
+
autoSaveId?: string | null;
|
|
27
|
+
className?: string;
|
|
28
28
|
direction: Direction;
|
|
29
|
-
id?: string | null
|
|
30
|
-
keyboardResizeBy?: number | null
|
|
31
|
-
onLayout?: PanelGroupOnLayout | null
|
|
32
|
-
storage?: PanelGroupStorage
|
|
33
|
-
style?: CSSProperties
|
|
34
|
-
tagName?: keyof HTMLElementTagNameMap
|
|
29
|
+
id?: string | null;
|
|
30
|
+
keyboardResizeBy?: number | null;
|
|
31
|
+
onLayout?: PanelGroupOnLayout | null;
|
|
32
|
+
storage?: PanelGroupStorage;
|
|
33
|
+
style?: CSSProperties;
|
|
34
|
+
tagName?: keyof HTMLElementTagNameMap;
|
|
35
35
|
dir?: "auto" | "ltr" | "rtl" | undefined;
|
|
36
36
|
} & {
|
|
37
|
-
children?: import("react").ReactNode;
|
|
37
|
+
children?: import("react").ReactNode | undefined;
|
|
38
38
|
} & import("react").RefAttributes<ImperativePanelGroupHandle>>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { PointerHitAreaMargins } from "./PanelResizeHandleRegistry.js";
|
|
2
1
|
import { CSSProperties, HTMLAttributes, PropsWithChildren, ReactElement } from "react";
|
|
2
|
+
import { PointerHitAreaMargins } from "./PanelResizeHandleRegistry.js";
|
|
3
3
|
export type PanelResizeHandleOnDragging = (isDragging: boolean) => void;
|
|
4
4
|
export type ResizeHandlerState = "drag" | "hover" | "inactive";
|
|
5
5
|
export type PanelResizeHandleProps = Omit<HTMLAttributes<keyof HTMLElementTagNameMap>, "id" | "onBlur" | "onClick" | "onFocus" | "onPointerDown" | "onPointerUp"> & PropsWithChildren<{
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare const DATA_ATTRIBUTES: {
|
|
2
|
+
readonly group: "data-panel-group";
|
|
3
|
+
readonly groupDirection: "data-panel-group-direction";
|
|
4
|
+
readonly groupId: "data-panel-group-id";
|
|
5
|
+
readonly panel: "data-panel";
|
|
6
|
+
readonly panelCollapsible: "data-panel-collapsible";
|
|
7
|
+
readonly panelId: "data-panel-id";
|
|
8
|
+
readonly panelSize: "data-panel-size";
|
|
9
|
+
readonly resizeHandle: "data-resize-handle";
|
|
10
|
+
readonly resizeHandleActive: "data-resize-handle-active";
|
|
11
|
+
readonly resizeHandleEnabled: "data-panel-resize-handle-enabled";
|
|
12
|
+
readonly resizeHandleId: "data-panel-resize-handle-id";
|
|
13
|
+
readonly resizeHandleState: "data-resize-handle-state";
|
|
14
|
+
};
|
|
15
|
+
export declare const PRECISION = 10;
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { Panel } from "./Panel.js";
|
|
2
2
|
import { PanelGroup } from "./PanelGroup.js";
|
|
3
3
|
import { PanelResizeHandle } from "./PanelResizeHandle.js";
|
|
4
|
+
import { DATA_ATTRIBUTES } from "./constants.js";
|
|
5
|
+
import { usePanelGroupContext } from "./hooks/usePanelGroupContext.js";
|
|
4
6
|
import { assert } from "./utils/assert.js";
|
|
5
7
|
import { setNonce } from "./utils/csp.js";
|
|
6
|
-
import {
|
|
8
|
+
import { disableGlobalCursorStyles, enableGlobalCursorStyles } from "./utils/cursor.js";
|
|
7
9
|
import { getPanelElement } from "./utils/dom/getPanelElement.js";
|
|
8
10
|
import { getPanelElementsForGroup } from "./utils/dom/getPanelElementsForGroup.js";
|
|
9
11
|
import { getPanelGroupElement } from "./utils/dom/getPanelGroupElement.js";
|
|
@@ -17,4 +19,4 @@ import type { ImperativePanelHandle, PanelOnCollapse, PanelOnExpand, PanelOnResi
|
|
|
17
19
|
import type { ImperativePanelGroupHandle, PanelGroupOnLayout, PanelGroupProps, PanelGroupStorage } from "./PanelGroup.js";
|
|
18
20
|
import type { PanelResizeHandleOnDragging, PanelResizeHandleProps } from "./PanelResizeHandle.js";
|
|
19
21
|
import type { PointerHitAreaMargins } from "./PanelResizeHandleRegistry.js";
|
|
20
|
-
export { ImperativePanelGroupHandle, ImperativePanelHandle, PanelGroupOnLayout, PanelGroupProps, PanelGroupStorage, PanelOnCollapse, PanelOnExpand, PanelOnResize, PanelProps, PanelResizeHandleOnDragging, PanelResizeHandleProps, PointerHitAreaMargins, Panel, PanelGroup, PanelResizeHandle, assert, getIntersectingRectangle, intersects, getPanelElement, getPanelElementsForGroup, getPanelGroupElement, getResizeHandleElement, getResizeHandleElementIndex, getResizeHandleElementsForGroup, getResizeHandlePanelIds, enableGlobalCursorStyles, disableGlobalCursorStyles, setNonce, };
|
|
22
|
+
export { ImperativePanelGroupHandle, ImperativePanelHandle, PanelGroupOnLayout, PanelGroupProps, PanelGroupStorage, PanelOnCollapse, PanelOnExpand, PanelOnResize, PanelProps, PanelResizeHandleOnDragging, PanelResizeHandleProps, PointerHitAreaMargins, Panel, PanelGroup, PanelResizeHandle, usePanelGroupContext, assert, getIntersectingRectangle, intersects, getPanelElement, getPanelElementsForGroup, getPanelGroupElement, getResizeHandleElement, getResizeHandleElementIndex, getResizeHandleElementsForGroup, getResizeHandlePanelIds, enableGlobalCursorStyles, disableGlobalCursorStyles, setNonce, DATA_ATTRIBUTES, };
|
|
@@ -6,6 +6,22 @@ import { createContext, useLayoutEffect, useRef, forwardRef, createElement, useC
|
|
|
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 useIsomorphicLayoutEffect = useLayoutEffect ;
|
|
10
26
|
|
|
11
27
|
const useId = React["useId".toString()];
|
|
@@ -148,11 +164,11 @@ function PanelWithForwardedRef({
|
|
|
148
164
|
...styleFromProps
|
|
149
165
|
},
|
|
150
166
|
// CSS selectors
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
167
|
+
[DATA_ATTRIBUTES.groupId]: groupId,
|
|
168
|
+
[DATA_ATTRIBUTES.panel]: "",
|
|
169
|
+
[DATA_ATTRIBUTES.panelCollapsible]: collapsible || undefined,
|
|
170
|
+
[DATA_ATTRIBUTES.panelId]: panelId,
|
|
171
|
+
[DATA_ATTRIBUTES.panelSize]: parseFloat("" + style.flexGrow).toFixed(1)
|
|
156
172
|
});
|
|
157
173
|
}
|
|
158
174
|
const Panel = forwardRef((props, ref) => createElement(PanelWithForwardedRef, {
|
|
@@ -172,6 +188,7 @@ function setNonce(value) {
|
|
|
172
188
|
|
|
173
189
|
let currentCursorStyle = null;
|
|
174
190
|
let enabled = true;
|
|
191
|
+
let prevRuleIndex = -1;
|
|
175
192
|
let styleElement = null;
|
|
176
193
|
function disableGlobalCursorStyles() {
|
|
177
194
|
enabled = false;
|
|
@@ -221,9 +238,11 @@ function resetGlobalCursorStyle() {
|
|
|
221
238
|
document.head.removeChild(styleElement);
|
|
222
239
|
currentCursorStyle = null;
|
|
223
240
|
styleElement = null;
|
|
241
|
+
prevRuleIndex = -1;
|
|
224
242
|
}
|
|
225
243
|
}
|
|
226
244
|
function setGlobalCursorStyle(state, constraintFlags) {
|
|
245
|
+
var _styleElement$sheet$i, _styleElement$sheet2;
|
|
227
246
|
if (!enabled) {
|
|
228
247
|
return;
|
|
229
248
|
}
|
|
@@ -240,7 +259,11 @@ function setGlobalCursorStyle(state, constraintFlags) {
|
|
|
240
259
|
}
|
|
241
260
|
document.head.appendChild(styleElement);
|
|
242
261
|
}
|
|
243
|
-
|
|
262
|
+
if (prevRuleIndex >= 0) {
|
|
263
|
+
var _styleElement$sheet;
|
|
264
|
+
(_styleElement$sheet = styleElement.sheet) === null || _styleElement$sheet === void 0 ? void 0 : _styleElement$sheet.removeRule(prevRuleIndex);
|
|
265
|
+
}
|
|
266
|
+
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;
|
|
244
267
|
}
|
|
245
268
|
|
|
246
269
|
function isKeyDown(event) {
|
|
@@ -471,7 +494,9 @@ function handlePointerDown(event) {
|
|
|
471
494
|
if (intersectingHandles.length > 0) {
|
|
472
495
|
updateResizeHandlerStates("down", event);
|
|
473
496
|
event.preventDefault();
|
|
474
|
-
|
|
497
|
+
if (!isWithinResizeHandle(target)) {
|
|
498
|
+
event.stopImmediatePropagation();
|
|
499
|
+
}
|
|
475
500
|
}
|
|
476
501
|
}
|
|
477
502
|
function handlePointerMove(event) {
|
|
@@ -520,6 +545,9 @@ function handlePointerUp(event) {
|
|
|
520
545
|
isPointerDown = false;
|
|
521
546
|
if (intersectingHandles.length > 0) {
|
|
522
547
|
event.preventDefault();
|
|
548
|
+
if (!isWithinResizeHandle(target)) {
|
|
549
|
+
event.stopImmediatePropagation();
|
|
550
|
+
}
|
|
523
551
|
}
|
|
524
552
|
updateResizeHandlerStates("up", event);
|
|
525
553
|
recalculateIntersectingHandles({
|
|
@@ -530,6 +558,16 @@ function handlePointerUp(event) {
|
|
|
530
558
|
updateCursor();
|
|
531
559
|
updateListeners();
|
|
532
560
|
}
|
|
561
|
+
function isWithinResizeHandle(element) {
|
|
562
|
+
let currentElement = element;
|
|
563
|
+
while (currentElement) {
|
|
564
|
+
if (currentElement.hasAttribute(DATA_ATTRIBUTES.resizeHandle)) {
|
|
565
|
+
return true;
|
|
566
|
+
}
|
|
567
|
+
currentElement = currentElement.parentElement;
|
|
568
|
+
}
|
|
569
|
+
return false;
|
|
570
|
+
}
|
|
533
571
|
function recalculateIntersectingHandles({
|
|
534
572
|
target,
|
|
535
573
|
x,
|
|
@@ -621,49 +659,47 @@ function updateCursor() {
|
|
|
621
659
|
resetGlobalCursorStyle();
|
|
622
660
|
}
|
|
623
661
|
}
|
|
662
|
+
let listenersAbortController = new AbortController();
|
|
624
663
|
function updateListeners() {
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
window.removeEventListener("pointerup", handlePointerUp);
|
|
637
|
-
window.removeEventListener("pointercancel", handlePointerUp);
|
|
638
|
-
if (registeredResizeHandlers.size > 0) {
|
|
639
|
-
if (isPointerDown) {
|
|
640
|
-
if (intersectingHandles.length > 0) {
|
|
641
|
-
ownerDocumentCounts.forEach((count, ownerDocument) => {
|
|
642
|
-
const {
|
|
643
|
-
body
|
|
644
|
-
} = ownerDocument;
|
|
645
|
-
if (count > 0) {
|
|
646
|
-
body.addEventListener("contextmenu", handlePointerUp);
|
|
647
|
-
body.addEventListener("pointerleave", handlePointerMove);
|
|
648
|
-
body.addEventListener("pointermove", handlePointerMove);
|
|
649
|
-
}
|
|
650
|
-
});
|
|
651
|
-
}
|
|
652
|
-
window.addEventListener("pointerup", handlePointerUp);
|
|
653
|
-
window.addEventListener("pointercancel", handlePointerUp);
|
|
654
|
-
} else {
|
|
664
|
+
listenersAbortController.abort();
|
|
665
|
+
listenersAbortController = new AbortController();
|
|
666
|
+
const options = {
|
|
667
|
+
capture: true,
|
|
668
|
+
signal: listenersAbortController.signal
|
|
669
|
+
};
|
|
670
|
+
if (!registeredResizeHandlers.size) {
|
|
671
|
+
return;
|
|
672
|
+
}
|
|
673
|
+
if (isPointerDown) {
|
|
674
|
+
if (intersectingHandles.length > 0) {
|
|
655
675
|
ownerDocumentCounts.forEach((count, ownerDocument) => {
|
|
656
676
|
const {
|
|
657
677
|
body
|
|
658
678
|
} = ownerDocument;
|
|
659
679
|
if (count > 0) {
|
|
660
|
-
body.addEventListener("
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
body.addEventListener("pointermove", handlePointerMove);
|
|
680
|
+
body.addEventListener("contextmenu", handlePointerUp, options);
|
|
681
|
+
body.addEventListener("pointerleave", handlePointerMove, options);
|
|
682
|
+
body.addEventListener("pointermove", handlePointerMove, options);
|
|
664
683
|
}
|
|
665
684
|
});
|
|
666
685
|
}
|
|
686
|
+
ownerDocumentCounts.forEach((_, ownerDocument) => {
|
|
687
|
+
const {
|
|
688
|
+
body
|
|
689
|
+
} = ownerDocument;
|
|
690
|
+
body.addEventListener("pointerup", handlePointerUp, options);
|
|
691
|
+
body.addEventListener("pointercancel", handlePointerUp, options);
|
|
692
|
+
});
|
|
693
|
+
} else {
|
|
694
|
+
ownerDocumentCounts.forEach((count, ownerDocument) => {
|
|
695
|
+
const {
|
|
696
|
+
body
|
|
697
|
+
} = ownerDocument;
|
|
698
|
+
if (count > 0) {
|
|
699
|
+
body.addEventListener("pointerdown", handlePointerDown, options);
|
|
700
|
+
body.addEventListener("pointermove", handlePointerMove, options);
|
|
701
|
+
}
|
|
702
|
+
});
|
|
667
703
|
}
|
|
668
704
|
}
|
|
669
705
|
function updateResizeHandlerStates(action, event) {
|
|
@@ -688,8 +724,6 @@ function assert(expectedCondition, message) {
|
|
|
688
724
|
}
|
|
689
725
|
}
|
|
690
726
|
|
|
691
|
-
const PRECISION = 10;
|
|
692
|
-
|
|
693
727
|
function fuzzyCompareNumbers(actual, expected, fractionDigits = PRECISION) {
|
|
694
728
|
if (actual.toFixed(fractionDigits) === expected.toFixed(fractionDigits)) {
|
|
695
729
|
return 0;
|
|
@@ -1033,12 +1067,12 @@ function calculateAriaValues({
|
|
|
1033
1067
|
}
|
|
1034
1068
|
|
|
1035
1069
|
function getResizeHandleElementsForGroup(groupId, scope = document) {
|
|
1036
|
-
return Array.from(scope.querySelectorAll(`[
|
|
1070
|
+
return Array.from(scope.querySelectorAll(`[${DATA_ATTRIBUTES.resizeHandleId}][data-panel-group-id="${groupId}"]`));
|
|
1037
1071
|
}
|
|
1038
1072
|
|
|
1039
1073
|
function getResizeHandleElementIndex(groupId, id, scope = document) {
|
|
1040
1074
|
const handles = getResizeHandleElementsForGroup(groupId, scope);
|
|
1041
|
-
const index = handles.findIndex(handle => handle.getAttribute(
|
|
1075
|
+
const index = handles.findIndex(handle => handle.getAttribute(DATA_ATTRIBUTES.resizeHandleId) === id);
|
|
1042
1076
|
return index !== null && index !== void 0 ? index : null;
|
|
1043
1077
|
}
|
|
1044
1078
|
|
|
@@ -1063,7 +1097,7 @@ function getPanelGroupElement(id, rootElement = document) {
|
|
|
1063
1097
|
}
|
|
1064
1098
|
|
|
1065
1099
|
function getResizeHandleElement(id, scope = document) {
|
|
1066
|
-
const element = scope.querySelector(`[
|
|
1100
|
+
const element = scope.querySelector(`[${DATA_ATTRIBUTES.resizeHandleId}="${id}"]`);
|
|
1067
1101
|
if (element) {
|
|
1068
1102
|
return element;
|
|
1069
1103
|
}
|
|
@@ -1152,7 +1186,7 @@ function useWindowSplitterPanelGroupBehavior({
|
|
|
1152
1186
|
const handles = getResizeHandleElementsForGroup(groupId, panelGroupElement);
|
|
1153
1187
|
assert(handles, `No resize handles found for group id "${groupId}"`);
|
|
1154
1188
|
const cleanupFunctions = handles.map(handle => {
|
|
1155
|
-
const handleId = handle.getAttribute(
|
|
1189
|
+
const handleId = handle.getAttribute(DATA_ATTRIBUTES.resizeHandleId);
|
|
1156
1190
|
assert(handleId, `Resize handle element has no handle id attribute`);
|
|
1157
1191
|
const [idBefore, idAfter] = getResizeHandlePanelIds(groupId, handleId, panelDataArray, panelGroupElement);
|
|
1158
1192
|
if (idBefore == null || idAfter == null) {
|
|
@@ -1230,7 +1264,7 @@ function calculateDragOffsetPercentage(event, dragHandleId, direction, initialDr
|
|
|
1230
1264
|
const isHorizontal = direction === "horizontal";
|
|
1231
1265
|
const handleElement = getResizeHandleElement(dragHandleId, panelGroupElement);
|
|
1232
1266
|
assert(handleElement, `No resize handle element found for id "${dragHandleId}"`);
|
|
1233
|
-
const groupId = handleElement.getAttribute(
|
|
1267
|
+
const groupId = handleElement.getAttribute(DATA_ATTRIBUTES.groupId);
|
|
1234
1268
|
assert(groupId, `Resize handle element has no group id attribute`);
|
|
1235
1269
|
let {
|
|
1236
1270
|
initialCursorPosition
|
|
@@ -2236,9 +2270,9 @@ function PanelGroupWithForwardedRef({
|
|
|
2236
2270
|
...styleFromProps
|
|
2237
2271
|
},
|
|
2238
2272
|
// CSS selectors
|
|
2239
|
-
|
|
2240
|
-
|
|
2241
|
-
|
|
2273
|
+
[DATA_ATTRIBUTES.group]: "",
|
|
2274
|
+
[DATA_ATTRIBUTES.groupDirection]: direction,
|
|
2275
|
+
[DATA_ATTRIBUTES.groupId]: groupId
|
|
2242
2276
|
}));
|
|
2243
2277
|
}
|
|
2244
2278
|
const PanelGroup = forwardRef((props, ref) => createElement(PanelGroupWithForwardedRef, {
|
|
@@ -2297,7 +2331,7 @@ function useWindowSplitterResizeHandlerBehavior({
|
|
|
2297
2331
|
case "F6":
|
|
2298
2332
|
{
|
|
2299
2333
|
event.preventDefault();
|
|
2300
|
-
const groupId = handleElement.getAttribute(
|
|
2334
|
+
const groupId = handleElement.getAttribute(DATA_ATTRIBUTES.groupId);
|
|
2301
2335
|
assert(groupId, `No group element found for id "${groupId}"`);
|
|
2302
2336
|
const handles = getResizeHandleElementsForGroup(groupId, panelGroupElement);
|
|
2303
2337
|
const index = getResizeHandleElementIndex(groupId, handleId, panelGroupElement);
|
|
@@ -2392,54 +2426,54 @@ function PanelResizeHandle({
|
|
|
2392
2426
|
assert(element, "Element ref not attached");
|
|
2393
2427
|
let didMove = false;
|
|
2394
2428
|
const setResizeHandlerState = (action, isActive, event) => {
|
|
2395
|
-
if (isActive) {
|
|
2396
|
-
|
|
2397
|
-
|
|
2398
|
-
|
|
2399
|
-
|
|
2400
|
-
|
|
2401
|
-
|
|
2402
|
-
|
|
2403
|
-
|
|
2404
|
-
|
|
2405
|
-
|
|
2406
|
-
|
|
2407
|
-
onDragging
|
|
2408
|
-
onPointerDown
|
|
2409
|
-
|
|
2410
|
-
|
|
2411
|
-
|
|
2412
|
-
|
|
2413
|
-
|
|
2414
|
-
|
|
2415
|
-
|
|
2416
|
-
|
|
2417
|
-
|
|
2418
|
-
|
|
2419
|
-
|
|
2420
|
-
|
|
2421
|
-
resizeHandler(event);
|
|
2422
|
-
break;
|
|
2423
|
-
}
|
|
2424
|
-
case "up":
|
|
2425
|
-
{
|
|
2429
|
+
if (!isActive) {
|
|
2430
|
+
setState("inactive");
|
|
2431
|
+
return;
|
|
2432
|
+
}
|
|
2433
|
+
switch (action) {
|
|
2434
|
+
case "down":
|
|
2435
|
+
{
|
|
2436
|
+
setState("drag");
|
|
2437
|
+
didMove = false;
|
|
2438
|
+
assert(event, 'Expected event to be defined for "down" action');
|
|
2439
|
+
startDragging(resizeHandleId, event);
|
|
2440
|
+
const {
|
|
2441
|
+
onDragging,
|
|
2442
|
+
onPointerDown
|
|
2443
|
+
} = callbacksRef.current;
|
|
2444
|
+
onDragging === null || onDragging === void 0 ? void 0 : onDragging(true);
|
|
2445
|
+
onPointerDown === null || onPointerDown === void 0 ? void 0 : onPointerDown();
|
|
2446
|
+
break;
|
|
2447
|
+
}
|
|
2448
|
+
case "move":
|
|
2449
|
+
{
|
|
2450
|
+
const {
|
|
2451
|
+
state
|
|
2452
|
+
} = committedValuesRef.current;
|
|
2453
|
+
didMove = true;
|
|
2454
|
+
if (state !== "drag") {
|
|
2426
2455
|
setState("hover");
|
|
2427
|
-
stopDragging();
|
|
2428
|
-
const {
|
|
2429
|
-
onClick,
|
|
2430
|
-
onDragging,
|
|
2431
|
-
onPointerUp
|
|
2432
|
-
} = callbacksRef.current;
|
|
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();
|
|
2437
|
-
}
|
|
2438
|
-
break;
|
|
2439
2456
|
}
|
|
2440
|
-
|
|
2441
|
-
|
|
2442
|
-
|
|
2457
|
+
assert(event, 'Expected event to be defined for "move" action');
|
|
2458
|
+
resizeHandler(event);
|
|
2459
|
+
break;
|
|
2460
|
+
}
|
|
2461
|
+
case "up":
|
|
2462
|
+
{
|
|
2463
|
+
setState("hover");
|
|
2464
|
+
stopDragging();
|
|
2465
|
+
const {
|
|
2466
|
+
onClick,
|
|
2467
|
+
onDragging,
|
|
2468
|
+
onPointerUp
|
|
2469
|
+
} = callbacksRef.current;
|
|
2470
|
+
onDragging === null || onDragging === void 0 ? void 0 : onDragging(false);
|
|
2471
|
+
onPointerUp === null || onPointerUp === void 0 ? void 0 : onPointerUp();
|
|
2472
|
+
if (!didMove) {
|
|
2473
|
+
onClick === null || onClick === void 0 ? void 0 : onClick();
|
|
2474
|
+
}
|
|
2475
|
+
break;
|
|
2476
|
+
}
|
|
2443
2477
|
}
|
|
2444
2478
|
};
|
|
2445
2479
|
return registerResizeHandle(resizeHandleId, element, direction, {
|
|
@@ -2478,17 +2512,25 @@ function PanelResizeHandle({
|
|
|
2478
2512
|
},
|
|
2479
2513
|
tabIndex,
|
|
2480
2514
|
// CSS selectors
|
|
2481
|
-
|
|
2482
|
-
|
|
2483
|
-
|
|
2484
|
-
|
|
2485
|
-
|
|
2486
|
-
|
|
2487
|
-
|
|
2515
|
+
[DATA_ATTRIBUTES.groupDirection]: direction,
|
|
2516
|
+
[DATA_ATTRIBUTES.groupId]: groupId,
|
|
2517
|
+
[DATA_ATTRIBUTES.resizeHandle]: "",
|
|
2518
|
+
[DATA_ATTRIBUTES.resizeHandleActive]: state === "drag" ? "pointer" : isFocused ? "keyboard" : undefined,
|
|
2519
|
+
[DATA_ATTRIBUTES.resizeHandleEnabled]: !disabled,
|
|
2520
|
+
[DATA_ATTRIBUTES.resizeHandleId]: resizeHandleId,
|
|
2521
|
+
[DATA_ATTRIBUTES.resizeHandleState]: state
|
|
2488
2522
|
});
|
|
2489
2523
|
}
|
|
2490
2524
|
PanelResizeHandle.displayName = "PanelResizeHandle";
|
|
2491
2525
|
|
|
2526
|
+
function usePanelGroupContext() {
|
|
2527
|
+
const context = useContext(PanelGroupContext);
|
|
2528
|
+
return {
|
|
2529
|
+
direction: context === null || context === void 0 ? void 0 : context.direction,
|
|
2530
|
+
groupId: context === null || context === void 0 ? void 0 : context.groupId
|
|
2531
|
+
};
|
|
2532
|
+
}
|
|
2533
|
+
|
|
2492
2534
|
function getPanelElement(id, scope = document) {
|
|
2493
2535
|
const element = scope.querySelector(`[data-panel-id="${id}"]`);
|
|
2494
2536
|
if (element) {
|
|
@@ -2518,4 +2560,4 @@ function getIntersectingRectangle(rectOne, rectTwo, strict) {
|
|
|
2518
2560
|
};
|
|
2519
2561
|
}
|
|
2520
2562
|
|
|
2521
|
-
export { Panel, PanelGroup, PanelResizeHandle, assert, disableGlobalCursorStyles, enableGlobalCursorStyles, getIntersectingRectangle, getPanelElement, getPanelElementsForGroup, getPanelGroupElement, getResizeHandleElement, getResizeHandleElementIndex, getResizeHandleElementsForGroup, getResizeHandlePanelIds, intersects, setNonce };
|
|
2563
|
+
export { DATA_ATTRIBUTES, Panel, PanelGroup, PanelResizeHandle, assert, disableGlobalCursorStyles, enableGlobalCursorStyles, getIntersectingRectangle, getPanelElement, getPanelElementsForGroup, getPanelGroupElement, getResizeHandleElement, getResizeHandleElementIndex, getResizeHandleElementsForGroup, getResizeHandlePanelIds, intersects, setNonce, usePanelGroupContext };
|