// MDN reference: https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes export const nativePseudoClasses = [ 'active', 'any', 'any-link', 'checked', 'indeterminate', 'default', 'defined', 'dir', 'disabled', 'empty', 'enabled', 'first', 'first-child', 'first-of-type', 'fullscreen', 'focus', 'focus-within', 'focus-visible', 'has', 'hover', 'indeterminate', 'in-range', 'invalid', 'is', 'lang', 'last-child', 'last-of-type', 'left', 'link', 'not', 'nth-child', 'nth-last-child', 'nth-last-of-type', 'nth-of-type', 'only-child', 'only-of-type', 'optional', 'out-of-range', 'placeholder-shown', 'read-only', 'read-write', 'required', 'right', 'root', 'scope', 'target', 'valid', 'visited', 'where', 'user-valid', 'user-invalid', 'autofill', 'modal', 'popover-open', 'future', 'past', 'picture-in-picture', ]; export const CSSWideKeywords = ['initial', 'inherit', 'unset']; /** * list names of functional pseudo classes * - cannot be overridden by custom states * - might contain nested selectors */ export const reservedFunctionalPseudoClasses = [ `not`, `any`, `matches`, `is`, `where`, `has`, `host`, `host-context`, `nth-child`, `nth-last-child`, `nth-of-type`, `nth-last-of-type`, // not native `global`, `local`, ]; export const knownPseudoClassesWithNestedSelectors = reservedFunctionalPseudoClasses.filter( (name) => { switch (name) { case `global`: case `local`: case `nth-of-type`: case `nth-last-of-type`: return false; } return true; } ); export const nativePseudoElements = [ 'after', 'backdrop', 'before', 'cue', 'first-letter', 'first-line', 'grammar-error', 'marker', 'placeholder', 'selection', 'slotted', 'spelling-error', 'file-selector-button', 'highlight', 'part', 'target-text', 'view-transition', 'view-transition-group', 'view-transition-image-pair', 'view-transition-new', 'view-transition-old', ]; export const nativeFunctionsDic: Record = { annotation: { preserveQuotes: false }, attr: { preserveQuotes: false }, blur: { preserveQuotes: false }, brightness: { preserveQuotes: false }, calc: { preserveQuotes: false }, 'character-variant': { preserveQuotes: false }, circle: { preserveQuotes: false }, clamp: { preserveQuotes: false }, 'conic-gradient': { preserveQuotes: false }, constant: { preserveQuotes: false }, contrast: { preserveQuotes: false }, counter: { preserveQuotes: false }, counters: { preserveQuotes: false }, 'cubic-bezier': { preserveQuotes: false }, 'drop-shadow': { preserveQuotes: false }, ellipse: { preserveQuotes: false }, env: { preserveQuotes: false }, 'fit-content': { preserveQuotes: false }, format: { preserveQuotes: false }, grayscale: { preserveQuotes: false }, hsl: { preserveQuotes: false }, hsla: { preserveQuotes: false }, 'hue-rotate': { preserveQuotes: false }, hwb: { preserveQuotes: false }, image: { preserveQuotes: false }, inset: { preserveQuotes: false }, invert: { preserveQuotes: false }, leader: { preserveQuotes: false }, 'light-dark': { preserveQuotes: false }, 'linear-gradient': { preserveQuotes: false }, local: { preserveQuotes: false }, matrix: { preserveQuotes: false }, matrix3d: { preserveQuotes: false }, max: { preserveQuotes: false }, min: { preserveQuotes: false }, minmax: { preserveQuotes: false }, opacity: { preserveQuotes: false }, ornaments: { preserveQuotes: false }, paint: { preserveQuotes: false }, path: { preserveQuotes: true }, perspective: { preserveQuotes: false }, polygon: { preserveQuotes: false }, 'radial-gradient': { preserveQuotes: false }, rect: { preserveQuotes: false }, repeat: { preserveQuotes: false }, 'repeating-linear-gradient': { preserveQuotes: false }, 'repeating-radial-gradient': { preserveQuotes: false }, 'repeating-conic-gradient': { preserveQuotes: false }, rgb: { preserveQuotes: false }, rgba: { preserveQuotes: false }, rotate: { preserveQuotes: false }, rotate3d: { preserveQuotes: false }, rotateX: { preserveQuotes: false }, rotateY: { preserveQuotes: false }, rotateZ: { preserveQuotes: false }, saturate: { preserveQuotes: false }, scale: { preserveQuotes: false }, scale3d: { preserveQuotes: false }, scaleX: { preserveQuotes: false }, scaleY: { preserveQuotes: false }, scaleZ: { preserveQuotes: false }, scroll: { preserveQuotes: false }, view: { preserveQuotes: true }, sepia: { preserveQuotes: false }, skew: { preserveQuotes: false }, skewX: { preserveQuotes: false }, skewY: { preserveQuotes: false }, steps: { preserveQuotes: false }, styleset: { preserveQuotes: false }, stylistic: { preserveQuotes: false }, swash: { preserveQuotes: false }, symbols: { preserveQuotes: false }, translate: { preserveQuotes: false }, translate3d: { preserveQuotes: false }, translateX: { preserveQuotes: false }, translateY: { preserveQuotes: false }, translateZ: { preserveQuotes: false }, url: { preserveQuotes: false }, var: { preserveQuotes: false }, color: { preserveQuotes: true }, 'color-mix': { preserveQuotes: true }, lab: { preserveQuotes: true }, oklab: { preserveQuotes: true }, lch: { preserveQuotes: true }, oklch: { preserveQuotes: true }, supports: { preserveQuotes: true }, anchor: { preserveQuotes: true }, 'anchor-size': { preserveQuotes: true }, selector: { preserveQuotes: true /* TODO:transform the nested selector */ }, style: { preserveQuotes: true /* TODO: transform the dashed ident property */ }, 'image-set': { preserveQuotes: true }, sin: { preserveQuotes: true }, cos: { preserveQuotes: true }, tan: { preserveQuotes: true }, asin: { preserveQuotes: true }, acos: { preserveQuotes: true }, atan: { preserveQuotes: true }, atan2: { preserveQuotes: true }, pow: { preserveQuotes: true }, sqrt: { preserveQuotes: true }, hypot: { preserveQuotes: true }, log: { preserveQuotes: true }, exp: { preserveQuotes: true }, abs: { preserveQuotes: true }, sign: { preserveQuotes: true }, };