@window-splitter/react 0.8.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/.storybook/main.ts +17 -0
- package/.storybook/preview.ts +14 -0
- package/.tshy/build.json +8 -0
- package/.tshy/commonjs.json +19 -0
- package/.tshy/esm.json +18 -0
- package/.turbo/turbo-build.log +5 -0
- package/.turbo/turbo-lint.log +5 -0
- package/CHANGELOG.md +606 -0
- package/README.md +53 -0
- package/dist/commonjs/ReactWindowSplitter.d.ts +19 -0
- package/dist/commonjs/ReactWindowSplitter.d.ts.map +1 -0
- package/dist/commonjs/ReactWindowSplitter.js +558 -0
- package/dist/commonjs/ReactWindowSplitter.js.map +1 -0
- package/dist/commonjs/ReactWindowSplitter.stories.d.ts +47 -0
- package/dist/commonjs/ReactWindowSplitter.stories.d.ts.map +1 -0
- package/dist/commonjs/ReactWindowSplitter.stories.js +330 -0
- package/dist/commonjs/ReactWindowSplitter.stories.js.map +1 -0
- package/dist/commonjs/ReactWindowSplitter.test.d.ts +2 -0
- package/dist/commonjs/ReactWindowSplitter.test.d.ts.map +1 -0
- package/dist/commonjs/ReactWindowSplitter.test.js +219 -0
- package/dist/commonjs/ReactWindowSplitter.test.js.map +1 -0
- package/dist/commonjs/bundle.size.d.ts +2 -0
- package/dist/commonjs/bundle.size.d.ts.map +1 -0
- package/dist/commonjs/bundle.size.js +29 -0
- package/dist/commonjs/bundle.size.js.map +1 -0
- package/dist/commonjs/index.d.ts +3 -0
- package/dist/commonjs/index.d.ts.map +1 -0
- package/dist/commonjs/index.js +18 -0
- package/dist/commonjs/index.js.map +1 -0
- package/dist/commonjs/package.json +3 -0
- package/dist/commonjs/useIndexedChildren.d.ts +8 -0
- package/dist/commonjs/useIndexedChildren.d.ts.map +1 -0
- package/dist/commonjs/useIndexedChildren.js +81 -0
- package/dist/commonjs/useIndexedChildren.js.map +1 -0
- package/dist/commonjs/useMove.d.ts +8 -0
- package/dist/commonjs/useMove.d.ts.map +1 -0
- package/dist/commonjs/useMove.js +19 -0
- package/dist/commonjs/useMove.js.map +1 -0
- package/dist/esm/ReactWindowSplitter.d.ts +19 -0
- package/dist/esm/ReactWindowSplitter.d.ts.map +1 -0
- package/dist/esm/ReactWindowSplitter.js +532 -0
- package/dist/esm/ReactWindowSplitter.js.map +1 -0
- package/dist/esm/ReactWindowSplitter.stories.d.ts +47 -0
- package/dist/esm/ReactWindowSplitter.stories.d.ts.map +1 -0
- package/dist/esm/ReactWindowSplitter.stories.js +286 -0
- package/dist/esm/ReactWindowSplitter.stories.js.map +1 -0
- package/dist/esm/ReactWindowSplitter.test.d.ts +2 -0
- package/dist/esm/ReactWindowSplitter.test.d.ts.map +1 -0
- package/dist/esm/ReactWindowSplitter.test.js +191 -0
- package/dist/esm/ReactWindowSplitter.test.js.map +1 -0
- package/dist/esm/bundle.size.d.ts +2 -0
- package/dist/esm/bundle.size.d.ts.map +1 -0
- package/dist/esm/bundle.size.js +4 -0
- package/dist/esm/bundle.size.js.map +1 -0
- package/dist/esm/index.d.ts +3 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/useIndexedChildren.d.ts +8 -0
- package/dist/esm/useIndexedChildren.d.ts.map +1 -0
- package/dist/esm/useIndexedChildren.js +54 -0
- package/dist/esm/useIndexedChildren.js.map +1 -0
- package/dist/esm/useMove.d.ts +8 -0
- package/dist/esm/useMove.d.ts.map +1 -0
- package/dist/esm/useMove.js +16 -0
- package/dist/esm/useMove.js.map +1 -0
- package/eslint.config.js +3 -0
- package/package.json +108 -0
- package/rsbuild.config.js +25 -0
- package/src/ReactWindowSplitter.stories.tsx +705 -0
- package/src/ReactWindowSplitter.test.tsx +384 -0
- package/src/ReactWindowSplitter.tsx +884 -0
- package/src/__snapshots__/ReactWindowSplitter.test.tsx.snap +58 -0
- package/src/bundle.size.ts +4 -0
- package/src/index.ts +2 -0
- package/src/useIndexedChildren.tsx +79 -0
- package/src/useMove.ts +22 -0
- package/tsconfig.json +6 -0
- package/vitest.config.ts +20 -0
- package/vitest.setup.ts +7 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { PanelGroupHandle, PanelHandle } from "@window-splitter/interface";
|
|
3
|
+
declare const _default: {
|
|
4
|
+
title: string;
|
|
5
|
+
};
|
|
6
|
+
export default _default;
|
|
7
|
+
export declare function Simple({ handle }: {
|
|
8
|
+
handle?: React.Ref<PanelGroupHandle>;
|
|
9
|
+
}): React.JSX.Element;
|
|
10
|
+
export declare function Autosave({ handle }: {
|
|
11
|
+
handle?: React.Ref<PanelGroupHandle>;
|
|
12
|
+
}): React.JSX.Element;
|
|
13
|
+
export declare function AutosaveCollapsible({ handle, onCollapseChange, }: {
|
|
14
|
+
handle?: React.Ref<PanelGroupHandle>;
|
|
15
|
+
onCollapseChange?: (c: boolean) => void;
|
|
16
|
+
}): React.JSX.Element;
|
|
17
|
+
export declare function DynamicConstraints({ handle, }: {
|
|
18
|
+
handle?: React.Ref<PanelGroupHandle>;
|
|
19
|
+
}): React.JSX.Element;
|
|
20
|
+
export declare function SimpleMin(): React.JSX.Element;
|
|
21
|
+
export declare function SimpleMinMax(): React.JSX.Element;
|
|
22
|
+
export declare function SimpleConstraints(): React.JSX.Element;
|
|
23
|
+
export declare function HorizontalLayout(): React.JSX.Element;
|
|
24
|
+
export declare function VerticalLayout({ handle, }: {
|
|
25
|
+
handle?: React.Ref<PanelGroupHandle>;
|
|
26
|
+
}): React.JSX.Element;
|
|
27
|
+
export declare function VerticalLayout2({ handle, }: {
|
|
28
|
+
handle?: React.Ref<PanelGroupHandle>;
|
|
29
|
+
}): React.JSX.Element;
|
|
30
|
+
export declare function NestedGroups(): React.JSX.Element;
|
|
31
|
+
export declare function WithOverflow(): React.JSX.Element;
|
|
32
|
+
export declare function Collapsible({ leftPanelHandle, rightPanelHandle, handle, }: {
|
|
33
|
+
leftPanelHandle?: React.Ref<PanelHandle>;
|
|
34
|
+
handle?: React.Ref<PanelGroupHandle>;
|
|
35
|
+
rightPanelHandle?: React.Ref<PanelHandle>;
|
|
36
|
+
}): React.JSX.Element;
|
|
37
|
+
export declare function CustomCollapseAnimation(): React.JSX.Element;
|
|
38
|
+
export declare function ImperativePanel(): React.JSX.Element;
|
|
39
|
+
export declare function ConditionalPanel({ handle, }: {
|
|
40
|
+
handle?: React.Ref<PanelGroupHandle>;
|
|
41
|
+
}): React.JSX.Element;
|
|
42
|
+
export declare function ConditionalPanelComplex(): React.JSX.Element;
|
|
43
|
+
export declare function WithDefaultWidth(): React.JSX.Element;
|
|
44
|
+
export declare function StaticAtRest({ handle, }: {
|
|
45
|
+
handle?: React.Ref<PanelGroupHandle>;
|
|
46
|
+
}): React.JSX.Element;
|
|
47
|
+
//# sourceMappingURL=ReactWindowSplitter.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReactWindowSplitter.stories.d.ts","sourceRoot":"","sources":["../../src/ReactWindowSplitter.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkB,MAAM,OAAO,CAAC;AAUvC,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;;;;AAE3E,wBAEE;AA+CF,wBAAgB,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;CAAE,qBAQ1E;AAED,wBAAgB,QAAQ,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;CAAE,qBAQ5E;AAED,wBAAgB,mBAAmB,CAAC,EAClC,MAAM,EACN,gBAA8B,GAC/B,EAAE;IACD,MAAM,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IACrC,gBAAgB,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;CACzC,qBAgBA;AAED,wBAAgB,kBAAkB,CAAC,EACjC,MAAM,GACP,EAAE;IACD,MAAM,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;CACtC,qBA6BA;AAED,wBAAgB,SAAS,sBAgBxB;AAED,wBAAgB,YAAY,sBAgB3B;AAED,wBAAgB,iBAAiB,sBAYhC;AAED,wBAAgB,gBAAgB,sBAc/B;AAED,wBAAgB,cAAc,CAAC,EAC7B,MAAM,GACP,EAAE;IACD,MAAM,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;CACtC,qBAkBA;AAED,wBAAgB,eAAe,CAAC,EAC9B,MAAM,GACP,EAAE;IACD,MAAM,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;CACtC,qBAqBA;AAED,wBAAgB,YAAY,sBA6B3B;AAED,wBAAgB,YAAY,sBAoG3B;AAED,wBAAgB,WAAW,CAAC,EAC1B,eAAe,EACf,gBAAgB,EAChB,MAAM,GACP,EAAE;IACD,eAAe,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACzC,MAAM,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IACrC,gBAAgB,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;CAC3C,qBAwCA;AAED,wBAAgB,uBAAuB,sBAuCtC;AAED,wBAAgB,eAAe,sBA2G9B;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,MAAM,GACP,EAAE;IACD,MAAM,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;CACtC,qBA8BA;AAED,wBAAgB,uBAAuB,sBA4CtC;AAED,wBAAgB,gBAAgB,sBAc/B;AAED,wBAAgB,YAAY,CAAC,EAC3B,MAAM,GACP,EAAE;IACD,MAAM,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;CACtC,qBAYA"}
|
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
import React, { useMemo } from "react";
|
|
2
|
+
import { spring } from "framer-motion";
|
|
3
|
+
import { PanelGroup, Panel, PanelResizer, } from "./ReactWindowSplitter.js";
|
|
4
|
+
export default {
|
|
5
|
+
title: "Components/React",
|
|
6
|
+
};
|
|
7
|
+
function StyledPanelGroup(props) {
|
|
8
|
+
return (React.createElement(PanelGroup, { ...props, style: {
|
|
9
|
+
border: "1px solid rgba(0, 0, 0, 0.3)",
|
|
10
|
+
background: "rgba(0, 0, 0, 0.1)",
|
|
11
|
+
borderRadius: 12,
|
|
12
|
+
boxSizing: "border-box",
|
|
13
|
+
...props.style,
|
|
14
|
+
} }));
|
|
15
|
+
}
|
|
16
|
+
function StyledPanel({ children, ...props }) {
|
|
17
|
+
return (React.createElement(Panel, { style: {
|
|
18
|
+
overflow: "hidden",
|
|
19
|
+
}, ...props },
|
|
20
|
+
React.createElement("div", { style: {
|
|
21
|
+
height: "100%",
|
|
22
|
+
width: "100%",
|
|
23
|
+
padding: 20,
|
|
24
|
+
display: "flex",
|
|
25
|
+
alignItems: "center",
|
|
26
|
+
justifyContent: "center",
|
|
27
|
+
overflow: "hidden",
|
|
28
|
+
boxSizing: "border-box",
|
|
29
|
+
} }, children)));
|
|
30
|
+
}
|
|
31
|
+
function StyledResizer(props) {
|
|
32
|
+
return React.createElement(PanelResizer, { size: "10px", style: { background: "red" }, ...props });
|
|
33
|
+
}
|
|
34
|
+
export function Simple({ handle }) {
|
|
35
|
+
return (React.createElement(StyledPanelGroup, { handle: handle, style: { height: 200 } },
|
|
36
|
+
React.createElement(StyledPanel, null, "Panel 1"),
|
|
37
|
+
React.createElement(StyledResizer, null),
|
|
38
|
+
React.createElement(StyledPanel, { min: "100px" }, "Panel 2")));
|
|
39
|
+
}
|
|
40
|
+
export function Autosave({ handle }) {
|
|
41
|
+
return (React.createElement(StyledPanelGroup, { handle: handle, autosaveId: "autosave-example" },
|
|
42
|
+
React.createElement(StyledPanel, { id: "1" }, "Panel 1"),
|
|
43
|
+
React.createElement(StyledResizer, { id: "resizer" }),
|
|
44
|
+
React.createElement(StyledPanel, { id: "2" }, "Panel 2")));
|
|
45
|
+
}
|
|
46
|
+
export function AutosaveCollapsible({ handle, onCollapseChange = console.log, }) {
|
|
47
|
+
return (React.createElement(StyledPanelGroup, { handle: handle, autosaveId: "autosave-example-2" },
|
|
48
|
+
React.createElement(StyledPanel, { id: "1", collapsible: true, collapsedSize: "100px", min: "140px", onCollapseChange: onCollapseChange }, "Collapsible"),
|
|
49
|
+
React.createElement(StyledResizer, { id: "resizer" }),
|
|
50
|
+
React.createElement(StyledPanel, { id: "2" }, "Panel 2")));
|
|
51
|
+
}
|
|
52
|
+
export function DynamicConstraints({ handle, }) {
|
|
53
|
+
const [customOn, setCustomOn] = React.useState(false);
|
|
54
|
+
return (React.createElement(React.Fragment, null,
|
|
55
|
+
React.createElement(StyledPanelGroup, { handle: handle },
|
|
56
|
+
React.createElement(StyledPanel, { default: "100px", ...(customOn ? { min: "200px" } : { min: "100px" }) },
|
|
57
|
+
React.createElement("div", null, "Panel 1")),
|
|
58
|
+
React.createElement(StyledResizer, null),
|
|
59
|
+
React.createElement(StyledPanel, { min: "100px" },
|
|
60
|
+
React.createElement("div", null, "Panel 2")),
|
|
61
|
+
React.createElement(StyledResizer, null),
|
|
62
|
+
React.createElement(StyledPanel, { ...(customOn ? { min: "100px" } : { min: "400px" }), ...(customOn ? { max: "300px" } : { max: "700px" }) },
|
|
63
|
+
React.createElement("div", null, "Panel 3"))),
|
|
64
|
+
React.createElement("button", { type: "button", onClick: () => setCustomOn(!customOn) }, "Toggle Custom")));
|
|
65
|
+
}
|
|
66
|
+
export function SimpleMin() {
|
|
67
|
+
return (React.createElement(StyledPanelGroup, null,
|
|
68
|
+
React.createElement(StyledPanel, { min: "100px" },
|
|
69
|
+
React.createElement("div", null, "Panel 1")),
|
|
70
|
+
React.createElement(StyledResizer, null),
|
|
71
|
+
React.createElement(StyledPanel, { min: "100px" },
|
|
72
|
+
React.createElement("div", null, "Panel 2")),
|
|
73
|
+
React.createElement(StyledResizer, null),
|
|
74
|
+
React.createElement(StyledPanel, { min: "100px" },
|
|
75
|
+
React.createElement("div", null, "Panel 3"))));
|
|
76
|
+
}
|
|
77
|
+
export function SimpleMinMax() {
|
|
78
|
+
return (React.createElement(StyledPanelGroup, null,
|
|
79
|
+
React.createElement(StyledPanel, { min: "100px", max: "200px" },
|
|
80
|
+
React.createElement("div", null, "Panel 1")),
|
|
81
|
+
React.createElement(StyledResizer, null),
|
|
82
|
+
React.createElement(StyledPanel, { min: "100px" },
|
|
83
|
+
React.createElement("div", null, "Panel 2")),
|
|
84
|
+
React.createElement(StyledResizer, { size: "20px" }),
|
|
85
|
+
React.createElement(StyledPanel, { min: "100px" },
|
|
86
|
+
React.createElement("div", null, "Panel 3"))));
|
|
87
|
+
}
|
|
88
|
+
export function SimpleConstraints() {
|
|
89
|
+
return (React.createElement(StyledPanelGroup, null,
|
|
90
|
+
React.createElement(StyledPanel, { min: "100px", max: "50%" },
|
|
91
|
+
React.createElement("div", null, "Panel 1")),
|
|
92
|
+
React.createElement(StyledResizer, null),
|
|
93
|
+
React.createElement(StyledPanel, null,
|
|
94
|
+
React.createElement("div", null, "Panel 2"))));
|
|
95
|
+
}
|
|
96
|
+
export function HorizontalLayout() {
|
|
97
|
+
return (React.createElement(StyledPanelGroup, { orientation: "horizontal" },
|
|
98
|
+
React.createElement(StyledPanel, { default: "30%", min: "20%" }, "left"),
|
|
99
|
+
React.createElement(StyledResizer, null),
|
|
100
|
+
React.createElement(StyledPanel, { min: "20%" }, "middle"),
|
|
101
|
+
React.createElement(StyledResizer, null),
|
|
102
|
+
React.createElement(StyledPanel, { default: "30%", min: "20%" }, "right")));
|
|
103
|
+
}
|
|
104
|
+
export function VerticalLayout({ handle, }) {
|
|
105
|
+
return (React.createElement(StyledPanelGroup, { handle: handle, orientation: "vertical", style: { height: 322 } },
|
|
106
|
+
React.createElement(StyledPanel, { default: "30%", min: "20%" }, "top"),
|
|
107
|
+
React.createElement(StyledResizer, null),
|
|
108
|
+
React.createElement(StyledPanel, { min: "20%" }, "middle"),
|
|
109
|
+
React.createElement(StyledResizer, null),
|
|
110
|
+
React.createElement(StyledPanel, { default: "30%", min: "20%" }, "bottom")));
|
|
111
|
+
}
|
|
112
|
+
export function VerticalLayout2({ handle, }) {
|
|
113
|
+
return (React.createElement(StyledPanelGroup, { handle: handle, orientation: "vertical", style: { height: "calc(100vh - 100px)" } },
|
|
114
|
+
React.createElement(StyledPanel, { default: "200px", min: "200px" }, "top"),
|
|
115
|
+
React.createElement(StyledResizer, null),
|
|
116
|
+
React.createElement(StyledPanel, { min: "200px", collapsedSize: "60px", defaultCollapsed: true, collapsible: true }, "middle")));
|
|
117
|
+
}
|
|
118
|
+
export function NestedGroups() {
|
|
119
|
+
return (React.createElement(PanelGroup, { orientation: "horizontal", style: {
|
|
120
|
+
border: "1px solid rgba(0, 0, 0, 0.3)",
|
|
121
|
+
borderRadius: 12,
|
|
122
|
+
height: 400,
|
|
123
|
+
} },
|
|
124
|
+
React.createElement(Panel, { min: "10%" }, "left"),
|
|
125
|
+
React.createElement(StyledResizer, null),
|
|
126
|
+
React.createElement(Panel, { min: "10%" },
|
|
127
|
+
React.createElement(PanelGroup, { orientation: "vertical" },
|
|
128
|
+
React.createElement(Panel, { min: "10%" }, "top"),
|
|
129
|
+
React.createElement(StyledResizer, null),
|
|
130
|
+
React.createElement(Panel, { min: "10%" },
|
|
131
|
+
React.createElement(PanelGroup, { orientation: "horizontal" },
|
|
132
|
+
React.createElement(Panel, { min: "20%" }, "left"),
|
|
133
|
+
React.createElement(StyledResizer, null),
|
|
134
|
+
React.createElement(Panel, { min: "20%" }, "right"))))),
|
|
135
|
+
React.createElement(StyledResizer, null),
|
|
136
|
+
React.createElement(Panel, { min: "10%" }, "right")));
|
|
137
|
+
}
|
|
138
|
+
export function WithOverflow() {
|
|
139
|
+
return (React.createElement(StyledPanelGroup, { style: { height: 400 } },
|
|
140
|
+
React.createElement(Panel, { min: "200px" },
|
|
141
|
+
React.createElement("div", { style: {
|
|
142
|
+
overflow: "auto",
|
|
143
|
+
padding: 40,
|
|
144
|
+
height: "100%",
|
|
145
|
+
boxSizing: "border-box",
|
|
146
|
+
} },
|
|
147
|
+
React.createElement("p", null, "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec euismod, nisl eget ultricies ultrices, nunc nisi aliquam nisi, eu tincidunt nisl nisl eu nisl. Sed euismod, nisl eget ultricies ultrices, nunc nisi aliquam nisi, eu tincidunt nisl nisl eu nisl. Sed euismod, nisl eget ultricies ultrices, nunc nisi aliquam nisi, eu tincidunt nisl nisl eu nisl."),
|
|
148
|
+
React.createElement("p", null, "Sed euismod, nisl eget ultricies ultrices, nunc nisi aliquam nisi, eu tincidunt nisl nisl eu nisl. Sed euismod, nisl eget ultricies ultrices, nunc nisi aliquam nisi, eu tincidunt nisl nisl eu nisl. Sed euismod, nisl eget ultricies ultrices, nunc nisi aliquam nisi, eu tincidunt nisl nisl eu nisl."),
|
|
149
|
+
React.createElement("p", null, "Sed euismod, nisl eget ultricies ultrices, nunc nisi aliquam nisi, eu tincidunt nisl nisl eu nisl. Sed euismod, nisl eget ultricies ultrices, nunc nisi aliquam nisi, eu tincidunt nisl nisl eu nisl. Sed euismod, nisl eget ultricies ultrices, nunc nisi aliquam nisi, eu tincidunt nisl nisl eu nisl."),
|
|
150
|
+
React.createElement("p", null, "Sed euismod, nisl eget ultricies ultrices, nunc nisi aliquam nisi, eu tincidunt nisl nisl eu nisl. Sed euismod, nisl eget ultricies ultrices, nunc nisi aliquam nisi, eu tincidunt nisl nisl eu nisl. Sed euismod, nisl eget ultricies ultrices, nunc nisi aliquam nisi, eu tincidunt nisl nisl eu nisl."),
|
|
151
|
+
React.createElement("p", null, "Sed euismod, nisl eget ultricies ultrices, nunc nisi aliquam nisi, eu tincidunt nisl nisl eu nisl. Sed euismod, nisl eget ultricies ultrices, nunc nisi aliquam nisi, eu tincidunt nisl nisl eu nisl. Sed euismod, nisl eget ultricies ultrices, nunc nisi aliquam nisi, eu tincidunt nisl nisl eu nisl."))),
|
|
152
|
+
React.createElement(StyledResizer, null),
|
|
153
|
+
React.createElement(Panel, { min: "200px" },
|
|
154
|
+
React.createElement("div", { style: {
|
|
155
|
+
overflow: "auto",
|
|
156
|
+
padding: 40,
|
|
157
|
+
height: "100%",
|
|
158
|
+
boxSizing: "border-box",
|
|
159
|
+
} },
|
|
160
|
+
React.createElement("p", null, "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec euismod, nisl eget ultricies ultrices, nunc nisi aliquam nisi, eu tincidunt nisl nisl eu nisl. Sed euismod, nisl eget ultricies ultrices, nunc nisi aliquam nisi, eu tincidunt nisl nisl eu nisl. Sed euismod, nisl eget ultricies ultrices, nunc nisi aliquam nisi, eu tincidunt nisl nisl eu nisl."),
|
|
161
|
+
React.createElement("p", null, "Sed euismod, nisl eget ultricies ultrices, nunc nisi aliquam nisi, eu tincidunt nisl nisl eu nisl. Sed euismod, nisl eget ultricies ultrices, nunc nisi aliquam nisi, eu tincidunt nisl nisl eu nisl. Sed euismod, nisl eget ultricies ultrices, nunc nisi aliquam nisi, eu tincidunt nisl nisl eu nisl."),
|
|
162
|
+
React.createElement("p", null, "Sed euismod, nisl eget ultricies ultrices, nunc nisi aliquam nisi, eu tincidunt nisl nisl eu nisl. Sed euismod, nisl eget ultricies ultrices, nunc nisi aliquam nisi, eu tincidunt nisl nisl eu nisl. Sed euismod, nisl eget ultricies ultrices, nunc nisi aliquam nisi, eu tincidunt nisl nisl eu nisl."),
|
|
163
|
+
React.createElement("p", null, "Sed euismod, nisl eget ultricies ultrices, nunc nisi aliquam nisi, eu tincidunt nisl nisl eu nisl. Sed euismod, nisl eget ultricies ultrices, nunc nisi aliquam nisi, eu tincidunt nisl nisl eu nisl. Sed euismod, nisl eget ultricies ultrices, nunc nisi aliquam nisi, eu tincidunt nisl nisl eu nisl."),
|
|
164
|
+
React.createElement("p", null, "Sed euismod, nisl eget ultricies ultrices, nunc nisi aliquam nisi, eu tincidunt nisl nisl eu nisl. Sed euismod, nisl eget ultricies ultrices, nunc nisi aliquam nisi, eu tincidunt nisl nisl eu nisl. Sed euismod, nisl eget ultricies ultrices, nunc nisi aliquam nisi, eu tincidunt nisl nisl eu nisl.")))));
|
|
165
|
+
}
|
|
166
|
+
export function Collapsible({ leftPanelHandle, rightPanelHandle, handle, }) {
|
|
167
|
+
const [collapsed, setCollapsed] = React.useState(true);
|
|
168
|
+
return (React.createElement(StyledPanelGroup, { handle: handle },
|
|
169
|
+
React.createElement(StyledPanel, { handle: leftPanelHandle, min: "100px", collapsible: true, collapsedSize: "60px", style: { border: "10px solid green", boxSizing: "border-box" }, onCollapseChange: (isCollapsed) => {
|
|
170
|
+
console.log("COLLAPSE PASSIVE", isCollapsed);
|
|
171
|
+
} },
|
|
172
|
+
React.createElement("div", null, "1")),
|
|
173
|
+
React.createElement(StyledResizer, null),
|
|
174
|
+
React.createElement(StyledPanel, { min: "100px" },
|
|
175
|
+
React.createElement("div", null, "2")),
|
|
176
|
+
React.createElement(StyledResizer, { id: "resizer-2" }),
|
|
177
|
+
React.createElement(StyledPanel, { handle: rightPanelHandle, min: "100px", collapsible: true, collapsedSize: "60px", defaultCollapsed: true, collapseAnimation: { easing: "bounce", duration: 1000 }, style: { border: "10px solid blue", boxSizing: "border-box" }, collapsed: collapsed, onCollapseChange: (isCollapsed) => {
|
|
178
|
+
console.log("COLLAPSE CONTROLLED", isCollapsed);
|
|
179
|
+
setCollapsed(isCollapsed);
|
|
180
|
+
} },
|
|
181
|
+
React.createElement("div", null, "3"))));
|
|
182
|
+
}
|
|
183
|
+
export function CustomCollapseAnimation() {
|
|
184
|
+
const springFn = useMemo(() => {
|
|
185
|
+
return spring({
|
|
186
|
+
keyframes: [0, 1],
|
|
187
|
+
velocity: 1,
|
|
188
|
+
stiffness: 100,
|
|
189
|
+
damping: 10,
|
|
190
|
+
mass: 1.0,
|
|
191
|
+
});
|
|
192
|
+
}, []);
|
|
193
|
+
return (React.createElement(StyledPanelGroup, null,
|
|
194
|
+
React.createElement(StyledPanel, { min: "100px", collapsible: true, collapsedSize: "60px", style: { border: "10px solid green", boxSizing: "border-box" } }, "1"),
|
|
195
|
+
React.createElement(StyledResizer, null),
|
|
196
|
+
React.createElement(StyledPanel, { min: "100px" }, "2"),
|
|
197
|
+
React.createElement(StyledResizer, null),
|
|
198
|
+
React.createElement(StyledPanel, { style: { border: "10px solid blue", boxSizing: "border-box" }, min: "100px", collapsible: true, collapsedSize: "60px", defaultCollapsed: true, collapseAnimation: {
|
|
199
|
+
easing: (t) => springFn.next(t * 1000).value,
|
|
200
|
+
duration: 1000,
|
|
201
|
+
} }, "3")));
|
|
202
|
+
}
|
|
203
|
+
export function ImperativePanel() {
|
|
204
|
+
const groupRef = React.useRef(null);
|
|
205
|
+
const panelRef = React.useRef(null);
|
|
206
|
+
return (React.createElement(React.Fragment, null,
|
|
207
|
+
React.createElement(StyledPanelGroup, { handle: groupRef },
|
|
208
|
+
React.createElement(StyledPanel, { handle: panelRef, min: "100px", collapsible: true, collapsedSize: "60px" }, "1"),
|
|
209
|
+
React.createElement(StyledResizer, null),
|
|
210
|
+
React.createElement(StyledPanel, { min: "100px" }, "2"),
|
|
211
|
+
React.createElement(StyledResizer, null),
|
|
212
|
+
React.createElement(StyledPanel, { min: "100px", collapsible: true, collapsedSize: "60px", defaultCollapsed: true }, "3")),
|
|
213
|
+
React.createElement("div", null,
|
|
214
|
+
React.createElement("button", { type: "button", onClick: () => alert(`Sizes: ${groupRef.current?.getPixelSizes()}`) }, "Get pixel sizes"),
|
|
215
|
+
React.createElement("button", { type: "button", onClick: () => alert(`Sizes: ${groupRef.current?.getPercentageSizes()}`) }, "Get percent sizes"),
|
|
216
|
+
React.createElement("button", { type: "button", onClick: () => groupRef.current?.setSizes([
|
|
217
|
+
"200px",
|
|
218
|
+
"10px",
|
|
219
|
+
"50%",
|
|
220
|
+
"10px",
|
|
221
|
+
"150px",
|
|
222
|
+
]) }, "Override sizes")),
|
|
223
|
+
React.createElement("div", null,
|
|
224
|
+
React.createElement("button", { type: "button", onClick: () => panelRef.current?.collapse() }, "Collapse"),
|
|
225
|
+
React.createElement("button", { type: "button", onClick: () => alert(`Collapsed: ${panelRef.current?.isCollapsed()}`) }, "Is Collapsed?"),
|
|
226
|
+
React.createElement("button", { type: "button", onClick: () => panelRef.current?.expand() }, "Expand"),
|
|
227
|
+
React.createElement("button", { type: "button", onClick: () => alert(`Expanded: ${panelRef.current?.isExpanded()}`) }, "Is Expanded?"),
|
|
228
|
+
React.createElement("button", { type: "button", onClick: () => alert(`Id: ${panelRef.current?.getId()}`) }, "Get Id"),
|
|
229
|
+
React.createElement("button", { type: "button", onClick: () => alert(`Size: ${panelRef.current?.getPixelSize()}`) }, "Get Pixel Size"),
|
|
230
|
+
React.createElement("button", { type: "button", onClick: () => alert(`Percentage: ${panelRef.current?.getPercentageSize()}`) }, "Get Percentage Size"),
|
|
231
|
+
React.createElement("button", { type: "button", onClick: () => panelRef.current?.setSize("30px") }, "Set size to 100px"),
|
|
232
|
+
React.createElement("button", { type: "button", onClick: () => panelRef.current?.setSize("50%") }, "Set size to 50%"))));
|
|
233
|
+
}
|
|
234
|
+
export function ConditionalPanel({ handle, }) {
|
|
235
|
+
const [isExpanded, setIsExpanded] = React.useState(false);
|
|
236
|
+
return (React.createElement(React.StrictMode, null,
|
|
237
|
+
React.createElement(StyledPanelGroup, { handle: handle },
|
|
238
|
+
React.createElement(StyledPanel, { id: "panel-1", min: "100px", collapsible: true, collapsedSize: "60px" },
|
|
239
|
+
React.createElement("div", null, "1")),
|
|
240
|
+
React.createElement(StyledResizer, { id: "handle-1" }),
|
|
241
|
+
React.createElement(StyledPanel, { id: "panel-2", min: "100px" },
|
|
242
|
+
React.createElement("div", null, "2")),
|
|
243
|
+
isExpanded && (React.createElement(React.Fragment, null,
|
|
244
|
+
React.createElement(StyledResizer, { id: "handle-2" }),
|
|
245
|
+
React.createElement(StyledPanel, { id: "panel-3", min: "100px" },
|
|
246
|
+
"3",
|
|
247
|
+
React.createElement("button", { type: "button", onClick: () => setIsExpanded(false) }, "Close"))))),
|
|
248
|
+
React.createElement("button", { type: "button", onClick: () => setIsExpanded(true) }, "Expand")));
|
|
249
|
+
}
|
|
250
|
+
export function ConditionalPanelComplex() {
|
|
251
|
+
const [isExpanded, setIsExpanded] = React.useState(false);
|
|
252
|
+
return (React.createElement(React.StrictMode, null,
|
|
253
|
+
React.createElement(StyledPanelGroup, null,
|
|
254
|
+
React.createElement(StyledPanel, { id: "panel-1", min: "100px", collapsible: true, collapsedSize: "60px" },
|
|
255
|
+
React.createElement("div", null, "1")),
|
|
256
|
+
React.createElement(StyledResizer, { id: "handle-1" }),
|
|
257
|
+
React.createElement(StyledPanel, { id: "panel-2", min: "100px" },
|
|
258
|
+
React.createElement("div", null, "2")),
|
|
259
|
+
React.createElement(StyledResizer, { id: "handle-2" }),
|
|
260
|
+
React.createElement(StyledPanel, { id: "panel-3", min: "100px" },
|
|
261
|
+
React.createElement("div", null, "3")),
|
|
262
|
+
isExpanded && (React.createElement(React.Fragment, null,
|
|
263
|
+
React.createElement(StyledResizer, { id: "handle-3" }),
|
|
264
|
+
React.createElement(StyledPanel, { id: "panel-4", min: "100px" },
|
|
265
|
+
"expanded",
|
|
266
|
+
React.createElement("button", { type: "button", onClick: () => setIsExpanded(false) }, "Close")))),
|
|
267
|
+
React.createElement(StyledResizer, { id: "handle-4" }),
|
|
268
|
+
React.createElement(StyledPanel, { min: "200px", collapsible: true, collapsedSize: "60px", defaultCollapsed: true, id: "panel-5" },
|
|
269
|
+
React.createElement("div", null, "4"))),
|
|
270
|
+
React.createElement("button", { type: "button", onClick: () => setIsExpanded(true) }, "Expand")));
|
|
271
|
+
}
|
|
272
|
+
export function WithDefaultWidth() {
|
|
273
|
+
return (React.createElement(PanelGroup, { style: { height: "400px" } },
|
|
274
|
+
React.createElement(Panel, { style: { backgroundColor: "#333366" } }),
|
|
275
|
+
React.createElement(PanelResizer, { size: "3px" }),
|
|
276
|
+
React.createElement(Panel, { default: "100px", min: "100px", max: "400px", style: { backgroundColor: "#ff3366" } })));
|
|
277
|
+
}
|
|
278
|
+
export function StaticAtRest({ handle, }) {
|
|
279
|
+
return (React.createElement(StyledPanelGroup, { handle: handle, style: { height: 200 } },
|
|
280
|
+
React.createElement(StyledPanel, { min: "100px", max: "300px", isStaticAtRest: true }, "Panel 1"),
|
|
281
|
+
React.createElement(StyledResizer, null),
|
|
282
|
+
React.createElement(StyledPanel, { min: "100px" }, "Panel 2"),
|
|
283
|
+
React.createElement(StyledResizer, null),
|
|
284
|
+
React.createElement(StyledPanel, { min: "100px" }, "Panel 3")));
|
|
285
|
+
}
|
|
286
|
+
//# sourceMappingURL=ReactWindowSplitter.stories.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReactWindowSplitter.stories.js","sourceRoot":"","sources":["../../src/ReactWindowSplitter.stories.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useMemo } from \"react\";\nimport { spring } from \"framer-motion\";\nimport {\n PanelGroup,\n PanelGroupProps,\n Panel,\n PanelProps,\n PanelResizer,\n PanelResizerProps,\n} from \"./ReactWindowSplitter.js\";\nimport { PanelGroupHandle, PanelHandle } from \"@window-splitter/interface\";\n\nexport default {\n title: \"Components/React\",\n};\n\nfunction StyledPanelGroup(props: PanelGroupProps) {\n return (\n <PanelGroup\n {...props}\n style={{\n border: \"1px solid rgba(0, 0, 0, 0.3)\",\n background: \"rgba(0, 0, 0, 0.1)\",\n borderRadius: 12,\n boxSizing: \"border-box\",\n ...props.style,\n }}\n />\n );\n}\n\nfunction StyledPanel({ children, ...props }: PanelProps) {\n return (\n <Panel\n style={{\n overflow: \"hidden\",\n }}\n {...props}\n >\n <div\n style={{\n height: \"100%\",\n width: \"100%\",\n padding: 20,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n overflow: \"hidden\",\n boxSizing: \"border-box\",\n }}\n >\n {children}\n </div>\n </Panel>\n );\n}\n\nfunction StyledResizer(props: PanelResizerProps) {\n return <PanelResizer size=\"10px\" style={{ background: \"red\" }} {...props} />;\n}\n\nexport function Simple({ handle }: { handle?: React.Ref<PanelGroupHandle> }) {\n return (\n <StyledPanelGroup handle={handle} style={{ height: 200 }}>\n <StyledPanel>Panel 1</StyledPanel>\n <StyledResizer />\n <StyledPanel min=\"100px\">Panel 2</StyledPanel>\n </StyledPanelGroup>\n );\n}\n\nexport function Autosave({ handle }: { handle?: React.Ref<PanelGroupHandle> }) {\n return (\n <StyledPanelGroup handle={handle} autosaveId=\"autosave-example\">\n <StyledPanel id=\"1\">Panel 1</StyledPanel>\n <StyledResizer id=\"resizer\" />\n <StyledPanel id=\"2\">Panel 2</StyledPanel>\n </StyledPanelGroup>\n );\n}\n\nexport function AutosaveCollapsible({\n handle,\n onCollapseChange = console.log,\n}: {\n handle?: React.Ref<PanelGroupHandle>;\n onCollapseChange?: (c: boolean) => void;\n}) {\n return (\n <StyledPanelGroup handle={handle} autosaveId=\"autosave-example-2\">\n <StyledPanel\n id=\"1\"\n collapsible\n collapsedSize=\"100px\"\n min=\"140px\"\n onCollapseChange={onCollapseChange}\n >\n Collapsible\n </StyledPanel>\n <StyledResizer id=\"resizer\" />\n <StyledPanel id=\"2\">Panel 2</StyledPanel>\n </StyledPanelGroup>\n );\n}\n\nexport function DynamicConstraints({\n handle,\n}: {\n handle?: React.Ref<PanelGroupHandle>;\n}) {\n const [customOn, setCustomOn] = React.useState(false);\n\n return (\n <>\n <StyledPanelGroup handle={handle}>\n <StyledPanel\n default=\"100px\"\n {...(customOn ? { min: \"200px\" } : { min: \"100px\" })}\n >\n <div>Panel 1</div>\n </StyledPanel>\n <StyledResizer />\n <StyledPanel min=\"100px\">\n <div>Panel 2</div>\n </StyledPanel>\n <StyledResizer />\n <StyledPanel\n {...(customOn ? { min: \"100px\" } : { min: \"400px\" })}\n {...(customOn ? { max: \"300px\" } : { max: \"700px\" })}\n >\n <div>Panel 3</div>\n </StyledPanel>\n </StyledPanelGroup>\n <button type=\"button\" onClick={() => setCustomOn(!customOn)}>\n Toggle Custom\n </button>\n </>\n );\n}\n\nexport function SimpleMin() {\n return (\n <StyledPanelGroup>\n <StyledPanel min=\"100px\">\n <div>Panel 1</div>\n </StyledPanel>\n <StyledResizer />\n <StyledPanel min=\"100px\">\n <div>Panel 2</div>\n </StyledPanel>\n <StyledResizer />\n <StyledPanel min=\"100px\">\n <div>Panel 3</div>\n </StyledPanel>\n </StyledPanelGroup>\n );\n}\n\nexport function SimpleMinMax() {\n return (\n <StyledPanelGroup>\n <StyledPanel min=\"100px\" max=\"200px\">\n <div>Panel 1</div>\n </StyledPanel>\n <StyledResizer />\n <StyledPanel min=\"100px\">\n <div>Panel 2</div>\n </StyledPanel>\n <StyledResizer size=\"20px\" />\n <StyledPanel min=\"100px\">\n <div>Panel 3</div>\n </StyledPanel>\n </StyledPanelGroup>\n );\n}\n\nexport function SimpleConstraints() {\n return (\n <StyledPanelGroup>\n <StyledPanel min=\"100px\" max=\"50%\">\n <div>Panel 1</div>\n </StyledPanel>\n <StyledResizer />\n <StyledPanel>\n <div>Panel 2</div>\n </StyledPanel>\n </StyledPanelGroup>\n );\n}\n\nexport function HorizontalLayout() {\n return (\n <StyledPanelGroup orientation=\"horizontal\">\n <StyledPanel default=\"30%\" min=\"20%\">\n left\n </StyledPanel>\n <StyledResizer />\n <StyledPanel min=\"20%\">middle</StyledPanel>\n <StyledResizer />\n <StyledPanel default=\"30%\" min=\"20%\">\n right\n </StyledPanel>\n </StyledPanelGroup>\n );\n}\n\nexport function VerticalLayout({\n handle,\n}: {\n handle?: React.Ref<PanelGroupHandle>;\n}) {\n return (\n <StyledPanelGroup\n handle={handle}\n orientation=\"vertical\"\n style={{ height: 322 }}\n >\n <StyledPanel default=\"30%\" min=\"20%\">\n top\n </StyledPanel>\n <StyledResizer />\n <StyledPanel min=\"20%\">middle</StyledPanel>\n <StyledResizer />\n <StyledPanel default=\"30%\" min=\"20%\">\n bottom\n </StyledPanel>\n </StyledPanelGroup>\n );\n}\n\nexport function VerticalLayout2({\n handle,\n}: {\n handle?: React.Ref<PanelGroupHandle>;\n}) {\n return (\n <StyledPanelGroup\n handle={handle}\n orientation=\"vertical\"\n style={{ height: \"calc(100vh - 100px)\" }}\n >\n <StyledPanel default=\"200px\" min=\"200px\">\n top\n </StyledPanel>\n <StyledResizer />\n <StyledPanel\n min=\"200px\"\n collapsedSize=\"60px\"\n defaultCollapsed\n collapsible\n >\n middle\n </StyledPanel>\n </StyledPanelGroup>\n );\n}\n\nexport function NestedGroups() {\n return (\n <PanelGroup\n orientation=\"horizontal\"\n style={{\n border: \"1px solid rgba(0, 0, 0, 0.3)\",\n borderRadius: 12,\n height: 400,\n }}\n >\n <Panel min=\"10%\">left</Panel>\n <StyledResizer />\n <Panel min=\"10%\">\n <PanelGroup orientation=\"vertical\">\n <Panel min=\"10%\">top</Panel>\n <StyledResizer />\n <Panel min=\"10%\">\n <PanelGroup orientation=\"horizontal\">\n <Panel min=\"20%\">left</Panel>\n <StyledResizer />\n <Panel min=\"20%\">right</Panel>\n </PanelGroup>\n </Panel>\n </PanelGroup>\n </Panel>\n <StyledResizer />\n <Panel min=\"10%\">right</Panel>\n </PanelGroup>\n );\n}\n\nexport function WithOverflow() {\n return (\n <StyledPanelGroup style={{ height: 400 }}>\n <Panel min=\"200px\">\n <div\n style={{\n overflow: \"auto\",\n padding: 40,\n height: \"100%\",\n boxSizing: \"border-box\",\n }}\n >\n <p>\n Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec\n euismod, nisl eget ultricies ultrices, nunc nisi aliquam nisi, eu\n tincidunt nisl nisl eu nisl. Sed euismod, nisl eget ultricies\n ultrices, nunc nisi aliquam nisi, eu tincidunt nisl nisl eu nisl.\n Sed euismod, nisl eget ultricies ultrices, nunc nisi aliquam nisi,\n eu tincidunt nisl nisl eu nisl.\n </p>\n <p>\n Sed euismod, nisl eget ultricies ultrices, nunc nisi aliquam nisi,\n eu tincidunt nisl nisl eu nisl. Sed euismod, nisl eget ultricies\n ultrices, nunc nisi aliquam nisi, eu tincidunt nisl nisl eu nisl.\n Sed euismod, nisl eget ultricies ultrices, nunc nisi aliquam nisi,\n eu tincidunt nisl nisl eu nisl.\n </p>\n <p>\n Sed euismod, nisl eget ultricies ultrices, nunc nisi aliquam nisi,\n eu tincidunt nisl nisl eu nisl. Sed euismod, nisl eget ultricies\n ultrices, nunc nisi aliquam nisi, eu tincidunt nisl nisl eu nisl.\n Sed euismod, nisl eget ultricies ultrices, nunc nisi aliquam nisi,\n eu tincidunt nisl nisl eu nisl.\n </p>\n <p>\n Sed euismod, nisl eget ultricies ultrices, nunc nisi aliquam nisi,\n eu tincidunt nisl nisl eu nisl. Sed euismod, nisl eget ultricies\n ultrices, nunc nisi aliquam nisi, eu tincidunt nisl nisl eu nisl.\n Sed euismod, nisl eget ultricies ultrices, nunc nisi aliquam nisi,\n eu tincidunt nisl nisl eu nisl.\n </p>\n <p>\n Sed euismod, nisl eget ultricies ultrices, nunc nisi aliquam nisi,\n eu tincidunt nisl nisl eu nisl. Sed euismod, nisl eget ultricies\n ultrices, nunc nisi aliquam nisi, eu tincidunt nisl nisl eu nisl.\n Sed euismod, nisl eget ultricies ultrices, nunc nisi aliquam nisi,\n eu tincidunt nisl nisl eu nisl.\n </p>\n </div>\n </Panel>\n <StyledResizer />\n <Panel min=\"200px\">\n <div\n style={{\n overflow: \"auto\",\n padding: 40,\n height: \"100%\",\n boxSizing: \"border-box\",\n }}\n >\n <p>\n Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec\n euismod, nisl eget ultricies ultrices, nunc nisi aliquam nisi, eu\n tincidunt nisl nisl eu nisl. Sed euismod, nisl eget ultricies\n ultrices, nunc nisi aliquam nisi, eu tincidunt nisl nisl eu nisl.\n Sed euismod, nisl eget ultricies ultrices, nunc nisi aliquam nisi,\n eu tincidunt nisl nisl eu nisl.\n </p>\n <p>\n Sed euismod, nisl eget ultricies ultrices, nunc nisi aliquam nisi,\n eu tincidunt nisl nisl eu nisl. Sed euismod, nisl eget ultricies\n ultrices, nunc nisi aliquam nisi, eu tincidunt nisl nisl eu nisl.\n Sed euismod, nisl eget ultricies ultrices, nunc nisi aliquam nisi,\n eu tincidunt nisl nisl eu nisl.\n </p>\n <p>\n Sed euismod, nisl eget ultricies ultrices, nunc nisi aliquam nisi,\n eu tincidunt nisl nisl eu nisl. Sed euismod, nisl eget ultricies\n ultrices, nunc nisi aliquam nisi, eu tincidunt nisl nisl eu nisl.\n Sed euismod, nisl eget ultricies ultrices, nunc nisi aliquam nisi,\n eu tincidunt nisl nisl eu nisl.\n </p>\n <p>\n Sed euismod, nisl eget ultricies ultrices, nunc nisi aliquam nisi,\n eu tincidunt nisl nisl eu nisl. Sed euismod, nisl eget ultricies\n ultrices, nunc nisi aliquam nisi, eu tincidunt nisl nisl eu nisl.\n Sed euismod, nisl eget ultricies ultrices, nunc nisi aliquam nisi,\n eu tincidunt nisl nisl eu nisl.\n </p>\n <p>\n Sed euismod, nisl eget ultricies ultrices, nunc nisi aliquam nisi,\n eu tincidunt nisl nisl eu nisl. Sed euismod, nisl eget ultricies\n ultrices, nunc nisi aliquam nisi, eu tincidunt nisl nisl eu nisl.\n Sed euismod, nisl eget ultricies ultrices, nunc nisi aliquam nisi,\n eu tincidunt nisl nisl eu nisl.\n </p>\n </div>\n </Panel>\n </StyledPanelGroup>\n );\n}\n\nexport function Collapsible({\n leftPanelHandle,\n rightPanelHandle,\n handle,\n}: {\n leftPanelHandle?: React.Ref<PanelHandle>;\n handle?: React.Ref<PanelGroupHandle>;\n rightPanelHandle?: React.Ref<PanelHandle>;\n}) {\n const [collapsed, setCollapsed] = React.useState(true);\n\n return (\n <StyledPanelGroup handle={handle}>\n <StyledPanel\n handle={leftPanelHandle}\n min=\"100px\"\n collapsible\n collapsedSize=\"60px\"\n style={{ border: \"10px solid green\", boxSizing: \"border-box\" }}\n onCollapseChange={(isCollapsed) => {\n console.log(\"COLLAPSE PASSIVE\", isCollapsed);\n }}\n >\n <div>1</div>\n </StyledPanel>\n <StyledResizer />\n <StyledPanel min=\"100px\">\n <div>2</div>\n </StyledPanel>\n <StyledResizer id=\"resizer-2\" />\n <StyledPanel\n handle={rightPanelHandle}\n min=\"100px\"\n collapsible\n collapsedSize=\"60px\"\n defaultCollapsed\n collapseAnimation={{ easing: \"bounce\", duration: 1000 }}\n style={{ border: \"10px solid blue\", boxSizing: \"border-box\" }}\n collapsed={collapsed}\n onCollapseChange={(isCollapsed) => {\n console.log(\"COLLAPSE CONTROLLED\", isCollapsed);\n setCollapsed(isCollapsed);\n }}\n >\n <div>3</div>\n </StyledPanel>\n </StyledPanelGroup>\n );\n}\n\nexport function CustomCollapseAnimation() {\n const springFn = useMemo(() => {\n return spring({\n keyframes: [0, 1],\n velocity: 1,\n stiffness: 100,\n damping: 10,\n mass: 1.0,\n });\n }, []);\n\n return (\n <StyledPanelGroup>\n <StyledPanel\n min=\"100px\"\n collapsible\n collapsedSize=\"60px\"\n style={{ border: \"10px solid green\", boxSizing: \"border-box\" }}\n >\n 1\n </StyledPanel>\n <StyledResizer />\n <StyledPanel min=\"100px\">2</StyledPanel>\n <StyledResizer />\n <StyledPanel\n style={{ border: \"10px solid blue\", boxSizing: \"border-box\" }}\n min=\"100px\"\n collapsible\n collapsedSize=\"60px\"\n defaultCollapsed\n collapseAnimation={{\n easing: (t) => springFn.next(t * 1000).value,\n duration: 1000,\n }}\n >\n 3\n </StyledPanel>\n </StyledPanelGroup>\n );\n}\n\nexport function ImperativePanel() {\n const groupRef = React.useRef<PanelGroupHandle>(null);\n const panelRef = React.useRef<PanelHandle>(null);\n\n return (\n <>\n <StyledPanelGroup handle={groupRef}>\n <StyledPanel\n handle={panelRef}\n min=\"100px\"\n collapsible\n collapsedSize=\"60px\"\n >\n 1\n </StyledPanel>\n <StyledResizer />\n <StyledPanel min=\"100px\">2</StyledPanel>\n <StyledResizer />\n <StyledPanel\n min=\"100px\"\n collapsible\n collapsedSize=\"60px\"\n defaultCollapsed\n >\n 3\n </StyledPanel>\n </StyledPanelGroup>\n\n <div>\n <button\n type=\"button\"\n onClick={() => alert(`Sizes: ${groupRef.current?.getPixelSizes()}`)}\n >\n Get pixel sizes\n </button>\n <button\n type=\"button\"\n onClick={() =>\n alert(`Sizes: ${groupRef.current?.getPercentageSizes()}`)\n }\n >\n Get percent sizes\n </button>\n <button\n type=\"button\"\n onClick={() =>\n groupRef.current?.setSizes([\n \"200px\",\n \"10px\",\n \"50%\",\n \"10px\",\n \"150px\",\n ])\n }\n >\n Override sizes\n </button>\n </div>\n\n <div>\n <button type=\"button\" onClick={() => panelRef.current?.collapse()}>\n Collapse\n </button>\n <button\n type=\"button\"\n onClick={() => alert(`Collapsed: ${panelRef.current?.isCollapsed()}`)}\n >\n Is Collapsed?\n </button>\n <button type=\"button\" onClick={() => panelRef.current?.expand()}>\n Expand\n </button>\n <button\n type=\"button\"\n onClick={() => alert(`Expanded: ${panelRef.current?.isExpanded()}`)}\n >\n Is Expanded?\n </button>\n <button\n type=\"button\"\n onClick={() => alert(`Id: ${panelRef.current?.getId()}`)}\n >\n Get Id\n </button>\n <button\n type=\"button\"\n onClick={() => alert(`Size: ${panelRef.current?.getPixelSize()}`)}\n >\n Get Pixel Size\n </button>\n <button\n type=\"button\"\n onClick={() =>\n alert(`Percentage: ${panelRef.current?.getPercentageSize()}`)\n }\n >\n Get Percentage Size\n </button>\n <button type=\"button\" onClick={() => panelRef.current?.setSize(\"30px\")}>\n Set size to 100px\n </button>\n <button type=\"button\" onClick={() => panelRef.current?.setSize(\"50%\")}>\n Set size to 50%\n </button>\n </div>\n </>\n );\n}\n\nexport function ConditionalPanel({\n handle,\n}: {\n handle?: React.Ref<PanelGroupHandle>;\n}) {\n const [isExpanded, setIsExpanded] = React.useState(false);\n\n return (\n <React.StrictMode>\n <StyledPanelGroup handle={handle}>\n <StyledPanel id=\"panel-1\" min=\"100px\" collapsible collapsedSize=\"60px\">\n <div>1</div>\n </StyledPanel>\n <StyledResizer id=\"handle-1\" />\n <StyledPanel id=\"panel-2\" min=\"100px\">\n <div>2</div>\n </StyledPanel>\n {isExpanded && (\n <>\n <StyledResizer id=\"handle-2\" />\n <StyledPanel id=\"panel-3\" min=\"100px\">\n 3\n <button type=\"button\" onClick={() => setIsExpanded(false)}>\n Close\n </button>\n </StyledPanel>\n </>\n )}\n </StyledPanelGroup>\n <button type=\"button\" onClick={() => setIsExpanded(true)}>\n Expand\n </button>\n </React.StrictMode>\n );\n}\n\nexport function ConditionalPanelComplex() {\n const [isExpanded, setIsExpanded] = React.useState(false);\n\n return (\n <React.StrictMode>\n <StyledPanelGroup>\n <StyledPanel id=\"panel-1\" min=\"100px\" collapsible collapsedSize=\"60px\">\n <div>1</div>\n </StyledPanel>\n <StyledResizer id=\"handle-1\" />\n <StyledPanel id=\"panel-2\" min=\"100px\">\n <div>2</div>\n </StyledPanel>\n <StyledResizer id=\"handle-2\" />\n <StyledPanel id=\"panel-3\" min=\"100px\">\n <div>3</div>\n </StyledPanel>\n {isExpanded && (\n <>\n <StyledResizer id=\"handle-3\" />\n <StyledPanel id=\"panel-4\" min=\"100px\">\n expanded\n <button type=\"button\" onClick={() => setIsExpanded(false)}>\n Close\n </button>\n </StyledPanel>\n </>\n )}\n <StyledResizer id=\"handle-4\" />\n <StyledPanel\n min=\"200px\"\n collapsible\n collapsedSize=\"60px\"\n defaultCollapsed\n id=\"panel-5\"\n >\n <div>4</div>\n </StyledPanel>\n </StyledPanelGroup>\n <button type=\"button\" onClick={() => setIsExpanded(true)}>\n Expand\n </button>\n </React.StrictMode>\n );\n}\n\nexport function WithDefaultWidth() {\n return (\n <PanelGroup style={{ height: \"400px\" }}>\n <Panel style={{ backgroundColor: \"#333366\" }} />\n <PanelResizer size=\"3px\" />\n {/* I expected the right panel to be 100px wide */}\n <Panel\n default=\"100px\"\n min=\"100px\"\n max=\"400px\"\n style={{ backgroundColor: \"#ff3366\" }}\n />\n </PanelGroup>\n );\n}\n\nexport function StaticAtRest({\n handle,\n}: {\n handle?: React.Ref<PanelGroupHandle>;\n}) {\n return (\n <StyledPanelGroup handle={handle} style={{ height: 200 }}>\n <StyledPanel min=\"100px\" max=\"300px\" isStaticAtRest>\n Panel 1\n </StyledPanel>\n <StyledResizer />\n <StyledPanel min=\"100px\">Panel 2</StyledPanel>\n <StyledResizer />\n <StyledPanel min=\"100px\">Panel 3</StyledPanel>\n </StyledPanelGroup>\n );\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReactWindowSplitter.test.d.ts","sourceRoot":"","sources":["../../src/ReactWindowSplitter.test.tsx"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { test, expect, describe, vi } from "vitest";
|
|
3
|
+
import { cleanup, fireEvent, render, waitFor } from "@testing-library/react";
|
|
4
|
+
import * as Cookies from "tiny-cookie";
|
|
5
|
+
import { Autosave, AutosaveCollapsible, Collapsible, ConditionalPanel, Simple, VerticalLayout, DynamicConstraints, } from "./ReactWindowSplitter.stories.js";
|
|
6
|
+
import { PanelResizer, PanelGroup, Panel } from "./ReactWindowSplitter.js";
|
|
7
|
+
import { createTestUtils, dragHandle } from "@window-splitter/interface/test";
|
|
8
|
+
const { expectTemplate, waitForMeasurement, waitForCondition } = createTestUtils({ waitFor });
|
|
9
|
+
test("horizontal layout", async () => {
|
|
10
|
+
const handle = { current: null };
|
|
11
|
+
const { getByText } = render(React.createElement("div", { style: { width: 500 } },
|
|
12
|
+
React.createElement(Simple, { handle: handle })));
|
|
13
|
+
await waitForMeasurement(handle.current);
|
|
14
|
+
expect(getByText("Panel 1")).toBeInTheDocument();
|
|
15
|
+
expect(getByText("Panel 2")).toBeInTheDocument();
|
|
16
|
+
await expectTemplate(handle.current, "244px 10px 244px");
|
|
17
|
+
// Should respect the min
|
|
18
|
+
await dragHandle({ delta: 300 });
|
|
19
|
+
await expectTemplate(handle.current, "388px 10px 100px");
|
|
20
|
+
});
|
|
21
|
+
test("vertical layout", async () => {
|
|
22
|
+
const handle = { current: null };
|
|
23
|
+
const { getByText } = render(React.createElement("div", { style: { width: 500 } },
|
|
24
|
+
React.createElement(VerticalLayout, { handle: handle })));
|
|
25
|
+
await waitForMeasurement(handle.current);
|
|
26
|
+
expect(getByText("top")).toBeInTheDocument();
|
|
27
|
+
expect(getByText("middle")).toBeInTheDocument();
|
|
28
|
+
expect(getByText("bottom")).toBeInTheDocument();
|
|
29
|
+
await expectTemplate(handle.current, "96px 10px 108px 10px 96px");
|
|
30
|
+
// Should respect the min
|
|
31
|
+
await dragHandle({ delta: 100, orientation: "vertical" });
|
|
32
|
+
await expectTemplate(handle.current, "172px 10px 64px 10px 64px");
|
|
33
|
+
});
|
|
34
|
+
test("Conditional Panels", async () => {
|
|
35
|
+
const handle = { current: null };
|
|
36
|
+
const { getByText } = render(React.createElement("div", { style: { width: 500 } },
|
|
37
|
+
React.createElement(ConditionalPanel, { handle: handle })));
|
|
38
|
+
await waitForMeasurement(handle.current);
|
|
39
|
+
await expectTemplate(handle.current, "244px 10px 244px");
|
|
40
|
+
getByText("Expand").click();
|
|
41
|
+
await expectTemplate(handle.current, "236.953125px 10px 141.046875px 10px 100px");
|
|
42
|
+
getByText("Close").click();
|
|
43
|
+
await expectTemplate(handle.current, "236.96875px 10px 251.03125px");
|
|
44
|
+
});
|
|
45
|
+
test("Dynamic constraints", async () => {
|
|
46
|
+
const handle = { current: null };
|
|
47
|
+
const { getByText } = render(React.createElement("div", { style: { width: 1000 } },
|
|
48
|
+
React.createElement(DynamicConstraints, { handle: handle })));
|
|
49
|
+
await waitForMeasurement(handle.current);
|
|
50
|
+
await expectTemplate(handle.current, "100px 10px 178px 10px 700px");
|
|
51
|
+
getByText("Toggle Custom").click();
|
|
52
|
+
await expectTemplate(handle.current, "500px 10px 178px 10px 300px");
|
|
53
|
+
getByText("Toggle Custom").click();
|
|
54
|
+
await expectTemplate(handle.current, "400px 10px 178px 10px 400px");
|
|
55
|
+
});
|
|
56
|
+
describe("Autosave", () => {
|
|
57
|
+
test("localStorage", async () => {
|
|
58
|
+
localStorage.clear();
|
|
59
|
+
const handle = { current: null };
|
|
60
|
+
render(React.createElement("div", { style: { width: 500 } },
|
|
61
|
+
React.createElement(Autosave, { handle: handle })));
|
|
62
|
+
await waitForMeasurement(handle.current);
|
|
63
|
+
await expectTemplate(handle.current, "244px 10px 244px");
|
|
64
|
+
await dragHandle({ delta: 100 });
|
|
65
|
+
await expectTemplate(handle.current, "342px 10px 146px");
|
|
66
|
+
await waitForCondition(() => Boolean(localStorage.getItem("autosave-example")));
|
|
67
|
+
const obj = JSON.parse(localStorage.getItem("autosave-example") || "{}");
|
|
68
|
+
expect(obj.items).toMatchSnapshot();
|
|
69
|
+
});
|
|
70
|
+
test("callback", async () => {
|
|
71
|
+
localStorage.clear();
|
|
72
|
+
const handle = { current: null };
|
|
73
|
+
const spy = vi.fn();
|
|
74
|
+
render(React.createElement("div", { style: { width: 500 } },
|
|
75
|
+
React.createElement(AutosaveCollapsible, { handle: handle, onCollapseChange: spy })));
|
|
76
|
+
await dragHandle({ delta: -200 });
|
|
77
|
+
await expectTemplate(handle.current, "100px 10px 388px");
|
|
78
|
+
expect(spy).toHaveBeenCalledWith(true);
|
|
79
|
+
cleanup();
|
|
80
|
+
render(React.createElement("div", { style: { width: 500 } },
|
|
81
|
+
React.createElement(AutosaveCollapsible, { handle: handle, onCollapseChange: spy })));
|
|
82
|
+
await expectTemplate(handle.current, "100px 10px 388px");
|
|
83
|
+
await dragHandle({ delta: 200 });
|
|
84
|
+
expect(spy).toHaveBeenCalledWith(false);
|
|
85
|
+
});
|
|
86
|
+
test("cookie", async () => {
|
|
87
|
+
// clear cookies
|
|
88
|
+
document.cookie = "test=; expires=Thu, 01 Jan 1970 00:00:00 GMT";
|
|
89
|
+
const handle = { current: null };
|
|
90
|
+
render(React.createElement("div", { style: { width: 500 } },
|
|
91
|
+
React.createElement(PanelGroup, { handle: handle, orientation: "horizontal", autosaveId: "autosave-cookie-example", autosaveStrategy: "cookie", style: { height: 200 } },
|
|
92
|
+
React.createElement(Panel, { id: "panel1" }, "1"),
|
|
93
|
+
React.createElement(PanelResizer, { id: "resizer1", size: "10px", style: { background: "red" } }),
|
|
94
|
+
React.createElement(Panel, { id: "panel2" }, "2"))));
|
|
95
|
+
await waitForMeasurement(handle.current);
|
|
96
|
+
await expectTemplate(handle.current, "245px 10px 245px");
|
|
97
|
+
await dragHandle({ delta: 100 });
|
|
98
|
+
await expectTemplate(handle.current, "343px 10px 147px");
|
|
99
|
+
await waitForCondition(() => document.cookie.includes("autosave-cookie-example"));
|
|
100
|
+
expect(document.cookie).toMatchSnapshot();
|
|
101
|
+
const snapshot = Cookies.get("autosave-cookie-example");
|
|
102
|
+
cleanup();
|
|
103
|
+
render(React.createElement("div", { style: { width: 500 } },
|
|
104
|
+
React.createElement(PanelGroup, { handle: handle, orientation: "horizontal", autosaveId: "autosave-cookie-example", autosaveStrategy: "cookie", style: { height: 200 }, snapshot: snapshot ? JSON.parse(snapshot) : undefined },
|
|
105
|
+
React.createElement(Panel, { id: "panel1" }, "1"),
|
|
106
|
+
React.createElement(PanelResizer, { id: "resizer1", size: "10px", style: { background: "red" } }),
|
|
107
|
+
React.createElement(Panel, { id: "panel2" }, "2"))));
|
|
108
|
+
await expectTemplate(handle.current, "343px 10px 147px");
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
test("Keyboard interactions with collapsed panels", async () => {
|
|
112
|
+
const handle = { current: null };
|
|
113
|
+
const rightHandle = { current: null };
|
|
114
|
+
render(React.createElement("div", { style: { width: 500 } },
|
|
115
|
+
React.createElement(Collapsible, { handle: handle, rightPanelHandle: rightHandle })));
|
|
116
|
+
await waitForMeasurement(handle.current);
|
|
117
|
+
await expectTemplate(handle.current, "209px 10px 209px 10px 60px");
|
|
118
|
+
const resizer2 = document.getElementById("resizer-2");
|
|
119
|
+
fireEvent.keyDown(resizer2, { key: "Enter" });
|
|
120
|
+
await expectTemplate(handle.current, "209px 10px 168.953125px 10px 100.03125px");
|
|
121
|
+
fireEvent.keyDown(resizer2, { key: "ArrowLeft" });
|
|
122
|
+
fireEvent.keyDown(resizer2, { key: "ArrowLeft" });
|
|
123
|
+
fireEvent.keyDown(resizer2, { key: "ArrowLeft" });
|
|
124
|
+
fireEvent.keyDown(resizer2, { key: "ArrowLeft" });
|
|
125
|
+
await expectTemplate(handle.current, "209px 10px 164.96875px 10px 104.03125px");
|
|
126
|
+
fireEvent.keyDown(resizer2, { key: "ArrowLeft", shiftKey: true });
|
|
127
|
+
await expectTemplate(handle.current, "209px 10px 149.96875px 10px 119.03125px");
|
|
128
|
+
fireEvent.keyDown(resizer2, { key: "Enter" });
|
|
129
|
+
await expectTemplate(handle.current, "209px 10px 209px 10px 60px");
|
|
130
|
+
fireEvent.keyDown(resizer2, { key: "Enter" });
|
|
131
|
+
await expectTemplate(handle.current, "209px 10px 149.96875px 10px 119.03125px");
|
|
132
|
+
});
|
|
133
|
+
describe("imperative panel API", async () => {
|
|
134
|
+
test("panel group", async () => {
|
|
135
|
+
const handle = { current: null };
|
|
136
|
+
render(React.createElement("div", { style: { width: 500 } },
|
|
137
|
+
React.createElement(Collapsible, { handle: handle })));
|
|
138
|
+
await waitForMeasurement(handle.current);
|
|
139
|
+
expect(handle.current.getPercentageSizes()).toMatchInlineSnapshot(`
|
|
140
|
+
[
|
|
141
|
+
0.5,
|
|
142
|
+
0.020080321285140562,
|
|
143
|
+
0.5,
|
|
144
|
+
0.020080321285140562,
|
|
145
|
+
0.12048192771084337,
|
|
146
|
+
]
|
|
147
|
+
`);
|
|
148
|
+
expect(handle.current.getPixelSizes()).toMatchInlineSnapshot(`
|
|
149
|
+
[
|
|
150
|
+
209,
|
|
151
|
+
10,
|
|
152
|
+
209,
|
|
153
|
+
10,
|
|
154
|
+
60,
|
|
155
|
+
]
|
|
156
|
+
`);
|
|
157
|
+
await expectTemplate(handle.current, "209px 10px 209px 10px 60px");
|
|
158
|
+
});
|
|
159
|
+
test("panel", async () => {
|
|
160
|
+
const handle = { current: null };
|
|
161
|
+
const rightHandle = { current: null };
|
|
162
|
+
const leftHandle = { current: null };
|
|
163
|
+
render(React.createElement("div", { style: { width: 500 } },
|
|
164
|
+
React.createElement(Collapsible, { handle: handle, leftPanelHandle: leftHandle, rightPanelHandle: rightHandle })));
|
|
165
|
+
await waitForMeasurement(handle.current);
|
|
166
|
+
expect(rightHandle.current.isCollapsed()).toBe(true);
|
|
167
|
+
expect(rightHandle.current.isExpanded()).toBe(false);
|
|
168
|
+
rightHandle.current.expand();
|
|
169
|
+
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
170
|
+
expect(rightHandle.current.isCollapsed()).toBe(false);
|
|
171
|
+
expect(rightHandle.current.isExpanded()).toBe(true);
|
|
172
|
+
rightHandle.current.collapse();
|
|
173
|
+
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
174
|
+
expect(rightHandle.current.isCollapsed()).toBe(true);
|
|
175
|
+
expect(rightHandle.current.isExpanded()).toBe(false);
|
|
176
|
+
// Test the non controlled version
|
|
177
|
+
expect(leftHandle.current.isCollapsed()).toBe(false);
|
|
178
|
+
expect(leftHandle.current.isExpanded()).toBe(true);
|
|
179
|
+
leftHandle.current.collapse();
|
|
180
|
+
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
181
|
+
expect(leftHandle.current.isCollapsed()).toBe(true);
|
|
182
|
+
expect(leftHandle.current.isExpanded()).toBe(false);
|
|
183
|
+
expect(rightHandle.current.getPercentageSize()).toBe(leftHandle.current.getPercentageSize());
|
|
184
|
+
expect(rightHandle.current.getPixelSize()).toBe(leftHandle.current.getPixelSize());
|
|
185
|
+
leftHandle.current.expand();
|
|
186
|
+
await new Promise((resolve) => setTimeout(resolve, 5000));
|
|
187
|
+
expect(leftHandle.current.isCollapsed()).toBe(false);
|
|
188
|
+
expect(leftHandle.current.isExpanded()).toBe(true);
|
|
189
|
+
});
|
|
190
|
+
});
|
|
191
|
+
//# sourceMappingURL=ReactWindowSplitter.test.js.map
|