Skip to main content

dioxus_html/
elements.rs

1#![allow(non_upper_case_globals)]
2
3use dioxus_core::HasAttributes;
4use dioxus_core::IntoAttributeValue;
5#[cfg(feature = "hot-reload-context")]
6use dioxus_core_types::HotReloadingContext;
7use dioxus_html_internal_macro::impl_extension_attributes;
8
9#[cfg(feature = "hot-reload-context")]
10use crate::{map_global_attributes, map_svg_attributes};
11
12pub type AttributeDescription = (&'static str, Option<&'static str>, bool);
13
14macro_rules! impl_attribute {
15    (
16        $element:ident {
17            $(#[$attr_method:meta])*
18            $fil:ident: $vil:ident (DEFAULT),
19        }
20    ) => {
21        $(#[$attr_method])*
22        ///
23        /// ## Usage in rsx
24        ///
25        /// ```rust, no_run
26        /// # use dioxus::prelude::*;
27        #[doc = concat!("let ", stringify!($fil), " = \"value\";")]
28        ///
29        /// rsx! {
30        ///     // Attributes need to be under the element they modify
31        #[doc = concat!("    ", stringify!($element), " {")]
32        ///         // Attributes are followed by a colon and then the value of the attribute
33        #[doc = concat!("        ", stringify!($fil), ": \"value\"")]
34        ///     }
35        #[doc = concat!("    ", stringify!($element), " {")]
36        ///         // Or you can use the shorthand syntax if you have a variable in scope that has the same name as the attribute
37        #[doc = concat!("        ", stringify!($fil), ",")]
38        ///     }
39        /// };
40        /// ```
41        pub const $fil: AttributeDescription = (stringify!($fil), None, false);
42    };
43
44    (
45        $element:ident {
46            $(#[$attr_method:meta])*
47            $fil:ident: $vil:ident ($name:literal),
48        }
49    ) => {
50        $(#[$attr_method])*
51        ///
52        /// ## Usage in rsx
53        ///
54        /// ```rust, no_run
55        /// # use dioxus::prelude::*;
56        #[doc = concat!("let ", stringify!($fil), " = \"value\";")]
57        ///
58        /// rsx! {
59        ///     // Attributes need to be under the element they modify
60        #[doc = concat!("    ", stringify!($element), " {")]
61        ///         // Attributes are followed by a colon and then the value of the attribute
62        #[doc = concat!("        ", stringify!($fil), ": \"value\"")]
63        ///     }
64        #[doc = concat!("    ", stringify!($element), " {")]
65        ///         // Or you can use the shorthand syntax if you have a variable in scope that has the same name as the attribute
66        #[doc = concat!("        ", stringify!($fil), ",")]
67        ///     }
68        /// };
69        /// ```
70        pub const $fil: AttributeDescription = ($name, None, false);
71    };
72
73    (
74        $element:ident {
75            $(#[$attr_method:meta])*
76            $fil:ident: $vil:ident (volatile),
77        }
78    ) => {
79        $(#[$attr_method])*
80        ///
81        /// ## Usage in rsx
82        ///
83        /// ```rust, no_run
84        /// # use dioxus::prelude::*;
85        #[doc = concat!("let ", stringify!($fil), " = \"value\";")]
86        ///
87        /// rsx! {
88        ///     // Attributes need to be under the element they modify
89        #[doc = concat!("    ", stringify!($element), " {")]
90        ///         // Attributes are followed by a colon and then the value of the attribute
91        #[doc = concat!("        ", stringify!($fil), ": \"value\"")]
92        ///     }
93        #[doc = concat!("    ", stringify!($element), " {")]
94        ///         // Or you can use the shorthand syntax if you have a variable in scope that has the same name as the attribute
95        #[doc = concat!("        ", stringify!($fil), ",")]
96        ///     }
97        /// };
98        /// ```
99        pub const $fil: AttributeDescription = (stringify!($fil), None, true);
100    };
101
102    (
103        $element:ident {
104            $(#[$attr_method:meta])*
105            $fil:ident: $vil:ident (in $ns:literal),
106        }
107    ) => {
108        $(#[$attr_method])*
109        ///
110        /// ## Usage in rsx
111        ///
112        /// ```rust, no_run
113        /// # use dioxus::prelude::*;
114        #[doc = concat!("let ", stringify!($fil), " = \"value\";")]
115        ///
116        /// rsx! {
117        ///     // Attributes need to be under the element they modify
118        #[doc = concat!("    ", stringify!($element), " {")]
119        ///         // Attributes are followed by a colon and then the value of the attribute
120        #[doc = concat!("        ", stringify!($fil), ": \"value\"")]
121        ///     }
122        #[doc = concat!("    ", stringify!($element), " {")]
123        ///         // Or you can use the shorthand syntax if you have a variable in scope that has the same name as the attribute
124        #[doc = concat!("        ", stringify!($fil), ",")]
125        ///     }
126        /// };
127        /// ```
128        pub const $fil: AttributeDescription = (stringify!($fil), Some($ns), false)
129    };
130
131    (
132        $element:ident {
133            $(#[$attr_method:meta])*
134            $fil:ident: $vil:ident (in $ns:literal : volatile),
135        }
136    ) => {
137        $(#[$attr_method])*
138        ///
139        /// ## Usage in rsx
140        ///
141        /// ```rust, no_run
142        /// # use dioxus::prelude::*;
143        #[doc = concat!("let ", stringify!($fil), " = \"value\";")]
144        ///
145        /// rsx! {
146        ///     // Attributes need to be under the element they modify
147        #[doc = concat!("    ", stringify!($element), " {")]
148        ///         // Attributes are followed by a colon and then the value of the attribute
149        #[doc = concat!("        ", stringify!($fil), ": \"value\"")]
150        ///     }
151        #[doc = concat!("    ", stringify!($element), " {")]
152        ///         // Or you can use the shorthand syntax if you have a variable in scope that has the same name as the attribute
153        #[doc = concat!("        ", stringify!($fil), ",")]
154        ///     }
155        /// };
156        /// ```
157        pub const $fil: AttributeDescription = (stringify!($fil), Some($ns), true)
158    };
159}
160
161#[cfg(feature = "hot-reload-context")]
162macro_rules! impl_attribute_match {
163    (
164        $attr:ident $fil:ident: $vil:ident (DEFAULT),
165    ) => {
166        if $attr == stringify!($fil) {
167            return Some((stringify!($fil), None));
168        }
169    };
170
171    (
172        $attr:ident $fil:ident: $vil:ident (volatile),
173    ) => {
174        if $attr == stringify!($fil) {
175            return Some((stringify!($fil), None));
176        }
177    };
178
179    (
180        $attr:ident $fil:ident: $vil:ident ($name:literal),
181    ) => {
182        if $attr == stringify!($fil) {
183            return Some(($name, None));
184        }
185    };
186
187    (
188        $attr:ident $fil:ident: $vil:ident (in $ns:literal),
189    ) => {
190        if $attr == stringify!($fil) {
191            return Some((stringify!($fil), Some($ns)));
192        }
193    };
194}
195
196#[cfg(feature = "html-to-rsx")]
197macro_rules! impl_html_to_rsx_attribute_match {
198    (
199        $attr:ident $fil:ident $name:literal
200    ) => {
201        if $attr == $name {
202            return Some(stringify!($fil));
203        }
204    };
205
206    (
207        $attr:ident $fil:ident $_:tt
208    ) => {
209        if $attr == stringify!($fil) {
210            return Some(stringify!($fil));
211        }
212    };
213}
214
215macro_rules! impl_element {
216    (
217        $(#[$attr:meta])*
218        $name:ident None {
219            $(
220                $(#[$attr_method:meta])*
221                $fil:ident: $vil:ident $extra:tt,
222            )*
223        }
224    ) => {
225        #[allow(non_camel_case_types)]
226        $(#[$attr])*
227        ///
228        /// ## Usage in rsx
229        ///
230        /// ```rust, no_run
231        /// # use dioxus::prelude::*;
232        /// # let attributes = vec![];
233        /// # fn ChildComponent() -> Element { unimplemented!() }
234        /// # let raw_expression: Element = rsx! {};
235        /// rsx! {
236        ///     // Elements are followed by braces that surround any attributes and children for that element
237        #[doc = concat!("    ", stringify!($name), " {")]
238        ///         // Add any attributes first
239        ///         class: "my-class",
240        ///         "custom-attribute-name": "value",
241        ///         // Then add any attributes you are spreading into this element
242        ///         ..attributes,
243        ///         // Then add any children elements, components, text nodes, or raw expressions
244        ///         div {}
245        ///         ChildComponent {}
246        ///         "child text"
247        ///         {raw_expression}
248        ///     }
249        /// };
250        /// ```
251        pub mod $name {
252            #[allow(unused)]
253            use super::*;
254            pub use crate::attribute_groups::global_attributes::*;
255
256            pub const TAG_NAME: &'static str = stringify!($name);
257            pub const NAME_SPACE: Option<&'static str> = None;
258
259            $(
260                impl_attribute!(
261                    $name {
262                        $(#[$attr_method])*
263                        $fil: $vil ($extra),
264                    }
265                );
266            )*
267        }
268    };
269
270    (
271        $(#[$attr:meta])*
272        $name:ident $namespace:literal {
273            $(
274                $(#[$attr_method:meta])*
275                $fil:ident: $vil:ident $extra:tt,
276            )*
277        }
278    ) => {
279        $(#[$attr])*
280        ///
281        /// ## Usage in rsx
282        ///
283        /// ```rust, no_run
284        /// # use dioxus::prelude::*;
285        /// # let attributes = vec![];
286        /// # fn ChildComponent() -> Element { unimplemented!() }
287        /// # let raw_expression: Element = rsx! {};
288        /// rsx! {
289        ///     // Elements are followed by braces that surround any attributes and children for that element
290        #[doc = concat!("    ", stringify!($name), " {")]
291        ///         // Add any attributes first
292        ///         color: "red",
293        ///         "custom-attribute-name": "value",
294        ///         // Then add any attributes you are spreading into this element
295        ///         ..attributes,
296        ///         // Then add any children elements, components, text nodes, or raw expressions
297        ///         circle { cx: "10", cy: "10", r: "2", fill: "red" }
298        ///         ChildComponent {}
299        ///         "child text"
300        ///         {raw_expression}
301        ///     }
302        /// };
303        /// ```
304        pub mod $name {
305            #[allow(unused)]
306            use super::*;
307            pub use crate::attribute_groups::svg_attributes::*;
308
309            pub const TAG_NAME: &'static str = stringify!($name);
310            pub const NAME_SPACE: Option<&'static str> = Some($namespace);
311
312            $(
313                impl_attribute!(
314                    $name {
315                        $(#[$attr_method])*
316                        $fil: $vil ($extra),
317                    }
318                );
319            )*
320        }
321    };
322
323    (
324        $(#[$attr:meta])*
325        $element:ident [$name:literal, $namespace:tt] {
326            $(
327                $(#[$attr_method:meta])*
328                $fil:ident: $vil:ident $extra:tt,
329            )*
330        }
331    ) => {
332        #[allow(non_camel_case_types)]
333        $(#[$attr])*
334        ///
335        /// ## Usage in rsx
336        ///
337        /// ```rust, no_run
338        /// # use dioxus::prelude::*;
339        /// # let attributes = vec![];
340        /// # fn ChildComponent() -> Element { unimplemented!() }
341        /// # let raw_expression: Element = rsx! {};
342        /// rsx! {
343        ///     // Elements are followed by braces that surround any attributes and children for that element
344        #[doc = concat!("    ", stringify!($element), " {")]
345        ///         // Add any attributes first
346        ///         color: "red",
347        ///         "custom-attribute-name": "value",
348        ///         // Then add any attributes you are spreading into this element
349        ///         ..attributes,
350        ///         // Then add any children elements, components, text nodes, or raw expressions
351        ///         circle { cx: "10", cy: "10", r: "2", fill: "red" }
352        ///         ChildComponent {}
353        ///         "child text"
354        ///         {raw_expression}
355        ///     }
356        /// };
357        /// ```
358        pub mod $element {
359            #[allow(unused)]
360            use super::*;
361            pub use crate::attribute_groups::svg_attributes::*;
362
363            pub const TAG_NAME: &'static str = $name;
364            pub const NAME_SPACE: Option<&'static str> = Some($namespace);
365
366            $(
367                impl_attribute!(
368                    $element {
369                        $(#[$attr_method])*
370                        $fil: $vil ($extra),
371                    }
372                );
373            )*
374        }
375    }
376}
377
378#[cfg(feature = "hot-reload-context")]
379macro_rules! impl_element_match {
380    (
381        $el:ident $name:ident None {
382            $(
383                $fil:ident: $vil:ident $extra:tt,
384            )*
385        }
386    ) => {
387        if $el == stringify!($name) {
388            return Some((stringify!($name), None));
389        }
390    };
391
392    (
393        $el:ident $name:ident $namespace:literal {
394            $(
395                $fil:ident: $vil:ident $extra:tt,
396            )*
397        }
398    ) => {
399        if $el == stringify!($name) {
400            return Some((stringify!($name), Some($namespace)));
401        }
402    };
403
404    (
405        $el:ident $name:ident [$_:literal, $namespace:tt] {
406            $(
407                $fil:ident: $vil:ident $extra:tt,
408            )*
409        }
410    ) => {
411        if $el == stringify!($name) {
412            return Some((stringify!($name), Some($namespace)));
413        }
414    };
415}
416
417#[cfg(feature = "hot-reload-context")]
418macro_rules! impl_element_match_attributes {
419    (
420        $el:ident $attr:ident $name:ident None {
421            $(
422                $fil:ident: $vil:ident $extra:tt,
423            )*
424        }
425    ) => {
426        if $el == stringify!($name) {
427            $(
428                impl_attribute_match!(
429                    $attr $fil: $vil ($extra),
430                );
431            )*
432
433            return impl_map_global_attributes!($el $attr $name None);
434        }
435    };
436
437    (
438        $el:ident $attr:ident $name:ident $namespace:tt {
439            $(
440                $fil:ident: $vil:ident $extra:tt,
441            )*
442        }
443    ) => {
444        if $el == stringify!($name) {
445            $(
446                impl_attribute_match!(
447                    $attr $fil: $vil ($extra),
448                );
449            )*
450
451            return impl_map_global_attributes!($el $attr $name $namespace);
452        }
453    }
454}
455
456#[cfg(feature = "hot-reload-context")]
457macro_rules! impl_map_global_attributes {
458    (
459        $el:ident $attr:ident $element:ident None
460    ) => {
461        map_global_attributes($attr)
462    };
463
464    (
465        $el:ident $attr:ident $element:ident $namespace:literal
466    ) => {
467        if $namespace == "http://www.w3.org/2000/svg" {
468            map_svg_attributes($attr)
469        } else {
470            map_global_attributes($attr)
471        }
472    };
473
474    (
475        $el:ident $attr:ident $element:ident [$name:literal, $namespace:tt]
476    ) => {
477        if $namespace == "http://www.w3.org/2000/svg" {
478            map_svg_attributes($attr)
479        } else {
480            map_global_attributes($attr)
481        }
482    };
483}
484
485macro_rules! builder_constructors {
486    (
487        $(
488            $(#[$attr:meta])*
489            $name:ident $namespace:tt {
490                $(
491                    $(#[$attr_method:meta])*
492                    $fil:ident: $vil:ident $extra:tt,
493                )*
494            };
495         )*
496        ) => {
497        #[cfg(feature = "hot-reload-context")]
498        pub struct HtmlCtx;
499
500        #[cfg(feature = "hot-reload-context")]
501        impl HotReloadingContext for HtmlCtx {
502            fn map_attribute(element: &str, attribute: &str) -> Option<(&'static str, Option<&'static str>)> {
503                $(
504                    impl_element_match_attributes!(
505                        element attribute $name $namespace {
506                            $(
507                                $fil: $vil $extra,
508                            )*
509                        }
510                    );
511                )*
512                None
513            }
514
515            fn map_element(element: &str) -> Option<(&'static str, Option<&'static str>)> {
516                $(
517                    impl_element_match!(
518                        element $name $namespace {
519                            $(
520                                $fil: $vil $extra,
521                            )*
522                        }
523                    );
524                )*
525                None
526            }
527        }
528
529        #[cfg(feature = "html-to-rsx")]
530        pub fn map_html_attribute_to_rsx(html: &str) -> Option<&'static str> {
531            $(
532                $(
533                    impl_html_to_rsx_attribute_match!(
534                        html $fil $extra
535                    );
536                )*
537            )*
538
539            if let Some(name) = crate::map_html_global_attributes_to_rsx(html) {
540                return Some(name);
541            }
542
543            if let Some(name) = crate::map_html_svg_attributes_to_rsx(html) {
544                return Some(name);
545            }
546
547            None
548        }
549
550        #[cfg(feature = "html-to-rsx")]
551        pub fn map_html_element_to_rsx(html: &str) -> Option<&'static str> {
552            $(
553                if html == stringify!($name) {
554                    return Some(stringify!($name));
555                }
556            )*
557
558            None
559        }
560
561        $(
562            impl_element!(
563                $(#[$attr])*
564                $name $namespace {
565                    $(
566                        $(#[$attr_method])*
567                        $fil: $vil $extra,
568                    )*
569                }
570            );
571        )*
572
573        /// This module contains helpers for rust analyzer autocompletion
574        #[doc(hidden)]
575        pub mod completions {
576            /// This helper tells rust analyzer that it should autocomplete the element name with braces.
577            #[allow(non_camel_case_types)]
578            pub enum CompleteWithBraces {
579                $(
580                    $(#[$attr])*
581                    ///
582                    /// ## Usage in rsx
583                    ///
584                    /// ```rust, no_run
585                    /// # use dioxus::prelude::*;
586                    /// # let attributes = vec![];
587                    /// # fn ChildComponent() -> Element { unimplemented!() }
588                    /// # let raw_expression: Element = rsx! {};
589                    /// rsx! {
590                    ///     // Elements are followed by braces that surround any attributes and children for that element
591                    #[doc = concat!("    ", stringify!($name), " {")]
592                    ///         // Add any attributes first
593                    ///         class: "my-class",
594                    ///         "custom-attribute-name": "value",
595                    ///         // Then add any attributes you are spreading into this element
596                    ///         ..attributes,
597                    ///         // Then add any children elements, components, text nodes, or raw expressions
598                    ///         div {}
599                    ///         ChildComponent {}
600                    ///         "child text"
601                    ///         {raw_expression}
602                    ///     }
603                    /// };
604                    /// ```
605                    $name {}
606                ),*
607            }
608        }
609
610        pub(crate) mod extensions {
611            use super::*;
612            $(
613                impl_extension_attributes![$name { $($fil,)* }];
614            )*
615        }
616    };
617}
618
619// Organized in the same order as
620// https://developer.mozilla.org/en-US/docs/Web/HTML/Element
621//
622// Does not include obsolete elements.
623//
624// This namespace represents a collection of modern HTML-5 compatible elements.
625//
626// This list does not include obsolete, deprecated, experimental, or poorly supported elements.
627builder_constructors! {
628    // Document metadata
629
630    /// Build a
631    /// [`<base>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/base)
632    /// element.
633    ///
634    base None {
635        href: Uri DEFAULT,
636        target: Target DEFAULT,
637    };
638
639    /// Build a
640    /// [`<head>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/head)
641    /// element.
642    head None {};
643
644    /// Build a
645    /// [`<link>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/link)
646    /// element.
647    link None {
648        // as: Mime,
649        crossorigin: CrossOrigin DEFAULT,
650        href: Uri DEFAULT,
651        hreflang: LanguageTag DEFAULT,
652        media: String DEFAULT, // FIXME media query
653        rel: LinkType DEFAULT,
654        sizes: String DEFAULT, // FIXME
655        title: String DEFAULT, // FIXME
656        r#type: Mime "type",
657        integrity: String DEFAULT,
658        disabled: Bool DEFAULT,
659        referrerpolicy: ReferrerPolicy DEFAULT,
660        fetchpriority: FetchPriority DEFAULT,
661        blocking: Blocking DEFAULT,
662        r#as: As "as",
663    };
664
665    /// Build a
666    /// [`<meta>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta)
667    /// element.
668    meta None {
669        charset: String DEFAULT, // FIXME IANA standard names
670        content: String DEFAULT,
671        http_equiv: String "http-equiv",
672        name: Metadata DEFAULT,
673        property: Metadata DEFAULT,
674    };
675
676    /// Build a
677    /// [`<style>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/style)
678    /// element.
679    style None {
680        r#type: Mime "type",
681        media: String DEFAULT, // FIXME media query
682        nonce: Nonce DEFAULT,
683        title: String DEFAULT, // FIXME
684    };
685
686    /// Build a
687    /// [`<title>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/title)
688    /// element.
689    title None { };
690
691    // Sectioning root
692
693    /// Build a
694    /// [`<body>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/body)
695    /// element.
696    body None {};
697
698    // ------------------
699    // Content sectioning
700    // ------------------
701
702    /// Build a
703    /// [`<address>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/address)
704    /// element.
705    address None {};
706
707    /// Build a
708    /// [`<article>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/article)
709    /// element.
710    article None {};
711
712    /// Build a
713    /// [`<aside>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/aside)
714    /// element.
715    aside None {};
716
717    /// Build a
718    /// [`<footer>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/footer)
719    /// element.
720    footer None {};
721
722    /// Build a
723    /// [`<header>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/header)
724    /// element.
725    header None {};
726
727    /// Build a
728    /// [`<hgroup>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/hgroup)
729    /// element.
730    hgroup None {};
731
732    /// Build a
733    /// [`<h1>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/h1)
734    /// element.
735    ///
736    /// # About
737    /// - The HTML `<h1>` element is found within the `<body>` tag.
738    /// - Headings can range from `<h1>` to `<h6>`.
739    /// - The most important heading is `<h1>` and the least important heading is `<h6>`.
740    /// - The `<h1>` heading is the first heading in the document.
741    /// - The `<h1>` heading is usually a large bolded font.
742    h1 None {};
743
744    /// Build a
745    /// [`<h2>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/h2)
746    /// element.
747    ///
748    /// # About
749    /// - The HTML `<h2>` element is found within the `<body>` tag.
750    /// - Headings can range from `<h1>` to `<h6>`.
751    /// - The most important heading is `<h1>` and the least important heading is `<h6>`.
752    /// - The `<h2>` heading is the second heading in the document.
753    /// - The `<h2>` heading is usually a large bolded font.
754    h2 None {};
755
756    /// Build a
757    /// [`<h3>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/h3)
758    /// element.
759    ///
760    /// # About
761    /// - The HTML `<h1>` element is found within the `<body>` tag.
762    /// - Headings can range from `<h1>` to `<h6>`.
763    /// - The most important heading is `<h1>` and the least important heading is `<h6>`.
764    /// - The `<h1>` heading is the first heading in the document.
765    /// - The `<h1>` heading is usually a large bolded font.
766    h3 None {};
767
768    /// Build a
769    /// [`<h4>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/h4)
770    /// element.
771    h4 None {};
772
773    /// Build a
774    /// [`<h5>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/h5)
775    /// element.
776    h5 None {};
777
778    /// Build a
779    /// [`<h6>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/h6)
780    /// element.
781    h6 None {};
782
783    /// Build a
784    /// [`<main>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/main)
785    /// element.
786    main None {};
787
788    /// Build a
789    /// [`<nav>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/nav)
790    /// element.
791    nav None {};
792
793    /// Build a
794    /// [`<section>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/section)
795    /// element.
796    section None {};
797
798    // Text content
799
800    /// Build a
801    /// [`<blockquote>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/blockquote)
802    /// element.
803    blockquote None {
804        cite: Uri DEFAULT,
805    };
806    /// Build a
807    /// [`<dd>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dd)
808    /// element.
809    dd None {};
810
811    /// Build a
812    /// [`<div>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/div)
813    /// element.
814    ///
815    /// Part of the HTML namespace. Only works in HTML-compatible renderers
816    ///
817    /// ## Definition and Usage
818    /// - The `<div>` tag defines a division or a section in an HTML document.
819    /// - The `<div>` tag is used as a container for HTML elements - which is then styled with CSS or manipulated with  JavaScript.
820    /// - The `<div>` tag is easily styled by using the class or id attribute.
821    /// - Any sort of content can be put inside the `<div>` tag!
822    ///
823    /// Note: By default, browsers always place a line break before and after the `<div>` element.
824    ///
825    /// ## References:
826    /// - <https://developer.mozilla.org/en-US/docs/Web/HTML/Element/div>
827    /// - <https://www.w3schools.com/tags/tag_div.asp>
828    div None {};
829
830    /// Build a
831    /// [`<dl>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dl)
832    /// element.
833    dl None {};
834
835    /// Build a
836    /// [`<dt>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dt)
837    /// element.
838    dt None {};
839
840    /// Build a
841    /// [`<figcaption>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/figcaption)
842    /// element.
843    figcaption None {};
844
845    /// Build a
846    /// [`<figure>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/figure)
847    /// element.
848    figure None {};
849
850    /// Build a
851    /// [`<hr>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/hr)
852    /// element.
853    hr None {};
854
855    /// Build a
856    /// [`<li>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/li)
857    /// element.
858    li None {
859        value: isize DEFAULT,
860    };
861
862    /// Build a
863    /// [`<ol>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ol)
864    /// element.
865    ol None {
866        reversed: Bool DEFAULT,
867        start: isize DEFAULT,
868        r#type: OrderedListType "type",
869    };
870
871    /// Build a
872    /// [`<p>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/p)
873    /// element.
874    p None {};
875
876    /// Build a
877    /// [`<pre>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/pre)
878    /// element.
879    pre None {};
880
881    /// Build a
882    /// [`<ul>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ul)
883    /// element.
884    ul None {};
885
886
887    // Inline text semantics
888
889    /// Build a
890    /// [`<a>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a)
891    /// element.
892    a None {
893        download: String DEFAULT,
894        href: Uri DEFAULT,
895        hreflang: LanguageTag DEFAULT,
896        target: Target DEFAULT,
897        r#type: Mime "type",
898        // ping: SpacedList<Uri>,
899        // rel: SpacedList<LinkType>,
900        ping: SpacedList DEFAULT,
901        rel: SpacedList DEFAULT,
902    };
903
904    /// Build a
905    /// [`<abbr>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/abbr)
906    /// element.
907    abbr None {};
908
909    /// Build a
910    /// [`<b>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/b)
911    /// element.
912    b None {};
913
914    /// Build a
915    /// [`<bdi>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/bdi)
916    /// element.
917    bdi None {};
918
919    /// Build a
920    /// [`<bdo>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/bdo)
921    /// element.
922    bdo None {};
923
924    /// Build a
925    /// [`<br>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/br)
926    /// element.
927    br None {};
928
929    /// Build a
930    /// [`<cite>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/cite)
931    /// element.
932    cite None {};
933
934    /// Build a
935    /// [`<code>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/code)
936    /// element.
937    code None {
938        language: String DEFAULT,
939    };
940
941    /// Build a
942    /// [`<data>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/data)
943    /// element.
944    data None {
945        value: String DEFAULT,
946    };
947
948    /// Build a
949    /// [`<dfn>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dfn)
950    /// element.
951    dfn None {};
952
953    /// Build a
954    /// [`<em>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/em)
955    /// element.
956    em None {};
957
958    /// Build a
959    /// [`<i>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/i)
960    /// element.
961    i None {};
962
963    /// Build a
964    /// [`<kbd>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/kbd)
965    /// element.
966    kbd None {};
967
968    /// Build a
969    /// [`<mark>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/mark)
970    /// element.
971    mark None {};
972
973    /// Build a
974    /// [`<menu>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/menu)
975    /// element.
976    menu None {};
977
978    /// Build a
979    /// [`<q>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/q)
980    /// element.
981    q None {
982        cite: Uri DEFAULT,
983    };
984
985
986    /// Build a
987    /// [`<rp>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/rp)
988    /// element.
989    rp None {};
990
991
992    /// Build a
993    /// [`<rt>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/rt)
994    /// element.
995    rt None {};
996
997
998    /// Build a
999    /// [`<ruby>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ruby)
1000    /// element.
1001    ruby None {};
1002
1003    /// Build a
1004    /// [`<s>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/s)
1005    /// element.
1006    s None {};
1007
1008    /// Build a
1009    /// [`<samp>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/samp)
1010    /// element.
1011    samp None {};
1012
1013    /// Build a
1014    /// [`<small>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/small)
1015    /// element.
1016    small None {};
1017
1018    /// Build a
1019    /// [`<span>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/span)
1020    /// element.
1021    span None {};
1022
1023    /// Build a
1024    /// [`<strong>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/strong)
1025    /// element.
1026    strong None {};
1027
1028    /// Build a
1029    /// [`<sub>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/sub)
1030    /// element.
1031    sub None {};
1032
1033    /// Build a
1034    /// [`<sup>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/sup)
1035    /// element.
1036    sup None {};
1037
1038    /// Build a
1039    /// [`<time>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/time)
1040    /// element.
1041    time None {
1042        datetime: Datetime DEFAULT,
1043    };
1044
1045    /// Build a
1046    /// [`<u>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/u)
1047    /// element.
1048    u None {};
1049
1050    /// Build a
1051    /// [`<var>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/var)
1052    /// element.
1053    var None {};
1054
1055    /// Build a
1056    /// [`<wbr>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/wbr)
1057    /// element.
1058    wbr None {};
1059
1060
1061    // Image and multimedia
1062
1063    /// Build a
1064    /// [`<area>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/area)
1065    /// element.
1066    area None {
1067        alt: String DEFAULT,
1068        coords: String DEFAULT, // TODO could perhaps be validated
1069        download: Bool DEFAULT,
1070        href: Uri DEFAULT,
1071        hreflang: LanguageTag DEFAULT,
1072        shape: AreaShape DEFAULT,
1073        target: Target DEFAULT,
1074        // ping: SpacedList<Uri>,
1075        // rel: SpacedSet<LinkType>,
1076    };
1077
1078    /// Build a
1079    /// [`<audio>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/audio)
1080    /// element.
1081    audio None {
1082        autoplay: Bool DEFAULT,
1083        controls: Bool DEFAULT,
1084        crossorigin: CrossOrigin DEFAULT,
1085        muted: Bool DEFAULT,
1086        preload: Preload DEFAULT,
1087        src: Uri DEFAULT,
1088        r#loop: Bool "loop",
1089    };
1090
1091    /// Build a
1092    /// [`<img>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img)
1093    /// element.
1094    img None {
1095        alt: String DEFAULT,
1096        crossorigin: CrossOrigin DEFAULT,
1097        decoding: ImageDecoding DEFAULT,
1098        height: usize DEFAULT,
1099        ismap: Bool DEFAULT,
1100        loading: String DEFAULT,
1101        src: Uri DEFAULT,
1102        srcset: String DEFAULT, // FIXME this is much more complicated
1103        usemap: String DEFAULT, // FIXME should be a fragment starting with '#'
1104        width: usize DEFAULT,
1105        referrerpolicy: String DEFAULT,
1106        sizes: String DEFAULT, // FIXME
1107        elementtiming: String DEFAULT,
1108        fetchpriority: String DEFAULT,
1109        attributionsrc: String DEFAULT,
1110    };
1111
1112    /// Build a
1113    /// [`<map>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/map)
1114    /// element.
1115    map None {
1116        name: Id DEFAULT,
1117    };
1118
1119    /// Build a
1120    /// [`<track>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/track)
1121    /// element.
1122    track None {
1123        default: Bool DEFAULT,
1124        kind: VideoKind DEFAULT,
1125        label: String DEFAULT,
1126        src: Uri DEFAULT,
1127        srclang: LanguageTag DEFAULT,
1128    };
1129
1130    /// Build a
1131    /// [`<video>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/video)
1132    /// element.
1133    video None {
1134        autoplay: Bool DEFAULT,
1135        controls: Bool DEFAULT,
1136        crossorigin: CrossOrigin DEFAULT,
1137        height: usize DEFAULT,
1138        r#loop: Bool "loop",
1139        muted: Bool DEFAULT,
1140        preload: Preload DEFAULT,
1141        playsinline: Bool DEFAULT,
1142        poster: Uri DEFAULT,
1143        src: Uri DEFAULT,
1144        width: usize DEFAULT,
1145    };
1146
1147
1148    // Embedded content
1149
1150    /// Build a
1151    /// [`<embed>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/embed)
1152    /// element.
1153    embed None {
1154        height: usize DEFAULT,
1155        src: Uri DEFAULT,
1156        r#type: Mime "type",
1157        width: usize DEFAULT,
1158    };
1159
1160    /// Build a
1161    /// [`<iframe>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe)
1162    /// element.
1163    iframe None {
1164        allow: FeaturePolicy DEFAULT,
1165        allowfullscreen: Bool DEFAULT,
1166        allowpaymentrequest: Bool DEFAULT,
1167        height: usize DEFAULT,
1168        name: Id DEFAULT,
1169        referrerpolicy: ReferrerPolicy DEFAULT,
1170        src: Uri DEFAULT,
1171        srcdoc: Uri DEFAULT,
1172        width: usize DEFAULT,
1173
1174        margin_width: String "marginWidth",
1175        align: String DEFAULT,
1176        longdesc: String DEFAULT,
1177
1178        scrolling: String DEFAULT,
1179        margin_height: String "marginHeight",
1180        frame_border: String "frameBorder",
1181        // sandbox: SpacedSet<Sandbox>,
1182    };
1183
1184    /// Build a
1185    /// [`<object>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/object)
1186    /// element.
1187    object None {
1188        data: Uri DEFAULT,
1189        form: Id DEFAULT,
1190        height: usize DEFAULT,
1191        name: Id DEFAULT,
1192        r#type: Mime "type",
1193        typemustmatch: Bool DEFAULT,
1194        usemap: String DEFAULT, // TODO should be a fragment starting with '#'
1195        width: usize DEFAULT,
1196    };
1197
1198    /// Build a
1199    /// [`<param>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/param)
1200    /// element.
1201    param None {
1202        name: String DEFAULT,
1203        value: String DEFAULT,
1204    };
1205
1206    /// Build a
1207    /// [`<picture>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/picture)
1208    /// element.
1209    picture None {};
1210
1211    /// Build a
1212    /// [`<source>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/source)
1213    /// element.
1214    source None {
1215        src: Uri DEFAULT,
1216        r#type: Mime "type",
1217        srcset: String DEFAULT,
1218        media: String DEFAULT,
1219        sizes: String DEFAULT,
1220        width: usize DEFAULT,
1221        height: usize DEFAULT,
1222    };
1223
1224
1225    // Scripting
1226
1227    /// Build a
1228    /// [`<canvas>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/canvas)
1229    /// element.
1230    canvas None {
1231        height: usize DEFAULT,
1232        width: usize DEFAULT,
1233    };
1234
1235    /// Build a
1236    /// [`<noscript>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/noscript)
1237    /// element.
1238    noscript None {};
1239
1240    /// Build a
1241    /// [`<script>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script)
1242    /// element.
1243    ///
1244    /// The script HTML element is used to embed executable code or data; this is typically used to embed or refer to
1245    /// JavaScript code. The script element can also be used with other languages, such as WebGL's GLSL shader
1246    /// programming language and JSON.
1247    script None {
1248        /// Normal script elements pass minimal information to the window.onerror for scripts which do not pass the
1249        /// standard CORS checks. To allow error logging for sites which use a separate domain for static media, use
1250        /// this attribute. See CORS settings attributes for a more descriptive explanation of its valid arguments.
1251        crossorigin: CrossOrigin DEFAULT,
1252
1253        /// This Boolean attribute is set to indicate to a browser that the script is meant to be executed after the
1254        /// document has been parsed, but before firing DOMContentLoaded.
1255        ///
1256        /// Scripts with the defer attribute will prevent the DOMContentLoaded event from firing until the script has
1257        /// loaded and finished evaluating.
1258        ///
1259        /// ----
1260        /// ### Warning:
1261        ///
1262        /// This attribute must not be used if the src attribute is absent (i.e. for inline scripts), in this
1263        /// case it would have no effect.
1264        ///
1265        /// ----
1266        ///
1267        /// The defer attribute has no effect on module scripts — they defer by default.
1268        /// Scripts with the defer attribute will execute in the order in which they appear in the document.
1269        ///
1270        /// This attribute allows the elimination of parser-blocking JavaScript where the browser would have to load and
1271        /// evaluate scripts before continuing to parse. async has a similar effect in this case.
1272        defer: Bool DEFAULT,
1273        integrity: Integrity DEFAULT,
1274        nomodule: Bool DEFAULT,
1275        nonce: Nonce DEFAULT,
1276        src: Uri DEFAULT,
1277        text: String DEFAULT,
1278        fetchpriority: String DEFAULT,
1279        referrerpolicy: String DEFAULT,
1280
1281        r#async: Bool "async",
1282        r#type: String "type", // TODO could be an enum
1283        r#script: String "script",
1284    };
1285
1286
1287    // Demarcating edits
1288
1289    /// Build a
1290    /// [`<del>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/del)
1291    /// element.
1292    del None {
1293        cite: Uri DEFAULT,
1294        datetime: Datetime DEFAULT,
1295    };
1296
1297    /// Build a
1298    /// [`<ins>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ins)
1299    /// element.
1300    ins None {
1301        cite: Uri DEFAULT,
1302        datetime: Datetime DEFAULT,
1303    };
1304
1305
1306    // Table content
1307
1308    /// Build a
1309    /// [`<caption>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/caption)
1310    /// element.
1311    caption None {};
1312
1313    /// Build a
1314    /// [`<col>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/col)
1315    /// element.
1316    col None {
1317        span: usize DEFAULT,
1318    };
1319
1320    /// Build a
1321    /// [`<colgroup>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/colgroup)
1322    /// element.
1323    colgroup None {
1324        span: usize DEFAULT,
1325    };
1326
1327    /// Build a
1328    /// [`<table>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/table)
1329    /// element.
1330    table None {};
1331
1332    /// Build a
1333    /// [`<tbody>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/tbody)
1334    /// element.
1335    tbody None {};
1336
1337    /// Build a
1338    /// [`<td>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/td)
1339    /// element.
1340    td None {
1341        colspan: usize DEFAULT,
1342        rowspan: usize DEFAULT,
1343        // headers: SpacedSet<Id>,
1344    };
1345
1346    /// Build a
1347    /// [`<tfoot>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/tfoot)
1348    /// element.
1349    tfoot None {};
1350
1351    /// Build a
1352    /// [`<th>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/th)
1353    /// element.
1354    th None {
1355        abbr: String DEFAULT,
1356        colspan: usize DEFAULT,
1357        rowspan: usize DEFAULT,
1358        scope: TableHeaderScope DEFAULT,
1359        // headers: SpacedSet<Id>,
1360    };
1361
1362    /// Build a
1363    /// [`<thead>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/thead)
1364    /// element.
1365    thead None {};
1366
1367    /// Build a
1368    /// [`<tr>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/tr)
1369    /// element.
1370    tr None {};
1371
1372
1373    // Forms
1374
1375    /// Build a
1376    /// [`<button>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button)
1377    /// element.
1378    button None {
1379        autofocus: Bool DEFAULT,
1380        disabled: Bool DEFAULT,
1381        form: Id DEFAULT,
1382        formaction: Uri DEFAULT,
1383        formenctype: FormEncodingType DEFAULT,
1384        formmethod: FormMethod DEFAULT,
1385        formnovalidate: Bool DEFAULT,
1386        formtarget: Target DEFAULT,
1387        name: Id DEFAULT,
1388        popovertarget: String DEFAULT,
1389        popovertargetaction: String DEFAULT,
1390        value: String DEFAULT,
1391        r#type: String "type",
1392    };
1393
1394    /// Build a
1395    /// [`<datalist>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/datalist)
1396    /// element.
1397    datalist None {};
1398
1399    /// Build a
1400    /// [`<fieldset>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/fieldset)
1401    /// element.
1402    fieldset None {
1403        disabled: Bool DEFAULT,
1404        form: Id DEFAULT,
1405        name: Id DEFAULT,
1406    };
1407
1408    /// Build a
1409    /// [`<form>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form)
1410    /// element.
1411    form None {
1412        // accept-charset: SpacedList<CharacterEncoding>,
1413        action: Uri DEFAULT,
1414        autocomplete: OnOff DEFAULT,
1415        enctype: FormEncodingType DEFAULT,
1416        method: FormMethod DEFAULT,
1417        name: Id DEFAULT,
1418        novalidate: Bool DEFAULT,
1419        target: Target DEFAULT,
1420    };
1421
1422    /// Build a
1423    /// [`<input>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input)
1424    /// element.
1425    input None {
1426        accept: String DEFAULT,
1427        alt: String DEFAULT,
1428        autocomplete: String DEFAULT,
1429        /// cf. <https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Global_attributes/autocorrect>
1430        autocorrect: OnOff DEFAULT,
1431        autofocus: Bool DEFAULT,
1432        capture: String DEFAULT,
1433        checked: Bool DEFAULT,
1434        directory: Bool "webkitdirectory",
1435        disabled: Bool DEFAULT,
1436        form: Id DEFAULT,
1437        formaction: Uri DEFAULT,
1438        formenctype: FormEncodingType DEFAULT,
1439        formmethod: FormDialogMethod DEFAULT,
1440        formnovalidate: Bool DEFAULT,
1441        formtarget: Target DEFAULT,
1442        height: isize DEFAULT,
1443        initial_checked: Bool DEFAULT,
1444        list: Id DEFAULT,
1445        max: String DEFAULT,
1446        maxlength: usize DEFAULT,
1447        min: String DEFAULT,
1448        minlength: usize DEFAULT,
1449        multiple: Bool DEFAULT,
1450        name: Id DEFAULT,
1451        pattern: String DEFAULT,
1452        popovertarget: String DEFAULT,
1453        popovertargetaction: String DEFAULT,
1454        placeholder: String DEFAULT,
1455        readonly: Bool DEFAULT,
1456        required: Bool DEFAULT,
1457        size: usize DEFAULT,
1458        spellcheck: Bool DEFAULT,
1459        src: Uri DEFAULT,
1460        step: String DEFAULT,
1461        tabindex: usize DEFAULT,
1462        width: isize DEFAULT,
1463
1464        /// The type of input
1465        ///
1466        /// Here are the different input types you can use in HTML:
1467        ///
1468        /// - `button`
1469        /// - `checkbox`
1470        /// - `color`
1471        /// - `date`
1472        /// - `datetime-local`
1473        /// - `email`
1474        /// - `file`
1475        /// - `hidden`
1476        /// - `image`
1477        /// - `month`
1478        /// - `number`
1479        /// - `password`
1480        /// - `radio`
1481        /// - `range`
1482        /// - `reset`
1483        /// - `search`
1484        /// - `submit`
1485        /// - `tel`
1486        /// - `text`
1487        /// - `time`
1488        /// - `url`
1489        /// - `week`
1490
1491        r#type: InputType "type",
1492        // value: String,
1493        value: String volatile,
1494        initial_value: String DEFAULT,
1495    };
1496
1497    /// Build a
1498    /// [`<label>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/label)
1499    /// element.
1500    label None {
1501        form: Id DEFAULT,
1502        r#for: Id "for",
1503    };
1504
1505    /// Build a
1506    /// [`<legend>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/legend)
1507    /// element.
1508    legend None {};
1509
1510    /// Build a
1511    /// [`<meter>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meter)
1512    /// element.
1513    meter None {
1514        value: isize DEFAULT,
1515        min: isize DEFAULT,
1516        max: isize DEFAULT,
1517        low: isize DEFAULT,
1518        high: isize DEFAULT,
1519        optimum: isize DEFAULT,
1520        form: Id DEFAULT,
1521    };
1522
1523    /// Build a
1524    /// [`<optgroup>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/optgroup)
1525    /// element.
1526    optgroup None {
1527        disabled: Bool DEFAULT,
1528        label: String DEFAULT,
1529    };
1530
1531    /// Build a
1532    /// [`<option>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/option)
1533    /// element.
1534    option None {
1535        disabled: Bool DEFAULT,
1536        label: String DEFAULT,
1537
1538
1539        value: String DEFAULT,
1540
1541        selected: Bool volatile,
1542        initial_selected: Bool DEFAULT,
1543    };
1544
1545    /// Build a
1546    /// [`<output>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/output)
1547    /// element.
1548    output None {
1549        form: Id DEFAULT,
1550        name: Id DEFAULT,
1551        // r#for: SpacedSet<Id>,
1552    };
1553
1554    /// Build a
1555    /// [`<progress>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/progress)
1556    /// element.
1557    progress None {
1558        max: f64 DEFAULT,
1559        value: f64 DEFAULT,
1560    };
1561
1562    /// Build a
1563    /// [`<select>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select)
1564    /// element.
1565    select None {
1566        // defined below
1567        // value: String,
1568        autocomplete: String DEFAULT,
1569        autofocus: Bool DEFAULT,
1570        disabled: Bool DEFAULT,
1571        form: Id DEFAULT,
1572        multiple: Bool DEFAULT,
1573        name: Id DEFAULT,
1574        required: Bool DEFAULT,
1575        size: usize DEFAULT,
1576        value: String volatile,
1577    };
1578
1579    /// Build a
1580    /// [`<textarea>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/textarea)
1581    /// element.
1582    textarea None {
1583        autocomplete: OnOff DEFAULT,
1584        /// cf. <https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Global_attributes/autocorrect>
1585        autocorrect: OnOff DEFAULT,
1586        autofocus: Bool DEFAULT,
1587        cols: usize DEFAULT,
1588        disabled: Bool DEFAULT,
1589        form: Id DEFAULT,
1590        maxlength: usize DEFAULT,
1591        minlength: usize DEFAULT,
1592        name: Id DEFAULT,
1593        placeholder: String DEFAULT,
1594        readonly: Bool DEFAULT,
1595        required: Bool DEFAULT,
1596        rows: usize DEFAULT,
1597        spellcheck: BoolOrDefault DEFAULT,
1598        wrap: Wrap DEFAULT,
1599        value: String volatile,
1600
1601        initial_value: String DEFAULT,
1602    };
1603
1604
1605    // Interactive elements
1606
1607    /// Build a
1608    /// [`<details>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/details)
1609    /// element.
1610    details None {
1611        open: Bool DEFAULT,
1612    };
1613
1614    /// Build dialog
1615    /// [`<dialog>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dialog)
1616    /// element.
1617    dialog None {
1618        open: Bool DEFAULT,
1619    };
1620
1621    /// Build a
1622    /// [`<summary>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/summary)
1623    /// element.
1624    summary None {};
1625
1626    // Web components
1627
1628    /// Build a
1629    /// [`<slot>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/slot)
1630    /// element.
1631    slot None {
1632        name: String DEFAULT,
1633    };
1634
1635    /// Build a
1636    /// [`<template>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/template)
1637    /// element.
1638    template None {};
1639
1640    // SVG components
1641    /// Build a
1642    /// [`<svg>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/svg)
1643    /// element.
1644    svg "http://www.w3.org/2000/svg" { };
1645
1646
1647    // /// Build a
1648    // /// [`<a>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/a)
1649    // /// element.
1650    // a "http://www.w3.org/2000/svg" {};
1651
1652    /// Build a
1653    /// [`<animate>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/animate)
1654    /// element.
1655    animate "http://www.w3.org/2000/svg" {};
1656
1657    /// Build a
1658    /// [`<animateMotion>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/animateMotion)
1659    /// element.
1660    animateMotion "http://www.w3.org/2000/svg" {};
1661
1662    /// Build a
1663    /// [`<animateTransform>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/animateTransform)
1664    /// element.
1665    animateTransform "http://www.w3.org/2000/svg" {};
1666
1667    /// Build a
1668    /// [`<circle>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/circle)
1669    /// element.
1670    circle "http://www.w3.org/2000/svg" {};
1671
1672    /// Build a
1673    /// [`<clipPath>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/clipPath)
1674    /// element.
1675    clipPath "http://www.w3.org/2000/svg" {};
1676
1677    /// Build a
1678    /// [`<defs>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/defs)
1679    /// element.
1680    defs "http://www.w3.org/2000/svg" {};
1681
1682    /// Build a
1683    /// [`<desc>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/desc)
1684    /// element.
1685    desc "http://www.w3.org/2000/svg" {};
1686
1687    /// Build a
1688    /// [`<discard>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/discard)
1689    /// element.
1690    discard "http://www.w3.org/2000/svg" {};
1691
1692    /// Build a
1693    /// [`<ellipse>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/ellipse)
1694    /// element.
1695    ellipse "http://www.w3.org/2000/svg" {};
1696
1697    /// Build a
1698    /// [`<feBlend>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feBlend)
1699    /// element.
1700    feBlend "http://www.w3.org/2000/svg" {};
1701
1702    /// Build a
1703    /// [`<feColorMatrix>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feColorMatrix)
1704    /// element.
1705    feColorMatrix "http://www.w3.org/2000/svg" {};
1706
1707    /// Build a
1708    /// [`<feComponentTransfer>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feComponentTransfer)
1709    /// element.
1710    feComponentTransfer "http://www.w3.org/2000/svg" {};
1711
1712    /// Build a
1713    /// [`<feComposite>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feComposite)
1714    /// element.
1715    feComposite "http://www.w3.org/2000/svg" {};
1716
1717    /// Build a
1718    /// [`<feConvolveMatrix>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feConvolveMatrix)
1719    /// element.
1720    feConvolveMatrix "http://www.w3.org/2000/svg" {};
1721
1722    /// Build a
1723    /// [`<feDiffuseLighting>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feDiffuseLighting)
1724    /// element.
1725    feDiffuseLighting "http://www.w3.org/2000/svg" {};
1726
1727    /// Build a
1728    /// [`<feDisplacementMap>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feDisplacementMap)
1729    /// element.
1730    feDisplacementMap "http://www.w3.org/2000/svg" {};
1731
1732    /// Build a
1733    /// [`<feDistantLight>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feDistantLight)
1734    /// element.
1735    feDistantLight "http://www.w3.org/2000/svg" {};
1736
1737    /// Build a
1738    /// [`<feDropShadow>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feDropShadow)
1739    /// element.
1740    feDropShadow "http://www.w3.org/2000/svg" {};
1741
1742    /// Build a
1743    /// [`<feFlood>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feFlood)
1744    /// element.
1745    feFlood "http://www.w3.org/2000/svg" {};
1746
1747    /// Build a
1748    /// [`<feFuncA>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feFuncA)
1749    /// element.
1750    feFuncA "http://www.w3.org/2000/svg" {};
1751
1752    /// Build a
1753    /// [`<feFuncB>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feFuncB)
1754    /// element.
1755    feFuncB "http://www.w3.org/2000/svg" {};
1756
1757    /// Build a
1758    /// [`<feFuncG>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feFuncG)
1759    /// element.
1760    feFuncG "http://www.w3.org/2000/svg" {};
1761
1762    /// Build a
1763    /// [`<feFuncR>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feFuncR)
1764    /// element.
1765    feFuncR "http://www.w3.org/2000/svg" {};
1766
1767    /// Build a
1768    /// [`<feGaussianBlur>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feGaussianBlur)
1769    /// element.
1770    feGaussianBlur "http://www.w3.org/2000/svg" {};
1771
1772    /// Build a
1773    /// [`<feImage>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feImage)
1774    /// element.
1775    feImage "http://www.w3.org/2000/svg" {};
1776
1777    /// Build a
1778    /// [`<feMerge>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feMerge)
1779    /// element.
1780    feMerge "http://www.w3.org/2000/svg" {};
1781
1782    /// Build a
1783    /// [`<feMergeNode>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feMergeNode)
1784    /// element.
1785    feMergeNode "http://www.w3.org/2000/svg" {};
1786
1787    /// Build a
1788    /// [`<feMorphology>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feMorphology)
1789    /// element.
1790    feMorphology "http://www.w3.org/2000/svg" {};
1791
1792    /// Build a
1793    /// [`<feOffset>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feOffset)
1794    /// element.
1795    feOffset "http://www.w3.org/2000/svg" {};
1796
1797    /// Build a
1798    /// [`<fePointLight>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/fePointLight)
1799    /// element.
1800    fePointLight "http://www.w3.org/2000/svg" {};
1801
1802    /// Build a
1803    /// [`<feSpecularLighting>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feSpecularLighting)
1804    /// element.
1805    feSpecularLighting "http://www.w3.org/2000/svg" {};
1806
1807    /// Build a
1808    /// [`<feSpotLight>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feSpotLight)
1809    /// element.
1810    feSpotLight "http://www.w3.org/2000/svg" {};
1811
1812    /// Build a
1813    /// [`<feTile>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feTile)
1814    /// element.
1815    feTile "http://www.w3.org/2000/svg" {};
1816
1817    /// Build a
1818    /// [`<feTurbulence>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feTurbulence)
1819    /// element.
1820    feTurbulence "http://www.w3.org/2000/svg" {};
1821
1822    /// Build a
1823    /// [`<filter>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/filter)
1824    /// element.
1825    filter "http://www.w3.org/2000/svg" {};
1826
1827    /// Build a
1828    /// [`<foreignObject>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/foreignObject)
1829    /// element.
1830    foreignObject "http://www.w3.org/2000/svg" {};
1831
1832    /// Build a
1833    /// [`<g>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/g)
1834    /// element.
1835    g "http://www.w3.org/2000/svg" {};
1836
1837    /// Build a
1838    /// [`<hatch>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/hatch)
1839    /// element.
1840    hatch "http://www.w3.org/2000/svg" {};
1841
1842    /// Build a
1843    /// [`<hatchpath>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/hatchpath)
1844    /// element.
1845    hatchpath "http://www.w3.org/2000/svg" {};
1846
1847    /// Build a
1848    /// [`<image>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/image)
1849    /// element.
1850    image "http://www.w3.org/2000/svg" {};
1851
1852    /// Build a
1853    /// [`<line>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/line)
1854    /// element.
1855    line "http://www.w3.org/2000/svg" {};
1856
1857    /// Build a
1858    /// [`<linearGradient>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/linearGradient)
1859    /// element.
1860    linearGradient "http://www.w3.org/2000/svg" {};
1861
1862    /// Build a
1863    /// [`<marker>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/marker)
1864    /// element.
1865    marker "http://www.w3.org/2000/svg" {};
1866
1867    /// Build a
1868    /// [`<mask>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/mask)
1869    /// element.
1870    mask "http://www.w3.org/2000/svg" {};
1871
1872    /// Build a
1873    /// [`<metadata>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/metadata)
1874    /// element.
1875    metadata "http://www.w3.org/2000/svg" {};
1876
1877    /// Build a
1878    /// [`<mpath>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/mpath)
1879    /// element.
1880    mpath "http://www.w3.org/2000/svg" {};
1881
1882    /// Build a
1883    /// [`<path>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/path)
1884    /// element.
1885    path "http://www.w3.org/2000/svg" {};
1886
1887    /// Build a
1888    /// [`<pattern>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/pattern)
1889    /// element.
1890    pattern "http://www.w3.org/2000/svg" {};
1891
1892    /// Build a
1893    /// [`<polygon>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/polygon)
1894    /// element.
1895    polygon "http://www.w3.org/2000/svg" {};
1896
1897    /// Build a
1898    /// [`<polyline>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/polyline)
1899    /// element.
1900    polyline "http://www.w3.org/2000/svg" {};
1901
1902    /// Build a
1903    /// [`<radialGradient>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/radialGradient)
1904    /// element.
1905    radialGradient "http://www.w3.org/2000/svg" {};
1906
1907    /// Build a
1908    /// [`<rect>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/rect)
1909    /// element.
1910    rect "http://www.w3.org/2000/svg" {};
1911
1912    // /// Build a
1913    // /// [`<script>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/script)
1914    // /// element.
1915    // script "http://www.w3.org/2000/svg" {};
1916
1917    /// Build a
1918    /// [`<set>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/set)
1919    /// element.
1920    set "http://www.w3.org/2000/svg" {};
1921
1922    /// Build a
1923    /// [`<stop>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/stop)
1924    /// element.
1925    stop "http://www.w3.org/2000/svg" {};
1926
1927    // /// Build a
1928    // /// [`<style>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/style)
1929    // /// element.
1930    // style "http://www.w3.org/2000/svg" {};
1931
1932    // /// Build a
1933    // /// [`<svg>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/svg)
1934    // /// element.
1935    // svg "http://www.w3.org/2000/svg" {};
1936
1937    /// Build a
1938    /// [`<switch>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/switch)
1939    /// element.
1940    switch "http://www.w3.org/2000/svg" {};
1941
1942    /// Build a
1943    /// [`<symbol>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/symbol)
1944    /// element.
1945    symbol "http://www.w3.org/2000/svg" {};
1946
1947    /// Build a
1948    /// [`<text>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/text)
1949    /// element.
1950    text "http://www.w3.org/2000/svg" {};
1951
1952    /// Build a
1953    /// [`<textPath>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/textPath)
1954    /// element.
1955    textPath "http://www.w3.org/2000/svg" {};
1956
1957    // /// Build a
1958    // /// [`<title>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title)
1959    // /// element.
1960    // title "http://www.w3.org/2000/svg" {};
1961
1962    /// Build a
1963    /// [`<tspan>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/tspan)
1964    /// element.
1965    tspan "http://www.w3.org/2000/svg" {};
1966
1967    /// Build a
1968    /// [`<view>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/view)
1969    /// element.
1970    view "http://www.w3.org/2000/svg" {};
1971
1972    // /// Build a
1973    // /// [`<use>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/use)
1974    // /// element.
1975    r#use ["use", "http://www.w3.org/2000/svg"] {
1976        href: String DEFAULT,
1977    };
1978
1979    // MathML elements
1980
1981    /// Build a
1982    /// [`<annotation>`](https://w3c.github.io/mathml-core/#dfn-annotation)
1983    /// element.
1984    annotation "http://www.w3.org/1998/Math/MathML" {
1985            encoding: String DEFAULT,
1986    };
1987
1988    /// Build a
1989    /// [`<annotation-xml>`](https://w3c.github.io/mathml-core/#dfn-annotation-xml)
1990    /// element.
1991    annotationXml ["annotation-xml", "http://www.w3.org/1998/Math/MathML"] {
1992            encoding: String DEFAULT,
1993    };
1994
1995    /// Build a
1996    /// [`<merror>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/merror)
1997    /// element.
1998    merror "http://www.w3.org/1998/Math/MathML" {};
1999
2000    /// Build a
2001    /// [`<math>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/math)
2002    /// element.
2003    math "http://www.w3.org/1998/Math/MathML" {
2004        display: String DEFAULT,
2005    };
2006
2007    /// Build a
2008    /// [`<mfrac>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mfrac)
2009    /// element.
2010    mfrac "http://www.w3.org/1998/Math/MathML" {
2011        linethickness: usize DEFAULT,
2012    };
2013
2014    /// Build a
2015    /// [`<mi>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mi)
2016    /// element.
2017    mi "http://www.w3.org/1998/Math/MathML" {
2018        mathvariant: String DEFAULT,
2019    };
2020
2021    /// Build a
2022    /// [`<mmultiscripts>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mmultiscripts)
2023    /// element.
2024    mmultiscripts "http://www.w3.org/1998/math/mathml" {};
2025
2026    /// Build a
2027    /// [`<mn>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mn)
2028    /// element.
2029    mn "http://www.w3.org/1998/Math/MathML" {};
2030
2031    /// Build a
2032    /// [`<mo>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mo)
2033    /// element.
2034    mo "http://www.w3.org/1998/Math/MathML" {
2035        fence: Bool DEFAULT,
2036        largeop: Bool DEFAULT,
2037        lspace: usize DEFAULT,
2038        maxsize: usize DEFAULT,
2039        minsize: usize DEFAULT,
2040        movablelimits: Bool DEFAULT,
2041        rspace: usize DEFAULT,
2042        separator: Bool DEFAULT,
2043        stretchy: Bool DEFAULT,
2044        symmetric: Bool DEFAULT,
2045    };
2046
2047    /// Build a
2048    /// [`<mover>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mover)
2049    /// element.
2050    mover "http://www.w3.org/1998/Math/MathML" {
2051        accent: Bool DEFAULT,
2052    };
2053
2054    /// Build a
2055    /// [`<mpadded>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mpadded)
2056    /// element.
2057    mpadded "http://www.w3.org/1998/Math/MathML" {
2058        depth: usize DEFAULT,
2059        height: usize DEFAULT,
2060        lspace: usize DEFAULT,
2061        voffset: usize DEFAULT,
2062        width: usize DEFAULT,
2063    };
2064
2065    /// Build a
2066    /// [`<mphantom>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mphantom)
2067    /// element.
2068    mphantom "http://www.w3.org/1998/Math/MathML" {};
2069
2070    /// Build a
2071    /// [`<mprescripts>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mprescripts)
2072    /// element.
2073    mprescripts "http://www.w3.org/1998/Math/MathML" {};
2074
2075    /// Build a
2076    /// [`<mroot>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mroot)
2077    /// element.
2078    mroot "http://www.w3.org/1998/Math/MathML" {};
2079
2080    /// Build a
2081    /// [`<mrow>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mrow)
2082    /// element.
2083    mrow "http://www.w3.org/1998/Math/MathML" {
2084
2085    };
2086
2087    /// Build a
2088    /// [`<ms>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/ms)
2089    /// element.
2090    ms "http://www.w3.org/1998/Math/MathML" {
2091        lquote: String DEFAULT,
2092        rquote: String DEFAULT,
2093    };
2094
2095    /// Build a
2096    /// [`<mspace>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mspace)
2097    /// element.
2098    mspace "http://www.w3.org/1998/Math/MathML" {
2099        depth: usize DEFAULT,
2100        height: usize DEFAULT,
2101        width: usize DEFAULT,
2102    };
2103
2104    /// Build a
2105    /// [`<msqrt>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/msqrt)
2106    /// element.
2107    msqrt "http://www.w3.org/1998/Math/MathML" {};
2108
2109    /// Build a
2110    /// [`<mstyle>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mstyle)
2111    /// element.
2112    mstyle "http://www.w3.org/1998/Math/MathML" {};
2113
2114    /// Build a
2115    /// [`<msub>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/msub)
2116    /// element.
2117    msub "http://www.w3.org/1998/Math/MathML" {};
2118
2119    /// Build a
2120    /// [`<msubsup>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/msubsup)
2121    /// element.
2122    msubsup "http://www.w3.org/1998/Math/MathML" {};
2123
2124    /// Build a
2125    /// [`<msup>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/msup)
2126    /// element.
2127    msup "http://www.w3.org/1998/Math/MathML" {};
2128
2129    /// Build a
2130    /// [`<mtable>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mtable)
2131    /// element.
2132    mtable "http://www.w3.org/1998/Math/MathML" {};
2133
2134    /// Build a
2135    /// [`<mtd>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mtd)
2136    /// element.
2137    mtd "http://www.w3.org/1998/Math/MathML" {
2138        columnspan: usize DEFAULT,
2139        rowspan: usize DEFAULT,
2140    };
2141
2142    /// Build a
2143    /// [`<mtext>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mtext)
2144    /// element.
2145    mtext "http://www.w3.org/1998/Math/MathML" {};
2146
2147    /// Build a
2148    /// [`<mtr>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mtr)
2149    /// element.
2150    mtr "http://www.w3.org/1998/Math/MathML" {};
2151
2152    /// Build a
2153    /// [`<munder>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/munder)
2154    /// element.
2155    munder "http://www.w3.org/1998/Math/MathML" {
2156        accentunder: Bool DEFAULT,
2157    };
2158
2159    /// Build a
2160    /// [`<munderover>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/munderover)
2161    /// element.
2162    munderover "http://www.w3.org/1998/Math/MathML" {
2163        accent: Bool DEFAULT,
2164        accentunder: Bool DEFAULT,
2165    };
2166
2167    /// Build a
2168    /// [`<semantics>`](https://developer.mozilla.org/en-US/docs/Web/MathML/Element/semantics)
2169    /// element.
2170    semantics "http://www.w3.org/1998/Math/MathML" {
2171        encoding: String DEFAULT,
2172    };
2173}