Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
147 changes: 147 additions & 0 deletions javascript/packages/core/src/html-elements.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,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("-")
}
1 change: 1 addition & 0 deletions javascript/packages/core/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
export * from "./ast-utils.js"
export * from "./html-constants.js"
export * from "./html-character-references.js"
export * from "./html-elements.js"
export * from "./backend.js"
export * from "./diagnostic.js"
export * from "./didyoumean.js"
Expand Down
Loading
Loading