{"version":3,"sources":["../../src/splitter/useSplitter.ts","../../src/splitter/useSplitter.props.ts"],"sourcesContent":["import { withHeadless } from '@primereact/core/headless';\nimport { useEventListener } from '@primereact/hooks/use-event-listener';\nimport { SplitterPanelProps } from '@primereact/types/shared/splitter';\nimport { getHeight, getOuterHeight, getOuterWidth, getWidth, isRTL } from '@primeuix/utils/dom';\nimport { isArray, isNotEmpty } from '@primeuix/utils/object';\nimport * as React from 'react';\nimport { defaultProps } from './useSplitter.props';\n\nconst isValidPanelElement = (panel: React.ReactNode): panel is React.ReactElement<SplitterPanelProps> => {\n    return React.isValidElement(panel);\n};\n\nexport const useSplitter = withHeadless({\n    name: 'useSplitter',\n    defaultProps,\n    setup({ props, elementRef, inProps }) {\n        const gutterRef = React.useRef<HTMLDivElement | null>(null);\n        const gutterRefs = React.useRef<HTMLDivElement[]>([]);\n        const size = React.useRef<number | null>(null);\n        const dragging = React.useRef(false);\n        const startPos = React.useRef<number | null>(null);\n        const prevPanelElement = React.useRef<HTMLDivElement | null>(null);\n        const nextPanelElement = React.useRef<HTMLDivElement | null>(null);\n        const prevPanelSize = React.useRef<number | null>(null);\n        const [prevSize, setPrevSize] = React.useState<number | null>(null);\n        const nextPanelSize = React.useRef<number | null>(null);\n        const prevPanelIndex = React.useRef<number | null>(null);\n        const timer = React.useRef<ReturnType<typeof setInterval> | null>(null);\n        const [panelSizes, setPanelSizes] = React.useState<number[]>([]);\n        const [panels, setPanels] = React.useState<React.ReactNode[]>([]);\n        const horizontal = props.orientation === 'horizontal';\n        const panelCounter = React.useRef(0);\n        const gutterCounter = React.useRef(0);\n        const thumbCounter = React.useRef(0);\n\n        const state = {\n            panels\n        };\n\n        const registerPanel = React.useCallback(() => {\n            const index = panelCounter.current;\n\n            panelCounter.current += 1;\n\n            return index;\n        }, []);\n\n        const registerGutter = React.useCallback(() => {\n            const index = gutterCounter.current;\n\n            gutterCounter.current += 1;\n\n            return index;\n        }, []);\n\n        const registerThumb = React.useCallback(() => {\n            const index = thumbCounter.current;\n\n            thumbCounter.current += 1;\n\n            return index;\n        }, []);\n\n        React.useEffect(() => {\n            panelCounter.current = 0;\n            gutterCounter.current = 0;\n            thumbCounter.current = 0;\n\n            return () => {\n                panelCounter.current = 0;\n                gutterCounter.current = 0;\n                thumbCounter.current = 0;\n            };\n        }, []);\n\n        const onResizeStart = (event: React.MouseEvent | React.TouchEvent | KeyboardEvent, index: number, isKeyDown = false) => {\n            if (!elementRef.current) return;\n\n            gutterRef.current = gutterRefs.current[index];\n            size.current = horizontal ? getWidth(elementRef.current) : getHeight(elementRef.current);\n\n            if (!isKeyDown) {\n                dragging.current = true;\n                startPos.current = horizontal ? (event as React.MouseEvent).pageX || (event as React.TouchEvent).changedTouches?.[0]?.pageX : (event as React.MouseEvent).pageY || (event as React.TouchEvent).changedTouches?.[0]?.pageY;\n            }\n\n            if (gutterRef.current) {\n                prevPanelElement.current = gutterRef.current.previousElementSibling as HTMLDivElement;\n                nextPanelElement.current = gutterRef.current.nextElementSibling as HTMLDivElement;\n\n                if (prevPanelElement.current && nextPanelElement.current) {\n                    if (isKeyDown) {\n                        prevPanelSize.current = horizontal ? getOuterWidth(prevPanelElement.current, true) : getOuterHeight(prevPanelElement.current, true);\n                        nextPanelSize.current = horizontal ? getOuterWidth(nextPanelElement.current, true) : getOuterHeight(nextPanelElement.current, true);\n                    } else {\n                        prevPanelSize.current = (100 * (horizontal ? getOuterWidth(prevPanelElement.current, true) : getOuterHeight(prevPanelElement.current, true))) / (size.current || 1);\n                        nextPanelSize.current = (100 * (horizontal ? getOuterWidth(nextPanelElement.current, true) : getOuterHeight(nextPanelElement.current, true))) / (size.current || 1);\n                    }\n\n                    prevPanelIndex.current = index;\n                    gutterRefs.current[index].setAttribute('data-p-gutter-resizing', 'true');\n                    elementRef.current.setAttribute('data-p-resizing', 'true');\n                }\n            }\n        };\n\n        const onResize = (event: React.MouseEvent | React.TouchEvent | KeyboardEvent, step = 5, isKeyDown = false) => {\n            if (!prevPanelElement.current || !nextPanelElement.current || size.current === null || prevPanelSize.current === null || nextPanelSize.current === null) {\n                return;\n            }\n\n            let newPos: number, newPrevPanelSize: number, newNextPanelSize: number;\n\n            if (isKeyDown) {\n                if (horizontal) {\n                    newPrevPanelSize = (100 * (prevPanelSize.current + step)) / size.current;\n                    newNextPanelSize = (100 * (nextPanelSize.current - step)) / size.current;\n                } else {\n                    newPrevPanelSize = (100 * (prevPanelSize.current - step)) / size.current;\n                    newNextPanelSize = (100 * (nextPanelSize.current + step)) / size.current;\n                }\n            } else {\n                if (startPos.current === null) {\n                    return;\n                }\n\n                if (horizontal) {\n                    if (isRTL(elementRef.current as HTMLElement)) {\n                        newPos = ((startPos.current - (event as React.MouseEvent).pageX) * 100) / size.current;\n                    } else {\n                        newPos = (((event as React.MouseEvent).pageX - startPos.current) * 100) / size.current;\n                    }\n                } else {\n                    newPos = (((event as React.MouseEvent).pageY - startPos.current) * 100) / size.current;\n                }\n\n                newPrevPanelSize = prevPanelSize.current + newPos;\n                newNextPanelSize = nextPanelSize.current - newPos;\n            }\n\n            if (!validateResize(newPrevPanelSize, newNextPanelSize)) {\n                newPrevPanelSize = Math.min(Math.max(prevPanelMinSize(), newPrevPanelSize), 100 - nextPanelMinSize());\n                newNextPanelSize = Math.min(Math.max(nextPanelMinSize(), newNextPanelSize), 100 - prevPanelMinSize());\n            }\n\n            prevPanelElement.current.style.flexBasis = 'calc(' + newPrevPanelSize + '% - ' + (panels.length - 1) * (props.gutterSize ?? 4) + 'px)';\n            nextPanelElement.current.style.flexBasis = 'calc(' + newNextPanelSize + '% - ' + (panels.length - 1) * (props.gutterSize ?? 4) + 'px)';\n\n            if (prevPanelIndex.current !== null) {\n                panelSizes[prevPanelIndex.current] = newPrevPanelSize;\n                panelSizes[prevPanelIndex.current + 1] = newNextPanelSize;\n            }\n\n            setPrevSize(Number(newPrevPanelSize.toFixed(4)));\n        };\n\n        const onResizeEnd = () => {\n            if (isStateful()) {\n                saveState();\n            }\n\n            if (gutterRefs.current) {\n                gutterRefs.current.forEach((gutter) => {\n                    gutter.setAttribute('data-p-gutter-resizing', 'false');\n                });\n            }\n\n            if (elementRef.current) {\n                elementRef.current.setAttribute('data-p-resizing', 'false');\n            }\n\n            clear();\n        };\n\n        const repeat = (event: React.MouseEvent | React.TouchEvent | KeyboardEvent, index: number, step: number) => {\n            onResizeStart(event, index, true);\n            onResize(event, step, true);\n        };\n\n        const setTimer = (event: React.MouseEvent | React.TouchEvent | KeyboardEvent, index: number, step: number) => {\n            if (!timer.current) {\n                timer.current = setInterval(() => {\n                    repeat(event, index, step);\n                }, 40);\n            }\n        };\n\n        const clearTimer = () => {\n            if (timer.current) {\n                clearInterval(timer.current);\n                timer.current = null;\n            }\n        };\n\n        const onGutterKeyUp = () => {\n            clearTimer();\n            onResizeEnd();\n        };\n\n        const onGutterKeyDown = (event: React.KeyboardEvent, index: number) => {\n            switch (event.code) {\n                case 'ArrowLeft': {\n                    if (horizontal) {\n                        setTimer(event as unknown as KeyboardEvent, index, (props.step as number) * -1);\n                    }\n\n                    event.preventDefault();\n                    break;\n                }\n\n                case 'ArrowRight': {\n                    if (horizontal) {\n                        setTimer(event as unknown as KeyboardEvent, index, props.step as number);\n                    }\n\n                    event.preventDefault();\n                    break;\n                }\n\n                case 'ArrowDown': {\n                    if (!horizontal) {\n                        setTimer(event as unknown as KeyboardEvent, index, (props.step as number) * -1);\n                    }\n\n                    event.preventDefault();\n                    break;\n                }\n\n                case 'ArrowUp': {\n                    if (!horizontal) {\n                        setTimer(event as unknown as KeyboardEvent, index, props.step as number);\n                    }\n\n                    event.preventDefault();\n                    break;\n                }\n\n                default:\n                    //no op\n                    break;\n            }\n        };\n\n        const onGutterMouseDown = (event: React.MouseEvent, index: number) => {\n            onResizeStart(event, index);\n            bindMouseListeners();\n        };\n\n        const onGutterTouchStart = (event: React.TouchEvent, index: number) => {\n            onResizeStart(event, index);\n            bindTouchListeners();\n            event.preventDefault();\n        };\n\n        const onGutterTouchMove = (event: React.TouchEvent) => {\n            onResize(event);\n            event.preventDefault();\n        };\n\n        const onGutterTouchEnd = (event: React.TouchEvent) => {\n            onResizeEnd();\n            unbindTouchListeners();\n            event.preventDefault();\n        };\n\n        const validateResize = (newPrevPanelSize: number, newNextPanelSize: number) => {\n            if (newPrevPanelSize > 100 || newPrevPanelSize < 0) return false;\n\n            if (newNextPanelSize > 100 || newNextPanelSize < 0) return false;\n\n            if (prevPanelMinSize() > newPrevPanelSize) {\n                return false;\n            }\n\n            if (nextPanelMinSize() > newNextPanelSize) {\n                return false;\n            }\n\n            return true;\n        };\n\n        const [bindDocumentMouseMoveListener, unbindDocumentMouseMoveListener] = useEventListener({\n            type: 'mousemove',\n            listener: (event: Event) => onResize(event as unknown as React.MouseEvent)\n        });\n        const [bindDocumentMouseUpListener, unbindDocumentMouseUpListener] = useEventListener({\n            type: 'mouseup',\n            listener: () => {\n                onResizeEnd();\n                unbindMouseListeners();\n            }\n        });\n\n        const bindMouseListeners = () => {\n            bindDocumentMouseMoveListener();\n            bindDocumentMouseUpListener();\n        };\n\n        const unbindMouseListeners = () => {\n            unbindDocumentMouseMoveListener();\n            unbindDocumentMouseUpListener();\n        };\n\n        const [bindDocumentTouchMoveListener, unbindDocumentTouchMoveListener] = useEventListener({\n            type: 'touchmove',\n            listener: (event: Event) => onResize(event as unknown as React.TouchEvent)\n        });\n\n        const [bindDocumentTouchEndListener, unbindDocumentTouchEndListener] = useEventListener({\n            type: 'touchend',\n            listener: () => {\n                onResizeEnd();\n                unbindTouchListeners();\n            }\n        });\n\n        const bindTouchListeners = () => {\n            bindDocumentTouchMoveListener();\n            bindDocumentTouchEndListener();\n        };\n\n        const unbindTouchListeners = () => {\n            unbindDocumentTouchMoveListener();\n            unbindDocumentTouchEndListener();\n        };\n\n        const clear = () => {\n            dragging.current = false;\n            size.current = null;\n            startPos.current = null;\n            prevPanelElement.current = null;\n            nextPanelElement.current = null;\n            prevPanelSize.current = null;\n            nextPanelSize.current = null;\n            gutterRef.current = null;\n            prevPanelIndex.current = null;\n        };\n\n        const isStateful = () => {\n            return props.stateKey != null;\n        };\n\n        const getStorage = React.useCallback(() => {\n            switch (props.stateStorage) {\n                case 'local':\n                    return window.localStorage;\n\n                case 'session':\n                    return window.sessionStorage;\n\n                default:\n                    throw new Error(props.stateStorage + ' is not a valid value for the state storage, supported values are \"local\" and \"session\".');\n            }\n        }, [props.stateStorage]);\n\n        const saveState = () => {\n            if (isArray(panelSizes)) {\n                getStorage().setItem(props.stateKey as string, JSON.stringify(panelSizes));\n            }\n        };\n\n        const restoreState = React.useCallback(() => {\n            const stateString = getStorage().getItem(props.stateKey as string);\n\n            if (stateString) {\n                setPanelSizes(JSON.parse(stateString));\n            }\n        }, [getStorage, props.stateKey]);\n\n        React.useEffect(() => {\n            if (isStateful()) {\n                restoreState();\n            }\n        }, [restoreState]);\n\n        const findPanels = () => {\n            const childrenArray = inProps?.children ? (Array.isArray(inProps?.children) ? inProps?.children : [inProps?.children]) : [];\n            const panelsArray: React.ReactElement[] = [];\n\n            childrenArray.forEach((child) => {\n                if (isValidPanelElement(child) && child.type && (child.type as React.ComponentType).displayName === 'PrimeReact.SplitterPanel') {\n                    panelsArray.push(child);\n                }\n            });\n\n            setPanels(panelsArray);\n        };\n\n        React.useEffect(() => {\n            findPanels();\n        }, [inProps?.children]);\n\n        React.useEffect(() => {\n            if (!panels.length) return;\n\n            const _panelSizes: number[] = [];\n\n            panels.forEach((panel, i) => {\n                const panelInitialSize = isValidPanelElement(panel) && isNotEmpty(panel.props?.size) ? panel.props?.size : null;\n                const panelSize = panelInitialSize || 100 / panels.length;\n\n                _panelSizes[i] = panelSize;\n            });\n\n            setPrevSize(Number.parseFloat(Number(_panelSizes[0]).toFixed(4)));\n            setPanelSizes(_panelSizes);\n        }, [panels]);\n\n        const prevPanelMinSize = () => {\n            const index = prevPanelIndex.current;\n\n            if (index !== null && typeof index === 'number' && panels[index]) {\n                const panel = panels[index];\n\n                if (isValidPanelElement(panel) && panel.props?.minSize !== undefined) {\n                    return panel.props.minSize;\n                }\n            }\n\n            return 0;\n        };\n\n        const nextPanelMinSize = () => {\n            const index = prevPanelIndex.current;\n\n            if (index !== null && typeof index === 'number') {\n                const nextIndex = index + 1;\n                const panel = panels[nextIndex];\n\n                if (isValidPanelElement(panel) && panel.props?.minSize !== undefined) {\n                    return panel.props.minSize;\n                }\n            }\n\n            return 0;\n        };\n\n        return {\n            state,\n            registerPanel,\n            registerGutter,\n            registerThumb,\n            panelCounter,\n            panelSizes,\n            prevSize,\n            // refs\n            gutterRef,\n            gutterRefs,\n            // methods\n            onResizeStart,\n            onResize,\n            onResizeEnd,\n            onGutterMouseDown,\n            onGutterTouchStart,\n            onGutterTouchMove,\n            onGutterTouchEnd,\n            onGutterKeyUp,\n            onGutterKeyDown\n        };\n    }\n});\n","import type { useSplitterProps } from '@primereact/types/shared/splitter';\n\nexport const defaultProps: useSplitterProps = {\n    orientation: 'horizontal',\n    gutterSize: 4,\n    stateKey: undefined,\n    stateStorage: 'session',\n    step: 5\n};\n"],"mappings":"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","names":["withHeadless","useEventListener","getHeight","getOuterHeight","getOuterWidth","getWidth","isRTL","isArray","isNotEmpty","React","defaultProps","isValidPanelElement","panel","useSplitter","withHeadless","defaultProps","props","elementRef","inProps","gutterRef","gutterRefs","size","dragging","startPos","prevPanelElement","nextPanelElement","prevPanelSize","prevSize","setPrevSize","nextPanelSize","prevPanelIndex","timer","panelSizes","setPanelSizes","panels","setPanels","horizontal","panelCounter","gutterCounter","thumbCounter","state","registerPanel","index","registerGutter","registerThumb","onResizeStart","event","isKeyDown","_a","_b","_c","_d","getWidth","getHeight","getOuterWidth","getOuterHeight","onResize","step","newPos","newPrevPanelSize","newNextPanelSize","isRTL","validateResize","prevPanelMinSize","nextPanelMinSize","onResizeEnd","isStateful","saveState","gutter","clear","repeat","setTimer","clearTimer","onGutterKeyUp","onGutterKeyDown","onGutterMouseDown","bindMouseListeners","onGutterTouchStart","bindTouchListeners","onGutterTouchMove","onGutterTouchEnd","unbindTouchListeners","bindDocumentMouseMoveListener","unbindDocumentMouseMoveListener","useEventListener","bindDocumentMouseUpListener","unbindDocumentMouseUpListener","unbindMouseListeners","bindDocumentTouchMoveListener","unbindDocumentTouchMoveListener","bindDocumentTouchEndListener","unbindDocumentTouchEndListener","getStorage","isArray","restoreState","stateString","findPanels","childrenArray","panelsArray","child","_panelSizes","i","panelSize","isNotEmpty","nextIndex"]}