/**
* Ripple JSX Runtime Type Definitions
* Ripple components are imperative and don't return JSX elements
*/
// Ripple components don't return JSX elements - they're imperative
export type ComponentType
= (props: P) => void;
/**
* Create a JSX element (for elements with children)
* In Ripple, this doesn't return anything - components are imperative
*/
export function jsx(
type: string | ComponentType,
props?: any,
key?: string | number | null,
): void;
/**
* Create a JSX element with static children (optimization for multiple children)
* In Ripple, this doesn't return anything - components are imperative
*/
export function jsxs(
type: string | ComponentType,
props?: any,
key?: string | number | null,
): void;
/**
* JSX Fragment component
* In Ripple, fragments are imperative and don't return anything
*/
export function Fragment(props: { children?: any }): void;
export type ClassValue = string | import('clsx').ClassArray | import('clsx').ClassDictionary;
// Base HTML attributes
interface HTMLAttributes {
class?: ClassValue | undefined | null;
className?: string;
id?: string;
style?: string | Record;
onClick?: (event: MouseEvent) => void;
onInput?: (event: InputEvent) => void;
onChange?: (event: Event) => void;
children?: any;
[key: string]: any;
}
// Global JSX namespace for TypeScript
declare global {
namespace JSX {
// In Ripple, JSX expressions don't return elements - they're imperative
type Element = void;
interface IntrinsicElements {
// HTML elements with basic attributes
div: HTMLAttributes;
span: HTMLAttributes;
p: HTMLAttributes;
h1: HTMLAttributes;
h2: HTMLAttributes;
h3: HTMLAttributes;
h4: HTMLAttributes;
h5: HTMLAttributes;
h6: HTMLAttributes;
button: HTMLAttributes & {
type?: 'button' | 'submit' | 'reset';
disabled?: boolean;
};
input: HTMLAttributes & {
type?: string;
value?: string | number;
placeholder?: string;
disabled?: boolean;
};
form: HTMLAttributes;
a: HTMLAttributes & {
href?: string;
target?: string;
};
img: HTMLAttributes & {
src?: string;
alt?: string;
width?: string | number;
height?: string | number;
};
// Add more as needed...
[elemName: string]: HTMLAttributes;
}
interface ElementChildrenAttribute {
children: {};
}
}
}