-
-
Notifications
You must be signed in to change notification settings - Fork 85
Expand file tree
/
Copy pathhtml-elements.ts
More file actions
147 lines (140 loc) · 8.44 KB
/
html-elements.ts
File metadata and controls
147 lines (140 loc) · 8.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
// https://html.spec.whatwg.org/multipage/indices.html#elements-3
export interface HTMLElementInfo {
name: string
description: string
isVoid: boolean
}
export const HTML_ELEMENTS: HTMLElementInfo[] = [
{ name: "a", description: "Hyperlink", isVoid: false },
{ name: "abbr", description: "Abbreviation", isVoid: false },
{ name: "acronym", description: "Acronym (deprecated)", isVoid: false },
{ name: "address", description: "Contact information", isVoid: false },
{ name: "area", description: "Image map area", isVoid: true },
{ name: "article", description: "Article content", isVoid: false },
{ name: "aside", description: "Sidebar content", isVoid: false },
{ name: "audio", description: "Audio content", isVoid: false },
{ name: "b", description: "Bold text", isVoid: false },
{ name: "base", description: "Document base URL", isVoid: true },
{ name: "bdi", description: "Bidirectional isolation", isVoid: false },
{ name: "bdo", description: "Bidirectional override", isVoid: false },
{ name: "big", description: "Larger text (deprecated)", isVoid: false },
{ name: "blockquote", description: "Block quotation", isVoid: false },
{ name: "body", description: "Document body", isVoid: false },
{ name: "br", description: "Line break", isVoid: true },
{ name: "button", description: "Clickable button", isVoid: false },
{ name: "canvas", description: "Drawing surface", isVoid: false },
{ name: "caption", description: "Table caption", isVoid: false },
{ name: "cite", description: "Citation", isVoid: false },
{ name: "code", description: "Code fragment", isVoid: false },
{ name: "col", description: "Table column", isVoid: true },
{ name: "colgroup", description: "Table column group", isVoid: false },
{ name: "data", description: "Machine-readable value", isVoid: false },
{ name: "datalist", description: "Predefined options", isVoid: false },
{ name: "dd", description: "Description details", isVoid: false },
{ name: "del", description: "Deleted text", isVoid: false },
{ name: "details", description: "Disclosure widget", isVoid: false },
{ name: "dfn", description: "Definition term", isVoid: false },
{ name: "dialog", description: "Dialog box", isVoid: false },
{ name: "div", description: "Generic container", isVoid: false },
{ name: "dl", description: "Description list", isVoid: false },
{ name: "dt", description: "Description term", isVoid: false },
{ name: "em", description: "Emphasis", isVoid: false },
{ name: "embed", description: "Embedded content", isVoid: true },
{ name: "fieldset", description: "Form field group", isVoid: false },
{ name: "figcaption", description: "Figure caption", isVoid: false },
{ name: "figure", description: "Self-contained content", isVoid: false },
{ name: "footer", description: "Footer", isVoid: false },
{ name: "form", description: "Input form", isVoid: false },
{ name: "h1", description: "Heading level 1", isVoid: false },
{ name: "h2", description: "Heading level 2", isVoid: false },
{ name: "h3", description: "Heading level 3", isVoid: false },
{ name: "h4", description: "Heading level 4", isVoid: false },
{ name: "h5", description: "Heading level 5", isVoid: false },
{ name: "h6", description: "Heading level 6", isVoid: false },
{ name: "head", description: "Document head", isVoid: false },
{ name: "header", description: "Header", isVoid: false },
{ name: "hgroup", description: "Heading group", isVoid: false },
{ name: "hr", description: "Horizontal rule", isVoid: true },
{ name: "html", description: "Document root", isVoid: false },
{ name: "i", description: "Italic text", isVoid: false },
{ name: "iframe", description: "Inline frame", isVoid: false },
{ name: "img", description: "Image", isVoid: true },
{ name: "input", description: "Input control", isVoid: true },
{ name: "ins", description: "Inserted text", isVoid: false },
{ name: "kbd", description: "Keyboard input", isVoid: false },
{ name: "label", description: "Form label", isVoid: false },
{ name: "legend", description: "Fieldset legend", isVoid: false },
{ name: "li", description: "List item", isVoid: false },
{ name: "link", description: "External resource link", isVoid: true },
{ name: "main", description: "Main content", isVoid: false },
{ name: "map", description: "Image map", isVoid: false },
{ name: "mark", description: "Highlighted text", isVoid: false },
{ name: "math", description: "MathML content", isVoid: false },
{ name: "menu", description: "Menu", isVoid: false },
{ name: "meta", description: "Metadata", isVoid: true },
{ name: "meter", description: "Scalar measurement", isVoid: false },
{ name: "nav", description: "Navigation", isVoid: false },
{ name: "noscript", description: "No-script fallback", isVoid: false },
{ name: "object", description: "Embedded object", isVoid: false },
{ name: "ol", description: "Ordered list", isVoid: false },
{ name: "optgroup", description: "Option group", isVoid: false },
{ name: "option", description: "Select option", isVoid: false },
{ name: "output", description: "Output result", isVoid: false },
{ name: "p", description: "Paragraph", isVoid: false },
{ name: "param", description: "Object parameter (deprecated)", isVoid: true },
{ name: "picture", description: "Responsive image", isVoid: false },
{ name: "pre", description: "Preformatted text", isVoid: false },
{ name: "progress", description: "Progress indicator", isVoid: false },
{ name: "q", description: "Inline quotation", isVoid: false },
{ name: "rp", description: "Ruby parenthesis", isVoid: false },
{ name: "rt", description: "Ruby text", isVoid: false },
{ name: "ruby", description: "Ruby annotation", isVoid: false },
{ name: "s", description: "Strikethrough text", isVoid: false },
{ name: "samp", description: "Sample output", isVoid: false },
{ name: "script", description: "Script", isVoid: false },
{ name: "search", description: "Search section", isVoid: false },
{ name: "section", description: "Document section", isVoid: false },
{ name: "select", description: "Select control", isVoid: false },
{ name: "selectedcontent", description: "Selected content placeholder", isVoid: false },
{ name: "slot", description: "Web component slot", isVoid: false },
{ name: "small", description: "Small text", isVoid: false },
{ name: "source", description: "Media source", isVoid: true },
{ name: "span", description: "Inline container", isVoid: false },
{ name: "strong", description: "Strong importance", isVoid: false },
{ name: "style", description: "Style information", isVoid: false },
{ name: "sub", description: "Subscript", isVoid: false },
{ name: "summary", description: "Disclosure summary", isVoid: false },
{ name: "sup", description: "Superscript", isVoid: false },
{ name: "svg", description: "SVG content", isVoid: false },
{ name: "table", description: "Table", isVoid: false },
{ name: "tbody", description: "Table body", isVoid: false },
{ name: "td", description: "Table cell", isVoid: false },
{ name: "template", description: "Content template", isVoid: false },
{ name: "textarea", description: "Text area", isVoid: false },
{ name: "tfoot", description: "Table footer", isVoid: false },
{ name: "th", description: "Table header cell", isVoid: false },
{ name: "thead", description: "Table header", isVoid: false },
{ name: "time", description: "Date/time", isVoid: false },
{ name: "title", description: "Document title", isVoid: false },
{ name: "tr", description: "Table row", isVoid: false },
{ name: "track", description: "Text track", isVoid: true },
{ name: "tt", description: "Teletype text (deprecated)", isVoid: false },
{ name: "u", description: "Underline", isVoid: false },
{ name: "ul", description: "Unordered list", isVoid: false },
{ name: "var", description: "Variable", isVoid: false },
{ name: "video", description: "Video content", isVoid: false },
{ name: "wbr", description: "Word break opportunity", isVoid: true },
]
export const HTML_ELEMENT_NAMES = new Set(HTML_ELEMENTS.map(element => element.name))
export const HTML_VOID_ELEMENTS = new Set(
HTML_ELEMENTS.filter(element => element.isVoid).map(element => element.name),
)
export function isKnownHTMLElement(tagName: string): boolean {
return HTML_ELEMENT_NAMES.has(tagName.toLowerCase())
}
export function isVoidElement(tagName: string): boolean {
return HTML_VOID_ELEMENTS.has(tagName.toLowerCase())
}
export function isCustomElement(tagName: string): boolean {
return tagName.includes("-")
}