import{type PropertyValues,type TemplateResult}from'lit';import{LyraElement}from'../../../internal/lyra-element.js';import{type LyraTopic}from'./mind-map-layout.js';export type{LyraTopic};export interface LyraMindMapEventMap{'lr-topic-select':CustomEvent<{topicId:string;}>;'lr-topic-toggle':CustomEvent<{topicId:string;expanded:boolean;}>;} /** * `` — a radial expandable topic tree (NotebookLM Mind Maps): a spatial overview of * a topic hierarchy where activating a topic drills in or hands the topic to the chat. Hierarchy, * not network — no cross-links, no force simulation, no communities, no edge labels (that's * `lr-graph`). Zero-dependency SVG; the radial layout is closed-form arithmetic, in its own * `mind-map-layout.ts` module, mirroring `lr-word-cloud`'s dependency-free precedent. * * Node-position transitions use `--lr-transition-base`, which already collapses to near-zero * under `prefers-reduced-motion: reduce` globally (`tokens.styles.ts`), so expansion snaps rather * than tweening for a reduced-motion user with no extra branching in this component. * * Public collection properties take bounded, clone-owned readonly snapshots. Create a new * collection and reassign it after changes; mutating the assigned array does not update the view. * * @customElement lr-mind-map * @event lr-topic-select - A *leaf* topic was activated. `detail: { topicId }`. * @event lr-topic-toggle - A parent topic was activated (or auto-expanded by keyboard descent). * `detail: { topicId, expanded }`. * @csspart base - The wrapper. * @csspart svg - The single-tab-stop SVG focus target. * @csspart node - A topic node group. * @csspart node-label - A topic's label text. * @csspart link - A parent-child connector. * @csspart focus-ring - The keyboard focus ring, drawn from the moment the svg takes focus (the * first placed topic is seeded as the keyboard cursor) rather than only after the first arrow key. * @csspart live-region - The visually hidden announcement region. * @csspart empty - The empty-state message, shown when `topics` is empty. * @cssprop [--lr-mind-map-ring-gap=6rem] - Radius step per depth ring. * @cssprop [--lr-mind-map-node-hover-halo=var(--lr-color-brand-quiet)] - Stroke color of the * hover halo drawn around a topic node's dot, giving mouse users the same "this is clickable" * feedback keyboard users get from the drawn focus ring. * @status stable * @since 4.0.0 */ export declare class LyraMindMap extends LyraElement{protected static readonly ownedCollectionProperties:readonly string[];static styles:import("lit").CSSResultGroup[];static get observedAttributes():string[]; /** A single root sits at the center; multiple roots hang off an implicit center hub whose * visible text is `label`. */ topics:readonly LyraTopic[]; /** Accessible name for the SVG group *and* the implicit hub's text; falls back to the localized * `mindMapLabel` when omitted. An explicitly empty override stays empty. */ label?:string; /** Initial expansion depth (root + first ring). Expansion state is component-managed * afterward, keyed by topic id, and survives `topics` reassignment. */ expandDepth:number;private svgEl?; /** Explicit user overrides only -- the default (`depth < expandDepth`) is computed at read time * in `isExpanded()`, so a user can override in either direction without losing the override on * a later `topics` reassignment that reintroduces the same id. */ private expandedOverrides;private focusedId;private liveText;private cachedLayout;private resizeObserver?;private resizeObserverDocument?;private resizeRafId?;private resizeRafOwner?;private resizeRafDocument?;private ownerRealmGeneration;private observedSize;private layoutInvalidated;private layoutContext;private announcementSink?;connectedCallback():void;private armResizeObserver;disconnectedCallback():void;adoptedCallback():void;private resetResizeWork;attributeChangedCallback(name:string,oldValue:string|null,value:string|null):void; /** `expandDepth`, normalized to a finite non-negative integer (falling back to the property's own * default of `1`) -- a raw `NaN` (e.g. an invalid `expand-depth` attribute) would otherwise make * every `depth < expandDepth` comparison false, silently collapsing every ring instead of just * falling back to the default. */ private get effectiveExpandDepth();private isExpanded; /** Resolves `--lr-mind-map-ring-gap` to a real used pixel value for whatever unit it carries -- * a live root/host font-size read for rem/em (a hardcoded `* 16` gets ring spacing wrong on any * page whose root font-size isn't the browser default 16px), delegated to the shared * `resolveCssLength()` so every unit-resolving component agrees on what a length means. A value * in a unit that cannot be resolved to a used pixel length here (`ch`, `pt`, `calc()`, a bare * `%` with no base) falls back to the default gap rather than being read as raw pixels. */ private ringGapPx;private relayout;protected willUpdate(changed:PropertyValues):void;private setAnnouncement;private toggle;private activate;private siblingsOf;private childrenOf;private announce;private focusNodeById;private onKeyDown;private onFocusIn;private onNodeClick;private connectorControlPoint;private renderSemanticNode;render():TemplateResult;}declare global{interface HTMLElementTagNameMap{'lr-mind-map':LyraMindMap;}}