react-resizable-panels 0.0.22 → 0.0.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"mappings":"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","sources":["packages/react-resizable-panels/src/index.ts","packages/react-resizable-panels/src/Panel.tsx","packages/react-resizable-panels/src/hooks/useUniqueId.ts","packages/react-resizable-panels/src/PanelContexts.ts","packages/react-resizable-panels/src/PanelGroup.tsx","packages/react-resizable-panels/src/utils/serialization.ts","packages/react-resizable-panels/src/utils/coordinates.ts","packages/react-resizable-panels/src/utils/group.ts","packages/react-resizable-panels/src/constants.ts","packages/react-resizable-panels/src/hooks/useWindowSplitterBehavior.ts","packages/react-resizable-panels/src/PanelResizeHandle.tsx"],"sourcesContent":["import Panel from \"./Panel\";\nimport PanelGroup from \"./PanelGroup\";\nimport PanelResizeHandle from \"./PanelResizeHandle\";\n\nexport { Panel, PanelGroup, PanelResizeHandle };\n","import {\n CSSProperties,\n ElementType,\n ReactNode,\n useContext,\n useLayoutEffect,\n} from \"react\";\nimport useUniqueId from \"./hooks/useUniqueId\";\n\nimport { PanelGroupContext } from \"./PanelContexts\";\n\n// TODO [panels]\n// Support min pixel size too.\n// PanelGroup should warn if total width is less min pixel widths.\nexport default function Panel({\n children = null,\n className: classNameFromProps = \"\",\n defaultSize = null,\n id: idFromProps = null,\n minSize = 10,\n order = null,\n style: styleFromProps = {},\n tagName: Type = \"div\",\n}: {\n children?: ReactNode;\n className?: string;\n defaultSize?: number | null;\n id?: string | null;\n minSize?: number;\n order?: number | null;\n style?: CSSProperties;\n tagName?: ElementType;\n}) {\n const context = useContext(PanelGroupContext);\n if (context === null) {\n throw Error(\n `Panel components must be rendered within a PanelGroup container`\n );\n }\n\n const panelId = useUniqueId(idFromProps);\n\n if (minSize < 0 || minSize > 100) {\n throw Error(`Panel minSize must be between 0 and 100, but was ${minSize}`);\n }\n\n if (defaultSize !== null) {\n if (defaultSize < 0 || defaultSize > 100) {\n throw Error(\n `Panel defaultSize must be between 0 and 100, but was ${defaultSize}`\n );\n } else if (minSize > defaultSize) {\n console.error(\n `Panel minSize ${minSize} cannot be greater than defaultSize ${defaultSize}`\n );\n\n defaultSize = minSize;\n }\n }\n\n const { getPanelStyle, registerPanel, unregisterPanel } = context;\n\n useLayoutEffect(() => {\n const panel = {\n defaultSize,\n id: panelId,\n minSize,\n order,\n };\n\n registerPanel(panelId, panel);\n\n return () => {\n unregisterPanel(panelId);\n };\n }, [defaultSize, panelId, minSize, order, registerPanel, unregisterPanel]);\n\n const style = getPanelStyle(panelId);\n\n return (\n <Type\n className={classNameFromProps}\n data-panel-id={panelId}\n id={`data-panel-id-${panelId}`}\n style={{\n ...style,\n ...styleFromProps,\n }}\n >\n {children}\n </Type>\n );\n}\n\n// Workaround for Parcel scope hoisting (which renames objects/functions).\n// Casting to :any is required to avoid corrupting the generated TypeScript types.\n// See github.com/parcel-bundler/parcel/issues/8724\n(Panel as any).displayName = \"Panel\";\n","import { useId, useRef } from \"react\";\n\nlet counter = 0;\n\nexport default function useUniqueId(\n idFromParams: string | null = null\n): string {\n const idFromUseId = typeof useId === \"function\" ? useId() : null;\n\n const idRef = useRef<string | null>(idFromParams || idFromUseId || null);\n if (idRef.current === null) {\n idRef.current = \"\" + counter++;\n }\n\n return idRef.current;\n}\n","import { CSSProperties, createContext } from \"react\";\n\nimport { PanelData, ResizeEvent, ResizeHandler } from \"./types\";\n\nexport const PanelGroupContext = createContext<{\n activeHandleId: string | null;\n direction: \"horizontal\" | \"vertical\";\n getPanelStyle: (id: string) => CSSProperties;\n groupId: string;\n registerPanel: (id: string, panel: PanelData) => void;\n registerResizeHandle: (id: string) => ResizeHandler;\n startDragging: (id: string, event: ResizeEvent) => void;\n stopDragging: () => void;\n unregisterPanel: (id: string) => void;\n} | null>(null);\n\n// Workaround for Parcel scope hoisting (which renames objects/functions).\n// Casting to :any is required to avoid corrupting the generated TypeScript types.\n// See github.com/parcel-bundler/parcel/issues/8724\n(PanelGroupContext as any).displayName = \"PanelGroupContext\";\n","import {\n CSSProperties,\n ElementType,\n ReactNode,\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\n\nimport { PanelGroupContext } from \"./PanelContexts\";\nimport { Direction, PanelData, ResizeEvent } from \"./types\";\nimport { loadPanelLayout, savePanelGroupLayout } from \"./utils/serialization\";\nimport { getDragOffset, getMovement } from \"./utils/coordinates\";\nimport {\n adjustByDelta,\n getFlexGrow,\n getPanelGroup,\n getResizeHandlePanelIds,\n panelsMapToSortedArray,\n} from \"./utils/group\";\nimport { useWindowSplitterPanelGroupBehavior } from \"./hooks/useWindowSplitterBehavior\";\nimport useUniqueId from \"./hooks/useUniqueId\";\n\nexport type CommittedValues = {\n direction: Direction;\n panels: Map<string, PanelData>;\n sizes: number[];\n};\n\nexport type PanelDataMap = Map<string, PanelData>;\n\n// TODO [panels]\n// Within an active drag, remember original positions to refine more easily on expand.\n// Look at what the Chrome devtools Sources does.\n\nexport default function PanelGroup({\n autoSaveId,\n children = null,\n className: classNameFromProps = \"\",\n direction,\n id: idFromProps = null,\n style: styleFromProps = {},\n tagName: Type = \"div\",\n}: {\n autoSaveId?: string;\n children?: ReactNode;\n className?: string;\n direction: Direction;\n id?: string | null;\n style?: CSSProperties;\n tagName?: ElementType;\n}) {\n const groupId = useUniqueId(idFromProps);\n\n const [activeHandleId, setActiveHandleId] = useState<string | null>(null);\n const [panels, setPanels] = useState<PanelDataMap>(new Map());\n\n // 0-1 values representing the relative size of each panel.\n const [sizes, setSizes] = useState<number[]>([]);\n\n const dragOffsetRef = useRef<number>(0);\n\n // Store committed values to avoid unnecessarily re-running memoization/effects functions.\n const committedValuesRef = useRef<CommittedValues>({\n direction,\n panels,\n sizes,\n });\n\n useLayoutEffect(() => {\n committedValuesRef.current.direction = direction;\n committedValuesRef.current.panels = panels;\n committedValuesRef.current.sizes = sizes;\n });\n\n useWindowSplitterPanelGroupBehavior({\n committedValuesRef,\n groupId,\n panels,\n setSizes,\n sizes,\n });\n\n // Once all panels have registered themselves,\n // Compute the initial sizes based on default weights.\n // This assumes that panels register during initial mount (no conditional rendering)!\n useLayoutEffect(() => {\n const sizes = committedValuesRef.current.sizes;\n if (sizes.length === panels.size) {\n return;\n }\n\n // If this panel has been configured to persist sizing information,\n // default size should be restored from local storage if possible.\n let defaultSizes: number[] | undefined = undefined;\n if (autoSaveId) {\n const panelsArray = panelsMapToSortedArray(panels);\n defaultSizes = loadPanelLayout(autoSaveId, panelsArray);\n }\n\n if (defaultSizes != null) {\n setSizes(defaultSizes);\n } else {\n const panelsArray = panelsMapToSortedArray(panels);\n\n let panelsWithNullDefaultSize = 0;\n let totalDefaultSize = 0;\n let totalMinSize = 0;\n\n panelsArray.forEach((panel) => {\n totalMinSize += panel.minSize;\n\n if (panel.defaultSize === null) {\n panelsWithNullDefaultSize++;\n } else {\n totalDefaultSize += panel.defaultSize;\n }\n });\n\n if (totalDefaultSize > 100) {\n throw new Error(\n `The sum of the defaultSize of all panels in a group cannot exceed 100.`\n );\n } else if (totalMinSize > 100) {\n throw new Error(\n `The sum of the minSize of all panels in a group cannot exceed 100.`\n );\n }\n\n setSizes(\n panelsArray.map((panel) => {\n if (panel.defaultSize === null) {\n return (100 - totalDefaultSize) / panelsWithNullDefaultSize;\n }\n\n return panel.defaultSize;\n })\n );\n }\n }, [autoSaveId, panels]);\n\n useEffect(() => {\n // If this panel has been configured to persist sizing information, save sizes to local storage.\n if (autoSaveId) {\n if (sizes.length === 0 || sizes.length !== panels.size) {\n return;\n }\n\n const panelsArray = panelsMapToSortedArray(panels);\n savePanelGroupLayout(autoSaveId, panelsArray, sizes);\n }\n }, [autoSaveId, panels, sizes]);\n\n const getPanelStyle = useCallback(\n (id: string): CSSProperties => {\n const { panels } = committedValuesRef.current;\n\n const flexGrow = getFlexGrow(panels, id, sizes);\n\n return {\n flexBasis: 0,\n flexGrow,\n flexShrink: 1,\n\n // Without this, Panel sizes may be unintentionally overridden by their content.\n overflow: \"hidden\",\n };\n },\n [direction, sizes]\n );\n\n const registerPanel = useCallback((id: string, panel: PanelData) => {\n setPanels((prevPanels) => {\n if (prevPanels.has(id)) {\n return prevPanels;\n }\n\n const nextPanels = new Map(prevPanels);\n nextPanels.set(id, panel);\n\n return nextPanels;\n });\n }, []);\n\n const registerResizeHandle = useCallback(\n (handleId: string) => {\n const resizeHandler = (event: ResizeEvent) => {\n event.preventDefault();\n\n const {\n direction,\n panels,\n sizes: prevSizes,\n } = committedValuesRef.current;\n\n const panelsArray = panelsMapToSortedArray(panels);\n\n const [idBefore, idAfter] = getResizeHandlePanelIds(\n groupId,\n handleId,\n panelsArray\n );\n if (idBefore == null || idAfter == null) {\n return;\n }\n\n const movement = getMovement(\n event,\n groupId,\n handleId,\n direction,\n dragOffsetRef.current\n );\n if (movement === 0) {\n return;\n }\n\n const groupElement = getPanelGroup(groupId);\n const rect = groupElement.getBoundingClientRect();\n const isHorizontal = direction === \"horizontal\";\n const size = isHorizontal ? rect.width : rect.height;\n const delta = (movement / size) * 100;\n\n const nextSizes = adjustByDelta(\n panels,\n idBefore,\n idAfter,\n delta,\n prevSizes\n );\n if (prevSizes !== nextSizes) {\n setSizes(nextSizes);\n }\n };\n\n return resizeHandler;\n },\n [groupId]\n );\n\n const unregisterPanel = useCallback((id: string) => {\n setPanels((prevPanels) => {\n if (!prevPanels.has(id)) {\n return prevPanels;\n }\n\n const nextPanels = new Map(prevPanels);\n nextPanels.delete(id);\n\n return nextPanels;\n });\n }, []);\n\n const context = useMemo(\n () => ({\n activeHandleId,\n direction,\n getPanelStyle,\n groupId,\n registerPanel,\n registerResizeHandle,\n startDragging: (id: string, event: ResizeEvent) => {\n setActiveHandleId(id);\n\n dragOffsetRef.current = getDragOffset(event, id, direction);\n },\n stopDragging: () => {\n setActiveHandleId(null);\n },\n unregisterPanel,\n }),\n [\n activeHandleId,\n direction,\n getPanelStyle,\n groupId,\n registerPanel,\n registerResizeHandle,\n unregisterPanel,\n ]\n );\n\n const style: CSSProperties = {\n display: \"flex\",\n flexDirection: direction === \"horizontal\" ? \"row\" : \"column\",\n height: \"100%\",\n overflow: \"hidden\",\n width: \"100%\",\n };\n\n return (\n <PanelGroupContext.Provider value={context}>\n <Type\n className={classNameFromProps}\n data-panel-group-direction={direction}\n data-panel-group-id={groupId}\n style={{ ...style, ...styleFromProps }}\n >\n {children}\n </Type>\n </PanelGroupContext.Provider>\n );\n}\n\n// Workaround for Parcel scope hoisting (which renames objects/functions).\n// Casting to :any is required to avoid corrupting the generated TypeScript types.\n// See github.com/parcel-bundler/parcel/issues/8724\n(PanelGroup as any).displayName = \"PanelGroup\";\n","import { PanelData } from \"../types\";\n\ntype SerializedPanelGroupState = { [panelIds: string]: number[] };\n\n// Note that Panel ids might be user-provided (stable) or useId generated (non-deterministic)\n// so they should not be used as part of the serialization key.\n// Using an attribute like minSize instead should work well enough.\n// Pre-sorting by minSize allows remembering layouts even if panels are re-ordered/dragged.\nfunction getSerializationKey(panels: PanelData[]): string {\n return panels\n .map((panel) => {\n const { minSize, order } = panel;\n return order ? `${order}:${minSize}` : `${minSize}`;\n })\n .sort((a, b) => a.localeCompare(b))\n .join(\",\");\n}\n\nfunction loadSerializedPanelGroupState(\n autoSaveId: string\n): SerializedPanelGroupState | null {\n try {\n const serialized = localStorage.getItem(`PanelGroup:sizes:${autoSaveId}`);\n if (serialized) {\n const parsed = JSON.parse(serialized);\n if (typeof parsed === \"object\" && parsed != null) {\n return parsed;\n }\n }\n } catch (error) {}\n\n return null;\n}\n\nexport function loadPanelLayout(\n autoSaveId: string,\n panels: PanelData[]\n): number[] | null {\n const state = loadSerializedPanelGroupState(autoSaveId);\n if (state) {\n const key = getSerializationKey(panels);\n return state[key] ?? null;\n }\n\n return null;\n}\n\nexport function savePanelGroupLayout(\n autoSaveId: string,\n panels: PanelData[],\n sizes: number[]\n): void {\n const key = getSerializationKey(panels);\n const state = loadSerializedPanelGroupState(autoSaveId) || {};\n state[key] = sizes;\n\n try {\n localStorage.setItem(\n `PanelGroup:sizes:${autoSaveId}`,\n JSON.stringify(state)\n );\n } catch (error) {\n console.error(error);\n }\n}\n","import { Direction, ResizeEvent } from \"../types\";\nimport { getPanelGroup, getResizeHandle } from \"./group\";\n\nexport type Coordinates = {\n movement: number;\n offset: number;\n};\n\nexport type Size = {\n height: number;\n width: number;\n};\n\nexport function getDragOffset(\n event: ResizeEvent,\n handleId: string,\n direction: Direction,\n initialOffset: number = 0\n): number {\n const isHorizontal = direction === \"horizontal\";\n\n let pointerOffset = 0;\n if (isMouseEvent(event)) {\n pointerOffset = isHorizontal ? event.clientX : event.clientY;\n } else if (isTouchEvent(event)) {\n const firstTouch = event.touches[0];\n pointerOffset = isHorizontal ? firstTouch.screenX : firstTouch.screenY;\n } else {\n return 0;\n }\n\n const handleElement = getResizeHandle(handleId);\n const rect = handleElement.getBoundingClientRect();\n const elementOffset = isHorizontal ? rect.left : rect.top;\n\n return pointerOffset - elementOffset - initialOffset;\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/movementX\nexport function getMovement(\n event: ResizeEvent,\n groupId: string,\n handleId: string,\n direction: Direction,\n initialOffset: number\n): number {\n const isHorizontal = direction === \"horizontal\";\n\n const groupElement = getPanelGroup(groupId);\n const rect = groupElement.getBoundingClientRect();\n const size = isHorizontal ? rect.width : rect.height;\n\n if (isKeyDown(event)) {\n const denominator = event.shiftKey ? 10 : 100;\n const delta = size / denominator;\n\n switch (event.key) {\n case \"ArrowDown\":\n return isHorizontal ? 0 : delta;\n case \"ArrowLeft\":\n return isHorizontal ? -delta : 0;\n case \"ArrowRight\":\n return isHorizontal ? delta : 0;\n case \"ArrowUp\":\n return isHorizontal ? 0 : -delta;\n case \"End\":\n if (isHorizontal) {\n return size;\n } else {\n return size;\n }\n case \"Home\":\n if (isHorizontal) {\n return -size;\n } else {\n return -size;\n }\n }\n } else {\n return getDragOffset(event, handleId, direction, initialOffset);\n }\n}\n\nexport function isKeyDown(event: ResizeEvent): event is KeyboardEvent {\n return event.type === \"keydown\";\n}\n\nexport function isMouseEvent(event: ResizeEvent): event is MouseEvent {\n return event.type.startsWith(\"mouse\");\n}\n\nexport function isTouchEvent(event: ResizeEvent): event is TouchEvent {\n return event.type.startsWith(\"touch\");\n}\n","import { PRECISION } from \"../constants\";\nimport { PanelData } from \"../types\";\n\nexport function adjustByDelta(\n panels: Map<string, PanelData>,\n idBefore: string,\n idAfter: string,\n delta: number,\n prevSizes: number[]\n): number[] {\n if (delta === 0) {\n return prevSizes;\n }\n\n const panelsArray = panelsMapToSortedArray(panels);\n\n const nextSizes = prevSizes.concat();\n\n let deltaApplied = 0;\n\n // A resizing panel affects the panels before or after it.\n //\n // A negative delta means the panel immediately after the resizer should grow/expand by decreasing its offset.\n // Other panels may also need to shrink/contract (and shift) to make room, depending on the min weights.\n //\n // A positive delta means the panel immediately before the resizer should \"expand\".\n // This is accomplished by shrinking/contracting (and shifting) one or more of the panels after the resizer.\n let pivotId = delta < 0 ? idBefore : idAfter;\n let index = panelsArray.findIndex((panel) => panel.id === pivotId);\n while (true) {\n const panel = panelsArray[index];\n const prevSize = prevSizes[index];\n const nextSize = Math.max(prevSize - Math.abs(delta), panel.minSize);\n if (prevSize !== nextSize) {\n deltaApplied += prevSize - nextSize;\n\n nextSizes[index] = nextSize;\n\n if (deltaApplied.toPrecision(PRECISION) >= delta.toPrecision(PRECISION)) {\n break;\n }\n }\n\n if (delta < 0) {\n if (--index < 0) {\n break;\n }\n } else {\n if (++index >= panelsArray.length) {\n break;\n }\n }\n }\n\n // If we were unable to resize any of the panels panels, return the previous state.\n // This will essentially bailout and ignore the \"mousemove\" event.\n if (deltaApplied === 0) {\n return prevSizes;\n }\n\n // Adjust the pivot panel before, but only by the amount that surrounding panels were able to shrink/contract.\n pivotId = delta < 0 ? idAfter : idBefore;\n index = panelsArray.findIndex((panel) => panel.id === pivotId);\n nextSizes[index] = prevSizes[index] + deltaApplied;\n\n return nextSizes;\n}\n\n// This method returns a number between 1 and 100 representing\n// the % of the group's overall space this panel should occupy.\nexport function getFlexGrow(\n panels: Map<string, PanelData>,\n id: string,\n sizes: number[]\n): string {\n if (panels.size === 1) {\n return \"100\";\n }\n\n const panelsArray = panelsMapToSortedArray(panels);\n\n const index = panelsArray.findIndex((panel) => panel.id === id);\n const size = sizes[index];\n if (size == null) {\n return \"0\";\n }\n\n return size.toPrecision(PRECISION);\n}\n\nexport function getPanel(id: string): HTMLDivElement | null {\n const element = document.querySelector(`[data-panel-id=\"${id}\"]`);\n if (element) {\n return element as HTMLDivElement;\n }\n return null;\n}\n\nexport function getPanelGroup(id: string): HTMLDivElement | null {\n const element = document.querySelector(`[data-panel-group-id=\"${id}\"]`);\n if (element) {\n return element as HTMLDivElement;\n }\n return null;\n}\n\nexport function getResizeHandle(id: string): HTMLDivElement | null {\n const element = document.querySelector(\n `[data-panel-resize-handle-id=\"${id}\"]`\n );\n if (element) {\n return element as HTMLDivElement;\n }\n return null;\n}\n\nexport function getResizeHandleIndex(id: string): number | null {\n const handles = getResizeHandles();\n const index = handles.findIndex(\n (handle) => handle.getAttribute(\"data-panel-resize-handle-id\") === id\n );\n return index ?? null;\n}\n\nexport function getResizeHandles(): HTMLDivElement[] {\n return Array.from(document.querySelectorAll(`[data-panel-resize-handle-id]`));\n}\n\nexport function getResizeHandlesForGroup(groupId: string): HTMLDivElement[] {\n return Array.from(\n document.querySelectorAll(\n `[data-panel-resize-handle-id][data-panel-group-id=\"${groupId}\"]`\n )\n );\n}\n\nexport function getResizeHandlePanelIds(\n groupId: string,\n handleId: string,\n panelsArray: PanelData[]\n): [idBefore: string | null, idAfter: string | null] {\n const handle = getResizeHandle(handleId);\n const handles = getResizeHandlesForGroup(groupId);\n const index = handles.indexOf(handle);\n\n const idBefore: string | null = panelsArray[index]?.id ?? null;\n const idAfter: string | null = panelsArray[index + 1]?.id ?? null;\n\n return [idBefore, idAfter];\n}\n\nexport function panelsMapToSortedArray(\n panels: Map<string, PanelData>\n): PanelData[] {\n return Array.from(panels.values()).sort((a, b) => a.order - b.order);\n}\n","export const PRECISION = 10;\n","import { RefObject, useEffect } from \"react\";\nimport { PRECISION } from \"../constants\";\n\nimport { CommittedValues, PanelDataMap } from \"../PanelGroup\";\nimport { ResizeHandler } from \"../types\";\nimport {\n adjustByDelta,\n getPanel,\n getPanelGroup,\n getResizeHandle,\n getResizeHandleIndex,\n getResizeHandlePanelIds,\n getResizeHandles,\n getResizeHandlesForGroup,\n getFlexGrow,\n panelsMapToSortedArray,\n} from \"../utils/group\";\n\n// https://www.w3.org/WAI/ARIA/apg/patterns/windowsplitter/\n\nexport function useWindowSplitterPanelGroupBehavior({\n committedValuesRef,\n groupId,\n panels,\n setSizes,\n sizes,\n}: {\n committedValuesRef: RefObject<CommittedValues>;\n groupId: string;\n panels: PanelDataMap;\n setSizes: (sizes: number[]) => void;\n sizes: number[];\n}): void {\n useEffect(() => {\n const { direction, panels } = committedValuesRef.current;\n\n const groupElement = getPanelGroup(groupId);\n const { height, width } = groupElement.getBoundingClientRect();\n\n const handles = getResizeHandlesForGroup(groupId);\n const cleanupFunctions = handles.map((handle) => {\n const handleId = handle.getAttribute(\"data-panel-resize-handle-id\");\n const panelsArray = panelsMapToSortedArray(panels);\n\n const [idBefore, idAfter] = getResizeHandlePanelIds(\n groupId,\n handleId,\n panelsArray\n );\n if (idBefore == null || idAfter == null) {\n return () => {};\n }\n\n const ariaValueMax = panelsArray.reduce((difference, panel) => {\n if (panel.id !== idBefore) {\n return difference - panel.minSize;\n }\n return difference;\n }, 100);\n\n const ariaValueMin =\n panelsArray.find((panel) => panel.id == idBefore)?.minSize ?? 0;\n\n const flexGrow = getFlexGrow(panels, idBefore, sizes);\n\n handle.setAttribute(\"aria-valuemax\", \"\" + Math.round(ariaValueMax));\n handle.setAttribute(\"aria-valuemin\", \"\" + Math.round(ariaValueMin));\n handle.setAttribute(\"aria-valuenow\", \"\" + Math.round(parseInt(flexGrow)));\n\n const onKeyDown = (event: KeyboardEvent) => {\n switch (event.key) {\n case \"Enter\": {\n const index = panelsArray.findIndex(\n (panel) => panel.id === idBefore\n );\n if (index >= 0) {\n const panelData = panelsArray[index];\n const size = sizes[index];\n if (size != null) {\n let delta = 0;\n if (\n size.toPrecision(PRECISION) <=\n panelData.minSize.toPrecision(PRECISION)\n ) {\n delta = direction === \"horizontal\" ? width : height;\n } else {\n delta = -(direction === \"horizontal\" ? width : height);\n }\n\n const nextSizes = adjustByDelta(\n panels,\n idBefore,\n idAfter,\n delta,\n sizes\n );\n if (sizes !== nextSizes) {\n setSizes(nextSizes);\n }\n }\n }\n break;\n }\n }\n };\n\n handle.addEventListener(\"keydown\", onKeyDown);\n\n const panelBefore = getPanel(idBefore);\n if (panelBefore != null) {\n handle.setAttribute(\"aria-controls\", panelBefore.id);\n }\n\n return () => {\n handle.removeAttribute(\"aria-valuemax\");\n handle.removeAttribute(\"aria-valuemin\");\n handle.removeAttribute(\"aria-valuenow\");\n\n handle.removeEventListener(\"keydown\", onKeyDown);\n\n if (panelBefore != null) {\n handle.removeAttribute(\"aria-controls\");\n }\n };\n });\n\n return () => {\n cleanupFunctions.forEach((cleanupFunction) => cleanupFunction());\n };\n }, [groupId, panels, sizes]);\n}\n\nexport function useWindowSplitterResizeHandlerBehavior({\n disabled,\n handleId,\n resizeHandler,\n}: {\n disabled: boolean;\n handleId: string;\n resizeHandler: ResizeHandler | null;\n}): void {\n useEffect(() => {\n if (disabled || resizeHandler == null) {\n return;\n }\n\n const handleElement = getResizeHandle(handleId);\n if (handleElement == null) {\n return;\n }\n\n const onKeyDown = (event: KeyboardEvent) => {\n switch (event.key) {\n case \"ArrowDown\":\n case \"ArrowLeft\":\n case \"ArrowRight\":\n case \"ArrowUp\":\n case \"End\":\n case \"Home\": {\n resizeHandler(event);\n break;\n }\n case \"F6\": {\n const handles = getResizeHandles();\n const index = getResizeHandleIndex(handleId);\n\n const nextIndex = event.shiftKey\n ? index > 0\n ? index - 1\n : handles.length - 1\n : index + 1 < handles.length\n ? index + 1\n : 0;\n\n const nextHandle = handles[nextIndex] as HTMLDivElement;\n nextHandle.focus();\n\n break;\n }\n }\n };\n\n handleElement.addEventListener(\"keydown\", onKeyDown);\n return () => {\n handleElement.removeEventListener(\"keydown\", onKeyDown);\n };\n }, [disabled, handleId, resizeHandler]);\n}\n","import {\n CSSProperties,\n ElementType,\n MouseEvent,\n ReactNode,\n TouchEvent,\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport useUniqueId from \"./hooks/useUniqueId\";\n\nimport { useWindowSplitterResizeHandlerBehavior } from \"./hooks/useWindowSplitterBehavior\";\nimport { PanelGroupContext } from \"./PanelContexts\";\nimport type { ResizeHandler, ResizeEvent } from \"./types\";\n\nexport default function PanelResizeHandle({\n children = null,\n className: classNameFromProps = \"\",\n disabled = false,\n id: idFromProps = null,\n style: styleFromProps = {},\n tagName: Type = \"div\",\n}: {\n children?: ReactNode;\n className?: string;\n disabled?: boolean;\n id?: string | null;\n style?: CSSProperties;\n tagName?: ElementType;\n}) {\n const divElementRef = useRef<HTMLDivElement>(null);\n\n const panelGroupContext = useContext(PanelGroupContext);\n if (panelGroupContext === null) {\n throw Error(\n `PanelResizeHandle components must be rendered within a PanelGroup container`\n );\n }\n\n const {\n activeHandleId,\n direction,\n groupId,\n registerResizeHandle,\n startDragging,\n stopDragging,\n } = panelGroupContext;\n\n const resizeHandleId = useUniqueId(idFromProps);\n const isDragging = activeHandleId === resizeHandleId;\n\n const [isFocused, setIsFocused] = useState(false);\n\n const [resizeHandler, setResizeHandler] = useState<ResizeHandler | null>(\n null\n );\n\n const stopDraggingAndBlur = useCallback(() => {\n // Clicking on the drag handle shouldn't leave it focused;\n // That would cause the PanelGroup to think it was still active.\n const div = divElementRef.current!;\n div.blur();\n\n stopDragging();\n }, [stopDragging]);\n\n useEffect(() => {\n if (disabled) {\n setResizeHandler(null);\n } else {\n const resizeHandler = registerResizeHandle(resizeHandleId);\n setResizeHandler(() => resizeHandler);\n }\n }, [disabled, resizeHandleId, registerResizeHandle]);\n\n useEffect(() => {\n if (disabled || resizeHandler == null || !isDragging) {\n return;\n }\n\n document.body.style.cursor =\n direction === \"horizontal\" ? \"col-resize\" : \"row-resize\";\n\n const onMove = (event: ResizeEvent) => {\n resizeHandler(event);\n };\n\n document.body.addEventListener(\"contextmenu\", stopDraggingAndBlur);\n document.body.addEventListener(\"mouseleave\", stopDraggingAndBlur);\n document.body.addEventListener(\"mousemove\", onMove);\n document.body.addEventListener(\"touchmove\", onMove);\n document.body.addEventListener(\"mouseup\", stopDraggingAndBlur);\n\n return () => {\n document.body.style.cursor = \"\";\n\n document.body.removeEventListener(\"contextmenu\", stopDraggingAndBlur);\n document.body.removeEventListener(\"mouseleave\", stopDraggingAndBlur);\n document.body.removeEventListener(\"mousemove\", onMove);\n document.body.removeEventListener(\"touchmove\", onMove);\n document.body.removeEventListener(\"mouseup\", stopDraggingAndBlur);\n };\n }, [direction, disabled, isDragging, resizeHandler, stopDraggingAndBlur]);\n\n useWindowSplitterResizeHandlerBehavior({\n disabled,\n handleId: resizeHandleId,\n resizeHandler,\n });\n\n const style: CSSProperties = {\n cursor: direction === \"horizontal\" ? \"col-resize\" : \"row-resize\",\n touchAction: \"none\",\n userSelect: \"none\",\n };\n\n return (\n <Type\n className={classNameFromProps}\n data-resize-handle-active={\n isDragging ? \"pointer\" : isFocused ? \"keyboard\" : undefined\n }\n data-panel-group-direction={direction}\n data-panel-group-id={groupId}\n data-panel-resize-handle-enabled={!disabled}\n data-panel-resize-handle-id={resizeHandleId}\n onBlur={() => setIsFocused(false)}\n onFocus={() => setIsFocused(true)}\n onMouseDown={(event: MouseEvent) =>\n startDragging(resizeHandleId, event.nativeEvent)\n }\n onMouseUp={stopDraggingAndBlur}\n onTouchCancel={stopDraggingAndBlur}\n onTouchEnd={stopDraggingAndBlur}\n onTouchStart={(event: TouchEvent) =>\n startDragging(resizeHandleId, event.nativeEvent)\n }\n ref={divElementRef}\n role=\"separator\"\n style={{\n ...style,\n ...styleFromProps,\n }}\n tabIndex={0}\n >\n {children}\n </Type>\n );\n}\n\n// Workaround for Parcel scope hoisting (which renames objects/functions).\n// Casting to :any is required to avoid corrupting the generated TypeScript types.\n// See github.com/parcel-bundler/parcel/issues/8724\n(PanelResizeHandle as any).displayName = \"PanelResizeHandle\";\n"],"names":[],"version":3,"file":"react-resizable-panels.js.map"}
1
+ {"mappings":"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","sources":["packages/react-resizable-panels/src/index.ts","packages/react-resizable-panels/src/Panel.ts","packages/react-resizable-panels/src/hooks/useUniqueId.ts","packages/react-resizable-panels/src/PanelContexts.ts","packages/react-resizable-panels/src/PanelGroup.ts","packages/react-resizable-panels/src/utils/serialization.ts","packages/react-resizable-panels/src/utils/coordinates.ts","packages/react-resizable-panels/src/utils/group.ts","packages/react-resizable-panels/src/constants.ts","packages/react-resizable-panels/src/hooks/useWindowSplitterBehavior.ts","packages/react-resizable-panels/src/PanelResizeHandle.ts"],"sourcesContent":["import Panel from \"./Panel\";\nimport PanelGroup from \"./PanelGroup\";\nimport PanelResizeHandle from \"./PanelResizeHandle\";\n\nexport { Panel, PanelGroup, PanelResizeHandle };\n","import {\n createElement,\n CSSProperties,\n ElementType,\n ReactNode,\n useContext,\n useLayoutEffect,\n useRef,\n} from \"react\";\nimport useUniqueId from \"./hooks/useUniqueId\";\n\nimport { PanelGroupContext } from \"./PanelContexts\";\nimport { PanelOnResize } from \"./types\";\n\nexport type PanelProps = {\n children?: ReactNode;\n className?: string;\n defaultSize?: number | null;\n id?: string | null;\n maxSize?: number;\n minSize?: number;\n onResize?: PanelOnResize | null;\n order?: number | null;\n style?: CSSProperties;\n tagName?: ElementType;\n};\n\nexport default function Panel({\n children = null,\n className: classNameFromProps = \"\",\n defaultSize = null,\n id: idFromProps = null,\n maxSize = 100,\n minSize = 10,\n onResize = null,\n order = null,\n style: styleFromProps = {},\n tagName: Type = \"div\",\n}: PanelProps) {\n const context = useContext(PanelGroupContext);\n if (context === null) {\n throw Error(\n `Panel components must be rendered within a PanelGroup container`\n );\n }\n\n const onResizeRef = useRef<PanelOnResize | null>(onResize);\n\n // Basic props validation\n if (minSize < 0 || minSize > 100) {\n throw Error(`Panel minSize must be between 0 and 100, but was ${minSize}`);\n } else if (maxSize < 0 || maxSize > 100) {\n throw Error(`Panel maxSize must be between 0 and 100, but was ${maxSize}`);\n } else {\n if (defaultSize !== null) {\n if (defaultSize < 0 || defaultSize > 100) {\n throw Error(\n `Panel defaultSize must be between 0 and 100, but was ${defaultSize}`\n );\n } else if (minSize > defaultSize) {\n console.error(\n `Panel minSize ${minSize} cannot be greater than defaultSize ${defaultSize}`\n );\n\n defaultSize = minSize;\n }\n }\n }\n\n const panelId = useUniqueId(idFromProps);\n\n const { getPanelStyle, registerPanel, unregisterPanel } = context;\n\n useLayoutEffect(() => {\n const panel = {\n defaultSize,\n id: panelId,\n maxSize,\n minSize,\n onResizeRef,\n order,\n };\n\n registerPanel(panelId, panel);\n\n return () => {\n unregisterPanel(panelId);\n };\n }, [\n defaultSize,\n panelId,\n maxSize,\n minSize,\n order,\n registerPanel,\n unregisterPanel,\n ]);\n\n const style = getPanelStyle(panelId);\n\n return createElement(Type, {\n children,\n className: classNameFromProps,\n \"data-panel-id\": panelId,\n id: `data-panel-id-${panelId}`,\n style: {\n ...style,\n ...styleFromProps,\n },\n });\n}\n\n// Workaround for Parcel scope hoisting (which renames objects/functions).\n// Casting to :any is required to avoid corrupting the generated TypeScript types.\n// See github.com/parcel-bundler/parcel/issues/8724\n(Panel as any).displayName = \"Panel\";\n","import { useId, useRef } from \"react\";\n\nlet counter = 0;\n\nexport default function useUniqueId(\n idFromParams: string | null = null\n): string {\n const idFromUseId = typeof useId === \"function\" ? useId() : null;\n\n const idRef = useRef<string | null>(idFromParams || idFromUseId || null);\n if (idRef.current === null) {\n idRef.current = \"\" + counter++;\n }\n\n return idRef.current;\n}\n","import { CSSProperties, createContext } from \"react\";\n\nimport { PanelData, ResizeEvent, ResizeHandler } from \"./types\";\n\nexport const PanelGroupContext = createContext<{\n activeHandleId: string | null;\n direction: \"horizontal\" | \"vertical\";\n getPanelStyle: (id: string) => CSSProperties;\n groupId: string;\n registerPanel: (id: string, panel: PanelData) => void;\n registerResizeHandle: (id: string) => ResizeHandler;\n startDragging: (id: string, event: ResizeEvent) => void;\n stopDragging: () => void;\n unregisterPanel: (id: string) => void;\n} | null>(null);\n\n// Workaround for Parcel scope hoisting (which renames objects/functions).\n// Casting to :any is required to avoid corrupting the generated TypeScript types.\n// See github.com/parcel-bundler/parcel/issues/8724\n(PanelGroupContext as any).displayName = \"PanelGroupContext\";\n","import {\n createElement,\n CSSProperties,\n ElementType,\n ReactNode,\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\n\nimport { PanelGroupContext } from \"./PanelContexts\";\nimport { Direction, PanelData, ResizeEvent } from \"./types\";\nimport { loadPanelLayout, savePanelGroupLayout } from \"./utils/serialization\";\nimport { getDragOffset, getMovement } from \"./utils/coordinates\";\nimport {\n adjustByDelta,\n getFlexGrow,\n getPanelGroup,\n getResizeHandlePanelIds,\n panelsMapToSortedArray,\n} from \"./utils/group\";\nimport { useWindowSplitterPanelGroupBehavior } from \"./hooks/useWindowSplitterBehavior\";\nimport useUniqueId from \"./hooks/useUniqueId\";\n\nexport type CommittedValues = {\n direction: Direction;\n panels: Map<string, PanelData>;\n sizes: number[];\n};\n\nexport type PanelDataMap = Map<string, PanelData>;\n\n// TODO\n// Within an active drag, remember original positions to refine more easily on expand.\n// Look at what the Chrome devtools Sources does.\n\nexport type PanelGroupProps = {\n autoSaveId?: string;\n children?: ReactNode;\n className?: string;\n direction: Direction;\n id?: string | null;\n style?: CSSProperties;\n tagName?: ElementType;\n};\n\nexport default function PanelGroup({\n autoSaveId,\n children = null,\n className: classNameFromProps = \"\",\n direction,\n id: idFromProps = null,\n style: styleFromProps = {},\n tagName: Type = \"div\",\n}: PanelGroupProps) {\n const groupId = useUniqueId(idFromProps);\n\n const [activeHandleId, setActiveHandleId] = useState<string | null>(null);\n const [panels, setPanels] = useState<PanelDataMap>(new Map());\n\n // 0-1 values representing the relative size of each panel.\n const [sizes, setSizes] = useState<number[]>([]);\n\n const dragOffsetRef = useRef<number>(0);\n\n // Store committed values to avoid unnecessarily re-running memoization/effects functions.\n const committedValuesRef = useRef<CommittedValues>({\n direction,\n panels,\n sizes,\n });\n\n useLayoutEffect(() => {\n committedValuesRef.current.direction = direction;\n committedValuesRef.current.panels = panels;\n committedValuesRef.current.sizes = sizes;\n });\n\n useWindowSplitterPanelGroupBehavior({\n committedValuesRef,\n groupId,\n panels,\n setSizes,\n sizes,\n });\n\n // Once all panels have registered themselves,\n // Compute the initial sizes based on default weights.\n // This assumes that panels register during initial mount (no conditional rendering)!\n useLayoutEffect(() => {\n const sizes = committedValuesRef.current.sizes;\n if (sizes.length === panels.size) {\n // Only compute (or restore) default sizes once per panel configuration.\n return;\n }\n\n // If this panel has been configured to persist sizing information,\n // default size should be restored from local storage if possible.\n let defaultSizes: number[] | undefined = undefined;\n if (autoSaveId) {\n const panelsArray = panelsMapToSortedArray(panels);\n defaultSizes = loadPanelLayout(autoSaveId, panelsArray);\n }\n\n if (defaultSizes != null) {\n setSizes(defaultSizes);\n } else {\n const panelsArray = panelsMapToSortedArray(panels);\n\n let panelsWithNullDefaultSize = 0;\n let totalDefaultSize = 0;\n let totalMinSize = 0;\n\n // TODO\n // Implicit default size calculations below do not account for inferred min/max size values.\n // e.g. if Panel A has a maxSize of 40 then Panels A and B can't both have an implicit default size of 50.\n // For now, these logic edge cases are left to the user to handle via props.\n\n panelsArray.forEach((panel) => {\n totalMinSize += panel.minSize;\n\n if (panel.defaultSize === null) {\n panelsWithNullDefaultSize++;\n } else {\n totalDefaultSize += panel.defaultSize;\n }\n });\n\n if (totalDefaultSize > 100) {\n throw new Error(\n `The sum of the defaultSize of all panels in a group cannot exceed 100.`\n );\n } else if (totalMinSize > 100) {\n throw new Error(\n `The sum of the minSize of all panels in a group cannot exceed 100.`\n );\n }\n\n setSizes(\n panelsArray.map((panel) => {\n if (panel.defaultSize === null) {\n return (100 - totalDefaultSize) / panelsWithNullDefaultSize;\n }\n\n return panel.defaultSize;\n })\n );\n }\n }, [autoSaveId, panels]);\n\n useEffect(() => {\n // If this panel has been configured to persist sizing information, save sizes to local storage.\n if (autoSaveId) {\n if (sizes.length === 0 || sizes.length !== panels.size) {\n return;\n }\n\n const panelsArray = panelsMapToSortedArray(panels);\n savePanelGroupLayout(autoSaveId, panelsArray, sizes);\n }\n }, [autoSaveId, panels, sizes]);\n\n const getPanelStyle = useCallback(\n (id: string): CSSProperties => {\n const { panels } = committedValuesRef.current;\n\n const flexGrow = getFlexGrow(panels, id, sizes);\n\n return {\n flexBasis: 0,\n flexGrow,\n flexShrink: 1,\n\n // Without this, Panel sizes may be unintentionally overridden by their content.\n overflow: \"hidden\",\n };\n },\n [direction, sizes]\n );\n\n const registerPanel = useCallback((id: string, panel: PanelData) => {\n setPanels((prevPanels) => {\n if (prevPanels.has(id)) {\n return prevPanels;\n }\n\n const nextPanels = new Map(prevPanels);\n nextPanels.set(id, panel);\n\n return nextPanels;\n });\n }, []);\n\n const registerResizeHandle = useCallback(\n (handleId: string) => {\n const resizeHandler = (event: ResizeEvent) => {\n event.preventDefault();\n\n const {\n direction,\n panels,\n sizes: prevSizes,\n } = committedValuesRef.current;\n\n const panelsArray = panelsMapToSortedArray(panels);\n\n const [idBefore, idAfter] = getResizeHandlePanelIds(\n groupId,\n handleId,\n panelsArray\n );\n if (idBefore == null || idAfter == null) {\n return;\n }\n\n const movement = getMovement(\n event,\n groupId,\n handleId,\n direction,\n dragOffsetRef.current\n );\n if (movement === 0) {\n return;\n }\n\n const groupElement = getPanelGroup(groupId);\n const rect = groupElement.getBoundingClientRect();\n const isHorizontal = direction === \"horizontal\";\n const size = isHorizontal ? rect.width : rect.height;\n const delta = (movement / size) * 100;\n\n const nextSizes = adjustByDelta(\n panels,\n idBefore,\n idAfter,\n delta,\n prevSizes\n );\n if (prevSizes === nextSizes) {\n // If the pointer has moved too far to resize the panel any further,\n // update the cursor style for a visual clue.\n // This mimics VS Code behavior.\n if (isHorizontal) {\n document.body.style.cursor = movement < 0 ? \"e-resize\" : \"w-resize\";\n } else {\n document.body.style.cursor = movement < 0 ? \"s-resize\" : \"n-resize\";\n }\n } else {\n // Reset the cursor style to the the normal resize cursor.\n document.body.style.cursor =\n direction === \"horizontal\" ? \"col-resize\" : \"row-resize\";\n\n // If resize change handlers have been declared, this is the time to call them.\n nextSizes.forEach((nextSize, index) => {\n const prevSize = prevSizes[index];\n if (prevSize !== nextSize) {\n const onResize = panelsArray[index].onResizeRef.current;\n if (onResize) {\n onResize(nextSize);\n }\n }\n });\n\n setSizes(nextSizes);\n }\n };\n\n return resizeHandler;\n },\n [groupId]\n );\n\n const unregisterPanel = useCallback((id: string) => {\n setPanels((prevPanels) => {\n if (!prevPanels.has(id)) {\n return prevPanels;\n }\n\n const nextPanels = new Map(prevPanels);\n nextPanels.delete(id);\n\n return nextPanels;\n });\n }, []);\n\n const context = useMemo(\n () => ({\n activeHandleId,\n direction,\n getPanelStyle,\n groupId,\n registerPanel,\n registerResizeHandle,\n startDragging: (id: string, event: ResizeEvent) => {\n setActiveHandleId(id);\n\n dragOffsetRef.current = getDragOffset(event, id, direction);\n },\n stopDragging: () => {\n setActiveHandleId(null);\n },\n unregisterPanel,\n }),\n [\n activeHandleId,\n direction,\n getPanelStyle,\n groupId,\n registerPanel,\n registerResizeHandle,\n unregisterPanel,\n ]\n );\n\n const style: CSSProperties = {\n display: \"flex\",\n flexDirection: direction === \"horizontal\" ? \"row\" : \"column\",\n height: \"100%\",\n overflow: \"hidden\",\n width: \"100%\",\n };\n\n return createElement(PanelGroupContext.Provider, {\n children: createElement(Type, {\n children,\n className: classNameFromProps,\n \"data-panel-group-direction\": direction,\n \"data-panel-group-id\": groupId,\n style: { ...style, ...styleFromProps },\n }),\n value: context,\n });\n}\n\n// Workaround for Parcel scope hoisting (which renames objects/functions).\n// Casting to :any is required to avoid corrupting the generated TypeScript types.\n// See github.com/parcel-bundler/parcel/issues/8724\n(PanelGroup as any).displayName = \"PanelGroup\";\n","import { PanelData } from \"../types\";\n\ntype SerializedPanelGroupState = { [panelIds: string]: number[] };\n\n// Note that Panel ids might be user-provided (stable) or useId generated (non-deterministic)\n// so they should not be used as part of the serialization key.\n// Using an attribute like minSize instead should work well enough.\n// Pre-sorting by minSize allows remembering layouts even if panels are re-ordered/dragged.\nfunction getSerializationKey(panels: PanelData[]): string {\n return panels\n .map((panel) => {\n const { minSize, order } = panel;\n return order ? `${order}:${minSize}` : `${minSize}`;\n })\n .sort((a, b) => a.localeCompare(b))\n .join(\",\");\n}\n\nfunction loadSerializedPanelGroupState(\n autoSaveId: string\n): SerializedPanelGroupState | null {\n try {\n const serialized = localStorage.getItem(`PanelGroup:sizes:${autoSaveId}`);\n if (serialized) {\n const parsed = JSON.parse(serialized);\n if (typeof parsed === \"object\" && parsed != null) {\n return parsed;\n }\n }\n } catch (error) {}\n\n return null;\n}\n\nexport function loadPanelLayout(\n autoSaveId: string,\n panels: PanelData[]\n): number[] | null {\n const state = loadSerializedPanelGroupState(autoSaveId);\n if (state) {\n const key = getSerializationKey(panels);\n return state[key] ?? null;\n }\n\n return null;\n}\n\nexport function savePanelGroupLayout(\n autoSaveId: string,\n panels: PanelData[],\n sizes: number[]\n): void {\n const key = getSerializationKey(panels);\n const state = loadSerializedPanelGroupState(autoSaveId) || {};\n state[key] = sizes;\n\n try {\n localStorage.setItem(\n `PanelGroup:sizes:${autoSaveId}`,\n JSON.stringify(state)\n );\n } catch (error) {\n console.error(error);\n }\n}\n","import { Direction, ResizeEvent } from \"../types\";\nimport { getPanelGroup, getResizeHandle } from \"./group\";\n\nexport type Coordinates = {\n movement: number;\n offset: number;\n};\n\nexport type Size = {\n height: number;\n width: number;\n};\n\nexport function getDragOffset(\n event: ResizeEvent,\n handleId: string,\n direction: Direction,\n initialOffset: number = 0\n): number {\n const isHorizontal = direction === \"horizontal\";\n\n let pointerOffset = 0;\n if (isMouseEvent(event)) {\n pointerOffset = isHorizontal ? event.clientX : event.clientY;\n } else if (isTouchEvent(event)) {\n const firstTouch = event.touches[0];\n pointerOffset = isHorizontal ? firstTouch.screenX : firstTouch.screenY;\n } else {\n return 0;\n }\n\n const handleElement = getResizeHandle(handleId);\n const rect = handleElement.getBoundingClientRect();\n const elementOffset = isHorizontal ? rect.left : rect.top;\n\n return pointerOffset - elementOffset - initialOffset;\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/movementX\nexport function getMovement(\n event: ResizeEvent,\n groupId: string,\n handleId: string,\n direction: Direction,\n initialOffset: number\n): number {\n const isHorizontal = direction === \"horizontal\";\n\n const groupElement = getPanelGroup(groupId);\n const rect = groupElement.getBoundingClientRect();\n const size = isHorizontal ? rect.width : rect.height;\n\n if (isKeyDown(event)) {\n const denominator = event.shiftKey ? 10 : 100;\n const delta = size / denominator;\n\n switch (event.key) {\n case \"ArrowDown\":\n return isHorizontal ? 0 : delta;\n case \"ArrowLeft\":\n return isHorizontal ? -delta : 0;\n case \"ArrowRight\":\n return isHorizontal ? delta : 0;\n case \"ArrowUp\":\n return isHorizontal ? 0 : -delta;\n case \"End\":\n return size;\n case \"Home\":\n return -size;\n }\n } else {\n return getDragOffset(event, handleId, direction, initialOffset);\n }\n}\n\nexport function isKeyDown(event: ResizeEvent): event is KeyboardEvent {\n return event.type === \"keydown\";\n}\n\nexport function isMouseEvent(event: ResizeEvent): event is MouseEvent {\n return event.type.startsWith(\"mouse\");\n}\n\nexport function isTouchEvent(event: ResizeEvent): event is TouchEvent {\n return event.type.startsWith(\"touch\");\n}\n","import { PRECISION } from \"../constants\";\nimport { PanelData } from \"../types\";\n\nexport function adjustByDelta(\n panels: Map<string, PanelData>,\n idBefore: string,\n idAfter: string,\n delta: number,\n prevSizes: number[]\n): number[] {\n if (delta === 0) {\n return prevSizes;\n }\n\n const panelsArray = panelsMapToSortedArray(panels);\n\n const nextSizes = prevSizes.concat();\n\n let deltaApplied = 0;\n\n // A resizing panel affects the panels before or after it.\n //\n // A negative delta means the panel immediately after the resizer should grow/expand by decreasing its offset.\n // Other panels may also need to shrink/contract (and shift) to make room, depending on the min weights.\n //\n // A positive delta means the panel immediately before the resizer should \"expand\".\n // This is accomplished by shrinking/contracting (and shifting) one or more of the panels after the resizer.\n\n // Max-bounds check the panel being expanded first.\n {\n const pivotId = delta < 0 ? idAfter : idBefore;\n const index = panelsArray.findIndex((panel) => panel.id === pivotId);\n const panel = panelsArray[index];\n const prevSize = prevSizes[index];\n\n const nextSize = safeResizePanel(panel, Math.abs(delta), prevSize);\n if (prevSize === nextSize) {\n return prevSizes;\n } else {\n delta = delta < 0 ? prevSize - nextSize : nextSize - prevSize;\n }\n }\n\n let pivotId = delta < 0 ? idBefore : idAfter;\n let index = panelsArray.findIndex((panel) => panel.id === pivotId);\n while (true) {\n const panel = panelsArray[index];\n const prevSize = prevSizes[index];\n\n const nextSize = safeResizePanel(panel, 0 - Math.abs(delta), prevSize);\n if (prevSize !== nextSize) {\n deltaApplied += prevSize - nextSize;\n\n nextSizes[index] = nextSize;\n\n if (deltaApplied.toPrecision(PRECISION) >= delta.toPrecision(PRECISION)) {\n break;\n }\n }\n\n if (delta < 0) {\n if (--index < 0) {\n break;\n }\n } else {\n if (++index >= panelsArray.length) {\n break;\n }\n }\n }\n\n // If we were unable to resize any of the panels panels, return the previous state.\n // This will essentially bailout and ignore the \"mousemove\" event.\n if (deltaApplied === 0) {\n return prevSizes;\n }\n\n // Adjust the pivot panel before, but only by the amount that surrounding panels were able to shrink/contract.\n pivotId = delta < 0 ? idAfter : idBefore;\n index = panelsArray.findIndex((panel) => panel.id === pivotId);\n nextSizes[index] = prevSizes[index] + deltaApplied;\n\n return nextSizes;\n}\n\n// This method returns a number between 1 and 100 representing\n// the % of the group's overall space this panel should occupy.\nexport function getFlexGrow(\n panels: Map<string, PanelData>,\n id: string,\n sizes: number[]\n): string {\n if (panels.size === 1) {\n return \"100\";\n }\n\n const panelsArray = panelsMapToSortedArray(panels);\n\n const index = panelsArray.findIndex((panel) => panel.id === id);\n const size = sizes[index];\n if (size == null) {\n return \"0\";\n }\n\n return size.toPrecision(PRECISION);\n}\n\nexport function getPanel(id: string): HTMLDivElement | null {\n const element = document.querySelector(`[data-panel-id=\"${id}\"]`);\n if (element) {\n return element as HTMLDivElement;\n }\n return null;\n}\n\nexport function getPanelGroup(id: string): HTMLDivElement | null {\n const element = document.querySelector(`[data-panel-group-id=\"${id}\"]`);\n if (element) {\n return element as HTMLDivElement;\n }\n return null;\n}\n\nexport function getResizeHandle(id: string): HTMLDivElement | null {\n const element = document.querySelector(\n `[data-panel-resize-handle-id=\"${id}\"]`\n );\n if (element) {\n return element as HTMLDivElement;\n }\n return null;\n}\n\nexport function getResizeHandleIndex(id: string): number | null {\n const handles = getResizeHandles();\n const index = handles.findIndex(\n (handle) => handle.getAttribute(\"data-panel-resize-handle-id\") === id\n );\n return index ?? null;\n}\n\nexport function getResizeHandles(): HTMLDivElement[] {\n return Array.from(document.querySelectorAll(`[data-panel-resize-handle-id]`));\n}\n\nexport function getResizeHandlesForGroup(groupId: string): HTMLDivElement[] {\n return Array.from(\n document.querySelectorAll(\n `[data-panel-resize-handle-id][data-panel-group-id=\"${groupId}\"]`\n )\n );\n}\n\nexport function getResizeHandlePanelIds(\n groupId: string,\n handleId: string,\n panelsArray: PanelData[]\n): [idBefore: string | null, idAfter: string | null] {\n const handle = getResizeHandle(handleId);\n const handles = getResizeHandlesForGroup(groupId);\n const index = handles.indexOf(handle);\n\n const idBefore: string | null = panelsArray[index]?.id ?? null;\n const idAfter: string | null = panelsArray[index + 1]?.id ?? null;\n\n return [idBefore, idAfter];\n}\n\nexport function panelsMapToSortedArray(\n panels: Map<string, PanelData>\n): PanelData[] {\n return Array.from(panels.values()).sort((a, b) => a.order - b.order);\n}\n\nfunction safeResizePanel(\n panel: PanelData,\n delta: number,\n prevSize: number\n): number {\n const nextSizeUnsafe = prevSize + delta;\n const nextSize = Math.min(\n panel.maxSize,\n Math.max(panel.minSize, nextSizeUnsafe)\n );\n return nextSize;\n}\n","export const PRECISION = 10;\n","import { RefObject, useEffect } from \"react\";\nimport { PRECISION } from \"../constants\";\n\nimport { CommittedValues, PanelDataMap } from \"../PanelGroup\";\nimport { ResizeHandler } from \"../types\";\nimport {\n adjustByDelta,\n getPanel,\n getPanelGroup,\n getResizeHandle,\n getResizeHandleIndex,\n getResizeHandlePanelIds,\n getResizeHandles,\n getResizeHandlesForGroup,\n getFlexGrow,\n panelsMapToSortedArray,\n} from \"../utils/group\";\n\n// https://www.w3.org/WAI/ARIA/apg/patterns/windowsplitter/\n\nexport function useWindowSplitterPanelGroupBehavior({\n committedValuesRef,\n groupId,\n panels,\n setSizes,\n sizes,\n}: {\n committedValuesRef: RefObject<CommittedValues>;\n groupId: string;\n panels: PanelDataMap;\n setSizes: (sizes: number[]) => void;\n sizes: number[];\n}): void {\n useEffect(() => {\n const { direction, panels } = committedValuesRef.current;\n\n const groupElement = getPanelGroup(groupId);\n const { height, width } = groupElement.getBoundingClientRect();\n\n const handles = getResizeHandlesForGroup(groupId);\n const cleanupFunctions = handles.map((handle) => {\n const handleId = handle.getAttribute(\"data-panel-resize-handle-id\");\n const panelsArray = panelsMapToSortedArray(panels);\n\n const [idBefore, idAfter] = getResizeHandlePanelIds(\n groupId,\n handleId,\n panelsArray\n );\n if (idBefore == null || idAfter == null) {\n return () => {};\n }\n\n let minSize = 0;\n let maxSize = 100;\n let totalMinSize = 0;\n let totalMaxSize = 0;\n\n // A panel's effective min/max sizes also need to account for other panel's sizes.\n panelsArray.forEach((panelData) => {\n if (panelData.id === idBefore) {\n maxSize = panelData.maxSize;\n minSize = panelData.minSize;\n } else {\n totalMinSize += panelData.minSize;\n totalMaxSize += panelData.maxSize;\n }\n });\n\n const ariaValueMax = Math.min(maxSize, 100 - totalMinSize);\n const ariaValueMin = Math.max(\n minSize,\n (panelsArray.length - 1) * 100 - totalMaxSize\n );\n\n const flexGrow = getFlexGrow(panels, idBefore, sizes);\n\n handle.setAttribute(\"aria-valuemax\", \"\" + Math.round(ariaValueMax));\n handle.setAttribute(\"aria-valuemin\", \"\" + Math.round(ariaValueMin));\n handle.setAttribute(\"aria-valuenow\", \"\" + Math.round(parseInt(flexGrow)));\n\n const onKeyDown = (event: KeyboardEvent) => {\n switch (event.key) {\n case \"Enter\": {\n const index = panelsArray.findIndex(\n (panel) => panel.id === idBefore\n );\n if (index >= 0) {\n const panelData = panelsArray[index];\n const size = sizes[index];\n if (size != null) {\n let delta = 0;\n if (\n size.toPrecision(PRECISION) <=\n panelData.minSize.toPrecision(PRECISION)\n ) {\n delta = direction === \"horizontal\" ? width : height;\n } else {\n delta = -(direction === \"horizontal\" ? width : height);\n }\n\n const nextSizes = adjustByDelta(\n panels,\n idBefore,\n idAfter,\n delta,\n sizes\n );\n if (sizes !== nextSizes) {\n setSizes(nextSizes);\n }\n }\n }\n break;\n }\n }\n };\n\n handle.addEventListener(\"keydown\", onKeyDown);\n\n const panelBefore = getPanel(idBefore);\n if (panelBefore != null) {\n handle.setAttribute(\"aria-controls\", panelBefore.id);\n }\n\n return () => {\n handle.removeAttribute(\"aria-valuemax\");\n handle.removeAttribute(\"aria-valuemin\");\n handle.removeAttribute(\"aria-valuenow\");\n\n handle.removeEventListener(\"keydown\", onKeyDown);\n\n if (panelBefore != null) {\n handle.removeAttribute(\"aria-controls\");\n }\n };\n });\n\n return () => {\n cleanupFunctions.forEach((cleanupFunction) => cleanupFunction());\n };\n }, [groupId, panels, sizes]);\n}\n\nexport function useWindowSplitterResizeHandlerBehavior({\n disabled,\n handleId,\n resizeHandler,\n}: {\n disabled: boolean;\n handleId: string;\n resizeHandler: ResizeHandler | null;\n}): void {\n useEffect(() => {\n if (disabled || resizeHandler == null) {\n return;\n }\n\n const handleElement = getResizeHandle(handleId);\n if (handleElement == null) {\n return;\n }\n\n const onKeyDown = (event: KeyboardEvent) => {\n switch (event.key) {\n case \"ArrowDown\":\n case \"ArrowLeft\":\n case \"ArrowRight\":\n case \"ArrowUp\":\n case \"End\":\n case \"Home\": {\n resizeHandler(event);\n break;\n }\n case \"F6\": {\n const handles = getResizeHandles();\n const index = getResizeHandleIndex(handleId);\n\n const nextIndex = event.shiftKey\n ? index > 0\n ? index - 1\n : handles.length - 1\n : index + 1 < handles.length\n ? index + 1\n : 0;\n\n const nextHandle = handles[nextIndex] as HTMLDivElement;\n nextHandle.focus();\n\n break;\n }\n }\n };\n\n handleElement.addEventListener(\"keydown\", onKeyDown);\n return () => {\n handleElement.removeEventListener(\"keydown\", onKeyDown);\n };\n }, [disabled, handleId, resizeHandler]);\n}\n","import {\n createElement,\n CSSProperties,\n ElementType,\n MouseEvent,\n ReactNode,\n TouchEvent,\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport useUniqueId from \"./hooks/useUniqueId\";\n\nimport { useWindowSplitterResizeHandlerBehavior } from \"./hooks/useWindowSplitterBehavior\";\nimport { PanelGroupContext } from \"./PanelContexts\";\nimport type { ResizeHandler, ResizeEvent } from \"./types\";\n\nexport type PanelResizeHandleProps = {\n children?: ReactNode;\n className?: string;\n disabled?: boolean;\n id?: string | null;\n style?: CSSProperties;\n tagName?: ElementType;\n};\n\nexport default function PanelResizeHandle({\n children = null,\n className: classNameFromProps = \"\",\n disabled = false,\n id: idFromProps = null,\n style: styleFromProps = {},\n tagName: Type = \"div\",\n}: PanelResizeHandleProps) {\n const divElementRef = useRef<HTMLDivElement>(null);\n\n const panelGroupContext = useContext(PanelGroupContext);\n if (panelGroupContext === null) {\n throw Error(\n `PanelResizeHandle components must be rendered within a PanelGroup container`\n );\n }\n\n const {\n activeHandleId,\n direction,\n groupId,\n registerResizeHandle,\n startDragging,\n stopDragging,\n } = panelGroupContext;\n\n const resizeHandleId = useUniqueId(idFromProps);\n const isDragging = activeHandleId === resizeHandleId;\n\n const [isFocused, setIsFocused] = useState(false);\n\n const [resizeHandler, setResizeHandler] = useState<ResizeHandler | null>(\n null\n );\n\n const stopDraggingAndBlur = useCallback(() => {\n // Clicking on the drag handle shouldn't leave it focused;\n // That would cause the PanelGroup to think it was still active.\n const div = divElementRef.current!;\n div.blur();\n\n stopDragging();\n }, [stopDragging]);\n\n useEffect(() => {\n if (disabled) {\n setResizeHandler(null);\n } else {\n const resizeHandler = registerResizeHandle(resizeHandleId);\n setResizeHandler(() => resizeHandler);\n }\n }, [disabled, resizeHandleId, registerResizeHandle]);\n\n useEffect(() => {\n if (disabled || resizeHandler == null || !isDragging) {\n return;\n }\n\n document.body.style.cursor =\n direction === \"horizontal\" ? \"col-resize\" : \"row-resize\";\n\n const onMove = (event: ResizeEvent) => {\n resizeHandler(event);\n };\n\n document.body.addEventListener(\"contextmenu\", stopDraggingAndBlur);\n document.body.addEventListener(\"mousemove\", onMove);\n document.body.addEventListener(\"touchmove\", onMove);\n window.addEventListener(\"mouseup\", stopDraggingAndBlur);\n window.addEventListener(\"touchend\", stopDraggingAndBlur);\n\n return () => {\n document.body.style.cursor = \"\";\n\n document.body.removeEventListener(\"contextmenu\", stopDraggingAndBlur);\n document.body.removeEventListener(\"mousemove\", onMove);\n document.body.removeEventListener(\"touchmove\", onMove);\n window.removeEventListener(\"mouseup\", stopDraggingAndBlur);\n window.removeEventListener(\"touchend\", stopDraggingAndBlur);\n };\n }, [direction, disabled, isDragging, resizeHandler, stopDraggingAndBlur]);\n\n useWindowSplitterResizeHandlerBehavior({\n disabled,\n handleId: resizeHandleId,\n resizeHandler,\n });\n\n const style: CSSProperties = {\n cursor: direction === \"horizontal\" ? \"col-resize\" : \"row-resize\",\n touchAction: \"none\",\n userSelect: \"none\",\n };\n\n return createElement(Type, {\n children,\n className: classNameFromProps,\n \"data-resize-handle-active\": isDragging\n ? \"pointer\"\n : isFocused\n ? \"keyboard\"\n : undefined,\n \"data-panel-group-direction\": direction,\n \"data-panel-group-id\": groupId,\n \"data-panel-resize-handle-enabled\": !disabled,\n \"data-panel-resize-handle-id\": resizeHandleId,\n onBlur: () => setIsFocused(false),\n onFocus: () => setIsFocused(true),\n onMouseDown: (event: MouseEvent) =>\n startDragging(resizeHandleId, event.nativeEvent),\n onMouseUp: stopDraggingAndBlur,\n onTouchCancel: stopDraggingAndBlur,\n onTouchEnd: stopDraggingAndBlur,\n onTouchStart: (event: TouchEvent) =>\n startDragging(resizeHandleId, event.nativeEvent),\n ref: divElementRef,\n role: \"separator\",\n style: {\n ...style,\n ...styleFromProps,\n },\n tabIndex: 0,\n });\n}\n\n// Workaround for Parcel scope hoisting (which renames objects/functions).\n// Casting to :any is required to avoid corrupting the generated TypeScript types.\n// See github.com/parcel-bundler/parcel/issues/8724\n(PanelResizeHandle as any).displayName = \"PanelResizeHandle\";\n"],"names":[],"version":3,"file":"react-resizable-panels.js.map"}
@@ -1,6 +1,4 @@
1
- import {jsx as $fpI56$jsx} from "react/jsx-runtime";
2
- import {useContext as $fpI56$useContext, useLayoutEffect as $fpI56$useLayoutEffect, useId as $fpI56$useId, useRef as $fpI56$useRef, createContext as $fpI56$createContext, useState as $fpI56$useState, useEffect as $fpI56$useEffect, useCallback as $fpI56$useCallback, useMemo as $fpI56$useMemo} from "react";
3
-
1
+ import {useContext as $fpI56$useContext, useRef as $fpI56$useRef, useLayoutEffect as $fpI56$useLayoutEffect, createElement as $fpI56$createElement, useId as $fpI56$useId, createContext as $fpI56$createContext, useState as $fpI56$useState, useEffect as $fpI56$useEffect, useCallback as $fpI56$useCallback, useMemo as $fpI56$useMemo} from "react";
4
2
 
5
3
 
6
4
 
@@ -21,24 +19,29 @@ const $f922724f4bad4884$export$7d8c6d083caec74a = (0, $fpI56$createContext)(null
21
19
  $f922724f4bad4884$export$7d8c6d083caec74a.displayName = "PanelGroupContext";
22
20
 
23
21
 
24
- function $ad28bce87b00c2be$export$2e2bcd8739ae039({ children: children = null , className: classNameFromProps = "" , defaultSize: defaultSize = null , id: idFromProps = null , minSize: minSize = 10 , order: order = null , style: styleFromProps = {} , tagName: Type = "div" }) {
22
+ function $b6b4d0cd2eaa6b70$export$2e2bcd8739ae039({ children: children = null , className: classNameFromProps = "" , defaultSize: defaultSize = null , id: idFromProps = null , maxSize: maxSize = 100 , minSize: minSize = 10 , onResize: onResize = null , order: order = null , style: styleFromProps = {} , tagName: Type = "div" }) {
25
23
  const context = (0, $fpI56$useContext)((0, $f922724f4bad4884$export$7d8c6d083caec74a));
26
24
  if (context === null) throw Error(`Panel components must be rendered within a PanelGroup container`);
27
- const panelId = (0, $968185313205dcfa$export$2e2bcd8739ae039)(idFromProps);
25
+ const onResizeRef = (0, $fpI56$useRef)(onResize);
26
+ // Basic props validation
28
27
  if (minSize < 0 || minSize > 100) throw Error(`Panel minSize must be between 0 and 100, but was ${minSize}`);
29
- if (defaultSize !== null) {
28
+ else if (maxSize < 0 || maxSize > 100) throw Error(`Panel maxSize must be between 0 and 100, but was ${maxSize}`);
29
+ else if (defaultSize !== null) {
30
30
  if (defaultSize < 0 || defaultSize > 100) throw Error(`Panel defaultSize must be between 0 and 100, but was ${defaultSize}`);
31
31
  else if (minSize > defaultSize) {
32
32
  console.error(`Panel minSize ${minSize} cannot be greater than defaultSize ${defaultSize}`);
33
33
  defaultSize = minSize;
34
34
  }
35
35
  }
36
+ const panelId = (0, $968185313205dcfa$export$2e2bcd8739ae039)(idFromProps);
36
37
  const { getPanelStyle: getPanelStyle , registerPanel: registerPanel , unregisterPanel: unregisterPanel } = context;
37
38
  (0, $fpI56$useLayoutEffect)(()=>{
38
39
  const panel = {
39
40
  defaultSize: defaultSize,
40
41
  id: panelId,
42
+ maxSize: maxSize,
41
43
  minSize: minSize,
44
+ onResizeRef: onResizeRef,
42
45
  order: order
43
46
  };
44
47
  registerPanel(panelId, panel);
@@ -48,28 +51,28 @@ function $ad28bce87b00c2be$export$2e2bcd8739ae039({ children: children = null ,
48
51
  }, [
49
52
  defaultSize,
50
53
  panelId,
54
+ maxSize,
51
55
  minSize,
52
56
  order,
53
57
  registerPanel,
54
58
  unregisterPanel
55
59
  ]);
56
60
  const style = getPanelStyle(panelId);
57
- return /*#__PURE__*/ (0, $fpI56$jsx)(Type, {
61
+ return (0, $fpI56$createElement)(Type, {
62
+ children: children,
58
63
  className: classNameFromProps,
59
64
  "data-panel-id": panelId,
60
65
  id: `data-panel-id-${panelId}`,
61
66
  style: {
62
67
  ...style,
63
68
  ...styleFromProps
64
- },
65
- children: children
69
+ }
66
70
  });
67
71
  }
68
72
  // Workaround for Parcel scope hoisting (which renames objects/functions).
69
73
  // Casting to :any is required to avoid corrupting the generated TypeScript types.
70
74
  // See github.com/parcel-bundler/parcel/issues/8724
71
- $ad28bce87b00c2be$export$2e2bcd8739ae039.displayName = "Panel";
72
-
75
+ $b6b4d0cd2eaa6b70$export$2e2bcd8739ae039.displayName = "Panel";
73
76
 
74
77
 
75
78
 
@@ -129,30 +132,40 @@ function $f30c804b5fe6cc1a$export$f50bae335f53943c(panels, idBefore, idAfter, de
129
132
  //
130
133
  // A positive delta means the panel immediately before the resizer should "expand".
131
134
  // This is accomplished by shrinking/contracting (and shifting) one or more of the panels after the resizer.
132
- let pivotId = delta < 0 ? idBefore : idAfter;
133
- let index = panelsArray.findIndex((panel)=>panel.id === pivotId);
134
- while(true){
135
+ // Max-bounds check the panel being expanded first.
136
+ {
137
+ const pivotId = delta < 0 ? idAfter : idBefore;
138
+ const index = panelsArray.findIndex((panel)=>panel.id === pivotId);
135
139
  const panel = panelsArray[index];
136
140
  const prevSize = prevSizes[index];
137
- const nextSize = Math.max(prevSize - Math.abs(delta), panel.minSize);
138
- if (prevSize !== nextSize) {
139
- deltaApplied += prevSize - nextSize;
140
- nextSizes[index] = nextSize;
141
+ const nextSize = $f30c804b5fe6cc1a$var$safeResizePanel(panel, Math.abs(delta), prevSize);
142
+ if (prevSize === nextSize) return prevSizes;
143
+ else delta = delta < 0 ? prevSize - nextSize : nextSize - prevSize;
144
+ }
145
+ let pivotId1 = delta < 0 ? idBefore : idAfter;
146
+ let index1 = panelsArray.findIndex((panel)=>panel.id === pivotId1);
147
+ while(true){
148
+ const panel1 = panelsArray[index1];
149
+ const prevSize1 = prevSizes[index1];
150
+ const nextSize1 = $f30c804b5fe6cc1a$var$safeResizePanel(panel1, 0 - Math.abs(delta), prevSize1);
151
+ if (prevSize1 !== nextSize1) {
152
+ deltaApplied += prevSize1 - nextSize1;
153
+ nextSizes[index1] = nextSize1;
141
154
  if (deltaApplied.toPrecision((0, $fc25b75732bfda27$export$d6d3992f3becc879)) >= delta.toPrecision((0, $fc25b75732bfda27$export$d6d3992f3becc879))) break;
142
155
  }
143
156
  if (delta < 0) {
144
- if (--index < 0) break;
157
+ if (--index1 < 0) break;
145
158
  } else {
146
- if (++index >= panelsArray.length) break;
159
+ if (++index1 >= panelsArray.length) break;
147
160
  }
148
161
  }
149
162
  // If we were unable to resize any of the panels panels, return the previous state.
150
163
  // This will essentially bailout and ignore the "mousemove" event.
151
164
  if (deltaApplied === 0) return prevSizes;
152
165
  // Adjust the pivot panel before, but only by the amount that surrounding panels were able to shrink/contract.
153
- pivotId = delta < 0 ? idAfter : idBefore;
154
- index = panelsArray.findIndex((panel)=>panel.id === pivotId);
155
- nextSizes[index] = prevSizes[index] + deltaApplied;
166
+ pivotId1 = delta < 0 ? idAfter : idBefore;
167
+ index1 = panelsArray.findIndex((panel)=>panel.id === pivotId1);
168
+ nextSizes[index1] = prevSizes[index1] + deltaApplied;
156
169
  return nextSizes;
157
170
  }
158
171
  function $f30c804b5fe6cc1a$export$6f43503e166de6fb(panels, id, sizes) {
@@ -203,6 +216,11 @@ function $f30c804b5fe6cc1a$export$68d3a33c21dfbe27(groupId, handleId, panelsArra
203
216
  function $f30c804b5fe6cc1a$export$a861c0ad45885494(panels) {
204
217
  return Array.from(panels.values()).sort((a, b)=>a.order - b.order);
205
218
  }
219
+ function $f30c804b5fe6cc1a$var$safeResizePanel(panel, delta, prevSize) {
220
+ const nextSizeUnsafe = prevSize + delta;
221
+ const nextSize = Math.min(panel.maxSize, Math.max(panel.minSize, nextSizeUnsafe));
222
+ return nextSize;
223
+ }
206
224
 
207
225
 
208
226
  function $96f6397ae645d178$export$ec391ce65b083ed4(event, handleId, direction, initialOffset = 0) {
@@ -236,11 +254,9 @@ function $96f6397ae645d178$export$354b17c0684607ed(event, groupId, handleId, dir
236
254
  case "ArrowUp":
237
255
  return isHorizontal ? 0 : -delta;
238
256
  case "End":
239
- if (isHorizontal) return size;
240
- else return size;
257
+ return size;
241
258
  case "Home":
242
- if (isHorizontal) return -size;
243
- else return -size;
259
+ return -size;
244
260
  }
245
261
  } else return $96f6397ae645d178$export$ec391ce65b083ed4(event, handleId, direction, initialOffset);
246
262
  }
@@ -270,11 +286,22 @@ function $99ad02c951ec80d0$export$d9fcbe062527d159({ committedValuesRef: committ
270
286
  const panelsArray = (0, $f30c804b5fe6cc1a$export$a861c0ad45885494)(panels);
271
287
  const [idBefore, idAfter] = (0, $f30c804b5fe6cc1a$export$68d3a33c21dfbe27)(groupId, handleId, panelsArray);
272
288
  if (idBefore == null || idAfter == null) return ()=>{};
273
- const ariaValueMax = panelsArray.reduce((difference, panel)=>{
274
- if (panel.id !== idBefore) return difference - panel.minSize;
275
- return difference;
276
- }, 100);
277
- const ariaValueMin = panelsArray.find((panel)=>panel.id == idBefore)?.minSize ?? 0;
289
+ let minSize = 0;
290
+ let maxSize = 100;
291
+ let totalMinSize = 0;
292
+ let totalMaxSize = 0;
293
+ // A panel's effective min/max sizes also need to account for other panel's sizes.
294
+ panelsArray.forEach((panelData)=>{
295
+ if (panelData.id === idBefore) {
296
+ maxSize = panelData.maxSize;
297
+ minSize = panelData.minSize;
298
+ } else {
299
+ totalMinSize += panelData.minSize;
300
+ totalMaxSize += panelData.maxSize;
301
+ }
302
+ });
303
+ const ariaValueMax = Math.min(maxSize, 100 - totalMinSize);
304
+ const ariaValueMin = Math.max(minSize, (panelsArray.length - 1) * 100 - totalMaxSize);
278
305
  const flexGrow = (0, $f30c804b5fe6cc1a$export$6f43503e166de6fb)(panels, idBefore, sizes);
279
306
  handle.setAttribute("aria-valuemax", "" + Math.round(ariaValueMax));
280
307
  handle.setAttribute("aria-valuemin", "" + Math.round(ariaValueMin));
@@ -358,7 +385,7 @@ function $99ad02c951ec80d0$export$33b0bea6ac3ffb03({ disabled: disabled , handle
358
385
 
359
386
 
360
387
 
361
- function $c44ee3356398c8a1$export$2e2bcd8739ae039({ autoSaveId: autoSaveId , children: children = null , className: classNameFromProps = "" , direction: direction , id: idFromProps = null , style: styleFromProps = {} , tagName: Type = "div" }) {
388
+ function $eb1c4d3cf38334c2$export$2e2bcd8739ae039({ autoSaveId: autoSaveId , children: children = null , className: classNameFromProps = "" , direction: direction , id: idFromProps = null , style: styleFromProps = {} , tagName: Type = "div" }) {
362
389
  const groupId = (0, $968185313205dcfa$export$2e2bcd8739ae039)(idFromProps);
363
390
  const [activeHandleId, setActiveHandleId] = (0, $fpI56$useState)(null);
364
391
  const [panels, setPanels] = (0, $fpI56$useState)(new Map());
@@ -388,7 +415,8 @@ function $c44ee3356398c8a1$export$2e2bcd8739ae039({ autoSaveId: autoSaveId , chi
388
415
  // This assumes that panels register during initial mount (no conditional rendering)!
389
416
  (0, $fpI56$useLayoutEffect)(()=>{
390
417
  const sizes = committedValuesRef.current.sizes;
391
- if (sizes.length === panels.size) return;
418
+ if (sizes.length === panels.size) // Only compute (or restore) default sizes once per panel configuration.
419
+ return;
392
420
  // If this panel has been configured to persist sizing information,
393
421
  // default size should be restored from local storage if possible.
394
422
  let defaultSizes = undefined;
@@ -402,6 +430,10 @@ function $c44ee3356398c8a1$export$2e2bcd8739ae039({ autoSaveId: autoSaveId , chi
402
430
  let panelsWithNullDefaultSize = 0;
403
431
  let totalDefaultSize = 0;
404
432
  let totalMinSize = 0;
433
+ // TODO
434
+ // Implicit default size calculations below do not account for inferred min/max size values.
435
+ // e.g. if Panel A has a maxSize of 40 then Panels A and B can't both have an implicit default size of 50.
436
+ // For now, these logic edge cases are left to the user to handle via props.
405
437
  panelsArray1.forEach((panel)=>{
406
438
  totalMinSize += panel.minSize;
407
439
  if (panel.defaultSize === null) panelsWithNullDefaultSize++;
@@ -467,7 +499,25 @@ function $c44ee3356398c8a1$export$2e2bcd8739ae039({ autoSaveId: autoSaveId , chi
467
499
  const size = isHorizontal ? rect.width : rect.height;
468
500
  const delta = movement / size * 100;
469
501
  const nextSizes = (0, $f30c804b5fe6cc1a$export$f50bae335f53943c)(panels, idBefore, idAfter, delta, prevSizes);
470
- if (prevSizes !== nextSizes) setSizes(nextSizes);
502
+ if (prevSizes === nextSizes) {
503
+ // If the pointer has moved too far to resize the panel any further,
504
+ // update the cursor style for a visual clue.
505
+ // This mimics VS Code behavior.
506
+ if (isHorizontal) document.body.style.cursor = movement < 0 ? "e-resize" : "w-resize";
507
+ else document.body.style.cursor = movement < 0 ? "s-resize" : "n-resize";
508
+ } else {
509
+ // Reset the cursor style to the the normal resize cursor.
510
+ document.body.style.cursor = direction === "horizontal" ? "col-resize" : "row-resize";
511
+ // If resize change handlers have been declared, this is the time to call them.
512
+ nextSizes.forEach((nextSize, index)=>{
513
+ const prevSize = prevSizes[index];
514
+ if (prevSize !== nextSize) {
515
+ const onResize = panelsArray[index].onResizeRef.current;
516
+ if (onResize) onResize(nextSize);
517
+ }
518
+ });
519
+ setSizes(nextSizes);
520
+ }
471
521
  };
472
522
  return resizeHandler;
473
523
  }, [
@@ -512,32 +562,31 @@ function $c44ee3356398c8a1$export$2e2bcd8739ae039({ autoSaveId: autoSaveId , chi
512
562
  overflow: "hidden",
513
563
  width: "100%"
514
564
  };
515
- return /*#__PURE__*/ (0, $fpI56$jsx)((0, $f922724f4bad4884$export$7d8c6d083caec74a).Provider, {
516
- value: context,
517
- children: /*#__PURE__*/ (0, $fpI56$jsx)(Type, {
565
+ return (0, $fpI56$createElement)((0, $f922724f4bad4884$export$7d8c6d083caec74a).Provider, {
566
+ children: (0, $fpI56$createElement)(Type, {
567
+ children: children,
518
568
  className: classNameFromProps,
519
569
  "data-panel-group-direction": direction,
520
570
  "data-panel-group-id": groupId,
521
571
  style: {
522
572
  ...style,
523
573
  ...styleFromProps
524
- },
525
- children: children
526
- })
574
+ }
575
+ }),
576
+ value: context
527
577
  });
528
578
  }
529
579
  // Workaround for Parcel scope hoisting (which renames objects/functions).
530
580
  // Casting to :any is required to avoid corrupting the generated TypeScript types.
531
581
  // See github.com/parcel-bundler/parcel/issues/8724
532
- $c44ee3356398c8a1$export$2e2bcd8739ae039.displayName = "PanelGroup";
533
-
582
+ $eb1c4d3cf38334c2$export$2e2bcd8739ae039.displayName = "PanelGroup";
534
583
 
535
584
 
536
585
 
537
586
 
538
587
 
539
588
 
540
- function $b067b37706bb37b8$export$2e2bcd8739ae039({ children: children = null , className: classNameFromProps = "" , disabled: disabled = false , id: idFromProps = null , style: styleFromProps = {} , tagName: Type = "div" }) {
589
+ function $91e657179112cfb0$export$2e2bcd8739ae039({ children: children = null , className: classNameFromProps = "" , disabled: disabled = false , id: idFromProps = null , style: styleFromProps = {} , tagName: Type = "div" }) {
541
590
  const divElementRef = (0, $fpI56$useRef)(null);
542
591
  const panelGroupContext = (0, $fpI56$useContext)((0, $f922724f4bad4884$export$7d8c6d083caec74a));
543
592
  if (panelGroupContext === null) throw Error(`PanelResizeHandle components must be rendered within a PanelGroup container`);
@@ -573,17 +622,17 @@ function $b067b37706bb37b8$export$2e2bcd8739ae039({ children: children = null ,
573
622
  resizeHandler(event);
574
623
  };
575
624
  document.body.addEventListener("contextmenu", stopDraggingAndBlur);
576
- document.body.addEventListener("mouseleave", stopDraggingAndBlur);
577
625
  document.body.addEventListener("mousemove", onMove);
578
626
  document.body.addEventListener("touchmove", onMove);
579
- document.body.addEventListener("mouseup", stopDraggingAndBlur);
627
+ window.addEventListener("mouseup", stopDraggingAndBlur);
628
+ window.addEventListener("touchend", stopDraggingAndBlur);
580
629
  return ()=>{
581
630
  document.body.style.cursor = "";
582
631
  document.body.removeEventListener("contextmenu", stopDraggingAndBlur);
583
- document.body.removeEventListener("mouseleave", stopDraggingAndBlur);
584
632
  document.body.removeEventListener("mousemove", onMove);
585
633
  document.body.removeEventListener("touchmove", onMove);
586
- document.body.removeEventListener("mouseup", stopDraggingAndBlur);
634
+ window.removeEventListener("mouseup", stopDraggingAndBlur);
635
+ window.removeEventListener("touchend", stopDraggingAndBlur);
587
636
  };
588
637
  }, [
589
638
  direction,
@@ -602,7 +651,8 @@ function $b067b37706bb37b8$export$2e2bcd8739ae039({ children: children = null ,
602
651
  touchAction: "none",
603
652
  userSelect: "none"
604
653
  };
605
- return /*#__PURE__*/ (0, $fpI56$jsx)(Type, {
654
+ return (0, $fpI56$createElement)(Type, {
655
+ children: children,
606
656
  className: classNameFromProps,
607
657
  "data-resize-handle-active": isDragging ? "pointer" : isFocused ? "keyboard" : undefined,
608
658
  "data-panel-group-direction": direction,
@@ -622,17 +672,16 @@ function $b067b37706bb37b8$export$2e2bcd8739ae039({ children: children = null ,
622
672
  ...style,
623
673
  ...styleFromProps
624
674
  },
625
- tabIndex: 0,
626
- children: children
675
+ tabIndex: 0
627
676
  });
628
677
  }
629
678
  // Workaround for Parcel scope hoisting (which renames objects/functions).
630
679
  // Casting to :any is required to avoid corrupting the generated TypeScript types.
631
680
  // See github.com/parcel-bundler/parcel/issues/8724
632
- $b067b37706bb37b8$export$2e2bcd8739ae039.displayName = "PanelResizeHandle";
681
+ $91e657179112cfb0$export$2e2bcd8739ae039.displayName = "PanelResizeHandle";
633
682
 
634
683
 
635
684
 
636
685
 
637
- export {$ad28bce87b00c2be$export$2e2bcd8739ae039 as Panel, $c44ee3356398c8a1$export$2e2bcd8739ae039 as PanelGroup, $b067b37706bb37b8$export$2e2bcd8739ae039 as PanelResizeHandle};
686
+ export {$b6b4d0cd2eaa6b70$export$2e2bcd8739ae039 as Panel, $eb1c4d3cf38334c2$export$2e2bcd8739ae039 as PanelGroup, $91e657179112cfb0$export$2e2bcd8739ae039 as PanelResizeHandle};
638
687
  //# sourceMappingURL=react-resizable-panels.module.js.map