{"version":3,"file":"calculate.cjs","sources":["../../src/Splitter/utils/calculate.ts"],"sourcesContent":["import type { Direction, DragState, ResizeEvent } from './types'\nimport { assert } from './assert'\nimport { getPanelGroupElement, getResizeHandleElement } from './dom'\nimport { getResizeEventCursorPosition, isKeyDown } from './events'\nimport type { PanelData } from '../SplitterPanel.vue'\n\nexport function calculateDragOffsetPercentage(\n  event: ResizeEvent,\n  dragHandleId: string,\n  direction: Direction,\n  initialDragState: DragState,\n  panelGroupElement: HTMLElement,\n): number {\n  const isHorizontal = direction === 'horizontal'\n\n  const handleElement = getResizeHandleElement(dragHandleId, panelGroupElement)\n  assert(handleElement)\n\n  const groupId = handleElement.getAttribute('data-panel-group-id')\n  assert(groupId)\n\n  const { initialCursorPosition } = initialDragState\n\n  const cursorPosition = getResizeEventCursorPosition(direction, event)\n\n  const groupElement = getPanelGroupElement(groupId, panelGroupElement)\n  assert(groupElement)\n\n  const groupRect = groupElement.getBoundingClientRect()\n  const groupSizeInPixels = isHorizontal ? groupRect.width : groupRect.height\n\n  const offsetPixels = cursorPosition - initialCursorPosition\n  const offsetPercentage = (offsetPixels / groupSizeInPixels) * 100\n\n  return offsetPercentage\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/movementX\nexport function calculateDeltaPercentage(\n  event: ResizeEvent,\n  dragHandleId: string,\n  direction: Direction,\n  initialDragState: DragState | null,\n  keyboardResizeBy: number | null,\n  panelGroupElement: HTMLElement,\n): number {\n  if (isKeyDown(event)) {\n    const isHorizontal = direction === 'horizontal'\n\n    let delta = 0\n    if (event.shiftKey)\n      delta = 100\n    else\n      delta = keyboardResizeBy ?? 10\n\n    let movement = 0\n    switch (event.key) {\n      case 'ArrowDown':\n        movement = isHorizontal ? 0 : delta\n        break\n      case 'ArrowLeft':\n        movement = isHorizontal ? -delta : 0\n        break\n      case 'ArrowRight':\n        movement = isHorizontal ? delta : 0\n        break\n      case 'ArrowUp':\n        movement = isHorizontal ? 0 : -delta\n        break\n      case 'End':\n        movement = 100\n        break\n      case 'Home':\n        movement = -100\n        break\n    }\n\n    return movement\n  }\n  else {\n    if (initialDragState == null)\n      return 0\n\n    return calculateDragOffsetPercentage(\n      event,\n      dragHandleId,\n      direction,\n      initialDragState,\n      panelGroupElement,\n    )\n  }\n}\n\nexport function calculateAriaValues({\n  layout,\n  panelsArray,\n  pivotIndices,\n}: {\n  layout: number[]\n  panelsArray: PanelData[]\n  pivotIndices: number[]\n}) {\n  let currentMinSize = 0\n  let currentMaxSize = 100\n  let totalMinSize = 0\n  let totalMaxSize = 0\n\n  const firstIndex = pivotIndices[0]\n  assert(firstIndex != null)\n\n  // A panel's effective min/max sizes also need to account for other panel's sizes.\n  panelsArray.forEach((panelData, index) => {\n    const { constraints } = panelData\n    const { maxSize = 100, minSize = 0 } = constraints\n\n    if (index === firstIndex) {\n      currentMinSize = minSize\n      currentMaxSize = maxSize\n    }\n    else {\n      totalMinSize += minSize\n      totalMaxSize += maxSize\n    }\n  })\n\n  const valueMax = Math.min(currentMaxSize, 100 - totalMinSize)\n  const valueMin = Math.max(currentMinSize, 100 - totalMaxSize)\n\n  const valueNow = layout[firstIndex]\n\n  return {\n    valueMax,\n    valueMin,\n    valueNow,\n  }\n}\n\nexport function calculateUnsafeDefaultLayout({\n  panelDataArray,\n}: {\n  panelDataArray: PanelData[]\n}): number[] {\n  const layout = Array<number>(panelDataArray.length)\n\n  const panelConstraintsArray = panelDataArray.map(\n    panelData => panelData.constraints,\n  )\n\n  let numPanelsWithSizes = 0\n  let remainingSize = 100\n\n  // Distribute default sizes first\n  for (let index = 0; index < panelDataArray.length; index++) {\n    const panelConstraints = panelConstraintsArray[index]\n    assert(panelConstraints)\n    const { defaultSize } = panelConstraints\n\n    if (defaultSize != null) {\n      numPanelsWithSizes++\n      layout[index] = defaultSize\n      remainingSize -= defaultSize\n    }\n  }\n\n  // Remaining size should be distributed evenly between panels without default sizes\n  for (let index = 0; index < panelDataArray.length; index++) {\n    const panelConstraints = panelConstraintsArray[index]\n    assert(panelConstraints)\n    const { defaultSize } = panelConstraints\n\n    if (defaultSize != null)\n      continue\n\n    const numRemainingPanels = panelDataArray.length - numPanelsWithSizes\n    const size = remainingSize / numRemainingPanels\n\n    numPanelsWithSizes++\n    layout[index] = size\n    remainingSize -= size\n  }\n\n  return layout\n}\n"],"names":["getResizeHandleElement","assert","getResizeEventCursorPosition","getPanelGroupElement","isKeyDown"],"mappings":"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"}