import type { Accessor } from './types/signals.js'; export type { Accessor }; /** Ref callback or signal setter; cleared with `null` on unmount. */ export type Ref = (element: T | null) => void; type MaybeAccessor = T | Accessor; type DOMEventHandler = (event: E) => void; interface GrainDOMAttributes { children?: JSX.Element; class?: MaybeAccessor; className?: MaybeAccessor; id?: MaybeAccessor; style?: MaybeAccessor | undefined>; title?: MaybeAccessor; hidden?: MaybeAccessor; tabIndex?: MaybeAccessor; role?: MaybeAccessor; // Common events (DOM + React-style casing) onClick?: DOMEventHandler; onclick?: DOMEventHandler; onInput?: DOMEventHandler; oninput?: DOMEventHandler; onChange?: DOMEventHandler; onchange?: DOMEventHandler; onSubmit?: DOMEventHandler; onsubmit?: DOMEventHandler; onKeyDown?: DOMEventHandler; onkeydown?: DOMEventHandler; onFocus?: DOMEventHandler; onfocus?: DOMEventHandler; onBlur?: DOMEventHandler; onblur?: DOMEventHandler; // Allow arbitrary attrs / data-* / aria-* / more events [key: string]: unknown; } type IntrinsicHTML = GrainDOMAttributes & { ref?: Ref; }; type IntrinsicSVG = GrainDOMAttributes & { ref?: Ref; }; export namespace JSX { // Separate array interface avoids circular `Element` alias. interface ElementArray extends Array {} type Element = | string | number | boolean | null | undefined | Node | ElementArray | Accessor | { type: unknown; props?: unknown; children?: unknown; key?: unknown }; interface ElementChildrenAttribute { children: {}; } type IntrinsicElements = { [K in keyof HTMLElementTagNameMap]: IntrinsicHTML; } & { [K in keyof SVGElementTagNameMap]: IntrinsicSVG; }; } export declare function jsx( type: unknown, props?: Record | null, key?: string | number | null ): JSX.Element; export declare function jsxs( type: unknown, props?: Record | null, key?: string | number | null ): JSX.Element; export declare function Fragment(props: { children?: JSX.Element; }): JSX.Element;