import{i as e}from"./preload-helper-B45gAKPr.js";import{t}from"./iframe-CMLjY6eW.js";import{E as n,a as r,d as i,f as a,l as o,m as s,n as c,p as l,r as u,u as d}from"./blocks-D3IlvJMm.js";import{t as f}from"./mdx-react-shim-DzMf9EAg.js";import{Basic as p,Constrained as m,Horizontal as h,NestedFourPanels as g,n as _,t as v}from"./Splitter.stories-Cm8DHzNI.js";function y(e){let t={code:`code`,h2:`h2`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...n(),...e.components};return(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(o,{of:v,parameters:{docs:{toc:!0}}}),`
`,(0,x.jsx)(l,{children:`Splitter`}),`
`,(0,x.jsx)(a,{children:(0,x.jsx)(t.p,{children:`Компонент для интерактивного разделения рабочей области на две панели с поддержкой вложенности, клавиатуры и ограничений по размеру`})}),`
`,(0,x.jsxs)(t.p,{children:[(0,x.jsx)(t.code,{children:`Splitter`}),` подходит для интерфейсов, где пользователь должен самостоятельно перераспределять пространство между соседними областями: навигацией и контентом, таблицей и деталями, превью и журналом событий.`]}),`
`,(0,x.jsxs)(t.p,{children:[`Компонент ожидает ровно два прямых дочерних элемента. Если нужно больше областей, их лучше собирать через вложенные `,(0,x.jsx)(t.code,{children:`Splitter`}),`, чтобы сохранить простую модель поведения и предсказуемый resize.`]}),`
`,(0,x.jsx)(t.h2,{id:`основной-сценарий`,children:`Основной сценарий`}),`
`,(0,x.jsx)(d,{}),`
`,(0,x.jsx)(t.pre,{children:(0,x.jsx)(t.code,{className:`language-tsx`,children:`import { Splitter } from "@/shared/ui";

export function Example() {
	return (
		<div style={{ height: 420 }}>
			<Splitter initial={0.45}>
				<div>Левая панель</div>
				<div>Правая панель</div>
			</Splitter>
		</div>
	);
}
`})}),`
`,(0,x.jsx)(r,{of:p}),`
`,(0,x.jsx)(t.h2,{id:`что-важно-про-поведение`,children:`Что важно про поведение`}),`
`,(0,x.jsxs)(t.ul,{children:[`
`,(0,x.jsx)(t.li,{children:`Во время перетаскивания компонент обновляет размеры панелей напрямую через DOM, а состояние React фиксирует только после завершения drag. Это уменьшает число лишних перерендеров и делает resize заметно плавнее.`}),`
`,(0,x.jsxs)(t.li,{children:[`Значения `,(0,x.jsx)(t.code,{children:`initial`}),`, `,(0,x.jsx)(t.code,{children:`min`}),` и `,(0,x.jsx)(t.code,{children:`max`}),` автоматически нормализуются в диапазон `,(0,x.jsx)(t.code,{children:`0..1`}),`.`]}),`
`,(0,x.jsxs)(t.li,{children:[`Если `,(0,x.jsx)(t.code,{children:`min`}),` и `,(0,x.jsx)(t.code,{children:`max`}),` заданы в обратном порядке, компонент сам исправляет диапазон.`]}),`
`,(0,x.jsxs)(t.li,{children:[`Разделитель управляется клавиатурой: стрелки двигают границу пошагово, `,(0,x.jsx)(t.code,{children:`Home`}),` переводит в минимум, `,(0,x.jsx)(t.code,{children:`End`}),` в максимум.`]}),`
`]}),`
`,(0,x.jsx)(t.h2,{id:`разделение-на-2-части`,children:`Разделение на 2 части`}),`
`,(0,x.jsx)(t.p,{children:`Это базовый и самый частый сценарий: левая панель под навигацию, правая под основное содержимое.`}),`
`,(0,x.jsx)(u,{of:p}),`
`,(0,x.jsx)(t.h2,{id:`горизонтальное-разделение`,children:`Горизонтальное разделение`}),`
`,(0,x.jsx)(t.p,{children:`Горизонтальный режим полезен для layout вида "контент сверху, журнал или детали снизу".`}),`
`,(0,x.jsx)(u,{of:h}),`
`,(0,x.jsx)(t.pre,{children:(0,x.jsx)(t.code,{className:`language-tsx`,children:`import { Splitter } from "@/shared/ui";

export function HorizontalLayout() {
	return (
		<div style={{ height: 420 }}>
			<Splitter direction="horizontal" initial={0.55}>
				<div>Верхняя панель</div>
				<div>Нижняя панель</div>
			</Splitter>
		</div>
	);
}
`})}),`
`,(0,x.jsx)(t.h2,{id:`разделение-на-4-части`,children:`Разделение на 4 части`}),`
`,(0,x.jsxs)(t.p,{children:[`Чтобы собрать четыре независимые области, используйте `,(0,x.jsx)(t.code,{children:`Splitter`}),` внутри `,(0,x.jsx)(t.code,{children:`Splitter`}),`. Такой подход даёт предсказуемую вложенную структуру и хорошо масштабируется для сложных рабочих экранов.`]}),`
`,(0,x.jsx)(u,{of:g}),`
`,(0,x.jsx)(t.pre,{children:(0,x.jsx)(t.code,{className:`language-tsx`,children:`import { Splitter } from "@/shared/ui";

export function FourPaneLayout() {
	return (
		<div style={{ height: 420 }}>
			<Splitter initial={0.48} min={0.25} max={0.75}>
				<Splitter direction="horizontal" initial={0.58}>
					<div>Левая верхняя панель</div>
					<div>Левая нижняя панель</div>
				</Splitter>
				<Splitter direction="horizontal" initial={0.36}>
					<div>Правая верхняя панель</div>
					<div>Правая нижняя панель</div>
				</Splitter>
			</Splitter>
		</div>
	);
}
`})}),`
`,(0,x.jsx)(t.h2,{id:`ограничения-и-клавиатура`,children:`Ограничения и клавиатура`}),`
`,(0,x.jsx)(t.p,{children:`В этом сценарии удобно проверять, что пользователь не может схлопнуть область сильнее допустимого минимума, а разделитель стабильно работает не только мышью, но и с клавиатуры.`}),`
`,(0,x.jsx)(u,{of:m}),`
`,(0,x.jsx)(t.h2,{id:`практические-рекомендации`,children:`Практические рекомендации`}),`
`,(0,x.jsxs)(t.ul,{children:[`
`,(0,x.jsxs)(t.li,{children:[`Родительский контейнер должен иметь явную высоту, иначе `,(0,x.jsx)(t.code,{children:`Splitter`}),` не сможет корректно распределить пространство по вертикали.`]}),`
`,(0,x.jsxs)(t.li,{children:[`Держите в `,(0,x.jsx)(t.code,{children:`Splitter`}),` только два прямых потомка. Для трёх и более областей используйте вложенность.`]}),`
`,(0,x.jsx)(t.li,{children:`Если в панелях живут тяжёлые таблицы, графики или сложные формы, лучше избегать лишней бизнес-логики, завязанной на каждое движение разделителя.`}),`
`,(0,x.jsx)(t.li,{children:`Для touch-сценариев разделитель уже блокирует нативный скролл жеста на самом handle, поэтому drag остаётся предсказуемым.`}),`
`]}),`
`,(0,x.jsx)(t.h2,{id:`api`,children:`API`}),`
`,(0,x.jsx)(c,{of:v}),`
`,(0,x.jsx)(t.h2,{id:`все-сторисы`,children:`Все сторисы`}),`
`,(0,x.jsx)(i,{includePrimary:!1})]})}function b(e={}){let{wrapper:t}={...n(),...e.components};return t?(0,x.jsx)(t,{...e,children:(0,x.jsx)(y,{...e})}):y(e)}var x;e((()=>{x=t(),f(),s(),_()}))();export{b as default};