ripple 0.2.208 → 0.2.210

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.
Files changed (108) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/README.md +2 -1
  3. package/package.json +2 -6
  4. package/shims/rollup-estree-types.d.ts +1 -1
  5. package/src/compiler/index.d.ts +1 -0
  6. package/src/compiler/index.js +7 -1
  7. package/src/compiler/phases/1-parse/index.js +15 -6
  8. package/src/compiler/phases/2-analyze/css-analyze.js +100 -104
  9. package/src/compiler/phases/2-analyze/index.js +215 -2
  10. package/src/compiler/phases/3-transform/client/index.js +388 -50
  11. package/src/compiler/phases/3-transform/segments.js +123 -39
  12. package/src/compiler/phases/3-transform/server/index.js +266 -13
  13. package/src/compiler/types/index.d.ts +16 -3
  14. package/src/compiler/utils.js +1 -15
  15. package/src/constants.js +0 -2
  16. package/src/helpers.d.ts +4 -0
  17. package/src/html-tree-validation.js +211 -0
  18. package/src/jsx-runtime.d.ts +260 -259
  19. package/src/jsx-runtime.js +12 -12
  20. package/src/runtime/array.js +17 -17
  21. package/src/runtime/create-subscriber.js +1 -1
  22. package/src/runtime/index-client.js +1 -5
  23. package/src/runtime/index-server.js +15 -0
  24. package/src/runtime/internal/client/compat.js +3 -3
  25. package/src/runtime/internal/client/composite.js +6 -1
  26. package/src/runtime/internal/client/head.js +50 -4
  27. package/src/runtime/internal/client/html.js +73 -12
  28. package/src/runtime/internal/client/hydration.js +12 -0
  29. package/src/runtime/internal/client/index.js +1 -1
  30. package/src/runtime/internal/client/portal.js +54 -29
  31. package/src/runtime/internal/client/rpc.js +3 -1
  32. package/src/runtime/internal/client/switch.js +5 -0
  33. package/src/runtime/internal/client/template.js +117 -11
  34. package/src/runtime/internal/client/try.js +1 -0
  35. package/src/runtime/internal/server/index.js +113 -1
  36. package/src/runtime/internal/server/rpc.js +4 -4
  37. package/src/runtime/map.js +2 -2
  38. package/src/runtime/object.js +6 -6
  39. package/src/runtime/proxy.js +12 -11
  40. package/src/runtime/reactive-value.js +9 -1
  41. package/src/runtime/set.js +12 -7
  42. package/src/runtime/url-search-params.js +0 -1
  43. package/src/server/index.js +4 -0
  44. package/src/utils/hashing.js +15 -0
  45. package/src/utils/normalize_css_property_name.js +1 -1
  46. package/tests/client/array/array.mutations.test.ripple +8 -8
  47. package/tests/client/basic/basic.errors.test.ripple +28 -0
  48. package/tests/client/basic/basic.events.test.ripple +6 -3
  49. package/tests/client/basic/basic.utilities.test.ripple +1 -1
  50. package/tests/client/compiler/compiler.regex.test.ripple +10 -8
  51. package/tests/client/composite/composite.generics.test.ripple +5 -2
  52. package/tests/client/dynamic-elements.test.ripple +30 -1
  53. package/tests/client/function-overload-import.ripple +6 -7
  54. package/tests/client/html.test.ripple +0 -1
  55. package/tests/client/object.test.ripple +2 -2
  56. package/tests/client/portal.test.ripple +3 -3
  57. package/tests/client/return.test.ripple +2500 -0
  58. package/tests/client/try.test.ripple +69 -0
  59. package/tests/client/typescript-generics.test.ripple +1 -1
  60. package/tests/client/url/url.derived.test.ripple +1 -1
  61. package/tests/client/url/url.parsing.test.ripple +3 -3
  62. package/tests/client/url/url.partial-removal.test.ripple +7 -7
  63. package/tests/client/url/url.reactivity.test.ripple +15 -15
  64. package/tests/client/url/url.serialization.test.ripple +2 -2
  65. package/tests/hydration/basic.test.js +23 -0
  66. package/tests/hydration/build-components.js +10 -4
  67. package/tests/hydration/compiled/client/basic.js +165 -3
  68. package/tests/hydration/compiled/client/for.js +1140 -23
  69. package/tests/hydration/compiled/client/head.js +234 -0
  70. package/tests/hydration/compiled/client/html.js +135 -0
  71. package/tests/hydration/compiled/client/portal.js +172 -0
  72. package/tests/hydration/compiled/client/reactivity.js +3 -1
  73. package/tests/hydration/compiled/client/return.js +1976 -0
  74. package/tests/hydration/compiled/client/switch.js +162 -0
  75. package/tests/hydration/compiled/server/basic.js +249 -0
  76. package/tests/hydration/compiled/server/events.js +1 -1
  77. package/tests/hydration/compiled/server/for.js +891 -1
  78. package/tests/hydration/compiled/server/head.js +291 -0
  79. package/tests/hydration/compiled/server/html.js +133 -0
  80. package/tests/hydration/compiled/server/if.js +1 -1
  81. package/tests/hydration/compiled/server/portal.js +250 -0
  82. package/tests/hydration/compiled/server/reactivity.js +1 -1
  83. package/tests/hydration/compiled/server/return.js +1969 -0
  84. package/tests/hydration/compiled/server/switch.js +130 -0
  85. package/tests/hydration/components/basic.ripple +55 -0
  86. package/tests/hydration/components/for.ripple +403 -0
  87. package/tests/hydration/components/head.ripple +111 -0
  88. package/tests/hydration/components/html.ripple +38 -0
  89. package/tests/hydration/components/portal.ripple +49 -0
  90. package/tests/hydration/components/return.ripple +564 -0
  91. package/tests/hydration/components/switch.ripple +51 -0
  92. package/tests/hydration/for.test.js +363 -0
  93. package/tests/hydration/head.test.js +105 -0
  94. package/tests/hydration/html.test.js +46 -0
  95. package/tests/hydration/portal.test.js +71 -0
  96. package/tests/hydration/return.test.js +544 -0
  97. package/tests/hydration/switch.test.js +42 -0
  98. package/tests/server/basic.attributes.test.ripple +1 -1
  99. package/tests/server/compiler.test.ripple +22 -0
  100. package/tests/server/composite.test.ripple +5 -2
  101. package/tests/server/html-nesting-validation.test.ripple +237 -0
  102. package/tests/server/return.test.ripple +1379 -0
  103. package/tests/setup-hydration.js +6 -1
  104. package/tests/utils/escaping.test.js +3 -1
  105. package/tests/utils/normalize_css_property_name.test.js +0 -1
  106. package/tests/utils/patterns.test.js +6 -2
  107. package/tests/utils/sanitize_template_string.test.js +3 -2
  108. package/types/server.d.ts +16 -0
@@ -1,4 +1,5 @@
1
1
  import type { AddEventObject } from '#public';
2
+ import type { Nullable } from '#helpers';
2
3
 
3
4
  /**
4
5
  * Ripple JSX Runtime Type Definitions
@@ -45,24 +46,24 @@ export type ClassValue = string | import('clsx').ClassArray | import('clsx').Cla
45
46
  // Base HTML attributes
46
47
  interface HTMLAttributes {
47
48
  class?: ClassValue | undefined | null;
48
- className?: string;
49
- id?: string;
50
- style?: string | Record<string, string | number>;
51
- title?: string;
52
- lang?: string;
49
+ className?: Nullable<string>;
50
+ id?: Nullable<string>;
51
+ style?: Nullable<string> | Record<string, string | number>;
52
+ title?: Nullable<string>;
53
+ lang?: Nullable<string>;
53
54
  dir?: 'ltr' | 'rtl' | 'auto';
54
- tabIndex?: number;
55
+ tabIndex?: Nullable<number>;
55
56
  contentEditable?: boolean | 'true' | 'false' | 'inherit';
56
57
  draggable?: boolean;
57
58
  hidden?: boolean;
58
59
  spellCheck?: boolean;
59
60
  translate?: 'yes' | 'no';
60
- role?: string;
61
+ role?: Nullable<string>;
61
62
 
62
63
  // ARIA attributes
63
- 'aria-label'?: string;
64
- 'aria-labelledby'?: string;
65
- 'aria-describedby'?: string;
64
+ 'aria-label'?: Nullable<string>;
65
+ 'aria-labelledby'?: Nullable<string>;
66
+ 'aria-describedby'?: Nullable<string>;
66
67
  'aria-hidden'?: boolean | 'true' | 'false';
67
68
  'aria-expanded'?: boolean | 'true' | 'false';
68
69
  'aria-pressed'?: boolean | 'true' | 'false' | 'mixed';
@@ -74,13 +75,13 @@ interface HTMLAttributes {
74
75
  'aria-live'?: 'off' | 'polite' | 'assertive';
75
76
  'aria-atomic'?: boolean | 'true' | 'false';
76
77
  'aria-busy'?: boolean | 'true' | 'false';
77
- 'aria-controls'?: string;
78
+ 'aria-controls'?: Nullable<string>;
78
79
  'aria-current'?: boolean | 'true' | 'false' | 'page' | 'step' | 'location' | 'date' | 'time';
79
- 'aria-owns'?: string;
80
- 'aria-valuemin'?: number;
81
- 'aria-valuemax'?: number;
82
- 'aria-valuenow'?: number;
83
- 'aria-valuetext'?: string;
80
+ 'aria-owns'?: Nullable<string>;
81
+ 'aria-valuemin'?: Nullable<number>;
82
+ 'aria-valuemax'?: Nullable<number>;
83
+ 'aria-valuenow'?: Nullable<number>;
84
+ 'aria-valuetext'?: Nullable<string>;
84
85
 
85
86
  // Event handlers
86
87
  onClick?: EventListener | AddEventObject;
@@ -131,17 +132,17 @@ interface HTMLAttributes {
131
132
  // SVG common attributes
132
133
  interface SVGAttributes {
133
134
  // Core attributes
134
- id?: string;
135
- lang?: string;
136
- tabIndex?: number;
137
- xmlBase?: string;
138
- xmlLang?: string;
139
- xmlSpace?: string;
135
+ id?: Nullable<string>;
136
+ lang?: Nullable<string>;
137
+ tabIndex?: Nullable<number>;
138
+ xmlBase?: Nullable<string>;
139
+ xmlLang?: Nullable<string>;
140
+ xmlSpace?: Nullable<string>;
140
141
 
141
142
  // Styling
142
143
  class?: ClassValue | undefined | null;
143
- className?: string;
144
- style?: string | Record<string, string | number>;
144
+ className?: Nullable<string>;
145
+ style?: Nullable<string> | Record<string, string | number>;
145
146
 
146
147
  // Presentation attributes
147
148
  alignmentBaseline?:
@@ -159,15 +160,15 @@ interface SVGAttributes {
159
160
  | 'mathematical'
160
161
  | 'inherit';
161
162
  baselineShift?: string | number;
162
- clip?: string;
163
- clipPath?: string;
163
+ clip?: Nullable<string>;
164
+ clipPath?: Nullable<string>;
164
165
  clipRule?: 'nonzero' | 'evenodd' | 'inherit';
165
- color?: string;
166
+ color?: Nullable<string>;
166
167
  colorInterpolation?: 'auto' | 'sRGB' | 'linearRGB' | 'inherit';
167
168
  colorInterpolationFilters?: 'auto' | 'sRGB' | 'linearRGB' | 'inherit';
168
- cursor?: string;
169
+ cursor?: Nullable<string>;
169
170
  direction?: 'ltr' | 'rtl' | 'inherit';
170
- display?: string;
171
+ display?: Nullable<string>;
171
172
  dominantBaseline?:
172
173
  | 'auto'
173
174
  | 'text-bottom'
@@ -179,28 +180,28 @@ interface SVGAttributes {
179
180
  | 'hanging'
180
181
  | 'text-top'
181
182
  | 'inherit';
182
- fill?: string;
183
+ fill?: Nullable<string>;
183
184
  fillOpacity?: number | string;
184
185
  fillRule?: 'nonzero' | 'evenodd' | 'inherit';
185
- filter?: string;
186
- floodColor?: string;
186
+ filter?: Nullable<string>;
187
+ floodColor?: Nullable<string>;
187
188
  floodOpacity?: number | string;
188
- fontFamily?: string;
189
+ fontFamily?: Nullable<string>;
189
190
  fontSize?: string | number;
190
191
  fontSizeAdjust?: string | number;
191
- fontStretch?: string;
192
+ fontStretch?: Nullable<string>;
192
193
  fontStyle?: 'normal' | 'italic' | 'oblique' | 'inherit';
193
- fontVariant?: string;
194
+ fontVariant?: Nullable<string>;
194
195
  fontWeight?: string | number;
195
- glyphOrientationHorizontal?: string;
196
- glyphOrientationVertical?: string;
196
+ glyphOrientationHorizontal?: Nullable<string>;
197
+ glyphOrientationVertical?: Nullable<string>;
197
198
  imageRendering?: 'auto' | 'optimizeSpeed' | 'optimizeQuality' | 'inherit';
198
199
  letterSpacing?: string | number;
199
- lightingColor?: string;
200
- markerEnd?: string;
201
- markerMid?: string;
202
- markerStart?: string;
203
- mask?: string;
200
+ lightingColor?: Nullable<string>;
201
+ markerEnd?: Nullable<string>;
202
+ markerMid?: Nullable<string>;
203
+ markerStart?: Nullable<string>;
204
+ mask?: Nullable<string>;
204
205
  opacity?: number | string;
205
206
  overflow?: 'visible' | 'hidden' | 'scroll' | 'auto' | 'inherit';
206
207
  pointerEvents?:
@@ -216,9 +217,9 @@ interface SVGAttributes {
216
217
  | 'none'
217
218
  | 'inherit';
218
219
  shapeRendering?: 'auto' | 'optimizeSpeed' | 'crispEdges' | 'geometricPrecision' | 'inherit';
219
- stopColor?: string;
220
+ stopColor?: Nullable<string>;
220
221
  stopOpacity?: number | string;
221
- stroke?: string;
222
+ stroke?: Nullable<string>;
222
223
  strokeDasharray?: string | number;
223
224
  strokeDashoffset?: string | number;
224
225
  strokeLinecap?: 'butt' | 'round' | 'square' | 'inherit';
@@ -227,15 +228,15 @@ interface SVGAttributes {
227
228
  strokeOpacity?: number | string;
228
229
  strokeWidth?: string | number;
229
230
  textAnchor?: 'start' | 'middle' | 'end' | 'inherit';
230
- textDecoration?: string;
231
+ textDecoration?: Nullable<string>;
231
232
  textRendering?:
232
233
  | 'auto'
233
234
  | 'optimizeSpeed'
234
235
  | 'optimizeLegibility'
235
236
  | 'geometricPrecision'
236
237
  | 'inherit';
237
- transform?: string;
238
- transformOrigin?: string;
238
+ transform?: Nullable<string>;
239
+ transformOrigin?: Nullable<string>;
239
240
  unicodeBidi?:
240
241
  | 'normal'
241
242
  | 'embed'
@@ -259,10 +260,10 @@ interface SVGAttributes {
259
260
  height?: string | number;
260
261
  x?: string | number;
261
262
  y?: string | number;
262
- viewBox?: string;
263
- preserveAspectRatio?: string;
264
- xmlns?: string;
265
- 'xmlns:xlink'?: string;
263
+ viewBox?: Nullable<string>;
264
+ preserveAspectRatio?: Nullable<string>;
265
+ xmlns?: Nullable<string>;
266
+ 'xmlns:xlink'?: Nullable<string>;
266
267
 
267
268
  // Event handlers (inherited from HTML but included for clarity)
268
269
  onClick?: EventListener | AddEventObject;
@@ -284,21 +285,21 @@ interface SVGAttributes {
284
285
 
285
286
  // SVG animation attributes
286
287
  interface SVGAnimationAttributes {
287
- attributeName?: string;
288
+ attributeName?: Nullable<string>;
288
289
  attributeType?: 'CSS' | 'XML' | 'auto';
289
- begin?: string;
290
- dur?: string;
291
- end?: string;
292
- min?: string;
293
- max?: string;
290
+ begin?: Nullable<string>;
291
+ dur?: Nullable<string>;
292
+ end?: Nullable<string>;
293
+ min?: Nullable<string>;
294
+ max?: Nullable<string>;
294
295
  restart?: 'always' | 'whenNotActive' | 'never';
295
296
  repeatCount?: number | 'indefinite';
296
- repeatDur?: string;
297
+ repeatDur?: Nullable<string>;
297
298
  fill?: 'freeze' | 'remove';
298
299
  calcMode?: 'discrete' | 'linear' | 'paced' | 'spline';
299
- values?: string;
300
- keyTimes?: string;
301
- keySplines?: string;
300
+ values?: Nullable<string>;
301
+ keyTimes?: Nullable<string>;
302
+ keySplines?: Nullable<string>;
302
303
  from?: string | number;
303
304
  to?: string | number;
304
305
  by?: string | number;
@@ -309,16 +310,16 @@ interface SVGAnimationAttributes {
309
310
  // SVG gradient attributes
310
311
  interface SVGGradientAttributes extends SVGAttributes {
311
312
  gradientUnits?: 'userSpaceOnUse' | 'objectBoundingBox';
312
- gradientTransform?: string;
313
+ gradientTransform?: Nullable<string>;
313
314
  spreadMethod?: 'pad' | 'reflect' | 'repeat';
314
- href?: string;
315
- 'xlink:href'?: string;
315
+ href?: Nullable<string>;
316
+ 'xlink:href'?: Nullable<string>;
316
317
  }
317
318
 
318
319
  // SVG filter primitive attributes
319
320
  interface SVGFilterAttributes {
320
- in?: string;
321
- result?: string;
321
+ in?: Nullable<string>;
322
+ result?: Nullable<string>;
322
323
  x?: string | number;
323
324
  y?: string | number;
324
325
  width?: string | number;
@@ -328,12 +329,12 @@ interface SVGFilterAttributes {
328
329
  // SVG transfer function attributes (for feFuncR, feFuncG, feFuncB, feFuncA)
329
330
  interface SVGTransferFunctionAttributes {
330
331
  type?: 'identity' | 'table' | 'discrete' | 'linear' | 'gamma';
331
- tableValues?: string;
332
- slope?: number;
333
- intercept?: number;
334
- amplitude?: number;
335
- exponent?: number;
336
- offset?: number;
332
+ tableValues?: Nullable<string>;
333
+ slope?: Nullable<number>;
334
+ intercept?: Nullable<number>;
335
+ amplitude?: Nullable<number>;
336
+ exponent?: Nullable<number>;
337
+ offset?: Nullable<number>;
337
338
  }
338
339
 
339
340
  // SVG text attributes
@@ -358,28 +359,28 @@ declare global {
358
359
  head: HTMLAttributes;
359
360
  title: HTMLAttributes;
360
361
  base: HTMLAttributes & {
361
- href?: string;
362
- target?: string;
362
+ href?: Nullable<string>;
363
+ target?: Nullable<string>;
363
364
  };
364
365
  link: HTMLAttributes & {
365
- rel?: string;
366
- href?: string;
367
- type?: string;
368
- media?: string;
369
- as?: string;
366
+ rel?: Nullable<string>;
367
+ href?: Nullable<string>;
368
+ type?: Nullable<string>;
369
+ media?: Nullable<string>;
370
+ as?: Nullable<string>;
370
371
  crossOrigin?: 'anonymous' | 'use-credentials';
371
- integrity?: string;
372
+ integrity?: Nullable<string>;
372
373
  };
373
374
  meta: HTMLAttributes & {
374
- name?: string;
375
- content?: string;
376
- charSet?: string;
377
- httpEquiv?: string;
378
- property?: string;
375
+ name?: Nullable<string>;
376
+ content?: Nullable<string>;
377
+ charSet?: Nullable<string>;
378
+ httpEquiv?: Nullable<string>;
379
+ property?: Nullable<string>;
379
380
  };
380
381
  style: HTMLAttributes & {
381
- type?: string;
382
- media?: string;
382
+ type?: Nullable<string>;
383
+ media?: Nullable<string>;
383
384
  };
384
385
 
385
386
  // Sectioning root
@@ -405,7 +406,7 @@ declare global {
405
406
 
406
407
  // Text content
407
408
  blockquote: HTMLAttributes & {
408
- cite?: string;
409
+ cite?: Nullable<string>;
409
410
  };
410
411
  dd: HTMLAttributes;
411
412
  div: HTMLAttributes;
@@ -415,12 +416,12 @@ declare global {
415
416
  figure: HTMLAttributes;
416
417
  hr: HTMLAttributes;
417
418
  li: HTMLAttributes & {
418
- value?: number;
419
+ value?: Nullable<number>;
419
420
  };
420
421
  menu: HTMLAttributes;
421
422
  ol: HTMLAttributes & {
422
423
  reversed?: boolean;
423
- start?: number;
424
+ start?: Nullable<number>;
424
425
  type?: '1' | 'a' | 'A' | 'i' | 'I';
425
426
  };
426
427
  p: HTMLAttributes;
@@ -429,13 +430,13 @@ declare global {
429
430
 
430
431
  // Inline text semantics
431
432
  a: HTMLAttributes & {
432
- href?: string;
433
- target?: string;
434
- rel?: string;
433
+ href?: Nullable<string>;
434
+ target?: Nullable<string>;
435
+ rel?: Nullable<string>;
435
436
  download?: string | boolean;
436
- hrefLang?: string;
437
- type?: string;
438
- referrerPolicy?: string;
437
+ hrefLang?: Nullable<string>;
438
+ type?: Nullable<string>;
439
+ referrerPolicy?: Nullable<string>;
439
440
  };
440
441
  abbr: HTMLAttributes;
441
442
  b: HTMLAttributes;
@@ -445,7 +446,7 @@ declare global {
445
446
  cite: HTMLAttributes;
446
447
  code: HTMLAttributes;
447
448
  data: HTMLAttributes & {
448
- value?: string;
449
+ value?: Nullable<string>;
449
450
  };
450
451
  dfn: HTMLAttributes;
451
452
  em: HTMLAttributes;
@@ -453,7 +454,7 @@ declare global {
453
454
  kbd: HTMLAttributes;
454
455
  mark: HTMLAttributes;
455
456
  q: HTMLAttributes & {
456
- cite?: string;
457
+ cite?: Nullable<string>;
457
458
  };
458
459
  rp: HTMLAttributes;
459
460
  rt: HTMLAttributes;
@@ -466,7 +467,7 @@ declare global {
466
467
  sub: HTMLAttributes;
467
468
  sup: HTMLAttributes;
468
469
  time: HTMLAttributes & {
469
- dateTime?: string;
470
+ dateTime?: Nullable<string>;
470
471
  };
471
472
  u: HTMLAttributes;
472
473
  var: HTMLAttributes;
@@ -474,18 +475,18 @@ declare global {
474
475
 
475
476
  // Image and multimedia
476
477
  area: HTMLAttributes & {
477
- alt?: string;
478
- coords?: string;
479
- download?: string;
480
- href?: string;
481
- hrefLang?: string;
482
- media?: string;
483
- rel?: string;
478
+ alt?: Nullable<string>;
479
+ coords?: Nullable<string>;
480
+ download?: Nullable<string>;
481
+ href?: Nullable<string>;
482
+ hrefLang?: Nullable<string>;
483
+ media?: Nullable<string>;
484
+ rel?: Nullable<string>;
484
485
  shape?: 'rect' | 'circle' | 'poly' | 'default';
485
- target?: string;
486
+ target?: Nullable<string>;
486
487
  };
487
488
  audio: HTMLAttributes & {
488
- src?: string;
489
+ src?: Nullable<string>;
489
490
  autoplay?: boolean;
490
491
  controls?: boolean;
491
492
  loop?: boolean;
@@ -494,37 +495,37 @@ declare global {
494
495
  crossOrigin?: 'anonymous' | 'use-credentials';
495
496
  };
496
497
  img: HTMLAttributes & {
497
- src?: string;
498
- alt?: string;
498
+ src?: Nullable<string>;
499
+ alt?: Nullable<string>;
499
500
  width?: string | number;
500
501
  height?: string | number;
501
502
  loading?: 'eager' | 'lazy';
502
503
  crossOrigin?: 'anonymous' | 'use-credentials';
503
504
  decoding?: 'sync' | 'async' | 'auto';
504
505
  fetchPriority?: 'high' | 'low' | 'auto';
505
- referrerPolicy?: string;
506
- sizes?: string;
507
- srcSet?: string;
508
- useMap?: string;
506
+ referrerPolicy?: Nullable<string>;
507
+ sizes?: Nullable<string>;
508
+ srcSet?: Nullable<string>;
509
+ useMap?: Nullable<string>;
509
510
  };
510
511
  map: HTMLAttributes & {
511
- name?: string;
512
+ name?: Nullable<string>;
512
513
  };
513
514
  track: HTMLAttributes & {
514
515
  default?: boolean;
515
516
  kind?: 'subtitles' | 'captions' | 'descriptions' | 'chapters' | 'metadata';
516
- label?: string;
517
- src?: string;
518
- srcLang?: string;
517
+ label?: Nullable<string>;
518
+ src?: Nullable<string>;
519
+ srcLang?: Nullable<string>;
519
520
  };
520
521
  video: HTMLAttributes & {
521
- src?: string;
522
+ src?: Nullable<string>;
522
523
  autoplay?: boolean;
523
524
  controls?: boolean;
524
525
  loop?: boolean;
525
526
  muted?: boolean;
526
527
  preload?: 'none' | 'metadata' | 'auto';
527
- poster?: string;
528
+ poster?: Nullable<string>;
528
529
  width?: string | number;
529
530
  height?: string | number;
530
531
  crossOrigin?: 'anonymous' | 'use-credentials';
@@ -533,42 +534,42 @@ declare global {
533
534
 
534
535
  // Embedded content
535
536
  embed: HTMLAttributes & {
536
- src?: string;
537
- type?: string;
537
+ src?: Nullable<string>;
538
+ type?: Nullable<string>;
538
539
  width?: string | number;
539
540
  height?: string | number;
540
541
  };
541
542
  iframe: HTMLAttributes & {
542
- src?: string;
543
- srcdoc?: string;
544
- name?: string;
545
- sandbox?: string;
546
- allow?: string;
543
+ src?: Nullable<string>;
544
+ srcdoc?: Nullable<string>;
545
+ name?: Nullable<string>;
546
+ sandbox?: Nullable<string>;
547
+ allow?: Nullable<string>;
547
548
  allowFullScreen?: boolean;
548
549
  width?: string | number;
549
550
  height?: string | number;
550
551
  loading?: 'eager' | 'lazy';
551
- referrerPolicy?: string;
552
+ referrerPolicy?: Nullable<string>;
552
553
  };
553
554
  object: HTMLAttributes & {
554
- data?: string;
555
- type?: string;
556
- name?: string;
557
- useMap?: string;
555
+ data?: Nullable<string>;
556
+ type?: Nullable<string>;
557
+ name?: Nullable<string>;
558
+ useMap?: Nullable<string>;
558
559
  width?: string | number;
559
560
  height?: string | number;
560
561
  };
561
562
  picture: HTMLAttributes;
562
563
  portal: HTMLAttributes & {
563
- referrerPolicy?: string;
564
- src?: string;
564
+ referrerPolicy?: Nullable<string>;
565
+ src?: Nullable<string>;
565
566
  };
566
567
  source: HTMLAttributes & {
567
- src?: string;
568
- type?: string;
569
- media?: string;
570
- sizes?: string;
571
- srcSet?: string;
568
+ src?: Nullable<string>;
569
+ type?: Nullable<string>;
570
+ media?: Nullable<string>;
571
+ sizes?: Nullable<string>;
572
+ srcSet?: Nullable<string>;
572
573
  };
573
574
 
574
575
  // SVG and MathML
@@ -620,40 +621,40 @@ declare global {
620
621
  | 'saturation'
621
622
  | 'color'
622
623
  | 'luminosity';
623
- in2?: string;
624
+ in2?: Nullable<string>;
624
625
  };
625
626
  feColorMatrix: HTMLAttributes &
626
627
  SVGFilterAttributes & {
627
628
  type?: 'matrix' | 'saturate' | 'hueRotate' | 'luminanceToAlpha';
628
- values?: string;
629
+ values?: Nullable<string>;
629
630
  };
630
631
  feComponentTransfer: HTMLAttributes & SVGFilterAttributes;
631
632
  feComposite: HTMLAttributes &
632
633
  SVGFilterAttributes & {
633
634
  operator?: 'over' | 'in' | 'out' | 'atop' | 'xor' | 'lighter' | 'arithmetic';
634
- in2?: string;
635
- k1?: number;
636
- k2?: number;
637
- k3?: number;
638
- k4?: number;
635
+ in2?: Nullable<string>;
636
+ k1?: Nullable<number>;
637
+ k2?: Nullable<number>;
638
+ k3?: Nullable<number>;
639
+ k4?: Nullable<number>;
639
640
  };
640
641
  feConvolveMatrix: HTMLAttributes & SVGFilterAttributes;
641
642
  feDiffuseLighting: HTMLAttributes & SVGFilterAttributes;
642
643
  feDisplacementMap: HTMLAttributes & SVGFilterAttributes;
643
644
  feDistantLight: HTMLAttributes &
644
645
  SVGFilterAttributes & {
645
- azimuth?: number;
646
- elevation?: number;
646
+ azimuth?: Nullable<number>;
647
+ elevation?: Nullable<number>;
647
648
  };
648
649
  feDropShadow: HTMLAttributes &
649
650
  SVGFilterAttributes & {
650
- dx?: number;
651
- dy?: number;
651
+ dx?: Nullable<number>;
652
+ dy?: Nullable<number>;
652
653
  stdDeviation?: number | string;
653
654
  };
654
655
  feFlood: HTMLAttributes &
655
656
  SVGFilterAttributes & {
656
- 'flood-color'?: string;
657
+ 'flood-color'?: Nullable<string>;
657
658
  'flood-opacity'?: number | string;
658
659
  };
659
660
  feFuncA: HTMLAttributes & SVGTransferFunctionAttributes;
@@ -674,33 +675,33 @@ declare global {
674
675
  };
675
676
  feOffset: HTMLAttributes &
676
677
  SVGFilterAttributes & {
677
- dx?: number;
678
- dy?: number;
678
+ dx?: Nullable<number>;
679
+ dy?: Nullable<number>;
679
680
  };
680
681
  fePointLight: HTMLAttributes &
681
682
  SVGFilterAttributes & {
682
- x?: number;
683
- y?: number;
684
- z?: number;
683
+ x?: Nullable<number>;
684
+ y?: Nullable<number>;
685
+ z?: Nullable<number>;
685
686
  };
686
687
  feSpecularLighting: HTMLAttributes & SVGFilterAttributes;
687
688
  feSpotLight: HTMLAttributes &
688
689
  SVGFilterAttributes & {
689
- x?: number;
690
- y?: number;
691
- z?: number;
692
- pointsAtX?: number;
693
- pointsAtY?: number;
694
- pointsAtZ?: number;
695
- specularExponent?: number;
696
- limitingConeAngle?: number;
690
+ x?: Nullable<number>;
691
+ y?: Nullable<number>;
692
+ z?: Nullable<number>;
693
+ pointsAtX?: Nullable<number>;
694
+ pointsAtY?: Nullable<number>;
695
+ pointsAtZ?: Nullable<number>;
696
+ specularExponent?: Nullable<number>;
697
+ limitingConeAngle?: Nullable<number>;
697
698
  };
698
699
  feTile: HTMLAttributes & SVGFilterAttributes;
699
700
  feTurbulence: HTMLAttributes &
700
701
  SVGFilterAttributes & {
701
702
  baseFrequency?: number | string;
702
- numOctaves?: number;
703
- seed?: number;
703
+ numOctaves?: Nullable<number>;
704
+ seed?: Nullable<number>;
704
705
  stitchTiles?: 'stitch' | 'noStitch';
705
706
  type?: 'fractalNoise' | 'turbulence';
706
707
  };
@@ -723,13 +724,13 @@ declare global {
723
724
  g: HTMLAttributes & SVGAttributes;
724
725
  image: HTMLAttributes &
725
726
  SVGAttributes & {
726
- href?: string;
727
- 'xlink:href'?: string;
727
+ href?: Nullable<string>;
728
+ 'xlink:href'?: Nullable<string>;
728
729
  x?: string | number;
729
730
  y?: string | number;
730
731
  width?: string | number;
731
732
  height?: string | number;
732
- preserveAspectRatio?: string;
733
+ preserveAspectRatio?: Nullable<string>;
733
734
  };
734
735
  line: HTMLAttributes &
735
736
  SVGAttributes & {
@@ -766,17 +767,17 @@ declare global {
766
767
  metadata: HTMLAttributes & SVGAttributes;
767
768
  mpath: HTMLAttributes &
768
769
  SVGAttributes & {
769
- 'xlink:href'?: string;
770
+ 'xlink:href'?: Nullable<string>;
770
771
  };
771
772
  path: HTMLAttributes &
772
773
  SVGAttributes & {
773
- d?: string;
774
- pathLength?: number;
774
+ d?: Nullable<string>;
775
+ pathLength?: Nullable<number>;
775
776
  };
776
777
  pattern: HTMLAttributes &
777
778
  SVGAttributes & {
778
779
  patternContentUnits?: 'userSpaceOnUse' | 'objectBoundingBox';
779
- patternTransform?: string;
780
+ patternTransform?: Nullable<string>;
780
781
  patternUnits?: 'userSpaceOnUse' | 'objectBoundingBox';
781
782
  x?: string | number;
782
783
  y?: string | number;
@@ -785,11 +786,11 @@ declare global {
785
786
  };
786
787
  polygon: HTMLAttributes &
787
788
  SVGAttributes & {
788
- points?: string;
789
+ points?: Nullable<string>;
789
790
  };
790
791
  polyline: HTMLAttributes &
791
792
  SVGAttributes & {
792
- points?: string;
793
+ points?: Nullable<string>;
793
794
  };
794
795
  radialGradient: HTMLAttributes &
795
796
  SVGGradientAttributes & {
@@ -813,14 +814,14 @@ declare global {
813
814
  stop: HTMLAttributes &
814
815
  SVGAttributes & {
815
816
  offset?: string | number;
816
- 'stop-color'?: string;
817
+ 'stop-color'?: Nullable<string>;
817
818
  'stop-opacity'?: number | string;
818
819
  };
819
820
  switch: HTMLAttributes & SVGAttributes;
820
821
  symbol: HTMLAttributes &
821
822
  SVGAttributes & {
822
- viewBox?: string;
823
- preserveAspectRatio?: string;
823
+ viewBox?: Nullable<string>;
824
+ preserveAspectRatio?: Nullable<string>;
824
825
  refX?: string | number;
825
826
  refY?: string | number;
826
827
  };
@@ -828,8 +829,8 @@ declare global {
828
829
  textPath: HTMLAttributes &
829
830
  SVGAttributes &
830
831
  SVGTextAttributes & {
831
- href?: string;
832
- 'xlink:href'?: string;
832
+ href?: Nullable<string>;
833
+ 'xlink:href'?: Nullable<string>;
833
834
  startOffset?: string | number;
834
835
  method?: 'align' | 'stretch';
835
836
  spacing?: 'auto' | 'exact';
@@ -837,8 +838,8 @@ declare global {
837
838
  tspan: HTMLAttributes & SVGAttributes & SVGTextAttributes;
838
839
  use: HTMLAttributes &
839
840
  SVGAttributes & {
840
- href?: string;
841
- 'xlink:href'?: string;
841
+ href?: Nullable<string>;
842
+ 'xlink:href'?: Nullable<string>;
842
843
  x?: string | number;
843
844
  y?: string | number;
844
845
  width?: string | number;
@@ -846,8 +847,8 @@ declare global {
846
847
  };
847
848
  view: HTMLAttributes &
848
849
  SVGAttributes & {
849
- viewBox?: string;
850
- preserveAspectRatio?: string;
850
+ viewBox?: Nullable<string>;
851
+ preserveAspectRatio?: Nullable<string>;
851
852
  };
852
853
 
853
854
  // Scripting
@@ -857,48 +858,48 @@ declare global {
857
858
  };
858
859
  noscript: HTMLAttributes;
859
860
  script: HTMLAttributes & {
860
- src?: string;
861
- type?: string;
861
+ src?: Nullable<string>;
862
+ type?: Nullable<string>;
862
863
  async?: boolean;
863
864
  defer?: boolean;
864
865
  crossOrigin?: 'anonymous' | 'use-credentials';
865
- integrity?: string;
866
+ integrity?: Nullable<string>;
866
867
  noModule?: boolean;
867
- referrerPolicy?: string;
868
+ referrerPolicy?: Nullable<string>;
868
869
  };
869
870
 
870
871
  // Demarcating edits
871
872
  del: HTMLAttributes & {
872
- cite?: string;
873
- dateTime?: string;
873
+ cite?: Nullable<string>;
874
+ dateTime?: Nullable<string>;
874
875
  };
875
876
  ins: HTMLAttributes & {
876
- cite?: string;
877
- dateTime?: string;
877
+ cite?: Nullable<string>;
878
+ dateTime?: Nullable<string>;
878
879
  };
879
880
 
880
881
  // Table content
881
882
  caption: HTMLAttributes;
882
883
  col: HTMLAttributes & {
883
- span?: number;
884
+ span?: Nullable<number>;
884
885
  };
885
886
  colgroup: HTMLAttributes & {
886
- span?: number;
887
+ span?: Nullable<number>;
887
888
  };
888
889
  table: HTMLAttributes;
889
890
  tbody: HTMLAttributes;
890
891
  td: HTMLAttributes & {
891
- colSpan?: number;
892
- rowSpan?: number;
893
- headers?: string;
892
+ colSpan?: Nullable<number>;
893
+ rowSpan?: Nullable<number>;
894
+ headers?: Nullable<string>;
894
895
  };
895
896
  tfoot: HTMLAttributes;
896
897
  th: HTMLAttributes & {
897
- colSpan?: number;
898
- rowSpan?: number;
899
- headers?: string;
898
+ colSpan?: Nullable<number>;
899
+ rowSpan?: Nullable<number>;
900
+ headers?: Nullable<string>;
900
901
  scope?: 'row' | 'col' | 'rowgroup' | 'colgroup';
901
- abbr?: string;
902
+ abbr?: Nullable<string>;
902
903
  };
903
904
  thead: HTMLAttributes;
904
905
  tr: HTMLAttributes;
@@ -907,116 +908,116 @@ declare global {
907
908
  button: HTMLAttributes & {
908
909
  type?: 'button' | 'submit' | 'reset';
909
910
  disabled?: boolean;
910
- form?: string;
911
- formAction?: string;
912
- formEncType?: string;
913
- formMethod?: string;
911
+ form?: Nullable<string>;
912
+ formAction?: Nullable<string>;
913
+ formEncType?: Nullable<string>;
914
+ formMethod?: Nullable<string>;
914
915
  formNoValidate?: boolean;
915
- formTarget?: string;
916
- name?: string;
917
- value?: string;
916
+ formTarget?: Nullable<string>;
917
+ name?: Nullable<string>;
918
+ value?: Nullable<string>;
918
919
  };
919
920
  datalist: HTMLAttributes;
920
921
  fieldset: HTMLAttributes & {
921
922
  disabled?: boolean;
922
- form?: string;
923
- name?: string;
923
+ form?: Nullable<string>;
924
+ name?: Nullable<string>;
924
925
  };
925
926
  form: HTMLAttributes & {
926
- action?: string;
927
+ action?: Nullable<string>;
927
928
  method?: 'get' | 'post' | 'dialog';
928
- encType?: string;
929
- acceptCharset?: string;
929
+ encType?: Nullable<string>;
930
+ acceptCharset?: Nullable<string>;
930
931
  autoComplete?: 'on' | 'off';
931
932
  noValidate?: boolean;
932
- target?: string;
933
+ target?: Nullable<string>;
933
934
  };
934
935
  input: HTMLAttributes & {
935
- type?: string;
936
+ type?: Nullable<string>;
936
937
  value?: string | number;
937
- placeholder?: string;
938
+ placeholder?: Nullable<string>;
938
939
  disabled?: boolean;
939
- name?: string;
940
- accept?: string;
941
- autoComplete?: string;
940
+ name?: Nullable<string>;
941
+ accept?: Nullable<string>;
942
+ autoComplete?: Nullable<string>;
942
943
  autoFocus?: boolean;
943
944
  checked?: boolean;
944
- form?: string;
945
- formAction?: string;
946
- formEncType?: string;
947
- formMethod?: string;
945
+ form?: Nullable<string>;
946
+ formAction?: Nullable<string>;
947
+ formEncType?: Nullable<string>;
948
+ formMethod?: Nullable<string>;
948
949
  formNoValidate?: boolean;
949
- formTarget?: string;
950
- list?: string;
950
+ formTarget?: Nullable<string>;
951
+ list?: Nullable<string>;
951
952
  max?: string | number;
952
- maxLength?: number;
953
+ maxLength?: Nullable<number>;
953
954
  min?: string | number;
954
- minLength?: number;
955
+ minLength?: Nullable<number>;
955
956
  multiple?: boolean;
956
- pattern?: string;
957
+ pattern?: Nullable<string>;
957
958
  readOnly?: boolean;
958
959
  required?: boolean;
959
- size?: number;
960
- src?: string;
960
+ size?: Nullable<number>;
961
+ src?: Nullable<string>;
961
962
  step?: string | number;
962
963
  width?: string | number;
963
964
  height?: string | number;
964
965
  };
965
966
  label: HTMLAttributes & {
966
- for?: string;
967
- htmlFor?: string;
967
+ for?: Nullable<string>;
968
+ htmlFor?: Nullable<string>;
968
969
  };
969
970
  legend: HTMLAttributes;
970
971
  meter: HTMLAttributes & {
971
- value?: number;
972
- min?: number;
973
- max?: number;
974
- low?: number;
975
- high?: number;
976
- optimum?: number;
972
+ value?: Nullable<number>;
973
+ min?: Nullable<number>;
974
+ max?: Nullable<number>;
975
+ low?: Nullable<number>;
976
+ high?: Nullable<number>;
977
+ optimum?: Nullable<number>;
977
978
  };
978
979
  optgroup: HTMLAttributes & {
979
980
  disabled?: boolean;
980
- label?: string;
981
+ label?: Nullable<string>;
981
982
  };
982
983
  option: HTMLAttributes & {
983
984
  value?: string | number;
984
985
  selected?: boolean;
985
986
  disabled?: boolean;
986
- label?: string;
987
+ label?: Nullable<string>;
987
988
  };
988
989
  output: HTMLAttributes & {
989
- for?: string;
990
- htmlFor?: string;
991
- form?: string;
992
- name?: string;
990
+ for?: Nullable<string>;
991
+ htmlFor?: Nullable<string>;
992
+ form?: Nullable<string>;
993
+ name?: Nullable<string>;
993
994
  };
994
995
  progress: HTMLAttributes & {
995
- value?: number;
996
- max?: number;
996
+ value?: Nullable<number>;
997
+ max?: Nullable<number>;
997
998
  };
998
999
  select: HTMLAttributes & {
999
1000
  disabled?: boolean;
1000
- form?: string;
1001
+ form?: Nullable<string>;
1001
1002
  multiple?: boolean;
1002
- name?: string;
1003
+ name?: Nullable<string>;
1003
1004
  required?: boolean;
1004
- size?: number;
1005
- autoComplete?: string;
1005
+ size?: Nullable<number>;
1006
+ autoComplete?: Nullable<string>;
1006
1007
  };
1007
1008
  textarea: HTMLAttributes & {
1008
- placeholder?: string;
1009
+ placeholder?: Nullable<string>;
1009
1010
  disabled?: boolean;
1010
- rows?: number;
1011
- cols?: number;
1012
- name?: string;
1013
- form?: string;
1014
- maxLength?: number;
1015
- minLength?: number;
1011
+ rows?: Nullable<number>;
1012
+ cols?: Nullable<number>;
1013
+ name?: Nullable<string>;
1014
+ form?: Nullable<string>;
1015
+ maxLength?: Nullable<number>;
1016
+ minLength?: Nullable<number>;
1016
1017
  readOnly?: boolean;
1017
1018
  required?: boolean;
1018
1019
  wrap?: 'soft' | 'hard';
1019
- autoComplete?: string;
1020
+ autoComplete?: Nullable<string>;
1020
1021
  autoFocus?: boolean;
1021
1022
  };
1022
1023
 
@@ -1031,7 +1032,7 @@ declare global {
1031
1032
 
1032
1033
  // Web Components
1033
1034
  slot: HTMLAttributes & {
1034
- name?: string;
1035
+ name?: Nullable<string>;
1035
1036
  };
1036
1037
  template: HTMLAttributes;
1037
1038