import { PropertyValues } from 'lit';
import { StyledElement } from '../internals/StyledElement.js';
import { default as React } from 'react';
type ElementParts = 'host' | 'master' | 'divider' | 'detail' | 'detail-close';
/**
* master›detail 반응형 split-pane 셸.
*
* ★**Vaadin `MasterDetailLayout` 을 선례로 삼되 범위를 의도적으로 줄였다.** 드래그 가능한
* 스플리터는 v1 스코프 아웃(`masterSize` 는 고정 prop) — "얇은 구조" 원칙상 과하다.
*
* 기본 슬롯 = master 영역, `slot="detail"` = detail 영역. **detail 은 채워지면 나타나고
* 비우면 사라진다** — Vaadin 과 동일 계약. 선택 상태 관리(무엇을 detail 에 보여줄지)는
* 이 컴포넌트가 하지 않는다 — "그릇이지 디자인이 아니다"(`lob-layers.md` §3). 소비자가
* `u-rich-table` 의 `selection-change` 등으로 `slot="detail"` 자식을 직접 갈아끼운다.
*
* ```html
*
* …
* …선택된 레코드 상세…
*
* ```
*
* 좁은 화면(자기 폭 기준, `overlayBreakpoint` 미만)에서 detail 이 master 위 전체 오버레이로
* 전환된다 — 오버레이 모드에서만 보이는 작은 닫기 버튼이 `detail-close` 이벤트를 낸다.
* 이건 구조적 기능(레이아웃 역학)이라 도메인 로직이 아니므로 컴포넌트가 가져도 된다.
*
* ★**왜 `@container` 미디어 질의가 아니라 `ResizeObserver` 인가**: `overlayBreakpoint` 는
* prop 이라 인스턴스마다 다른 값을 가질 수 있는데, CSS `@container` 조건은 빌드 시점에
* 고정된 값만 받는다(런타임 커스텀 프로퍼티를 조건절에 못 쓴다) — 그래서 자기 폭을 직접
* 재서 `overlay` 속성을 반영한다. `masterSize`/`overlayBreakpoint` 가 고정 디자인값이
* 아니라 소비자가 화면마다 바꿀 구조 파라미터이기 때문에 생기는 필연적 차이이지,
* `PageHeader`/`GroupBox`/`ActionBar` 의 고정 중단점 관행을 벗어나려는 것이 아니다.
*
* 오버라이드: `part`(host·master·divider·detail·detail-close) + slot 치환.
*/
export declare class MasterDetailLayout extends StyledElement {
static styles: import('lit').CSSResultGroup[];
/** master 영역의 고정 폭(CSS 길이). detail 은 나머지 공간을 채운다. */
masterSize: string;
/**
* 이 값(px, 자기 폭 기준) 미만이면 detail 이 전체 오버레이로 전환된다.
* `masterSize` + 최소한의 읽기 가능한 detail 폭을 더한 값보다 커야 두 패널이
* 동시에 설 자리가 있다.
*/
overlayBreakpoint: number;
/**
* 언어 태그. 비우면 `setDefaultLocale()` 값, 그것도 없으면 영어.
* 닫기 버튼의 접근성 라벨에만 쓰인다.
*/
locale: string;
/** detail 슬롯 배정 상태 — CSS `:has()` 로는 알 수 없다(`internals/slotted.ts` 참조). */
private hasDetail;
private resizeObserver?;
connectedCallback(): void;
disconnectedCallback(): void;
protected updated(changed: PropertyValues): void;
/**
* 오버레이 모드의 닫기 버튼이 눌렸을 때. detail 내용을 지우는 것은 소비자 몫이라
* 컴포넌트 내부에 취소로 막을 동작이 없다 — 그래서 취소 불가 이벤트다(`fire()` 기본값인
* `cancelable: true` 를 명시적으로 끈다).
*/
private handleDetailClose;
private handleDetailSlotChange;
render(): import('lit-html').TemplateResult<1>;
}
declare global {
interface HTMLElementTagNameMap {
'u-master-detail-layout': MasterDetailLayout;
}
}
declare module 'react' {
namespace JSX {
interface IntrinsicElements {
'u-master-detail-layout': React.DetailedHTMLProps, HTMLElement> & {
'master-size'?: string;
'overlay-breakpoint'?: number | string;
locale?: string;
};
}
}
}
export {};