html-standard 0.0.3 → 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -141,7 +141,45 @@ __export(elements_exports, {
141
141
  wbr: () => wbr
142
142
  });
143
143
 
144
- // src/elements/common/attributes.ts
144
+ // src/helpers/contents.ts
145
+ var contents = {
146
+ fromKeys(...keys) {
147
+ return new Set(keys);
148
+ },
149
+ fromSet(set, ...keys) {
150
+ const result = new Set(set);
151
+ keys.forEach((key) => set.add(key));
152
+ return result;
153
+ },
154
+ fromUnionSets(setA, setB) {
155
+ const set = new Set(...setA, ...setB);
156
+ return set;
157
+ }
158
+ };
159
+
160
+ // src/helpers/content-constraint.ts
161
+ var contentConstraint = {
162
+ fromEntries(entries) {
163
+ return new Map(entries);
164
+ },
165
+ fromSets(value, ...sets) {
166
+ return new Map(
167
+ sets.reduce((acc, set) => [...acc, ...set], []).map((key) => [key, value])
168
+ );
169
+ }
170
+ };
171
+ var required = {
172
+ required: true
173
+ };
174
+ var onlyOne = {
175
+ max: 1
176
+ };
177
+ var disallow = {
178
+ disallow: true
179
+ };
180
+
181
+ // src/helpers/attributes.ts
182
+ var emptyAttributes = /* @__PURE__ */ new Set([]);
145
183
  var globalAttributes = /* @__PURE__ */ new Set([
146
184
  "accesskey",
147
185
  "autocapitalize",
@@ -177,45 +215,24 @@ var globalAttributes = /* @__PURE__ */ new Set([
177
215
  "xml:space"
178
216
  ]);
179
217
 
180
- // src/elements/utils/contentAttributes.ts
181
- var empty = /* @__PURE__ */ new Set();
182
- var AttributesSpec = class {
183
- constructor(allowGloabal, specific) {
184
- this.global = globalAttributes;
185
- this.specific = empty;
186
- if (!allowGloabal) {
187
- this.global = empty;
188
- }
189
- if (specific == null ? void 0 : specific.length) {
190
- this.specific = new Set(specific);
218
+ // src/helpers/content-attributes.ts
219
+ var contentAttributes = (global, specific) => {
220
+ if (!specific || specific.length === 0) {
221
+ if (global) {
222
+ return globalAttributes;
191
223
  }
224
+ return emptyAttributes;
192
225
  }
193
- has(name) {
194
- return this.global.has(name) || this.specific.has(name);
195
- }
196
- };
197
- var contentAttributes = (global, specific) => {
198
- return new AttributesSpec(global, specific);
199
- };
200
-
201
- // src/elements/document/html.ts
202
- var htmlSpec = {
203
- contents: [
204
- {
205
- type: "required",
206
- contents: /* @__PURE__ */ new Set(["head"])
207
- },
208
- {
209
- type: "required",
210
- contents: /* @__PURE__ */ new Set(["body"])
226
+ const specificAttributes = new Set(specific);
227
+ return {
228
+ has(name) {
229
+ return globalAttributes.has(name) || specificAttributes.has(name);
211
230
  }
212
- ],
213
- attributes: contentAttributes(true)
231
+ };
214
232
  };
215
- var html = () => htmlSpec;
216
233
 
217
- // src/elements/common/contents.ts
218
- var contents = {
234
+ // src/helpers/contents-preset.ts
235
+ var contentsPreset = {
219
236
  metadataContent: /* @__PURE__ */ new Set([
220
237
  "base",
221
238
  "link",
@@ -407,16 +424,32 @@ var contents = {
407
424
  ])
408
425
  };
409
426
 
410
- // src/elements/document-metadata/head.ts
427
+ // src/elements/html.ts
428
+ var htmlSpec = {
429
+ contents: [
430
+ {
431
+ type: "required",
432
+ contents: contents.fromKeys("head")
433
+ },
434
+ {
435
+ type: "required",
436
+ contents: contents.fromKeys("body")
437
+ }
438
+ ],
439
+ attributes: contentAttributes(true)
440
+ };
441
+ var html = () => htmlSpec;
442
+
443
+ // src/elements/head.ts
411
444
  var headSpec = {
412
445
  contents: [
413
446
  {
414
447
  type: "oneOrMore",
415
- contents: contents.metadataContent,
448
+ contents: contentsPreset.metadataContent,
416
449
  constraints: {
417
- children: /* @__PURE__ */ new Map([
418
- ["title", { required: true }],
419
- ["base", { max: 1 }]
450
+ children: contentConstraint.fromEntries([
451
+ ["title", required],
452
+ ["base", onlyOne]
420
453
  ])
421
454
  }
422
455
  }
@@ -425,26 +458,26 @@ var headSpec = {
425
458
  };
426
459
  var head = () => headSpec;
427
460
 
428
- // src/elements/document-metadata/title.ts
461
+ // src/elements/title.ts
429
462
  var titleSpec = {
430
463
  contents: [
431
464
  {
432
465
  type: "required",
433
- contents: /* @__PURE__ */ new Set(["#text"])
466
+ contents: contentsPreset.text
434
467
  }
435
468
  ],
436
469
  attributes: contentAttributes(true)
437
470
  };
438
471
  var title = () => titleSpec;
439
472
 
440
- // src/elements/document-metadata/base.ts
473
+ // src/elements/base.ts
441
474
  var baseSpec = {
442
475
  contents: null,
443
476
  attributes: contentAttributes(true, ["href", "target"])
444
477
  };
445
478
  var base = () => baseSpec;
446
479
 
447
- // src/elements/document-metadata/link.ts
480
+ // src/elements/link.ts
448
481
  var linkSpec = {
449
482
  contents: null,
450
483
  attributes: contentAttributes(true, [
@@ -469,7 +502,7 @@ var linkSpec = {
469
502
  };
470
503
  var link = () => linkSpec;
471
504
 
472
- // src/elements/document-metadata/meta.ts
505
+ // src/elements/meta.ts
473
506
  var metaSpec = {
474
507
  contents: null,
475
508
  attributes: contentAttributes(true, [
@@ -482,24 +515,24 @@ var metaSpec = {
482
515
  };
483
516
  var meta = () => metaSpec;
484
517
 
485
- // src/elements/document-metadata/style.ts
518
+ // src/elements/style.ts
486
519
  var styleSpec = {
487
520
  contents: [
488
521
  {
489
522
  type: "required",
490
- contents: /* @__PURE__ */ new Set(["#text"])
523
+ contents: contentsPreset.text
491
524
  }
492
525
  ],
493
526
  attributes: contentAttributes(true, ["media", "blocking", "title"])
494
527
  };
495
528
  var style = () => styleSpec;
496
529
 
497
- // src/elements/sections/body.ts
530
+ // src/elements/body.ts
498
531
  var bodySpec = {
499
532
  contents: [
500
533
  {
501
534
  type: "oneOrMore",
502
- contents: contents.flowContent
535
+ contents: contentsPreset.flowContent
503
536
  }
504
537
  ],
505
538
  attributes: contentAttributes(true, [
@@ -525,128 +558,128 @@ var bodySpec = {
525
558
  };
526
559
  var body = () => bodySpec;
527
560
 
528
- // src/elements/sections/article.ts
561
+ // src/elements/article.ts
529
562
  var articleSpec = {
530
563
  contents: [
531
564
  {
532
565
  type: "oneOrMore",
533
- contents: contents.flowContent
566
+ contents: contentsPreset.flowContent
534
567
  }
535
568
  ],
536
569
  attributes: contentAttributes(true)
537
570
  };
538
571
  var article = () => articleSpec;
539
572
 
540
- // src/elements/sections/section.ts
573
+ // src/elements/section.ts
541
574
  var sectionSpec = {
542
575
  contents: [
543
576
  {
544
577
  type: "oneOrMore",
545
- contents: contents.flowContent
578
+ contents: contentsPreset.flowContent
546
579
  }
547
580
  ],
548
581
  attributes: contentAttributes(true)
549
582
  };
550
583
  var section = () => sectionSpec;
551
584
 
552
- // src/elements/sections/nav.ts
585
+ // src/elements/nav.ts
553
586
  var navSpec = {
554
587
  contents: [
555
588
  {
556
589
  type: "oneOrMore",
557
- contents: contents.flowContent
590
+ contents: contentsPreset.flowContent
558
591
  }
559
592
  ],
560
593
  attributes: contentAttributes(true)
561
594
  };
562
595
  var nav = () => navSpec;
563
596
 
564
- // src/elements/sections/aside.ts
597
+ // src/elements/aside.ts
565
598
  var asideSpec = {
566
599
  contents: [
567
600
  {
568
601
  type: "oneOrMore",
569
- contents: contents.flowContent
602
+ contents: contentsPreset.flowContent
570
603
  }
571
604
  ],
572
605
  attributes: contentAttributes(true)
573
606
  };
574
607
  var aside = () => asideSpec;
575
608
 
576
- // src/elements/sections/h1.ts
609
+ // src/elements/h1.ts
577
610
  var h1Spec = {
578
611
  contents: [
579
612
  {
580
613
  type: "oneOrMore",
581
- contents: contents.phrasingContent
614
+ contents: contentsPreset.phrasingContent
582
615
  }
583
616
  ],
584
617
  attributes: contentAttributes(true)
585
618
  };
586
619
  var h1 = () => h1Spec;
587
620
 
588
- // src/elements/sections/h2.ts
621
+ // src/elements/h2.ts
589
622
  var h2 = h1;
590
623
 
591
- // src/elements/sections/h3.ts
624
+ // src/elements/h3.ts
592
625
  var h3 = h1;
593
626
 
594
- // src/elements/sections/h4.ts
627
+ // src/elements/h4.ts
595
628
  var h4 = h1;
596
629
 
597
- // src/elements/sections/h5.ts
630
+ // src/elements/h5.ts
598
631
  var h5 = h1;
599
632
 
600
- // src/elements/sections/h6.ts
633
+ // src/elements/h6.ts
601
634
  var h6 = h1;
602
635
 
603
- // src/elements/sections/hrgroup.ts
636
+ // src/elements/hrgroup.ts
604
637
  var hrgroupSpec = {
605
638
  contents: [
606
639
  {
607
640
  type: "zeroOrMore",
608
- contents: contents.scriptSupportingElements
641
+ contents: contentsPreset.scriptSupportingElements
609
642
  },
610
643
  {
611
644
  type: "zeroOrMore",
612
- contents: /* @__PURE__ */ new Set(["p"])
645
+ contents: contents.fromKeys("p")
613
646
  },
614
647
  {
615
648
  type: "zeroOrMore",
616
- contents: contents.scriptSupportingElements
649
+ contents: contentsPreset.scriptSupportingElements
617
650
  },
618
651
  {
619
652
  type: "required",
620
- contents: /* @__PURE__ */ new Set(["h1", "h2", "h3", "h4", "h5", "h6"])
653
+ contents: contents.fromKeys("h1", "h2", "h3", "h4", "h5", "h6")
621
654
  },
622
655
  {
623
656
  type: "zeroOrMore",
624
- contents: contents.scriptSupportingElements
657
+ contents: contentsPreset.scriptSupportingElements
625
658
  },
626
659
  {
627
660
  type: "zeroOrMore",
628
- contents: /* @__PURE__ */ new Set(["p"])
661
+ contents: contents.fromKeys("p")
629
662
  },
630
663
  {
631
664
  type: "zeroOrMore",
632
- contents: contents.scriptSupportingElements
665
+ contents: contentsPreset.scriptSupportingElements
633
666
  }
634
667
  ],
635
668
  attributes: contentAttributes(true)
636
669
  };
637
670
  var hrgroup = () => hrgroupSpec;
638
671
 
639
- // src/elements/sections/header.ts
672
+ // src/elements/header.ts
640
673
  var headerSpec = {
641
674
  contents: [
642
675
  {
643
676
  type: "oneOrMore",
644
- contents: contents.flowContent,
677
+ contents: contentsPreset.flowContent,
645
678
  constraints: {
646
- descendants: /* @__PURE__ */ new Map([
647
- ["header", { disallow: true }],
648
- ["footer", { disallow: true }]
649
- ])
679
+ descendants: contentConstraint.fromSets(
680
+ disallow,
681
+ /* @__PURE__ */ new Set(["header", "footer"])
682
+ )
650
683
  }
651
684
  }
652
685
  ],
@@ -654,17 +687,17 @@ var headerSpec = {
654
687
  };
655
688
  var header = () => headerSpec;
656
689
 
657
- // src/elements/sections/footer.ts
690
+ // src/elements/footer.ts
658
691
  var footerSpec = {
659
692
  contents: [
660
693
  {
661
694
  type: "oneOrMore",
662
- contents: contents.flowContent,
695
+ contents: contentsPreset.flowContent,
663
696
  constraints: {
664
- descendants: /* @__PURE__ */ new Map([
665
- ["header", { disallow: true }],
666
- ["footer", { disallow: true }]
667
- ])
697
+ descendants: contentConstraint.fromSets(
698
+ disallow,
699
+ /* @__PURE__ */ new Set(["header", "footer"])
700
+ )
668
701
  }
669
702
  }
670
703
  ],
@@ -672,33 +705,17 @@ var footerSpec = {
672
705
  };
673
706
  var footer = () => footerSpec;
674
707
 
675
- // src/utils/set.ts
676
- var setsToMap = (value, ...sets) => new Map(
677
- sets.reduce((acc, set) => [...acc, ...set], []).map((key) => [key, value])
678
- );
679
- var addToSet = (set, ...keys) => {
680
- const result = new Set(set);
681
- keys.forEach((key) => set.add(key));
682
- return result;
683
- };
684
- var unionSets = (setA, setB) => {
685
- const set = new Set(...setA, ...setB);
686
- return set;
687
- };
688
-
689
- // src/elements/sections/address.ts
708
+ // src/elements/address.ts
690
709
  var addressSpec = {
691
710
  contents: [
692
711
  {
693
712
  type: "oneOrMore",
694
- contents: contents.flowContent,
713
+ contents: contentsPreset.flowContent,
695
714
  constraints: {
696
- descendants: setsToMap(
697
- {
698
- disallow: true
699
- },
700
- contents.headingContent,
701
- contents.sectioningContent,
715
+ descendants: contentConstraint.fromSets(
716
+ disallow,
717
+ contentsPreset.headingContent,
718
+ contentsPreset.sectioningContent,
702
719
  /* @__PURE__ */ new Set(["header", "footer", "address"])
703
720
  )
704
721
  }
@@ -708,91 +725,91 @@ var addressSpec = {
708
725
  };
709
726
  var address = () => addressSpec;
710
727
 
711
- // src/elements/grouping-content/p.ts
728
+ // src/elements/p.ts
712
729
  var pSpec = {
713
730
  contents: [
714
731
  {
715
732
  type: "oneOrMore",
716
- contents: contents.phrasingContent
733
+ contents: contentsPreset.phrasingContent
717
734
  }
718
735
  ],
719
736
  attributes: contentAttributes(true)
720
737
  };
721
738
  var p = () => pSpec;
722
739
 
723
- // src/elements/grouping-content/hr.ts
740
+ // src/elements/hr.ts
724
741
  var hrSpec = {
725
742
  contents: null,
726
743
  attributes: contentAttributes(true)
727
744
  };
728
745
  var hr = () => hrSpec;
729
746
 
730
- // src/elements/grouping-content/pre.ts
747
+ // src/elements/pre.ts
731
748
  var preSpec = {
732
749
  contents: [
733
750
  {
734
751
  type: "oneOrMore",
735
- contents: contents.phrasingContent
752
+ contents: contentsPreset.phrasingContent
736
753
  }
737
754
  ],
738
755
  attributes: contentAttributes(true)
739
756
  };
740
757
  var pre = () => preSpec;
741
758
 
742
- // src/elements/grouping-content/blockquote.ts
759
+ // src/elements/blockquote.ts
743
760
  var blockquoteSpec = {
744
761
  contents: [
745
762
  {
746
763
  type: "oneOrMore",
747
- contents: contents.flowContent
764
+ contents: contentsPreset.flowContent
748
765
  }
749
766
  ],
750
767
  attributes: contentAttributes(true, ["cite"])
751
768
  };
752
769
  var blockquote = () => blockquoteSpec;
753
770
 
754
- // src/elements/grouping-content/ol.ts
771
+ // src/elements/ol.ts
755
772
  var olSpec = {
756
773
  contents: [
757
774
  {
758
775
  type: "zeroOrMore",
759
- contents: addToSet(contents.scriptSupportingElements, "li")
776
+ contents: contents.fromSet(contentsPreset.scriptSupportingElements, "li")
760
777
  }
761
778
  ],
762
779
  attributes: contentAttributes(true, ["reversed", "start", "type"])
763
780
  };
764
781
  var ol = () => olSpec;
765
782
 
766
- // src/elements/grouping-content/ul.ts
783
+ // src/elements/ul.ts
767
784
  var ulSpec = {
768
785
  contents: [
769
786
  {
770
787
  type: "zeroOrMore",
771
- contents: addToSet(contents.scriptSupportingElements, "li")
788
+ contents: contents.fromSet(contentsPreset.scriptSupportingElements, "li")
772
789
  }
773
790
  ],
774
791
  attributes: contentAttributes(true)
775
792
  };
776
793
  var ul = () => ulSpec;
777
794
 
778
- // src/elements/grouping-content/menu.ts
795
+ // src/elements/menu.ts
779
796
  var menuSpec = {
780
797
  contents: [
781
798
  {
782
799
  type: "zeroOrMore",
783
- contents: addToSet(contents.scriptSupportingElements, "li")
800
+ contents: contents.fromSet(contentsPreset.scriptSupportingElements, "li")
784
801
  }
785
802
  ],
786
803
  attributes: contentAttributes(true)
787
804
  };
788
805
  var menu = () => menuSpec;
789
806
 
790
- // src/elements/grouping-content/li.ts
807
+ // src/elements/li.ts
791
808
  var liInMenuOrUl = {
792
809
  contents: [
793
810
  {
794
811
  type: "oneOrMore",
795
- contents: contents.flowContent
812
+ contents: contentsPreset.flowContent
796
813
  }
797
814
  ],
798
815
  attributes: contentAttributes(true)
@@ -801,7 +818,7 @@ var liNotInMenuOrUl = {
801
818
  contents: [
802
819
  {
803
820
  type: "oneOrMore",
804
- contents: contents.flowContent
821
+ contents: contentsPreset.flowContent
805
822
  }
806
823
  ],
807
824
  attributes: contentAttributes(true, ["value"])
@@ -814,7 +831,7 @@ var li = (state) => {
814
831
  return liNotInMenuOrUl;
815
832
  };
816
833
 
817
- // src/elements/grouping-content/dl.ts
834
+ // src/elements/dl.ts
818
835
  var dlSpec = {
819
836
  contents: [
820
837
  {
@@ -823,7 +840,7 @@ var dlSpec = {
823
840
  [
824
841
  {
825
842
  type: "zeroOrMore",
826
- contents: contents.scriptSupportingElements
843
+ contents: contentsPreset.scriptSupportingElements
827
844
  },
828
845
  {
829
846
  type: "oneOrMore",
@@ -831,7 +848,7 @@ var dlSpec = {
831
848
  },
832
849
  {
833
850
  type: "zeroOrMore",
834
- contents: contents.scriptSupportingElements
851
+ contents: contentsPreset.scriptSupportingElements
835
852
  },
836
853
  {
837
854
  type: "oneOrMore",
@@ -839,13 +856,13 @@ var dlSpec = {
839
856
  },
840
857
  {
841
858
  type: "zeroOrMore",
842
- contents: contents.scriptSupportingElements
859
+ contents: contentsPreset.scriptSupportingElements
843
860
  }
844
861
  ],
845
862
  [
846
863
  {
847
864
  type: "zeroOrMore",
848
- contents: contents.scriptSupportingElements
865
+ contents: contentsPreset.scriptSupportingElements
849
866
  },
850
867
  {
851
868
  type: "oneOrMore",
@@ -853,7 +870,7 @@ var dlSpec = {
853
870
  },
854
871
  {
855
872
  type: "zeroOrMore",
856
- contents: contents.scriptSupportingElements
873
+ contents: contentsPreset.scriptSupportingElements
857
874
  }
858
875
  ]
859
876
  ]
@@ -863,20 +880,18 @@ var dlSpec = {
863
880
  };
864
881
  var dl = () => dlSpec;
865
882
 
866
- // src/elements/grouping-content/dt.ts
883
+ // src/elements/dt.ts
867
884
  var dtSpec = {
868
885
  contents: [
869
886
  {
870
887
  type: "oneOrMore",
871
- contents: contents.flowContent,
888
+ contents: contentsPreset.flowContent,
872
889
  constraints: {
873
- descendants: setsToMap(
874
- {
875
- disallow: true
876
- },
890
+ descendants: contentConstraint.fromSets(
891
+ disallow,
877
892
  /* @__PURE__ */ new Set(["header", "footer"]),
878
- contents.sectioningContent,
879
- contents.headingContent
893
+ contentsPreset.sectioningContent,
894
+ contentsPreset.headingContent
880
895
  )
881
896
  }
882
897
  }
@@ -885,19 +900,19 @@ var dtSpec = {
885
900
  };
886
901
  var dt = () => dtSpec;
887
902
 
888
- // src/elements/grouping-content/dd.ts
903
+ // src/elements/dd.ts
889
904
  var ddSpec = {
890
905
  contents: [
891
906
  {
892
907
  type: "oneOrMore",
893
- contents: contents.flowContent
908
+ contents: contentsPreset.flowContent
894
909
  }
895
910
  ],
896
911
  attributes: contentAttributes(true)
897
912
  };
898
913
  var dd = () => ddSpec;
899
914
 
900
- // src/elements/grouping-content/figure.ts
915
+ // src/elements/figure.ts
901
916
  var figureSpec = {
902
917
  contents: [
903
918
  {
@@ -910,23 +925,23 @@ var figureSpec = {
910
925
  },
911
926
  {
912
927
  type: "oneOrMore",
913
- contents: contents.flowContent
928
+ contents: contentsPreset.flowContent
914
929
  }
915
930
  ],
916
931
  [
917
932
  {
918
933
  type: "oneOrMore",
919
- contents: contents.flowContent
934
+ contents: contentsPreset.flowContent
920
935
  },
921
936
  {
922
937
  type: "required",
923
- contents: new Set("figcaption")
938
+ contents: contents.fromKeys("figcaption")
924
939
  }
925
940
  ],
926
941
  [
927
942
  {
928
943
  type: "oneOrMore",
929
- contents: contents.flowContent
944
+ contents: contentsPreset.flowContent
930
945
  }
931
946
  ]
932
947
  ]
@@ -936,60 +951,60 @@ var figureSpec = {
936
951
  };
937
952
  var figure = () => figureSpec;
938
953
 
939
- // src/elements/grouping-content/figcaption.ts
954
+ // src/elements/figcaption.ts
940
955
  var figcaptionSpec = {
941
956
  contents: [
942
957
  {
943
958
  type: "oneOrMore",
944
- contents: contents.flowContent
959
+ contents: contentsPreset.flowContent
945
960
  }
946
961
  ],
947
962
  attributes: contentAttributes(true)
948
963
  };
949
964
  var figcaption = () => figcaptionSpec;
950
965
 
951
- // src/elements/grouping-content/main.ts
966
+ // src/elements/main.ts
952
967
  var mainSpec = {
953
968
  contents: [
954
969
  {
955
970
  type: "oneOrMore",
956
- contents: contents.flowContent
971
+ contents: contentsPreset.flowContent
957
972
  }
958
973
  ],
959
974
  attributes: contentAttributes(true)
960
975
  };
961
976
  var main = () => mainSpec;
962
977
 
963
- // src/elements/grouping-content/search.ts
978
+ // src/elements/search.ts
964
979
  var searchSpec = {
965
980
  contents: [
966
981
  {
967
982
  type: "oneOrMore",
968
- contents: contents.flowContent
983
+ contents: contentsPreset.flowContent
969
984
  }
970
985
  ],
971
986
  attributes: contentAttributes(true)
972
987
  };
973
988
  var search = () => searchSpec;
974
989
 
975
- // src/elements/grouping-content/div.ts
990
+ // src/elements/div.ts
976
991
  var divChildOfDlSpec = {
977
992
  contents: [
978
993
  {
979
994
  type: "zeroOrMore",
980
- contents: contents.scriptSupportingElements
995
+ contents: contentsPreset.scriptSupportingElements
981
996
  },
982
997
  {
983
998
  type: "oneOrMore",
984
- contents: new Set("dt")
999
+ contents: contents.fromKeys("dt")
985
1000
  },
986
1001
  {
987
1002
  type: "zeroOrMore",
988
- contents: contents.scriptSupportingElements
1003
+ contents: contentsPreset.scriptSupportingElements
989
1004
  },
990
1005
  {
991
1006
  type: "oneOrMore",
992
- contents: new Set("dd")
1007
+ contents: contents.fromKeys("dd")
993
1008
  }
994
1009
  ],
995
1010
  attributes: contentAttributes(true)
@@ -998,7 +1013,7 @@ var divSpec = {
998
1013
  contents: [
999
1014
  {
1000
1015
  type: "oneOrMore",
1001
- contents: contents.flowContent
1016
+ contents: contentsPreset.flowContent
1002
1017
  }
1003
1018
  ],
1004
1019
  attributes: contentAttributes(true)
@@ -1011,13 +1026,9 @@ var div = (state) => {
1011
1026
  return divSpec;
1012
1027
  };
1013
1028
 
1014
- // src/elements/text-level-semantics/a.ts
1015
- var descendantsConstraints = setsToMap(
1016
- {
1017
- disallow: true
1018
- },
1019
- contents.interactiveContent,
1020
- /* @__PURE__ */ new Set(["a"])
1029
+ // src/elements/a.ts
1030
+ var descendantsConstraints = new Map(
1031
+ [contentsPreset.interactiveContent, /* @__PURE__ */ new Set(["a"])].reduce((acc, set) => [...acc, ...set], []).map((key) => [key, disallow])
1021
1032
  );
1022
1033
  descendantsConstraints.set("*", {
1023
1034
  disallow: true,
@@ -1029,13 +1040,11 @@ var aSpec = {
1029
1040
  contents: [
1030
1041
  {
1031
1042
  type: "oneOrMore",
1032
- contents: contents.transparentContent,
1043
+ contents: contentsPreset.transparentContent,
1033
1044
  constraints: {
1034
- descendants: setsToMap(
1035
- {
1036
- disallow: true
1037
- },
1038
- contents.interactiveContent,
1045
+ descendants: contentConstraint.fromSets(
1046
+ disallow,
1047
+ contentsPreset.interactiveContent,
1039
1048
  /* @__PURE__ */ new Set(["a"])
1040
1049
  )
1041
1050
  }
@@ -1054,86 +1063,86 @@ var aSpec = {
1054
1063
  };
1055
1064
  var a = () => aSpec;
1056
1065
 
1057
- // src/elements/text-level-semantics/em.ts
1066
+ // src/elements/em.ts
1058
1067
  var emSpec = {
1059
1068
  contents: [
1060
1069
  {
1061
1070
  type: "oneOrMore",
1062
- contents: contents.phrasingContent
1071
+ contents: contentsPreset.phrasingContent
1063
1072
  }
1064
1073
  ],
1065
1074
  attributes: contentAttributes(true)
1066
1075
  };
1067
1076
  var em = () => emSpec;
1068
1077
 
1069
- // src/elements/text-level-semantics/strong.ts
1078
+ // src/elements/strong.ts
1070
1079
  var strongSpec = {
1071
1080
  contents: [
1072
1081
  {
1073
1082
  type: "oneOrMore",
1074
- contents: contents.phrasingContent
1083
+ contents: contentsPreset.phrasingContent
1075
1084
  }
1076
1085
  ],
1077
1086
  attributes: contentAttributes(true)
1078
1087
  };
1079
1088
  var strong = () => strongSpec;
1080
1089
 
1081
- // src/elements/text-level-semantics/small.ts
1090
+ // src/elements/small.ts
1082
1091
  var smallSpec = {
1083
1092
  contents: [
1084
1093
  {
1085
1094
  type: "oneOrMore",
1086
- contents: contents.phrasingContent
1095
+ contents: contentsPreset.phrasingContent
1087
1096
  }
1088
1097
  ],
1089
1098
  attributes: contentAttributes(true)
1090
1099
  };
1091
1100
  var small = () => smallSpec;
1092
1101
 
1093
- // src/elements/text-level-semantics/s.ts
1102
+ // src/elements/s.ts
1094
1103
  var sSpec = {
1095
1104
  contents: [
1096
1105
  {
1097
1106
  type: "oneOrMore",
1098
- contents: contents.phrasingContent
1107
+ contents: contentsPreset.phrasingContent
1099
1108
  }
1100
1109
  ],
1101
1110
  attributes: contentAttributes(true)
1102
1111
  };
1103
1112
  var s = () => sSpec;
1104
1113
 
1105
- // src/elements/text-level-semantics/cite.ts
1114
+ // src/elements/cite.ts
1106
1115
  var citeSpec = {
1107
1116
  contents: [
1108
1117
  {
1109
1118
  type: "oneOrMore",
1110
- contents: contents.phrasingContent
1119
+ contents: contentsPreset.phrasingContent
1111
1120
  }
1112
1121
  ],
1113
1122
  attributes: contentAttributes(true)
1114
1123
  };
1115
1124
  var cite = () => citeSpec;
1116
1125
 
1117
- // src/elements/text-level-semantics/q.ts
1126
+ // src/elements/q.ts
1118
1127
  var qSpec = {
1119
1128
  contents: [
1120
1129
  {
1121
1130
  type: "oneOrMore",
1122
- contents: contents.phrasingContent
1131
+ contents: contentsPreset.phrasingContent
1123
1132
  }
1124
1133
  ],
1125
1134
  attributes: contentAttributes(true, ["cite"])
1126
1135
  };
1127
1136
  var q = () => qSpec;
1128
1137
 
1129
- // src/elements/text-level-semantics/dfn.ts
1138
+ // src/elements/dfn.ts
1130
1139
  var dfnSpec = {
1131
1140
  contents: [
1132
1141
  {
1133
1142
  type: "oneOrMore",
1134
- contents: contents.phrasingContent,
1143
+ contents: contentsPreset.phrasingContent,
1135
1144
  constraints: {
1136
- descendants: /* @__PURE__ */ new Map([["dfn", { disallow: true }]])
1145
+ descendants: contentConstraint.fromEntries([["dfn", disallow]])
1137
1146
  }
1138
1147
  }
1139
1148
  ],
@@ -1141,72 +1150,72 @@ var dfnSpec = {
1141
1150
  };
1142
1151
  var dfn = () => dfnSpec;
1143
1152
 
1144
- // src/elements/text-level-semantics/abbr.ts
1153
+ // src/elements/abbr.ts
1145
1154
  var abbrSpec = {
1146
1155
  contents: [
1147
1156
  {
1148
1157
  type: "oneOrMore",
1149
- contents: contents.phrasingContent
1158
+ contents: contentsPreset.phrasingContent
1150
1159
  }
1151
1160
  ],
1152
1161
  attributes: contentAttributes(true)
1153
1162
  };
1154
1163
  var abbr = () => abbrSpec;
1155
1164
 
1156
- // src/elements/text-level-semantics/ruby.ts
1165
+ // src/elements/ruby.ts
1157
1166
  var rubySpec = {
1158
1167
  contents: [
1159
1168
  {
1160
1169
  type: "zeroOrMore",
1161
- contents: addToSet(contents.phrasingContent, "rt", "rp")
1170
+ contents: contents.fromSet(contentsPreset.phrasingContent, "rt", "rp")
1162
1171
  }
1163
1172
  ],
1164
1173
  attributes: contentAttributes(true)
1165
1174
  };
1166
1175
  var ruby = () => rubySpec;
1167
1176
 
1168
- // src/elements/text-level-semantics/rt.ts
1177
+ // src/elements/rt.ts
1169
1178
  var rtSpec = {
1170
1179
  contents: [
1171
1180
  {
1172
1181
  type: "oneOrMore",
1173
- contents: contents.phrasingContent
1182
+ contents: contentsPreset.phrasingContent
1174
1183
  }
1175
1184
  ],
1176
1185
  attributes: contentAttributes(true)
1177
1186
  };
1178
1187
  var rt = () => rtSpec;
1179
1188
 
1180
- // src/elements/text-level-semantics/rp.ts
1189
+ // src/elements/rp.ts
1181
1190
  var rpSpec = {
1182
1191
  contents: [
1183
1192
  {
1184
1193
  type: "oneOrMore",
1185
- contents: contents.text
1194
+ contents: contentsPreset.text
1186
1195
  }
1187
1196
  ],
1188
1197
  attributes: contentAttributes(true)
1189
1198
  };
1190
1199
  var rp = () => rpSpec;
1191
1200
 
1192
- // src/elements/text-level-semantics/data.ts
1201
+ // src/elements/data.ts
1193
1202
  var dataSpec = {
1194
1203
  contents: [
1195
1204
  {
1196
1205
  type: "oneOrMore",
1197
- contents: contents.phrasingContent
1206
+ contents: contentsPreset.phrasingContent
1198
1207
  }
1199
1208
  ],
1200
1209
  attributes: contentAttributes(true, ["value"])
1201
1210
  };
1202
1211
  var data = () => dataSpec;
1203
1212
 
1204
- // src/elements/text-level-semantics/time.ts
1213
+ // src/elements/time.ts
1205
1214
  var timeWihthoutDatetimeSpec = {
1206
1215
  contents: [
1207
1216
  {
1208
1217
  type: "oneOrMore",
1209
- contents: contents.phrasingContent
1218
+ contents: contentsPreset.phrasingContent
1210
1219
  }
1211
1220
  ],
1212
1221
  attributes: contentAttributes(true, ["datetime"])
@@ -1215,7 +1224,7 @@ var timeWithDatetimeSpec = {
1215
1224
  contents: [
1216
1225
  {
1217
1226
  type: "oneOrMore",
1218
- contents: contents.text
1227
+ contents: contentsPreset.text
1219
1228
  }
1220
1229
  ],
1221
1230
  attributes: contentAttributes(true, ["datetime"])
@@ -1228,220 +1237,220 @@ var time = (state) => {
1228
1237
  return timeWithDatetimeSpec;
1229
1238
  };
1230
1239
 
1231
- // src/elements/text-level-semantics/code.ts
1240
+ // src/elements/code.ts
1232
1241
  var codeSpec = {
1233
1242
  contents: [
1234
1243
  {
1235
1244
  type: "oneOrMore",
1236
- contents: contents.phrasingContent
1245
+ contents: contentsPreset.phrasingContent
1237
1246
  }
1238
1247
  ],
1239
1248
  attributes: contentAttributes(true)
1240
1249
  };
1241
1250
  var code = () => codeSpec;
1242
1251
 
1243
- // src/elements/text-level-semantics/var.ts
1252
+ // src/elements/var.ts
1244
1253
  var varSpec = {
1245
1254
  contents: [
1246
1255
  {
1247
1256
  type: "oneOrMore",
1248
- contents: contents.phrasingContent
1257
+ contents: contentsPreset.phrasingContent
1249
1258
  }
1250
1259
  ],
1251
1260
  attributes: contentAttributes(true)
1252
1261
  };
1253
1262
  var _var = () => varSpec;
1254
1263
 
1255
- // src/elements/text-level-semantics/samp.ts
1264
+ // src/elements/samp.ts
1256
1265
  var sampSpec = {
1257
1266
  contents: [
1258
1267
  {
1259
1268
  type: "oneOrMore",
1260
- contents: contents.phrasingContent
1269
+ contents: contentsPreset.phrasingContent
1261
1270
  }
1262
1271
  ],
1263
1272
  attributes: contentAttributes(true)
1264
1273
  };
1265
1274
  var samp = () => sampSpec;
1266
1275
 
1267
- // src/elements/text-level-semantics/kbd.ts
1276
+ // src/elements/kbd.ts
1268
1277
  var kbdSpec = {
1269
1278
  contents: [
1270
1279
  {
1271
1280
  type: "oneOrMore",
1272
- contents: contents.phrasingContent
1281
+ contents: contentsPreset.phrasingContent
1273
1282
  }
1274
1283
  ],
1275
1284
  attributes: contentAttributes(true)
1276
1285
  };
1277
1286
  var kbd = () => kbdSpec;
1278
1287
 
1279
- // src/elements/text-level-semantics/sub.ts
1288
+ // src/elements/sub.ts
1280
1289
  var subSpec = {
1281
1290
  contents: [
1282
1291
  {
1283
1292
  type: "oneOrMore",
1284
- contents: contents.phrasingContent
1293
+ contents: contentsPreset.phrasingContent
1285
1294
  }
1286
1295
  ],
1287
1296
  attributes: contentAttributes(true)
1288
1297
  };
1289
1298
  var sub = () => subSpec;
1290
1299
 
1291
- // src/elements/text-level-semantics/sup.ts
1300
+ // src/elements/sup.ts
1292
1301
  var sup = sub;
1293
1302
 
1294
- // src/elements/text-level-semantics/i.ts
1303
+ // src/elements/i.ts
1295
1304
  var iSpec = {
1296
1305
  contents: [
1297
1306
  {
1298
1307
  type: "oneOrMore",
1299
- contents: contents.phrasingContent
1308
+ contents: contentsPreset.phrasingContent
1300
1309
  }
1301
1310
  ],
1302
1311
  attributes: contentAttributes(true)
1303
1312
  };
1304
1313
  var i = () => iSpec;
1305
1314
 
1306
- // src/elements/text-level-semantics/b.ts
1315
+ // src/elements/b.ts
1307
1316
  var bSpec = {
1308
1317
  contents: [
1309
1318
  {
1310
1319
  type: "oneOrMore",
1311
- contents: contents.phrasingContent
1320
+ contents: contentsPreset.phrasingContent
1312
1321
  }
1313
1322
  ],
1314
1323
  attributes: contentAttributes(true)
1315
1324
  };
1316
1325
  var b = () => bSpec;
1317
1326
 
1318
- // src/elements/text-level-semantics/u.ts
1327
+ // src/elements/u.ts
1319
1328
  var uSpec = {
1320
1329
  contents: [
1321
1330
  {
1322
1331
  type: "oneOrMore",
1323
- contents: contents.phrasingContent
1332
+ contents: contentsPreset.phrasingContent
1324
1333
  }
1325
1334
  ],
1326
1335
  attributes: contentAttributes(true)
1327
1336
  };
1328
1337
  var u = () => uSpec;
1329
1338
 
1330
- // src/elements/text-level-semantics/mark.ts
1339
+ // src/elements/mark.ts
1331
1340
  var markSpec = {
1332
1341
  contents: [
1333
1342
  {
1334
1343
  type: "oneOrMore",
1335
- contents: contents.phrasingContent
1344
+ contents: contentsPreset.phrasingContent
1336
1345
  }
1337
1346
  ],
1338
1347
  attributes: contentAttributes(true)
1339
1348
  };
1340
1349
  var mark = () => markSpec;
1341
1350
 
1342
- // src/elements/text-level-semantics/bdi.ts
1351
+ // src/elements/bdi.ts
1343
1352
  var bdiSpec = {
1344
1353
  contents: [
1345
1354
  {
1346
1355
  type: "oneOrMore",
1347
- contents: contents.phrasingContent
1356
+ contents: contentsPreset.phrasingContent
1348
1357
  }
1349
1358
  ],
1350
1359
  attributes: contentAttributes(true)
1351
1360
  };
1352
1361
  var bdi = () => bdiSpec;
1353
1362
 
1354
- // src/elements/text-level-semantics/bdo.ts
1363
+ // src/elements/bdo.ts
1355
1364
  var bdoSpec = {
1356
1365
  contents: [
1357
1366
  {
1358
1367
  type: "oneOrMore",
1359
- contents: contents.phrasingContent
1368
+ contents: contentsPreset.phrasingContent
1360
1369
  }
1361
1370
  ],
1362
1371
  attributes: contentAttributes(true)
1363
1372
  };
1364
1373
  var bdo = () => bdoSpec;
1365
1374
 
1366
- // src/elements/text-level-semantics/span.ts
1375
+ // src/elements/span.ts
1367
1376
  var spanSpec = {
1368
1377
  contents: [
1369
1378
  {
1370
1379
  type: "oneOrMore",
1371
- contents: contents.phrasingContent
1380
+ contents: contentsPreset.phrasingContent
1372
1381
  }
1373
1382
  ],
1374
1383
  attributes: contentAttributes(true)
1375
1384
  };
1376
1385
  var span = () => spanSpec;
1377
1386
 
1378
- // src/elements/text-level-semantics/br.ts
1387
+ // src/elements/br.ts
1379
1388
  var brSpec = {
1380
1389
  contents: null,
1381
1390
  attributes: contentAttributes(true)
1382
1391
  };
1383
1392
  var br = () => brSpec;
1384
1393
 
1385
- // src/elements/text-level-semantics/wbr.ts
1394
+ // src/elements/wbr.ts
1386
1395
  var wbrSpec = {
1387
1396
  contents: null,
1388
1397
  attributes: contentAttributes(true)
1389
1398
  };
1390
1399
  var wbr = () => wbrSpec;
1391
1400
 
1392
- // src/elements/edits/ins.ts
1401
+ // src/elements/ins.ts
1393
1402
  var insSpec = {
1394
1403
  contents: [
1395
1404
  {
1396
1405
  type: "oneOrMore",
1397
- contents: contents.transparentContent
1406
+ contents: contentsPreset.transparentContent
1398
1407
  }
1399
1408
  ],
1400
1409
  attributes: contentAttributes(true, ["cite", "datetime"])
1401
1410
  };
1402
1411
  var ins = () => insSpec;
1403
1412
 
1404
- // src/elements/edits/del.ts
1413
+ // src/elements/del.ts
1405
1414
  var delSpec = {
1406
1415
  contents: [
1407
1416
  {
1408
1417
  type: "oneOrMore",
1409
- contents: contents.transparentContent
1418
+ contents: contentsPreset.transparentContent
1410
1419
  }
1411
1420
  ],
1412
1421
  attributes: contentAttributes(true, ["cite", "datetime"])
1413
1422
  };
1414
1423
  var del = () => delSpec;
1415
1424
 
1416
- // src/elements/embedded-content/picture.ts
1425
+ // src/elements/picture.ts
1417
1426
  var pictureSpec = {
1418
1427
  contents: [
1419
1428
  {
1420
1429
  type: "zeroOrMore",
1421
- contents: contents.scriptSupportingElements
1430
+ contents: contentsPreset.scriptSupportingElements
1422
1431
  },
1423
1432
  {
1424
1433
  type: "zeroOrMore",
1425
- contents: /* @__PURE__ */ new Set(["source"])
1434
+ contents: contents.fromKeys("source")
1426
1435
  },
1427
1436
  {
1428
1437
  type: "zeroOrMore",
1429
- contents: contents.scriptSupportingElements
1438
+ contents: contentsPreset.scriptSupportingElements
1430
1439
  },
1431
1440
  {
1432
1441
  type: "required",
1433
- contents: /* @__PURE__ */ new Set(["img"])
1442
+ contents: contents.fromKeys("img")
1434
1443
  },
1435
1444
  {
1436
1445
  type: "zeroOrMore",
1437
- contents: contents.scriptSupportingElements
1446
+ contents: contentsPreset.scriptSupportingElements
1438
1447
  }
1439
1448
  ],
1440
1449
  attributes: contentAttributes(true)
1441
1450
  };
1442
1451
  var picture = () => pictureSpec;
1443
1452
 
1444
- // src/elements/embedded-content/source.ts
1453
+ // src/elements/source.ts
1445
1454
  var sourceSpec = {
1446
1455
  contents: null,
1447
1456
  attributes: contentAttributes(true, [
@@ -1456,7 +1465,7 @@ var sourceSpec = {
1456
1465
  };
1457
1466
  var source = () => sourceSpec;
1458
1467
 
1459
- // src/elements/embedded-content/img.ts
1468
+ // src/elements/img.ts
1460
1469
  var imgSpec = {
1461
1470
  contents: null,
1462
1471
  attributes: contentAttributes(true, [
@@ -1477,7 +1486,7 @@ var imgSpec = {
1477
1486
  };
1478
1487
  var img = () => imgSpec;
1479
1488
 
1480
- // src/elements/embedded-content/iframe.ts
1489
+ // src/elements/iframe.ts
1481
1490
  var iframeSpec = {
1482
1491
  contents: null,
1483
1492
  attributes: contentAttributes(true, [
@@ -1495,19 +1504,19 @@ var iframeSpec = {
1495
1504
  };
1496
1505
  var iframe = () => iframeSpec;
1497
1506
 
1498
- // src/elements/embedded-content/embed.ts
1507
+ // src/elements/embed.ts
1499
1508
  var embedSpec = {
1500
1509
  contents: null,
1501
1510
  attributes: contentAttributes(true, ["src", "type", "width", "height"])
1502
1511
  };
1503
1512
  var embed = () => embedSpec;
1504
1513
 
1505
- // src/elements/embedded-content/object.ts
1514
+ // src/elements/object.ts
1506
1515
  var objectSpec = {
1507
1516
  contents: [
1508
1517
  {
1509
1518
  type: "oneOrMore",
1510
- contents: contents.transparentContent
1519
+ contents: contentsPreset.transparentContent
1511
1520
  }
1512
1521
  ],
1513
1522
  attributes: contentAttributes(true, [
@@ -1521,7 +1530,7 @@ var objectSpec = {
1521
1530
  };
1522
1531
  var object = () => objectSpec;
1523
1532
 
1524
- // src/elements/embedded-content/video.ts
1533
+ // src/elements/video.ts
1525
1534
  var attributes = contentAttributes(true, [
1526
1535
  "src",
1527
1536
  "crossorigin",
@@ -1539,13 +1548,16 @@ var videoWithSrcSpec = {
1539
1548
  contents: [
1540
1549
  {
1541
1550
  type: "zeroOrMore",
1542
- contents: new Set("track")
1551
+ contents: contents.fromKeys("track")
1543
1552
  },
1544
1553
  {
1545
1554
  type: "zeroOrMore",
1546
- contents: contents.transparentContent,
1555
+ contents: contentsPreset.transparentContent,
1547
1556
  constraints: {
1548
- descendants: setsToMap({ disallow: true }, contents.mediaElements)
1557
+ descendants: contentConstraint.fromSets(
1558
+ disallow,
1559
+ contentsPreset.mediaElements
1560
+ )
1549
1561
  }
1550
1562
  }
1551
1563
  ],
@@ -1555,17 +1567,20 @@ var videoWitoutSrcSpec = {
1555
1567
  contents: [
1556
1568
  {
1557
1569
  type: "zeroOrMore",
1558
- contents: new Set("source")
1570
+ contents: contents.fromKeys("source")
1559
1571
  },
1560
1572
  {
1561
1573
  type: "zeroOrMore",
1562
- contents: new Set("track")
1574
+ contents: contents.fromKeys("track")
1563
1575
  },
1564
1576
  {
1565
1577
  type: "zeroOrMore",
1566
- contents: contents.transparentContent,
1578
+ contents: contentsPreset.transparentContent,
1567
1579
  constraints: {
1568
- descendants: setsToMap({ disallow: true }, contents.mediaElements)
1580
+ descendants: contentConstraint.fromSets(
1581
+ disallow,
1582
+ contentsPreset.mediaElements
1583
+ )
1569
1584
  }
1570
1585
  }
1571
1586
  ],
@@ -1579,7 +1594,7 @@ var video = (state) => {
1579
1594
  return videoWitoutSrcSpec;
1580
1595
  };
1581
1596
 
1582
- // src/elements/embedded-content/audio.ts
1597
+ // src/elements/audio.ts
1583
1598
  var attributes2 = contentAttributes(true, [
1584
1599
  "src",
1585
1600
  "crossorigin",
@@ -1593,11 +1608,11 @@ var audioWithSrcSpec = {
1593
1608
  contents: [
1594
1609
  {
1595
1610
  type: "zeroOrMore",
1596
- contents: /* @__PURE__ */ new Set(["track"])
1611
+ contents: contents.fromKeys("track")
1597
1612
  },
1598
1613
  {
1599
1614
  type: "oneOrMore",
1600
- contents: contents.transparentContent
1615
+ contents: contentsPreset.transparentContent
1601
1616
  }
1602
1617
  ],
1603
1618
  attributes: attributes2
@@ -1606,17 +1621,20 @@ var audioWithoutSrcSpec = {
1606
1621
  contents: [
1607
1622
  {
1608
1623
  type: "zeroOrMore",
1609
- contents: new Set("source")
1624
+ contents: contents.fromKeys("source")
1610
1625
  },
1611
1626
  {
1612
1627
  type: "zeroOrMore",
1613
- contents: new Set("track")
1628
+ contents: contents.fromKeys("track")
1614
1629
  },
1615
1630
  {
1616
1631
  type: "oneOrMore",
1617
- contents: contents.transparentContent,
1632
+ contents: contentsPreset.transparentContent,
1618
1633
  constraints: {
1619
- descendants: setsToMap({ disallow: true }, contents.mediaElements)
1634
+ descendants: contentConstraint.fromSets(
1635
+ disallow,
1636
+ contentsPreset.mediaElements
1637
+ )
1620
1638
  }
1621
1639
  }
1622
1640
  ],
@@ -1630,7 +1648,7 @@ var audio = (state) => {
1630
1648
  return audioWithoutSrcSpec;
1631
1649
  };
1632
1650
 
1633
- // src/elements/embedded-content/track.ts
1651
+ // src/elements/track.ts
1634
1652
  var trackSpec = {
1635
1653
  contents: null,
1636
1654
  attributes: contentAttributes(true, [
@@ -1644,19 +1662,19 @@ var trackSpec = {
1644
1662
  };
1645
1663
  var track = () => trackSpec;
1646
1664
 
1647
- // src/elements/embedded-content/map.ts
1665
+ // src/elements/map.ts
1648
1666
  var mapSpec = {
1649
1667
  contents: [
1650
1668
  {
1651
1669
  type: "oneOrMore",
1652
- contents: contents.transparentContent
1670
+ contents: contentsPreset.transparentContent
1653
1671
  }
1654
1672
  ],
1655
1673
  attributes: contentAttributes(true, ["name"])
1656
1674
  };
1657
1675
  var map = () => mapSpec;
1658
1676
 
1659
- // src/elements/embedded-content/area.ts
1677
+ // src/elements/area.ts
1660
1678
  var areaSpec = {
1661
1679
  contents: null,
1662
1680
  attributes: contentAttributes(true, [
@@ -1673,36 +1691,36 @@ var areaSpec = {
1673
1691
  };
1674
1692
  var area = () => areaSpec;
1675
1693
 
1676
- // src/elements/tabular-data/table.ts
1694
+ // src/elements/table.ts
1677
1695
  var tableSpec = {
1678
1696
  contents: [
1679
1697
  {
1680
1698
  type: "zeroOrMore",
1681
- contents: contents.scriptSupportingElements
1699
+ contents: contentsPreset.scriptSupportingElements
1682
1700
  },
1683
1701
  {
1684
1702
  type: "optional",
1685
- contents: /* @__PURE__ */ new Set(["caption"])
1703
+ contents: contents.fromKeys("caption")
1686
1704
  },
1687
1705
  {
1688
1706
  type: "zeroOrMore",
1689
- contents: contents.scriptSupportingElements
1707
+ contents: contentsPreset.scriptSupportingElements
1690
1708
  },
1691
1709
  {
1692
1710
  type: "zeroOrMore",
1693
- contents: /* @__PURE__ */ new Set(["colgroup"])
1711
+ contents: contents.fromKeys("colgroup")
1694
1712
  },
1695
1713
  {
1696
1714
  type: "zeroOrMore",
1697
- contents: contents.scriptSupportingElements
1715
+ contents: contentsPreset.scriptSupportingElements
1698
1716
  },
1699
1717
  {
1700
1718
  type: "optional",
1701
- contents: /* @__PURE__ */ new Set(["thead"])
1719
+ contents: contents.fromKeys("thead")
1702
1720
  },
1703
1721
  {
1704
1722
  type: "zeroOrMore",
1705
- contents: contents.scriptSupportingElements
1723
+ contents: contentsPreset.scriptSupportingElements
1706
1724
  },
1707
1725
  {
1708
1726
  type: "either",
@@ -1710,42 +1728,42 @@ var tableSpec = {
1710
1728
  [
1711
1729
  {
1712
1730
  type: "zeroOrMore",
1713
- contents: /* @__PURE__ */ new Set(["tbody"])
1731
+ contents: contents.fromKeys("tbody")
1714
1732
  }
1715
1733
  ],
1716
1734
  [
1717
1735
  {
1718
1736
  type: "oneOrMore",
1719
- contents: /* @__PURE__ */ new Set(["tr"])
1737
+ contents: contents.fromKeys("tr")
1720
1738
  }
1721
1739
  ]
1722
1740
  ]
1723
1741
  },
1724
1742
  {
1725
1743
  type: "zeroOrMore",
1726
- contents: contents.scriptSupportingElements
1744
+ contents: contentsPreset.scriptSupportingElements
1727
1745
  },
1728
1746
  {
1729
1747
  type: "optional",
1730
- contents: /* @__PURE__ */ new Set(["tfoot"])
1748
+ contents: contents.fromKeys("tfoot")
1731
1749
  },
1732
1750
  {
1733
1751
  type: "zeroOrMore",
1734
- contents: contents.scriptSupportingElements
1752
+ contents: contentsPreset.scriptSupportingElements
1735
1753
  }
1736
1754
  ],
1737
1755
  attributes: contentAttributes(true)
1738
1756
  };
1739
1757
  var table = () => tableSpec;
1740
1758
 
1741
- // src/elements/tabular-data/caption.ts
1759
+ // src/elements/caption.ts
1742
1760
  var captionSpec = {
1743
1761
  contents: [
1744
1762
  {
1745
1763
  type: "oneOrMore",
1746
- contents: contents.flowContent,
1764
+ contents: contentsPreset.flowContent,
1747
1765
  constraints: {
1748
- descendants: /* @__PURE__ */ new Map([["table", { disallow: true }]])
1766
+ descendants: contentConstraint.fromEntries([["table", disallow]])
1749
1767
  }
1750
1768
  }
1751
1769
  ],
@@ -1753,7 +1771,7 @@ var captionSpec = {
1753
1771
  };
1754
1772
  var caption = () => captionSpec;
1755
1773
 
1756
- // src/elements/tabular-data/colgroup.ts
1774
+ // src/elements/colgroup.ts
1757
1775
  var attributes3 = contentAttributes(true, ["span"]);
1758
1776
  var colgroupWithSpanSpec = {
1759
1777
  contents: null,
@@ -1763,7 +1781,7 @@ var colgroupWithoutSpanSpec = {
1763
1781
  contents: [
1764
1782
  {
1765
1783
  type: "zeroOrMore",
1766
- contents: /* @__PURE__ */ new Set(["col", "template"])
1784
+ contents: contents.fromKeys("col", "template")
1767
1785
  }
1768
1786
  ],
1769
1787
  attributes: attributes3
@@ -1776,87 +1794,89 @@ var colgroup = (state) => {
1776
1794
  return colgroupWithoutSpanSpec;
1777
1795
  };
1778
1796
 
1779
- // src/elements/tabular-data/col.ts
1797
+ // src/elements/col.ts
1780
1798
  var colSpec = {
1781
1799
  contents: null,
1782
1800
  attributes: contentAttributes(true, ["span"])
1783
1801
  };
1784
1802
  var col = () => colSpec;
1785
1803
 
1786
- // src/elements/tabular-data/tbody.ts
1804
+ // src/elements/tbody.ts
1787
1805
  var tbodySpec = {
1788
1806
  contents: [
1789
1807
  {
1790
1808
  type: "zeroOrMore",
1791
- contents: addToSet(contents.scriptSupportingElements, "tr")
1809
+ contents: contents.fromSet(contentsPreset.scriptSupportingElements, "tr")
1792
1810
  }
1793
1811
  ],
1794
1812
  attributes: contentAttributes(true)
1795
1813
  };
1796
1814
  var tbody = () => tbodySpec;
1797
1815
 
1798
- // src/elements/tabular-data/thead.ts
1816
+ // src/elements/thead.ts
1799
1817
  var theadSpec = {
1800
1818
  contents: [
1801
1819
  {
1802
1820
  type: "zeroOrMore",
1803
- contents: addToSet(contents.scriptSupportingElements, "tr")
1821
+ contents: contents.fromSet(contentsPreset.scriptSupportingElements, "tr")
1804
1822
  }
1805
1823
  ],
1806
1824
  attributes: contentAttributes(true)
1807
1825
  };
1808
1826
  var thead = () => theadSpec;
1809
1827
 
1810
- // src/elements/tabular-data/tfoot.ts
1828
+ // src/elements/tfoot.ts
1811
1829
  var tfootSpec = {
1812
1830
  contents: [
1813
1831
  {
1814
1832
  type: "zeroOrMore",
1815
- contents: addToSet(contents.scriptSupportingElements, "tr")
1833
+ contents: contents.fromSet(contentsPreset.scriptSupportingElements, "tr")
1816
1834
  }
1817
1835
  ],
1818
1836
  attributes: contentAttributes(true)
1819
1837
  };
1820
1838
  var tfoot = () => tfootSpec;
1821
1839
 
1822
- // src/elements/tabular-data/tr.ts
1840
+ // src/elements/tr.ts
1823
1841
  var trSpec = {
1824
1842
  contents: [
1825
1843
  {
1826
1844
  type: "zeroOrMore",
1827
- contents: addToSet(contents.scriptSupportingElements, "td", "th")
1845
+ contents: contents.fromSet(
1846
+ contentsPreset.scriptSupportingElements,
1847
+ "td",
1848
+ "th"
1849
+ )
1828
1850
  }
1829
1851
  ],
1830
1852
  attributes: contentAttributes(true)
1831
1853
  };
1832
1854
  var tr = () => trSpec;
1833
1855
 
1834
- // src/elements/tabular-data/td.ts
1856
+ // src/elements/td.ts
1835
1857
  var tdSpec = {
1836
1858
  contents: [
1837
1859
  {
1838
1860
  type: "oneOrMore",
1839
- contents: contents.flowContent
1861
+ contents: contentsPreset.flowContent
1840
1862
  }
1841
1863
  ],
1842
1864
  attributes: contentAttributes(true, ["colspan", "rowspan", "headers"])
1843
1865
  };
1844
1866
  var td = () => tdSpec;
1845
1867
 
1846
- // src/elements/tabular-data/th.ts
1868
+ // src/elements/th.ts
1847
1869
  var thSpec = {
1848
1870
  contents: [
1849
1871
  {
1850
1872
  type: "oneOrMore",
1851
- contents: contents.flowContent,
1873
+ contents: contentsPreset.flowContent,
1852
1874
  constraints: {
1853
- descendants: setsToMap(
1854
- {
1855
- disallow: true
1856
- },
1875
+ descendants: contentConstraint.fromSets(
1876
+ disallow,
1857
1877
  /* @__PURE__ */ new Set(["header", "footer"]),
1858
- contents.sectioningContent,
1859
- contents.headingContent
1878
+ contentsPreset.sectioningContent,
1879
+ contentsPreset.headingContent
1860
1880
  )
1861
1881
  }
1862
1882
  }
@@ -1871,21 +1891,14 @@ var thSpec = {
1871
1891
  };
1872
1892
  var th = () => thSpec;
1873
1893
 
1874
- // src/elements/forms/form.ts
1894
+ // src/elements/form.ts
1875
1895
  var formSpec = {
1876
1896
  contents: [
1877
1897
  {
1878
1898
  type: "oneOrMore",
1879
- contents: contents.flowContent,
1899
+ contents: contentsPreset.flowContent,
1880
1900
  constraints: {
1881
- descendants: /* @__PURE__ */ new Map([
1882
- [
1883
- "form",
1884
- {
1885
- disallow: true
1886
- }
1887
- ]
1888
- ])
1901
+ descendants: contentConstraint.fromEntries([["from", disallow]])
1889
1902
  }
1890
1903
  }
1891
1904
  ],
@@ -1903,14 +1916,14 @@ var formSpec = {
1903
1916
  };
1904
1917
  var form = () => formSpec;
1905
1918
 
1906
- // src/elements/forms/label.ts
1919
+ // src/elements/label.ts
1907
1920
  var labelSpec = {
1908
1921
  contents: [
1909
1922
  {
1910
1923
  type: "oneOrMore",
1911
- contents: contents.phrasingContent,
1924
+ contents: contentsPreset.phrasingContent,
1912
1925
  constraints: {
1913
- descendants: /* @__PURE__ */ new Map([["label", { disallow: true }]])
1926
+ descendants: contentConstraint.fromEntries([["label", disallow]])
1914
1927
  }
1915
1928
  }
1916
1929
  ],
@@ -1918,7 +1931,7 @@ var labelSpec = {
1918
1931
  };
1919
1932
  var label = () => labelSpec;
1920
1933
 
1921
- // src/elements/forms/input.ts
1934
+ // src/elements/input.ts
1922
1935
  var inputSpec = {
1923
1936
  contents: null,
1924
1937
  attributes: contentAttributes(true, [
@@ -1961,18 +1974,16 @@ var inputSpec = {
1961
1974
  };
1962
1975
  var input = () => inputSpec;
1963
1976
 
1964
- // src/elements/forms/button.ts
1977
+ // src/elements/button.ts
1965
1978
  var buttonSpec = {
1966
1979
  contents: [
1967
1980
  {
1968
1981
  type: "oneOrMore",
1969
- contents: contents.phrasingContent,
1982
+ contents: contentsPreset.phrasingContent,
1970
1983
  constraints: {
1971
- descendants: setsToMap(
1972
- {
1973
- disallow: true
1974
- },
1975
- contents.interactiveContent
1984
+ descendants: contentConstraint.fromSets(
1985
+ disallow,
1986
+ contentsPreset.interactiveContent
1976
1987
  )
1977
1988
  }
1978
1989
  }
@@ -1996,13 +2007,13 @@ var buttonSpec = {
1996
2007
  };
1997
2008
  var button = () => buttonSpec;
1998
2009
 
1999
- // src/elements/forms/select.ts
2010
+ // src/elements/select.ts
2000
2011
  var selectSpec = {
2001
2012
  contents: [
2002
2013
  {
2003
2014
  type: "zeroOrMore",
2004
- contents: addToSet(
2005
- contents.scriptSupportingElements,
2015
+ contents: contents.fromSet(
2016
+ contentsPreset.scriptSupportingElements,
2006
2017
  "option",
2007
2018
  "optgroup",
2008
2019
  "hr"
@@ -2021,7 +2032,7 @@ var selectSpec = {
2021
2032
  };
2022
2033
  var select = () => selectSpec;
2023
2034
 
2024
- // src/elements/forms/datalist.ts
2035
+ // src/elements/datalist.ts
2025
2036
  var datalistSpec = {
2026
2037
  contents: [
2027
2038
  {
@@ -2030,13 +2041,16 @@ var datalistSpec = {
2030
2041
  [
2031
2042
  {
2032
2043
  type: "oneOrMore",
2033
- contents: contents.phrasingContent
2044
+ contents: contentsPreset.phrasingContent
2034
2045
  }
2035
2046
  ],
2036
2047
  [
2037
2048
  {
2038
2049
  type: "zeroOrMore",
2039
- contents: addToSet(contents.scriptSupportingElements, "option")
2050
+ contents: contents.fromSet(
2051
+ contentsPreset.scriptSupportingElements,
2052
+ "option"
2053
+ )
2040
2054
  }
2041
2055
  ]
2042
2056
  ]
@@ -2046,19 +2060,22 @@ var datalistSpec = {
2046
2060
  };
2047
2061
  var datalist = () => datalistSpec;
2048
2062
 
2049
- // src/elements/forms/optgroup.ts
2063
+ // src/elements/optgroup.ts
2050
2064
  var optgroupSpec = {
2051
2065
  contents: [
2052
2066
  {
2053
2067
  type: "zeroOrMore",
2054
- contents: addToSet(contents.scriptSupportingElements, "option")
2068
+ contents: contents.fromSet(
2069
+ contentsPreset.scriptSupportingElements,
2070
+ "option"
2071
+ )
2055
2072
  }
2056
2073
  ],
2057
2074
  attributes: contentAttributes(true, ["disabled", "label"])
2058
2075
  };
2059
2076
  var optgroup = () => optgroupSpec;
2060
2077
 
2061
- // src/elements/forms/option.ts
2078
+ // src/elements/option.ts
2062
2079
  var attributes4 = contentAttributes(true, [
2063
2080
  "disabled",
2064
2081
  "label",
@@ -2073,7 +2090,7 @@ var optionWithLabelSpec = {
2073
2090
  contents: [
2074
2091
  {
2075
2092
  type: "required",
2076
- contents: contents.text
2093
+ contents: contentsPreset.text
2077
2094
  }
2078
2095
  ],
2079
2096
  attributes: attributes4
@@ -2082,7 +2099,7 @@ var optionWithoutLabelAndValueSpec = {
2082
2099
  contents: [
2083
2100
  {
2084
2101
  type: "oneOrMore",
2085
- contents: contents.text
2102
+ contents: contentsPreset.text
2086
2103
  }
2087
2104
  ],
2088
2105
  attributes: attributes4
@@ -2098,12 +2115,12 @@ var option = (state) => {
2098
2115
  return optionWithoutLabelAndValueSpec;
2099
2116
  };
2100
2117
 
2101
- // src/elements/forms/textarea.ts
2118
+ // src/elements/textarea.ts
2102
2119
  var textareaSpec = {
2103
2120
  contents: [
2104
2121
  {
2105
2122
  type: "zeroOrMore",
2106
- contents: contents.text
2123
+ contents: contentsPreset.text
2107
2124
  }
2108
2125
  ],
2109
2126
  attributes: contentAttributes(true, [
@@ -2124,26 +2141,26 @@ var textareaSpec = {
2124
2141
  };
2125
2142
  var textarea = () => textareaSpec;
2126
2143
 
2127
- // src/elements/forms/output.ts
2144
+ // src/elements/output.ts
2128
2145
  var outputSpec = {
2129
2146
  contents: [
2130
2147
  {
2131
2148
  type: "oneOrMore",
2132
- contents: contents.phrasingContent
2149
+ contents: contentsPreset.phrasingContent
2133
2150
  }
2134
2151
  ],
2135
2152
  attributes: contentAttributes(true, ["for", "form", "name"])
2136
2153
  };
2137
2154
  var output = () => outputSpec;
2138
2155
 
2139
- // src/elements/forms/progress.ts
2156
+ // src/elements/progress.ts
2140
2157
  var progressSpec = {
2141
2158
  contents: [
2142
2159
  {
2143
2160
  type: "oneOrMore",
2144
- contents: contents.phrasingContent,
2161
+ contents: contentsPreset.phrasingContent,
2145
2162
  constraints: {
2146
- descendants: /* @__PURE__ */ new Map([["progress", { disallow: true }]])
2163
+ descendants: contentConstraint.fromEntries([["progress", disallow]])
2147
2164
  }
2148
2165
  }
2149
2166
  ],
@@ -2151,21 +2168,14 @@ var progressSpec = {
2151
2168
  };
2152
2169
  var progress = () => progressSpec;
2153
2170
 
2154
- // src/elements/forms/meter.ts
2171
+ // src/elements/meter.ts
2155
2172
  var meterSpec = {
2156
2173
  contents: [
2157
2174
  {
2158
2175
  type: "oneOrMore",
2159
- contents: contents.phrasingContent,
2176
+ contents: contentsPreset.phrasingContent,
2160
2177
  constraints: {
2161
- descendants: /* @__PURE__ */ new Map([
2162
- [
2163
- "meter",
2164
- {
2165
- disallow: true
2166
- }
2167
- ]
2168
- ])
2178
+ descendants: contentConstraint.fromEntries([["meter", disallow]])
2169
2179
  }
2170
2180
  }
2171
2181
  ],
@@ -2180,80 +2190,86 @@ var meterSpec = {
2180
2190
  };
2181
2191
  var meter = () => meterSpec;
2182
2192
 
2183
- // src/elements/forms/fieldset.ts
2193
+ // src/elements/fieldset.ts
2184
2194
  var fieldsetSpec = {
2185
2195
  contents: [
2186
2196
  {
2187
2197
  type: "optional",
2188
- contents: new Set("legend")
2198
+ contents: contents.fromKeys("legend")
2189
2199
  },
2190
2200
  {
2191
2201
  type: "oneOrMore",
2192
- contents: contents.flowContent
2202
+ contents: contentsPreset.flowContent
2193
2203
  }
2194
2204
  ],
2195
2205
  attributes: contentAttributes(true, ["disabled", "form", "name"])
2196
2206
  };
2197
2207
  var fieldset = () => fieldsetSpec;
2198
2208
 
2199
- // src/elements/forms/legend.ts
2209
+ // src/elements/legend.ts
2200
2210
  var legendSpec = {
2201
2211
  contents: [
2202
2212
  {
2203
2213
  type: "zeroOrMore",
2204
- contents: unionSets(contents.phrasingContent, contents.headingContent)
2214
+ contents: contents.fromUnionSets(
2215
+ contentsPreset.phrasingContent,
2216
+ contentsPreset.headingContent
2217
+ )
2205
2218
  }
2206
2219
  ],
2207
2220
  attributes: contentAttributes(true)
2208
2221
  };
2209
2222
  var legend = () => legendSpec;
2210
2223
 
2211
- // src/elements/interactive-elements/details.ts
2224
+ // src/elements/details.ts
2212
2225
  var detailsSpec = {
2213
2226
  contents: [
2214
2227
  {
2215
2228
  type: "required",
2216
- contents: /* @__PURE__ */ new Set(["summary"])
2229
+ contents: contents.fromKeys("summary")
2217
2230
  },
2218
2231
  {
2219
2232
  type: "oneOrMore",
2220
- contents: contents.flowContent
2233
+ contents: contentsPreset.flowContent
2221
2234
  }
2222
2235
  ],
2223
2236
  attributes: contentAttributes(true, ["name", "open"])
2224
2237
  };
2225
2238
  var details = () => detailsSpec;
2226
2239
 
2227
- // src/elements/interactive-elements/summary.ts
2240
+ // src/elements/summary.ts
2228
2241
  var summarySpec = {
2229
2242
  contents: [
2230
2243
  {
2231
2244
  type: "oneOrMore",
2232
- contents: unionSets(contents.phrasingContent, contents.headingContent)
2245
+ contents: contents.fromUnionSets(
2246
+ contentsPreset.phrasingContent,
2247
+ contentsPreset.headingContent
2248
+ )
2233
2249
  }
2234
2250
  ],
2235
2251
  attributes: contentAttributes(true)
2236
2252
  };
2237
2253
  var summary = () => summarySpec;
2238
2254
 
2239
- // src/elements/interactive-elements/dialog.ts
2255
+ // src/elements/dialog.ts
2240
2256
  var dialogSpec = {
2241
2257
  contents: [
2242
2258
  {
2243
2259
  type: "oneOrMore",
2244
- contents: contents.flowContent
2260
+ contents: contentsPreset.flowContent
2245
2261
  }
2246
2262
  ],
2247
2263
  attributes: contentAttributes(true, ["closedby", "open"])
2248
2264
  };
2249
2265
  var dialog = () => dialogSpec;
2250
2266
 
2251
- // src/elements/scripting/script.ts
2267
+ // src/elements/script.ts
2252
2268
  var scriptSpec = {
2253
2269
  contents: [
2254
2270
  {
2255
2271
  type: "zeroOrMore",
2256
- contents: contents.text
2272
+ contents: contentsPreset.text
2257
2273
  }
2258
2274
  ],
2259
2275
  attributes: contentAttributes(true, [
@@ -2271,19 +2287,19 @@ var scriptSpec = {
2271
2287
  };
2272
2288
  var script = () => scriptSpec;
2273
2289
 
2274
- // src/elements/scripting/noscript.ts
2290
+ // src/elements/noscript.ts
2275
2291
  var noscriptSpec = {
2276
2292
  contents: [
2277
2293
  {
2278
2294
  type: "zeroOrMore",
2279
- contents: contents.text
2295
+ contents: contentsPreset.text
2280
2296
  }
2281
2297
  ],
2282
2298
  attributes: contentAttributes(true)
2283
2299
  };
2284
2300
  var noscript = () => noscriptSpec;
2285
2301
 
2286
- // src/elements/scripting/template.ts
2302
+ // src/elements/template.ts
2287
2303
  var templateSpec = {
2288
2304
  contents: null,
2289
2305
  attributes: contentAttributes(true, [
@@ -2295,26 +2311,29 @@ var templateSpec = {
2295
2311
  };
2296
2312
  var template = () => templateSpec;
2297
2313
 
2298
- // src/elements/scripting/slot.ts
2314
+ // src/elements/slot.ts
2299
2315
  var slotSpec = {
2300
2316
  contents: [
2301
2317
  {
2302
2318
  type: "oneOrMore",
2303
- contents: contents.transparentContent
2319
+ contents: contentsPreset.transparentContent
2304
2320
  }
2305
2321
  ],
2306
2322
  attributes: contentAttributes(true, ["name"])
2307
2323
  };
2308
2324
  var slot = () => slotSpec;
2309
2325
 
2310
- // src/elements/scripting/canvas.ts
2326
+ // src/elements/canvas.ts
2311
2327
  var canvasSpec = {
2312
2328
  contents: [
2313
2329
  {
2314
2330
  type: "oneOrMore",
2315
- contents: contents.transparentContent,
2331
+ contents: contentsPreset.transparentContent,
2316
2332
  constraints: {
2317
- descendants: setsToMap({ disallow: true }, contents.interactiveContent)
2333
+ descendants: contentConstraint.fromSets(
2334
+ disallow,
2335
+ contentsPreset.interactiveContent
2336
+ )
2318
2337
  }
2319
2338
  }
2320
2339
  ],