UNPKG

stylelint

Version:
468 lines (423 loc) 8.14 kB
import _ from "lodash" export const nonLengthUnits = new Set([ // Relative length units "%", // Time length units "s", "ms", // Angle "deg", "grad", "turn", "rad", // Frequency "Hz", "kHz", // Resolution "dpi", "dpcm", "dppx", ]) export const lengthUnits = new Set([ // Relative length units "em", "ex", "ch", "rem", // Viewport-percentage lengths "vh", "vw", "vmin", "vmax", "vm", // Absolute length units "px", "mm", "cm", "in", "pt", "pc", "q", ]) export const units = uniteSets( nonLengthUnits, lengthUnits ) export const colorFunctionNames = new Set([ "rgb", "rgba", "hsl", "hsla", "hwb", "gray", ]) export const camelCaseFunctionNames = new Set([ "translateX", "translateY", "translateZ", "scaleX", "scaleY", "scaleZ", "rotateX", "rotateY", "rotateZ", "skewX", "skewY", ]) export const basicKeywords = new Set([ "initial", "inherit", "unset", ]) export const fontFamilyKeywords = uniteSets(basicKeywords, [ "serif", "sans-serif", "cursive", "fantasy", "monospace", ]) export const fontWeightRelativeKeywords = new Set([ "bolder", "lighter", ]) export const fontWeightAbsoluteKeywords = new Set([ "bold", ]) export const fontWeightKeywords = uniteSets( basicKeywords, fontWeightRelativeKeywords, fontWeightAbsoluteKeywords ) export const animationNameKeywords = uniteSets(basicKeywords, [ "none", ]) export const animationTimingFunctionKeywords = uniteSets(basicKeywords, [ "linear", "ease", "ease-in", "ease-in-out", "ease-out", "step-start", "step-end", "steps", "cubic-bezier", ]) export const animationIterationCountKeywords = new Set([ "infinite", ]) export const animationDirectionKeywords = uniteSets(basicKeywords, [ "normal", "reverse", "alternate", "alternate-reverse", ]) export const animationFillModeKeywords = new Set([ "none", "forwards", "backwards", "both", ]) export const animationPlayStateKeywords = uniteSets(basicKeywords, [ "running", "paused", ]) // cf. https://developer.mozilla.org/en-US/docs/Web/CSS/animation export const animationShorthandKeywords = uniteSets( basicKeywords, animationNameKeywords, animationTimingFunctionKeywords, animationIterationCountKeywords, animationDirectionKeywords, animationFillModeKeywords, animationPlayStateKeywords ) // These are the ones that can have single-colon notation export const levelOneAndTwoPseudoElements = new Set([ "before", "after", "first-line", "first-letter", ]) // These are the ones that require double-colon notation export const levelThreePseudoElements = new Set([ "before", "after", "first-line", "first-letter", "selection", "spelling-error", "grammar-error", "backdrop", "marker", "placeholder", "shadow", "content", ]) export const pseudoElements = uniteSets( levelOneAndTwoPseudoElements, levelThreePseudoElements ) export const aNPlusBNotationPseudoClasses = new Set([ "nth-child", "nth-column", "nth-last-child", "nth-last-column", "nth-last-of-type", "nth-of-type", ]) export const linguisticPseudoClasses = new Set([ "dir", "lang", ]) export const otherPseudoClasses = new Set([ "active", "any-link", "blank", "checked", "contains", "current", "default", "disabled", "drop", "empty", "enabled", "first-child", "first-of-type", "focus", "focus-within", "fullscreen", "future", "has", "hover", "indeterminate", "in-range", "invalid", "last-child", "last-of-type", "link", "matches", "not", "only-child", "only-of-type", "optional", "out-of-range", "past", "placeholder-shown", "read-only", "read-write", "required", "root", "scope", "target", "user-error", "user-invalid", "val", "valid", "visited", ]) export const pseudoClasses = uniteSets( aNPlusBNotationPseudoClasses, linguisticPseudoClasses, otherPseudoClasses ) export const shorthandTimeProperties = new Set([ "transition", "animation", ]) export const longhandTimeProperties = new Set([ "transition-duration", "transition-delay", "animation-duration", "animation-delay", ]) export const timeProperties = uniteSets( shorthandTimeProperties, longhandTimeProperties ) export const camelCaseKeywords = new Set([ "optimizeSpeed", "optimizeLegibility", "geometricPrecision", "currentColor", ]) // https://developer.mozilla.org/docs/Web/CSS/counter-increment export const counterIncrementKeywords = uniteSets(basicKeywords, [ "none", ]) export const gridRowKeywords = uniteSets(basicKeywords, [ "auto", "span", ]) export const gridColumnKeywords = uniteSets(basicKeywords, [ "auto", "span", ]) export const gridAreaKeywords = uniteSets(basicKeywords, [ "auto", "span", ]) // https://developer.mozilla.org/ru/docs/Web/CSS/list-style-type export const listStyleTypeKeywords = uniteSets(basicKeywords, [ "none", "disc", "circle", "square", "decimal", "cjk-decimal", "decimal-leading-zero", "lower-roman", "upper-roman", "lower-greek", "lower-alpha", "lower-latin", "upper-alpha", "upper-latin", "arabic-indic", "armenian", "bengali", "cambodian", "cjk-earthly-branch", "cjk-ideographic", "devanagari", "ethiopic-numeric", "georgian", "gujarati", "gurmukhi", "hebrew", "hiragana", "hiragana-iroha", "japanese-formal", "japanese-informal", "kannada", "katakana", "katakana-iroha", "khmer", "korean-hangul-formal", "korean-hanja-formal", "korean-hanja-informal", "lao", "lower-armenian", "malayalam", "mongolian", "myanmar", "oriya", "persian", "simp-chinese-formal", "simp-chinese-informal", "tamil", "telugu", "thai", "tibetan", "trad-chinese-formal", "trad-chinese-informal", "upper-armenian", "disclosure-open", "disclosure-closed", // Non-standard extensions (without prefixe) "ethiopic-halehame", "ethiopic-halehame-am", "ethiopic-halehame-ti-er", "ethiopic-halehame-ti-et", "hangul", "hangul-consonant", "urdu", ]) export const listStylePositionKeywords = uniteSets(basicKeywords, [ "inside", "outside", ]) export const listStyleImageKeywords = uniteSets(basicKeywords, [ "none", ]) export const listStyleShorthandKeywords = uniteSets( basicKeywords, listStyleTypeKeywords, listStylePositionKeywords, listStyleImageKeywords ) export const fontStyleKeywords = uniteSets(basicKeywords, [ "normal", "italic", "oblique", ]) export const fontVariantKeywords = uniteSets(basicKeywords, [ "normal", "none", "historical-forms", "none", "common-ligatures", "no-common-ligatures", "discretionary-ligatures", "no-discretionary-ligatures", "historical-ligatures", "no-historical-ligatures", "contextual", "no-contextual", "small-caps", "small-caps", "all-small-caps", "petite-caps", "all-petite-caps", "unicase", "titling-caps", "lining-nums", "oldstyle-nums", "proportional-nums", "tabular-nums", "diagonal-fractions", "stacked-fractions", "ordinal", "slashed-zero", "jis78", "jis83", "jis90", "jis04", "simplified", "traditional", "full-width", "proportional-width", "ruby", ]) export const fontStretchKeywords = uniteSets(basicKeywords, [ "semi-condensed", "condensed", "extra-condensed", "ultra-condensed", "semi-expanded", "expanded", "extra-expanded", "ultra-expanded", ]) export const fontSizeKeywords = uniteSets(basicKeywords, [ "xx-small", "x-small", "small", "medium", "large", "x-large", "xx-large", "larger", "smaller", ]) export const lineHeightKeywords = uniteSets(basicKeywords, [ "normal", ]) export const fontShorthandKeywords = uniteSets( basicKeywords, fontStyleKeywords, fontVariantKeywords, fontWeightKeywords, fontStretchKeywords, fontSizeKeywords, lineHeightKeywords, fontFamilyKeywords ) export const keyframeSelectorKeywords = new Set([ "from", "to", ]) function uniteSets(...sets) { return new Set(sets.reduce((result, set) => { return result.concat(_.toArray(set)) }, [])) }