UNPKG

@mantine/core

Version:

React components library focused on usability, accessibility and developer experience

85 lines (84 loc) 3.33 kB
"use client"; import { getDefaultZIndex } from "../../core/utils/get-default-z-index/get-default-z-index.mjs"; import { useProps } from "../../core/MantineProvider/use-props/use-props.mjs"; import { useStyles } from "../../core/styles-api/use-styles/use-styles.mjs"; import { factory } from "../../core/factory/factory.mjs"; import { Paper } from "../Paper/Paper.mjs"; import { OptionalPortal } from "../Portal/OptionalPortal.mjs"; import { FloatingWindowProvider } from "./FloatingWindow.context.mjs"; import { FloatingWindowResizeHandle } from "./FloatingWindowResizeHandle.mjs"; import FloatingWindow_module_default from "./FloatingWindow.module.mjs"; import { useImperativeHandle, useRef } from "react"; import { useFloatingWindow, useMergedRef } from "@mantine/hooks"; import { jsx } from "react/jsx-runtime"; //#region packages/@mantine/core/src/components/FloatingWindow/FloatingWindow.tsx const defaultProps = { constrainToViewport: true, zIndex: getDefaultZIndex("overlay") }; function clampDimension(value, min, max) { let v = value; if (min != null) v = Math.max(v, min); if (max != null) v = Math.min(v, max); return v; } const FloatingWindow = factory((_props) => { const props = useProps("FloatingWindow", defaultProps, _props); const { classNames, className, style, styles, unstyled, vars, mod, enabled, constrainToViewport, constrainOffset, dragHandleSelector, excludeDragHandleSelector, axis, initialPosition, onPositionChange, onDragStart, onDragEnd, setPositionRef, withinPortal, portalProps, zIndex, dimensions, onSizeChange, onResizeStart, onResizeEnd, ref, ...others } = props; const rootRef = useRef(null); const getStyles = useStyles({ name: "FloatingWindow", classes: FloatingWindow_module_default, props, className, style, classNames, styles, unstyled, vars }); const floatingWindow = useFloatingWindow({ enabled, constrainToViewport, constrainOffset, dragHandleSelector, excludeDragHandleSelector, axis, initialPosition, onPositionChange, onDragStart, onDragEnd }); useImperativeHandle(setPositionRef, () => floatingWindow.setPosition, [floatingWindow.setPosition]); const cssVars = { "--floating-window-z-index": zIndex.toString() }; if (dimensions?.initialWidth != null) cssVars["--floating-window-width"] = `${clampDimension(dimensions.initialWidth, dimensions.minWidth, dimensions.maxWidth)}px`; if (dimensions?.initialHeight != null) cssVars["--floating-window-height"] = `${clampDimension(dimensions.initialHeight, dimensions.minHeight, dimensions.maxHeight)}px`; return /* @__PURE__ */ jsx(FloatingWindowProvider, { value: { rootRef, dimensions, constrainToViewport, constrainOffset, onSizeChange, onResizeStart, onResizeEnd }, children: /* @__PURE__ */ jsx(OptionalPortal, { withinPortal, ...portalProps, children: /* @__PURE__ */ jsx(Paper, { ref: useMergedRef(ref, floatingWindow.ref, rootRef), mod: [{ dragging: floatingWindow.isDragging }, mod], ...getStyles("root"), ...others, __vars: cssVars }) }) }); }); FloatingWindow.displayName = "@mantine/core/FloatingWindow"; FloatingWindow.classes = FloatingWindow_module_default; FloatingWindow.ResizeHandle = FloatingWindowResizeHandle; //#endregion export { FloatingWindow }; //# sourceMappingURL=FloatingWindow.mjs.map