// staticdata.dev — cssPseudoClasses
// Generated file. Do not edit by hand.
// SPDX-License-Identifier: MIT

export const cssPseudoClasses = [
  {
    "selector": ":active",
    "category": "state",
    "description": "Matches an element that is being activated by the user, such as a link or button being clicked."
  },
  {
    "selector": ":active-view-transition",
    "category": "state",
    "description": "Matches the root element while a view transition is in progress."
  },
  {
    "selector": ":active-view-transition-type()",
    "category": "state",
    "description": "Matches the root element while a view transition with one of the given transition types is in progress."
  },
  {
    "selector": ":any-link",
    "category": "state",
    "description": "Matches any element that acts as a hyperlink source anchor, regardless of whether it has been visited."
  },
  {
    "selector": ":autofill",
    "category": "form",
    "description": "Matches input elements that have been autofilled by the browser."
  },
  {
    "selector": ":blank",
    "category": "form",
    "description": "Matches input elements that have an empty value."
  },
  {
    "selector": ":buffering",
    "category": "state",
    "description": "Matches media elements that are playing but temporarily stopped because they are loading data."
  },
  {
    "selector": ":checked",
    "category": "form",
    "description": "Matches radio, checkbox, or option elements that are checked or selected."
  },
  {
    "selector": ":current",
    "category": "state",
    "description": "Matches an element that is currently being displayed in a time-based media presentation (e.g., WebVTT cues)."
  },
  {
    "selector": ":default",
    "category": "form",
    "description": "Matches form elements that are the default among a group of related elements (default button, default option, etc.)."
  },
  {
    "selector": ":defined",
    "category": "structural",
    "description": "Matches any element that has been defined, including built-in HTML elements and custom elements that have been registered."
  },
  {
    "selector": ":dir()",
    "category": "linguistic",
    "description": "Matches elements based on the directionality of the text they contain. Accepts 'ltr' or 'rtl' as argument."
  },
  {
    "selector": ":disabled",
    "category": "form",
    "description": "Matches form elements that are disabled and cannot be interacted with or selected."
  },
  {
    "selector": ":empty",
    "category": "structural",
    "description": "Matches an element that has no children, including no text nodes (whitespace is allowed in some specs)."
  },
  {
    "selector": ":enabled",
    "category": "form",
    "description": "Matches form elements that are enabled and can be interacted with or selected."
  },
  {
    "selector": ":first",
    "category": "paged-media",
    "description": "Matches the first page when printing a document. Used with the @page at-rule."
  },
  {
    "selector": ":first-child",
    "category": "structural",
    "description": "Matches an element that is the first child of its parent element."
  },
  {
    "selector": ":first-of-type",
    "category": "structural",
    "description": "Matches the first element of its type among siblings within the same parent element."
  },
  {
    "selector": ":focus",
    "category": "state",
    "description": "Matches an element that currently has the input focus."
  },
  {
    "selector": ":focus-visible",
    "category": "state",
    "description": "Matches an element that has focus and the browser determines that a visible focus indicator should be shown."
  },
  {
    "selector": ":focus-within",
    "category": "state",
    "description": "Matches an element that has focus or contains a descendant that has focus."
  },
  {
    "selector": ":fullscreen",
    "category": "state",
    "description": "Matches an element that is currently in fullscreen mode."
  },
  {
    "selector": ":future",
    "category": "state",
    "description": "Matches elements that appear after the currently active element in a time-based media presentation."
  },
  {
    "selector": ":has()",
    "category": "relational",
    "description": "Matches an element if any of the relative selectors passed as arguments match at least one element from that element."
  },
  {
    "selector": ":has-slotted",
    "category": "shadow-dom",
    "description": "Matches a <slot> element that has content assigned to it."
  },
  {
    "selector": ":host",
    "category": "shadow-dom",
    "description": "Matches the shadow host of the shadow DOM containing the CSS. Selects the custom element from inside the shadow DOM."
  },
  {
    "selector": ":host()",
    "category": "shadow-dom",
    "description": "Matches the shadow host of the shadow DOM containing the CSS only if the selector given as the argument matches the shadow host."
  },
  {
    "selector": ":host-context()",
    "category": "shadow-dom",
    "description": "Matches the shadow host if a given selector matches any ancestor of the shadow host element in the DOM hierarchy."
  },
  {
    "selector": ":hover",
    "category": "state",
    "description": "Matches an element when the user designates it with a pointing device, such as hovering over it with a mouse."
  },
  {
    "selector": ":in-range",
    "category": "form",
    "description": "Matches input elements whose current value is within the range limits specified by the min and max attributes."
  },
  {
    "selector": ":indeterminate",
    "category": "form",
    "description": "Matches form elements whose state is indeterminate, such as checkboxes with an indeterminate state or progress bars without a value."
  },
  {
    "selector": ":invalid",
    "category": "form",
    "description": "Matches form elements whose content fails to validate according to their type and other constraints."
  },
  {
    "selector": ":is()",
    "category": "logical",
    "description": "Matches any element that matches any of the selectors in the provided list. Reduces selector repetition."
  },
  {
    "selector": ":lang()",
    "category": "linguistic",
    "description": "Matches elements based on the language they are determined to be in, using the lang attribute."
  },
  {
    "selector": ":last-child",
    "category": "structural",
    "description": "Matches an element that is the last child of its parent element."
  },
  {
    "selector": ":last-of-type",
    "category": "structural",
    "description": "Matches the last element of its type among siblings within the same parent element."
  },
  {
    "selector": ":left",
    "category": "paged-media",
    "description": "Matches left-side pages when printing. Used with @page to set styles for left pages in double-sided printing."
  },
  {
    "selector": ":link",
    "category": "state",
    "description": "Matches anchor elements that have not yet been visited."
  },
  {
    "selector": ":local-link",
    "category": "state",
    "description": "Matches link elements whose target URL is the same as the current document's URL (ignoring the fragment). Specified in Selectors Level 4 but not implemented in browsers."
  },
  {
    "selector": ":modal",
    "category": "state",
    "description": "Matches an element that is in a state in which it excludes all interaction with elements outside it until the interaction has been dismissed, such as dialog elements."
  },
  {
    "selector": ":muted",
    "category": "state",
    "description": "Matches media elements that are muted."
  },
  {
    "selector": ":not()",
    "category": "logical",
    "description": "Matches elements that do not match any of the selectors in the provided list. Also called the negation pseudo-class."
  },
  {
    "selector": ":nth-child()",
    "category": "structural",
    "description": "Matches elements based on their position among siblings. Accepts An+B notation to select every Nth element."
  },
  {
    "selector": ":nth-col()",
    "category": "structural",
    "description": "Matches cells belonging to a column in a table, using An+B notation."
  },
  {
    "selector": ":nth-last-child()",
    "category": "structural",
    "description": "Matches elements based on their position among siblings, counting from the end. Accepts An+B notation."
  },
  {
    "selector": ":nth-last-col()",
    "category": "structural",
    "description": "Matches cells in a table column, counting from the last column, using An+B notation."
  },
  {
    "selector": ":nth-last-of-type()",
    "category": "structural",
    "description": "Matches elements of a given type based on their position among siblings, counting from the end."
  },
  {
    "selector": ":nth-of-type()",
    "category": "structural",
    "description": "Matches elements of a given type based on their position among siblings of the same type."
  },
  {
    "selector": ":only-child",
    "category": "structural",
    "description": "Matches an element that has no siblings — it is the only child of its parent."
  },
  {
    "selector": ":only-of-type",
    "category": "structural",
    "description": "Matches an element that is the only sibling of its type within its parent."
  },
  {
    "selector": ":open",
    "category": "state",
    "description": "Matches elements that are in an open state, such as details elements whose content is currently visible."
  },
  {
    "selector": ":optional",
    "category": "form",
    "description": "Matches form elements that do not have the required attribute set."
  },
  {
    "selector": ":out-of-range",
    "category": "form",
    "description": "Matches input elements whose current value is outside the range limits specified by min and max attributes."
  },
  {
    "selector": ":past",
    "category": "state",
    "description": "Matches elements that appear before the currently active element in a time-based media presentation."
  },
  {
    "selector": ":paused",
    "category": "state",
    "description": "Matches media elements that are paused."
  },
  {
    "selector": ":picture-in-picture",
    "category": "state",
    "description": "Matches an element that is currently in picture-in-picture mode."
  },
  {
    "selector": ":placeholder-shown",
    "category": "form",
    "description": "Matches input or textarea elements that are currently showing placeholder text."
  },
  {
    "selector": ":playing",
    "category": "state",
    "description": "Matches media elements that are currently playing."
  },
  {
    "selector": ":popover-open",
    "category": "state",
    "description": "Matches a popover element that is in the showing state."
  },
  {
    "selector": ":read-only",
    "category": "form",
    "description": "Matches elements that are not editable by the user. Input elements with readonly, or elements without contenteditable."
  },
  {
    "selector": ":read-write",
    "category": "form",
    "description": "Matches elements that are editable by the user, such as text inputs or elements with contenteditable."
  },
  {
    "selector": ":required",
    "category": "form",
    "description": "Matches form elements that have the required attribute set and must be filled in before form submission."
  },
  {
    "selector": ":right",
    "category": "paged-media",
    "description": "Matches right-side pages when printing. Used with @page in double-sided printing layouts."
  },
  {
    "selector": ":root",
    "category": "structural",
    "description": "Matches the root element of the document tree. In HTML, this is the <html> element."
  },
  {
    "selector": ":scope",
    "category": "relational",
    "description": "Matches elements that are a reference point for selectors to match against, often the element on which querySelector is called."
  },
  {
    "selector": ":seeking",
    "category": "state",
    "description": "Matches media elements that are in the process of seeking to a new position."
  },
  {
    "selector": ":stalled",
    "category": "state",
    "description": "Matches media elements whose playback is stalled due to network issues."
  },
  {
    "selector": ":state()",
    "category": "shadow-dom",
    "description": "Matches custom elements that have a specific custom state set via the CustomStateSet API."
  },
  {
    "selector": ":target",
    "category": "structural",
    "description": "Matches an element whose id matches the URL fragment identifier (the part after #) in the current URL."
  },
  {
    "selector": ":target-current",
    "category": "state",
    "description": "Matches the scroll marker (::scroll-marker or anchor) whose target is currently the active one in its scroll marker group."
  },
  {
    "selector": ":target-within",
    "category": "structural",
    "description": "Matches an element that is a :target or contains a descendant that is a :target. Dropped from the Selectors Level 4 draft and never implemented; use :has(:target) instead."
  },
  {
    "selector": ":user-invalid",
    "category": "form",
    "description": "Matches form inputs with invalid values after the user has interacted with them, similar to :invalid but only after user input."
  },
  {
    "selector": ":user-valid",
    "category": "form",
    "description": "Matches form inputs with valid values after the user has interacted with them, similar to :valid but only after user input."
  },
  {
    "selector": ":valid",
    "category": "form",
    "description": "Matches form elements whose content validates successfully according to their type and other constraints."
  },
  {
    "selector": ":visited",
    "category": "state",
    "description": "Matches anchor elements that have already been visited by the user. Limited styling is allowed for privacy reasons."
  },
  {
    "selector": ":volume-locked",
    "category": "state",
    "description": "Matches media elements where the user agent has locked the volume and the document cannot change it."
  },
  {
    "selector": ":where()",
    "category": "logical",
    "description": "Matches elements that match any of the selectors in the list, but contributes zero specificity to the overall selector."
  },
  {
    "selector": ":xr-overlay",
    "category": "state",
    "description": "Matches the element being displayed as the DOM overlay during an immersive WebXR session."
  }
] as const;

export type PseudoClass = (typeof cssPseudoClasses)[number];
