{"version":3,"file":"FloatingWindow.cjs","names":["getDefaultZIndex","factory","useProps","useStyles","FloatingWindowProvider","OptionalPortal","Paper","classes","FloatingWindowResizeHandle"],"sources":["../../../src/components/FloatingWindow/FloatingWindow.tsx"],"sourcesContent":["import { useImperativeHandle, useRef } from 'react';\nimport {\n  SetFloatingWindowPosition,\n  useFloatingWindow,\n  UseFloatingWindowOptions,\n  useMergedRef,\n} from '@mantine/hooks';\nimport {\n  BoxProps,\n  ElementProps,\n  factory,\n  Factory,\n  getDefaultZIndex,\n  StylesApiProps,\n  useProps,\n  useStyles,\n} from '../../core';\nimport { Paper, PaperBaseProps } from '../Paper';\nimport { OptionalPortal, PortalProps } from '../Portal';\nimport {\n  FloatingWindowDimensions,\n  FloatingWindowProvider,\n  FloatingWindowSize,\n} from './FloatingWindow.context';\nimport { FloatingWindowResizeHandle } from './FloatingWindowResizeHandle';\nimport classes from './FloatingWindow.module.css';\n\nexport type FloatingWindowStylesNames = 'root';\n\nexport interface FloatingWindowProps\n  extends\n    UseFloatingWindowOptions,\n    PaperBaseProps,\n    BoxProps,\n    StylesApiProps<FloatingWindowFactory>,\n    ElementProps<'div', keyof UseFloatingWindowOptions> {\n  /** Assigns ref to set position programmatically */\n  setPositionRef?: React.RefObject<SetFloatingWindowPosition | null>;\n\n  /** Determines whether the window should be rendered inside `Portal` @default true */\n  withinPortal?: boolean;\n\n  /** Props passed down to `Portal` component */\n  portalProps?: Omit<PortalProps, 'children'>;\n\n  /** `z-index` of the root element @default 400 */\n  zIndex?: React.CSSProperties['zIndex'];\n\n  /** Dimensions configuration for resizable floating window */\n  dimensions?: FloatingWindowDimensions;\n\n  /** Called when the window is resized with `FloatingWindow.ResizeHandle` */\n  onSizeChange?: (size: FloatingWindowSize) => void;\n\n  /** Called when the resize with `FloatingWindow.ResizeHandle` starts. Not called for keyboard resize. */\n  onResizeStart?: () => void;\n\n  /** Called when the resize with `FloatingWindow.ResizeHandle` stops. Not called for keyboard resize. */\n  onResizeEnd?: () => void;\n}\n\nexport type FloatingWindowFactory = Factory<{\n  props: FloatingWindowProps;\n  ref: HTMLDivElement;\n  stylesNames: FloatingWindowStylesNames;\n  staticComponents: {\n    ResizeHandle: typeof FloatingWindowResizeHandle;\n  };\n}>;\n\nconst defaultProps = {\n  constrainToViewport: true,\n  zIndex: getDefaultZIndex('overlay'),\n} satisfies Partial<FloatingWindowProps>;\n\nfunction clampDimension(value: number, min?: number, max?: number): number {\n  let v = value;\n  if (min != null) {\n    v = Math.max(v, min);\n  }\n  if (max != null) {\n    v = Math.min(v, max);\n  }\n  return v;\n}\n\nexport const FloatingWindow = factory<FloatingWindowFactory>((_props) => {\n  const props = useProps('FloatingWindow', defaultProps, _props);\n  const {\n    classNames,\n    className,\n    style,\n    styles,\n    unstyled,\n    vars,\n    mod,\n    enabled,\n    constrainToViewport,\n    constrainOffset,\n    dragHandleSelector,\n    excludeDragHandleSelector,\n    axis,\n    initialPosition,\n    onPositionChange,\n    onDragStart,\n    onDragEnd,\n    setPositionRef,\n    withinPortal,\n    portalProps,\n    zIndex,\n    dimensions,\n    onSizeChange,\n    onResizeStart,\n    onResizeEnd,\n    ref,\n    ...others\n  } = props;\n\n  const rootRef = useRef<HTMLDivElement>(null);\n\n  const getStyles = useStyles<FloatingWindowFactory>({\n    name: 'FloatingWindow',\n    classes,\n    props,\n    className,\n    style,\n    classNames,\n    styles,\n    unstyled,\n    vars,\n  });\n\n  const floatingWindow = useFloatingWindow({\n    enabled,\n    constrainToViewport,\n    constrainOffset,\n    dragHandleSelector,\n    excludeDragHandleSelector,\n    axis,\n    initialPosition,\n    onPositionChange,\n    onDragStart,\n    onDragEnd,\n  });\n\n  useImperativeHandle(setPositionRef, () => floatingWindow.setPosition, [\n    floatingWindow.setPosition,\n  ]);\n\n  const cssVars: Record<string, string | undefined> = {\n    '--floating-window-z-index': zIndex.toString(),\n  };\n\n  if (dimensions?.initialWidth != null) {\n    cssVars['--floating-window-width'] =\n      `${clampDimension(dimensions.initialWidth, dimensions.minWidth, dimensions.maxWidth)}px`;\n  }\n\n  if (dimensions?.initialHeight != null) {\n    cssVars['--floating-window-height'] =\n      `${clampDimension(dimensions.initialHeight, dimensions.minHeight, dimensions.maxHeight)}px`;\n  }\n\n  return (\n    <FloatingWindowProvider\n      value={{\n        rootRef,\n        dimensions,\n        constrainToViewport,\n        constrainOffset,\n        onSizeChange,\n        onResizeStart,\n        onResizeEnd,\n      }}\n    >\n      <OptionalPortal withinPortal={withinPortal} {...portalProps}>\n        <Paper\n          ref={useMergedRef(ref, floatingWindow.ref, rootRef)}\n          mod={[{ dragging: floatingWindow.isDragging }, mod]}\n          {...getStyles('root')}\n          {...others}\n          __vars={cssVars}\n        />\n      </OptionalPortal>\n    </FloatingWindowProvider>\n  );\n});\n\nFloatingWindow.displayName = '@mantine/core/FloatingWindow';\nFloatingWindow.classes = classes;\nFloatingWindow.ResizeHandle = FloatingWindowResizeHandle;\n"],"mappings":";;;;;;;;;;;;;;AAsEA,MAAM,eAAe;CACnB,qBAAqB;CACrB,QAAQA,4BAAAA,iBAAiB,SAAS;AACpC;AAEA,SAAS,eAAe,OAAe,KAAc,KAAsB;CACzE,IAAI,IAAI;CACR,IAAI,OAAO,MACT,IAAI,KAAK,IAAI,GAAG,GAAG;CAErB,IAAI,OAAO,MACT,IAAI,KAAK,IAAI,GAAG,GAAG;CAErB,OAAO;AACT;AAEA,MAAa,iBAAiBC,gBAAAA,SAAgC,WAAW;CACvE,MAAM,QAAQC,kBAAAA,SAAS,kBAAkB,cAAc,MAAM;CAC7D,MAAM,EACJ,YACA,WACA,OACA,QACA,UACA,MACA,KACA,SACA,qBACA,iBACA,oBACA,2BACA,MACA,iBACA,kBACA,aACA,WACA,gBACA,cACA,aACA,QACA,YACA,cACA,eACA,aACA,KACA,GAAG,WACD;CAEJ,MAAM,WAAA,GAAA,MAAA,OAAA,CAAiC,IAAI;CAE3C,MAAM,YAAYC,mBAAAA,UAAiC;EACjD,MAAM;EACN,SAAA,8BAAA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CAAC;CAED,MAAM,kBAAA,GAAA,eAAA,kBAAA,CAAmC;EACvC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CAAC;CAED,CAAA,GAAA,MAAA,oBAAA,CAAoB,sBAAsB,eAAe,aAAa,CACpE,eAAe,WACjB,CAAC;CAED,MAAM,UAA8C,EAClD,6BAA6B,OAAO,SAAS,EAC/C;CAEA,IAAI,YAAY,gBAAgB,MAC9B,QAAQ,6BACN,GAAG,eAAe,WAAW,cAAc,WAAW,UAAU,WAAW,QAAQ,EAAE;CAGzF,IAAI,YAAY,iBAAiB,MAC/B,QAAQ,8BACN,GAAG,eAAe,WAAW,eAAe,WAAW,WAAW,WAAW,SAAS,EAAE;CAG5F,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,+BAAAA,wBAAD;EACE,OAAO;GACL;GACA;GACA;GACA;GACA;GACA;GACA;EACF;YAEA,iBAAA,GAAA,kBAAA,IAAA,CAACC,uBAAAA,gBAAD;GAA8B;GAAc,GAAI;aAC9C,iBAAA,GAAA,kBAAA,IAAA,CAACC,cAAAA,OAAD;IACE,MAAA,GAAA,eAAA,aAAA,CAAkB,KAAK,eAAe,KAAK,OAAO;IAClD,KAAK,CAAC,EAAE,UAAU,eAAe,WAAW,GAAG,GAAG;IAClD,GAAI,UAAU,MAAM;IACpB,GAAI;IACJ,QAAQ;GACT,CAAA;EACa,CAAA;CACM,CAAA;AAE5B,CAAC;AAED,eAAe,cAAc;AAC7B,eAAe,UAAUC,8BAAAA;AACzB,eAAe,eAAeC,mCAAAA"}