@praxisjs/jsx 0.5.4 → 0.6.1

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.
package/src/dom-types.ts CHANGED
@@ -14,7 +14,7 @@ export type Booleanish = boolean | "true" | "false";
14
14
  * Widens a string literal union so that any `string` value is assignable
15
15
  * while IDE autocomplete still suggests the known members.
16
16
  */
17
- type LiteralUnion<T extends string> = T | (string & {});
17
+ export type LiteralUnion<T extends string> = T | (string & {});
18
18
 
19
19
  // ---------------------------------------------------------------------------
20
20
  // Attribute value enumerations
@@ -66,9 +66,9 @@ export type ReferrerPolicy = LiteralUnion<
66
66
  | "strict-origin-when-cross-origin"
67
67
  | "unsafe-url"
68
68
  >;
69
- export type CrossOrigin = "anonymous" | "use-credentials" | "";
70
- export type Decoding = "async" | "sync" | "auto";
71
- export type Loading = "eager" | "lazy";
69
+ export type CrossOrigin = LiteralUnion<"anonymous" | "use-credentials" | "">;
70
+ export type Decoding = LiteralUnion<"async" | "sync" | "auto">;
71
+ export type Loading = LiteralUnion<"eager" | "lazy">;
72
72
  export type Dir = LiteralUnion<"ltr" | "rtl" | "auto">;
73
73
  export type AutoCapitalize = LiteralUnion<
74
74
  "off" | "none" | "on" | "sentences" | "words" | "characters"
@@ -109,55 +109,61 @@ export type CSSProperties = {
109
109
 
110
110
  export interface AriaAttributes {
111
111
  /** Identifies the currently active element when DOM focus is on a composite widget, combobox, textbox, group, or application. */
112
- "aria-activedescendant"?: string;
112
+ "aria-activedescendant"?: Reactive<string>;
113
113
  /** Indicates whether assistive technologies will present all, or only parts of, the changed region based on the change notifications defined by the aria-relevant attribute. */
114
114
  "aria-atomic"?: Reactive<Booleanish>;
115
+ /** Indicates whether inputting text could trigger display of one or more predictions of the user's intended value for a combobox, searchbox, or textbox and specifies how predictions would be presented. */
116
+ "aria-autocomplete"?: Reactive<LiteralUnion<"none" | "inline" | "list" | "both">>;
115
117
  /** Indicates an element's "busy" status. */
116
118
  "aria-busy"?: Reactive<Booleanish>;
117
119
  /** Indicates the current "checked" state of checkboxes, radio buttons, and other widgets. */
118
- "aria-checked"?: Reactive<boolean | "true" | "false" | "mixed">;
120
+ "aria-checked"?: Reactive<Booleanish | LiteralUnion<"mixed">>;
119
121
  /** Defines the total number of columns in a table, grid, or treegrid. */
120
- "aria-colcount"?: number;
122
+ "aria-colcount"?: Reactive<number>;
121
123
  /** Defines an element's column index or position with respect to the total number of columns within a table, grid, or treegrid. */
122
- "aria-colindex"?: number;
124
+ "aria-colindex"?: Reactive<number>;
123
125
  /** Defines a human readable text alternative of aria-colindex. */
124
- "aria-colindextext"?: string;
126
+ "aria-colindextext"?: Reactive<string>;
125
127
  /** Defines the number of columns spanned by a cell or gridcell within a table, grid, or treegrid. */
126
- "aria-colspan"?: number;
128
+ "aria-colspan"?: Reactive<number>;
127
129
  /** Identifies the element(s) whose contents or presence are controlled by the current element. */
128
- "aria-controls"?: string;
130
+ "aria-controls"?: Reactive<string>;
129
131
  /** Indicates the element that represents the current item within a container or set of related elements. */
130
132
  "aria-current"?: Reactive<
131
- Booleanish | "page" | "step" | "location" | "date" | "time"
133
+ Booleanish | LiteralUnion<"page" | "step" | "location" | "date" | "time">
132
134
  >;
133
135
  /** Identifies the element(s) that describes the object. */
134
- "aria-describedby"?: string;
136
+ "aria-describedby"?: Reactive<string>;
135
137
  /** Defines a string value that describes or annotates the current element. */
136
- "aria-description"?: string;
138
+ "aria-description"?: Reactive<string>;
137
139
  /** Identifies the element that provides a detailed, extended description for the object. */
138
- "aria-details"?: string;
140
+ "aria-details"?: Reactive<string>;
139
141
  /** Indicates that the element is perceivable but disabled, so it is not editable or otherwise operable. */
140
142
  "aria-disabled"?: Reactive<Booleanish>;
143
+ /** Identifies the element that provides an error message for the current element. */
144
+ "aria-errormessage"?: Reactive<string>;
145
+ /** Indicates whether the element, or another grouping element it controls, is currently expanded or collapsed. */
146
+ "aria-expanded"?: Reactive<Booleanish>;
141
147
  /** Identifies the next element (or elements) in an alternate reading order of content which, at the user's discretion, allows assistive technology to override the general default of reading in document source order. */
142
- "aria-flowto"?: string;
148
+ "aria-flowto"?: Reactive<string>;
143
149
  /** Indicates the availability and type of interactive popup element, such as menu or dialog, that can be triggered by an element. */
144
150
  "aria-haspopup"?: Reactive<
145
- Booleanish | "menu" | "listbox" | "tree" | "grid" | "dialog"
151
+ Booleanish | LiteralUnion<"menu" | "listbox" | "tree" | "grid" | "dialog">
146
152
  >;
147
153
  /** Indicates whether the element is exposed to an accessibility API. */
148
154
  "aria-hidden"?: Reactive<Booleanish>;
149
155
  /** Indicates the entered value does not conform to the format expected by the application. */
150
- "aria-invalid"?: Reactive<Booleanish | "grammar" | "spelling">;
156
+ "aria-invalid"?: Reactive<Booleanish | LiteralUnion<"grammar" | "spelling">>;
151
157
  /** Indicates keyboard shortcuts that an author has implemented to activate or give focus to an element. */
152
- "aria-keyshortcuts"?: string;
158
+ "aria-keyshortcuts"?: Reactive<string>;
153
159
  /** Defines a string value that labels the current element. */
154
160
  "aria-label"?: Reactive<string>;
155
161
  /** Identifies the element(s) that labels the current element. */
156
- "aria-labelledby"?: string;
162
+ "aria-labelledby"?: Reactive<string>;
157
163
  /** Defines the hierarchical level of an element within a structure. */
158
- "aria-level"?: number;
164
+ "aria-level"?: Reactive<number>;
159
165
  /** Indicates that an element will be updated, and describes the types of updates the user agents, assistive technologies, and user can expect from the live region. */
160
- "aria-live"?: Reactive<"off" | "assertive" | "polite">;
166
+ "aria-live"?: Reactive<LiteralUnion<"off" | "assertive" | "polite">>;
161
167
  /** Indicates whether an element is modal when displayed. */
162
168
  "aria-modal"?: Reactive<Booleanish>;
163
169
  /** Indicates whether a text box accepts multiple lines of input or only a single line. */
@@ -165,19 +171,19 @@ export interface AriaAttributes {
165
171
  /** Indicates that the user may select more than one item from the current selectable descendants. */
166
172
  "aria-multiselectable"?: Reactive<Booleanish>;
167
173
  /** Indicates whether the element's orientation is horizontal, vertical, or unknown/ambiguous. */
168
- "aria-orientation"?: "horizontal" | "vertical";
174
+ "aria-orientation"?: Reactive<LiteralUnion<"horizontal" | "vertical">>;
169
175
  /** Identifies an element (or elements) in order to define a visual, functional, or contextual parent/child relationship between DOM elements where the DOM hierarchy cannot be used to represent the relationship. */
170
- "aria-owns"?: string;
176
+ "aria-owns"?: Reactive<string>;
171
177
  /** Defines a short hint (a word or short phrase) intended to aid the user with data entry when the control has no value. */
172
- "aria-placeholder"?: string;
178
+ "aria-placeholder"?: Reactive<string>;
173
179
  /** Defines an element's number or position in the current set of listitems or treeitems. Not required if all elements in the set are present in the DOM. */
174
- "aria-posinset"?: number;
180
+ "aria-posinset"?: Reactive<number>;
175
181
  /** Indicates the current "pressed" state of toggle buttons. */
176
- "aria-pressed"?: Reactive<boolean | "true" | "false" | "mixed">;
182
+ "aria-pressed"?: Reactive<Booleanish | LiteralUnion<"mixed">>;
177
183
  /** Indicates that the element is not editable, but is otherwise operable. */
178
184
  "aria-readonly"?: Reactive<Booleanish>;
179
185
  /** Indicates what notifications the user agent will trigger when the accessibility tree within a live region is modified. */
180
- "aria-relevant"?: Reactive<
186
+ "aria-relevant"?: Reactive<LiteralUnion<
181
187
  | "additions"
182
188
  | "additions removals"
183
189
  | "additions text"
@@ -188,35 +194,35 @@ export interface AriaAttributes {
188
194
  | "text"
189
195
  | "text additions"
190
196
  | "text removals"
191
- >;
197
+ >>;
192
198
  /** Indicates that user input is required on the element before a form may be submitted. */
193
199
  "aria-required"?: Reactive<Booleanish>;
194
200
  /** Defines a human-readable, author-localized description for the role of an element. */
195
- "aria-roledescription"?: string;
201
+ "aria-roledescription"?: Reactive<string>;
196
202
  /** Defines the total number of rows in a table, grid, or treegrid. */
197
- "aria-rowcount"?: number;
203
+ "aria-rowcount"?: Reactive<number>;
198
204
  /** Defines an element's row index or position with respect to the total number of rows within a table, grid, or treegrid. */
199
- "aria-rowindex"?: number;
205
+ "aria-rowindex"?: Reactive<number>;
200
206
  /** Defines a human readable text alternative of aria-rowindex. */
201
- "aria-rowindextext"?: string;
207
+ "aria-rowindextext"?: Reactive<string>;
202
208
  /** Defines the number of rows spanned by a cell or gridcell within a table, grid, or treegrid. */
203
- "aria-rowspan"?: number;
209
+ "aria-rowspan"?: Reactive<number>;
204
210
  /** Indicates the current "selected" state of various widgets. */
205
211
  "aria-selected"?: Reactive<Booleanish>;
206
212
  /** Defines the number of items in the current set of listitems or treeitems. Not required if all elements in the set are present in the DOM. */
207
- "aria-setsize"?: number;
213
+ "aria-setsize"?: Reactive<number>;
208
214
  /** Indicates if items in a table or grid are sorted in ascending or descending order. */
209
- "aria-sort"?: "none" | "ascending" | "descending" | "other";
215
+ "aria-sort"?: Reactive<LiteralUnion<"none" | "ascending" | "descending" | "other">>;
210
216
  /** Defines the maximum allowed value for a range widget. */
211
- "aria-valuemax"?: number;
217
+ "aria-valuemax"?: Reactive<number>;
212
218
  /** Defines the minimum allowed value for a range widget. */
213
- "aria-valuemin"?: number;
219
+ "aria-valuemin"?: Reactive<number>;
214
220
  /** Defines the current value for a range widget. */
215
- "aria-valuenow"?: number;
221
+ "aria-valuenow"?: Reactive<number>;
216
222
  /** Defines the human readable text alternative of aria-valuenow for a range widget. */
217
- "aria-valuetext"?: string;
223
+ "aria-valuetext"?: Reactive<string>;
218
224
  /** Defines the ARIA role of the element. */
219
- role?: LiteralUnion<
225
+ role?: Reactive<LiteralUnion<
220
226
  | "alert"
221
227
  | "alertdialog"
222
228
  | "application"
@@ -288,7 +294,7 @@ export interface AriaAttributes {
288
294
  | "tree"
289
295
  | "treegrid"
290
296
  | "treeitem"
291
- >;
297
+ >>;
292
298
  }
293
299
 
294
300
  // ---------------------------------------------------------------------------
@@ -314,6 +320,10 @@ export interface DOMAttributes<T extends EventTarget = EventTarget> {
314
320
  onMouseEnter?: (e: NativeEventOf<MouseEvent, T>) => void;
315
321
  onMouseLeave?: (e: NativeEventOf<MouseEvent, T>) => void;
316
322
  onMouseMove?: (e: NativeEventOf<MouseEvent, T>) => void;
323
+ /** Fires when the pointer moves over an element or its children (bubbles). */
324
+ onMouseOver?: (e: NativeEventOf<MouseEvent, T>) => void;
325
+ /** Fires when the pointer moves out of an element or its children (bubbles). */
326
+ onMouseOut?: (e: NativeEventOf<MouseEvent, T>) => void;
317
327
  onContextMenu?: (e: NativeEventOf<MouseEvent, T>) => void;
318
328
  // Keyboard
319
329
  onKeyDown?: (e: NativeEventOf<KeyboardEvent, T>) => void;
@@ -323,23 +333,52 @@ export interface DOMAttributes<T extends EventTarget = EventTarget> {
323
333
  // Focus
324
334
  onFocus?: (e: NativeEventOf<FocusEvent, T>) => void;
325
335
  onBlur?: (e: NativeEventOf<FocusEvent, T>) => void;
326
- // Form
327
- onChange?: (e: NativeEventOf<Event, T>) => void;
328
- onInput?: (e: NativeEventOf<InputEvent, T>) => void;
329
- onSubmit?: (e: NativeEventOf<SubmitEvent, T>) => void;
330
- onReset?: (e: NativeEventOf<Event, T>) => void;
336
+ // Pointer
337
+ onPointerDown?: (e: NativeEventOf<PointerEvent, T>) => void;
338
+ onPointerUp?: (e: NativeEventOf<PointerEvent, T>) => void;
339
+ onPointerMove?: (e: NativeEventOf<PointerEvent, T>) => void;
340
+ onPointerEnter?: (e: NativeEventOf<PointerEvent, T>) => void;
341
+ onPointerLeave?: (e: NativeEventOf<PointerEvent, T>) => void;
342
+ onPointerOver?: (e: NativeEventOf<PointerEvent, T>) => void;
343
+ onPointerOut?: (e: NativeEventOf<PointerEvent, T>) => void;
344
+ onPointerCancel?: (e: NativeEventOf<PointerEvent, T>) => void;
345
+ onGotPointerCapture?: (e: NativeEventOf<PointerEvent, T>) => void;
346
+ onLostPointerCapture?: (e: NativeEventOf<PointerEvent, T>) => void;
347
+ // Touch
348
+ onTouchStart?: (e: NativeEventOf<TouchEvent, T>) => void;
349
+ onTouchEnd?: (e: NativeEventOf<TouchEvent, T>) => void;
350
+ onTouchMove?: (e: NativeEventOf<TouchEvent, T>) => void;
331
351
  // Drag
352
+ onDrag?: (e: NativeEventOf<DragEvent, T>) => void;
332
353
  onDragStart?: (e: NativeEventOf<DragEvent, T>) => void;
333
354
  onDragEnd?: (e: NativeEventOf<DragEvent, T>) => void;
355
+ onDragEnter?: (e: NativeEventOf<DragEvent, T>) => void;
356
+ onDragLeave?: (e: NativeEventOf<DragEvent, T>) => void;
334
357
  onDragOver?: (e: NativeEventOf<DragEvent, T>) => void;
335
358
  onDrop?: (e: NativeEventOf<DragEvent, T>) => void;
336
- // Touch
337
- onTouchStart?: (e: NativeEventOf<TouchEvent, T>) => void;
338
- onTouchEnd?: (e: NativeEventOf<TouchEvent, T>) => void;
339
- onTouchMove?: (e: NativeEventOf<TouchEvent, T>) => void;
340
359
  // Scroll / Wheel
341
360
  onScroll?: (e: NativeEventOf<Event, T>) => void;
361
+ onScrollEnd?: (e: NativeEventOf<Event, T>) => void;
342
362
  onWheel?: (e: NativeEventOf<WheelEvent, T>) => void;
363
+ // Form
364
+ onChange?: (e: NativeEventOf<Event, T>) => void;
365
+ onInput?: (e: NativeEventOf<InputEvent, T>) => void;
366
+ onBeforeInput?: (e: NativeEventOf<InputEvent, T>) => void;
367
+ onSubmit?: (e: NativeEventOf<SubmitEvent, T>) => void;
368
+ onReset?: (e: NativeEventOf<Event, T>) => void;
369
+ onSelect?: (e: NativeEventOf<Event, T>) => void;
370
+ onInvalid?: (e: NativeEventOf<Event, T>) => void;
371
+ // Clipboard
372
+ onCopy?: (e: NativeEventOf<ClipboardEvent, T>) => void;
373
+ onCut?: (e: NativeEventOf<ClipboardEvent, T>) => void;
374
+ onPaste?: (e: NativeEventOf<ClipboardEvent, T>) => void;
375
+ // Composition (IME)
376
+ onCompositionStart?: (e: NativeEventOf<CompositionEvent, T>) => void;
377
+ onCompositionUpdate?: (e: NativeEventOf<CompositionEvent, T>) => void;
378
+ onCompositionEnd?: (e: NativeEventOf<CompositionEvent, T>) => void;
379
+ // Resource
380
+ onLoad?: (e: NativeEventOf<Event, T>) => void;
381
+ onError?: (e: NativeEventOf<Event, T>) => void;
343
382
  // Animation / Transition
344
383
  onAnimationEnd?: (e: NativeEventOf<AnimationEvent, T>) => void;
345
384
  onTransitionEnd?: (e: NativeEventOf<TransitionEvent, T>) => void;
@@ -361,14 +400,29 @@ export interface HTMLAttributes<T extends Element = HTMLElement>
361
400
  title?: Reactive<string>;
362
401
  lang?: Reactive<string>;
363
402
  dir?: Reactive<Dir>;
364
- slot?: string;
403
+ /** Web Components named-slot assignment. */
404
+ slot?: Reactive<string>;
405
+ accessKey?: Reactive<string>;
406
+ /** Content Security Policy nonce. Single-use: browsers blank this out after first read. */
407
+ nonce?: string;
365
408
  // Visibility / interaction
366
409
  hidden?: Reactive<boolean>;
367
410
  tabIndex?: Reactive<number>;
368
411
  draggable?: Reactive<boolean>;
369
- contentEditable?: Reactive<Booleanish | "inherit" | "plaintext-only">;
412
+ /**
413
+ * Autofocus on mount (global HTML5 attribute). One-shot by spec — the browser
414
+ * only consults this at insertion time, so it is not reactive.
415
+ */
416
+ autoFocus?: boolean;
417
+ contentEditable?: Reactive<Booleanish | LiteralUnion<"inherit" | "plaintext-only">>;
370
418
  spellcheck?: Reactive<Booleanish>;
371
- translate?: "yes" | "no";
419
+ translate?: Reactive<LiteralUnion<"yes" | "no">>;
420
+ /** Marks the element as inert — blocks all user interaction and assistive technology. */
421
+ inert?: Reactive<boolean>;
422
+ /** Declares the element as a popover. Use `"auto"` (default, light-dismiss) or `"manual"`. */
423
+ popover?: Reactive<boolean | LiteralUnion<"auto" | "manual">>;
424
+ /** CSS `::part()` export list for shadow DOM styling. */
425
+ part?: Reactive<string>;
372
426
  // Input hints
373
427
  inputMode?: Reactive<InputMode>;
374
428
  enterKeyHint?: Reactive<EnterKeyHint>;
@@ -377,17 +431,22 @@ export interface HTMLAttributes<T extends Element = HTMLElement>
377
431
  // Raw HTML injection
378
432
  innerHTML?: Reactive<string>;
379
433
  // Micro-data
380
- itemID?: string;
381
- itemProp?: string;
382
- itemRef?: string;
383
- itemScope?: boolean;
384
- itemType?: string;
385
- // Custom elements
434
+ itemID?: Reactive<string>;
435
+ itemProp?: Reactive<string>;
436
+ itemRef?: Reactive<string>;
437
+ itemScope?: Reactive<boolean>;
438
+ itemType?: Reactive<string>;
439
+ /**
440
+ * Customized built-in element name (`is="my-button"`). Fixed at
441
+ * `document.createElement(tag, { is })` time — cannot change post-construction.
442
+ */
386
443
  is?: string;
387
444
  // JSX internals
388
445
  key?: string | number | symbol;
389
446
  ref?: (el: T) => void;
390
447
  children?: Children;
448
+ // Data attributes
449
+ [key: `data-${string}`]: Reactive<string | number | boolean> | undefined;
391
450
  }
392
451
 
393
452
  // ---------------------------------------------------------------------------
@@ -399,14 +458,14 @@ export interface HTMLAttributes<T extends Element = HTMLElement>
399
458
  export interface BaseHTMLAttributes<
400
459
  T extends HTMLBaseElement = HTMLBaseElement,
401
460
  > extends HTMLAttributes<T> {
402
- href?: string;
403
- target?: LinkTarget;
461
+ href?: Reactive<string>;
462
+ target?: Reactive<LinkTarget>;
404
463
  }
405
464
 
406
465
  export interface LinkHTMLAttributes<
407
466
  T extends HTMLLinkElement = HTMLLinkElement,
408
467
  > extends HTMLAttributes<T> {
409
- as?: LiteralUnion<
468
+ as?: Reactive<LiteralUnion<
410
469
  | "audio"
411
470
  | "document"
412
471
  | "embed"
@@ -419,49 +478,49 @@ export interface LinkHTMLAttributes<
419
478
  | "track"
420
479
  | "video"
421
480
  | "worker"
422
- >;
423
- crossOrigin?: CrossOrigin;
424
- href?: string;
425
- hrefLang?: string;
426
- integrity?: string;
427
- media?: string;
428
- referrerPolicy?: ReferrerPolicy;
429
- rel?: string;
430
- sizes?: string;
431
- type?: string;
432
- charSet?: string;
481
+ >>;
482
+ crossOrigin?: Reactive<CrossOrigin>;
483
+ href?: Reactive<string>;
484
+ hrefLang?: Reactive<string>;
485
+ integrity?: Reactive<string>;
486
+ media?: Reactive<string>;
487
+ referrerPolicy?: Reactive<ReferrerPolicy>;
488
+ rel?: Reactive<string>;
489
+ sizes?: Reactive<string>;
490
+ type?: Reactive<string>;
491
+ charSet?: Reactive<string>;
433
492
  }
434
493
 
435
494
  export interface MetaHTMLAttributes<
436
495
  T extends HTMLMetaElement = HTMLMetaElement,
437
496
  > extends HTMLAttributes<T> {
438
- charSet?: string;
439
- content?: string;
440
- httpEquiv?: string;
441
- name?: string;
442
- media?: string;
497
+ charSet?: Reactive<string>;
498
+ content?: Reactive<string>;
499
+ httpEquiv?: Reactive<string>;
500
+ name?: Reactive<string>;
501
+ media?: Reactive<string>;
443
502
  }
444
503
 
445
504
  export interface ScriptHTMLAttributes<
446
505
  T extends HTMLScriptElement = HTMLScriptElement,
447
506
  > extends HTMLAttributes<T> {
448
- async?: boolean;
449
- crossOrigin?: CrossOrigin;
450
- defer?: boolean;
451
- integrity?: string;
452
- noModule?: boolean;
453
- referrerPolicy?: ReferrerPolicy;
454
- src?: string;
455
- type?: string;
456
- charSet?: string;
507
+ async?: Reactive<boolean>;
508
+ crossOrigin?: Reactive<CrossOrigin>;
509
+ defer?: Reactive<boolean>;
510
+ integrity?: Reactive<string>;
511
+ noModule?: Reactive<boolean>;
512
+ referrerPolicy?: Reactive<ReferrerPolicy>;
513
+ src?: Reactive<string>;
514
+ type?: Reactive<string>;
515
+ charSet?: Reactive<string>;
457
516
  }
458
517
 
459
518
  export interface StyleHTMLAttributes<
460
519
  T extends HTMLStyleElement = HTMLStyleElement,
461
520
  > extends HTMLAttributes<T> {
462
- media?: string;
463
- scoped?: boolean;
464
- type?: string;
521
+ media?: Reactive<string>;
522
+ scoped?: Reactive<boolean>;
523
+ type?: Reactive<string>;
465
524
  }
466
525
 
467
526
  // --- Sectioning / grouping ---
@@ -469,26 +528,26 @@ export interface StyleHTMLAttributes<
469
528
  export interface BlockquoteHTMLAttributes<
470
529
  T extends HTMLQuoteElement = HTMLQuoteElement,
471
530
  > extends HTMLAttributes<T> {
472
- cite?: string;
531
+ cite?: Reactive<string>;
473
532
  }
474
533
 
475
534
  export interface OlHTMLAttributes<
476
535
  T extends HTMLOListElement = HTMLOListElement,
477
536
  > extends HTMLAttributes<T> {
478
- reversed?: boolean;
479
- start?: number;
480
- type?: LiteralUnion<"1" | "a" | "A" | "i" | "I">;
537
+ reversed?: Reactive<boolean>;
538
+ start?: Reactive<number>;
539
+ type?: Reactive<LiteralUnion<"1" | "a" | "A" | "i" | "I">>;
481
540
  }
482
541
 
483
542
  export interface LiHTMLAttributes<T extends HTMLLIElement = HTMLLIElement>
484
543
  extends HTMLAttributes<T> {
485
- value?: number;
544
+ value?: Reactive<number>;
486
545
  }
487
546
 
488
547
  export interface MenuHTMLAttributes<
489
548
  T extends HTMLMenuElement = HTMLMenuElement,
490
549
  > extends HTMLAttributes<T> {
491
- type?: string;
550
+ type?: Reactive<string>;
492
551
  }
493
552
 
494
553
  // --- Text-level ---
@@ -498,13 +557,13 @@ export interface AnchorHTMLAttributes<
498
557
  > extends HTMLAttributes<T> {
499
558
  download?: Reactive<string | boolean>;
500
559
  href?: Reactive<string>;
501
- hrefLang?: string;
502
- media?: string;
503
- ping?: string;
504
- referrerPolicy?: ReferrerPolicy;
505
- rel?: string;
560
+ hrefLang?: Reactive<string>;
561
+ media?: Reactive<string>;
562
+ ping?: Reactive<string>;
563
+ referrerPolicy?: Reactive<ReferrerPolicy>;
564
+ rel?: Reactive<string>;
506
565
  target?: Reactive<LinkTarget>;
507
- type?: string;
566
+ type?: Reactive<string>;
508
567
  }
509
568
 
510
569
  export interface DataHTMLAttributes<
@@ -524,32 +583,32 @@ export interface TimeHTMLAttributes<
524
583
  export interface ImgHTMLAttributes<
525
584
  T extends HTMLImageElement = HTMLImageElement,
526
585
  > extends HTMLAttributes<T> {
527
- alt?: string;
528
- crossOrigin?: CrossOrigin;
529
- decoding?: Decoding;
586
+ alt?: Reactive<string>;
587
+ crossOrigin?: Reactive<CrossOrigin>;
588
+ decoding?: Reactive<Decoding>;
530
589
  height?: Reactive<number | string>;
531
- loading?: Loading;
532
- referrerPolicy?: ReferrerPolicy;
533
- sizes?: string;
590
+ loading?: Reactive<Loading>;
591
+ referrerPolicy?: Reactive<ReferrerPolicy>;
592
+ sizes?: Reactive<string>;
534
593
  src?: Reactive<string>;
535
594
  srcSet?: Reactive<string>;
536
- useMap?: string;
595
+ useMap?: Reactive<string>;
537
596
  width?: Reactive<number | string>;
538
- fetchPriority?: "high" | "low" | "auto";
597
+ fetchPriority?: Reactive<LiteralUnion<"high" | "low" | "auto">>;
539
598
  }
540
599
 
541
600
  export interface IframeHTMLAttributes<
542
601
  T extends HTMLIFrameElement = HTMLIFrameElement,
543
602
  > extends HTMLAttributes<T> {
544
- allow?: string;
603
+ allow?: Reactive<string>;
545
604
  allowFullScreen?: Reactive<boolean>;
546
605
  height?: Reactive<number | string>;
547
- loading?: Loading;
548
- name?: string;
549
- referrerPolicy?: ReferrerPolicy;
606
+ loading?: Reactive<Loading>;
607
+ name?: Reactive<string>;
608
+ referrerPolicy?: Reactive<ReferrerPolicy>;
550
609
  sandbox?: Reactive<string>;
551
610
  src?: Reactive<string>;
552
- srcDoc?: string;
611
+ srcDoc?: Reactive<string>;
553
612
  title?: Reactive<string>;
554
613
  width?: Reactive<number | string>;
555
614
  }
@@ -559,19 +618,19 @@ export interface EmbedHTMLAttributes<
559
618
  > extends HTMLAttributes<T> {
560
619
  height?: Reactive<number | string>;
561
620
  src?: Reactive<string>;
562
- type?: string;
621
+ type?: Reactive<string>;
563
622
  width?: Reactive<number | string>;
564
623
  }
565
624
 
566
625
  export interface ObjectHTMLAttributes<
567
626
  T extends HTMLObjectElement = HTMLObjectElement,
568
627
  > extends HTMLAttributes<T> {
569
- data?: string;
570
- form?: string;
628
+ data?: Reactive<string>;
629
+ form?: Reactive<string>;
571
630
  height?: Reactive<number | string>;
572
- name?: string;
573
- type?: string;
574
- useMap?: string;
631
+ name?: Reactive<string>;
632
+ type?: Reactive<string>;
633
+ useMap?: Reactive<string>;
575
634
  width?: Reactive<number | string>;
576
635
  }
577
636
 
@@ -579,38 +638,64 @@ export interface SourceHTMLAttributes<
579
638
  T extends HTMLSourceElement = HTMLSourceElement,
580
639
  > extends HTMLAttributes<T> {
581
640
  height?: Reactive<number | string>;
582
- media?: string;
583
- sizes?: string;
641
+ media?: Reactive<string>;
642
+ sizes?: Reactive<string>;
584
643
  src?: Reactive<string>;
585
644
  srcSet?: Reactive<string>;
586
- type?: string;
645
+ type?: Reactive<string>;
587
646
  width?: Reactive<number | string>;
588
647
  }
589
648
 
590
649
  export interface TrackHTMLAttributes<
591
650
  T extends HTMLTrackElement = HTMLTrackElement,
592
651
  > extends HTMLAttributes<T> {
593
- default?: boolean;
594
- kind?: LiteralUnion<
652
+ default?: Reactive<boolean>;
653
+ kind?: Reactive<LiteralUnion<
595
654
  "subtitles" | "captions" | "descriptions" | "chapters" | "metadata"
596
- >;
597
- label?: string;
598
- src?: string;
599
- srcLang?: string;
655
+ >>;
656
+ label?: Reactive<string>;
657
+ src?: Reactive<string>;
658
+ srcLang?: Reactive<string>;
600
659
  }
601
660
 
602
661
  export interface MediaHTMLAttributes<T extends HTMLMediaElement = HTMLMediaElement>
603
662
  extends HTMLAttributes<T> {
663
+ /**
664
+ * One-shot by spec — the browser only consults `autoplay` at insertion
665
+ * time, so it is not reactive.
666
+ */
604
667
  autoPlay?: boolean;
605
668
  controls?: Reactive<boolean>;
606
- controlsList?: string;
607
- crossOrigin?: CrossOrigin;
669
+ controlsList?: Reactive<string>;
670
+ crossOrigin?: Reactive<CrossOrigin>;
608
671
  loop?: Reactive<boolean>;
609
- mediaGroup?: string;
672
+ mediaGroup?: Reactive<string>;
610
673
  muted?: Reactive<boolean>;
611
- playsInline?: boolean;
612
- preload?: LiteralUnion<"none" | "metadata" | "auto">;
674
+ playsInline?: Reactive<boolean>;
675
+ preload?: Reactive<LiteralUnion<"none" | "metadata" | "auto">>;
613
676
  src?: Reactive<string>;
677
+ // Media events
678
+ onAbort?: (e: NativeEventOf<Event, T>) => void;
679
+ onCanPlay?: (e: NativeEventOf<Event, T>) => void;
680
+ onCanPlayThrough?: (e: NativeEventOf<Event, T>) => void;
681
+ onDurationChange?: (e: NativeEventOf<Event, T>) => void;
682
+ onEmptied?: (e: NativeEventOf<Event, T>) => void;
683
+ onEnded?: (e: NativeEventOf<Event, T>) => void;
684
+ onLoadedData?: (e: NativeEventOf<Event, T>) => void;
685
+ onLoadedMetadata?: (e: NativeEventOf<Event, T>) => void;
686
+ onLoadStart?: (e: NativeEventOf<Event, T>) => void;
687
+ onPause?: (e: NativeEventOf<Event, T>) => void;
688
+ onPlay?: (e: NativeEventOf<Event, T>) => void;
689
+ onPlaying?: (e: NativeEventOf<Event, T>) => void;
690
+ onProgress?: (e: NativeEventOf<ProgressEvent, T>) => void;
691
+ onRateChange?: (e: NativeEventOf<Event, T>) => void;
692
+ onSeeked?: (e: NativeEventOf<Event, T>) => void;
693
+ onSeeking?: (e: NativeEventOf<Event, T>) => void;
694
+ onStalled?: (e: NativeEventOf<Event, T>) => void;
695
+ onSuspend?: (e: NativeEventOf<Event, T>) => void;
696
+ onTimeUpdate?: (e: NativeEventOf<Event, T>) => void;
697
+ onVolumeChange?: (e: NativeEventOf<Event, T>) => void;
698
+ onWaiting?: (e: NativeEventOf<Event, T>) => void;
614
699
  }
615
700
 
616
701
  export type AudioHTMLAttributes<
@@ -621,11 +706,11 @@ export interface VideoHTMLAttributes<
621
706
  T extends HTMLVideoElement = HTMLVideoElement,
622
707
  > extends MediaHTMLAttributes<T> {
623
708
  height?: Reactive<number | string>;
624
- playsInline?: boolean;
709
+ playsInline?: Reactive<boolean>;
625
710
  poster?: Reactive<string>;
626
711
  width?: Reactive<number | string>;
627
- disablePictureInPicture?: boolean;
628
- disableRemotePlayback?: boolean;
712
+ disablePictureInPicture?: Reactive<boolean>;
713
+ disableRemotePlayback?: Reactive<boolean>;
629
714
  }
630
715
 
631
716
  export interface CanvasHTMLAttributes<
@@ -638,21 +723,21 @@ export interface CanvasHTMLAttributes<
638
723
  export interface MapHTMLAttributes<
639
724
  T extends HTMLMapElement = HTMLMapElement,
640
725
  > extends HTMLAttributes<T> {
641
- name?: string;
726
+ name?: Reactive<string>;
642
727
  }
643
728
 
644
729
  export interface AreaHTMLAttributes<
645
730
  T extends HTMLAreaElement = HTMLAreaElement,
646
731
  > extends HTMLAttributes<T> {
647
- alt?: string;
648
- coords?: string;
649
- download?: string;
732
+ alt?: Reactive<string>;
733
+ coords?: Reactive<string>;
734
+ download?: Reactive<string | boolean>;
650
735
  href?: Reactive<string>;
651
- hrefLang?: string;
652
- media?: string;
653
- referrerPolicy?: ReferrerPolicy;
654
- rel?: string;
655
- shape?: string;
736
+ hrefLang?: Reactive<string>;
737
+ media?: Reactive<string>;
738
+ referrerPolicy?: Reactive<ReferrerPolicy>;
739
+ rel?: Reactive<string>;
740
+ shape?: Reactive<string>;
656
741
  target?: Reactive<LinkTarget>;
657
742
  }
658
743
 
@@ -661,104 +746,120 @@ export interface AreaHTMLAttributes<
661
746
  export interface FormHTMLAttributes<
662
747
  T extends HTMLFormElement = HTMLFormElement,
663
748
  > extends HTMLAttributes<T> {
664
- acceptCharset?: string;
749
+ acceptCharset?: Reactive<string>;
665
750
  action?: Reactive<string>;
666
- autoComplete?: string;
667
- encType?: FormEncType;
668
- method?: FormMethod;
669
- name?: string;
670
- noValidate?: boolean;
671
- target?: LinkTarget;
672
- rel?: string;
751
+ autoComplete?: Reactive<string>;
752
+ encType?: Reactive<FormEncType>;
753
+ method?: Reactive<FormMethod>;
754
+ name?: Reactive<string>;
755
+ noValidate?: Reactive<boolean>;
756
+ target?: Reactive<LinkTarget>;
757
+ rel?: Reactive<string>;
673
758
  }
674
759
 
675
760
  export interface FieldsetHTMLAttributes<
676
761
  T extends HTMLFieldSetElement = HTMLFieldSetElement,
677
762
  > extends HTMLAttributes<T> {
678
763
  disabled?: Reactive<boolean>;
679
- form?: string;
680
- name?: string;
764
+ form?: Reactive<string>;
765
+ name?: Reactive<string>;
681
766
  }
682
767
 
683
768
  export interface InputHTMLAttributes<
684
769
  T extends HTMLInputElement = HTMLInputElement,
685
770
  > extends HTMLAttributes<T> {
686
- accept?: string;
687
- alt?: string;
688
- autoComplete?: LiteralUnion<string>;
771
+ accept?: Reactive<string>;
772
+ alt?: Reactive<string>;
773
+ autoComplete?: Reactive<LiteralUnion<string>>;
774
+ /**
775
+ * Autofocus on mount. One-shot by spec — the browser only consults this
776
+ * at insertion time, so it is not reactive.
777
+ */
689
778
  autoFocus?: boolean;
690
- capture?: boolean | LiteralUnion<"user" | "environment">;
779
+ capture?: Reactive<boolean | LiteralUnion<"user" | "environment">>;
691
780
  checked?: Reactive<boolean>;
692
- crossOrigin?: CrossOrigin;
781
+ crossOrigin?: Reactive<CrossOrigin>;
782
+ /** Uncontrolled-baseline value, set once on mount — not reactive. */
693
783
  defaultChecked?: boolean;
784
+ /** Uncontrolled-baseline value, set once on mount — not reactive. */
694
785
  defaultValue?: string | number | readonly string[];
695
- dirName?: string;
786
+ dirName?: Reactive<string>;
696
787
  disabled?: Reactive<boolean>;
697
788
  enterKeyHint?: Reactive<EnterKeyHint>;
698
- form?: string;
699
- formAction?: string;
700
- formEncType?: FormEncType;
701
- formMethod?: FormMethod;
702
- formNoValidate?: boolean;
703
- formTarget?: string;
789
+ form?: Reactive<string>;
790
+ formAction?: Reactive<string>;
791
+ formEncType?: Reactive<FormEncType>;
792
+ formMethod?: Reactive<FormMethod>;
793
+ formNoValidate?: Reactive<boolean>;
794
+ formTarget?: Reactive<string>;
704
795
  height?: Reactive<number | string>;
705
- list?: string;
796
+ list?: Reactive<string>;
706
797
  max?: Reactive<number | string>;
707
- maxLength?: number;
798
+ maxLength?: Reactive<number>;
708
799
  min?: Reactive<number | string>;
709
- minLength?: number;
710
- multiple?: boolean;
711
- name?: string;
712
- pattern?: string;
800
+ minLength?: Reactive<number>;
801
+ multiple?: Reactive<boolean>;
802
+ name?: Reactive<string>;
803
+ pattern?: Reactive<string>;
713
804
  placeholder?: Reactive<string>;
714
805
  readOnly?: Reactive<boolean>;
715
806
  required?: Reactive<boolean>;
716
- size?: number;
717
- src?: string;
807
+ size?: Reactive<number>;
808
+ src?: Reactive<string>;
718
809
  step?: Reactive<number | string>;
719
810
  type?: Reactive<HTMLInputTypeAttribute>;
720
811
  value?: Reactive<string | number | readonly string[]>;
721
812
  width?: Reactive<number | string>;
813
+ popovertarget?: Reactive<string>;
814
+ popovertargetaction?: Reactive<LiteralUnion<"hide" | "show" | "toggle">>;
722
815
  }
723
816
 
724
817
  export interface ButtonHTMLAttributes<
725
818
  T extends HTMLButtonElement = HTMLButtonElement,
726
819
  > extends HTMLAttributes<T> {
820
+ /**
821
+ * Autofocus on mount. One-shot by spec — the browser only consults this
822
+ * at insertion time, so it is not reactive.
823
+ */
727
824
  autoFocus?: boolean;
728
825
  disabled?: Reactive<boolean>;
729
- form?: string;
730
- formAction?: string;
731
- formEncType?: FormEncType;
732
- formMethod?: FormMethod;
733
- formNoValidate?: boolean;
734
- formTarget?: string;
735
- name?: string;
826
+ form?: Reactive<string>;
827
+ formAction?: Reactive<string>;
828
+ formEncType?: Reactive<FormEncType>;
829
+ formMethod?: Reactive<FormMethod>;
830
+ formNoValidate?: Reactive<boolean>;
831
+ formTarget?: Reactive<string>;
832
+ name?: Reactive<string>;
736
833
  type?: Reactive<ButtonType>;
737
834
  value?: Reactive<string>;
738
- popovertarget?: string;
739
- popovertargetaction?: LiteralUnion<"hide" | "show" | "toggle">;
835
+ popovertarget?: Reactive<string>;
836
+ popovertargetaction?: Reactive<LiteralUnion<"hide" | "show" | "toggle">>;
740
837
  }
741
838
 
742
839
  export interface LabelHTMLAttributes<
743
840
  T extends HTMLLabelElement = HTMLLabelElement,
744
841
  > extends HTMLAttributes<T> {
745
- form?: string;
746
- htmlFor?: string;
842
+ form?: Reactive<string>;
843
+ htmlFor?: Reactive<string>;
747
844
  /** DOM attribute alias for `htmlFor`. */
748
- for?: string;
845
+ for?: Reactive<string>;
749
846
  }
750
847
 
751
848
  export interface SelectHTMLAttributes<
752
849
  T extends HTMLSelectElement = HTMLSelectElement,
753
850
  > extends HTMLAttributes<T> {
754
- autoComplete?: string;
851
+ autoComplete?: Reactive<string>;
852
+ /**
853
+ * Autofocus on mount. One-shot by spec — the browser only consults this
854
+ * at insertion time, so it is not reactive.
855
+ */
755
856
  autoFocus?: boolean;
756
857
  disabled?: Reactive<boolean>;
757
- form?: string;
758
- multiple?: boolean;
759
- name?: string;
858
+ form?: Reactive<string>;
859
+ multiple?: Reactive<boolean>;
860
+ name?: Reactive<string>;
760
861
  required?: Reactive<boolean>;
761
- size?: number;
862
+ size?: Reactive<number>;
762
863
  value?: Reactive<string | number | readonly string[]>;
763
864
  }
764
865
 
@@ -766,14 +867,14 @@ export interface OptgroupHTMLAttributes<
766
867
  T extends HTMLOptGroupElement = HTMLOptGroupElement,
767
868
  > extends HTMLAttributes<T> {
768
869
  disabled?: Reactive<boolean>;
769
- label?: string;
870
+ label?: Reactive<string>;
770
871
  }
771
872
 
772
873
  export interface OptionHTMLAttributes<
773
874
  T extends HTMLOptionElement = HTMLOptionElement,
774
875
  > extends HTMLAttributes<T> {
775
876
  disabled?: Reactive<boolean>;
776
- label?: string;
877
+ label?: Reactive<string>;
777
878
  selected?: Reactive<boolean>;
778
879
  value?: Reactive<string | number>;
779
880
  }
@@ -781,48 +882,53 @@ export interface OptionHTMLAttributes<
781
882
  export interface OutputHTMLAttributes<
782
883
  T extends HTMLOutputElement = HTMLOutputElement,
783
884
  > extends HTMLAttributes<T> {
784
- form?: string;
785
- htmlFor?: string;
786
- name?: string;
885
+ form?: Reactive<string>;
886
+ htmlFor?: Reactive<string>;
887
+ name?: Reactive<string>;
787
888
  }
788
889
 
789
890
  export interface TextareaHTMLAttributes<
790
891
  T extends HTMLTextAreaElement = HTMLTextAreaElement,
791
892
  > extends HTMLAttributes<T> {
792
- autoComplete?: string;
893
+ autoComplete?: Reactive<string>;
894
+ /**
895
+ * Autofocus on mount. One-shot by spec — the browser only consults this
896
+ * at insertion time, so it is not reactive.
897
+ */
793
898
  autoFocus?: boolean;
794
- cols?: number;
899
+ cols?: Reactive<number>;
900
+ /** Uncontrolled-baseline value, set once on mount — not reactive. */
795
901
  defaultValue?: string;
796
- dirName?: string;
902
+ dirName?: Reactive<string>;
797
903
  disabled?: Reactive<boolean>;
798
- form?: string;
799
- maxLength?: number;
800
- minLength?: number;
801
- name?: string;
904
+ form?: Reactive<string>;
905
+ maxLength?: Reactive<number>;
906
+ minLength?: Reactive<number>;
907
+ name?: Reactive<string>;
802
908
  placeholder?: Reactive<string>;
803
909
  readOnly?: Reactive<boolean>;
804
910
  required?: Reactive<boolean>;
805
- rows?: number;
911
+ rows?: Reactive<number>;
806
912
  value?: Reactive<string>;
807
- wrap?: LiteralUnion<"hard" | "soft" | "off">;
913
+ wrap?: Reactive<LiteralUnion<"hard" | "soft" | "off">>;
808
914
  }
809
915
 
810
916
  export interface MeterHTMLAttributes<
811
917
  T extends HTMLMeterElement = HTMLMeterElement,
812
918
  > extends HTMLAttributes<T> {
813
- form?: string;
814
- high?: number;
815
- low?: number;
919
+ form?: Reactive<string>;
920
+ high?: Reactive<number>;
921
+ low?: Reactive<number>;
816
922
  max?: Reactive<number | string>;
817
923
  min?: Reactive<number | string>;
818
- optimum?: number;
924
+ optimum?: Reactive<number>;
819
925
  value?: Reactive<string | number>;
820
926
  }
821
927
 
822
928
  export interface ProgressHTMLAttributes<
823
929
  T extends HTMLProgressElement = HTMLProgressElement,
824
930
  > extends HTMLAttributes<T> {
825
- max?: number | string;
931
+ max?: Reactive<number | string>;
826
932
  value?: Reactive<string | number>;
827
933
  }
828
934
 
@@ -836,8 +942,9 @@ export interface DetailsHTMLAttributes<
836
942
  T extends HTMLDetailsElement = HTMLDetailsElement,
837
943
  > extends HTMLAttributes<T> {
838
944
  open?: Reactive<boolean>;
839
- name?: string;
945
+ name?: Reactive<string>;
840
946
  onToggle?: (e: NativeEventOf<Event, T>) => void;
947
+ onBeforeToggle?: (e: NativeEventOf<Event, T>) => void;
841
948
  }
842
949
 
843
950
  export interface DialogHTMLAttributes<
@@ -846,12 +953,14 @@ export interface DialogHTMLAttributes<
846
953
  open?: Reactive<boolean>;
847
954
  onClose?: (e: NativeEventOf<Event, T>) => void;
848
955
  onCancel?: (e: NativeEventOf<Event, T>) => void;
956
+ onToggle?: (e: NativeEventOf<Event, T>) => void;
957
+ onBeforeToggle?: (e: NativeEventOf<Event, T>) => void;
849
958
  }
850
959
 
851
960
  export interface SlotHTMLAttributes<
852
961
  T extends HTMLSlotElement = HTMLSlotElement,
853
962
  > extends HTMLAttributes<T> {
854
- name?: string;
963
+ name?: Reactive<string>;
855
964
  }
856
965
 
857
966
  // --- Tabular ---
@@ -859,48 +968,48 @@ export interface SlotHTMLAttributes<
859
968
  export interface TableHTMLAttributes<
860
969
  T extends HTMLTableElement = HTMLTableElement,
861
970
  > extends HTMLAttributes<T> {
862
- cellPadding?: number | string;
863
- cellSpacing?: number | string;
864
- summary?: string;
865
- width?: number | string;
971
+ cellPadding?: Reactive<number | string>;
972
+ cellSpacing?: Reactive<number | string>;
973
+ summary?: Reactive<string>;
974
+ width?: Reactive<number | string>;
866
975
  }
867
976
 
868
977
  export interface ColHTMLAttributes<
869
978
  T extends HTMLTableColElement = HTMLTableColElement,
870
979
  > extends HTMLAttributes<T> {
871
- span?: number;
872
- width?: number | string;
980
+ span?: Reactive<number>;
981
+ width?: Reactive<number | string>;
873
982
  }
874
983
 
875
984
  export interface ColgroupHTMLAttributes<
876
985
  T extends HTMLTableColElement = HTMLTableColElement,
877
986
  > extends HTMLAttributes<T> {
878
- span?: number;
987
+ span?: Reactive<number>;
879
988
  }
880
989
 
881
990
  export interface TdHTMLAttributes<
882
991
  T extends HTMLTableCellElement = HTMLTableCellElement,
883
992
  > extends HTMLAttributes<T> {
884
- align?: LiteralUnion<"left" | "center" | "right" | "justify" | "char">;
885
- colSpan?: number;
886
- headers?: string;
887
- rowSpan?: number;
888
- scope?: LiteralUnion<"col" | "row" | "colgroup" | "rowgroup">;
889
- abbr?: string;
890
- height?: number | string;
891
- width?: number | string;
892
- valign?: LiteralUnion<"top" | "middle" | "bottom" | "baseline">;
993
+ align?: Reactive<LiteralUnion<"left" | "center" | "right" | "justify" | "char">>;
994
+ colSpan?: Reactive<number>;
995
+ headers?: Reactive<string>;
996
+ rowSpan?: Reactive<number>;
997
+ scope?: Reactive<LiteralUnion<"col" | "row" | "colgroup" | "rowgroup">>;
998
+ abbr?: Reactive<string>;
999
+ height?: Reactive<number | string>;
1000
+ width?: Reactive<number | string>;
1001
+ valign?: Reactive<LiteralUnion<"top" | "middle" | "bottom" | "baseline">>;
893
1002
  }
894
1003
 
895
1004
  export interface ThHTMLAttributes<
896
1005
  T extends HTMLTableCellElement = HTMLTableCellElement,
897
1006
  > extends HTMLAttributes<T> {
898
- align?: LiteralUnion<"left" | "center" | "right" | "justify" | "char">;
899
- colSpan?: number;
900
- headers?: string;
901
- rowSpan?: number;
902
- scope?: LiteralUnion<"col" | "row" | "colgroup" | "rowgroup">;
903
- abbr?: string;
1007
+ align?: Reactive<LiteralUnion<"left" | "center" | "right" | "justify" | "char">>;
1008
+ colSpan?: Reactive<number>;
1009
+ headers?: Reactive<string>;
1010
+ rowSpan?: Reactive<number>;
1011
+ scope?: Reactive<LiteralUnion<"col" | "row" | "colgroup" | "rowgroup">>;
1012
+ abbr?: Reactive<string>;
904
1013
  }
905
1014
 
906
1015
  // --- Content edits ---
@@ -908,15 +1017,15 @@ export interface ThHTMLAttributes<
908
1017
  export interface DelHTMLAttributes<
909
1018
  T extends HTMLModElement = HTMLModElement,
910
1019
  > extends HTMLAttributes<T> {
911
- cite?: string;
912
- dateTime?: string;
1020
+ cite?: Reactive<string>;
1021
+ dateTime?: Reactive<string>;
913
1022
  }
914
1023
 
915
1024
  export interface InsHTMLAttributes<
916
1025
  T extends HTMLModElement = HTMLModElement,
917
1026
  > extends HTMLAttributes<T> {
918
- cite?: string;
919
- dateTime?: string;
1027
+ cite?: Reactive<string>;
1028
+ dateTime?: Reactive<string>;
920
1029
  }
921
1030
 
922
1031
  // ---------------------------------------------------------------------------
@@ -957,6 +1066,15 @@ export interface SVGAttributes<T extends Element = SVGElement>
957
1066
  mask?: Reactive<string>;
958
1067
  filter?: Reactive<string>;
959
1068
  transform?: Reactive<string>;
1069
+ cursor?: Reactive<string>;
1070
+ /** Controls whether the element can be a hit-test target for pointer events. */
1071
+ pointerEvents?: Reactive<LiteralUnion<"none" | "auto" | "visiblePainted" | "visibleFill" | "visibleStroke" | "visible" | "painted" | "fill" | "stroke" | "all">>;
1072
+ vectorEffect?: Reactive<LiteralUnion<"none" | "non-scaling-stroke" | "non-scaling-size" | "non-rotation" | "fixed-position">>;
1073
+ shapeRendering?: Reactive<LiteralUnion<"auto" | "optimizeSpeed" | "crispEdges" | "geometricPrecision">>;
1074
+ textRendering?: Reactive<LiteralUnion<"auto" | "optimizeSpeed" | "optimizeLegibility" | "geometricPrecision">>;
1075
+ imageRendering?: Reactive<LiteralUnion<"auto" | "optimizeSpeed" | "optimizeQuality" | "pixelated">>;
1076
+ colorInterpolation?: Reactive<LiteralUnion<"auto" | "sRGB" | "linearRGB">>;
1077
+ paintOrder?: Reactive<string>;
960
1078
  // Geometry (shared)
961
1079
  x?: Reactive<number | string>;
962
1080
  y?: Reactive<number | string>;