{"version":3,"file":"index.cjs","sources":["../src/Pane.tsx","../src/Resizer.tsx","../src/SplitPane.tsx"],"sourcesContent":["import type {\n  CSSProperties,\n  FunctionComponent,\n  PropsWithChildren,\n} from 'react';\n\n/**\n * @public\n */\nexport type PaneProps = PropsWithChildren<{\n  className?: string;\n  size?: number;\n  split?: 'vertical' | 'horizontal';\n  style?: CSSProperties;\n  eleRef?: (el: HTMLDivElement) => void;\n}>;\n\n/**\n * @public\n */\nexport const Pane: FunctionComponent<PaneProps> = function Pane(props) {\n  const { children, className, split, style: styleProps, size, eleRef } = props;\n\n  let style: CSSProperties = {\n    flex: 1,\n    position: 'relative',\n    outline: 'none',\n  };\n\n  if (size !== undefined) {\n    if (split === 'vertical') {\n      style.width = size;\n    } else {\n      style.height = size;\n      style.display = 'flex';\n    }\n    style.flex = 'none';\n  }\n\n  style = { ...style, ...styleProps };\n\n  const classes = ['Pane', split, className].filter(Boolean).join(' ');\n  return (\n    <div role=\"region\" ref={eleRef} className={classes} style={style}>\n      {children}\n    </div>\n  );\n};\n","import type { CSSProperties, FunctionComponent } from 'react';\n\nexport const RESIZER_DEFAULT_CLASSNAME = 'Resizer';\n\ninterface ResizerProps {\n  className?: string;\n  onClick?: (event: MouseEvent) => void;\n  onDoubleClick?: (event: MouseEvent) => void;\n  onMouseDown: (event: MouseEvent) => void;\n  onTouchEnd: (event: TouchEvent) => void;\n  onTouchStart: (event: TouchEvent) => void;\n  resizerClassName?: string;\n  split: 'vertical' | 'horizontal';\n  style: CSSProperties;\n}\n\nexport const Resizer: FunctionComponent<ResizerProps> = function Resizer(\n  props\n) {\n  const {\n    className = RESIZER_DEFAULT_CLASSNAME,\n    onClick,\n    onDoubleClick,\n    onMouseDown,\n    onTouchEnd,\n    onTouchStart,\n    resizerClassName,\n    split,\n    style,\n  } = props;\n\n  const classes = [resizerClassName, split, className]\n    .filter(Boolean)\n    .join(' ');\n\n  return (\n    <span\n      role=\"separator\"\n      className={classes}\n      style={style}\n      onMouseDown={(event) => onMouseDown(event.nativeEvent)}\n      onTouchStart={(event) => {\n        event.preventDefault();\n        onTouchStart(event.nativeEvent);\n      }}\n      onTouchEnd={(event) => {\n        event.preventDefault();\n        onTouchEnd(event.nativeEvent);\n      }}\n      onClick={(event) => {\n        if (onClick) {\n          event.preventDefault();\n          onClick(event.nativeEvent);\n        }\n      }}\n      onDoubleClick={(event) => {\n        if (onDoubleClick) {\n          event.preventDefault();\n          onDoubleClick(event.nativeEvent);\n        }\n      }}\n    />\n  );\n};\n","import { Children, Component, CSSProperties, ReactNode } from 'react';\nimport { Pane } from './Pane.js';\nimport { Resizer, RESIZER_DEFAULT_CLASSNAME } from './Resizer.js';\n\nconst BASE_STYLES: CSSProperties = {\n  display: 'flex',\n  flex: 1,\n  height: '100%',\n  position: 'absolute',\n  outline: 'none',\n  overflow: 'hidden',\n  MozUserSelect: 'text',\n  WebkitUserSelect: 'text',\n  msUserSelect: 'text',\n  userSelect: 'text',\n};\n\nconst VERTICAL_STYLES: CSSProperties = {\n  ...BASE_STYLES,\n  flexDirection: 'row',\n  left: 0,\n  right: 0,\n};\n\nconst HORIZONTAL_STYLES: CSSProperties = {\n  ...BASE_STYLES,\n  bottom: 0,\n  flexDirection: 'column',\n  minHeight: '100%',\n  top: 0,\n  width: '100%',\n};\n\nconst EMPTY_STYLES: CSSProperties = {};\n\n/**\n * @public\n */\nexport interface SplitPaneProps {\n  allowResize?: boolean;\n  className?: string;\n  primary?: 'first' | 'second';\n  minSize?: number;\n  maxSize?: number;\n  defaultSize?: number;\n  size?: number;\n  split?: 'vertical' | 'horizontal';\n  onDragStarted?: () => void;\n  onDragFinished?: (newSize: number) => void;\n  onChange?: (newSize: number) => void;\n  onResizerClick?: (event: MouseEvent) => void;\n  onResizerDoubleClick?: (event: MouseEvent) => void;\n  style?: CSSProperties;\n  resizerStyle?: CSSProperties;\n  paneStyle?: CSSProperties;\n  pane1Style?: CSSProperties;\n  pane2Style?: CSSProperties;\n  paneClassName?: string;\n  pane1ClassName?: string;\n  pane2ClassName?: string;\n  resizerClassName?: string;\n  step?: number;\n  children?: ReactNode;\n}\n\n/**\n * @public\n */\nexport interface SplitPaneState {\n  active: boolean;\n  resized: boolean;\n\n  pane1Size?: number;\n  pane2Size?: number;\n\n  position?: number;\n  draggedSize?: number;\n\n  instanceProps: { size?: number };\n}\n\n/**\n * @public\n */\nexport type MinimalTouchEvent = MouseEvent & {\n  touches: Array<{ clientX: number; clientY: number }>;\n};\n\n/**\n * @public\n */\nexport class SplitPane extends Component<SplitPaneProps, SplitPaneState> {\n  static defaultProps = {\n    allowResize: true,\n    minSize: 50,\n    primary: 'first',\n    split: 'vertical',\n    paneClassName: '',\n    pane1ClassName: '',\n    pane2ClassName: '',\n  };\n\n  pane1: HTMLDivElement | null = null;\n  pane2: HTMLDivElement | null = null;\n  splitPane: HTMLDivElement | null = null;\n\n  constructor(props: SplitPaneProps) {\n    super(props);\n\n    this.onMouseDown = this.onMouseDown.bind(this);\n    this.onTouchStart = this.onTouchStart.bind(this);\n    this.onMouseMove = this.onMouseMove.bind(this);\n    this.onTouchMove = this.onTouchMove.bind(this);\n    this.onMouseUp = this.onMouseUp.bind(this);\n\n    // order of setting panel sizes.\n    // 1. size\n    // 2. getDefaultSize(defaultSize, minsize, maxSize)\n\n    const { size, defaultSize, minSize, maxSize, primary } = props;\n\n    const initialSize =\n      size !== undefined\n        ? size\n        : getDefaultSize(defaultSize, minSize, maxSize, undefined);\n\n    this.state = {\n      active: false,\n      resized: false,\n      pane1Size: primary === 'first' ? initialSize : undefined,\n      pane2Size: primary === 'second' ? initialSize : undefined,\n\n      // these are props that are needed in static functions. ie: gDSFP\n      instanceProps: {\n        size,\n      },\n    };\n  }\n\n  componentDidMount() {\n    document.addEventListener('mouseup', this.onMouseUp);\n    document.addEventListener('mousemove', this.onMouseMove);\n    document.addEventListener('touchmove', this.onTouchMove);\n    this.setState(SplitPane.getSizeUpdate(this.props, this.state));\n  }\n\n  static getDerivedStateFromProps(\n    nextProps: SplitPaneProps,\n    prevState: SplitPaneState\n  ) {\n    return SplitPane.getSizeUpdate(nextProps, prevState);\n  }\n\n  componentWillUnmount() {\n    document.removeEventListener('mouseup', this.onMouseUp);\n    document.removeEventListener('mousemove', this.onMouseMove);\n    document.removeEventListener('touchmove', this.onTouchMove);\n  }\n\n  onMouseDown(event: MouseEvent) {\n    this.onTouchStart({\n      ...event,\n      touches: [{ clientX: event.clientX, clientY: event.clientY }],\n    });\n  }\n\n  onTouchStart(event: MinimalTouchEvent | TouchEvent) {\n    const { allowResize, onDragStarted, split } = this.props;\n    if (allowResize) {\n      unFocus(document, window);\n      const position =\n        split === 'vertical'\n          ? event.touches[0].clientX\n          : event.touches[0].clientY;\n\n      if (typeof onDragStarted === 'function') {\n        onDragStarted();\n      }\n      this.setState({\n        active: true,\n        position,\n      });\n    }\n  }\n\n  onMouseMove(event: MouseEvent) {\n    const eventWithTouches = Object.assign({}, event, {\n      touches: [{ clientX: event.clientX, clientY: event.clientY }],\n    });\n    this.onTouchMove(eventWithTouches);\n  }\n\n  onTouchMove(event: MinimalTouchEvent | TouchEvent) {\n    if (!this.state.active || !this.props.allowResize) {\n      return;\n    }\n\n    const { position = 0 } = this.state;\n    const {\n      maxSize,\n      minSize = SplitPane.defaultProps.minSize,\n      onChange,\n      split = SplitPane.defaultProps.split,\n      step,\n    } = this.props;\n\n    unFocus(document, window);\n    const isPrimaryFirst = this.props.primary === 'first';\n    const ref = isPrimaryFirst ? this.pane1 : this.pane2;\n    const ref2 = isPrimaryFirst ? this.pane2 : this.pane1;\n\n    if (!ref || !ref2 || !ref.getBoundingClientRect) {\n      return;\n    }\n\n    const node = ref;\n    const node2 = ref2;\n\n    const width = node.getBoundingClientRect().width;\n    const height = node.getBoundingClientRect().height;\n    const current =\n      split === 'vertical'\n        ? event.touches[0].clientX\n        : event.touches[0].clientY;\n    const size = split === 'vertical' ? width : height;\n\n    let positionDelta = position - current;\n    if (step) {\n      if (Math.abs(positionDelta) < step) {\n        return;\n      }\n      // Integer division\n      positionDelta = ~~(positionDelta / step) * step;\n    }\n    let sizeDelta = isPrimaryFirst ? positionDelta : -positionDelta;\n\n    const pane1Order = parseInt(window.getComputedStyle(node).order);\n    const pane2Order = parseInt(window.getComputedStyle(node2).order);\n    if (pane1Order > pane2Order) {\n      sizeDelta = -sizeDelta;\n    }\n\n    let newMaxSize = maxSize;\n    if (this.splitPane && maxSize !== undefined && maxSize <= 0) {\n      if (split === 'vertical') {\n        newMaxSize = this.splitPane.getBoundingClientRect().width + maxSize;\n      } else {\n        newMaxSize = this.splitPane.getBoundingClientRect().height + maxSize;\n      }\n    }\n\n    let newSize = size - sizeDelta;\n    const newPosition = position - positionDelta;\n\n    if (minSize && newSize < minSize) {\n      newSize = minSize;\n    } else if (newMaxSize !== undefined && newSize > newMaxSize) {\n      newSize = newMaxSize;\n    } else {\n      this.setState({\n        position: newPosition,\n        resized: true,\n      });\n    }\n\n    if (onChange) onChange(newSize);\n\n    const sizeState = isPrimaryFirst\n      ? { pane1Size: newSize, pane2Size: undefined }\n      : { pane2Size: newSize, pane1Size: undefined };\n\n    this.setState({ draggedSize: newSize, ...sizeState });\n  }\n\n  onMouseUp() {\n    if (!this.state.active || !this.props.allowResize) {\n      return;\n    }\n\n    const { onDragFinished } = this.props;\n    const { draggedSize } = this.state;\n\n    if (\n      typeof draggedSize !== 'undefined' &&\n      typeof onDragFinished === 'function'\n    ) {\n      onDragFinished(draggedSize);\n    }\n\n    this.setState({ active: false });\n  }\n\n  // we have to check values since gDSFP is called on every render and more in StrictMode\n  static getSizeUpdate(props: SplitPaneProps, state: SplitPaneState) {\n    const { instanceProps } = state;\n\n    if (instanceProps.size === props.size && props.size !== undefined) {\n      return {};\n    }\n\n    const newSize =\n      props.size !== undefined\n        ? props.size\n        : getDefaultSize(\n            props.defaultSize,\n            props.minSize,\n            props.maxSize,\n            state.draggedSize\n          );\n\n    const isPrimaryFirst = props.primary === 'first';\n    const sizeState = isPrimaryFirst\n      ? { pane1Size: newSize, pane2Size: undefined }\n      : { pane2Size: newSize, pane1Size: undefined };\n\n    return {\n      ...sizeState,\n      ...(typeof props.size === 'undefined' ? {} : { draggedSize: newSize }),\n      instanceProps: { size: props.size },\n    };\n  }\n\n  render() {\n    const {\n      allowResize,\n      children,\n      className,\n      onResizerClick,\n      onResizerDoubleClick,\n      paneClassName,\n      pane1ClassName,\n      pane2ClassName,\n      paneStyle,\n      pane1Style: pane1StyleProps,\n      pane2Style: pane2StyleProps,\n      resizerClassName = RESIZER_DEFAULT_CLASSNAME,\n      resizerStyle,\n      split,\n      style: styleProps,\n    } = this.props;\n\n    const { pane1Size, pane2Size } = this.state;\n\n    const disabledClass = allowResize ? '' : 'disabled';\n    const resizerClassNamesIncludingDefault = resizerClassName\n      ? `${resizerClassName} ${RESIZER_DEFAULT_CLASSNAME}`\n      : resizerClassName;\n\n    const notNullChildren = removeNullChildren(children);\n\n    const baseStyles =\n      split === 'vertical' ? VERTICAL_STYLES : HORIZONTAL_STYLES;\n\n    const style: CSSProperties = styleProps\n      ? { ...baseStyles, ...styleProps }\n      : baseStyles;\n\n    const classes = ['SplitPane', className, split, disabledClass]\n      .filter(Boolean)\n      .join(' ');\n\n    const pane1Style = coalesceOnEmpty(\n      { ...paneStyle, ...pane1StyleProps },\n      EMPTY_STYLES\n    );\n    const pane2Style = coalesceOnEmpty(\n      { ...paneStyle, ...pane2StyleProps },\n      EMPTY_STYLES\n    );\n\n    const pane1Classes = ['Pane1', paneClassName, pane1ClassName].join(' ');\n    const pane2Classes = ['Pane2', paneClassName, pane2ClassName].join(' ');\n\n    return (\n      <div\n        data-testid=\"split-pane\"\n        className={classes}\n        style={style}\n        ref={(node) => {\n          this.splitPane = node;\n        }}\n      >\n        <Pane\n          className={pane1Classes}\n          key=\"pane1\"\n          eleRef={(node) => {\n            this.pane1 = node;\n          }}\n          size={pane1Size}\n          split={split}\n          style={pane1Style}\n        >\n          {notNullChildren[0]}\n        </Pane>\n        <Resizer\n          className={disabledClass}\n          onClick={onResizerClick}\n          onDoubleClick={onResizerDoubleClick}\n          onMouseDown={this.onMouseDown}\n          onTouchStart={this.onTouchStart}\n          onTouchEnd={this.onMouseUp}\n          key=\"resizer\"\n          resizerClassName={resizerClassNamesIncludingDefault}\n          split={split || 'vertical'}\n          style={resizerStyle || EMPTY_STYLES}\n        />\n        <Pane\n          className={pane2Classes}\n          key=\"pane2\"\n          eleRef={(node) => {\n            this.pane2 = node;\n          }}\n          size={pane2Size}\n          split={split}\n          style={pane2Style}\n        >\n          {notNullChildren[1]}\n        </Pane>\n      </div>\n    );\n  }\n}\n\nfunction unFocus(\n  document: (typeof globalThis)['document'],\n  window: (typeof globalThis)['window']\n) {\n  if (\n    'selection' in document &&\n    typeof document.selection === 'object' &&\n    document.selection &&\n    'empty' in document.selection &&\n    typeof document.selection.empty === 'function'\n  ) {\n    try {\n      document.selection.empty();\n    } catch (e) {}\n  } else if (\n    typeof window !== 'undefined' &&\n    typeof window.getSelection === 'function'\n  ) {\n    try {\n      window.getSelection()?.removeAllRanges();\n    } catch (e) {}\n  }\n}\n\nfunction getDefaultSize(\n  defaultSize: number | undefined,\n  minSize: number | undefined,\n  maxSize: number | undefined,\n  draggedSize: number | undefined\n) {\n  if (typeof draggedSize === 'number') {\n    const min = typeof minSize === 'number' ? minSize : 0;\n    const max =\n      typeof maxSize === 'number' && maxSize >= 0 ? maxSize : Infinity;\n    return Math.max(min, Math.min(max, draggedSize));\n  }\n  if (defaultSize !== undefined) {\n    return defaultSize;\n  }\n  return minSize;\n}\n\nfunction removeNullChildren(children: ReactNode): ReactNode[] {\n  return Children.toArray(children).filter((c) => c);\n}\n\nfunction isEmptyish(obj: Record<string, unknown> | null | undefined): boolean {\n  return (\n    obj === null || typeof obj === 'undefined' || Object.keys(obj).length === 0\n  );\n}\n\nfunction coalesceOnEmpty<T>(\n  obj: Record<string, unknown> | null | undefined,\n  useOnEmpty: T\n): T {\n  return isEmptyish(obj) ? useOnEmpty : (obj as T);\n}\n"],"names":["__spreadValues","jsx","_SplitPane","Component","jsxs","document","window","Children"],"mappings":"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"}