animate/webGl/my-threejs-test/node_modules/svgo/plugins/_collections.js

2340 lines
49 KiB
JavaScript

'use strict';
// https://www.w3.org/TR/SVG11/intro.html#Definitions
/**
* @type {Record<string, Set<string>>}
*/
exports.elemsGroups = {
animation: new Set([
'animate',
'animateColor',
'animateMotion',
'animateTransform',
'set',
]),
descriptive: new Set(['desc', 'metadata', 'title']),
shape: new Set([
'circle',
'ellipse',
'line',
'path',
'polygon',
'polyline',
'rect',
]),
structural: new Set(['defs', 'g', 'svg', 'symbol', 'use']),
paintServer: new Set([
'hatch',
'linearGradient',
'meshGradient',
'pattern',
'radialGradient',
'solidColor',
]),
nonRendering: new Set([
'clipPath',
'filter',
'linearGradient',
'marker',
'mask',
'pattern',
'radialGradient',
'solidColor',
'symbol',
]),
container: new Set([
'a',
'defs',
'foreignObject',
'g',
'marker',
'mask',
'missing-glyph',
'pattern',
'svg',
'switch',
'symbol',
]),
textContent: new Set([
'altGlyph',
'altGlyphDef',
'altGlyphItem',
'glyph',
'glyphRef',
'text',
'textPath',
'tref',
'tspan',
]),
textContentChild: new Set(['altGlyph', 'textPath', 'tref', 'tspan']),
lightSource: new Set([
'feDiffuseLighting',
'feDistantLight',
'fePointLight',
'feSpecularLighting',
'feSpotLight',
]),
filterPrimitive: new Set([
'feBlend',
'feColorMatrix',
'feComponentTransfer',
'feComposite',
'feConvolveMatrix',
'feDiffuseLighting',
'feDisplacementMap',
'feDropShadow',
'feFlood',
'feFuncA',
'feFuncB',
'feFuncG',
'feFuncR',
'feGaussianBlur',
'feImage',
'feMerge',
'feMergeNode',
'feMorphology',
'feOffset',
'feSpecularLighting',
'feTile',
'feTurbulence',
]),
};
/**
* Elements where adding or removing whitespace may effect rendering, metadata,
* or semantic meaning.
*
* @see https://developer.mozilla.org/docs/Web/HTML/Element/pre
*/
exports.textElems = new Set([
...exports.elemsGroups.textContent,
'pre',
'title',
]);
exports.pathElems = new Set(['glyph', 'missing-glyph', 'path']);
/**
* @type {Record<string, Set<string>>}
* @see https://www.w3.org/TR/SVG11/intro.html#Definitions
*/
exports.attrsGroups = {
animationAddition: new Set(['additive', 'accumulate']),
animationAttributeTarget: new Set(['attributeType', 'attributeName']),
animationEvent: new Set(['onbegin', 'onend', 'onrepeat', 'onload']),
animationTiming: new Set([
'begin',
'dur',
'end',
'fill',
'max',
'min',
'repeatCount',
'repeatDur',
'restart',
]),
animationValue: new Set([
'by',
'calcMode',
'from',
'keySplines',
'keyTimes',
'to',
'values',
]),
conditionalProcessing: new Set([
'requiredExtensions',
'requiredFeatures',
'systemLanguage',
]),
core: new Set(['id', 'tabindex', 'xml:base', 'xml:lang', 'xml:space']),
graphicalEvent: new Set([
'onactivate',
'onclick',
'onfocusin',
'onfocusout',
'onload',
'onmousedown',
'onmousemove',
'onmouseout',
'onmouseover',
'onmouseup',
]),
presentation: new Set([
'alignment-baseline',
'baseline-shift',
'clip-path',
'clip-rule',
'clip',
'color-interpolation-filters',
'color-interpolation',
'color-profile',
'color-rendering',
'color',
'cursor',
'direction',
'display',
'dominant-baseline',
'enable-background',
'fill-opacity',
'fill-rule',
'fill',
'filter',
'flood-color',
'flood-opacity',
'font-family',
'font-size-adjust',
'font-size',
'font-stretch',
'font-style',
'font-variant',
'font-weight',
'glyph-orientation-horizontal',
'glyph-orientation-vertical',
'image-rendering',
'letter-spacing',
'lighting-color',
'marker-end',
'marker-mid',
'marker-start',
'mask',
'opacity',
'overflow',
'paint-order',
'pointer-events',
'shape-rendering',
'stop-color',
'stop-opacity',
'stroke-dasharray',
'stroke-dashoffset',
'stroke-linecap',
'stroke-linejoin',
'stroke-miterlimit',
'stroke-opacity',
'stroke-width',
'stroke',
'text-anchor',
'text-decoration',
'text-overflow',
'text-rendering',
'transform-origin',
'transform',
'unicode-bidi',
'vector-effect',
'visibility',
'word-spacing',
'writing-mode',
]),
xlink: new Set([
'xlink:actuate',
'xlink:arcrole',
'xlink:href',
'xlink:role',
'xlink:show',
'xlink:title',
'xlink:type',
]),
documentEvent: new Set([
'onabort',
'onerror',
'onresize',
'onscroll',
'onunload',
'onzoom',
]),
documentElementEvent: new Set(['oncopy', 'oncut', 'onpaste']),
globalEvent: new Set([
'oncancel',
'oncanplay',
'oncanplaythrough',
'onchange',
'onclick',
'onclose',
'oncuechange',
'ondblclick',
'ondrag',
'ondragend',
'ondragenter',
'ondragleave',
'ondragover',
'ondragstart',
'ondrop',
'ondurationchange',
'onemptied',
'onended',
'onerror',
'onfocus',
'oninput',
'oninvalid',
'onkeydown',
'onkeypress',
'onkeyup',
'onload',
'onloadeddata',
'onloadedmetadata',
'onloadstart',
'onmousedown',
'onmouseenter',
'onmouseleave',
'onmousemove',
'onmouseout',
'onmouseover',
'onmouseup',
'onmousewheel',
'onpause',
'onplay',
'onplaying',
'onprogress',
'onratechange',
'onreset',
'onresize',
'onscroll',
'onseeked',
'onseeking',
'onselect',
'onshow',
'onstalled',
'onsubmit',
'onsuspend',
'ontimeupdate',
'ontoggle',
'onvolumechange',
'onwaiting',
]),
filterPrimitive: new Set(['x', 'y', 'width', 'height', 'result']),
transferFunction: new Set([
'amplitude',
'exponent',
'intercept',
'offset',
'slope',
'tableValues',
'type',
]),
};
/**
* @type {Record<string, Record<string, string>>}
*/
exports.attrsGroupsDefaults = {
core: { 'xml:space': 'default' },
presentation: {
clip: 'auto',
'clip-path': 'none',
'clip-rule': 'nonzero',
mask: 'none',
opacity: '1',
'stop-color': '#000',
'stop-opacity': '1',
'fill-opacity': '1',
'fill-rule': 'nonzero',
fill: '#000',
stroke: 'none',
'stroke-width': '1',
'stroke-linecap': 'butt',
'stroke-linejoin': 'miter',
'stroke-miterlimit': '4',
'stroke-dasharray': 'none',
'stroke-dashoffset': '0',
'stroke-opacity': '1',
'paint-order': 'normal',
'vector-effect': 'none',
display: 'inline',
visibility: 'visible',
'marker-start': 'none',
'marker-mid': 'none',
'marker-end': 'none',
'color-interpolation': 'sRGB',
'color-interpolation-filters': 'linearRGB',
'color-rendering': 'auto',
'shape-rendering': 'auto',
'text-rendering': 'auto',
'image-rendering': 'auto',
'font-style': 'normal',
'font-variant': 'normal',
'font-weight': 'normal',
'font-stretch': 'normal',
'font-size': 'medium',
'font-size-adjust': 'none',
kerning: 'auto',
'letter-spacing': 'normal',
'word-spacing': 'normal',
'text-decoration': 'none',
'text-anchor': 'start',
'text-overflow': 'clip',
'writing-mode': 'lr-tb',
'glyph-orientation-vertical': 'auto',
'glyph-orientation-horizontal': '0deg',
direction: 'ltr',
'unicode-bidi': 'normal',
'dominant-baseline': 'auto',
'alignment-baseline': 'baseline',
'baseline-shift': 'baseline',
},
transferFunction: {
slope: '1',
intercept: '0',
amplitude: '1',
exponent: '1',
offset: '0',
},
};
/**
* @type {Record<string, {
* attrsGroups: Set<string>,
* attrs?: Set<string>,
* defaults?: Record<string, string>,
* contentGroups?: Set<string>,
* content?: Set<string>,
* }>}
* @see https://www.w3.org/TR/SVG11/eltindex.html
*/
exports.elems = {
a: {
attrsGroups: new Set([
'conditionalProcessing',
'core',
'graphicalEvent',
'presentation',
'xlink',
]),
attrs: new Set([
'class',
'externalResourcesRequired',
'style',
'target',
'transform',
]),
defaults: {
target: '_self',
},
contentGroups: new Set([
'animation',
'descriptive',
'paintServer',
'shape',
'structural',
]),
content: new Set([
'a',
'altGlyphDef',
'clipPath',
'color-profile',
'cursor',
'filter',
'font-face',
'font',
'foreignObject',
'image',
'marker',
'mask',
'pattern',
'script',
'style',
'switch',
'text',
'view',
// not spec compliant
'tspan',
]),
},
altGlyph: {
attrsGroups: new Set([
'conditionalProcessing',
'core',
'graphicalEvent',
'presentation',
'xlink',
]),
attrs: new Set([
'class',
'dx',
'dy',
'externalResourcesRequired',
'format',
'glyphRef',
'rotate',
'style',
'x',
'y',
]),
},
altGlyphDef: {
attrsGroups: new Set(['core']),
content: new Set(['glyphRef']),
},
altGlyphItem: {
attrsGroups: new Set(['core']),
content: new Set(['glyphRef', 'altGlyphItem']),
},
animate: {
attrsGroups: new Set([
'animationAddition',
'animationAttributeTarget',
'animationEvent',
'animationTiming',
'animationValue',
'conditionalProcessing',
'core',
'presentation',
'xlink',
]),
attrs: new Set(['externalResourcesRequired']),
contentGroups: new Set(['descriptive']),
},
animateColor: {
attrsGroups: new Set([
'animationAddition',
'animationAttributeTarget',
'animationEvent',
'animationTiming',
'animationValue',
'conditionalProcessing',
'core',
'presentation',
'xlink',
]),
attrs: new Set(['externalResourcesRequired']),
contentGroups: new Set(['descriptive']),
},
animateMotion: {
attrsGroups: new Set([
'animationAddition',
'animationEvent',
'animationTiming',
'animationValue',
'conditionalProcessing',
'core',
'xlink',
]),
attrs: new Set([
'externalResourcesRequired',
'keyPoints',
'origin',
'path',
'rotate',
]),
defaults: {
rotate: '0',
},
contentGroups: new Set(['descriptive']),
content: new Set(['mpath']),
},
animateTransform: {
attrsGroups: new Set([
'animationAddition',
'animationAttributeTarget',
'animationEvent',
'animationTiming',
'animationValue',
'conditionalProcessing',
'core',
'xlink',
]),
attrs: new Set(['externalResourcesRequired', 'type']),
contentGroups: new Set(['descriptive']),
},
circle: {
attrsGroups: new Set([
'conditionalProcessing',
'core',
'graphicalEvent',
'presentation',
]),
attrs: new Set([
'class',
'cx',
'cy',
'externalResourcesRequired',
'r',
'style',
'transform',
]),
defaults: {
cx: '0',
cy: '0',
},
contentGroups: new Set(['animation', 'descriptive']),
},
clipPath: {
attrsGroups: new Set(['conditionalProcessing', 'core', 'presentation']),
attrs: new Set([
'class',
'clipPathUnits',
'externalResourcesRequired',
'style',
'transform',
]),
defaults: {
clipPathUnits: 'userSpaceOnUse',
},
contentGroups: new Set(['animation', 'descriptive', 'shape']),
content: new Set(['text', 'use']),
},
'color-profile': {
attrsGroups: new Set(['core', 'xlink']),
attrs: new Set(['local', 'name', 'rendering-intent']),
defaults: {
name: 'sRGB',
'rendering-intent': 'auto',
},
contentGroups: new Set(['descriptive']),
},
cursor: {
attrsGroups: new Set(['core', 'conditionalProcessing', 'xlink']),
attrs: new Set(['externalResourcesRequired', 'x', 'y']),
defaults: {
x: '0',
y: '0',
},
contentGroups: new Set(['descriptive']),
},
defs: {
attrsGroups: new Set([
'conditionalProcessing',
'core',
'graphicalEvent',
'presentation',
]),
attrs: new Set([
'class',
'externalResourcesRequired',
'style',
'transform',
]),
contentGroups: new Set([
'animation',
'descriptive',
'paintServer',
'shape',
'structural',
]),
content: new Set([
'a',
'altGlyphDef',
'clipPath',
'color-profile',
'cursor',
'filter',
'font-face',
'font',
'foreignObject',
'image',
'marker',
'mask',
'pattern',
'script',
'style',
'switch',
'text',
'view',
]),
},
desc: {
attrsGroups: new Set(['core']),
attrs: new Set(['class', 'style']),
},
ellipse: {
attrsGroups: new Set([
'conditionalProcessing',
'core',
'graphicalEvent',
'presentation',
]),
attrs: new Set([
'class',
'cx',
'cy',
'externalResourcesRequired',
'rx',
'ry',
'style',
'transform',
]),
defaults: {
cx: '0',
cy: '0',
},
contentGroups: new Set(['animation', 'descriptive']),
},
feBlend: {
attrsGroups: new Set(['core', 'presentation', 'filterPrimitive']),
attrs: new Set([
'class',
'style',
// TODO: in - 'If no value is provided and this is the first filter primitive,
// then this filter primitive will use SourceGraphic as its input'
'in',
'in2',
'mode',
]),
defaults: {
mode: 'normal',
},
content: new Set(['animate', 'set']),
},
feColorMatrix: {
attrsGroups: new Set(['core', 'presentation', 'filterPrimitive']),
attrs: new Set(['class', 'style', 'in', 'type', 'values']),
defaults: {
type: 'matrix',
},
content: new Set(['animate', 'set']),
},
feComponentTransfer: {
attrsGroups: new Set(['core', 'presentation', 'filterPrimitive']),
attrs: new Set(['class', 'style', 'in']),
content: new Set(['feFuncA', 'feFuncB', 'feFuncG', 'feFuncR']),
},
feComposite: {
attrsGroups: new Set(['core', 'presentation', 'filterPrimitive']),
attrs: new Set([
'class',
'in',
'in2',
'k1',
'k2',
'k3',
'k4',
'operator',
'style',
]),
defaults: {
operator: 'over',
k1: '0',
k2: '0',
k3: '0',
k4: '0',
},
content: new Set(['animate', 'set']),
},
feConvolveMatrix: {
attrsGroups: new Set(['core', 'presentation', 'filterPrimitive']),
attrs: new Set([
'class',
'in',
'kernelMatrix',
'order',
'style',
// TODO: divisor - 'The default value is the sum of all values in kernelMatrix,
// with the exception that if the sum is zero, then the divisor is set to 1'
'bias',
'divisor',
// TODO: targetX - 'By default, the convolution matrix is centered in X over each
// pixel of the input image (i.e., targetX = floor ( orderX / 2 ))'
'edgeMode',
'targetX',
'targetY',
// TODO: kernelUnitLength - 'The first number is the <dx> value. The second number
// is the <dy> value. If the <dy> value is not specified, it defaults to the same value as <dx>'
'kernelUnitLength',
'preserveAlpha',
]),
defaults: {
order: '3',
bias: '0',
edgeMode: 'duplicate',
preserveAlpha: 'false',
},
content: new Set(['animate', 'set']),
},
feDiffuseLighting: {
attrsGroups: new Set(['core', 'presentation', 'filterPrimitive']),
attrs: new Set([
'class',
'diffuseConstant',
'in',
'kernelUnitLength',
'style',
'surfaceScale',
]),
defaults: {
surfaceScale: '1',
diffuseConstant: '1',
},
contentGroups: new Set(['descriptive']),
content: new Set([
// TODO: 'exactly one light source element, in any order'
'feDistantLight',
'fePointLight',
'feSpotLight',
]),
},
feDisplacementMap: {
attrsGroups: new Set(['core', 'presentation', 'filterPrimitive']),
attrs: new Set([
'class',
'in',
'in2',
'scale',
'style',
'xChannelSelector',
'yChannelSelector',
]),
defaults: {
scale: '0',
xChannelSelector: 'A',
yChannelSelector: 'A',
},
content: new Set(['animate', 'set']),
},
feDistantLight: {
attrsGroups: new Set(['core']),
attrs: new Set(['azimuth', 'elevation']),
defaults: {
azimuth: '0',
elevation: '0',
},
content: new Set(['animate', 'set']),
},
feFlood: {
attrsGroups: new Set(['core', 'presentation', 'filterPrimitive']),
attrs: new Set(['class', 'style']),
content: new Set(['animate', 'animateColor', 'set']),
},
feFuncA: {
attrsGroups: new Set(['core', 'transferFunction']),
content: new Set(['set', 'animate']),
},
feFuncB: {
attrsGroups: new Set(['core', 'transferFunction']),
content: new Set(['set', 'animate']),
},
feFuncG: {
attrsGroups: new Set(['core', 'transferFunction']),
content: new Set(['set', 'animate']),
},
feFuncR: {
attrsGroups: new Set(['core', 'transferFunction']),
content: new Set(['set', 'animate']),
},
feGaussianBlur: {
attrsGroups: new Set(['core', 'presentation', 'filterPrimitive']),
attrs: new Set(['class', 'style', 'in', 'stdDeviation']),
defaults: {
stdDeviation: '0',
},
content: new Set(['set', 'animate']),
},
feImage: {
attrsGroups: new Set(['core', 'presentation', 'filterPrimitive', 'xlink']),
attrs: new Set([
'class',
'externalResourcesRequired',
'href',
'preserveAspectRatio',
'style',
'xlink:href',
]),
defaults: {
preserveAspectRatio: 'xMidYMid meet',
},
content: new Set(['animate', 'animateTransform', 'set']),
},
feMerge: {
attrsGroups: new Set(['core', 'presentation', 'filterPrimitive']),
attrs: new Set(['class', 'style']),
content: new Set(['feMergeNode']),
},
feMergeNode: {
attrsGroups: new Set(['core']),
attrs: new Set(['in']),
content: new Set(['animate', 'set']),
},
feMorphology: {
attrsGroups: new Set(['core', 'presentation', 'filterPrimitive']),
attrs: new Set(['class', 'style', 'in', 'operator', 'radius']),
defaults: {
operator: 'erode',
radius: '0',
},
content: new Set(['animate', 'set']),
},
feOffset: {
attrsGroups: new Set(['core', 'presentation', 'filterPrimitive']),
attrs: new Set(['class', 'style', 'in', 'dx', 'dy']),
defaults: {
dx: '0',
dy: '0',
},
content: new Set(['animate', 'set']),
},
fePointLight: {
attrsGroups: new Set(['core']),
attrs: new Set(['x', 'y', 'z']),
defaults: {
x: '0',
y: '0',
z: '0',
},
content: new Set(['animate', 'set']),
},
feSpecularLighting: {
attrsGroups: new Set(['core', 'presentation', 'filterPrimitive']),
attrs: new Set([
'class',
'in',
'kernelUnitLength',
'specularConstant',
'specularExponent',
'style',
'surfaceScale',
]),
defaults: {
surfaceScale: '1',
specularConstant: '1',
specularExponent: '1',
},
contentGroups: new Set([
'descriptive',
// TODO: exactly one 'light source element'
'lightSource',
]),
},
feSpotLight: {
attrsGroups: new Set(['core']),
attrs: new Set([
'limitingConeAngle',
'pointsAtX',
'pointsAtY',
'pointsAtZ',
'specularExponent',
'x',
'y',
'z',
]),
defaults: {
x: '0',
y: '0',
z: '0',
pointsAtX: '0',
pointsAtY: '0',
pointsAtZ: '0',
specularExponent: '1',
},
content: new Set(['animate', 'set']),
},
feTile: {
attrsGroups: new Set(['core', 'presentation', 'filterPrimitive']),
attrs: new Set(['class', 'style', 'in']),
content: new Set(['animate', 'set']),
},
feTurbulence: {
attrsGroups: new Set(['core', 'presentation', 'filterPrimitive']),
attrs: new Set([
'baseFrequency',
'class',
'numOctaves',
'seed',
'stitchTiles',
'style',
'type',
]),
defaults: {
baseFrequency: '0',
numOctaves: '1',
seed: '0',
stitchTiles: 'noStitch',
type: 'turbulence',
},
content: new Set(['animate', 'set']),
},
filter: {
attrsGroups: new Set(['core', 'presentation', 'xlink']),
attrs: new Set([
'class',
'externalResourcesRequired',
'filterRes',
'filterUnits',
'height',
'href',
'primitiveUnits',
'style',
'width',
'x',
'xlink:href',
'y',
]),
defaults: {
primitiveUnits: 'userSpaceOnUse',
x: '-10%',
y: '-10%',
width: '120%',
height: '120%',
},
contentGroups: new Set(['descriptive', 'filterPrimitive']),
content: new Set(['animate', 'set']),
},
font: {
attrsGroups: new Set(['core', 'presentation']),
attrs: new Set([
'class',
'externalResourcesRequired',
'horiz-adv-x',
'horiz-origin-x',
'horiz-origin-y',
'style',
'vert-adv-y',
'vert-origin-x',
'vert-origin-y',
]),
defaults: {
'horiz-origin-x': '0',
'horiz-origin-y': '0',
},
contentGroups: new Set(['descriptive']),
content: new Set(['font-face', 'glyph', 'hkern', 'missing-glyph', 'vkern']),
},
'font-face': {
attrsGroups: new Set(['core']),
attrs: new Set([
'font-family',
'font-style',
'font-variant',
'font-weight',
'font-stretch',
'font-size',
'unicode-range',
'units-per-em',
'panose-1',
'stemv',
'stemh',
'slope',
'cap-height',
'x-height',
'accent-height',
'ascent',
'descent',
'widths',
'bbox',
'ideographic',
'alphabetic',
'mathematical',
'hanging',
'v-ideographic',
'v-alphabetic',
'v-mathematical',
'v-hanging',
'underline-position',
'underline-thickness',
'strikethrough-position',
'strikethrough-thickness',
'overline-position',
'overline-thickness',
]),
defaults: {
'font-style': 'all',
'font-variant': 'normal',
'font-weight': 'all',
'font-stretch': 'normal',
'unicode-range': 'U+0-10FFFF',
'units-per-em': '1000',
'panose-1': '0 0 0 0 0 0 0 0 0 0',
slope: '0',
},
contentGroups: new Set(['descriptive']),
content: new Set([
// TODO: "at most one 'font-face-src' element"
'font-face-src',
]),
},
// TODO: empty content
'font-face-format': {
attrsGroups: new Set(['core']),
attrs: new Set(['string']),
},
'font-face-name': {
attrsGroups: new Set(['core']),
attrs: new Set(['name']),
},
'font-face-src': {
attrsGroups: new Set(['core']),
content: new Set(['font-face-name', 'font-face-uri']),
},
'font-face-uri': {
attrsGroups: new Set(['core', 'xlink']),
attrs: new Set(['href', 'xlink:href']),
content: new Set(['font-face-format']),
},
foreignObject: {
attrsGroups: new Set([
'conditionalProcessing',
'core',
'graphicalEvent',
'presentation',
]),
attrs: new Set([
'class',
'externalResourcesRequired',
'height',
'style',
'transform',
'width',
'x',
'y',
]),
defaults: {
x: '0',
y: '0',
},
},
g: {
attrsGroups: new Set([
'conditionalProcessing',
'core',
'graphicalEvent',
'presentation',
]),
attrs: new Set([
'class',
'externalResourcesRequired',
'style',
'transform',
]),
contentGroups: new Set([
'animation',
'descriptive',
'paintServer',
'shape',
'structural',
]),
content: new Set([
'a',
'altGlyphDef',
'clipPath',
'color-profile',
'cursor',
'filter',
'font-face',
'font',
'foreignObject',
'image',
'marker',
'mask',
'pattern',
'script',
'style',
'switch',
'text',
'view',
]),
},
glyph: {
attrsGroups: new Set(['core', 'presentation']),
attrs: new Set([
'arabic-form',
'class',
'd',
'glyph-name',
'horiz-adv-x',
'lang',
'orientation',
'style',
'unicode',
'vert-adv-y',
'vert-origin-x',
'vert-origin-y',
]),
defaults: {
'arabic-form': 'initial',
},
contentGroups: new Set([
'animation',
'descriptive',
'paintServer',
'shape',
'structural',
]),
content: new Set([
'a',
'altGlyphDef',
'clipPath',
'color-profile',
'cursor',
'filter',
'font-face',
'font',
'foreignObject',
'image',
'marker',
'mask',
'pattern',
'script',
'style',
'switch',
'text',
'view',
]),
},
glyphRef: {
attrsGroups: new Set(['core', 'presentation']),
attrs: new Set([
'class',
'd',
'horiz-adv-x',
'style',
'vert-adv-y',
'vert-origin-x',
'vert-origin-y',
]),
contentGroups: new Set([
'animation',
'descriptive',
'paintServer',
'shape',
'structural',
]),
content: new Set([
'a',
'altGlyphDef',
'clipPath',
'color-profile',
'cursor',
'filter',
'font-face',
'font',
'foreignObject',
'image',
'marker',
'mask',
'pattern',
'script',
'style',
'switch',
'text',
'view',
]),
},
hatch: {
attrsGroups: new Set(['core', 'presentation', 'xlink']),
attrs: new Set([
'class',
'hatchContentUnits',
'hatchUnits',
'pitch',
'rotate',
'style',
'transform',
'x',
'y',
]),
defaults: {
hatchUnits: 'objectBoundingBox',
hatchContentUnits: 'userSpaceOnUse',
x: '0',
y: '0',
pitch: '0',
rotate: '0',
},
contentGroups: new Set(['animation', 'descriptive']),
content: new Set(['hatchPath']),
},
hatchPath: {
attrsGroups: new Set(['core', 'presentation', 'xlink']),
attrs: new Set(['class', 'style', 'd', 'offset']),
defaults: {
offset: '0',
},
contentGroups: new Set(['animation', 'descriptive']),
},
hkern: {
attrsGroups: new Set(['core']),
attrs: new Set(['u1', 'g1', 'u2', 'g2', 'k']),
},
image: {
attrsGroups: new Set([
'conditionalProcessing',
'core',
'graphicalEvent',
'presentation',
'xlink',
]),
attrs: new Set([
'class',
'externalResourcesRequired',
'height',
'href',
'preserveAspectRatio',
'style',
'transform',
'width',
'x',
'xlink:href',
'y',
]),
defaults: {
x: '0',
y: '0',
preserveAspectRatio: 'xMidYMid meet',
},
contentGroups: new Set(['animation', 'descriptive']),
},
line: {
attrsGroups: new Set([
'conditionalProcessing',
'core',
'graphicalEvent',
'presentation',
]),
attrs: new Set([
'class',
'externalResourcesRequired',
'style',
'transform',
'x1',
'x2',
'y1',
'y2',
]),
defaults: {
x1: '0',
y1: '0',
x2: '0',
y2: '0',
},
contentGroups: new Set(['animation', 'descriptive']),
},
linearGradient: {
attrsGroups: new Set(['core', 'presentation', 'xlink']),
attrs: new Set([
'class',
'externalResourcesRequired',
'gradientTransform',
'gradientUnits',
'href',
'spreadMethod',
'style',
'x1',
'x2',
'xlink:href',
'y1',
'y2',
]),
defaults: {
x1: '0',
y1: '0',
x2: '100%',
y2: '0',
spreadMethod: 'pad',
},
contentGroups: new Set(['descriptive']),
content: new Set(['animate', 'animateTransform', 'set', 'stop']),
},
marker: {
attrsGroups: new Set(['core', 'presentation']),
attrs: new Set([
'class',
'externalResourcesRequired',
'markerHeight',
'markerUnits',
'markerWidth',
'orient',
'preserveAspectRatio',
'refX',
'refY',
'style',
'viewBox',
]),
defaults: {
markerUnits: 'strokeWidth',
refX: '0',
refY: '0',
markerWidth: '3',
markerHeight: '3',
},
contentGroups: new Set([
'animation',
'descriptive',
'paintServer',
'shape',
'structural',
]),
content: new Set([
'a',
'altGlyphDef',
'clipPath',
'color-profile',
'cursor',
'filter',
'font-face',
'font',
'foreignObject',
'image',
'marker',
'mask',
'pattern',
'script',
'style',
'switch',
'text',
'view',
]),
},
mask: {
attrsGroups: new Set(['conditionalProcessing', 'core', 'presentation']),
attrs: new Set([
'class',
'externalResourcesRequired',
'height',
'mask-type',
'maskContentUnits',
'maskUnits',
'style',
'width',
'x',
'y',
]),
defaults: {
maskUnits: 'objectBoundingBox',
maskContentUnits: 'userSpaceOnUse',
x: '-10%',
y: '-10%',
width: '120%',
height: '120%',
},
contentGroups: new Set([
'animation',
'descriptive',
'paintServer',
'shape',
'structural',
]),
content: new Set([
'a',
'altGlyphDef',
'clipPath',
'color-profile',
'cursor',
'filter',
'font-face',
'font',
'foreignObject',
'image',
'marker',
'mask',
'pattern',
'script',
'style',
'switch',
'text',
'view',
]),
},
metadata: {
attrsGroups: new Set(['core']),
},
'missing-glyph': {
attrsGroups: new Set(['core', 'presentation']),
attrs: new Set([
'class',
'd',
'horiz-adv-x',
'style',
'vert-adv-y',
'vert-origin-x',
'vert-origin-y',
]),
contentGroups: new Set([
'animation',
'descriptive',
'paintServer',
'shape',
'structural',
]),
content: new Set([
'a',
'altGlyphDef',
'clipPath',
'color-profile',
'cursor',
'filter',
'font-face',
'font',
'foreignObject',
'image',
'marker',
'mask',
'pattern',
'script',
'style',
'switch',
'text',
'view',
]),
},
mpath: {
attrsGroups: new Set(['core', 'xlink']),
attrs: new Set(['externalResourcesRequired', 'href', 'xlink:href']),
contentGroups: new Set(['descriptive']),
},
path: {
attrsGroups: new Set([
'conditionalProcessing',
'core',
'graphicalEvent',
'presentation',
]),
attrs: new Set([
'class',
'd',
'externalResourcesRequired',
'pathLength',
'style',
'transform',
]),
contentGroups: new Set(['animation', 'descriptive']),
},
pattern: {
attrsGroups: new Set([
'conditionalProcessing',
'core',
'presentation',
'xlink',
]),
attrs: new Set([
'class',
'externalResourcesRequired',
'height',
'href',
'patternContentUnits',
'patternTransform',
'patternUnits',
'preserveAspectRatio',
'style',
'viewBox',
'width',
'x',
'xlink:href',
'y',
]),
defaults: {
patternUnits: 'objectBoundingBox',
patternContentUnits: 'userSpaceOnUse',
x: '0',
y: '0',
width: '0',
height: '0',
preserveAspectRatio: 'xMidYMid meet',
},
contentGroups: new Set([
'animation',
'descriptive',
'paintServer',
'shape',
'structural',
]),
content: new Set([
'a',
'altGlyphDef',
'clipPath',
'color-profile',
'cursor',
'filter',
'font-face',
'font',
'foreignObject',
'image',
'marker',
'mask',
'pattern',
'script',
'style',
'switch',
'text',
'view',
]),
},
polygon: {
attrsGroups: new Set([
'conditionalProcessing',
'core',
'graphicalEvent',
'presentation',
]),
attrs: new Set([
'class',
'externalResourcesRequired',
'points',
'style',
'transform',
]),
contentGroups: new Set(['animation', 'descriptive']),
},
polyline: {
attrsGroups: new Set([
'conditionalProcessing',
'core',
'graphicalEvent',
'presentation',
]),
attrs: new Set([
'class',
'externalResourcesRequired',
'points',
'style',
'transform',
]),
contentGroups: new Set(['animation', 'descriptive']),
},
radialGradient: {
attrsGroups: new Set(['core', 'presentation', 'xlink']),
attrs: new Set([
'class',
'cx',
'cy',
'externalResourcesRequired',
'fr',
'fx',
'fy',
'gradientTransform',
'gradientUnits',
'href',
'r',
'spreadMethod',
'style',
'xlink:href',
]),
defaults: {
gradientUnits: 'objectBoundingBox',
cx: '50%',
cy: '50%',
r: '50%',
},
contentGroups: new Set(['descriptive']),
content: new Set(['animate', 'animateTransform', 'set', 'stop']),
},
meshGradient: {
attrsGroups: new Set(['core', 'presentation', 'xlink']),
attrs: new Set(['class', 'style', 'x', 'y', 'gradientUnits', 'transform']),
contentGroups: new Set(['descriptive', 'paintServer', 'animation']),
content: new Set(['meshRow']),
},
meshRow: {
attrsGroups: new Set(['core', 'presentation']),
attrs: new Set(['class', 'style']),
contentGroups: new Set(['descriptive']),
content: new Set(['meshPatch']),
},
meshPatch: {
attrsGroups: new Set(['core', 'presentation']),
attrs: new Set(['class', 'style']),
contentGroups: new Set(['descriptive']),
content: new Set(['stop']),
},
rect: {
attrsGroups: new Set([
'conditionalProcessing',
'core',
'graphicalEvent',
'presentation',
]),
attrs: new Set([
'class',
'externalResourcesRequired',
'height',
'rx',
'ry',
'style',
'transform',
'width',
'x',
'y',
]),
defaults: {
x: '0',
y: '0',
},
contentGroups: new Set(['animation', 'descriptive']),
},
script: {
attrsGroups: new Set(['core', 'xlink']),
attrs: new Set(['externalResourcesRequired', 'type', 'href', 'xlink:href']),
},
set: {
attrsGroups: new Set([
'animation',
'animationAttributeTarget',
'animationTiming',
'conditionalProcessing',
'core',
'xlink',
]),
attrs: new Set(['externalResourcesRequired', 'to']),
contentGroups: new Set(['descriptive']),
},
solidColor: {
attrsGroups: new Set(['core', 'presentation']),
attrs: new Set(['class', 'style']),
contentGroups: new Set(['paintServer']),
},
stop: {
attrsGroups: new Set(['core', 'presentation']),
attrs: new Set(['class', 'style', 'offset', 'path']),
content: new Set(['animate', 'animateColor', 'set']),
},
style: {
attrsGroups: new Set(['core']),
attrs: new Set(['type', 'media', 'title']),
defaults: {
type: 'text/css',
},
},
svg: {
attrsGroups: new Set([
'conditionalProcessing',
'core',
'documentEvent',
'graphicalEvent',
'presentation',
]),
attrs: new Set([
'baseProfile',
'class',
'contentScriptType',
'contentStyleType',
'height',
'preserveAspectRatio',
'style',
'version',
'viewBox',
'width',
'x',
'y',
'zoomAndPan',
]),
defaults: {
x: '0',
y: '0',
width: '100%',
height: '100%',
preserveAspectRatio: 'xMidYMid meet',
zoomAndPan: 'magnify',
version: '1.1',
baseProfile: 'none',
contentScriptType: 'application/ecmascript',
contentStyleType: 'text/css',
},
contentGroups: new Set([
'animation',
'descriptive',
'paintServer',
'shape',
'structural',
]),
content: new Set([
'a',
'altGlyphDef',
'clipPath',
'color-profile',
'cursor',
'filter',
'font-face',
'font',
'foreignObject',
'image',
'marker',
'mask',
'pattern',
'script',
'style',
'switch',
'text',
'view',
]),
},
switch: {
attrsGroups: new Set([
'conditionalProcessing',
'core',
'graphicalEvent',
'presentation',
]),
attrs: new Set([
'class',
'externalResourcesRequired',
'style',
'transform',
]),
contentGroups: new Set(['animation', 'descriptive', 'shape']),
content: new Set([
'a',
'foreignObject',
'g',
'image',
'svg',
'switch',
'text',
'use',
]),
},
symbol: {
attrsGroups: new Set(['core', 'graphicalEvent', 'presentation']),
attrs: new Set([
'class',
'externalResourcesRequired',
'preserveAspectRatio',
'refX',
'refY',
'style',
'viewBox',
]),
defaults: {
refX: '0',
refY: '0',
},
contentGroups: new Set([
'animation',
'descriptive',
'paintServer',
'shape',
'structural',
]),
content: new Set([
'a',
'altGlyphDef',
'clipPath',
'color-profile',
'cursor',
'filter',
'font-face',
'font',
'foreignObject',
'image',
'marker',
'mask',
'pattern',
'script',
'style',
'switch',
'text',
'view',
]),
},
text: {
attrsGroups: new Set([
'conditionalProcessing',
'core',
'graphicalEvent',
'presentation',
]),
attrs: new Set([
'class',
'dx',
'dy',
'externalResourcesRequired',
'lengthAdjust',
'rotate',
'style',
'textLength',
'transform',
'x',
'y',
]),
defaults: {
x: '0',
y: '0',
lengthAdjust: 'spacing',
},
contentGroups: new Set(['animation', 'descriptive', 'textContentChild']),
content: new Set(['a']),
},
textPath: {
attrsGroups: new Set([
'conditionalProcessing',
'core',
'graphicalEvent',
'presentation',
'xlink',
]),
attrs: new Set([
'class',
'd',
'externalResourcesRequired',
'href',
'method',
'spacing',
'startOffset',
'style',
'xlink:href',
]),
defaults: {
startOffset: '0',
method: 'align',
spacing: 'exact',
},
contentGroups: new Set(['descriptive']),
content: new Set([
'a',
'altGlyph',
'animate',
'animateColor',
'set',
'tref',
'tspan',
]),
},
title: {
attrsGroups: new Set(['core']),
attrs: new Set(['class', 'style']),
},
tref: {
attrsGroups: new Set([
'conditionalProcessing',
'core',
'graphicalEvent',
'presentation',
'xlink',
]),
attrs: new Set([
'class',
'externalResourcesRequired',
'href',
'style',
'xlink:href',
]),
contentGroups: new Set(['descriptive']),
content: new Set(['animate', 'animateColor', 'set']),
},
tspan: {
attrsGroups: new Set([
'conditionalProcessing',
'core',
'graphicalEvent',
'presentation',
]),
attrs: new Set([
'class',
'dx',
'dy',
'externalResourcesRequired',
'lengthAdjust',
'rotate',
'style',
'textLength',
'x',
'y',
]),
contentGroups: new Set(['descriptive']),
content: new Set([
'a',
'altGlyph',
'animate',
'animateColor',
'set',
'tref',
'tspan',
]),
},
use: {
attrsGroups: new Set([
'conditionalProcessing',
'core',
'graphicalEvent',
'presentation',
'xlink',
]),
attrs: new Set([
'class',
'externalResourcesRequired',
'height',
'href',
'style',
'transform',
'width',
'x',
'xlink:href',
'y',
]),
defaults: {
x: '0',
y: '0',
},
contentGroups: new Set(['animation', 'descriptive']),
},
view: {
attrsGroups: new Set(['core']),
attrs: new Set([
'externalResourcesRequired',
'preserveAspectRatio',
'viewBox',
'viewTarget',
'zoomAndPan',
]),
contentGroups: new Set(['descriptive']),
},
vkern: {
attrsGroups: new Set(['core']),
attrs: new Set(['u1', 'g1', 'u2', 'g2', 'k']),
},
};
// https://wiki.inkscape.org/wiki/index.php/Inkscape-specific_XML_attributes
exports.editorNamespaces = new Set([
'http://creativecommons.org/ns#',
'http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd',
'http://ns.adobe.com/AdobeIllustrator/10.0/',
'http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/',
'http://ns.adobe.com/Extensibility/1.0/',
'http://ns.adobe.com/Flows/1.0/',
'http://ns.adobe.com/GenericCustomNamespace/1.0/',
'http://ns.adobe.com/Graphs/1.0/',
'http://ns.adobe.com/ImageReplacement/1.0/',
'http://ns.adobe.com/SaveForWeb/1.0/',
'http://ns.adobe.com/Variables/1.0/',
'http://ns.adobe.com/XPath/1.0/',
'http://purl.org/dc/elements/1.1/',
'http://schemas.microsoft.com/visio/2003/SVGExtensions/',
'http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd',
'http://taptrix.com/vectorillustrator/svg_extensions',
'http://www.bohemiancoding.com/sketch/ns',
'http://www.figma.com/figma/ns',
'http://www.inkscape.org/namespaces/inkscape',
'http://www.serif.com/',
'http://www.vector.evaxdesign.sk',
'http://www.w3.org/1999/02/22-rdf-syntax-ns#',
]);
/**
* @see https://www.w3.org/TR/SVG11/linking.html#processingIRI
*/
exports.referencesProps = new Set([
'clip-path',
'color-profile',
'fill',
'filter',
'marker-end',
'marker-mid',
'marker-start',
'mask',
'stroke',
'style',
]);
/**
* @see https://www.w3.org/TR/SVG11/propidx.html
*/
exports.inheritableAttrs = new Set([
'clip-rule',
'color-interpolation-filters',
'color-interpolation',
'color-profile',
'color-rendering',
'color',
'cursor',
'direction',
'dominant-baseline',
'fill-opacity',
'fill-rule',
'fill',
'font-family',
'font-size-adjust',
'font-size',
'font-stretch',
'font-style',
'font-variant',
'font-weight',
'font',
'glyph-orientation-horizontal',
'glyph-orientation-vertical',
'image-rendering',
'letter-spacing',
'marker-end',
'marker-mid',
'marker-start',
'marker',
'paint-order',
'pointer-events',
'shape-rendering',
'stroke-dasharray',
'stroke-dashoffset',
'stroke-linecap',
'stroke-linejoin',
'stroke-miterlimit',
'stroke-opacity',
'stroke-width',
'stroke',
'text-anchor',
'text-rendering',
'transform',
'visibility',
'word-spacing',
'writing-mode',
]);
exports.presentationNonInheritableGroupAttrs = new Set([
'clip-path',
'display',
'filter',
'mask',
'opacity',
'text-decoration',
'transform',
'unicode-bidi',
]);
/**
* https://www.w3.org/TR/SVG11/single-page.html#types-ColorKeywords
*
* @type {Record<string, string>}
*/
exports.colorsNames = {
aliceblue: '#f0f8ff',
antiquewhite: '#faebd7',
aqua: '#0ff',
aquamarine: '#7fffd4',
azure: '#f0ffff',
beige: '#f5f5dc',
bisque: '#ffe4c4',
black: '#000',
blanchedalmond: '#ffebcd',
blue: '#00f',
blueviolet: '#8a2be2',
brown: '#a52a2a',
burlywood: '#deb887',
cadetblue: '#5f9ea0',
chartreuse: '#7fff00',
chocolate: '#d2691e',
coral: '#ff7f50',
cornflowerblue: '#6495ed',
cornsilk: '#fff8dc',
crimson: '#dc143c',
cyan: '#0ff',
darkblue: '#00008b',
darkcyan: '#008b8b',
darkgoldenrod: '#b8860b',
darkgray: '#a9a9a9',
darkgreen: '#006400',
darkgrey: '#a9a9a9',
darkkhaki: '#bdb76b',
darkmagenta: '#8b008b',
darkolivegreen: '#556b2f',
darkorange: '#ff8c00',
darkorchid: '#9932cc',
darkred: '#8b0000',
darksalmon: '#e9967a',
darkseagreen: '#8fbc8f',
darkslateblue: '#483d8b',
darkslategray: '#2f4f4f',
darkslategrey: '#2f4f4f',
darkturquoise: '#00ced1',
darkviolet: '#9400d3',
deeppink: '#ff1493',
deepskyblue: '#00bfff',
dimgray: '#696969',
dimgrey: '#696969',
dodgerblue: '#1e90ff',
firebrick: '#b22222',
floralwhite: '#fffaf0',
forestgreen: '#228b22',
fuchsia: '#f0f',
gainsboro: '#dcdcdc',
ghostwhite: '#f8f8ff',
gold: '#ffd700',
goldenrod: '#daa520',
gray: '#808080',
green: '#008000',
greenyellow: '#adff2f',
grey: '#808080',
honeydew: '#f0fff0',
hotpink: '#ff69b4',
indianred: '#cd5c5c',
indigo: '#4b0082',
ivory: '#fffff0',
khaki: '#f0e68c',
lavender: '#e6e6fa',
lavenderblush: '#fff0f5',
lawngreen: '#7cfc00',
lemonchiffon: '#fffacd',
lightblue: '#add8e6',
lightcoral: '#f08080',
lightcyan: '#e0ffff',
lightgoldenrodyellow: '#fafad2',
lightgray: '#d3d3d3',
lightgreen: '#90ee90',
lightgrey: '#d3d3d3',
lightpink: '#ffb6c1',
lightsalmon: '#ffa07a',
lightseagreen: '#20b2aa',
lightskyblue: '#87cefa',
lightslategray: '#789',
lightslategrey: '#789',
lightsteelblue: '#b0c4de',
lightyellow: '#ffffe0',
lime: '#0f0',
limegreen: '#32cd32',
linen: '#faf0e6',
magenta: '#f0f',
maroon: '#800000',
mediumaquamarine: '#66cdaa',
mediumblue: '#0000cd',
mediumorchid: '#ba55d3',
mediumpurple: '#9370db',
mediumseagreen: '#3cb371',
mediumslateblue: '#7b68ee',
mediumspringgreen: '#00fa9a',
mediumturquoise: '#48d1cc',
mediumvioletred: '#c71585',
midnightblue: '#191970',
mintcream: '#f5fffa',
mistyrose: '#ffe4e1',
moccasin: '#ffe4b5',
navajowhite: '#ffdead',
navy: '#000080',
oldlace: '#fdf5e6',
olive: '#808000',
olivedrab: '#6b8e23',
orange: '#ffa500',
orangered: '#ff4500',
orchid: '#da70d6',
palegoldenrod: '#eee8aa',
palegreen: '#98fb98',
paleturquoise: '#afeeee',
palevioletred: '#db7093',
papayawhip: '#ffefd5',
peachpuff: '#ffdab9',
peru: '#cd853f',
pink: '#ffc0cb',
plum: '#dda0dd',
powderblue: '#b0e0e6',
purple: '#800080',
rebeccapurple: '#639',
red: '#f00',
rosybrown: '#bc8f8f',
royalblue: '#4169e1',
saddlebrown: '#8b4513',
salmon: '#fa8072',
sandybrown: '#f4a460',
seagreen: '#2e8b57',
seashell: '#fff5ee',
sienna: '#a0522d',
silver: '#c0c0c0',
skyblue: '#87ceeb',
slateblue: '#6a5acd',
slategray: '#708090',
slategrey: '#708090',
snow: '#fffafa',
springgreen: '#00ff7f',
steelblue: '#4682b4',
tan: '#d2b48c',
teal: '#008080',
thistle: '#d8bfd8',
tomato: '#ff6347',
turquoise: '#40e0d0',
violet: '#ee82ee',
wheat: '#f5deb3',
white: '#fff',
whitesmoke: '#f5f5f5',
yellow: '#ff0',
yellowgreen: '#9acd32',
};
/**
* @type {Record<string, string>}
*/
exports.colorsShortNames = {
'#f0ffff': 'azure',
'#f5f5dc': 'beige',
'#ffe4c4': 'bisque',
'#a52a2a': 'brown',
'#ff7f50': 'coral',
'#ffd700': 'gold',
'#808080': 'gray',
'#008000': 'green',
'#4b0082': 'indigo',
'#fffff0': 'ivory',
'#f0e68c': 'khaki',
'#faf0e6': 'linen',
'#800000': 'maroon',
'#000080': 'navy',
'#808000': 'olive',
'#ffa500': 'orange',
'#da70d6': 'orchid',
'#cd853f': 'peru',
'#ffc0cb': 'pink',
'#dda0dd': 'plum',
'#800080': 'purple',
'#f00': 'red',
'#ff0000': 'red',
'#fa8072': 'salmon',
'#a0522d': 'sienna',
'#c0c0c0': 'silver',
'#fffafa': 'snow',
'#d2b48c': 'tan',
'#008080': 'teal',
'#ff6347': 'tomato',
'#ee82ee': 'violet',
'#f5deb3': 'wheat',
};
/**
* @see https://www.w3.org/TR/SVG11/single-page.html#types-DataTypeColor
*/
exports.colorsProps = new Set([
'color',
'fill',
'flood-color',
'lighting-color',
'stop-color',
'stroke',
]);
/** @see https://developer.mozilla.org/docs/Web/CSS/Pseudo-classes */
exports.pseudoClasses = {
displayState: new Set(['fullscreen', 'modal', 'picture-in-picture']),
input: new Set([
'autofill',
'blank',
'checked',
'default',
'disabled',
'enabled',
'in-range',
'indetermined',
'invalid',
'optional',
'out-of-range',
'placeholder-shown',
'read-only',
'read-write',
'required',
'user-invalid',
'valid',
]),
linguistic: new Set(['dir', 'lang']),
location: new Set([
'any-link',
'link',
'local-link',
'scope',
'target-within',
'target',
'visited',
]),
resourceState: new Set(['playing', 'paused']),
timeDimensional: new Set(['current', 'past', 'future']),
treeStructural: new Set([
'empty',
'first-child',
'first-of-type',
'last-child',
'last-of-type',
'nth-child',
'nth-last-child',
'nth-last-of-type',
'nth-of-type',
'only-child',
'only-of-type',
'root',
]),
userAction: new Set([
'active',
'focus-visible',
'focus-within',
'focus',
'hover',
]),
functional: new Set(['is', 'not', 'where', 'has']),
};