ripple
Version:
Ripple is an elegant TypeScript UI framework
1,266 lines (1,176 loc) • 43.5 kB
TypeScript
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: {};
}
}
}