@praxisjs/jsx 0.6.0 → 0.7.0

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,6 +1,11 @@
1
1
  import type { Children } from "@praxisjs/shared";
2
- /** A value OR a zero-argument function returning that value (for reactive bindings). */
3
- export type Reactive<T> = T | (() => T);
2
+ /**
3
+ * A value OR a zero-argument function returning that value (for reactive
4
+ * bindings). `null`/`undefined` are always accepted too — both as a static
5
+ * value and as what the function returns — so a prop can be conditionally
6
+ * omitted or cleared (the runtime removes the attribute in that case).
7
+ */
8
+ export type Reactive<T> = T | null | undefined | (() => T | null | undefined);
4
9
  /** Boolean that can also be expressed as its string form for HTML attributes. */
5
10
  export type Booleanish = boolean | "true" | "false";
6
11
  /**
@@ -30,41 +35,41 @@ export type CSSProperties = {
30
35
  } & Record<`--${string}`, string | number | undefined>;
31
36
  export interface AriaAttributes {
32
37
  /** Identifies the currently active element when DOM focus is on a composite widget, combobox, textbox, group, or application. */
33
- "aria-activedescendant"?: string;
38
+ "aria-activedescendant"?: Reactive<string>;
34
39
  /** 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. */
35
40
  "aria-atomic"?: Reactive<Booleanish>;
36
41
  /** 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. */
37
- "aria-autocomplete"?: LiteralUnion<"none" | "inline" | "list" | "both">;
42
+ "aria-autocomplete"?: Reactive<LiteralUnion<"none" | "inline" | "list" | "both">>;
38
43
  /** Indicates an element's "busy" status. */
39
44
  "aria-busy"?: Reactive<Booleanish>;
40
45
  /** Indicates the current "checked" state of checkboxes, radio buttons, and other widgets. */
41
46
  "aria-checked"?: Reactive<Booleanish | LiteralUnion<"mixed">>;
42
47
  /** Defines the total number of columns in a table, grid, or treegrid. */
43
- "aria-colcount"?: number;
48
+ "aria-colcount"?: Reactive<number>;
44
49
  /** Defines an element's column index or position with respect to the total number of columns within a table, grid, or treegrid. */
45
- "aria-colindex"?: number;
50
+ "aria-colindex"?: Reactive<number>;
46
51
  /** Defines a human readable text alternative of aria-colindex. */
47
- "aria-colindextext"?: string;
52
+ "aria-colindextext"?: Reactive<string>;
48
53
  /** Defines the number of columns spanned by a cell or gridcell within a table, grid, or treegrid. */
49
- "aria-colspan"?: number;
54
+ "aria-colspan"?: Reactive<number>;
50
55
  /** Identifies the element(s) whose contents or presence are controlled by the current element. */
51
- "aria-controls"?: string;
56
+ "aria-controls"?: Reactive<string>;
52
57
  /** Indicates the element that represents the current item within a container or set of related elements. */
53
58
  "aria-current"?: Reactive<Booleanish | LiteralUnion<"page" | "step" | "location" | "date" | "time">>;
54
59
  /** Identifies the element(s) that describes the object. */
55
- "aria-describedby"?: string;
60
+ "aria-describedby"?: Reactive<string>;
56
61
  /** Defines a string value that describes or annotates the current element. */
57
- "aria-description"?: string;
62
+ "aria-description"?: Reactive<string>;
58
63
  /** Identifies the element that provides a detailed, extended description for the object. */
59
- "aria-details"?: string;
64
+ "aria-details"?: Reactive<string>;
60
65
  /** Indicates that the element is perceivable but disabled, so it is not editable or otherwise operable. */
61
66
  "aria-disabled"?: Reactive<Booleanish>;
62
67
  /** Identifies the element that provides an error message for the current element. */
63
- "aria-errormessage"?: string;
68
+ "aria-errormessage"?: Reactive<string>;
64
69
  /** Indicates whether the element, or another grouping element it controls, is currently expanded or collapsed. */
65
70
  "aria-expanded"?: Reactive<Booleanish>;
66
71
  /** 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. */
67
- "aria-flowto"?: string;
72
+ "aria-flowto"?: Reactive<string>;
68
73
  /** Indicates the availability and type of interactive popup element, such as menu or dialog, that can be triggered by an element. */
69
74
  "aria-haspopup"?: Reactive<Booleanish | LiteralUnion<"menu" | "listbox" | "tree" | "grid" | "dialog">>;
70
75
  /** Indicates whether the element is exposed to an accessibility API. */
@@ -72,13 +77,13 @@ export interface AriaAttributes {
72
77
  /** Indicates the entered value does not conform to the format expected by the application. */
73
78
  "aria-invalid"?: Reactive<Booleanish | LiteralUnion<"grammar" | "spelling">>;
74
79
  /** Indicates keyboard shortcuts that an author has implemented to activate or give focus to an element. */
75
- "aria-keyshortcuts"?: string;
80
+ "aria-keyshortcuts"?: Reactive<string>;
76
81
  /** Defines a string value that labels the current element. */
77
82
  "aria-label"?: Reactive<string>;
78
83
  /** Identifies the element(s) that labels the current element. */
79
- "aria-labelledby"?: string;
84
+ "aria-labelledby"?: Reactive<string>;
80
85
  /** Defines the hierarchical level of an element within a structure. */
81
- "aria-level"?: number;
86
+ "aria-level"?: Reactive<number>;
82
87
  /** 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. */
83
88
  "aria-live"?: Reactive<LiteralUnion<"off" | "assertive" | "polite">>;
84
89
  /** Indicates whether an element is modal when displayed. */
@@ -88,13 +93,13 @@ export interface AriaAttributes {
88
93
  /** Indicates that the user may select more than one item from the current selectable descendants. */
89
94
  "aria-multiselectable"?: Reactive<Booleanish>;
90
95
  /** Indicates whether the element's orientation is horizontal, vertical, or unknown/ambiguous. */
91
- "aria-orientation"?: LiteralUnion<"horizontal" | "vertical">;
96
+ "aria-orientation"?: Reactive<LiteralUnion<"horizontal" | "vertical">>;
92
97
  /** 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. */
93
- "aria-owns"?: string;
98
+ "aria-owns"?: Reactive<string>;
94
99
  /** Defines a short hint (a word or short phrase) intended to aid the user with data entry when the control has no value. */
95
- "aria-placeholder"?: string;
100
+ "aria-placeholder"?: Reactive<string>;
96
101
  /** 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. */
97
- "aria-posinset"?: number;
102
+ "aria-posinset"?: Reactive<number>;
98
103
  /** Indicates the current "pressed" state of toggle buttons. */
99
104
  "aria-pressed"?: Reactive<Booleanish | LiteralUnion<"mixed">>;
100
105
  /** Indicates that the element is not editable, but is otherwise operable. */
@@ -104,31 +109,31 @@ export interface AriaAttributes {
104
109
  /** Indicates that user input is required on the element before a form may be submitted. */
105
110
  "aria-required"?: Reactive<Booleanish>;
106
111
  /** Defines a human-readable, author-localized description for the role of an element. */
107
- "aria-roledescription"?: string;
112
+ "aria-roledescription"?: Reactive<string>;
108
113
  /** Defines the total number of rows in a table, grid, or treegrid. */
109
- "aria-rowcount"?: number;
114
+ "aria-rowcount"?: Reactive<number>;
110
115
  /** Defines an element's row index or position with respect to the total number of rows within a table, grid, or treegrid. */
111
- "aria-rowindex"?: number;
116
+ "aria-rowindex"?: Reactive<number>;
112
117
  /** Defines a human readable text alternative of aria-rowindex. */
113
- "aria-rowindextext"?: string;
118
+ "aria-rowindextext"?: Reactive<string>;
114
119
  /** Defines the number of rows spanned by a cell or gridcell within a table, grid, or treegrid. */
115
- "aria-rowspan"?: number;
120
+ "aria-rowspan"?: Reactive<number>;
116
121
  /** Indicates the current "selected" state of various widgets. */
117
122
  "aria-selected"?: Reactive<Booleanish>;
118
123
  /** 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. */
119
- "aria-setsize"?: number;
124
+ "aria-setsize"?: Reactive<number>;
120
125
  /** Indicates if items in a table or grid are sorted in ascending or descending order. */
121
- "aria-sort"?: LiteralUnion<"none" | "ascending" | "descending" | "other">;
126
+ "aria-sort"?: Reactive<LiteralUnion<"none" | "ascending" | "descending" | "other">>;
122
127
  /** Defines the maximum allowed value for a range widget. */
123
- "aria-valuemax"?: number;
128
+ "aria-valuemax"?: Reactive<number>;
124
129
  /** Defines the minimum allowed value for a range widget. */
125
- "aria-valuemin"?: number;
130
+ "aria-valuemin"?: Reactive<number>;
126
131
  /** Defines the current value for a range widget. */
127
- "aria-valuenow"?: number;
132
+ "aria-valuenow"?: Reactive<number>;
128
133
  /** Defines the human readable text alternative of aria-valuenow for a range widget. */
129
- "aria-valuetext"?: string;
134
+ "aria-valuetext"?: Reactive<string>;
130
135
  /** Defines the ARIA role of the element. */
131
- role?: LiteralUnion<"alert" | "alertdialog" | "application" | "article" | "banner" | "button" | "cell" | "checkbox" | "columnheader" | "combobox" | "complementary" | "contentinfo" | "definition" | "dialog" | "directory" | "document" | "feed" | "figure" | "form" | "generic" | "grid" | "gridcell" | "group" | "heading" | "img" | "link" | "list" | "listbox" | "listitem" | "log" | "main" | "marquee" | "math" | "menu" | "menubar" | "menuitem" | "menuitemcheckbox" | "menuitemradio" | "meter" | "navigation" | "none" | "note" | "option" | "presentation" | "progressbar" | "radio" | "radiogroup" | "region" | "row" | "rowgroup" | "rowheader" | "scrollbar" | "search" | "searchbox" | "separator" | "slider" | "spinbutton" | "status" | "switch" | "tab" | "table" | "tablist" | "tabpanel" | "term" | "textbox" | "timer" | "toolbar" | "tooltip" | "tree" | "treegrid" | "treeitem">;
136
+ role?: Reactive<LiteralUnion<"alert" | "alertdialog" | "application" | "article" | "banner" | "button" | "cell" | "checkbox" | "columnheader" | "combobox" | "complementary" | "contentinfo" | "definition" | "dialog" | "directory" | "document" | "feed" | "figure" | "form" | "generic" | "grid" | "gridcell" | "group" | "heading" | "img" | "link" | "list" | "listbox" | "listitem" | "log" | "main" | "marquee" | "math" | "menu" | "menubar" | "menuitem" | "menuitemcheckbox" | "menuitemradio" | "meter" | "navigation" | "none" | "note" | "option" | "presentation" | "progressbar" | "radio" | "radiogroup" | "region" | "row" | "rowgroup" | "rowheader" | "scrollbar" | "search" | "searchbox" | "separator" | "slider" | "spinbutton" | "status" | "switch" | "tab" | "table" | "tablist" | "tabpanel" | "term" | "textbox" | "timer" | "toolbar" | "tooltip" | "tree" | "treegrid" | "treeitem">>;
132
137
  }
133
138
  /** Narrows `currentTarget` to the actual host element type `T`. */
134
139
  type NativeEventOf<E extends Event, T extends EventTarget> = E & {
@@ -208,33 +213,42 @@ export interface HTMLAttributes<T extends Element = HTMLElement> extends AriaAtt
208
213
  title?: Reactive<string>;
209
214
  lang?: Reactive<string>;
210
215
  dir?: Reactive<Dir>;
211
- slot?: string;
212
- accessKey?: string;
216
+ /** Web Components named-slot assignment. */
217
+ slot?: Reactive<string>;
218
+ accessKey?: Reactive<string>;
219
+ /** Content Security Policy nonce. Single-use: browsers blank this out after first read. */
213
220
  nonce?: string;
214
221
  hidden?: Reactive<boolean>;
215
222
  tabIndex?: Reactive<number>;
216
223
  draggable?: Reactive<boolean>;
217
- /** Autofocus on mount (global HTML5 attribute). */
224
+ /**
225
+ * Autofocus on mount (global HTML5 attribute). One-shot by spec — the browser
226
+ * only consults this at insertion time, so it is not reactive.
227
+ */
218
228
  autoFocus?: boolean;
219
229
  contentEditable?: Reactive<Booleanish | LiteralUnion<"inherit" | "plaintext-only">>;
220
230
  spellcheck?: Reactive<Booleanish>;
221
- translate?: LiteralUnion<"yes" | "no">;
231
+ translate?: Reactive<LiteralUnion<"yes" | "no">>;
222
232
  /** Marks the element as inert — blocks all user interaction and assistive technology. */
223
233
  inert?: Reactive<boolean>;
224
234
  /** Declares the element as a popover. Use `"auto"` (default, light-dismiss) or `"manual"`. */
225
- popover?: boolean | LiteralUnion<"auto" | "manual">;
235
+ popover?: Reactive<boolean | LiteralUnion<"auto" | "manual">>;
226
236
  /** CSS `::part()` export list for shadow DOM styling. */
227
- part?: string;
237
+ part?: Reactive<string>;
228
238
  inputMode?: Reactive<InputMode>;
229
239
  enterKeyHint?: Reactive<EnterKeyHint>;
230
240
  autoCapitalize?: Reactive<AutoCapitalize>;
231
241
  autoCorrect?: Reactive<string>;
232
242
  innerHTML?: Reactive<string>;
233
- itemID?: string;
234
- itemProp?: string;
235
- itemRef?: string;
236
- itemScope?: boolean;
237
- itemType?: string;
243
+ itemID?: Reactive<string>;
244
+ itemProp?: Reactive<string>;
245
+ itemRef?: Reactive<string>;
246
+ itemScope?: Reactive<boolean>;
247
+ itemType?: Reactive<string>;
248
+ /**
249
+ * Customized built-in element name (`is="my-button"`). Fixed at
250
+ * `document.createElement(tag, { is })` time — cannot change post-construction.
251
+ */
238
252
  is?: string;
239
253
  key?: string | number | symbol;
240
254
  ref?: (el: T) => void;
@@ -242,69 +256,69 @@ export interface HTMLAttributes<T extends Element = HTMLElement> extends AriaAtt
242
256
  [key: `data-${string}`]: Reactive<string | number | boolean> | undefined;
243
257
  }
244
258
  export interface BaseHTMLAttributes<T extends HTMLBaseElement = HTMLBaseElement> extends HTMLAttributes<T> {
245
- href?: string;
246
- target?: LinkTarget;
259
+ href?: Reactive<string>;
260
+ target?: Reactive<LinkTarget>;
247
261
  }
248
262
  export interface LinkHTMLAttributes<T extends HTMLLinkElement = HTMLLinkElement> extends HTMLAttributes<T> {
249
- as?: LiteralUnion<"audio" | "document" | "embed" | "fetch" | "font" | "image" | "object" | "script" | "style" | "track" | "video" | "worker">;
250
- crossOrigin?: CrossOrigin;
251
- href?: string;
252
- hrefLang?: string;
253
- integrity?: string;
254
- media?: string;
255
- referrerPolicy?: ReferrerPolicy;
256
- rel?: string;
257
- sizes?: string;
258
- type?: string;
259
- charSet?: string;
263
+ as?: Reactive<LiteralUnion<"audio" | "document" | "embed" | "fetch" | "font" | "image" | "object" | "script" | "style" | "track" | "video" | "worker">>;
264
+ crossOrigin?: Reactive<CrossOrigin>;
265
+ href?: Reactive<string>;
266
+ hrefLang?: Reactive<string>;
267
+ integrity?: Reactive<string>;
268
+ media?: Reactive<string>;
269
+ referrerPolicy?: Reactive<ReferrerPolicy>;
270
+ rel?: Reactive<string>;
271
+ sizes?: Reactive<string>;
272
+ type?: Reactive<string>;
273
+ charSet?: Reactive<string>;
260
274
  }
261
275
  export interface MetaHTMLAttributes<T extends HTMLMetaElement = HTMLMetaElement> extends HTMLAttributes<T> {
262
- charSet?: string;
263
- content?: string;
264
- httpEquiv?: string;
265
- name?: string;
266
- media?: string;
276
+ charSet?: Reactive<string>;
277
+ content?: Reactive<string>;
278
+ httpEquiv?: Reactive<string>;
279
+ name?: Reactive<string>;
280
+ media?: Reactive<string>;
267
281
  }
268
282
  export interface ScriptHTMLAttributes<T extends HTMLScriptElement = HTMLScriptElement> extends HTMLAttributes<T> {
269
- async?: boolean;
270
- crossOrigin?: CrossOrigin;
271
- defer?: boolean;
272
- integrity?: string;
273
- noModule?: boolean;
274
- referrerPolicy?: ReferrerPolicy;
275
- src?: string;
276
- type?: string;
277
- charSet?: string;
283
+ async?: Reactive<boolean>;
284
+ crossOrigin?: Reactive<CrossOrigin>;
285
+ defer?: Reactive<boolean>;
286
+ integrity?: Reactive<string>;
287
+ noModule?: Reactive<boolean>;
288
+ referrerPolicy?: Reactive<ReferrerPolicy>;
289
+ src?: Reactive<string>;
290
+ type?: Reactive<string>;
291
+ charSet?: Reactive<string>;
278
292
  }
279
293
  export interface StyleHTMLAttributes<T extends HTMLStyleElement = HTMLStyleElement> extends HTMLAttributes<T> {
280
- media?: string;
281
- scoped?: boolean;
282
- type?: string;
294
+ media?: Reactive<string>;
295
+ scoped?: Reactive<boolean>;
296
+ type?: Reactive<string>;
283
297
  }
284
298
  export interface BlockquoteHTMLAttributes<T extends HTMLQuoteElement = HTMLQuoteElement> extends HTMLAttributes<T> {
285
- cite?: string;
299
+ cite?: Reactive<string>;
286
300
  }
287
301
  export interface OlHTMLAttributes<T extends HTMLOListElement = HTMLOListElement> extends HTMLAttributes<T> {
288
- reversed?: boolean;
289
- start?: number;
290
- type?: LiteralUnion<"1" | "a" | "A" | "i" | "I">;
302
+ reversed?: Reactive<boolean>;
303
+ start?: Reactive<number>;
304
+ type?: Reactive<LiteralUnion<"1" | "a" | "A" | "i" | "I">>;
291
305
  }
292
306
  export interface LiHTMLAttributes<T extends HTMLLIElement = HTMLLIElement> extends HTMLAttributes<T> {
293
- value?: number;
307
+ value?: Reactive<number>;
294
308
  }
295
309
  export interface MenuHTMLAttributes<T extends HTMLMenuElement = HTMLMenuElement> extends HTMLAttributes<T> {
296
- type?: string;
310
+ type?: Reactive<string>;
297
311
  }
298
312
  export interface AnchorHTMLAttributes<T extends HTMLAnchorElement = HTMLAnchorElement> extends HTMLAttributes<T> {
299
313
  download?: Reactive<string | boolean>;
300
314
  href?: Reactive<string>;
301
- hrefLang?: string;
302
- media?: string;
303
- ping?: string;
304
- referrerPolicy?: ReferrerPolicy;
305
- rel?: string;
315
+ hrefLang?: Reactive<string>;
316
+ media?: Reactive<string>;
317
+ ping?: Reactive<string>;
318
+ referrerPolicy?: Reactive<ReferrerPolicy>;
319
+ rel?: Reactive<string>;
306
320
  target?: Reactive<LinkTarget>;
307
- type?: string;
321
+ type?: Reactive<string>;
308
322
  }
309
323
  export interface DataHTMLAttributes<T extends HTMLDataElement = HTMLDataElement> extends HTMLAttributes<T> {
310
324
  value?: Reactive<string | number>;
@@ -313,73 +327,77 @@ export interface TimeHTMLAttributes<T extends HTMLTimeElement = HTMLTimeElement>
313
327
  dateTime?: Reactive<string>;
314
328
  }
315
329
  export interface ImgHTMLAttributes<T extends HTMLImageElement = HTMLImageElement> extends HTMLAttributes<T> {
316
- alt?: string;
317
- crossOrigin?: CrossOrigin;
318
- decoding?: Decoding;
330
+ alt?: Reactive<string>;
331
+ crossOrigin?: Reactive<CrossOrigin>;
332
+ decoding?: Reactive<Decoding>;
319
333
  height?: Reactive<number | string>;
320
- loading?: Loading;
321
- referrerPolicy?: ReferrerPolicy;
322
- sizes?: string;
334
+ loading?: Reactive<Loading>;
335
+ referrerPolicy?: Reactive<ReferrerPolicy>;
336
+ sizes?: Reactive<string>;
323
337
  src?: Reactive<string>;
324
338
  srcSet?: Reactive<string>;
325
- useMap?: string;
339
+ useMap?: Reactive<string>;
326
340
  width?: Reactive<number | string>;
327
- fetchPriority?: LiteralUnion<"high" | "low" | "auto">;
341
+ fetchPriority?: Reactive<LiteralUnion<"high" | "low" | "auto">>;
328
342
  }
329
343
  export interface IframeHTMLAttributes<T extends HTMLIFrameElement = HTMLIFrameElement> extends HTMLAttributes<T> {
330
- allow?: string;
344
+ allow?: Reactive<string>;
331
345
  allowFullScreen?: Reactive<boolean>;
332
346
  height?: Reactive<number | string>;
333
- loading?: Loading;
334
- name?: string;
335
- referrerPolicy?: ReferrerPolicy;
347
+ loading?: Reactive<Loading>;
348
+ name?: Reactive<string>;
349
+ referrerPolicy?: Reactive<ReferrerPolicy>;
336
350
  sandbox?: Reactive<string>;
337
351
  src?: Reactive<string>;
338
- srcDoc?: string;
352
+ srcDoc?: Reactive<string>;
339
353
  title?: Reactive<string>;
340
354
  width?: Reactive<number | string>;
341
355
  }
342
356
  export interface EmbedHTMLAttributes<T extends HTMLEmbedElement = HTMLEmbedElement> extends HTMLAttributes<T> {
343
357
  height?: Reactive<number | string>;
344
358
  src?: Reactive<string>;
345
- type?: string;
359
+ type?: Reactive<string>;
346
360
  width?: Reactive<number | string>;
347
361
  }
348
362
  export interface ObjectHTMLAttributes<T extends HTMLObjectElement = HTMLObjectElement> extends HTMLAttributes<T> {
349
- data?: string;
350
- form?: string;
363
+ data?: Reactive<string>;
364
+ form?: Reactive<string>;
351
365
  height?: Reactive<number | string>;
352
- name?: string;
353
- type?: string;
354
- useMap?: string;
366
+ name?: Reactive<string>;
367
+ type?: Reactive<string>;
368
+ useMap?: Reactive<string>;
355
369
  width?: Reactive<number | string>;
356
370
  }
357
371
  export interface SourceHTMLAttributes<T extends HTMLSourceElement = HTMLSourceElement> extends HTMLAttributes<T> {
358
372
  height?: Reactive<number | string>;
359
- media?: string;
360
- sizes?: string;
373
+ media?: Reactive<string>;
374
+ sizes?: Reactive<string>;
361
375
  src?: Reactive<string>;
362
376
  srcSet?: Reactive<string>;
363
- type?: string;
377
+ type?: Reactive<string>;
364
378
  width?: Reactive<number | string>;
365
379
  }
366
380
  export interface TrackHTMLAttributes<T extends HTMLTrackElement = HTMLTrackElement> extends HTMLAttributes<T> {
367
- default?: boolean;
368
- kind?: LiteralUnion<"subtitles" | "captions" | "descriptions" | "chapters" | "metadata">;
369
- label?: string;
370
- src?: string;
371
- srcLang?: string;
381
+ default?: Reactive<boolean>;
382
+ kind?: Reactive<LiteralUnion<"subtitles" | "captions" | "descriptions" | "chapters" | "metadata">>;
383
+ label?: Reactive<string>;
384
+ src?: Reactive<string>;
385
+ srcLang?: Reactive<string>;
372
386
  }
373
387
  export interface MediaHTMLAttributes<T extends HTMLMediaElement = HTMLMediaElement> extends HTMLAttributes<T> {
388
+ /**
389
+ * One-shot by spec — the browser only consults `autoplay` at insertion
390
+ * time, so it is not reactive.
391
+ */
374
392
  autoPlay?: boolean;
375
393
  controls?: Reactive<boolean>;
376
- controlsList?: string;
377
- crossOrigin?: CrossOrigin;
394
+ controlsList?: Reactive<string>;
395
+ crossOrigin?: Reactive<CrossOrigin>;
378
396
  loop?: Reactive<boolean>;
379
- mediaGroup?: string;
397
+ mediaGroup?: Reactive<string>;
380
398
  muted?: Reactive<boolean>;
381
- playsInline?: boolean;
382
- preload?: LiteralUnion<"none" | "metadata" | "auto">;
399
+ playsInline?: Reactive<boolean>;
400
+ preload?: Reactive<LiteralUnion<"none" | "metadata" | "auto">>;
383
401
  src?: Reactive<string>;
384
402
  onAbort?: (e: NativeEventOf<Event, T>) => void;
385
403
  onCanPlay?: (e: NativeEventOf<Event, T>) => void;
@@ -406,169 +424,188 @@ export interface MediaHTMLAttributes<T extends HTMLMediaElement = HTMLMediaEleme
406
424
  export type AudioHTMLAttributes<T extends HTMLAudioElement = HTMLAudioElement> = MediaHTMLAttributes<T>;
407
425
  export interface VideoHTMLAttributes<T extends HTMLVideoElement = HTMLVideoElement> extends MediaHTMLAttributes<T> {
408
426
  height?: Reactive<number | string>;
409
- playsInline?: boolean;
427
+ playsInline?: Reactive<boolean>;
410
428
  poster?: Reactive<string>;
411
429
  width?: Reactive<number | string>;
412
- disablePictureInPicture?: boolean;
413
- disableRemotePlayback?: boolean;
430
+ disablePictureInPicture?: Reactive<boolean>;
431
+ disableRemotePlayback?: Reactive<boolean>;
414
432
  }
415
433
  export interface CanvasHTMLAttributes<T extends HTMLCanvasElement = HTMLCanvasElement> extends HTMLAttributes<T> {
416
434
  height?: Reactive<number | string>;
417
435
  width?: Reactive<number | string>;
418
436
  }
419
437
  export interface MapHTMLAttributes<T extends HTMLMapElement = HTMLMapElement> extends HTMLAttributes<T> {
420
- name?: string;
438
+ name?: Reactive<string>;
421
439
  }
422
440
  export interface AreaHTMLAttributes<T extends HTMLAreaElement = HTMLAreaElement> extends HTMLAttributes<T> {
423
- alt?: string;
424
- coords?: string;
425
- download?: string;
441
+ alt?: Reactive<string>;
442
+ coords?: Reactive<string>;
443
+ download?: Reactive<string | boolean>;
426
444
  href?: Reactive<string>;
427
- hrefLang?: string;
428
- media?: string;
429
- referrerPolicy?: ReferrerPolicy;
430
- rel?: string;
431
- shape?: string;
445
+ hrefLang?: Reactive<string>;
446
+ media?: Reactive<string>;
447
+ referrerPolicy?: Reactive<ReferrerPolicy>;
448
+ rel?: Reactive<string>;
449
+ shape?: Reactive<string>;
432
450
  target?: Reactive<LinkTarget>;
433
451
  }
434
452
  export interface FormHTMLAttributes<T extends HTMLFormElement = HTMLFormElement> extends HTMLAttributes<T> {
435
- acceptCharset?: string;
453
+ acceptCharset?: Reactive<string>;
436
454
  action?: Reactive<string>;
437
- autoComplete?: string;
438
- encType?: FormEncType;
439
- method?: FormMethod;
440
- name?: string;
441
- noValidate?: boolean;
442
- target?: LinkTarget;
443
- rel?: string;
455
+ autoComplete?: Reactive<string>;
456
+ encType?: Reactive<FormEncType>;
457
+ method?: Reactive<FormMethod>;
458
+ name?: Reactive<string>;
459
+ noValidate?: Reactive<boolean>;
460
+ target?: Reactive<LinkTarget>;
461
+ rel?: Reactive<string>;
444
462
  }
445
463
  export interface FieldsetHTMLAttributes<T extends HTMLFieldSetElement = HTMLFieldSetElement> extends HTMLAttributes<T> {
446
464
  disabled?: Reactive<boolean>;
447
- form?: string;
448
- name?: string;
465
+ form?: Reactive<string>;
466
+ name?: Reactive<string>;
449
467
  }
450
468
  export interface InputHTMLAttributes<T extends HTMLInputElement = HTMLInputElement> extends HTMLAttributes<T> {
451
- accept?: string;
452
- alt?: string;
453
- autoComplete?: LiteralUnion<string>;
469
+ accept?: Reactive<string>;
470
+ alt?: Reactive<string>;
471
+ autoComplete?: Reactive<LiteralUnion<string>>;
472
+ /**
473
+ * Autofocus on mount. One-shot by spec — the browser only consults this
474
+ * at insertion time, so it is not reactive.
475
+ */
454
476
  autoFocus?: boolean;
455
- capture?: boolean | LiteralUnion<"user" | "environment">;
477
+ capture?: Reactive<boolean | LiteralUnion<"user" | "environment">>;
456
478
  checked?: Reactive<boolean>;
457
- crossOrigin?: CrossOrigin;
479
+ crossOrigin?: Reactive<CrossOrigin>;
480
+ /** Uncontrolled-baseline value, set once on mount — not reactive. */
458
481
  defaultChecked?: boolean;
482
+ /** Uncontrolled-baseline value, set once on mount — not reactive. */
459
483
  defaultValue?: string | number | readonly string[];
460
- dirName?: string;
484
+ dirName?: Reactive<string>;
461
485
  disabled?: Reactive<boolean>;
462
486
  enterKeyHint?: Reactive<EnterKeyHint>;
463
- form?: string;
464
- formAction?: string;
465
- formEncType?: FormEncType;
466
- formMethod?: FormMethod;
467
- formNoValidate?: boolean;
468
- formTarget?: string;
487
+ form?: Reactive<string>;
488
+ formAction?: Reactive<string>;
489
+ formEncType?: Reactive<FormEncType>;
490
+ formMethod?: Reactive<FormMethod>;
491
+ formNoValidate?: Reactive<boolean>;
492
+ formTarget?: Reactive<string>;
469
493
  height?: Reactive<number | string>;
470
- list?: string;
494
+ list?: Reactive<string>;
471
495
  max?: Reactive<number | string>;
472
- maxLength?: number;
496
+ maxLength?: Reactive<number>;
473
497
  min?: Reactive<number | string>;
474
- minLength?: number;
475
- multiple?: boolean;
476
- name?: string;
477
- pattern?: string;
498
+ minLength?: Reactive<number>;
499
+ multiple?: Reactive<boolean>;
500
+ name?: Reactive<string>;
501
+ pattern?: Reactive<string>;
478
502
  placeholder?: Reactive<string>;
479
503
  readOnly?: Reactive<boolean>;
480
504
  required?: Reactive<boolean>;
481
- size?: number;
482
- src?: string;
505
+ size?: Reactive<number>;
506
+ src?: Reactive<string>;
483
507
  step?: Reactive<number | string>;
484
508
  type?: Reactive<HTMLInputTypeAttribute>;
485
509
  value?: Reactive<string | number | readonly string[]>;
486
510
  width?: Reactive<number | string>;
487
- popovertarget?: string;
488
- popovertargetaction?: LiteralUnion<"hide" | "show" | "toggle">;
511
+ popovertarget?: Reactive<string>;
512
+ popovertargetaction?: Reactive<LiteralUnion<"hide" | "show" | "toggle">>;
489
513
  }
490
514
  export interface ButtonHTMLAttributes<T extends HTMLButtonElement = HTMLButtonElement> extends HTMLAttributes<T> {
515
+ /**
516
+ * Autofocus on mount. One-shot by spec — the browser only consults this
517
+ * at insertion time, so it is not reactive.
518
+ */
491
519
  autoFocus?: boolean;
492
520
  disabled?: Reactive<boolean>;
493
- form?: string;
494
- formAction?: string;
495
- formEncType?: FormEncType;
496
- formMethod?: FormMethod;
497
- formNoValidate?: boolean;
498
- formTarget?: string;
499
- name?: string;
521
+ form?: Reactive<string>;
522
+ formAction?: Reactive<string>;
523
+ formEncType?: Reactive<FormEncType>;
524
+ formMethod?: Reactive<FormMethod>;
525
+ formNoValidate?: Reactive<boolean>;
526
+ formTarget?: Reactive<string>;
527
+ name?: Reactive<string>;
500
528
  type?: Reactive<ButtonType>;
501
529
  value?: Reactive<string>;
502
- popovertarget?: string;
503
- popovertargetaction?: LiteralUnion<"hide" | "show" | "toggle">;
530
+ popovertarget?: Reactive<string>;
531
+ popovertargetaction?: Reactive<LiteralUnion<"hide" | "show" | "toggle">>;
504
532
  }
505
533
  export interface LabelHTMLAttributes<T extends HTMLLabelElement = HTMLLabelElement> extends HTMLAttributes<T> {
506
- form?: string;
507
- htmlFor?: string;
534
+ form?: Reactive<string>;
535
+ htmlFor?: Reactive<string>;
508
536
  /** DOM attribute alias for `htmlFor`. */
509
- for?: string;
537
+ for?: Reactive<string>;
510
538
  }
511
539
  export interface SelectHTMLAttributes<T extends HTMLSelectElement = HTMLSelectElement> extends HTMLAttributes<T> {
512
- autoComplete?: string;
540
+ autoComplete?: Reactive<string>;
541
+ /**
542
+ * Autofocus on mount. One-shot by spec — the browser only consults this
543
+ * at insertion time, so it is not reactive.
544
+ */
513
545
  autoFocus?: boolean;
514
546
  disabled?: Reactive<boolean>;
515
- form?: string;
516
- multiple?: boolean;
517
- name?: string;
547
+ form?: Reactive<string>;
548
+ multiple?: Reactive<boolean>;
549
+ name?: Reactive<string>;
518
550
  required?: Reactive<boolean>;
519
- size?: number;
551
+ size?: Reactive<number>;
520
552
  value?: Reactive<string | number | readonly string[]>;
521
553
  }
522
554
  export interface OptgroupHTMLAttributes<T extends HTMLOptGroupElement = HTMLOptGroupElement> extends HTMLAttributes<T> {
523
555
  disabled?: Reactive<boolean>;
524
- label?: string;
556
+ label?: Reactive<string>;
525
557
  }
526
558
  export interface OptionHTMLAttributes<T extends HTMLOptionElement = HTMLOptionElement> extends HTMLAttributes<T> {
527
559
  disabled?: Reactive<boolean>;
528
- label?: string;
560
+ label?: Reactive<string>;
529
561
  selected?: Reactive<boolean>;
530
562
  value?: Reactive<string | number>;
531
563
  }
532
564
  export interface OutputHTMLAttributes<T extends HTMLOutputElement = HTMLOutputElement> extends HTMLAttributes<T> {
533
- form?: string;
534
- htmlFor?: string;
535
- name?: string;
565
+ form?: Reactive<string>;
566
+ htmlFor?: Reactive<string>;
567
+ name?: Reactive<string>;
536
568
  }
537
569
  export interface TextareaHTMLAttributes<T extends HTMLTextAreaElement = HTMLTextAreaElement> extends HTMLAttributes<T> {
538
- autoComplete?: string;
570
+ autoComplete?: Reactive<string>;
571
+ /**
572
+ * Autofocus on mount. One-shot by spec — the browser only consults this
573
+ * at insertion time, so it is not reactive.
574
+ */
539
575
  autoFocus?: boolean;
540
- cols?: number;
576
+ cols?: Reactive<number>;
577
+ /** Uncontrolled-baseline value, set once on mount — not reactive. */
541
578
  defaultValue?: string;
542
- dirName?: string;
579
+ dirName?: Reactive<string>;
543
580
  disabled?: Reactive<boolean>;
544
- form?: string;
545
- maxLength?: number;
546
- minLength?: number;
547
- name?: string;
581
+ form?: Reactive<string>;
582
+ maxLength?: Reactive<number>;
583
+ minLength?: Reactive<number>;
584
+ name?: Reactive<string>;
548
585
  placeholder?: Reactive<string>;
549
586
  readOnly?: Reactive<boolean>;
550
587
  required?: Reactive<boolean>;
551
- rows?: number;
588
+ rows?: Reactive<number>;
552
589
  value?: Reactive<string>;
553
- wrap?: LiteralUnion<"hard" | "soft" | "off">;
590
+ wrap?: Reactive<LiteralUnion<"hard" | "soft" | "off">>;
554
591
  }
555
592
  export interface MeterHTMLAttributes<T extends HTMLMeterElement = HTMLMeterElement> extends HTMLAttributes<T> {
556
- form?: string;
557
- high?: number;
558
- low?: number;
593
+ form?: Reactive<string>;
594
+ high?: Reactive<number>;
595
+ low?: Reactive<number>;
559
596
  max?: Reactive<number | string>;
560
597
  min?: Reactive<number | string>;
561
- optimum?: number;
598
+ optimum?: Reactive<number>;
562
599
  value?: Reactive<string | number>;
563
600
  }
564
601
  export interface ProgressHTMLAttributes<T extends HTMLProgressElement = HTMLProgressElement> extends HTMLAttributes<T> {
565
- max?: number | string;
602
+ max?: Reactive<number | string>;
566
603
  value?: Reactive<string | number>;
567
604
  }
568
605
  export type DatalistHTMLAttributes<T extends HTMLDataListElement = HTMLDataListElement> = HTMLAttributes<T>;
569
606
  export interface DetailsHTMLAttributes<T extends HTMLDetailsElement = HTMLDetailsElement> extends HTMLAttributes<T> {
570
607
  open?: Reactive<boolean>;
571
- name?: string;
608
+ name?: Reactive<string>;
572
609
  onToggle?: (e: NativeEventOf<Event, T>) => void;
573
610
  onBeforeToggle?: (e: NativeEventOf<Event, T>) => void;
574
611
  }
@@ -580,47 +617,47 @@ export interface DialogHTMLAttributes<T extends HTMLDialogElement = HTMLDialogEl
580
617
  onBeforeToggle?: (e: NativeEventOf<Event, T>) => void;
581
618
  }
582
619
  export interface SlotHTMLAttributes<T extends HTMLSlotElement = HTMLSlotElement> extends HTMLAttributes<T> {
583
- name?: string;
620
+ name?: Reactive<string>;
584
621
  }
585
622
  export interface TableHTMLAttributes<T extends HTMLTableElement = HTMLTableElement> extends HTMLAttributes<T> {
586
- cellPadding?: number | string;
587
- cellSpacing?: number | string;
588
- summary?: string;
589
- width?: number | string;
623
+ cellPadding?: Reactive<number | string>;
624
+ cellSpacing?: Reactive<number | string>;
625
+ summary?: Reactive<string>;
626
+ width?: Reactive<number | string>;
590
627
  }
591
628
  export interface ColHTMLAttributes<T extends HTMLTableColElement = HTMLTableColElement> extends HTMLAttributes<T> {
592
- span?: number;
593
- width?: number | string;
629
+ span?: Reactive<number>;
630
+ width?: Reactive<number | string>;
594
631
  }
595
632
  export interface ColgroupHTMLAttributes<T extends HTMLTableColElement = HTMLTableColElement> extends HTMLAttributes<T> {
596
- span?: number;
633
+ span?: Reactive<number>;
597
634
  }
598
635
  export interface TdHTMLAttributes<T extends HTMLTableCellElement = HTMLTableCellElement> extends HTMLAttributes<T> {
599
- align?: LiteralUnion<"left" | "center" | "right" | "justify" | "char">;
600
- colSpan?: number;
601
- headers?: string;
602
- rowSpan?: number;
603
- scope?: LiteralUnion<"col" | "row" | "colgroup" | "rowgroup">;
604
- abbr?: string;
605
- height?: number | string;
606
- width?: number | string;
607
- valign?: LiteralUnion<"top" | "middle" | "bottom" | "baseline">;
636
+ align?: Reactive<LiteralUnion<"left" | "center" | "right" | "justify" | "char">>;
637
+ colSpan?: Reactive<number>;
638
+ headers?: Reactive<string>;
639
+ rowSpan?: Reactive<number>;
640
+ scope?: Reactive<LiteralUnion<"col" | "row" | "colgroup" | "rowgroup">>;
641
+ abbr?: Reactive<string>;
642
+ height?: Reactive<number | string>;
643
+ width?: Reactive<number | string>;
644
+ valign?: Reactive<LiteralUnion<"top" | "middle" | "bottom" | "baseline">>;
608
645
  }
609
646
  export interface ThHTMLAttributes<T extends HTMLTableCellElement = HTMLTableCellElement> extends HTMLAttributes<T> {
610
- align?: LiteralUnion<"left" | "center" | "right" | "justify" | "char">;
611
- colSpan?: number;
612
- headers?: string;
613
- rowSpan?: number;
614
- scope?: LiteralUnion<"col" | "row" | "colgroup" | "rowgroup">;
615
- abbr?: string;
647
+ align?: Reactive<LiteralUnion<"left" | "center" | "right" | "justify" | "char">>;
648
+ colSpan?: Reactive<number>;
649
+ headers?: Reactive<string>;
650
+ rowSpan?: Reactive<number>;
651
+ scope?: Reactive<LiteralUnion<"col" | "row" | "colgroup" | "rowgroup">>;
652
+ abbr?: Reactive<string>;
616
653
  }
617
654
  export interface DelHTMLAttributes<T extends HTMLModElement = HTMLModElement> extends HTMLAttributes<T> {
618
- cite?: string;
619
- dateTime?: string;
655
+ cite?: Reactive<string>;
656
+ dateTime?: Reactive<string>;
620
657
  }
621
658
  export interface InsHTMLAttributes<T extends HTMLModElement = HTMLModElement> extends HTMLAttributes<T> {
622
- cite?: string;
623
- dateTime?: string;
659
+ cite?: Reactive<string>;
660
+ dateTime?: Reactive<string>;
624
661
  }
625
662
  export interface SVGAttributes<T extends Element = SVGElement> extends AriaAttributes, DOMAttributes<T> {
626
663
  id?: Reactive<string>;