html-validate 11.4.0 → 11.5.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.
Files changed (50) hide show
  1. package/dist/cjs/browser.js +1 -1
  2. package/dist/cjs/cli.js +7 -0
  3. package/dist/cjs/cli.js.map +1 -1
  4. package/dist/cjs/core-nodejs.js +212 -2
  5. package/dist/cjs/core-nodejs.js.map +1 -1
  6. package/dist/cjs/core.js +85 -30
  7. package/dist/cjs/core.js.map +1 -1
  8. package/dist/cjs/elements.js +429 -58
  9. package/dist/cjs/elements.js.map +1 -1
  10. package/dist/cjs/html-validate.js +1 -1
  11. package/dist/cjs/index.js +3 -1
  12. package/dist/cjs/index.js.map +1 -1
  13. package/dist/cjs/jest-worker.js +1 -1
  14. package/dist/cjs/jest.js +1 -1
  15. package/dist/cjs/presets.d.ts +1 -0
  16. package/dist/cjs/presets.js +22 -0
  17. package/dist/cjs/presets.js.map +1 -0
  18. package/dist/cjs/vitest-matchers.js +20 -4
  19. package/dist/cjs/vitest-matchers.js.map +1 -1
  20. package/dist/cjs/vitest-worker.js +1 -1
  21. package/dist/cjs/vitest.js +1 -1
  22. package/dist/esm/browser.js +2 -2
  23. package/dist/esm/cli.js +10 -3
  24. package/dist/esm/cli.js.map +1 -1
  25. package/dist/esm/core-browser.js +1 -1
  26. package/dist/esm/core-nodejs.js +212 -4
  27. package/dist/esm/core-nodejs.js.map +1 -1
  28. package/dist/esm/core.js +78 -30
  29. package/dist/esm/core.js.map +1 -1
  30. package/dist/esm/elements.js +429 -58
  31. package/dist/esm/elements.js.map +1 -1
  32. package/dist/esm/html-validate.js +3 -3
  33. package/dist/esm/index.js +3 -3
  34. package/dist/esm/jest-matchers.js +2 -2
  35. package/dist/esm/jest-utils.js +2 -2
  36. package/dist/esm/jest-worker.js +2 -2
  37. package/dist/esm/jest.js +1 -1
  38. package/dist/esm/presets.d.ts +1 -0
  39. package/dist/esm/presets.js +11 -0
  40. package/dist/esm/presets.js.map +1 -0
  41. package/dist/esm/vitest-matchers.js +23 -7
  42. package/dist/esm/vitest-matchers.js.map +1 -1
  43. package/dist/esm/vitest-utils.js +2 -2
  44. package/dist/esm/vitest-worker.js +2 -2
  45. package/dist/esm/vitest.js +1 -1
  46. package/dist/schema/elements.json +14 -1
  47. package/dist/types/browser.d.ts +88 -4
  48. package/dist/types/index.d.ts +154 -4
  49. package/dist/types/presets.d.ts +8 -0
  50. package/package.json +7 -2
@@ -10,7 +10,26 @@ const {
10
10
  allowedIfParentIsPresent,
11
11
  hasKeyword
12
12
  } = metaHelper.metadataHelper;
13
- const validId = "/\\S+/";
13
+ const validId = {
14
+ name: "a valid id",
15
+ pattern: /^\S+$/
16
+ };
17
+ const validPositiveInteger = {
18
+ name: "a positive integer",
19
+ pattern: /^\d+$/
20
+ };
21
+ const validNonEmptyString = {
22
+ name: "a non-empty string",
23
+ pattern: /^.+$/
24
+ };
25
+ const validBrowsingContextName = {
26
+ name: "a browsing context name (non-empty string, must not start with `_`)",
27
+ pattern: /^[^_].*$/
28
+ };
29
+ const validFloatingPoint = {
30
+ name: "a floating-point number",
31
+ pattern: /^-?(\d+(\.\d+)?|\.\d+)([Ee][+-]?\d+)?$/
32
+ };
14
33
  const ReferrerPolicy = [
15
34
  "",
16
35
  "no-referrer",
@@ -64,6 +83,7 @@ function linkBodyOk(node) {
64
83
  return tokens.some((keyword) => bodyOk.has(keyword));
65
84
  }
66
85
  var html5 = {
86
+ /* https://html.spec.whatwg.org/multipage/dom.html#global-attributes */
67
87
  "*": {
68
88
  attributes: {
69
89
  accesskey: {
@@ -201,13 +221,14 @@ var html5 = {
201
221
  },
202
222
  "xml:*": {},
203
223
  xmlns: {
204
- enum: ["/.+/"]
224
+ enum: [validNonEmptyString]
205
225
  },
206
226
  "xmlns:*": {
207
- enum: ["/.+/"]
227
+ enum: [validNonEmptyString]
208
228
  }
209
229
  }
210
230
  },
231
+ /* https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-a-element */
211
232
  a: {
212
233
  flow: true,
213
234
  focusable(node) {
@@ -234,7 +255,7 @@ var html5 = {
234
255
  download: {
235
256
  allowed: allowedIfAttributeIsPresent("href"),
236
257
  omit: true,
237
- enum: ["/.+/"]
258
+ enum: [validNonEmptyString]
238
259
  },
239
260
  href: {
240
261
  enum: ["/.*/"]
@@ -326,14 +347,14 @@ var html5 = {
326
347
  return null;
327
348
  },
328
349
  list: true,
329
- enum: ["/.+/"]
350
+ enum: [validNonEmptyString]
330
351
  },
331
352
  shape: {
332
353
  deprecated: true
333
354
  },
334
355
  target: {
335
356
  allowed: allowedIfAttributeIsPresent("href"),
336
- enum: ["/[^_].*/", "_blank", "_self", "_parent", "_top"]
357
+ enum: [validBrowsingContextName, "_blank", "_self", "_parent", "_top"]
337
358
  },
338
359
  type: {
339
360
  allowed: allowedIfAttributeIsPresent("href")
@@ -357,6 +378,7 @@ var html5 = {
357
378
  }
358
379
  }
359
380
  },
381
+ /* https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-abbr-element */
360
382
  abbr: {
361
383
  flow: true,
362
384
  phrasing: true,
@@ -372,6 +394,7 @@ var html5 = {
372
394
  source: "html5"
373
395
  }
374
396
  },
397
+ /* https://html.spec.whatwg.org/multipage/sections.html#the-address-element */
375
398
  address: {
376
399
  flow: true,
377
400
  aria: {
@@ -380,6 +403,7 @@ var html5 = {
380
403
  permittedContent: ["@flow"],
381
404
  permittedDescendants: [{ exclude: ["address", "header", "footer", "@heading", "@sectioning"] }]
382
405
  },
406
+ /* https://html.spec.whatwg.org/multipage/obsolete.html#the-applet-element */
383
407
  applet: {
384
408
  deprecated: {
385
409
  source: "html5"
@@ -393,6 +417,7 @@ var html5 = {
393
417
  }
394
418
  }
395
419
  },
420
+ /* https://html.spec.whatwg.org/multipage/image-maps.html#the-area-element */
396
421
  area: {
397
422
  flow(node) {
398
423
  return Boolean(node.closest("map"));
@@ -519,7 +544,7 @@ var html5 = {
519
544
  },
520
545
  target: {
521
546
  allowed: allowedIfAttributeIsPresent("href"),
522
- enum: ["/[^_].*/", "_blank", "_self", "_parent", "_top"]
547
+ enum: [validBrowsingContextName, "_blank", "_self", "_parent", "_top"]
523
548
  }
524
549
  },
525
550
  aria: {
@@ -532,6 +557,7 @@ var html5 = {
532
557
  },
533
558
  requiredAncestors: ["map", "template"]
534
559
  },
560
+ /* https://html.spec.whatwg.org/multipage/sections.html#the-article-element */
535
561
  article: {
536
562
  flow: true,
537
563
  sectioning: true,
@@ -541,6 +567,7 @@ var html5 = {
541
567
  implicitRole: "article"
542
568
  }
543
569
  },
570
+ /* https://html.spec.whatwg.org/multipage/sections.html#the-aside-element */
544
571
  aside: {
545
572
  flow: true,
546
573
  sectioning: true,
@@ -550,6 +577,7 @@ var html5 = {
550
577
  implicitRole: "complementary"
551
578
  }
552
579
  },
580
+ /* https://html.spec.whatwg.org/multipage/media.html#the-audio-element */
553
581
  audio: {
554
582
  flow: true,
555
583
  focusable(node) {
@@ -562,6 +590,12 @@ var html5 = {
562
590
  },
563
591
  transparent: ["@flow"],
564
592
  attributes: {
593
+ autoplay: {
594
+ boolean: true
595
+ },
596
+ controls: {
597
+ boolean: true
598
+ },
565
599
  crossorigin: {
566
600
  omit: true,
567
601
  enum: ["anonymous", "use-credentials"]
@@ -569,15 +603,25 @@ var html5 = {
569
603
  itemprop: {
570
604
  allowed: allowedIfAttributeIsPresent("src")
571
605
  },
606
+ loop: {
607
+ boolean: true
608
+ },
609
+ muted: {
610
+ boolean: true
611
+ },
572
612
  preload: {
573
613
  omit: true,
574
614
  enum: ["none", "metadata", "auto"]
615
+ },
616
+ src: {
617
+ enum: [validNonEmptyString]
575
618
  }
576
619
  },
577
620
  permittedContent: ["@flow", "track", "source"],
578
621
  permittedDescendants: [{ exclude: ["audio", "video"] }],
579
622
  permittedOrder: ["source", "track", "@flow"]
580
623
  },
624
+ /* https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-b-element */
581
625
  b: {
582
626
  flow: true,
583
627
  phrasing: true,
@@ -587,9 +631,14 @@ var html5 = {
587
631
  naming: "prohibited"
588
632
  }
589
633
  },
634
+ /* https://html.spec.whatwg.org/multipage/document-metadata.html#the-base-element */
590
635
  base: {
591
636
  metadata: true,
592
637
  void: true,
638
+ attributes: {
639
+ href: {},
640
+ target: {}
641
+ },
593
642
  permittedParent: ["head"],
594
643
  aria: {
595
644
  naming: "prohibited"
@@ -602,6 +651,7 @@ var html5 = {
602
651
  source: "html4"
603
652
  }
604
653
  },
654
+ /* https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-bdi-element */
605
655
  bdi: {
606
656
  flow: true,
607
657
  phrasing: true,
@@ -611,6 +661,7 @@ var html5 = {
611
661
  naming: "prohibited"
612
662
  }
613
663
  },
664
+ /* https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-bdo-element */
614
665
  bdo: {
615
666
  flow: true,
616
667
  phrasing: true,
@@ -640,14 +691,19 @@ var html5 = {
640
691
  source: "non-standard"
641
692
  }
642
693
  },
694
+ /* https://html.spec.whatwg.org/multipage/grouping-content.html#the-blockquote-element */
643
695
  blockquote: {
644
696
  flow: true,
645
697
  sectioning: true,
698
+ attributes: {
699
+ cite: {}
700
+ },
646
701
  aria: {
647
702
  implicitRole: "blockquote"
648
703
  },
649
704
  permittedContent: ["@flow"]
650
705
  },
706
+ /* https://html.spec.whatwg.org/multipage/sections.html#the-body-element */
651
707
  body: {
652
708
  optionalEnd: true,
653
709
  permittedContent: ["@flow"],
@@ -695,6 +751,7 @@ var html5 = {
695
751
  naming: "prohibited"
696
752
  }
697
753
  },
754
+ /* https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-br-element */
698
755
  br: {
699
756
  flow: true,
700
757
  phrasing: true,
@@ -708,6 +765,7 @@ var html5 = {
708
765
  naming: "prohibited"
709
766
  }
710
767
  },
768
+ /* https://html.spec.whatwg.org/multipage/form-elements.html#the-button-element */
711
769
  button: {
712
770
  flow: true,
713
771
  focusable: true,
@@ -726,6 +784,21 @@ var html5 = {
726
784
  autofocus: {
727
785
  boolean: true
728
786
  },
787
+ command: {
788
+ enum: [
789
+ "toggle-popover",
790
+ "show-popover",
791
+ "hide-popover",
792
+ "close",
793
+ "request-close",
794
+ "show-modal",
795
+ "/^--/"
796
+ ]
797
+ },
798
+ commandfor: {
799
+ enum: [validId],
800
+ reference: "id"
801
+ },
729
802
  datafld: {
730
803
  deprecated: true
731
804
  },
@@ -738,6 +811,10 @@ var html5 = {
738
811
  disabled: {
739
812
  boolean: true
740
813
  },
814
+ form: {
815
+ enum: [validId],
816
+ reference: "id"
817
+ },
741
818
  formaction: {
742
819
  allowed: allowedIfAttributeHasValue("type", ["submit"], { defaultValue: "submit" })
743
820
  },
@@ -754,11 +831,22 @@ var html5 = {
754
831
  },
755
832
  formtarget: {
756
833
  allowed: allowedIfAttributeHasValue("type", ["submit"], { defaultValue: "submit" }),
757
- enum: ["/[^_].*/", "_blank", "_self", "_parent", "_top"]
834
+ enum: [validBrowsingContextName, "_blank", "_self", "_parent", "_top"]
835
+ },
836
+ name: {
837
+ enum: [validNonEmptyString]
838
+ },
839
+ popovertarget: {
840
+ enum: [validId],
841
+ reference: "id"
842
+ },
843
+ popovertargetaction: {
844
+ enum: ["toggle", "show", "hide"]
758
845
  },
759
846
  type: {
760
847
  enum: ["submit", "reset", "button"]
761
- }
848
+ },
849
+ value: {}
762
850
  },
763
851
  aria: {
764
852
  implicitRole: "button"
@@ -767,12 +855,14 @@ var html5 = {
767
855
  permittedDescendants: [{ exclude: ["@interactive"] }],
768
856
  textContent: "accessible"
769
857
  },
858
+ /* https://html.spec.whatwg.org/multipage/canvas.html#the-canvas-element */
770
859
  canvas: {
771
860
  flow: true,
772
861
  phrasing: true,
773
862
  embedded: true,
774
863
  transparent: true
775
864
  },
865
+ /* https://html.spec.whatwg.org/multipage/tables.html#the-caption-element */
776
866
  caption: {
777
867
  implicitClosed: ["colgroup", "thead", "tfoot", "tbody", "tr"],
778
868
  optionalEnd: true,
@@ -795,6 +885,7 @@ var html5 = {
795
885
  source: "html4"
796
886
  }
797
887
  },
888
+ /* https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-cite-element */
798
889
  cite: {
799
890
  flow: true,
800
891
  phrasing: true,
@@ -803,6 +894,7 @@ var html5 = {
803
894
  naming: "prohibited"
804
895
  }
805
896
  },
897
+ /* https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-code-element */
806
898
  code: {
807
899
  flow: true,
808
900
  phrasing: true,
@@ -812,6 +904,7 @@ var html5 = {
812
904
  naming: "prohibited"
813
905
  }
814
906
  },
907
+ /* https://html.spec.whatwg.org/multipage/tables.html#the-col-element */
815
908
  col: {
816
909
  attributes: {
817
910
  align: {
@@ -824,7 +917,7 @@ var html5 = {
824
917
  deprecated: true
825
918
  },
826
919
  span: {
827
- enum: ["/\\d+/"]
920
+ enum: [validPositiveInteger]
828
921
  },
829
922
  valign: {
830
923
  deprecated: true
@@ -838,11 +931,12 @@ var html5 = {
838
931
  naming: "prohibited"
839
932
  }
840
933
  },
934
+ /* https://html.spec.whatwg.org/multipage/tables.html#the-colgroup-element */
841
935
  colgroup: {
842
936
  implicitClosed: ["colgroup", "caption", "thead", "tbody", "tfoot", "tr"],
843
937
  attributes: {
844
938
  span: {
845
- enum: ["/\\d+/"]
939
+ enum: [validPositiveInteger]
846
940
  }
847
941
  },
848
942
  permittedContent: ["col", "template"],
@@ -850,15 +944,20 @@ var html5 = {
850
944
  naming: "prohibited"
851
945
  }
852
946
  },
947
+ /* https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-data-element */
853
948
  data: {
854
949
  flow: true,
855
950
  phrasing: true,
951
+ attributes: {
952
+ value: {}
953
+ },
856
954
  permittedContent: ["@phrasing"],
857
955
  aria: {
858
956
  implicitRole: "generic",
859
957
  naming: "prohibited"
860
958
  }
861
959
  },
960
+ /* https://html.spec.whatwg.org/multipage/form-elements.html#the-datalist-element */
862
961
  datalist: {
863
962
  flow: true,
864
963
  phrasing: true,
@@ -868,25 +967,33 @@ var html5 = {
868
967
  },
869
968
  permittedContent: ["@phrasing", "option"]
870
969
  },
970
+ /* https://html.spec.whatwg.org/multipage/grouping-content.html#the-dd-element */
871
971
  dd: {
872
972
  implicitClosed: ["dd", "dt"],
873
973
  permittedContent: ["@flow"],
874
974
  requiredAncestors: ["dl > dd", "dl > div > dd", "template > dd", "template > div > dd"]
875
975
  },
976
+ /* https://html.spec.whatwg.org/multipage/edits.html#the-del-element */
876
977
  del: {
877
978
  flow: true,
878
979
  phrasing: true,
879
980
  transparent: true,
981
+ attributes: {
982
+ cite: {},
983
+ datetime: {}
984
+ },
880
985
  aria: {
881
986
  implicitRole: "deletion",
882
987
  naming: "prohibited"
883
988
  }
884
989
  },
990
+ /* https://html.spec.whatwg.org/multipage/interactive-elements.html#the-details-element */
885
991
  details: {
886
992
  flow: true,
887
993
  sectioning: true,
888
994
  interactive: true,
889
995
  attributes: {
996
+ name: {},
890
997
  open: {
891
998
  boolean: true
892
999
  }
@@ -898,6 +1005,7 @@ var html5 = {
898
1005
  permittedOrder: ["summary", "@flow"],
899
1006
  requiredContent: ["summary"]
900
1007
  },
1008
+ /* https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-dfn-element */
901
1009
  dfn: {
902
1010
  flow: true,
903
1011
  phrasing: true,
@@ -907,10 +1015,15 @@ var html5 = {
907
1015
  permittedContent: ["@phrasing"],
908
1016
  permittedDescendants: [{ exclude: ["dfn"] }]
909
1017
  },
1018
+ /* https://html.spec.whatwg.org/multipage/interactive-elements.html#the-dialog-element */
910
1019
  dialog: {
911
1020
  flow: true,
912
1021
  permittedContent: ["@flow"],
913
1022
  attributes: {
1023
+ closedby: {
1024
+ omit: true,
1025
+ enum: ["any", "closerequest", "none"]
1026
+ },
914
1027
  open: {
915
1028
  boolean: true
916
1029
  }
@@ -925,6 +1038,7 @@ var html5 = {
925
1038
  source: "html4"
926
1039
  }
927
1040
  },
1041
+ /* https://html.spec.whatwg.org/multipage/grouping-content.html#the-div-element */
928
1042
  div: {
929
1043
  flow: true,
930
1044
  permittedContent: ["@flow", "dt", "dd"],
@@ -947,6 +1061,7 @@ var html5 = {
947
1061
  naming: "prohibited"
948
1062
  }
949
1063
  },
1064
+ /* https://html.spec.whatwg.org/multipage/grouping-content.html#the-dl-element */
950
1065
  dl: {
951
1066
  flow: true,
952
1067
  permittedContent: ["@script", "dt", "dd", "div"],
@@ -956,12 +1071,14 @@ var html5 = {
956
1071
  }
957
1072
  }
958
1073
  },
1074
+ /* https://html.spec.whatwg.org/multipage/grouping-content.html#the-dt-element */
959
1075
  dt: {
960
1076
  implicitClosed: ["dd", "dt"],
961
1077
  permittedContent: ["@flow"],
962
1078
  permittedDescendants: [{ exclude: ["header", "footer", "@sectioning", "@heading"] }],
963
1079
  requiredAncestors: ["dl > dt", "dl > div > dt", "template > dt", "template > div > dt"]
964
1080
  },
1081
+ /* https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-em-element */
965
1082
  em: {
966
1083
  flow: true,
967
1084
  phrasing: true,
@@ -971,6 +1088,7 @@ var html5 = {
971
1088
  naming: "prohibited"
972
1089
  }
973
1090
  },
1091
+ /* https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-embed-element */
974
1092
  embed: {
975
1093
  flow: true,
976
1094
  phrasing: true,
@@ -979,20 +1097,21 @@ var html5 = {
979
1097
  void: true,
980
1098
  attributes: {
981
1099
  height: {
982
- enum: ["/\\d+/"]
1100
+ enum: [validPositiveInteger]
983
1101
  },
984
1102
  src: {
985
1103
  required: true,
986
- enum: ["/.+/"]
1104
+ enum: [validNonEmptyString]
987
1105
  },
988
1106
  title: {
989
1107
  required: true
990
1108
  },
991
1109
  width: {
992
- enum: ["/\\d+/"]
1110
+ enum: [validPositiveInteger]
993
1111
  }
994
1112
  }
995
1113
  },
1114
+ /* https://html.spec.whatwg.org/multipage/form-elements.html#the-fieldset-element */
996
1115
  fieldset: {
997
1116
  flow: true,
998
1117
  formAssociated: {
@@ -1005,6 +1124,13 @@ var html5 = {
1005
1124
  },
1006
1125
  disabled: {
1007
1126
  boolean: true
1127
+ },
1128
+ form: {
1129
+ enum: [validId],
1130
+ reference: "id"
1131
+ },
1132
+ name: {
1133
+ enum: [validNonEmptyString]
1008
1134
  }
1009
1135
  },
1010
1136
  aria: {
@@ -1013,12 +1139,14 @@ var html5 = {
1013
1139
  permittedContent: ["@flow", "legend?"],
1014
1140
  permittedOrder: ["legend", "@flow"]
1015
1141
  },
1142
+ /* https://html.spec.whatwg.org/multipage/grouping-content.html#the-figcaption-element */
1016
1143
  figcaption: {
1017
1144
  permittedContent: ["@flow"],
1018
1145
  aria: {
1019
1146
  naming: "prohibited"
1020
1147
  }
1021
1148
  },
1149
+ /* https://html.spec.whatwg.org/multipage/grouping-content.html#the-figure-element */
1022
1150
  figure: {
1023
1151
  flow: true,
1024
1152
  aria: {
@@ -1034,6 +1162,7 @@ var html5 = {
1034
1162
  source: "html4"
1035
1163
  }
1036
1164
  },
1165
+ /* https://html.spec.whatwg.org/multipage/sections.html#the-footer-element */
1037
1166
  footer: {
1038
1167
  flow: true,
1039
1168
  aria: {
@@ -1055,22 +1184,28 @@ var html5 = {
1055
1184
  permittedContent: ["@flow"],
1056
1185
  permittedDescendants: [{ exclude: ["header", "footer", "main"] }]
1057
1186
  },
1187
+ /* https://html.spec.whatwg.org/multipage/forms.html#the-form-element */
1058
1188
  form: {
1059
1189
  flow: true,
1060
1190
  form: true,
1061
1191
  attributes: {
1062
- action: {
1063
- enum: [/^\s*\S+\s*$/]
1064
- },
1065
1192
  accept: {
1066
1193
  deprecated: true
1067
1194
  },
1195
+ "accept-charset": {},
1196
+ action: {
1197
+ enum: [/^\s*\S+\s*$/]
1198
+ },
1068
1199
  autocomplete: {
1069
1200
  enum: ["on", "off"]
1070
1201
  },
1202
+ enctype: {
1203
+ enum: ["application/x-www-form-urlencoded", "multipart/form-data", "text/plain"]
1204
+ },
1071
1205
  method: {
1072
1206
  enum: ["get", "post", "dialog"]
1073
1207
  },
1208
+ name: {},
1074
1209
  novalidate: {
1075
1210
  boolean: true
1076
1211
  },
@@ -1108,10 +1243,10 @@ var html5 = {
1108
1243
  return null;
1109
1244
  },
1110
1245
  list: true,
1111
- enum: ["/.+/"]
1246
+ enum: [validNonEmptyString]
1112
1247
  },
1113
1248
  target: {
1114
- enum: ["/[^_].*/", "_blank", "_self", "_parent", "_top"]
1249
+ enum: [validBrowsingContextName, "_blank", "_self", "_parent", "_top"]
1115
1250
  }
1116
1251
  },
1117
1252
  aria: {
@@ -1143,6 +1278,7 @@ var html5 = {
1143
1278
  source: "html5"
1144
1279
  }
1145
1280
  },
1281
+ /* https://html.spec.whatwg.org/multipage/sections.html#the-h1,-h2,-h3,-h4,-h5,-and-h6-elements */
1146
1282
  h1: {
1147
1283
  flow: true,
1148
1284
  heading: true,
@@ -1156,6 +1292,7 @@ var html5 = {
1156
1292
  implicitRole: "heading"
1157
1293
  }
1158
1294
  },
1295
+ /* https://html.spec.whatwg.org/multipage/sections.html#the-h1,-h2,-h3,-h4,-h5,-and-h6-elements */
1159
1296
  h2: {
1160
1297
  flow: true,
1161
1298
  heading: true,
@@ -1169,6 +1306,7 @@ var html5 = {
1169
1306
  implicitRole: "heading"
1170
1307
  }
1171
1308
  },
1309
+ /* https://html.spec.whatwg.org/multipage/sections.html#the-h1,-h2,-h3,-h4,-h5,-and-h6-elements */
1172
1310
  h3: {
1173
1311
  flow: true,
1174
1312
  heading: true,
@@ -1182,6 +1320,7 @@ var html5 = {
1182
1320
  implicitRole: "heading"
1183
1321
  }
1184
1322
  },
1323
+ /* https://html.spec.whatwg.org/multipage/sections.html#the-h1,-h2,-h3,-h4,-h5,-and-h6-elements */
1185
1324
  h4: {
1186
1325
  flow: true,
1187
1326
  heading: true,
@@ -1195,6 +1334,7 @@ var html5 = {
1195
1334
  implicitRole: "heading"
1196
1335
  }
1197
1336
  },
1337
+ /* https://html.spec.whatwg.org/multipage/sections.html#the-h1,-h2,-h3,-h4,-h5,-and-h6-elements */
1198
1338
  h5: {
1199
1339
  flow: true,
1200
1340
  heading: true,
@@ -1208,6 +1348,7 @@ var html5 = {
1208
1348
  implicitRole: "heading"
1209
1349
  }
1210
1350
  },
1351
+ /* https://html.spec.whatwg.org/multipage/sections.html#the-h1,-h2,-h3,-h4,-h5,-and-h6-elements */
1211
1352
  h6: {
1212
1353
  flow: true,
1213
1354
  heading: true,
@@ -1221,6 +1362,7 @@ var html5 = {
1221
1362
  implicitRole: "heading"
1222
1363
  }
1223
1364
  },
1365
+ /* https://html.spec.whatwg.org/multipage/document-metadata.html#the-head-element */
1224
1366
  head: {
1225
1367
  implicitClosed: ["body", "@flow-not-meta"],
1226
1368
  optionalEnd: true,
@@ -1236,6 +1378,7 @@ var html5 = {
1236
1378
  naming: "prohibited"
1237
1379
  }
1238
1380
  },
1381
+ /* https://html.spec.whatwg.org/multipage/sections.html#the-header-element */
1239
1382
  header: {
1240
1383
  flow: true,
1241
1384
  aria: {
@@ -1257,6 +1400,7 @@ var html5 = {
1257
1400
  permittedContent: ["@flow"],
1258
1401
  permittedDescendants: [{ exclude: ["header", "footer", "main"] }]
1259
1402
  },
1403
+ /* https://html.spec.whatwg.org/multipage/sections.html#the-hgroup-element */
1260
1404
  hgroup: {
1261
1405
  flow: true,
1262
1406
  heading: true,
@@ -1267,6 +1411,7 @@ var html5 = {
1267
1411
  implicitRole: "group"
1268
1412
  }
1269
1413
  },
1414
+ /* https://html.spec.whatwg.org/multipage/grouping-content.html#the-hr-element */
1270
1415
  hr: {
1271
1416
  flow: true,
1272
1417
  void: true,
@@ -1291,6 +1436,7 @@ var html5 = {
1291
1436
  implicitRole: "separator"
1292
1437
  }
1293
1438
  },
1439
+ /* https://html.spec.whatwg.org/multipage/semantics.html#the-html-element */
1294
1440
  html: {
1295
1441
  implicitOpen: [
1296
1442
  { for: ["@meta"], open: "head" },
@@ -1313,6 +1459,7 @@ var html5 = {
1313
1459
  naming: "prohibited"
1314
1460
  }
1315
1461
  },
1462
+ /* https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-i-element */
1316
1463
  i: {
1317
1464
  flow: true,
1318
1465
  phrasing: true,
@@ -1322,6 +1469,7 @@ var html5 = {
1322
1469
  naming: "prohibited"
1323
1470
  }
1324
1471
  },
1472
+ /* https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-iframe-element */
1325
1473
  iframe: {
1326
1474
  flow: true,
1327
1475
  phrasing: true,
@@ -1344,7 +1492,7 @@ var html5 = {
1344
1492
  deprecated: true
1345
1493
  },
1346
1494
  height: {
1347
- enum: ["/\\d+/"]
1495
+ enum: [validPositiveInteger]
1348
1496
  },
1349
1497
  hspace: {
1350
1498
  deprecated: true
@@ -1362,7 +1510,7 @@ var html5 = {
1362
1510
  deprecated: true
1363
1511
  },
1364
1512
  src: {
1365
- enum: ["/.+/"]
1513
+ enum: [validNonEmptyString]
1366
1514
  },
1367
1515
  title: {
1368
1516
  required: true
@@ -1371,11 +1519,12 @@ var html5 = {
1371
1519
  deprecated: true
1372
1520
  },
1373
1521
  width: {
1374
- enum: ["/\\d+/"]
1522
+ enum: [validPositiveInteger]
1375
1523
  }
1376
1524
  },
1377
1525
  permittedContent: []
1378
1526
  },
1527
+ /* https://html.spec.whatwg.org/multipage/embedded-content.html#the-img-element */
1379
1528
  img: {
1380
1529
  flow: true,
1381
1530
  phrasing: true,
@@ -1388,6 +1537,7 @@ var html5 = {
1388
1537
  align: {
1389
1538
  deprecated: true
1390
1539
  },
1540
+ alt: {},
1391
1541
  border: {
1392
1542
  deprecated: true
1393
1543
  },
@@ -1404,8 +1554,12 @@ var html5 = {
1404
1554
  decoding: {
1405
1555
  enum: ["sync", "async", "auto"]
1406
1556
  },
1557
+ fetchpriority: {
1558
+ omit: true,
1559
+ enum: ["high", "low", "auto"]
1560
+ },
1407
1561
  height: {
1408
- enum: ["/\\d+/"]
1562
+ enum: [validPositiveInteger]
1409
1563
  },
1410
1564
  hspace: {
1411
1565
  deprecated: true
@@ -1413,6 +1567,10 @@ var html5 = {
1413
1567
  ismap: {
1414
1568
  boolean: true
1415
1569
  },
1570
+ loading: {
1571
+ omit: true,
1572
+ enum: ["lazy", "eager"]
1573
+ },
1416
1574
  lowsrc: {
1417
1575
  deprecated: true
1418
1576
  },
@@ -1422,18 +1580,20 @@ var html5 = {
1422
1580
  referrerpolicy: {
1423
1581
  enum: ReferrerPolicy
1424
1582
  },
1583
+ sizes: {},
1425
1584
  src: {
1426
1585
  required: true,
1427
- enum: ["/.+/"]
1586
+ enum: [validNonEmptyString]
1428
1587
  },
1429
1588
  srcset: {
1430
1589
  enum: ["/[^]+/"]
1431
1590
  },
1591
+ usemap: {},
1432
1592
  vspace: {
1433
1593
  deprecated: true
1434
1594
  },
1435
1595
  width: {
1436
- enum: ["/\\d+/"]
1596
+ enum: [validPositiveInteger]
1437
1597
  }
1438
1598
  },
1439
1599
  aria: {
@@ -1461,6 +1621,7 @@ var html5 = {
1461
1621
  }
1462
1622
  }
1463
1623
  },
1624
+ /* https://html.spec.whatwg.org/multipage/input.html#the-input-element */
1464
1625
  input: {
1465
1626
  flow: true,
1466
1627
  focusable(node) {
@@ -1551,10 +1712,10 @@ var html5 = {
1551
1712
  allowed: allowedIfAttributeHasValue("type", ["submit", "image"], {
1552
1713
  defaultValue: "submit"
1553
1714
  }),
1554
- enum: ["/[^_].*/", "_blank", "_self", "_parent", "_top"]
1715
+ enum: [validBrowsingContextName, "_blank", "_self", "_parent", "_top"]
1555
1716
  },
1556
1717
  height: {
1557
- enum: ["/\\d+/"]
1718
+ enum: [validPositiveInteger]
1558
1719
  },
1559
1720
  hspace: {
1560
1721
  deprecated: true
@@ -1570,22 +1731,22 @@ var html5 = {
1570
1731
  reference: "id"
1571
1732
  },
1572
1733
  max: {
1573
- enum: ["/.+/"]
1734
+ enum: [validNonEmptyString]
1574
1735
  },
1575
1736
  maxlength: {
1576
- enum: ["/\\d+/"]
1737
+ enum: [validPositiveInteger]
1577
1738
  },
1578
1739
  min: {
1579
- enum: ["/.+/"]
1740
+ enum: [validNonEmptyString]
1580
1741
  },
1581
1742
  minlength: {
1582
- enum: ["/\\d+/"]
1743
+ enum: [validPositiveInteger]
1583
1744
  },
1584
1745
  multiple: {
1585
1746
  boolean: true
1586
1747
  },
1587
1748
  name: {
1588
- enum: ["/.+/"]
1749
+ enum: [validNonEmptyString]
1589
1750
  },
1590
1751
  pattern: {},
1591
1752
  placeholder: {},
@@ -1603,10 +1764,10 @@ var html5 = {
1603
1764
  boolean: true
1604
1765
  },
1605
1766
  size: {
1606
- enum: ["/\\d+/"]
1767
+ enum: [validPositiveInteger]
1607
1768
  },
1608
1769
  src: {
1609
- enum: ["/.+/"]
1770
+ enum: [validNonEmptyString]
1610
1771
  },
1611
1772
  step: {},
1612
1773
  type: {
@@ -1643,7 +1804,7 @@ var html5 = {
1643
1804
  deprecated: true
1644
1805
  },
1645
1806
  width: {
1646
- enum: ["/\\d+/"]
1807
+ enum: [validPositiveInteger]
1647
1808
  }
1648
1809
  },
1649
1810
  aria: {
@@ -1708,20 +1869,27 @@ var html5 = {
1708
1869
  }
1709
1870
  }
1710
1871
  },
1872
+ /* https://html.spec.whatwg.org/multipage/edits.html#the-ins-element */
1711
1873
  ins: {
1712
1874
  flow: true,
1713
1875
  phrasing: true,
1714
1876
  transparent: true,
1877
+ attributes: {
1878
+ cite: {},
1879
+ datetime: {}
1880
+ },
1715
1881
  aria: {
1716
1882
  implicitRole: "insertion",
1717
1883
  naming: "prohibited"
1718
1884
  }
1719
1885
  },
1886
+ /* https://html.spec.whatwg.org/multipage/obsolete.html#isindex */
1720
1887
  isindex: {
1721
1888
  deprecated: {
1722
1889
  source: "html4"
1723
1890
  }
1724
1891
  },
1892
+ /* https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-kbd-element */
1725
1893
  kbd: {
1726
1894
  flow: true,
1727
1895
  phrasing: true,
@@ -1738,6 +1906,7 @@ var html5 = {
1738
1906
  labelable: true,
1739
1907
  deprecated: true
1740
1908
  },
1909
+ /* https://html.spec.whatwg.org/multipage/forms.html#the-label-element */
1741
1910
  label: {
1742
1911
  flow: true,
1743
1912
  phrasing: true,
@@ -1763,6 +1932,7 @@ var html5 = {
1763
1932
  naming: "prohibited"
1764
1933
  }
1765
1934
  },
1935
+ /* https://html.spec.whatwg.org/multipage/form-elements.html#the-legend-element */
1766
1936
  legend: {
1767
1937
  permittedContent: ["@phrasing", "@heading"],
1768
1938
  attributes: {
@@ -1783,6 +1953,7 @@ var html5 = {
1783
1953
  naming: "prohibited"
1784
1954
  }
1785
1955
  },
1956
+ /* https://html.spec.whatwg.org/multipage/grouping-content.html#the-li-element */
1786
1957
  li: {
1787
1958
  implicitClosed: ["li"],
1788
1959
  permittedContent: ["@flow"],
@@ -1790,6 +1961,9 @@ var html5 = {
1790
1961
  attributes: {
1791
1962
  type: {
1792
1963
  deprecated: true
1964
+ },
1965
+ value: {
1966
+ enum: ["/-?\\d+/"]
1793
1967
  }
1794
1968
  },
1795
1969
  aria: {
@@ -1798,6 +1972,7 @@ var html5 = {
1798
1972
  }
1799
1973
  }
1800
1974
  },
1975
+ /* https://html.spec.whatwg.org/multipage/document-metadata.html#the-link-element */
1801
1976
  link: {
1802
1977
  metadata: true,
1803
1978
  flow(node) {
@@ -1858,7 +2033,7 @@ var html5 = {
1858
2033
  }
1859
2034
  return `{{ tagName }} is missing required "href" or "imagesrcset" attribute`;
1860
2035
  },
1861
- enum: ["/.+/"]
2036
+ enum: [validNonEmptyString]
1862
2037
  },
1863
2038
  imagesrcset: {
1864
2039
  allowed(node) {
@@ -1895,7 +2070,7 @@ var html5 = {
1895
2070
  },
1896
2071
  integrity: {
1897
2072
  allowed: allowedIfAttributeHasValue("rel", ["stylesheet", "preload", "modulepreload"]),
1898
- enum: ["/.+/"]
2073
+ enum: [validNonEmptyString]
1899
2074
  },
1900
2075
  methods: {
1901
2076
  deprecated: true
@@ -1932,7 +2107,7 @@ var html5 = {
1932
2107
  return null;
1933
2108
  },
1934
2109
  list: true,
1935
- enum: ["/.+/"]
2110
+ enum: [validNonEmptyString]
1936
2111
  },
1937
2112
  target: {
1938
2113
  deprecated: true
@@ -1950,12 +2125,14 @@ var html5 = {
1950
2125
  source: "html32"
1951
2126
  }
1952
2127
  },
2128
+ /* https://html.spec.whatwg.org/multipage/grouping-content.html#the-main-element */
1953
2129
  main: {
1954
2130
  flow: true,
1955
2131
  aria: {
1956
2132
  implicitRole: "main"
1957
2133
  }
1958
2134
  },
2135
+ /* https://html.spec.whatwg.org/multipage/image-maps.html#the-map-element */
1959
2136
  map: {
1960
2137
  flow: true,
1961
2138
  phrasing: true,
@@ -1970,6 +2147,7 @@ var html5 = {
1970
2147
  naming: "prohibited"
1971
2148
  }
1972
2149
  },
2150
+ /* https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-mark-element */
1973
2151
  mark: {
1974
2152
  flow: true,
1975
2153
  phrasing: true,
@@ -1995,6 +2173,7 @@ var html5 = {
1995
2173
  }
1996
2174
  }
1997
2175
  },
2176
+ /* https://html.spec.whatwg.org/multipage/embedded-content.html#mathml */
1998
2177
  math: {
1999
2178
  flow: true,
2000
2179
  foreign: true,
@@ -2027,6 +2206,7 @@ var html5 = {
2027
2206
  implicitRole: "math"
2028
2207
  }
2029
2208
  },
2209
+ /* https://html.spec.whatwg.org/multipage/grouping-content.html#the-menu-element */
2030
2210
  menu: {
2031
2211
  flow: true,
2032
2212
  aria: {
@@ -2034,6 +2214,7 @@ var html5 = {
2034
2214
  },
2035
2215
  permittedContent: ["@script", "li"]
2036
2216
  },
2217
+ /* https://html.spec.whatwg.org/multipage/semantics.html#the-meta-element */
2037
2218
  meta: {
2038
2219
  flow(node) {
2039
2220
  return node.hasAttribute("itemprop");
@@ -2067,10 +2248,31 @@ var html5 = {
2067
2248
  naming: "prohibited"
2068
2249
  }
2069
2250
  },
2251
+ /* https://html.spec.whatwg.org/multipage/form-elements.html#the-meter-element */
2070
2252
  meter: {
2071
2253
  flow: true,
2072
2254
  phrasing: true,
2073
2255
  labelable: true,
2256
+ attributes: {
2257
+ high: {
2258
+ enum: [validFloatingPoint]
2259
+ },
2260
+ low: {
2261
+ enum: [validFloatingPoint]
2262
+ },
2263
+ max: {
2264
+ enum: [validFloatingPoint]
2265
+ },
2266
+ min: {
2267
+ enum: [validFloatingPoint]
2268
+ },
2269
+ optimum: {
2270
+ enum: [validFloatingPoint]
2271
+ },
2272
+ value: {
2273
+ enum: [validFloatingPoint]
2274
+ }
2275
+ },
2074
2276
  aria: {
2075
2277
  implicitRole: "meter"
2076
2278
  },
@@ -2084,6 +2286,7 @@ var html5 = {
2084
2286
  source: "html5"
2085
2287
  }
2086
2288
  },
2289
+ /* https://html.spec.whatwg.org/multipage/sections.html#the-nav-element */
2087
2290
  nav: {
2088
2291
  flow: true,
2089
2292
  sectioning: true,
@@ -2115,6 +2318,7 @@ var html5 = {
2115
2318
  source: "html5"
2116
2319
  }
2117
2320
  },
2321
+ /* https://html.spec.whatwg.org/multipage/scripting.html#the-noscript-element */
2118
2322
  noscript: {
2119
2323
  metadata: true,
2120
2324
  flow: true,
@@ -2125,6 +2329,7 @@ var html5 = {
2125
2329
  naming: "prohibited"
2126
2330
  }
2127
2331
  },
2332
+ /* https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-object-element */
2128
2333
  object: {
2129
2334
  flow: true,
2130
2335
  phrasing: true,
@@ -2164,7 +2369,7 @@ var html5 = {
2164
2369
  deprecated: true
2165
2370
  },
2166
2371
  data: {
2167
- enum: ["/.+/"],
2372
+ enum: [validNonEmptyString],
2168
2373
  required: true
2169
2374
  },
2170
2375
  datafld: {
@@ -2180,13 +2385,13 @@ var html5 = {
2180
2385
  deprecated: true
2181
2386
  },
2182
2387
  height: {
2183
- enum: ["/\\d+/"]
2388
+ enum: [validPositiveInteger]
2184
2389
  },
2185
2390
  hspace: {
2186
2391
  deprecated: true
2187
2392
  },
2188
2393
  name: {
2189
- enum: ["/[^_].*/"]
2394
+ enum: [validBrowsingContextName]
2190
2395
  },
2191
2396
  standby: {
2192
2397
  deprecated: true
@@ -2195,12 +2400,13 @@ var html5 = {
2195
2400
  deprecated: true
2196
2401
  },
2197
2402
  width: {
2198
- enum: ["/\\d+/"]
2403
+ enum: [validPositiveInteger]
2199
2404
  }
2200
2405
  },
2201
2406
  permittedContent: ["param", "@flow"],
2202
2407
  permittedOrder: ["param", "@flow"]
2203
2408
  },
2409
+ /* https://html.spec.whatwg.org/multipage/grouping-content.html#the-ol-element */
2204
2410
  ol: {
2205
2411
  flow: true,
2206
2412
  attributes: {
@@ -2210,6 +2416,9 @@ var html5 = {
2210
2416
  reversed: {
2211
2417
  boolean: true
2212
2418
  },
2419
+ start: {
2420
+ enum: [validPositiveInteger]
2421
+ },
2213
2422
  type: {
2214
2423
  enum: ["a", "A", "i", "I", "1"]
2215
2424
  }
@@ -2219,18 +2428,21 @@ var html5 = {
2219
2428
  },
2220
2429
  permittedContent: ["@script", "li"]
2221
2430
  },
2431
+ /* https://html.spec.whatwg.org/multipage/form-elements.html#the-optgroup-element */
2222
2432
  optgroup: {
2223
2433
  implicitClosed: ["optgroup"],
2224
2434
  attributes: {
2225
2435
  disabled: {
2226
2436
  boolean: true
2227
- }
2437
+ },
2438
+ label: {}
2228
2439
  },
2229
2440
  aria: {
2230
2441
  implicitRole: "group"
2231
2442
  },
2232
2443
  permittedContent: ["@script", "option"]
2233
2444
  },
2445
+ /* https://html.spec.whatwg.org/multipage/form-elements.html#the-option-element */
2234
2446
  option: {
2235
2447
  implicitClosed: ["option"],
2236
2448
  attributes: {
@@ -2243,6 +2455,7 @@ var html5 = {
2243
2455
  disabled: {
2244
2456
  boolean: true
2245
2457
  },
2458
+ label: {},
2246
2459
  name: {
2247
2460
  deprecated: true
2248
2461
  },
@@ -2257,6 +2470,7 @@ var html5 = {
2257
2470
  permittedContent: ["@phrasing", "div"],
2258
2471
  permittedDescendants: [{ exclude: ["@interactive", "datalist", "object"] }]
2259
2472
  },
2473
+ /* https://html.spec.whatwg.org/multipage/form-elements.html#the-output-element */
2260
2474
  output: {
2261
2475
  flow: true,
2262
2476
  phrasing: true,
@@ -2265,11 +2479,26 @@ var html5 = {
2265
2479
  listed: true
2266
2480
  },
2267
2481
  labelable: true,
2482
+ attributes: {
2483
+ for: {
2484
+ list: true,
2485
+ enum: [validId],
2486
+ reference: "id"
2487
+ },
2488
+ form: {
2489
+ enum: [validId],
2490
+ reference: "id"
2491
+ },
2492
+ name: {
2493
+ enum: [validNonEmptyString]
2494
+ }
2495
+ },
2268
2496
  aria: {
2269
2497
  implicitRole: "status"
2270
2498
  },
2271
2499
  permittedContent: ["@phrasing"]
2272
2500
  },
2501
+ /* https://html.spec.whatwg.org/multipage/grouping-content.html#the-p-element */
2273
2502
  p: {
2274
2503
  flow: true,
2275
2504
  implicitClosed: [
@@ -2337,6 +2566,7 @@ var html5 = {
2337
2566
  naming: "prohibited"
2338
2567
  }
2339
2568
  },
2569
+ /* https://html.spec.whatwg.org/multipage/embedded-content.html#the-picture-element */
2340
2570
  picture: {
2341
2571
  flow: true,
2342
2572
  phrasing: true,
@@ -2354,6 +2584,7 @@ var html5 = {
2354
2584
  source: "html2"
2355
2585
  }
2356
2586
  },
2587
+ /* https://html.spec.whatwg.org/multipage/grouping-content.html#the-pre-element */
2357
2588
  pre: {
2358
2589
  flow: true,
2359
2590
  permittedContent: ["@phrasing"],
@@ -2367,19 +2598,32 @@ var html5 = {
2367
2598
  naming: "prohibited"
2368
2599
  }
2369
2600
  },
2601
+ /* https://html.spec.whatwg.org/multipage/form-elements.html#the-progress-element */
2370
2602
  progress: {
2371
2603
  flow: true,
2372
2604
  phrasing: true,
2373
2605
  labelable: true,
2606
+ attributes: {
2607
+ max: {
2608
+ enum: [validFloatingPoint]
2609
+ },
2610
+ value: {
2611
+ enum: [validFloatingPoint]
2612
+ }
2613
+ },
2374
2614
  aria: {
2375
2615
  implicitRole: "progressbar"
2376
2616
  },
2377
2617
  permittedContent: ["@phrasing"],
2378
2618
  permittedDescendants: [{ exclude: "progress" }]
2379
2619
  },
2620
+ /* https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-q-element */
2380
2621
  q: {
2381
2622
  flow: true,
2382
2623
  phrasing: true,
2624
+ attributes: {
2625
+ cite: {}
2626
+ },
2383
2627
  permittedContent: ["@phrasing"],
2384
2628
  aria: {
2385
2629
  implicitRole: "generic",
@@ -2390,6 +2634,7 @@ var html5 = {
2390
2634
  implicitClosed: ["rb", "rt", "rtc", "rp"],
2391
2635
  permittedContent: ["@phrasing"]
2392
2636
  },
2637
+ /* https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-rp-element */
2393
2638
  rp: {
2394
2639
  implicitClosed: ["rb", "rt", "rtc", "rp"],
2395
2640
  permittedContent: ["@phrasing"],
@@ -2397,6 +2642,7 @@ var html5 = {
2397
2642
  naming: "prohibited"
2398
2643
  }
2399
2644
  },
2645
+ /* https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-rt-element */
2400
2646
  rt: {
2401
2647
  implicitClosed: ["rb", "rt", "rtc", "rp"],
2402
2648
  permittedContent: ["@phrasing"],
@@ -2408,11 +2654,13 @@ var html5 = {
2408
2654
  implicitClosed: ["rb", "rtc", "rp"],
2409
2655
  permittedContent: ["@phrasing", "rt"]
2410
2656
  },
2657
+ /* https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-ruby-element */
2411
2658
  ruby: {
2412
2659
  flow: true,
2413
2660
  phrasing: true,
2414
2661
  permittedContent: ["@phrasing", "rb", "rp", "rt", "rtc"]
2415
2662
  },
2663
+ /* https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-s-element */
2416
2664
  s: {
2417
2665
  flow: true,
2418
2666
  phrasing: true,
@@ -2422,6 +2670,7 @@ var html5 = {
2422
2670
  naming: "prohibited"
2423
2671
  }
2424
2672
  },
2673
+ /* https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-samp-element */
2425
2674
  samp: {
2426
2675
  flow: true,
2427
2676
  phrasing: true,
@@ -2431,6 +2680,7 @@ var html5 = {
2431
2680
  naming: "prohibited"
2432
2681
  }
2433
2682
  },
2683
+ /* https://html.spec.whatwg.org/multipage/scripting.html#the-script-element */
2434
2684
  script: {
2435
2685
  metadata: true,
2436
2686
  flow: true,
@@ -2462,7 +2712,7 @@ var html5 = {
2462
2712
  },
2463
2713
  integrity: {
2464
2714
  allowed: allowedIfAttributeIsPresent("src"),
2465
- enum: ["/.+/"]
2715
+ enum: [validNonEmptyString]
2466
2716
  },
2467
2717
  language: {
2468
2718
  deprecated: true
@@ -2474,7 +2724,7 @@ var html5 = {
2474
2724
  enum: ReferrerPolicy
2475
2725
  },
2476
2726
  src: {
2477
- enum: ["/.+/"]
2727
+ enum: [validNonEmptyString]
2478
2728
  },
2479
2729
  type: {}
2480
2730
  },
@@ -2482,12 +2732,14 @@ var html5 = {
2482
2732
  naming: "prohibited"
2483
2733
  }
2484
2734
  },
2735
+ /* https://html.spec.whatwg.org/multipage/grouping-content.html#the-search-element */
2485
2736
  search: {
2486
2737
  flow: true,
2487
2738
  aria: {
2488
2739
  implicitRole: "search"
2489
2740
  }
2490
2741
  },
2742
+ /* https://html.spec.whatwg.org/multipage/sections.html#the-section-element */
2491
2743
  section: {
2492
2744
  flow: true,
2493
2745
  sectioning: true,
@@ -2499,6 +2751,7 @@ var html5 = {
2499
2751
  },
2500
2752
  permittedContent: ["@flow"]
2501
2753
  },
2754
+ /* https://html.spec.whatwg.org/multipage/form-elements.html#the-select-element */
2502
2755
  select: {
2503
2756
  flow: true,
2504
2757
  focusable: true,
@@ -2510,20 +2763,28 @@ var html5 = {
2510
2763
  },
2511
2764
  labelable: true,
2512
2765
  attributes: {
2766
+ autocomplete: {},
2513
2767
  autofocus: {
2514
2768
  boolean: true
2515
2769
  },
2516
2770
  disabled: {
2517
2771
  boolean: true
2518
2772
  },
2773
+ form: {
2774
+ enum: [validId],
2775
+ reference: "id"
2776
+ },
2519
2777
  multiple: {
2520
2778
  boolean: true
2521
2779
  },
2780
+ name: {
2781
+ enum: [validNonEmptyString]
2782
+ },
2522
2783
  required: {
2523
2784
  boolean: true
2524
2785
  },
2525
2786
  size: {
2526
- enum: ["/\\d+/"]
2787
+ enum: [validPositiveInteger]
2527
2788
  }
2528
2789
  },
2529
2790
  aria: {
@@ -2562,6 +2823,7 @@ var html5 = {
2562
2823
  ],
2563
2824
  permittedOrder: ["button", "option, optgroup, hr"]
2564
2825
  },
2826
+ /* https://html.spec.whatwg.org/multipage/form-elements.html#the-selectedcontent-element */
2565
2827
  selectedcontent: {
2566
2828
  phrasing: true,
2567
2829
  permittedContent: [],
@@ -2572,6 +2834,7 @@ var html5 = {
2572
2834
  naming: "prohibited"
2573
2835
  }
2574
2836
  },
2837
+ /* https://html.spec.whatwg.org/multipage/scripting.html#the-slot-element */
2575
2838
  slot: {
2576
2839
  flow: true,
2577
2840
  phrasing: true,
@@ -2583,6 +2846,7 @@ var html5 = {
2583
2846
  name: {}
2584
2847
  }
2585
2848
  },
2849
+ /* https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-small-element */
2586
2850
  small: {
2587
2851
  flow: true,
2588
2852
  phrasing: true,
@@ -2592,6 +2856,7 @@ var html5 = {
2592
2856
  naming: "prohibited"
2593
2857
  }
2594
2858
  },
2859
+ /* https://html.spec.whatwg.org/multipage/embedded-content.html#the-source-element */
2595
2860
  source: {
2596
2861
  void: true,
2597
2862
  attributes: {
@@ -2608,11 +2873,11 @@ var html5 = {
2608
2873
  },
2609
2874
  width: {
2610
2875
  allowed: allowedIfParentIsPresent("picture"),
2611
- enum: ["/\\d+/"]
2876
+ enum: [validPositiveInteger]
2612
2877
  },
2613
2878
  height: {
2614
2879
  allowed: allowedIfParentIsPresent("picture"),
2615
- enum: ["/\\d+/"]
2880
+ enum: [validPositiveInteger]
2616
2881
  }
2617
2882
  },
2618
2883
  aria: {
@@ -2626,6 +2891,7 @@ var html5 = {
2626
2891
  source: "non-standard"
2627
2892
  }
2628
2893
  },
2894
+ /* https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-span-element */
2629
2895
  span: {
2630
2896
  flow: true,
2631
2897
  phrasing: true,
@@ -2653,6 +2919,7 @@ var html5 = {
2653
2919
  source: "html5"
2654
2920
  }
2655
2921
  },
2922
+ /* https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-strong-element */
2656
2923
  strong: {
2657
2924
  flow: true,
2658
2925
  phrasing: true,
@@ -2662,12 +2929,14 @@ var html5 = {
2662
2929
  naming: "prohibited"
2663
2930
  }
2664
2931
  },
2932
+ /* https://html.spec.whatwg.org/multipage/semantics.html#the-style-element */
2665
2933
  style: {
2666
2934
  metadata: true,
2667
2935
  aria: {
2668
2936
  naming: "prohibited"
2669
2937
  }
2670
2938
  },
2939
+ /* https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-sub-and-sup-elements */
2671
2940
  sub: {
2672
2941
  flow: true,
2673
2942
  phrasing: true,
@@ -2677,6 +2946,7 @@ var html5 = {
2677
2946
  naming: "prohibited"
2678
2947
  }
2679
2948
  },
2949
+ /* https://html.spec.whatwg.org/multipage/interactive-elements.html#the-summary-element */
2680
2950
  summary: {
2681
2951
  permittedContent: ["@phrasing", "@heading"],
2682
2952
  focusable(node) {
@@ -2686,6 +2956,7 @@ var html5 = {
2686
2956
  implicitRole: "button"
2687
2957
  }
2688
2958
  },
2959
+ /* https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-sub-and-sup-elements */
2689
2960
  sup: {
2690
2961
  flow: true,
2691
2962
  phrasing: true,
@@ -2695,6 +2966,7 @@ var html5 = {
2695
2966
  naming: "prohibited"
2696
2967
  }
2697
2968
  },
2969
+ /* https://html.spec.whatwg.org/multipage/embedded-content.html#svg-0 */
2698
2970
  svg: {
2699
2971
  flow: true,
2700
2972
  foreign: true,
@@ -2714,6 +2986,7 @@ var html5 = {
2714
2986
  * "no-unknown-elements" they are added here */
2715
2987
  "svg:desc": {},
2716
2988
  "svg:title": {},
2989
+ /* https://html.spec.whatwg.org/multipage/tables.html#the-table-element */
2717
2990
  table: {
2718
2991
  flow: true,
2719
2992
  permittedContent: ["@script", "caption?", "colgroup", "tbody", "tfoot?", "thead?", "tr"],
@@ -2763,6 +3036,7 @@ var html5 = {
2763
3036
  implicitRole: "table"
2764
3037
  }
2765
3038
  },
3039
+ /* https://html.spec.whatwg.org/multipage/tables.html#the-tbody-element */
2766
3040
  tbody: {
2767
3041
  implicitClosed: ["tbody", "tfoot"],
2768
3042
  permittedContent: ["@script", "tr"],
@@ -2787,6 +3061,7 @@ var html5 = {
2787
3061
  implicitRole: "rowgroup"
2788
3062
  }
2789
3063
  },
3064
+ /* https://html.spec.whatwg.org/multipage/tables.html#the-td-element */
2790
3065
  td: {
2791
3066
  flow: true,
2792
3067
  implicitClosed: ["td", "th", "tr", "tbody", "tfoot"],
@@ -2810,7 +3085,12 @@ var html5 = {
2810
3085
  deprecated: true
2811
3086
  },
2812
3087
  colspan: {
2813
- enum: ["/\\d+/"]
3088
+ enum: [validPositiveInteger]
3089
+ },
3090
+ headers: {
3091
+ list: true,
3092
+ enum: [validId],
3093
+ reference: "id"
2814
3094
  },
2815
3095
  height: {
2816
3096
  deprecated: true
@@ -2819,7 +3099,7 @@ var html5 = {
2819
3099
  deprecated: true
2820
3100
  },
2821
3101
  rowspan: {
2822
- enum: ["/\\d+/"]
3102
+ enum: [validPositiveInteger]
2823
3103
  },
2824
3104
  scope: {
2825
3105
  deprecated: true
@@ -2848,16 +3128,38 @@ var html5 = {
2848
3128
  },
2849
3129
  permittedContent: ["@flow"]
2850
3130
  },
3131
+ /* https://html.spec.whatwg.org/multipage/scripting.html#the-template-element */
2851
3132
  template: {
2852
3133
  metadata: true,
2853
3134
  flow: true,
2854
3135
  phrasing: true,
2855
3136
  scriptSupporting: true,
2856
3137
  templateRoot: true,
3138
+ attributes: {
3139
+ shadowrootclonable: {
3140
+ boolean: true
3141
+ },
3142
+ shadowrootcustomelementregistry: {
3143
+ boolean: true
3144
+ },
3145
+ shadowrootdelegatesfocus: {
3146
+ boolean: true
3147
+ },
3148
+ shadowrootmode: {
3149
+ enum: ["open", "closed"]
3150
+ },
3151
+ shadowrootserializable: {
3152
+ boolean: true
3153
+ },
3154
+ shadowrootslotassignment: {
3155
+ enum: ["named", "manual"]
3156
+ }
3157
+ },
2857
3158
  aria: {
2858
3159
  naming: "prohibited"
2859
3160
  }
2860
3161
  },
3162
+ /* https://html.spec.whatwg.org/multipage/form-elements.html#the-textarea-element */
2861
3163
  textarea: {
2862
3164
  flow: true,
2863
3165
  focusable: true,
@@ -2874,7 +3176,7 @@ var html5 = {
2874
3176
  boolean: true
2875
3177
  },
2876
3178
  cols: {
2877
- enum: ["/\\d+/"]
3179
+ enum: [validPositiveInteger]
2878
3180
  },
2879
3181
  datafld: {
2880
3182
  deprecated: true
@@ -2882,15 +3184,26 @@ var html5 = {
2882
3184
  datasrc: {
2883
3185
  deprecated: true
2884
3186
  },
3187
+ dirname: {
3188
+ enum: [validNonEmptyString]
3189
+ },
2885
3190
  disabled: {
2886
3191
  boolean: true
2887
3192
  },
3193
+ form: {
3194
+ enum: [validId],
3195
+ reference: "id"
3196
+ },
2888
3197
  maxlength: {
2889
- enum: ["/\\d+/"]
3198
+ enum: [validPositiveInteger]
2890
3199
  },
2891
3200
  minlength: {
2892
- enum: ["/\\d+/"]
3201
+ enum: [validPositiveInteger]
2893
3202
  },
3203
+ name: {
3204
+ enum: [validNonEmptyString]
3205
+ },
3206
+ placeholder: {},
2894
3207
  readonly: {
2895
3208
  boolean: true
2896
3209
  },
@@ -2898,7 +3211,7 @@ var html5 = {
2898
3211
  boolean: true
2899
3212
  },
2900
3213
  rows: {
2901
- enum: ["/\\d+/"]
3214
+ enum: [validPositiveInteger]
2902
3215
  },
2903
3216
  wrap: {
2904
3217
  enum: ["hard", "soft"]
@@ -2909,6 +3222,7 @@ var html5 = {
2909
3222
  },
2910
3223
  permittedContent: []
2911
3224
  },
3225
+ /* https://html.spec.whatwg.org/multipage/tables.html#the-tfoot-element */
2912
3226
  tfoot: {
2913
3227
  implicitClosed: ["tbody"],
2914
3228
  optionalEnd: true,
@@ -2934,10 +3248,12 @@ var html5 = {
2934
3248
  implicitRole: "rowgroup"
2935
3249
  }
2936
3250
  },
3251
+ /* https://html.spec.whatwg.org/multipage/tables.html#the-th-element */
2937
3252
  th: {
2938
3253
  flow: true,
2939
3254
  implicitClosed: ["td", "th", "tr", "tbody", "tfoot"],
2940
3255
  attributes: {
3256
+ abbr: {},
2941
3257
  align: {
2942
3258
  deprecated: true
2943
3259
  },
@@ -2953,11 +3269,16 @@ var html5 = {
2953
3269
  char: {
2954
3270
  deprecated: true
2955
3271
  },
3272
+ headers: {
3273
+ list: true,
3274
+ enum: [validId],
3275
+ reference: "id"
3276
+ },
2956
3277
  charoff: {
2957
3278
  deprecated: true
2958
3279
  },
2959
3280
  colspan: {
2960
- enum: ["/\\d+/"]
3281
+ enum: [validPositiveInteger]
2961
3282
  },
2962
3283
  height: {
2963
3284
  deprecated: true
@@ -2966,7 +3287,7 @@ var html5 = {
2966
3287
  deprecated: true
2967
3288
  },
2968
3289
  rowspan: {
2969
- enum: ["/\\d+/"]
3290
+ enum: [validPositiveInteger]
2970
3291
  },
2971
3292
  scope: {
2972
3293
  enum: ["row", "col", "rowgroup", "colgroup"]
@@ -2999,6 +3320,7 @@ var html5 = {
2999
3320
  permittedContent: ["@flow"],
3000
3321
  permittedDescendants: [{ exclude: ["header", "footer", "@sectioning", "@heading"] }]
3001
3322
  },
3323
+ /* https://html.spec.whatwg.org/multipage/tables.html#the-thead-element */
3002
3324
  thead: {
3003
3325
  implicitClosed: ["tbody", "tfoot"],
3004
3326
  optionalEnd: true,
@@ -3024,15 +3346,20 @@ var html5 = {
3024
3346
  implicitRole: "rowgroup"
3025
3347
  }
3026
3348
  },
3349
+ /* https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-time-element */
3027
3350
  time: {
3028
3351
  flow: true,
3029
3352
  phrasing: true,
3353
+ attributes: {
3354
+ datetime: {}
3355
+ },
3030
3356
  aria: {
3031
3357
  implicitRole: "time",
3032
3358
  naming: "prohibited"
3033
3359
  },
3034
3360
  permittedContent: ["@phrasing"]
3035
3361
  },
3362
+ /* https://html.spec.whatwg.org/multipage/document-metadata.html#the-title-element */
3036
3363
  title: {
3037
3364
  metadata: true,
3038
3365
  permittedContent: [],
@@ -3041,6 +3368,7 @@ var html5 = {
3041
3368
  naming: "prohibited"
3042
3369
  }
3043
3370
  },
3371
+ /* https://html.spec.whatwg.org/multipage/tables.html#the-tr-element */
3044
3372
  tr: {
3045
3373
  implicitClosed: ["tr", "tbody", "tfoot"],
3046
3374
  permittedContent: ["@script", "td", "th"],
@@ -3068,8 +3396,24 @@ var html5 = {
3068
3396
  implicitRole: "row"
3069
3397
  }
3070
3398
  },
3399
+ /* https://html.spec.whatwg.org/multipage/media.html#the-track-element */
3071
3400
  track: {
3072
3401
  void: true,
3402
+ attributes: {
3403
+ default: {
3404
+ boolean: true
3405
+ },
3406
+ kind: {
3407
+ omit: true,
3408
+ enum: ["subtitles", "captions", "descriptions", "chapters", "metadata"]
3409
+ },
3410
+ label: {},
3411
+ src: {
3412
+ required: true,
3413
+ enum: [validNonEmptyString]
3414
+ },
3415
+ srclang: {}
3416
+ },
3073
3417
  aria: {
3074
3418
  naming: "prohibited"
3075
3419
  }
@@ -3080,6 +3424,7 @@ var html5 = {
3080
3424
  source: "html4"
3081
3425
  }
3082
3426
  },
3427
+ /* https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-u-element */
3083
3428
  u: {
3084
3429
  flow: true,
3085
3430
  phrasing: true,
@@ -3089,6 +3434,7 @@ var html5 = {
3089
3434
  naming: "prohibited"
3090
3435
  }
3091
3436
  },
3437
+ /* https://html.spec.whatwg.org/multipage/grouping-content.html#the-ul-element */
3092
3438
  ul: {
3093
3439
  flow: true,
3094
3440
  permittedContent: ["@script", "li"],
@@ -3104,6 +3450,7 @@ var html5 = {
3104
3450
  implicitRole: "list"
3105
3451
  }
3106
3452
  },
3453
+ /* https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-var-element */
3107
3454
  var: {
3108
3455
  flow: true,
3109
3456
  phrasing: true,
@@ -3112,6 +3459,7 @@ var html5 = {
3112
3459
  naming: "prohibited"
3113
3460
  }
3114
3461
  },
3462
+ /* https://html.spec.whatwg.org/multipage/media.html#the-video-element */
3115
3463
  video: {
3116
3464
  flow: true,
3117
3465
  focusable(node) {
@@ -3124,28 +3472,50 @@ var html5 = {
3124
3472
  },
3125
3473
  transparent: ["@flow"],
3126
3474
  attributes: {
3475
+ autoplay: {
3476
+ boolean: true
3477
+ },
3478
+ controls: {
3479
+ boolean: true
3480
+ },
3127
3481
  crossorigin: {
3128
3482
  omit: true,
3129
3483
  enum: ["anonymous", "use-credentials"]
3130
3484
  },
3131
3485
  height: {
3132
- enum: ["/\\d+/"]
3486
+ enum: [validPositiveInteger]
3133
3487
  },
3134
3488
  itemprop: {
3135
3489
  allowed: allowedIfAttributeIsPresent("src")
3136
3490
  },
3491
+ loop: {
3492
+ boolean: true
3493
+ },
3494
+ muted: {
3495
+ boolean: true
3496
+ },
3497
+ playsinline: {
3498
+ boolean: true
3499
+ },
3500
+ poster: {
3501
+ enum: [validNonEmptyString]
3502
+ },
3137
3503
  preload: {
3138
3504
  omit: true,
3139
3505
  enum: ["none", "metadata", "auto"]
3140
3506
  },
3507
+ src: {
3508
+ enum: [validNonEmptyString]
3509
+ },
3141
3510
  width: {
3142
- enum: ["/\\d+/"]
3511
+ enum: [validPositiveInteger]
3143
3512
  }
3144
3513
  },
3145
3514
  permittedContent: ["@flow", "track", "source"],
3146
3515
  permittedDescendants: [{ exclude: ["audio", "video"] }],
3147
3516
  permittedOrder: ["source", "track", "@flow"]
3148
3517
  },
3518
+ /* https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-wbr-element */
3149
3519
  wbr: {
3150
3520
  flow: true,
3151
3521
  phrasing: true,
@@ -3154,6 +3524,7 @@ var html5 = {
3154
3524
  naming: "prohibited"
3155
3525
  }
3156
3526
  },
3527
+ /* https://html.spec.whatwg.org/multipage/obsolete.html#the-xmp-element */
3157
3528
  xmp: {
3158
3529
  deprecated: {
3159
3530
  documentation: "Use `<pre>` or `<code>` and escape content using HTML entities instead.",