From f7e1d526f15c041be1adf1a5e75a8850e9cffe32 Mon Sep 17 00:00:00 2001 From: Thierry Bela Nanga Date: Mon, 2 Sep 2024 03:04:04 -0400 Subject: [PATCH 01/10] fix merging rules, css selector validation, experimental prefix removal #43 --- .gitignore | 1 + CHANGELOG.md | 16 + README.md | 7 +- dist/config.json.js | 4 +- dist/index-umd-web.js | 53656 +++++++++++++++- dist/index.cjs | 53656 +++++++++++++++- dist/index.d.ts | 106 +- dist/lib/ast/expand.js | 3 +- dist/lib/ast/features/index.js | 1 + dist/lib/ast/features/shorthand.js | 1 + dist/lib/ast/minify.js | 52 +- dist/lib/ast/types.js | 10 + dist/lib/ast/walk.js | 4 +- dist/lib/parser/declaration/list.js | 2 +- dist/lib/parser/declaration/map.js | 13 +- dist/lib/parser/declaration/set.js | 3 +- dist/lib/parser/parse.js | 160 +- dist/lib/parser/tokenize.js | 24 +- dist/lib/parser/utils/config.js | 1 + dist/lib/parser/utils/declaration.js | 3 +- dist/lib/parser/utils/syntax.js | 1 + dist/lib/parser/utils/type.js | 1 + dist/lib/renderer/color/a98rgb.js | 1 + dist/lib/renderer/color/color.js | 1 + dist/lib/renderer/color/colormix.js | 5 +- dist/lib/renderer/color/hex.js | 1 + dist/lib/renderer/color/hsl.js | 1 + dist/lib/renderer/color/hwb.js | 1 + dist/lib/renderer/color/lab.js | 1 + dist/lib/renderer/color/lch.js | 1 + dist/lib/renderer/color/oklab.js | 1 + dist/lib/renderer/color/oklch.js | 1 + dist/lib/renderer/color/p3.js | 1 + dist/lib/renderer/color/rec2020.js | 1 + dist/lib/renderer/color/relativecolor.js | 1 + dist/lib/renderer/color/rgb.js | 1 + dist/lib/renderer/color/srgb.js | 1 + dist/lib/renderer/color/utils/components.js | 1 + dist/lib/renderer/color/utils/constants.js | 1 + dist/lib/renderer/color/xyz.js | 1 + dist/lib/renderer/color/xyzd50.js | 1 + dist/lib/renderer/render.js | 25 +- dist/node/index.js | 1 + dist/web/index.js | 1 + jsr.json | 2 +- package.json | 2 +- src/@types/ast.d.ts | 9 + src/@types/index.d.ts | 4 +- src/@types/token.d.ts | 83 +- src/@types/validation.d.ts | 15 +- src/@types/walker.d.ts | 2 + src/config.json | 6 +- src/lib/ast/features/calc.ts | 2 +- src/lib/ast/features/index.ts | 1 + src/lib/ast/features/inlinecssvariables.ts | 2 +- src/lib/ast/features/prefix.ts | 185 + src/lib/ast/features/shorthand.ts | 2 +- src/lib/ast/minify.ts | 90 +- src/lib/ast/types.ts | 10 + src/lib/ast/walk.ts | 5 +- src/lib/parser/declaration/list.ts | 2 +- src/lib/parser/declaration/map.ts | 12 +- src/lib/parser/declaration/set.ts | 4 +- src/lib/parser/parse.ts | 228 +- src/lib/parser/tokenize.ts | 32 +- src/lib/parser/utils/config.ts | 6 +- src/lib/parser/utils/declaration.ts | 2 +- src/lib/parser/utils/index.ts | 1 - src/lib/renderer/color/colormix.ts | 4 +- src/lib/renderer/render.ts | 46 +- src/lib/renderer/sourcemap/sourcemap.ts | 2 +- src/lib/syntax/index.ts | 2 + src/lib/{parser/utils => syntax}/syntax.ts | 17 +- src/lib/validation/config.json | 52876 +++++++++++++++ src/lib/validation/config.ts | 10 + src/lib/validation/index.ts | 3 + .../lib/validation/parser}/index.ts | 1 + src/lib/validation/parser/parse.ts | 1221 + src/lib/validation/parser/types.ts | 262 + src/lib/validation/selector.ts | 410 + .../sourcemap/line-awesome-sourcemap.css | 2 +- test/specs/code/block.js | 6 +- test/specs/code/index.js | 4 +- test/specs/code/nesting.js | 4 +- test/specs/code/prefix.js | 69 + test/specs/code/validation.js | 73 + test/specs/code/visitors.js | 1 - test/specs/code/walk.js | 1 - tools/shorthand.ts | 16 +- tools/syntax/generate.ts | 73 - tools/validation.ts | 28 + 91 files changed, 163287 insertions(+), 326 deletions(-) create mode 100644 src/lib/ast/features/prefix.ts create mode 100644 src/lib/syntax/index.ts rename src/lib/{parser/utils => syntax}/syntax.ts (97%) create mode 100644 src/lib/validation/config.json create mode 100644 src/lib/validation/config.ts create mode 100644 src/lib/validation/index.ts rename {tools/syntax => src/lib/validation/parser}/index.ts (50%) create mode 100644 src/lib/validation/parser/parse.ts create mode 100644 src/lib/validation/parser/types.ts create mode 100644 src/lib/validation/selector.ts create mode 100644 test/specs/code/prefix.js create mode 100644 test/specs/code/validation.js delete mode 100644 tools/syntax/generate.ts create mode 100644 tools/validation.ts diff --git a/.gitignore b/.gitignore index aa9d7c5b..b289313a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ /errors.txt /syntax.txt /ROADMAP.draft.md +/jsr.json # Logs logs diff --git a/CHANGELOG.md b/CHANGELOG.md index 8d48bc75..b96f55e3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,21 @@ # Changelog +#v0.7.0 + +- [x] fix merging rules +- [ ] experimental CSS prefix removal + - [x] declarations + - [ ] declaration values + - [ ] exclude -webkit-* gradients +- [x] css selector validation + - [x] pseudo element + - [x] partial pseudo class validation. does not validate parameters + - [x] attribute selector + - [x] combinator + - [x] simple selector + - [ ] nested selector +- [ ] strip universal selector when possible + # v0.6.0 - [x] light-dark() color - [x] system color diff --git a/README.md b/README.md index 0b50573b..358fd574 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,7 @@ $ npm install @tbela99/css-parser - inline css variables - remove duplicate properties - flatten @import rules +- partial css validation: only css selector is validated ## Playground @@ -147,7 +148,7 @@ Include ParseOptions and RenderOptions > Sourcemap Options -- src: string, optional. original css file location to be used with sourcemap. +- src: string, optional. original css file location to be used with sourcemap, also used to resolve url(). - sourcemap: boolean, optional. preserve node location data. > Misc Options @@ -155,7 +156,7 @@ Include ParseOptions and RenderOptions - resolveUrls: boolean, optional. resolve css 'url()' according to the parameters 'src' and 'cwd' - resolveImport: boolean, optional. replace @import rule by the content of its referenced stylesheet. - removeCharset: boolean, optional. remove @charset. -- cwd: string, optional. the current working directory. when specified url() are resolved using this value +- cwd: string, optional. destination directory used to resolve url(). - visitor: VisitorNodeMap, optional. node visitor used to transform the ast. - signal: AbortSignal, optional. abort parsing. @@ -179,7 +180,7 @@ Include ParseOptions and RenderOptions - indent: string, optional. css indention string. uses space character by default. - newLine: string, optional. new line character. - output: string, optional. file where to store css. url() are resolved according to the specified value. no file is created though. -- cwd: string, optional. value used as current working directory. when output is not provided, urls are resolved according to this value. +- cwd: string, optional. destination directory used to resolve url(). ## Parsing diff --git a/dist/config.json.js b/dist/config.json.js index 2b34ecdb..ce64e4c7 100644 --- a/dist/config.json.js +++ b/dist/config.json.js @@ -450,7 +450,9 @@ var map = { transition: { shorthand: "transition", multiple: true, - separator: ",", + separator: { + typ: "Comma" + }, pattern: "transition-property transition-duration transition-timing-function transition-delay transition-behavior", keywords: [ "none", diff --git a/dist/index-umd-web.js b/dist/index-umd-web.js index 71bc4e28..e4c46592 100644 --- a/dist/index-umd-web.js +++ b/dist/index-umd-web.js @@ -82,6 +82,16 @@ EnumToken[EnumToken["IdenListTokenType"] = 70] = "IdenListTokenType"; EnumToken[EnumToken["GridTemplateFuncTokenType"] = 71] = "GridTemplateFuncTokenType"; EnumToken[EnumToken["KeyFrameRuleNodeType"] = 72] = "KeyFrameRuleNodeType"; + EnumToken[EnumToken["ClassSelectorTokenType"] = 73] = "ClassSelectorTokenType"; + EnumToken[EnumToken["UniversalSelectorTokenType"] = 74] = "UniversalSelectorTokenType"; + EnumToken[EnumToken["ChildCombinatorTokenType"] = 75] = "ChildCombinatorTokenType"; + EnumToken[EnumToken["DescendantCombinatorTokenType"] = 76] = "DescendantCombinatorTokenType"; + EnumToken[EnumToken["NextSiblingCombinatorTokenType"] = 77] = "NextSiblingCombinatorTokenType"; + EnumToken[EnumToken["SubsequentSiblingCombinatorTokenType"] = 78] = "SubsequentSiblingCombinatorTokenType"; + EnumToken[EnumToken["NestingSelectorTokenType"] = 79] = "NestingSelectorTokenType"; + EnumToken[EnumToken["InvalidRuleTokenType"] = 80] = "InvalidRuleTokenType"; + EnumToken[EnumToken["InvalidClassSelectorTokenType"] = 81] = "InvalidClassSelectorTokenType"; + EnumToken[EnumToken["InvalidAttrTokenType"] = 82] = "InvalidAttrTokenType"; /* aliases */ EnumToken[EnumToken["Time"] = 25] = "Time"; EnumToken[EnumToken["Iden"] = 7] = "Iden"; @@ -3044,7 +3054,7 @@ options.output = options.resolve(options.output, options.cwd).absolute; } if (sourcemap != null) { - result.map = sourcemap.toJSON(); + result.map = sourcemap; } return result; } @@ -3152,6 +3162,10 @@ return `@${data.nam}${data.val === '' ? '' : options.indent || ' '}${data.val}${options.indent}{${options.newLine}` + (children === '' ? '' : indentSub + children + options.newLine) + indent + `}`; } return data.sel + `${options.indent}{${options.newLine}` + (children === '' ? '' : indentSub + children + options.newLine) + indent + `}`; + case exports.EnumToken.InvalidRuleTokenType: + return ''; + default: + throw new Error(`render: unexpected token ${JSON.stringify(data, null, 1)}`); } return ''; } @@ -3225,6 +3239,7 @@ return ' + '; case exports.EnumToken.Sub: return ' - '; + case exports.EnumToken.UniversalSelectorTokenType: case exports.EnumToken.Mul: return '*'; case exports.EnumToken.Div: @@ -3357,7 +3372,7 @@ renderToken(token.r, options, cache, reducer, errors) + (token.attr ? ' ' + token.attr : ''); case exports.EnumToken.NameSpaceAttributeTokenType: - return (token.l == null ? '' : renderToken(token.l, options, cache, reducer, errors) + '|') + + return (token.l == null ? '' : renderToken(token.l, options, cache, reducer, errors)) + '|' + renderToken(token.r, options, cache, reducer, errors); case exports.EnumToken.BlockStartTokenType: return '{'; @@ -3365,6 +3380,8 @@ return '}'; case exports.EnumToken.StartParensTokenType: return '('; + case exports.EnumToken.DelimTokenType: + return '='; case exports.EnumToken.IncludeMatchTokenType: return '~='; case exports.EnumToken.DashMatchTokenType: @@ -3380,6 +3397,7 @@ case exports.EnumToken.LteTokenType: return '<='; case exports.EnumToken.GtTokenType: + case exports.EnumToken.ChildCombinatorTokenType: return '>'; case exports.EnumToken.GteTokenType: return '>='; @@ -3522,12 +3540,20 @@ } case exports.EnumToken.HashTokenType: case exports.EnumToken.IdenTokenType: - case exports.EnumToken.DelimTokenType: case exports.EnumToken.AtRuleTokenType: case exports.EnumToken.StringTokenType: case exports.EnumToken.LiteralTokenType: case exports.EnumToken.DashedIdenTokenType: + case exports.EnumToken.ClassSelectorTokenType: return /* options.minify && 'Pseudo-class' == token.typ && '::' == token.val.slice(0, 2) ? token.val.slice(1) : */ token.val; + case exports.EnumToken.NestingSelectorTokenType: + return '&'; + case exports.EnumToken.InvalidAttrTokenType: + return '[' + token.chi.reduce((acc, curr) => acc + renderToken(curr, options, cache), ''); + case exports.EnumToken.InvalidClassSelectorTokenType: + return token.val; + default: + throw new Error(`render: unexpected token ${JSON.stringify(token, null, 1)}`); } errors?.push({ action: 'ignore', message: `render: unexpected token ${JSON.stringify(token, null, 1)}` }); return ''; @@ -3769,6 +3795,12 @@ while (i < j) { i += codepoint < 0x80 ? 1 : String.fromCodePoint(codepoint).length; codepoint = name.charCodeAt(i); + if (codepoint == REVERSE_SOLIDUS) { + i += codepoint < 0x80 ? 1 : String.fromCodePoint(codepoint).length; + codepoint = name.charCodeAt(i); + i += codepoint < 0x80 ? 1 : String.fromCodePoint(codepoint).length; + continue; + } if (!isIdentCodepoint(codepoint)) { return false; } @@ -4427,7 +4459,9 @@ transition: { shorthand: "transition", multiple: true, - separator: ",", + separator: { + typ: "Comma" + }, pattern: "transition-property transition-duration transition-timing-function transition-delay transition-behavior", keywords: [ "none", @@ -5443,12 +5477,13 @@ shorthand: "background" } }; - var config$1 = { + var config$3 = { properties: properties, map: map }; - const getConfig = () => config$1; + Object.freeze(config$3); + const getConfig$1 = () => config$3; // https://www.w3.org/TR/css-values-4/#math-function const funcList = ['clamp', 'calc']; @@ -5584,7 +5619,7 @@ continue; } if (escapeSequence.trimEnd().length > 0) { - const codepoint = Number(`0x${escapeSequence.trimEnd()}`); + const codepoint = parseInt(escapeSequence, 16); if (codepoint == 0 || // leading surrogate (0xD800 <= codepoint && codepoint <= 0xDBFF) || @@ -5764,9 +5799,22 @@ case '~': case '|': case '$': - if (value == '|' && peek(parseInfo) == '|') { - next(parseInfo); - yield pushToken('', parseInfo, exports.EnumToken.ColumnCombinatorTokenType); + if (buffer.length > 0) { + yield pushToken(buffer, parseInfo); + buffer = ''; + } + if (value == '|') { + if (peek(parseInfo) == '|') { + next(parseInfo); + yield pushToken('', parseInfo, exports.EnumToken.ColumnCombinatorTokenType); + } + else if (peek(parseInfo) == '=') { + buffer += next(parseInfo); + yield pushToken(buffer, parseInfo); + } + else { + yield pushToken('|', parseInfo); + } buffer = ''; break; } @@ -6014,49 +6062,53190 @@ buffer += value; } } - if (buffer !== '') { - yield pushToken(buffer, parseInfo, exports.EnumToken.UrlTokenTokenType); - buffer = ''; - break; + if (buffer !== '') { + yield pushToken(buffer, parseInfo, exports.EnumToken.UrlTokenTokenType); + buffer = ''; + break; + } + break; + } + yield pushToken(buffer, parseInfo); + buffer = ''; + break; + case '[': + case ']': + case '{': + case '}': + case ';': + if (buffer.length > 0) { + yield pushToken(buffer, parseInfo); + buffer = ''; + } + yield pushToken(value, parseInfo); + break; + case '!': + if (buffer.length > 0) { + yield pushToken(buffer, parseInfo); + buffer = ''; + } + if (peek(parseInfo, 9) == 'important') { + yield pushToken('', parseInfo, exports.EnumToken.ImportantTokenType); + next(parseInfo, 9); + buffer = ''; + break; + } + buffer = '!'; + break; + default: + buffer += value; + break; + } + } + if (buffer.length > 0) { + yield pushToken(buffer, parseInfo); + } + // yield pushToken('', EnumToken.EOFTokenType); + } + + var declarations = { + "-ms-accelerator": { + syntax: "false | true", + ast: [ + { + typ: 27, + l: [ + { + typ: 1, + val: "false" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 1, + val: "true" + } + ] + } + ] + }, + "-ms-block-progression": { + syntax: "tb | rl | bt | lr", + ast: [ + { + typ: 27, + l: [ + { + typ: 1, + val: "tb" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "rl" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "bt" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 1, + val: "lr" + } + ] + } + ] + } + ] + } + ] + }, + "-ms-content-zoom-chaining": { + syntax: "none | chained", + ast: [ + { + typ: 27, + l: [ + { + typ: 1, + val: "none" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 1, + val: "chained" + } + ] + } + ] + }, + "-ms-content-zooming": { + syntax: "none | zoom", + ast: [ + { + typ: 27, + l: [ + { + typ: 1, + val: "none" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 1, + val: "zoom" + } + ] + } + ] + }, + "-ms-content-zoom-limit": { + syntax: "<'-ms-content-zoom-limit-min'> <'-ms-content-zoom-limit-max'>", + ast: [ + { + typ: 3, + val: "-ms-content-zoom-limit-min" + }, + { + typ: 20 + }, + { + typ: 3, + val: "-ms-content-zoom-limit-max" + } + ] + }, + "-ms-content-zoom-limit-max": { + syntax: "", + ast: [ + { + typ: 2, + val: "percentage" + } + ] + }, + "-ms-content-zoom-limit-min": { + syntax: "", + ast: [ + { + typ: 2, + val: "percentage" + } + ] + }, + "-ms-content-zoom-snap": { + syntax: "<'-ms-content-zoom-snap-type'> || <'-ms-content-zoom-snap-points'>", + ast: [ + { + typ: 28, + l: [ + { + typ: 3, + val: "-ms-content-zoom-snap-type" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 3, + val: "-ms-content-zoom-snap-points" + } + ] + } + ] + }, + "-ms-content-zoom-snap-points": { + syntax: "snapInterval( , ) | snapList( # )", + ast: [ + { + typ: 27, + l: [ + { + typ: 18, + val: "snapInterval", + chi: [ + { + typ: 2, + val: "percentage" + }, + { + typ: 10 + }, + { + typ: 20 + }, + { + typ: 2, + val: "percentage" + } + ] + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 18, + val: "snapList", + chi: [ + { + typ: 2, + val: "percentage", + isList: true + } + ] + } + ] + } + ] + }, + "-ms-content-zoom-snap-type": { + syntax: "none | proximity | mandatory", + ast: [ + { + typ: 27, + l: [ + { + typ: 1, + val: "none" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "proximity" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 1, + val: "mandatory" + } + ] + } + ] + } + ] + }, + "-ms-filter": { + syntax: "", + ast: [ + { + typ: 2, + val: "string" + } + ] + }, + "-ms-flow-from": { + syntax: "[ none | ]#", + ast: [ + { + typ: 22, + chi: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "none" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 2, + val: "custom-ident" + }, + { + typ: 20 + } + ] + } + ], + isList: true + } + ] + }, + "-ms-flow-into": { + syntax: "[ none | ]#", + ast: [ + { + typ: 22, + chi: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "none" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 2, + val: "custom-ident" + }, + { + typ: 20 + } + ] + } + ], + isList: true + } + ] + }, + "-ms-grid-columns": { + syntax: "none | | ", + ast: [ + { + typ: 27, + l: [ + { + typ: 1, + val: "none" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 2, + val: "track-list" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 2, + val: "auto-track-list" + } + ] + } + ] + } + ] + }, + "-ms-grid-rows": { + syntax: "none | | ", + ast: [ + { + typ: 27, + l: [ + { + typ: 1, + val: "none" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 2, + val: "track-list" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 2, + val: "auto-track-list" + } + ] + } + ] + } + ] + }, + "-ms-high-contrast-adjust": { + syntax: "auto | none", + ast: [ + { + typ: 27, + l: [ + { + typ: 1, + val: "auto" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 1, + val: "none" + } + ] + } + ] + }, + "-ms-hyphenate-limit-chars": { + syntax: "auto | {1,3}", + ast: [ + { + typ: 27, + l: [ + { + typ: 1, + val: "auto" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 2, + val: "integer", + occurence: { + min: 1, + max: 3 + } + } + ] + } + ] + }, + "-ms-hyphenate-limit-lines": { + syntax: "no-limit | ", + ast: [ + { + typ: 27, + l: [ + { + typ: 1, + val: "no-limit" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 2, + val: "integer" + } + ] + } + ] + }, + "-ms-hyphenate-limit-zone": { + syntax: " | ", + ast: [ + { + typ: 27, + l: [ + { + typ: 2, + val: "percentage" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 2, + val: "length" + } + ] + } + ] + }, + "-ms-ime-align": { + syntax: "auto | after", + ast: [ + { + typ: 27, + l: [ + { + typ: 1, + val: "auto" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 1, + val: "after" + } + ] + } + ] + }, + "-ms-overflow-style": { + syntax: "auto | none | scrollbar | -ms-autohiding-scrollbar", + ast: [ + { + typ: 27, + l: [ + { + typ: 1, + val: "auto" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "none" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "scrollbar" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 1, + val: "-ms-autohiding-scrollbar" + } + ] + } + ] + } + ] + } + ] + }, + "-ms-scrollbar-3dlight-color": { + syntax: "", + ast: [ + { + typ: 2, + val: "color" + } + ] + }, + "-ms-scrollbar-arrow-color": { + syntax: "", + ast: [ + { + typ: 2, + val: "color" + } + ] + }, + "-ms-scrollbar-base-color": { + syntax: "", + ast: [ + { + typ: 2, + val: "color" + } + ] + }, + "-ms-scrollbar-darkshadow-color": { + syntax: "", + ast: [ + { + typ: 2, + val: "color" + } + ] + }, + "-ms-scrollbar-face-color": { + syntax: "", + ast: [ + { + typ: 2, + val: "color" + } + ] + }, + "-ms-scrollbar-highlight-color": { + syntax: "", + ast: [ + { + typ: 2, + val: "color" + } + ] + }, + "-ms-scrollbar-shadow-color": { + syntax: "", + ast: [ + { + typ: 2, + val: "color" + } + ] + }, + "-ms-scrollbar-track-color": { + syntax: "", + ast: [ + { + typ: 2, + val: "color" + } + ] + }, + "-ms-scroll-chaining": { + syntax: "chained | none", + ast: [ + { + typ: 27, + l: [ + { + typ: 1, + val: "chained" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 1, + val: "none" + } + ] + } + ] + }, + "-ms-scroll-limit": { + syntax: "<'-ms-scroll-limit-x-min'> <'-ms-scroll-limit-y-min'> <'-ms-scroll-limit-x-max'> <'-ms-scroll-limit-y-max'>", + ast: [ + { + typ: 3, + val: "-ms-scroll-limit-x-min" + }, + { + typ: 20 + }, + { + typ: 3, + val: "-ms-scroll-limit-y-min" + }, + { + typ: 20 + }, + { + typ: 3, + val: "-ms-scroll-limit-x-max" + }, + { + typ: 20 + }, + { + typ: 3, + val: "-ms-scroll-limit-y-max" + } + ] + }, + "-ms-scroll-limit-x-max": { + syntax: "auto | ", + ast: [ + { + typ: 27, + l: [ + { + typ: 1, + val: "auto" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 2, + val: "length" + } + ] + } + ] + }, + "-ms-scroll-limit-x-min": { + syntax: "", + ast: [ + { + typ: 2, + val: "length" + } + ] + }, + "-ms-scroll-limit-y-max": { + syntax: "auto | ", + ast: [ + { + typ: 27, + l: [ + { + typ: 1, + val: "auto" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 2, + val: "length" + } + ] + } + ] + }, + "-ms-scroll-limit-y-min": { + syntax: "", + ast: [ + { + typ: 2, + val: "length" + } + ] + }, + "-ms-scroll-rails": { + syntax: "none | railed", + ast: [ + { + typ: 27, + l: [ + { + typ: 1, + val: "none" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 1, + val: "railed" + } + ] + } + ] + }, + "-ms-scroll-snap-points-x": { + syntax: "snapInterval( , ) | snapList( # )", + ast: [ + { + typ: 27, + l: [ + { + typ: 18, + val: "snapInterval", + chi: [ + { + typ: 2, + val: "length-percentage" + }, + { + typ: 10 + }, + { + typ: 20 + }, + { + typ: 2, + val: "length-percentage" + } + ] + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 18, + val: "snapList", + chi: [ + { + typ: 2, + val: "length-percentage", + isList: true + } + ] + } + ] + } + ] + }, + "-ms-scroll-snap-points-y": { + syntax: "snapInterval( , ) | snapList( # )", + ast: [ + { + typ: 27, + l: [ + { + typ: 18, + val: "snapInterval", + chi: [ + { + typ: 2, + val: "length-percentage" + }, + { + typ: 10 + }, + { + typ: 20 + }, + { + typ: 2, + val: "length-percentage" + } + ] + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 18, + val: "snapList", + chi: [ + { + typ: 2, + val: "length-percentage", + isList: true + } + ] + } + ] + } + ] + }, + "-ms-scroll-snap-type": { + syntax: "none | proximity | mandatory", + ast: [ + { + typ: 27, + l: [ + { + typ: 1, + val: "none" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "proximity" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 1, + val: "mandatory" + } + ] + } + ] + } + ] + }, + "-ms-scroll-snap-x": { + syntax: "<'-ms-scroll-snap-type'> <'-ms-scroll-snap-points-x'>", + ast: [ + { + typ: 3, + val: "-ms-scroll-snap-type" + }, + { + typ: 20 + }, + { + typ: 3, + val: "-ms-scroll-snap-points-x" + } + ] + }, + "-ms-scroll-snap-y": { + syntax: "<'-ms-scroll-snap-type'> <'-ms-scroll-snap-points-y'>", + ast: [ + { + typ: 3, + val: "-ms-scroll-snap-type" + }, + { + typ: 20 + }, + { + typ: 3, + val: "-ms-scroll-snap-points-y" + } + ] + }, + "-ms-scroll-translation": { + syntax: "none | vertical-to-horizontal", + ast: [ + { + typ: 27, + l: [ + { + typ: 1, + val: "none" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 1, + val: "vertical-to-horizontal" + } + ] + } + ] + }, + "-ms-text-autospace": { + syntax: "none | ideograph-alpha | ideograph-numeric | ideograph-parenthesis | ideograph-space", + ast: [ + { + typ: 27, + l: [ + { + typ: 1, + val: "none" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "ideograph-alpha" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "ideograph-numeric" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "ideograph-parenthesis" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 1, + val: "ideograph-space" + } + ] + } + ] + } + ] + } + ] + } + ] + }, + "-ms-touch-select": { + syntax: "grippers | none", + ast: [ + { + typ: 27, + l: [ + { + typ: 1, + val: "grippers" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 1, + val: "none" + } + ] + } + ] + }, + "-ms-user-select": { + syntax: "none | element | text", + ast: [ + { + typ: 27, + l: [ + { + typ: 1, + val: "none" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "element" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 1, + val: "text" + } + ] + } + ] + } + ] + }, + "-ms-wrap-flow": { + syntax: "auto | both | start | end | maximum | clear", + ast: [ + { + typ: 27, + l: [ + { + typ: 1, + val: "auto" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "both" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "start" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "end" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "maximum" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 1, + val: "clear" + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + "-ms-wrap-margin": { + syntax: "", + ast: [ + { + typ: 2, + val: "length" + } + ] + }, + "-ms-wrap-through": { + syntax: "wrap | none", + ast: [ + { + typ: 27, + l: [ + { + typ: 1, + val: "wrap" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 1, + val: "none" + } + ] + } + ] + }, + "-moz-appearance": { + syntax: "none | button | button-arrow-down | button-arrow-next | button-arrow-previous | button-arrow-up | button-bevel | button-focus | caret | checkbox | checkbox-container | checkbox-label | checkmenuitem | dualbutton | groupbox | listbox | listitem | menuarrow | menubar | menucheckbox | menuimage | menuitem | menuitemtext | menulist | menulist-button | menulist-text | menulist-textfield | menupopup | menuradio | menuseparator | meterbar | meterchunk | progressbar | progressbar-vertical | progresschunk | progresschunk-vertical | radio | radio-container | radio-label | radiomenuitem | range | range-thumb | resizer | resizerpanel | scale-horizontal | scalethumbend | scalethumb-horizontal | scalethumbstart | scalethumbtick | scalethumb-vertical | scale-vertical | scrollbarbutton-down | scrollbarbutton-left | scrollbarbutton-right | scrollbarbutton-up | scrollbarthumb-horizontal | scrollbarthumb-vertical | scrollbartrack-horizontal | scrollbartrack-vertical | searchfield | separator | sheet | spinner | spinner-downbutton | spinner-textfield | spinner-upbutton | splitter | statusbar | statusbarpanel | tab | tabpanel | tabpanels | tab-scroll-arrow-back | tab-scroll-arrow-forward | textfield | textfield-multiline | toolbar | toolbarbutton | toolbarbutton-dropdown | toolbargripper | toolbox | tooltip | treeheader | treeheadercell | treeheadersortarrow | treeitem | treeline | treetwisty | treetwistyopen | treeview | -moz-mac-unified-toolbar | -moz-win-borderless-glass | -moz-win-browsertabbar-toolbox | -moz-win-communicationstext | -moz-win-communications-toolbox | -moz-win-exclude-glass | -moz-win-glass | -moz-win-mediatext | -moz-win-media-toolbox | -moz-window-button-box | -moz-window-button-box-maximized | -moz-window-button-close | -moz-window-button-maximize | -moz-window-button-minimize | -moz-window-button-restore | -moz-window-frame-bottom | -moz-window-frame-left | -moz-window-frame-right | -moz-window-titlebar | -moz-window-titlebar-maximized", + ast: [ + { + typ: 27, + l: [ + { + typ: 1, + val: "none" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "button" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "button-arrow-down" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "button-arrow-next" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "button-arrow-previous" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "button-arrow-up" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "button-bevel" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "button-focus" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "caret" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "checkbox" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "checkbox-container" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "checkbox-label" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "checkmenuitem" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "dualbutton" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "groupbox" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "listbox" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "listitem" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "menuarrow" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "menubar" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "menucheckbox" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "menuimage" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "menuitem" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "menuitemtext" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "menulist" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "menulist-button" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "menulist-text" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "menulist-textfield" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "menupopup" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "menuradio" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "menuseparator" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "meterbar" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "meterchunk" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "progressbar" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "progressbar-vertical" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "progresschunk" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "progresschunk-vertical" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "radio" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "radio-container" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "radio-label" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "radiomenuitem" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "range" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "range-thumb" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "resizer" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "resizerpanel" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "scale-horizontal" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "scalethumbend" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "scalethumb-horizontal" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "scalethumbstart" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "scalethumbtick" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "scalethumb-vertical" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "scale-vertical" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "scrollbarbutton-down" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "scrollbarbutton-left" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "scrollbarbutton-right" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "scrollbarbutton-up" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "scrollbarthumb-horizontal" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "scrollbarthumb-vertical" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "scrollbartrack-horizontal" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "scrollbartrack-vertical" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "searchfield" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "separator" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "sheet" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "spinner" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "spinner-downbutton" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "spinner-textfield" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "spinner-upbutton" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "splitter" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "statusbar" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "statusbarpanel" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "tab" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "tabpanel" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "tabpanels" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "tab-scroll-arrow-back" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "tab-scroll-arrow-forward" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "textfield" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "textfield-multiline" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "toolbar" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "toolbarbutton" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "toolbarbutton-dropdown" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "toolbargripper" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "toolbox" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "tooltip" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "treeheader" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "treeheadercell" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "treeheadersortarrow" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "treeitem" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "treeline" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "treetwisty" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "treetwistyopen" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "treeview" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "-moz-mac-unified-toolbar" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "-moz-win-borderless-glass" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "-moz-win-browsertabbar-toolbox" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "-moz-win-communicationstext" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "-moz-win-communications-toolbox" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "-moz-win-exclude-glass" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "-moz-win-glass" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "-moz-win-mediatext" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "-moz-win-media-toolbox" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "-moz-window-button-box" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "-moz-window-button-box-maximized" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "-moz-window-button-close" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "-moz-window-button-maximize" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "-moz-window-button-minimize" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "-moz-window-button-restore" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "-moz-window-frame-bottom" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "-moz-window-frame-left" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "-moz-window-frame-right" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "-moz-window-titlebar" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 1, + val: "-moz-window-titlebar-maximized" + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + "-moz-binding": { + syntax: " | none", + ast: [ + { + typ: 27, + l: [ + { + typ: 2, + val: "url" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 1, + val: "none" + } + ] + } + ] + }, + "-moz-border-bottom-colors": { + syntax: "+ | none", + ast: [ + { + typ: 27, + l: [ + { + typ: 2, + val: "color", + atLeastOnce: true + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 1, + val: "none" + } + ] + } + ] + }, + "-moz-border-left-colors": { + syntax: "+ | none", + ast: [ + { + typ: 27, + l: [ + { + typ: 2, + val: "color", + atLeastOnce: true + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 1, + val: "none" + } + ] + } + ] + }, + "-moz-border-right-colors": { + syntax: "+ | none", + ast: [ + { + typ: 27, + l: [ + { + typ: 2, + val: "color", + atLeastOnce: true + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 1, + val: "none" + } + ] + } + ] + }, + "-moz-border-top-colors": { + syntax: "+ | none", + ast: [ + { + typ: 27, + l: [ + { + typ: 2, + val: "color", + atLeastOnce: true + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 1, + val: "none" + } + ] + } + ] + }, + "-moz-context-properties": { + syntax: "none | [ fill | fill-opacity | stroke | stroke-opacity ]#", + ast: [ + { + typ: 27, + l: [ + { + typ: 1, + val: "none" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 22, + chi: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "fill" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "fill-opacity" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "stroke" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 1, + val: "stroke-opacity" + }, + { + typ: 20 + } + ] + } + ] + } + ] + } + ], + isList: true + } + ] + } + ] + }, + "-moz-float-edge": { + syntax: "border-box | content-box | margin-box | padding-box", + ast: [ + { + typ: 27, + l: [ + { + typ: 1, + val: "border-box" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "content-box" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "margin-box" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 1, + val: "padding-box" + } + ] + } + ] + } + ] + } + ] + }, + "-moz-force-broken-image-icon": { + syntax: "0 | 1", + ast: [ + { + typ: 27, + l: [ + { + typ: 19, + val: 0 + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 19, + val: 1 + } + ] + } + ] + }, + "-moz-image-region": { + syntax: " | auto", + ast: [ + { + typ: 27, + l: [ + { + typ: 2, + val: "shape" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 1, + val: "auto" + } + ] + } + ] + }, + "-moz-orient": { + syntax: "inline | block | horizontal | vertical", + ast: [ + { + typ: 27, + l: [ + { + typ: 1, + val: "inline" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "block" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "horizontal" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 1, + val: "vertical" + } + ] + } + ] + } + ] + } + ] + }, + "-moz-outline-radius": { + syntax: "{1,4} [ / {1,4} ]?", + ast: [ + { + typ: 2, + val: "outline-radius", + occurence: { + min: 1, + max: 4 + } + }, + { + typ: 20 + }, + { + typ: 22, + chi: [ + { + typ: 24 + }, + { + typ: 2, + val: "outline-radius", + occurence: { + min: 1, + max: 4 + } + } + ], + isOptional: true + } + ] + }, + "-moz-outline-radius-bottomleft": { + syntax: "", + ast: [ + { + typ: 2, + val: "outline-radius" + } + ] + }, + "-moz-outline-radius-bottomright": { + syntax: "", + ast: [ + { + typ: 2, + val: "outline-radius" + } + ] + }, + "-moz-outline-radius-topleft": { + syntax: "", + ast: [ + { + typ: 2, + val: "outline-radius" + } + ] + }, + "-moz-outline-radius-topright": { + syntax: "", + ast: [ + { + typ: 2, + val: "outline-radius" + } + ] + }, + "-moz-stack-sizing": { + syntax: "ignore | stretch-to-fit", + ast: [ + { + typ: 27, + l: [ + { + typ: 1, + val: "ignore" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 1, + val: "stretch-to-fit" + } + ] + } + ] + }, + "-moz-text-blink": { + syntax: "none | blink", + ast: [ + { + typ: 27, + l: [ + { + typ: 1, + val: "none" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 1, + val: "blink" + } + ] + } + ] + }, + "-moz-user-focus": { + syntax: "ignore | normal | select-after | select-before | select-menu | select-same | select-all | none", + ast: [ + { + typ: 27, + l: [ + { + typ: 1, + val: "ignore" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "normal" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "select-after" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "select-before" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "select-menu" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "select-same" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "select-all" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 1, + val: "none" + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + "-moz-user-input": { + syntax: "auto | none | enabled | disabled", + ast: [ + { + typ: 27, + l: [ + { + typ: 1, + val: "auto" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "none" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "enabled" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 1, + val: "disabled" + } + ] + } + ] + } + ] + } + ] + }, + "-moz-user-modify": { + syntax: "read-only | read-write | write-only", + ast: [ + { + typ: 27, + l: [ + { + typ: 1, + val: "read-only" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "read-write" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 1, + val: "write-only" + } + ] + } + ] + } + ] + }, + "-moz-window-dragging": { + syntax: "drag | no-drag", + ast: [ + { + typ: 27, + l: [ + { + typ: 1, + val: "drag" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 1, + val: "no-drag" + } + ] + } + ] + }, + "-moz-window-shadow": { + syntax: "default | menu | tooltip | sheet | none", + ast: [ + { + typ: 27, + l: [ + { + typ: 1, + val: "default" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "menu" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "tooltip" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "sheet" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 1, + val: "none" + } + ] + } + ] + } + ] + } + ] + } + ] + }, + "-webkit-appearance": { + syntax: "none | button | button-bevel | caret | checkbox | default-button | inner-spin-button | listbox | listitem | media-controls-background | media-controls-fullscreen-background | media-current-time-display | media-enter-fullscreen-button | media-exit-fullscreen-button | media-fullscreen-button | media-mute-button | media-overlay-play-button | media-play-button | media-seek-back-button | media-seek-forward-button | media-slider | media-sliderthumb | media-time-remaining-display | media-toggle-closed-captions-button | media-volume-slider | media-volume-slider-container | media-volume-sliderthumb | menulist | menulist-button | menulist-text | menulist-textfield | meter | progress-bar | progress-bar-value | push-button | radio | searchfield | searchfield-cancel-button | searchfield-decoration | searchfield-results-button | searchfield-results-decoration | slider-horizontal | slider-vertical | sliderthumb-horizontal | sliderthumb-vertical | square-button | textarea | textfield | -apple-pay-button", + ast: [ + { + typ: 27, + l: [ + { + typ: 1, + val: "none" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "button" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "button-bevel" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "caret" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "checkbox" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "default-button" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "inner-spin-button" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "listbox" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "listitem" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "media-controls-background" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "media-controls-fullscreen-background" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "media-current-time-display" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "media-enter-fullscreen-button" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "media-exit-fullscreen-button" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "media-fullscreen-button" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "media-mute-button" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "media-overlay-play-button" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "media-play-button" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "media-seek-back-button" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "media-seek-forward-button" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "media-slider" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "media-sliderthumb" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "media-time-remaining-display" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "media-toggle-closed-captions-button" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "media-volume-slider" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "media-volume-slider-container" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "media-volume-sliderthumb" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "menulist" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "menulist-button" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "menulist-text" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "menulist-textfield" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "meter" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "progress-bar" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "progress-bar-value" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "push-button" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "radio" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "searchfield" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "searchfield-cancel-button" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "searchfield-decoration" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "searchfield-results-button" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "searchfield-results-decoration" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "slider-horizontal" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "slider-vertical" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "sliderthumb-horizontal" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "sliderthumb-vertical" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "square-button" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "textarea" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "textfield" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 1, + val: "-apple-pay-button" + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + "-webkit-border-before": { + syntax: "<'border-width'> || <'border-style'> || ", + ast: [ + { + typ: 28, + l: [ + { + typ: 3, + val: "border-width" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 28, + l: [ + { + typ: 20 + }, + { + typ: 3, + val: "border-style" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 2, + val: "color" + } + ] + } + ] + } + ] + }, + "-webkit-border-before-color": { + syntax: "", + ast: [ + { + typ: 2, + val: "color" + } + ] + }, + "-webkit-border-before-style": { + syntax: "<'border-style'>", + ast: [ + { + typ: 3, + val: "border-style" + } + ] + }, + "-webkit-border-before-width": { + syntax: "<'border-width'>", + ast: [ + { + typ: 3, + val: "border-width" + } + ] + }, + "-webkit-box-reflect": { + syntax: "[ above | below | right | left ]? ? ?", + ast: [ + { + typ: 22, + chi: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "above" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "below" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "right" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 1, + val: "left" + }, + { + typ: 20 + } + ] + } + ] + } + ] + } + ], + isOptional: true + }, + { + typ: 20 + }, + { + typ: 2, + val: "length", + isOptional: true + }, + { + typ: 20 + }, + { + typ: 2, + val: "image", + isOptional: true + } + ] + }, + "-webkit-line-clamp": { + syntax: "none | ", + ast: [ + { + typ: 27, + l: [ + { + typ: 1, + val: "none" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 2, + val: "integer" + } + ] + } + ] + }, + "-webkit-mask": { + syntax: "[ || [ / ]? || || [ | border | padding | content | text ] || [ | border | padding | content ] ]#", + ast: [ + { + typ: 22, + chi: [ + { + typ: 28, + l: [ + { + typ: 20 + }, + { + typ: 2, + val: "mask-reference" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 28, + l: [ + { + typ: 20 + }, + { + typ: 2, + val: "position" + }, + { + typ: 20 + }, + { + typ: 22, + chi: [ + { + typ: 24 + }, + { + typ: 2, + val: "bg-size" + } + ], + isOptional: true + }, + { + typ: 20 + } + ], + r: [ + { + typ: 28, + l: [ + { + typ: 20 + }, + { + typ: 2, + val: "repeat-style" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 28, + l: [ + { + typ: 20 + }, + { + typ: 22, + chi: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 2, + val: "box" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "border" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "padding" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "content" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 1, + val: "text" + }, + { + typ: 20 + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 22, + chi: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 2, + val: "box" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "border" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "padding" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 1, + val: "content" + }, + { + typ: 20 + } + ] + } + ] + } + ] + } + ] + }, + { + typ: 20 + } + ] + } + ] + } + ] + } + ] + } + ], + isList: true + } + ] + }, + "-webkit-mask-attachment": { + syntax: "#", + ast: [ + { + typ: 2, + val: "attachment", + isList: true + } + ] + }, + "-webkit-mask-clip": { + syntax: "[ | border | padding | content | text ]#", + ast: [ + { + typ: 22, + chi: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 2, + val: "box" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "border" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "padding" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "content" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 1, + val: "text" + }, + { + typ: 20 + } + ] + } + ] + } + ] + } + ] + } + ], + isList: true + } + ] + }, + "-webkit-mask-composite": { + syntax: "#", + ast: [ + { + typ: 2, + val: "composite-style", + isList: true + } + ] + }, + "-webkit-mask-image": { + syntax: "#", + ast: [ + { + typ: 2, + val: "mask-reference", + isList: true + } + ] + }, + "-webkit-mask-origin": { + syntax: "[ | border | padding | content ]#", + ast: [ + { + typ: 22, + chi: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 2, + val: "box" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "border" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "padding" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 1, + val: "content" + }, + { + typ: 20 + } + ] + } + ] + } + ] + } + ], + isList: true + } + ] + }, + "-webkit-mask-position": { + syntax: "#", + ast: [ + { + typ: 2, + val: "position", + isList: true + } + ] + }, + "-webkit-mask-position-x": { + syntax: "[ | left | center | right ]#", + ast: [ + { + typ: 22, + chi: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 2, + val: "length-percentage" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "left" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "center" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 1, + val: "right" + }, + { + typ: 20 + } + ] + } + ] + } + ] + } + ], + isList: true + } + ] + }, + "-webkit-mask-position-y": { + syntax: "[ | top | center | bottom ]#", + ast: [ + { + typ: 22, + chi: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 2, + val: "length-percentage" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "top" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "center" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 1, + val: "bottom" + }, + { + typ: 20 + } + ] + } + ] + } + ] + } + ], + isList: true + } + ] + }, + "-webkit-mask-repeat": { + syntax: "#", + ast: [ + { + typ: 2, + val: "repeat-style", + isList: true + } + ] + }, + "-webkit-mask-repeat-x": { + syntax: "repeat | no-repeat | space | round", + ast: [ + { + typ: 27, + l: [ + { + typ: 1, + val: "repeat" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "no-repeat" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "space" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 1, + val: "round" + } + ] + } + ] + } + ] + } + ] + }, + "-webkit-mask-repeat-y": { + syntax: "repeat | no-repeat | space | round", + ast: [ + { + typ: 27, + l: [ + { + typ: 1, + val: "repeat" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "no-repeat" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "space" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 1, + val: "round" + } + ] + } + ] + } + ] + } + ] + }, + "-webkit-mask-size": { + syntax: "#", + ast: [ + { + typ: 2, + val: "bg-size", + isList: true + } + ] + }, + "-webkit-overflow-scrolling": { + syntax: "auto | touch", + ast: [ + { + typ: 27, + l: [ + { + typ: 1, + val: "auto" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 1, + val: "touch" + } + ] + } + ] + }, + "-webkit-tap-highlight-color": { + syntax: "", + ast: [ + { + typ: 2, + val: "color" + } + ] + }, + "-webkit-text-fill-color": { + syntax: "", + ast: [ + { + typ: 2, + val: "color" + } + ] + }, + "-webkit-text-stroke": { + syntax: " || ", + ast: [ + { + typ: 28, + l: [ + { + typ: 2, + val: "length" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 2, + val: "color" + } + ] + } + ] + }, + "-webkit-text-stroke-color": { + syntax: "", + ast: [ + { + typ: 2, + val: "color" + } + ] + }, + "-webkit-text-stroke-width": { + syntax: "", + ast: [ + { + typ: 2, + val: "length" + } + ] + }, + "-webkit-touch-callout": { + syntax: "default | none", + ast: [ + { + typ: 27, + l: [ + { + typ: 1, + val: "default" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 1, + val: "none" + } + ] + } + ] + }, + "-webkit-user-modify": { + syntax: "read-only | read-write | read-write-plaintext-only", + ast: [ + { + typ: 27, + l: [ + { + typ: 1, + val: "read-only" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "read-write" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 1, + val: "read-write-plaintext-only" + } + ] + } + ] + } + ] + }, + "accent-color": { + syntax: "auto | ", + ast: [ + { + typ: 27, + l: [ + { + typ: 1, + val: "auto" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 2, + val: "color" + } + ] + } + ] + }, + "align-content": { + syntax: "normal | | | ? ", + ast: [ + { + typ: 27, + l: [ + { + typ: 1, + val: "normal" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 2, + val: "baseline-position" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 2, + val: "content-distribution" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 2, + val: "overflow-position", + isOptional: true + }, + { + typ: 20 + }, + { + typ: 2, + val: "content-position" + } + ] + } + ] + } + ] + } + ] + }, + "align-items": { + syntax: "normal | stretch | | [ ? ]", + ast: [ + { + typ: 27, + l: [ + { + typ: 1, + val: "normal" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "stretch" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 2, + val: "baseline-position" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 22, + chi: [ + { + typ: 2, + val: "overflow-position", + isOptional: true + }, + { + typ: 20 + }, + { + typ: 2, + val: "self-position" + } + ] + } + ] + } + ] + } + ] + } + ] + }, + "align-self": { + syntax: "auto | normal | stretch | | ? ", + ast: [ + { + typ: 27, + l: [ + { + typ: 1, + val: "auto" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "normal" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "stretch" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 2, + val: "baseline-position" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 2, + val: "overflow-position", + isOptional: true + }, + { + typ: 20 + }, + { + typ: 2, + val: "self-position" + } + ] + } + ] + } + ] + } + ] + } + ] + }, + "align-tracks": { + syntax: "[ normal | | | ? ]#", + ast: [ + { + typ: 22, + chi: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "normal" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 2, + val: "baseline-position" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 2, + val: "content-distribution" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 2, + val: "overflow-position", + isOptional: true + }, + { + typ: 20 + }, + { + typ: 2, + val: "content-position" + }, + { + typ: 20 + } + ] + } + ] + } + ] + } + ], + isList: true + } + ] + }, + all: { + syntax: "initial | inherit | unset | revert | revert-layer", + ast: [ + { + typ: 27, + l: [ + { + typ: 1, + val: "initial" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "inherit" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "unset" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "revert" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 1, + val: "revert-layer" + } + ] + } + ] + } + ] + } + ] + } + ] + }, + "anchor-name": { + syntax: "none | #", + ast: [ + { + typ: 27, + l: [ + { + typ: 1, + val: "none" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 2, + val: "dashed-ident", + isList: true + } + ] + } + ] + }, + "anchor-scope": { + syntax: "none | all | #", + ast: [ + { + typ: 27, + l: [ + { + typ: 1, + val: "none" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 27, + l: [ + { + typ: 20 + }, + { + typ: 1, + val: "all" + }, + { + typ: 20 + } + ], + r: [ + { + typ: 20 + }, + { + typ: 2, + val: "dashed-ident", + isList: true + } + ] + } + ] + } + ] + }, + animation: { + syntax: "#", + ast: [ + { + typ: 2, + val: "single-animation", + isList: true + } + ] + }, + "animation-composition": { + syntax: "#", + ast: [ + { + typ: 2, + val: "single-animation-composition", + isList: true + } + ] + }, + "animation-delay": { + syntax: "