UNPKG

ripple

Version:

Ripple is an elegant TypeScript UI framework

1,266 lines (1,176 loc) 43.5 kB
import type { AddEventObject, TSRXElement } from '#public'; import type { Nullable } from '#helpers'; /** * Ripple JSX Runtime Type Definitions * Ripple components are imperative, but JSX expressions still represent * renderable TSRX values when used in expression positions. */ // Ripple components don't return JSX elements - they're imperative export type ComponentType<P = {}> = (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<any>, props?: any, key?: string | number | null, ): TSRXElement; export function rsx( type: string | ComponentType<any>, props?: any, key?: string | number | null, ): TSRXElement; /** * 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<any>, props?: any, key?: string | number | null, ): TSRXElement; /** * JSX Fragment component * Ripple fragments are renderable expression values. */ export function Fragment(props: { children?: any }): TSRXElement; export type ClassValue = string | import('clsx').ClassArray | import('clsx').ClassDictionary; type Event< Target extends globalThis.EventTarget, EventType extends globalThis.Event, > = EventType & { readonly currentTarget: Target; }; type EventHandler<Target extends globalThis.EventTarget, EventType extends globalThis.Event> = ( this: Target, event: Event<Target, EventType>, ) => void; type EventHandlerObject< Target extends globalThis.EventTarget, EventType extends globalThis.Event, > = Omit<AddEventObject, 'handleEvent'> & { handleEvent(this: Target, event: Event<Target, EventType>): void; }; type EventHandlerValue<Target extends globalThis.EventTarget, EventType extends globalThis.Event> = | EventHandler<Target, EventType> | EventHandlerObject<Target, EventType>; type ElementEventHandler< Target extends globalThis.EventTarget, Type extends keyof GlobalEventHandlersEventMap, > = EventHandlerValue<Target, GlobalEventHandlersEventMap[Type]>; type SVGElementAttributes<Tag extends keyof SVGElementTagNameMap> = HTMLAttributes< SVGElementTagNameMap[Tag] > & SVGAttributes<SVGElementTagNameMap[Tag]>; type BaseHTMLAttributes<Target extends HTMLBaseElement = HTMLBaseElement> = HTMLAttributes<Target> & { href?: Nullable<string>; target?: Nullable<string>; }; type LinkHTMLAttributes<Target extends HTMLLinkElement = HTMLLinkElement> = HTMLAttributes<Target> & { rel?: Nullable<string>; href?: Nullable<string>; type?: Nullable<string>; media?: Nullable<string>; as?: Nullable<string>; crossOrigin?: 'anonymous' | 'use-credentials'; integrity?: Nullable<string>; }; type MetaHTMLAttributes<Target extends HTMLMetaElement = HTMLMetaElement> = HTMLAttributes<Target> & { name?: Nullable<string>; content?: Nullable<string>; charSet?: Nullable<string>; httpEquiv?: Nullable<string>; property?: Nullable<string>; }; type StyleHTMLAttributes<Target extends HTMLStyleElement = HTMLStyleElement> = HTMLAttributes<Target> & { type?: Nullable<string>; media?: Nullable<string>; }; type BlockquoteHTMLAttributes<Target extends HTMLQuoteElement = HTMLQuoteElement> = HTMLAttributes<Target> & { cite?: Nullable<string>; }; type LiHTMLAttributes<Target extends HTMLLIElement = HTMLLIElement> = HTMLAttributes<Target> & { value?: Nullable<number>; }; type OlHTMLAttributes<Target extends HTMLOListElement = HTMLOListElement> = HTMLAttributes<Target> & { reversed?: boolean; start?: Nullable<number>; type?: '1' | 'a' | 'A' | 'i' | 'I'; }; type AnchorHTMLAttributes<Target extends HTMLAnchorElement = HTMLAnchorElement> = HTMLAttributes<Target> & { href?: Nullable<string>; target?: Nullable<string>; rel?: Nullable<string>; download?: string | boolean; hrefLang?: Nullable<string>; type?: Nullable<string>; referrerPolicy?: Nullable<string>; }; type DataHTMLAttributes<Target extends HTMLDataElement = HTMLDataElement> = HTMLAttributes<Target> & { value?: Nullable<string>; }; type QuoteHTMLAttributes<Target extends HTMLQuoteElement = HTMLQuoteElement> = HTMLAttributes<Target> & { cite?: Nullable<string>; }; type TimeHTMLAttributes<Target extends HTMLTimeElement = HTMLTimeElement> = HTMLAttributes<Target> & { dateTime?: Nullable<string>; }; type AreaHTMLAttributes<Target extends HTMLAreaElement = HTMLAreaElement> = HTMLAttributes<Target> & { alt?: Nullable<string>; coords?: Nullable<string>; download?: Nullable<string>; href?: Nullable<string>; hrefLang?: Nullable<string>; media?: Nullable<string>; rel?: Nullable<string>; shape?: 'rect' | 'circle' | 'poly' | 'default'; target?: Nullable<string>; }; type AudioHTMLAttributes<Target extends HTMLAudioElement = HTMLAudioElement> = HTMLAttributes<Target> & { src?: Nullable<string>; autoplay?: boolean; controls?: boolean; loop?: boolean; muted?: boolean; preload?: 'none' | 'metadata' | 'auto'; crossOrigin?: 'anonymous' | 'use-credentials'; }; type ImgHTMLAttributes<Target extends HTMLImageElement = HTMLImageElement> = HTMLAttributes<Target> & { src?: Nullable<string>; alt?: Nullable<string>; width?: string | number; height?: string | number; loading?: 'eager' | 'lazy'; crossOrigin?: 'anonymous' | 'use-credentials'; decoding?: 'sync' | 'async' | 'auto'; fetchPriority?: 'high' | 'low' | 'auto'; referrerPolicy?: Nullable<string>; sizes?: Nullable<string>; srcSet?: Nullable<string>; useMap?: Nullable<string>; }; type MapHTMLAttributes<Target extends HTMLMapElement = HTMLMapElement> = HTMLAttributes<Target> & { name?: Nullable<string>; }; type TrackHTMLAttributes<Target extends HTMLTrackElement = HTMLTrackElement> = HTMLAttributes<Target> & { default?: boolean; kind?: 'subtitles' | 'captions' | 'descriptions' | 'chapters' | 'metadata'; label?: Nullable<string>; src?: Nullable<string>; srcLang?: Nullable<string>; }; type VideoHTMLAttributes<Target extends HTMLVideoElement = HTMLVideoElement> = HTMLAttributes<Target> & { src?: Nullable<string>; autoplay?: boolean; controls?: boolean; loop?: boolean; muted?: boolean; preload?: 'none' | 'metadata' | 'auto'; poster?: Nullable<string>; width?: string | number; height?: string | number; crossOrigin?: 'anonymous' | 'use-credentials'; playsInline?: boolean; }; type EmbedHTMLAttributes<Target extends HTMLEmbedElement = HTMLEmbedElement> = HTMLAttributes<Target> & { src?: Nullable<string>; type?: Nullable<string>; width?: string | number; height?: string | number; }; type IframeHTMLAttributes<Target extends HTMLIFrameElement = HTMLIFrameElement> = HTMLAttributes<Target> & { src?: Nullable<string>; srcdoc?: Nullable<string>; name?: Nullable<string>; sandbox?: Nullable<string>; allow?: Nullable<string>; allowFullScreen?: boolean; width?: string | number; height?: string | number; loading?: 'eager' | 'lazy'; referrerPolicy?: Nullable<string>; }; type ObjectHTMLAttributes<Target extends HTMLObjectElement = HTMLObjectElement> = HTMLAttributes<Target> & { data?: Nullable<string>; type?: Nullable<string>; name?: Nullable<string>; useMap?: Nullable<string>; width?: string | number; height?: string | number; }; type PortalHTMLAttributes<Target extends HTMLElement = HTMLElement> = HTMLAttributes<Target> & { referrerPolicy?: Nullable<string>; src?: Nullable<string>; }; type SourceHTMLAttributes<Target extends HTMLSourceElement = HTMLSourceElement> = HTMLAttributes<Target> & { src?: Nullable<string>; type?: Nullable<string>; media?: Nullable<string>; sizes?: Nullable<string>; srcSet?: Nullable<string>; }; type CanvasHTMLAttributes<Target extends HTMLCanvasElement = HTMLCanvasElement> = HTMLAttributes<Target> & { width?: string | number; height?: string | number; }; type ScriptHTMLAttributes<Target extends HTMLScriptElement = HTMLScriptElement> = HTMLAttributes<Target> & { src?: Nullable<string>; type?: Nullable<string>; async?: boolean; defer?: boolean; crossOrigin?: 'anonymous' | 'use-credentials'; integrity?: Nullable<string>; noModule?: boolean; referrerPolicy?: Nullable<string>; }; type ModHTMLAttributes<Target extends HTMLModElement = HTMLModElement> = HTMLAttributes<Target> & { cite?: Nullable<string>; dateTime?: Nullable<string>; }; type ColHTMLAttributes<Target extends HTMLTableColElement = HTMLTableColElement> = HTMLAttributes<Target> & { span?: Nullable<number>; }; type TableCellHTMLAttributes<Target extends HTMLTableCellElement = HTMLTableCellElement> = HTMLAttributes<Target> & { colSpan?: Nullable<number>; rowSpan?: Nullable<number>; headers?: Nullable<string>; }; type ThHTMLAttributes<Target extends HTMLTableCellElement = HTMLTableCellElement> = TableCellHTMLAttributes<Target> & { scope?: 'row' | 'col' | 'rowgroup' | 'colgroup'; abbr?: Nullable<string>; }; type ButtonHTMLAttributes<Target extends HTMLButtonElement = HTMLButtonElement> = HTMLAttributes<Target> & { type?: 'button' | 'submit' | 'reset'; disabled?: boolean; form?: Nullable<string>; formAction?: Nullable<string>; formEncType?: Nullable<string>; formMethod?: Nullable<string>; formNoValidate?: boolean; formTarget?: Nullable<string>; name?: Nullable<string>; value?: Nullable<string>; }; type FieldsetHTMLAttributes<Target extends HTMLFieldSetElement = HTMLFieldSetElement> = HTMLAttributes<Target> & { disabled?: boolean; form?: Nullable<string>; name?: Nullable<string>; }; type FormHTMLAttributes<Target extends HTMLFormElement = HTMLFormElement> = HTMLAttributes<Target> & { action?: Nullable<string>; method?: 'get' | 'post' | 'dialog'; encType?: Nullable<string>; acceptCharset?: Nullable<string>; autoComplete?: 'on' | 'off'; noValidate?: boolean; target?: Nullable<string>; }; type InputHTMLAttributes<Target extends HTMLInputElement = HTMLInputElement> = HTMLAttributes<Target> & { type?: Nullable<string>; value?: string | number; placeholder?: Nullable<string>; disabled?: boolean; name?: Nullable<string>; accept?: Nullable<string>; autoComplete?: Nullable<string>; autoFocus?: boolean; checked?: boolean; form?: Nullable<string>; formAction?: Nullable<string>; formEncType?: Nullable<string>; formMethod?: Nullable<string>; formNoValidate?: boolean; formTarget?: Nullable<string>; list?: Nullable<string>; max?: string | number; maxLength?: Nullable<number>; min?: string | number; minLength?: Nullable<number>; multiple?: boolean; pattern?: Nullable<string>; readOnly?: boolean; required?: boolean; size?: Nullable<number>; src?: Nullable<string>; step?: string | number; width?: string | number; height?: string | number; }; type LabelHTMLAttributes<Target extends HTMLLabelElement = HTMLLabelElement> = HTMLAttributes<Target> & { for?: Nullable<string>; htmlFor?: Nullable<string>; }; type MeterHTMLAttributes<Target extends HTMLMeterElement = HTMLMeterElement> = HTMLAttributes<Target> & { value?: Nullable<number>; min?: Nullable<number>; max?: Nullable<number>; low?: Nullable<number>; high?: Nullable<number>; optimum?: Nullable<number>; }; type OptgroupHTMLAttributes<Target extends HTMLOptGroupElement = HTMLOptGroupElement> = HTMLAttributes<Target> & { disabled?: boolean; label?: Nullable<string>; }; type OptionHTMLAttributes<Target extends HTMLOptionElement = HTMLOptionElement> = HTMLAttributes<Target> & { value?: string | number; selected?: boolean; disabled?: boolean; label?: Nullable<string>; }; type OutputHTMLAttributes<Target extends HTMLOutputElement = HTMLOutputElement> = HTMLAttributes<Target> & { for?: Nullable<string>; htmlFor?: Nullable<string>; form?: Nullable<string>; name?: Nullable<string>; }; type ProgressHTMLAttributes<Target extends HTMLProgressElement = HTMLProgressElement> = HTMLAttributes<Target> & { value?: Nullable<number>; max?: Nullable<number>; }; type SelectHTMLAttributes<Target extends HTMLSelectElement = HTMLSelectElement> = HTMLAttributes<Target> & { disabled?: boolean; form?: Nullable<string>; multiple?: boolean; name?: Nullable<string>; required?: boolean; size?: Nullable<number>; autoComplete?: Nullable<string>; }; type TextareaHTMLAttributes<Target extends HTMLTextAreaElement = HTMLTextAreaElement> = HTMLAttributes<Target> & { placeholder?: Nullable<string>; disabled?: boolean; rows?: Nullable<number>; cols?: Nullable<number>; name?: Nullable<string>; form?: Nullable<string>; maxLength?: Nullable<number>; minLength?: Nullable<number>; readOnly?: boolean; required?: boolean; wrap?: 'soft' | 'hard'; autoComplete?: Nullable<string>; autoFocus?: boolean; }; type DetailsHTMLAttributes<Target extends HTMLDetailsElement = HTMLDetailsElement> = HTMLAttributes<Target> & { open?: boolean; }; type DialogHTMLAttributes<Target extends HTMLDialogElement = HTMLDialogElement> = HTMLAttributes<Target> & { open?: boolean; }; type SlotHTMLAttributes<Target extends HTMLSlotElement = HTMLSlotElement> = HTMLAttributes<Target> & { name?: Nullable<string>; }; // Base HTML attributes interface HTMLAttributes<Target extends globalThis.Element = globalThis.HTMLElement> { class?: ClassValue | undefined | null; className?: Nullable<string>; id?: Nullable<string>; style?: Nullable<string> | Record<string, string | number>; title?: Nullable<string>; lang?: Nullable<string>; dir?: 'ltr' | 'rtl' | 'auto'; tabIndex?: Nullable<number>; contentEditable?: boolean | 'true' | 'false' | 'inherit'; draggable?: boolean; hidden?: boolean; spellCheck?: boolean; translate?: 'yes' | 'no'; role?: Nullable<string>; // ARIA attributes 'aria-label'?: Nullable<string>; 'aria-labelledby'?: Nullable<string>; 'aria-describedby'?: Nullable<string>; 'aria-hidden'?: boolean | 'true' | 'false'; 'aria-expanded'?: boolean | 'true' | 'false'; 'aria-pressed'?: boolean | 'true' | 'false' | 'mixed'; 'aria-selected'?: boolean | 'true' | 'false'; 'aria-checked'?: boolean | 'true' | 'false' | 'mixed'; 'aria-disabled'?: boolean | 'true' | 'false'; 'aria-readonly'?: boolean | 'true' | 'false'; 'aria-required'?: boolean | 'true' | 'false'; 'aria-live'?: 'off' | 'polite' | 'assertive'; 'aria-atomic'?: boolean | 'true' | 'false'; 'aria-busy'?: boolean | 'true' | 'false'; 'aria-controls'?: Nullable<string>; 'aria-current'?: boolean | 'true' | 'false' | 'page' | 'step' | 'location' | 'date' | 'time'; 'aria-owns'?: Nullable<string>; 'aria-valuemin'?: Nullable<number>; 'aria-valuemax'?: Nullable<number>; 'aria-valuenow'?: Nullable<number>; 'aria-valuetext'?: Nullable<string>; // Event handlers onClick?: ElementEventHandler<Target, 'click'>; onClickCapture?: ElementEventHandler<Target, 'click'>; onDblClick?: ElementEventHandler<Target, 'dblclick'>; onDblClickCapture?: ElementEventHandler<Target, 'dblclick'>; onInput?: ElementEventHandler<Target, 'input'>; onInputCapture?: ElementEventHandler<Target, 'input'>; onChange?: ElementEventHandler<Target, 'change'>; onChangeCapture?: ElementEventHandler<Target, 'change'>; onSubmit?: ElementEventHandler<Target, 'submit'>; onSubmitCapture?: ElementEventHandler<Target, 'submit'>; onFocus?: ElementEventHandler<Target, 'focus'>; onFocusCapture?: ElementEventHandler<Target, 'focus'>; onBlur?: ElementEventHandler<Target, 'blur'>; onBlurCapture?: ElementEventHandler<Target, 'blur'>; onKeyDown?: ElementEventHandler<Target, 'keydown'>; onKeyDownCapture?: ElementEventHandler<Target, 'keydown'>; onKeyUp?: ElementEventHandler<Target, 'keyup'>; onKeyUpCapture?: ElementEventHandler<Target, 'keyup'>; onKeyPress?: ElementEventHandler<Target, 'keypress'>; onKeyPressCapture?: ElementEventHandler<Target, 'keypress'>; onMouseDown?: ElementEventHandler<Target, 'mousedown'>; onMouseDownCapture?: ElementEventHandler<Target, 'mousedown'>; onMouseUp?: ElementEventHandler<Target, 'mouseup'>; onMouseUpCapture?: ElementEventHandler<Target, 'mouseup'>; onMouseEnter?: ElementEventHandler<Target, 'mouseenter'>; onMouseEnterCapture?: ElementEventHandler<Target, 'mouseenter'>; onMouseLeave?: ElementEventHandler<Target, 'mouseleave'>; onMouseLeaveCapture?: ElementEventHandler<Target, 'mouseleave'>; onMouseMove?: ElementEventHandler<Target, 'mousemove'>; onMouseMoveCapture?: ElementEventHandler<Target, 'mousemove'>; onMouseOver?: ElementEventHandler<Target, 'mouseover'>; onMouseOverCapture?: ElementEventHandler<Target, 'mouseover'>; onMouseOut?: ElementEventHandler<Target, 'mouseout'>; onMouseOutCapture?: ElementEventHandler<Target, 'mouseout'>; onWheel?: ElementEventHandler<Target, 'wheel'>; onWheelCapture?: ElementEventHandler<Target, 'wheel'>; onScroll?: ElementEventHandler<Target, 'scroll'>; onScrollCapture?: ElementEventHandler<Target, 'scroll'>; onTouchStart?: ElementEventHandler<Target, 'touchstart'>; onTouchStartCapture?: ElementEventHandler<Target, 'touchstart'>; onTouchMove?: ElementEventHandler<Target, 'touchmove'>; onTouchMoveCapture?: ElementEventHandler<Target, 'touchmove'>; onTouchEnd?: ElementEventHandler<Target, 'touchend'>; onTouchEndCapture?: ElementEventHandler<Target, 'touchend'>; onTouchCancel?: ElementEventHandler<Target, 'touchcancel'>; onTouchCancelCapture?: ElementEventHandler<Target, 'touchcancel'>; onDragStart?: ElementEventHandler<Target, 'dragstart'>; onDragStartCapture?: ElementEventHandler<Target, 'dragstart'>; onDrag?: ElementEventHandler<Target, 'drag'>; onDragCapture?: ElementEventHandler<Target, 'drag'>; onDragEnd?: ElementEventHandler<Target, 'dragend'>; onDragEndCapture?: ElementEventHandler<Target, 'dragend'>; onDragEnter?: ElementEventHandler<Target, 'dragenter'>; onDragEnterCapture?: ElementEventHandler<Target, 'dragenter'>; onDragLeave?: ElementEventHandler<Target, 'dragleave'>; onDragLeaveCapture?: ElementEventHandler<Target, 'dragleave'>; onDragOver?: ElementEventHandler<Target, 'dragover'>; onDragOverCapture?: ElementEventHandler<Target, 'dragover'>; onDrop?: ElementEventHandler<Target, 'drop'>; onDropCapture?: ElementEventHandler<Target, 'drop'>; onCopy?: ElementEventHandler<Target, 'copy'>; onCopyCapture?: ElementEventHandler<Target, 'copy'>; onCut?: ElementEventHandler<Target, 'cut'>; onCutCapture?: ElementEventHandler<Target, 'cut'>; onPaste?: ElementEventHandler<Target, 'paste'>; onPasteCapture?: ElementEventHandler<Target, 'paste'>; onLoad?: ElementEventHandler<Target, 'load'>; onLoadCapture?: ElementEventHandler<Target, 'load'>; onError?: ElementEventHandler<Target, 'error'>; onErrorCapture?: ElementEventHandler<Target, 'error'>; onResize?: ElementEventHandler<Target, 'resize'>; onResizeCapture?: ElementEventHandler<Target, 'resize'>; onAnimationStart?: ElementEventHandler<Target, 'animationstart'>; onAnimationStartCapture?: ElementEventHandler<Target, 'animationstart'>; onAnimationEnd?: ElementEventHandler<Target, 'animationend'>; onAnimationEndCapture?: ElementEventHandler<Target, 'animationend'>; onAnimationIteration?: ElementEventHandler<Target, 'animationiteration'>; onAnimationIterationCapture?: ElementEventHandler<Target, 'animationiteration'>; onTransitionEnd?: ElementEventHandler<Target, 'transitionend'>; onTransitionEndCapture?: ElementEventHandler<Target, 'transitionend'>; children?: any; [key: string]: any; } // SVG common attributes interface SVGAttributes<Target extends globalThis.SVGElement = globalThis.SVGElement> { // Core attributes id?: Nullable<string>; lang?: Nullable<string>; tabIndex?: Nullable<number>; xmlBase?: Nullable<string>; xmlLang?: Nullable<string>; xmlSpace?: Nullable<string>; // Styling class?: ClassValue | undefined | null; className?: Nullable<string>; style?: Nullable<string> | Record<string, string | number>; // Presentation attributes alignmentBaseline?: | 'auto' | 'baseline' | 'before-edge' | 'text-before-edge' | 'middle' | 'central' | 'after-edge' | 'text-after-edge' | 'ideographic' | 'alphabetic' | 'hanging' | 'mathematical' | 'inherit'; baselineShift?: string | number; clip?: Nullable<string>; clipPath?: Nullable<string>; clipRule?: 'nonzero' | 'evenodd' | 'inherit'; color?: Nullable<string>; colorInterpolation?: 'auto' | 'sRGB' | 'linearRGB' | 'inherit'; colorInterpolationFilters?: 'auto' | 'sRGB' | 'linearRGB' | 'inherit'; cursor?: Nullable<string>; direction?: 'ltr' | 'rtl' | 'inherit'; display?: Nullable<string>; dominantBaseline?: | 'auto' | 'text-bottom' | 'alphabetic' | 'ideographic' | 'middle' | 'central' | 'mathematical' | 'hanging' | 'text-top' | 'inherit'; fill?: Nullable<string>; fillOpacity?: number | string; fillRule?: 'nonzero' | 'evenodd' | 'inherit'; filter?: Nullable<string>; floodColor?: Nullable<string>; floodOpacity?: number | string; fontFamily?: Nullable<string>; fontSize?: string | number; fontSizeAdjust?: string | number; fontStretch?: Nullable<string>; fontStyle?: 'normal' | 'italic' | 'oblique' | 'inherit'; fontVariant?: Nullable<string>; fontWeight?: string | number; glyphOrientationHorizontal?: Nullable<string>; glyphOrientationVertical?: Nullable<string>; imageRendering?: 'auto' | 'optimizeSpeed' | 'optimizeQuality' | 'inherit'; letterSpacing?: string | number; lightingColor?: Nullable<string>; markerEnd?: Nullable<string>; markerMid?: Nullable<string>; markerStart?: Nullable<string>; mask?: Nullable<string>; opacity?: number | string; overflow?: 'visible' | 'hidden' | 'scroll' | 'auto' | 'inherit'; pointerEvents?: | 'bounding-box' | 'visiblePainted' | 'visibleFill' | 'visibleStroke' | 'visible' | 'painted' | 'fill' | 'stroke' | 'all' | 'none' | 'inherit'; shapeRendering?: 'auto' | 'optimizeSpeed' | 'crispEdges' | 'geometricPrecision' | 'inherit'; stopColor?: Nullable<string>; stopOpacity?: number | string; stroke?: Nullable<string>; strokeDasharray?: string | number; strokeDashoffset?: string | number; strokeLinecap?: 'butt' | 'round' | 'square' | 'inherit'; strokeLinejoin?: 'miter' | 'round' | 'bevel' | 'inherit'; strokeMiterlimit?: number | string; strokeOpacity?: number | string; strokeWidth?: string | number; textAnchor?: 'start' | 'middle' | 'end' | 'inherit'; textDecoration?: Nullable<string>; textRendering?: | 'auto' | 'optimizeSpeed' | 'optimizeLegibility' | 'geometricPrecision' | 'inherit'; transform?: Nullable<string>; transformOrigin?: Nullable<string>; unicodeBidi?: | 'normal' | 'embed' | 'isolate' | 'bidi-override' | 'isolate-override' | 'plaintext' | 'inherit'; vectorEffect?: | 'none' | 'non-scaling-stroke' | 'non-scaling-size' | 'non-rotation' | 'fixed-position'; visibility?: 'visible' | 'hidden' | 'collapse' | 'inherit'; wordSpacing?: string | number; writingMode?: 'horizontal-tb' | 'vertical-rl' | 'vertical-lr' | 'inherit'; // Common SVG attributes width?: string | number; height?: string | number; x?: string | number; y?: string | number; viewBox?: Nullable<string>; preserveAspectRatio?: Nullable<string>; xmlns?: Nullable<string>; 'xmlns:xlink'?: Nullable<string>; // Event handlers (inherited from HTML but included for clarity) onClick?: ElementEventHandler<Target, 'click'>; onClickCapture?: ElementEventHandler<Target, 'click'>; onMouseDown?: ElementEventHandler<Target, 'mousedown'>; onMouseDownCapture?: ElementEventHandler<Target, 'mousedown'>; onMouseUp?: ElementEventHandler<Target, 'mouseup'>; onMouseUpCapture?: ElementEventHandler<Target, 'mouseup'>; onMouseMove?: ElementEventHandler<Target, 'mousemove'>; onMouseMoveCapture?: ElementEventHandler<Target, 'mousemove'>; onMouseEnter?: ElementEventHandler<Target, 'mouseenter'>; onMouseEnterCapture?: ElementEventHandler<Target, 'mouseenter'>; onMouseLeave?: ElementEventHandler<Target, 'mouseleave'>; onMouseLeaveCapture?: ElementEventHandler<Target, 'mouseleave'>; onMouseOver?: ElementEventHandler<Target, 'mouseover'>; onMouseOverCapture?: ElementEventHandler<Target, 'mouseover'>; onMouseOut?: ElementEventHandler<Target, 'mouseout'>; onMouseOutCapture?: ElementEventHandler<Target, 'mouseout'>; onFocus?: ElementEventHandler<Target, 'focus'>; onFocusCapture?: ElementEventHandler<Target, 'focus'>; onBlur?: ElementEventHandler<Target, 'blur'>; onBlurCapture?: ElementEventHandler<Target, 'blur'>; onLoad?: ElementEventHandler<Target, 'load'>; onLoadCapture?: ElementEventHandler<Target, 'load'>; onError?: ElementEventHandler<Target, 'error'>; onErrorCapture?: ElementEventHandler<Target, 'error'>; children?: any; [key: string]: any; } // SVG animation attributes interface SVGAnimationAttributes { attributeName?: Nullable<string>; attributeType?: 'CSS' | 'XML' | 'auto'; begin?: Nullable<string>; dur?: Nullable<string>; end?: Nullable<string>; min?: Nullable<string>; max?: Nullable<string>; restart?: 'always' | 'whenNotActive' | 'never'; repeatCount?: number | 'indefinite'; repeatDur?: Nullable<string>; fill?: 'freeze' | 'remove'; calcMode?: 'discrete' | 'linear' | 'paced' | 'spline'; values?: Nullable<string>; keyTimes?: Nullable<string>; keySplines?: Nullable<string>; from?: string | number; to?: string | number; by?: string | number; additive?: 'replace' | 'sum'; accumulate?: 'none' | 'sum'; } // SVG gradient attributes interface SVGGradientAttributes< Target extends globalThis.SVGElement = globalThis.SVGElement, > extends SVGAttributes<Target> { gradientUnits?: 'userSpaceOnUse' | 'objectBoundingBox'; gradientTransform?: Nullable<string>; spreadMethod?: 'pad' | 'reflect' | 'repeat'; href?: Nullable<string>; 'xlink:href'?: Nullable<string>; } // SVG filter primitive attributes interface SVGFilterAttributes { in?: Nullable<string>; result?: Nullable<string>; x?: string | number; y?: string | number; width?: string | number; height?: string | number; } // SVG transfer function attributes (for feFuncR, feFuncG, feFuncB, feFuncA) interface SVGTransferFunctionAttributes { type?: 'identity' | 'table' | 'discrete' | 'linear' | 'gamma'; tableValues?: Nullable<string>; slope?: Nullable<number>; intercept?: Nullable<number>; amplitude?: Nullable<number>; exponent?: Nullable<number>; offset?: Nullable<number>; } // SVG text attributes interface SVGTextAttributes { x?: string | number; y?: string | number; dx?: string | number; dy?: string | number; rotate?: string | number; lengthAdjust?: 'spacing' | 'spacingAndGlyphs'; textLength?: string | number; } // Global JSX namespace for TypeScript declare global { namespace JSX { type Element = TSRXElement; type ElementType = keyof IntrinsicElements | ComponentType<any>; interface IntrinsicElements { // Document metadata head: HTMLAttributes<HTMLHeadElement>; title: HTMLAttributes<HTMLTitleElement>; base: BaseHTMLAttributes<HTMLBaseElement>; link: LinkHTMLAttributes<HTMLLinkElement>; meta: MetaHTMLAttributes<HTMLMetaElement>; style: StyleHTMLAttributes<HTMLStyleElement>; // Sectioning root body: HTMLAttributes<HTMLBodyElement>; // Content sectioning address: HTMLAttributes<HTMLElement>; article: HTMLAttributes<HTMLElement>; aside: HTMLAttributes<HTMLElement>; footer: HTMLAttributes<HTMLElement>; header: HTMLAttributes<HTMLElement>; h1: HTMLAttributes<HTMLHeadingElement>; h2: HTMLAttributes<HTMLHeadingElement>; h3: HTMLAttributes<HTMLHeadingElement>; h4: HTMLAttributes<HTMLHeadingElement>; h5: HTMLAttributes<HTMLHeadingElement>; h6: HTMLAttributes<HTMLHeadingElement>; hgroup: HTMLAttributes<HTMLElement>; main: HTMLAttributes<HTMLElement>; nav: HTMLAttributes<HTMLElement>; section: HTMLAttributes<HTMLElement>; search: HTMLAttributes<HTMLElement>; // Text content blockquote: BlockquoteHTMLAttributes<HTMLQuoteElement>; dd: HTMLAttributes<HTMLElement>; div: HTMLAttributes<HTMLDivElement>; dl: HTMLAttributes<HTMLDListElement>; dt: HTMLAttributes<HTMLElement>; figcaption: HTMLAttributes<HTMLElement>; figure: HTMLAttributes<HTMLElement>; hr: HTMLAttributes<HTMLHRElement>; li: LiHTMLAttributes<HTMLLIElement>; menu: HTMLAttributes<HTMLMenuElement>; ol: OlHTMLAttributes<HTMLOListElement>; p: HTMLAttributes<HTMLParagraphElement>; pre: HTMLAttributes<HTMLPreElement>; ul: HTMLAttributes<HTMLUListElement>; // Inline text semantics a: AnchorHTMLAttributes<HTMLAnchorElement>; abbr: HTMLAttributes<HTMLElement>; b: HTMLAttributes<HTMLElement>; bdi: HTMLAttributes<HTMLElement>; bdo: HTMLAttributes<HTMLElement>; br: HTMLAttributes<HTMLBRElement>; cite: HTMLAttributes<HTMLElement>; code: HTMLAttributes<HTMLElement>; data: DataHTMLAttributes<HTMLDataElement>; dfn: HTMLAttributes<HTMLElement>; em: HTMLAttributes<HTMLElement>; i: HTMLAttributes<HTMLElement>; kbd: HTMLAttributes<HTMLElement>; mark: HTMLAttributes<HTMLElement>; q: QuoteHTMLAttributes<HTMLQuoteElement>; rp: HTMLAttributes<HTMLElement>; rt: HTMLAttributes<HTMLElement>; ruby: HTMLAttributes<HTMLElement>; s: HTMLAttributes<HTMLElement>; samp: HTMLAttributes<HTMLElement>; small: HTMLAttributes<HTMLElement>; span: HTMLAttributes<HTMLSpanElement>; strong: HTMLAttributes<HTMLElement>; sub: HTMLAttributes<HTMLElement>; sup: HTMLAttributes<HTMLElement>; time: TimeHTMLAttributes<HTMLTimeElement>; u: HTMLAttributes<HTMLElement>; var: HTMLAttributes<HTMLElement>; wbr: HTMLAttributes<HTMLElement>; // Image and multimedia area: AreaHTMLAttributes<HTMLAreaElement>; audio: AudioHTMLAttributes<HTMLAudioElement>; img: ImgHTMLAttributes<HTMLImageElement>; map: MapHTMLAttributes<HTMLMapElement>; track: TrackHTMLAttributes<HTMLTrackElement>; video: VideoHTMLAttributes<HTMLVideoElement>; // Embedded content embed: EmbedHTMLAttributes<HTMLEmbedElement>; iframe: IframeHTMLAttributes<HTMLIFrameElement>; object: ObjectHTMLAttributes<HTMLObjectElement>; picture: HTMLAttributes<HTMLPictureElement>; portal: PortalHTMLAttributes<HTMLElement>; source: SourceHTMLAttributes<HTMLSourceElement>; // SVG and MathML svg: HTMLAttributes<SVGElementTagNameMap['svg']> & SVGAttributes<SVGElementTagNameMap['svg']>; math: HTMLAttributes<MathMLElementTagNameMap['math']>; // SVG elements animate: HTMLAttributes<SVGElementTagNameMap['animate']> & SVGAnimationAttributes; animateMotion: HTMLAttributes<SVGElementTagNameMap['animateMotion']> & SVGAnimationAttributes; animateTransform: HTMLAttributes<SVGElementTagNameMap['animateTransform']> & SVGAnimationAttributes & { type?: 'translate' | 'scale' | 'rotate' | 'skewX' | 'skewY'; }; circle: HTMLAttributes<SVGElementTagNameMap['circle']> & SVGAttributes<SVGElementTagNameMap['circle']> & { cx?: string | number; cy?: string | number; r?: string | number; }; clipPath: HTMLAttributes<SVGElementTagNameMap['clipPath']> & SVGAttributes<SVGElementTagNameMap['clipPath']> & { clipPathUnits?: 'userSpaceOnUse' | 'objectBoundingBox'; }; defs: HTMLAttributes<SVGElementTagNameMap['defs']> & SVGAttributes<SVGElementTagNameMap['defs']>; desc: HTMLAttributes<SVGElementTagNameMap['desc']> & SVGAttributes<SVGElementTagNameMap['desc']>; ellipse: HTMLAttributes<SVGElementTagNameMap['ellipse']> & SVGAttributes<SVGElementTagNameMap['ellipse']> & { cx?: string | number; cy?: string | number; rx?: string | number; ry?: string | number; }; feBlend: HTMLAttributes<SVGElementTagNameMap['feBlend']> & SVGFilterAttributes & { mode?: | 'normal' | 'multiply' | 'screen' | 'overlay' | 'darken' | 'lighten' | 'color-dodge' | 'color-burn' | 'hard-light' | 'soft-light' | 'difference' | 'exclusion' | 'hue' | 'saturation' | 'color' | 'luminosity'; in2?: Nullable<string>; }; feColorMatrix: HTMLAttributes<SVGElementTagNameMap['feColorMatrix']> & SVGFilterAttributes & { type?: 'matrix' | 'saturate' | 'hueRotate' | 'luminanceToAlpha'; values?: Nullable<string>; }; feComponentTransfer: HTMLAttributes<SVGElementTagNameMap['feComponentTransfer']> & SVGFilterAttributes; feComposite: HTMLAttributes<SVGElementTagNameMap['feComposite']> & SVGFilterAttributes & { operator?: 'over' | 'in' | 'out' | 'atop' | 'xor' | 'lighter' | 'arithmetic'; in2?: Nullable<string>; k1?: Nullable<number>; k2?: Nullable<number>; k3?: Nullable<number>; k4?: Nullable<number>; }; feConvolveMatrix: HTMLAttributes<SVGElementTagNameMap['feConvolveMatrix']> & SVGFilterAttributes; feDiffuseLighting: HTMLAttributes<SVGElementTagNameMap['feDiffuseLighting']> & SVGFilterAttributes; feDisplacementMap: HTMLAttributes<SVGElementTagNameMap['feDisplacementMap']> & SVGFilterAttributes; feDistantLight: HTMLAttributes<SVGElementTagNameMap['feDistantLight']> & SVGFilterAttributes & { azimuth?: Nullable<number>; elevation?: Nullable<number>; }; feDropShadow: HTMLAttributes<SVGElementTagNameMap['feDropShadow']> & SVGFilterAttributes & { dx?: Nullable<number>; dy?: Nullable<number>; stdDeviation?: number | string; }; feFlood: HTMLAttributes<SVGElementTagNameMap['feFlood']> & SVGFilterAttributes & { 'flood-color'?: Nullable<string>; 'flood-opacity'?: number | string; }; feFuncA: HTMLAttributes<SVGElementTagNameMap['feFuncA']> & SVGTransferFunctionAttributes; feFuncB: HTMLAttributes<SVGElementTagNameMap['feFuncB']> & SVGTransferFunctionAttributes; feFuncG: HTMLAttributes<SVGElementTagNameMap['feFuncG']> & SVGTransferFunctionAttributes; feFuncR: HTMLAttributes<SVGElementTagNameMap['feFuncR']> & SVGTransferFunctionAttributes; feGaussianBlur: HTMLAttributes<SVGElementTagNameMap['feGaussianBlur']> & SVGFilterAttributes & { stdDeviation?: number | string; }; feImage: HTMLAttributes<SVGElementTagNameMap['feImage']> & SVGFilterAttributes; feMerge: HTMLAttributes<SVGElementTagNameMap['feMerge']> & SVGFilterAttributes; feMergeNode: HTMLAttributes<SVGElementTagNameMap['feMergeNode']> & SVGFilterAttributes; feMorphology: HTMLAttributes<SVGElementTagNameMap['feMorphology']> & SVGFilterAttributes & { operator?: 'erode' | 'dilate'; radius?: number | string; }; feOffset: HTMLAttributes<SVGElementTagNameMap['feOffset']> & SVGFilterAttributes & { dx?: Nullable<number>; dy?: Nullable<number>; }; fePointLight: HTMLAttributes<SVGElementTagNameMap['fePointLight']> & SVGFilterAttributes & { x?: Nullable<number>; y?: Nullable<number>; z?: Nullable<number>; }; feSpecularLighting: HTMLAttributes<SVGElementTagNameMap['feSpecularLighting']> & SVGFilterAttributes; feSpotLight: HTMLAttributes<SVGElementTagNameMap['feSpotLight']> & SVGFilterAttributes & { x?: Nullable<number>; y?: Nullable<number>; z?: Nullable<number>; pointsAtX?: Nullable<number>; pointsAtY?: Nullable<number>; pointsAtZ?: Nullable<number>; specularExponent?: Nullable<number>; limitingConeAngle?: Nullable<number>; }; feTile: HTMLAttributes<SVGElementTagNameMap['feTile']> & SVGFilterAttributes; feTurbulence: HTMLAttributes<SVGElementTagNameMap['feTurbulence']> & SVGFilterAttributes & { baseFrequency?: number | string; numOctaves?: Nullable<number>; seed?: Nullable<number>; stitchTiles?: 'stitch' | 'noStitch'; type?: 'fractalNoise' | 'turbulence'; }; filter: HTMLAttributes<SVGElementTagNameMap['filter']> & SVGAttributes<SVGElementTagNameMap['filter']> & { filterUnits?: 'userSpaceOnUse' | 'objectBoundingBox'; primitiveUnits?: 'userSpaceOnUse' | 'objectBoundingBox'; x?: string | number; y?: string | number; width?: string | number; height?: string | number; }; foreignObject: HTMLAttributes<SVGElementTagNameMap['foreignObject']> & SVGAttributes<SVGElementTagNameMap['foreignObject']> & { x?: string | number; y?: string | number; width?: string | number; height?: string | number; }; g: HTMLAttributes<SVGElementTagNameMap['g']> & SVGAttributes<SVGElementTagNameMap['g']>; image: HTMLAttributes<SVGElementTagNameMap['image']> & SVGAttributes<SVGElementTagNameMap['image']> & { href?: Nullable<string>; 'xlink:href'?: Nullable<string>; x?: string | number; y?: string | number; width?: string | number; height?: string | number; preserveAspectRatio?: Nullable<string>; }; line: HTMLAttributes<SVGElementTagNameMap['line']> & SVGAttributes<SVGElementTagNameMap['line']> & { x1?: string | number; y1?: string | number; x2?: string | number; y2?: string | number; }; linearGradient: HTMLAttributes<SVGElementTagNameMap['linearGradient']> & SVGGradientAttributes<SVGElementTagNameMap['linearGradient']> & { x1?: string | number; y1?: string | number; x2?: string | number; y2?: string | number; }; marker: HTMLAttributes<SVGElementTagNameMap['marker']> & SVGAttributes<SVGElementTagNameMap['marker']> & { markerHeight?: string | number; markerUnits?: 'strokeWidth' | 'userSpaceOnUse'; markerWidth?: string | number; orient?: string | number; refX?: string | number; refY?: string | number; }; mask: HTMLAttributes<SVGElementTagNameMap['mask']> & SVGAttributes<SVGElementTagNameMap['mask']> & { maskContentUnits?: 'userSpaceOnUse' | 'objectBoundingBox'; maskUnits?: 'userSpaceOnUse' | 'objectBoundingBox'; x?: string | number; y?: string | number; width?: string | number; height?: string | number; }; metadata: HTMLAttributes<SVGElementTagNameMap['metadata']> & SVGAttributes<SVGElementTagNameMap['metadata']>; mpath: HTMLAttributes<SVGElementTagNameMap['mpath']> & SVGAttributes<SVGElementTagNameMap['mpath']> & { 'xlink:href'?: Nullable<string>; }; path: HTMLAttributes<SVGElementTagNameMap['path']> & SVGAttributes<SVGElementTagNameMap['path']> & { d?: Nullable<string>; pathLength?: Nullable<number>; }; pattern: HTMLAttributes<SVGElementTagNameMap['pattern']> & SVGAttributes<SVGElementTagNameMap['pattern']> & { patternContentUnits?: 'userSpaceOnUse' | 'objectBoundingBox'; patternTransform?: Nullable<string>; patternUnits?: 'userSpaceOnUse' | 'objectBoundingBox'; x?: string | number; y?: string | number; width?: string | number; height?: string | number; }; polygon: HTMLAttributes<SVGElementTagNameMap['polygon']> & SVGAttributes<SVGElementTagNameMap['polygon']> & { points?: Nullable<string>; }; polyline: HTMLAttributes<SVGElementTagNameMap['polyline']> & SVGAttributes<SVGElementTagNameMap['polyline']> & { points?: Nullable<string>; }; radialGradient: HTMLAttributes<SVGElementTagNameMap['radialGradient']> & SVGGradientAttributes<SVGElementTagNameMap['radialGradient']> & { cx?: string | number; cy?: string | number; r?: string | number; fx?: string | number; fy?: string | number; fr?: string | number; }; rect: HTMLAttributes<SVGElementTagNameMap['rect']> & SVGAttributes<SVGElementTagNameMap['rect']> & { x?: string | number; y?: string | number; width?: string | number; height?: string | number; rx?: string | number; ry?: string | number; }; set: HTMLAttributes<SVGElementTagNameMap['set']> & SVGAnimationAttributes; stop: HTMLAttributes<SVGElementTagNameMap['stop']> & SVGAttributes<SVGElementTagNameMap['stop']> & { offset?: string | number; 'stop-color'?: Nullable<string>; 'stop-opacity'?: number | string; }; switch: HTMLAttributes<SVGElementTagNameMap['switch']> & SVGAttributes<SVGElementTagNameMap['switch']>; symbol: HTMLAttributes<SVGElementTagNameMap['symbol']> & SVGAttributes<SVGElementTagNameMap['symbol']> & { viewBox?: Nullable<string>; preserveAspectRatio?: Nullable<string>; refX?: string | number; refY?: string | number; }; text: HTMLAttributes<SVGElementTagNameMap['text']> & SVGAttributes<SVGElementTagNameMap['text']> & SVGTextAttributes; textPath: HTMLAttributes<SVGElementTagNameMap['textPath']> & SVGAttributes<SVGElementTagNameMap['textPath']> & SVGTextAttributes & { href?: Nullable<string>; 'xlink:href'?: Nullable<string>; startOffset?: string | number; method?: 'align' | 'stretch'; spacing?: 'auto' | 'exact'; }; tspan: HTMLAttributes<SVGElementTagNameMap['tspan']> & SVGAttributes<SVGElementTagNameMap['tspan']> & SVGTextAttributes; use: HTMLAttributes<SVGElementTagNameMap['use']> & SVGAttributes<SVGElementTagNameMap['use']> & { href?: Nullable<string>; 'xlink:href'?: Nullable<string>; x?: string | number; y?: string | number; width?: string | number; height?: string | number; }; view: HTMLAttributes<SVGElementTagNameMap['view']> & SVGAttributes<SVGElementTagNameMap['view']> & { viewBox?: Nullable<string>; preserveAspectRatio?: Nullable<string>; }; // Scripting canvas: CanvasHTMLAttributes<HTMLCanvasElement>; noscript: HTMLAttributes<HTMLElement>; script: ScriptHTMLAttributes<HTMLScriptElement>; // Demarcating edits del: ModHTMLAttributes<HTMLModElement>; ins: ModHTMLAttributes<HTMLModElement>; // Table content caption: HTMLAttributes<HTMLTableCaptionElement>; col: ColHTMLAttributes<HTMLTableColElement>; colgroup: ColHTMLAttributes<HTMLTableColElement>; table: HTMLAttributes<HTMLTableElement>; tbody: HTMLAttributes<HTMLTableSectionElement>; td: TableCellHTMLAttributes<HTMLTableCellElement>; tfoot: HTMLAttributes<HTMLTableSectionElement>; th: ThHTMLAttributes<HTMLTableCellElement>; thead: HTMLAttributes<HTMLTableSectionElement>; tr: HTMLAttributes<HTMLTableRowElement>; // Forms button: ButtonHTMLAttributes<HTMLButtonElement>; datalist: HTMLAttributes<HTMLDataListElement>; fieldset: FieldsetHTMLAttributes<HTMLFieldSetElement>; form: FormHTMLAttributes<HTMLFormElement>; input: InputHTMLAttributes<HTMLInputElement>; label: LabelHTMLAttributes<HTMLLabelElement>; legend: HTMLAttributes<HTMLLegendElement>; meter: MeterHTMLAttributes<HTMLMeterElement>; optgroup: OptgroupHTMLAttributes<HTMLOptGroupElement>; option: OptionHTMLAttributes<HTMLOptionElement>; output: OutputHTMLAttributes<HTMLOutputElement>; progress: ProgressHTMLAttributes<HTMLProgressElement>; select: SelectHTMLAttributes<HTMLSelectElement>; textarea: TextareaHTMLAttributes<HTMLTextAreaElement>; // Interactive elements details: DetailsHTMLAttributes<HTMLDetailsElement>; dialog: DialogHTMLAttributes<HTMLDialogElement>; summary: HTMLAttributes<HTMLElement>; // Web Components slot: SlotHTMLAttributes<HTMLSlotElement>; template: HTMLAttributes<HTMLTemplateElement>; // Catch-all for any other elements [elemName: string]: HTMLAttributes<never>; } interface ElementChildrenAttribute { children: {}; } } }