{"version":3,"file":"splitter2.mjs","names":[],"sources":["../../../../../../packages/components/splitter/src/splitter.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport {\n  computed,\n  getCurrentInstance,\n  nextTick,\n  provide,\n  reactive,\n  toRef,\n  watch,\n} from 'vue'\nimport { useNamespace, useOrderedChildren } from '@element-plus/hooks'\nimport { useContainer, useResize, useSize } from './hooks'\nimport { splitterEmits } from './splitter'\nimport { splitterRootContextKey } from './type'\n\nimport type { PanelItemState } from './type'\nimport type { SplitterProps } from './splitter'\n\nconst ns = useNamespace('splitter')\n\ndefineOptions({\n  name: 'ElSplitter',\n})\n\nconst emits = defineEmits(splitterEmits)\n\nconst props = withDefaults(defineProps<SplitterProps>(), {\n  layout: 'horizontal',\n})\nconst layout = toRef(props, 'layout')\nconst lazy = toRef(props, 'lazy')\n\nconst { containerEl, containerSize } = useContainer(layout)\n\nconst {\n  removeChild: unregisterPanel,\n  children: panels,\n  addChild: registerPanel,\n  ChildrenSorter: PanelsSorter,\n} = useOrderedChildren<PanelItemState>(getCurrentInstance()!, 'ElSplitterPanel')\n\nwatch(panels, () => {\n  movingIndex.value = null\n  panels.value.forEach((instance: PanelItemState, index: number) => {\n    instance.setIndex(index)\n  })\n})\n\nconst { percentSizes, pxSizes } = useSize(panels, containerSize)\n\nconst {\n  lazyOffset,\n  movingIndex,\n  onMoveStart,\n  onMoving,\n  onMoveEnd,\n  onCollapse,\n} = useResize(panels, containerSize, pxSizes, lazy)\n\nconst splitterStyles = computed(() => {\n  return {\n    [ns.cssVarBlockName('bar-offset')]: lazy.value\n      ? `${lazyOffset.value}px`\n      : undefined,\n  }\n})\n\nconst onResizeStart = (index: number) => {\n  onMoveStart(index)\n  emits('resizeStart', index, pxSizes.value)\n}\n\nconst onResize = (index: number, offset: number) => {\n  onMoving(index, offset)\n\n  if (!lazy.value) {\n    emits('resize', index, pxSizes.value)\n  }\n}\n\nconst onResizeEnd = async (index: number) => {\n  onMoveEnd()\n  await nextTick()\n  emits('resizeEnd', index, pxSizes.value)\n}\n\nconst onCollapsible = (index: number, type: 'start' | 'end') => {\n  onCollapse(index, type)\n  emits('collapse', index, type, pxSizes.value)\n}\n\nprovide(\n  splitterRootContextKey,\n  reactive({\n    panels,\n    percentSizes,\n    pxSizes,\n    layout,\n    lazy,\n    movingIndex,\n    containerSize,\n    onMoveStart: onResizeStart,\n    onMoving: onResize,\n    onMoveEnd: onResizeEnd,\n    onCollapse: onCollapsible,\n    registerPanel,\n    unregisterPanel,\n  })\n)\n</script>\n\n<template>\n  <div\n    ref=\"containerEl\"\n    :class=\"[ns.b(), ns.e(layout)]\"\n    :style=\"splitterStyles\"\n  >\n    <slot />\n    <panels-sorter />\n    <!-- Prevent iframe touch events from breaking -->\n    <div v-if=\"movingIndex\" :class=\"[ns.e('mask'), ns.e(`mask-${layout}`)]\" />\n  </div>\n</template>\n"],"mappings":""}