{"version":3,"file":"index.mjs","sources":["../../src/splitter/BaseSplitter.vue","../../src/splitter/Splitter.vue","../../src/splitter/Splitter.vue?vue&type=template&id=b3f08750&lang.js"],"sourcesContent":["<script>\nimport BaseComponent from '@primevue/core/basecomponent';\nimport SplitterStyle from 'primevue/splitter/style';\n\nexport default {\n    name: 'BaseSplitter',\n    extends: BaseComponent,\n    props: {\n        layout: {\n            type: String,\n            default: 'horizontal'\n        },\n        gutterSize: {\n            type: Number,\n            default: 4\n        },\n        stateKey: {\n            type: String,\n            default: null\n        },\n        stateStorage: {\n            type: String,\n            default: 'session'\n        },\n        step: {\n            type: Number,\n            default: 5\n        }\n    },\n    style: SplitterStyle,\n    provide() {\n        return {\n            $pcSplitter: this,\n            $parentInstance: this\n        };\n    }\n};\n</script>\n","<template>\n    <div :class=\"cx('root')\" :data-p-resizing=\"false\" :data-p=\"dataP\" v-bind=\"ptmi('root', getPTOptions)\">\n        <template v-for=\"(panel, i) of panels\" :key=\"i\">\n            <component :is=\"panel\" tabindex=\"-1\"></component>\n            <div\n                v-if=\"i !== panels.length - 1\"\n                ref=\"gutter\"\n                :class=\"cx('gutter')\"\n                tabindex=\"-1\"\n                @mousedown=\"onGutterMouseDown($event, i)\"\n                @touchstart=\"onGutterTouchStart($event, i)\"\n                @touchmove=\"onGutterTouchMove($event, i)\"\n                @touchend=\"onGutterTouchEnd($event, i)\"\n                :data-p-gutter-resizing=\"false\"\n                :data-p=\"dataP\"\n                v-bind=\"ptm('gutter')\"\n            >\n                <div\n                    :class=\"cx('gutterHandle')\"\n                    role=\"separator\"\n                    tabindex=\"0\"\n                    :style=\"[gutterStyle]\"\n                    :aria-orientation=\"layout\"\n                    :aria-valuenow=\"prevSize\"\n                    @keyup=\"onGutterKeyUp\"\n                    @keydown=\"onGutterKeyDown($event, i)\"\n                    :data-p=\"dataP\"\n                    v-bind=\"ptm('gutterHandle')\"\n                ></div>\n            </div>\n        </template>\n    </div>\n</template>\n\n<script>\nimport { cn } from '@primeuix/utils';\nimport { getHeight, getOuterHeight, getOuterWidth, getWidth, isRTL } from '@primeuix/utils/dom';\nimport { isArray, isNotEmpty } from '@primeuix/utils/object';\nimport { getVNodeProp } from '@primevue/core/utils';\nimport BaseSplitter from './BaseSplitter.vue';\n\nexport default {\n    name: 'Splitter',\n    extends: BaseSplitter,\n    inheritAttrs: false,\n    emits: ['resizestart', 'resizeend', 'resize'],\n    dragging: false,\n    mouseMoveListener: null,\n    mouseUpListener: null,\n    touchMoveListener: null,\n    touchEndListener: null,\n    size: null,\n    gutterElement: null,\n    startPos: null,\n    prevPanelElement: null,\n    nextPanelElement: null,\n    nextPanelSize: null,\n    prevPanelSize: null,\n    panelSizes: null,\n    prevPanelIndex: null,\n    timer: null,\n    data() {\n        return {\n            prevSize: null\n        };\n    },\n    mounted() {\n        this.initializePanels();\n    },\n    watch: {\n        panelSizeConfig() {\n            this.initializePanels();\n        }\n    },\n    beforeUnmount() {\n        this.clear();\n        this.unbindMouseListeners();\n    },\n    methods: {\n        isSplitterPanel(child) {\n            return child.type.name === 'SplitterPanel';\n        },\n        getPanelSize(panel) {\n            let size = panel.props && isNotEmpty(panel.props.size) ? panel.props.size : null;\n\n            return size ?? 100 / this.panels.length;\n        },\n        initializePanels() {\n            if (this.panels && this.panels.length) {\n                let initialized = false;\n\n                if (this.isStateful()) {\n                    initialized = this.restoreState();\n                }\n\n                if (!initialized) {\n                    let children = [...this.$el.children].filter((child) => child.getAttribute('data-pc-name') === 'splitterpanel');\n                    let _panelSizes = [];\n\n                    this.panels.map((panel, i) => {\n                        let panelSize = this.getPanelSize(panel);\n\n                        _panelSizes[i] = panelSize;\n                        children[i].style.flexBasis = 'calc(' + panelSize + '% - ' + (this.panels.length - 1) * this.gutterSize + 'px)';\n                    });\n\n                    this.panelSizes = _panelSizes;\n                    this.prevSize = parseFloat(_panelSizes[0]).toFixed(4);\n                }\n            }\n        },\n        onResizeStart(event, index, isKeyDown) {\n            this.gutterElement = event.currentTarget || event.target.parentElement;\n            this.size = this.horizontal ? getWidth(this.$el) : getHeight(this.$el);\n\n            if (!isKeyDown) {\n                this.dragging = true;\n                this.startPos = this.layout === 'horizontal' ? event.pageX || event.changedTouches[0].pageX : event.pageY || event.changedTouches[0].pageY;\n            }\n\n            this.prevPanelElement = this.gutterElement.previousElementSibling;\n            this.nextPanelElement = this.gutterElement.nextElementSibling;\n\n            if (isKeyDown) {\n                this.prevPanelSize = this.horizontal ? getOuterWidth(this.prevPanelElement, true) : getOuterHeight(this.prevPanelElement, true);\n                this.nextPanelSize = this.horizontal ? getOuterWidth(this.nextPanelElement, true) : getOuterHeight(this.nextPanelElement, true);\n            } else {\n                this.prevPanelSize = (100 * (this.horizontal ? getOuterWidth(this.prevPanelElement, true) : getOuterHeight(this.prevPanelElement, true))) / this.size;\n                this.nextPanelSize = (100 * (this.horizontal ? getOuterWidth(this.nextPanelElement, true) : getOuterHeight(this.nextPanelElement, true))) / this.size;\n            }\n\n            this.prevPanelIndex = index;\n            this.$emit('resizestart', { originalEvent: event, sizes: this.panelSizes });\n            this.$refs.gutter[index].setAttribute('data-p-gutter-resizing', true);\n            this.$el.setAttribute('data-p-resizing', true);\n        },\n        onResize(event, step, isKeyDown) {\n            let newPos, newPrevPanelSize, newNextPanelSize;\n\n            if (isKeyDown) {\n                if (this.horizontal) {\n                    newPrevPanelSize = (100 * (this.prevPanelSize + step)) / this.size;\n                    newNextPanelSize = (100 * (this.nextPanelSize - step)) / this.size;\n                } else {\n                    newPrevPanelSize = (100 * (this.prevPanelSize - step)) / this.size;\n                    newNextPanelSize = (100 * (this.nextPanelSize + step)) / this.size;\n                }\n            } else {\n                if (this.horizontal) {\n                    if (isRTL(this.$el)) {\n                        newPos = ((this.startPos - event.pageX) * 100) / this.size;\n                    } else {\n                        newPos = ((event.pageX - this.startPos) * 100) / this.size;\n                    }\n                } else {\n                    newPos = ((event.pageY - this.startPos) * 100) / this.size;\n                }\n\n                newPrevPanelSize = this.prevPanelSize + newPos;\n                newNextPanelSize = this.nextPanelSize - newPos;\n            }\n\n            if (!this.validateResize(newPrevPanelSize, newNextPanelSize)) {\n                newPrevPanelSize = Math.min(Math.max(this.prevPanelMinSize, newPrevPanelSize), 100 - this.nextPanelMinSize);\n                newNextPanelSize = Math.min(Math.max(this.nextPanelMinSize, newNextPanelSize), 100 - this.prevPanelMinSize);\n            }\n\n            this.prevPanelElement.style.flexBasis = 'calc(' + newPrevPanelSize + '% - ' + (this.panels.length - 1) * this.gutterSize + 'px)';\n            this.nextPanelElement.style.flexBasis = 'calc(' + newNextPanelSize + '% - ' + (this.panels.length - 1) * this.gutterSize + 'px)';\n            this.panelSizes[this.prevPanelIndex] = newPrevPanelSize;\n            this.panelSizes[this.prevPanelIndex + 1] = newNextPanelSize;\n            this.prevSize = parseFloat(newPrevPanelSize).toFixed(4);\n\n            this.$emit('resize', { originalEvent: event, sizes: this.panelSizes });\n        },\n        onResizeEnd(event) {\n            if (this.isStateful()) {\n                this.saveState();\n            }\n\n            this.$emit('resizeend', { originalEvent: event, sizes: this.panelSizes });\n            this.$refs.gutter.forEach((gutter) => gutter.setAttribute('data-p-gutter-resizing', false));\n            this.$el.setAttribute('data-p-resizing', false);\n            this.clear();\n        },\n        repeat(event, index, step) {\n            this.onResizeStart(event, index, true);\n            this.onResize(event, step, true);\n        },\n        setTimer(event, index, step) {\n            if (!this.timer) {\n                this.timer = setInterval(() => {\n                    this.repeat(event, index, step);\n                }, 40);\n            }\n        },\n        clearTimer() {\n            if (this.timer) {\n                clearInterval(this.timer);\n                this.timer = null;\n            }\n        },\n        onGutterKeyUp() {\n            this.clearTimer();\n            this.onResizeEnd();\n        },\n        onGutterKeyDown(event, index) {\n            switch (event.code) {\n                case 'ArrowLeft': {\n                    if (this.layout === 'horizontal') {\n                        this.setTimer(event, index, this.step * -1);\n                    }\n\n                    event.preventDefault();\n                    break;\n                }\n\n                case 'ArrowRight': {\n                    if (this.layout === 'horizontal') {\n                        this.setTimer(event, index, this.step);\n                    }\n\n                    event.preventDefault();\n                    break;\n                }\n\n                case 'ArrowDown': {\n                    if (this.layout === 'vertical') {\n                        this.setTimer(event, index, this.step * -1);\n                    }\n\n                    event.preventDefault();\n                    break;\n                }\n\n                case 'ArrowUp': {\n                    if (this.layout === 'vertical') {\n                        this.setTimer(event, index, this.step);\n                    }\n\n                    event.preventDefault();\n                    break;\n                }\n\n                default:\n                    //no op\n                    break;\n            }\n        },\n        onGutterMouseDown(event, index) {\n            this.onResizeStart(event, index);\n            this.bindMouseListeners();\n        },\n        onGutterTouchStart(event, index) {\n            this.onResizeStart(event, index);\n            this.bindTouchListeners();\n            event.preventDefault();\n        },\n        onGutterTouchMove(event) {\n            this.onResize(event);\n            event.preventDefault();\n        },\n        onGutterTouchEnd(event) {\n            this.onResizeEnd(event);\n            this.unbindTouchListeners();\n            event.preventDefault();\n        },\n        bindMouseListeners() {\n            if (!this.mouseMoveListener) {\n                this.mouseMoveListener = (event) => this.onResize(event);\n                document.addEventListener('mousemove', this.mouseMoveListener);\n            }\n\n            if (!this.mouseUpListener) {\n                this.mouseUpListener = (event) => {\n                    this.onResizeEnd(event);\n                    this.unbindMouseListeners();\n                };\n\n                document.addEventListener('mouseup', this.mouseUpListener);\n            }\n        },\n        bindTouchListeners() {\n            if (!this.touchMoveListener) {\n                this.touchMoveListener = (event) => this.onResize(event.changedTouches[0]);\n                document.addEventListener('touchmove', this.touchMoveListener);\n            }\n\n            if (!this.touchEndListener) {\n                this.touchEndListener = (event) => {\n                    this.resizeEnd(event);\n                    this.unbindTouchListeners();\n                };\n\n                document.addEventListener('touchend', this.touchEndListener);\n            }\n        },\n        validateResize(newPrevPanelSize, newNextPanelSize) {\n            if (newPrevPanelSize > 100 || newPrevPanelSize < 0) return false;\n            if (newNextPanelSize > 100 || newNextPanelSize < 0) return false;\n\n            if (this.prevPanelMinSize > newPrevPanelSize) {\n                return false;\n            }\n\n            if (this.nextPanelMinSize > newNextPanelSize) {\n                return false;\n            }\n\n            return true;\n        },\n        unbindMouseListeners() {\n            if (this.mouseMoveListener) {\n                document.removeEventListener('mousemove', this.mouseMoveListener);\n                this.mouseMoveListener = null;\n            }\n\n            if (this.mouseUpListener) {\n                document.removeEventListener('mouseup', this.mouseUpListener);\n                this.mouseUpListener = null;\n            }\n        },\n        unbindTouchListeners() {\n            if (this.touchMoveListener) {\n                document.removeEventListener('touchmove', this.touchMoveListener);\n                this.touchMoveListener = null;\n            }\n\n            if (this.touchEndListener) {\n                document.removeEventListener('touchend', this.touchEndListener);\n                this.touchEndListener = null;\n            }\n        },\n        clear() {\n            this.dragging = false;\n            this.size = null;\n            this.startPos = null;\n            this.prevPanelElement = null;\n            this.nextPanelElement = null;\n            this.prevPanelSize = null;\n            this.nextPanelSize = null;\n            this.gutterElement = null;\n            this.prevPanelIndex = null;\n        },\n        isStateful() {\n            return this.stateKey != null;\n        },\n        getStorage() {\n            switch (this.stateStorage) {\n                case 'local':\n                    return window.localStorage;\n\n                case 'session':\n                    return window.sessionStorage;\n\n                default:\n                    throw new Error(this.stateStorage + ' is not a valid value for the state storage, supported values are \"local\" and \"session\".');\n            }\n        },\n        saveState() {\n            if (isArray(this.panelSizes)) {\n                this.getStorage().setItem(this.stateKey, JSON.stringify(this.panelSizes));\n            }\n        },\n        restoreState() {\n            const storage = this.getStorage();\n            const stateString = storage.getItem(this.stateKey);\n\n            if (stateString) {\n                this.panelSizes = JSON.parse(stateString);\n                let children = [...this.$el.children].filter((child) => child.getAttribute('data-pc-name') === 'splitterpanel');\n\n                children.forEach((child, i) => {\n                    child.style.flexBasis = 'calc(' + this.panelSizes[i] + '% - ' + (this.panels.length - 1) * this.gutterSize + 'px)';\n                });\n\n                return true;\n            }\n\n            return false;\n        },\n        resetState() {\n            this.initializePanels();\n        }\n    },\n    computed: {\n        panels() {\n            const panels = [];\n\n            this.$slots.default().forEach((child) => {\n                if (this.isSplitterPanel(child)) {\n                    panels.push(child);\n                } else if (child.children instanceof Array) {\n                    child.children.forEach((nestedChild) => {\n                        if (this.isSplitterPanel(nestedChild)) {\n                            panels.push(nestedChild);\n                        }\n                    });\n                }\n            });\n\n            return panels;\n        },\n        panelSizeConfig() {\n            // programmatic changes\n            return this.panels.map((panel) => this.getPanelSize(panel)).join(',');\n        },\n        gutterStyle() {\n            if (this.horizontal) return { width: this.gutterSize + 'px' };\n            else return { height: this.gutterSize + 'px' };\n        },\n        horizontal() {\n            return this.layout === 'horizontal';\n        },\n        getPTOptions() {\n            return {\n                context: {\n                    nested: this.$parentInstance?.nestedState\n                }\n            };\n        },\n        prevPanelMinSize() {\n            const prevPanelMinSize = getVNodeProp(this.panels[this.prevPanelIndex], 'minSize');\n\n            if (this.panels[this.prevPanelIndex].props && prevPanelMinSize) {\n                return prevPanelMinSize;\n            }\n\n            return 0;\n        },\n        nextPanelMinSize() {\n            const nextPanelMinSize = getVNodeProp(this.panels[this.prevPanelIndex + 1], 'minSize');\n\n            if (this.panels[this.prevPanelIndex + 1].props && nextPanelMinSize) {\n                return nextPanelMinSize;\n            }\n\n            return 0;\n        },\n        dataP() {\n            return cn({\n                [this.layout]: this.layout,\n                nested: this.$parentInstance?.nestedState != null\n            });\n        }\n    }\n};\n</script>\n","<template>\n    <div :class=\"cx('root')\" :data-p-resizing=\"false\" :data-p=\"dataP\" v-bind=\"ptmi('root', getPTOptions)\">\n        <template v-for=\"(panel, i) of panels\" :key=\"i\">\n            <component :is=\"panel\" tabindex=\"-1\"></component>\n            <div\n                v-if=\"i !== panels.length - 1\"\n                ref=\"gutter\"\n                :class=\"cx('gutter')\"\n                tabindex=\"-1\"\n                @mousedown=\"onGutterMouseDown($event, i)\"\n                @touchstart=\"onGutterTouchStart($event, i)\"\n                @touchmove=\"onGutterTouchMove($event, i)\"\n                @touchend=\"onGutterTouchEnd($event, i)\"\n                :data-p-gutter-resizing=\"false\"\n                :data-p=\"dataP\"\n                v-bind=\"ptm('gutter')\"\n            >\n                <div\n                    :class=\"cx('gutterHandle')\"\n                    role=\"separator\"\n                    tabindex=\"0\"\n                    :style=\"[gutterStyle]\"\n                    :aria-orientation=\"layout\"\n                    :aria-valuenow=\"prevSize\"\n                    @keyup=\"onGutterKeyUp\"\n                    @keydown=\"onGutterKeyDown($event, i)\"\n                    :data-p=\"dataP\"\n                    v-bind=\"ptm('gutterHandle')\"\n                ></div>\n            </div>\n        </template>\n    </div>\n</template>\n\n<script>\nimport { cn } from '@primeuix/utils';\nimport { getHeight, getOuterHeight, getOuterWidth, getWidth, isRTL } from '@primeuix/utils/dom';\nimport { isArray, isNotEmpty } from '@primeuix/utils/object';\nimport { getVNodeProp } from '@primevue/core/utils';\nimport BaseSplitter from './BaseSplitter.vue';\n\nexport default {\n    name: 'Splitter',\n    extends: BaseSplitter,\n    inheritAttrs: false,\n    emits: ['resizestart', 'resizeend', 'resize'],\n    dragging: false,\n    mouseMoveListener: null,\n    mouseUpListener: null,\n    touchMoveListener: null,\n    touchEndListener: null,\n    size: null,\n    gutterElement: null,\n    startPos: null,\n    prevPanelElement: null,\n    nextPanelElement: null,\n    nextPanelSize: null,\n    prevPanelSize: null,\n    panelSizes: null,\n    prevPanelIndex: null,\n    timer: null,\n    data() {\n        return {\n            prevSize: null\n        };\n    },\n    mounted() {\n        this.initializePanels();\n    },\n    watch: {\n        panelSizeConfig() {\n            this.initializePanels();\n        }\n    },\n    beforeUnmount() {\n        this.clear();\n        this.unbindMouseListeners();\n    },\n    methods: {\n        isSplitterPanel(child) {\n            return child.type.name === 'SplitterPanel';\n        },\n        getPanelSize(panel) {\n            let size = panel.props && isNotEmpty(panel.props.size) ? panel.props.size : null;\n\n            return size ?? 100 / this.panels.length;\n        },\n        initializePanels() {\n            if (this.panels && this.panels.length) {\n                let initialized = false;\n\n                if (this.isStateful()) {\n                    initialized = this.restoreState();\n                }\n\n                if (!initialized) {\n                    let children = [...this.$el.children].filter((child) => child.getAttribute('data-pc-name') === 'splitterpanel');\n                    let _panelSizes = [];\n\n                    this.panels.map((panel, i) => {\n                        let panelSize = this.getPanelSize(panel);\n\n                        _panelSizes[i] = panelSize;\n                        children[i].style.flexBasis = 'calc(' + panelSize + '% - ' + (this.panels.length - 1) * this.gutterSize + 'px)';\n                    });\n\n                    this.panelSizes = _panelSizes;\n                    this.prevSize = parseFloat(_panelSizes[0]).toFixed(4);\n                }\n            }\n        },\n        onResizeStart(event, index, isKeyDown) {\n            this.gutterElement = event.currentTarget || event.target.parentElement;\n            this.size = this.horizontal ? getWidth(this.$el) : getHeight(this.$el);\n\n            if (!isKeyDown) {\n                this.dragging = true;\n                this.startPos = this.layout === 'horizontal' ? event.pageX || event.changedTouches[0].pageX : event.pageY || event.changedTouches[0].pageY;\n            }\n\n            this.prevPanelElement = this.gutterElement.previousElementSibling;\n            this.nextPanelElement = this.gutterElement.nextElementSibling;\n\n            if (isKeyDown) {\n                this.prevPanelSize = this.horizontal ? getOuterWidth(this.prevPanelElement, true) : getOuterHeight(this.prevPanelElement, true);\n                this.nextPanelSize = this.horizontal ? getOuterWidth(this.nextPanelElement, true) : getOuterHeight(this.nextPanelElement, true);\n            } else {\n                this.prevPanelSize = (100 * (this.horizontal ? getOuterWidth(this.prevPanelElement, true) : getOuterHeight(this.prevPanelElement, true))) / this.size;\n                this.nextPanelSize = (100 * (this.horizontal ? getOuterWidth(this.nextPanelElement, true) : getOuterHeight(this.nextPanelElement, true))) / this.size;\n            }\n\n            this.prevPanelIndex = index;\n            this.$emit('resizestart', { originalEvent: event, sizes: this.panelSizes });\n            this.$refs.gutter[index].setAttribute('data-p-gutter-resizing', true);\n            this.$el.setAttribute('data-p-resizing', true);\n        },\n        onResize(event, step, isKeyDown) {\n            let newPos, newPrevPanelSize, newNextPanelSize;\n\n            if (isKeyDown) {\n                if (this.horizontal) {\n                    newPrevPanelSize = (100 * (this.prevPanelSize + step)) / this.size;\n                    newNextPanelSize = (100 * (this.nextPanelSize - step)) / this.size;\n                } else {\n                    newPrevPanelSize = (100 * (this.prevPanelSize - step)) / this.size;\n                    newNextPanelSize = (100 * (this.nextPanelSize + step)) / this.size;\n                }\n            } else {\n                if (this.horizontal) {\n                    if (isRTL(this.$el)) {\n                        newPos = ((this.startPos - event.pageX) * 100) / this.size;\n                    } else {\n                        newPos = ((event.pageX - this.startPos) * 100) / this.size;\n                    }\n                } else {\n                    newPos = ((event.pageY - this.startPos) * 100) / this.size;\n                }\n\n                newPrevPanelSize = this.prevPanelSize + newPos;\n                newNextPanelSize = this.nextPanelSize - newPos;\n            }\n\n            if (!this.validateResize(newPrevPanelSize, newNextPanelSize)) {\n                newPrevPanelSize = Math.min(Math.max(this.prevPanelMinSize, newPrevPanelSize), 100 - this.nextPanelMinSize);\n                newNextPanelSize = Math.min(Math.max(this.nextPanelMinSize, newNextPanelSize), 100 - this.prevPanelMinSize);\n            }\n\n            this.prevPanelElement.style.flexBasis = 'calc(' + newPrevPanelSize + '% - ' + (this.panels.length - 1) * this.gutterSize + 'px)';\n            this.nextPanelElement.style.flexBasis = 'calc(' + newNextPanelSize + '% - ' + (this.panels.length - 1) * this.gutterSize + 'px)';\n            this.panelSizes[this.prevPanelIndex] = newPrevPanelSize;\n            this.panelSizes[this.prevPanelIndex + 1] = newNextPanelSize;\n            this.prevSize = parseFloat(newPrevPanelSize).toFixed(4);\n\n            this.$emit('resize', { originalEvent: event, sizes: this.panelSizes });\n        },\n        onResizeEnd(event) {\n            if (this.isStateful()) {\n                this.saveState();\n            }\n\n            this.$emit('resizeend', { originalEvent: event, sizes: this.panelSizes });\n            this.$refs.gutter.forEach((gutter) => gutter.setAttribute('data-p-gutter-resizing', false));\n            this.$el.setAttribute('data-p-resizing', false);\n            this.clear();\n        },\n        repeat(event, index, step) {\n            this.onResizeStart(event, index, true);\n            this.onResize(event, step, true);\n        },\n        setTimer(event, index, step) {\n            if (!this.timer) {\n                this.timer = setInterval(() => {\n                    this.repeat(event, index, step);\n                }, 40);\n            }\n        },\n        clearTimer() {\n            if (this.timer) {\n                clearInterval(this.timer);\n                this.timer = null;\n            }\n        },\n        onGutterKeyUp() {\n            this.clearTimer();\n            this.onResizeEnd();\n        },\n        onGutterKeyDown(event, index) {\n            switch (event.code) {\n                case 'ArrowLeft': {\n                    if (this.layout === 'horizontal') {\n                        this.setTimer(event, index, this.step * -1);\n                    }\n\n                    event.preventDefault();\n                    break;\n                }\n\n                case 'ArrowRight': {\n                    if (this.layout === 'horizontal') {\n                        this.setTimer(event, index, this.step);\n                    }\n\n                    event.preventDefault();\n                    break;\n                }\n\n                case 'ArrowDown': {\n                    if (this.layout === 'vertical') {\n                        this.setTimer(event, index, this.step * -1);\n                    }\n\n                    event.preventDefault();\n                    break;\n                }\n\n                case 'ArrowUp': {\n                    if (this.layout === 'vertical') {\n                        this.setTimer(event, index, this.step);\n                    }\n\n                    event.preventDefault();\n                    break;\n                }\n\n                default:\n                    //no op\n                    break;\n            }\n        },\n        onGutterMouseDown(event, index) {\n            this.onResizeStart(event, index);\n            this.bindMouseListeners();\n        },\n        onGutterTouchStart(event, index) {\n            this.onResizeStart(event, index);\n            this.bindTouchListeners();\n            event.preventDefault();\n        },\n        onGutterTouchMove(event) {\n            this.onResize(event);\n            event.preventDefault();\n        },\n        onGutterTouchEnd(event) {\n            this.onResizeEnd(event);\n            this.unbindTouchListeners();\n            event.preventDefault();\n        },\n        bindMouseListeners() {\n            if (!this.mouseMoveListener) {\n                this.mouseMoveListener = (event) => this.onResize(event);\n                document.addEventListener('mousemove', this.mouseMoveListener);\n            }\n\n            if (!this.mouseUpListener) {\n                this.mouseUpListener = (event) => {\n                    this.onResizeEnd(event);\n                    this.unbindMouseListeners();\n                };\n\n                document.addEventListener('mouseup', this.mouseUpListener);\n            }\n        },\n        bindTouchListeners() {\n            if (!this.touchMoveListener) {\n                this.touchMoveListener = (event) => this.onResize(event.changedTouches[0]);\n                document.addEventListener('touchmove', this.touchMoveListener);\n            }\n\n            if (!this.touchEndListener) {\n                this.touchEndListener = (event) => {\n                    this.resizeEnd(event);\n                    this.unbindTouchListeners();\n                };\n\n                document.addEventListener('touchend', this.touchEndListener);\n            }\n        },\n        validateResize(newPrevPanelSize, newNextPanelSize) {\n            if (newPrevPanelSize > 100 || newPrevPanelSize < 0) return false;\n            if (newNextPanelSize > 100 || newNextPanelSize < 0) return false;\n\n            if (this.prevPanelMinSize > newPrevPanelSize) {\n                return false;\n            }\n\n            if (this.nextPanelMinSize > newNextPanelSize) {\n                return false;\n            }\n\n            return true;\n        },\n        unbindMouseListeners() {\n            if (this.mouseMoveListener) {\n                document.removeEventListener('mousemove', this.mouseMoveListener);\n                this.mouseMoveListener = null;\n            }\n\n            if (this.mouseUpListener) {\n                document.removeEventListener('mouseup', this.mouseUpListener);\n                this.mouseUpListener = null;\n            }\n        },\n        unbindTouchListeners() {\n            if (this.touchMoveListener) {\n                document.removeEventListener('touchmove', this.touchMoveListener);\n                this.touchMoveListener = null;\n            }\n\n            if (this.touchEndListener) {\n                document.removeEventListener('touchend', this.touchEndListener);\n                this.touchEndListener = null;\n            }\n        },\n        clear() {\n            this.dragging = false;\n            this.size = null;\n            this.startPos = null;\n            this.prevPanelElement = null;\n            this.nextPanelElement = null;\n            this.prevPanelSize = null;\n            this.nextPanelSize = null;\n            this.gutterElement = null;\n            this.prevPanelIndex = null;\n        },\n        isStateful() {\n            return this.stateKey != null;\n        },\n        getStorage() {\n            switch (this.stateStorage) {\n                case 'local':\n                    return window.localStorage;\n\n                case 'session':\n                    return window.sessionStorage;\n\n                default:\n                    throw new Error(this.stateStorage + ' is not a valid value for the state storage, supported values are \"local\" and \"session\".');\n            }\n        },\n        saveState() {\n            if (isArray(this.panelSizes)) {\n                this.getStorage().setItem(this.stateKey, JSON.stringify(this.panelSizes));\n            }\n        },\n        restoreState() {\n            const storage = this.getStorage();\n            const stateString = storage.getItem(this.stateKey);\n\n            if (stateString) {\n                this.panelSizes = JSON.parse(stateString);\n                let children = [...this.$el.children].filter((child) => child.getAttribute('data-pc-name') === 'splitterpanel');\n\n                children.forEach((child, i) => {\n                    child.style.flexBasis = 'calc(' + this.panelSizes[i] + '% - ' + (this.panels.length - 1) * this.gutterSize + 'px)';\n                });\n\n                return true;\n            }\n\n            return false;\n        },\n        resetState() {\n            this.initializePanels();\n        }\n    },\n    computed: {\n        panels() {\n            const panels = [];\n\n            this.$slots.default().forEach((child) => {\n                if (this.isSplitterPanel(child)) {\n                    panels.push(child);\n                } else if (child.children instanceof Array) {\n                    child.children.forEach((nestedChild) => {\n                        if (this.isSplitterPanel(nestedChild)) {\n                            panels.push(nestedChild);\n                        }\n                    });\n                }\n            });\n\n            return panels;\n        },\n        panelSizeConfig() {\n            // programmatic changes\n            return this.panels.map((panel) => this.getPanelSize(panel)).join(',');\n        },\n        gutterStyle() {\n            if (this.horizontal) return { width: this.gutterSize + 'px' };\n            else return { height: this.gutterSize + 'px' };\n        },\n        horizontal() {\n            return this.layout === 'horizontal';\n        },\n        getPTOptions() {\n            return {\n                context: {\n                    nested: this.$parentInstance?.nestedState\n                }\n            };\n        },\n        prevPanelMinSize() {\n            const prevPanelMinSize = getVNodeProp(this.panels[this.prevPanelIndex], 'minSize');\n\n            if (this.panels[this.prevPanelIndex].props && prevPanelMinSize) {\n                return prevPanelMinSize;\n            }\n\n            return 0;\n        },\n        nextPanelMinSize() {\n            const nextPanelMinSize = getVNodeProp(this.panels[this.prevPanelIndex + 1], 'minSize');\n\n            if (this.panels[this.prevPanelIndex + 1].props && nextPanelMinSize) {\n                return nextPanelMinSize;\n            }\n\n            return 0;\n        },\n        dataP() {\n            return cn({\n                [this.layout]: this.layout,\n                nested: this.$parentInstance?.nestedState != null\n            });\n        }\n    }\n};\n</script>\n"],"names":["name","BaseComponent","props","layout","type","String","gutterSize","Number","stateKey","stateStorage","step","style","SplitterStyle","provide","$pcSplitter","$parentInstance","BaseSplitter","inheritAttrs","emits","dragging","mouseMoveListener","mouseUpListener","touchMoveListener","touchEndListener","size","gutterElement","startPos","prevPanelElement","nextPanelElement","nextPanelSize","prevPanelSize","panelSizes","prevPanelIndex","timer","data","prevSize","mounted","initializePanels","watch","panelSizeConfig","beforeUnmount","clear","unbindMouseListeners","methods","isSplitterPanel","child","getPanelSize","panel","isNotEmpty","panels","length","_this","initialized","isStateful","restoreState","children","_toConsumableArray","$el","filter","getAttribute","_panelSizes","map","i","panelSize","flexBasis","parseFloat","toFixed","onResizeStart","event","index","isKeyDown","currentTarget","target","parentElement","horizontal","getWidth","getHeight","pageX","changedTouches","pageY","previousElementSibling","nextElementSibling","getOuterWidth","getOuterHeight","$emit","originalEvent","sizes","$refs","gutter","setAttribute","onResize","newPos","newPrevPanelSize","newNextPanelSize","isRTL","validateResize","Math","min","max","prevPanelMinSize","nextPanelMinSize","onResizeEnd","saveState","forEach","repeat","setTimer","_this2","setInterval","clearTimer","clearInterval","onGutterKeyUp","onGutterKeyDown","code","preventDefault","onGutterMouseDown","bindMouseListeners","onGutterTouchStart","bindTouchListeners","onGutterTouchMove","onGutterTouchEnd","unbindTouchListeners","_this3","document","addEventListener","_this4","resizeEnd","removeEventListener","getStorage","window","localStorage","sessionStorage","Error","isArray","setItem","JSON","stringify","_this5","storage","stateString","getItem","parse","resetState","computed","_this6","$slots","push","Array","nestedChild","_this7","join","gutterStyle","width","height","getPTOptions","_this$$parentInstance","context","nested","nestedState","getVNodeProp","dataP","_this$$parentInstance2","cn","_defineProperty","_openBlock","_createElementBlock","_mergeProps","_ctx","cx","$options","ptmi","_Fragment","_renderList","_createBlock","_resolveDynamicComponent","tabindex","ref","onMousedown","$event","onTouchstart","onTouchmove","onTouchend","ptm","_createElementVNode","role","$data","onKeyup","apply","arguments","onKeydown","_hoisted_3"],"mappings":"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"}