-
-
Notifications
You must be signed in to change notification settings - Fork 144
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
how can I set the default size in pixels instead of percentage? #141
Comments
A more verbose answer, copied from #114: Here is a way you could basically implement this in your application code:
const MIN_SIZE_IN_PIXELS = 100;
const [minSize, setMinSize] = useState(10);
useLayoutEffect(() => {
const panelGroup = document.querySelector('[data-panel-group-id="group"]');
const resizeHandles = document.querySelectorAll(
"[data-panel-resize-handle-id]"
);
const observer = new ResizeObserver(() => {
let height = panelGroup.offsetHeight;
resizeHandles.forEach((resizeHandle) => {
height -= resizeHandle.offsetHeight;
});
// Minimum size in pixels is a percentage of the PanelGroup's height,
// less the (fixed) height of the resize handles.
setMinSize((MIN_SIZE_IN_PIXELS / height) * 100);
});
observer.observe(panelGroup);
resizeHandles.forEach((resizeHandle) => {
observer.observe(resizeHandle);
});
return () => {
observer.disconnect();
};
}, []); Here my reasoning for not wanting to add it to the NPM package directly:
|
Regarding that, why not offering something like that: <PanelGroup>
{(w, h) => (
<Panel defaultSize={w(300)}>Hello, Panel</Panel>
}
</PanelGroup>
In this case it's probably easy to detect if the children is a function or not. And if not, just behave as normal.
I am also wondering if |
I think I have a possible solution for the pixel-based constraints; see #176 ❤️ → ☕ givebrian.coffee |
Relates to issues #46, #47, #51, #78, #114, #128, #141 This PR adds a new prop (`units`) to `PanelGroup`. This prop defaults to "percentage" but can be set to "pixels" for static, pixel based layout constraints. This can be used to add enable pixel-based min/max and default size values, e.g.: ```tsx <PanelGroup direction="horizontal" units="pixels"> {/* Will be constrained to 100-200 pixels (assuming group is large enough to permit this) */} <Panel minSize={100} maxSize={200} /> <PanelResizeHandle /> <Panel /> <PanelResizeHandle /> <Panel /> </PanelGroup> ``` Imperative API methods are also able to work with either pixels or percentages now. They default to whatever units the group has been configured to use, but can be overridden with an additional, optional parameter, e.g. ```ts panelRef.resize(100, "pixels"); panelGroupRef.setLayout([25, 50, 25], "percentages"); // Works for getters too, e.g. const percentage = panelRef.getSize("percentages"); const pixels = panelRef.getSize("pixels"); const layout = panelGroupRef.getLayout("pixels"); ``` See the docs for more: [.../examples/pixel-based-layouts](https://react-resizable-panels-git-panelgroup-layout-val-2424f0-bvaughn.vercel.app/examples/pixel-based-layouts)
is this supported or do I need to calc the percentage myself?
nvm I just do myself
if anyone wondering it is
({pixel size you want} / window.innerWidth) * 100
The text was updated successfully, but these errors were encountered: