import { Panel, ViewTab } from './ViewPanel.vue'; /** * ResizableView — a VSCode-like multi-panel editor layout. * * CONCEPTS * ───────── * Panel — a leaf node: holds an ordered list of tabs, one of which is active. * Group — an inner node: an array that contains Panels and/or nested Groups. * Groups alternate direction by depth: * depth 1 (views[]) → horizontal * depth 2 (item1[]) → vertical * depth 3 (item2[]) → horizontal * Three levels of nesting therefore support h → v → h splits. * * TREE SHAPE * ────────── * `views` is a Level1Item[] whose elements are either a Panel (rendered * directly) or a Level2Item[] Group (rendered as a nested Resizable). * * views = [ * panelA, // full-width single panel * [ panelB, panelC ], // vertical split: B above C * [ [ panelD, panelE ], panelF ] // vertical: (D|E horizontal) above F * ] * * DRAG & DROP * ─────────── * Shared drag state (`dragState`) is stored here and injected into every * ViewPanel via provide/inject under the key '$vrp'. Each ViewPanel has two * independent drop zones: * * Tabs bar — reorders tabs; dropped tab becomes active in the target panel. * Content — splits the panel (left/right/top/bottom) or appends (center). */ type Level3Item = Panel; type Level2Item = Panel | Level3Item[]; type Level1Item = Panel | Level2Item[]; type __VLS_Slots = { tab: (props: { tab: ViewTab | undefined; panel: Panel; }) => any; }; type __VLS_ModelProps = { modelValue?: Level1Item[]; }; declare const __VLS_base: import('vue').DefineComponent<__VLS_ModelProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, { "update:modelValue": (value: Level1Item[]) => any; }, string, import('vue').PublicProps, Readonly<__VLS_ModelProps> & Readonly<{ "onUpdate:modelValue"?: ((value: Level1Item[]) => any) | undefined; }>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>; declare const __VLS_export: __VLS_WithSlots; declare const _default: typeof __VLS_export; export default _default; type __VLS_WithSlots = T & { new (): { $slots: S; }; };