/** * Options for copyable feature. * @property {string} [copyText] Text shown on the copy button * @property {string} [copiedText] Text shown after successful copy * @property {number} [timeout] How long to show copiedText (ms) * @property {'left'|'right'} [align] Copy button alignment */ export interface CopyableOptions { copyText?: string; copiedText?: string; timeout?: number; align?: 'left' | 'right'; } /** * Props for JsonViewerElement. * @property {object | Array | string | number | boolean} value JSON data to display * @property {number} [expandDepth] Initial expand depth * @property {boolean|CopyableOptions} [copyable] Enable copy button * @property {boolean} [sort] Whether to sort object keys * @property {boolean} [boxed] Whether to show a box around the viewer * @property {'light'|'dark'} [theme] Theme * @property {boolean} [parse] Whether to parse string value as JSON */ export interface JsonViewerElementProps { value: object | Array | string | number | boolean; expandDepth?: number; copyable?: boolean | CopyableOptions; sort?: boolean; boxed?: boolean; theme?: 'light' | 'dark'; parse?: boolean; } export declare class JsonViewerElement extends HTMLElement { static get observedAttributes(): string[]; private _value; private root; private container; constructor(); connectedCallback(): void; attributeChangedCallback(): void; set value(v: any); get value(): any; set sort(v: boolean); get sort(): boolean; set parse(v: boolean); get parse(): boolean; set copyable(v: CopyableOptions | false); get copyable(): CopyableOptions | false; private get expandDepth(); /** * Copy text to clipboard. Uses Clipboard API if available, otherwise fallback. */ private copyText; /** * Render the JSON viewer. */ private render; /** * Recursively build the JSON tree. */ private build; /** * Create a leaf node for primitive values. */ private leaf; } declare global { interface HTMLElementTagNameMap { 'json-viewer': JsonViewerElement; } }