ripple 0.3.126 → 0.3.127

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,11 @@
1
- import type { AddEventObject, FragmentProps, RefKey, RefValue, TSRXElement } from '#public';
1
+ import type {
2
+ AddEventObject,
3
+ Component,
4
+ FragmentProps,
5
+ RefKey,
6
+ RefValue,
7
+ TSRXElement,
8
+ } from '#public';
2
9
  import type { Nullable } from '@tsrx/core/types/helpers';
3
10
  export type { RefValue } from '#public';
4
11
 
@@ -8,8 +15,8 @@ export type { RefValue } from '#public';
8
15
  * renderable TSRX values when used in expression positions.
9
16
  */
10
17
 
11
- // Ripple components are usually imperative, but helpers can return TSRX values.
12
- export type ComponentType<P = {}> = (props: P) => void | TSRXElement;
18
+ // JSX accepts the same component return values as the public runtime APIs.
19
+ export type ComponentType<P = {}> = Component<P>;
13
20
 
14
21
  /**
15
22
  * Create a JSX element (for elements with children)
@@ -43,906 +50,965 @@ export function jsxs(
43
50
  */
44
51
  export function Fragment(props: FragmentProps): TSRXElement;
45
52
 
46
- export type ClassValue = string | import('clsx').ClassArray | import('clsx').ClassDictionary;
47
-
48
- type Event<
49
- Target extends globalThis.EventTarget,
50
- EventType extends globalThis.Event,
51
- > = EventType & {
52
- readonly currentTarget: Target;
53
- };
54
-
55
- type EventHandler<Target extends globalThis.EventTarget, EventType extends globalThis.Event> = (
56
- this: Target,
57
- event: Event<Target, EventType>,
58
- ) => void;
59
-
60
- type EventHandlerObject<
61
- Target extends globalThis.EventTarget,
62
- EventType extends globalThis.Event,
63
- > = Omit<AddEventObject, 'handleEvent'> & {
64
- handleEvent(this: Target, event: Event<Target, EventType>): void;
65
- };
66
-
67
- type EventHandlerValue<Target extends globalThis.EventTarget, EventType extends globalThis.Event> =
68
- EventHandler<Target, EventType> | EventHandlerObject<Target, EventType>;
69
-
70
- type RefAttribute<Target extends globalThis.Element> = {
71
- [Key in RefKey]?: RefValue<Target>;
72
- };
73
-
74
- type ElementEventHandler<
75
- Target extends globalThis.EventTarget,
76
- Type extends keyof GlobalEventHandlersEventMap,
77
- > = EventHandlerValue<Target, GlobalEventHandlersEventMap[Type]>;
78
-
79
- type SVGElementAttributes<Tag extends keyof SVGElementTagNameMap> = HTMLAttributes<
80
- SVGElementTagNameMap[Tag]
81
- > &
82
- SVGAttributes<SVGElementTagNameMap[Tag]>;
83
-
84
- type BaseHTMLAttributes<Target extends HTMLBaseElement = HTMLBaseElement> =
85
- HTMLAttributes<Target> & {
86
- href?: Nullable<string>;
87
- target?: Nullable<string>;
88
- };
89
-
90
- type LinkHTMLAttributes<Target extends HTMLLinkElement = HTMLLinkElement> =
91
- HTMLAttributes<Target> & {
92
- rel?: Nullable<string>;
93
- href?: Nullable<string>;
94
- type?: Nullable<string>;
95
- media?: Nullable<string>;
96
- as?: Nullable<string>;
97
- crossOrigin?: 'anonymous' | 'use-credentials';
98
- integrity?: Nullable<string>;
99
- };
100
-
101
- type MetaHTMLAttributes<Target extends HTMLMetaElement = HTMLMetaElement> =
102
- HTMLAttributes<Target> & {
103
- name?: Nullable<string>;
104
- content?: Nullable<string>;
105
- charSet?: Nullable<string>;
106
- httpEquiv?: Nullable<string>;
107
- property?: Nullable<string>;
108
- };
53
+ /** JSX attributes live under Ripple so editor hovers identify their framework. */
54
+ declare namespace Ripple {
55
+ type ClassValue = string | import('clsx').ClassArray | import('clsx').ClassDictionary;
109
56
 
110
- type StyleHTMLAttributes<Target extends HTMLStyleElement = HTMLStyleElement> =
111
- HTMLAttributes<Target> & {
112
- type?: Nullable<string>;
113
- media?: Nullable<string>;
114
- };
115
-
116
- type BlockquoteHTMLAttributes<Target extends HTMLQuoteElement = HTMLQuoteElement> =
117
- HTMLAttributes<Target> & {
118
- cite?: Nullable<string>;
119
- };
120
-
121
- type LiHTMLAttributes<Target extends HTMLLIElement = HTMLLIElement> = HTMLAttributes<Target> & {
122
- value?: Nullable<number>;
123
- };
124
-
125
- type OlHTMLAttributes<Target extends HTMLOListElement = HTMLOListElement> =
126
- HTMLAttributes<Target> & {
127
- reversed?: boolean;
128
- start?: Nullable<number>;
129
- type?: '1' | 'a' | 'A' | 'i' | 'I';
130
- };
131
-
132
- type AnchorHTMLAttributes<Target extends HTMLAnchorElement = HTMLAnchorElement> =
133
- HTMLAttributes<Target> & {
134
- href?: Nullable<string>;
135
- target?: Nullable<string>;
136
- rel?: Nullable<string>;
137
- download?: string | boolean;
138
- hrefLang?: Nullable<string>;
139
- type?: Nullable<string>;
140
- referrerPolicy?: Nullable<string>;
57
+ type Event<
58
+ Target extends globalThis.EventTarget,
59
+ EventType extends globalThis.Event,
60
+ > = EventType & {
61
+ readonly currentTarget: Target;
141
62
  };
142
63
 
143
- type DataHTMLAttributes<Target extends HTMLDataElement = HTMLDataElement> =
144
- HTMLAttributes<Target> & {
145
- value?: Nullable<string>;
146
- };
64
+ type EventHandler<Target extends globalThis.EventTarget, EventType extends globalThis.Event> = (
65
+ this: Target,
66
+ event: Event<Target, EventType>,
67
+ ) => void;
147
68
 
148
- type QuoteHTMLAttributes<Target extends HTMLQuoteElement = HTMLQuoteElement> =
149
- HTMLAttributes<Target> & {
150
- cite?: Nullable<string>;
69
+ type EventHandlerObject<
70
+ Target extends globalThis.EventTarget,
71
+ EventType extends globalThis.Event,
72
+ > = Omit<AddEventObject, 'handleEvent'> & {
73
+ handleEvent(this: Target, event: Event<Target, EventType>): void;
151
74
  };
152
75
 
153
- type TimeHTMLAttributes<Target extends HTMLTimeElement = HTMLTimeElement> =
154
- HTMLAttributes<Target> & {
155
- dateTime?: Nullable<string>;
156
- };
76
+ type EventHandlerValue<
77
+ Target extends globalThis.EventTarget,
78
+ EventType extends globalThis.Event,
79
+ > = EventHandler<Target, EventType> | EventHandlerObject<Target, EventType>;
157
80
 
158
- type AreaHTMLAttributes<Target extends HTMLAreaElement = HTMLAreaElement> =
159
- HTMLAttributes<Target> & {
160
- alt?: Nullable<string>;
161
- coords?: Nullable<string>;
162
- download?: Nullable<string>;
163
- href?: Nullable<string>;
164
- hrefLang?: Nullable<string>;
165
- media?: Nullable<string>;
166
- rel?: Nullable<string>;
167
- shape?: 'rect' | 'circle' | 'poly' | 'default';
168
- target?: Nullable<string>;
81
+ type RefAttribute<Target extends globalThis.Element> = {
82
+ [Key in RefKey]?: RefValue<Target>;
169
83
  };
170
84
 
171
- type AudioHTMLAttributes<Target extends HTMLAudioElement = HTMLAudioElement> =
172
- HTMLAttributes<Target> & {
173
- src?: Nullable<string>;
174
- autoplay?: boolean;
175
- controls?: boolean;
176
- loop?: boolean;
177
- muted?: boolean;
178
- preload?: 'none' | 'metadata' | 'auto';
179
- crossOrigin?: 'anonymous' | 'use-credentials';
85
+ type ElementEventHandler<
86
+ Target extends globalThis.EventTarget,
87
+ Type extends keyof GlobalEventHandlersEventMap,
88
+ > = EventHandlerValue<Target, GlobalEventHandlersEventMap[Type]>;
89
+
90
+ type SVGElementAttributes<Tag extends keyof SVGElementTagNameMap> = HTMLAttributes<
91
+ SVGElementTagNameMap[Tag]
92
+ > &
93
+ SVGAttributes<SVGElementTagNameMap[Tag]>;
94
+
95
+ type BaseHTMLAttributes<Target extends HTMLBaseElement = HTMLBaseElement> =
96
+ HTMLAttributes<Target> & {
97
+ href?: Nullable<string>;
98
+ target?: Nullable<string>;
99
+ };
100
+
101
+ type LinkHTMLAttributes<Target extends HTMLLinkElement = HTMLLinkElement> =
102
+ HTMLAttributes<Target> & {
103
+ rel?: Nullable<string>;
104
+ href?: Nullable<string>;
105
+ type?: Nullable<string>;
106
+ media?: Nullable<string>;
107
+ as?: Nullable<string>;
108
+ crossOrigin?: 'anonymous' | 'use-credentials';
109
+ integrity?: Nullable<string>;
110
+ };
111
+
112
+ type MetaHTMLAttributes<Target extends HTMLMetaElement = HTMLMetaElement> =
113
+ HTMLAttributes<Target> & {
114
+ name?: Nullable<string>;
115
+ content?: Nullable<string>;
116
+ charSet?: Nullable<string>;
117
+ httpEquiv?: Nullable<string>;
118
+ property?: Nullable<string>;
119
+ };
120
+
121
+ type StyleHTMLAttributes<Target extends HTMLStyleElement = HTMLStyleElement> =
122
+ HTMLAttributes<Target> & {
123
+ type?: Nullable<string>;
124
+ media?: Nullable<string>;
125
+ };
126
+
127
+ type BlockquoteHTMLAttributes<Target extends HTMLQuoteElement = HTMLQuoteElement> =
128
+ HTMLAttributes<Target> & {
129
+ cite?: Nullable<string>;
130
+ };
131
+
132
+ type LiHTMLAttributes<Target extends HTMLLIElement = HTMLLIElement> = HTMLAttributes<Target> & {
133
+ value?: Nullable<number>;
180
134
  };
181
135
 
182
- type ImgHTMLAttributes<Target extends HTMLImageElement = HTMLImageElement> =
183
- HTMLAttributes<Target> & {
184
- src?: Nullable<string>;
185
- alt?: Nullable<string>;
186
- width?: string | number;
187
- height?: string | number;
188
- loading?: 'eager' | 'lazy';
189
- crossOrigin?: 'anonymous' | 'use-credentials';
190
- decoding?: 'sync' | 'async' | 'auto';
191
- fetchPriority?: 'high' | 'low' | 'auto';
136
+ type OlHTMLAttributes<Target extends HTMLOListElement = HTMLOListElement> =
137
+ HTMLAttributes<Target> & {
138
+ reversed?: boolean;
139
+ start?: Nullable<number>;
140
+ type?: '1' | 'a' | 'A' | 'i' | 'I';
141
+ };
142
+
143
+ type AnchorHTMLAttributes<Target extends HTMLAnchorElement = HTMLAnchorElement> =
144
+ HTMLAttributes<Target> & {
145
+ href?: Nullable<string>;
146
+ target?: Nullable<string>;
147
+ rel?: Nullable<string>;
148
+ download?: string | boolean;
149
+ hrefLang?: Nullable<string>;
150
+ type?: Nullable<string>;
151
+ referrerPolicy?: Nullable<string>;
152
+ };
153
+
154
+ type DataHTMLAttributes<Target extends HTMLDataElement = HTMLDataElement> =
155
+ HTMLAttributes<Target> & {
156
+ value?: Nullable<string>;
157
+ };
158
+
159
+ type QuoteHTMLAttributes<Target extends HTMLQuoteElement = HTMLQuoteElement> =
160
+ HTMLAttributes<Target> & {
161
+ cite?: Nullable<string>;
162
+ };
163
+
164
+ type TimeHTMLAttributes<Target extends HTMLTimeElement = HTMLTimeElement> =
165
+ HTMLAttributes<Target> & {
166
+ dateTime?: Nullable<string>;
167
+ };
168
+
169
+ type AreaHTMLAttributes<Target extends HTMLAreaElement = HTMLAreaElement> =
170
+ HTMLAttributes<Target> & {
171
+ alt?: Nullable<string>;
172
+ coords?: Nullable<string>;
173
+ download?: Nullable<string>;
174
+ href?: Nullable<string>;
175
+ hrefLang?: Nullable<string>;
176
+ media?: Nullable<string>;
177
+ rel?: Nullable<string>;
178
+ shape?: 'rect' | 'circle' | 'poly' | 'default';
179
+ target?: Nullable<string>;
180
+ };
181
+
182
+ type AudioHTMLAttributes<Target extends HTMLAudioElement = HTMLAudioElement> =
183
+ HTMLAttributes<Target> & {
184
+ src?: Nullable<string>;
185
+ autoplay?: boolean;
186
+ controls?: boolean;
187
+ loop?: boolean;
188
+ muted?: boolean;
189
+ preload?: 'none' | 'metadata' | 'auto';
190
+ crossOrigin?: 'anonymous' | 'use-credentials';
191
+ };
192
+
193
+ type ImgHTMLAttributes<Target extends HTMLImageElement = HTMLImageElement> =
194
+ HTMLAttributes<Target> & {
195
+ src?: Nullable<string>;
196
+ alt?: Nullable<string>;
197
+ width?: string | number;
198
+ height?: string | number;
199
+ loading?: 'eager' | 'lazy';
200
+ crossOrigin?: 'anonymous' | 'use-credentials';
201
+ decoding?: 'sync' | 'async' | 'auto';
202
+ fetchPriority?: 'high' | 'low' | 'auto';
203
+ referrerPolicy?: Nullable<string>;
204
+ sizes?: Nullable<string>;
205
+ srcSet?: Nullable<string>;
206
+ useMap?: Nullable<string>;
207
+ };
208
+
209
+ type MapHTMLAttributes<Target extends HTMLMapElement = HTMLMapElement> =
210
+ HTMLAttributes<Target> & {
211
+ name?: Nullable<string>;
212
+ };
213
+
214
+ type TrackHTMLAttributes<Target extends HTMLTrackElement = HTMLTrackElement> =
215
+ HTMLAttributes<Target> & {
216
+ default?: boolean;
217
+ kind?: 'subtitles' | 'captions' | 'descriptions' | 'chapters' | 'metadata';
218
+ label?: Nullable<string>;
219
+ src?: Nullable<string>;
220
+ srcLang?: Nullable<string>;
221
+ };
222
+
223
+ type VideoHTMLAttributes<Target extends HTMLVideoElement = HTMLVideoElement> =
224
+ HTMLAttributes<Target> & {
225
+ src?: Nullable<string>;
226
+ autoplay?: boolean;
227
+ controls?: boolean;
228
+ loop?: boolean;
229
+ muted?: boolean;
230
+ preload?: 'none' | 'metadata' | 'auto';
231
+ poster?: Nullable<string>;
232
+ width?: string | number;
233
+ height?: string | number;
234
+ crossOrigin?: 'anonymous' | 'use-credentials';
235
+ playsInline?: boolean;
236
+ };
237
+
238
+ type EmbedHTMLAttributes<Target extends HTMLEmbedElement = HTMLEmbedElement> =
239
+ HTMLAttributes<Target> & {
240
+ src?: Nullable<string>;
241
+ type?: Nullable<string>;
242
+ width?: string | number;
243
+ height?: string | number;
244
+ };
245
+
246
+ type IframeHTMLAttributes<Target extends HTMLIFrameElement = HTMLIFrameElement> =
247
+ HTMLAttributes<Target> & {
248
+ src?: Nullable<string>;
249
+ srcdoc?: Nullable<string>;
250
+ name?: Nullable<string>;
251
+ sandbox?: Nullable<string>;
252
+ allow?: Nullable<string>;
253
+ allowFullScreen?: boolean;
254
+ width?: string | number;
255
+ height?: string | number;
256
+ loading?: 'eager' | 'lazy';
257
+ referrerPolicy?: Nullable<string>;
258
+ };
259
+
260
+ type ObjectHTMLAttributes<Target extends HTMLObjectElement = HTMLObjectElement> =
261
+ HTMLAttributes<Target> & {
262
+ data?: Nullable<string>;
263
+ type?: Nullable<string>;
264
+ name?: Nullable<string>;
265
+ useMap?: Nullable<string>;
266
+ width?: string | number;
267
+ height?: string | number;
268
+ };
269
+
270
+ type PortalHTMLAttributes<Target extends HTMLElement = HTMLElement> = HTMLAttributes<Target> & {
192
271
  referrerPolicy?: Nullable<string>;
193
- sizes?: Nullable<string>;
194
- srcSet?: Nullable<string>;
195
- useMap?: Nullable<string>;
196
- };
197
-
198
- type MapHTMLAttributes<Target extends HTMLMapElement = HTMLMapElement> = HTMLAttributes<Target> & {
199
- name?: Nullable<string>;
200
- };
201
-
202
- type TrackHTMLAttributes<Target extends HTMLTrackElement = HTMLTrackElement> =
203
- HTMLAttributes<Target> & {
204
- default?: boolean;
205
- kind?: 'subtitles' | 'captions' | 'descriptions' | 'chapters' | 'metadata';
206
- label?: Nullable<string>;
207
- src?: Nullable<string>;
208
- srcLang?: Nullable<string>;
209
- };
210
-
211
- type VideoHTMLAttributes<Target extends HTMLVideoElement = HTMLVideoElement> =
212
- HTMLAttributes<Target> & {
213
272
  src?: Nullable<string>;
214
- autoplay?: boolean;
215
- controls?: boolean;
216
- loop?: boolean;
217
- muted?: boolean;
218
- preload?: 'none' | 'metadata' | 'auto';
219
- poster?: Nullable<string>;
220
- width?: string | number;
221
- height?: string | number;
222
- crossOrigin?: 'anonymous' | 'use-credentials';
223
- playsInline?: boolean;
224
- };
225
-
226
- type EmbedHTMLAttributes<Target extends HTMLEmbedElement = HTMLEmbedElement> =
227
- HTMLAttributes<Target> & {
228
- src?: Nullable<string>;
229
- type?: Nullable<string>;
230
- width?: string | number;
231
- height?: string | number;
232
- };
233
-
234
- type IframeHTMLAttributes<Target extends HTMLIFrameElement = HTMLIFrameElement> =
235
- HTMLAttributes<Target> & {
236
- src?: Nullable<string>;
237
- srcdoc?: Nullable<string>;
238
- name?: Nullable<string>;
239
- sandbox?: Nullable<string>;
240
- allow?: Nullable<string>;
241
- allowFullScreen?: boolean;
242
- width?: string | number;
243
- height?: string | number;
244
- loading?: 'eager' | 'lazy';
245
- referrerPolicy?: Nullable<string>;
246
- };
247
-
248
- type ObjectHTMLAttributes<Target extends HTMLObjectElement = HTMLObjectElement> =
249
- HTMLAttributes<Target> & {
250
- data?: Nullable<string>;
251
- type?: Nullable<string>;
252
- name?: Nullable<string>;
253
- useMap?: Nullable<string>;
254
- width?: string | number;
255
- height?: string | number;
256
273
  };
257
274
 
258
- type PortalHTMLAttributes<Target extends HTMLElement = HTMLElement> = HTMLAttributes<Target> & {
259
- referrerPolicy?: Nullable<string>;
260
- src?: Nullable<string>;
261
- };
275
+ type SourceHTMLAttributes<Target extends HTMLSourceElement = HTMLSourceElement> =
276
+ HTMLAttributes<Target> & {
277
+ src?: Nullable<string>;
278
+ type?: Nullable<string>;
279
+ media?: Nullable<string>;
280
+ sizes?: Nullable<string>;
281
+ srcSet?: Nullable<string>;
282
+ };
283
+
284
+ type CanvasHTMLAttributes<Target extends HTMLCanvasElement = HTMLCanvasElement> =
285
+ HTMLAttributes<Target> & {
286
+ width?: string | number;
287
+ height?: string | number;
288
+ };
289
+
290
+ type ScriptHTMLAttributes<Target extends HTMLScriptElement = HTMLScriptElement> =
291
+ HTMLAttributes<Target> & {
292
+ src?: Nullable<string>;
293
+ type?: Nullable<string>;
294
+ async?: boolean;
295
+ defer?: boolean;
296
+ crossOrigin?: 'anonymous' | 'use-credentials';
297
+ integrity?: Nullable<string>;
298
+ noModule?: boolean;
299
+ referrerPolicy?: Nullable<string>;
300
+ };
301
+
302
+ type ModHTMLAttributes<Target extends HTMLModElement = HTMLModElement> =
303
+ HTMLAttributes<Target> & {
304
+ cite?: Nullable<string>;
305
+ dateTime?: Nullable<string>;
306
+ };
307
+
308
+ type ColHTMLAttributes<Target extends HTMLTableColElement = HTMLTableColElement> =
309
+ HTMLAttributes<Target> & {
310
+ span?: Nullable<number>;
311
+ };
312
+
313
+ type TableCellHTMLAttributes<Target extends HTMLTableCellElement = HTMLTableCellElement> =
314
+ HTMLAttributes<Target> & {
315
+ colSpan?: Nullable<number>;
316
+ rowSpan?: Nullable<number>;
317
+ headers?: Nullable<string>;
318
+ };
319
+
320
+ type ThHTMLAttributes<Target extends HTMLTableCellElement = HTMLTableCellElement> =
321
+ TableCellHTMLAttributes<Target> & {
322
+ scope?: 'row' | 'col' | 'rowgroup' | 'colgroup';
323
+ abbr?: Nullable<string>;
324
+ };
325
+
326
+ type ButtonHTMLAttributes<Target extends HTMLButtonElement = HTMLButtonElement> =
327
+ HTMLAttributes<Target> & {
328
+ type?: 'button' | 'submit' | 'reset';
329
+ disabled?: boolean;
330
+ form?: Nullable<string>;
331
+ formAction?: Nullable<string>;
332
+ formEncType?: Nullable<string>;
333
+ formMethod?: Nullable<string>;
334
+ formNoValidate?: boolean;
335
+ formTarget?: Nullable<string>;
336
+ name?: Nullable<string>;
337
+ value?: Nullable<string>;
338
+ };
339
+
340
+ type FieldsetHTMLAttributes<Target extends HTMLFieldSetElement = HTMLFieldSetElement> =
341
+ HTMLAttributes<Target> & {
342
+ disabled?: boolean;
343
+ form?: Nullable<string>;
344
+ name?: Nullable<string>;
345
+ };
346
+
347
+ type FormHTMLAttributes<Target extends HTMLFormElement = HTMLFormElement> =
348
+ HTMLAttributes<Target> & {
349
+ action?: Nullable<string>;
350
+ method?: 'get' | 'post' | 'dialog';
351
+ encType?: Nullable<string>;
352
+ acceptCharset?: Nullable<string>;
353
+ autoComplete?: 'on' | 'off';
354
+ noValidate?: boolean;
355
+ target?: Nullable<string>;
356
+ };
357
+
358
+ type InputHTMLAttributes<Target extends HTMLInputElement = HTMLInputElement> =
359
+ HTMLAttributes<Target> & {
360
+ type?: Nullable<string>;
361
+ value?: string | number;
362
+ placeholder?: Nullable<string>;
363
+ disabled?: boolean;
364
+ name?: Nullable<string>;
365
+ accept?: Nullable<string>;
366
+ autoComplete?: Nullable<string>;
367
+ autoFocus?: boolean;
368
+ checked?: boolean;
369
+ form?: Nullable<string>;
370
+ formAction?: Nullable<string>;
371
+ formEncType?: Nullable<string>;
372
+ formMethod?: Nullable<string>;
373
+ formNoValidate?: boolean;
374
+ formTarget?: Nullable<string>;
375
+ list?: Nullable<string>;
376
+ max?: string | number;
377
+ maxLength?: Nullable<number>;
378
+ min?: string | number;
379
+ minLength?: Nullable<number>;
380
+ multiple?: boolean;
381
+ pattern?: Nullable<string>;
382
+ readOnly?: boolean;
383
+ required?: boolean;
384
+ size?: Nullable<number>;
385
+ src?: Nullable<string>;
386
+ step?: string | number;
387
+ width?: string | number;
388
+ height?: string | number;
389
+ };
390
+
391
+ type LabelHTMLAttributes<Target extends HTMLLabelElement = HTMLLabelElement> =
392
+ HTMLAttributes<Target> & {
393
+ for?: Nullable<string>;
394
+ htmlFor?: Nullable<string>;
395
+ };
396
+
397
+ type MeterHTMLAttributes<Target extends HTMLMeterElement = HTMLMeterElement> =
398
+ HTMLAttributes<Target> & {
399
+ value?: Nullable<number>;
400
+ min?: Nullable<number>;
401
+ max?: Nullable<number>;
402
+ low?: Nullable<number>;
403
+ high?: Nullable<number>;
404
+ optimum?: Nullable<number>;
405
+ };
406
+
407
+ type OptgroupHTMLAttributes<Target extends HTMLOptGroupElement = HTMLOptGroupElement> =
408
+ HTMLAttributes<Target> & {
409
+ disabled?: boolean;
410
+ label?: Nullable<string>;
411
+ };
412
+
413
+ type OptionHTMLAttributes<Target extends HTMLOptionElement = HTMLOptionElement> =
414
+ HTMLAttributes<Target> & {
415
+ value?: string | number;
416
+ selected?: boolean;
417
+ disabled?: boolean;
418
+ label?: Nullable<string>;
419
+ };
420
+
421
+ type OutputHTMLAttributes<Target extends HTMLOutputElement = HTMLOutputElement> =
422
+ HTMLAttributes<Target> & {
423
+ for?: Nullable<string>;
424
+ htmlFor?: Nullable<string>;
425
+ form?: Nullable<string>;
426
+ name?: Nullable<string>;
427
+ };
428
+
429
+ type ProgressHTMLAttributes<Target extends HTMLProgressElement = HTMLProgressElement> =
430
+ HTMLAttributes<Target> & {
431
+ value?: Nullable<number>;
432
+ max?: Nullable<number>;
433
+ };
434
+
435
+ type SelectHTMLAttributes<Target extends HTMLSelectElement = HTMLSelectElement> =
436
+ HTMLAttributes<Target> & {
437
+ disabled?: boolean;
438
+ form?: Nullable<string>;
439
+ multiple?: boolean;
440
+ name?: Nullable<string>;
441
+ required?: boolean;
442
+ size?: Nullable<number>;
443
+ autoComplete?: Nullable<string>;
444
+ };
445
+
446
+ type TextareaHTMLAttributes<Target extends HTMLTextAreaElement = HTMLTextAreaElement> =
447
+ HTMLAttributes<Target> & {
448
+ placeholder?: Nullable<string>;
449
+ disabled?: boolean;
450
+ rows?: Nullable<number>;
451
+ cols?: Nullable<number>;
452
+ name?: Nullable<string>;
453
+ form?: Nullable<string>;
454
+ maxLength?: Nullable<number>;
455
+ minLength?: Nullable<number>;
456
+ readOnly?: boolean;
457
+ required?: boolean;
458
+ wrap?: 'soft' | 'hard';
459
+ autoComplete?: Nullable<string>;
460
+ autoFocus?: boolean;
461
+ };
462
+
463
+ type DetailsHTMLAttributes<Target extends HTMLDetailsElement = HTMLDetailsElement> =
464
+ HTMLAttributes<Target> & {
465
+ open?: boolean;
466
+ };
467
+
468
+ type DialogHTMLAttributes<Target extends HTMLDialogElement = HTMLDialogElement> =
469
+ HTMLAttributes<Target> & {
470
+ open?: boolean;
471
+ };
472
+
473
+ type SlotHTMLAttributes<Target extends HTMLSlotElement = HTMLSlotElement> =
474
+ HTMLAttributes<Target> & {
475
+ name?: Nullable<string>;
476
+ };
477
+
478
+ /** Ripple's named and symbol-keyed DOM refs. */
479
+ interface RefAttributes<Target extends globalThis.Element> extends RefAttribute<Target> {
480
+ ref?: RefValue<Target>;
481
+ }
262
482
 
263
- type SourceHTMLAttributes<Target extends HTMLSourceElement = HTMLSourceElement> =
264
- HTMLAttributes<Target> & {
265
- src?: Nullable<string>;
266
- type?: Nullable<string>;
267
- media?: Nullable<string>;
268
- sizes?: Nullable<string>;
269
- srcSet?: Nullable<string>;
270
- };
483
+ /** Combine an element's attributes with Ripple's DOM ref props. */
484
+ type DetailedHTMLProps<
485
+ E extends HTMLAttributes<Target>,
486
+ Target extends globalThis.Element,
487
+ > = RefAttributes<Target> & E;
488
+
489
+ // Base HTML attributes
490
+ interface HTMLAttributes<
491
+ Target extends globalThis.Element = globalThis.HTMLElement,
492
+ > extends RefAttributes<Target> {
493
+ class?: ClassValue | undefined | null;
494
+ className?: Nullable<string>;
495
+ id?: Nullable<string>;
496
+ style?: Nullable<string> | Record<string, string | number>;
497
+ title?: Nullable<string>;
498
+ lang?: Nullable<string>;
499
+ dir?: 'ltr' | 'rtl' | 'auto';
500
+ tabIndex?: Nullable<number>;
501
+ contentEditable?: boolean | 'true' | 'false' | 'inherit';
502
+ draggable?: boolean;
503
+ hidden?: boolean;
504
+ spellCheck?: boolean;
505
+ translate?: 'yes' | 'no';
506
+ role?: Nullable<string>;
507
+
508
+ // ARIA attributes
509
+ 'aria-label'?: Nullable<string>;
510
+ 'aria-labelledby'?: Nullable<string>;
511
+ 'aria-describedby'?: Nullable<string>;
512
+ 'aria-hidden'?: boolean | 'true' | 'false';
513
+ 'aria-expanded'?: boolean | 'true' | 'false';
514
+ 'aria-pressed'?: boolean | 'true' | 'false' | 'mixed';
515
+ 'aria-selected'?: boolean | 'true' | 'false';
516
+ 'aria-checked'?: boolean | 'true' | 'false' | 'mixed';
517
+ 'aria-disabled'?: boolean | 'true' | 'false';
518
+ 'aria-readonly'?: boolean | 'true' | 'false';
519
+ 'aria-required'?: boolean | 'true' | 'false';
520
+ 'aria-live'?: 'off' | 'polite' | 'assertive';
521
+ 'aria-atomic'?: boolean | 'true' | 'false';
522
+ 'aria-busy'?: boolean | 'true' | 'false';
523
+ 'aria-controls'?: Nullable<string>;
524
+ 'aria-current'?: boolean | 'true' | 'false' | 'page' | 'step' | 'location' | 'date' | 'time';
525
+ 'aria-owns'?: Nullable<string>;
526
+ 'aria-valuemin'?: Nullable<number>;
527
+ 'aria-valuemax'?: Nullable<number>;
528
+ 'aria-valuenow'?: Nullable<number>;
529
+ 'aria-valuetext'?: Nullable<string>;
530
+
531
+ // Event handlers
532
+ onClick?: ElementEventHandler<Target, 'click'>;
533
+ onClickCapture?: ElementEventHandler<Target, 'click'>;
534
+ onDblClick?: ElementEventHandler<Target, 'dblclick'>;
535
+ onDblClickCapture?: ElementEventHandler<Target, 'dblclick'>;
536
+ onInput?: ElementEventHandler<Target, 'input'>;
537
+ onInputCapture?: ElementEventHandler<Target, 'input'>;
538
+ onChange?: ElementEventHandler<Target, 'change'>;
539
+ onChangeCapture?: ElementEventHandler<Target, 'change'>;
540
+ onSubmit?: ElementEventHandler<Target, 'submit'>;
541
+ onSubmitCapture?: ElementEventHandler<Target, 'submit'>;
542
+ onFocus?: ElementEventHandler<Target, 'focus'>;
543
+ onFocusCapture?: ElementEventHandler<Target, 'focus'>;
544
+ onBlur?: ElementEventHandler<Target, 'blur'>;
545
+ onBlurCapture?: ElementEventHandler<Target, 'blur'>;
546
+ onKeyDown?: ElementEventHandler<Target, 'keydown'>;
547
+ onKeyDownCapture?: ElementEventHandler<Target, 'keydown'>;
548
+ onKeyUp?: ElementEventHandler<Target, 'keyup'>;
549
+ onKeyUpCapture?: ElementEventHandler<Target, 'keyup'>;
550
+ onKeyPress?: ElementEventHandler<Target, 'keypress'>;
551
+ onKeyPressCapture?: ElementEventHandler<Target, 'keypress'>;
552
+ onMouseDown?: ElementEventHandler<Target, 'mousedown'>;
553
+ onMouseDownCapture?: ElementEventHandler<Target, 'mousedown'>;
554
+ onMouseUp?: ElementEventHandler<Target, 'mouseup'>;
555
+ onMouseUpCapture?: ElementEventHandler<Target, 'mouseup'>;
556
+ onMouseEnter?: ElementEventHandler<Target, 'mouseenter'>;
557
+ onMouseEnterCapture?: ElementEventHandler<Target, 'mouseenter'>;
558
+ onMouseLeave?: ElementEventHandler<Target, 'mouseleave'>;
559
+ onMouseLeaveCapture?: ElementEventHandler<Target, 'mouseleave'>;
560
+ onMouseMove?: ElementEventHandler<Target, 'mousemove'>;
561
+ onMouseMoveCapture?: ElementEventHandler<Target, 'mousemove'>;
562
+ onMouseOver?: ElementEventHandler<Target, 'mouseover'>;
563
+ onMouseOverCapture?: ElementEventHandler<Target, 'mouseover'>;
564
+ onMouseOut?: ElementEventHandler<Target, 'mouseout'>;
565
+ onMouseOutCapture?: ElementEventHandler<Target, 'mouseout'>;
566
+ onWheel?: ElementEventHandler<Target, 'wheel'>;
567
+ onWheelCapture?: ElementEventHandler<Target, 'wheel'>;
568
+ onScroll?: ElementEventHandler<Target, 'scroll'>;
569
+ onScrollCapture?: ElementEventHandler<Target, 'scroll'>;
570
+ onTouchStart?: ElementEventHandler<Target, 'touchstart'>;
571
+ onTouchStartCapture?: ElementEventHandler<Target, 'touchstart'>;
572
+ onTouchMove?: ElementEventHandler<Target, 'touchmove'>;
573
+ onTouchMoveCapture?: ElementEventHandler<Target, 'touchmove'>;
574
+ onTouchEnd?: ElementEventHandler<Target, 'touchend'>;
575
+ onTouchEndCapture?: ElementEventHandler<Target, 'touchend'>;
576
+ onTouchCancel?: ElementEventHandler<Target, 'touchcancel'>;
577
+ onTouchCancelCapture?: ElementEventHandler<Target, 'touchcancel'>;
578
+ onDragStart?: ElementEventHandler<Target, 'dragstart'>;
579
+ onDragStartCapture?: ElementEventHandler<Target, 'dragstart'>;
580
+ onDrag?: ElementEventHandler<Target, 'drag'>;
581
+ onDragCapture?: ElementEventHandler<Target, 'drag'>;
582
+ onDragEnd?: ElementEventHandler<Target, 'dragend'>;
583
+ onDragEndCapture?: ElementEventHandler<Target, 'dragend'>;
584
+ onDragEnter?: ElementEventHandler<Target, 'dragenter'>;
585
+ onDragEnterCapture?: ElementEventHandler<Target, 'dragenter'>;
586
+ onDragLeave?: ElementEventHandler<Target, 'dragleave'>;
587
+ onDragLeaveCapture?: ElementEventHandler<Target, 'dragleave'>;
588
+ onDragOver?: ElementEventHandler<Target, 'dragover'>;
589
+ onDragOverCapture?: ElementEventHandler<Target, 'dragover'>;
590
+ onDrop?: ElementEventHandler<Target, 'drop'>;
591
+ onDropCapture?: ElementEventHandler<Target, 'drop'>;
592
+ onCopy?: ElementEventHandler<Target, 'copy'>;
593
+ onCopyCapture?: ElementEventHandler<Target, 'copy'>;
594
+ onCut?: ElementEventHandler<Target, 'cut'>;
595
+ onCutCapture?: ElementEventHandler<Target, 'cut'>;
596
+ onPaste?: ElementEventHandler<Target, 'paste'>;
597
+ onPasteCapture?: ElementEventHandler<Target, 'paste'>;
598
+ onLoad?: ElementEventHandler<Target, 'load'>;
599
+ onLoadCapture?: ElementEventHandler<Target, 'load'>;
600
+ onError?: ElementEventHandler<Target, 'error'>;
601
+ onErrorCapture?: ElementEventHandler<Target, 'error'>;
602
+ onResize?: ElementEventHandler<Target, 'resize'>;
603
+ onResizeCapture?: ElementEventHandler<Target, 'resize'>;
604
+ onAnimationStart?: ElementEventHandler<Target, 'animationstart'>;
605
+ onAnimationStartCapture?: ElementEventHandler<Target, 'animationstart'>;
606
+ onAnimationEnd?: ElementEventHandler<Target, 'animationend'>;
607
+ onAnimationEndCapture?: ElementEventHandler<Target, 'animationend'>;
608
+ onAnimationIteration?: ElementEventHandler<Target, 'animationiteration'>;
609
+ onAnimationIterationCapture?: ElementEventHandler<Target, 'animationiteration'>;
610
+ onTransitionEnd?: ElementEventHandler<Target, 'transitionend'>;
611
+ onTransitionEndCapture?: ElementEventHandler<Target, 'transitionend'>;
612
+
613
+ children?: any;
614
+ [key: string]: any;
615
+ }
271
616
 
272
- type CanvasHTMLAttributes<Target extends HTMLCanvasElement = HTMLCanvasElement> =
273
- HTMLAttributes<Target> & {
617
+ // SVG common attributes
618
+ interface SVGAttributes<Target extends globalThis.SVGElement = globalThis.SVGElement> {
619
+ // Core attributes
620
+ id?: Nullable<string>;
621
+ lang?: Nullable<string>;
622
+ tabIndex?: Nullable<number>;
623
+ xmlBase?: Nullable<string>;
624
+ xmlLang?: Nullable<string>;
625
+ xmlSpace?: Nullable<string>;
626
+
627
+ // Styling
628
+ class?: ClassValue | undefined | null;
629
+ className?: Nullable<string>;
630
+ style?: Nullable<string> | Record<string, string | number>;
631
+
632
+ // Presentation attributes
633
+ alignmentBaseline?:
634
+ | 'auto'
635
+ | 'baseline'
636
+ | 'before-edge'
637
+ | 'text-before-edge'
638
+ | 'middle'
639
+ | 'central'
640
+ | 'after-edge'
641
+ | 'text-after-edge'
642
+ | 'ideographic'
643
+ | 'alphabetic'
644
+ | 'hanging'
645
+ | 'mathematical'
646
+ | 'inherit';
647
+ baselineShift?: string | number;
648
+ clip?: Nullable<string>;
649
+ clipPath?: Nullable<string>;
650
+ clipRule?: 'nonzero' | 'evenodd' | 'inherit';
651
+ color?: Nullable<string>;
652
+ colorInterpolation?: 'auto' | 'sRGB' | 'linearRGB' | 'inherit';
653
+ colorInterpolationFilters?: 'auto' | 'sRGB' | 'linearRGB' | 'inherit';
654
+ cursor?: Nullable<string>;
655
+ direction?: 'ltr' | 'rtl' | 'inherit';
656
+ display?: Nullable<string>;
657
+ dominantBaseline?:
658
+ | 'auto'
659
+ | 'text-bottom'
660
+ | 'alphabetic'
661
+ | 'ideographic'
662
+ | 'middle'
663
+ | 'central'
664
+ | 'mathematical'
665
+ | 'hanging'
666
+ | 'text-top'
667
+ | 'inherit';
668
+ fill?: Nullable<string>;
669
+ fillOpacity?: number | string;
670
+ fillRule?: 'nonzero' | 'evenodd' | 'inherit';
671
+ filter?: Nullable<string>;
672
+ floodColor?: Nullable<string>;
673
+ floodOpacity?: number | string;
674
+ fontFamily?: Nullable<string>;
675
+ fontSize?: string | number;
676
+ fontSizeAdjust?: string | number;
677
+ fontStretch?: Nullable<string>;
678
+ fontStyle?: 'normal' | 'italic' | 'oblique' | 'inherit';
679
+ fontVariant?: Nullable<string>;
680
+ fontWeight?: string | number;
681
+ glyphOrientationHorizontal?: Nullable<string>;
682
+ glyphOrientationVertical?: Nullable<string>;
683
+ imageRendering?: 'auto' | 'optimizeSpeed' | 'optimizeQuality' | 'inherit';
684
+ letterSpacing?: string | number;
685
+ lightingColor?: Nullable<string>;
686
+ markerEnd?: Nullable<string>;
687
+ markerMid?: Nullable<string>;
688
+ markerStart?: Nullable<string>;
689
+ mask?: Nullable<string>;
690
+ opacity?: number | string;
691
+ overflow?: 'visible' | 'hidden' | 'scroll' | 'auto' | 'inherit';
692
+ pointerEvents?:
693
+ | 'bounding-box'
694
+ | 'visiblePainted'
695
+ | 'visibleFill'
696
+ | 'visibleStroke'
697
+ | 'visible'
698
+ | 'painted'
699
+ | 'fill'
700
+ | 'stroke'
701
+ | 'all'
702
+ | 'none'
703
+ | 'inherit';
704
+ shapeRendering?: 'auto' | 'optimizeSpeed' | 'crispEdges' | 'geometricPrecision' | 'inherit';
705
+ stopColor?: Nullable<string>;
706
+ stopOpacity?: number | string;
707
+ stroke?: Nullable<string>;
708
+ strokeDasharray?: string | number;
709
+ strokeDashoffset?: string | number;
710
+ strokeLinecap?: 'butt' | 'round' | 'square' | 'inherit';
711
+ strokeLinejoin?: 'miter' | 'round' | 'bevel' | 'inherit';
712
+ strokeMiterlimit?: number | string;
713
+ strokeOpacity?: number | string;
714
+ strokeWidth?: string | number;
715
+ textAnchor?: 'start' | 'middle' | 'end' | 'inherit';
716
+ textDecoration?: Nullable<string>;
717
+ textRendering?:
718
+ 'auto' | 'optimizeSpeed' | 'optimizeLegibility' | 'geometricPrecision' | 'inherit';
719
+ transform?: Nullable<string>;
720
+ transformOrigin?: Nullable<string>;
721
+ unicodeBidi?:
722
+ | 'normal'
723
+ | 'embed'
724
+ | 'isolate'
725
+ | 'bidi-override'
726
+ | 'isolate-override'
727
+ | 'plaintext'
728
+ | 'inherit';
729
+ vectorEffect?:
730
+ 'none' | 'non-scaling-stroke' | 'non-scaling-size' | 'non-rotation' | 'fixed-position';
731
+ visibility?: 'visible' | 'hidden' | 'collapse' | 'inherit';
732
+ wordSpacing?: string | number;
733
+ writingMode?: 'horizontal-tb' | 'vertical-rl' | 'vertical-lr' | 'inherit';
734
+
735
+ // Common SVG attributes
274
736
  width?: string | number;
275
737
  height?: string | number;
276
- };
277
-
278
- type ScriptHTMLAttributes<Target extends HTMLScriptElement = HTMLScriptElement> =
279
- HTMLAttributes<Target> & {
280
- src?: Nullable<string>;
281
- type?: Nullable<string>;
282
- async?: boolean;
283
- defer?: boolean;
284
- crossOrigin?: 'anonymous' | 'use-credentials';
285
- integrity?: Nullable<string>;
286
- noModule?: boolean;
287
- referrerPolicy?: Nullable<string>;
288
- };
289
-
290
- type ModHTMLAttributes<Target extends HTMLModElement = HTMLModElement> = HTMLAttributes<Target> & {
291
- cite?: Nullable<string>;
292
- dateTime?: Nullable<string>;
293
- };
294
-
295
- type ColHTMLAttributes<Target extends HTMLTableColElement = HTMLTableColElement> =
296
- HTMLAttributes<Target> & {
297
- span?: Nullable<number>;
298
- };
299
-
300
- type TableCellHTMLAttributes<Target extends HTMLTableCellElement = HTMLTableCellElement> =
301
- HTMLAttributes<Target> & {
302
- colSpan?: Nullable<number>;
303
- rowSpan?: Nullable<number>;
304
- headers?: Nullable<string>;
305
- };
306
-
307
- type ThHTMLAttributes<Target extends HTMLTableCellElement = HTMLTableCellElement> =
308
- TableCellHTMLAttributes<Target> & {
309
- scope?: 'row' | 'col' | 'rowgroup' | 'colgroup';
310
- abbr?: Nullable<string>;
311
- };
312
-
313
- type ButtonHTMLAttributes<Target extends HTMLButtonElement = HTMLButtonElement> =
314
- HTMLAttributes<Target> & {
315
- type?: 'button' | 'submit' | 'reset';
316
- disabled?: boolean;
317
- form?: Nullable<string>;
318
- formAction?: Nullable<string>;
319
- formEncType?: Nullable<string>;
320
- formMethod?: Nullable<string>;
321
- formNoValidate?: boolean;
322
- formTarget?: Nullable<string>;
323
- name?: Nullable<string>;
324
- value?: Nullable<string>;
325
- };
738
+ x?: string | number;
739
+ y?: string | number;
740
+ viewBox?: Nullable<string>;
741
+ preserveAspectRatio?: Nullable<string>;
742
+ xmlns?: Nullable<string>;
743
+ 'xmlns:xlink'?: Nullable<string>;
744
+
745
+ // Event handlers (inherited from HTML but included for clarity)
746
+ onClick?: ElementEventHandler<Target, 'click'>;
747
+ onClickCapture?: ElementEventHandler<Target, 'click'>;
748
+ onMouseDown?: ElementEventHandler<Target, 'mousedown'>;
749
+ onMouseDownCapture?: ElementEventHandler<Target, 'mousedown'>;
750
+ onMouseUp?: ElementEventHandler<Target, 'mouseup'>;
751
+ onMouseUpCapture?: ElementEventHandler<Target, 'mouseup'>;
752
+ onMouseMove?: ElementEventHandler<Target, 'mousemove'>;
753
+ onMouseMoveCapture?: ElementEventHandler<Target, 'mousemove'>;
754
+ onMouseEnter?: ElementEventHandler<Target, 'mouseenter'>;
755
+ onMouseEnterCapture?: ElementEventHandler<Target, 'mouseenter'>;
756
+ onMouseLeave?: ElementEventHandler<Target, 'mouseleave'>;
757
+ onMouseLeaveCapture?: ElementEventHandler<Target, 'mouseleave'>;
758
+ onMouseOver?: ElementEventHandler<Target, 'mouseover'>;
759
+ onMouseOverCapture?: ElementEventHandler<Target, 'mouseover'>;
760
+ onMouseOut?: ElementEventHandler<Target, 'mouseout'>;
761
+ onMouseOutCapture?: ElementEventHandler<Target, 'mouseout'>;
762
+ onFocus?: ElementEventHandler<Target, 'focus'>;
763
+ onFocusCapture?: ElementEventHandler<Target, 'focus'>;
764
+ onBlur?: ElementEventHandler<Target, 'blur'>;
765
+ onBlurCapture?: ElementEventHandler<Target, 'blur'>;
766
+ onLoad?: ElementEventHandler<Target, 'load'>;
767
+ onLoadCapture?: ElementEventHandler<Target, 'load'>;
768
+ onError?: ElementEventHandler<Target, 'error'>;
769
+ onErrorCapture?: ElementEventHandler<Target, 'error'>;
770
+
771
+ children?: any;
772
+ [key: string]: any;
773
+ }
326
774
 
327
- type FieldsetHTMLAttributes<Target extends HTMLFieldSetElement = HTMLFieldSetElement> =
328
- HTMLAttributes<Target> & {
329
- disabled?: boolean;
330
- form?: Nullable<string>;
331
- name?: Nullable<string>;
332
- };
775
+ // SVG animation attributes
776
+ interface SVGAnimationAttributes {
777
+ attributeName?: Nullable<string>;
778
+ attributeType?: 'CSS' | 'XML' | 'auto';
779
+ begin?: Nullable<string>;
780
+ dur?: Nullable<string>;
781
+ end?: Nullable<string>;
782
+ min?: Nullable<string>;
783
+ max?: Nullable<string>;
784
+ restart?: 'always' | 'whenNotActive' | 'never';
785
+ repeatCount?: number | 'indefinite';
786
+ repeatDur?: Nullable<string>;
787
+ fill?: 'freeze' | 'remove';
788
+ calcMode?: 'discrete' | 'linear' | 'paced' | 'spline';
789
+ values?: Nullable<string>;
790
+ keyTimes?: Nullable<string>;
791
+ keySplines?: Nullable<string>;
792
+ from?: string | number;
793
+ to?: string | number;
794
+ by?: string | number;
795
+ additive?: 'replace' | 'sum';
796
+ accumulate?: 'none' | 'sum';
797
+ }
333
798
 
334
- type FormHTMLAttributes<Target extends HTMLFormElement = HTMLFormElement> =
335
- HTMLAttributes<Target> & {
336
- action?: Nullable<string>;
337
- method?: 'get' | 'post' | 'dialog';
338
- encType?: Nullable<string>;
339
- acceptCharset?: Nullable<string>;
340
- autoComplete?: 'on' | 'off';
341
- noValidate?: boolean;
342
- target?: Nullable<string>;
343
- };
799
+ // SVG gradient attributes
800
+ interface SVGGradientAttributes<
801
+ Target extends globalThis.SVGElement = globalThis.SVGElement,
802
+ > extends SVGAttributes<Target> {
803
+ gradientUnits?: 'userSpaceOnUse' | 'objectBoundingBox';
804
+ gradientTransform?: Nullable<string>;
805
+ spreadMethod?: 'pad' | 'reflect' | 'repeat';
806
+ href?: Nullable<string>;
807
+ 'xlink:href'?: Nullable<string>;
808
+ }
344
809
 
345
- type InputHTMLAttributes<Target extends HTMLInputElement = HTMLInputElement> =
346
- HTMLAttributes<Target> & {
347
- type?: Nullable<string>;
348
- value?: string | number;
349
- placeholder?: Nullable<string>;
350
- disabled?: boolean;
351
- name?: Nullable<string>;
352
- accept?: Nullable<string>;
353
- autoComplete?: Nullable<string>;
354
- autoFocus?: boolean;
355
- checked?: boolean;
356
- form?: Nullable<string>;
357
- formAction?: Nullable<string>;
358
- formEncType?: Nullable<string>;
359
- formMethod?: Nullable<string>;
360
- formNoValidate?: boolean;
361
- formTarget?: Nullable<string>;
362
- list?: Nullable<string>;
363
- max?: string | number;
364
- maxLength?: Nullable<number>;
365
- min?: string | number;
366
- minLength?: Nullable<number>;
367
- multiple?: boolean;
368
- pattern?: Nullable<string>;
369
- readOnly?: boolean;
370
- required?: boolean;
371
- size?: Nullable<number>;
372
- src?: Nullable<string>;
373
- step?: string | number;
810
+ // SVG filter primitive attributes
811
+ interface SVGFilterAttributes {
812
+ in?: Nullable<string>;
813
+ result?: Nullable<string>;
814
+ x?: string | number;
815
+ y?: string | number;
374
816
  width?: string | number;
375
817
  height?: string | number;
376
- };
377
-
378
- type LabelHTMLAttributes<Target extends HTMLLabelElement = HTMLLabelElement> =
379
- HTMLAttributes<Target> & {
380
- for?: Nullable<string>;
381
- htmlFor?: Nullable<string>;
382
- };
383
-
384
- type MeterHTMLAttributes<Target extends HTMLMeterElement = HTMLMeterElement> =
385
- HTMLAttributes<Target> & {
386
- value?: Nullable<number>;
387
- min?: Nullable<number>;
388
- max?: Nullable<number>;
389
- low?: Nullable<number>;
390
- high?: Nullable<number>;
391
- optimum?: Nullable<number>;
392
- };
393
-
394
- type OptgroupHTMLAttributes<Target extends HTMLOptGroupElement = HTMLOptGroupElement> =
395
- HTMLAttributes<Target> & {
396
- disabled?: boolean;
397
- label?: Nullable<string>;
398
- };
399
-
400
- type OptionHTMLAttributes<Target extends HTMLOptionElement = HTMLOptionElement> =
401
- HTMLAttributes<Target> & {
402
- value?: string | number;
403
- selected?: boolean;
404
- disabled?: boolean;
405
- label?: Nullable<string>;
406
- };
407
-
408
- type OutputHTMLAttributes<Target extends HTMLOutputElement = HTMLOutputElement> =
409
- HTMLAttributes<Target> & {
410
- for?: Nullable<string>;
411
- htmlFor?: Nullable<string>;
412
- form?: Nullable<string>;
413
- name?: Nullable<string>;
414
- };
415
-
416
- type ProgressHTMLAttributes<Target extends HTMLProgressElement = HTMLProgressElement> =
417
- HTMLAttributes<Target> & {
418
- value?: Nullable<number>;
419
- max?: Nullable<number>;
420
- };
421
-
422
- type SelectHTMLAttributes<Target extends HTMLSelectElement = HTMLSelectElement> =
423
- HTMLAttributes<Target> & {
424
- disabled?: boolean;
425
- form?: Nullable<string>;
426
- multiple?: boolean;
427
- name?: Nullable<string>;
428
- required?: boolean;
429
- size?: Nullable<number>;
430
- autoComplete?: Nullable<string>;
431
- };
432
-
433
- type TextareaHTMLAttributes<Target extends HTMLTextAreaElement = HTMLTextAreaElement> =
434
- HTMLAttributes<Target> & {
435
- placeholder?: Nullable<string>;
436
- disabled?: boolean;
437
- rows?: Nullable<number>;
438
- cols?: Nullable<number>;
439
- name?: Nullable<string>;
440
- form?: Nullable<string>;
441
- maxLength?: Nullable<number>;
442
- minLength?: Nullable<number>;
443
- readOnly?: boolean;
444
- required?: boolean;
445
- wrap?: 'soft' | 'hard';
446
- autoComplete?: Nullable<string>;
447
- autoFocus?: boolean;
448
- };
449
-
450
- type DetailsHTMLAttributes<Target extends HTMLDetailsElement = HTMLDetailsElement> =
451
- HTMLAttributes<Target> & {
452
- open?: boolean;
453
- };
454
-
455
- type DialogHTMLAttributes<Target extends HTMLDialogElement = HTMLDialogElement> =
456
- HTMLAttributes<Target> & {
457
- open?: boolean;
458
- };
459
-
460
- type SlotHTMLAttributes<Target extends HTMLSlotElement = HTMLSlotElement> =
461
- HTMLAttributes<Target> & {
462
- name?: Nullable<string>;
463
- };
464
-
465
- // Base HTML attributes
466
- interface HTMLAttributes<
467
- Target extends globalThis.Element = globalThis.HTMLElement,
468
- > extends RefAttribute<Target> {
469
- ref?: RefValue<Target>;
470
- class?: ClassValue | undefined | null;
471
- className?: Nullable<string>;
472
- id?: Nullable<string>;
473
- style?: Nullable<string> | Record<string, string | number>;
474
- title?: Nullable<string>;
475
- lang?: Nullable<string>;
476
- dir?: 'ltr' | 'rtl' | 'auto';
477
- tabIndex?: Nullable<number>;
478
- contentEditable?: boolean | 'true' | 'false' | 'inherit';
479
- draggable?: boolean;
480
- hidden?: boolean;
481
- spellCheck?: boolean;
482
- translate?: 'yes' | 'no';
483
- role?: Nullable<string>;
484
-
485
- // ARIA attributes
486
- 'aria-label'?: Nullable<string>;
487
- 'aria-labelledby'?: Nullable<string>;
488
- 'aria-describedby'?: Nullable<string>;
489
- 'aria-hidden'?: boolean | 'true' | 'false';
490
- 'aria-expanded'?: boolean | 'true' | 'false';
491
- 'aria-pressed'?: boolean | 'true' | 'false' | 'mixed';
492
- 'aria-selected'?: boolean | 'true' | 'false';
493
- 'aria-checked'?: boolean | 'true' | 'false' | 'mixed';
494
- 'aria-disabled'?: boolean | 'true' | 'false';
495
- 'aria-readonly'?: boolean | 'true' | 'false';
496
- 'aria-required'?: boolean | 'true' | 'false';
497
- 'aria-live'?: 'off' | 'polite' | 'assertive';
498
- 'aria-atomic'?: boolean | 'true' | 'false';
499
- 'aria-busy'?: boolean | 'true' | 'false';
500
- 'aria-controls'?: Nullable<string>;
501
- 'aria-current'?: boolean | 'true' | 'false' | 'page' | 'step' | 'location' | 'date' | 'time';
502
- 'aria-owns'?: Nullable<string>;
503
- 'aria-valuemin'?: Nullable<number>;
504
- 'aria-valuemax'?: Nullable<number>;
505
- 'aria-valuenow'?: Nullable<number>;
506
- 'aria-valuetext'?: Nullable<string>;
507
-
508
- // Event handlers
509
- onClick?: ElementEventHandler<Target, 'click'>;
510
- onClickCapture?: ElementEventHandler<Target, 'click'>;
511
- onDblClick?: ElementEventHandler<Target, 'dblclick'>;
512
- onDblClickCapture?: ElementEventHandler<Target, 'dblclick'>;
513
- onInput?: ElementEventHandler<Target, 'input'>;
514
- onInputCapture?: ElementEventHandler<Target, 'input'>;
515
- onChange?: ElementEventHandler<Target, 'change'>;
516
- onChangeCapture?: ElementEventHandler<Target, 'change'>;
517
- onSubmit?: ElementEventHandler<Target, 'submit'>;
518
- onSubmitCapture?: ElementEventHandler<Target, 'submit'>;
519
- onFocus?: ElementEventHandler<Target, 'focus'>;
520
- onFocusCapture?: ElementEventHandler<Target, 'focus'>;
521
- onBlur?: ElementEventHandler<Target, 'blur'>;
522
- onBlurCapture?: ElementEventHandler<Target, 'blur'>;
523
- onKeyDown?: ElementEventHandler<Target, 'keydown'>;
524
- onKeyDownCapture?: ElementEventHandler<Target, 'keydown'>;
525
- onKeyUp?: ElementEventHandler<Target, 'keyup'>;
526
- onKeyUpCapture?: ElementEventHandler<Target, 'keyup'>;
527
- onKeyPress?: ElementEventHandler<Target, 'keypress'>;
528
- onKeyPressCapture?: ElementEventHandler<Target, 'keypress'>;
529
- onMouseDown?: ElementEventHandler<Target, 'mousedown'>;
530
- onMouseDownCapture?: ElementEventHandler<Target, 'mousedown'>;
531
- onMouseUp?: ElementEventHandler<Target, 'mouseup'>;
532
- onMouseUpCapture?: ElementEventHandler<Target, 'mouseup'>;
533
- onMouseEnter?: ElementEventHandler<Target, 'mouseenter'>;
534
- onMouseEnterCapture?: ElementEventHandler<Target, 'mouseenter'>;
535
- onMouseLeave?: ElementEventHandler<Target, 'mouseleave'>;
536
- onMouseLeaveCapture?: ElementEventHandler<Target, 'mouseleave'>;
537
- onMouseMove?: ElementEventHandler<Target, 'mousemove'>;
538
- onMouseMoveCapture?: ElementEventHandler<Target, 'mousemove'>;
539
- onMouseOver?: ElementEventHandler<Target, 'mouseover'>;
540
- onMouseOverCapture?: ElementEventHandler<Target, 'mouseover'>;
541
- onMouseOut?: ElementEventHandler<Target, 'mouseout'>;
542
- onMouseOutCapture?: ElementEventHandler<Target, 'mouseout'>;
543
- onWheel?: ElementEventHandler<Target, 'wheel'>;
544
- onWheelCapture?: ElementEventHandler<Target, 'wheel'>;
545
- onScroll?: ElementEventHandler<Target, 'scroll'>;
546
- onScrollCapture?: ElementEventHandler<Target, 'scroll'>;
547
- onTouchStart?: ElementEventHandler<Target, 'touchstart'>;
548
- onTouchStartCapture?: ElementEventHandler<Target, 'touchstart'>;
549
- onTouchMove?: ElementEventHandler<Target, 'touchmove'>;
550
- onTouchMoveCapture?: ElementEventHandler<Target, 'touchmove'>;
551
- onTouchEnd?: ElementEventHandler<Target, 'touchend'>;
552
- onTouchEndCapture?: ElementEventHandler<Target, 'touchend'>;
553
- onTouchCancel?: ElementEventHandler<Target, 'touchcancel'>;
554
- onTouchCancelCapture?: ElementEventHandler<Target, 'touchcancel'>;
555
- onDragStart?: ElementEventHandler<Target, 'dragstart'>;
556
- onDragStartCapture?: ElementEventHandler<Target, 'dragstart'>;
557
- onDrag?: ElementEventHandler<Target, 'drag'>;
558
- onDragCapture?: ElementEventHandler<Target, 'drag'>;
559
- onDragEnd?: ElementEventHandler<Target, 'dragend'>;
560
- onDragEndCapture?: ElementEventHandler<Target, 'dragend'>;
561
- onDragEnter?: ElementEventHandler<Target, 'dragenter'>;
562
- onDragEnterCapture?: ElementEventHandler<Target, 'dragenter'>;
563
- onDragLeave?: ElementEventHandler<Target, 'dragleave'>;
564
- onDragLeaveCapture?: ElementEventHandler<Target, 'dragleave'>;
565
- onDragOver?: ElementEventHandler<Target, 'dragover'>;
566
- onDragOverCapture?: ElementEventHandler<Target, 'dragover'>;
567
- onDrop?: ElementEventHandler<Target, 'drop'>;
568
- onDropCapture?: ElementEventHandler<Target, 'drop'>;
569
- onCopy?: ElementEventHandler<Target, 'copy'>;
570
- onCopyCapture?: ElementEventHandler<Target, 'copy'>;
571
- onCut?: ElementEventHandler<Target, 'cut'>;
572
- onCutCapture?: ElementEventHandler<Target, 'cut'>;
573
- onPaste?: ElementEventHandler<Target, 'paste'>;
574
- onPasteCapture?: ElementEventHandler<Target, 'paste'>;
575
- onLoad?: ElementEventHandler<Target, 'load'>;
576
- onLoadCapture?: ElementEventHandler<Target, 'load'>;
577
- onError?: ElementEventHandler<Target, 'error'>;
578
- onErrorCapture?: ElementEventHandler<Target, 'error'>;
579
- onResize?: ElementEventHandler<Target, 'resize'>;
580
- onResizeCapture?: ElementEventHandler<Target, 'resize'>;
581
- onAnimationStart?: ElementEventHandler<Target, 'animationstart'>;
582
- onAnimationStartCapture?: ElementEventHandler<Target, 'animationstart'>;
583
- onAnimationEnd?: ElementEventHandler<Target, 'animationend'>;
584
- onAnimationEndCapture?: ElementEventHandler<Target, 'animationend'>;
585
- onAnimationIteration?: ElementEventHandler<Target, 'animationiteration'>;
586
- onAnimationIterationCapture?: ElementEventHandler<Target, 'animationiteration'>;
587
- onTransitionEnd?: ElementEventHandler<Target, 'transitionend'>;
588
- onTransitionEndCapture?: ElementEventHandler<Target, 'transitionend'>;
589
-
590
- children?: any;
591
- [key: string]: any;
592
- }
593
-
594
- // SVG common attributes
595
- interface SVGAttributes<Target extends globalThis.SVGElement = globalThis.SVGElement> {
596
- // Core attributes
597
- id?: Nullable<string>;
598
- lang?: Nullable<string>;
599
- tabIndex?: Nullable<number>;
600
- xmlBase?: Nullable<string>;
601
- xmlLang?: Nullable<string>;
602
- xmlSpace?: Nullable<string>;
603
-
604
- // Styling
605
- class?: ClassValue | undefined | null;
606
- className?: Nullable<string>;
607
- style?: Nullable<string> | Record<string, string | number>;
608
-
609
- // Presentation attributes
610
- alignmentBaseline?:
611
- | 'auto'
612
- | 'baseline'
613
- | 'before-edge'
614
- | 'text-before-edge'
615
- | 'middle'
616
- | 'central'
617
- | 'after-edge'
618
- | 'text-after-edge'
619
- | 'ideographic'
620
- | 'alphabetic'
621
- | 'hanging'
622
- | 'mathematical'
623
- | 'inherit';
624
- baselineShift?: string | number;
625
- clip?: Nullable<string>;
626
- clipPath?: Nullable<string>;
627
- clipRule?: 'nonzero' | 'evenodd' | 'inherit';
628
- color?: Nullable<string>;
629
- colorInterpolation?: 'auto' | 'sRGB' | 'linearRGB' | 'inherit';
630
- colorInterpolationFilters?: 'auto' | 'sRGB' | 'linearRGB' | 'inherit';
631
- cursor?: Nullable<string>;
632
- direction?: 'ltr' | 'rtl' | 'inherit';
633
- display?: Nullable<string>;
634
- dominantBaseline?:
635
- | 'auto'
636
- | 'text-bottom'
637
- | 'alphabetic'
638
- | 'ideographic'
639
- | 'middle'
640
- | 'central'
641
- | 'mathematical'
642
- | 'hanging'
643
- | 'text-top'
644
- | 'inherit';
645
- fill?: Nullable<string>;
646
- fillOpacity?: number | string;
647
- fillRule?: 'nonzero' | 'evenodd' | 'inherit';
648
- filter?: Nullable<string>;
649
- floodColor?: Nullable<string>;
650
- floodOpacity?: number | string;
651
- fontFamily?: Nullable<string>;
652
- fontSize?: string | number;
653
- fontSizeAdjust?: string | number;
654
- fontStretch?: Nullable<string>;
655
- fontStyle?: 'normal' | 'italic' | 'oblique' | 'inherit';
656
- fontVariant?: Nullable<string>;
657
- fontWeight?: string | number;
658
- glyphOrientationHorizontal?: Nullable<string>;
659
- glyphOrientationVertical?: Nullable<string>;
660
- imageRendering?: 'auto' | 'optimizeSpeed' | 'optimizeQuality' | 'inherit';
661
- letterSpacing?: string | number;
662
- lightingColor?: Nullable<string>;
663
- markerEnd?: Nullable<string>;
664
- markerMid?: Nullable<string>;
665
- markerStart?: Nullable<string>;
666
- mask?: Nullable<string>;
667
- opacity?: number | string;
668
- overflow?: 'visible' | 'hidden' | 'scroll' | 'auto' | 'inherit';
669
- pointerEvents?:
670
- | 'bounding-box'
671
- | 'visiblePainted'
672
- | 'visibleFill'
673
- | 'visibleStroke'
674
- | 'visible'
675
- | 'painted'
676
- | 'fill'
677
- | 'stroke'
678
- | 'all'
679
- | 'none'
680
- | 'inherit';
681
- shapeRendering?: 'auto' | 'optimizeSpeed' | 'crispEdges' | 'geometricPrecision' | 'inherit';
682
- stopColor?: Nullable<string>;
683
- stopOpacity?: number | string;
684
- stroke?: Nullable<string>;
685
- strokeDasharray?: string | number;
686
- strokeDashoffset?: string | number;
687
- strokeLinecap?: 'butt' | 'round' | 'square' | 'inherit';
688
- strokeLinejoin?: 'miter' | 'round' | 'bevel' | 'inherit';
689
- strokeMiterlimit?: number | string;
690
- strokeOpacity?: number | string;
691
- strokeWidth?: string | number;
692
- textAnchor?: 'start' | 'middle' | 'end' | 'inherit';
693
- textDecoration?: Nullable<string>;
694
- textRendering?:
695
- 'auto' | 'optimizeSpeed' | 'optimizeLegibility' | 'geometricPrecision' | 'inherit';
696
- transform?: Nullable<string>;
697
- transformOrigin?: Nullable<string>;
698
- unicodeBidi?:
699
- 'normal' | 'embed' | 'isolate' | 'bidi-override' | 'isolate-override' | 'plaintext' | 'inherit';
700
- vectorEffect?:
701
- 'none' | 'non-scaling-stroke' | 'non-scaling-size' | 'non-rotation' | 'fixed-position';
702
- visibility?: 'visible' | 'hidden' | 'collapse' | 'inherit';
703
- wordSpacing?: string | number;
704
- writingMode?: 'horizontal-tb' | 'vertical-rl' | 'vertical-lr' | 'inherit';
705
-
706
- // Common SVG attributes
707
- width?: string | number;
708
- height?: string | number;
709
- x?: string | number;
710
- y?: string | number;
711
- viewBox?: Nullable<string>;
712
- preserveAspectRatio?: Nullable<string>;
713
- xmlns?: Nullable<string>;
714
- 'xmlns:xlink'?: Nullable<string>;
715
-
716
- // Event handlers (inherited from HTML but included for clarity)
717
- onClick?: ElementEventHandler<Target, 'click'>;
718
- onClickCapture?: ElementEventHandler<Target, 'click'>;
719
- onMouseDown?: ElementEventHandler<Target, 'mousedown'>;
720
- onMouseDownCapture?: ElementEventHandler<Target, 'mousedown'>;
721
- onMouseUp?: ElementEventHandler<Target, 'mouseup'>;
722
- onMouseUpCapture?: ElementEventHandler<Target, 'mouseup'>;
723
- onMouseMove?: ElementEventHandler<Target, 'mousemove'>;
724
- onMouseMoveCapture?: ElementEventHandler<Target, 'mousemove'>;
725
- onMouseEnter?: ElementEventHandler<Target, 'mouseenter'>;
726
- onMouseEnterCapture?: ElementEventHandler<Target, 'mouseenter'>;
727
- onMouseLeave?: ElementEventHandler<Target, 'mouseleave'>;
728
- onMouseLeaveCapture?: ElementEventHandler<Target, 'mouseleave'>;
729
- onMouseOver?: ElementEventHandler<Target, 'mouseover'>;
730
- onMouseOverCapture?: ElementEventHandler<Target, 'mouseover'>;
731
- onMouseOut?: ElementEventHandler<Target, 'mouseout'>;
732
- onMouseOutCapture?: ElementEventHandler<Target, 'mouseout'>;
733
- onFocus?: ElementEventHandler<Target, 'focus'>;
734
- onFocusCapture?: ElementEventHandler<Target, 'focus'>;
735
- onBlur?: ElementEventHandler<Target, 'blur'>;
736
- onBlurCapture?: ElementEventHandler<Target, 'blur'>;
737
- onLoad?: ElementEventHandler<Target, 'load'>;
738
- onLoadCapture?: ElementEventHandler<Target, 'load'>;
739
- onError?: ElementEventHandler<Target, 'error'>;
740
- onErrorCapture?: ElementEventHandler<Target, 'error'>;
741
-
742
- children?: any;
743
- [key: string]: any;
744
- }
745
-
746
- // SVG animation attributes
747
- interface SVGAnimationAttributes {
748
- attributeName?: Nullable<string>;
749
- attributeType?: 'CSS' | 'XML' | 'auto';
750
- begin?: Nullable<string>;
751
- dur?: Nullable<string>;
752
- end?: Nullable<string>;
753
- min?: Nullable<string>;
754
- max?: Nullable<string>;
755
- restart?: 'always' | 'whenNotActive' | 'never';
756
- repeatCount?: number | 'indefinite';
757
- repeatDur?: Nullable<string>;
758
- fill?: 'freeze' | 'remove';
759
- calcMode?: 'discrete' | 'linear' | 'paced' | 'spline';
760
- values?: Nullable<string>;
761
- keyTimes?: Nullable<string>;
762
- keySplines?: Nullable<string>;
763
- from?: string | number;
764
- to?: string | number;
765
- by?: string | number;
766
- additive?: 'replace' | 'sum';
767
- accumulate?: 'none' | 'sum';
768
- }
769
-
770
- // SVG gradient attributes
771
- interface SVGGradientAttributes<
772
- Target extends globalThis.SVGElement = globalThis.SVGElement,
773
- > extends SVGAttributes<Target> {
774
- gradientUnits?: 'userSpaceOnUse' | 'objectBoundingBox';
775
- gradientTransform?: Nullable<string>;
776
- spreadMethod?: 'pad' | 'reflect' | 'repeat';
777
- href?: Nullable<string>;
778
- 'xlink:href'?: Nullable<string>;
779
- }
780
-
781
- // SVG filter primitive attributes
782
- interface SVGFilterAttributes {
783
- in?: Nullable<string>;
784
- result?: Nullable<string>;
785
- x?: string | number;
786
- y?: string | number;
787
- width?: string | number;
788
- height?: string | number;
789
- }
818
+ }
790
819
 
791
- // SVG transfer function attributes (for feFuncR, feFuncG, feFuncB, feFuncA)
792
- interface SVGTransferFunctionAttributes {
793
- type?: 'identity' | 'table' | 'discrete' | 'linear' | 'gamma';
794
- tableValues?: Nullable<string>;
795
- slope?: Nullable<number>;
796
- intercept?: Nullable<number>;
797
- amplitude?: Nullable<number>;
798
- exponent?: Nullable<number>;
799
- offset?: Nullable<number>;
800
- }
820
+ // SVG transfer function attributes (for feFuncR, feFuncG, feFuncB, feFuncA)
821
+ interface SVGTransferFunctionAttributes {
822
+ type?: 'identity' | 'table' | 'discrete' | 'linear' | 'gamma';
823
+ tableValues?: Nullable<string>;
824
+ slope?: Nullable<number>;
825
+ intercept?: Nullable<number>;
826
+ amplitude?: Nullable<number>;
827
+ exponent?: Nullable<number>;
828
+ offset?: Nullable<number>;
829
+ }
801
830
 
802
- // SVG text attributes
803
- interface SVGTextAttributes {
804
- x?: string | number;
805
- y?: string | number;
806
- dx?: string | number;
807
- dy?: string | number;
808
- rotate?: string | number;
809
- lengthAdjust?: 'spacing' | 'spacingAndGlyphs';
810
- textLength?: string | number;
811
- }
831
+ // SVG text attributes
832
+ interface SVGTextAttributes {
833
+ x?: string | number;
834
+ y?: string | number;
835
+ dx?: string | number;
836
+ dy?: string | number;
837
+ rotate?: string | number;
838
+ lengthAdjust?: 'spacing' | 'spacingAndGlyphs';
839
+ textLength?: string | number;
840
+ }
812
841
 
813
- // Global JSX namespace for TypeScript
814
- declare global {
815
842
  namespace JSX {
816
843
  type Element = TSRXElement;
817
844
  type ElementType = keyof IntrinsicElements | ComponentType<any>;
818
845
 
819
846
  interface IntrinsicElements {
820
847
  // Document metadata
821
- head: HTMLAttributes<HTMLHeadElement>;
822
- title: HTMLAttributes<HTMLTitleElement>;
823
- base: BaseHTMLAttributes<HTMLBaseElement>;
824
- link: LinkHTMLAttributes<HTMLLinkElement>;
825
- meta: MetaHTMLAttributes<HTMLMetaElement>;
826
- style: StyleHTMLAttributes<HTMLStyleElement>;
848
+ head: Ripple.DetailedHTMLProps<Ripple.HTMLAttributes<HTMLHeadElement>, HTMLHeadElement>;
849
+ title: Ripple.DetailedHTMLProps<Ripple.HTMLAttributes<HTMLTitleElement>, HTMLTitleElement>;
850
+ base: Ripple.DetailedHTMLProps<Ripple.BaseHTMLAttributes<HTMLBaseElement>, HTMLBaseElement>;
851
+ link: Ripple.DetailedHTMLProps<Ripple.LinkHTMLAttributes<HTMLLinkElement>, HTMLLinkElement>;
852
+ meta: Ripple.DetailedHTMLProps<Ripple.MetaHTMLAttributes<HTMLMetaElement>, HTMLMetaElement>;
853
+ style: Ripple.DetailedHTMLProps<
854
+ Ripple.StyleHTMLAttributes<HTMLStyleElement>,
855
+ HTMLStyleElement
856
+ >;
827
857
 
828
858
  // Sectioning root
829
- body: HTMLAttributes<HTMLBodyElement>;
859
+ body: Ripple.DetailedHTMLProps<Ripple.HTMLAttributes<HTMLBodyElement>, HTMLBodyElement>;
830
860
 
831
861
  // Content sectioning
832
- address: HTMLAttributes<HTMLElement>;
833
- article: HTMLAttributes<HTMLElement>;
834
- aside: HTMLAttributes<HTMLElement>;
835
- footer: HTMLAttributes<HTMLElement>;
836
- header: HTMLAttributes<HTMLElement>;
837
- h1: HTMLAttributes<HTMLHeadingElement>;
838
- h2: HTMLAttributes<HTMLHeadingElement>;
839
- h3: HTMLAttributes<HTMLHeadingElement>;
840
- h4: HTMLAttributes<HTMLHeadingElement>;
841
- h5: HTMLAttributes<HTMLHeadingElement>;
842
- h6: HTMLAttributes<HTMLHeadingElement>;
843
- hgroup: HTMLAttributes<HTMLElement>;
844
- main: HTMLAttributes<HTMLElement>;
845
- nav: HTMLAttributes<HTMLElement>;
846
- section: HTMLAttributes<HTMLElement>;
847
- search: HTMLAttributes<HTMLElement>;
862
+ address: Ripple.DetailedHTMLProps<Ripple.HTMLAttributes<HTMLElement>, HTMLElement>;
863
+ article: Ripple.DetailedHTMLProps<Ripple.HTMLAttributes<HTMLElement>, HTMLElement>;
864
+ aside: Ripple.DetailedHTMLProps<Ripple.HTMLAttributes<HTMLElement>, HTMLElement>;
865
+ footer: Ripple.DetailedHTMLProps<Ripple.HTMLAttributes<HTMLElement>, HTMLElement>;
866
+ header: Ripple.DetailedHTMLProps<Ripple.HTMLAttributes<HTMLElement>, HTMLElement>;
867
+ h1: Ripple.DetailedHTMLProps<Ripple.HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement>;
868
+ h2: Ripple.DetailedHTMLProps<Ripple.HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement>;
869
+ h3: Ripple.DetailedHTMLProps<Ripple.HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement>;
870
+ h4: Ripple.DetailedHTMLProps<Ripple.HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement>;
871
+ h5: Ripple.DetailedHTMLProps<Ripple.HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement>;
872
+ h6: Ripple.DetailedHTMLProps<Ripple.HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement>;
873
+ hgroup: Ripple.DetailedHTMLProps<Ripple.HTMLAttributes<HTMLElement>, HTMLElement>;
874
+ main: Ripple.DetailedHTMLProps<Ripple.HTMLAttributes<HTMLElement>, HTMLElement>;
875
+ nav: Ripple.DetailedHTMLProps<Ripple.HTMLAttributes<HTMLElement>, HTMLElement>;
876
+ section: Ripple.DetailedHTMLProps<Ripple.HTMLAttributes<HTMLElement>, HTMLElement>;
877
+ search: Ripple.DetailedHTMLProps<Ripple.HTMLAttributes<HTMLElement>, HTMLElement>;
848
878
 
849
879
  // Text content
850
- blockquote: BlockquoteHTMLAttributes<HTMLQuoteElement>;
851
- dd: HTMLAttributes<HTMLElement>;
852
- div: HTMLAttributes<HTMLDivElement>;
853
- dl: HTMLAttributes<HTMLDListElement>;
854
- dt: HTMLAttributes<HTMLElement>;
855
- figcaption: HTMLAttributes<HTMLElement>;
856
- figure: HTMLAttributes<HTMLElement>;
857
- hr: HTMLAttributes<HTMLHRElement>;
858
- li: LiHTMLAttributes<HTMLLIElement>;
859
- menu: HTMLAttributes<HTMLMenuElement>;
860
- ol: OlHTMLAttributes<HTMLOListElement>;
861
- p: HTMLAttributes<HTMLParagraphElement>;
862
- pre: HTMLAttributes<HTMLPreElement>;
863
- ul: HTMLAttributes<HTMLUListElement>;
880
+ blockquote: Ripple.DetailedHTMLProps<
881
+ Ripple.BlockquoteHTMLAttributes<HTMLQuoteElement>,
882
+ HTMLQuoteElement
883
+ >;
884
+ dd: Ripple.DetailedHTMLProps<Ripple.HTMLAttributes<HTMLElement>, HTMLElement>;
885
+ div: Ripple.DetailedHTMLProps<Ripple.HTMLAttributes<HTMLDivElement>, HTMLDivElement>;
886
+ dl: Ripple.DetailedHTMLProps<Ripple.HTMLAttributes<HTMLDListElement>, HTMLDListElement>;
887
+ dt: Ripple.DetailedHTMLProps<Ripple.HTMLAttributes<HTMLElement>, HTMLElement>;
888
+ figcaption: Ripple.DetailedHTMLProps<Ripple.HTMLAttributes<HTMLElement>, HTMLElement>;
889
+ figure: Ripple.DetailedHTMLProps<Ripple.HTMLAttributes<HTMLElement>, HTMLElement>;
890
+ hr: Ripple.DetailedHTMLProps<Ripple.HTMLAttributes<HTMLHRElement>, HTMLHRElement>;
891
+ li: Ripple.DetailedHTMLProps<Ripple.LiHTMLAttributes<HTMLLIElement>, HTMLLIElement>;
892
+ menu: Ripple.DetailedHTMLProps<Ripple.HTMLAttributes<HTMLMenuElement>, HTMLMenuElement>;
893
+ ol: Ripple.DetailedHTMLProps<Ripple.OlHTMLAttributes<HTMLOListElement>, HTMLOListElement>;
894
+ p: Ripple.DetailedHTMLProps<
895
+ Ripple.HTMLAttributes<HTMLParagraphElement>,
896
+ HTMLParagraphElement
897
+ >;
898
+ pre: Ripple.DetailedHTMLProps<Ripple.HTMLAttributes<HTMLPreElement>, HTMLPreElement>;
899
+ ul: Ripple.DetailedHTMLProps<Ripple.HTMLAttributes<HTMLUListElement>, HTMLUListElement>;
864
900
 
865
901
  // Inline text semantics
866
- a: AnchorHTMLAttributes<HTMLAnchorElement>;
867
- abbr: HTMLAttributes<HTMLElement>;
868
- b: HTMLAttributes<HTMLElement>;
869
- bdi: HTMLAttributes<HTMLElement>;
870
- bdo: HTMLAttributes<HTMLElement>;
871
- br: HTMLAttributes<HTMLBRElement>;
872
- cite: HTMLAttributes<HTMLElement>;
873
- code: HTMLAttributes<HTMLElement>;
874
- data: DataHTMLAttributes<HTMLDataElement>;
875
- dfn: HTMLAttributes<HTMLElement>;
876
- em: HTMLAttributes<HTMLElement>;
877
- i: HTMLAttributes<HTMLElement>;
878
- kbd: HTMLAttributes<HTMLElement>;
879
- mark: HTMLAttributes<HTMLElement>;
880
- q: QuoteHTMLAttributes<HTMLQuoteElement>;
881
- rp: HTMLAttributes<HTMLElement>;
882
- rt: HTMLAttributes<HTMLElement>;
883
- ruby: HTMLAttributes<HTMLElement>;
884
- s: HTMLAttributes<HTMLElement>;
885
- samp: HTMLAttributes<HTMLElement>;
886
- small: HTMLAttributes<HTMLElement>;
887
- span: HTMLAttributes<HTMLSpanElement>;
888
- strong: HTMLAttributes<HTMLElement>;
889
- sub: HTMLAttributes<HTMLElement>;
890
- sup: HTMLAttributes<HTMLElement>;
891
- time: TimeHTMLAttributes<HTMLTimeElement>;
892
- u: HTMLAttributes<HTMLElement>;
893
- var: HTMLAttributes<HTMLElement>;
894
- wbr: HTMLAttributes<HTMLElement>;
902
+ a: Ripple.DetailedHTMLProps<
903
+ Ripple.AnchorHTMLAttributes<HTMLAnchorElement>,
904
+ HTMLAnchorElement
905
+ >;
906
+ abbr: Ripple.DetailedHTMLProps<Ripple.HTMLAttributes<HTMLElement>, HTMLElement>;
907
+ b: Ripple.DetailedHTMLProps<Ripple.HTMLAttributes<HTMLElement>, HTMLElement>;
908
+ bdi: Ripple.DetailedHTMLProps<Ripple.HTMLAttributes<HTMLElement>, HTMLElement>;
909
+ bdo: Ripple.DetailedHTMLProps<Ripple.HTMLAttributes<HTMLElement>, HTMLElement>;
910
+ br: Ripple.DetailedHTMLProps<Ripple.HTMLAttributes<HTMLBRElement>, HTMLBRElement>;
911
+ cite: Ripple.DetailedHTMLProps<Ripple.HTMLAttributes<HTMLElement>, HTMLElement>;
912
+ code: Ripple.DetailedHTMLProps<Ripple.HTMLAttributes<HTMLElement>, HTMLElement>;
913
+ data: Ripple.DetailedHTMLProps<Ripple.DataHTMLAttributes<HTMLDataElement>, HTMLDataElement>;
914
+ dfn: Ripple.DetailedHTMLProps<Ripple.HTMLAttributes<HTMLElement>, HTMLElement>;
915
+ em: Ripple.DetailedHTMLProps<Ripple.HTMLAttributes<HTMLElement>, HTMLElement>;
916
+ i: Ripple.DetailedHTMLProps<Ripple.HTMLAttributes<HTMLElement>, HTMLElement>;
917
+ kbd: Ripple.DetailedHTMLProps<Ripple.HTMLAttributes<HTMLElement>, HTMLElement>;
918
+ mark: Ripple.DetailedHTMLProps<Ripple.HTMLAttributes<HTMLElement>, HTMLElement>;
919
+ q: Ripple.DetailedHTMLProps<Ripple.QuoteHTMLAttributes<HTMLQuoteElement>, HTMLQuoteElement>;
920
+ rp: Ripple.DetailedHTMLProps<Ripple.HTMLAttributes<HTMLElement>, HTMLElement>;
921
+ rt: Ripple.DetailedHTMLProps<Ripple.HTMLAttributes<HTMLElement>, HTMLElement>;
922
+ ruby: Ripple.DetailedHTMLProps<Ripple.HTMLAttributes<HTMLElement>, HTMLElement>;
923
+ s: Ripple.DetailedHTMLProps<Ripple.HTMLAttributes<HTMLElement>, HTMLElement>;
924
+ samp: Ripple.DetailedHTMLProps<Ripple.HTMLAttributes<HTMLElement>, HTMLElement>;
925
+ small: Ripple.DetailedHTMLProps<Ripple.HTMLAttributes<HTMLElement>, HTMLElement>;
926
+ span: Ripple.DetailedHTMLProps<Ripple.HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>;
927
+ strong: Ripple.DetailedHTMLProps<Ripple.HTMLAttributes<HTMLElement>, HTMLElement>;
928
+ sub: Ripple.DetailedHTMLProps<Ripple.HTMLAttributes<HTMLElement>, HTMLElement>;
929
+ sup: Ripple.DetailedHTMLProps<Ripple.HTMLAttributes<HTMLElement>, HTMLElement>;
930
+ time: Ripple.DetailedHTMLProps<Ripple.TimeHTMLAttributes<HTMLTimeElement>, HTMLTimeElement>;
931
+ u: Ripple.DetailedHTMLProps<Ripple.HTMLAttributes<HTMLElement>, HTMLElement>;
932
+ var: Ripple.DetailedHTMLProps<Ripple.HTMLAttributes<HTMLElement>, HTMLElement>;
933
+ wbr: Ripple.DetailedHTMLProps<Ripple.HTMLAttributes<HTMLElement>, HTMLElement>;
895
934
 
896
935
  // Image and multimedia
897
- area: AreaHTMLAttributes<HTMLAreaElement>;
898
- audio: AudioHTMLAttributes<HTMLAudioElement>;
899
- img: ImgHTMLAttributes<HTMLImageElement>;
900
- map: MapHTMLAttributes<HTMLMapElement>;
901
- track: TrackHTMLAttributes<HTMLTrackElement>;
902
- video: VideoHTMLAttributes<HTMLVideoElement>;
936
+ area: Ripple.DetailedHTMLProps<Ripple.AreaHTMLAttributes<HTMLAreaElement>, HTMLAreaElement>;
937
+ audio: Ripple.DetailedHTMLProps<
938
+ Ripple.AudioHTMLAttributes<HTMLAudioElement>,
939
+ HTMLAudioElement
940
+ >;
941
+ img: Ripple.DetailedHTMLProps<Ripple.ImgHTMLAttributes<HTMLImageElement>, HTMLImageElement>;
942
+ map: Ripple.DetailedHTMLProps<Ripple.MapHTMLAttributes<HTMLMapElement>, HTMLMapElement>;
943
+ track: Ripple.DetailedHTMLProps<
944
+ Ripple.TrackHTMLAttributes<HTMLTrackElement>,
945
+ HTMLTrackElement
946
+ >;
947
+ video: Ripple.DetailedHTMLProps<
948
+ Ripple.VideoHTMLAttributes<HTMLVideoElement>,
949
+ HTMLVideoElement
950
+ >;
903
951
 
904
952
  // Embedded content
905
- embed: EmbedHTMLAttributes<HTMLEmbedElement>;
906
- iframe: IframeHTMLAttributes<HTMLIFrameElement>;
907
- object: ObjectHTMLAttributes<HTMLObjectElement>;
908
- picture: HTMLAttributes<HTMLPictureElement>;
909
- portal: PortalHTMLAttributes<HTMLElement>;
910
- source: SourceHTMLAttributes<HTMLSourceElement>;
953
+ embed: Ripple.DetailedHTMLProps<
954
+ Ripple.EmbedHTMLAttributes<HTMLEmbedElement>,
955
+ HTMLEmbedElement
956
+ >;
957
+ iframe: Ripple.DetailedHTMLProps<
958
+ Ripple.IframeHTMLAttributes<HTMLIFrameElement>,
959
+ HTMLIFrameElement
960
+ >;
961
+ object: Ripple.DetailedHTMLProps<
962
+ Ripple.ObjectHTMLAttributes<HTMLObjectElement>,
963
+ HTMLObjectElement
964
+ >;
965
+ picture: Ripple.DetailedHTMLProps<
966
+ Ripple.HTMLAttributes<HTMLPictureElement>,
967
+ HTMLPictureElement
968
+ >;
969
+ portal: Ripple.DetailedHTMLProps<Ripple.PortalHTMLAttributes<HTMLElement>, HTMLElement>;
970
+ source: Ripple.DetailedHTMLProps<
971
+ Ripple.SourceHTMLAttributes<HTMLSourceElement>,
972
+ HTMLSourceElement
973
+ >;
911
974
 
912
975
  // SVG and MathML
913
- svg: HTMLAttributes<SVGElementTagNameMap['svg']> & SVGAttributes<SVGElementTagNameMap['svg']>;
914
- math: HTMLAttributes<MathMLElementTagNameMap['math']>;
976
+ svg: Ripple.HTMLAttributes<SVGElementTagNameMap['svg']> &
977
+ Ripple.SVGAttributes<SVGElementTagNameMap['svg']>;
978
+ math: Ripple.HTMLAttributes<MathMLElementTagNameMap['math']>;
915
979
 
916
980
  // SVG elements
917
- animate: HTMLAttributes<SVGElementTagNameMap['animate']> & SVGAnimationAttributes;
918
- animateMotion: HTMLAttributes<SVGElementTagNameMap['animateMotion']> & SVGAnimationAttributes;
919
- animateTransform: HTMLAttributes<SVGElementTagNameMap['animateTransform']> &
920
- SVGAnimationAttributes & {
981
+ animate: Ripple.HTMLAttributes<SVGElementTagNameMap['animate']> &
982
+ Ripple.SVGAnimationAttributes;
983
+ animateMotion: Ripple.HTMLAttributes<SVGElementTagNameMap['animateMotion']> &
984
+ Ripple.SVGAnimationAttributes;
985
+ animateTransform: Ripple.HTMLAttributes<SVGElementTagNameMap['animateTransform']> &
986
+ Ripple.SVGAnimationAttributes & {
921
987
  type?: 'translate' | 'scale' | 'rotate' | 'skewX' | 'skewY';
922
988
  };
923
- circle: HTMLAttributes<SVGElementTagNameMap['circle']> &
924
- SVGAttributes<SVGElementTagNameMap['circle']> & {
989
+ circle: Ripple.HTMLAttributes<SVGElementTagNameMap['circle']> &
990
+ Ripple.SVGAttributes<SVGElementTagNameMap['circle']> & {
925
991
  cx?: string | number;
926
992
  cy?: string | number;
927
993
  r?: string | number;
928
994
  };
929
- clipPath: HTMLAttributes<SVGElementTagNameMap['clipPath']> &
930
- SVGAttributes<SVGElementTagNameMap['clipPath']> & {
995
+ clipPath: Ripple.HTMLAttributes<SVGElementTagNameMap['clipPath']> &
996
+ Ripple.SVGAttributes<SVGElementTagNameMap['clipPath']> & {
931
997
  clipPathUnits?: 'userSpaceOnUse' | 'objectBoundingBox';
932
998
  };
933
- defs: HTMLAttributes<SVGElementTagNameMap['defs']> &
934
- SVGAttributes<SVGElementTagNameMap['defs']>;
935
- desc: HTMLAttributes<SVGElementTagNameMap['desc']> &
936
- SVGAttributes<SVGElementTagNameMap['desc']>;
937
- ellipse: HTMLAttributes<SVGElementTagNameMap['ellipse']> &
938
- SVGAttributes<SVGElementTagNameMap['ellipse']> & {
999
+ defs: Ripple.HTMLAttributes<SVGElementTagNameMap['defs']> &
1000
+ Ripple.SVGAttributes<SVGElementTagNameMap['defs']>;
1001
+ desc: Ripple.HTMLAttributes<SVGElementTagNameMap['desc']> &
1002
+ Ripple.SVGAttributes<SVGElementTagNameMap['desc']>;
1003
+ ellipse: Ripple.HTMLAttributes<SVGElementTagNameMap['ellipse']> &
1004
+ Ripple.SVGAttributes<SVGElementTagNameMap['ellipse']> & {
939
1005
  cx?: string | number;
940
1006
  cy?: string | number;
941
1007
  rx?: string | number;
942
1008
  ry?: string | number;
943
1009
  };
944
- feBlend: HTMLAttributes<SVGElementTagNameMap['feBlend']> &
945
- SVGFilterAttributes & {
1010
+ feBlend: Ripple.HTMLAttributes<SVGElementTagNameMap['feBlend']> &
1011
+ Ripple.SVGFilterAttributes & {
946
1012
  mode?:
947
1013
  | 'normal'
948
1014
  | 'multiply'
@@ -962,15 +1028,15 @@ declare global {
962
1028
  | 'luminosity';
963
1029
  in2?: Nullable<string>;
964
1030
  };
965
- feColorMatrix: HTMLAttributes<SVGElementTagNameMap['feColorMatrix']> &
966
- SVGFilterAttributes & {
1031
+ feColorMatrix: Ripple.HTMLAttributes<SVGElementTagNameMap['feColorMatrix']> &
1032
+ Ripple.SVGFilterAttributes & {
967
1033
  type?: 'matrix' | 'saturate' | 'hueRotate' | 'luminanceToAlpha';
968
1034
  values?: Nullable<string>;
969
1035
  };
970
- feComponentTransfer: HTMLAttributes<SVGElementTagNameMap['feComponentTransfer']> &
971
- SVGFilterAttributes;
972
- feComposite: HTMLAttributes<SVGElementTagNameMap['feComposite']> &
973
- SVGFilterAttributes & {
1036
+ feComponentTransfer: Ripple.HTMLAttributes<SVGElementTagNameMap['feComponentTransfer']> &
1037
+ Ripple.SVGFilterAttributes;
1038
+ feComposite: Ripple.HTMLAttributes<SVGElementTagNameMap['feComposite']> &
1039
+ Ripple.SVGFilterAttributes & {
974
1040
  operator?: 'over' | 'in' | 'out' | 'atop' | 'xor' | 'lighter' | 'arithmetic';
975
1041
  in2?: Nullable<string>;
976
1042
  k1?: Nullable<number>;
@@ -978,59 +1044,64 @@ declare global {
978
1044
  k3?: Nullable<number>;
979
1045
  k4?: Nullable<number>;
980
1046
  };
981
- feConvolveMatrix: HTMLAttributes<SVGElementTagNameMap['feConvolveMatrix']> &
982
- SVGFilterAttributes;
983
- feDiffuseLighting: HTMLAttributes<SVGElementTagNameMap['feDiffuseLighting']> &
984
- SVGFilterAttributes;
985
- feDisplacementMap: HTMLAttributes<SVGElementTagNameMap['feDisplacementMap']> &
986
- SVGFilterAttributes;
987
- feDistantLight: HTMLAttributes<SVGElementTagNameMap['feDistantLight']> &
988
- SVGFilterAttributes & {
1047
+ feConvolveMatrix: Ripple.HTMLAttributes<SVGElementTagNameMap['feConvolveMatrix']> &
1048
+ Ripple.SVGFilterAttributes;
1049
+ feDiffuseLighting: Ripple.HTMLAttributes<SVGElementTagNameMap['feDiffuseLighting']> &
1050
+ Ripple.SVGFilterAttributes;
1051
+ feDisplacementMap: Ripple.HTMLAttributes<SVGElementTagNameMap['feDisplacementMap']> &
1052
+ Ripple.SVGFilterAttributes;
1053
+ feDistantLight: Ripple.HTMLAttributes<SVGElementTagNameMap['feDistantLight']> &
1054
+ Ripple.SVGFilterAttributes & {
989
1055
  azimuth?: Nullable<number>;
990
1056
  elevation?: Nullable<number>;
991
1057
  };
992
- feDropShadow: HTMLAttributes<SVGElementTagNameMap['feDropShadow']> &
993
- SVGFilterAttributes & {
1058
+ feDropShadow: Ripple.HTMLAttributes<SVGElementTagNameMap['feDropShadow']> &
1059
+ Ripple.SVGFilterAttributes & {
994
1060
  dx?: Nullable<number>;
995
1061
  dy?: Nullable<number>;
996
1062
  stdDeviation?: number | string;
997
1063
  };
998
- feFlood: HTMLAttributes<SVGElementTagNameMap['feFlood']> &
999
- SVGFilterAttributes & {
1064
+ feFlood: Ripple.HTMLAttributes<SVGElementTagNameMap['feFlood']> &
1065
+ Ripple.SVGFilterAttributes & {
1000
1066
  'flood-color'?: Nullable<string>;
1001
1067
  'flood-opacity'?: number | string;
1002
1068
  };
1003
- feFuncA: HTMLAttributes<SVGElementTagNameMap['feFuncA']> & SVGTransferFunctionAttributes;
1004
- feFuncB: HTMLAttributes<SVGElementTagNameMap['feFuncB']> & SVGTransferFunctionAttributes;
1005
- feFuncG: HTMLAttributes<SVGElementTagNameMap['feFuncG']> & SVGTransferFunctionAttributes;
1006
- feFuncR: HTMLAttributes<SVGElementTagNameMap['feFuncR']> & SVGTransferFunctionAttributes;
1007
- feGaussianBlur: HTMLAttributes<SVGElementTagNameMap['feGaussianBlur']> &
1008
- SVGFilterAttributes & {
1069
+ feFuncA: Ripple.HTMLAttributes<SVGElementTagNameMap['feFuncA']> &
1070
+ Ripple.SVGTransferFunctionAttributes;
1071
+ feFuncB: Ripple.HTMLAttributes<SVGElementTagNameMap['feFuncB']> &
1072
+ Ripple.SVGTransferFunctionAttributes;
1073
+ feFuncG: Ripple.HTMLAttributes<SVGElementTagNameMap['feFuncG']> &
1074
+ Ripple.SVGTransferFunctionAttributes;
1075
+ feFuncR: Ripple.HTMLAttributes<SVGElementTagNameMap['feFuncR']> &
1076
+ Ripple.SVGTransferFunctionAttributes;
1077
+ feGaussianBlur: Ripple.HTMLAttributes<SVGElementTagNameMap['feGaussianBlur']> &
1078
+ Ripple.SVGFilterAttributes & {
1009
1079
  stdDeviation?: number | string;
1010
1080
  };
1011
- feImage: HTMLAttributes<SVGElementTagNameMap['feImage']> & SVGFilterAttributes;
1012
- feMerge: HTMLAttributes<SVGElementTagNameMap['feMerge']> & SVGFilterAttributes;
1013
- feMergeNode: HTMLAttributes<SVGElementTagNameMap['feMergeNode']> & SVGFilterAttributes;
1014
- feMorphology: HTMLAttributes<SVGElementTagNameMap['feMorphology']> &
1015
- SVGFilterAttributes & {
1081
+ feImage: Ripple.HTMLAttributes<SVGElementTagNameMap['feImage']> & Ripple.SVGFilterAttributes;
1082
+ feMerge: Ripple.HTMLAttributes<SVGElementTagNameMap['feMerge']> & Ripple.SVGFilterAttributes;
1083
+ feMergeNode: Ripple.HTMLAttributes<SVGElementTagNameMap['feMergeNode']> &
1084
+ Ripple.SVGFilterAttributes;
1085
+ feMorphology: Ripple.HTMLAttributes<SVGElementTagNameMap['feMorphology']> &
1086
+ Ripple.SVGFilterAttributes & {
1016
1087
  operator?: 'erode' | 'dilate';
1017
1088
  radius?: number | string;
1018
1089
  };
1019
- feOffset: HTMLAttributes<SVGElementTagNameMap['feOffset']> &
1020
- SVGFilterAttributes & {
1090
+ feOffset: Ripple.HTMLAttributes<SVGElementTagNameMap['feOffset']> &
1091
+ Ripple.SVGFilterAttributes & {
1021
1092
  dx?: Nullable<number>;
1022
1093
  dy?: Nullable<number>;
1023
1094
  };
1024
- fePointLight: HTMLAttributes<SVGElementTagNameMap['fePointLight']> &
1025
- SVGFilterAttributes & {
1095
+ fePointLight: Ripple.HTMLAttributes<SVGElementTagNameMap['fePointLight']> &
1096
+ Ripple.SVGFilterAttributes & {
1026
1097
  x?: Nullable<number>;
1027
1098
  y?: Nullable<number>;
1028
1099
  z?: Nullable<number>;
1029
1100
  };
1030
- feSpecularLighting: HTMLAttributes<SVGElementTagNameMap['feSpecularLighting']> &
1031
- SVGFilterAttributes;
1032
- feSpotLight: HTMLAttributes<SVGElementTagNameMap['feSpotLight']> &
1033
- SVGFilterAttributes & {
1101
+ feSpecularLighting: Ripple.HTMLAttributes<SVGElementTagNameMap['feSpecularLighting']> &
1102
+ Ripple.SVGFilterAttributes;
1103
+ feSpotLight: Ripple.HTMLAttributes<SVGElementTagNameMap['feSpotLight']> &
1104
+ Ripple.SVGFilterAttributes & {
1034
1105
  x?: Nullable<number>;
1035
1106
  y?: Nullable<number>;
1036
1107
  z?: Nullable<number>;
@@ -1040,17 +1111,17 @@ declare global {
1040
1111
  specularExponent?: Nullable<number>;
1041
1112
  limitingConeAngle?: Nullable<number>;
1042
1113
  };
1043
- feTile: HTMLAttributes<SVGElementTagNameMap['feTile']> & SVGFilterAttributes;
1044
- feTurbulence: HTMLAttributes<SVGElementTagNameMap['feTurbulence']> &
1045
- SVGFilterAttributes & {
1114
+ feTile: Ripple.HTMLAttributes<SVGElementTagNameMap['feTile']> & Ripple.SVGFilterAttributes;
1115
+ feTurbulence: Ripple.HTMLAttributes<SVGElementTagNameMap['feTurbulence']> &
1116
+ Ripple.SVGFilterAttributes & {
1046
1117
  baseFrequency?: number | string;
1047
1118
  numOctaves?: Nullable<number>;
1048
1119
  seed?: Nullable<number>;
1049
1120
  stitchTiles?: 'stitch' | 'noStitch';
1050
1121
  type?: 'fractalNoise' | 'turbulence';
1051
1122
  };
1052
- filter: HTMLAttributes<SVGElementTagNameMap['filter']> &
1053
- SVGAttributes<SVGElementTagNameMap['filter']> & {
1123
+ filter: Ripple.HTMLAttributes<SVGElementTagNameMap['filter']> &
1124
+ Ripple.SVGAttributes<SVGElementTagNameMap['filter']> & {
1054
1125
  filterUnits?: 'userSpaceOnUse' | 'objectBoundingBox';
1055
1126
  primitiveUnits?: 'userSpaceOnUse' | 'objectBoundingBox';
1056
1127
  x?: string | number;
@@ -1058,16 +1129,17 @@ declare global {
1058
1129
  width?: string | number;
1059
1130
  height?: string | number;
1060
1131
  };
1061
- foreignObject: HTMLAttributes<SVGElementTagNameMap['foreignObject']> &
1062
- SVGAttributes<SVGElementTagNameMap['foreignObject']> & {
1132
+ foreignObject: Ripple.HTMLAttributes<SVGElementTagNameMap['foreignObject']> &
1133
+ Ripple.SVGAttributes<SVGElementTagNameMap['foreignObject']> & {
1063
1134
  x?: string | number;
1064
1135
  y?: string | number;
1065
1136
  width?: string | number;
1066
1137
  height?: string | number;
1067
1138
  };
1068
- g: HTMLAttributes<SVGElementTagNameMap['g']> & SVGAttributes<SVGElementTagNameMap['g']>;
1069
- image: HTMLAttributes<SVGElementTagNameMap['image']> &
1070
- SVGAttributes<SVGElementTagNameMap['image']> & {
1139
+ g: Ripple.HTMLAttributes<SVGElementTagNameMap['g']> &
1140
+ Ripple.SVGAttributes<SVGElementTagNameMap['g']>;
1141
+ image: Ripple.HTMLAttributes<SVGElementTagNameMap['image']> &
1142
+ Ripple.SVGAttributes<SVGElementTagNameMap['image']> & {
1071
1143
  href?: Nullable<string>;
1072
1144
  'xlink:href'?: Nullable<string>;
1073
1145
  x?: string | number;
@@ -1076,22 +1148,22 @@ declare global {
1076
1148
  height?: string | number;
1077
1149
  preserveAspectRatio?: Nullable<string>;
1078
1150
  };
1079
- line: HTMLAttributes<SVGElementTagNameMap['line']> &
1080
- SVGAttributes<SVGElementTagNameMap['line']> & {
1151
+ line: Ripple.HTMLAttributes<SVGElementTagNameMap['line']> &
1152
+ Ripple.SVGAttributes<SVGElementTagNameMap['line']> & {
1081
1153
  x1?: string | number;
1082
1154
  y1?: string | number;
1083
1155
  x2?: string | number;
1084
1156
  y2?: string | number;
1085
1157
  };
1086
- linearGradient: HTMLAttributes<SVGElementTagNameMap['linearGradient']> &
1087
- SVGGradientAttributes<SVGElementTagNameMap['linearGradient']> & {
1158
+ linearGradient: Ripple.HTMLAttributes<SVGElementTagNameMap['linearGradient']> &
1159
+ Ripple.SVGGradientAttributes<SVGElementTagNameMap['linearGradient']> & {
1088
1160
  x1?: string | number;
1089
1161
  y1?: string | number;
1090
1162
  x2?: string | number;
1091
1163
  y2?: string | number;
1092
1164
  };
1093
- marker: HTMLAttributes<SVGElementTagNameMap['marker']> &
1094
- SVGAttributes<SVGElementTagNameMap['marker']> & {
1165
+ marker: Ripple.HTMLAttributes<SVGElementTagNameMap['marker']> &
1166
+ Ripple.SVGAttributes<SVGElementTagNameMap['marker']> & {
1095
1167
  markerHeight?: string | number;
1096
1168
  markerUnits?: 'strokeWidth' | 'userSpaceOnUse';
1097
1169
  markerWidth?: string | number;
@@ -1099,8 +1171,8 @@ declare global {
1099
1171
  refX?: string | number;
1100
1172
  refY?: string | number;
1101
1173
  };
1102
- mask: HTMLAttributes<SVGElementTagNameMap['mask']> &
1103
- SVGAttributes<SVGElementTagNameMap['mask']> & {
1174
+ mask: Ripple.HTMLAttributes<SVGElementTagNameMap['mask']> &
1175
+ Ripple.SVGAttributes<SVGElementTagNameMap['mask']> & {
1104
1176
  maskContentUnits?: 'userSpaceOnUse' | 'objectBoundingBox';
1105
1177
  maskUnits?: 'userSpaceOnUse' | 'objectBoundingBox';
1106
1178
  x?: string | number;
@@ -1108,19 +1180,19 @@ declare global {
1108
1180
  width?: string | number;
1109
1181
  height?: string | number;
1110
1182
  };
1111
- metadata: HTMLAttributes<SVGElementTagNameMap['metadata']> &
1112
- SVGAttributes<SVGElementTagNameMap['metadata']>;
1113
- mpath: HTMLAttributes<SVGElementTagNameMap['mpath']> &
1114
- SVGAttributes<SVGElementTagNameMap['mpath']> & {
1183
+ metadata: Ripple.HTMLAttributes<SVGElementTagNameMap['metadata']> &
1184
+ Ripple.SVGAttributes<SVGElementTagNameMap['metadata']>;
1185
+ mpath: Ripple.HTMLAttributes<SVGElementTagNameMap['mpath']> &
1186
+ Ripple.SVGAttributes<SVGElementTagNameMap['mpath']> & {
1115
1187
  'xlink:href'?: Nullable<string>;
1116
1188
  };
1117
- path: HTMLAttributes<SVGElementTagNameMap['path']> &
1118
- SVGAttributes<SVGElementTagNameMap['path']> & {
1189
+ path: Ripple.HTMLAttributes<SVGElementTagNameMap['path']> &
1190
+ Ripple.SVGAttributes<SVGElementTagNameMap['path']> & {
1119
1191
  d?: Nullable<string>;
1120
1192
  pathLength?: Nullable<number>;
1121
1193
  };
1122
- pattern: HTMLAttributes<SVGElementTagNameMap['pattern']> &
1123
- SVGAttributes<SVGElementTagNameMap['pattern']> & {
1194
+ pattern: Ripple.HTMLAttributes<SVGElementTagNameMap['pattern']> &
1195
+ Ripple.SVGAttributes<SVGElementTagNameMap['pattern']> & {
1124
1196
  patternContentUnits?: 'userSpaceOnUse' | 'objectBoundingBox';
1125
1197
  patternTransform?: Nullable<string>;
1126
1198
  patternUnits?: 'userSpaceOnUse' | 'objectBoundingBox';
@@ -1129,16 +1201,16 @@ declare global {
1129
1201
  width?: string | number;
1130
1202
  height?: string | number;
1131
1203
  };
1132
- polygon: HTMLAttributes<SVGElementTagNameMap['polygon']> &
1133
- SVGAttributes<SVGElementTagNameMap['polygon']> & {
1204
+ polygon: Ripple.HTMLAttributes<SVGElementTagNameMap['polygon']> &
1205
+ Ripple.SVGAttributes<SVGElementTagNameMap['polygon']> & {
1134
1206
  points?: Nullable<string>;
1135
1207
  };
1136
- polyline: HTMLAttributes<SVGElementTagNameMap['polyline']> &
1137
- SVGAttributes<SVGElementTagNameMap['polyline']> & {
1208
+ polyline: Ripple.HTMLAttributes<SVGElementTagNameMap['polyline']> &
1209
+ Ripple.SVGAttributes<SVGElementTagNameMap['polyline']> & {
1138
1210
  points?: Nullable<string>;
1139
1211
  };
1140
- radialGradient: HTMLAttributes<SVGElementTagNameMap['radialGradient']> &
1141
- SVGGradientAttributes<SVGElementTagNameMap['radialGradient']> & {
1212
+ radialGradient: Ripple.HTMLAttributes<SVGElementTagNameMap['radialGradient']> &
1213
+ Ripple.SVGGradientAttributes<SVGElementTagNameMap['radialGradient']> & {
1142
1214
  cx?: string | number;
1143
1215
  cy?: string | number;
1144
1216
  r?: string | number;
@@ -1146,8 +1218,8 @@ declare global {
1146
1218
  fy?: string | number;
1147
1219
  fr?: string | number;
1148
1220
  };
1149
- rect: HTMLAttributes<SVGElementTagNameMap['rect']> &
1150
- SVGAttributes<SVGElementTagNameMap['rect']> & {
1221
+ rect: Ripple.HTMLAttributes<SVGElementTagNameMap['rect']> &
1222
+ Ripple.SVGAttributes<SVGElementTagNameMap['rect']> & {
1151
1223
  x?: string | number;
1152
1224
  y?: string | number;
1153
1225
  width?: string | number;
@@ -1155,39 +1227,39 @@ declare global {
1155
1227
  rx?: string | number;
1156
1228
  ry?: string | number;
1157
1229
  };
1158
- set: HTMLAttributes<SVGElementTagNameMap['set']> & SVGAnimationAttributes;
1159
- stop: HTMLAttributes<SVGElementTagNameMap['stop']> &
1160
- SVGAttributes<SVGElementTagNameMap['stop']> & {
1230
+ set: Ripple.HTMLAttributes<SVGElementTagNameMap['set']> & Ripple.SVGAnimationAttributes;
1231
+ stop: Ripple.HTMLAttributes<SVGElementTagNameMap['stop']> &
1232
+ Ripple.SVGAttributes<SVGElementTagNameMap['stop']> & {
1161
1233
  offset?: string | number;
1162
1234
  'stop-color'?: Nullable<string>;
1163
1235
  'stop-opacity'?: number | string;
1164
1236
  };
1165
- switch: HTMLAttributes<SVGElementTagNameMap['switch']> &
1166
- SVGAttributes<SVGElementTagNameMap['switch']>;
1167
- symbol: HTMLAttributes<SVGElementTagNameMap['symbol']> &
1168
- SVGAttributes<SVGElementTagNameMap['symbol']> & {
1237
+ switch: Ripple.HTMLAttributes<SVGElementTagNameMap['switch']> &
1238
+ Ripple.SVGAttributes<SVGElementTagNameMap['switch']>;
1239
+ symbol: Ripple.HTMLAttributes<SVGElementTagNameMap['symbol']> &
1240
+ Ripple.SVGAttributes<SVGElementTagNameMap['symbol']> & {
1169
1241
  viewBox?: Nullable<string>;
1170
1242
  preserveAspectRatio?: Nullable<string>;
1171
1243
  refX?: string | number;
1172
1244
  refY?: string | number;
1173
1245
  };
1174
- text: HTMLAttributes<SVGElementTagNameMap['text']> &
1175
- SVGAttributes<SVGElementTagNameMap['text']> &
1176
- SVGTextAttributes;
1177
- textPath: HTMLAttributes<SVGElementTagNameMap['textPath']> &
1178
- SVGAttributes<SVGElementTagNameMap['textPath']> &
1179
- SVGTextAttributes & {
1246
+ text: Ripple.HTMLAttributes<SVGElementTagNameMap['text']> &
1247
+ Ripple.SVGAttributes<SVGElementTagNameMap['text']> &
1248
+ Ripple.SVGTextAttributes;
1249
+ textPath: Ripple.HTMLAttributes<SVGElementTagNameMap['textPath']> &
1250
+ Ripple.SVGAttributes<SVGElementTagNameMap['textPath']> &
1251
+ Ripple.SVGTextAttributes & {
1180
1252
  href?: Nullable<string>;
1181
1253
  'xlink:href'?: Nullable<string>;
1182
1254
  startOffset?: string | number;
1183
1255
  method?: 'align' | 'stretch';
1184
1256
  spacing?: 'auto' | 'exact';
1185
1257
  };
1186
- tspan: HTMLAttributes<SVGElementTagNameMap['tspan']> &
1187
- SVGAttributes<SVGElementTagNameMap['tspan']> &
1188
- SVGTextAttributes;
1189
- use: HTMLAttributes<SVGElementTagNameMap['use']> &
1190
- SVGAttributes<SVGElementTagNameMap['use']> & {
1258
+ tspan: Ripple.HTMLAttributes<SVGElementTagNameMap['tspan']> &
1259
+ Ripple.SVGAttributes<SVGElementTagNameMap['tspan']> &
1260
+ Ripple.SVGTextAttributes;
1261
+ use: Ripple.HTMLAttributes<SVGElementTagNameMap['use']> &
1262
+ Ripple.SVGAttributes<SVGElementTagNameMap['use']> & {
1191
1263
  href?: Nullable<string>;
1192
1264
  'xlink:href'?: Nullable<string>;
1193
1265
  x?: string | number;
@@ -1195,60 +1267,135 @@ declare global {
1195
1267
  width?: string | number;
1196
1268
  height?: string | number;
1197
1269
  };
1198
- view: HTMLAttributes<SVGElementTagNameMap['view']> &
1199
- SVGAttributes<SVGElementTagNameMap['view']> & {
1270
+ view: Ripple.HTMLAttributes<SVGElementTagNameMap['view']> &
1271
+ Ripple.SVGAttributes<SVGElementTagNameMap['view']> & {
1200
1272
  viewBox?: Nullable<string>;
1201
1273
  preserveAspectRatio?: Nullable<string>;
1202
1274
  };
1203
1275
 
1204
1276
  // Scripting
1205
- canvas: CanvasHTMLAttributes<HTMLCanvasElement>;
1206
- noscript: HTMLAttributes<HTMLElement>;
1207
- script: ScriptHTMLAttributes<HTMLScriptElement>;
1277
+ canvas: Ripple.DetailedHTMLProps<
1278
+ Ripple.CanvasHTMLAttributes<HTMLCanvasElement>,
1279
+ HTMLCanvasElement
1280
+ >;
1281
+ noscript: Ripple.DetailedHTMLProps<Ripple.HTMLAttributes<HTMLElement>, HTMLElement>;
1282
+ script: Ripple.DetailedHTMLProps<
1283
+ Ripple.ScriptHTMLAttributes<HTMLScriptElement>,
1284
+ HTMLScriptElement
1285
+ >;
1208
1286
 
1209
1287
  // Demarcating edits
1210
- del: ModHTMLAttributes<HTMLModElement>;
1211
- ins: ModHTMLAttributes<HTMLModElement>;
1288
+ del: Ripple.DetailedHTMLProps<Ripple.ModHTMLAttributes<HTMLModElement>, HTMLModElement>;
1289
+ ins: Ripple.DetailedHTMLProps<Ripple.ModHTMLAttributes<HTMLModElement>, HTMLModElement>;
1212
1290
 
1213
1291
  // Table content
1214
- caption: HTMLAttributes<HTMLTableCaptionElement>;
1215
- col: ColHTMLAttributes<HTMLTableColElement>;
1216
- colgroup: ColHTMLAttributes<HTMLTableColElement>;
1217
- table: HTMLAttributes<HTMLTableElement>;
1218
- tbody: HTMLAttributes<HTMLTableSectionElement>;
1219
- td: TableCellHTMLAttributes<HTMLTableCellElement>;
1220
- tfoot: HTMLAttributes<HTMLTableSectionElement>;
1221
- th: ThHTMLAttributes<HTMLTableCellElement>;
1222
- thead: HTMLAttributes<HTMLTableSectionElement>;
1223
- tr: HTMLAttributes<HTMLTableRowElement>;
1292
+ caption: Ripple.DetailedHTMLProps<
1293
+ Ripple.HTMLAttributes<HTMLTableCaptionElement>,
1294
+ HTMLTableCaptionElement
1295
+ >;
1296
+ col: Ripple.DetailedHTMLProps<
1297
+ Ripple.ColHTMLAttributes<HTMLTableColElement>,
1298
+ HTMLTableColElement
1299
+ >;
1300
+ colgroup: Ripple.DetailedHTMLProps<
1301
+ Ripple.ColHTMLAttributes<HTMLTableColElement>,
1302
+ HTMLTableColElement
1303
+ >;
1304
+ table: Ripple.DetailedHTMLProps<Ripple.HTMLAttributes<HTMLTableElement>, HTMLTableElement>;
1305
+ tbody: Ripple.DetailedHTMLProps<
1306
+ Ripple.HTMLAttributes<HTMLTableSectionElement>,
1307
+ HTMLTableSectionElement
1308
+ >;
1309
+ td: Ripple.DetailedHTMLProps<
1310
+ Ripple.TableCellHTMLAttributes<HTMLTableCellElement>,
1311
+ HTMLTableCellElement
1312
+ >;
1313
+ tfoot: Ripple.DetailedHTMLProps<
1314
+ Ripple.HTMLAttributes<HTMLTableSectionElement>,
1315
+ HTMLTableSectionElement
1316
+ >;
1317
+ th: Ripple.DetailedHTMLProps<
1318
+ Ripple.ThHTMLAttributes<HTMLTableCellElement>,
1319
+ HTMLTableCellElement
1320
+ >;
1321
+ thead: Ripple.DetailedHTMLProps<
1322
+ Ripple.HTMLAttributes<HTMLTableSectionElement>,
1323
+ HTMLTableSectionElement
1324
+ >;
1325
+ tr: Ripple.DetailedHTMLProps<Ripple.HTMLAttributes<HTMLTableRowElement>, HTMLTableRowElement>;
1224
1326
 
1225
1327
  // Forms
1226
- button: ButtonHTMLAttributes<HTMLButtonElement>;
1227
- datalist: HTMLAttributes<HTMLDataListElement>;
1228
- fieldset: FieldsetHTMLAttributes<HTMLFieldSetElement>;
1229
- form: FormHTMLAttributes<HTMLFormElement>;
1230
- input: InputHTMLAttributes<HTMLInputElement>;
1231
- label: LabelHTMLAttributes<HTMLLabelElement>;
1232
- legend: HTMLAttributes<HTMLLegendElement>;
1233
- meter: MeterHTMLAttributes<HTMLMeterElement>;
1234
- optgroup: OptgroupHTMLAttributes<HTMLOptGroupElement>;
1235
- option: OptionHTMLAttributes<HTMLOptionElement>;
1236
- output: OutputHTMLAttributes<HTMLOutputElement>;
1237
- progress: ProgressHTMLAttributes<HTMLProgressElement>;
1238
- select: SelectHTMLAttributes<HTMLSelectElement>;
1239
- textarea: TextareaHTMLAttributes<HTMLTextAreaElement>;
1328
+ button: Ripple.DetailedHTMLProps<
1329
+ Ripple.ButtonHTMLAttributes<HTMLButtonElement>,
1330
+ HTMLButtonElement
1331
+ >;
1332
+ datalist: Ripple.DetailedHTMLProps<
1333
+ Ripple.HTMLAttributes<HTMLDataListElement>,
1334
+ HTMLDataListElement
1335
+ >;
1336
+ fieldset: Ripple.DetailedHTMLProps<
1337
+ Ripple.FieldsetHTMLAttributes<HTMLFieldSetElement>,
1338
+ HTMLFieldSetElement
1339
+ >;
1340
+ form: Ripple.DetailedHTMLProps<Ripple.FormHTMLAttributes<HTMLFormElement>, HTMLFormElement>;
1341
+ input: Ripple.DetailedHTMLProps<
1342
+ Ripple.InputHTMLAttributes<HTMLInputElement>,
1343
+ HTMLInputElement
1344
+ >;
1345
+ label: Ripple.DetailedHTMLProps<
1346
+ Ripple.LabelHTMLAttributes<HTMLLabelElement>,
1347
+ HTMLLabelElement
1348
+ >;
1349
+ legend: Ripple.DetailedHTMLProps<Ripple.HTMLAttributes<HTMLLegendElement>, HTMLLegendElement>;
1350
+ meter: Ripple.DetailedHTMLProps<
1351
+ Ripple.MeterHTMLAttributes<HTMLMeterElement>,
1352
+ HTMLMeterElement
1353
+ >;
1354
+ optgroup: Ripple.DetailedHTMLProps<
1355
+ Ripple.OptgroupHTMLAttributes<HTMLOptGroupElement>,
1356
+ HTMLOptGroupElement
1357
+ >;
1358
+ option: Ripple.DetailedHTMLProps<
1359
+ Ripple.OptionHTMLAttributes<HTMLOptionElement>,
1360
+ HTMLOptionElement
1361
+ >;
1362
+ output: Ripple.DetailedHTMLProps<
1363
+ Ripple.OutputHTMLAttributes<HTMLOutputElement>,
1364
+ HTMLOutputElement
1365
+ >;
1366
+ progress: Ripple.DetailedHTMLProps<
1367
+ Ripple.ProgressHTMLAttributes<HTMLProgressElement>,
1368
+ HTMLProgressElement
1369
+ >;
1370
+ select: Ripple.DetailedHTMLProps<
1371
+ Ripple.SelectHTMLAttributes<HTMLSelectElement>,
1372
+ HTMLSelectElement
1373
+ >;
1374
+ textarea: Ripple.DetailedHTMLProps<
1375
+ Ripple.TextareaHTMLAttributes<HTMLTextAreaElement>,
1376
+ HTMLTextAreaElement
1377
+ >;
1240
1378
 
1241
1379
  // Interactive elements
1242
- details: DetailsHTMLAttributes<HTMLDetailsElement>;
1243
- dialog: DialogHTMLAttributes<HTMLDialogElement>;
1244
- summary: HTMLAttributes<HTMLElement>;
1380
+ details: Ripple.DetailedHTMLProps<
1381
+ Ripple.DetailsHTMLAttributes<HTMLDetailsElement>,
1382
+ HTMLDetailsElement
1383
+ >;
1384
+ dialog: Ripple.DetailedHTMLProps<
1385
+ Ripple.DialogHTMLAttributes<HTMLDialogElement>,
1386
+ HTMLDialogElement
1387
+ >;
1388
+ summary: Ripple.DetailedHTMLProps<Ripple.HTMLAttributes<HTMLElement>, HTMLElement>;
1245
1389
 
1246
1390
  // Web Components
1247
- slot: SlotHTMLAttributes<HTMLSlotElement>;
1248
- template: HTMLAttributes<HTMLTemplateElement>;
1391
+ slot: Ripple.DetailedHTMLProps<Ripple.SlotHTMLAttributes<HTMLSlotElement>, HTMLSlotElement>;
1392
+ template: Ripple.DetailedHTMLProps<
1393
+ Ripple.HTMLAttributes<HTMLTemplateElement>,
1394
+ HTMLTemplateElement
1395
+ >;
1249
1396
 
1250
1397
  // Catch-all for any other elements
1251
- [elemName: string]: HTMLAttributes<any>;
1398
+ [elemName: string]: Ripple.HTMLAttributes<any>;
1252
1399
  }
1253
1400
 
1254
1401
  interface ElementChildrenAttribute {
@@ -1256,3 +1403,17 @@ declare global {
1256
1403
  }
1257
1404
  }
1258
1405
  }
1406
+
1407
+ export import ClassValue = Ripple.ClassValue;
1408
+ export import JSX = Ripple.JSX;
1409
+ export { Ripple };
1410
+
1411
+ // Preserve the global JSX surface for existing consumers and compiler output.
1412
+ declare global {
1413
+ namespace JSX {
1414
+ type Element = Ripple.JSX.Element;
1415
+ type ElementType = keyof IntrinsicElements | ComponentType<any>;
1416
+ interface IntrinsicElements extends Ripple.JSX.IntrinsicElements {}
1417
+ interface ElementChildrenAttribute extends Ripple.JSX.ElementChildrenAttribute {}
1418
+ }
1419
+ }