mirror of
https://github.com/primer/css.git
synced 2024-12-29 17:12:27 +03:00
642 lines
17 KiB
JavaScript
642 lines
17 KiB
JavaScript
/*
|
|
* This object's keys are (semver) version numbers, and the
|
|
* values are arrays of objects each with a "selectors"
|
|
* array and a "message" string.
|
|
*/
|
|
const versionDeprecations = {
|
|
'16.0.0': [
|
|
{
|
|
selectors: [
|
|
'.markdown-body li',
|
|
'.input-dark',
|
|
'.input-dark:-ms-input-placeholder',
|
|
'.input-dark::-ms-input-placeholder',
|
|
'.input-dark::placeholder',
|
|
'.input-dark.focus',
|
|
'.input-dark:focus',
|
|
'::-ms-input-placeholder',
|
|
'.border-blue',
|
|
'.border-blue-light',
|
|
'.border-green',
|
|
'.border-green-light',
|
|
'.border-red',
|
|
'.border-red-light',
|
|
'.border-purple',
|
|
'.border-yellow',
|
|
'.border-gray-light',
|
|
'.border-gray-dark',
|
|
'.border-black-fade',
|
|
'.border-white-fade',
|
|
'.border-white-fade-15',
|
|
'.border-white-fade-30',
|
|
'.border-white-fade-50',
|
|
'.border-white-fade-70',
|
|
'.border-white-fade-85',
|
|
'.box-shadow',
|
|
'.box-shadow-medium',
|
|
'.box-shadow-large',
|
|
'.box-shadow-extra-large',
|
|
'.bg-white',
|
|
'.bg-blue',
|
|
'.bg-blue-light',
|
|
'.bg-gray-dark',
|
|
'.bg-gray',
|
|
'.bg-gray-light',
|
|
'.bg-green',
|
|
'.bg-green-light',
|
|
'.bg-red',
|
|
'.bg-red-light',
|
|
'.bg-yellow',
|
|
'.bg-yellow-light',
|
|
'.bg-yellow-dark',
|
|
'.bg-purple',
|
|
'.bg-pink',
|
|
'.bg-purple-light',
|
|
'.bg-orange',
|
|
'.color-gray-0',
|
|
'.bg-gray-0',
|
|
'.color-gray-1',
|
|
'.bg-gray-1',
|
|
'.color-gray-2',
|
|
'.bg-gray-2',
|
|
'.color-gray-3',
|
|
'.bg-gray-3',
|
|
'.color-gray-4',
|
|
'.bg-gray-4',
|
|
'.color-gray-5',
|
|
'.bg-gray-5',
|
|
'.color-gray-6',
|
|
'.bg-gray-6',
|
|
'.color-gray-7',
|
|
'.bg-gray-7',
|
|
'.color-gray-8',
|
|
'.bg-gray-8',
|
|
'.color-gray-9',
|
|
'.bg-gray-9',
|
|
'.color-blue-0',
|
|
'.bg-blue-0',
|
|
'.color-blue-1',
|
|
'.bg-blue-1',
|
|
'.color-blue-2',
|
|
'.bg-blue-2',
|
|
'.color-blue-3',
|
|
'.bg-blue-3',
|
|
'.color-blue-4',
|
|
'.bg-blue-4',
|
|
'.color-blue-5',
|
|
'.bg-blue-5',
|
|
'.color-blue-6',
|
|
'.bg-blue-6',
|
|
'.color-blue-7',
|
|
'.bg-blue-7',
|
|
'.color-blue-8',
|
|
'.bg-blue-8',
|
|
'.color-blue-9',
|
|
'.bg-blue-9',
|
|
'.color-green-0',
|
|
'.bg-green-0',
|
|
'.color-green-1',
|
|
'.bg-green-1',
|
|
'.color-green-2',
|
|
'.bg-green-2',
|
|
'.color-green-3',
|
|
'.bg-green-3',
|
|
'.color-green-4',
|
|
'.bg-green-4',
|
|
'.color-green-5',
|
|
'.bg-green-5',
|
|
'.color-green-6',
|
|
'.bg-green-6',
|
|
'.color-green-7',
|
|
'.bg-green-7',
|
|
'.color-green-8',
|
|
'.bg-green-8',
|
|
'.color-green-9',
|
|
'.bg-green-9',
|
|
'.color-yellow-0',
|
|
'.bg-yellow-0',
|
|
'.color-yellow-1',
|
|
'.bg-yellow-1',
|
|
'.color-yellow-2',
|
|
'.bg-yellow-2',
|
|
'.color-yellow-3',
|
|
'.bg-yellow-3',
|
|
'.color-yellow-4',
|
|
'.bg-yellow-4',
|
|
'.color-yellow-5',
|
|
'.bg-yellow-5',
|
|
'.color-yellow-6',
|
|
'.bg-yellow-6',
|
|
'.color-yellow-7',
|
|
'.bg-yellow-7',
|
|
'.color-yellow-8',
|
|
'.bg-yellow-8',
|
|
'.color-yellow-9',
|
|
'.bg-yellow-9',
|
|
'.color-orange-0',
|
|
'.bg-orange-0',
|
|
'.color-orange-1',
|
|
'.bg-orange-1',
|
|
'.color-orange-2',
|
|
'.bg-orange-2',
|
|
'.color-orange-3',
|
|
'.bg-orange-3',
|
|
'.color-orange-4',
|
|
'.bg-orange-4',
|
|
'.color-orange-5',
|
|
'.bg-orange-5',
|
|
'.color-orange-6',
|
|
'.bg-orange-6',
|
|
'.color-orange-7',
|
|
'.bg-orange-7',
|
|
'.color-orange-8',
|
|
'.bg-orange-8',
|
|
'.color-orange-9',
|
|
'.bg-orange-9',
|
|
'.color-red-0',
|
|
'.bg-red-0',
|
|
'.color-red-1',
|
|
'.bg-red-1',
|
|
'.color-red-2',
|
|
'.bg-red-2',
|
|
'.color-red-3',
|
|
'.bg-red-3',
|
|
'.color-red-4',
|
|
'.bg-red-4',
|
|
'.color-red-5',
|
|
'.bg-red-5',
|
|
'.color-red-6',
|
|
'.bg-red-6',
|
|
'.color-red-7',
|
|
'.bg-red-7',
|
|
'.color-red-8',
|
|
'.bg-red-8',
|
|
'.color-red-9',
|
|
'.bg-red-9',
|
|
'.color-purple-0',
|
|
'.bg-purple-0',
|
|
'.color-purple-1',
|
|
'.bg-purple-1',
|
|
'.color-purple-2',
|
|
'.bg-purple-2',
|
|
'.color-purple-3',
|
|
'.bg-purple-3',
|
|
'.color-purple-4',
|
|
'.bg-purple-4',
|
|
'.color-purple-5',
|
|
'.bg-purple-5',
|
|
'.color-purple-6',
|
|
'.bg-purple-6',
|
|
'.color-purple-7',
|
|
'.bg-purple-7',
|
|
'.color-purple-8',
|
|
'.bg-purple-8',
|
|
'.color-purple-9',
|
|
'.bg-purple-9',
|
|
'.color-pink-0',
|
|
'.bg-pink-0',
|
|
'.color-pink-1',
|
|
'.bg-pink-1',
|
|
'.color-pink-2',
|
|
'.bg-pink-2',
|
|
'.color-pink-3',
|
|
'.bg-pink-3',
|
|
'.color-pink-4',
|
|
'.bg-pink-4',
|
|
'.color-pink-5',
|
|
'.bg-pink-5',
|
|
'.color-pink-6',
|
|
'.bg-pink-6',
|
|
'.color-pink-7',
|
|
'.bg-pink-7',
|
|
'.color-pink-8',
|
|
'.bg-pink-8',
|
|
'.color-pink-9',
|
|
'.bg-pink-9',
|
|
'.text-blue',
|
|
'.text-red',
|
|
'.text-gray-light',
|
|
'.text-gray',
|
|
'.text-gray-dark',
|
|
'.text-green',
|
|
'.text-yellow',
|
|
'.text-orange',
|
|
'.text-orange-light',
|
|
'.text-purple',
|
|
'.text-pink',
|
|
'.text-white',
|
|
'.link-gray',
|
|
'.link-gray:hover',
|
|
'.link-gray-dark',
|
|
'.link-gray-dark:hover',
|
|
'.link-hover-blue:hover',
|
|
'.muted-link',
|
|
'.muted-link:hover',
|
|
'.text-shadow-dark',
|
|
'.text-shadow-light',
|
|
'.dropdown-menu-dark',
|
|
'.dropdown-menu-dark::before',
|
|
'.dropdown-menu-dark::after',
|
|
'.dropdown-menu-dark .dropdown-header',
|
|
'.dropdown-menu-dark .dropdown-divider',
|
|
'.dropdown-menu-dark .dropdown-item',
|
|
'.dropdown-menu-dark.dropdown-menu-w::before',
|
|
'.dropdown-menu-dark.dropdown-menu-w::after',
|
|
'.dropdown-menu-dark.dropdown-menu-e::before',
|
|
'.dropdown-menu-dark.dropdown-menu-e::after',
|
|
'.dropdown-menu-dark.dropdown-menu-ne::before',
|
|
'.dropdown-menu-dark.dropdown-menu-ne::after',
|
|
'.Label--outline',
|
|
'.Label--gray',
|
|
'.Label--gray-darker',
|
|
'.Label--yellow',
|
|
'.Label--orange',
|
|
'.Label--red',
|
|
'.Label--outline-green',
|
|
'.Label--green',
|
|
'.Label--blue',
|
|
'.Label--purple',
|
|
'.Label--pink',
|
|
'.State--green',
|
|
'.State--red',
|
|
'.State--purple',
|
|
'.Counter--gray-light',
|
|
'.Counter--gray',
|
|
'.btn-transparent:active'
|
|
],
|
|
message: `This selector is not available in Primer CSS 16.0.0. Please refer to the documentation.`
|
|
},
|
|
{
|
|
variables: [
|
|
'$bg-black',
|
|
'$bg-black-fade',
|
|
'$bg-blue',
|
|
'$bg-blue-light',
|
|
'$bg-diffstat-added',
|
|
'$bg-diffstat-deleted',
|
|
'$bg-diffstat-neutral',
|
|
'$bg-gray',
|
|
'$bg-gray-dark',
|
|
'$bg-gray-light',
|
|
'$bg-green',
|
|
'$bg-green-light',
|
|
'$bg-orange',
|
|
'$bg-pink',
|
|
'$bg-purple',
|
|
'$bg-purple-light',
|
|
'$bg-red',
|
|
'$bg-red-light',
|
|
'$bg-white',
|
|
'$bg-yellow',
|
|
'$bg-yellow-dark',
|
|
'$bg-yellow-light',
|
|
'$black',
|
|
'$black-fade-15',
|
|
'$black-fade-30',
|
|
'$black-fade-50',
|
|
'$black-fade-70',
|
|
'$black-fade-85',
|
|
'$blue',
|
|
'$blue-000',
|
|
'$blue-100',
|
|
'$blue-200',
|
|
'$blue-300',
|
|
'$blue-400',
|
|
'$blue-500',
|
|
'$blue-600',
|
|
'$blue-700',
|
|
'$blue-800',
|
|
'$blue-900',
|
|
'$border-black-fade',
|
|
'$border-blue',
|
|
'$border-blue-light',
|
|
'$border-color',
|
|
'$border-color-button',
|
|
'$border-gray',
|
|
'$border-gray-dark',
|
|
'$border-gray-darker',
|
|
'$border-gray-light',
|
|
'$border-green',
|
|
'$border-green-light',
|
|
'$border-purple',
|
|
'$border-red',
|
|
'$border-red-light',
|
|
'$border-white',
|
|
'$border-white-fade',
|
|
'$border-yellow',
|
|
'$box-shadow',
|
|
'$box-shadow-extra-large',
|
|
'$box-shadow-focus',
|
|
'$box-shadow-highlight',
|
|
'$box-shadow-inset',
|
|
'$box-shadow-large',
|
|
'$box-shadow-medium',
|
|
'$btn-active-shadow',
|
|
'$btn-input-focus-shadow',
|
|
'$form-control-shadow',
|
|
'$gray',
|
|
'$gray-000',
|
|
'$gray-100',
|
|
'$gray-200',
|
|
'$gray-300',
|
|
'$gray-400',
|
|
'$gray-500',
|
|
'$gray-600',
|
|
'$gray-700',
|
|
'$gray-800',
|
|
'$gray-900',
|
|
'$gray-dark',
|
|
'$gray-light',
|
|
'$green',
|
|
'$green-000',
|
|
'$green-100',
|
|
'$green-200',
|
|
'$green-300',
|
|
'$green-400',
|
|
'$green-500',
|
|
'$green-600',
|
|
'$green-700',
|
|
'$green-800',
|
|
'$green-900',
|
|
'$orange',
|
|
'$orange-000',
|
|
'$orange-100',
|
|
'$orange-200',
|
|
'$orange-300',
|
|
'$orange-400',
|
|
'$orange-500',
|
|
'$orange-600',
|
|
'$orange-700',
|
|
'$orange-800',
|
|
'$orange-900',
|
|
'$pink-000',
|
|
'$pink-100',
|
|
'$pink-200',
|
|
'$pink-300',
|
|
'$pink-400',
|
|
'$pink-500',
|
|
'$pink-600',
|
|
'$pink-700',
|
|
'$pink-800',
|
|
'$pink-900',
|
|
'$purple',
|
|
'$purple-000',
|
|
'$purple-100',
|
|
'$purple-200',
|
|
'$purple-300',
|
|
'$purple-400',
|
|
'$purple-500',
|
|
'$purple-600',
|
|
'$purple-700',
|
|
'$purple-800',
|
|
'$purple-900',
|
|
'$red',
|
|
'$red-000',
|
|
'$red-100',
|
|
'$red-200',
|
|
'$red-300',
|
|
'$red-400',
|
|
'$red-500',
|
|
'$red-600',
|
|
'$red-700',
|
|
'$red-800',
|
|
'$red-900',
|
|
'$text-black',
|
|
'$text-blue',
|
|
'$text-gray',
|
|
'$text-gray-dark',
|
|
'$text-gray-light',
|
|
'$text-green',
|
|
'$text-orange',
|
|
'$text-orange-light',
|
|
'$text-pink',
|
|
'$text-purple',
|
|
'$text-red',
|
|
'$text-white',
|
|
'$text-yellow',
|
|
'$tooltip-background-color',
|
|
'$tooltip-text-color',
|
|
'$white',
|
|
'$white-fade-15',
|
|
'$white-fade-30',
|
|
'$white-fade-50',
|
|
'$white-fade-70',
|
|
'$white-fade-85',
|
|
'$yellow',
|
|
'$yellow-000',
|
|
'$yellow-100',
|
|
'$yellow-200',
|
|
'$yellow-300',
|
|
'$yellow-400',
|
|
'$yellow-500',
|
|
'$yellow-600',
|
|
'$yellow-700',
|
|
'$yellow-800',
|
|
'$yellow-900',
|
|
'$blue-mktg',
|
|
'$green-mktg'
|
|
],
|
|
message: `This variable is not available in Primer CSS 16.0.0. Please refer to the documentation.`
|
|
}
|
|
],
|
|
'15.0.0': [
|
|
{
|
|
selectors: [
|
|
'.btn-outline:active .Counter',
|
|
'.btn-outline.selected .Counter',
|
|
'.btn-outline[aria-selected=true] .Counter',
|
|
'.tabnav .Counter',
|
|
'.SideNav-item:hover::before',
|
|
'.SideNav-item:focus::before',
|
|
'.UnderlineNav-item:hover .UnderlineNav-octicon',
|
|
'.UnderlineNav-item:focus .UnderlineNav-octicon',
|
|
'.UnderlineNav--right .UnderlineNav-item',
|
|
'.pagination::before',
|
|
'.pagination::after',
|
|
'.pagination a:first-child',
|
|
'.pagination span:first-child',
|
|
'.pagination em:first-child',
|
|
'.pagination a:last-child',
|
|
'.pagination span:last-child',
|
|
'.pagination em:last-child',
|
|
'.pagination .selected',
|
|
'.IssueLabel--big .g-emoji',
|
|
'.IssueLabel--big:hover',
|
|
'.SelectMenu-item[aria-checked="true"]',
|
|
'.SelectMenu-item[aria-checked="true"] .SelectMenu-icon--check',
|
|
'.SelectMenu-tab:not([aria-checked="true"]):hover',
|
|
'.SelectMenu-tab:not([aria-checked="true"]):active',
|
|
'.SelectMenu-tab:not([aria-selected="true"]):hover'
|
|
],
|
|
message: `This selector is not available in Primer CSS 15.0.0. Please refer to the documentation.`
|
|
}
|
|
],
|
|
'14.4.0': [
|
|
{
|
|
selectors: [
|
|
'.breadcrumb-item[aria-current]',
|
|
'.breadcrumb-item[aria-current]::after',
|
|
'.menu-item[aria-current]',
|
|
'.menu-item[aria-current]::before',
|
|
'.tabnav-tab[aria-current]',
|
|
'.filter-item[aria-current]',
|
|
'.SideNav-item[aria-current="page"]',
|
|
'.SideNav-item[aria-current="page"]::before',
|
|
'.SideNav-subItem[aria-current="page"]',
|
|
'.subnav-item[aria-current]',
|
|
'.UnderlineNav-item[aria-current]',
|
|
'.UnderlineNav-item[aria-current] .UnderlineNav-octicon',
|
|
'.pagination [aria-current]',
|
|
'.pagination [aria-current]:hover'
|
|
],
|
|
message: `These selectors are not needed anymore.`
|
|
}
|
|
],
|
|
'14.0.0': [
|
|
{
|
|
selectors: [
|
|
'.SelectMenu-item+.SelectMenu-item',
|
|
'.SelectMenu-divider:first-child',
|
|
'.SelectMenu-divider:last-child',
|
|
'.SelectMenu--hasFilter .SelectMenu-item:last-child',
|
|
'.SelectMenu-item[aria-checked="true"] .SelectMenu-icon'
|
|
],
|
|
message: `These selectors are deprecated and not used anymore.`
|
|
},
|
|
{
|
|
selectors: [
|
|
'.flex-item-equal',
|
|
'.flex-sm-item-equal',
|
|
'.flex-md-item-equal',
|
|
'.flex-lg-item-equal',
|
|
'.flex-xl-item-equal'
|
|
],
|
|
message: `This variable is deprecated. Use "flex-1" instead.`
|
|
},
|
|
{
|
|
selectors: ['.UnderlineNav-item.selected', '.UnderlineNav-item.selected .UnderlineNav-octicon'],
|
|
message: `Please use aria-selected="true" to indicate the selected state of an UnderlineNav item.`
|
|
},
|
|
{
|
|
variables: ['$status-pending'],
|
|
message: `This variable is deprecated.`
|
|
},
|
|
{
|
|
variables: ['$highlight-yellow'],
|
|
message: `This variable is deprecated.`
|
|
},
|
|
{
|
|
variables: ['$repo-private-text', '$repo-private-bg', '$repo-private-icon'],
|
|
message: `These variables are deprecated.`
|
|
},
|
|
{
|
|
variables: ['$marketingSpacers', '$allSpacers'],
|
|
message: `Please use the $marketing-spacers and $marketing-all-spacers variables.`
|
|
},
|
|
{
|
|
variables: ['$exploregrid-item-border-radius'],
|
|
message: `This variable is deprecated. Use "4px" instead.`
|
|
},
|
|
{
|
|
variables: ['$stats-switcher-py', '$stats-viewport-height'],
|
|
message: `These variables are deprecated.`
|
|
},
|
|
{
|
|
variables: ['$min_tab_size', '$max_tab_size'],
|
|
message: `These variables are deprecated.`
|
|
}
|
|
],
|
|
'13.0.0': [
|
|
{
|
|
selectors: [
|
|
'.btn-purple',
|
|
'.btn-purple:focus',
|
|
'.btn-purple.focus',
|
|
'.btn-purple:hover',
|
|
'.btn-purple.hover',
|
|
'.btn-purple:active',
|
|
'.btn-purple.selected',
|
|
'[open]>.btn-purple',
|
|
'.btn-purple:disabled',
|
|
'.btn-purple.disabled',
|
|
'.btn-purple .Counter'
|
|
],
|
|
message: `Please don't make purple buttons.`
|
|
},
|
|
{
|
|
selectors: ['.text-pending'],
|
|
message: `Please use the "text-yellow" class instead of "text-pending".`
|
|
},
|
|
{
|
|
selectors: ['.bg-pending'],
|
|
message: `Please use the "bg-yellow-dark" class instead of "bg-pending".`
|
|
},
|
|
{
|
|
selectors: [
|
|
'.container',
|
|
'.container::before',
|
|
'.container::after',
|
|
'.columns',
|
|
'.columns::before',
|
|
'.columns::after',
|
|
'.column',
|
|
'.one-third',
|
|
'.two-thirds',
|
|
'.one-fourth',
|
|
'.one-half',
|
|
'.three-fourths',
|
|
'.one-fifth',
|
|
'.four-fifths'
|
|
],
|
|
message: `Please use [grid classes](https://primer.style/css/objects/grid).`
|
|
},
|
|
{
|
|
selectors: ['.centered'],
|
|
message: `You can use the "mx-auto" class to center any element.`
|
|
},
|
|
{
|
|
selectors: [
|
|
'.dropdown-menu-content',
|
|
'.dropdown.active .dropdown-menu-content',
|
|
'.dropdown-menu-content.anim-scale-in'
|
|
],
|
|
message: `The "dropdown-menu-content" class is unnecessary.`
|
|
}
|
|
]
|
|
}
|
|
|
|
const {version: CURRENT_VERSION} = require('./package.json')
|
|
const semver = require('semver')
|
|
|
|
// map selectors to the version and message of their deprecation
|
|
const selectorDeprecations = new Map()
|
|
const variableDeprecations = new Map()
|
|
for (const [version, deps] of Object.entries(versionDeprecations)) {
|
|
for (const {selectors = [], variables = [], message} of deps) {
|
|
for (const selector of selectors) {
|
|
selectorDeprecations.set(selector, {version, message})
|
|
}
|
|
for (const variable of variables) {
|
|
variableDeprecations.set(variable, {version, message})
|
|
}
|
|
}
|
|
}
|
|
|
|
function isSelectorDeprecated(selector, version = CURRENT_VERSION) {
|
|
const deprecation = selectorDeprecations.get(selector)
|
|
return deprecation ? semver.gte(deprecation.version, version) : false
|
|
}
|
|
|
|
function isVariableDeprecated(variable, version = CURRENT_VERSION) {
|
|
const deprecation = variableDeprecations.get(variable)
|
|
return deprecation ? semver.gte(deprecation.version, version) : false
|
|
}
|
|
|
|
module.exports = {
|
|
versionDeprecations,
|
|
selectorDeprecations,
|
|
variableDeprecations,
|
|
isSelectorDeprecated,
|
|
isVariableDeprecated
|
|
}
|