summaryrefslogtreecommitdiff
path: root/node_modules/css-tree
diff options
context:
space:
mode:
authorlittleblack111 <littleblack11111@gmail.com>2026-05-18 23:10:59 +0800
committerlittleblack111 <littleblack11111@gmail.com>2026-05-18 23:41:44 +0800
commitfc87c009806dcc98867f6b58efe29b042aa01dee (patch)
tree8f59b3f4a5b66e9dfef2d40c8d318e258a521228 /node_modules/css-tree
parent3336b2356ee6152d9c6ae59bd9b87ccbc0958407 (diff)
node: updatemain
Diffstat (limited to 'node_modules/css-tree')
-rw-r--r--node_modules/css-tree/LICENSE19
-rw-r--r--node_modules/css-tree/README.md193
-rw-r--r--node_modules/css-tree/cjs/convertor/create.cjs32
-rw-r--r--node_modules/css-tree/cjs/convertor/index.cjs8
-rw-r--r--node_modules/css-tree/cjs/data-patch.cjs7
-rw-r--r--node_modules/css-tree/cjs/data.cjs99
-rw-r--r--node_modules/css-tree/cjs/definition-syntax/SyntaxError.cjs16
-rw-r--r--node_modules/css-tree/cjs/definition-syntax/generate.cjs135
-rw-r--r--node_modules/css-tree/cjs/definition-syntax/index.cjs13
-rw-r--r--node_modules/css-tree/cjs/definition-syntax/parse.cjs588
-rw-r--r--node_modules/css-tree/cjs/definition-syntax/tokenizer.cjs56
-rw-r--r--node_modules/css-tree/cjs/definition-syntax/walk.cjs56
-rw-r--r--node_modules/css-tree/cjs/generator/create.cjs103
-rw-r--r--node_modules/css-tree/cjs/generator/index.cjs8
-rw-r--r--node_modules/css-tree/cjs/generator/sourceMap.cjs96
-rw-r--r--node_modules/css-tree/cjs/generator/token-before.cjs170
-rw-r--r--node_modules/css-tree/cjs/index.cjs63
-rw-r--r--node_modules/css-tree/cjs/lexer/Lexer.cjs470
-rw-r--r--node_modules/css-tree/cjs/lexer/error.cjs128
-rw-r--r--node_modules/css-tree/cjs/lexer/generic-an-plus-b.cjs235
-rw-r--r--node_modules/css-tree/cjs/lexer/generic-const.cjs12
-rw-r--r--node_modules/css-tree/cjs/lexer/generic-urange.cjs149
-rw-r--r--node_modules/css-tree/cjs/lexer/generic.cjs573
-rw-r--r--node_modules/css-tree/cjs/lexer/index.cjs7
-rw-r--r--node_modules/css-tree/cjs/lexer/match-graph.cjs459
-rw-r--r--node_modules/css-tree/cjs/lexer/match.cjs632
-rw-r--r--node_modules/css-tree/cjs/lexer/prepare-tokens.cjs54
-rw-r--r--node_modules/css-tree/cjs/lexer/search.cjs65
-rw-r--r--node_modules/css-tree/cjs/lexer/structure.cjs168
-rw-r--r--node_modules/css-tree/cjs/lexer/trace.cjs73
-rw-r--r--node_modules/css-tree/cjs/lexer/units.cjs38
-rw-r--r--node_modules/css-tree/cjs/parser/SyntaxError.cjs69
-rw-r--r--node_modules/css-tree/cjs/parser/create.cjs336
-rw-r--r--node_modules/css-tree/cjs/parser/index.cjs8
-rw-r--r--node_modules/css-tree/cjs/parser/parse-selector.cjs8
-rw-r--r--node_modules/css-tree/cjs/parser/sequence.cjs47
-rw-r--r--node_modules/css-tree/cjs/syntax/atrule/font-face.cjs12
-rw-r--r--node_modules/css-tree/cjs/syntax/atrule/import.cjs37
-rw-r--r--node_modules/css-tree/cjs/syntax/atrule/index.cjs19
-rw-r--r--node_modules/css-tree/cjs/syntax/atrule/media.cjs16
-rw-r--r--node_modules/css-tree/cjs/syntax/atrule/nest.cjs16
-rw-r--r--node_modules/css-tree/cjs/syntax/atrule/page.cjs16
-rw-r--r--node_modules/css-tree/cjs/syntax/atrule/supports.cjs77
-rw-r--r--node_modules/css-tree/cjs/syntax/config/generator.cjs9
-rw-r--r--node_modules/css-tree/cjs/syntax/config/lexer.cjs12
-rw-r--r--node_modules/css-tree/cjs/syntax/config/mix.cjs119
-rw-r--r--node_modules/css-tree/cjs/syntax/config/parser-selector.cjs19
-rw-r--r--node_modules/css-tree/cjs/syntax/config/parser.cjs34
-rw-r--r--node_modules/css-tree/cjs/syntax/config/walker.cjs9
-rw-r--r--node_modules/css-tree/cjs/syntax/create.cjs57
-rw-r--r--node_modules/css-tree/cjs/syntax/function/expression.cjs11
-rw-r--r--node_modules/css-tree/cjs/syntax/function/var.cjs43
-rw-r--r--node_modules/css-tree/cjs/syntax/index.cjs14
-rw-r--r--node_modules/css-tree/cjs/syntax/node/AnPlusB.cjs293
-rw-r--r--node_modules/css-tree/cjs/syntax/node/Atrule.cjs103
-rw-r--r--node_modules/css-tree/cjs/syntax/node/AtrulePrelude.cjs52
-rw-r--r--node_modules/css-tree/cjs/syntax/node/AttributeSelector.cjs148
-rw-r--r--node_modules/css-tree/cjs/syntax/node/Block.cjs96
-rw-r--r--node_modules/css-tree/cjs/syntax/node/Brackets.cjs38
-rw-r--r--node_modules/css-tree/cjs/syntax/node/CDC.cjs26
-rw-r--r--node_modules/css-tree/cjs/syntax/node/CDO.cjs26
-rw-r--r--node_modules/css-tree/cjs/syntax/node/ClassSelector.cjs31
-rw-r--r--node_modules/css-tree/cjs/syntax/node/Combinator.cjs61
-rw-r--r--node_modules/css-tree/cjs/syntax/node/Comment.cjs40
-rw-r--r--node_modules/css-tree/cjs/syntax/node/Condition.cjs127
-rw-r--r--node_modules/css-tree/cjs/syntax/node/Declaration.cjs166
-rw-r--r--node_modules/css-tree/cjs/syntax/node/DeclarationList.cjs62
-rw-r--r--node_modules/css-tree/cjs/syntax/node/Dimension.cjs30
-rw-r--r--node_modules/css-tree/cjs/syntax/node/Feature.cjs78
-rw-r--r--node_modules/css-tree/cjs/syntax/node/FeatureRange.cjs114
-rw-r--r--node_modules/css-tree/cjs/syntax/node/Function.cjs45
-rw-r--r--node_modules/css-tree/cjs/syntax/node/GeneralEnclosed.cjs51
-rw-r--r--node_modules/css-tree/cjs/syntax/node/Hash.cjs30
-rw-r--r--node_modules/css-tree/cjs/syntax/node/IdSelector.cjs33
-rw-r--r--node_modules/css-tree/cjs/syntax/node/Identifier.cjs25
-rw-r--r--node_modules/css-tree/cjs/syntax/node/MediaCondition.cjs70
-rw-r--r--node_modules/css-tree/cjs/syntax/node/MediaFeature.cjs76
-rw-r--r--node_modules/css-tree/cjs/syntax/node/MediaFeatureRange.cjs11
-rw-r--r--node_modules/css-tree/cjs/syntax/node/MediaQuery.cjs61
-rw-r--r--node_modules/css-tree/cjs/syntax/node/MediaQueryList.cjs41
-rw-r--r--node_modules/css-tree/cjs/syntax/node/NestingSelector.cjs29
-rw-r--r--node_modules/css-tree/cjs/syntax/node/Nth.cjs54
-rw-r--r--node_modules/css-tree/cjs/syntax/node/Number.cjs25
-rw-r--r--node_modules/css-tree/cjs/syntax/node/Operator.cjs28
-rw-r--r--node_modules/css-tree/cjs/syntax/node/Parentheses.cjs38
-rw-r--r--node_modules/css-tree/cjs/syntax/node/Percentage.cjs25
-rw-r--r--node_modules/css-tree/cjs/syntax/node/PseudoClassSelector.cjs65
-rw-r--r--node_modules/css-tree/cjs/syntax/node/PseudoElementSelector.cjs67
-rw-r--r--node_modules/css-tree/cjs/syntax/node/Ratio.cjs67
-rw-r--r--node_modules/css-tree/cjs/syntax/node/Raw.cjs48
-rw-r--r--node_modules/css-tree/cjs/syntax/node/Rule.cjs58
-rw-r--r--node_modules/css-tree/cjs/syntax/node/Selector.cjs39
-rw-r--r--node_modules/css-tree/cjs/syntax/node/SelectorList.cjs43
-rw-r--r--node_modules/css-tree/cjs/syntax/node/String.cjs26
-rw-r--r--node_modules/css-tree/cjs/syntax/node/StyleSheet.cjs83
-rw-r--r--node_modules/css-tree/cjs/syntax/node/TypeSelector.cjs59
-rw-r--r--node_modules/css-tree/cjs/syntax/node/UnicodeRange.cjs158
-rw-r--r--node_modules/css-tree/cjs/syntax/node/Url.cjs54
-rw-r--r--node_modules/css-tree/cjs/syntax/node/Value.cjs26
-rw-r--r--node_modules/css-tree/cjs/syntax/node/WhiteSpace.cjs34
-rw-r--r--node_modules/css-tree/cjs/syntax/node/common/feature-range.cjs112
-rw-r--r--node_modules/css-tree/cjs/syntax/node/common/feature.cjs76
-rw-r--r--node_modules/css-tree/cjs/syntax/node/index-generate.cjs87
-rw-r--r--node_modules/css-tree/cjs/syntax/node/index-parse-selector.cjs37
-rw-r--r--node_modules/css-tree/cjs/syntax/node/index-parse.cjs87
-rw-r--r--node_modules/css-tree/cjs/syntax/node/index.cjs87
-rw-r--r--node_modules/css-tree/cjs/syntax/pseudo/index.cjs54
-rw-r--r--node_modules/css-tree/cjs/syntax/scope/atrulePrelude.cjs9
-rw-r--r--node_modules/css-tree/cjs/syntax/scope/default.cjs76
-rw-r--r--node_modules/css-tree/cjs/syntax/scope/index.cjs11
-rw-r--r--node_modules/css-tree/cjs/syntax/scope/selector.cjs88
-rw-r--r--node_modules/css-tree/cjs/syntax/scope/value.cjs29
-rw-r--r--node_modules/css-tree/cjs/tokenizer/OffsetToLocation.cjs91
-rw-r--r--node_modules/css-tree/cjs/tokenizer/TokenStream.cjs264
-rw-r--r--node_modules/css-tree/cjs/tokenizer/adopt-buffer.cjs13
-rw-r--r--node_modules/css-tree/cjs/tokenizer/char-code-definitions.cjs231
-rw-r--r--node_modules/css-tree/cjs/tokenizer/index.cjs554
-rw-r--r--node_modules/css-tree/cjs/tokenizer/names.cjs31
-rw-r--r--node_modules/css-tree/cjs/tokenizer/types.cjs57
-rw-r--r--node_modules/css-tree/cjs/tokenizer/utils.cjs261
-rw-r--r--node_modules/css-tree/cjs/utils/List.cjs473
-rw-r--r--node_modules/css-tree/cjs/utils/clone.cjs25
-rw-r--r--node_modules/css-tree/cjs/utils/create-custom-error.cjs18
-rw-r--r--node_modules/css-tree/cjs/utils/ident.cjs102
-rw-r--r--node_modules/css-tree/cjs/utils/index.cjs20
-rw-r--r--node_modules/css-tree/cjs/utils/names.cjs113
-rw-r--r--node_modules/css-tree/cjs/utils/string.cjs99
-rw-r--r--node_modules/css-tree/cjs/utils/url.cjs108
-rw-r--r--node_modules/css-tree/cjs/version.cjs5
-rw-r--r--node_modules/css-tree/cjs/walker/create.cjs291
-rw-r--r--node_modules/css-tree/cjs/walker/index.cjs8
-rw-r--r--node_modules/css-tree/data/patch.json725
-rw-r--r--node_modules/css-tree/dist/csstree.esm.js11
-rw-r--r--node_modules/css-tree/dist/csstree.js11
-rw-r--r--node_modules/css-tree/dist/data.cjs1145
-rw-r--r--node_modules/css-tree/dist/data.js1145
-rw-r--r--node_modules/css-tree/dist/version.cjs1
-rw-r--r--node_modules/css-tree/dist/version.js1
-rw-r--r--node_modules/css-tree/lib/convertor/create.js28
-rw-r--r--node_modules/css-tree/lib/convertor/index.js4
-rw-r--r--node_modules/css-tree/lib/data-patch.js6
-rwxr-xr-xnode_modules/css-tree/lib/data.js97
-rw-r--r--node_modules/css-tree/lib/definition-syntax/SyntaxError.js12
-rw-r--r--node_modules/css-tree/lib/definition-syntax/generate.js131
-rw-r--r--node_modules/css-tree/lib/definition-syntax/index.js4
-rw-r--r--node_modules/css-tree/lib/definition-syntax/parse.js584
-rw-r--r--node_modules/css-tree/lib/definition-syntax/tokenizer.js52
-rw-r--r--node_modules/css-tree/lib/definition-syntax/walk.js52
-rw-r--r--node_modules/css-tree/lib/generator/create.js98
-rw-r--r--node_modules/css-tree/lib/generator/index.js4
-rw-r--r--node_modules/css-tree/lib/generator/sourceMap.js92
-rw-r--r--node_modules/css-tree/lib/generator/token-before.js182
-rw-r--r--node_modules/css-tree/lib/index.js30
-rw-r--r--node_modules/css-tree/lib/lexer/Lexer.js464
-rw-r--r--node_modules/css-tree/lib/lexer/error.js123
-rw-r--r--node_modules/css-tree/lib/lexer/generic-an-plus-b.js238
-rw-r--r--node_modules/css-tree/lib/lexer/generic-const.js8
-rw-r--r--node_modules/css-tree/lib/lexer/generic-urange.js151
-rw-r--r--node_modules/css-tree/lib/lexer/generic.js606
-rw-r--r--node_modules/css-tree/lib/lexer/index.js1
-rw-r--r--node_modules/css-tree/lib/lexer/match-graph.js456
-rw-r--r--node_modules/css-tree/lib/lexer/match.js630
-rw-r--r--node_modules/css-tree/lib/lexer/prepare-tokens.js50
-rw-r--r--node_modules/css-tree/lib/lexer/search.js61
-rw-r--r--node_modules/css-tree/lib/lexer/structure.js164
-rw-r--r--node_modules/css-tree/lib/lexer/trace.js66
-rw-r--r--node_modules/css-tree/lib/lexer/units.js27
-rw-r--r--node_modules/css-tree/lib/parser/SyntaxError.js65
-rw-r--r--node_modules/css-tree/lib/parser/create.js346
-rw-r--r--node_modules/css-tree/lib/parser/index.js4
-rw-r--r--node_modules/css-tree/lib/parser/parse-selector.js4
-rw-r--r--node_modules/css-tree/lib/parser/sequence.js43
-rw-r--r--node_modules/css-tree/lib/syntax/atrule/font-face.js8
-rw-r--r--node_modules/css-tree/lib/syntax/atrule/import.js39
-rw-r--r--node_modules/css-tree/lib/syntax/atrule/index.js15
-rw-r--r--node_modules/css-tree/lib/syntax/atrule/media.js12
-rw-r--r--node_modules/css-tree/lib/syntax/atrule/nest.js12
-rw-r--r--node_modules/css-tree/lib/syntax/atrule/page.js12
-rw-r--r--node_modules/css-tree/lib/syntax/atrule/supports.js80
-rw-r--r--node_modules/css-tree/lib/syntax/config/generator.js5
-rw-r--r--node_modules/css-tree/lib/syntax/config/lexer.js8
-rw-r--r--node_modules/css-tree/lib/syntax/config/mix.js115
-rw-r--r--node_modules/css-tree/lib/syntax/config/parser-selector.js15
-rw-r--r--node_modules/css-tree/lib/syntax/config/parser.js30
-rw-r--r--node_modules/css-tree/lib/syntax/config/walker.js5
-rw-r--r--node_modules/css-tree/lib/syntax/create.js54
-rw-r--r--node_modules/css-tree/lib/syntax/function/expression.js7
-rw-r--r--node_modules/css-tree/lib/syntax/function/var.js39
-rw-r--r--node_modules/css-tree/lib/syntax/index.js10
-rw-r--r--node_modules/css-tree/lib/syntax/node/AnPlusB.js292
-rw-r--r--node_modules/css-tree/lib/syntax/node/Atrule.js100
-rw-r--r--node_modules/css-tree/lib/syntax/node/AtrulePrelude.js47
-rw-r--r--node_modules/css-tree/lib/syntax/node/AttributeSelector.js147
-rw-r--r--node_modules/css-tree/lib/syntax/node/Block.js95
-rw-r--r--node_modules/css-tree/lib/syntax/node/Brackets.js35
-rw-r--r--node_modules/css-tree/lib/syntax/node/CDC.js19
-rw-r--r--node_modules/css-tree/lib/syntax/node/CDO.js19
-rw-r--r--node_modules/css-tree/lib/syntax/node/ClassSelector.js24
-rw-r--r--node_modules/css-tree/lib/syntax/node/Combinator.js54
-rw-r--r--node_modules/css-tree/lib/syntax/node/Comment.js33
-rw-r--r--node_modules/css-tree/lib/syntax/node/Declaration.js165
-rw-r--r--node_modules/css-tree/lib/syntax/node/DeclarationList.js62
-rw-r--r--node_modules/css-tree/lib/syntax/node/Dimension.js23
-rw-r--r--node_modules/css-tree/lib/syntax/node/Function.js41
-rw-r--r--node_modules/css-tree/lib/syntax/node/Hash.js23
-rw-r--r--node_modules/css-tree/lib/syntax/node/IdSelector.js26
-rw-r--r--node_modules/css-tree/lib/syntax/node/Identifier.js18
-rw-r--r--node_modules/css-tree/lib/syntax/node/MediaFeature.js77
-rw-r--r--node_modules/css-tree/lib/syntax/node/MediaQuery.js60
-rw-r--r--node_modules/css-tree/lib/syntax/node/MediaQueryList.js34
-rw-r--r--node_modules/css-tree/lib/syntax/node/NestingSelector.js22
-rw-r--r--node_modules/css-tree/lib/syntax/node/Nth.js47
-rw-r--r--node_modules/css-tree/lib/syntax/node/Number.js18
-rw-r--r--node_modules/css-tree/lib/syntax/node/Operator.js21
-rw-r--r--node_modules/css-tree/lib/syntax/node/Parentheses.js34
-rw-r--r--node_modules/css-tree/lib/syntax/node/Percentage.js18
-rw-r--r--node_modules/css-tree/lib/syntax/node/PseudoClassSelector.js63
-rw-r--r--node_modules/css-tree/lib/syntax/node/PseudoElementSelector.js64
-rw-r--r--node_modules/css-tree/lib/syntax/node/Ratio.js59
-rw-r--r--node_modules/css-tree/lib/syntax/node/Raw.js41
-rw-r--r--node_modules/css-tree/lib/syntax/node/Rule.js51
-rw-r--r--node_modules/css-tree/lib/syntax/node/Selector.js32
-rw-r--r--node_modules/css-tree/lib/syntax/node/SelectorList.js35
-rw-r--r--node_modules/css-tree/lib/syntax/node/String.js19
-rw-r--r--node_modules/css-tree/lib/syntax/node/StyleSheet.js82
-rw-r--r--node_modules/css-tree/lib/syntax/node/TypeSelector.js52
-rw-r--r--node_modules/css-tree/lib/syntax/node/UnicodeRange.js156
-rw-r--r--node_modules/css-tree/lib/syntax/node/Url.js52
-rw-r--r--node_modules/css-tree/lib/syntax/node/Value.js19
-rw-r--r--node_modules/css-tree/lib/syntax/node/WhiteSpace.js27
-rw-r--r--node_modules/css-tree/lib/syntax/node/index-generate.js41
-rw-r--r--node_modules/css-tree/lib/syntax/node/index-parse-selector.js16
-rw-r--r--node_modules/css-tree/lib/syntax/node/index-parse.js41
-rw-r--r--node_modules/css-tree/lib/syntax/node/index.js41
-rw-r--r--node_modules/css-tree/lib/syntax/pseudo/index.js50
-rw-r--r--node_modules/css-tree/lib/syntax/scope/atrulePrelude.js5
-rw-r--r--node_modules/css-tree/lib/syntax/scope/default.js85
-rw-r--r--node_modules/css-tree/lib/syntax/scope/index.js3
-rw-r--r--node_modules/css-tree/lib/syntax/scope/selector.js94
-rw-r--r--node_modules/css-tree/lib/syntax/scope/value.js25
-rw-r--r--node_modules/css-tree/lib/tokenizer/OffsetToLocation.js87
-rw-r--r--node_modules/css-tree/lib/tokenizer/TokenStream.js272
-rw-r--r--node_modules/css-tree/lib/tokenizer/adopt-buffer.js9
-rw-r--r--node_modules/css-tree/lib/tokenizer/char-code-definitions.js207
-rw-r--r--node_modules/css-tree/lib/tokenizer/index.js513
-rw-r--r--node_modules/css-tree/lib/tokenizer/names.js27
-rw-r--r--node_modules/css-tree/lib/tokenizer/types.js28
-rw-r--r--node_modules/css-tree/lib/tokenizer/utils.js254
-rw-r--r--node_modules/css-tree/lib/utils/List.js469
-rw-r--r--node_modules/css-tree/lib/utils/clone.js21
-rw-r--r--node_modules/css-tree/lib/utils/create-custom-error.js14
-rw-r--r--node_modules/css-tree/lib/utils/ident.js101
-rw-r--r--node_modules/css-tree/lib/utils/index.js6
-rw-r--r--node_modules/css-tree/lib/utils/names.js106
-rw-r--r--node_modules/css-tree/lib/utils/string.js99
-rw-r--r--node_modules/css-tree/lib/utils/url.js108
-rw-r--r--node_modules/css-tree/lib/version.js5
-rw-r--r--node_modules/css-tree/lib/walker/create.js287
-rw-r--r--node_modules/css-tree/lib/walker/index.js4
-rw-r--r--node_modules/css-tree/node_modules/source-map-js/LICENSE28
-rw-r--r--node_modules/css-tree/node_modules/source-map-js/README.md765
-rw-r--r--node_modules/css-tree/node_modules/source-map-js/lib/array-set.js121
-rw-r--r--node_modules/css-tree/node_modules/source-map-js/lib/base64-vlq.js140
-rw-r--r--node_modules/css-tree/node_modules/source-map-js/lib/base64.js67
-rw-r--r--node_modules/css-tree/node_modules/source-map-js/lib/binary-search.js111
-rw-r--r--node_modules/css-tree/node_modules/source-map-js/lib/mapping-list.js79
-rw-r--r--node_modules/css-tree/node_modules/source-map-js/lib/quick-sort.js132
-rw-r--r--node_modules/css-tree/node_modules/source-map-js/lib/source-map-consumer.js1184
-rw-r--r--node_modules/css-tree/node_modules/source-map-js/lib/source-map-generator.js444
-rw-r--r--node_modules/css-tree/node_modules/source-map-js/lib/source-node.js413
-rw-r--r--node_modules/css-tree/node_modules/source-map-js/lib/util.js594
-rw-r--r--node_modules/css-tree/node_modules/source-map-js/package.json71
-rw-r--r--node_modules/css-tree/node_modules/source-map-js/source-map.d.ts115
-rw-r--r--node_modules/css-tree/node_modules/source-map-js/source-map.js8
-rw-r--r--node_modules/css-tree/package.json126
275 files changed, 0 insertions, 30300 deletions
diff --git a/node_modules/css-tree/LICENSE b/node_modules/css-tree/LICENSE
deleted file mode 100644
index b46f3c4a..00000000
--- a/node_modules/css-tree/LICENSE
+++ /dev/null
@@ -1,19 +0,0 @@
-Copyright (C) 2016-2022 by Roman Dvornov
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
diff --git a/node_modules/css-tree/README.md b/node_modules/css-tree/README.md
deleted file mode 100644
index df8f2cea..00000000
--- a/node_modules/css-tree/README.md
+++ /dev/null
@@ -1,193 +0,0 @@
-<img align="right" width="111" height="111"
- alt="CSSTree logo"
- src="https://cloud.githubusercontent.com/assets/270491/19243723/6f9136c6-8f21-11e6-82ac-eeeee4c6c452.png"/>
-
-# CSSTree
-
-[![NPM version](https://img.shields.io/npm/v/css-tree.svg)](https://www.npmjs.com/package/css-tree)
-[![Build Status](https://github.com/csstree/csstree/actions/workflows/build.yml/badge.svg)](https://github.com/csstree/csstree/actions/workflows/build.yml)
-[![Coverage Status](https://coveralls.io/repos/github/csstree/csstree/badge.svg?branch=master)](https://coveralls.io/github/csstree/csstree?branch=master)
-[![NPM Downloads](https://img.shields.io/npm/dm/css-tree.svg)](https://www.npmjs.com/package/css-tree)
-[![Twitter](https://img.shields.io/badge/Twitter-@csstree-blue.svg)](https://twitter.com/csstree)
-
-CSSTree is a tool set for CSS: [fast](https://github.com/postcss/benchmark) detailed parser (CSS → AST), walker (AST traversal), generator (AST → CSS) and lexer (validation and matching) based on specs and browser implementations. The main goal is to be efficient and W3C spec compliant, with focus on CSS analyzing and source-to-source transforming tasks.
-
-## Features
-
-- **Detailed parsing with an adjustable level of detail**
-
- By default CSSTree parses CSS as detailed as possible, i.e. each single logical part is representing with its own AST node (see [AST format](docs/ast.md) for all possible node types). The parsing detail level can be changed through [parser options](docs/parsing.md#parsesource-options), for example, you can disable parsing of selectors or declaration values for component parts.
-
-- **Tolerant to errors by design**
-
- Parser behaves as [spec says](https://www.w3.org/TR/css-syntax-3/#error-handling): "When errors occur in CSS, the parser attempts to recover gracefully, throwing away only the minimum amount of content before returning to parsing as normal". The only thing the parser departs from the specification is that it doesn't throw away bad content, but wraps it in a special node type (`Raw`) that allows processing it later.
-
-- **Fast and efficient**
-
- CSSTree is created with focus on performance and effective memory consumption. Therefore it's [one of the fastest CSS parsers](https://github.com/postcss/benchmark) at the moment.
-
-- **Syntax validation**
-
- The build-in lexer can test CSS against syntaxes defined by W3C. CSSTree uses [mdn/data](https://github.com/mdn/data/) as a basis for lexer's dictionaries and extends it with vendor specific and legacy syntaxes. Lexer can only check the declaration values currently, but this feature will be extended to other parts of the CSS in the future.
-
-## Projects using CSSTree
-
-- [Svelte](https://github.com/sveltejs/svelte) – Cybernetically enhanced web apps
-- [SVGO](https://github.com/svg/svgo) – Node.js tool for optimizing SVG files
-- [CSSO](https://github.com/css/csso) – CSS minifier with structural optimizations
-- [NativeScript](https://github.com/NativeScript/NativeScript) – NativeScript empowers you to access native APIs from JavaScript directly
-- [react-native-svg](https://github.com/react-native-svg/react-native-svg) – SVG library for React Native, React Native Web, and plain React web projects
-- [penthouse](https://github.com/pocketjoso/penthouse) – Critical Path CSS Generator
-- [Bit](https://github.com/teambit/bit) – Bit is the platform for collaborating on components
-- and more...
-
-## Documentation
-
-- [AST format](docs/ast.md)
-- [Parsing CSS → AST](docs/parsing.md)
- - [parse(source[, options])](docs/parsing.md#parsesource-options)
-- [Serialization AST → CSS](docs/generate.md)
- - [generate(ast[, options])](docs/generate.md#generateast-options)
-- [AST traversal](docs/traversal.md)
- - [walk(ast, options)](docs/traversal.md#walkast-options)
- - [find(ast, fn)](docs/traversal.md#findast-fn)
- - [findLast(ast, fn)](docs/traversal.md#findlastast-fn)
- - [findAll(ast, fn)](docs/traversal.md#findallast-fn)
-- [Util functions](docs/utils.md)
- - Value encoding & decoding
- - [property(name)](docs/utils.md#propertyname)
- - [keyword(name)](docs/utils.md#keywordname)
- - [ident](docs/utils.md#ident)
- - [string](docs/utils.md#string)
- - [url](docs/utils.md#url)
- - AST transforming
- - [clone(ast)](docs/utils.md#cloneast)
- - [fromPlainObject(object)](docs/utils.md#fromplainobjectobject)
- - [toPlainObject(ast)](docs/utils.md#toplainobjectast)
-- [Value Definition Syntax](docs/definition-syntax.md)
- - [parse(source)](docs/definition-syntax.md#parsesource)
- - [walk(node, options, context)](docs/definition-syntax.md#walknode-options-context)
- - [generate(node, options)](docs/definition-syntax.md#generatenode-options)
- - [AST format](docs/definition-syntax.md#ast-format)
-
-## Tools
-
-* [AST Explorer](https://astexplorer.net/#/gist/244e2fb4da940df52bf0f4b94277db44/e79aff44611020b22cfd9708f3a99ce09b7d67a8) – explore CSSTree AST format with zero setup
-* [CSS syntax reference](https://csstree.github.io/docs/syntax.html)
-* [CSS syntax validator](https://csstree.github.io/docs/validator.html)
-
-## Related projects
-
-* [csstree-validator](https://github.com/csstree/validator) – NPM package to validate CSS
-* [stylelint-csstree-validator](https://github.com/csstree/stylelint-validator) – plugin for stylelint to validate CSS
-* [Grunt plugin](https://github.com/sergejmueller/grunt-csstree-validator)
-* [Gulp plugin](https://github.com/csstree/gulp-csstree)
-* [Sublime plugin](https://github.com/csstree/SublimeLinter-contrib-csstree)
-* [VS Code plugin](https://github.com/csstree/vscode-plugin)
-* [Atom plugin](https://github.com/csstree/atom-plugin)
-
-## Usage
-
-Install with npm:
-
-```
-npm install css-tree
-```
-
-Basic usage:
-
-```js
-import * as csstree from 'css-tree';
-
-// parse CSS to AST
-const ast = csstree.parse('.example { world: "!" }');
-
-// traverse AST and modify it
-csstree.walk(ast, (node) => {
- if (node.type === 'ClassSelector' && node.name === 'example') {
- node.name = 'hello';
- }
-});
-
-// generate CSS from AST
-console.log(csstree.generate(ast));
-// .hello{world:"!"}
-```
-
-Syntax matching:
-
-```js
-// parse CSS to AST as a declaration value
-const ast = csstree.parse('red 1px solid', { context: 'value' });
-
-// match to syntax of `border` property
-const matchResult = csstree.lexer.matchProperty('border', ast);
-
-// check first value node is a <color>
-console.log(matchResult.isType(ast.children.first, 'color'));
-// true
-
-// get a type list matched to a node
-console.log(matchResult.getTrace(ast.children.first));
-// [ { type: 'Property', name: 'border' },
-// { type: 'Type', name: 'color' },
-// { type: 'Type', name: 'named-color' },
-// { type: 'Keyword', name: 'red' } ]
-```
-
-### Exports
-
-Is it possible to import just a needed part of library like a parser or a walker. That's might useful for loading time or bundle size optimisations.
-
-```js
-import * as tokenizer from 'css-tree/tokenizer';
-import * as parser from 'css-tree/parser';
-import * as walker from 'css-tree/walker';
-import * as lexer from 'css-tree/lexer';
-import * as definitionSyntax from 'css-tree/definition-syntax';
-import * as data from 'css-tree/definition-syntax-data';
-import * as dataPatch from 'css-tree/definition-syntax-data-patch';
-import * as utils from 'css-tree/utils';
-```
-
-### Using in a browser
-
-Bundles are available for use in a browser:
-
-- `dist/csstree.js` – minified IIFE with `csstree` as global
-```html
-<script src="node_modules/css-tree/dist/csstree.js"></script>
-<script>
- csstree.parse('.example { color: green }');
-</script>
-```
-
-- `dist/csstree.esm.js` – minified ES module
-```html
-<script type="module">
- import { parse } from 'node_modules/css-tree/dist/csstree.esm.js'
- parse('.example { color: green }');
-</script>
-```
-
-One of CDN services like `unpkg` or `jsDelivr` can be used. By default (for short path) a ESM version is exposing. For IIFE version a full path to a bundle should be specified:
-
-```html
-<!-- ESM -->
-<script type="module">
- import * as csstree from 'https://cdn.jsdelivr.net/npm/css-tree';
- import * as csstree from 'https://unpkg.com/css-tree';
-</script>
-
-<!-- IIFE with an export to global -->
-<script src="https://cdn.jsdelivr.net/npm/css-tree/dist/csstree.js"></script>
-<script src="https://unpkg.com/css-tree/dist/csstree.js"></script>
-```
-
-## Top level API
-
-![API map](https://cdn.rawgit.com/csstree/csstree/aaf327e/docs/api-map.svg)
-
-## License
-
-MIT
diff --git a/node_modules/css-tree/cjs/convertor/create.cjs b/node_modules/css-tree/cjs/convertor/create.cjs
deleted file mode 100644
index 55c655b2..00000000
--- a/node_modules/css-tree/cjs/convertor/create.cjs
+++ /dev/null
@@ -1,32 +0,0 @@
-'use strict';
-
-const List = require('../utils/List.cjs');
-
-function createConvertor(walk) {
- return {
- fromPlainObject(ast) {
- walk(ast, {
- enter(node) {
- if (node.children && node.children instanceof List.List === false) {
- node.children = new List.List().fromArray(node.children);
- }
- }
- });
-
- return ast;
- },
- toPlainObject(ast) {
- walk(ast, {
- leave(node) {
- if (node.children && node.children instanceof List.List) {
- node.children = node.children.toArray();
- }
- }
- });
-
- return ast;
- }
- };
-}
-
-exports.createConvertor = createConvertor;
diff --git a/node_modules/css-tree/cjs/convertor/index.cjs b/node_modules/css-tree/cjs/convertor/index.cjs
deleted file mode 100644
index 66542785..00000000
--- a/node_modules/css-tree/cjs/convertor/index.cjs
+++ /dev/null
@@ -1,8 +0,0 @@
-'use strict';
-
-const create = require('./create.cjs');
-const index$1 = require('../walker/index.cjs');
-
-const index = create.createConvertor(index$1);
-
-module.exports = index;
diff --git a/node_modules/css-tree/cjs/data-patch.cjs b/node_modules/css-tree/cjs/data-patch.cjs
deleted file mode 100644
index 9103ea4c..00000000
--- a/node_modules/css-tree/cjs/data-patch.cjs
+++ /dev/null
@@ -1,7 +0,0 @@
-'use strict';
-
-const patch = require('../data/patch.json');
-
-const patch$1 = patch;
-
-module.exports = patch$1;
diff --git a/node_modules/css-tree/cjs/data.cjs b/node_modules/css-tree/cjs/data.cjs
deleted file mode 100644
index 3ef8afdb..00000000
--- a/node_modules/css-tree/cjs/data.cjs
+++ /dev/null
@@ -1,99 +0,0 @@
-'use strict';
-
-const dataPatch = require('./data-patch.cjs');
-
-const mdnAtrules = require('mdn-data/css/at-rules.json');
-const mdnProperties = require('mdn-data/css/properties.json');
-const mdnSyntaxes = require('mdn-data/css/syntaxes.json');
-
-const extendSyntax = /^\s*\|\s*/;
-
-function preprocessAtrules(dict) {
- const result = Object.create(null);
-
- for (const atruleName in dict) {
- const atrule = dict[atruleName];
- let descriptors = null;
-
- if (atrule.descriptors) {
- descriptors = Object.create(null);
-
- for (const descriptor in atrule.descriptors) {
- descriptors[descriptor] = atrule.descriptors[descriptor].syntax;
- }
- }
-
- result[atruleName.substr(1)] = {
- prelude: atrule.syntax.trim().replace(/\{(.|\s)+\}/, '').match(/^@\S+\s+([^;\{]*)/)[1].trim() || null,
- descriptors
- };
- }
-
- return result;
-}
-
-function patchDictionary(dict, patchDict) {
- const result = {};
-
- // copy all syntaxes for an original dict
- for (const key in dict) {
- result[key] = dict[key].syntax || dict[key];
- }
-
- // apply a patch
- for (const key in patchDict) {
- if (key in dict) {
- if (patchDict[key].syntax) {
- result[key] = extendSyntax.test(patchDict[key].syntax)
- ? result[key] + ' ' + patchDict[key].syntax.trim()
- : patchDict[key].syntax;
- } else {
- delete result[key];
- }
- } else {
- if (patchDict[key].syntax) {
- result[key] = patchDict[key].syntax.replace(extendSyntax, '');
- }
- }
- }
-
- return result;
-}
-
-function patchAtrules(dict, patchDict) {
- const result = {};
-
- // copy all syntaxes for an original dict
- for (const key in dict) {
- const atrulePatch = patchDict[key] || {};
-
- result[key] = {
- prelude: key in patchDict && 'prelude' in atrulePatch
- ? atrulePatch.prelude
- : dict[key].prelude || null,
- descriptors: patchDictionary(dict[key].descriptors || {}, atrulePatch.descriptors || {})
- };
- }
-
- // apply a patch
- for (const key in patchDict) {
- if (!hasOwnProperty.call(dict, key)) {
- const atrulePatch = patchDict[key] || {};
-
- result[key] = {
- prelude: atrulePatch.prelude || null,
- descriptors: atrulePatch.descriptors && patchDictionary({}, atrulePatch.descriptors)
- };
- }
- }
-
- return result;
-}
-
-const definitions = {
- types: patchDictionary(mdnSyntaxes, dataPatch.types),
- atrules: patchAtrules(preprocessAtrules(mdnAtrules), dataPatch.atrules),
- properties: patchDictionary(mdnProperties, dataPatch.properties)
-};
-
-module.exports = definitions;
diff --git a/node_modules/css-tree/cjs/definition-syntax/SyntaxError.cjs b/node_modules/css-tree/cjs/definition-syntax/SyntaxError.cjs
deleted file mode 100644
index d24e7ced..00000000
--- a/node_modules/css-tree/cjs/definition-syntax/SyntaxError.cjs
+++ /dev/null
@@ -1,16 +0,0 @@
-'use strict';
-
-const createCustomError = require('../utils/create-custom-error.cjs');
-
-function SyntaxError(message, input, offset) {
- return Object.assign(createCustomError.createCustomError('SyntaxError', message), {
- input,
- offset,
- rawMessage: message,
- message: message + '\n' +
- ' ' + input + '\n' +
- '--' + new Array((offset || input.length) + 1).join('-') + '^'
- });
-}
-
-exports.SyntaxError = SyntaxError;
diff --git a/node_modules/css-tree/cjs/definition-syntax/generate.cjs b/node_modules/css-tree/cjs/definition-syntax/generate.cjs
deleted file mode 100644
index 785af062..00000000
--- a/node_modules/css-tree/cjs/definition-syntax/generate.cjs
+++ /dev/null
@@ -1,135 +0,0 @@
-'use strict';
-
-function noop(value) {
- return value;
-}
-
-function generateMultiplier(multiplier) {
- const { min, max, comma } = multiplier;
-
- if (min === 0 && max === 0) {
- return comma ? '#?' : '*';
- }
-
- if (min === 0 && max === 1) {
- return '?';
- }
-
- if (min === 1 && max === 0) {
- return comma ? '#' : '+';
- }
-
- if (min === 1 && max === 1) {
- return '';
- }
-
- return (
- (comma ? '#' : '') +
- (min === max
- ? '{' + min + '}'
- : '{' + min + ',' + (max !== 0 ? max : '') + '}'
- )
- );
-}
-
-function generateTypeOpts(node) {
- switch (node.type) {
- case 'Range':
- return (
- ' [' +
- (node.min === null ? '-∞' : node.min) +
- ',' +
- (node.max === null ? '∞' : node.max) +
- ']'
- );
-
- default:
- throw new Error('Unknown node type `' + node.type + '`');
- }
-}
-
-function generateSequence(node, decorate, forceBraces, compact) {
- const combinator = node.combinator === ' ' || compact ? node.combinator : ' ' + node.combinator + ' ';
- const result = node.terms
- .map(term => internalGenerate(term, decorate, forceBraces, compact))
- .join(combinator);
-
- if (node.explicit || forceBraces) {
- return (compact || result[0] === ',' ? '[' : '[ ') + result + (compact ? ']' : ' ]');
- }
-
- return result;
-}
-
-function internalGenerate(node, decorate, forceBraces, compact) {
- let result;
-
- switch (node.type) {
- case 'Group':
- result =
- generateSequence(node, decorate, forceBraces, compact) +
- (node.disallowEmpty ? '!' : '');
- break;
-
- case 'Multiplier':
- // return since node is a composition
- return (
- internalGenerate(node.term, decorate, forceBraces, compact) +
- decorate(generateMultiplier(node), node)
- );
-
- case 'Type':
- result = '<' + node.name + (node.opts ? decorate(generateTypeOpts(node.opts), node.opts) : '') + '>';
- break;
-
- case 'Property':
- result = '<\'' + node.name + '\'>';
- break;
-
- case 'Keyword':
- result = node.name;
- break;
-
- case 'AtKeyword':
- result = '@' + node.name;
- break;
-
- case 'Function':
- result = node.name + '(';
- break;
-
- case 'String':
- case 'Token':
- result = node.value;
- break;
-
- case 'Comma':
- result = ',';
- break;
-
- default:
- throw new Error('Unknown node type `' + node.type + '`');
- }
-
- return decorate(result, node);
-}
-
-function generate(node, options) {
- let decorate = noop;
- let forceBraces = false;
- let compact = false;
-
- if (typeof options === 'function') {
- decorate = options;
- } else if (options) {
- forceBraces = Boolean(options.forceBraces);
- compact = Boolean(options.compact);
- if (typeof options.decorate === 'function') {
- decorate = options.decorate;
- }
- }
-
- return internalGenerate(node, decorate, forceBraces, compact);
-}
-
-exports.generate = generate;
diff --git a/node_modules/css-tree/cjs/definition-syntax/index.cjs b/node_modules/css-tree/cjs/definition-syntax/index.cjs
deleted file mode 100644
index 0afb505c..00000000
--- a/node_modules/css-tree/cjs/definition-syntax/index.cjs
+++ /dev/null
@@ -1,13 +0,0 @@
-'use strict';
-
-const SyntaxError = require('./SyntaxError.cjs');
-const generate = require('./generate.cjs');
-const parse = require('./parse.cjs');
-const walk = require('./walk.cjs');
-
-
-
-exports.SyntaxError = SyntaxError.SyntaxError;
-exports.generate = generate.generate;
-exports.parse = parse.parse;
-exports.walk = walk.walk;
diff --git a/node_modules/css-tree/cjs/definition-syntax/parse.cjs b/node_modules/css-tree/cjs/definition-syntax/parse.cjs
deleted file mode 100644
index 53eee015..00000000
--- a/node_modules/css-tree/cjs/definition-syntax/parse.cjs
+++ /dev/null
@@ -1,588 +0,0 @@
-'use strict';
-
-const tokenizer = require('./tokenizer.cjs');
-
-const TAB = 9;
-const N = 10;
-const F = 12;
-const R = 13;
-const SPACE = 32;
-const EXCLAMATIONMARK = 33; // !
-const NUMBERSIGN = 35; // #
-const AMPERSAND = 38; // &
-const APOSTROPHE = 39; // '
-const LEFTPARENTHESIS = 40; // (
-const RIGHTPARENTHESIS = 41; // )
-const ASTERISK = 42; // *
-const PLUSSIGN = 43; // +
-const COMMA = 44; // ,
-const HYPERMINUS = 45; // -
-const LESSTHANSIGN = 60; // <
-const GREATERTHANSIGN = 62; // >
-const QUESTIONMARK = 63; // ?
-const COMMERCIALAT = 64; // @
-const LEFTSQUAREBRACKET = 91; // [
-const RIGHTSQUAREBRACKET = 93; // ]
-const LEFTCURLYBRACKET = 123; // {
-const VERTICALLINE = 124; // |
-const RIGHTCURLYBRACKET = 125; // }
-const INFINITY = 8734; // ∞
-const NAME_CHAR = new Uint8Array(128).map((_, idx) =>
- /[a-zA-Z0-9\-]/.test(String.fromCharCode(idx)) ? 1 : 0
-);
-const COMBINATOR_PRECEDENCE = {
- ' ': 1,
- '&&': 2,
- '||': 3,
- '|': 4
-};
-
-function scanSpaces(tokenizer) {
- return tokenizer.substringToPos(
- tokenizer.findWsEnd(tokenizer.pos)
- );
-}
-
-function scanWord(tokenizer) {
- let end = tokenizer.pos;
-
- for (; end < tokenizer.str.length; end++) {
- const code = tokenizer.str.charCodeAt(end);
- if (code >= 128 || NAME_CHAR[code] === 0) {
- break;
- }
- }
-
- if (tokenizer.pos === end) {
- tokenizer.error('Expect a keyword');
- }
-
- return tokenizer.substringToPos(end);
-}
-
-function scanNumber(tokenizer) {
- let end = tokenizer.pos;
-
- for (; end < tokenizer.str.length; end++) {
- const code = tokenizer.str.charCodeAt(end);
- if (code < 48 || code > 57) {
- break;
- }
- }
-
- if (tokenizer.pos === end) {
- tokenizer.error('Expect a number');
- }
-
- return tokenizer.substringToPos(end);
-}
-
-function scanString(tokenizer) {
- const end = tokenizer.str.indexOf('\'', tokenizer.pos + 1);
-
- if (end === -1) {
- tokenizer.pos = tokenizer.str.length;
- tokenizer.error('Expect an apostrophe');
- }
-
- return tokenizer.substringToPos(end + 1);
-}
-
-function readMultiplierRange(tokenizer) {
- let min = null;
- let max = null;
-
- tokenizer.eat(LEFTCURLYBRACKET);
-
- min = scanNumber(tokenizer);
-
- if (tokenizer.charCode() === COMMA) {
- tokenizer.pos++;
- if (tokenizer.charCode() !== RIGHTCURLYBRACKET) {
- max = scanNumber(tokenizer);
- }
- } else {
- max = min;
- }
-
- tokenizer.eat(RIGHTCURLYBRACKET);
-
- return {
- min: Number(min),
- max: max ? Number(max) : 0
- };
-}
-
-function readMultiplier(tokenizer) {
- let range = null;
- let comma = false;
-
- switch (tokenizer.charCode()) {
- case ASTERISK:
- tokenizer.pos++;
-
- range = {
- min: 0,
- max: 0
- };
-
- break;
-
- case PLUSSIGN:
- tokenizer.pos++;
-
- range = {
- min: 1,
- max: 0
- };
-
- break;
-
- case QUESTIONMARK:
- tokenizer.pos++;
-
- range = {
- min: 0,
- max: 1
- };
-
- break;
-
- case NUMBERSIGN:
- tokenizer.pos++;
-
- comma = true;
-
- if (tokenizer.charCode() === LEFTCURLYBRACKET) {
- range = readMultiplierRange(tokenizer);
- } else if (tokenizer.charCode() === QUESTIONMARK) {
- // https://www.w3.org/TR/css-values-4/#component-multipliers
- // > the # and ? multipliers may be stacked as #?
- // In this case just treat "#?" as a single multiplier
- // { min: 0, max: 0, comma: true }
- tokenizer.pos++;
- range = {
- min: 0,
- max: 0
- };
- } else {
- range = {
- min: 1,
- max: 0
- };
- }
-
- break;
-
- case LEFTCURLYBRACKET:
- range = readMultiplierRange(tokenizer);
- break;
-
- default:
- return null;
- }
-
- return {
- type: 'Multiplier',
- comma,
- min: range.min,
- max: range.max,
- term: null
- };
-}
-
-function maybeMultiplied(tokenizer, node) {
- const multiplier = readMultiplier(tokenizer);
-
- if (multiplier !== null) {
- multiplier.term = node;
-
- // https://www.w3.org/TR/css-values-4/#component-multipliers
- // > The + and # multipliers may be stacked as +#;
- // Represent "+#" as nested multipliers:
- // { ...<multiplier #>,
- // term: {
- // ...<multipler +>,
- // term: node
- // }
- // }
- if (tokenizer.charCode() === NUMBERSIGN &&
- tokenizer.charCodeAt(tokenizer.pos - 1) === PLUSSIGN) {
- return maybeMultiplied(tokenizer, multiplier);
- }
-
- return multiplier;
- }
-
- return node;
-}
-
-function maybeToken(tokenizer) {
- const ch = tokenizer.peek();
-
- if (ch === '') {
- return null;
- }
-
- return {
- type: 'Token',
- value: ch
- };
-}
-
-function readProperty(tokenizer) {
- let name;
-
- tokenizer.eat(LESSTHANSIGN);
- tokenizer.eat(APOSTROPHE);
-
- name = scanWord(tokenizer);
-
- tokenizer.eat(APOSTROPHE);
- tokenizer.eat(GREATERTHANSIGN);
-
- return maybeMultiplied(tokenizer, {
- type: 'Property',
- name
- });
-}
-
-// https://drafts.csswg.org/css-values-3/#numeric-ranges
-// 4.1. Range Restrictions and Range Definition Notation
-//
-// Range restrictions can be annotated in the numeric type notation using CSS bracketed
-// range notation—[min,max]—within the angle brackets, after the identifying keyword,
-// indicating a closed range between (and including) min and max.
-// For example, <integer [0, 10]> indicates an integer between 0 and 10, inclusive.
-function readTypeRange(tokenizer) {
- // use null for Infinity to make AST format JSON serializable/deserializable
- let min = null; // -Infinity
- let max = null; // Infinity
- let sign = 1;
-
- tokenizer.eat(LEFTSQUAREBRACKET);
-
- if (tokenizer.charCode() === HYPERMINUS) {
- tokenizer.peek();
- sign = -1;
- }
-
- if (sign == -1 && tokenizer.charCode() === INFINITY) {
- tokenizer.peek();
- } else {
- min = sign * Number(scanNumber(tokenizer));
-
- if (NAME_CHAR[tokenizer.charCode()] !== 0) {
- min += scanWord(tokenizer);
- }
- }
-
- scanSpaces(tokenizer);
- tokenizer.eat(COMMA);
- scanSpaces(tokenizer);
-
- if (tokenizer.charCode() === INFINITY) {
- tokenizer.peek();
- } else {
- sign = 1;
-
- if (tokenizer.charCode() === HYPERMINUS) {
- tokenizer.peek();
- sign = -1;
- }
-
- max = sign * Number(scanNumber(tokenizer));
-
- if (NAME_CHAR[tokenizer.charCode()] !== 0) {
- max += scanWord(tokenizer);
- }
- }
-
- tokenizer.eat(RIGHTSQUAREBRACKET);
-
- return {
- type: 'Range',
- min,
- max
- };
-}
-
-function readType(tokenizer) {
- let name;
- let opts = null;
-
- tokenizer.eat(LESSTHANSIGN);
- name = scanWord(tokenizer);
-
- if (tokenizer.charCode() === LEFTPARENTHESIS &&
- tokenizer.nextCharCode() === RIGHTPARENTHESIS) {
- tokenizer.pos += 2;
- name += '()';
- }
-
- if (tokenizer.charCodeAt(tokenizer.findWsEnd(tokenizer.pos)) === LEFTSQUAREBRACKET) {
- scanSpaces(tokenizer);
- opts = readTypeRange(tokenizer);
- }
-
- tokenizer.eat(GREATERTHANSIGN);
-
- return maybeMultiplied(tokenizer, {
- type: 'Type',
- name,
- opts
- });
-}
-
-function readKeywordOrFunction(tokenizer) {
- const name = scanWord(tokenizer);
-
- if (tokenizer.charCode() === LEFTPARENTHESIS) {
- tokenizer.pos++;
-
- return {
- type: 'Function',
- name
- };
- }
-
- return maybeMultiplied(tokenizer, {
- type: 'Keyword',
- name
- });
-}
-
-function regroupTerms(terms, combinators) {
- function createGroup(terms, combinator) {
- return {
- type: 'Group',
- terms,
- combinator,
- disallowEmpty: false,
- explicit: false
- };
- }
-
- let combinator;
-
- combinators = Object.keys(combinators)
- .sort((a, b) => COMBINATOR_PRECEDENCE[a] - COMBINATOR_PRECEDENCE[b]);
-
- while (combinators.length > 0) {
- combinator = combinators.shift();
-
- let i = 0;
- let subgroupStart = 0;
-
- for (; i < terms.length; i++) {
- const term = terms[i];
-
- if (term.type === 'Combinator') {
- if (term.value === combinator) {
- if (subgroupStart === -1) {
- subgroupStart = i - 1;
- }
- terms.splice(i, 1);
- i--;
- } else {
- if (subgroupStart !== -1 && i - subgroupStart > 1) {
- terms.splice(
- subgroupStart,
- i - subgroupStart,
- createGroup(terms.slice(subgroupStart, i), combinator)
- );
- i = subgroupStart + 1;
- }
- subgroupStart = -1;
- }
- }
- }
-
- if (subgroupStart !== -1 && combinators.length) {
- terms.splice(
- subgroupStart,
- i - subgroupStart,
- createGroup(terms.slice(subgroupStart, i), combinator)
- );
- }
- }
-
- return combinator;
-}
-
-function readImplicitGroup(tokenizer) {
- const terms = [];
- const combinators = {};
- let token;
- let prevToken = null;
- let prevTokenPos = tokenizer.pos;
-
- while (token = peek(tokenizer)) {
- if (token.type !== 'Spaces') {
- if (token.type === 'Combinator') {
- // check for combinator in group beginning and double combinator sequence
- if (prevToken === null || prevToken.type === 'Combinator') {
- tokenizer.pos = prevTokenPos;
- tokenizer.error('Unexpected combinator');
- }
-
- combinators[token.value] = true;
- } else if (prevToken !== null && prevToken.type !== 'Combinator') {
- combinators[' '] = true; // a b
- terms.push({
- type: 'Combinator',
- value: ' '
- });
- }
-
- terms.push(token);
- prevToken = token;
- prevTokenPos = tokenizer.pos;
- }
- }
-
- // check for combinator in group ending
- if (prevToken !== null && prevToken.type === 'Combinator') {
- tokenizer.pos -= prevTokenPos;
- tokenizer.error('Unexpected combinator');
- }
-
- return {
- type: 'Group',
- terms,
- combinator: regroupTerms(terms, combinators) || ' ',
- disallowEmpty: false,
- explicit: false
- };
-}
-
-function readGroup(tokenizer) {
- let result;
-
- tokenizer.eat(LEFTSQUAREBRACKET);
- result = readImplicitGroup(tokenizer);
- tokenizer.eat(RIGHTSQUAREBRACKET);
-
- result.explicit = true;
-
- if (tokenizer.charCode() === EXCLAMATIONMARK) {
- tokenizer.pos++;
- result.disallowEmpty = true;
- }
-
- return result;
-}
-
-function peek(tokenizer) {
- let code = tokenizer.charCode();
-
- if (code < 128 && NAME_CHAR[code] === 1) {
- return readKeywordOrFunction(tokenizer);
- }
-
- switch (code) {
- case RIGHTSQUAREBRACKET:
- // don't eat, stop scan a group
- break;
-
- case LEFTSQUAREBRACKET:
- return maybeMultiplied(tokenizer, readGroup(tokenizer));
-
- case LESSTHANSIGN:
- return tokenizer.nextCharCode() === APOSTROPHE
- ? readProperty(tokenizer)
- : readType(tokenizer);
-
- case VERTICALLINE:
- return {
- type: 'Combinator',
- value: tokenizer.substringToPos(
- tokenizer.pos + (tokenizer.nextCharCode() === VERTICALLINE ? 2 : 1)
- )
- };
-
- case AMPERSAND:
- tokenizer.pos++;
- tokenizer.eat(AMPERSAND);
-
- return {
- type: 'Combinator',
- value: '&&'
- };
-
- case COMMA:
- tokenizer.pos++;
- return {
- type: 'Comma'
- };
-
- case APOSTROPHE:
- return maybeMultiplied(tokenizer, {
- type: 'String',
- value: scanString(tokenizer)
- });
-
- case SPACE:
- case TAB:
- case N:
- case R:
- case F:
- return {
- type: 'Spaces',
- value: scanSpaces(tokenizer)
- };
-
- case COMMERCIALAT:
- code = tokenizer.nextCharCode();
-
- if (code < 128 && NAME_CHAR[code] === 1) {
- tokenizer.pos++;
- return {
- type: 'AtKeyword',
- name: scanWord(tokenizer)
- };
- }
-
- return maybeToken(tokenizer);
-
- case ASTERISK:
- case PLUSSIGN:
- case QUESTIONMARK:
- case NUMBERSIGN:
- case EXCLAMATIONMARK:
- // prohibited tokens (used as a multiplier start)
- break;
-
- case LEFTCURLYBRACKET:
- // LEFTCURLYBRACKET is allowed since mdn/data uses it w/o quoting
- // check next char isn't a number, because it's likely a disjoined multiplier
- code = tokenizer.nextCharCode();
-
- if (code < 48 || code > 57) {
- return maybeToken(tokenizer);
- }
-
- break;
-
- default:
- return maybeToken(tokenizer);
- }
-}
-
-function parse(source) {
- const tokenizer$1 = new tokenizer.Tokenizer(source);
- const result = readImplicitGroup(tokenizer$1);
-
- if (tokenizer$1.pos !== source.length) {
- tokenizer$1.error('Unexpected input');
- }
-
- // reduce redundant groups with single group term
- if (result.terms.length === 1 && result.terms[0].type === 'Group') {
- return result.terms[0];
- }
-
- return result;
-}
-
-exports.parse = parse;
diff --git a/node_modules/css-tree/cjs/definition-syntax/tokenizer.cjs b/node_modules/css-tree/cjs/definition-syntax/tokenizer.cjs
deleted file mode 100644
index 6ab5ece2..00000000
--- a/node_modules/css-tree/cjs/definition-syntax/tokenizer.cjs
+++ /dev/null
@@ -1,56 +0,0 @@
-'use strict';
-
-const SyntaxError = require('./SyntaxError.cjs');
-
-const TAB = 9;
-const N = 10;
-const F = 12;
-const R = 13;
-const SPACE = 32;
-
-class Tokenizer {
- constructor(str) {
- this.str = str;
- this.pos = 0;
- }
- charCodeAt(pos) {
- return pos < this.str.length ? this.str.charCodeAt(pos) : 0;
- }
- charCode() {
- return this.charCodeAt(this.pos);
- }
- nextCharCode() {
- return this.charCodeAt(this.pos + 1);
- }
- nextNonWsCode(pos) {
- return this.charCodeAt(this.findWsEnd(pos));
- }
- findWsEnd(pos) {
- for (; pos < this.str.length; pos++) {
- const code = this.str.charCodeAt(pos);
- if (code !== R && code !== N && code !== F && code !== SPACE && code !== TAB) {
- break;
- }
- }
-
- return pos;
- }
- substringToPos(end) {
- return this.str.substring(this.pos, this.pos = end);
- }
- eat(code) {
- if (this.charCode() !== code) {
- this.error('Expect `' + String.fromCharCode(code) + '`');
- }
-
- this.pos++;
- }
- peek() {
- return this.pos < this.str.length ? this.str.charAt(this.pos++) : '';
- }
- error(message) {
- throw new SyntaxError.SyntaxError(message, this.str, this.pos);
- }
-}
-
-exports.Tokenizer = Tokenizer;
diff --git a/node_modules/css-tree/cjs/definition-syntax/walk.cjs b/node_modules/css-tree/cjs/definition-syntax/walk.cjs
deleted file mode 100644
index 728a446d..00000000
--- a/node_modules/css-tree/cjs/definition-syntax/walk.cjs
+++ /dev/null
@@ -1,56 +0,0 @@
-'use strict';
-
-const noop = function() {};
-
-function ensureFunction(value) {
- return typeof value === 'function' ? value : noop;
-}
-
-function walk(node, options, context) {
- function walk(node) {
- enter.call(context, node);
-
- switch (node.type) {
- case 'Group':
- node.terms.forEach(walk);
- break;
-
- case 'Multiplier':
- walk(node.term);
- break;
-
- case 'Type':
- case 'Property':
- case 'Keyword':
- case 'AtKeyword':
- case 'Function':
- case 'String':
- case 'Token':
- case 'Comma':
- break;
-
- default:
- throw new Error('Unknown type: ' + node.type);
- }
-
- leave.call(context, node);
- }
-
- let enter = noop;
- let leave = noop;
-
- if (typeof options === 'function') {
- enter = options;
- } else if (options) {
- enter = ensureFunction(options.enter);
- leave = ensureFunction(options.leave);
- }
-
- if (enter === noop && leave === noop) {
- throw new Error('Neither `enter` nor `leave` walker handler is set or both aren\'t a function');
- }
-
- walk(node);
-}
-
-exports.walk = walk;
diff --git a/node_modules/css-tree/cjs/generator/create.cjs b/node_modules/css-tree/cjs/generator/create.cjs
deleted file mode 100644
index ab80f3ac..00000000
--- a/node_modules/css-tree/cjs/generator/create.cjs
+++ /dev/null
@@ -1,103 +0,0 @@
-'use strict';
-
-const index = require('../tokenizer/index.cjs');
-const sourceMap = require('./sourceMap.cjs');
-const tokenBefore = require('./token-before.cjs');
-const types = require('../tokenizer/types.cjs');
-
-const REVERSESOLIDUS = 0x005c; // U+005C REVERSE SOLIDUS (\)
-
-function processChildren(node, delimeter) {
- if (typeof delimeter === 'function') {
- let prev = null;
-
- node.children.forEach(node => {
- if (prev !== null) {
- delimeter.call(this, prev);
- }
-
- this.node(node);
- prev = node;
- });
-
- return;
- }
-
- node.children.forEach(this.node, this);
-}
-
-function processChunk(chunk) {
- index.tokenize(chunk, (type, start, end) => {
- this.token(type, chunk.slice(start, end));
- });
-}
-
-function createGenerator(config) {
- const types$1 = new Map();
-
- for (let name in config.node) {
- const item = config.node[name];
- const fn = item.generate || item;
-
- if (typeof fn === 'function') {
- types$1.set(name, item.generate || item);
- }
- }
-
- return function(node, options) {
- let buffer = '';
- let prevCode = 0;
- let handlers = {
- node(node) {
- if (types$1.has(node.type)) {
- types$1.get(node.type).call(publicApi, node);
- } else {
- throw new Error('Unknown node type: ' + node.type);
- }
- },
- tokenBefore: tokenBefore.safe,
- token(type, value) {
- prevCode = this.tokenBefore(prevCode, type, value);
-
- this.emit(value, type, false);
-
- if (type === types.Delim && value.charCodeAt(0) === REVERSESOLIDUS) {
- this.emit('\n', types.WhiteSpace, true);
- }
- },
- emit(value) {
- buffer += value;
- },
- result() {
- return buffer;
- }
- };
-
- if (options) {
- if (typeof options.decorator === 'function') {
- handlers = options.decorator(handlers);
- }
-
- if (options.sourceMap) {
- handlers = sourceMap.generateSourceMap(handlers);
- }
-
- if (options.mode in tokenBefore) {
- handlers.tokenBefore = tokenBefore[options.mode];
- }
- }
-
- const publicApi = {
- node: (node) => handlers.node(node),
- children: processChildren,
- token: (type, value) => handlers.token(type, value),
- tokenize: processChunk
- };
-
- handlers.node(node);
-
- return handlers.result();
- };
-}
-
-exports.createGenerator = createGenerator;
diff --git a/node_modules/css-tree/cjs/generator/index.cjs b/node_modules/css-tree/cjs/generator/index.cjs
deleted file mode 100644
index 5c87cd34..00000000
--- a/node_modules/css-tree/cjs/generator/index.cjs
+++ /dev/null
@@ -1,8 +0,0 @@
-'use strict';
-
-const create = require('./create.cjs');
-const generator = require('../syntax/config/generator.cjs');
-
-const index = create.createGenerator(generator);
-
-module.exports = index;
diff --git a/node_modules/css-tree/cjs/generator/sourceMap.cjs b/node_modules/css-tree/cjs/generator/sourceMap.cjs
deleted file mode 100644
index efbc5b9e..00000000
--- a/node_modules/css-tree/cjs/generator/sourceMap.cjs
+++ /dev/null
@@ -1,96 +0,0 @@
-'use strict';
-
-const sourceMapGenerator_js = require('source-map-js/lib/source-map-generator.js');
-
-const trackNodes = new Set(['Atrule', 'Selector', 'Declaration']);
-
-function generateSourceMap(handlers) {
- const map = new sourceMapGenerator_js.SourceMapGenerator();
- const generated = {
- line: 1,
- column: 0
- };
- const original = {
- line: 0, // should be zero to add first mapping
- column: 0
- };
- const activatedGenerated = {
- line: 1,
- column: 0
- };
- const activatedMapping = {
- generated: activatedGenerated
- };
- let line = 1;
- let column = 0;
- let sourceMappingActive = false;
-
- const origHandlersNode = handlers.node;
- handlers.node = function(node) {
- if (node.loc && node.loc.start && trackNodes.has(node.type)) {
- const nodeLine = node.loc.start.line;
- const nodeColumn = node.loc.start.column - 1;
-
- if (original.line !== nodeLine ||
- original.column !== nodeColumn) {
- original.line = nodeLine;
- original.column = nodeColumn;
-
- generated.line = line;
- generated.column = column;
-
- if (sourceMappingActive) {
- sourceMappingActive = false;
- if (generated.line !== activatedGenerated.line ||
- generated.column !== activatedGenerated.column) {
- map.addMapping(activatedMapping);
- }
- }
-
- sourceMappingActive = true;
- map.addMapping({
- source: node.loc.source,
- original,
- generated
- });
- }
- }
-
- origHandlersNode.call(this, node);
-
- if (sourceMappingActive && trackNodes.has(node.type)) {
- activatedGenerated.line = line;
- activatedGenerated.column = column;
- }
- };
-
- const origHandlersEmit = handlers.emit;
- handlers.emit = function(value, type, auto) {
- for (let i = 0; i < value.length; i++) {
- if (value.charCodeAt(i) === 10) { // \n
- line++;
- column = 0;
- } else {
- column++;
- }
- }
-
- origHandlersEmit(value, type, auto);
- };
-
- const origHandlersResult = handlers.result;
- handlers.result = function() {
- if (sourceMappingActive) {
- map.addMapping(activatedMapping);
- }
-
- return {
- css: origHandlersResult(),
- map
- };
- };
-
- return handlers;
-}
-
-exports.generateSourceMap = generateSourceMap;
diff --git a/node_modules/css-tree/cjs/generator/token-before.cjs b/node_modules/css-tree/cjs/generator/token-before.cjs
deleted file mode 100644
index 87bf4a3e..00000000
--- a/node_modules/css-tree/cjs/generator/token-before.cjs
+++ /dev/null
@@ -1,170 +0,0 @@
-'use strict';
-
-const types = require('../tokenizer/types.cjs');
-
-const PLUSSIGN = 0x002B; // U+002B PLUS SIGN (+)
-const HYPHENMINUS = 0x002D; // U+002D HYPHEN-MINUS (-)
-
-const code = (type, value) => {
- if (type === types.Delim) {
- type = value;
- }
-
- if (typeof type === 'string') {
- const charCode = type.charCodeAt(0);
- return charCode > 0x7F ? 0x8000 : charCode << 8;
- }
-
- return type;
-};
-
-// https://www.w3.org/TR/css-syntax-3/#serialization
-// The only requirement for serialization is that it must "round-trip" with parsing,
-// that is, parsing the stylesheet must produce the same data structures as parsing,
-// serializing, and parsing again, except for consecutive <whitespace-token>s,
-// which may be collapsed into a single token.
-
-const specPairs = [
- [types.Ident, types.Ident],
- [types.Ident, types.Function],
- [types.Ident, types.Url],
- [types.Ident, types.BadUrl],
- [types.Ident, '-'],
- [types.Ident, types.Number],
- [types.Ident, types.Percentage],
- [types.Ident, types.Dimension],
- [types.Ident, types.CDC],
- [types.Ident, types.LeftParenthesis],
-
- [types.AtKeyword, types.Ident],
- [types.AtKeyword, types.Function],
- [types.AtKeyword, types.Url],
- [types.AtKeyword, types.BadUrl],
- [types.AtKeyword, '-'],
- [types.AtKeyword, types.Number],
- [types.AtKeyword, types.Percentage],
- [types.AtKeyword, types.Dimension],
- [types.AtKeyword, types.CDC],
-
- [types.Hash, types.Ident],
- [types.Hash, types.Function],
- [types.Hash, types.Url],
- [types.Hash, types.BadUrl],
- [types.Hash, '-'],
- [types.Hash, types.Number],
- [types.Hash, types.Percentage],
- [types.Hash, types.Dimension],
- [types.Hash, types.CDC],
-
- [types.Dimension, types.Ident],
- [types.Dimension, types.Function],
- [types.Dimension, types.Url],
- [types.Dimension, types.BadUrl],
- [types.Dimension, '-'],
- [types.Dimension, types.Number],
- [types.Dimension, types.Percentage],
- [types.Dimension, types.Dimension],
- [types.Dimension, types.CDC],
-
- ['#', types.Ident],
- ['#', types.Function],
- ['#', types.Url],
- ['#', types.BadUrl],
- ['#', '-'],
- ['#', types.Number],
- ['#', types.Percentage],
- ['#', types.Dimension],
- ['#', types.CDC], // https://github.com/w3c/csswg-drafts/pull/6874
-
- ['-', types.Ident],
- ['-', types.Function],
- ['-', types.Url],
- ['-', types.BadUrl],
- ['-', '-'],
- ['-', types.Number],
- ['-', types.Percentage],
- ['-', types.Dimension],
- ['-', types.CDC], // https://github.com/w3c/csswg-drafts/pull/6874
-
- [types.Number, types.Ident],
- [types.Number, types.Function],
- [types.Number, types.Url],
- [types.Number, types.BadUrl],
- [types.Number, types.Number],
- [types.Number, types.Percentage],
- [types.Number, types.Dimension],
- [types.Number, '%'],
- [types.Number, types.CDC], // https://github.com/w3c/csswg-drafts/pull/6874
-
- ['@', types.Ident],
- ['@', types.Function],
- ['@', types.Url],
- ['@', types.BadUrl],
- ['@', '-'],
- ['@', types.CDC], // https://github.com/w3c/csswg-drafts/pull/6874
-
- ['.', types.Number],
- ['.', types.Percentage],
- ['.', types.Dimension],
-
- ['+', types.Number],
- ['+', types.Percentage],
- ['+', types.Dimension],
-
- ['/', '*']
-];
-// validate with scripts/generate-safe
-const safePairs = specPairs.concat([
- [types.Ident, types.Hash],
-
- [types.Dimension, types.Hash],
-
- [types.Hash, types.Hash],
-
- [types.AtKeyword, types.LeftParenthesis],
- [types.AtKeyword, types.String],
- [types.AtKeyword, types.Colon],
-
- [types.Percentage, types.Percentage],
- [types.Percentage, types.Dimension],
- [types.Percentage, types.Function],
- [types.Percentage, '-'],
-
- [types.RightParenthesis, types.Ident],
- [types.RightParenthesis, types.Function],
- [types.RightParenthesis, types.Percentage],
- [types.RightParenthesis, types.Dimension],
- [types.RightParenthesis, types.Hash],
- [types.RightParenthesis, '-']
-]);
-
-function createMap(pairs) {
- const isWhiteSpaceRequired = new Set(
- pairs.map(([prev, next]) => (code(prev) << 16 | code(next)))
- );
-
- return function(prevCode, type, value) {
- const nextCode = code(type, value);
- const nextCharCode = value.charCodeAt(0);
- const emitWs =
- (nextCharCode === HYPHENMINUS &&
- type !== types.Ident &&
- type !== types.Function &&
- type !== types.CDC) ||
- (nextCharCode === PLUSSIGN)
- ? isWhiteSpaceRequired.has(prevCode << 16 | nextCharCode << 8)
- : isWhiteSpaceRequired.has(prevCode << 16 | nextCode);
-
- if (emitWs) {
- this.emit(' ', types.WhiteSpace, true);
- }
-
- return nextCode;
- };
-}
-
-const spec = createMap(specPairs);
-const safe = createMap(safePairs);
-
-exports.safe = safe;
-exports.spec = spec;
diff --git a/node_modules/css-tree/cjs/index.cjs b/node_modules/css-tree/cjs/index.cjs
deleted file mode 100644
index b781d15b..00000000
--- a/node_modules/css-tree/cjs/index.cjs
+++ /dev/null
@@ -1,63 +0,0 @@
-'use strict';
-
-const index$1 = require('./syntax/index.cjs');
-const version = require('./version.cjs');
-const create = require('./syntax/create.cjs');
-const List = require('./utils/List.cjs');
-const Lexer = require('./lexer/Lexer.cjs');
-const index = require('./definition-syntax/index.cjs');
-const clone = require('./utils/clone.cjs');
-const names$1 = require('./utils/names.cjs');
-const ident = require('./utils/ident.cjs');
-const string = require('./utils/string.cjs');
-const url = require('./utils/url.cjs');
-const types = require('./tokenizer/types.cjs');
-const names = require('./tokenizer/names.cjs');
-const TokenStream = require('./tokenizer/TokenStream.cjs');
-
-const {
- tokenize,
- parse,
- generate,
- lexer,
- createLexer,
-
- walk,
- find,
- findLast,
- findAll,
-
- toPlainObject,
- fromPlainObject,
-
- fork
-} = index$1;
-
-exports.version = version.version;
-exports.createSyntax = create;
-exports.List = List.List;
-exports.Lexer = Lexer.Lexer;
-exports.definitionSyntax = index;
-exports.clone = clone.clone;
-exports.isCustomProperty = names$1.isCustomProperty;
-exports.keyword = names$1.keyword;
-exports.property = names$1.property;
-exports.vendorPrefix = names$1.vendorPrefix;
-exports.ident = ident;
-exports.string = string;
-exports.url = url;
-exports.tokenTypes = types;
-exports.tokenNames = names;
-exports.TokenStream = TokenStream.TokenStream;
-exports.createLexer = createLexer;
-exports.find = find;
-exports.findAll = findAll;
-exports.findLast = findLast;
-exports.fork = fork;
-exports.fromPlainObject = fromPlainObject;
-exports.generate = generate;
-exports.lexer = lexer;
-exports.parse = parse;
-exports.toPlainObject = toPlainObject;
-exports.tokenize = tokenize;
-exports.walk = walk;
diff --git a/node_modules/css-tree/cjs/lexer/Lexer.cjs b/node_modules/css-tree/cjs/lexer/Lexer.cjs
deleted file mode 100644
index 46380fae..00000000
--- a/node_modules/css-tree/cjs/lexer/Lexer.cjs
+++ /dev/null
@@ -1,470 +0,0 @@
-'use strict';
-
-const error = require('./error.cjs');
-const names = require('../utils/names.cjs');
-const genericConst = require('./generic-const.cjs');
-const generic = require('./generic.cjs');
-const units = require('./units.cjs');
-const prepareTokens = require('./prepare-tokens.cjs');
-const matchGraph = require('./match-graph.cjs');
-const match = require('./match.cjs');
-const trace = require('./trace.cjs');
-const search = require('./search.cjs');
-const structure = require('./structure.cjs');
-const parse = require('../definition-syntax/parse.cjs');
-const generate = require('../definition-syntax/generate.cjs');
-const walk = require('../definition-syntax/walk.cjs');
-
-const cssWideKeywordsSyntax = matchGraph.buildMatchGraph(genericConst.cssWideKeywords.join(' | '));
-
-function dumpMapSyntax(map, compact, syntaxAsAst) {
- const result = {};
-
- for (const name in map) {
- if (map[name].syntax) {
- result[name] = syntaxAsAst
- ? map[name].syntax
- : generate.generate(map[name].syntax, { compact });
- }
- }
-
- return result;
-}
-
-function dumpAtruleMapSyntax(map, compact, syntaxAsAst) {
- const result = {};
-
- for (const [name, atrule] of Object.entries(map)) {
- result[name] = {
- prelude: atrule.prelude && (
- syntaxAsAst
- ? atrule.prelude.syntax
- : generate.generate(atrule.prelude.syntax, { compact })
- ),
- descriptors: atrule.descriptors && dumpMapSyntax(atrule.descriptors, compact, syntaxAsAst)
- };
- }
-
- return result;
-}
-
-function valueHasVar(tokens) {
- for (let i = 0; i < tokens.length; i++) {
- if (tokens[i].value.toLowerCase() === 'var(') {
- return true;
- }
- }
-
- return false;
-}
-
-function buildMatchResult(matched, error, iterations) {
- return {
- matched,
- iterations,
- error,
- ...trace
- };
-}
-
-function matchSyntax(lexer, syntax, value, useCssWideKeywords) {
- const tokens = prepareTokens(value, lexer.syntax);
- let result;
-
- if (valueHasVar(tokens)) {
- return buildMatchResult(null, new Error('Matching for a tree with var() is not supported'));
- }
-
- if (useCssWideKeywords) {
- result = match.matchAsTree(tokens, lexer.cssWideKeywordsSyntax, lexer);
- }
-
- if (!useCssWideKeywords || !result.match) {
- result = match.matchAsTree(tokens, syntax.match, lexer);
- if (!result.match) {
- return buildMatchResult(
- null,
- new error.SyntaxMatchError(result.reason, syntax.syntax, value, result),
- result.iterations
- );
- }
- }
-
- return buildMatchResult(result.match, null, result.iterations);
-}
-
-class Lexer {
- constructor(config, syntax, structure$1) {
- this.cssWideKeywordsSyntax = cssWideKeywordsSyntax;
- this.syntax = syntax;
- this.generic = false;
- this.units = { ...units };
- this.atrules = Object.create(null);
- this.properties = Object.create(null);
- this.types = Object.create(null);
- this.structure = structure$1 || structure.getStructureFromConfig(config);
-
- if (config) {
- if (config.units) {
- for (const group of Object.keys(units)) {
- if (Array.isArray(config.units[group])) {
- this.units[group] = config.units[group];
- }
- }
- }
-
- if (config.types) {
- for (const name in config.types) {
- this.addType_(name, config.types[name]);
- }
- }
-
- if (config.generic) {
- this.generic = true;
- for (const [name, value] of Object.entries(generic.createGenericTypes(this.units))) {
- this.addType_(name, value);
- }
- }
-
- if (config.atrules) {
- for (const name in config.atrules) {
- this.addAtrule_(name, config.atrules[name]);
- }
- }
-
- if (config.properties) {
- for (const name in config.properties) {
- this.addProperty_(name, config.properties[name]);
- }
- }
- }
- }
-
- checkStructure(ast) {
- function collectWarning(node, message) {
- warns.push({ node, message });
- }
-
- const structure = this.structure;
- const warns = [];
-
- this.syntax.walk(ast, function(node) {
- if (structure.hasOwnProperty(node.type)) {
- structure[node.type].check(node, collectWarning);
- } else {
- collectWarning(node, 'Unknown node type `' + node.type + '`');
- }
- });
-
- return warns.length ? warns : false;
- }
-
- createDescriptor(syntax, type, name, parent = null) {
- const ref = {
- type,
- name
- };
- const descriptor = {
- type,
- name,
- parent,
- serializable: typeof syntax === 'string' || (syntax && typeof syntax.type === 'string'),
- syntax: null,
- match: null
- };
-
- if (typeof syntax === 'function') {
- descriptor.match = matchGraph.buildMatchGraph(syntax, ref);
- } else {
- if (typeof syntax === 'string') {
- // lazy parsing on first access
- Object.defineProperty(descriptor, 'syntax', {
- get() {
- Object.defineProperty(descriptor, 'syntax', {
- value: parse.parse(syntax)
- });
-
- return descriptor.syntax;
- }
- });
- } else {
- descriptor.syntax = syntax;
- }
-
- // lazy graph build on first access
- Object.defineProperty(descriptor, 'match', {
- get() {
- Object.defineProperty(descriptor, 'match', {
- value: matchGraph.buildMatchGraph(descriptor.syntax, ref)
- });
-
- return descriptor.match;
- }
- });
- }
-
- return descriptor;
- }
- addAtrule_(name, syntax) {
- if (!syntax) {
- return;
- }
-
- this.atrules[name] = {
- type: 'Atrule',
- name: name,
- prelude: syntax.prelude ? this.createDescriptor(syntax.prelude, 'AtrulePrelude', name) : null,
- descriptors: syntax.descriptors
- ? Object.keys(syntax.descriptors).reduce(
- (map, descName) => {
- map[descName] = this.createDescriptor(syntax.descriptors[descName], 'AtruleDescriptor', descName, name);
- return map;
- },
- Object.create(null)
- )
- : null
- };
- }
- addProperty_(name, syntax) {
- if (!syntax) {
- return;
- }
-
- this.properties[name] = this.createDescriptor(syntax, 'Property', name);
- }
- addType_(name, syntax) {
- if (!syntax) {
- return;
- }
-
- this.types[name] = this.createDescriptor(syntax, 'Type', name);
- }
-
- checkAtruleName(atruleName) {
- if (!this.getAtrule(atruleName)) {
- return new error.SyntaxReferenceError('Unknown at-rule', '@' + atruleName);
- }
- }
- checkAtrulePrelude(atruleName, prelude) {
- const error = this.checkAtruleName(atruleName);
-
- if (error) {
- return error;
- }
-
- const atrule = this.getAtrule(atruleName);
-
- if (!atrule.prelude && prelude) {
- return new SyntaxError('At-rule `@' + atruleName + '` should not contain a prelude');
- }
-
- if (atrule.prelude && !prelude) {
- if (!matchSyntax(this, atrule.prelude, '', false).matched) {
- return new SyntaxError('At-rule `@' + atruleName + '` should contain a prelude');
- }
- }
- }
- checkAtruleDescriptorName(atruleName, descriptorName) {
- const error$1 = this.checkAtruleName(atruleName);
-
- if (error$1) {
- return error$1;
- }
-
- const atrule = this.getAtrule(atruleName);
- const descriptor = names.keyword(descriptorName);
-
- if (!atrule.descriptors) {
- return new SyntaxError('At-rule `@' + atruleName + '` has no known descriptors');
- }
-
- if (!atrule.descriptors[descriptor.name] &&
- !atrule.descriptors[descriptor.basename]) {
- return new error.SyntaxReferenceError('Unknown at-rule descriptor', descriptorName);
- }
- }
- checkPropertyName(propertyName) {
- if (!this.getProperty(propertyName)) {
- return new error.SyntaxReferenceError('Unknown property', propertyName);
- }
- }
-
- matchAtrulePrelude(atruleName, prelude) {
- const error = this.checkAtrulePrelude(atruleName, prelude);
-
- if (error) {
- return buildMatchResult(null, error);
- }
-
- const atrule = this.getAtrule(atruleName);
-
- if (!atrule.prelude) {
- return buildMatchResult(null, null);
- }
-
- return matchSyntax(this, atrule.prelude, prelude || '', false);
- }
- matchAtruleDescriptor(atruleName, descriptorName, value) {
- const error = this.checkAtruleDescriptorName(atruleName, descriptorName);
-
- if (error) {
- return buildMatchResult(null, error);
- }
-
- const atrule = this.getAtrule(atruleName);
- const descriptor = names.keyword(descriptorName);
-
- return matchSyntax(this, atrule.descriptors[descriptor.name] || atrule.descriptors[descriptor.basename], value, false);
- }
- matchDeclaration(node) {
- if (node.type !== 'Declaration') {
- return buildMatchResult(null, new Error('Not a Declaration node'));
- }
-
- return this.matchProperty(node.property, node.value);
- }
- matchProperty(propertyName, value) {
- // don't match syntax for a custom property at the moment
- if (names.property(propertyName).custom) {
- return buildMatchResult(null, new Error('Lexer matching doesn\'t applicable for custom properties'));
- }
-
- const error = this.checkPropertyName(propertyName);
-
- if (error) {
- return buildMatchResult(null, error);
- }
-
- return matchSyntax(this, this.getProperty(propertyName), value, true);
- }
- matchType(typeName, value) {
- const typeSyntax = this.getType(typeName);
-
- if (!typeSyntax) {
- return buildMatchResult(null, new error.SyntaxReferenceError('Unknown type', typeName));
- }
-
- return matchSyntax(this, typeSyntax, value, false);
- }
- match(syntax, value) {
- if (typeof syntax !== 'string' && (!syntax || !syntax.type)) {
- return buildMatchResult(null, new error.SyntaxReferenceError('Bad syntax'));
- }
-
- if (typeof syntax === 'string' || !syntax.match) {
- syntax = this.createDescriptor(syntax, 'Type', 'anonymous');
- }
-
- return matchSyntax(this, syntax, value, false);
- }
-
- findValueFragments(propertyName, value, type, name) {
- return search.matchFragments(this, value, this.matchProperty(propertyName, value), type, name);
- }
- findDeclarationValueFragments(declaration, type, name) {
- return search.matchFragments(this, declaration.value, this.matchDeclaration(declaration), type, name);
- }
- findAllFragments(ast, type, name) {
- const result = [];
-
- this.syntax.walk(ast, {
- visit: 'Declaration',
- enter: (declaration) => {
- result.push.apply(result, this.findDeclarationValueFragments(declaration, type, name));
- }
- });
-
- return result;
- }
-
- getAtrule(atruleName, fallbackBasename = true) {
- const atrule = names.keyword(atruleName);
- const atruleEntry = atrule.vendor && fallbackBasename
- ? this.atrules[atrule.name] || this.atrules[atrule.basename]
- : this.atrules[atrule.name];
-
- return atruleEntry || null;
- }
- getAtrulePrelude(atruleName, fallbackBasename = true) {
- const atrule = this.getAtrule(atruleName, fallbackBasename);
-
- return atrule && atrule.prelude || null;
- }
- getAtruleDescriptor(atruleName, name) {
- return this.atrules.hasOwnProperty(atruleName) && this.atrules.declarators
- ? this.atrules[atruleName].declarators[name] || null
- : null;
- }
- getProperty(propertyName, fallbackBasename = true) {
- const property = names.property(propertyName);
- const propertyEntry = property.vendor && fallbackBasename
- ? this.properties[property.name] || this.properties[property.basename]
- : this.properties[property.name];
-
- return propertyEntry || null;
- }
- getType(name) {
- return hasOwnProperty.call(this.types, name) ? this.types[name] : null;
- }
-
- validate() {
- function validate(syntax, name, broken, descriptor) {
- if (broken.has(name)) {
- return broken.get(name);
- }
-
- broken.set(name, false);
- if (descriptor.syntax !== null) {
- walk.walk(descriptor.syntax, function(node) {
- if (node.type !== 'Type' && node.type !== 'Property') {
- return;
- }
-
- const map = node.type === 'Type' ? syntax.types : syntax.properties;
- const brokenMap = node.type === 'Type' ? brokenTypes : brokenProperties;
-
- if (!hasOwnProperty.call(map, node.name) || validate(syntax, node.name, brokenMap, map[node.name])) {
- broken.set(name, true);
- }
- }, this);
- }
- }
-
- let brokenTypes = new Map();
- let brokenProperties = new Map();
-
- for (const key in this.types) {
- validate(this, key, brokenTypes, this.types[key]);
- }
-
- for (const key in this.properties) {
- validate(this, key, brokenProperties, this.properties[key]);
- }
-
- brokenTypes = [...brokenTypes.keys()].filter(name => brokenTypes.get(name));
- brokenProperties = [...brokenProperties.keys()].filter(name => brokenProperties.get(name));
-
- if (brokenTypes.length || brokenProperties.length) {
- return {
- types: brokenTypes,
- properties: brokenProperties
- };
- }
-
- return null;
- }
- dump(syntaxAsAst, pretty) {
- return {
- generic: this.generic,
- units: this.units,
- types: dumpMapSyntax(this.types, !pretty, syntaxAsAst),
- properties: dumpMapSyntax(this.properties, !pretty, syntaxAsAst),
- atrules: dumpAtruleMapSyntax(this.atrules, !pretty, syntaxAsAst)
- };
- }
- toString() {
- return JSON.stringify(this.dump());
- }
-}
-
-exports.Lexer = Lexer;
diff --git a/node_modules/css-tree/cjs/lexer/error.cjs b/node_modules/css-tree/cjs/lexer/error.cjs
deleted file mode 100644
index 8d252eeb..00000000
--- a/node_modules/css-tree/cjs/lexer/error.cjs
+++ /dev/null
@@ -1,128 +0,0 @@
-'use strict';
-
-const createCustomError = require('../utils/create-custom-error.cjs');
-const generate = require('../definition-syntax/generate.cjs');
-
-const defaultLoc = { offset: 0, line: 1, column: 1 };
-
-function locateMismatch(matchResult, node) {
- const tokens = matchResult.tokens;
- const longestMatch = matchResult.longestMatch;
- const mismatchNode = longestMatch < tokens.length ? tokens[longestMatch].node || null : null;
- const badNode = mismatchNode !== node ? mismatchNode : null;
- let mismatchOffset = 0;
- let mismatchLength = 0;
- let entries = 0;
- let css = '';
- let start;
- let end;
-
- for (let i = 0; i < tokens.length; i++) {
- const token = tokens[i].value;
-
- if (i === longestMatch) {
- mismatchLength = token.length;
- mismatchOffset = css.length;
- }
-
- if (badNode !== null && tokens[i].node === badNode) {
- if (i <= longestMatch) {
- entries++;
- } else {
- entries = 0;
- }
- }
-
- css += token;
- }
-
- if (longestMatch === tokens.length || entries > 1) { // last
- start = fromLoc(badNode || node, 'end') || buildLoc(defaultLoc, css);
- end = buildLoc(start);
- } else {
- start = fromLoc(badNode, 'start') ||
- buildLoc(fromLoc(node, 'start') || defaultLoc, css.slice(0, mismatchOffset));
- end = fromLoc(badNode, 'end') ||
- buildLoc(start, css.substr(mismatchOffset, mismatchLength));
- }
-
- return {
- css,
- mismatchOffset,
- mismatchLength,
- start,
- end
- };
-}
-
-function fromLoc(node, point) {
- const value = node && node.loc && node.loc[point];
-
- if (value) {
- return 'line' in value ? buildLoc(value) : value;
- }
-
- return null;
-}
-
-function buildLoc({ offset, line, column }, extra) {
- const loc = {
- offset,
- line,
- column
- };
-
- if (extra) {
- const lines = extra.split(/\n|\r\n?|\f/);
-
- loc.offset += extra.length;
- loc.line += lines.length - 1;
- loc.column = lines.length === 1 ? loc.column + extra.length : lines.pop().length + 1;
- }
-
- return loc;
-}
-
-const SyntaxReferenceError = function(type, referenceName) {
- const error = createCustomError.createCustomError(
- 'SyntaxReferenceError',
- type + (referenceName ? ' `' + referenceName + '`' : '')
- );
-
- error.reference = referenceName;
-
- return error;
-};
-
-const SyntaxMatchError = function(message, syntax, node, matchResult) {
- const error = createCustomError.createCustomError('SyntaxMatchError', message);
- const {
- css,
- mismatchOffset,
- mismatchLength,
- start,
- end
- } = locateMismatch(matchResult, node);
-
- error.rawMessage = message;
- error.syntax = syntax ? generate.generate(syntax) : '<generic>';
- error.css = css;
- error.mismatchOffset = mismatchOffset;
- error.mismatchLength = mismatchLength;
- error.message = message + '\n' +
- ' syntax: ' + error.syntax + '\n' +
- ' value: ' + (css || '<empty string>') + '\n' +
- ' --------' + new Array(error.mismatchOffset + 1).join('-') + '^';
-
- Object.assign(error, start);
- error.loc = {
- source: (node && node.loc && node.loc.source) || '<unknown>',
- start,
- end
- };
-
- return error;
-};
-
-exports.SyntaxMatchError = SyntaxMatchError;
-exports.SyntaxReferenceError = SyntaxReferenceError;
diff --git a/node_modules/css-tree/cjs/lexer/generic-an-plus-b.cjs b/node_modules/css-tree/cjs/lexer/generic-an-plus-b.cjs
deleted file mode 100644
index a5dfba3e..00000000
--- a/node_modules/css-tree/cjs/lexer/generic-an-plus-b.cjs
+++ /dev/null
@@ -1,235 +0,0 @@
-'use strict';
-
-const charCodeDefinitions = require('../tokenizer/char-code-definitions.cjs');
-const types = require('../tokenizer/types.cjs');
-const utils = require('../tokenizer/utils.cjs');
-
-const PLUSSIGN = 0x002B; // U+002B PLUS SIGN (+)
-const HYPHENMINUS = 0x002D; // U+002D HYPHEN-MINUS (-)
-const N = 0x006E; // U+006E LATIN SMALL LETTER N (n)
-const DISALLOW_SIGN = true;
-const ALLOW_SIGN = false;
-
-function isDelim(token, code) {
- return token !== null && token.type === types.Delim && token.value.charCodeAt(0) === code;
-}
-
-function skipSC(token, offset, getNextToken) {
- while (token !== null && (token.type === types.WhiteSpace || token.type === types.Comment)) {
- token = getNextToken(++offset);
- }
-
- return offset;
-}
-
-function checkInteger(token, valueOffset, disallowSign, offset) {
- if (!token) {
- return 0;
- }
-
- const code = token.value.charCodeAt(valueOffset);
-
- if (code === PLUSSIGN || code === HYPHENMINUS) {
- if (disallowSign) {
- // Number sign is not allowed
- return 0;
- }
- valueOffset++;
- }
-
- for (; valueOffset < token.value.length; valueOffset++) {
- if (!charCodeDefinitions.isDigit(token.value.charCodeAt(valueOffset))) {
- // Integer is expected
- return 0;
- }
- }
-
- return offset + 1;
-}
-
-// ... <signed-integer>
-// ... ['+' | '-'] <signless-integer>
-function consumeB(token, offset_, getNextToken) {
- let sign = false;
- let offset = skipSC(token, offset_, getNextToken);
-
- token = getNextToken(offset);
-
- if (token === null) {
- return offset_;
- }
-
- if (token.type !== types.Number) {
- if (isDelim(token, PLUSSIGN) || isDelim(token, HYPHENMINUS)) {
- sign = true;
- offset = skipSC(getNextToken(++offset), offset, getNextToken);
- token = getNextToken(offset);
-
- if (token === null || token.type !== types.Number) {
- return 0;
- }
- } else {
- return offset_;
- }
- }
-
- if (!sign) {
- const code = token.value.charCodeAt(0);
- if (code !== PLUSSIGN && code !== HYPHENMINUS) {
- // Number sign is expected
- return 0;
- }
- }
-
- return checkInteger(token, sign ? 0 : 1, sign, offset);
-}
-
-// An+B microsyntax https://www.w3.org/TR/css-syntax-3/#anb
-function anPlusB(token, getNextToken) {
- /* eslint-disable brace-style*/
- let offset = 0;
-
- if (!token) {
- return 0;
- }
-
- // <integer>
- if (token.type === types.Number) {
- return checkInteger(token, 0, ALLOW_SIGN, offset); // b
- }
-
- // -n
- // -n <signed-integer>
- // -n ['+' | '-'] <signless-integer>
- // -n- <signless-integer>
- // <dashndashdigit-ident>
- else if (token.type === types.Ident && token.value.charCodeAt(0) === HYPHENMINUS) {
- // expect 1st char is N
- if (!utils.cmpChar(token.value, 1, N)) {
- return 0;
- }
-
- switch (token.value.length) {
- // -n
- // -n <signed-integer>
- // -n ['+' | '-'] <signless-integer>
- case 2:
- return consumeB(getNextToken(++offset), offset, getNextToken);
-
- // -n- <signless-integer>
- case 3:
- if (token.value.charCodeAt(2) !== HYPHENMINUS) {
- return 0;
- }
-
- offset = skipSC(getNextToken(++offset), offset, getNextToken);
- token = getNextToken(offset);
-
- return checkInteger(token, 0, DISALLOW_SIGN, offset);
-
- // <dashndashdigit-ident>
- default:
- if (token.value.charCodeAt(2) !== HYPHENMINUS) {
- return 0;
- }
-
- return checkInteger(token, 3, DISALLOW_SIGN, offset);
- }
- }
-
- // '+'? n
- // '+'? n <signed-integer>
- // '+'? n ['+' | '-'] <signless-integer>
- // '+'? n- <signless-integer>
- // '+'? <ndashdigit-ident>
- else if (token.type === types.Ident || (isDelim(token, PLUSSIGN) && getNextToken(offset + 1).type === types.Ident)) {
- // just ignore a plus
- if (token.type !== types.Ident) {
- token = getNextToken(++offset);
- }
-
- if (token === null || !utils.cmpChar(token.value, 0, N)) {
- return 0;
- }
-
- switch (token.value.length) {
- // '+'? n
- // '+'? n <signed-integer>
- // '+'? n ['+' | '-'] <signless-integer>
- case 1:
- return consumeB(getNextToken(++offset), offset, getNextToken);
-
- // '+'? n- <signless-integer>
- case 2:
- if (token.value.charCodeAt(1) !== HYPHENMINUS) {
- return 0;
- }
-
- offset = skipSC(getNextToken(++offset), offset, getNextToken);
- token = getNextToken(offset);
-
- return checkInteger(token, 0, DISALLOW_SIGN, offset);
-
- // '+'? <ndashdigit-ident>
- default:
- if (token.value.charCodeAt(1) !== HYPHENMINUS) {
- return 0;
- }
-
- return checkInteger(token, 2, DISALLOW_SIGN, offset);
- }
- }
-
- // <ndashdigit-dimension>
- // <ndash-dimension> <signless-integer>
- // <n-dimension>
- // <n-dimension> <signed-integer>
- // <n-dimension> ['+' | '-'] <signless-integer>
- else if (token.type === types.Dimension) {
- let code = token.value.charCodeAt(0);
- let sign = code === PLUSSIGN || code === HYPHENMINUS ? 1 : 0;
- let i = sign;
-
- for (; i < token.value.length; i++) {
- if (!charCodeDefinitions.isDigit(token.value.charCodeAt(i))) {
- break;
- }
- }
-
- if (i === sign) {
- // Integer is expected
- return 0;
- }
-
- if (!utils.cmpChar(token.value, i, N)) {
- return 0;
- }
-
- // <n-dimension>
- // <n-dimension> <signed-integer>
- // <n-dimension> ['+' | '-'] <signless-integer>
- if (i + 1 === token.value.length) {
- return consumeB(getNextToken(++offset), offset, getNextToken);
- } else {
- if (token.value.charCodeAt(i + 1) !== HYPHENMINUS) {
- return 0;
- }
-
- // <ndash-dimension> <signless-integer>
- if (i + 2 === token.value.length) {
- offset = skipSC(getNextToken(++offset), offset, getNextToken);
- token = getNextToken(offset);
-
- return checkInteger(token, 0, DISALLOW_SIGN, offset);
- }
- // <ndashdigit-dimension>
- else {
- return checkInteger(token, i + 2, DISALLOW_SIGN, offset);
- }
- }
- }
-
- return 0;
-}
-
-module.exports = anPlusB;
diff --git a/node_modules/css-tree/cjs/lexer/generic-const.cjs b/node_modules/css-tree/cjs/lexer/generic-const.cjs
deleted file mode 100644
index 9b9f6157..00000000
--- a/node_modules/css-tree/cjs/lexer/generic-const.cjs
+++ /dev/null
@@ -1,12 +0,0 @@
-'use strict';
-
-// https://drafts.csswg.org/css-cascade-5/
-const cssWideKeywords = [
- 'initial',
- 'inherit',
- 'unset',
- 'revert',
- 'revert-layer'
-];
-
-exports.cssWideKeywords = cssWideKeywords;
diff --git a/node_modules/css-tree/cjs/lexer/generic-urange.cjs b/node_modules/css-tree/cjs/lexer/generic-urange.cjs
deleted file mode 100644
index ce167bb1..00000000
--- a/node_modules/css-tree/cjs/lexer/generic-urange.cjs
+++ /dev/null
@@ -1,149 +0,0 @@
-'use strict';
-
-const charCodeDefinitions = require('../tokenizer/char-code-definitions.cjs');
-const types = require('../tokenizer/types.cjs');
-const utils = require('../tokenizer/utils.cjs');
-
-const PLUSSIGN = 0x002B; // U+002B PLUS SIGN (+)
-const HYPHENMINUS = 0x002D; // U+002D HYPHEN-MINUS (-)
-const QUESTIONMARK = 0x003F; // U+003F QUESTION MARK (?)
-const U = 0x0075; // U+0075 LATIN SMALL LETTER U (u)
-
-function isDelim(token, code) {
- return token !== null && token.type === types.Delim && token.value.charCodeAt(0) === code;
-}
-
-function startsWith(token, code) {
- return token.value.charCodeAt(0) === code;
-}
-
-function hexSequence(token, offset, allowDash) {
- let hexlen = 0;
-
- for (let pos = offset; pos < token.value.length; pos++) {
- const code = token.value.charCodeAt(pos);
-
- if (code === HYPHENMINUS && allowDash && hexlen !== 0) {
- hexSequence(token, offset + hexlen + 1, false);
- return 6; // dissallow following question marks
- }
-
- if (!charCodeDefinitions.isHexDigit(code)) {
- return 0; // not a hex digit
- }
-
- if (++hexlen > 6) {
- return 0; // too many hex digits
- } }
-
- return hexlen;
-}
-
-function withQuestionMarkSequence(consumed, length, getNextToken) {
- if (!consumed) {
- return 0; // nothing consumed
- }
-
- while (isDelim(getNextToken(length), QUESTIONMARK)) {
- if (++consumed > 6) {
- return 0; // too many question marks
- }
-
- length++;
- }
-
- return length;
-}
-
-// https://drafts.csswg.org/css-syntax/#urange
-// Informally, the <urange> production has three forms:
-// U+0001
-// Defines a range consisting of a single code point, in this case the code point "1".
-// U+0001-00ff
-// Defines a range of codepoints between the first and the second value, in this case
-// the range between "1" and "ff" (255 in decimal) inclusive.
-// U+00??
-// Defines a range of codepoints where the "?" characters range over all hex digits,
-// in this case defining the same as the value U+0000-00ff.
-// In each form, a maximum of 6 digits is allowed for each hexadecimal number (if you treat "?" as a hexadecimal digit).
-//
-// <urange> =
-// u '+' <ident-token> '?'* |
-// u <dimension-token> '?'* |
-// u <number-token> '?'* |
-// u <number-token> <dimension-token> |
-// u <number-token> <number-token> |
-// u '+' '?'+
-function urange(token, getNextToken) {
- let length = 0;
-
- // should start with `u` or `U`
- if (token === null || token.type !== types.Ident || !utils.cmpChar(token.value, 0, U)) {
- return 0;
- }
-
- token = getNextToken(++length);
- if (token === null) {
- return 0;
- }
-
- // u '+' <ident-token> '?'*
- // u '+' '?'+
- if (isDelim(token, PLUSSIGN)) {
- token = getNextToken(++length);
- if (token === null) {
- return 0;
- }
-
- if (token.type === types.Ident) {
- // u '+' <ident-token> '?'*
- return withQuestionMarkSequence(hexSequence(token, 0, true), ++length, getNextToken);
- }
-
- if (isDelim(token, QUESTIONMARK)) {
- // u '+' '?'+
- return withQuestionMarkSequence(1, ++length, getNextToken);
- }
-
- // Hex digit or question mark is expected
- return 0;
- }
-
- // u <number-token> '?'*
- // u <number-token> <dimension-token>
- // u <number-token> <number-token>
- if (token.type === types.Number) {
- const consumedHexLength = hexSequence(token, 1, true);
- if (consumedHexLength === 0) {
- return 0;
- }
-
- token = getNextToken(++length);
- if (token === null) {
- // u <number-token> <eof>
- return length;
- }
-
- if (token.type === types.Dimension || token.type === types.Number) {
- // u <number-token> <dimension-token>
- // u <number-token> <number-token>
- if (!startsWith(token, HYPHENMINUS) || !hexSequence(token, 1, false)) {
- return 0;
- }
-
- return length + 1;
- }
-
- // u <number-token> '?'*
- return withQuestionMarkSequence(consumedHexLength, length, getNextToken);
- }
-
- // u <dimension-token> '?'*
- if (token.type === types.Dimension) {
- return withQuestionMarkSequence(hexSequence(token, 1, true), ++length, getNextToken);
- }
-
- return 0;
-}
-
-module.exports = urange;
diff --git a/node_modules/css-tree/cjs/lexer/generic.cjs b/node_modules/css-tree/cjs/lexer/generic.cjs
deleted file mode 100644
index 6b9e5ced..00000000
--- a/node_modules/css-tree/cjs/lexer/generic.cjs
+++ /dev/null
@@ -1,573 +0,0 @@
-'use strict';
-
-const genericConst = require('./generic-const.cjs');
-const genericAnPlusB = require('./generic-an-plus-b.cjs');
-const genericUrange = require('./generic-urange.cjs');
-const types = require('../tokenizer/types.cjs');
-const charCodeDefinitions = require('../tokenizer/char-code-definitions.cjs');
-const utils = require('../tokenizer/utils.cjs');
-
-const calcFunctionNames = ['calc(', '-moz-calc(', '-webkit-calc('];
-const balancePair = new Map([
- [types.Function, types.RightParenthesis],
- [types.LeftParenthesis, types.RightParenthesis],
- [types.LeftSquareBracket, types.RightSquareBracket],
- [types.LeftCurlyBracket, types.RightCurlyBracket]
-]);
-
-// safe char code getter
-function charCodeAt(str, index) {
- return index < str.length ? str.charCodeAt(index) : 0;
-}
-
-function eqStr(actual, expected) {
- return utils.cmpStr(actual, 0, actual.length, expected);
-}
-
-function eqStrAny(actual, expected) {
- for (let i = 0; i < expected.length; i++) {
- if (eqStr(actual, expected[i])) {
- return true;
- }
- }
-
- return false;
-}
-
-// IE postfix hack, i.e. 123\0 or 123px\9
-function isPostfixIeHack(str, offset) {
- if (offset !== str.length - 2) {
- return false;
- }
-
- return (
- charCodeAt(str, offset) === 0x005C && // U+005C REVERSE SOLIDUS (\)
- charCodeDefinitions.isDigit(charCodeAt(str, offset + 1))
- );
-}
-
-function outOfRange(opts, value, numEnd) {
- if (opts && opts.type === 'Range') {
- const num = Number(
- numEnd !== undefined && numEnd !== value.length
- ? value.substr(0, numEnd)
- : value
- );
-
- if (isNaN(num)) {
- return true;
- }
-
- // FIXME: when opts.min is a string it's a dimension, skip a range validation
- // for now since it requires a type covertation which is not implmented yet
- if (opts.min !== null && num < opts.min && typeof opts.min !== 'string') {
- return true;
- }
-
- // FIXME: when opts.max is a string it's a dimension, skip a range validation
- // for now since it requires a type covertation which is not implmented yet
- if (opts.max !== null && num > opts.max && typeof opts.max !== 'string') {
- return true;
- }
- }
-
- return false;
-}
-
-function consumeFunction(token, getNextToken) {
- let balanceCloseType = 0;
- let balanceStash = [];
- let length = 0;
-
- // balanced token consuming
- scan:
- do {
- switch (token.type) {
- case types.RightCurlyBracket:
- case types.RightParenthesis:
- case types.RightSquareBracket:
- if (token.type !== balanceCloseType) {
- break scan;
- }
-
- balanceCloseType = balanceStash.pop();
-
- if (balanceStash.length === 0) {
- length++;
- break scan;
- }
-
- break;
-
- case types.Function:
- case types.LeftParenthesis:
- case types.LeftSquareBracket:
- case types.LeftCurlyBracket:
- balanceStash.push(balanceCloseType);
- balanceCloseType = balancePair.get(token.type);
- break;
- }
-
- length++;
- } while (token = getNextToken(length));
-
- return length;
-}
-
-// TODO: implement
-// can be used wherever <length>, <frequency>, <angle>, <time>, <percentage>, <number>, or <integer> values are allowed
-// https://drafts.csswg.org/css-values/#calc-notation
-function calc(next) {
- return function(token, getNextToken, opts) {
- if (token === null) {
- return 0;
- }
-
- if (token.type === types.Function && eqStrAny(token.value, calcFunctionNames)) {
- return consumeFunction(token, getNextToken);
- }
-
- return next(token, getNextToken, opts);
- };
-}
-
-function tokenType(expectedTokenType) {
- return function(token) {
- if (token === null || token.type !== expectedTokenType) {
- return 0;
- }
-
- return 1;
- };
-}
-
-// =========================
-// Complex types
-//
-
-// https://drafts.csswg.org/css-values-4/#custom-idents
-// 4.2. Author-defined Identifiers: the <custom-ident> type
-// Some properties accept arbitrary author-defined identifiers as a component value.
-// This generic data type is denoted by <custom-ident>, and represents any valid CSS identifier
-// that would not be misinterpreted as a pre-defined keyword in that property’s value definition.
-//
-// See also: https://developer.mozilla.org/en-US/docs/Web/CSS/custom-ident
-function customIdent(token) {
- if (token === null || token.type !== types.Ident) {
- return 0;
- }
-
- const name = token.value.toLowerCase();
-
- // The CSS-wide keywords are not valid <custom-ident>s
- if (eqStrAny(name, genericConst.cssWideKeywords)) {
- return 0;
- }
-
- // The default keyword is reserved and is also not a valid <custom-ident>
- if (eqStr(name, 'default')) {
- return 0;
- }
-
- // TODO: ignore property specific keywords (as described https://developer.mozilla.org/en-US/docs/Web/CSS/custom-ident)
- // Specifications using <custom-ident> must specify clearly what other keywords
- // are excluded from <custom-ident>, if any—for example by saying that any pre-defined keywords
- // in that property’s value definition are excluded. Excluded keywords are excluded
- // in all ASCII case permutations.
-
- return 1;
-}
-
-// https://drafts.csswg.org/css-variables/#typedef-custom-property-name
-// A custom property is any property whose name starts with two dashes (U+002D HYPHEN-MINUS), like --foo.
-// The <custom-property-name> production corresponds to this: it’s defined as any valid identifier
-// that starts with two dashes, except -- itself, which is reserved for future use by CSS.
-// NOTE: Current implementation treat `--` as a valid name since most (all?) major browsers treat it as valid.
-function customPropertyName(token) {
- // ... defined as any valid identifier
- if (token === null || token.type !== types.Ident) {
- return 0;
- }
-
- // ... that starts with two dashes (U+002D HYPHEN-MINUS)
- if (charCodeAt(token.value, 0) !== 0x002D || charCodeAt(token.value, 1) !== 0x002D) {
- return 0;
- }
-
- return 1;
-}
-
-// https://drafts.csswg.org/css-color-4/#hex-notation
-// The syntax of a <hex-color> is a <hash-token> token whose value consists of 3, 4, 6, or 8 hexadecimal digits.
-// In other words, a hex color is written as a hash character, "#", followed by some number of digits 0-9 or
-// letters a-f (the case of the letters doesn’t matter - #00ff00 is identical to #00FF00).
-function hexColor(token) {
- if (token === null || token.type !== types.Hash) {
- return 0;
- }
-
- const length = token.value.length;
-
- // valid values (length): #rgb (4), #rgba (5), #rrggbb (7), #rrggbbaa (9)
- if (length !== 4 && length !== 5 && length !== 7 && length !== 9) {
- return 0;
- }
-
- for (let i = 1; i < length; i++) {
- if (!charCodeDefinitions.isHexDigit(charCodeAt(token.value, i))) {
- return 0;
- }
- }
-
- return 1;
-}
-
-function idSelector(token) {
- if (token === null || token.type !== types.Hash) {
- return 0;
- }
-
- if (!charCodeDefinitions.isIdentifierStart(charCodeAt(token.value, 1), charCodeAt(token.value, 2), charCodeAt(token.value, 3))) {
- return 0;
- }
-
- return 1;
-}
-
-// https://drafts.csswg.org/css-syntax/#any-value
-// It represents the entirety of what a valid declaration can have as its value.
-function declarationValue(token, getNextToken) {
- if (!token) {
- return 0;
- }
-
- let balanceCloseType = 0;
- let balanceStash = [];
- let length = 0;
-
- // The <declaration-value> production matches any sequence of one or more tokens,
- // so long as the sequence does not contain ...
- scan:
- do {
- switch (token.type) {
- // ... <bad-string-token>, <bad-url-token>,
- case types.BadString:
- case types.BadUrl:
- break scan;
-
- // ... unmatched <)-token>, <]-token>, or <}-token>,
- case types.RightCurlyBracket:
- case types.RightParenthesis:
- case types.RightSquareBracket:
- if (token.type !== balanceCloseType) {
- break scan;
- }
-
- balanceCloseType = balanceStash.pop();
- break;
-
- // ... or top-level <semicolon-token> tokens
- case types.Semicolon:
- if (balanceCloseType === 0) {
- break scan;
- }
-
- break;
-
- // ... or <delim-token> tokens with a value of "!"
- case types.Delim:
- if (balanceCloseType === 0 && token.value === '!') {
- break scan;
- }
-
- break;
-
- case types.Function:
- case types.LeftParenthesis:
- case types.LeftSquareBracket:
- case types.LeftCurlyBracket:
- balanceStash.push(balanceCloseType);
- balanceCloseType = balancePair.get(token.type);
- break;
- }
-
- length++;
- } while (token = getNextToken(length));
-
- return length;
-}
-
-// https://drafts.csswg.org/css-syntax/#any-value
-// The <any-value> production is identical to <declaration-value>, but also
-// allows top-level <semicolon-token> tokens and <delim-token> tokens
-// with a value of "!". It represents the entirety of what valid CSS can be in any context.
-function anyValue(token, getNextToken) {
- if (!token) {
- return 0;
- }
-
- let balanceCloseType = 0;
- let balanceStash = [];
- let length = 0;
-
- // The <any-value> production matches any sequence of one or more tokens,
- // so long as the sequence ...
- scan:
- do {
- switch (token.type) {
- // ... does not contain <bad-string-token>, <bad-url-token>,
- case types.BadString:
- case types.BadUrl:
- break scan;
-
- // ... unmatched <)-token>, <]-token>, or <}-token>,
- case types.RightCurlyBracket:
- case types.RightParenthesis:
- case types.RightSquareBracket:
- if (token.type !== balanceCloseType) {
- break scan;
- }
-
- balanceCloseType = balanceStash.pop();
- break;
-
- case types.Function:
- case types.LeftParenthesis:
- case types.LeftSquareBracket:
- case types.LeftCurlyBracket:
- balanceStash.push(balanceCloseType);
- balanceCloseType = balancePair.get(token.type);
- break;
- }
-
- length++;
- } while (token = getNextToken(length));
-
- return length;
-}
-
-// =========================
-// Dimensions
-//
-
-function dimension(type) {
- if (type) {
- type = new Set(type);
- }
-
- return function(token, getNextToken, opts) {
- if (token === null || token.type !== types.Dimension) {
- return 0;
- }
-
- const numberEnd = utils.consumeNumber(token.value, 0);
-
- // check unit
- if (type !== null) {
- // check for IE postfix hack, i.e. 123px\0 or 123px\9
- const reverseSolidusOffset = token.value.indexOf('\\', numberEnd);
- const unit = reverseSolidusOffset === -1 || !isPostfixIeHack(token.value, reverseSolidusOffset)
- ? token.value.substr(numberEnd)
- : token.value.substring(numberEnd, reverseSolidusOffset);
-
- if (type.has(unit.toLowerCase()) === false) {
- return 0;
- }
- }
-
- // check range if specified
- if (outOfRange(opts, token.value, numberEnd)) {
- return 0;
- }
-
- return 1;
- };
-}
-
-// =========================
-// Percentage
-//
-
-// §5.5. Percentages: the <percentage> type
-// https://drafts.csswg.org/css-values-4/#percentages
-function percentage(token, getNextToken, opts) {
- // ... corresponds to the <percentage-token> production
- if (token === null || token.type !== types.Percentage) {
- return 0;
- }
-
- // check range if specified
- if (outOfRange(opts, token.value, token.value.length - 1)) {
- return 0;
- }
-
- return 1;
-}
-
-// =========================
-// Numeric
-//
-
-// https://drafts.csswg.org/css-values-4/#numbers
-// The value <zero> represents a literal number with the value 0. Expressions that merely
-// evaluate to a <number> with the value 0 (for example, calc(0)) do not match <zero>;
-// only literal <number-token>s do.
-function zero(next) {
- if (typeof next !== 'function') {
- next = function() {
- return 0;
- };
- }
-
- return function(token, getNextToken, opts) {
- if (token !== null && token.type === types.Number) {
- if (Number(token.value) === 0) {
- return 1;
- }
- }
-
- return next(token, getNextToken, opts);
- };
-}
-
-// § 5.3. Real Numbers: the <number> type
-// https://drafts.csswg.org/css-values-4/#numbers
-// Number values are denoted by <number>, and represent real numbers, possibly with a fractional component.
-// ... It corresponds to the <number-token> production
-function number(token, getNextToken, opts) {
- if (token === null) {
- return 0;
- }
-
- const numberEnd = utils.consumeNumber(token.value, 0);
- const isNumber = numberEnd === token.value.length;
- if (!isNumber && !isPostfixIeHack(token.value, numberEnd)) {
- return 0;
- }
-
- // check range if specified
- if (outOfRange(opts, token.value, numberEnd)) {
- return 0;
- }
-
- return 1;
-}
-
-// §5.2. Integers: the <integer> type
-// https://drafts.csswg.org/css-values-4/#integers
-function integer(token, getNextToken, opts) {
- // ... corresponds to a subset of the <number-token> production
- if (token === null || token.type !== types.Number) {
- return 0;
- }
-
- // The first digit of an integer may be immediately preceded by `-` or `+` to indicate the integer’s sign.
- let i = charCodeAt(token.value, 0) === 0x002B || // U+002B PLUS SIGN (+)
- charCodeAt(token.value, 0) === 0x002D ? 1 : 0; // U+002D HYPHEN-MINUS (-)
-
- // When written literally, an integer is one or more decimal digits 0 through 9 ...
- for (; i < token.value.length; i++) {
- if (!charCodeDefinitions.isDigit(charCodeAt(token.value, i))) {
- return 0;
- }
- }
-
- // check range if specified
- if (outOfRange(opts, token.value, i)) {
- return 0;
- }
-
- return 1;
-}
-
-// token types
-const tokenTypes = {
- 'ident-token': tokenType(types.Ident),
- 'function-token': tokenType(types.Function),
- 'at-keyword-token': tokenType(types.AtKeyword),
- 'hash-token': tokenType(types.Hash),
- 'string-token': tokenType(types.String),
- 'bad-string-token': tokenType(types.BadString),
- 'url-token': tokenType(types.Url),
- 'bad-url-token': tokenType(types.BadUrl),
- 'delim-token': tokenType(types.Delim),
- 'number-token': tokenType(types.Number),
- 'percentage-token': tokenType(types.Percentage),
- 'dimension-token': tokenType(types.Dimension),
- 'whitespace-token': tokenType(types.WhiteSpace),
- 'CDO-token': tokenType(types.CDO),
- 'CDC-token': tokenType(types.CDC),
- 'colon-token': tokenType(types.Colon),
- 'semicolon-token': tokenType(types.Semicolon),
- 'comma-token': tokenType(types.Comma),
- '[-token': tokenType(types.LeftSquareBracket),
- ']-token': tokenType(types.RightSquareBracket),
- '(-token': tokenType(types.LeftParenthesis),
- ')-token': tokenType(types.RightParenthesis),
- '{-token': tokenType(types.LeftCurlyBracket),
- '}-token': tokenType(types.RightCurlyBracket)
-};
-
-// token production types
-const productionTypes = {
- // token type aliases
- 'string': tokenType(types.String),
- 'ident': tokenType(types.Ident),
-
- // percentage
- 'percentage': calc(percentage),
-
- // numeric
- 'zero': zero(),
- 'number': calc(number),
- 'integer': calc(integer),
-
- // complex types
- 'custom-ident': customIdent,
- 'custom-property-name': customPropertyName,
- 'hex-color': hexColor,
- 'id-selector': idSelector, // element( <id-selector> )
- 'an-plus-b': genericAnPlusB,
- 'urange': genericUrange,
- 'declaration-value': declarationValue,
- 'any-value': anyValue
-};
-
-// dimensions types depend on units set
-function createDemensionTypes(units) {
- const {
- angle,
- decibel,
- frequency,
- flex,
- length,
- resolution,
- semitones,
- time
- } = units || {};
-
- return {
- 'dimension': calc(dimension(null)),
- 'angle': calc(dimension(angle)),
- 'decibel': calc(dimension(decibel)),
- 'frequency': calc(dimension(frequency)),
- 'flex': calc(dimension(flex)),
- 'length': calc(zero(dimension(length))),
- 'resolution': calc(dimension(resolution)),
- 'semitones': calc(dimension(semitones)),
- 'time': calc(dimension(time))
- };
-}
-
-function createGenericTypes(units) {
- return {
- ...tokenTypes,
- ...productionTypes,
- ...createDemensionTypes(units)
- };
-}
-
-exports.createDemensionTypes = createDemensionTypes;
-exports.createGenericTypes = createGenericTypes;
-exports.productionTypes = productionTypes;
-exports.tokenTypes = tokenTypes;
diff --git a/node_modules/css-tree/cjs/lexer/index.cjs b/node_modules/css-tree/cjs/lexer/index.cjs
deleted file mode 100644
index 2e3633ec..00000000
--- a/node_modules/css-tree/cjs/lexer/index.cjs
+++ /dev/null
@@ -1,7 +0,0 @@
-'use strict';
-
-const Lexer = require('./Lexer.cjs');
-
-
-
-exports.Lexer = Lexer.Lexer;
diff --git a/node_modules/css-tree/cjs/lexer/match-graph.cjs b/node_modules/css-tree/cjs/lexer/match-graph.cjs
deleted file mode 100644
index 79c9b66c..00000000
--- a/node_modules/css-tree/cjs/lexer/match-graph.cjs
+++ /dev/null
@@ -1,459 +0,0 @@
-'use strict';
-
-const parse = require('../definition-syntax/parse.cjs');
-
-const MATCH = { type: 'Match' };
-const MISMATCH = { type: 'Mismatch' };
-const DISALLOW_EMPTY = { type: 'DisallowEmpty' };
-
-const LEFTPARENTHESIS = 40; // (
-const RIGHTPARENTHESIS = 41; // )
-
-function createCondition(match, thenBranch, elseBranch) {
- // reduce node count
- if (thenBranch === MATCH && elseBranch === MISMATCH) {
- return match;
- }
-
- if (match === MATCH && thenBranch === MATCH && elseBranch === MATCH) {
- return match;
- }
-
- if (match.type === 'If' && match.else === MISMATCH && thenBranch === MATCH) {
- thenBranch = match.then;
- match = match.match;
- }
-
- return {
- type: 'If',
- match,
- then: thenBranch,
- else: elseBranch
- };
-}
-
-function isFunctionType(name) {
- return (
- name.length > 2 &&
- name.charCodeAt(name.length - 2) === LEFTPARENTHESIS &&
- name.charCodeAt(name.length - 1) === RIGHTPARENTHESIS
- );
-}
-
-function isEnumCapatible(term) {
- return (
- term.type === 'Keyword' ||
- term.type === 'AtKeyword' ||
- term.type === 'Function' ||
- term.type === 'Type' && isFunctionType(term.name)
- );
-}
-
-function buildGroupMatchGraph(combinator, terms, atLeastOneTermMatched) {
- switch (combinator) {
- case ' ': {
- // Juxtaposing components means that all of them must occur, in the given order.
- //
- // a b c
- // =
- // match a
- // then match b
- // then match c
- // then MATCH
- // else MISMATCH
- // else MISMATCH
- // else MISMATCH
- let result = MATCH;
-
- for (let i = terms.length - 1; i >= 0; i--) {
- const term = terms[i];
-
- result = createCondition(
- term,
- result,
- MISMATCH
- );
- }
- return result;
- }
-
- case '|': {
- // A bar (|) separates two or more alternatives: exactly one of them must occur.
- //
- // a | b | c
- // =
- // match a
- // then MATCH
- // else match b
- // then MATCH
- // else match c
- // then MATCH
- // else MISMATCH
-
- let result = MISMATCH;
- let map = null;
-
- for (let i = terms.length - 1; i >= 0; i--) {
- let term = terms[i];
-
- // reduce sequence of keywords into a Enum
- if (isEnumCapatible(term)) {
- if (map === null && i > 0 && isEnumCapatible(terms[i - 1])) {
- map = Object.create(null);
- result = createCondition(
- {
- type: 'Enum',
- map
- },
- MATCH,
- result
- );
- }
-
- if (map !== null) {
- const key = (isFunctionType(term.name) ? term.name.slice(0, -1) : term.name).toLowerCase();
- if (key in map === false) {
- map[key] = term;
- continue;
- }
- }
- }
-
- map = null;
-
- // create a new conditonal node
- result = createCondition(
- term,
- MATCH,
- result
- );
- }
- return result;
- }
-
- case '&&': {
- // A double ampersand (&&) separates two or more components,
- // all of which must occur, in any order.
-
- // Use MatchOnce for groups with a large number of terms,
- // since &&-groups produces at least N!-node trees
- if (terms.length > 5) {
- return {
- type: 'MatchOnce',
- terms,
- all: true
- };
- }
-
- // Use a combination tree for groups with small number of terms
- //
- // a && b && c
- // =
- // match a
- // then [b && c]
- // else match b
- // then [a && c]
- // else match c
- // then [a && b]
- // else MISMATCH
- //
- // a && b
- // =
- // match a
- // then match b
- // then MATCH
- // else MISMATCH
- // else match b
- // then match a
- // then MATCH
- // else MISMATCH
- // else MISMATCH
- let result = MISMATCH;
-
- for (let i = terms.length - 1; i >= 0; i--) {
- const term = terms[i];
- let thenClause;
-
- if (terms.length > 1) {
- thenClause = buildGroupMatchGraph(
- combinator,
- terms.filter(function(newGroupTerm) {
- return newGroupTerm !== term;
- }),
- false
- );
- } else {
- thenClause = MATCH;
- }
-
- result = createCondition(
- term,
- thenClause,
- result
- );
- }
- return result;
- }
-
- case '||': {
- // A double bar (||) separates two or more options:
- // one or more of them must occur, in any order.
-
- // Use MatchOnce for groups with a large number of terms,
- // since ||-groups produces at least N!-node trees
- if (terms.length > 5) {
- return {
- type: 'MatchOnce',
- terms,
- all: false
- };
- }
-
- // Use a combination tree for groups with small number of terms
- //
- // a || b || c
- // =
- // match a
- // then [b || c]
- // else match b
- // then [a || c]
- // else match c
- // then [a || b]
- // else MISMATCH
- //
- // a || b
- // =
- // match a
- // then match b
- // then MATCH
- // else MATCH
- // else match b
- // then match a
- // then MATCH
- // else MATCH
- // else MISMATCH
- let result = atLeastOneTermMatched ? MATCH : MISMATCH;
-
- for (let i = terms.length - 1; i >= 0; i--) {
- const term = terms[i];
- let thenClause;
-
- if (terms.length > 1) {
- thenClause = buildGroupMatchGraph(
- combinator,
- terms.filter(function(newGroupTerm) {
- return newGroupTerm !== term;
- }),
- true
- );
- } else {
- thenClause = MATCH;
- }
-
- result = createCondition(
- term,
- thenClause,
- result
- );
- }
- return result;
- }
- }
-}
-
-function buildMultiplierMatchGraph(node) {
- let result = MATCH;
- let matchTerm = buildMatchGraphInternal(node.term);
-
- if (node.max === 0) {
- // disable repeating of empty match to prevent infinite loop
- matchTerm = createCondition(
- matchTerm,
- DISALLOW_EMPTY,
- MISMATCH
- );
-
- // an occurrence count is not limited, make a cycle;
- // to collect more terms on each following matching mismatch
- result = createCondition(
- matchTerm,
- null, // will be a loop
- MISMATCH
- );
-
- result.then = createCondition(
- MATCH,
- MATCH,
- result // make a loop
- );
-
- if (node.comma) {
- result.then.else = createCondition(
- { type: 'Comma', syntax: node },
- result,
- MISMATCH
- );
- }
- } else {
- // create a match node chain for [min .. max] interval with optional matches
- for (let i = node.min || 1; i <= node.max; i++) {
- if (node.comma && result !== MATCH) {
- result = createCondition(
- { type: 'Comma', syntax: node },
- result,
- MISMATCH
- );
- }
-
- result = createCondition(
- matchTerm,
- createCondition(
- MATCH,
- MATCH,
- result
- ),
- MISMATCH
- );
- }
- }
-
- if (node.min === 0) {
- // allow zero match
- result = createCondition(
- MATCH,
- MATCH,
- result
- );
- } else {
- // create a match node chain to collect [0 ... min - 1] required matches
- for (let i = 0; i < node.min - 1; i++) {
- if (node.comma && result !== MATCH) {
- result = createCondition(
- { type: 'Comma', syntax: node },
- result,
- MISMATCH
- );
- }
-
- result = createCondition(
- matchTerm,
- result,
- MISMATCH
- );
- }
- }
-
- return result;
-}
-
-function buildMatchGraphInternal(node) {
- if (typeof node === 'function') {
- return {
- type: 'Generic',
- fn: node
- };
- }
-
- switch (node.type) {
- case 'Group': {
- let result = buildGroupMatchGraph(
- node.combinator,
- node.terms.map(buildMatchGraphInternal),
- false
- );
-
- if (node.disallowEmpty) {
- result = createCondition(
- result,
- DISALLOW_EMPTY,
- MISMATCH
- );
- }
-
- return result;
- }
-
- case 'Multiplier':
- return buildMultiplierMatchGraph(node);
-
- case 'Type':
- case 'Property':
- return {
- type: node.type,
- name: node.name,
- syntax: node
- };
-
- case 'Keyword':
- return {
- type: node.type,
- name: node.name.toLowerCase(),
- syntax: node
- };
-
- case 'AtKeyword':
- return {
- type: node.type,
- name: '@' + node.name.toLowerCase(),
- syntax: node
- };
-
- case 'Function':
- return {
- type: node.type,
- name: node.name.toLowerCase() + '(',
- syntax: node
- };
-
- case 'String':
- // convert a one char length String to a Token
- if (node.value.length === 3) {
- return {
- type: 'Token',
- value: node.value.charAt(1),
- syntax: node
- };
- }
-
- // otherwise use it as is
- return {
- type: node.type,
- value: node.value.substr(1, node.value.length - 2).replace(/\\'/g, '\''),
- syntax: node
- };
-
- case 'Token':
- return {
- type: node.type,
- value: node.value,
- syntax: node
- };
-
- case 'Comma':
- return {
- type: node.type,
- syntax: node
- };
-
- default:
- throw new Error('Unknown node type:', node.type);
- }
-}
-
-function buildMatchGraph(syntaxTree, ref) {
- if (typeof syntaxTree === 'string') {
- syntaxTree = parse.parse(syntaxTree);
- }
-
- return {
- type: 'MatchGraph',
- match: buildMatchGraphInternal(syntaxTree),
- syntax: ref || null,
- source: syntaxTree
- };
-}
-
-exports.DISALLOW_EMPTY = DISALLOW_EMPTY;
-exports.MATCH = MATCH;
-exports.MISMATCH = MISMATCH;
-exports.buildMatchGraph = buildMatchGraph;
diff --git a/node_modules/css-tree/cjs/lexer/match.cjs b/node_modules/css-tree/cjs/lexer/match.cjs
deleted file mode 100644
index 903720d8..00000000
--- a/node_modules/css-tree/cjs/lexer/match.cjs
+++ /dev/null
@@ -1,632 +0,0 @@
-'use strict';
-
-const matchGraph = require('./match-graph.cjs');
-const types = require('../tokenizer/types.cjs');
-
-const { hasOwnProperty } = Object.prototype;
-const STUB = 0;
-const TOKEN = 1;
-const OPEN_SYNTAX = 2;
-const CLOSE_SYNTAX = 3;
-
-const EXIT_REASON_MATCH = 'Match';
-const EXIT_REASON_MISMATCH = 'Mismatch';
-const EXIT_REASON_ITERATION_LIMIT = 'Maximum iteration number exceeded (please fill an issue on https://github.com/csstree/csstree/issues)';
-
-const ITERATION_LIMIT = 15000;
-
-function reverseList(list) {
- let prev = null;
- let next = null;
- let item = list;
-
- while (item !== null) {
- next = item.prev;
- item.prev = prev;
- prev = item;
- item = next;
- }
-
- return prev;
-}
-
-function areStringsEqualCaseInsensitive(testStr, referenceStr) {
- if (testStr.length !== referenceStr.length) {
- return false;
- }
-
- for (let i = 0; i < testStr.length; i++) {
- const referenceCode = referenceStr.charCodeAt(i);
- let testCode = testStr.charCodeAt(i);
-
- // testCode.toLowerCase() for U+0041 LATIN CAPITAL LETTER A (A) .. U+005A LATIN CAPITAL LETTER Z (Z).
- if (testCode >= 0x0041 && testCode <= 0x005A) {
- testCode = testCode | 32;
- }
-
- if (testCode !== referenceCode) {
- return false;
- }
- }
-
- return true;
-}
-
-function isContextEdgeDelim(token) {
- if (token.type !== types.Delim) {
- return false;
- }
-
- // Fix matching for unicode-range: U+30??, U+FF00-FF9F
- // Probably we need to check out previous match instead
- return token.value !== '?';
-}
-
-function isCommaContextStart(token) {
- if (token === null) {
- return true;
- }
-
- return (
- token.type === types.Comma ||
- token.type === types.Function ||
- token.type === types.LeftParenthesis ||
- token.type === types.LeftSquareBracket ||
- token.type === types.LeftCurlyBracket ||
- isContextEdgeDelim(token)
- );
-}
-
-function isCommaContextEnd(token) {
- if (token === null) {
- return true;
- }
-
- return (
- token.type === types.RightParenthesis ||
- token.type === types.RightSquareBracket ||
- token.type === types.RightCurlyBracket ||
- (token.type === types.Delim && token.value === '/')
- );
-}
-
-function internalMatch(tokens, state, syntaxes) {
- function moveToNextToken() {
- do {
- tokenIndex++;
- token = tokenIndex < tokens.length ? tokens[tokenIndex] : null;
- } while (token !== null && (token.type === types.WhiteSpace || token.type === types.Comment));
- }
-
- function getNextToken(offset) {
- const nextIndex = tokenIndex + offset;
-
- return nextIndex < tokens.length ? tokens[nextIndex] : null;
- }
-
- function stateSnapshotFromSyntax(nextState, prev) {
- return {
- nextState,
- matchStack,
- syntaxStack,
- thenStack,
- tokenIndex,
- prev
- };
- }
-
- function pushThenStack(nextState) {
- thenStack = {
- nextState,
- matchStack,
- syntaxStack,
- prev: thenStack
- };
- }
-
- function pushElseStack(nextState) {
- elseStack = stateSnapshotFromSyntax(nextState, elseStack);
- }
-
- function addTokenToMatch() {
- matchStack = {
- type: TOKEN,
- syntax: state.syntax,
- token,
- prev: matchStack
- };
-
- moveToNextToken();
- syntaxStash = null;
-
- if (tokenIndex > longestMatch) {
- longestMatch = tokenIndex;
- }
- }
-
- function openSyntax() {
- syntaxStack = {
- syntax: state.syntax,
- opts: state.syntax.opts || (syntaxStack !== null && syntaxStack.opts) || null,
- prev: syntaxStack
- };
-
- matchStack = {
- type: OPEN_SYNTAX,
- syntax: state.syntax,
- token: matchStack.token,
- prev: matchStack
- };
- }
-
- function closeSyntax() {
- if (matchStack.type === OPEN_SYNTAX) {
- matchStack = matchStack.prev;
- } else {
- matchStack = {
- type: CLOSE_SYNTAX,
- syntax: syntaxStack.syntax,
- token: matchStack.token,
- prev: matchStack
- };
- }
-
- syntaxStack = syntaxStack.prev;
- }
-
- let syntaxStack = null;
- let thenStack = null;
- let elseStack = null;
-
- // null – stashing allowed, nothing stashed
- // false – stashing disabled, nothing stashed
- // anithing else – fail stashable syntaxes, some syntax stashed
- let syntaxStash = null;
-
- let iterationCount = 0; // count iterations and prevent infinite loop
- let exitReason = null;
-
- let token = null;
- let tokenIndex = -1;
- let longestMatch = 0;
- let matchStack = {
- type: STUB,
- syntax: null,
- token: null,
- prev: null
- };
-
- moveToNextToken();
-
- while (exitReason === null && ++iterationCount < ITERATION_LIMIT) {
- // function mapList(list, fn) {
- // const result = [];
- // while (list) {
- // result.unshift(fn(list));
- // list = list.prev;
- // }
- // return result;
- // }
- // console.log('--\n',
- // '#' + iterationCount,
- // require('util').inspect({
- // match: mapList(matchStack, x => x.type === TOKEN ? x.token && x.token.value : x.syntax ? ({ [OPEN_SYNTAX]: '<', [CLOSE_SYNTAX]: '</' }[x.type] || x.type) + '!' + x.syntax.name : null),
- // token: token && token.value,
- // tokenIndex,
- // syntax: syntax.type + (syntax.id ? ' #' + syntax.id : '')
- // }, { depth: null })
- // );
- switch (state.type) {
- case 'Match':
- if (thenStack === null) {
- // turn to MISMATCH when some tokens left unmatched
- if (token !== null) {
- // doesn't mismatch if just one token left and it's an IE hack
- if (tokenIndex !== tokens.length - 1 || (token.value !== '\\0' && token.value !== '\\9')) {
- state = matchGraph.MISMATCH;
- break;
- }
- }
-
- // break the main loop, return a result - MATCH
- exitReason = EXIT_REASON_MATCH;
- break;
- }
-
- // go to next syntax (`then` branch)
- state = thenStack.nextState;
-
- // check match is not empty
- if (state === matchGraph.DISALLOW_EMPTY) {
- if (thenStack.matchStack === matchStack) {
- state = matchGraph.MISMATCH;
- break;
- } else {
- state = matchGraph.MATCH;
- }
- }
-
- // close syntax if needed
- while (thenStack.syntaxStack !== syntaxStack) {
- closeSyntax();
- }
-
- // pop stack
- thenStack = thenStack.prev;
- break;
-
- case 'Mismatch':
- // when some syntax is stashed
- if (syntaxStash !== null && syntaxStash !== false) {
- // there is no else branches or a branch reduce match stack
- if (elseStack === null || tokenIndex > elseStack.tokenIndex) {
- // restore state from the stash
- elseStack = syntaxStash;
- syntaxStash = false; // disable stashing
- }
- } else if (elseStack === null) {
- // no else branches -> break the main loop
- // return a result - MISMATCH
- exitReason = EXIT_REASON_MISMATCH;
- break;
- }
-
- // go to next syntax (`else` branch)
- state = elseStack.nextState;
-
- // restore all the rest stack states
- thenStack = elseStack.thenStack;
- syntaxStack = elseStack.syntaxStack;
- matchStack = elseStack.matchStack;
- tokenIndex = elseStack.tokenIndex;
- token = tokenIndex < tokens.length ? tokens[tokenIndex] : null;
-
- // pop stack
- elseStack = elseStack.prev;
- break;
-
- case 'MatchGraph':
- state = state.match;
- break;
-
- case 'If':
- // IMPORTANT: else stack push must go first,
- // since it stores the state of thenStack before changes
- if (state.else !== matchGraph.MISMATCH) {
- pushElseStack(state.else);
- }
-
- if (state.then !== matchGraph.MATCH) {
- pushThenStack(state.then);
- }
-
- state = state.match;
- break;
-
- case 'MatchOnce':
- state = {
- type: 'MatchOnceBuffer',
- syntax: state,
- index: 0,
- mask: 0
- };
- break;
-
- case 'MatchOnceBuffer': {
- const terms = state.syntax.terms;
-
- if (state.index === terms.length) {
- // no matches at all or it's required all terms to be matched
- if (state.mask === 0 || state.syntax.all) {
- state = matchGraph.MISMATCH;
- break;
- }
-
- // a partial match is ok
- state = matchGraph.MATCH;
- break;
- }
-
- // all terms are matched
- if (state.mask === (1 << terms.length) - 1) {
- state = matchGraph.MATCH;
- break;
- }
-
- for (; state.index < terms.length; state.index++) {
- const matchFlag = 1 << state.index;
-
- if ((state.mask & matchFlag) === 0) {
- // IMPORTANT: else stack push must go first,
- // since it stores the state of thenStack before changes
- pushElseStack(state);
- pushThenStack({
- type: 'AddMatchOnce',
- syntax: state.syntax,
- mask: state.mask | matchFlag
- });
-
- // match
- state = terms[state.index++];
- break;
- }
- }
- break;
- }
-
- case 'AddMatchOnce':
- state = {
- type: 'MatchOnceBuffer',
- syntax: state.syntax,
- index: 0,
- mask: state.mask
- };
- break;
-
- case 'Enum':
- if (token !== null) {
- let name = token.value.toLowerCase();
-
- // drop \0 and \9 hack from keyword name
- if (name.indexOf('\\') !== -1) {
- name = name.replace(/\\[09].*$/, '');
- }
-
- if (hasOwnProperty.call(state.map, name)) {
- state = state.map[name];
- break;
- }
- }
-
- state = matchGraph.MISMATCH;
- break;
-
- case 'Generic': {
- const opts = syntaxStack !== null ? syntaxStack.opts : null;
- const lastTokenIndex = tokenIndex + Math.floor(state.fn(token, getNextToken, opts));
-
- if (!isNaN(lastTokenIndex) && lastTokenIndex > tokenIndex) {
- while (tokenIndex < lastTokenIndex) {
- addTokenToMatch();
- }
-
- state = matchGraph.MATCH;
- } else {
- state = matchGraph.MISMATCH;
- }
-
- break;
- }
-
- case 'Type':
- case 'Property': {
- const syntaxDict = state.type === 'Type' ? 'types' : 'properties';
- const dictSyntax = hasOwnProperty.call(syntaxes, syntaxDict) ? syntaxes[syntaxDict][state.name] : null;
-
- if (!dictSyntax || !dictSyntax.match) {
- throw new Error(
- 'Bad syntax reference: ' +
- (state.type === 'Type'
- ? '<' + state.name + '>'
- : '<\'' + state.name + '\'>')
- );
- }
-
- // stash a syntax for types with low priority
- if (syntaxStash !== false && token !== null && state.type === 'Type') {
- const lowPriorityMatching =
- // https://drafts.csswg.org/css-values-4/#custom-idents
- // When parsing positionally-ambiguous keywords in a property value, a <custom-ident> production
- // can only claim the keyword if no other unfulfilled production can claim it.
- (state.name === 'custom-ident' && token.type === types.Ident) ||
-
- // https://drafts.csswg.org/css-values-4/#lengths
- // ... if a `0` could be parsed as either a <number> or a <length> in a property (such as line-height),
- // it must parse as a <number>
- (state.name === 'length' && token.value === '0');
-
- if (lowPriorityMatching) {
- if (syntaxStash === null) {
- syntaxStash = stateSnapshotFromSyntax(state, elseStack);
- }
-
- state = matchGraph.MISMATCH;
- break;
- }
- }
-
- openSyntax();
- state = dictSyntax.match;
- break;
- }
-
- case 'Keyword': {
- const name = state.name;
-
- if (token !== null) {
- let keywordName = token.value;
-
- // drop \0 and \9 hack from keyword name
- if (keywordName.indexOf('\\') !== -1) {
- keywordName = keywordName.replace(/\\[09].*$/, '');
- }
-
- if (areStringsEqualCaseInsensitive(keywordName, name)) {
- addTokenToMatch();
- state = matchGraph.MATCH;
- break;
- }
- }
-
- state = matchGraph.MISMATCH;
- break;
- }
-
- case 'AtKeyword':
- case 'Function':
- if (token !== null && areStringsEqualCaseInsensitive(token.value, state.name)) {
- addTokenToMatch();
- state = matchGraph.MATCH;
- break;
- }
-
- state = matchGraph.MISMATCH;
- break;
-
- case 'Token':
- if (token !== null && token.value === state.value) {
- addTokenToMatch();
- state = matchGraph.MATCH;
- break;
- }
-
- state = matchGraph.MISMATCH;
- break;
-
- case 'Comma':
- if (token !== null && token.type === types.Comma) {
- if (isCommaContextStart(matchStack.token)) {
- state = matchGraph.MISMATCH;
- } else {
- addTokenToMatch();
- state = isCommaContextEnd(token) ? matchGraph.MISMATCH : matchGraph.MATCH;
- }
- } else {
- state = isCommaContextStart(matchStack.token) || isCommaContextEnd(token) ? matchGraph.MATCH : matchGraph.MISMATCH;
- }
-
- break;
-
- case 'String':
- let string = '';
- let lastTokenIndex = tokenIndex;
-
- for (; lastTokenIndex < tokens.length && string.length < state.value.length; lastTokenIndex++) {
- string += tokens[lastTokenIndex].value;
- }
-
- if (areStringsEqualCaseInsensitive(string, state.value)) {
- while (tokenIndex < lastTokenIndex) {
- addTokenToMatch();
- }
-
- state = matchGraph.MATCH;
- } else {
- state = matchGraph.MISMATCH;
- }
-
- break;
-
- default:
- throw new Error('Unknown node type: ' + state.type);
- }
- }
-
- switch (exitReason) {
- case null:
- console.warn('[csstree-match] BREAK after ' + ITERATION_LIMIT + ' iterations');
- exitReason = EXIT_REASON_ITERATION_LIMIT;
- matchStack = null;
- break;
-
- case EXIT_REASON_MATCH:
- while (syntaxStack !== null) {
- closeSyntax();
- }
- break;
-
- default:
- matchStack = null;
- }
-
- return {
- tokens,
- reason: exitReason,
- iterations: iterationCount,
- match: matchStack,
- longestMatch
- };
-}
-
-function matchAsList(tokens, matchGraph, syntaxes) {
- const matchResult = internalMatch(tokens, matchGraph, syntaxes || {});
-
- if (matchResult.match !== null) {
- let item = reverseList(matchResult.match).prev;
-
- matchResult.match = [];
-
- while (item !== null) {
- switch (item.type) {
- case OPEN_SYNTAX:
- case CLOSE_SYNTAX:
- matchResult.match.push({
- type: item.type,
- syntax: item.syntax
- });
- break;
-
- default:
- matchResult.match.push({
- token: item.token.value,
- node: item.token.node
- });
- break;
- }
-
- item = item.prev;
- }
- }
-
- return matchResult;
-}
-
-function matchAsTree(tokens, matchGraph, syntaxes) {
- const matchResult = internalMatch(tokens, matchGraph, syntaxes || {});
-
- if (matchResult.match === null) {
- return matchResult;
- }
-
- let item = matchResult.match;
- let host = matchResult.match = {
- syntax: matchGraph.syntax || null,
- match: []
- };
- const hostStack = [host];
-
- // revert a list and start with 2nd item since 1st is a stub item
- item = reverseList(item).prev;
-
- // build a tree
- while (item !== null) {
- switch (item.type) {
- case OPEN_SYNTAX:
- host.match.push(host = {
- syntax: item.syntax,
- match: []
- });
- hostStack.push(host);
- break;
-
- case CLOSE_SYNTAX:
- hostStack.pop();
- host = hostStack[hostStack.length - 1];
- break;
-
- default:
- host.match.push({
- syntax: item.syntax || null,
- token: item.token.value,
- node: item.token.node
- });
- }
-
- item = item.prev;
- }
-
- return matchResult;
-}
-
-exports.matchAsList = matchAsList;
-exports.matchAsTree = matchAsTree;
diff --git a/node_modules/css-tree/cjs/lexer/prepare-tokens.cjs b/node_modules/css-tree/cjs/lexer/prepare-tokens.cjs
deleted file mode 100644
index 24647a5e..00000000
--- a/node_modules/css-tree/cjs/lexer/prepare-tokens.cjs
+++ /dev/null
@@ -1,54 +0,0 @@
-'use strict';
-
-const index = require('../tokenizer/index.cjs');
-
-const astToTokens = {
- decorator(handlers) {
- const tokens = [];
- let curNode = null;
-
- return {
- ...handlers,
- node(node) {
- const tmp = curNode;
- curNode = node;
- handlers.node.call(this, node);
- curNode = tmp;
- },
- emit(value, type, auto) {
- tokens.push({
- type,
- value,
- node: auto ? null : curNode
- });
- },
- result() {
- return tokens;
- }
- };
- }
-};
-
-function stringToTokens(str) {
- const tokens = [];
-
- index.tokenize(str, (type, start, end) =>
- tokens.push({
- type,
- value: str.slice(start, end),
- node: null
- })
- );
-
- return tokens;
-}
-
-function prepareTokens(value, syntax) {
- if (typeof value === 'string') {
- return stringToTokens(value);
- }
-
- return syntax.generate(value, astToTokens);
-}
-
-module.exports = prepareTokens;
diff --git a/node_modules/css-tree/cjs/lexer/search.cjs b/node_modules/css-tree/cjs/lexer/search.cjs
deleted file mode 100644
index 2b1e12c3..00000000
--- a/node_modules/css-tree/cjs/lexer/search.cjs
+++ /dev/null
@@ -1,65 +0,0 @@
-'use strict';
-
-const List = require('../utils/List.cjs');
-
-function getFirstMatchNode(matchNode) {
- if ('node' in matchNode) {
- return matchNode.node;
- }
-
- return getFirstMatchNode(matchNode.match[0]);
-}
-
-function getLastMatchNode(matchNode) {
- if ('node' in matchNode) {
- return matchNode.node;
- }
-
- return getLastMatchNode(matchNode.match[matchNode.match.length - 1]);
-}
-
-function matchFragments(lexer, ast, match, type, name) {
- function findFragments(matchNode) {
- if (matchNode.syntax !== null &&
- matchNode.syntax.type === type &&
- matchNode.syntax.name === name) {
- const start = getFirstMatchNode(matchNode);
- const end = getLastMatchNode(matchNode);
-
- lexer.syntax.walk(ast, function(node, item, list) {
- if (node === start) {
- const nodes = new List.List();
-
- do {
- nodes.appendData(item.data);
-
- if (item.data === end) {
- break;
- }
-
- item = item.next;
- } while (item !== null);
-
- fragments.push({
- parent: list,
- nodes
- });
- }
- });
- }
-
- if (Array.isArray(matchNode.match)) {
- matchNode.match.forEach(findFragments);
- }
- }
-
- const fragments = [];
-
- if (match.matched !== null) {
- findFragments(match.matched);
- }
-
- return fragments;
-}
-
-exports.matchFragments = matchFragments;
diff --git a/node_modules/css-tree/cjs/lexer/structure.cjs b/node_modules/css-tree/cjs/lexer/structure.cjs
deleted file mode 100644
index 77bdd35a..00000000
--- a/node_modules/css-tree/cjs/lexer/structure.cjs
+++ /dev/null
@@ -1,168 +0,0 @@
-'use strict';
-
-const List = require('../utils/List.cjs');
-
-const { hasOwnProperty } = Object.prototype;
-
-function isValidNumber(value) {
- // Number.isInteger(value) && value >= 0
- return (
- typeof value === 'number' &&
- isFinite(value) &&
- Math.floor(value) === value &&
- value >= 0
- );
-}
-
-function isValidLocation(loc) {
- return (
- Boolean(loc) &&
- isValidNumber(loc.offset) &&
- isValidNumber(loc.line) &&
- isValidNumber(loc.column)
- );
-}
-
-function createNodeStructureChecker(type, fields) {
- return function checkNode(node, warn) {
- if (!node || node.constructor !== Object) {
- return warn(node, 'Type of node should be an Object');
- }
-
- for (let key in node) {
- let valid = true;
-
- if (hasOwnProperty.call(node, key) === false) {
- continue;
- }
-
- if (key === 'type') {
- if (node.type !== type) {
- warn(node, 'Wrong node type `' + node.type + '`, expected `' + type + '`');
- }
- } else if (key === 'loc') {
- if (node.loc === null) {
- continue;
- } else if (node.loc && node.loc.constructor === Object) {
- if (typeof node.loc.source !== 'string') {
- key += '.source';
- } else if (!isValidLocation(node.loc.start)) {
- key += '.start';
- } else if (!isValidLocation(node.loc.end)) {
- key += '.end';
- } else {
- continue;
- }
- }
-
- valid = false;
- } else if (fields.hasOwnProperty(key)) {
- valid = false;
-
- for (let i = 0; !valid && i < fields[key].length; i++) {
- const fieldType = fields[key][i];
-
- switch (fieldType) {
- case String:
- valid = typeof node[key] === 'string';
- break;
-
- case Boolean:
- valid = typeof node[key] === 'boolean';
- break;
-
- case null:
- valid = node[key] === null;
- break;
-
- default:
- if (typeof fieldType === 'string') {
- valid = node[key] && node[key].type === fieldType;
- } else if (Array.isArray(fieldType)) {
- valid = node[key] instanceof List.List;
- }
- }
- }
- } else {
- warn(node, 'Unknown field `' + key + '` for ' + type + ' node type');
- }
-
- if (!valid) {
- warn(node, 'Bad value for `' + type + '.' + key + '`');
- }
- }
-
- for (const key in fields) {
- if (hasOwnProperty.call(fields, key) &&
- hasOwnProperty.call(node, key) === false) {
- warn(node, 'Field `' + type + '.' + key + '` is missed');
- }
- }
- };
-}
-
-function processStructure(name, nodeType) {
- const structure = nodeType.structure;
- const fields = {
- type: String,
- loc: true
- };
- const docs = {
- type: '"' + name + '"'
- };
-
- for (const key in structure) {
- if (hasOwnProperty.call(structure, key) === false) {
- continue;
- }
-
- const docsTypes = [];
- const fieldTypes = fields[key] = Array.isArray(structure[key])
- ? structure[key].slice()
- : [structure[key]];
-
- for (let i = 0; i < fieldTypes.length; i++) {
- const fieldType = fieldTypes[i];
- if (fieldType === String || fieldType === Boolean) {
- docsTypes.push(fieldType.name);
- } else if (fieldType === null) {
- docsTypes.push('null');
- } else if (typeof fieldType === 'string') {
- docsTypes.push('<' + fieldType + '>');
- } else if (Array.isArray(fieldType)) {
- docsTypes.push('List'); // TODO: use type enum
- } else {
- throw new Error('Wrong value `' + fieldType + '` in `' + name + '.' + key + '` structure definition');
- }
- }
-
- docs[key] = docsTypes.join(' | ');
- }
-
- return {
- docs,
- check: createNodeStructureChecker(name, fields)
- };
-}
-
-function getStructureFromConfig(config) {
- const structure = {};
-
- if (config.node) {
- for (const name in config.node) {
- if (hasOwnProperty.call(config.node, name)) {
- const nodeType = config.node[name];
-
- if (nodeType.structure) {
- structure[name] = processStructure(name, nodeType);
- } else {
- throw new Error('Missed `structure` field in `' + name + '` node type definition');
- }
- }
- }
- }
-
- return structure;
-}
-
-exports.getStructureFromConfig = getStructureFromConfig;
diff --git a/node_modules/css-tree/cjs/lexer/trace.cjs b/node_modules/css-tree/cjs/lexer/trace.cjs
deleted file mode 100644
index 13753f26..00000000
--- a/node_modules/css-tree/cjs/lexer/trace.cjs
+++ /dev/null
@@ -1,73 +0,0 @@
-'use strict';
-
-function getTrace(node) {
- function shouldPutToTrace(syntax) {
- if (syntax === null) {
- return false;
- }
-
- return (
- syntax.type === 'Type' ||
- syntax.type === 'Property' ||
- syntax.type === 'Keyword'
- );
- }
-
- function hasMatch(matchNode) {
- if (Array.isArray(matchNode.match)) {
- // use for-loop for better perfomance
- for (let i = 0; i < matchNode.match.length; i++) {
- if (hasMatch(matchNode.match[i])) {
- if (shouldPutToTrace(matchNode.syntax)) {
- result.unshift(matchNode.syntax);
- }
-
- return true;
- }
- }
- } else if (matchNode.node === node) {
- result = shouldPutToTrace(matchNode.syntax)
- ? [matchNode.syntax]
- : [];
-
- return true;
- }
-
- return false;
- }
-
- let result = null;
-
- if (this.matched !== null) {
- hasMatch(this.matched);
- }
-
- return result;
-}
-
-function isType(node, type) {
- return testNode(this, node, match => match.type === 'Type' && match.name === type);
-}
-
-function isProperty(node, property) {
- return testNode(this, node, match => match.type === 'Property' && match.name === property);
-}
-
-function isKeyword(node) {
- return testNode(this, node, match => match.type === 'Keyword');
-}
-
-function testNode(match, node, fn) {
- const trace = getTrace.call(match, node);
-
- if (trace === null) {
- return false;
- }
-
- return trace.some(fn);
-}
-
-exports.getTrace = getTrace;
-exports.isKeyword = isKeyword;
-exports.isProperty = isProperty;
-exports.isType = isType;
diff --git a/node_modules/css-tree/cjs/lexer/units.cjs b/node_modules/css-tree/cjs/lexer/units.cjs
deleted file mode 100644
index 13f4e97b..00000000
--- a/node_modules/css-tree/cjs/lexer/units.cjs
+++ /dev/null
@@ -1,38 +0,0 @@
-'use strict';
-
-const length = [
- // absolute length units https://www.w3.org/TR/css-values-3/#lengths
- 'cm', 'mm', 'q', 'in', 'pt', 'pc', 'px',
- // font-relative length units https://drafts.csswg.org/css-values-4/#font-relative-lengths
- 'em', 'rem',
- 'ex', 'rex',
- 'cap', 'rcap',
- 'ch', 'rch',
- 'ic', 'ric',
- 'lh', 'rlh',
- // viewport-percentage lengths https://drafts.csswg.org/css-values-4/#viewport-relative-lengths
- 'vw', 'svw', 'lvw', 'dvw',
- 'vh', 'svh', 'lvh', 'dvh',
- 'vi', 'svi', 'lvi', 'dvi',
- 'vb', 'svb', 'lvb', 'dvb',
- 'vmin', 'svmin', 'lvmin', 'dvmin',
- 'vmax', 'svmax', 'lvmax', 'dvmax',
- // container relative lengths https://drafts.csswg.org/css-contain-3/#container-lengths
- 'cqw', 'cqh', 'cqi', 'cqb', 'cqmin', 'cqmax'
-];
-const angle = ['deg', 'grad', 'rad', 'turn']; // https://www.w3.org/TR/css-values-3/#angles
-const time = ['s', 'ms']; // https://www.w3.org/TR/css-values-3/#time
-const frequency = ['hz', 'khz']; // https://www.w3.org/TR/css-values-3/#frequency
-const resolution = ['dpi', 'dpcm', 'dppx', 'x']; // https://www.w3.org/TR/css-values-3/#resolution
-const flex = ['fr']; // https://drafts.csswg.org/css-grid/#fr-unit
-const decibel = ['db']; // https://www.w3.org/TR/css3-speech/#mixing-props-voice-volume
-const semitones = ['st']; // https://www.w3.org/TR/css3-speech/#voice-props-voice-pitch
-
-exports.angle = angle;
-exports.decibel = decibel;
-exports.flex = flex;
-exports.frequency = frequency;
-exports.length = length;
-exports.resolution = resolution;
-exports.semitones = semitones;
-exports.time = time;
diff --git a/node_modules/css-tree/cjs/parser/SyntaxError.cjs b/node_modules/css-tree/cjs/parser/SyntaxError.cjs
deleted file mode 100644
index 63dd44b5..00000000
--- a/node_modules/css-tree/cjs/parser/SyntaxError.cjs
+++ /dev/null
@@ -1,69 +0,0 @@
-'use strict';
-
-const createCustomError = require('../utils/create-custom-error.cjs');
-
-const MAX_LINE_LENGTH = 100;
-const OFFSET_CORRECTION = 60;
-const TAB_REPLACEMENT = ' ';
-
-function sourceFragment({ source, line, column }, extraLines) {
- function processLines(start, end) {
- return lines
- .slice(start, end)
- .map((line, idx) =>
- String(start + idx + 1).padStart(maxNumLength) + ' |' + line
- ).join('\n');
- }
-
- const lines = source.split(/\r\n?|\n|\f/);
- const startLine = Math.max(1, line - extraLines) - 1;
- const endLine = Math.min(line + extraLines, lines.length + 1);
- const maxNumLength = Math.max(4, String(endLine).length) + 1;
- let cutLeft = 0;
-
- // column correction according to replaced tab before column
- column += (TAB_REPLACEMENT.length - 1) * (lines[line - 1].substr(0, column - 1).match(/\t/g) || []).length;
-
- if (column > MAX_LINE_LENGTH) {
- cutLeft = column - OFFSET_CORRECTION + 3;
- column = OFFSET_CORRECTION - 2;
- }
-
- for (let i = startLine; i <= endLine; i++) {
- if (i >= 0 && i < lines.length) {
- lines[i] = lines[i].replace(/\t/g, TAB_REPLACEMENT);
- lines[i] =
- (cutLeft > 0 && lines[i].length > cutLeft ? '\u2026' : '') +
- lines[i].substr(cutLeft, MAX_LINE_LENGTH - 2) +
- (lines[i].length > cutLeft + MAX_LINE_LENGTH - 1 ? '\u2026' : '');
- }
- }
-
- return [
- processLines(startLine, line),
- new Array(column + maxNumLength + 2).join('-') + '^',
- processLines(line, endLine)
- ].filter(Boolean).join('\n');
-}
-
-function SyntaxError(message, source, offset, line, column) {
- const error = Object.assign(createCustomError.createCustomError('SyntaxError', message), {
- source,
- offset,
- line,
- column,
- sourceFragment(extraLines) {
- return sourceFragment({ source, line, column }, isNaN(extraLines) ? 0 : extraLines);
- },
- get formattedMessage() {
- return (
- `Parse error: ${message}\n` +
- sourceFragment({ source, line, column }, 2)
- );
- }
- });
-
- return error;
-}
-
-exports.SyntaxError = SyntaxError;
diff --git a/node_modules/css-tree/cjs/parser/create.cjs b/node_modules/css-tree/cjs/parser/create.cjs
deleted file mode 100644
index f83d3bde..00000000
--- a/node_modules/css-tree/cjs/parser/create.cjs
+++ /dev/null
@@ -1,336 +0,0 @@
-'use strict';
-
-const List = require('../utils/List.cjs');
-const SyntaxError = require('./SyntaxError.cjs');
-const index = require('../tokenizer/index.cjs');
-const sequence = require('./sequence.cjs');
-const OffsetToLocation = require('../tokenizer/OffsetToLocation.cjs');
-const TokenStream = require('../tokenizer/TokenStream.cjs');
-const utils = require('../tokenizer/utils.cjs');
-const types = require('../tokenizer/types.cjs');
-const names = require('../tokenizer/names.cjs');
-
-const NOOP = () => {};
-const EXCLAMATIONMARK = 0x0021; // U+0021 EXCLAMATION MARK (!)
-const NUMBERSIGN = 0x0023; // U+0023 NUMBER SIGN (#)
-const SEMICOLON = 0x003B; // U+003B SEMICOLON (;)
-const LEFTCURLYBRACKET = 0x007B; // U+007B LEFT CURLY BRACKET ({)
-const NULL = 0;
-
-function createParseContext(name) {
- return function() {
- return this[name]();
- };
-}
-
-function fetchParseValues(dict) {
- const result = Object.create(null);
-
- for (const name in dict) {
- const item = dict[name];
- const fn = item.parse || item;
-
- if (fn) {
- result[name] = fn;
- }
- }
-
- return result;
-}
-
-function processConfig(config) {
- const parseConfig = {
- context: Object.create(null),
- scope: Object.assign(Object.create(null), config.scope),
- atrule: fetchParseValues(config.atrule),
- pseudo: fetchParseValues(config.pseudo),
- node: fetchParseValues(config.node)
- };
-
- for (const name in config.parseContext) {
- switch (typeof config.parseContext[name]) {
- case 'function':
- parseConfig.context[name] = config.parseContext[name];
- break;
-
- case 'string':
- parseConfig.context[name] = createParseContext(config.parseContext[name]);
- break;
- }
- }
-
- return {
- config: parseConfig,
- ...parseConfig,
- ...parseConfig.node
- };
-}
-
-function createParser(config) {
- let source = '';
- let filename = '<unknown>';
- let needPositions = false;
- let onParseError = NOOP;
- let onParseErrorThrow = false;
-
- const locationMap = new OffsetToLocation.OffsetToLocation();
- const parser = Object.assign(new TokenStream.TokenStream(), processConfig(config || {}), {
- parseAtrulePrelude: true,
- parseRulePrelude: true,
- parseValue: true,
- parseCustomProperty: false,
-
- readSequence: sequence.readSequence,
-
- consumeUntilBalanceEnd: () => 0,
- consumeUntilLeftCurlyBracket(code) {
- return code === LEFTCURLYBRACKET ? 1 : 0;
- },
- consumeUntilLeftCurlyBracketOrSemicolon(code) {
- return code === LEFTCURLYBRACKET || code === SEMICOLON ? 1 : 0;
- },
- consumeUntilExclamationMarkOrSemicolon(code) {
- return code === EXCLAMATIONMARK || code === SEMICOLON ? 1 : 0;
- },
- consumeUntilSemicolonIncluded(code) {
- return code === SEMICOLON ? 2 : 0;
- },
-
- createList() {
- return new List.List();
- },
- createSingleNodeList(node) {
- return new List.List().appendData(node);
- },
- getFirstListNode(list) {
- return list && list.first;
- },
- getLastListNode(list) {
- return list && list.last;
- },
-
- parseWithFallback(consumer, fallback) {
- const startToken = this.tokenIndex;
-
- try {
- return consumer.call(this);
- } catch (e) {
- if (onParseErrorThrow) {
- throw e;
- }
-
- const fallbackNode = fallback.call(this, startToken);
-
- onParseErrorThrow = true;
- onParseError(e, fallbackNode);
- onParseErrorThrow = false;
-
- return fallbackNode;
- }
- },
-
- lookupNonWSType(offset) {
- let type;
-
- do {
- type = this.lookupType(offset++);
- if (type !== types.WhiteSpace) {
- return type;
- }
- } while (type !== NULL);
-
- return NULL;
- },
-
- charCodeAt(offset) {
- return offset >= 0 && offset < source.length ? source.charCodeAt(offset) : 0;
- },
- substring(offsetStart, offsetEnd) {
- return source.substring(offsetStart, offsetEnd);
- },
- substrToCursor(start) {
- return this.source.substring(start, this.tokenStart);
- },
-
- cmpChar(offset, charCode) {
- return utils.cmpChar(source, offset, charCode);
- },
- cmpStr(offsetStart, offsetEnd, str) {
- return utils.cmpStr(source, offsetStart, offsetEnd, str);
- },
-
- consume(tokenType) {
- const start = this.tokenStart;
-
- this.eat(tokenType);
-
- return this.substrToCursor(start);
- },
- consumeFunctionName() {
- const name = source.substring(this.tokenStart, this.tokenEnd - 1);
-
- this.eat(types.Function);
-
- return name;
- },
- consumeNumber(type) {
- const number = source.substring(this.tokenStart, utils.consumeNumber(source, this.tokenStart));
-
- this.eat(type);
-
- return number;
- },
-
- eat(tokenType) {
- if (this.tokenType !== tokenType) {
- const tokenName = names[tokenType].slice(0, -6).replace(/-/g, ' ').replace(/^./, m => m.toUpperCase());
- let message = `${/[[\](){}]/.test(tokenName) ? `"${tokenName}"` : tokenName} is expected`;
- let offset = this.tokenStart;
-
- // tweak message and offset
- switch (tokenType) {
- case types.Ident:
- // when identifier is expected but there is a function or url
- if (this.tokenType === types.Function || this.tokenType === types.Url) {
- offset = this.tokenEnd - 1;
- message = 'Identifier is expected but function found';
- } else {
- message = 'Identifier is expected';
- }
- break;
-
- case types.Hash:
- if (this.isDelim(NUMBERSIGN)) {
- this.next();
- offset++;
- message = 'Name is expected';
- }
- break;
-
- case types.Percentage:
- if (this.tokenType === types.Number) {
- offset = this.tokenEnd;
- message = 'Percent sign is expected';
- }
- break;
- }
-
- this.error(message, offset);
- }
-
- this.next();
- },
- eatIdent(name) {
- if (this.tokenType !== types.Ident || this.lookupValue(0, name) === false) {
- this.error(`Identifier "${name}" is expected`);
- }
-
- this.next();
- },
- eatDelim(code) {
- if (!this.isDelim(code)) {
- this.error(`Delim "${String.fromCharCode(code)}" is expected`);
- }
-
- this.next();
- },
-
- getLocation(start, end) {
- if (needPositions) {
- return locationMap.getLocationRange(
- start,
- end,
- filename
- );
- }
-
- return null;
- },
- getLocationFromList(list) {
- if (needPositions) {
- const head = this.getFirstListNode(list);
- const tail = this.getLastListNode(list);
- return locationMap.getLocationRange(
- head !== null ? head.loc.start.offset - locationMap.startOffset : this.tokenStart,
- tail !== null ? tail.loc.end.offset - locationMap.startOffset : this.tokenStart,
- filename
- );
- }
-
- return null;
- },
-
- error(message, offset) {
- const location = typeof offset !== 'undefined' && offset < source.length
- ? locationMap.getLocation(offset)
- : this.eof
- ? locationMap.getLocation(utils.findWhiteSpaceStart(source, source.length - 1))
- : locationMap.getLocation(this.tokenStart);
-
- throw new SyntaxError.SyntaxError(
- message || 'Unexpected input',
- source,
- location.offset,
- location.line,
- location.column
- );
- }
- });
-
- const parse = function(source_, options) {
- source = source_;
- options = options || {};
-
- parser.setSource(source, index.tokenize);
- locationMap.setSource(
- source,
- options.offset,
- options.line,
- options.column
- );
-
- filename = options.filename || '<unknown>';
- needPositions = Boolean(options.positions);
- onParseError = typeof options.onParseError === 'function' ? options.onParseError : NOOP;
- onParseErrorThrow = false;
-
- parser.parseAtrulePrelude = 'parseAtrulePrelude' in options ? Boolean(options.parseAtrulePrelude) : true;
- parser.parseRulePrelude = 'parseRulePrelude' in options ? Boolean(options.parseRulePrelude) : true;
- parser.parseValue = 'parseValue' in options ? Boolean(options.parseValue) : true;
- parser.parseCustomProperty = 'parseCustomProperty' in options ? Boolean(options.parseCustomProperty) : false;
-
- const { context = 'default', onComment } = options;
-
- if (context in parser.context === false) {
- throw new Error('Unknown context `' + context + '`');
- }
-
- if (typeof onComment === 'function') {
- parser.forEachToken((type, start, end) => {
- if (type === types.Comment) {
- const loc = parser.getLocation(start, end);
- const value = utils.cmpStr(source, end - 2, end, '*/')
- ? source.slice(start + 2, end - 2)
- : source.slice(start + 2, end);
-
- onComment(value, loc);
- }
- });
- }
-
- const ast = parser.context[context].call(parser, options);
-
- if (!parser.eof) {
- parser.error();
- }
-
- return ast;
- };
-
- return Object.assign(parse, {
- SyntaxError: SyntaxError.SyntaxError,
- config: parser.config
- });
-}
-
-exports.createParser = createParser;
diff --git a/node_modules/css-tree/cjs/parser/index.cjs b/node_modules/css-tree/cjs/parser/index.cjs
deleted file mode 100644
index 9450cb04..00000000
--- a/node_modules/css-tree/cjs/parser/index.cjs
+++ /dev/null
@@ -1,8 +0,0 @@
-'use strict';
-
-const create = require('./create.cjs');
-const parser = require('../syntax/config/parser.cjs');
-
-const index = create.createParser(parser);
-
-module.exports = index;
diff --git a/node_modules/css-tree/cjs/parser/parse-selector.cjs b/node_modules/css-tree/cjs/parser/parse-selector.cjs
deleted file mode 100644
index 8ea8d0d9..00000000
--- a/node_modules/css-tree/cjs/parser/parse-selector.cjs
+++ /dev/null
@@ -1,8 +0,0 @@
-'use strict';
-
-const create = require('./create.cjs');
-const parserSelector = require('../syntax/config/parser-selector.cjs');
-
-const parseSelector = create.createParser(parserSelector);
-
-module.exports = parseSelector;
diff --git a/node_modules/css-tree/cjs/parser/sequence.cjs b/node_modules/css-tree/cjs/parser/sequence.cjs
deleted file mode 100644
index b7d7d29b..00000000
--- a/node_modules/css-tree/cjs/parser/sequence.cjs
+++ /dev/null
@@ -1,47 +0,0 @@
-'use strict';
-
-const types = require('../tokenizer/types.cjs');
-
-function readSequence(recognizer) {
- const children = this.createList();
- let space = false;
- const context = {
- recognizer
- };
-
- while (!this.eof) {
- switch (this.tokenType) {
- case types.Comment:
- this.next();
- continue;
-
- case types.WhiteSpace:
- space = true;
- this.next();
- continue;
- }
-
- let child = recognizer.getNode.call(this, context);
-
- if (child === undefined) {
- break;
- }
-
- if (space) {
- if (recognizer.onWhiteSpace) {
- recognizer.onWhiteSpace.call(this, child, children, context);
- }
- space = false;
- }
-
- children.push(child);
- }
-
- if (space && recognizer.onWhiteSpace) {
- recognizer.onWhiteSpace.call(this, null, children, context);
- }
-
- return children;
-}
-
-exports.readSequence = readSequence;
diff --git a/node_modules/css-tree/cjs/syntax/atrule/font-face.cjs b/node_modules/css-tree/cjs/syntax/atrule/font-face.cjs
deleted file mode 100644
index fc7f64a6..00000000
--- a/node_modules/css-tree/cjs/syntax/atrule/font-face.cjs
+++ /dev/null
@@ -1,12 +0,0 @@
-'use strict';
-
-const fontFace = {
- parse: {
- prelude: null,
- block() {
- return this.Block(true);
- }
- }
-};
-
-module.exports = fontFace;
diff --git a/node_modules/css-tree/cjs/syntax/atrule/import.cjs b/node_modules/css-tree/cjs/syntax/atrule/import.cjs
deleted file mode 100644
index bb4402b4..00000000
--- a/node_modules/css-tree/cjs/syntax/atrule/import.cjs
+++ /dev/null
@@ -1,37 +0,0 @@
-'use strict';
-
-const types = require('../../tokenizer/types.cjs');
-
-const importAtrule = {
- parse: {
- prelude() {
- const children = this.createList();
-
- this.skipSC();
-
- switch (this.tokenType) {
- case types.String:
- children.push(this.String());
- break;
-
- case types.Url:
- case types.Function:
- children.push(this.Url());
- break;
-
- default:
- this.error('String or url() is expected');
- }
-
- if (this.lookupNonWSType(0) === types.Ident ||
- this.lookupNonWSType(0) === types.LeftParenthesis) {
- children.push(this.MediaQueryList());
- }
-
- return children;
- },
- block: null
- }
-};
-
-module.exports = importAtrule;
diff --git a/node_modules/css-tree/cjs/syntax/atrule/index.cjs b/node_modules/css-tree/cjs/syntax/atrule/index.cjs
deleted file mode 100644
index 0cfe83d1..00000000
--- a/node_modules/css-tree/cjs/syntax/atrule/index.cjs
+++ /dev/null
@@ -1,19 +0,0 @@
-'use strict';
-
-const fontFace = require('./font-face.cjs');
-const _import = require('./import.cjs');
-const media = require('./media.cjs');
-const nest = require('./nest.cjs');
-const page = require('./page.cjs');
-const supports = require('./supports.cjs');
-
-const atrule = {
- 'font-face': fontFace,
- 'import': _import,
- media,
- nest,
- page,
- supports
-};
-
-module.exports = atrule;
diff --git a/node_modules/css-tree/cjs/syntax/atrule/media.cjs b/node_modules/css-tree/cjs/syntax/atrule/media.cjs
deleted file mode 100644
index 77214d1c..00000000
--- a/node_modules/css-tree/cjs/syntax/atrule/media.cjs
+++ /dev/null
@@ -1,16 +0,0 @@
-'use strict';
-
-const media = {
- parse: {
- prelude() {
- return this.createSingleNodeList(
- this.MediaQueryList()
- );
- },
- block(isStyleBlock = false) {
- return this.Block(isStyleBlock);
- }
- }
-};
-
-module.exports = media;
diff --git a/node_modules/css-tree/cjs/syntax/atrule/nest.cjs b/node_modules/css-tree/cjs/syntax/atrule/nest.cjs
deleted file mode 100644
index 5cd66720..00000000
--- a/node_modules/css-tree/cjs/syntax/atrule/nest.cjs
+++ /dev/null
@@ -1,16 +0,0 @@
-'use strict';
-
-const nest = {
- parse: {
- prelude() {
- return this.createSingleNodeList(
- this.SelectorList()
- );
- },
- block() {
- return this.Block(true);
- }
- }
-};
-
-module.exports = nest;
diff --git a/node_modules/css-tree/cjs/syntax/atrule/page.cjs b/node_modules/css-tree/cjs/syntax/atrule/page.cjs
deleted file mode 100644
index ffef0d17..00000000
--- a/node_modules/css-tree/cjs/syntax/atrule/page.cjs
+++ /dev/null
@@ -1,16 +0,0 @@
-'use strict';
-
-const page = {
- parse: {
- prelude() {
- return this.createSingleNodeList(
- this.SelectorList()
- );
- },
- block() {
- return this.Block(true);
- }
- }
-};
-
-module.exports = page;
diff --git a/node_modules/css-tree/cjs/syntax/atrule/supports.cjs b/node_modules/css-tree/cjs/syntax/atrule/supports.cjs
deleted file mode 100644
index bf30f034..00000000
--- a/node_modules/css-tree/cjs/syntax/atrule/supports.cjs
+++ /dev/null
@@ -1,77 +0,0 @@
-'use strict';
-
-const types = require('../../tokenizer/types.cjs');
-
-function consumeRaw() {
- return this.createSingleNodeList(
- this.Raw(this.tokenIndex, null, false)
- );
-}
-
-function parentheses() {
- this.skipSC();
-
- if (this.tokenType === types.Ident &&
- this.lookupNonWSType(1) === types.Colon) {
- return this.createSingleNodeList(
- this.Declaration()
- );
- }
-
- return readSequence.call(this);
-}
-
-function readSequence() {
- const children = this.createList();
- let child;
-
- this.skipSC();
-
- scan:
- while (!this.eof) {
- switch (this.tokenType) {
- case types.Comment:
- case types.WhiteSpace:
- this.next();
- continue;
-
- case types.Function:
- child = this.Function(consumeRaw, this.scope.AtrulePrelude);
- break;
-
- case types.Ident:
- child = this.Identifier();
- break;
-
- case types.LeftParenthesis:
- child = this.Parentheses(parentheses, this.scope.AtrulePrelude);
- break;
-
- default:
- break scan;
- }
-
- children.push(child);
- }
-
- return children;
-}
-
-const supports = {
- parse: {
- prelude() {
- const children = readSequence.call(this);
-
- if (this.getFirstListNode(children) === null) {
- this.error('Condition is expected');
- }
-
- return children;
- },
- block(isStyleBlock = false) {
- return this.Block(isStyleBlock);
- }
- }
-};
-
-module.exports = supports;
diff --git a/node_modules/css-tree/cjs/syntax/config/generator.cjs b/node_modules/css-tree/cjs/syntax/config/generator.cjs
deleted file mode 100644
index c0924580..00000000
--- a/node_modules/css-tree/cjs/syntax/config/generator.cjs
+++ /dev/null
@@ -1,9 +0,0 @@
-'use strict';
-
-const indexGenerate = require('../node/index-generate.cjs');
-
-const config = {
- node: indexGenerate
-};
-
-module.exports = config;
diff --git a/node_modules/css-tree/cjs/syntax/config/lexer.cjs b/node_modules/css-tree/cjs/syntax/config/lexer.cjs
deleted file mode 100644
index 083c74cd..00000000
--- a/node_modules/css-tree/cjs/syntax/config/lexer.cjs
+++ /dev/null
@@ -1,12 +0,0 @@
-'use strict';
-
-const data = require('../../data.cjs');
-const index = require('../node/index.cjs');
-
-const lexerConfig = {
- generic: true,
- ...data,
- node: index
-};
-
-module.exports = lexerConfig;
diff --git a/node_modules/css-tree/cjs/syntax/config/mix.cjs b/node_modules/css-tree/cjs/syntax/config/mix.cjs
deleted file mode 100644
index 2d03af71..00000000
--- a/node_modules/css-tree/cjs/syntax/config/mix.cjs
+++ /dev/null
@@ -1,119 +0,0 @@
-'use strict';
-
-function appendOrSet(a, b) {
- if (typeof b === 'string' && /^\s*\|/.test(b)) {
- return typeof a === 'string'
- ? a + b
- : b.replace(/^\s*\|\s*/, '');
- }
-
- return b || null;
-}
-
-function sliceProps(obj, props) {
- const result = Object.create(null);
-
- for (const [key, value] of Object.entries(obj)) {
- if (value) {
- result[key] = {};
- for (const prop of Object.keys(value)) {
- if (props.includes(prop)) {
- result[key][prop] = value[prop];
- }
- }
- }
- }
-
- return result;
-}
-
-function mix(dest, src) {
- const result = { ...dest };
-
- for (const [prop, value] of Object.entries(src)) {
- switch (prop) {
- case 'generic':
- result[prop] = Boolean(value);
- break;
-
- case 'units':
- result[prop] = { ...dest[prop] };
- for (const [name, patch] of Object.entries(value)) {
- result[prop][name] = Array.isArray(patch) ? patch : [];
- }
- break;
-
- case 'atrules':
- result[prop] = { ...dest[prop] };
-
- for (const [name, atrule] of Object.entries(value)) {
- const exists = result[prop][name] || {};
- const current = result[prop][name] = {
- prelude: exists.prelude || null,
- descriptors: {
- ...exists.descriptors
- }
- };
-
- if (!atrule) {
- continue;
- }
-
- current.prelude = atrule.prelude
- ? appendOrSet(current.prelude, atrule.prelude)
- : current.prelude || null;
-
- for (const [descriptorName, descriptorValue] of Object.entries(atrule.descriptors || {})) {
- current.descriptors[descriptorName] = descriptorValue
- ? appendOrSet(current.descriptors[descriptorName], descriptorValue)
- : null;
- }
-
- if (!Object.keys(current.descriptors).length) {
- current.descriptors = null;
- }
- }
- break;
-
- case 'types':
- case 'properties':
- result[prop] = { ...dest[prop] };
- for (const [name, syntax] of Object.entries(value)) {
- result[prop][name] = appendOrSet(result[prop][name], syntax);
- }
- break;
-
- case 'scope':
- result[prop] = { ...dest[prop] };
- for (const [name, props] of Object.entries(value)) {
- result[prop][name] = { ...result[prop][name], ...props };
- }
- break;
-
- case 'parseContext':
- result[prop] = {
- ...dest[prop],
- ...value
- };
- break;
-
- case 'atrule':
- case 'pseudo':
- result[prop] = {
- ...dest[prop],
- ...sliceProps(value, ['parse']) };
- break;
-
- case 'node':
- result[prop] = {
- ...dest[prop],
- ...sliceProps(value, ['name', 'structure', 'parse', 'generate', 'walkContext'])
- };
- break;
- }
- }
-
- return result;
-}
-
-module.exports = mix;
diff --git a/node_modules/css-tree/cjs/syntax/config/parser-selector.cjs b/node_modules/css-tree/cjs/syntax/config/parser-selector.cjs
deleted file mode 100644
index 03b1683b..00000000
--- a/node_modules/css-tree/cjs/syntax/config/parser-selector.cjs
+++ /dev/null
@@ -1,19 +0,0 @@
-'use strict';
-
-const index = require('../pseudo/index.cjs');
-const indexParseSelector = require('../node/index-parse-selector.cjs');
-const selector = require('../scope/selector.cjs');
-
-const config = {
- parseContext: {
- default: 'SelectorList',
- selectorList: 'SelectorList',
- selector: 'Selector'
- },
- scope: { Selector: selector },
- atrule: {},
- pseudo: index,
- node: indexParseSelector
-};
-
-module.exports = config;
diff --git a/node_modules/css-tree/cjs/syntax/config/parser.cjs b/node_modules/css-tree/cjs/syntax/config/parser.cjs
deleted file mode 100644
index af65e801..00000000
--- a/node_modules/css-tree/cjs/syntax/config/parser.cjs
+++ /dev/null
@@ -1,34 +0,0 @@
-'use strict';
-
-const index = require('../scope/index.cjs');
-const index$1 = require('../atrule/index.cjs');
-const index$2 = require('../pseudo/index.cjs');
-const indexParse = require('../node/index-parse.cjs');
-
-const config = {
- parseContext: {
- default: 'StyleSheet',
- stylesheet: 'StyleSheet',
- atrule: 'Atrule',
- atrulePrelude(options) {
- return this.AtrulePrelude(options.atrule ? String(options.atrule) : null);
- },
- mediaQueryList: 'MediaQueryList',
- mediaQuery: 'MediaQuery',
- rule: 'Rule',
- selectorList: 'SelectorList',
- selector: 'Selector',
- block() {
- return this.Block(true);
- },
- declarationList: 'DeclarationList',
- declaration: 'Declaration',
- value: 'Value'
- },
- scope: index,
- atrule: index$1,
- pseudo: index$2,
- node: indexParse
-};
-
-module.exports = config;
diff --git a/node_modules/css-tree/cjs/syntax/config/walker.cjs b/node_modules/css-tree/cjs/syntax/config/walker.cjs
deleted file mode 100644
index 95c8f7df..00000000
--- a/node_modules/css-tree/cjs/syntax/config/walker.cjs
+++ /dev/null
@@ -1,9 +0,0 @@
-'use strict';
-
-const index = require('../node/index.cjs');
-
-const config = {
- node: index
-};
-
-module.exports = config;
diff --git a/node_modules/css-tree/cjs/syntax/create.cjs b/node_modules/css-tree/cjs/syntax/create.cjs
deleted file mode 100644
index aee487fb..00000000
--- a/node_modules/css-tree/cjs/syntax/create.cjs
+++ /dev/null
@@ -1,57 +0,0 @@
-'use strict';
-
-const index = require('../tokenizer/index.cjs');
-const create = require('../parser/create.cjs');
-const create$2 = require('../generator/create.cjs');
-const create$3 = require('../convertor/create.cjs');
-const create$1 = require('../walker/create.cjs');
-const Lexer = require('../lexer/Lexer.cjs');
-const mix = require('./config/mix.cjs');
-
-function createSyntax(config) {
- const parse = create.createParser(config);
- const walk = create$1.createWalker(config);
- const generate = create$2.createGenerator(config);
- const { fromPlainObject, toPlainObject } = create$3.createConvertor(walk);
-
- const syntax = {
- lexer: null,
- createLexer: config => new Lexer.Lexer(config, syntax, syntax.lexer.structure),
-
- tokenize: index.tokenize,
- parse,
- generate,
-
- walk,
- find: walk.find,
- findLast: walk.findLast,
- findAll: walk.findAll,
-
- fromPlainObject,
- toPlainObject,
-
- fork(extension) {
- const base = mix({}, config); // copy of config
-
- return createSyntax(
- typeof extension === 'function'
- ? extension(base, Object.assign)
- : mix(base, extension)
- );
- }
- };
-
- syntax.lexer = new Lexer.Lexer({
- generic: true,
- units: config.units,
- types: config.types,
- atrules: config.atrules,
- properties: config.properties,
- node: config.node
- }, syntax);
-
- return syntax;
-}
-const createSyntax$1 = config => createSyntax(mix({}, config));
-
-module.exports = createSyntax$1;
diff --git a/node_modules/css-tree/cjs/syntax/function/expression.cjs b/node_modules/css-tree/cjs/syntax/function/expression.cjs
deleted file mode 100644
index 43d81374..00000000
--- a/node_modules/css-tree/cjs/syntax/function/expression.cjs
+++ /dev/null
@@ -1,11 +0,0 @@
-'use strict';
-
-// legacy IE function
-// expression( <any-value> )
-function expressionFn() {
- return this.createSingleNodeList(
- this.Raw(this.tokenIndex, null, false)
- );
-}
-
-module.exports = expressionFn;
diff --git a/node_modules/css-tree/cjs/syntax/function/var.cjs b/node_modules/css-tree/cjs/syntax/function/var.cjs
deleted file mode 100644
index 96729706..00000000
--- a/node_modules/css-tree/cjs/syntax/function/var.cjs
+++ /dev/null
@@ -1,43 +0,0 @@
-'use strict';
-
-const types = require('../../tokenizer/types.cjs');
-
-// var( <ident> , <value>? )
-function varFn() {
- const children = this.createList();
-
- this.skipSC();
-
- // NOTE: Don't check more than a first argument is an ident, rest checks are for lexer
- children.push(this.Identifier());
-
- this.skipSC();
-
- if (this.tokenType === types.Comma) {
- children.push(this.Operator());
-
- const startIndex = this.tokenIndex;
- const value = this.parseCustomProperty
- ? this.Value(null)
- : this.Raw(this.tokenIndex, this.consumeUntilExclamationMarkOrSemicolon, false);
-
- if (value.type === 'Value' && value.children.isEmpty) {
- for (let offset = startIndex - this.tokenIndex; offset <= 0; offset++) {
- if (this.lookupType(offset) === types.WhiteSpace) {
- value.children.appendData({
- type: 'WhiteSpace',
- loc: null,
- value: ' '
- });
- break;
- }
- }
- }
-
- children.push(value);
- }
-
- return children;
-}
-
-module.exports = varFn;
diff --git a/node_modules/css-tree/cjs/syntax/index.cjs b/node_modules/css-tree/cjs/syntax/index.cjs
deleted file mode 100644
index 24de4957..00000000
--- a/node_modules/css-tree/cjs/syntax/index.cjs
+++ /dev/null
@@ -1,14 +0,0 @@
-'use strict';
-
-const create = require('./create.cjs');
-const lexer = require('./config/lexer.cjs');
-const parser = require('./config/parser.cjs');
-const walker = require('./config/walker.cjs');
-
-const syntax = create({
- ...lexer,
- ...parser,
- ...walker
-});
-
-module.exports = syntax;
diff --git a/node_modules/css-tree/cjs/syntax/node/AnPlusB.cjs b/node_modules/css-tree/cjs/syntax/node/AnPlusB.cjs
deleted file mode 100644
index cd59927a..00000000
--- a/node_modules/css-tree/cjs/syntax/node/AnPlusB.cjs
+++ /dev/null
@@ -1,293 +0,0 @@
-'use strict';
-
-const types = require('../../tokenizer/types.cjs');
-const charCodeDefinitions = require('../../tokenizer/char-code-definitions.cjs');
-
-const PLUSSIGN = 0x002B; // U+002B PLUS SIGN (+)
-const HYPHENMINUS = 0x002D; // U+002D HYPHEN-MINUS (-)
-const N = 0x006E; // U+006E LATIN SMALL LETTER N (n)
-const DISALLOW_SIGN = true;
-const ALLOW_SIGN = false;
-
-function checkInteger(offset, disallowSign) {
- let pos = this.tokenStart + offset;
- const code = this.charCodeAt(pos);
-
- if (code === PLUSSIGN || code === HYPHENMINUS) {
- if (disallowSign) {
- this.error('Number sign is not allowed');
- }
- pos++;
- }
-
- for (; pos < this.tokenEnd; pos++) {
- if (!charCodeDefinitions.isDigit(this.charCodeAt(pos))) {
- this.error('Integer is expected', pos);
- }
- }
-}
-
-function checkTokenIsInteger(disallowSign) {
- return checkInteger.call(this, 0, disallowSign);
-}
-
-function expectCharCode(offset, code) {
- if (!this.cmpChar(this.tokenStart + offset, code)) {
- let msg = '';
-
- switch (code) {
- case N:
- msg = 'N is expected';
- break;
- case HYPHENMINUS:
- msg = 'HyphenMinus is expected';
- break;
- }
-
- this.error(msg, this.tokenStart + offset);
- }
-}
-
-// ... <signed-integer>
-// ... ['+' | '-'] <signless-integer>
-function consumeB() {
- let offset = 0;
- let sign = 0;
- let type = this.tokenType;
-
- while (type === types.WhiteSpace || type === types.Comment) {
- type = this.lookupType(++offset);
- }
-
- if (type !== types.Number) {
- if (this.isDelim(PLUSSIGN, offset) ||
- this.isDelim(HYPHENMINUS, offset)) {
- sign = this.isDelim(PLUSSIGN, offset) ? PLUSSIGN : HYPHENMINUS;
-
- do {
- type = this.lookupType(++offset);
- } while (type === types.WhiteSpace || type === types.Comment);
-
- if (type !== types.Number) {
- this.skip(offset);
- checkTokenIsInteger.call(this, DISALLOW_SIGN);
- }
- } else {
- return null;
- }
- }
-
- if (offset > 0) {
- this.skip(offset);
- }
-
- if (sign === 0) {
- type = this.charCodeAt(this.tokenStart);
- if (type !== PLUSSIGN && type !== HYPHENMINUS) {
- this.error('Number sign is expected');
- }
- }
-
- checkTokenIsInteger.call(this, sign !== 0);
- return sign === HYPHENMINUS ? '-' + this.consume(types.Number) : this.consume(types.Number);
-}
-
-// An+B microsyntax https://www.w3.org/TR/css-syntax-3/#anb
-const name = 'AnPlusB';
-const structure = {
- a: [String, null],
- b: [String, null]
-};
-
-function parse() {
- /* eslint-disable brace-style*/
- const start = this.tokenStart;
- let a = null;
- let b = null;
-
- // <integer>
- if (this.tokenType === types.Number) {
- checkTokenIsInteger.call(this, ALLOW_SIGN);
- b = this.consume(types.Number);
- }
-
- // -n
- // -n <signed-integer>
- // -n ['+' | '-'] <signless-integer>
- // -n- <signless-integer>
- // <dashndashdigit-ident>
- else if (this.tokenType === types.Ident && this.cmpChar(this.tokenStart, HYPHENMINUS)) {
- a = '-1';
-
- expectCharCode.call(this, 1, N);
-
- switch (this.tokenEnd - this.tokenStart) {
- // -n
- // -n <signed-integer>
- // -n ['+' | '-'] <signless-integer>
- case 2:
- this.next();
- b = consumeB.call(this);
- break;
-
- // -n- <signless-integer>
- case 3:
- expectCharCode.call(this, 2, HYPHENMINUS);
-
- this.next();
- this.skipSC();
-
- checkTokenIsInteger.call(this, DISALLOW_SIGN);
-
- b = '-' + this.consume(types.Number);
- break;
-
- // <dashndashdigit-ident>
- default:
- expectCharCode.call(this, 2, HYPHENMINUS);
- checkInteger.call(this, 3, DISALLOW_SIGN);
- this.next();
-
- b = this.substrToCursor(start + 2);
- }
- }
-
- // '+'? n
- // '+'? n <signed-integer>
- // '+'? n ['+' | '-'] <signless-integer>
- // '+'? n- <signless-integer>
- // '+'? <ndashdigit-ident>
- else if (this.tokenType === types.Ident || (this.isDelim(PLUSSIGN) && this.lookupType(1) === types.Ident)) {
- let sign = 0;
- a = '1';
-
- // just ignore a plus
- if (this.isDelim(PLUSSIGN)) {
- sign = 1;
- this.next();
- }
-
- expectCharCode.call(this, 0, N);
-
- switch (this.tokenEnd - this.tokenStart) {
- // '+'? n
- // '+'? n <signed-integer>
- // '+'? n ['+' | '-'] <signless-integer>
- case 1:
- this.next();
- b = consumeB.call(this);
- break;
-
- // '+'? n- <signless-integer>
- case 2:
- expectCharCode.call(this, 1, HYPHENMINUS);
-
- this.next();
- this.skipSC();
-
- checkTokenIsInteger.call(this, DISALLOW_SIGN);
-
- b = '-' + this.consume(types.Number);
- break;
-
- // '+'? <ndashdigit-ident>
- default:
- expectCharCode.call(this, 1, HYPHENMINUS);
- checkInteger.call(this, 2, DISALLOW_SIGN);
- this.next();
-
- b = this.substrToCursor(start + sign + 1);
- }
- }
-
- // <ndashdigit-dimension>
- // <ndash-dimension> <signless-integer>
- // <n-dimension>
- // <n-dimension> <signed-integer>
- // <n-dimension> ['+' | '-'] <signless-integer>
- else if (this.tokenType === types.Dimension) {
- const code = this.charCodeAt(this.tokenStart);
- const sign = code === PLUSSIGN || code === HYPHENMINUS;
- let i = this.tokenStart + sign;
-
- for (; i < this.tokenEnd; i++) {
- if (!charCodeDefinitions.isDigit(this.charCodeAt(i))) {
- break;
- }
- }
-
- if (i === this.tokenStart + sign) {
- this.error('Integer is expected', this.tokenStart + sign);
- }
-
- expectCharCode.call(this, i - this.tokenStart, N);
- a = this.substring(start, i);
-
- // <n-dimension>
- // <n-dimension> <signed-integer>
- // <n-dimension> ['+' | '-'] <signless-integer>
- if (i + 1 === this.tokenEnd) {
- this.next();
- b = consumeB.call(this);
- } else {
- expectCharCode.call(this, i - this.tokenStart + 1, HYPHENMINUS);
-
- // <ndash-dimension> <signless-integer>
- if (i + 2 === this.tokenEnd) {
- this.next();
- this.skipSC();
- checkTokenIsInteger.call(this, DISALLOW_SIGN);
- b = '-' + this.consume(types.Number);
- }
- // <ndashdigit-dimension>
- else {
- checkInteger.call(this, i - this.tokenStart + 2, DISALLOW_SIGN);
- this.next();
- b = this.substrToCursor(i + 1);
- }
- }
- } else {
- this.error();
- }
-
- if (a !== null && a.charCodeAt(0) === PLUSSIGN) {
- a = a.substr(1);
- }
-
- if (b !== null && b.charCodeAt(0) === PLUSSIGN) {
- b = b.substr(1);
- }
-
- return {
- type: 'AnPlusB',
- loc: this.getLocation(start, this.tokenStart),
- a,
- b
- };
-}
-
-function generate(node) {
- if (node.a) {
- const a =
- node.a === '+1' && 'n' ||
- node.a === '1' && 'n' ||
- node.a === '-1' && '-n' ||
- node.a + 'n';
-
- if (node.b) {
- const b = node.b[0] === '-' || node.b[0] === '+'
- ? node.b
- : '+' + node.b;
- this.tokenize(a + b);
- } else {
- this.tokenize(a);
- }
- } else {
- this.tokenize(node.b);
- }
-}
-
-exports.generate = generate;
-exports.name = name;
-exports.parse = parse;
-exports.structure = structure;
diff --git a/node_modules/css-tree/cjs/syntax/node/Atrule.cjs b/node_modules/css-tree/cjs/syntax/node/Atrule.cjs
deleted file mode 100644
index 44746306..00000000
--- a/node_modules/css-tree/cjs/syntax/node/Atrule.cjs
+++ /dev/null
@@ -1,103 +0,0 @@
-'use strict';
-
-const types = require('../../tokenizer/types.cjs');
-
-function consumeRaw(startToken) {
- return this.Raw(startToken, this.consumeUntilLeftCurlyBracketOrSemicolon, true);
-}
-
-function isDeclarationBlockAtrule() {
- for (let offset = 1, type; type = this.lookupType(offset); offset++) {
- if (type === types.RightCurlyBracket) {
- return true;
- }
-
- if (type === types.LeftCurlyBracket ||
- type === types.AtKeyword) {
- return false;
- }
- }
-
- return false;
-}
-
-
-const name = 'Atrule';
-const walkContext = 'atrule';
-const structure = {
- name: String,
- prelude: ['AtrulePrelude', 'Raw', null],
- block: ['Block', null]
-};
-
-function parse(isDeclaration = false) {
- const start = this.tokenStart;
- let name;
- let nameLowerCase;
- let prelude = null;
- let block = null;
-
- this.eat(types.AtKeyword);
-
- name = this.substrToCursor(start + 1);
- nameLowerCase = name.toLowerCase();
- this.skipSC();
-
- // parse prelude
- if (this.eof === false &&
- this.tokenType !== types.LeftCurlyBracket &&
- this.tokenType !== types.Semicolon) {
- if (this.parseAtrulePrelude) {
- prelude = this.parseWithFallback(this.AtrulePrelude.bind(this, name, isDeclaration), consumeRaw);
- } else {
- prelude = consumeRaw.call(this, this.tokenIndex);
- }
-
- this.skipSC();
- }
-
- switch (this.tokenType) {
- case types.Semicolon:
- this.next();
- break;
-
- case types.LeftCurlyBracket:
- if (hasOwnProperty.call(this.atrule, nameLowerCase) &&
- typeof this.atrule[nameLowerCase].block === 'function') {
- block = this.atrule[nameLowerCase].block.call(this, isDeclaration);
- } else {
- // TODO: should consume block content as Raw?
- block = this.Block(isDeclarationBlockAtrule.call(this));
- }
-
- break;
- }
-
- return {
- type: 'Atrule',
- loc: this.getLocation(start, this.tokenStart),
- name,
- prelude,
- block
- };
-}
-
-function generate(node) {
- this.token(types.AtKeyword, '@' + node.name);
-
- if (node.prelude !== null) {
- this.node(node.prelude);
- }
-
- if (node.block) {
- this.node(node.block);
- } else {
- this.token(types.Semicolon, ';');
- }
-}
-
-exports.generate = generate;
-exports.name = name;
-exports.parse = parse;
-exports.structure = structure;
-exports.walkContext = walkContext;
diff --git a/node_modules/css-tree/cjs/syntax/node/AtrulePrelude.cjs b/node_modules/css-tree/cjs/syntax/node/AtrulePrelude.cjs
deleted file mode 100644
index 0db69b67..00000000
--- a/node_modules/css-tree/cjs/syntax/node/AtrulePrelude.cjs
+++ /dev/null
@@ -1,52 +0,0 @@
-'use strict';
-
-const types = require('../../tokenizer/types.cjs');
-
-const name = 'AtrulePrelude';
-const walkContext = 'atrulePrelude';
-const structure = {
- children: [[]]
-};
-
-function parse(name) {
- let children = null;
-
- if (name !== null) {
- name = name.toLowerCase();
- }
-
- this.skipSC();
-
- if (hasOwnProperty.call(this.atrule, name) &&
- typeof this.atrule[name].prelude === 'function') {
- // custom consumer
- children = this.atrule[name].prelude.call(this);
- } else {
- // default consumer
- children = this.readSequence(this.scope.AtrulePrelude);
- }
-
- this.skipSC();
-
- if (this.eof !== true &&
- this.tokenType !== types.LeftCurlyBracket &&
- this.tokenType !== types.Semicolon) {
- this.error('Semicolon or block is expected');
- }
-
- return {
- type: 'AtrulePrelude',
- loc: this.getLocationFromList(children),
- children
- };
-}
-
-function generate(node) {
- this.children(node);
-}
-
-exports.generate = generate;
-exports.name = name;
-exports.parse = parse;
-exports.structure = structure;
-exports.walkContext = walkContext;
diff --git a/node_modules/css-tree/cjs/syntax/node/AttributeSelector.cjs b/node_modules/css-tree/cjs/syntax/node/AttributeSelector.cjs
deleted file mode 100644
index 757d4ebf..00000000
--- a/node_modules/css-tree/cjs/syntax/node/AttributeSelector.cjs
+++ /dev/null
@@ -1,148 +0,0 @@
-'use strict';
-
-const types = require('../../tokenizer/types.cjs');
-
-const DOLLARSIGN = 0x0024; // U+0024 DOLLAR SIGN ($)
-const ASTERISK = 0x002A; // U+002A ASTERISK (*)
-const EQUALSSIGN = 0x003D; // U+003D EQUALS SIGN (=)
-const CIRCUMFLEXACCENT = 0x005E; // U+005E (^)
-const VERTICALLINE = 0x007C; // U+007C VERTICAL LINE (|)
-const TILDE = 0x007E; // U+007E TILDE (~)
-
-function getAttributeName() {
- if (this.eof) {
- this.error('Unexpected end of input');
- }
-
- const start = this.tokenStart;
- let expectIdent = false;
-
- if (this.isDelim(ASTERISK)) {
- expectIdent = true;
- this.next();
- } else if (!this.isDelim(VERTICALLINE)) {
- this.eat(types.Ident);
- }
-
- if (this.isDelim(VERTICALLINE)) {
- if (this.charCodeAt(this.tokenStart + 1) !== EQUALSSIGN) {
- this.next();
- this.eat(types.Ident);
- } else if (expectIdent) {
- this.error('Identifier is expected', this.tokenEnd);
- }
- } else if (expectIdent) {
- this.error('Vertical line is expected');
- }
-
- return {
- type: 'Identifier',
- loc: this.getLocation(start, this.tokenStart),
- name: this.substrToCursor(start)
- };
-}
-
-function getOperator() {
- const start = this.tokenStart;
- const code = this.charCodeAt(start);
-
- if (code !== EQUALSSIGN && // =
- code !== TILDE && // ~=
- code !== CIRCUMFLEXACCENT && // ^=
- code !== DOLLARSIGN && // $=
- code !== ASTERISK && // *=
- code !== VERTICALLINE // |=
- ) {
- this.error('Attribute selector (=, ~=, ^=, $=, *=, |=) is expected');
- }
-
- this.next();
-
- if (code !== EQUALSSIGN) {
- if (!this.isDelim(EQUALSSIGN)) {
- this.error('Equal sign is expected');
- }
-
- this.next();
- }
-
- return this.substrToCursor(start);
-}
-
-// '[' <wq-name> ']'
-// '[' <wq-name> <attr-matcher> [ <string-token> | <ident-token> ] <attr-modifier>? ']'
-const name = 'AttributeSelector';
-const structure = {
- name: 'Identifier',
- matcher: [String, null],
- value: ['String', 'Identifier', null],
- flags: [String, null]
-};
-
-function parse() {
- const start = this.tokenStart;
- let name;
- let matcher = null;
- let value = null;
- let flags = null;
-
- this.eat(types.LeftSquareBracket);
- this.skipSC();
-
- name = getAttributeName.call(this);
- this.skipSC();
-
- if (this.tokenType !== types.RightSquareBracket) {
- // avoid case `[name i]`
- if (this.tokenType !== types.Ident) {
- matcher = getOperator.call(this);
-
- this.skipSC();
-
- value = this.tokenType === types.String
- ? this.String()
- : this.Identifier();
-
- this.skipSC();
- }
-
- // attribute flags
- if (this.tokenType === types.Ident) {
- flags = this.consume(types.Ident);
-
- this.skipSC();
- }
- }
-
- this.eat(types.RightSquareBracket);
-
- return {
- type: 'AttributeSelector',
- loc: this.getLocation(start, this.tokenStart),
- name,
- matcher,
- value,
- flags
- };
-}
-
-function generate(node) {
- this.token(types.Delim, '[');
- this.node(node.name);
-
- if (node.matcher !== null) {
- this.tokenize(node.matcher);
- this.node(node.value);
- }
-
- if (node.flags !== null) {
- this.token(types.Ident, node.flags);
- }
-
- this.token(types.Delim, ']');
-}
-
-exports.generate = generate;
-exports.name = name;
-exports.parse = parse;
-exports.structure = structure;
diff --git a/node_modules/css-tree/cjs/syntax/node/Block.cjs b/node_modules/css-tree/cjs/syntax/node/Block.cjs
deleted file mode 100644
index ce1058f1..00000000
--- a/node_modules/css-tree/cjs/syntax/node/Block.cjs
+++ /dev/null
@@ -1,96 +0,0 @@
-'use strict';
-
-const types = require('../../tokenizer/types.cjs');
-
-const AMPERSAND = 0x0026; // U+0026 AMPERSAND (&)
-
-function consumeRaw(startToken) {
- return this.Raw(startToken, null, true);
-}
-function consumeRule() {
- return this.parseWithFallback(this.Rule, consumeRaw);
-}
-function consumeRawDeclaration(startToken) {
- return this.Raw(startToken, this.consumeUntilSemicolonIncluded, true);
-}
-function consumeDeclaration() {
- if (this.tokenType === types.Semicolon) {
- return consumeRawDeclaration.call(this, this.tokenIndex);
- }
-
- const node = this.parseWithFallback(this.Declaration, consumeRawDeclaration);
-
- if (this.tokenType === types.Semicolon) {
- this.next();
- }
-
- return node;
-}
-
-const name = 'Block';
-const walkContext = 'block';
-const structure = {
- children: [[
- 'Atrule',
- 'Rule',
- 'Declaration'
- ]]
-};
-
-function parse(isStyleBlock) {
- const consumer = isStyleBlock ? consumeDeclaration : consumeRule;
- const start = this.tokenStart;
- let children = this.createList();
-
- this.eat(types.LeftCurlyBracket);
-
- scan:
- while (!this.eof) {
- switch (this.tokenType) {
- case types.RightCurlyBracket:
- break scan;
-
- case types.WhiteSpace:
- case types.Comment:
- this.next();
- break;
-
- case types.AtKeyword:
- children.push(this.parseWithFallback(this.Atrule.bind(this, isStyleBlock), consumeRaw));
- break;
-
- default:
- if (isStyleBlock && this.isDelim(AMPERSAND)) {
- children.push(consumeRule.call(this));
- } else {
- children.push(consumer.call(this));
- }
- }
- }
-
- if (!this.eof) {
- this.eat(types.RightCurlyBracket);
- }
-
- return {
- type: 'Block',
- loc: this.getLocation(start, this.tokenStart),
- children
- };
-}
-
-function generate(node) {
- this.token(types.LeftCurlyBracket, '{');
- this.children(node, prev => {
- if (prev.type === 'Declaration') {
- this.token(types.Semicolon, ';');
- }
- });
- this.token(types.RightCurlyBracket, '}');
-}
-
-exports.generate = generate;
-exports.name = name;
-exports.parse = parse;
-exports.structure = structure;
-exports.walkContext = walkContext;
diff --git a/node_modules/css-tree/cjs/syntax/node/Brackets.cjs b/node_modules/css-tree/cjs/syntax/node/Brackets.cjs
deleted file mode 100644
index eb181318..00000000
--- a/node_modules/css-tree/cjs/syntax/node/Brackets.cjs
+++ /dev/null
@@ -1,38 +0,0 @@
-'use strict';
-
-const types = require('../../tokenizer/types.cjs');
-
-const name = 'Brackets';
-const structure = {
- children: [[]]
-};
-
-function parse(readSequence, recognizer) {
- const start = this.tokenStart;
- let children = null;
-
- this.eat(types.LeftSquareBracket);
-
- children = readSequence.call(this, recognizer);
-
- if (!this.eof) {
- this.eat(types.RightSquareBracket);
- }
-
- return {
- type: 'Brackets',
- loc: this.getLocation(start, this.tokenStart),
- children
- };
-}
-
-function generate(node) {
- this.token(types.Delim, '[');
- this.children(node);
- this.token(types.Delim, ']');
-}
-
-exports.generate = generate;
-exports.name = name;
-exports.parse = parse;
-exports.structure = structure;
diff --git a/node_modules/css-tree/cjs/syntax/node/CDC.cjs b/node_modules/css-tree/cjs/syntax/node/CDC.cjs
deleted file mode 100644
index aadf3ad7..00000000
--- a/node_modules/css-tree/cjs/syntax/node/CDC.cjs
+++ /dev/null
@@ -1,26 +0,0 @@
-'use strict';
-
-const types = require('../../tokenizer/types.cjs');
-
-const name = 'CDC';
-const structure = [];
-
-function parse() {
- const start = this.tokenStart;
-
- this.eat(types.CDC); // -->
-
- return {
- type: 'CDC',
- loc: this.getLocation(start, this.tokenStart)
- };
-}
-
-function generate() {
- this.token(types.CDC, '-->');
-}
-
-exports.generate = generate;
-exports.name = name;
-exports.parse = parse;
-exports.structure = structure;
diff --git a/node_modules/css-tree/cjs/syntax/node/CDO.cjs b/node_modules/css-tree/cjs/syntax/node/CDO.cjs
deleted file mode 100644
index 0e982178..00000000
--- a/node_modules/css-tree/cjs/syntax/node/CDO.cjs
+++ /dev/null
@@ -1,26 +0,0 @@
-'use strict';
-
-const types = require('../../tokenizer/types.cjs');
-
-const name = 'CDO';
-const structure = [];
-
-function parse() {
- const start = this.tokenStart;
-
- this.eat(types.CDO); // <!--
-
- return {
- type: 'CDO',
- loc: this.getLocation(start, this.tokenStart)
- };
-}
-
-function generate() {
- this.token(types.CDO, '<!--');
-}
-
-exports.generate = generate;
-exports.name = name;
-exports.parse = parse;
-exports.structure = structure;
diff --git a/node_modules/css-tree/cjs/syntax/node/ClassSelector.cjs b/node_modules/css-tree/cjs/syntax/node/ClassSelector.cjs
deleted file mode 100644
index ff3de5cf..00000000
--- a/node_modules/css-tree/cjs/syntax/node/ClassSelector.cjs
+++ /dev/null
@@ -1,31 +0,0 @@
-'use strict';
-
-const types = require('../../tokenizer/types.cjs');
-
-const FULLSTOP = 0x002E; // U+002E FULL STOP (.)
-
-// '.' ident
-const name = 'ClassSelector';
-const structure = {
- name: String
-};
-
-function parse() {
- this.eatDelim(FULLSTOP);
-
- return {
- type: 'ClassSelector',
- loc: this.getLocation(this.tokenStart - 1, this.tokenEnd),
- name: this.consume(types.Ident)
- };
-}
-
-function generate(node) {
- this.token(types.Delim, '.');
- this.token(types.Ident, node.name);
-}
-
-exports.generate = generate;
-exports.name = name;
-exports.parse = parse;
-exports.structure = structure;
diff --git a/node_modules/css-tree/cjs/syntax/node/Combinator.cjs b/node_modules/css-tree/cjs/syntax/node/Combinator.cjs
deleted file mode 100644
index 1a242788..00000000
--- a/node_modules/css-tree/cjs/syntax/node/Combinator.cjs
+++ /dev/null
@@ -1,61 +0,0 @@
-'use strict';
-
-const types = require('../../tokenizer/types.cjs');
-
-const PLUSSIGN = 0x002B; // U+002B PLUS SIGN (+)
-const SOLIDUS = 0x002F; // U+002F SOLIDUS (/)
-const GREATERTHANSIGN = 0x003E; // U+003E GREATER-THAN SIGN (>)
-const TILDE = 0x007E; // U+007E TILDE (~)
-
-const name = 'Combinator';
-const structure = {
- name: String
-};
-
-// + | > | ~ | /deep/
-function parse() {
- const start = this.tokenStart;
- let name;
-
- switch (this.tokenType) {
- case types.WhiteSpace:
- name = ' ';
- break;
-
- case types.Delim:
- switch (this.charCodeAt(this.tokenStart)) {
- case GREATERTHANSIGN:
- case PLUSSIGN:
- case TILDE:
- this.next();
- break;
-
- case SOLIDUS:
- this.next();
- this.eatIdent('deep');
- this.eatDelim(SOLIDUS);
- break;
-
- default:
- this.error('Combinator is expected');
- }
-
- name = this.substrToCursor(start);
- break;
- }
-
- return {
- type: 'Combinator',
- loc: this.getLocation(start, this.tokenStart),
- name
- };
-}
-
-function generate(node) {
- this.tokenize(node.name);
-}
-
-exports.generate = generate;
-exports.name = name;
-exports.parse = parse;
-exports.structure = structure;
diff --git a/node_modules/css-tree/cjs/syntax/node/Comment.cjs b/node_modules/css-tree/cjs/syntax/node/Comment.cjs
deleted file mode 100644
index 083e950b..00000000
--- a/node_modules/css-tree/cjs/syntax/node/Comment.cjs
+++ /dev/null
@@ -1,40 +0,0 @@
-'use strict';
-
-const types = require('../../tokenizer/types.cjs');
-
-const ASTERISK = 0x002A; // U+002A ASTERISK (*)
-const SOLIDUS = 0x002F; // U+002F SOLIDUS (/)
-
-
-const name = 'Comment';
-const structure = {
- value: String
-};
-
-function parse() {
- const start = this.tokenStart;
- let end = this.tokenEnd;
-
- this.eat(types.Comment);
-
- if ((end - start + 2) >= 2 &&
- this.charCodeAt(end - 2) === ASTERISK &&
- this.charCodeAt(end - 1) === SOLIDUS) {
- end -= 2;
- }
-
- return {
- type: 'Comment',
- loc: this.getLocation(start, this.tokenStart),
- value: this.substring(start + 2, end)
- };
-}
-
-function generate(node) {
- this.token(types.Comment, '/*' + node.value + '*/');
-}
-
-exports.generate = generate;
-exports.name = name;
-exports.parse = parse;
-exports.structure = structure;
diff --git a/node_modules/css-tree/cjs/syntax/node/Condition.cjs b/node_modules/css-tree/cjs/syntax/node/Condition.cjs
deleted file mode 100644
index a49b9989..00000000
--- a/node_modules/css-tree/cjs/syntax/node/Condition.cjs
+++ /dev/null
@@ -1,127 +0,0 @@
-'use strict';
-
-const types = require('../../tokenizer/types.cjs');
-
-const MediaFeatureToken = new Set([types.Colon, types.RightParenthesis, types.EOF]);
-const SupportsFeatureToken = new Set([types.Colon, types.EOF]);
-
-const name = 'Condition';
-const structure = {
- kind: String,
- children: [[
- 'Identifier',
- 'Feature',
- 'FeatureRange'
- ]]
-};
-
-const conditions = {
- media() {
- if (this.tokenType === types.LeftParenthesis) {
- const firstToken = this.lookupTypeNonSC(1);
- if (firstToken === types.Ident && MediaFeatureToken.has(this.lookupTypeNonSC(2))) {
- return this.Feature('media');
- } else if (firstToken !== types.LeftParenthesis) {
- return this.parseWithFallback(() => this.FeatureRange('media'), (startIndex) => {
- this.skip(startIndex - this.tokenIndex);
- });
- }
- }
- },
- supports() {
- if (this.tokenType === types.LeftParenthesis) {
- if (this.lookupTypeNonSC(1) === types.Ident && SupportsFeatureToken.has(this.lookupTypeNonSC(2))) {
- return this.Declaration();
- }
- }
- },
- container() {
- if (this.tokenType === types.LeftParenthesis) {
- if (this.lookupTypeNonSC(1) === types.Ident && MediaFeatureToken.has(this.lookupTypeNonSC(2))) {
- return this.Feature('size');
- } else if (this.lookupTypeNonSC(1) !== types.LeftParenthesis) {
- return this.FeatureRange('size');
- }
- }
- }
-};
-
-function parse(kind = 'media') {
- const children = this.createList();
- const termParser = conditions[kind];
-
- scan: while (!this.eof) {
- switch (this.tokenType) {
- case types.Comment:
- case types.WhiteSpace:
- this.next();
- continue;
-
- case types.Ident:
- children.push(this.Identifier());
- break;
-
- case types.LeftParenthesis: {
- let term = termParser.call(this);
-
- if (!term) {
- term = this.parseWithFallback(() => {
- this.next();
- const res = this.Condition(kind);
- this.eat(types.RightParenthesis);
- return res;
- }, (startIndex) => {
- this.skip(startIndex - this.tokenIndex);
- return this.GeneralEnclosed();
- });
- }
-
- children.push(term);
- break;
- }
-
- case types.Function: {
- let term = termParser.call(this);
-
- if (!term) {
- term = this.GeneralEnclosed();
- }
-
- children.push(term);
- break;
- }
-
- default:
- break scan;
- }
- }
-
- if (children.isEmpty) {
- this.error('Condition can\'t be empty');
- }
-
- return {
- type: 'Condition',
- loc: this.getLocationFromList(children),
- kind,
- children
- };
-}
-
-function generate(node) {
- node.children.forEach(child => {
- if (child.type === 'Condition') {
- this.token(types.LeftParenthesis, '(');
- this.node(child);
- this.token(types.RightParenthesis, ')');
- } else {
- this.node(child);
- }
- });
-}
-
-exports.conditions = conditions;
-exports.generate = generate;
-exports.name = name;
-exports.parse = parse;
-exports.structure = structure;
diff --git a/node_modules/css-tree/cjs/syntax/node/Declaration.cjs b/node_modules/css-tree/cjs/syntax/node/Declaration.cjs
deleted file mode 100644
index c0075770..00000000
--- a/node_modules/css-tree/cjs/syntax/node/Declaration.cjs
+++ /dev/null
@@ -1,166 +0,0 @@
-'use strict';
-
-const names = require('../../utils/names.cjs');
-const types = require('../../tokenizer/types.cjs');
-
-const EXCLAMATIONMARK = 0x0021; // U+0021 EXCLAMATION MARK (!)
-const NUMBERSIGN = 0x0023; // U+0023 NUMBER SIGN (#)
-const DOLLARSIGN = 0x0024; // U+0024 DOLLAR SIGN ($)
-const AMPERSAND = 0x0026; // U+0026 AMPERSAND (&)
-const ASTERISK = 0x002A; // U+002A ASTERISK (*)
-const PLUSSIGN = 0x002B; // U+002B PLUS SIGN (+)
-const SOLIDUS = 0x002F; // U+002F SOLIDUS (/)
-
-function consumeValueRaw(startToken) {
- return this.Raw(startToken, this.consumeUntilExclamationMarkOrSemicolon, true);
-}
-
-function consumeCustomPropertyRaw(startToken) {
- return this.Raw(startToken, this.consumeUntilExclamationMarkOrSemicolon, false);
-}
-
-function consumeValue() {
- const startValueToken = this.tokenIndex;
- const value = this.Value();
-
- if (value.type !== 'Raw' &&
- this.eof === false &&
- this.tokenType !== types.Semicolon &&
- this.isDelim(EXCLAMATIONMARK) === false &&
- this.isBalanceEdge(startValueToken) === false) {
- this.error();
- }
-
- return value;
-}
-
-const name = 'Declaration';
-const walkContext = 'declaration';
-const structure = {
- important: [Boolean, String],
- property: String,
- value: ['Value', 'Raw']
-};
-
-function parse() {
- const start = this.tokenStart;
- const startToken = this.tokenIndex;
- const property = readProperty.call(this);
- const customProperty = names.isCustomProperty(property);
- const parseValue = customProperty ? this.parseCustomProperty : this.parseValue;
- const consumeRaw = customProperty ? consumeCustomPropertyRaw : consumeValueRaw;
- let important = false;
- let value;
-
- this.skipSC();
- this.eat(types.Colon);
-
- const valueStart = this.tokenIndex;
-
- if (!customProperty) {
- this.skipSC();
- }
-
- if (parseValue) {
- value = this.parseWithFallback(consumeValue, consumeRaw);
- } else {
- value = consumeRaw.call(this, this.tokenIndex);
- }
-
- if (customProperty && value.type === 'Value' && value.children.isEmpty) {
- for (let offset = valueStart - this.tokenIndex; offset <= 0; offset++) {
- if (this.lookupType(offset) === types.WhiteSpace) {
- value.children.appendData({
- type: 'WhiteSpace',
- loc: null,
- value: ' '
- });
- break;
- }
- }
- }
-
- if (this.isDelim(EXCLAMATIONMARK)) {
- important = getImportant.call(this);
- this.skipSC();
- }
-
- // Do not include semicolon to range per spec
- // https://drafts.csswg.org/css-syntax/#declaration-diagram
-
- if (this.eof === false &&
- this.tokenType !== types.Semicolon &&
- this.isBalanceEdge(startToken) === false) {
- this.error();
- }
-
- return {
- type: 'Declaration',
- loc: this.getLocation(start, this.tokenStart),
- important,
- property,
- value
- };
-}
-
-function generate(node) {
- this.token(types.Ident, node.property);
- this.token(types.Colon, ':');
- this.node(node.value);
-
- if (node.important) {
- this.token(types.Delim, '!');
- this.token(types.Ident, node.important === true ? 'important' : node.important);
- }
-}
-
-function readProperty() {
- const start = this.tokenStart;
-
- // hacks
- if (this.tokenType === types.Delim) {
- switch (this.charCodeAt(this.tokenStart)) {
- case ASTERISK:
- case DOLLARSIGN:
- case PLUSSIGN:
- case NUMBERSIGN:
- case AMPERSAND:
- this.next();
- break;
-
- // TODO: not sure we should support this hack
- case SOLIDUS:
- this.next();
- if (this.isDelim(SOLIDUS)) {
- this.next();
- }
- break;
- }
- }
-
- if (this.tokenType === types.Hash) {
- this.eat(types.Hash);
- } else {
- this.eat(types.Ident);
- }
-
- return this.substrToCursor(start);
-}
-
-// ! ws* important
-function getImportant() {
- this.eat(types.Delim);
- this.skipSC();
-
- const important = this.consume(types.Ident);
-
- // store original value in case it differ from `important`
- // for better original source restoring and hacks like `!ie` support
- return important === 'important' ? true : important;
-}
-
-exports.generate = generate;
-exports.name = name;
-exports.parse = parse;
-exports.structure = structure;
-exports.walkContext = walkContext;
diff --git a/node_modules/css-tree/cjs/syntax/node/DeclarationList.cjs b/node_modules/css-tree/cjs/syntax/node/DeclarationList.cjs
deleted file mode 100644
index 9df4dc3a..00000000
--- a/node_modules/css-tree/cjs/syntax/node/DeclarationList.cjs
+++ /dev/null
@@ -1,62 +0,0 @@
-'use strict';
-
-const types = require('../../tokenizer/types.cjs');
-
-const AMPERSAND = 0x0026; // U+0026 AMPERSAND (&)
-
-function consumeRaw(startToken) {
- return this.Raw(startToken, this.consumeUntilSemicolonIncluded, true);
-}
-
-const name = 'DeclarationList';
-const structure = {
- children: [[
- 'Declaration',
- 'Atrule',
- 'Rule'
- ]]
-};
-
-function parse() {
- const children = this.createList();
-
- while (!this.eof) {
- switch (this.tokenType) {
- case types.WhiteSpace:
- case types.Comment:
- case types.Semicolon:
- this.next();
- break;
-
- case types.AtKeyword:
- children.push(this.parseWithFallback(this.Atrule.bind(this, true), consumeRaw));
- break;
-
- default:
- if (this.isDelim(AMPERSAND)) {
- children.push(this.parseWithFallback(this.Rule, consumeRaw));
- } else {
- children.push(this.parseWithFallback(this.Declaration, consumeRaw));
- }
- }
- }
-
- return {
- type: 'DeclarationList',
- loc: this.getLocationFromList(children),
- children
- };
-}
-
-function generate(node) {
- this.children(node, prev => {
- if (prev.type === 'Declaration') {
- this.token(types.Semicolon, ';');
- }
- });
-}
-
-exports.generate = generate;
-exports.name = name;
-exports.parse = parse;
-exports.structure = structure;
diff --git a/node_modules/css-tree/cjs/syntax/node/Dimension.cjs b/node_modules/css-tree/cjs/syntax/node/Dimension.cjs
deleted file mode 100644
index 227184cc..00000000
--- a/node_modules/css-tree/cjs/syntax/node/Dimension.cjs
+++ /dev/null
@@ -1,30 +0,0 @@
-'use strict';
-
-const types = require('../../tokenizer/types.cjs');
-
-const name = 'Dimension';
-const structure = {
- value: String,
- unit: String
-};
-
-function parse() {
- const start = this.tokenStart;
- const value = this.consumeNumber(types.Dimension);
-
- return {
- type: 'Dimension',
- loc: this.getLocation(start, this.tokenStart),
- value,
- unit: this.substring(start + value.length, this.tokenStart)
- };
-}
-
-function generate(node) {
- this.token(types.Dimension, node.value + node.unit);
-}
-
-exports.generate = generate;
-exports.name = name;
-exports.parse = parse;
-exports.structure = structure;
diff --git a/node_modules/css-tree/cjs/syntax/node/Feature.cjs b/node_modules/css-tree/cjs/syntax/node/Feature.cjs
deleted file mode 100644
index 23fc356d..00000000
--- a/node_modules/css-tree/cjs/syntax/node/Feature.cjs
+++ /dev/null
@@ -1,78 +0,0 @@
-'use strict';
-
-const types = require('../../tokenizer/types.cjs');
-
-const name = 'Feature';
-const structure = {
- kind: String,
- name: String,
- value: ['Identifier', 'Number', 'Dimension', 'Ratio', null]
-};
-
-function parse(kind = 'unknown') {
- const start = this.tokenStart;
- let name;
- let value = null;
-
- this.eat(types.LeftParenthesis);
- this.skipSC();
-
- name = this.consume(types.Ident);
- this.skipSC();
-
- if (this.tokenType !== types.RightParenthesis) {
- this.eat(types.Colon);
- this.skipSC();
-
- switch (this.tokenType) {
- case types.Number:
- if (this.lookupNonWSType(1) === types.Delim) {
- value = this.Ratio();
- } else {
- value = this.Number();
- }
-
- break;
-
- case types.Dimension:
- value = this.Dimension();
- break;
-
- case types.Ident:
- value = this.Identifier();
- break;
-
- default:
- this.error('Number, dimension, ratio or identifier is expected');
- }
-
- this.skipSC();
- }
-
- this.eat(types.RightParenthesis);
-
- return {
- type: 'Feature',
- loc: this.getLocation(start, this.tokenStart),
- kind,
- name,
- value
- };
-}
-
-function generate(node) {
- this.token(types.LeftParenthesis, '(');
- this.token(types.Ident, node.name);
-
- if (node.value !== null) {
- this.token(types.Colon, ':');
- this.node(node.value);
- }
-
- this.token(types.RightParenthesis, ')');
-}
-
-exports.generate = generate;
-exports.name = name;
-exports.parse = parse;
-exports.structure = structure;
diff --git a/node_modules/css-tree/cjs/syntax/node/FeatureRange.cjs b/node_modules/css-tree/cjs/syntax/node/FeatureRange.cjs
deleted file mode 100644
index 1db82596..00000000
--- a/node_modules/css-tree/cjs/syntax/node/FeatureRange.cjs
+++ /dev/null
@@ -1,114 +0,0 @@
-'use strict';
-
-const types = require('../../tokenizer/types.cjs');
-
-const LESSTHANSIGN = 60; // <
-const EQUALSIGN = 61; // =
-const GREATERTHANSIGN = 62; // >
-
-const name = 'FeatureRange';
-const structure = {
- kind: String,
- left: ['Identifier', 'Number', 'Dimension', 'Ratio'],
- leftComparison: String,
- middle: ['Identifier', 'Number', 'Dimension', 'Ratio'],
- rightComparison: [String, null],
- right: ['Identifier', 'Number', 'Dimension', 'Ratio', null]
-};
-
-function readTerm() {
- this.skipSC();
-
- switch (this.tokenType) {
- case types.Number:
- if (this.lookupNonWSType(1) === types.Delim) {
- return this.Ratio();
- } else {
- return this.Number();
- }
-
- case types.Dimension:
- return this.Dimension();
-
- case types.Ident:
- return this.Identifier();
-
- default:
- this.error('Number, dimension, ratio or identifier is expected');
- }
-}
-
-function readComparison(expectColon) {
- this.skipSC();
-
- if (this.isDelim(LESSTHANSIGN) ||
- this.isDelim(GREATERTHANSIGN)) {
- const value = this.source[this.tokenStart];
-
- this.next();
-
- if (this.isDelim(EQUALSIGN)) {
- this.next();
- return value + '=';
- }
-
- return value;
- }
-
- if (this.isDelim(EQUALSIGN)) {
- return '=';
- }
-
- this.error(`Expected ${expectColon ? '":", ' : ''}"<", ">", "=" or ")"`);
-}
-
-function parse(kind = 'unknown') {
- const start = this.tokenStart;
-
- this.skipSC();
- this.eat(types.LeftParenthesis);
-
- const left = readTerm.call(this);
- const leftComparison = readComparison.call(this, left.type === 'Identifier');
- const middle = readTerm.call(this);
- let rightComparison = null;
- let right = null;
-
- if (this.lookupNonWSType(0) !== types.RightParenthesis) {
- rightComparison = readComparison.call(this);
- right = readTerm.call(this);
- }
-
- this.skipSC();
- this.eat(types.RightParenthesis);
-
- return {
- type: 'FeatureRange',
- loc: this.getLocation(start, this.tokenStart),
- kind,
- left,
- leftComparison,
- middle,
- rightComparison,
- right
- };
-}
-
-function generate(node) {
- this.token(types.LeftParenthesis, '(');
- this.node(node.left);
- this.tokenize(node.leftComparison);
- this.node(node.middle);
-
- if (node.right) {
- this.tokenize(node.rightComparison);
- this.node(node.right);
- }
-
- this.token(types.RightParenthesis, ')');
-}
-
-exports.generate = generate;
-exports.name = name;
-exports.parse = parse;
-exports.structure = structure;
diff --git a/node_modules/css-tree/cjs/syntax/node/Function.cjs b/node_modules/css-tree/cjs/syntax/node/Function.cjs
deleted file mode 100644
index b5e3b57e..00000000
--- a/node_modules/css-tree/cjs/syntax/node/Function.cjs
+++ /dev/null
@@ -1,45 +0,0 @@
-'use strict';
-
-const types = require('../../tokenizer/types.cjs');
-
-const name = 'Function';
-const walkContext = 'function';
-const structure = {
- name: String,
- children: [[]]
-};
-
-// <function-token> <sequence> )
-function parse(readSequence, recognizer) {
- const start = this.tokenStart;
- const name = this.consumeFunctionName();
- const nameLowerCase = name.toLowerCase();
- let children;
-
- children = recognizer.hasOwnProperty(nameLowerCase)
- ? recognizer[nameLowerCase].call(this, recognizer)
- : readSequence.call(this, recognizer);
-
- if (!this.eof) {
- this.eat(types.RightParenthesis);
- }
-
- return {
- type: 'Function',
- loc: this.getLocation(start, this.tokenStart),
- name,
- children
- };
-}
-
-function generate(node) {
- this.token(types.Function, node.name + '(');
- this.children(node);
- this.token(types.RightParenthesis, ')');
-}
-
-exports.generate = generate;
-exports.name = name;
-exports.parse = parse;
-exports.structure = structure;
-exports.walkContext = walkContext;
diff --git a/node_modules/css-tree/cjs/syntax/node/GeneralEnclosed.cjs b/node_modules/css-tree/cjs/syntax/node/GeneralEnclosed.cjs
deleted file mode 100644
index 5e919c8e..00000000
--- a/node_modules/css-tree/cjs/syntax/node/GeneralEnclosed.cjs
+++ /dev/null
@@ -1,51 +0,0 @@
-'use strict';
-
-const types = require('../../tokenizer/types.cjs');
-
-const name = 'GeneralEnclosed';
-const structure = {
- function: [String, null],
- children: [[]]
-};
-
-// <function-token> <any-value> )
-// ( <any-value> )
-function parse() {
- const start = this.tokenStart;
- let functionName = null;
-
- if (this.tokenType === types.Function) {
- functionName = this.consumeFunctionName();
- } else {
- this.eat(types.LeftParenthesis);
- }
-
- const children = this.readSequence(this.scope.Value);
-
- if (!this.eof) {
- this.eat(types.RightParenthesis);
- }
-
- return {
- type: 'GeneralEnclosed',
- loc: this.getLocation(start, this.tokenStart),
- function: functionName,
- children
- };
-}
-
-function generate(node) {
- if (node.function) {
- this.token(types.Function, node.function + '(');
- } else {
- this.token(types.LeftParenthesis, '(');
- }
-
- this.children(node);
- this.token(types.RightParenthesis, ')');
-}
-
-exports.generate = generate;
-exports.name = name;
-exports.parse = parse;
-exports.structure = structure;
diff --git a/node_modules/css-tree/cjs/syntax/node/Hash.cjs b/node_modules/css-tree/cjs/syntax/node/Hash.cjs
deleted file mode 100644
index 8b5f3753..00000000
--- a/node_modules/css-tree/cjs/syntax/node/Hash.cjs
+++ /dev/null
@@ -1,30 +0,0 @@
-'use strict';
-
-const types = require('../../tokenizer/types.cjs');
-
-// '#' ident
-const xxx = 'XXX';
-const name = 'Hash';
-const structure = {
- value: String
-};
-function parse() {
- const start = this.tokenStart;
-
- this.eat(types.Hash);
-
- return {
- type: 'Hash',
- loc: this.getLocation(start, this.tokenStart),
- value: this.substrToCursor(start + 1)
- };
-}
-function generate(node) {
- this.token(types.Hash, '#' + node.value);
-}
-
-exports.generate = generate;
-exports.name = name;
-exports.parse = parse;
-exports.structure = structure;
-exports.xxx = xxx;
diff --git a/node_modules/css-tree/cjs/syntax/node/IdSelector.cjs b/node_modules/css-tree/cjs/syntax/node/IdSelector.cjs
deleted file mode 100644
index 264525db..00000000
--- a/node_modules/css-tree/cjs/syntax/node/IdSelector.cjs
+++ /dev/null
@@ -1,33 +0,0 @@
-'use strict';
-
-const types = require('../../tokenizer/types.cjs');
-
-const name = 'IdSelector';
-const structure = {
- name: String
-};
-
-function parse() {
- const start = this.tokenStart;
-
- // TODO: check value is an ident
- this.eat(types.Hash);
-
- return {
- type: 'IdSelector',
- loc: this.getLocation(start, this.tokenStart),
- name: this.substrToCursor(start + 1)
- };
-}
-
-function generate(node) {
- // Using Delim instead of Hash is a hack to avoid for a whitespace between ident and id-selector
- // in safe mode (e.g. "a#id"), because IE11 doesn't allow a sequence <ident-token> <hash-token>
- // without a whitespace in values (e.g. "1px solid#000")
- this.token(types.Delim, '#' + node.name);
-}
-
-exports.generate = generate;
-exports.name = name;
-exports.parse = parse;
-exports.structure = structure;
diff --git a/node_modules/css-tree/cjs/syntax/node/Identifier.cjs b/node_modules/css-tree/cjs/syntax/node/Identifier.cjs
deleted file mode 100644
index 8928cf8c..00000000
--- a/node_modules/css-tree/cjs/syntax/node/Identifier.cjs
+++ /dev/null
@@ -1,25 +0,0 @@
-'use strict';
-
-const types = require('../../tokenizer/types.cjs');
-
-const name = 'Identifier';
-const structure = {
- name: String
-};
-
-function parse() {
- return {
- type: 'Identifier',
- loc: this.getLocation(this.tokenStart, this.tokenEnd),
- name: this.consume(types.Ident)
- };
-}
-
-function generate(node) {
- this.token(types.Ident, node.name);
-}
-
-exports.generate = generate;
-exports.name = name;
-exports.parse = parse;
-exports.structure = structure;
diff --git a/node_modules/css-tree/cjs/syntax/node/MediaCondition.cjs b/node_modules/css-tree/cjs/syntax/node/MediaCondition.cjs
deleted file mode 100644
index c98fdc8f..00000000
--- a/node_modules/css-tree/cjs/syntax/node/MediaCondition.cjs
+++ /dev/null
@@ -1,70 +0,0 @@
-'use strict';
-
-const types = require('../../tokenizer/types.cjs');
-
-const MediaFeatureToken = new Set([types.Colon, types.RightParenthesis, types.EOF]);
-
-const name = 'MediaCondition';
-const structure = {
- children: [[
- 'Identifier',
- 'MediaFeature',
- 'MediaFeatureRange'
- ]]
-};
-
-function parse() {
- const children = this.createList();
-
- scan: while (!this.eof) {
- switch (this.tokenType) {
- case types.Comment:
- case types.WhiteSpace:
- this.next();
- continue;
-
- case types.Ident:
- children.push(this.Identifier());
- break;
-
- case types.LeftParenthesis:
- if (this.lookupTypeNonSC(1) === types.Ident && MediaFeatureToken.has(this.lookupTypeNonSC(2))) {
- children.push(this.MediaFeature());
- } else if (this.lookupTypeNonSC(1) === types.LeftParenthesis || this.lookupTypeNonSC(2) === types.LeftParenthesis) {
- this.next();
- children.push(this.MediaCondition());
- this.eat(types.RightParenthesis);
- } else {
- children.push(this.MediaFeatureRange());
- }
-
- break;
-
- default:
- break scan;
- }
- }
-
- return {
- type: 'MediaCondition',
- loc: this.getLocationFromList(children),
- children
- };
-}
-
-function generate(node) {
- node.children.forEach(child => {
- if (child.type === 'MediaCondition') {
- this.token(types.LeftParenthesis, '(');
- this.node(child);
- this.token(types.RightParenthesis, ')');
- } else {
- this.node(child);
- }
- });
-}
-
-exports.generate = generate;
-exports.name = name;
-exports.parse = parse;
-exports.structure = structure;
diff --git a/node_modules/css-tree/cjs/syntax/node/MediaFeature.cjs b/node_modules/css-tree/cjs/syntax/node/MediaFeature.cjs
deleted file mode 100644
index 90e8d5a8..00000000
--- a/node_modules/css-tree/cjs/syntax/node/MediaFeature.cjs
+++ /dev/null
@@ -1,76 +0,0 @@
-'use strict';
-
-const types = require('../../tokenizer/types.cjs');
-
-const name = 'MediaFeature';
-const structure = {
- name: String,
- value: ['Identifier', 'Number', 'Dimension', 'Ratio', null]
-};
-
-function parse() {
- const start = this.tokenStart;
- let name;
- let value = null;
-
- this.eat(types.LeftParenthesis);
- this.skipSC();
-
- name = this.consume(types.Ident);
- this.skipSC();
-
- if (this.tokenType !== types.RightParenthesis) {
- this.eat(types.Colon);
- this.skipSC();
-
- switch (this.tokenType) {
- case types.Number:
- if (this.lookupNonWSType(1) === types.Delim) {
- value = this.Ratio();
- } else {
- value = this.Number();
- }
-
- break;
-
- case types.Dimension:
- value = this.Dimension();
- break;
-
- case types.Ident:
- value = this.Identifier();
- break;
-
- default:
- this.error('Number, dimension, ratio or identifier is expected');
- }
-
- this.skipSC();
- }
-
- this.eat(types.RightParenthesis);
-
- return {
- type: 'MediaFeature',
- loc: this.getLocation(start, this.tokenStart),
- name,
- value
- };
-}
-
-function generate(node) {
- this.token(types.LeftParenthesis, '(');
- this.token(types.Ident, node.name);
-
- if (node.value !== null) {
- this.token(types.Colon, ':');
- this.node(node.value);
- }
-
- this.token(types.RightParenthesis, ')');
-}
-
-exports.generate = generate;
-exports.name = name;
-exports.parse = parse;
-exports.structure = structure;
diff --git a/node_modules/css-tree/cjs/syntax/node/MediaFeatureRange.cjs b/node_modules/css-tree/cjs/syntax/node/MediaFeatureRange.cjs
deleted file mode 100644
index 8be899f4..00000000
--- a/node_modules/css-tree/cjs/syntax/node/MediaFeatureRange.cjs
+++ /dev/null
@@ -1,11 +0,0 @@
-'use strict';
-
-const featureRange = require('./common/feature-range.cjs');
-
-const name = 'MediaFeatureRange';
-const parse = featureRange.createParse(name);
-
-exports.generate = featureRange.generate;
-exports.structure = featureRange.structure;
-exports.name = name;
-exports.parse = parse;
diff --git a/node_modules/css-tree/cjs/syntax/node/MediaQuery.cjs b/node_modules/css-tree/cjs/syntax/node/MediaQuery.cjs
deleted file mode 100644
index 0b99d960..00000000
--- a/node_modules/css-tree/cjs/syntax/node/MediaQuery.cjs
+++ /dev/null
@@ -1,61 +0,0 @@
-'use strict';
-
-const types = require('../../tokenizer/types.cjs');
-
-const name = 'MediaQuery';
-const structure = {
- children: [[
- 'Identifier',
- 'MediaFeature',
- 'WhiteSpace'
- ]]
-};
-
-function parse() {
- const children = this.createList();
- let child = null;
-
- this.skipSC();
-
- scan:
- while (!this.eof) {
- switch (this.tokenType) {
- case types.Comment:
- case types.WhiteSpace:
- this.next();
- continue;
-
- case types.Ident:
- child = this.Identifier();
- break;
-
- case types.LeftParenthesis:
- child = this.MediaFeature();
- break;
-
- default:
- break scan;
- }
-
- children.push(child);
- }
-
- if (child === null) {
- this.error('Identifier or parenthesis is expected');
- }
-
- return {
- type: 'MediaQuery',
- loc: this.getLocationFromList(children),
- children
- };
-}
-
-function generate(node) {
- this.children(node);
-}
-
-exports.generate = generate;
-exports.name = name;
-exports.parse = parse;
-exports.structure = structure;
diff --git a/node_modules/css-tree/cjs/syntax/node/MediaQueryList.cjs b/node_modules/css-tree/cjs/syntax/node/MediaQueryList.cjs
deleted file mode 100644
index 38779477..00000000
--- a/node_modules/css-tree/cjs/syntax/node/MediaQueryList.cjs
+++ /dev/null
@@ -1,41 +0,0 @@
-'use strict';
-
-const types = require('../../tokenizer/types.cjs');
-
-const name = 'MediaQueryList';
-const structure = {
- children: [[
- 'MediaQuery'
- ]]
-};
-
-function parse() {
- const children = this.createList();
-
- this.skipSC();
-
- while (!this.eof) {
- children.push(this.MediaQuery());
-
- if (this.tokenType !== types.Comma) {
- break;
- }
-
- this.next();
- }
-
- return {
- type: 'MediaQueryList',
- loc: this.getLocationFromList(children),
- children
- };
-}
-
-function generate(node) {
- this.children(node, () => this.token(types.Comma, ','));
-}
-
-exports.generate = generate;
-exports.name = name;
-exports.parse = parse;
-exports.structure = structure;
diff --git a/node_modules/css-tree/cjs/syntax/node/NestingSelector.cjs b/node_modules/css-tree/cjs/syntax/node/NestingSelector.cjs
deleted file mode 100644
index 9850a9c1..00000000
--- a/node_modules/css-tree/cjs/syntax/node/NestingSelector.cjs
+++ /dev/null
@@ -1,29 +0,0 @@
-'use strict';
-
-const types = require('../../tokenizer/types.cjs');
-
-const AMPERSAND = 0x0026; // U+0026 AMPERSAND (&)
-
-const name = 'NestingSelector';
-const structure = {
-};
-
-function parse() {
- const start = this.tokenStart;
-
- this.eatDelim(AMPERSAND);
-
- return {
- type: 'NestingSelector',
- loc: this.getLocation(start, this.tokenStart)
- };
-}
-
-function generate() {
- this.token(types.Delim, '&');
-}
-
-exports.generate = generate;
-exports.name = name;
-exports.parse = parse;
-exports.structure = structure;
diff --git a/node_modules/css-tree/cjs/syntax/node/Nth.cjs b/node_modules/css-tree/cjs/syntax/node/Nth.cjs
deleted file mode 100644
index 709312f4..00000000
--- a/node_modules/css-tree/cjs/syntax/node/Nth.cjs
+++ /dev/null
@@ -1,54 +0,0 @@
-'use strict';
-
-const types = require('../../tokenizer/types.cjs');
-
-const name = 'Nth';
-const structure = {
- nth: ['AnPlusB', 'Identifier'],
- selector: ['SelectorList', null]
-};
-
-function parse() {
- this.skipSC();
-
- const start = this.tokenStart;
- let end = start;
- let selector = null;
- let nth;
-
- if (this.lookupValue(0, 'odd') || this.lookupValue(0, 'even')) {
- nth = this.Identifier();
- } else {
- nth = this.AnPlusB();
- }
-
- end = this.tokenStart;
- this.skipSC();
-
- if (this.lookupValue(0, 'of')) {
- this.next();
-
- selector = this.SelectorList();
- end = this.tokenStart;
- }
-
- return {
- type: 'Nth',
- loc: this.getLocation(start, end),
- nth,
- selector
- };
-}
-
-function generate(node) {
- this.node(node.nth);
- if (node.selector !== null) {
- this.token(types.Ident, 'of');
- this.node(node.selector);
- }
-}
-
-exports.generate = generate;
-exports.name = name;
-exports.parse = parse;
-exports.structure = structure;
diff --git a/node_modules/css-tree/cjs/syntax/node/Number.cjs b/node_modules/css-tree/cjs/syntax/node/Number.cjs
deleted file mode 100644
index 8abd9ae9..00000000
--- a/node_modules/css-tree/cjs/syntax/node/Number.cjs
+++ /dev/null
@@ -1,25 +0,0 @@
-'use strict';
-
-const types = require('../../tokenizer/types.cjs');
-
-const name = 'Number';
-const structure = {
- value: String
-};
-
-function parse() {
- return {
- type: 'Number',
- loc: this.getLocation(this.tokenStart, this.tokenEnd),
- value: this.consume(types.Number)
- };
-}
-
-function generate(node) {
- this.token(types.Number, node.value);
-}
-
-exports.generate = generate;
-exports.name = name;
-exports.parse = parse;
-exports.structure = structure;
diff --git a/node_modules/css-tree/cjs/syntax/node/Operator.cjs b/node_modules/css-tree/cjs/syntax/node/Operator.cjs
deleted file mode 100644
index c5a513bf..00000000
--- a/node_modules/css-tree/cjs/syntax/node/Operator.cjs
+++ /dev/null
@@ -1,28 +0,0 @@
-'use strict';
-
-// '/' | '*' | ',' | ':' | '+' | '-'
-const name = 'Operator';
-const structure = {
- value: String
-};
-
-function parse() {
- const start = this.tokenStart;
-
- this.next();
-
- return {
- type: 'Operator',
- loc: this.getLocation(start, this.tokenStart),
- value: this.substrToCursor(start)
- };
-}
-
-function generate(node) {
- this.tokenize(node.value);
-}
-
-exports.generate = generate;
-exports.name = name;
-exports.parse = parse;
-exports.structure = structure;
diff --git a/node_modules/css-tree/cjs/syntax/node/Parentheses.cjs b/node_modules/css-tree/cjs/syntax/node/Parentheses.cjs
deleted file mode 100644
index 7c14bc67..00000000
--- a/node_modules/css-tree/cjs/syntax/node/Parentheses.cjs
+++ /dev/null
@@ -1,38 +0,0 @@
-'use strict';
-
-const types = require('../../tokenizer/types.cjs');
-
-const name = 'Parentheses';
-const structure = {
- children: [[]]
-};
-
-function parse(readSequence, recognizer) {
- const start = this.tokenStart;
- let children = null;
-
- this.eat(types.LeftParenthesis);
-
- children = readSequence.call(this, recognizer);
-
- if (!this.eof) {
- this.eat(types.RightParenthesis);
- }
-
- return {
- type: 'Parentheses',
- loc: this.getLocation(start, this.tokenStart),
- children
- };
-}
-
-function generate(node) {
- this.token(types.LeftParenthesis, '(');
- this.children(node);
- this.token(types.RightParenthesis, ')');
-}
-
-exports.generate = generate;
-exports.name = name;
-exports.parse = parse;
-exports.structure = structure;
diff --git a/node_modules/css-tree/cjs/syntax/node/Percentage.cjs b/node_modules/css-tree/cjs/syntax/node/Percentage.cjs
deleted file mode 100644
index 38cc1d5e..00000000
--- a/node_modules/css-tree/cjs/syntax/node/Percentage.cjs
+++ /dev/null
@@ -1,25 +0,0 @@
-'use strict';
-
-const types = require('../../tokenizer/types.cjs');
-
-const name = 'Percentage';
-const structure = {
- value: String
-};
-
-function parse() {
- return {
- type: 'Percentage',
- loc: this.getLocation(this.tokenStart, this.tokenEnd),
- value: this.consumeNumber(types.Percentage)
- };
-}
-
-function generate(node) {
- this.token(types.Percentage, node.value + '%');
-}
-
-exports.generate = generate;
-exports.name = name;
-exports.parse = parse;
-exports.structure = structure;
diff --git a/node_modules/css-tree/cjs/syntax/node/PseudoClassSelector.cjs b/node_modules/css-tree/cjs/syntax/node/PseudoClassSelector.cjs
deleted file mode 100644
index ad58371e..00000000
--- a/node_modules/css-tree/cjs/syntax/node/PseudoClassSelector.cjs
+++ /dev/null
@@ -1,65 +0,0 @@
-'use strict';
-
-const types = require('../../tokenizer/types.cjs');
-
-const name = 'PseudoClassSelector';
-const walkContext = 'function';
-const structure = {
- name: String,
- children: [['Raw'], null]
-};
-
-// : [ <ident> | <function-token> <any-value>? ) ]
-function parse() {
- const start = this.tokenStart;
- let children = null;
- let name;
- let nameLowerCase;
-
- this.eat(types.Colon);
-
- if (this.tokenType === types.Function) {
- name = this.consumeFunctionName();
- nameLowerCase = name.toLowerCase();
-
- if (hasOwnProperty.call(this.pseudo, nameLowerCase)) {
- this.skipSC();
- children = this.pseudo[nameLowerCase].call(this);
- this.skipSC();
- } else {
- children = this.createList();
- children.push(
- this.Raw(this.tokenIndex, null, false)
- );
- }
-
- this.eat(types.RightParenthesis);
- } else {
- name = this.consume(types.Ident);
- }
-
- return {
- type: 'PseudoClassSelector',
- loc: this.getLocation(start, this.tokenStart),
- name,
- children
- };
-}
-
-function generate(node) {
- this.token(types.Colon, ':');
-
- if (node.children === null) {
- this.token(types.Ident, node.name);
- } else {
- this.token(types.Function, node.name + '(');
- this.children(node);
- this.token(types.RightParenthesis, ')');
- }
-}
-
-exports.generate = generate;
-exports.name = name;
-exports.parse = parse;
-exports.structure = structure;
-exports.walkContext = walkContext;
diff --git a/node_modules/css-tree/cjs/syntax/node/PseudoElementSelector.cjs b/node_modules/css-tree/cjs/syntax/node/PseudoElementSelector.cjs
deleted file mode 100644
index a3c1f12f..00000000
--- a/node_modules/css-tree/cjs/syntax/node/PseudoElementSelector.cjs
+++ /dev/null
@@ -1,67 +0,0 @@
-'use strict';
-
-const types = require('../../tokenizer/types.cjs');
-
-const name = 'PseudoElementSelector';
-const walkContext = 'function';
-const structure = {
- name: String,
- children: [['Raw'], null]
-};
-
-// :: [ <ident> | <function-token> <any-value>? ) ]
-function parse() {
- const start = this.tokenStart;
- let children = null;
- let name;
- let nameLowerCase;
-
- this.eat(types.Colon);
- this.eat(types.Colon);
-
- if (this.tokenType === types.Function) {
- name = this.consumeFunctionName();
- nameLowerCase = name.toLowerCase();
-
- if (hasOwnProperty.call(this.pseudo, nameLowerCase)) {
- this.skipSC();
- children = this.pseudo[nameLowerCase].call(this);
- this.skipSC();
- } else {
- children = this.createList();
- children.push(
- this.Raw(this.tokenIndex, null, false)
- );
- }
-
- this.eat(types.RightParenthesis);
- } else {
- name = this.consume(types.Ident);
- }
-
- return {
- type: 'PseudoElementSelector',
- loc: this.getLocation(start, this.tokenStart),
- name,
- children
- };
-}
-
-function generate(node) {
- this.token(types.Colon, ':');
- this.token(types.Colon, ':');
-
- if (node.children === null) {
- this.token(types.Ident, node.name);
- } else {
- this.token(types.Function, node.name + '(');
- this.children(node);
- this.token(types.RightParenthesis, ')');
- }
-}
-
-exports.generate = generate;
-exports.name = name;
-exports.parse = parse;
-exports.structure = structure;
-exports.walkContext = walkContext;
diff --git a/node_modules/css-tree/cjs/syntax/node/Ratio.cjs b/node_modules/css-tree/cjs/syntax/node/Ratio.cjs
deleted file mode 100644
index 8bdf2dcc..00000000
--- a/node_modules/css-tree/cjs/syntax/node/Ratio.cjs
+++ /dev/null
@@ -1,67 +0,0 @@
-'use strict';
-
-const types = require('../../tokenizer/types.cjs');
-const charCodeDefinitions = require('../../tokenizer/char-code-definitions.cjs');
-
-const SOLIDUS = 0x002F; // U+002F SOLIDUS (/)
-const FULLSTOP = 0x002E; // U+002E FULL STOP (.)
-
-// Terms of <ratio> should be a positive numbers (not zero or negative)
-// (see https://drafts.csswg.org/mediaqueries-3/#values)
-// However, -o-min-device-pixel-ratio takes fractional values as a ratio's term
-// and this is using by various sites. Therefore we relax checking on parse
-// to test a term is unsigned number without an exponent part.
-// Additional checking may be applied on lexer validation.
-function consumeNumber() {
- this.skipSC();
-
- const value = this.consume(types.Number);
-
- for (let i = 0; i < value.length; i++) {
- const code = value.charCodeAt(i);
- if (!charCodeDefinitions.isDigit(code) && code !== FULLSTOP) {
- this.error('Unsigned number is expected', this.tokenStart - value.length + i);
- }
- }
-
- if (Number(value) === 0) {
- this.error('Zero number is not allowed', this.tokenStart - value.length);
- }
-
- return value;
-}
-
-const name = 'Ratio';
-const structure = {
- left: String,
- right: String
-};
-
-// <positive-integer> S* '/' S* <positive-integer>
-function parse() {
- const start = this.tokenStart;
- const left = consumeNumber.call(this);
- let right;
-
- this.skipSC();
- this.eatDelim(SOLIDUS);
- right = consumeNumber.call(this);
-
- return {
- type: 'Ratio',
- loc: this.getLocation(start, this.tokenStart),
- left,
- right
- };
-}
-
-function generate(node) {
- this.token(types.Number, node.left);
- this.token(types.Delim, '/');
- this.token(types.Number, node.right);
-}
-
-exports.generate = generate;
-exports.name = name;
-exports.parse = parse;
-exports.structure = structure;
diff --git a/node_modules/css-tree/cjs/syntax/node/Raw.cjs b/node_modules/css-tree/cjs/syntax/node/Raw.cjs
deleted file mode 100644
index 505b5266..00000000
--- a/node_modules/css-tree/cjs/syntax/node/Raw.cjs
+++ /dev/null
@@ -1,48 +0,0 @@
-'use strict';
-
-const types = require('../../tokenizer/types.cjs');
-
-function getOffsetExcludeWS() {
- if (this.tokenIndex > 0) {
- if (this.lookupType(-1) === types.WhiteSpace) {
- return this.tokenIndex > 1
- ? this.getTokenStart(this.tokenIndex - 1)
- : this.firstCharOffset;
- }
- }
-
- return this.tokenStart;
-}
-
-const name = 'Raw';
-const structure = {
- value: String
-};
-
-function parse(startToken, consumeUntil, excludeWhiteSpace) {
- const startOffset = this.getTokenStart(startToken);
- let endOffset;
-
- this.skipUntilBalanced(startToken, consumeUntil || this.consumeUntilBalanceEnd);
-
- if (excludeWhiteSpace && this.tokenStart > startOffset) {
- endOffset = getOffsetExcludeWS.call(this);
- } else {
- endOffset = this.tokenStart;
- }
-
- return {
- type: 'Raw',
- loc: this.getLocation(startOffset, endOffset),
- value: this.substring(startOffset, endOffset)
- };
-}
-
-function generate(node) {
- this.tokenize(node.value);
-}
-
-exports.generate = generate;
-exports.name = name;
-exports.parse = parse;
-exports.structure = structure;
diff --git a/node_modules/css-tree/cjs/syntax/node/Rule.cjs b/node_modules/css-tree/cjs/syntax/node/Rule.cjs
deleted file mode 100644
index a76ce712..00000000
--- a/node_modules/css-tree/cjs/syntax/node/Rule.cjs
+++ /dev/null
@@ -1,58 +0,0 @@
-'use strict';
-
-const types = require('../../tokenizer/types.cjs');
-
-function consumeRaw(startToken) {
- return this.Raw(startToken, this.consumeUntilLeftCurlyBracket, true);
-}
-
-function consumePrelude() {
- const prelude = this.SelectorList();
-
- if (prelude.type !== 'Raw' &&
- this.eof === false &&
- this.tokenType !== types.LeftCurlyBracket) {
- this.error();
- }
-
- return prelude;
-}
-
-const name = 'Rule';
-const walkContext = 'rule';
-const structure = {
- prelude: ['SelectorList', 'Raw'],
- block: ['Block']
-};
-
-function parse() {
- const startToken = this.tokenIndex;
- const startOffset = this.tokenStart;
- let prelude;
- let block;
-
- if (this.parseRulePrelude) {
- prelude = this.parseWithFallback(consumePrelude, consumeRaw);
- } else {
- prelude = consumeRaw.call(this, startToken);
- }
-
- block = this.Block(true);
-
- return {
- type: 'Rule',
- loc: this.getLocation(startOffset, this.tokenStart),
- prelude,
- block
- };
-}
-function generate(node) {
- this.node(node.prelude);
- this.node(node.block);
-}
-
-exports.generate = generate;
-exports.name = name;
-exports.parse = parse;
-exports.structure = structure;
-exports.walkContext = walkContext;
diff --git a/node_modules/css-tree/cjs/syntax/node/Selector.cjs b/node_modules/css-tree/cjs/syntax/node/Selector.cjs
deleted file mode 100644
index c6cafd1e..00000000
--- a/node_modules/css-tree/cjs/syntax/node/Selector.cjs
+++ /dev/null
@@ -1,39 +0,0 @@
-'use strict';
-
-const name = 'Selector';
-const structure = {
- children: [[
- 'TypeSelector',
- 'IdSelector',
- 'ClassSelector',
- 'AttributeSelector',
- 'PseudoClassSelector',
- 'PseudoElementSelector',
- 'Combinator',
- 'WhiteSpace'
- ]]
-};
-
-function parse() {
- const children = this.readSequence(this.scope.Selector);
-
- // nothing were consumed
- if (this.getFirstListNode(children) === null) {
- this.error('Selector is expected');
- }
-
- return {
- type: 'Selector',
- loc: this.getLocationFromList(children),
- children
- };
-}
-
-function generate(node) {
- this.children(node);
-}
-
-exports.generate = generate;
-exports.name = name;
-exports.parse = parse;
-exports.structure = structure;
diff --git a/node_modules/css-tree/cjs/syntax/node/SelectorList.cjs b/node_modules/css-tree/cjs/syntax/node/SelectorList.cjs
deleted file mode 100644
index 7ecf09b2..00000000
--- a/node_modules/css-tree/cjs/syntax/node/SelectorList.cjs
+++ /dev/null
@@ -1,43 +0,0 @@
-'use strict';
-
-const types = require('../../tokenizer/types.cjs');
-
-const name = 'SelectorList';
-const walkContext = 'selector';
-const structure = {
- children: [[
- 'Selector',
- 'Raw'
- ]]
-};
-
-function parse() {
- const children = this.createList();
-
- while (!this.eof) {
- children.push(this.Selector());
-
- if (this.tokenType === types.Comma) {
- this.next();
- continue;
- }
-
- break;
- }
-
- return {
- type: 'SelectorList',
- loc: this.getLocationFromList(children),
- children
- };
-}
-
-function generate(node) {
- this.children(node, () => this.token(types.Comma, ','));
-}
-
-exports.generate = generate;
-exports.name = name;
-exports.parse = parse;
-exports.structure = structure;
-exports.walkContext = walkContext;
diff --git a/node_modules/css-tree/cjs/syntax/node/String.cjs b/node_modules/css-tree/cjs/syntax/node/String.cjs
deleted file mode 100644
index 8a7801e5..00000000
--- a/node_modules/css-tree/cjs/syntax/node/String.cjs
+++ /dev/null
@@ -1,26 +0,0 @@
-'use strict';
-
-const string = require('../../utils/string.cjs');
-const types = require('../../tokenizer/types.cjs');
-
-const name = 'String';
-const structure = {
- value: String
-};
-
-function parse() {
- return {
- type: 'String',
- loc: this.getLocation(this.tokenStart, this.tokenEnd),
- value: string.decode(this.consume(types.String))
- };
-}
-
-function generate(node) {
- this.token(types.String, string.encode(node.value));
-}
-
-exports.generate = generate;
-exports.name = name;
-exports.parse = parse;
-exports.structure = structure;
diff --git a/node_modules/css-tree/cjs/syntax/node/StyleSheet.cjs b/node_modules/css-tree/cjs/syntax/node/StyleSheet.cjs
deleted file mode 100644
index 60276185..00000000
--- a/node_modules/css-tree/cjs/syntax/node/StyleSheet.cjs
+++ /dev/null
@@ -1,83 +0,0 @@
-'use strict';
-
-const types = require('../../tokenizer/types.cjs');
-
-const EXCLAMATIONMARK = 0x0021; // U+0021 EXCLAMATION MARK (!)
-
-function consumeRaw(startToken) {
- return this.Raw(startToken, null, false);
-}
-
-const name = 'StyleSheet';
-const walkContext = 'stylesheet';
-const structure = {
- children: [[
- 'Comment',
- 'CDO',
- 'CDC',
- 'Atrule',
- 'Rule',
- 'Raw'
- ]]
-};
-
-function parse() {
- const start = this.tokenStart;
- const children = this.createList();
- let child;
-
- while (!this.eof) {
- switch (this.tokenType) {
- case types.WhiteSpace:
- this.next();
- continue;
-
- case types.Comment:
- // ignore comments except exclamation comments (i.e. /*! .. */) on top level
- if (this.charCodeAt(this.tokenStart + 2) !== EXCLAMATIONMARK) {
- this.next();
- continue;
- }
-
- child = this.Comment();
- break;
-
- case types.CDO: // <!--
- child = this.CDO();
- break;
-
- case types.CDC: // -->
- child = this.CDC();
- break;
-
- // CSS Syntax Module Level 3
- // §2.2 Error handling
- // At the "top level" of a stylesheet, an <at-keyword-token> starts an at-rule.
- case types.AtKeyword:
- child = this.parseWithFallback(this.Atrule, consumeRaw);
- break;
-
- // Anything else starts a qualified rule ...
- default:
- child = this.parseWithFallback(this.Rule, consumeRaw);
- }
-
- children.push(child);
- }
-
- return {
- type: 'StyleSheet',
- loc: this.getLocation(start, this.tokenStart),
- children
- };
-}
-
-function generate(node) {
- this.children(node);
-}
-
-exports.generate = generate;
-exports.name = name;
-exports.parse = parse;
-exports.structure = structure;
-exports.walkContext = walkContext;
diff --git a/node_modules/css-tree/cjs/syntax/node/TypeSelector.cjs b/node_modules/css-tree/cjs/syntax/node/TypeSelector.cjs
deleted file mode 100644
index 1d152703..00000000
--- a/node_modules/css-tree/cjs/syntax/node/TypeSelector.cjs
+++ /dev/null
@@ -1,59 +0,0 @@
-'use strict';
-
-const types = require('../../tokenizer/types.cjs');
-
-const ASTERISK = 0x002A; // U+002A ASTERISK (*)
-const VERTICALLINE = 0x007C; // U+007C VERTICAL LINE (|)
-
-function eatIdentifierOrAsterisk() {
- if (this.tokenType !== types.Ident &&
- this.isDelim(ASTERISK) === false) {
- this.error('Identifier or asterisk is expected');
- }
-
- this.next();
-}
-
-const name = 'TypeSelector';
-const structure = {
- name: String
-};
-
-// ident
-// ident|ident
-// ident|*
-// *
-// *|ident
-// *|*
-// |ident
-// |*
-function parse() {
- const start = this.tokenStart;
-
- if (this.isDelim(VERTICALLINE)) {
- this.next();
- eatIdentifierOrAsterisk.call(this);
- } else {
- eatIdentifierOrAsterisk.call(this);
-
- if (this.isDelim(VERTICALLINE)) {
- this.next();
- eatIdentifierOrAsterisk.call(this);
- }
- }
-
- return {
- type: 'TypeSelector',
- loc: this.getLocation(start, this.tokenStart),
- name: this.substrToCursor(start)
- };
-}
-
-function generate(node) {
- this.tokenize(node.name);
-}
-
-exports.generate = generate;
-exports.name = name;
-exports.parse = parse;
-exports.structure = structure;
diff --git a/node_modules/css-tree/cjs/syntax/node/UnicodeRange.cjs b/node_modules/css-tree/cjs/syntax/node/UnicodeRange.cjs
deleted file mode 100644
index 5585e8fd..00000000
--- a/node_modules/css-tree/cjs/syntax/node/UnicodeRange.cjs
+++ /dev/null
@@ -1,158 +0,0 @@
-'use strict';
-
-const types = require('../../tokenizer/types.cjs');
-const charCodeDefinitions = require('../../tokenizer/char-code-definitions.cjs');
-
-const PLUSSIGN = 0x002B; // U+002B PLUS SIGN (+)
-const HYPHENMINUS = 0x002D; // U+002D HYPHEN-MINUS (-)
-const QUESTIONMARK = 0x003F; // U+003F QUESTION MARK (?)
-
-function eatHexSequence(offset, allowDash) {
- let len = 0;
-
- for (let pos = this.tokenStart + offset; pos < this.tokenEnd; pos++) {
- const code = this.charCodeAt(pos);
-
- if (code === HYPHENMINUS && allowDash && len !== 0) {
- eatHexSequence.call(this, offset + len + 1, false);
- return -1;
- }
-
- if (!charCodeDefinitions.isHexDigit(code)) {
- this.error(
- allowDash && len !== 0
- ? 'Hyphen minus' + (len < 6 ? ' or hex digit' : '') + ' is expected'
- : (len < 6 ? 'Hex digit is expected' : 'Unexpected input'),
- pos
- );
- }
-
- if (++len > 6) {
- this.error('Too many hex digits', pos);
- } }
-
- this.next();
- return len;
-}
-
-function eatQuestionMarkSequence(max) {
- let count = 0;
-
- while (this.isDelim(QUESTIONMARK)) {
- if (++count > max) {
- this.error('Too many question marks');
- }
-
- this.next();
- }
-}
-
-function startsWith(code) {
- if (this.charCodeAt(this.tokenStart) !== code) {
- this.error((code === PLUSSIGN ? 'Plus sign' : 'Hyphen minus') + ' is expected');
- }
-}
-
-// https://drafts.csswg.org/css-syntax/#urange
-// Informally, the <urange> production has three forms:
-// U+0001
-// Defines a range consisting of a single code point, in this case the code point "1".
-// U+0001-00ff
-// Defines a range of codepoints between the first and the second value, in this case
-// the range between "1" and "ff" (255 in decimal) inclusive.
-// U+00??
-// Defines a range of codepoints where the "?" characters range over all hex digits,
-// in this case defining the same as the value U+0000-00ff.
-// In each form, a maximum of 6 digits is allowed for each hexadecimal number (if you treat "?" as a hexadecimal digit).
-//
-// <urange> =
-// u '+' <ident-token> '?'* |
-// u <dimension-token> '?'* |
-// u <number-token> '?'* |
-// u <number-token> <dimension-token> |
-// u <number-token> <number-token> |
-// u '+' '?'+
-function scanUnicodeRange() {
- let hexLength = 0;
-
- switch (this.tokenType) {
- case types.Number:
- // u <number-token> '?'*
- // u <number-token> <dimension-token>
- // u <number-token> <number-token>
- hexLength = eatHexSequence.call(this, 1, true);
-
- if (this.isDelim(QUESTIONMARK)) {
- eatQuestionMarkSequence.call(this, 6 - hexLength);
- break;
- }
-
- if (this.tokenType === types.Dimension ||
- this.tokenType === types.Number) {
- startsWith.call(this, HYPHENMINUS);
- eatHexSequence.call(this, 1, false);
- break;
- }
-
- break;
-
- case types.Dimension:
- // u <dimension-token> '?'*
- hexLength = eatHexSequence.call(this, 1, true);
-
- if (hexLength > 0) {
- eatQuestionMarkSequence.call(this, 6 - hexLength);
- }
-
- break;
-
- default:
- // u '+' <ident-token> '?'*
- // u '+' '?'+
- this.eatDelim(PLUSSIGN);
-
- if (this.tokenType === types.Ident) {
- hexLength = eatHexSequence.call(this, 0, true);
- if (hexLength > 0) {
- eatQuestionMarkSequence.call(this, 6 - hexLength);
- }
- break;
- }
-
- if (this.isDelim(QUESTIONMARK)) {
- this.next();
- eatQuestionMarkSequence.call(this, 5);
- break;
- }
-
- this.error('Hex digit or question mark is expected');
- }
-}
-
-const name = 'UnicodeRange';
-const structure = {
- value: String
-};
-
-function parse() {
- const start = this.tokenStart;
-
- // U or u
- this.eatIdent('u');
- scanUnicodeRange.call(this);
-
- return {
- type: 'UnicodeRange',
- loc: this.getLocation(start, this.tokenStart),
- value: this.substrToCursor(start)
- };
-}
-
-function generate(node) {
- this.tokenize(node.value);
-}
-
-exports.generate = generate;
-exports.name = name;
-exports.parse = parse;
-exports.structure = structure;
diff --git a/node_modules/css-tree/cjs/syntax/node/Url.cjs b/node_modules/css-tree/cjs/syntax/node/Url.cjs
deleted file mode 100644
index 6a394577..00000000
--- a/node_modules/css-tree/cjs/syntax/node/Url.cjs
+++ /dev/null
@@ -1,54 +0,0 @@
-'use strict';
-
-const url = require('../../utils/url.cjs');
-const string = require('../../utils/string.cjs');
-const types = require('../../tokenizer/types.cjs');
-
-const name = 'Url';
-const structure = {
- value: String
-};
-
-// <url-token> | <function-token> <string> )
-function parse() {
- const start = this.tokenStart;
- let value;
-
- switch (this.tokenType) {
- case types.Url:
- value = url.decode(this.consume(types.Url));
- break;
-
- case types.Function:
- if (!this.cmpStr(this.tokenStart, this.tokenEnd, 'url(')) {
- this.error('Function name must be `url`');
- }
-
- this.eat(types.Function);
- this.skipSC();
- value = string.decode(this.consume(types.String));
- this.skipSC();
- if (!this.eof) {
- this.eat(types.RightParenthesis);
- }
- break;
-
- default:
- this.error('Url or Function is expected');
- }
-
- return {
- type: 'Url',
- loc: this.getLocation(start, this.tokenStart),
- value
- };
-}
-
-function generate(node) {
- this.token(types.Url, url.encode(node.value));
-}
-
-exports.generate = generate;
-exports.name = name;
-exports.parse = parse;
-exports.structure = structure;
diff --git a/node_modules/css-tree/cjs/syntax/node/Value.cjs b/node_modules/css-tree/cjs/syntax/node/Value.cjs
deleted file mode 100644
index bdb322e7..00000000
--- a/node_modules/css-tree/cjs/syntax/node/Value.cjs
+++ /dev/null
@@ -1,26 +0,0 @@
-'use strict';
-
-const name = 'Value';
-const structure = {
- children: [[]]
-};
-
-function parse() {
- const start = this.tokenStart;
- const children = this.readSequence(this.scope.Value);
-
- return {
- type: 'Value',
- loc: this.getLocation(start, this.tokenStart),
- children
- };
-}
-
-function generate(node) {
- this.children(node);
-}
-
-exports.generate = generate;
-exports.name = name;
-exports.parse = parse;
-exports.structure = structure;
diff --git a/node_modules/css-tree/cjs/syntax/node/WhiteSpace.cjs b/node_modules/css-tree/cjs/syntax/node/WhiteSpace.cjs
deleted file mode 100644
index 50c19826..00000000
--- a/node_modules/css-tree/cjs/syntax/node/WhiteSpace.cjs
+++ /dev/null
@@ -1,34 +0,0 @@
-'use strict';
-
-const types = require('../../tokenizer/types.cjs');
-
-const SPACE = Object.freeze({
- type: 'WhiteSpace',
- loc: null,
- value: ' '
-});
-
-const name = 'WhiteSpace';
-const structure = {
- value: String
-};
-
-function parse() {
- this.eat(types.WhiteSpace);
- return SPACE;
-
- // return {
- // type: 'WhiteSpace',
- // loc: this.getLocation(this.tokenStart, this.tokenEnd),
- // value: this.consume(WHITESPACE)
- // };
-}
-
-function generate(node) {
- this.token(types.WhiteSpace, node.value);
-}
-
-exports.generate = generate;
-exports.name = name;
-exports.parse = parse;
-exports.structure = structure;
diff --git a/node_modules/css-tree/cjs/syntax/node/common/feature-range.cjs b/node_modules/css-tree/cjs/syntax/node/common/feature-range.cjs
deleted file mode 100644
index 7589b563..00000000
--- a/node_modules/css-tree/cjs/syntax/node/common/feature-range.cjs
+++ /dev/null
@@ -1,112 +0,0 @@
-'use strict';
-
-const types = require('../../../tokenizer/types.cjs');
-
-const LESSTHANSIGN = 60; // <
-const EQUALSIGN = 61; // =
-const GREATERTHANSIGN = 62; // >
-
-const structure = {
- left: ['Identifier', 'Number', 'Dimension', 'Ratio'],
- leftComparison: String,
- middle: ['Identifier', 'Number', 'Dimension', 'Ratio'],
- rightComparison: [String, null],
- right: ['Identifier', 'Number', 'Dimension', 'Ratio', null]
-};
-
-function readTerm() {
- this.skipSC();
-
- switch (this.tokenType) {
- case types.Number:
- if (this.lookupNonWSType(1) === types.Delim) {
- return this.Ratio();
- } else {
- return this.Number();
- }
-
- case types.Dimension:
- return this.Dimension();
-
- case types.Ident:
- return this.Identifier();
-
- default:
- this.error('Number, dimension, ratio or identifier is expected');
- }
-}
-
-function readComparison(expectColon) {
- this.skipSC();
-
- if (this.isDelim(LESSTHANSIGN) ||
- this.isDelim(GREATERTHANSIGN)) {
- const value = this.source[this.tokenStart];
-
- this.next();
-
- if (this.isDelim(EQUALSIGN)) {
- this.next();
- return value + '=';
- }
-
- return value;
- }
-
- if (this.isDelim(EQUALSIGN)) {
- return '=';
- }
-
- this.error(`Expected ${expectColon ? '":", ' : ''}"<", ">", "=" or ")"`);
-}
-
-function createParse(type) {
- return function parse() {
- const start = this.tokenStart;
-
- this.skipSC();
- this.eat(types.LeftParenthesis);
-
- const left = readTerm.call(this);
- const leftComparison = readComparison.call(this, left.type === 'Identifier');
- const middle = readTerm.call(this);
- let rightComparison = null;
- let right = null;
-
- if (this.lookupNonWSType(0) !== types.RightParenthesis) {
- rightComparison = readComparison.call(this);
- right = readTerm.call(this);
- }
-
- this.skipSC();
- this.eat(types.RightParenthesis);
-
- return {
- type,
- loc: this.getLocation(start, this.tokenStart),
- left,
- leftComparison,
- middle,
- rightComparison,
- right
- };
- };
-}
-
-function generate(node) {
- this.token(types.LeftParenthesis, '(');
- this.node(node.left);
- this.tokenize(node.leftComparison);
- this.node(node.middle);
-
- if (node.right) {
- this.tokenize(node.rightComparison);
- this.node(node.right);
- }
-
- this.token(types.RightParenthesis, ')');
-}
-
-exports.createParse = createParse;
-exports.generate = generate;
-exports.structure = structure;
diff --git a/node_modules/css-tree/cjs/syntax/node/common/feature.cjs b/node_modules/css-tree/cjs/syntax/node/common/feature.cjs
deleted file mode 100644
index fa5de4ed..00000000
--- a/node_modules/css-tree/cjs/syntax/node/common/feature.cjs
+++ /dev/null
@@ -1,76 +0,0 @@
-'use strict';
-
-const types = require('../../../tokenizer/types.cjs');
-
-const structure = {
- name: String,
- value: ['Identifier', 'Number', 'Dimension', 'Ratio', null]
-};
-
-function createParse(type) {
- return function parse() {
- const start = this.tokenStart;
- let name;
- let value = null;
-
- this.eat(types.LeftParenthesis);
- this.skipSC();
-
- name = this.consume(types.Ident);
- this.skipSC();
-
- if (this.tokenType !== types.RightParenthesis) {
- this.eat(types.Colon);
- this.skipSC();
-
- switch (this.tokenType) {
- case types.Number:
- if (this.lookupNonWSType(1) === types.Delim) {
- value = this.Ratio();
- } else {
- value = this.Number();
- }
-
- break;
-
- case types.Dimension:
- value = this.Dimension();
- break;
-
- case types.Ident:
- value = this.Identifier();
- break;
-
- default:
- this.error('Number, dimension, ratio or identifier is expected');
- }
-
- this.skipSC();
- }
-
- this.eat(types.RightParenthesis);
-
- return {
- type,
- loc: this.getLocation(start, this.tokenStart),
- name,
- value
- };
- };
-}
-
-function generate(node) {
- this.token(types.LeftParenthesis, '(');
- this.token(types.Ident, node.name);
-
- if (node.value !== null) {
- this.token(types.Colon, ':');
- this.node(node.value);
- }
-
- this.token(types.RightParenthesis, ')');
-}
-
-exports.createParse = createParse;
-exports.generate = generate;
-exports.structure = structure;
diff --git a/node_modules/css-tree/cjs/syntax/node/index-generate.cjs b/node_modules/css-tree/cjs/syntax/node/index-generate.cjs
deleted file mode 100644
index 4af11ccb..00000000
--- a/node_modules/css-tree/cjs/syntax/node/index-generate.cjs
+++ /dev/null
@@ -1,87 +0,0 @@
-'use strict';
-
-const AnPlusB = require('./AnPlusB.cjs');
-const Atrule = require('./Atrule.cjs');
-const AtrulePrelude = require('./AtrulePrelude.cjs');
-const AttributeSelector = require('./AttributeSelector.cjs');
-const Block = require('./Block.cjs');
-const Brackets = require('./Brackets.cjs');
-const CDC = require('./CDC.cjs');
-const CDO = require('./CDO.cjs');
-const ClassSelector = require('./ClassSelector.cjs');
-const Combinator = require('./Combinator.cjs');
-const Comment = require('./Comment.cjs');
-const Declaration = require('./Declaration.cjs');
-const DeclarationList = require('./DeclarationList.cjs');
-const Dimension = require('./Dimension.cjs');
-const Function = require('./Function.cjs');
-const Hash = require('./Hash.cjs');
-const Identifier = require('./Identifier.cjs');
-const IdSelector = require('./IdSelector.cjs');
-const MediaFeature = require('./MediaFeature.cjs');
-const MediaQuery = require('./MediaQuery.cjs');
-const MediaQueryList = require('./MediaQueryList.cjs');
-const NestingSelector = require('./NestingSelector.cjs');
-const Nth = require('./Nth.cjs');
-const Number = require('./Number.cjs');
-const Operator = require('./Operator.cjs');
-const Parentheses = require('./Parentheses.cjs');
-const Percentage = require('./Percentage.cjs');
-const PseudoClassSelector = require('./PseudoClassSelector.cjs');
-const PseudoElementSelector = require('./PseudoElementSelector.cjs');
-const Ratio = require('./Ratio.cjs');
-const Raw = require('./Raw.cjs');
-const Rule = require('./Rule.cjs');
-const Selector = require('./Selector.cjs');
-const SelectorList = require('./SelectorList.cjs');
-const String = require('./String.cjs');
-const StyleSheet = require('./StyleSheet.cjs');
-const TypeSelector = require('./TypeSelector.cjs');
-const UnicodeRange = require('./UnicodeRange.cjs');
-const Url = require('./Url.cjs');
-const Value = require('./Value.cjs');
-const WhiteSpace = require('./WhiteSpace.cjs');
-
-
-
-exports.AnPlusB = AnPlusB.generate;
-exports.Atrule = Atrule.generate;
-exports.AtrulePrelude = AtrulePrelude.generate;
-exports.AttributeSelector = AttributeSelector.generate;
-exports.Block = Block.generate;
-exports.Brackets = Brackets.generate;
-exports.CDC = CDC.generate;
-exports.CDO = CDO.generate;
-exports.ClassSelector = ClassSelector.generate;
-exports.Combinator = Combinator.generate;
-exports.Comment = Comment.generate;
-exports.Declaration = Declaration.generate;
-exports.DeclarationList = DeclarationList.generate;
-exports.Dimension = Dimension.generate;
-exports.Function = Function.generate;
-exports.Hash = Hash.generate;
-exports.Identifier = Identifier.generate;
-exports.IdSelector = IdSelector.generate;
-exports.MediaFeature = MediaFeature.generate;
-exports.MediaQuery = MediaQuery.generate;
-exports.MediaQueryList = MediaQueryList.generate;
-exports.NestingSelector = NestingSelector.generate;
-exports.Nth = Nth.generate;
-exports.Number = Number.generate;
-exports.Operator = Operator.generate;
-exports.Parentheses = Parentheses.generate;
-exports.Percentage = Percentage.generate;
-exports.PseudoClassSelector = PseudoClassSelector.generate;
-exports.PseudoElementSelector = PseudoElementSelector.generate;
-exports.Ratio = Ratio.generate;
-exports.Raw = Raw.generate;
-exports.Rule = Rule.generate;
-exports.Selector = Selector.generate;
-exports.SelectorList = SelectorList.generate;
-exports.String = String.generate;
-exports.StyleSheet = StyleSheet.generate;
-exports.TypeSelector = TypeSelector.generate;
-exports.UnicodeRange = UnicodeRange.generate;
-exports.Url = Url.generate;
-exports.Value = Value.generate;
-exports.WhiteSpace = WhiteSpace.generate;
diff --git a/node_modules/css-tree/cjs/syntax/node/index-parse-selector.cjs b/node_modules/css-tree/cjs/syntax/node/index-parse-selector.cjs
deleted file mode 100644
index 92c4934e..00000000
--- a/node_modules/css-tree/cjs/syntax/node/index-parse-selector.cjs
+++ /dev/null
@@ -1,37 +0,0 @@
-'use strict';
-
-const AnPlusB = require('./AnPlusB.cjs');
-const AttributeSelector = require('./AttributeSelector.cjs');
-const ClassSelector = require('./ClassSelector.cjs');
-const Combinator = require('./Combinator.cjs');
-const Identifier = require('./Identifier.cjs');
-const IdSelector = require('./IdSelector.cjs');
-const NestingSelector = require('./NestingSelector.cjs');
-const Nth = require('./Nth.cjs');
-const Percentage = require('./Percentage.cjs');
-const PseudoClassSelector = require('./PseudoClassSelector.cjs');
-const PseudoElementSelector = require('./PseudoElementSelector.cjs');
-const Raw = require('./Raw.cjs');
-const Selector = require('./Selector.cjs');
-const SelectorList = require('./SelectorList.cjs');
-const String = require('./String.cjs');
-const TypeSelector = require('./TypeSelector.cjs');
-
-
-
-exports.AnPlusB = AnPlusB.parse;
-exports.AttributeSelector = AttributeSelector.parse;
-exports.ClassSelector = ClassSelector.parse;
-exports.Combinator = Combinator.parse;
-exports.Identifier = Identifier.parse;
-exports.IdSelector = IdSelector.parse;
-exports.NestingSelector = NestingSelector.parse;
-exports.Nth = Nth.parse;
-exports.Percentage = Percentage.parse;
-exports.PseudoClassSelector = PseudoClassSelector.parse;
-exports.PseudoElementSelector = PseudoElementSelector.parse;
-exports.Raw = Raw.parse;
-exports.Selector = Selector.parse;
-exports.SelectorList = SelectorList.parse;
-exports.String = String.parse;
-exports.TypeSelector = TypeSelector.parse;
diff --git a/node_modules/css-tree/cjs/syntax/node/index-parse.cjs b/node_modules/css-tree/cjs/syntax/node/index-parse.cjs
deleted file mode 100644
index 60e73043..00000000
--- a/node_modules/css-tree/cjs/syntax/node/index-parse.cjs
+++ /dev/null
@@ -1,87 +0,0 @@
-'use strict';
-
-const AnPlusB = require('./AnPlusB.cjs');
-const Atrule = require('./Atrule.cjs');
-const AtrulePrelude = require('./AtrulePrelude.cjs');
-const AttributeSelector = require('./AttributeSelector.cjs');
-const Block = require('./Block.cjs');
-const Brackets = require('./Brackets.cjs');
-const CDC = require('./CDC.cjs');
-const CDO = require('./CDO.cjs');
-const ClassSelector = require('./ClassSelector.cjs');
-const Combinator = require('./Combinator.cjs');
-const Comment = require('./Comment.cjs');
-const Declaration = require('./Declaration.cjs');
-const DeclarationList = require('./DeclarationList.cjs');
-const Dimension = require('./Dimension.cjs');
-const Function = require('./Function.cjs');
-const Hash = require('./Hash.cjs');
-const Identifier = require('./Identifier.cjs');
-const IdSelector = require('./IdSelector.cjs');
-const MediaFeature = require('./MediaFeature.cjs');
-const MediaQuery = require('./MediaQuery.cjs');
-const MediaQueryList = require('./MediaQueryList.cjs');
-const NestingSelector = require('./NestingSelector.cjs');
-const Nth = require('./Nth.cjs');
-const Number = require('./Number.cjs');
-const Operator = require('./Operator.cjs');
-const Parentheses = require('./Parentheses.cjs');
-const Percentage = require('./Percentage.cjs');
-const PseudoClassSelector = require('./PseudoClassSelector.cjs');
-const PseudoElementSelector = require('./PseudoElementSelector.cjs');
-const Ratio = require('./Ratio.cjs');
-const Raw = require('./Raw.cjs');
-const Rule = require('./Rule.cjs');
-const Selector = require('./Selector.cjs');
-const SelectorList = require('./SelectorList.cjs');
-const String = require('./String.cjs');
-const StyleSheet = require('./StyleSheet.cjs');
-const TypeSelector = require('./TypeSelector.cjs');
-const UnicodeRange = require('./UnicodeRange.cjs');
-const Url = require('./Url.cjs');
-const Value = require('./Value.cjs');
-const WhiteSpace = require('./WhiteSpace.cjs');
-
-
-
-exports.AnPlusB = AnPlusB.parse;
-exports.Atrule = Atrule.parse;
-exports.AtrulePrelude = AtrulePrelude.parse;
-exports.AttributeSelector = AttributeSelector.parse;
-exports.Block = Block.parse;
-exports.Brackets = Brackets.parse;
-exports.CDC = CDC.parse;
-exports.CDO = CDO.parse;
-exports.ClassSelector = ClassSelector.parse;
-exports.Combinator = Combinator.parse;
-exports.Comment = Comment.parse;
-exports.Declaration = Declaration.parse;
-exports.DeclarationList = DeclarationList.parse;
-exports.Dimension = Dimension.parse;
-exports.Function = Function.parse;
-exports.Hash = Hash.parse;
-exports.Identifier = Identifier.parse;
-exports.IdSelector = IdSelector.parse;
-exports.MediaFeature = MediaFeature.parse;
-exports.MediaQuery = MediaQuery.parse;
-exports.MediaQueryList = MediaQueryList.parse;
-exports.NestingSelector = NestingSelector.parse;
-exports.Nth = Nth.parse;
-exports.Number = Number.parse;
-exports.Operator = Operator.parse;
-exports.Parentheses = Parentheses.parse;
-exports.Percentage = Percentage.parse;
-exports.PseudoClassSelector = PseudoClassSelector.parse;
-exports.PseudoElementSelector = PseudoElementSelector.parse;
-exports.Ratio = Ratio.parse;
-exports.Raw = Raw.parse;
-exports.Rule = Rule.parse;
-exports.Selector = Selector.parse;
-exports.SelectorList = SelectorList.parse;
-exports.String = String.parse;
-exports.StyleSheet = StyleSheet.parse;
-exports.TypeSelector = TypeSelector.parse;
-exports.UnicodeRange = UnicodeRange.parse;
-exports.Url = Url.parse;
-exports.Value = Value.parse;
-exports.WhiteSpace = WhiteSpace.parse;
diff --git a/node_modules/css-tree/cjs/syntax/node/index.cjs b/node_modules/css-tree/cjs/syntax/node/index.cjs
deleted file mode 100644
index 45c10a66..00000000
--- a/node_modules/css-tree/cjs/syntax/node/index.cjs
+++ /dev/null
@@ -1,87 +0,0 @@
-'use strict';
-
-const AnPlusB = require('./AnPlusB.cjs');
-const Atrule = require('./Atrule.cjs');
-const AtrulePrelude = require('./AtrulePrelude.cjs');
-const AttributeSelector = require('./AttributeSelector.cjs');
-const Block = require('./Block.cjs');
-const Brackets = require('./Brackets.cjs');
-const CDC = require('./CDC.cjs');
-const CDO = require('./CDO.cjs');
-const ClassSelector = require('./ClassSelector.cjs');
-const Combinator = require('./Combinator.cjs');
-const Comment = require('./Comment.cjs');
-const Declaration = require('./Declaration.cjs');
-const DeclarationList = require('./DeclarationList.cjs');
-const Dimension = require('./Dimension.cjs');
-const Function = require('./Function.cjs');
-const Hash = require('./Hash.cjs');
-const Identifier = require('./Identifier.cjs');
-const IdSelector = require('./IdSelector.cjs');
-const MediaFeature = require('./MediaFeature.cjs');
-const MediaQuery = require('./MediaQuery.cjs');
-const MediaQueryList = require('./MediaQueryList.cjs');
-const NestingSelector = require('./NestingSelector.cjs');
-const Nth = require('./Nth.cjs');
-const Number$1 = require('./Number.cjs');
-const Operator = require('./Operator.cjs');
-const Parentheses = require('./Parentheses.cjs');
-const Percentage = require('./Percentage.cjs');
-const PseudoClassSelector = require('./PseudoClassSelector.cjs');
-const PseudoElementSelector = require('./PseudoElementSelector.cjs');
-const Ratio = require('./Ratio.cjs');
-const Raw = require('./Raw.cjs');
-const Rule = require('./Rule.cjs');
-const Selector = require('./Selector.cjs');
-const SelectorList = require('./SelectorList.cjs');
-const String$1 = require('./String.cjs');
-const StyleSheet = require('./StyleSheet.cjs');
-const TypeSelector = require('./TypeSelector.cjs');
-const UnicodeRange = require('./UnicodeRange.cjs');
-const Url = require('./Url.cjs');
-const Value = require('./Value.cjs');
-const WhiteSpace = require('./WhiteSpace.cjs');
-
-
-
-exports.AnPlusB = AnPlusB;
-exports.Atrule = Atrule;
-exports.AtrulePrelude = AtrulePrelude;
-exports.AttributeSelector = AttributeSelector;
-exports.Block = Block;
-exports.Brackets = Brackets;
-exports.CDC = CDC;
-exports.CDO = CDO;
-exports.ClassSelector = ClassSelector;
-exports.Combinator = Combinator;
-exports.Comment = Comment;
-exports.Declaration = Declaration;
-exports.DeclarationList = DeclarationList;
-exports.Dimension = Dimension;
-exports.Function = Function;
-exports.Hash = Hash;
-exports.Identifier = Identifier;
-exports.IdSelector = IdSelector;
-exports.MediaFeature = MediaFeature;
-exports.MediaQuery = MediaQuery;
-exports.MediaQueryList = MediaQueryList;
-exports.NestingSelector = NestingSelector;
-exports.Nth = Nth;
-exports.Number = Number$1;
-exports.Operator = Operator;
-exports.Parentheses = Parentheses;
-exports.Percentage = Percentage;
-exports.PseudoClassSelector = PseudoClassSelector;
-exports.PseudoElementSelector = PseudoElementSelector;
-exports.Ratio = Ratio;
-exports.Raw = Raw;
-exports.Rule = Rule;
-exports.Selector = Selector;
-exports.SelectorList = SelectorList;
-exports.String = String$1;
-exports.StyleSheet = StyleSheet;
-exports.TypeSelector = TypeSelector;
-exports.UnicodeRange = UnicodeRange;
-exports.Url = Url;
-exports.Value = Value;
-exports.WhiteSpace = WhiteSpace;
diff --git a/node_modules/css-tree/cjs/syntax/pseudo/index.cjs b/node_modules/css-tree/cjs/syntax/pseudo/index.cjs
deleted file mode 100644
index 760905d1..00000000
--- a/node_modules/css-tree/cjs/syntax/pseudo/index.cjs
+++ /dev/null
@@ -1,54 +0,0 @@
-'use strict';
-
-const selectorList = {
- parse() {
- return this.createSingleNodeList(
- this.SelectorList()
- );
- }
-};
-
-const selector = {
- parse() {
- return this.createSingleNodeList(
- this.Selector()
- );
- }
-};
-
-const identList = {
- parse() {
- return this.createSingleNodeList(
- this.Identifier()
- );
- }
-};
-
-const nth = {
- parse() {
- return this.createSingleNodeList(
- this.Nth()
- );
- }
-};
-
-const pseudo = {
- 'dir': identList,
- 'has': selectorList,
- 'lang': identList,
- 'matches': selectorList,
- 'is': selectorList,
- '-moz-any': selectorList,
- '-webkit-any': selectorList,
- 'where': selectorList,
- 'not': selectorList,
- 'nth-child': nth,
- 'nth-last-child': nth,
- 'nth-last-of-type': nth,
- 'nth-of-type': nth,
- 'slotted': selector,
- 'host': selector,
- 'host-context': selector
-};
-
-module.exports = pseudo;
diff --git a/node_modules/css-tree/cjs/syntax/scope/atrulePrelude.cjs b/node_modules/css-tree/cjs/syntax/scope/atrulePrelude.cjs
deleted file mode 100644
index 65a15447..00000000
--- a/node_modules/css-tree/cjs/syntax/scope/atrulePrelude.cjs
+++ /dev/null
@@ -1,9 +0,0 @@
-'use strict';
-
-const _default = require('./default.cjs');
-
-const atrulePrelude = {
- getNode: _default
-};
-
-module.exports = atrulePrelude;
diff --git a/node_modules/css-tree/cjs/syntax/scope/default.cjs b/node_modules/css-tree/cjs/syntax/scope/default.cjs
deleted file mode 100644
index 43b5c188..00000000
--- a/node_modules/css-tree/cjs/syntax/scope/default.cjs
+++ /dev/null
@@ -1,76 +0,0 @@
-'use strict';
-
-const types = require('../../tokenizer/types.cjs');
-
-const NUMBERSIGN = 0x0023; // U+0023 NUMBER SIGN (#)
-const ASTERISK = 0x002A; // U+002A ASTERISK (*)
-const PLUSSIGN = 0x002B; // U+002B PLUS SIGN (+)
-const HYPHENMINUS = 0x002D; // U+002D HYPHEN-MINUS (-)
-const SOLIDUS = 0x002F; // U+002F SOLIDUS (/)
-const U = 0x0075; // U+0075 LATIN SMALL LETTER U (u)
-
-function defaultRecognizer(context) {
- switch (this.tokenType) {
- case types.Hash:
- return this.Hash();
-
- case types.Comma:
- return this.Operator();
-
- case types.LeftParenthesis:
- return this.Parentheses(this.readSequence, context.recognizer);
-
- case types.LeftSquareBracket:
- return this.Brackets(this.readSequence, context.recognizer);
-
- case types.String:
- return this.String();
-
- case types.Dimension:
- return this.Dimension();
-
- case types.Percentage:
- return this.Percentage();
-
- case types.Number:
- return this.Number();
-
- case types.Function:
- return this.cmpStr(this.tokenStart, this.tokenEnd, 'url(')
- ? this.Url()
- : this.Function(this.readSequence, context.recognizer);
-
- case types.Url:
- return this.Url();
-
- case types.Ident:
- // check for unicode range, it should start with u+ or U+
- if (this.cmpChar(this.tokenStart, U) &&
- this.cmpChar(this.tokenStart + 1, PLUSSIGN)) {
- return this.UnicodeRange();
- } else {
- return this.Identifier();
- }
-
- case types.Delim: {
- const code = this.charCodeAt(this.tokenStart);
-
- if (code === SOLIDUS ||
- code === ASTERISK ||
- code === PLUSSIGN ||
- code === HYPHENMINUS) {
- return this.Operator(); // TODO: replace with Delim
- }
-
- // TODO: produce a node with Delim node type
-
- if (code === NUMBERSIGN) {
- this.error('Hex or identifier is expected', this.tokenStart + 1);
- }
-
- break;
- }
- }
-}
-
-module.exports = defaultRecognizer;
diff --git a/node_modules/css-tree/cjs/syntax/scope/index.cjs b/node_modules/css-tree/cjs/syntax/scope/index.cjs
deleted file mode 100644
index 78391281..00000000
--- a/node_modules/css-tree/cjs/syntax/scope/index.cjs
+++ /dev/null
@@ -1,11 +0,0 @@
-'use strict';
-
-const atrulePrelude = require('./atrulePrelude.cjs');
-const selector = require('./selector.cjs');
-const value = require('./value.cjs');
-
-
-
-exports.AtrulePrelude = atrulePrelude;
-exports.Selector = selector;
-exports.Value = value;
diff --git a/node_modules/css-tree/cjs/syntax/scope/selector.cjs b/node_modules/css-tree/cjs/syntax/scope/selector.cjs
deleted file mode 100644
index 6b915aeb..00000000
--- a/node_modules/css-tree/cjs/syntax/scope/selector.cjs
+++ /dev/null
@@ -1,88 +0,0 @@
-'use strict';
-
-const types = require('../../tokenizer/types.cjs');
-
-const NUMBERSIGN = 0x0023; // U+0023 NUMBER SIGN (#)
-const AMPERSAND = 0x0026; // U+0026 AMPERSAND (&)
-const ASTERISK = 0x002A; // U+002A ASTERISK (*)
-const PLUSSIGN = 0x002B; // U+002B PLUS SIGN (+)
-const SOLIDUS = 0x002F; // U+002F SOLIDUS (/)
-const FULLSTOP = 0x002E; // U+002E FULL STOP (.)
-const GREATERTHANSIGN = 0x003E; // U+003E GREATER-THAN SIGN (>)
-const VERTICALLINE = 0x007C; // U+007C VERTICAL LINE (|)
-const TILDE = 0x007E; // U+007E TILDE (~)
-
-function onWhiteSpace(next, children) {
- if (children.last !== null && children.last.type !== 'Combinator' &&
- next !== null && next.type !== 'Combinator') {
- children.push({ // FIXME: this.Combinator() should be used instead
- type: 'Combinator',
- loc: null,
- name: ' '
- });
- }
-}
-
-function getNode() {
- switch (this.tokenType) {
- case types.LeftSquareBracket:
- return this.AttributeSelector();
-
- case types.Hash:
- return this.IdSelector();
-
- case types.Colon:
- if (this.lookupType(1) === types.Colon) {
- return this.PseudoElementSelector();
- } else {
- return this.PseudoClassSelector();
- }
-
- case types.Ident:
- return this.TypeSelector();
-
- case types.Number:
- case types.Percentage:
- return this.Percentage();
-
- case types.Dimension:
- // throws when .123ident
- if (this.charCodeAt(this.tokenStart) === FULLSTOP) {
- this.error('Identifier is expected', this.tokenStart + 1);
- }
- break;
-
- case types.Delim: {
- const code = this.charCodeAt(this.tokenStart);
-
- switch (code) {
- case PLUSSIGN:
- case GREATERTHANSIGN:
- case TILDE:
- case SOLIDUS: // /deep/
- return this.Combinator();
-
- case FULLSTOP:
- return this.ClassSelector();
-
- case ASTERISK:
- case VERTICALLINE:
- return this.TypeSelector();
-
- case NUMBERSIGN:
- return this.IdSelector();
-
- case AMPERSAND:
- return this.NestingSelector();
- }
-
- break;
- }
- }
-}
-const Selector = {
- onWhiteSpace,
- getNode
-};
-
-module.exports = Selector;
diff --git a/node_modules/css-tree/cjs/syntax/scope/value.cjs b/node_modules/css-tree/cjs/syntax/scope/value.cjs
deleted file mode 100644
index a9900a1c..00000000
--- a/node_modules/css-tree/cjs/syntax/scope/value.cjs
+++ /dev/null
@@ -1,29 +0,0 @@
-'use strict';
-
-const _default = require('./default.cjs');
-const expression = require('../function/expression.cjs');
-const _var = require('../function/var.cjs');
-
-function isPlusMinusOperator(node) {
- return (
- node !== null &&
- node.type === 'Operator' &&
- (node.value[node.value.length - 1] === '-' || node.value[node.value.length - 1] === '+')
- );
-}
-
-const value = {
- getNode: _default,
- onWhiteSpace(next, children) {
- if (isPlusMinusOperator(next)) {
- next.value = ' ' + next.value;
- }
- if (isPlusMinusOperator(children.last)) {
- children.last.value += ' ';
- }
- },
- 'expression': expression,
- 'var': _var
-};
-
-module.exports = value;
diff --git a/node_modules/css-tree/cjs/tokenizer/OffsetToLocation.cjs b/node_modules/css-tree/cjs/tokenizer/OffsetToLocation.cjs
deleted file mode 100644
index 2875466b..00000000
--- a/node_modules/css-tree/cjs/tokenizer/OffsetToLocation.cjs
+++ /dev/null
@@ -1,91 +0,0 @@
-'use strict';
-
-const adoptBuffer = require('./adopt-buffer.cjs');
-const charCodeDefinitions = require('./char-code-definitions.cjs');
-
-const N = 10;
-const F = 12;
-const R = 13;
-
-function computeLinesAndColumns(host) {
- const source = host.source;
- const sourceLength = source.length;
- const startOffset = source.length > 0 ? charCodeDefinitions.isBOM(source.charCodeAt(0)) : 0;
- const lines = adoptBuffer.adoptBuffer(host.lines, sourceLength);
- const columns = adoptBuffer.adoptBuffer(host.columns, sourceLength);
- let line = host.startLine;
- let column = host.startColumn;
-
- for (let i = startOffset; i < sourceLength; i++) {
- const code = source.charCodeAt(i);
-
- lines[i] = line;
- columns[i] = column++;
-
- if (code === N || code === R || code === F) {
- if (code === R && i + 1 < sourceLength && source.charCodeAt(i + 1) === N) {
- i++;
- lines[i] = line;
- columns[i] = column;
- }
-
- line++;
- column = 1;
- }
- }
-
- lines[sourceLength] = line;
- columns[sourceLength] = column;
-
- host.lines = lines;
- host.columns = columns;
- host.computed = true;
-}
-
-class OffsetToLocation {
- constructor() {
- this.lines = null;
- this.columns = null;
- this.computed = false;
- }
- setSource(source, startOffset = 0, startLine = 1, startColumn = 1) {
- this.source = source;
- this.startOffset = startOffset;
- this.startLine = startLine;
- this.startColumn = startColumn;
- this.computed = false;
- }
- getLocation(offset, filename) {
- if (!this.computed) {
- computeLinesAndColumns(this);
- }
-
- return {
- source: filename,
- offset: this.startOffset + offset,
- line: this.lines[offset],
- column: this.columns[offset]
- };
- }
- getLocationRange(start, end, filename) {
- if (!this.computed) {
- computeLinesAndColumns(this);
- }
-
- return {
- source: filename,
- start: {
- offset: this.startOffset + start,
- line: this.lines[start],
- column: this.columns[start]
- },
- end: {
- offset: this.startOffset + end,
- line: this.lines[end],
- column: this.columns[end]
- }
- };
- }
-}
-
-exports.OffsetToLocation = OffsetToLocation;
diff --git a/node_modules/css-tree/cjs/tokenizer/TokenStream.cjs b/node_modules/css-tree/cjs/tokenizer/TokenStream.cjs
deleted file mode 100644
index 42d6f906..00000000
--- a/node_modules/css-tree/cjs/tokenizer/TokenStream.cjs
+++ /dev/null
@@ -1,264 +0,0 @@
-'use strict';
-
-const adoptBuffer = require('./adopt-buffer.cjs');
-const utils = require('./utils.cjs');
-const names = require('./names.cjs');
-const types = require('./types.cjs');
-
-const OFFSET_MASK = 0x00FFFFFF;
-const TYPE_SHIFT = 24;
-const balancePair = new Map([
- [types.Function, types.RightParenthesis],
- [types.LeftParenthesis, types.RightParenthesis],
- [types.LeftSquareBracket, types.RightSquareBracket],
- [types.LeftCurlyBracket, types.RightCurlyBracket]
-]);
-
-class TokenStream {
- constructor(source, tokenize) {
- this.setSource(source, tokenize);
- }
- reset() {
- this.eof = false;
- this.tokenIndex = -1;
- this.tokenType = 0;
- this.tokenStart = this.firstCharOffset;
- this.tokenEnd = this.firstCharOffset;
- }
- setSource(source = '', tokenize = () => {}) {
- source = String(source || '');
-
- const sourceLength = source.length;
- const offsetAndType = adoptBuffer.adoptBuffer(this.offsetAndType, source.length + 1); // +1 because of eof-token
- const balance = adoptBuffer.adoptBuffer(this.balance, source.length + 1);
- let tokenCount = 0;
- let balanceCloseType = 0;
- let balanceStart = 0;
- let firstCharOffset = -1;
-
- // capture buffers
- this.offsetAndType = null;
- this.balance = null;
-
- tokenize(source, (type, start, end) => {
- switch (type) {
- default:
- balance[tokenCount] = sourceLength;
- break;
-
- case balanceCloseType: {
- let balancePrev = balanceStart & OFFSET_MASK;
- balanceStart = balance[balancePrev];
- balanceCloseType = balanceStart >> TYPE_SHIFT;
- balance[tokenCount] = balancePrev;
- balance[balancePrev++] = tokenCount;
- for (; balancePrev < tokenCount; balancePrev++) {
- if (balance[balancePrev] === sourceLength) {
- balance[balancePrev] = tokenCount;
- }
- }
- break;
- }
-
- case types.LeftParenthesis:
- case types.Function:
- case types.LeftSquareBracket:
- case types.LeftCurlyBracket:
- balance[tokenCount] = balanceStart;
- balanceCloseType = balancePair.get(type);
- balanceStart = (balanceCloseType << TYPE_SHIFT) | tokenCount;
- break;
- }
-
- offsetAndType[tokenCount++] = (type << TYPE_SHIFT) | end;
- if (firstCharOffset === -1) {
- firstCharOffset = start;
- }
- });
-
- // finalize buffers
- offsetAndType[tokenCount] = (types.EOF << TYPE_SHIFT) | sourceLength; // <EOF-token>
- balance[tokenCount] = sourceLength;
- balance[sourceLength] = sourceLength; // prevents false positive balance match with any token
- while (balanceStart !== 0) {
- const balancePrev = balanceStart & OFFSET_MASK;
- balanceStart = balance[balancePrev];
- balance[balancePrev] = sourceLength;
- }
-
- this.source = source;
- this.firstCharOffset = firstCharOffset === -1 ? 0 : firstCharOffset;
- this.tokenCount = tokenCount;
- this.offsetAndType = offsetAndType;
- this.balance = balance;
-
- this.reset();
- this.next();
- }
-
- lookupType(offset) {
- offset += this.tokenIndex;
-
- if (offset < this.tokenCount) {
- return this.offsetAndType[offset] >> TYPE_SHIFT;
- }
-
- return types.EOF;
- }
- lookupOffset(offset) {
- offset += this.tokenIndex;
-
- if (offset < this.tokenCount) {
- return this.offsetAndType[offset - 1] & OFFSET_MASK;
- }
-
- return this.source.length;
- }
- lookupValue(offset, referenceStr) {
- offset += this.tokenIndex;
-
- if (offset < this.tokenCount) {
- return utils.cmpStr(
- this.source,
- this.offsetAndType[offset - 1] & OFFSET_MASK,
- this.offsetAndType[offset] & OFFSET_MASK,
- referenceStr
- );
- }
-
- return false;
- }
- getTokenStart(tokenIndex) {
- if (tokenIndex === this.tokenIndex) {
- return this.tokenStart;
- }
-
- if (tokenIndex > 0) {
- return tokenIndex < this.tokenCount
- ? this.offsetAndType[tokenIndex - 1] & OFFSET_MASK
- : this.offsetAndType[this.tokenCount] & OFFSET_MASK;
- }
-
- return this.firstCharOffset;
- }
- substrToCursor(start) {
- return this.source.substring(start, this.tokenStart);
- }
-
- isBalanceEdge(pos) {
- return this.balance[this.tokenIndex] < pos;
- }
- isDelim(code, offset) {
- if (offset) {
- return (
- this.lookupType(offset) === types.Delim &&
- this.source.charCodeAt(this.lookupOffset(offset)) === code
- );
- }
-
- return (
- this.tokenType === types.Delim &&
- this.source.charCodeAt(this.tokenStart) === code
- );
- }
-
- skip(tokenCount) {
- let next = this.tokenIndex + tokenCount;
-
- if (next < this.tokenCount) {
- this.tokenIndex = next;
- this.tokenStart = this.offsetAndType[next - 1] & OFFSET_MASK;
- next = this.offsetAndType[next];
- this.tokenType = next >> TYPE_SHIFT;
- this.tokenEnd = next & OFFSET_MASK;
- } else {
- this.tokenIndex = this.tokenCount;
- this.next();
- }
- }
- next() {
- let next = this.tokenIndex + 1;
-
- if (next < this.tokenCount) {
- this.tokenIndex = next;
- this.tokenStart = this.tokenEnd;
- next = this.offsetAndType[next];
- this.tokenType = next >> TYPE_SHIFT;
- this.tokenEnd = next & OFFSET_MASK;
- } else {
- this.eof = true;
- this.tokenIndex = this.tokenCount;
- this.tokenType = types.EOF;
- this.tokenStart = this.tokenEnd = this.source.length;
- }
- }
- skipSC() {
- while (this.tokenType === types.WhiteSpace || this.tokenType === types.Comment) {
- this.next();
- }
- }
- skipUntilBalanced(startToken, stopConsume) {
- let cursor = startToken;
- let balanceEnd;
- let offset;
-
- loop:
- for (; cursor < this.tokenCount; cursor++) {
- balanceEnd = this.balance[cursor];
-
- // stop scanning on balance edge that points to offset before start token
- if (balanceEnd < startToken) {
- break loop;
- }
-
- offset = cursor > 0 ? this.offsetAndType[cursor - 1] & OFFSET_MASK : this.firstCharOffset;
-
- // check stop condition
- switch (stopConsume(this.source.charCodeAt(offset))) {
- case 1: // just stop
- break loop;
-
- case 2: // stop & included
- cursor++;
- break loop;
-
- default:
- // fast forward to the end of balanced block
- if (this.balance[balanceEnd] === cursor) {
- cursor = balanceEnd;
- }
- }
- }
-
- this.skip(cursor - this.tokenIndex);
- }
-
- forEachToken(fn) {
- for (let i = 0, offset = this.firstCharOffset; i < this.tokenCount; i++) {
- const start = offset;
- const item = this.offsetAndType[i];
- const end = item & OFFSET_MASK;
- const type = item >> TYPE_SHIFT;
-
- offset = end;
-
- fn(type, start, end, i);
- }
- }
- dump() {
- const tokens = new Array(this.tokenCount);
-
- this.forEachToken((type, start, end, index) => {
- tokens[index] = {
- idx: index,
- type: names[type],
- chunk: this.source.substring(start, end),
- balance: this.balance[index]
- };
- });
-
- return tokens;
- }
-}
-
-exports.TokenStream = TokenStream;
diff --git a/node_modules/css-tree/cjs/tokenizer/adopt-buffer.cjs b/node_modules/css-tree/cjs/tokenizer/adopt-buffer.cjs
deleted file mode 100644
index b2956ce4..00000000
--- a/node_modules/css-tree/cjs/tokenizer/adopt-buffer.cjs
+++ /dev/null
@@ -1,13 +0,0 @@
-'use strict';
-
-const MIN_SIZE = 16 * 1024;
-
-function adoptBuffer(buffer = null, size) {
- if (buffer === null || buffer.length < size) {
- return new Uint32Array(Math.max(size + 1024, MIN_SIZE));
- }
-
- return buffer;
-}
-
-exports.adoptBuffer = adoptBuffer;
diff --git a/node_modules/css-tree/cjs/tokenizer/char-code-definitions.cjs b/node_modules/css-tree/cjs/tokenizer/char-code-definitions.cjs
deleted file mode 100644
index 99b66670..00000000
--- a/node_modules/css-tree/cjs/tokenizer/char-code-definitions.cjs
+++ /dev/null
@@ -1,231 +0,0 @@
-'use strict';
-
-const EOF = 0;
-
-// https://drafts.csswg.org/css-syntax-3/
-// § 4.2. Definitions
-
-// digit
-// A code point between U+0030 DIGIT ZERO (0) and U+0039 DIGIT NINE (9).
-function isDigit(code) {
- return code >= 0x0030 && code <= 0x0039;
-}
-
-// hex digit
-// A digit, or a code point between U+0041 LATIN CAPITAL LETTER A (A) and U+0046 LATIN CAPITAL LETTER F (F),
-// or a code point between U+0061 LATIN SMALL LETTER A (a) and U+0066 LATIN SMALL LETTER F (f).
-function isHexDigit(code) {
- return (
- isDigit(code) || // 0 .. 9
- (code >= 0x0041 && code <= 0x0046) || // A .. F
- (code >= 0x0061 && code <= 0x0066) // a .. f
- );
-}
-
-// uppercase letter
-// A code point between U+0041 LATIN CAPITAL LETTER A (A) and U+005A LATIN CAPITAL LETTER Z (Z).
-function isUppercaseLetter(code) {
- return code >= 0x0041 && code <= 0x005A;
-}
-
-// lowercase letter
-// A code point between U+0061 LATIN SMALL LETTER A (a) and U+007A LATIN SMALL LETTER Z (z).
-function isLowercaseLetter(code) {
- return code >= 0x0061 && code <= 0x007A;
-}
-
-// letter
-// An uppercase letter or a lowercase letter.
-function isLetter(code) {
- return isUppercaseLetter(code) || isLowercaseLetter(code);
-}
-
-// non-ASCII code point
-// A code point with a value equal to or greater than U+0080 <control>.
-function isNonAscii(code) {
- return code >= 0x0080;
-}
-
-// name-start code point
-// A letter, a non-ASCII code point, or U+005F LOW LINE (_).
-function isNameStart(code) {
- return isLetter(code) || isNonAscii(code) || code === 0x005F;
-}
-
-// name code point
-// A name-start code point, a digit, or U+002D HYPHEN-MINUS (-).
-function isName(code) {
- return isNameStart(code) || isDigit(code) || code === 0x002D;
-}
-
-// non-printable code point
-// A code point between U+0000 NULL and U+0008 BACKSPACE, or U+000B LINE TABULATION,
-// or a code point between U+000E SHIFT OUT and U+001F INFORMATION SEPARATOR ONE, or U+007F DELETE.
-function isNonPrintable(code) {
- return (
- (code >= 0x0000 && code <= 0x0008) ||
- (code === 0x000B) ||
- (code >= 0x000E && code <= 0x001F) ||
- (code === 0x007F)
- );
-}
-
-// newline
-// U+000A LINE FEED. Note that U+000D CARRIAGE RETURN and U+000C FORM FEED are not included in this definition,
-// as they are converted to U+000A LINE FEED during preprocessing.
-// TODO: we doesn't do a preprocessing, so check a code point for U+000D CARRIAGE RETURN and U+000C FORM FEED
-function isNewline(code) {
- return code === 0x000A || code === 0x000D || code === 0x000C;
-}
-
-// whitespace
-// A newline, U+0009 CHARACTER TABULATION, or U+0020 SPACE.
-function isWhiteSpace(code) {
- return isNewline(code) || code === 0x0020 || code === 0x0009;
-}
-
-// § 4.3.8. Check if two code points are a valid escape
-function isValidEscape(first, second) {
- // If the first code point is not U+005C REVERSE SOLIDUS (\), return false.
- if (first !== 0x005C) {
- return false;
- }
-
- // Otherwise, if the second code point is a newline or EOF, return false.
- if (isNewline(second) || second === EOF) {
- return false;
- }
-
- // Otherwise, return true.
- return true;
-}
-
-// § 4.3.9. Check if three code points would start an identifier
-function isIdentifierStart(first, second, third) {
- // Look at the first code point:
-
- // U+002D HYPHEN-MINUS
- if (first === 0x002D) {
- // If the second code point is a name-start code point or a U+002D HYPHEN-MINUS,
- // or the second and third code points are a valid escape, return true. Otherwise, return false.
- return (
- isNameStart(second) ||
- second === 0x002D ||
- isValidEscape(second, third)
- );
- }
-
- // name-start code point
- if (isNameStart(first)) {
- // Return true.
- return true;
- }
-
- // U+005C REVERSE SOLIDUS (\)
- if (first === 0x005C) {
- // If the first and second code points are a valid escape, return true. Otherwise, return false.
- return isValidEscape(first, second);
- }
-
- // anything else
- // Return false.
- return false;
-}
-
-// § 4.3.10. Check if three code points would start a number
-function isNumberStart(first, second, third) {
- // Look at the first code point:
-
- // U+002B PLUS SIGN (+)
- // U+002D HYPHEN-MINUS (-)
- if (first === 0x002B || first === 0x002D) {
- // If the second code point is a digit, return true.
- if (isDigit(second)) {
- return 2;
- }
-
- // Otherwise, if the second code point is a U+002E FULL STOP (.)
- // and the third code point is a digit, return true.
- // Otherwise, return false.
- return second === 0x002E && isDigit(third) ? 3 : 0;
- }
-
- // U+002E FULL STOP (.)
- if (first === 0x002E) {
- // If the second code point is a digit, return true. Otherwise, return false.
- return isDigit(second) ? 2 : 0;
- }
-
- // digit
- if (isDigit(first)) {
- // Return true.
- return 1;
- }
-
- // anything else
- // Return false.
- return 0;
-}
-
-//
-// Misc
-//
-
-// detect BOM (https://en.wikipedia.org/wiki/Byte_order_mark)
-function isBOM(code) {
- // UTF-16BE
- if (code === 0xFEFF) {
- return 1;
- }
-
- // UTF-16LE
- if (code === 0xFFFE) {
- return 1;
- }
-
- return 0;
-}
-
-// Fast code category
-// Only ASCII code points has a special meaning, that's why we define a maps for 0..127 codes only
-const CATEGORY = new Array(0x80);
-const EofCategory = 0x80;
-const WhiteSpaceCategory = 0x82;
-const DigitCategory = 0x83;
-const NameStartCategory = 0x84;
-const NonPrintableCategory = 0x85;
-
-for (let i = 0; i < CATEGORY.length; i++) {
- CATEGORY[i] =
- isWhiteSpace(i) && WhiteSpaceCategory ||
- isDigit(i) && DigitCategory ||
- isNameStart(i) && NameStartCategory ||
- isNonPrintable(i) && NonPrintableCategory ||
- i || EofCategory;
-}
-
-function charCodeCategory(code) {
- return code < 0x80 ? CATEGORY[code] : NameStartCategory;
-}
-
-exports.DigitCategory = DigitCategory;
-exports.EofCategory = EofCategory;
-exports.NameStartCategory = NameStartCategory;
-exports.NonPrintableCategory = NonPrintableCategory;
-exports.WhiteSpaceCategory = WhiteSpaceCategory;
-exports.charCodeCategory = charCodeCategory;
-exports.isBOM = isBOM;
-exports.isDigit = isDigit;
-exports.isHexDigit = isHexDigit;
-exports.isIdentifierStart = isIdentifierStart;
-exports.isLetter = isLetter;
-exports.isLowercaseLetter = isLowercaseLetter;
-exports.isName = isName;
-exports.isNameStart = isNameStart;
-exports.isNewline = isNewline;
-exports.isNonAscii = isNonAscii;
-exports.isNonPrintable = isNonPrintable;
-exports.isNumberStart = isNumberStart;
-exports.isUppercaseLetter = isUppercaseLetter;
-exports.isValidEscape = isValidEscape;
-exports.isWhiteSpace = isWhiteSpace;
diff --git a/node_modules/css-tree/cjs/tokenizer/index.cjs b/node_modules/css-tree/cjs/tokenizer/index.cjs
deleted file mode 100644
index bfb73e5a..00000000
--- a/node_modules/css-tree/cjs/tokenizer/index.cjs
+++ /dev/null
@@ -1,554 +0,0 @@
-'use strict';
-
-const types = require('./types.cjs');
-const charCodeDefinitions = require('./char-code-definitions.cjs');
-const utils = require('./utils.cjs');
-const names = require('./names.cjs');
-const OffsetToLocation = require('./OffsetToLocation.cjs');
-const TokenStream = require('./TokenStream.cjs');
-
-function tokenize(source, onToken) {
- function getCharCode(offset) {
- return offset < sourceLength ? source.charCodeAt(offset) : 0;
- }
-
- // § 4.3.3. Consume a numeric token
- function consumeNumericToken() {
- // Consume a number and let number be the result.
- offset = utils.consumeNumber(source, offset);
-
- // If the next 3 input code points would start an identifier, then:
- if (charCodeDefinitions.isIdentifierStart(getCharCode(offset), getCharCode(offset + 1), getCharCode(offset + 2))) {
- // Create a <dimension-token> with the same value and type flag as number, and a unit set initially to the empty string.
- // Consume a name. Set the <dimension-token>’s unit to the returned value.
- // Return the <dimension-token>.
- type = types.Dimension;
- offset = utils.consumeName(source, offset);
- return;
- }
-
- // Otherwise, if the next input code point is U+0025 PERCENTAGE SIGN (%), consume it.
- if (getCharCode(offset) === 0x0025) {
- // Create a <percentage-token> with the same value as number, and return it.
- type = types.Percentage;
- offset++;
- return;
- }
-
- // Otherwise, create a <number-token> with the same value and type flag as number, and return it.
- type = types.Number;
- }
-
- // § 4.3.4. Consume an ident-like token
- function consumeIdentLikeToken() {
- const nameStartOffset = offset;
-
- // Consume a name, and let string be the result.
- offset = utils.consumeName(source, offset);
-
- // If string’s value is an ASCII case-insensitive match for "url",
- // and the next input code point is U+0028 LEFT PARENTHESIS ((), consume it.
- if (utils.cmpStr(source, nameStartOffset, offset, 'url') && getCharCode(offset) === 0x0028) {
- // While the next two input code points are whitespace, consume the next input code point.
- offset = utils.findWhiteSpaceEnd(source, offset + 1);
-
- // If the next one or two input code points are U+0022 QUOTATION MARK ("), U+0027 APOSTROPHE ('),
- // or whitespace followed by U+0022 QUOTATION MARK (") or U+0027 APOSTROPHE ('),
- // then create a <function-token> with its value set to string and return it.
- if (getCharCode(offset) === 0x0022 ||
- getCharCode(offset) === 0x0027) {
- type = types.Function;
- offset = nameStartOffset + 4;
- return;
- }
-
- // Otherwise, consume a url token, and return it.
- consumeUrlToken();
- return;
- }
-
- // Otherwise, if the next input code point is U+0028 LEFT PARENTHESIS ((), consume it.
- // Create a <function-token> with its value set to string and return it.
- if (getCharCode(offset) === 0x0028) {
- type = types.Function;
- offset++;
- return;
- }
-
- // Otherwise, create an <ident-token> with its value set to string and return it.
- type = types.Ident;
- }
-
- // § 4.3.5. Consume a string token
- function consumeStringToken(endingCodePoint) {
- // This algorithm may be called with an ending code point, which denotes the code point
- // that ends the string. If an ending code point is not specified,
- // the current input code point is used.
- if (!endingCodePoint) {
- endingCodePoint = getCharCode(offset++);
- }
-
- // Initially create a <string-token> with its value set to the empty string.
- type = types.String;
-
- // Repeatedly consume the next input code point from the stream:
- for (; offset < source.length; offset++) {
- const code = source.charCodeAt(offset);
-
- switch (charCodeDefinitions.charCodeCategory(code)) {
- // ending code point
- case endingCodePoint:
- // Return the <string-token>.
- offset++;
- return;
-
- // EOF
- // case EofCategory:
- // This is a parse error. Return the <string-token>.
- // return;
-
- // newline
- case charCodeDefinitions.WhiteSpaceCategory:
- if (charCodeDefinitions.isNewline(code)) {
- // This is a parse error. Reconsume the current input code point,
- // create a <bad-string-token>, and return it.
- offset += utils.getNewlineLength(source, offset, code);
- type = types.BadString;
- return;
- }
- break;
-
- // U+005C REVERSE SOLIDUS (\)
- case 0x005C:
- // If the next input code point is EOF, do nothing.
- if (offset === source.length - 1) {
- break;
- }
-
- const nextCode = getCharCode(offset + 1);
-
- // Otherwise, if the next input code point is a newline, consume it.
- if (charCodeDefinitions.isNewline(nextCode)) {
- offset += utils.getNewlineLength(source, offset + 1, nextCode);
- } else if (charCodeDefinitions.isValidEscape(code, nextCode)) {
- // Otherwise, (the stream starts with a valid escape) consume
- // an escaped code point and append the returned code point to
- // the <string-token>’s value.
- offset = utils.consumeEscaped(source, offset) - 1;
- }
- break;
-
- // anything else
- // Append the current input code point to the <string-token>’s value.
- }
- }
- }
-
- // § 4.3.6. Consume a url token
- // Note: This algorithm assumes that the initial "url(" has already been consumed.
- // This algorithm also assumes that it’s being called to consume an "unquoted" value, like url(foo).
- // A quoted value, like url("foo"), is parsed as a <function-token>. Consume an ident-like token
- // automatically handles this distinction; this algorithm shouldn’t be called directly otherwise.
- function consumeUrlToken() {
- // Initially create a <url-token> with its value set to the empty string.
- type = types.Url;
-
- // Consume as much whitespace as possible.
- offset = utils.findWhiteSpaceEnd(source, offset);
-
- // Repeatedly consume the next input code point from the stream:
- for (; offset < source.length; offset++) {
- const code = source.charCodeAt(offset);
-
- switch (charCodeDefinitions.charCodeCategory(code)) {
- // U+0029 RIGHT PARENTHESIS ())
- case 0x0029:
- // Return the <url-token>.
- offset++;
- return;
-
- // EOF
- // case EofCategory:
- // This is a parse error. Return the <url-token>.
- // return;
-
- // whitespace
- case charCodeDefinitions.WhiteSpaceCategory:
- // Consume as much whitespace as possible.
- offset = utils.findWhiteSpaceEnd(source, offset);
-
- // If the next input code point is U+0029 RIGHT PARENTHESIS ()) or EOF,
- // consume it and return the <url-token>
- // (if EOF was encountered, this is a parse error);
- if (getCharCode(offset) === 0x0029 || offset >= source.length) {
- if (offset < source.length) {
- offset++;
- }
- return;
- }
-
- // otherwise, consume the remnants of a bad url, create a <bad-url-token>,
- // and return it.
- offset = utils.consumeBadUrlRemnants(source, offset);
- type = types.BadUrl;
- return;
-
- // U+0022 QUOTATION MARK (")
- // U+0027 APOSTROPHE (')
- // U+0028 LEFT PARENTHESIS (()
- // non-printable code point
- case 0x0022:
- case 0x0027:
- case 0x0028:
- case charCodeDefinitions.NonPrintableCategory:
- // This is a parse error. Consume the remnants of a bad url,
- // create a <bad-url-token>, and return it.
- offset = utils.consumeBadUrlRemnants(source, offset);
- type = types.BadUrl;
- return;
-
- // U+005C REVERSE SOLIDUS (\)
- case 0x005C:
- // If the stream starts with a valid escape, consume an escaped code point and
- // append the returned code point to the <url-token>’s value.
- if (charCodeDefinitions.isValidEscape(code, getCharCode(offset + 1))) {
- offset = utils.consumeEscaped(source, offset) - 1;
- break;
- }
-
- // Otherwise, this is a parse error. Consume the remnants of a bad url,
- // create a <bad-url-token>, and return it.
- offset = utils.consumeBadUrlRemnants(source, offset);
- type = types.BadUrl;
- return;
-
- // anything else
- // Append the current input code point to the <url-token>’s value.
- }
- }
- }
-
- // ensure source is a string
- source = String(source || '');
-
- const sourceLength = source.length;
- let start = charCodeDefinitions.isBOM(getCharCode(0));
- let offset = start;
- let type;
-
- // https://drafts.csswg.org/css-syntax-3/#consume-token
- // § 4.3.1. Consume a token
- while (offset < sourceLength) {
- const code = source.charCodeAt(offset);
-
- switch (charCodeDefinitions.charCodeCategory(code)) {
- // whitespace
- case charCodeDefinitions.WhiteSpaceCategory:
- // Consume as much whitespace as possible. Return a <whitespace-token>.
- type = types.WhiteSpace;
- offset = utils.findWhiteSpaceEnd(source, offset + 1);
- break;
-
- // U+0022 QUOTATION MARK (")
- case 0x0022:
- // Consume a string token and return it.
- consumeStringToken();
- break;
-
- // U+0023 NUMBER SIGN (#)
- case 0x0023:
- // If the next input code point is a name code point or the next two input code points are a valid escape, then:
- if (charCodeDefinitions.isName(getCharCode(offset + 1)) || charCodeDefinitions.isValidEscape(getCharCode(offset + 1), getCharCode(offset + 2))) {
- // Create a <hash-token>.
- type = types.Hash;
-
- // If the next 3 input code points would start an identifier, set the <hash-token>’s type flag to "id".
- // if (isIdentifierStart(getCharCode(offset + 1), getCharCode(offset + 2), getCharCode(offset + 3))) {
- // // TODO: set id flag
- // }
-
- // Consume a name, and set the <hash-token>’s value to the returned string.
- offset = utils.consumeName(source, offset + 1);
-
- // Return the <hash-token>.
- } else {
- // Otherwise, return a <delim-token> with its value set to the current input code point.
- type = types.Delim;
- offset++;
- }
-
- break;
-
- // U+0027 APOSTROPHE (')
- case 0x0027:
- // Consume a string token and return it.
- consumeStringToken();
- break;
-
- // U+0028 LEFT PARENTHESIS (()
- case 0x0028:
- // Return a <(-token>.
- type = types.LeftParenthesis;
- offset++;
- break;
-
- // U+0029 RIGHT PARENTHESIS ())
- case 0x0029:
- // Return a <)-token>.
- type = types.RightParenthesis;
- offset++;
- break;
-
- // U+002B PLUS SIGN (+)
- case 0x002B:
- // If the input stream starts with a number, ...
- if (charCodeDefinitions.isNumberStart(code, getCharCode(offset + 1), getCharCode(offset + 2))) {
- // ... reconsume the current input code point, consume a numeric token, and return it.
- consumeNumericToken();
- } else {
- // Otherwise, return a <delim-token> with its value set to the current input code point.
- type = types.Delim;
- offset++;
- }
- break;
-
- // U+002C COMMA (,)
- case 0x002C:
- // Return a <comma-token>.
- type = types.Comma;
- offset++;
- break;
-
- // U+002D HYPHEN-MINUS (-)
- case 0x002D:
- // If the input stream starts with a number, reconsume the current input code point, consume a numeric token, and return it.
- if (charCodeDefinitions.isNumberStart(code, getCharCode(offset + 1), getCharCode(offset + 2))) {
- consumeNumericToken();
- } else {
- // Otherwise, if the next 2 input code points are U+002D HYPHEN-MINUS U+003E GREATER-THAN SIGN (->), consume them and return a <CDC-token>.
- if (getCharCode(offset + 1) === 0x002D &&
- getCharCode(offset + 2) === 0x003E) {
- type = types.CDC;
- offset = offset + 3;
- } else {
- // Otherwise, if the input stream starts with an identifier, ...
- if (charCodeDefinitions.isIdentifierStart(code, getCharCode(offset + 1), getCharCode(offset + 2))) {
- // ... reconsume the current input code point, consume an ident-like token, and return it.
- consumeIdentLikeToken();
- } else {
- // Otherwise, return a <delim-token> with its value set to the current input code point.
- type = types.Delim;
- offset++;
- }
- }
- }
- break;
-
- // U+002E FULL STOP (.)
- case 0x002E:
- // If the input stream starts with a number, ...
- if (charCodeDefinitions.isNumberStart(code, getCharCode(offset + 1), getCharCode(offset + 2))) {
- // ... reconsume the current input code point, consume a numeric token, and return it.
- consumeNumericToken();
- } else {
- // Otherwise, return a <delim-token> with its value set to the current input code point.
- type = types.Delim;
- offset++;
- }
-
- break;
-
- // U+002F SOLIDUS (/)
- case 0x002F:
- // If the next two input code point are U+002F SOLIDUS (/) followed by a U+002A ASTERISK (*),
- if (getCharCode(offset + 1) === 0x002A) {
- // ... consume them and all following code points up to and including the first U+002A ASTERISK (*)
- // followed by a U+002F SOLIDUS (/), or up to an EOF code point.
- type = types.Comment;
- offset = source.indexOf('*/', offset + 2);
- offset = offset === -1 ? source.length : offset + 2;
- } else {
- type = types.Delim;
- offset++;
- }
- break;
-
- // U+003A COLON (:)
- case 0x003A:
- // Return a <colon-token>.
- type = types.Colon;
- offset++;
- break;
-
- // U+003B SEMICOLON (;)
- case 0x003B:
- // Return a <semicolon-token>.
- type = types.Semicolon;
- offset++;
- break;
-
- // U+003C LESS-THAN SIGN (<)
- case 0x003C:
- // If the next 3 input code points are U+0021 EXCLAMATION MARK U+002D HYPHEN-MINUS U+002D HYPHEN-MINUS (!--), ...
- if (getCharCode(offset + 1) === 0x0021 &&
- getCharCode(offset + 2) === 0x002D &&
- getCharCode(offset + 3) === 0x002D) {
- // ... consume them and return a <CDO-token>.
- type = types.CDO;
- offset = offset + 4;
- } else {
- // Otherwise, return a <delim-token> with its value set to the current input code point.
- type = types.Delim;
- offset++;
- }
-
- break;
-
- // U+0040 COMMERCIAL AT (@)
- case 0x0040:
- // If the next 3 input code points would start an identifier, ...
- if (charCodeDefinitions.isIdentifierStart(getCharCode(offset + 1), getCharCode(offset + 2), getCharCode(offset + 3))) {
- // ... consume a name, create an <at-keyword-token> with its value set to the returned value, and return it.
- type = types.AtKeyword;
- offset = utils.consumeName(source, offset + 1);
- } else {
- // Otherwise, return a <delim-token> with its value set to the current input code point.
- type = types.Delim;
- offset++;
- }
-
- break;
-
- // U+005B LEFT SQUARE BRACKET ([)
- case 0x005B:
- // Return a <[-token>.
- type = types.LeftSquareBracket;
- offset++;
- break;
-
- // U+005C REVERSE SOLIDUS (\)
- case 0x005C:
- // If the input stream starts with a valid escape, ...
- if (charCodeDefinitions.isValidEscape(code, getCharCode(offset + 1))) {
- // ... reconsume the current input code point, consume an ident-like token, and return it.
- consumeIdentLikeToken();
- } else {
- // Otherwise, this is a parse error. Return a <delim-token> with its value set to the current input code point.
- type = types.Delim;
- offset++;
- }
- break;
-
- // U+005D RIGHT SQUARE BRACKET (])
- case 0x005D:
- // Return a <]-token>.
- type = types.RightSquareBracket;
- offset++;
- break;
-
- // U+007B LEFT CURLY BRACKET ({)
- case 0x007B:
- // Return a <{-token>.
- type = types.LeftCurlyBracket;
- offset++;
- break;
-
- // U+007D RIGHT CURLY BRACKET (})
- case 0x007D:
- // Return a <}-token>.
- type = types.RightCurlyBracket;
- offset++;
- break;
-
- // digit
- case charCodeDefinitions.DigitCategory:
- // Reconsume the current input code point, consume a numeric token, and return it.
- consumeNumericToken();
- break;
-
- // name-start code point
- case charCodeDefinitions.NameStartCategory:
- // Reconsume the current input code point, consume an ident-like token, and return it.
- consumeIdentLikeToken();
- break;
-
- // EOF
- // case EofCategory:
- // Return an <EOF-token>.
- // break;
-
- // anything else
- default:
- // Return a <delim-token> with its value set to the current input code point.
- type = types.Delim;
- offset++;
- }
-
- // put token to stream
- onToken(type, start, start = offset);
- }
-}
-
-exports.AtKeyword = types.AtKeyword;
-exports.BadString = types.BadString;
-exports.BadUrl = types.BadUrl;
-exports.CDC = types.CDC;
-exports.CDO = types.CDO;
-exports.Colon = types.Colon;
-exports.Comma = types.Comma;
-exports.Comment = types.Comment;
-exports.Delim = types.Delim;
-exports.Dimension = types.Dimension;
-exports.EOF = types.EOF;
-exports.Function = types.Function;
-exports.Hash = types.Hash;
-exports.Ident = types.Ident;
-exports.LeftCurlyBracket = types.LeftCurlyBracket;
-exports.LeftParenthesis = types.LeftParenthesis;
-exports.LeftSquareBracket = types.LeftSquareBracket;
-exports.Number = types.Number;
-exports.Percentage = types.Percentage;
-exports.RightCurlyBracket = types.RightCurlyBracket;
-exports.RightParenthesis = types.RightParenthesis;
-exports.RightSquareBracket = types.RightSquareBracket;
-exports.Semicolon = types.Semicolon;
-exports.String = types.String;
-exports.Url = types.Url;
-exports.WhiteSpace = types.WhiteSpace;
-exports.tokenTypes = types;
-exports.DigitCategory = charCodeDefinitions.DigitCategory;
-exports.EofCategory = charCodeDefinitions.EofCategory;
-exports.NameStartCategory = charCodeDefinitions.NameStartCategory;
-exports.NonPrintableCategory = charCodeDefinitions.NonPrintableCategory;
-exports.WhiteSpaceCategory = charCodeDefinitions.WhiteSpaceCategory;
-exports.charCodeCategory = charCodeDefinitions.charCodeCategory;
-exports.isBOM = charCodeDefinitions.isBOM;
-exports.isDigit = charCodeDefinitions.isDigit;
-exports.isHexDigit = charCodeDefinitions.isHexDigit;
-exports.isIdentifierStart = charCodeDefinitions.isIdentifierStart;
-exports.isLetter = charCodeDefinitions.isLetter;
-exports.isLowercaseLetter = charCodeDefinitions.isLowercaseLetter;
-exports.isName = charCodeDefinitions.isName;
-exports.isNameStart = charCodeDefinitions.isNameStart;
-exports.isNewline = charCodeDefinitions.isNewline;
-exports.isNonAscii = charCodeDefinitions.isNonAscii;
-exports.isNonPrintable = charCodeDefinitions.isNonPrintable;
-exports.isNumberStart = charCodeDefinitions.isNumberStart;
-exports.isUppercaseLetter = charCodeDefinitions.isUppercaseLetter;
-exports.isValidEscape = charCodeDefinitions.isValidEscape;
-exports.isWhiteSpace = charCodeDefinitions.isWhiteSpace;
-exports.cmpChar = utils.cmpChar;
-exports.cmpStr = utils.cmpStr;
-exports.consumeBadUrlRemnants = utils.consumeBadUrlRemnants;
-exports.consumeEscaped = utils.consumeEscaped;
-exports.consumeName = utils.consumeName;
-exports.consumeNumber = utils.consumeNumber;
-exports.decodeEscaped = utils.decodeEscaped;
-exports.findDecimalNumberEnd = utils.findDecimalNumberEnd;
-exports.findWhiteSpaceEnd = utils.findWhiteSpaceEnd;
-exports.findWhiteSpaceStart = utils.findWhiteSpaceStart;
-exports.getNewlineLength = utils.getNewlineLength;
-exports.tokenNames = names;
-exports.OffsetToLocation = OffsetToLocation.OffsetToLocation;
-exports.TokenStream = TokenStream.TokenStream;
-exports.tokenize = tokenize;
diff --git a/node_modules/css-tree/cjs/tokenizer/names.cjs b/node_modules/css-tree/cjs/tokenizer/names.cjs
deleted file mode 100644
index d302aedc..00000000
--- a/node_modules/css-tree/cjs/tokenizer/names.cjs
+++ /dev/null
@@ -1,31 +0,0 @@
-'use strict';
-
-const tokenNames = [
- 'EOF-token',
- 'ident-token',
- 'function-token',
- 'at-keyword-token',
- 'hash-token',
- 'string-token',
- 'bad-string-token',
- 'url-token',
- 'bad-url-token',
- 'delim-token',
- 'number-token',
- 'percentage-token',
- 'dimension-token',
- 'whitespace-token',
- 'CDO-token',
- 'CDC-token',
- 'colon-token',
- 'semicolon-token',
- 'comma-token',
- '[-token',
- ']-token',
- '(-token',
- ')-token',
- '{-token',
- '}-token'
-];
-
-module.exports = tokenNames;
diff --git a/node_modules/css-tree/cjs/tokenizer/types.cjs b/node_modules/css-tree/cjs/tokenizer/types.cjs
deleted file mode 100644
index a89b8109..00000000
--- a/node_modules/css-tree/cjs/tokenizer/types.cjs
+++ /dev/null
@@ -1,57 +0,0 @@
-'use strict';
-
-// CSS Syntax Module Level 3
-// https://www.w3.org/TR/css-syntax-3/
-const EOF = 0; // <EOF-token>
-const Ident = 1; // <ident-token>
-const Function = 2; // <function-token>
-const AtKeyword = 3; // <at-keyword-token>
-const Hash = 4; // <hash-token>
-const String = 5; // <string-token>
-const BadString = 6; // <bad-string-token>
-const Url = 7; // <url-token>
-const BadUrl = 8; // <bad-url-token>
-const Delim = 9; // <delim-token>
-const Number = 10; // <number-token>
-const Percentage = 11; // <percentage-token>
-const Dimension = 12; // <dimension-token>
-const WhiteSpace = 13; // <whitespace-token>
-const CDO = 14; // <CDO-token>
-const CDC = 15; // <CDC-token>
-const Colon = 16; // <colon-token> :
-const Semicolon = 17; // <semicolon-token> ;
-const Comma = 18; // <comma-token> ,
-const LeftSquareBracket = 19; // <[-token>
-const RightSquareBracket = 20; // <]-token>
-const LeftParenthesis = 21; // <(-token>
-const RightParenthesis = 22; // <)-token>
-const LeftCurlyBracket = 23; // <{-token>
-const RightCurlyBracket = 24; // <}-token>
-const Comment = 25;
-
-exports.AtKeyword = AtKeyword;
-exports.BadString = BadString;
-exports.BadUrl = BadUrl;
-exports.CDC = CDC;
-exports.CDO = CDO;
-exports.Colon = Colon;
-exports.Comma = Comma;
-exports.Comment = Comment;
-exports.Delim = Delim;
-exports.Dimension = Dimension;
-exports.EOF = EOF;
-exports.Function = Function;
-exports.Hash = Hash;
-exports.Ident = Ident;
-exports.LeftCurlyBracket = LeftCurlyBracket;
-exports.LeftParenthesis = LeftParenthesis;
-exports.LeftSquareBracket = LeftSquareBracket;
-exports.Number = Number;
-exports.Percentage = Percentage;
-exports.RightCurlyBracket = RightCurlyBracket;
-exports.RightParenthesis = RightParenthesis;
-exports.RightSquareBracket = RightSquareBracket;
-exports.Semicolon = Semicolon;
-exports.String = String;
-exports.Url = Url;
-exports.WhiteSpace = WhiteSpace;
diff --git a/node_modules/css-tree/cjs/tokenizer/utils.cjs b/node_modules/css-tree/cjs/tokenizer/utils.cjs
deleted file mode 100644
index c3798e38..00000000
--- a/node_modules/css-tree/cjs/tokenizer/utils.cjs
+++ /dev/null
@@ -1,261 +0,0 @@
-'use strict';
-
-const charCodeDefinitions = require('./char-code-definitions.cjs');
-
-function getCharCode(source, offset) {
- return offset < source.length ? source.charCodeAt(offset) : 0;
-}
-
-function getNewlineLength(source, offset, code) {
- if (code === 13 /* \r */ && getCharCode(source, offset + 1) === 10 /* \n */) {
- return 2;
- }
-
- return 1;
-}
-
-function cmpChar(testStr, offset, referenceCode) {
- let code = testStr.charCodeAt(offset);
-
- // code.toLowerCase() for A..Z
- if (charCodeDefinitions.isUppercaseLetter(code)) {
- code = code | 32;
- }
-
- return code === referenceCode;
-}
-
-function cmpStr(testStr, start, end, referenceStr) {
- if (end - start !== referenceStr.length) {
- return false;
- }
-
- if (start < 0 || end > testStr.length) {
- return false;
- }
-
- for (let i = start; i < end; i++) {
- const referenceCode = referenceStr.charCodeAt(i - start);
- let testCode = testStr.charCodeAt(i);
-
- // testCode.toLowerCase() for A..Z
- if (charCodeDefinitions.isUppercaseLetter(testCode)) {
- testCode = testCode | 32;
- }
-
- if (testCode !== referenceCode) {
- return false;
- }
- }
-
- return true;
-}
-
-function findWhiteSpaceStart(source, offset) {
- for (; offset >= 0; offset--) {
- if (!charCodeDefinitions.isWhiteSpace(source.charCodeAt(offset))) {
- break;
- }
- }
-
- return offset + 1;
-}
-
-function findWhiteSpaceEnd(source, offset) {
- for (; offset < source.length; offset++) {
- if (!charCodeDefinitions.isWhiteSpace(source.charCodeAt(offset))) {
- break;
- }
- }
-
- return offset;
-}
-
-function findDecimalNumberEnd(source, offset) {
- for (; offset < source.length; offset++) {
- if (!charCodeDefinitions.isDigit(source.charCodeAt(offset))) {
- break;
- }
- }
-
- return offset;
-}
-
-// § 4.3.7. Consume an escaped code point
-function consumeEscaped(source, offset) {
- // It assumes that the U+005C REVERSE SOLIDUS (\) has already been consumed and
- // that the next input code point has already been verified to be part of a valid escape.
- offset += 2;
-
- // hex digit
- if (charCodeDefinitions.isHexDigit(getCharCode(source, offset - 1))) {
- // Consume as many hex digits as possible, but no more than 5.
- // Note that this means 1-6 hex digits have been consumed in total.
- for (const maxOffset = Math.min(source.length, offset + 5); offset < maxOffset; offset++) {
- if (!charCodeDefinitions.isHexDigit(getCharCode(source, offset))) {
- break;
- }
- }
-
- // If the next input code point is whitespace, consume it as well.
- const code = getCharCode(source, offset);
- if (charCodeDefinitions.isWhiteSpace(code)) {
- offset += getNewlineLength(source, offset, code);
- }
- }
-
- return offset;
-}
-
-// §4.3.11. Consume a name
-// Note: This algorithm does not do the verification of the first few code points that are necessary
-// to ensure the returned code points would constitute an <ident-token>. If that is the intended use,
-// ensure that the stream starts with an identifier before calling this algorithm.
-function consumeName(source, offset) {
- // Let result initially be an empty string.
- // Repeatedly consume the next input code point from the stream:
- for (; offset < source.length; offset++) {
- const code = source.charCodeAt(offset);
-
- // name code point
- if (charCodeDefinitions.isName(code)) {
- // Append the code point to result.
- continue;
- }
-
- // the stream starts with a valid escape
- if (charCodeDefinitions.isValidEscape(code, getCharCode(source, offset + 1))) {
- // Consume an escaped code point. Append the returned code point to result.
- offset = consumeEscaped(source, offset) - 1;
- continue;
- }
-
- // anything else
- // Reconsume the current input code point. Return result.
- break;
- }
-
- return offset;
-}
-
-// §4.3.12. Consume a number
-function consumeNumber(source, offset) {
- let code = source.charCodeAt(offset);
-
- // 2. If the next input code point is U+002B PLUS SIGN (+) or U+002D HYPHEN-MINUS (-),
- // consume it and append it to repr.
- if (code === 0x002B || code === 0x002D) {
- code = source.charCodeAt(offset += 1);
- }
-
- // 3. While the next input code point is a digit, consume it and append it to repr.
- if (charCodeDefinitions.isDigit(code)) {
- offset = findDecimalNumberEnd(source, offset + 1);
- code = source.charCodeAt(offset);
- }
-
- // 4. If the next 2 input code points are U+002E FULL STOP (.) followed by a digit, then:
- if (code === 0x002E && charCodeDefinitions.isDigit(source.charCodeAt(offset + 1))) {
- // 4.1 Consume them.
- // 4.2 Append them to repr.
- offset += 2;
-
- // 4.3 Set type to "number".
- // TODO
-
- // 4.4 While the next input code point is a digit, consume it and append it to repr.
-
- offset = findDecimalNumberEnd(source, offset);
- }
-
- // 5. If the next 2 or 3 input code points are U+0045 LATIN CAPITAL LETTER E (E)
- // or U+0065 LATIN SMALL LETTER E (e), ... , followed by a digit, then:
- if (cmpChar(source, offset, 101 /* e */)) {
- let sign = 0;
- code = source.charCodeAt(offset + 1);
-
- // ... optionally followed by U+002D HYPHEN-MINUS (-) or U+002B PLUS SIGN (+) ...
- if (code === 0x002D || code === 0x002B) {
- sign = 1;
- code = source.charCodeAt(offset + 2);
- }
-
- // ... followed by a digit
- if (charCodeDefinitions.isDigit(code)) {
- // 5.1 Consume them.
- // 5.2 Append them to repr.
-
- // 5.3 Set type to "number".
- // TODO
-
- // 5.4 While the next input code point is a digit, consume it and append it to repr.
- offset = findDecimalNumberEnd(source, offset + 1 + sign + 1);
- }
- }
-
- return offset;
-}
-
-// § 4.3.14. Consume the remnants of a bad url
-// ... its sole use is to consume enough of the input stream to reach a recovery point
-// where normal tokenizing can resume.
-function consumeBadUrlRemnants(source, offset) {
- // Repeatedly consume the next input code point from the stream:
- for (; offset < source.length; offset++) {
- const code = source.charCodeAt(offset);
-
- // U+0029 RIGHT PARENTHESIS ())
- // EOF
- if (code === 0x0029) {
- // Return.
- offset++;
- break;
- }
-
- if (charCodeDefinitions.isValidEscape(code, getCharCode(source, offset + 1))) {
- // Consume an escaped code point.
- // Note: This allows an escaped right parenthesis ("\)") to be encountered
- // without ending the <bad-url-token>. This is otherwise identical to
- // the "anything else" clause.
- offset = consumeEscaped(source, offset);
- }
- }
-
- return offset;
-}
-
-// § 4.3.7. Consume an escaped code point
-// Note: This algorithm assumes that escaped is valid without leading U+005C REVERSE SOLIDUS (\)
-function decodeEscaped(escaped) {
- // Single char escaped that's not a hex digit
- if (escaped.length === 1 && !charCodeDefinitions.isHexDigit(escaped.charCodeAt(0))) {
- return escaped[0];
- }
-
- // Interpret the hex digits as a hexadecimal number.
- let code = parseInt(escaped, 16);
-
- if (
- (code === 0) || // If this number is zero,
- (code >= 0xD800 && code <= 0xDFFF) || // or is for a surrogate,
- (code > 0x10FFFF) // or is greater than the maximum allowed code point
- ) {
- // ... return U+FFFD REPLACEMENT CHARACTER
- code = 0xFFFD;
- }
-
- // Otherwise, return the code point with that value.
- return String.fromCodePoint(code);
-}
-
-exports.cmpChar = cmpChar;
-exports.cmpStr = cmpStr;
-exports.consumeBadUrlRemnants = consumeBadUrlRemnants;
-exports.consumeEscaped = consumeEscaped;
-exports.consumeName = consumeName;
-exports.consumeNumber = consumeNumber;
-exports.decodeEscaped = decodeEscaped;
-exports.findDecimalNumberEnd = findDecimalNumberEnd;
-exports.findWhiteSpaceEnd = findWhiteSpaceEnd;
-exports.findWhiteSpaceStart = findWhiteSpaceStart;
-exports.getNewlineLength = getNewlineLength;
diff --git a/node_modules/css-tree/cjs/utils/List.cjs b/node_modules/css-tree/cjs/utils/List.cjs
deleted file mode 100644
index ec25f461..00000000
--- a/node_modules/css-tree/cjs/utils/List.cjs
+++ /dev/null
@@ -1,473 +0,0 @@
-'use strict';
-
-//
-// list
-// ┌──────┐
-// ┌──────────────┼─head │
-// │ │ tail─┼──────────────┐
-// │ └──────┘ │
-// ▼ ▼
-// item item item item
-// ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐
-// null ◀──┼─prev │◀───┼─prev │◀───┼─prev │◀───┼─prev │
-// │ next─┼───▶│ next─┼───▶│ next─┼───▶│ next─┼──▶ null
-// ├──────┤ ├──────┤ ├──────┤ ├──────┤
-// │ data │ │ data │ │ data │ │ data │
-// └──────┘ └──────┘ └──────┘ └──────┘
-//
-
-let releasedCursors = null;
-
-class List {
- static createItem(data) {
- return {
- prev: null,
- next: null,
- data
- };
- }
-
- constructor() {
- this.head = null;
- this.tail = null;
- this.cursor = null;
- }
- createItem(data) {
- return List.createItem(data);
- }
-
- // cursor helpers
- allocateCursor(prev, next) {
- let cursor;
-
- if (releasedCursors !== null) {
- cursor = releasedCursors;
- releasedCursors = releasedCursors.cursor;
- cursor.prev = prev;
- cursor.next = next;
- cursor.cursor = this.cursor;
- } else {
- cursor = {
- prev,
- next,
- cursor: this.cursor
- };
- }
-
- this.cursor = cursor;
-
- return cursor;
- }
- releaseCursor() {
- const { cursor } = this;
-
- this.cursor = cursor.cursor;
- cursor.prev = null;
- cursor.next = null;
- cursor.cursor = releasedCursors;
- releasedCursors = cursor;
- }
- updateCursors(prevOld, prevNew, nextOld, nextNew) {
- let { cursor } = this;
-
- while (cursor !== null) {
- if (cursor.prev === prevOld) {
- cursor.prev = prevNew;
- }
-
- if (cursor.next === nextOld) {
- cursor.next = nextNew;
- }
-
- cursor = cursor.cursor;
- }
- }
- *[Symbol.iterator]() {
- for (let cursor = this.head; cursor !== null; cursor = cursor.next) {
- yield cursor.data;
- }
- }
-
- // getters
- get size() {
- let size = 0;
-
- for (let cursor = this.head; cursor !== null; cursor = cursor.next) {
- size++;
- }
-
- return size;
- }
- get isEmpty() {
- return this.head === null;
- }
- get first() {
- return this.head && this.head.data;
- }
- get last() {
- return this.tail && this.tail.data;
- }
-
- // convertors
- fromArray(array) {
- let cursor = null;
- this.head = null;
-
- for (let data of array) {
- const item = List.createItem(data);
-
- if (cursor !== null) {
- cursor.next = item;
- } else {
- this.head = item;
- }
-
- item.prev = cursor;
- cursor = item;
- }
-
- this.tail = cursor;
- return this;
- }
- toArray() {
- return [...this];
- }
- toJSON() {
- return [...this];
- }
-
- // array-like methods
- forEach(fn, thisArg = this) {
- // push cursor
- const cursor = this.allocateCursor(null, this.head);
-
- while (cursor.next !== null) {
- const item = cursor.next;
- cursor.next = item.next;
- fn.call(thisArg, item.data, item, this);
- }
-
- // pop cursor
- this.releaseCursor();
- }
- forEachRight(fn, thisArg = this) {
- // push cursor
- const cursor = this.allocateCursor(this.tail, null);
-
- while (cursor.prev !== null) {
- const item = cursor.prev;
- cursor.prev = item.prev;
- fn.call(thisArg, item.data, item, this);
- }
-
- // pop cursor
- this.releaseCursor();
- }
- reduce(fn, initialValue, thisArg = this) {
- // push cursor
- let cursor = this.allocateCursor(null, this.head);
- let acc = initialValue;
- let item;
-
- while (cursor.next !== null) {
- item = cursor.next;
- cursor.next = item.next;
-
- acc = fn.call(thisArg, acc, item.data, item, this);
- }
-
- // pop cursor
- this.releaseCursor();
-
- return acc;
- }
- reduceRight(fn, initialValue, thisArg = this) {
- // push cursor
- let cursor = this.allocateCursor(this.tail, null);
- let acc = initialValue;
- let item;
-
- while (cursor.prev !== null) {
- item = cursor.prev;
- cursor.prev = item.prev;
-
- acc = fn.call(thisArg, acc, item.data, item, this);
- }
-
- // pop cursor
- this.releaseCursor();
-
- return acc;
- }
- some(fn, thisArg = this) {
- for (let cursor = this.head; cursor !== null; cursor = cursor.next) {
- if (fn.call(thisArg, cursor.data, cursor, this)) {
- return true;
- }
- }
-
- return false;
- }
- map(fn, thisArg = this) {
- const result = new List();
-
- for (let cursor = this.head; cursor !== null; cursor = cursor.next) {
- result.appendData(fn.call(thisArg, cursor.data, cursor, this));
- }
-
- return result;
- }
- filter(fn, thisArg = this) {
- const result = new List();
-
- for (let cursor = this.head; cursor !== null; cursor = cursor.next) {
- if (fn.call(thisArg, cursor.data, cursor, this)) {
- result.appendData(cursor.data);
- }
- }
-
- return result;
- }
-
- nextUntil(start, fn, thisArg = this) {
- if (start === null) {
- return;
- }
-
- // push cursor
- const cursor = this.allocateCursor(null, start);
-
- while (cursor.next !== null) {
- const item = cursor.next;
- cursor.next = item.next;
- if (fn.call(thisArg, item.data, item, this)) {
- break;
- }
- }
-
- // pop cursor
- this.releaseCursor();
- }
- prevUntil(start, fn, thisArg = this) {
- if (start === null) {
- return;
- }
-
- // push cursor
- const cursor = this.allocateCursor(start, null);
-
- while (cursor.prev !== null) {
- const item = cursor.prev;
- cursor.prev = item.prev;
- if (fn.call(thisArg, item.data, item, this)) {
- break;
- }
- }
-
- // pop cursor
- this.releaseCursor();
- }
-
- // mutation
- clear() {
- this.head = null;
- this.tail = null;
- }
- copy() {
- const result = new List();
-
- for (let data of this) {
- result.appendData(data);
- }
-
- return result;
- }
- prepend(item) {
- // head
- // ^
- // item
- this.updateCursors(null, item, this.head, item);
-
- // insert to the beginning of the list
- if (this.head !== null) {
- // new item <- first item
- this.head.prev = item;
- // new item -> first item
- item.next = this.head;
- } else {
- // if list has no head, then it also has no tail
- // in this case tail points to the new item
- this.tail = item;
- }
-
- // head always points to new item
- this.head = item;
- return this;
- }
- prependData(data) {
- return this.prepend(List.createItem(data));
- }
- append(item) {
- return this.insert(item);
- }
- appendData(data) {
- return this.insert(List.createItem(data));
- }
- insert(item, before = null) {
- if (before !== null) {
- // prev before
- // ^
- // item
- this.updateCursors(before.prev, item, before, item);
-
- if (before.prev === null) {
- // insert to the beginning of list
- if (this.head !== before) {
- throw new Error('before doesn\'t belong to list');
- }
- // since head points to before therefore list doesn't empty
- // no need to check tail
- this.head = item;
- before.prev = item;
- item.next = before;
- this.updateCursors(null, item);
- } else {
- // insert between two items
- before.prev.next = item;
- item.prev = before.prev;
- before.prev = item;
- item.next = before;
- }
- } else {
- // tail
- // ^
- // item
- this.updateCursors(this.tail, item, null, item);
-
- // insert to the ending of the list
- if (this.tail !== null) {
- // last item -> new item
- this.tail.next = item;
- // last item <- new item
- item.prev = this.tail;
- } else {
- // if list has no tail, then it also has no head
- // in this case head points to new item
- this.head = item;
- }
-
- // tail always points to new item
- this.tail = item;
- }
-
- return this;
- }
- insertData(data, before) {
- return this.insert(List.createItem(data), before);
- }
- remove(item) {
- // item
- // ^
- // prev next
- this.updateCursors(item, item.prev, item, item.next);
-
- if (item.prev !== null) {
- item.prev.next = item.next;
- } else {
- if (this.head !== item) {
- throw new Error('item doesn\'t belong to list');
- }
-
- this.head = item.next;
- }
-
- if (item.next !== null) {
- item.next.prev = item.prev;
- } else {
- if (this.tail !== item) {
- throw new Error('item doesn\'t belong to list');
- }
-
- this.tail = item.prev;
- }
-
- item.prev = null;
- item.next = null;
-
- return item;
- }
- push(data) {
- this.insert(List.createItem(data));
- }
- pop() {
- return this.tail !== null ? this.remove(this.tail) : null;
- }
- unshift(data) {
- this.prepend(List.createItem(data));
- }
- shift() {
- return this.head !== null ? this.remove(this.head) : null;
- }
- prependList(list) {
- return this.insertList(list, this.head);
- }
- appendList(list) {
- return this.insertList(list);
- }
- insertList(list, before) {
- // ignore empty lists
- if (list.head === null) {
- return this;
- }
-
- if (before !== undefined && before !== null) {
- this.updateCursors(before.prev, list.tail, before, list.head);
-
- // insert in the middle of dist list
- if (before.prev !== null) {
- // before.prev <-> list.head
- before.prev.next = list.head;
- list.head.prev = before.prev;
- } else {
- this.head = list.head;
- }
-
- before.prev = list.tail;
- list.tail.next = before;
- } else {
- this.updateCursors(this.tail, list.tail, null, list.head);
-
- // insert to end of the list
- if (this.tail !== null) {
- // if destination list has a tail, then it also has a head,
- // but head doesn't change
- // dest tail -> source head
- this.tail.next = list.head;
- // dest tail <- source head
- list.head.prev = this.tail;
- } else {
- // if list has no a tail, then it also has no a head
- // in this case points head to new item
- this.head = list.head;
- }
-
- // tail always start point to new item
- this.tail = list.tail;
- }
-
- list.head = null;
- list.tail = null;
- return this;
- }
- replace(oldItem, newItemOrList) {
- if ('head' in newItemOrList) {
- this.insertList(newItemOrList, oldItem);
- } else {
- this.insert(newItemOrList, oldItem);
- }
-
- this.remove(oldItem);
- }
-}
-
-exports.List = List;
diff --git a/node_modules/css-tree/cjs/utils/clone.cjs b/node_modules/css-tree/cjs/utils/clone.cjs
deleted file mode 100644
index f84c30f0..00000000
--- a/node_modules/css-tree/cjs/utils/clone.cjs
+++ /dev/null
@@ -1,25 +0,0 @@
-'use strict';
-
-const List = require('./List.cjs');
-
-function clone(node) {
- const result = {};
-
- for (const key in node) {
- let value = node[key];
-
- if (value) {
- if (Array.isArray(value) || value instanceof List.List) {
- value = value.map(clone);
- } else if (value.constructor === Object) {
- value = clone(value);
- }
- }
-
- result[key] = value;
- }
-
- return result;
-}
-
-exports.clone = clone;
diff --git a/node_modules/css-tree/cjs/utils/create-custom-error.cjs b/node_modules/css-tree/cjs/utils/create-custom-error.cjs
deleted file mode 100644
index d1d3e535..00000000
--- a/node_modules/css-tree/cjs/utils/create-custom-error.cjs
+++ /dev/null
@@ -1,18 +0,0 @@
-'use strict';
-
-function createCustomError(name, message) {
- // use Object.create(), because some VMs prevent setting line/column otherwise
- // (iOS Safari 10 even throws an exception)
- const error = Object.create(SyntaxError.prototype);
- const errorStack = new Error();
-
- return Object.assign(error, {
- name,
- message,
- get stack() {
- return (errorStack.stack || '').replace(/^(.+\n){1,3}/, `${name}: ${message}\n`);
- }
- });
-}
-
-exports.createCustomError = createCustomError;
diff --git a/node_modules/css-tree/cjs/utils/ident.cjs b/node_modules/css-tree/cjs/utils/ident.cjs
deleted file mode 100644
index cd70911d..00000000
--- a/node_modules/css-tree/cjs/utils/ident.cjs
+++ /dev/null
@@ -1,102 +0,0 @@
-'use strict';
-
-const charCodeDefinitions = require('../tokenizer/char-code-definitions.cjs');
-const utils = require('../tokenizer/utils.cjs');
-
-const REVERSE_SOLIDUS = 0x005c; // U+005C REVERSE SOLIDUS (\)
-
-function decode(str) {
- const end = str.length - 1;
- let decoded = '';
-
- for (let i = 0; i < str.length; i++) {
- let code = str.charCodeAt(i);
-
- if (code === REVERSE_SOLIDUS) {
- // special case at the ending
- if (i === end) {
- // if the next input code point is EOF, do nothing
- break;
- }
-
- code = str.charCodeAt(++i);
-
- // consume escaped
- if (charCodeDefinitions.isValidEscape(REVERSE_SOLIDUS, code)) {
- const escapeStart = i - 1;
- const escapeEnd = utils.consumeEscaped(str, escapeStart);
-
- i = escapeEnd - 1;
- decoded += utils.decodeEscaped(str.substring(escapeStart + 1, escapeEnd));
- } else {
- // \r\n
- if (code === 0x000d && str.charCodeAt(i + 1) === 0x000a) {
- i++;
- }
- }
- } else {
- decoded += str[i];
- }
- }
-
- return decoded;
-}
-
-// https://drafts.csswg.org/cssom/#serialize-an-identifier
-// § 2.1. Common Serializing Idioms
-function encode(str) {
- let encoded = '';
-
- // If the character is the first character and is a "-" (U+002D),
- // and there is no second character, then the escaped character.
- // Note: That's means a single dash string "-" return as escaped dash,
- // so move the condition out of the main loop
- if (str.length === 1 && str.charCodeAt(0) === 0x002D) {
- return '\\-';
- }
-
- // To serialize an identifier means to create a string represented
- // by the concatenation of, for each character of the identifier:
- for (let i = 0; i < str.length; i++) {
- const code = str.charCodeAt(i);
-
- // If the character is NULL (U+0000), then the REPLACEMENT CHARACTER (U+FFFD).
- if (code === 0x0000) {
- encoded += '\uFFFD';
- continue;
- }
-
- if (
- // If the character is in the range [\1-\1f] (U+0001 to U+001F) or is U+007F ...
- // Note: Do not compare with 0x0001 since 0x0000 is precessed before
- code <= 0x001F || code === 0x007F ||
- // [or] ... is in the range [0-9] (U+0030 to U+0039),
- (code >= 0x0030 && code <= 0x0039 && (
- // If the character is the first character ...
- i === 0 ||
- // If the character is the second character ... and the first character is a "-" (U+002D)
- i === 1 && str.charCodeAt(0) === 0x002D
- ))
- ) {
- // ... then the character escaped as code point.
- encoded += '\\' + code.toString(16) + ' ';
- continue;
- }
-
- // If the character is not handled by one of the above rules and is greater
- // than or equal to U+0080, is "-" (U+002D) or "_" (U+005F), or is in one
- // of the ranges [0-9] (U+0030 to U+0039), [A-Z] (U+0041 to U+005A),
- // or \[a-z] (U+0061 to U+007A), then the character itself.
- if (charCodeDefinitions.isName(code)) {
- encoded += str.charAt(i);
- } else {
- // Otherwise, the escaped character.
- encoded += '\\' + str.charAt(i);
- }
- }
-
- return encoded;
-}
-
-exports.decode = decode;
-exports.encode = encode;
diff --git a/node_modules/css-tree/cjs/utils/index.cjs b/node_modules/css-tree/cjs/utils/index.cjs
deleted file mode 100644
index cdae6214..00000000
--- a/node_modules/css-tree/cjs/utils/index.cjs
+++ /dev/null
@@ -1,20 +0,0 @@
-'use strict';
-
-const clone = require('./clone.cjs');
-const ident = require('./ident.cjs');
-const List = require('./List.cjs');
-const names = require('./names.cjs');
-const string = require('./string.cjs');
-const url = require('./url.cjs');
-
-
-
-exports.clone = clone.clone;
-exports.ident = ident;
-exports.List = List.List;
-exports.isCustomProperty = names.isCustomProperty;
-exports.keyword = names.keyword;
-exports.property = names.property;
-exports.vendorPrefix = names.vendorPrefix;
-exports.string = string;
-exports.url = url;
diff --git a/node_modules/css-tree/cjs/utils/names.cjs b/node_modules/css-tree/cjs/utils/names.cjs
deleted file mode 100644
index 92c73c71..00000000
--- a/node_modules/css-tree/cjs/utils/names.cjs
+++ /dev/null
@@ -1,113 +0,0 @@
-'use strict';
-
-const keywords = new Map();
-const properties = new Map();
-const HYPHENMINUS = 45; // '-'.charCodeAt()
-
-const keyword = getKeywordDescriptor;
-const property = getPropertyDescriptor;
-const vendorPrefix = getVendorPrefix;
-function isCustomProperty(str, offset) {
- offset = offset || 0;
-
- return str.length - offset >= 2 &&
- str.charCodeAt(offset) === HYPHENMINUS &&
- str.charCodeAt(offset + 1) === HYPHENMINUS;
-}
-
-function getVendorPrefix(str, offset) {
- offset = offset || 0;
-
- // verdor prefix should be at least 3 chars length
- if (str.length - offset >= 3) {
- // vendor prefix starts with hyper minus following non-hyper minus
- if (str.charCodeAt(offset) === HYPHENMINUS &&
- str.charCodeAt(offset + 1) !== HYPHENMINUS) {
- // vendor prefix should contain a hyper minus at the ending
- const secondDashIndex = str.indexOf('-', offset + 2);
-
- if (secondDashIndex !== -1) {
- return str.substring(offset, secondDashIndex + 1);
- }
- }
- }
-
- return '';
-}
-
-function getKeywordDescriptor(keyword) {
- if (keywords.has(keyword)) {
- return keywords.get(keyword);
- }
-
- const name = keyword.toLowerCase();
- let descriptor = keywords.get(name);
-
- if (descriptor === undefined) {
- const custom = isCustomProperty(name, 0);
- const vendor = !custom ? getVendorPrefix(name, 0) : '';
- descriptor = Object.freeze({
- basename: name.substr(vendor.length),
- name,
- prefix: vendor,
- vendor,
- custom
- });
- }
-
- keywords.set(keyword, descriptor);
-
- return descriptor;
-}
-
-function getPropertyDescriptor(property) {
- if (properties.has(property)) {
- return properties.get(property);
- }
-
- let name = property;
- let hack = property[0];
-
- if (hack === '/') {
- hack = property[1] === '/' ? '//' : '/';
- } else if (hack !== '_' &&
- hack !== '*' &&
- hack !== '$' &&
- hack !== '#' &&
- hack !== '+' &&
- hack !== '&') {
- hack = '';
- }
-
- const custom = isCustomProperty(name, hack.length);
-
- // re-use result when possible (the same as for lower case)
- if (!custom) {
- name = name.toLowerCase();
- if (properties.has(name)) {
- const descriptor = properties.get(name);
- properties.set(property, descriptor);
- return descriptor;
- }
- }
-
- const vendor = !custom ? getVendorPrefix(name, hack.length) : '';
- const prefix = name.substr(0, hack.length + vendor.length);
- const descriptor = Object.freeze({
- basename: name.substr(prefix.length),
- name: name.substr(hack.length),
- hack,
- vendor,
- prefix,
- custom
- });
-
- properties.set(property, descriptor);
-
- return descriptor;
-}
-
-exports.isCustomProperty = isCustomProperty;
-exports.keyword = keyword;
-exports.property = property;
-exports.vendorPrefix = vendorPrefix;
diff --git a/node_modules/css-tree/cjs/utils/string.cjs b/node_modules/css-tree/cjs/utils/string.cjs
deleted file mode 100644
index d9c5d01e..00000000
--- a/node_modules/css-tree/cjs/utils/string.cjs
+++ /dev/null
@@ -1,99 +0,0 @@
-'use strict';
-
-const charCodeDefinitions = require('../tokenizer/char-code-definitions.cjs');
-const utils = require('../tokenizer/utils.cjs');
-
-const REVERSE_SOLIDUS = 0x005c; // U+005C REVERSE SOLIDUS (\)
-const QUOTATION_MARK = 0x0022; // "
-const APOSTROPHE = 0x0027; // '
-
-function decode(str) {
- const len = str.length;
- const firstChar = str.charCodeAt(0);
- const start = firstChar === QUOTATION_MARK || firstChar === APOSTROPHE ? 1 : 0;
- const end = start === 1 && len > 1 && str.charCodeAt(len - 1) === firstChar ? len - 2 : len - 1;
- let decoded = '';
-
- for (let i = start; i <= end; i++) {
- let code = str.charCodeAt(i);
-
- if (code === REVERSE_SOLIDUS) {
- // special case at the ending
- if (i === end) {
- // if the next input code point is EOF, do nothing
- // otherwise include last quote as escaped
- if (i !== len - 1) {
- decoded = str.substr(i + 1);
- }
- break;
- }
-
- code = str.charCodeAt(++i);
-
- // consume escaped
- if (charCodeDefinitions.isValidEscape(REVERSE_SOLIDUS, code)) {
- const escapeStart = i - 1;
- const escapeEnd = utils.consumeEscaped(str, escapeStart);
-
- i = escapeEnd - 1;
- decoded += utils.decodeEscaped(str.substring(escapeStart + 1, escapeEnd));
- } else {
- // \r\n
- if (code === 0x000d && str.charCodeAt(i + 1) === 0x000a) {
- i++;
- }
- }
- } else {
- decoded += str[i];
- }
- }
-
- return decoded;
-}
-
-// https://drafts.csswg.org/cssom/#serialize-a-string
-// § 2.1. Common Serializing Idioms
-function encode(str, apostrophe) {
- const quote = apostrophe ? '\'' : '"';
- const quoteCode = apostrophe ? APOSTROPHE : QUOTATION_MARK;
- let encoded = '';
- let wsBeforeHexIsNeeded = false;
-
- for (let i = 0; i < str.length; i++) {
- const code = str.charCodeAt(i);
-
- // If the character is NULL (U+0000), then the REPLACEMENT CHARACTER (U+FFFD).
- if (code === 0x0000) {
- encoded += '\uFFFD';
- continue;
- }
-
- // If the character is in the range [\1-\1f] (U+0001 to U+001F) or is U+007F,
- // the character escaped as code point.
- // Note: Do not compare with 0x0001 since 0x0000 is precessed before
- if (code <= 0x001f || code === 0x007F) {
- encoded += '\\' + code.toString(16);
- wsBeforeHexIsNeeded = true;
- continue;
- }
-
- // If the character is '"' (U+0022) or "\" (U+005C), the escaped character.
- if (code === quoteCode || code === REVERSE_SOLIDUS) {
- encoded += '\\' + str.charAt(i);
- wsBeforeHexIsNeeded = false;
- } else {
- if (wsBeforeHexIsNeeded && (charCodeDefinitions.isHexDigit(code) || charCodeDefinitions.isWhiteSpace(code))) {
- encoded += ' ';
- }
-
- // Otherwise, the character itself.
- encoded += str.charAt(i);
- wsBeforeHexIsNeeded = false;
- }
- }
-
- return quote + encoded + quote;
-}
-
-exports.decode = decode;
-exports.encode = encode;
diff --git a/node_modules/css-tree/cjs/utils/url.cjs b/node_modules/css-tree/cjs/utils/url.cjs
deleted file mode 100644
index e0e5c227..00000000
--- a/node_modules/css-tree/cjs/utils/url.cjs
+++ /dev/null
@@ -1,108 +0,0 @@
-'use strict';
-
-const charCodeDefinitions = require('../tokenizer/char-code-definitions.cjs');
-const utils = require('../tokenizer/utils.cjs');
-
-const SPACE = 0x0020; // U+0020 SPACE
-const REVERSE_SOLIDUS = 0x005c; // U+005C REVERSE SOLIDUS (\)
-const QUOTATION_MARK = 0x0022; // "
-const APOSTROPHE = 0x0027; // '
-const LEFTPARENTHESIS = 0x0028; // U+0028 LEFT PARENTHESIS (()
-const RIGHTPARENTHESIS = 0x0029; // U+0029 RIGHT PARENTHESIS ())
-
-function decode(str) {
- const len = str.length;
- let start = 4; // length of "url("
- let end = str.charCodeAt(len - 1) === RIGHTPARENTHESIS ? len - 2 : len - 1;
- let decoded = '';
-
- while (start < end && charCodeDefinitions.isWhiteSpace(str.charCodeAt(start))) {
- start++;
- }
-
- while (start < end && charCodeDefinitions.isWhiteSpace(str.charCodeAt(end))) {
- end--;
- }
-
- for (let i = start; i <= end; i++) {
- let code = str.charCodeAt(i);
-
- if (code === REVERSE_SOLIDUS) {
- // special case at the ending
- if (i === end) {
- // if the next input code point is EOF, do nothing
- // otherwise include last left parenthesis as escaped
- if (i !== len - 1) {
- decoded = str.substr(i + 1);
- }
- break;
- }
-
- code = str.charCodeAt(++i);
-
- // consume escaped
- if (charCodeDefinitions.isValidEscape(REVERSE_SOLIDUS, code)) {
- const escapeStart = i - 1;
- const escapeEnd = utils.consumeEscaped(str, escapeStart);
-
- i = escapeEnd - 1;
- decoded += utils.decodeEscaped(str.substring(escapeStart + 1, escapeEnd));
- } else {
- // \r\n
- if (code === 0x000d && str.charCodeAt(i + 1) === 0x000a) {
- i++;
- }
- }
- } else {
- decoded += str[i];
- }
- }
-
- return decoded;
-}
-
-function encode(str) {
- let encoded = '';
- let wsBeforeHexIsNeeded = false;
-
- for (let i = 0; i < str.length; i++) {
- const code = str.charCodeAt(i);
-
- // If the character is NULL (U+0000), then the REPLACEMENT CHARACTER (U+FFFD).
- if (code === 0x0000) {
- encoded += '\uFFFD';
- continue;
- }
-
- // If the character is in the range [\1-\1f] (U+0001 to U+001F) or is U+007F,
- // the character escaped as code point.
- // Note: Do not compare with 0x0001 since 0x0000 is precessed before
- if (code <= 0x001f || code === 0x007F) {
- encoded += '\\' + code.toString(16);
- wsBeforeHexIsNeeded = true;
- continue;
- }
-
- if (code === SPACE ||
- code === REVERSE_SOLIDUS ||
- code === QUOTATION_MARK ||
- code === APOSTROPHE ||
- code === LEFTPARENTHESIS ||
- code === RIGHTPARENTHESIS) {
- encoded += '\\' + str.charAt(i);
- wsBeforeHexIsNeeded = false;
- } else {
- if (wsBeforeHexIsNeeded && charCodeDefinitions.isHexDigit(code)) {
- encoded += ' ';
- }
-
- encoded += str.charAt(i);
- wsBeforeHexIsNeeded = false;
- }
- }
-
- return 'url(' + encoded + ')';
-}
-
-exports.decode = decode;
-exports.encode = encode;
diff --git a/node_modules/css-tree/cjs/version.cjs b/node_modules/css-tree/cjs/version.cjs
deleted file mode 100644
index eaa2fef2..00000000
--- a/node_modules/css-tree/cjs/version.cjs
+++ /dev/null
@@ -1,5 +0,0 @@
-'use strict';
-
-const { version } = require('../package.json');
-
-exports.version = version;
diff --git a/node_modules/css-tree/cjs/walker/create.cjs b/node_modules/css-tree/cjs/walker/create.cjs
deleted file mode 100644
index 3938a9f1..00000000
--- a/node_modules/css-tree/cjs/walker/create.cjs
+++ /dev/null
@@ -1,291 +0,0 @@
-'use strict';
-
-const { hasOwnProperty } = Object.prototype;
-const noop = function() {};
-
-function ensureFunction(value) {
- return typeof value === 'function' ? value : noop;
-}
-
-function invokeForType(fn, type) {
- return function(node, item, list) {
- if (node.type === type) {
- fn.call(this, node, item, list);
- }
- };
-}
-
-function getWalkersFromStructure(name, nodeType) {
- const structure = nodeType.structure;
- const walkers = [];
-
- for (const key in structure) {
- if (hasOwnProperty.call(structure, key) === false) {
- continue;
- }
-
- let fieldTypes = structure[key];
- const walker = {
- name: key,
- type: false,
- nullable: false
- };
-
- if (!Array.isArray(fieldTypes)) {
- fieldTypes = [fieldTypes];
- }
-
- for (const fieldType of fieldTypes) {
- if (fieldType === null) {
- walker.nullable = true;
- } else if (typeof fieldType === 'string') {
- walker.type = 'node';
- } else if (Array.isArray(fieldType)) {
- walker.type = 'list';
- }
- }
-
- if (walker.type) {
- walkers.push(walker);
- }
- }
-
- if (walkers.length) {
- return {
- context: nodeType.walkContext,
- fields: walkers
- };
- }
-
- return null;
-}
-
-function getTypesFromConfig(config) {
- const types = {};
-
- for (const name in config.node) {
- if (hasOwnProperty.call(config.node, name)) {
- const nodeType = config.node[name];
-
- if (!nodeType.structure) {
- throw new Error('Missed `structure` field in `' + name + '` node type definition');
- }
-
- types[name] = getWalkersFromStructure(name, nodeType);
- }
- }
-
- return types;
-}
-
-function createTypeIterator(config, reverse) {
- const fields = config.fields.slice();
- const contextName = config.context;
- const useContext = typeof contextName === 'string';
-
- if (reverse) {
- fields.reverse();
- }
-
- return function(node, context, walk, walkReducer) {
- let prevContextValue;
-
- if (useContext) {
- prevContextValue = context[contextName];
- context[contextName] = node;
- }
-
- for (const field of fields) {
- const ref = node[field.name];
-
- if (!field.nullable || ref) {
- if (field.type === 'list') {
- const breakWalk = reverse
- ? ref.reduceRight(walkReducer, false)
- : ref.reduce(walkReducer, false);
-
- if (breakWalk) {
- return true;
- }
- } else if (walk(ref)) {
- return true;
- }
- }
- }
-
- if (useContext) {
- context[contextName] = prevContextValue;
- }
- };
-}
-
-function createFastTraveralMap({
- StyleSheet,
- Atrule,
- Rule,
- Block,
- DeclarationList
-}) {
- return {
- Atrule: {
- StyleSheet,
- Atrule,
- Rule,
- Block
- },
- Rule: {
- StyleSheet,
- Atrule,
- Rule,
- Block
- },
- Declaration: {
- StyleSheet,
- Atrule,
- Rule,
- Block,
- DeclarationList
- }
- };
-}
-
-function createWalker(config) {
- const types = getTypesFromConfig(config);
- const iteratorsNatural = {};
- const iteratorsReverse = {};
- const breakWalk = Symbol('break-walk');
- const skipNode = Symbol('skip-node');
-
- for (const name in types) {
- if (hasOwnProperty.call(types, name) && types[name] !== null) {
- iteratorsNatural[name] = createTypeIterator(types[name], false);
- iteratorsReverse[name] = createTypeIterator(types[name], true);
- }
- }
-
- const fastTraversalIteratorsNatural = createFastTraveralMap(iteratorsNatural);
- const fastTraversalIteratorsReverse = createFastTraveralMap(iteratorsReverse);
-
- const walk = function(root, options) {
- function walkNode(node, item, list) {
- const enterRet = enter.call(context, node, item, list);
-
- if (enterRet === breakWalk) {
- return true;
- }
-
- if (enterRet === skipNode) {
- return false;
- }
-
- if (iterators.hasOwnProperty(node.type)) {
- if (iterators[node.type](node, context, walkNode, walkReducer)) {
- return true;
- }
- }
-
- if (leave.call(context, node, item, list) === breakWalk) {
- return true;
- }
-
- return false;
- }
-
- let enter = noop;
- let leave = noop;
- let iterators = iteratorsNatural;
- let walkReducer = (ret, data, item, list) => ret || walkNode(data, item, list);
- const context = {
- break: breakWalk,
- skip: skipNode,
-
- root,
- stylesheet: null,
- atrule: null,
- atrulePrelude: null,
- rule: null,
- selector: null,
- block: null,
- declaration: null,
- function: null
- };
-
- if (typeof options === 'function') {
- enter = options;
- } else if (options) {
- enter = ensureFunction(options.enter);
- leave = ensureFunction(options.leave);
-
- if (options.reverse) {
- iterators = iteratorsReverse;
- }
-
- if (options.visit) {
- if (fastTraversalIteratorsNatural.hasOwnProperty(options.visit)) {
- iterators = options.reverse
- ? fastTraversalIteratorsReverse[options.visit]
- : fastTraversalIteratorsNatural[options.visit];
- } else if (!types.hasOwnProperty(options.visit)) {
- throw new Error('Bad value `' + options.visit + '` for `visit` option (should be: ' + Object.keys(types).sort().join(', ') + ')');
- }
-
- enter = invokeForType(enter, options.visit);
- leave = invokeForType(leave, options.visit);
- }
- }
-
- if (enter === noop && leave === noop) {
- throw new Error('Neither `enter` nor `leave` walker handler is set or both aren\'t a function');
- }
-
- walkNode(root);
- };
-
- walk.break = breakWalk;
- walk.skip = skipNode;
-
- walk.find = function(ast, fn) {
- let found = null;
-
- walk(ast, function(node, item, list) {
- if (fn.call(this, node, item, list)) {
- found = node;
- return breakWalk;
- }
- });
-
- return found;
- };
-
- walk.findLast = function(ast, fn) {
- let found = null;
-
- walk(ast, {
- reverse: true,
- enter(node, item, list) {
- if (fn.call(this, node, item, list)) {
- found = node;
- return breakWalk;
- }
- }
- });
-
- return found;
- };
-
- walk.findAll = function(ast, fn) {
- const found = [];
-
- walk(ast, function(node, item, list) {
- if (fn.call(this, node, item, list)) {
- found.push(node);
- }
- });
-
- return found;
- };
-
- return walk;
-}
-
-exports.createWalker = createWalker;
diff --git a/node_modules/css-tree/cjs/walker/index.cjs b/node_modules/css-tree/cjs/walker/index.cjs
deleted file mode 100644
index e923c61e..00000000
--- a/node_modules/css-tree/cjs/walker/index.cjs
+++ /dev/null
@@ -1,8 +0,0 @@
-'use strict';
-
-const create = require('./create.cjs');
-const walker$1 = require('../syntax/config/walker.cjs');
-
-const walker = create.createWalker(walker$1);
-
-module.exports = walker;
diff --git a/node_modules/css-tree/data/patch.json b/node_modules/css-tree/data/patch.json
deleted file mode 100644
index e57f7f73..00000000
--- a/node_modules/css-tree/data/patch.json
+++ /dev/null
@@ -1,725 +0,0 @@
-{
- "atrules": {
- "charset": {
- "prelude": "<string>"
- },
- "font-face": {
- "descriptors": {
- "unicode-range": {
- "comment": "replaces <unicode-range>, an old production name",
- "syntax": "<urange>#"
- }
- }
- },
- "nest": {
- "prelude": "<complex-selector-list>"
- }
- },
- "properties": {
- "-moz-background-clip": {
- "comment": "deprecated syntax in old Firefox, https://developer.mozilla.org/en/docs/Web/CSS/background-clip",
- "syntax": "padding | border"
- },
- "-moz-border-radius-bottomleft": {
- "comment": "https://developer.mozilla.org/en-US/docs/Web/CSS/border-bottom-left-radius",
- "syntax": "<'border-bottom-left-radius'>"
- },
- "-moz-border-radius-bottomright": {
- "comment": "https://developer.mozilla.org/en-US/docs/Web/CSS/border-bottom-right-radius",
- "syntax": "<'border-bottom-right-radius'>"
- },
- "-moz-border-radius-topleft": {
- "comment": "https://developer.mozilla.org/en-US/docs/Web/CSS/border-top-left-radius",
- "syntax": "<'border-top-left-radius'>"
- },
- "-moz-border-radius-topright": {
- "comment": "https://developer.mozilla.org/en-US/docs/Web/CSS/border-bottom-right-radius",
- "syntax": "<'border-bottom-right-radius'>"
- },
- "-moz-control-character-visibility": {
- "comment": "firefox specific keywords, https://bugzilla.mozilla.org/show_bug.cgi?id=947588",
- "syntax": "visible | hidden"
- },
- "-moz-osx-font-smoothing": {
- "comment": "misssed old syntax https://developer.mozilla.org/en-US/docs/Web/CSS/font-smooth",
- "syntax": "auto | grayscale"
- },
- "-moz-user-select": {
- "comment": "https://developer.mozilla.org/en-US/docs/Web/CSS/user-select",
- "syntax": "none | text | all | -moz-none"
- },
- "-ms-flex-align": {
- "comment": "misssed old syntax implemented in IE, https://www.w3.org/TR/2012/WD-css3-flexbox-20120322/#flex-align",
- "syntax": "start | end | center | baseline | stretch"
- },
- "-ms-flex-item-align": {
- "comment": "misssed old syntax implemented in IE, https://www.w3.org/TR/2012/WD-css3-flexbox-20120322/#flex-align",
- "syntax": "auto | start | end | center | baseline | stretch"
- },
- "-ms-flex-line-pack": {
- "comment": "misssed old syntax implemented in IE, https://www.w3.org/TR/2012/WD-css3-flexbox-20120322/#flex-line-pack",
- "syntax": "start | end | center | justify | distribute | stretch"
- },
- "-ms-flex-negative": {
- "comment": "misssed old syntax implemented in IE; TODO: find references for comfirmation",
- "syntax": "<'flex-shrink'>"
- },
- "-ms-flex-pack": {
- "comment": "misssed old syntax implemented in IE, https://www.w3.org/TR/2012/WD-css3-flexbox-20120322/#flex-pack",
- "syntax": "start | end | center | justify | distribute"
- },
- "-ms-flex-order": {
- "comment": "misssed old syntax implemented in IE; https://msdn.microsoft.com/en-us/library/jj127303(v=vs.85).aspx",
- "syntax": "<integer>"
- },
- "-ms-flex-positive": {
- "comment": "misssed old syntax implemented in IE; TODO: find references for comfirmation",
- "syntax": "<'flex-grow'>"
- },
- "-ms-flex-preferred-size": {
- "comment": "misssed old syntax implemented in IE; TODO: find references for comfirmation",
- "syntax": "<'flex-basis'>"
- },
- "-ms-interpolation-mode": {
- "comment": "https://msdn.microsoft.com/en-us/library/ff521095(v=vs.85).aspx",
- "syntax": "nearest-neighbor | bicubic"
- },
- "-ms-grid-column-align": {
- "comment": "add this property first since it uses as fallback for flexbox, https://msdn.microsoft.com/en-us/library/windows/apps/hh466338.aspx",
- "syntax": "start | end | center | stretch"
- },
- "-ms-grid-row-align": {
- "comment": "add this property first since it uses as fallback for flexbox, https://msdn.microsoft.com/en-us/library/windows/apps/hh466348.aspx",
- "syntax": "start | end | center | stretch"
- },
- "-ms-hyphenate-limit-last": {
- "comment": "misssed old syntax implemented in IE; https://www.w3.org/TR/css-text-4/#hyphenate-line-limits",
- "syntax": "none | always | column | page | spread"
- },
- "-webkit-appearance": {
- "comment": "webkit specific keywords",
- "references": [
- "http://css-infos.net/property/-webkit-appearance"
- ],
- "syntax": "none | button | button-bevel | caps-lock-indicator | 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 | scrollbarbutton-down | scrollbarbutton-left | scrollbarbutton-right | scrollbarbutton-up | scrollbargripper-horizontal | scrollbargripper-vertical | scrollbarthumb-horizontal | scrollbarthumb-vertical | scrollbartrack-horizontal | scrollbartrack-vertical | 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"
- },
- "-webkit-background-clip": {
- "comment": "https://developer.mozilla.org/en/docs/Web/CSS/background-clip",
- "syntax": "[ <box> | border | padding | content | text ]#"
- },
- "-webkit-column-break-after": {
- "comment": "added, http://help.dottoro.com/lcrthhhv.php",
- "syntax": "always | auto | avoid"
- },
- "-webkit-column-break-before": {
- "comment": "added, http://help.dottoro.com/lcxquvkf.php",
- "syntax": "always | auto | avoid"
- },
- "-webkit-column-break-inside": {
- "comment": "added, http://help.dottoro.com/lclhnthl.php",
- "syntax": "always | auto | avoid"
- },
- "-webkit-font-smoothing": {
- "comment": "https://developer.mozilla.org/en-US/docs/Web/CSS/font-smooth",
- "syntax": "auto | none | antialiased | subpixel-antialiased"
- },
- "-webkit-mask-box-image": {
- "comment": "missed; https://developer.mozilla.org/en-US/docs/Web/CSS/-webkit-mask-box-image",
- "syntax": "[ <url> | <gradient> | none ] [ <length-percentage>{4} <-webkit-mask-box-repeat>{2} ]?"
- },
- "-webkit-print-color-adjust": {
- "comment": "missed",
- "references": [
- "https://developer.mozilla.org/en/docs/Web/CSS/-webkit-print-color-adjust"
- ],
- "syntax": "economy | exact"
- },
- "-webkit-text-security": {
- "comment": "missed; http://help.dottoro.com/lcbkewgt.php",
- "syntax": "none | circle | disc | square"
- },
- "-webkit-user-drag": {
- "comment": "missed; http://help.dottoro.com/lcbixvwm.php",
- "syntax": "none | element | auto"
- },
- "-webkit-user-select": {
- "comment": "auto is supported by old webkit, https://developer.mozilla.org/en-US/docs/Web/CSS/user-select",
- "syntax": "auto | none | text | all"
- },
- "alignment-baseline": {
- "comment": "added SVG property",
- "references": [
- "https://www.w3.org/TR/SVG/text.html#AlignmentBaselineProperty"
- ],
- "syntax": "auto | baseline | before-edge | text-before-edge | middle | central | after-edge | text-after-edge | ideographic | alphabetic | hanging | mathematical"
- },
- "background-clip": {
- "comment": "used <bg-clip> from CSS Backgrounds and Borders 4 since it adds new values",
- "references": [
- "https://github.com/csstree/csstree/issues/190"
- ],
- "syntax": "<bg-clip>#"
- },
- "baseline-shift": {
- "comment": "added SVG property",
- "references": [
- "https://www.w3.org/TR/SVG/text.html#BaselineShiftProperty"
- ],
- "syntax": "baseline | sub | super | <svg-length>"
- },
- "behavior": {
- "comment": "added old IE property https://msdn.microsoft.com/en-us/library/ms530723(v=vs.85).aspx",
- "syntax": "<url>+"
- },
- "clip-rule": {
- "comment": "added SVG property",
- "references": [
- "https://www.w3.org/TR/SVG/masking.html#ClipRuleProperty"
- ],
- "syntax": "nonzero | evenodd"
- },
- "cue": {
- "comment": "https://www.w3.org/TR/css3-speech/#property-index",
- "syntax": "<'cue-before'> <'cue-after'>?"
- },
- "cue-after": {
- "comment": "https://www.w3.org/TR/css3-speech/#property-index",
- "syntax": "<url> <decibel>? | none"
- },
- "cue-before": {
- "comment": "https://www.w3.org/TR/css3-speech/#property-index",
- "syntax": "<url> <decibel>? | none"
- },
- "cursor": {
- "comment": "added legacy keywords: hand, -webkit-grab. -webkit-grabbing, -webkit-zoom-in, -webkit-zoom-out, -moz-grab, -moz-grabbing, -moz-zoom-in, -moz-zoom-out",
- "references": [
- "https://www.sitepoint.com/css3-cursor-styles/"
- ],
- "syntax": "[ [ <url> [ <x> <y> ]? , ]* [ auto | default | none | context-menu | help | pointer | progress | wait | cell | crosshair | text | vertical-text | alias | copy | move | no-drop | not-allowed | e-resize | n-resize | ne-resize | nw-resize | s-resize | se-resize | sw-resize | w-resize | ew-resize | ns-resize | nesw-resize | nwse-resize | col-resize | row-resize | all-scroll | zoom-in | zoom-out | grab | grabbing | hand | -webkit-grab | -webkit-grabbing | -webkit-zoom-in | -webkit-zoom-out | -moz-grab | -moz-grabbing | -moz-zoom-in | -moz-zoom-out ] ]"
- },
- "display": {
- "comment": "extended with -ms-flexbox",
- "syntax": "| <-non-standard-display>"
- },
- "position": {
- "comment": "extended with -webkit-sticky",
- "syntax": "| -webkit-sticky"
- },
- "dominant-baseline": {
- "comment": "added SVG property",
- "references": [
- "https://www.w3.org/TR/SVG/text.html#DominantBaselineProperty"
- ],
- "syntax": "auto | use-script | no-change | reset-size | ideographic | alphabetic | hanging | mathematical | central | middle | text-after-edge | text-before-edge"
- },
- "image-rendering": {
- "comment": "extended with <-non-standard-image-rendering>, added SVG keywords optimizeSpeed and optimizeQuality",
- "references": [
- "https://developer.mozilla.org/en/docs/Web/CSS/image-rendering",
- "https://www.w3.org/TR/SVG/painting.html#ImageRenderingProperty"
- ],
- "syntax": "| optimizeSpeed | optimizeQuality | <-non-standard-image-rendering>"
- },
- "fill": {
- "comment": "added SVG property",
- "references": [
- "https://www.w3.org/TR/SVG/painting.html#FillProperty"
- ],
- "syntax": "<paint>"
- },
- "fill-opacity": {
- "comment": "added SVG property",
- "references": [
- "https://www.w3.org/TR/SVG/painting.html#FillProperty"
- ],
- "syntax": "<number-zero-one>"
- },
- "fill-rule": {
- "comment": "added SVG property",
- "references": [
- "https://www.w3.org/TR/SVG/painting.html#FillProperty"
- ],
- "syntax": "nonzero | evenodd"
- },
- "filter": {
- "comment": "extend with IE legacy syntaxes",
- "syntax": "| <-ms-filter-function-list>"
- },
- "glyph-orientation-horizontal": {
- "comment": "added SVG property",
- "references": [
- "https://www.w3.org/TR/SVG/text.html#GlyphOrientationHorizontalProperty"
- ],
- "syntax": "<angle>"
- },
- "glyph-orientation-vertical": {
- "comment": "added SVG property",
- "references": [
- "https://www.w3.org/TR/SVG/text.html#GlyphOrientationVerticalProperty"
- ],
- "syntax": "<angle>"
- },
- "kerning": {
- "comment": "added SVG property",
- "references": [
- "https://www.w3.org/TR/SVG/text.html#KerningProperty"
- ],
- "syntax": "auto | <svg-length>"
- },
- "letter-spacing": {
- "comment": "fix syntax <length> -> <length-percentage>",
- "references": [
- "https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/letter-spacing"
- ],
- "syntax": "normal | <length-percentage>"
- },
- "marker": {
- "comment": "added SVG property",
- "references": [
- "https://www.w3.org/TR/SVG/painting.html#MarkerProperties"
- ],
- "syntax": "none | <url>"
- },
- "marker-end": {
- "comment": "added SVG property",
- "references": [
- "https://www.w3.org/TR/SVG/painting.html#MarkerProperties"
- ],
- "syntax": "none | <url>"
- },
- "marker-mid": {
- "comment": "added SVG property",
- "references": [
- "https://www.w3.org/TR/SVG/painting.html#MarkerProperties"
- ],
- "syntax": "none | <url>"
- },
- "marker-start": {
- "comment": "added SVG property",
- "references": [
- "https://www.w3.org/TR/SVG/painting.html#MarkerProperties"
- ],
- "syntax": "none | <url>"
- },
- "max-width": {
- "comment": "extend by non-standard width keywords https://developer.mozilla.org/en-US/docs/Web/CSS/max-width",
- "syntax": "| <-non-standard-width>"
- },
- "width": {
- "references": [
- "https://developer.mozilla.org/en-US/docs/Web/CSS/width",
- "https://github.com/csstree/stylelint-validator/issues/29"
- ],
- "syntax": "| fill | stretch | intrinsic | -moz-max-content | -webkit-max-content | -moz-fit-content | -webkit-fit-content"
- },
- "min-width": {
- "comment": "extend by non-standard width keywords https://developer.mozilla.org/en-US/docs/Web/CSS/width",
- "syntax": "| <-non-standard-width>"
- },
- "overflow": {
- "comment": "extend by vendor keywords https://developer.mozilla.org/en-US/docs/Web/CSS/overflow",
- "syntax": "| <-non-standard-overflow>"
- },
- "pause": {
- "comment": "https://www.w3.org/TR/css3-speech/#property-index",
- "syntax": "<'pause-before'> <'pause-after'>?"
- },
- "pause-after": {
- "comment": "https://www.w3.org/TR/css3-speech/#property-index",
- "syntax": "<time> | none | x-weak | weak | medium | strong | x-strong"
- },
- "pause-before": {
- "comment": "https://www.w3.org/TR/css3-speech/#property-index",
- "syntax": "<time> | none | x-weak | weak | medium | strong | x-strong"
- },
- "rest": {
- "comment": "https://www.w3.org/TR/css3-speech/#property-index",
- "syntax": "<'rest-before'> <'rest-after'>?"
- },
- "rest-after": {
- "comment": "https://www.w3.org/TR/css3-speech/#property-index",
- "syntax": "<time> | none | x-weak | weak | medium | strong | x-strong"
- },
- "rest-before": {
- "comment": "https://www.w3.org/TR/css3-speech/#property-index",
- "syntax": "<time> | none | x-weak | weak | medium | strong | x-strong"
- },
- "shape-rendering": {
- "comment": "added SVG property",
- "references": [
- "https://www.w3.org/TR/SVG/painting.html#ShapeRenderingPropert"
- ],
- "syntax": "auto | optimizeSpeed | crispEdges | geometricPrecision"
- },
- "src": {
- "comment": "added @font-face's src property https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/src",
- "syntax": "[ <url> [ format( <string># ) ]? | local( <family-name> ) ]#"
- },
- "speak": {
- "comment": "https://www.w3.org/TR/css3-speech/#property-index",
- "syntax": "auto | none | normal"
- },
- "speak-as": {
- "comment": "https://www.w3.org/TR/css3-speech/#property-index",
- "syntax": "normal | spell-out || digits || [ literal-punctuation | no-punctuation ]"
- },
- "stroke": {
- "comment": "added SVG property",
- "references": [
- "https://www.w3.org/TR/SVG/painting.html#StrokeProperties"
- ],
- "syntax": "<paint>"
- },
- "stroke-dasharray": {
- "comment": "added SVG property; a list of comma and/or white space separated <length>s and <percentage>s",
- "references": [
- "https://www.w3.org/TR/SVG/painting.html#StrokeProperties"
- ],
- "syntax": "none | [ <svg-length>+ ]#"
- },
- "stroke-dashoffset": {
- "comment": "added SVG property",
- "references": [
- "https://www.w3.org/TR/SVG/painting.html#StrokeProperties"
- ],
- "syntax": "<svg-length>"
- },
- "stroke-linecap": {
- "comment": "added SVG property",
- "references": [
- "https://www.w3.org/TR/SVG/painting.html#StrokeProperties"
- ],
- "syntax": "butt | round | square"
- },
- "stroke-linejoin": {
- "comment": "added SVG property",
- "references": [
- "https://www.w3.org/TR/SVG/painting.html#StrokeProperties"
- ],
- "syntax": "miter | round | bevel"
- },
- "stroke-miterlimit": {
- "comment": "added SVG property (<miterlimit> = <number-one-or-greater>) ",
- "references": [
- "https://www.w3.org/TR/SVG/painting.html#StrokeProperties"
- ],
- "syntax": "<number-one-or-greater>"
- },
- "stroke-opacity": {
- "comment": "added SVG property",
- "references": [
- "https://www.w3.org/TR/SVG/painting.html#StrokeProperties"
- ],
- "syntax": "<number-zero-one>"
- },
- "stroke-width": {
- "comment": "added SVG property",
- "references": [
- "https://www.w3.org/TR/SVG/painting.html#StrokeProperties"
- ],
- "syntax": "<svg-length>"
- },
- "text-anchor": {
- "comment": "added SVG property",
- "references": [
- "https://www.w3.org/TR/SVG/text.html#TextAlignmentProperties"
- ],
- "syntax": "start | middle | end"
- },
- "unicode-bidi": {
- "comment": "added prefixed keywords https://developer.mozilla.org/en-US/docs/Web/CSS/unicode-bidi",
- "syntax": "| -moz-isolate | -moz-isolate-override | -moz-plaintext | -webkit-isolate | -webkit-isolate-override | -webkit-plaintext"
- },
- "unicode-range": {
- "comment": "added missed property https://developer.mozilla.org/en-US/docs/Web/CSS/%40font-face/unicode-range",
- "syntax": "<urange>#"
- },
- "voice-balance": {
- "comment": "https://www.w3.org/TR/css3-speech/#property-index",
- "syntax": "<number> | left | center | right | leftwards | rightwards"
- },
- "voice-duration": {
- "comment": "https://www.w3.org/TR/css3-speech/#property-index",
- "syntax": "auto | <time>"
- },
- "voice-family": {
- "comment": "<name> -> <family-name>, https://www.w3.org/TR/css3-speech/#property-index",
- "syntax": "[ [ <family-name> | <generic-voice> ] , ]* [ <family-name> | <generic-voice> ] | preserve"
- },
- "voice-pitch": {
- "comment": "https://www.w3.org/TR/css3-speech/#property-index",
- "syntax": "<frequency> && absolute | [ [ x-low | low | medium | high | x-high ] || [ <frequency> | <semitones> | <percentage> ] ]"
- },
- "voice-range": {
- "comment": "https://www.w3.org/TR/css3-speech/#property-index",
- "syntax": "<frequency> && absolute | [ [ x-low | low | medium | high | x-high ] || [ <frequency> | <semitones> | <percentage> ] ]"
- },
- "voice-rate": {
- "comment": "https://www.w3.org/TR/css3-speech/#property-index",
- "syntax": "[ normal | x-slow | slow | medium | fast | x-fast ] || <percentage>"
- },
- "voice-stress": {
- "comment": "https://www.w3.org/TR/css3-speech/#property-index",
- "syntax": "normal | strong | moderate | none | reduced"
- },
- "voice-volume": {
- "comment": "https://www.w3.org/TR/css3-speech/#property-index",
- "syntax": "silent | [ [ x-soft | soft | medium | loud | x-loud ] || <decibel> ]"
- },
- "writing-mode": {
- "comment": "extend with SVG keywords",
- "syntax": "| <svg-writing-mode>"
- }
- },
- "types": {
- "-legacy-gradient": {
- "comment": "added collection of legacy gradient syntaxes",
- "syntax": "<-webkit-gradient()> | <-legacy-linear-gradient> | <-legacy-repeating-linear-gradient> | <-legacy-radial-gradient> | <-legacy-repeating-radial-gradient>"
- },
- "-legacy-linear-gradient": {
- "comment": "like standard syntax but w/o `to` keyword https://developer.mozilla.org/en-US/docs/Web/CSS/linear-gradient",
- "syntax": "-moz-linear-gradient( <-legacy-linear-gradient-arguments> ) | -webkit-linear-gradient( <-legacy-linear-gradient-arguments> ) | -o-linear-gradient( <-legacy-linear-gradient-arguments> )"
- },
- "-legacy-repeating-linear-gradient": {
- "comment": "like standard syntax but w/o `to` keyword https://developer.mozilla.org/en-US/docs/Web/CSS/linear-gradient",
- "syntax": "-moz-repeating-linear-gradient( <-legacy-linear-gradient-arguments> ) | -webkit-repeating-linear-gradient( <-legacy-linear-gradient-arguments> ) | -o-repeating-linear-gradient( <-legacy-linear-gradient-arguments> )"
- },
- "-legacy-linear-gradient-arguments": {
- "comment": "like standard syntax but w/o `to` keyword https://developer.mozilla.org/en-US/docs/Web/CSS/linear-gradient",
- "syntax": "[ <angle> | <side-or-corner> ]? , <color-stop-list>"
- },
- "-legacy-radial-gradient": {
- "comment": "deprecated syntax that implemented by some browsers https://www.w3.org/TR/2011/WD-css3-images-20110908/#radial-gradients",
- "syntax": "-moz-radial-gradient( <-legacy-radial-gradient-arguments> ) | -webkit-radial-gradient( <-legacy-radial-gradient-arguments> ) | -o-radial-gradient( <-legacy-radial-gradient-arguments> )"
- },
- "-legacy-repeating-radial-gradient": {
- "comment": "deprecated syntax that implemented by some browsers https://www.w3.org/TR/2011/WD-css3-images-20110908/#radial-gradients",
- "syntax": "-moz-repeating-radial-gradient( <-legacy-radial-gradient-arguments> ) | -webkit-repeating-radial-gradient( <-legacy-radial-gradient-arguments> ) | -o-repeating-radial-gradient( <-legacy-radial-gradient-arguments> )"
- },
- "-legacy-radial-gradient-arguments": {
- "comment": "deprecated syntax that implemented by some browsers https://www.w3.org/TR/2011/WD-css3-images-20110908/#radial-gradients",
- "syntax": "[ <position> , ]? [ [ [ <-legacy-radial-gradient-shape> || <-legacy-radial-gradient-size> ] | [ <length> | <percentage> ]{2} ] , ]? <color-stop-list>"
- },
- "-legacy-radial-gradient-size": {
- "comment": "before a standard it contains 2 extra keywords (`contain` and `cover`) https://www.w3.org/TR/2011/WD-css3-images-20110908/#ltsize",
- "syntax": "closest-side | closest-corner | farthest-side | farthest-corner | contain | cover"
- },
- "-legacy-radial-gradient-shape": {
- "comment": "define to double sure it doesn't extends in future https://www.w3.org/TR/2011/WD-css3-images-20110908/#ltshape",
- "syntax": "circle | ellipse"
- },
- "-non-standard-font": {
- "comment": "non standard fonts",
- "references": [
- "https://webkit.org/blog/3709/using-the-system-font-in-web-content/"
- ],
- "syntax": "-apple-system-body | -apple-system-headline | -apple-system-subheadline | -apple-system-caption1 | -apple-system-caption2 | -apple-system-footnote | -apple-system-short-body | -apple-system-short-headline | -apple-system-short-subheadline | -apple-system-short-caption1 | -apple-system-short-footnote | -apple-system-tall-body"
- },
- "-non-standard-color": {
- "comment": "non standard colors",
- "references": [
- "http://cssdot.ru/%D0%A1%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D1%87%D0%BD%D0%B8%D0%BA_CSS/color-i305.html",
- "https://developer.mozilla.org/en-US/docs/Web/CSS/color_value#Mozilla_Color_Preference_Extensions"
- ],
- "syntax": "-moz-ButtonDefault | -moz-ButtonHoverFace | -moz-ButtonHoverText | -moz-CellHighlight | -moz-CellHighlightText | -moz-Combobox | -moz-ComboboxText | -moz-Dialog | -moz-DialogText | -moz-dragtargetzone | -moz-EvenTreeRow | -moz-Field | -moz-FieldText | -moz-html-CellHighlight | -moz-html-CellHighlightText | -moz-mac-accentdarkestshadow | -moz-mac-accentdarkshadow | -moz-mac-accentface | -moz-mac-accentlightesthighlight | -moz-mac-accentlightshadow | -moz-mac-accentregularhighlight | -moz-mac-accentregularshadow | -moz-mac-chrome-active | -moz-mac-chrome-inactive | -moz-mac-focusring | -moz-mac-menuselect | -moz-mac-menushadow | -moz-mac-menutextselect | -moz-MenuHover | -moz-MenuHoverText | -moz-MenuBarText | -moz-MenuBarHoverText | -moz-nativehyperlinktext | -moz-OddTreeRow | -moz-win-communicationstext | -moz-win-mediatext | -moz-activehyperlinktext | -moz-default-background-color | -moz-default-color | -moz-hyperlinktext | -moz-visitedhyperlinktext | -webkit-activelink | -webkit-focus-ring-color | -webkit-link | -webkit-text"
- },
- "-non-standard-image-rendering": {
- "comment": "non-standard keywords http://phrogz.net/tmp/canvas_image_zoom.html",
- "syntax": "optimize-contrast | -moz-crisp-edges | -o-crisp-edges | -webkit-optimize-contrast"
- },
- "-non-standard-overflow": {
- "comment": "non-standard keywords https://developer.mozilla.org/en-US/docs/Web/CSS/overflow",
- "syntax": "-moz-scrollbars-none | -moz-scrollbars-horizontal | -moz-scrollbars-vertical | -moz-hidden-unscrollable"
- },
- "-non-standard-width": {
- "comment": "non-standard keywords https://developer.mozilla.org/en-US/docs/Web/CSS/width",
- "syntax": "fill-available | min-intrinsic | intrinsic | -moz-available | -moz-fit-content | -moz-min-content | -moz-max-content | -webkit-min-content | -webkit-max-content"
- },
- "-webkit-gradient()": {
- "comment": "first Apple proposal gradient syntax https://webkit.org/blog/175/introducing-css-gradients/ - TODO: simplify when after match algorithm improvement ( [, point, radius | , point] -> [, radius]? , point )",
- "syntax": "-webkit-gradient( <-webkit-gradient-type>, <-webkit-gradient-point> [, <-webkit-gradient-point> | , <-webkit-gradient-radius>, <-webkit-gradient-point> ] [, <-webkit-gradient-radius>]? [, <-webkit-gradient-color-stop>]* )"
- },
- "-webkit-gradient-color-stop": {
- "comment": "first Apple proposal gradient syntax https://webkit.org/blog/175/introducing-css-gradients/",
- "syntax": "from( <color> ) | color-stop( [ <number-zero-one> | <percentage> ] , <color> ) | to( <color> )"
- },
- "-webkit-gradient-point": {
- "comment": "first Apple proposal gradient syntax https://webkit.org/blog/175/introducing-css-gradients/",
- "syntax": "[ left | center | right | <length-percentage> ] [ top | center | bottom | <length-percentage> ]"
- },
- "-webkit-gradient-radius": {
- "comment": "first Apple proposal gradient syntax https://webkit.org/blog/175/introducing-css-gradients/",
- "syntax": "<length> | <percentage>"
- },
- "-webkit-gradient-type": {
- "comment": "first Apple proposal gradient syntax https://webkit.org/blog/175/introducing-css-gradients/",
- "syntax": "linear | radial"
- },
- "-webkit-mask-box-repeat": {
- "comment": "missed; https://developer.mozilla.org/en-US/docs/Web/CSS/-webkit-mask-box-image",
- "syntax": "repeat | stretch | round"
- },
- "-webkit-mask-clip-style": {
- "comment": "missed; there is no enough information about `-webkit-mask-clip` property, but looks like all those keywords are working",
- "syntax": "border | border-box | padding | padding-box | content | content-box | text"
- },
- "-ms-filter-function-list": {
- "comment": "https://developer.mozilla.org/en-US/docs/Web/CSS/-ms-filter",
- "syntax": "<-ms-filter-function>+"
- },
- "-ms-filter-function": {
- "comment": "https://developer.mozilla.org/en-US/docs/Web/CSS/-ms-filter",
- "syntax": "<-ms-filter-function-progid> | <-ms-filter-function-legacy>"
- },
- "-ms-filter-function-progid": {
- "comment": "https://developer.mozilla.org/en-US/docs/Web/CSS/-ms-filter",
- "syntax": "'progid:' [ <ident-token> '.' ]* [ <ident-token> | <function-token> <any-value>? ) ]"
- },
- "-ms-filter-function-legacy": {
- "comment": "https://developer.mozilla.org/en-US/docs/Web/CSS/-ms-filter",
- "syntax": "<ident-token> | <function-token> <any-value>? )"
- },
- "-ms-filter": {
- "syntax": "<string>"
- },
- "age": {
- "comment": "https://www.w3.org/TR/css3-speech/#voice-family",
- "syntax": "child | young | old"
- },
- "attr-name": {
- "syntax": "<wq-name>"
- },
- "attr-fallback": {
- "syntax": "<any-value>"
- },
- "bg-clip": {
- "comment": "missed, https://drafts.csswg.org/css-backgrounds-4/#typedef-bg-clip",
- "syntax": "<box> | border | text"
- },
- "bottom": {
- "comment": "missed; not sure we should add it, but no others except `shape` is using it so it's ok for now; https://drafts.fxtf.org/css-masking-1/#funcdef-clip-rect",
- "syntax": "<length> | auto"
- },
- "content-list": {
- "comment": "added attr(), see https://github.com/csstree/csstree/issues/201",
- "syntax": "[ <string> | contents | <image> | <counter> | <quote> | <target> | <leader()> | <attr()> ]+"
- },
- "element()": {
- "comment": "https://drafts.csswg.org/css-gcpm/#element-syntax & https://drafts.csswg.org/css-images-4/#element-notation",
- "syntax": "element( <custom-ident> , [ first | start | last | first-except ]? ) | element( <id-selector> )"
- },
- "generic-voice": {
- "comment": "https://www.w3.org/TR/css3-speech/#voice-family",
- "syntax": "[ <age>? <gender> <integer>? ]"
- },
- "gender": {
- "comment": "https://www.w3.org/TR/css3-speech/#voice-family",
- "syntax": "male | female | neutral"
- },
- "generic-family": {
- "comment": "added -apple-system",
- "references": [
- "https://webkit.org/blog/3709/using-the-system-font-in-web-content/"
- ],
- "syntax": "| -apple-system"
- },
- "gradient": {
- "comment": "added legacy syntaxes support",
- "syntax": "| <-legacy-gradient>"
- },
- "left": {
- "comment": "missed; not sure we should add it, but no others except `shape` is using it so it's ok for now; https://drafts.fxtf.org/css-masking-1/#funcdef-clip-rect",
- "syntax": "<length> | auto"
- },
- "mask-image": {
- "comment": "missed; https://drafts.fxtf.org/css-masking-1/#the-mask-image",
- "syntax": "<mask-reference>#"
- },
- "named-color": {
- "comment": "added non standard color names",
- "syntax": "| <-non-standard-color>"
- },
- "paint": {
- "comment": "used by SVG https://www.w3.org/TR/SVG/painting.html#SpecifyingPaint",
- "syntax": "none | <color> | <url> [ none | <color> ]? | context-fill | context-stroke"
- },
- "right": {
- "comment": "missed; not sure we should add it, but no others except `shape` is using it so it's ok for now; https://drafts.fxtf.org/css-masking-1/#funcdef-clip-rect",
- "syntax": "<length> | auto"
- },
- "shape": {
- "comment": "missed spaces in function body and add backwards compatible syntax",
- "syntax": "rect( <top>, <right>, <bottom>, <left> ) | rect( <top> <right> <bottom> <left> )"
- },
- "scroll-timeline-axis": {
- "comment": "missed definition",
- "syntax": "block | inline | vertical | horizontal"
- },
- "scroll-timeline-name": {
- "comment": "missed definition",
- "references": [
- "https://w3c.github.io/csswg-drafts/scroll-animations/#propdef-scroll-timeline-name"
- ],
- "syntax": "none | <custom-ident>"
- },
- "single-animation-composition": {
- "comment": "missed definition",
- "references": [
- "https://w3c.github.io/csswg-drafts/css-animations-2/#typedef-single-animation-composition"
- ],
- "syntax": "replace | add | accumulate"
- },
- "svg-length": {
- "comment": "All coordinates and lengths in SVG can be specified with or without a unit identifier",
- "references": [
- "https://www.w3.org/TR/SVG11/coords.html#Units"
- ],
- "syntax": "<percentage> | <length> | <number>"
- },
- "svg-writing-mode": {
- "comment": "SVG specific keywords (deprecated for CSS)",
- "references": [
- "https://developer.mozilla.org/en/docs/Web/CSS/writing-mode",
- "https://www.w3.org/TR/SVG/text.html#WritingModeProperty"
- ],
- "syntax": "lr-tb | rl-tb | tb-rl | lr | rl | tb"
- },
- "top": {
- "comment": "missed; not sure we should add it, but no others except `shape` is using it so it's ok for now; https://drafts.fxtf.org/css-masking-1/#funcdef-clip-rect",
- "syntax": "<length> | auto"
- },
- "x": {
- "comment": "missed; not sure we should add it, but no others except `cursor` is using it so it's ok for now; https://drafts.csswg.org/css-ui-3/#cursor",
- "syntax": "<number>"
- },
- "y": {
- "comment": "missed; not sure we should add it, but no others except `cursor` is using so it's ok for now; https://drafts.csswg.org/css-ui-3/#cursor",
- "syntax": "<number>"
- },
- "declaration": {
- "comment": "missed, restored by https://drafts.csswg.org/css-syntax",
- "syntax": "<ident-token> : <declaration-value>? [ '!' important ]?"
- },
- "declaration-list": {
- "comment": "missed, restored by https://drafts.csswg.org/css-syntax",
- "syntax": "[ <declaration>? ';' ]* <declaration>?"
- },
- "url": {
- "comment": "https://drafts.csswg.org/css-values-4/#urls",
- "syntax": "url( <string> <url-modifier>* ) | <url-token>"
- },
- "url-modifier": {
- "comment": "https://drafts.csswg.org/css-values-4/#typedef-url-modifier",
- "syntax": "<ident> | <function-token> <any-value> )"
- },
- "number-zero-one": {
- "syntax": "<number [0,1]>"
- },
- "number-one-or-greater": {
- "syntax": "<number [1,∞]>"
- },
- "-non-standard-display": {
- "syntax": "-ms-inline-flexbox | -ms-grid | -ms-inline-grid | -webkit-flex | -webkit-inline-flex | -webkit-box | -webkit-inline-box | -moz-inline-stack | -moz-box | -moz-inline-box"
- }
- }
-}
diff --git a/node_modules/css-tree/dist/csstree.esm.js b/node_modules/css-tree/dist/csstree.esm.js
deleted file mode 100644
index 02056ca9..00000000
--- a/node_modules/css-tree/dist/csstree.esm.js
+++ /dev/null
@@ -1,11 +0,0 @@
-var rs=Object.create;var tr=Object.defineProperty;var ns=Object.getOwnPropertyDescriptor;var os=Object.getOwnPropertyNames;var is=Object.getPrototypeOf,as=Object.prototype.hasOwnProperty;var Oe=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),b=(e,t)=>{for(var r in t)tr(e,r,{get:t[r],enumerable:!0})},ss=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of os(t))!as.call(e,o)&&o!==r&&tr(e,o,{get:()=>t[o],enumerable:!(n=ns(t,o))||n.enumerable});return e};var ls=(e,t,r)=>(r=e!=null?rs(is(e)):{},ss(t||!e||!e.__esModule?tr(r,"default",{value:e,enumerable:!0}):r,e));var Jo=Oe(ur=>{var Zo="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("");ur.encode=function(e){if(0<=e&&e<Zo.length)return Zo[e];throw new TypeError("Must be between 0 and 63: "+e)};ur.decode=function(e){var t=65,r=90,n=97,o=122,i=48,s=57,u=43,c=47,a=26,l=52;return t<=e&&e<=r?e-t:n<=e&&e<=o?e-n+a:i<=e&&e<=s?e-i+l:e==u?62:e==c?63:-1}});var oi=Oe(hr=>{var ei=Jo(),pr=5,ti=1<<pr,ri=ti-1,ni=ti;function ks(e){return e<0?(-e<<1)+1:(e<<1)+0}function ws(e){var t=(e&1)===1,r=e>>1;return t?-r:r}hr.encode=function(t){var r="",n,o=ks(t);do n=o&ri,o>>>=pr,o>0&&(n|=ni),r+=ei.encode(n);while(o>0);return r};hr.decode=function(t,r,n){var o=t.length,i=0,s=0,u,c;do{if(r>=o)throw new Error("Expected more digits in base 64 VLQ value.");if(c=ei.decode(t.charCodeAt(r++)),c===-1)throw new Error("Invalid base64 digit: "+t.charAt(r-1));u=!!(c&ni),c&=ri,i=i+(c<<s),s+=pr}while(u);n.value=ws(i),n.rest=r}});var Et=Oe(K=>{function vs(e,t,r){if(t in e)return e[t];if(arguments.length===3)return r;throw new Error('"'+t+'" is a required argument.')}K.getArg=vs;var ii=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.-]*)(?::(\d+))?(.*)$/,Ss=/^data:.+\,.+$/;function nt(e){var t=e.match(ii);return t?{scheme:t[1],auth:t[2],host:t[3],port:t[4],path:t[5]}:null}K.urlParse=nt;function qe(e){var t="";return e.scheme&&(t+=e.scheme+":"),t+="//",e.auth&&(t+=e.auth+"@"),e.host&&(t+=e.host),e.port&&(t+=":"+e.port),e.path&&(t+=e.path),t}K.urlGenerate=qe;var Cs=32;function As(e){var t=[];return function(r){for(var n=0;n<t.length;n++)if(t[n].input===r){var o=t[0];return t[0]=t[n],t[n]=o,t[0].result}var i=e(r);return t.unshift({input:r,result:i}),t.length>Cs&&t.pop(),i}}var mr=As(function(t){var r=t,n=nt(t);if(n){if(!n.path)return t;r=n.path}for(var o=K.isAbsolute(r),i=[],s=0,u=0;;)if(s=u,u=r.indexOf("/",s),u===-1){i.push(r.slice(s));break}else for(i.push(r.slice(s,u));u<r.length&&r[u]==="/";)u++;for(var c,a=0,u=i.length-1;u>=0;u--)c=i[u],c==="."?i.splice(u,1):c===".."?a++:a>0&&(c===""?(i.splice(u+1,a),a=0):(i.splice(u,2),a--));return r=i.join("/"),r===""&&(r=o?"/":"."),n?(n.path=r,qe(n)):r});K.normalize=mr;function ai(e,t){e===""&&(e="."),t===""&&(t=".");var r=nt(t),n=nt(e);if(n&&(e=n.path||"/"),r&&!r.scheme)return n&&(r.scheme=n.scheme),qe(r);if(r||t.match(Ss))return t;if(n&&!n.host&&!n.path)return n.host=t,qe(n);var o=t.charAt(0)==="/"?t:mr(e.replace(/\/+$/,"")+"/"+t);return n?(n.path=o,qe(n)):o}K.join=ai;K.isAbsolute=function(e){return e.charAt(0)==="/"||ii.test(e)};function Ts(e,t){e===""&&(e="."),e=e.replace(/\/$/,"");for(var r=0;t.indexOf(e+"/")!==0;){var n=e.lastIndexOf("/");if(n<0||(e=e.slice(0,n),e.match(/^([^\/]+:\/)?\/*$/)))return t;++r}return Array(r+1).join("../")+t.substr(e.length+1)}K.relative=Ts;var si=function(){var e=Object.create(null);return!("__proto__"in e)}();function li(e){return e}function Es(e){return ci(e)?"$"+e:e}K.toSetString=si?li:Es;function Ls(e){return ci(e)?e.slice(1):e}K.fromSetString=si?li:Ls;function ci(e){if(!e)return!1;var t=e.length;if(t<9||e.charCodeAt(t-1)!==95||e.charCodeAt(t-2)!==95||e.charCodeAt(t-3)!==111||e.charCodeAt(t-4)!==116||e.charCodeAt(t-5)!==111||e.charCodeAt(t-6)!==114||e.charCodeAt(t-7)!==112||e.charCodeAt(t-8)!==95||e.charCodeAt(t-9)!==95)return!1;for(var r=t-10;r>=0;r--)if(e.charCodeAt(r)!==36)return!1;return!0}function Ps(e,t,r){var n=be(e.source,t.source);return n!==0||(n=e.originalLine-t.originalLine,n!==0)||(n=e.originalColumn-t.originalColumn,n!==0||r)||(n=e.generatedColumn-t.generatedColumn,n!==0)||(n=e.generatedLine-t.generatedLine,n!==0)?n:be(e.name,t.name)}K.compareByOriginalPositions=Ps;function Is(e,t,r){var n;return n=e.originalLine-t.originalLine,n!==0||(n=e.originalColumn-t.originalColumn,n!==0||r)||(n=e.generatedColumn-t.generatedColumn,n!==0)||(n=e.generatedLine-t.generatedLine,n!==0)?n:be(e.name,t.name)}K.compareByOriginalPositionsNoSource=Is;function Ds(e,t,r){var n=e.generatedLine-t.generatedLine;return n!==0||(n=e.generatedColumn-t.generatedColumn,n!==0||r)||(n=be(e.source,t.source),n!==0)||(n=e.originalLine-t.originalLine,n!==0)||(n=e.originalColumn-t.originalColumn,n!==0)?n:be(e.name,t.name)}K.compareByGeneratedPositionsDeflated=Ds;function Os(e,t,r){var n=e.generatedColumn-t.generatedColumn;return n!==0||r||(n=be(e.source,t.source),n!==0)||(n=e.originalLine-t.originalLine,n!==0)||(n=e.originalColumn-t.originalColumn,n!==0)?n:be(e.name,t.name)}K.compareByGeneratedPositionsDeflatedNoLine=Os;function be(e,t){return e===t?0:e===null?1:t===null?-1:e>t?1:-1}function Ns(e,t){var r=e.generatedLine-t.generatedLine;return r!==0||(r=e.generatedColumn-t.generatedColumn,r!==0)||(r=be(e.source,t.source),r!==0)||(r=e.originalLine-t.originalLine,r!==0)||(r=e.originalColumn-t.originalColumn,r!==0)?r:be(e.name,t.name)}K.compareByGeneratedPositionsInflated=Ns;function zs(e){return JSON.parse(e.replace(/^\)]}'[^\n]*\n/,""))}K.parseSourceMapInput=zs;function Ms(e,t,r){if(t=t||"",e&&(e[e.length-1]!=="/"&&t[0]!=="/"&&(e+="/"),t=e+t),r){var n=nt(r);if(!n)throw new Error("sourceMapURL could not be parsed");if(n.path){var o=n.path.lastIndexOf("/");o>=0&&(n.path=n.path.substring(0,o+1))}t=ai(qe(n),t)}return mr(t)}K.computeSourceURL=Ms});var pi=Oe(ui=>{var fr=Et(),dr=Object.prototype.hasOwnProperty,Le=typeof Map<"u";function xe(){this._array=[],this._set=Le?new Map:Object.create(null)}xe.fromArray=function(t,r){for(var n=new xe,o=0,i=t.length;o<i;o++)n.add(t[o],r);return n};xe.prototype.size=function(){return Le?this._set.size:Object.getOwnPropertyNames(this._set).length};xe.prototype.add=function(t,r){var n=Le?t:fr.toSetString(t),o=Le?this.has(t):dr.call(this._set,n),i=this._array.length;(!o||r)&&this._array.push(t),o||(Le?this._set.set(t,i):this._set[n]=i)};xe.prototype.has=function(t){if(Le)return this._set.has(t);var r=fr.toSetString(t);return dr.call(this._set,r)};xe.prototype.indexOf=function(t){if(Le){var r=this._set.get(t);if(r>=0)return r}else{var n=fr.toSetString(t);if(dr.call(this._set,n))return this._set[n]}throw new Error('"'+t+'" is not in the set.')};xe.prototype.at=function(t){if(t>=0&&t<this._array.length)return this._array[t];throw new Error("No element indexed by "+t)};xe.prototype.toArray=function(){return this._array.slice()};ui.ArraySet=xe});var fi=Oe(mi=>{var hi=Et();function Rs(e,t){var r=e.generatedLine,n=t.generatedLine,o=e.generatedColumn,i=t.generatedColumn;return n>r||n==r&&i>=o||hi.compareByGeneratedPositionsInflated(e,t)<=0}function Lt(){this._array=[],this._sorted=!0,this._last={generatedLine:-1,generatedColumn:0}}Lt.prototype.unsortedForEach=function(t,r){this._array.forEach(t,r)};Lt.prototype.add=function(t){Rs(this._last,t)?(this._last=t,this._array.push(t)):(this._sorted=!1,this._array.push(t))};Lt.prototype.toArray=function(){return this._sorted||(this._array.sort(hi.compareByGeneratedPositionsInflated),this._sorted=!0),this._array};mi.MappingList=Lt});var gi=Oe(di=>{var ot=oi(),j=Et(),Pt=pi().ArraySet,Fs=fi().MappingList;function oe(e){e||(e={}),this._file=j.getArg(e,"file",null),this._sourceRoot=j.getArg(e,"sourceRoot",null),this._skipValidation=j.getArg(e,"skipValidation",!1),this._sources=new Pt,this._names=new Pt,this._mappings=new Fs,this._sourcesContents=null}oe.prototype._version=3;oe.fromSourceMap=function(t){var r=t.sourceRoot,n=new oe({file:t.file,sourceRoot:r});return t.eachMapping(function(o){var i={generated:{line:o.generatedLine,column:o.generatedColumn}};o.source!=null&&(i.source=o.source,r!=null&&(i.source=j.relative(r,i.source)),i.original={line:o.originalLine,column:o.originalColumn},o.name!=null&&(i.name=o.name)),n.addMapping(i)}),t.sources.forEach(function(o){var i=o;r!==null&&(i=j.relative(r,o)),n._sources.has(i)||n._sources.add(i);var s=t.sourceContentFor(o);s!=null&&n.setSourceContent(o,s)}),n};oe.prototype.addMapping=function(t){var r=j.getArg(t,"generated"),n=j.getArg(t,"original",null),o=j.getArg(t,"source",null),i=j.getArg(t,"name",null);this._skipValidation||this._validateMapping(r,n,o,i),o!=null&&(o=String(o),this._sources.has(o)||this._sources.add(o)),i!=null&&(i=String(i),this._names.has(i)||this._names.add(i)),this._mappings.add({generatedLine:r.line,generatedColumn:r.column,originalLine:n!=null&&n.line,originalColumn:n!=null&&n.column,source:o,name:i})};oe.prototype.setSourceContent=function(t,r){var n=t;this._sourceRoot!=null&&(n=j.relative(this._sourceRoot,n)),r!=null?(this._sourcesContents||(this._sourcesContents=Object.create(null)),this._sourcesContents[j.toSetString(n)]=r):this._sourcesContents&&(delete this._sourcesContents[j.toSetString(n)],Object.keys(this._sourcesContents).length===0&&(this._sourcesContents=null))};oe.prototype.applySourceMap=function(t,r,n){var o=r;if(r==null){if(t.file==null)throw new Error(`SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, or the source map's "file" property. Both were omitted.`);o=t.file}var i=this._sourceRoot;i!=null&&(o=j.relative(i,o));var s=new Pt,u=new Pt;this._mappings.unsortedForEach(function(c){if(c.source===o&&c.originalLine!=null){var a=t.originalPositionFor({line:c.originalLine,column:c.originalColumn});a.source!=null&&(c.source=a.source,n!=null&&(c.source=j.join(n,c.source)),i!=null&&(c.source=j.relative(i,c.source)),c.originalLine=a.line,c.originalColumn=a.column,a.name!=null&&(c.name=a.name))}var l=c.source;l!=null&&!s.has(l)&&s.add(l);var p=c.name;p!=null&&!u.has(p)&&u.add(p)},this),this._sources=s,this._names=u,t.sources.forEach(function(c){var a=t.sourceContentFor(c);a!=null&&(n!=null&&(c=j.join(n,c)),i!=null&&(c=j.relative(i,c)),this.setSourceContent(c,a))},this)};oe.prototype._validateMapping=function(t,r,n,o){if(r&&typeof r.line!="number"&&typeof r.column!="number")throw new Error("original.line and original.column are not numbers -- you probably meant to omit the original mapping entirely and only map the generated position. If so, pass null for the original mapping instead of an object with empty or null values.");if(!(t&&"line"in t&&"column"in t&&t.line>0&&t.column>=0&&!r&&!n&&!o)){if(t&&"line"in t&&"column"in t&&r&&"line"in r&&"column"in r&&t.line>0&&t.column>=0&&r.line>0&&r.column>=0&&n)return;throw new Error("Invalid mapping: "+JSON.stringify({generated:t,source:n,original:r,name:o}))}};oe.prototype._serializeMappings=function(){for(var t=0,r=1,n=0,o=0,i=0,s=0,u="",c,a,l,p,m=this._mappings.toArray(),f=0,P=m.length;f<P;f++){if(a=m[f],c="",a.generatedLine!==r)for(t=0;a.generatedLine!==r;)c+=";",r++;else if(f>0){if(!j.compareByGeneratedPositionsInflated(a,m[f-1]))continue;c+=","}c+=ot.encode(a.generatedColumn-t),t=a.generatedColumn,a.source!=null&&(p=this._sources.indexOf(a.source),c+=ot.encode(p-s),s=p,c+=ot.encode(a.originalLine-1-o),o=a.originalLine-1,c+=ot.encode(a.originalColumn-n),n=a.originalColumn,a.name!=null&&(l=this._names.indexOf(a.name),c+=ot.encode(l-i),i=l)),u+=c}return u};oe.prototype._generateSourcesContent=function(t,r){return t.map(function(n){if(!this._sourcesContents)return null;r!=null&&(n=j.relative(r,n));var o=j.toSetString(n);return Object.prototype.hasOwnProperty.call(this._sourcesContents,o)?this._sourcesContents[o]:null},this)};oe.prototype.toJSON=function(){var t={version:this._version,sources:this._sources.toArray(),names:this._names.toArray(),mappings:this._serializeMappings()};return this._file!=null&&(t.file=this._file),this._sourceRoot!=null&&(t.sourceRoot=this._sourceRoot),this._sourcesContents&&(t.sourcesContent=this._generateSourcesContent(t.sources,t.sourceRoot)),t};oe.prototype.toString=function(){return JSON.stringify(this.toJSON())};di.SourceMapGenerator=oe});var $e={};b($e,{AtKeyword:()=>I,BadString:()=>Ae,BadUrl:()=>Y,CDC:()=>U,CDO:()=>ue,Colon:()=>O,Comma:()=>G,Comment:()=>E,Delim:()=>g,Dimension:()=>y,EOF:()=>Xe,Function:()=>x,Hash:()=>v,Ident:()=>h,LeftCurlyBracket:()=>M,LeftParenthesis:()=>T,LeftSquareBracket:()=>q,Number:()=>d,Percentage:()=>A,RightCurlyBracket:()=>H,RightParenthesis:()=>w,RightSquareBracket:()=>V,Semicolon:()=>_,String:()=>W,Url:()=>F,WhiteSpace:()=>k});var Xe=0,h=1,x=2,I=3,v=4,W=5,Ae=6,F=7,Y=8,g=9,d=10,A=11,y=12,k=13,ue=14,U=15,O=16,_=17,G=18,q=19,V=20,T=21,w=22,M=23,H=24,E=25;function B(e){return e>=48&&e<=57}function ee(e){return B(e)||e>=65&&e<=70||e>=97&&e<=102}function yt(e){return e>=65&&e<=90}function cs(e){return e>=97&&e<=122}function us(e){return yt(e)||cs(e)}function ps(e){return e>=128}function xt(e){return us(e)||ps(e)||e===95}function Ne(e){return xt(e)||B(e)||e===45}function hs(e){return e>=0&&e<=8||e===11||e>=14&&e<=31||e===127}function Ze(e){return e===10||e===13||e===12}function pe(e){return Ze(e)||e===32||e===9}function $(e,t){return!(e!==92||Ze(t)||t===0)}function ze(e,t,r){return e===45?xt(t)||t===45||$(t,r):xt(e)?!0:e===92?$(e,t):!1}function kt(e,t,r){return e===43||e===45?B(t)?2:t===46&&B(r)?3:0:e===46?B(t)?2:0:B(e)?1:0}function wt(e){return e===65279||e===65534?1:0}var rr=new Array(128),ms=128,Je=130,nr=131,vt=132,or=133;for(let e=0;e<rr.length;e++)rr[e]=pe(e)&&Je||B(e)&&nr||xt(e)&&vt||hs(e)&&or||e||ms;function St(e){return e<128?rr[e]:vt}function Me(e,t){return t<e.length?e.charCodeAt(t):0}function Ct(e,t,r){return r===13&&Me(e,t+1)===10?2:1}function de(e,t,r){let n=e.charCodeAt(t);return yt(n)&&(n=n|32),n===r}function ge(e,t,r,n){if(r-t!==n.length||t<0||r>e.length)return!1;for(let o=t;o<r;o++){let i=n.charCodeAt(o-t),s=e.charCodeAt(o);if(yt(s)&&(s=s|32),s!==i)return!1}return!0}function qo(e,t){for(;t>=0&&pe(e.charCodeAt(t));t--);return t+1}function et(e,t){for(;t<e.length&&pe(e.charCodeAt(t));t++);return t}function ir(e,t){for(;t<e.length&&B(e.charCodeAt(t));t++);return t}function se(e,t){if(t+=2,ee(Me(e,t-1))){for(let n=Math.min(e.length,t+5);t<n&&ee(Me(e,t));t++);let r=Me(e,t);pe(r)&&(t+=Ct(e,t,r))}return t}function tt(e,t){for(;t<e.length;t++){let r=e.charCodeAt(t);if(!Ne(r)){if($(r,Me(e,t+1))){t=se(e,t)-1;continue}break}}return t}function Te(e,t){let r=e.charCodeAt(t);if((r===43||r===45)&&(r=e.charCodeAt(t+=1)),B(r)&&(t=ir(e,t+1),r=e.charCodeAt(t)),r===46&&B(e.charCodeAt(t+1))&&(t+=2,t=ir(e,t)),de(e,t,101)){let n=0;r=e.charCodeAt(t+1),(r===45||r===43)&&(n=1,r=e.charCodeAt(t+2)),B(r)&&(t=ir(e,t+1+n+1))}return t}function At(e,t){for(;t<e.length;t++){let r=e.charCodeAt(t);if(r===41){t++;break}$(r,Me(e,t+1))&&(t=se(e,t))}return t}function Re(e){if(e.length===1&&!ee(e.charCodeAt(0)))return e[0];let t=parseInt(e,16);return(t===0||t>=55296&&t<=57343||t>1114111)&&(t=65533),String.fromCodePoint(t)}var Fe=["EOF-token","ident-token","function-token","at-keyword-token","hash-token","string-token","bad-string-token","url-token","bad-url-token","delim-token","number-token","percentage-token","dimension-token","whitespace-token","CDO-token","CDC-token","colon-token","semicolon-token","comma-token","[-token","]-token","(-token",")-token","{-token","}-token"];function Be(e=null,t){return e===null||e.length<t?new Uint32Array(Math.max(t+1024,16384)):e}var Uo=10,fs=12,jo=13;function Wo(e){let t=e.source,r=t.length,n=t.length>0?wt(t.charCodeAt(0)):0,o=Be(e.lines,r),i=Be(e.columns,r),s=e.startLine,u=e.startColumn;for(let c=n;c<r;c++){let a=t.charCodeAt(c);o[c]=s,i[c]=u++,(a===Uo||a===jo||a===fs)&&(a===jo&&c+1<r&&t.charCodeAt(c+1)===Uo&&(c++,o[c]=s,i[c]=u),s++,u=1)}o[r]=s,i[r]=u,e.lines=o,e.columns=i,e.computed=!0}var Tt=class{constructor(){this.lines=null,this.columns=null,this.computed=!1}setSource(t,r=0,n=1,o=1){this.source=t,this.startOffset=r,this.startLine=n,this.startColumn=o,this.computed=!1}getLocation(t,r){return this.computed||Wo(this),{source:r,offset:this.startOffset+t,line:this.lines[t],column:this.columns[t]}}getLocationRange(t,r,n){return this.computed||Wo(this),{source:n,start:{offset:this.startOffset+t,line:this.lines[t],column:this.columns[t]},end:{offset:this.startOffset+r,line:this.lines[r],column:this.columns[r]}}}};var ne=16777215,we=24,ds=new Map([[2,22],[21,22],[19,20],[23,24]]),rt=class{constructor(t,r){this.setSource(t,r)}reset(){this.eof=!1,this.tokenIndex=-1,this.tokenType=0,this.tokenStart=this.firstCharOffset,this.tokenEnd=this.firstCharOffset}setSource(t="",r=()=>{}){t=String(t||"");let n=t.length,o=Be(this.offsetAndType,t.length+1),i=Be(this.balance,t.length+1),s=0,u=0,c=0,a=-1;for(this.offsetAndType=null,this.balance=null,r(t,(l,p,m)=>{switch(l){default:i[s]=n;break;case u:{let f=c&ne;for(c=i[f],u=c>>we,i[s]=f,i[f++]=s;f<s;f++)i[f]===n&&(i[f]=s);break}case 21:case 2:case 19:case 23:i[s]=c,u=ds.get(l),c=u<<we|s;break}o[s++]=l<<we|m,a===-1&&(a=p)}),o[s]=0<<we|n,i[s]=n,i[n]=n;c!==0;){let l=c&ne;c=i[l],i[l]=n}this.source=t,this.firstCharOffset=a===-1?0:a,this.tokenCount=s,this.offsetAndType=o,this.balance=i,this.reset(),this.next()}lookupType(t){return t+=this.tokenIndex,t<this.tokenCount?this.offsetAndType[t]>>we:0}lookupOffset(t){return t+=this.tokenIndex,t<this.tokenCount?this.offsetAndType[t-1]&ne:this.source.length}lookupValue(t,r){return t+=this.tokenIndex,t<this.tokenCount?ge(this.source,this.offsetAndType[t-1]&ne,this.offsetAndType[t]&ne,r):!1}getTokenStart(t){return t===this.tokenIndex?this.tokenStart:t>0?t<this.tokenCount?this.offsetAndType[t-1]&ne:this.offsetAndType[this.tokenCount]&ne:this.firstCharOffset}substrToCursor(t){return this.source.substring(t,this.tokenStart)}isBalanceEdge(t){return this.balance[this.tokenIndex]<t}isDelim(t,r){return r?this.lookupType(r)===9&&this.source.charCodeAt(this.lookupOffset(r))===t:this.tokenType===9&&this.source.charCodeAt(this.tokenStart)===t}skip(t){let r=this.tokenIndex+t;r<this.tokenCount?(this.tokenIndex=r,this.tokenStart=this.offsetAndType[r-1]&ne,r=this.offsetAndType[r],this.tokenType=r>>we,this.tokenEnd=r&ne):(this.tokenIndex=this.tokenCount,this.next())}next(){let t=this.tokenIndex+1;t<this.tokenCount?(this.tokenIndex=t,this.tokenStart=this.tokenEnd,t=this.offsetAndType[t],this.tokenType=t>>we,this.tokenEnd=t&ne):(this.eof=!0,this.tokenIndex=this.tokenCount,this.tokenType=0,this.tokenStart=this.tokenEnd=this.source.length)}skipSC(){for(;this.tokenType===13||this.tokenType===25;)this.next()}skipUntilBalanced(t,r){let n=t,o,i;e:for(;n<this.tokenCount;n++){if(o=this.balance[n],o<t)break e;switch(i=n>0?this.offsetAndType[n-1]&ne:this.firstCharOffset,r(this.source.charCodeAt(i))){case 1:break e;case 2:n++;break e;default:this.balance[o]===n&&(n=o)}}this.skip(n-this.tokenIndex)}forEachToken(t){for(let r=0,n=this.firstCharOffset;r<this.tokenCount;r++){let o=n,i=this.offsetAndType[r],s=i&ne,u=i>>we;n=s,t(u,o,s,r)}}dump(){let t=new Array(this.tokenCount);return this.forEachToken((r,n,o,i)=>{t[i]={idx:i,type:Fe[r],chunk:this.source.substring(n,o),balance:this.balance[i]}}),t}};function ve(e,t){function r(p){return p<u?e.charCodeAt(p):0}function n(){if(a=Te(e,a),ze(r(a),r(a+1),r(a+2))){l=12,a=tt(e,a);return}if(r(a)===37){l=11,a++;return}l=10}function o(){let p=a;if(a=tt(e,a),ge(e,p,a,"url")&&r(a)===40){if(a=et(e,a+1),r(a)===34||r(a)===39){l=2,a=p+4;return}s();return}if(r(a)===40){l=2,a++;return}l=1}function i(p){for(p||(p=r(a++)),l=5;a<e.length;a++){let m=e.charCodeAt(a);switch(St(m)){case p:a++;return;case Je:if(Ze(m)){a+=Ct(e,a,m),l=6;return}break;case 92:if(a===e.length-1)break;let f=r(a+1);Ze(f)?a+=Ct(e,a+1,f):$(m,f)&&(a=se(e,a)-1);break}}}function s(){for(l=7,a=et(e,a);a<e.length;a++){let p=e.charCodeAt(a);switch(St(p)){case 41:a++;return;case Je:if(a=et(e,a),r(a)===41||a>=e.length){a<e.length&&a++;return}a=At(e,a),l=8;return;case 34:case 39:case 40:case or:a=At(e,a),l=8;return;case 92:if($(p,r(a+1))){a=se(e,a)-1;break}a=At(e,a),l=8;return}}}e=String(e||"");let u=e.length,c=wt(r(0)),a=c,l;for(;a<u;){let p=e.charCodeAt(a);switch(St(p)){case Je:l=13,a=et(e,a+1);break;case 34:i();break;case 35:Ne(r(a+1))||$(r(a+1),r(a+2))?(l=4,a=tt(e,a+1)):(l=9,a++);break;case 39:i();break;case 40:l=21,a++;break;case 41:l=22,a++;break;case 43:kt(p,r(a+1),r(a+2))?n():(l=9,a++);break;case 44:l=18,a++;break;case 45:kt(p,r(a+1),r(a+2))?n():r(a+1)===45&&r(a+2)===62?(l=15,a=a+3):ze(p,r(a+1),r(a+2))?o():(l=9,a++);break;case 46:kt(p,r(a+1),r(a+2))?n():(l=9,a++);break;case 47:r(a+1)===42?(l=25,a=e.indexOf("*/",a+2),a=a===-1?e.length:a+2):(l=9,a++);break;case 58:l=16,a++;break;case 59:l=17,a++;break;case 60:r(a+1)===33&&r(a+2)===45&&r(a+3)===45?(l=14,a=a+4):(l=9,a++);break;case 64:ze(r(a+1),r(a+2),r(a+3))?(l=3,a=tt(e,a+1)):(l=9,a++);break;case 91:l=19,a++;break;case 92:$(p,r(a+1))?o():(l=9,a++);break;case 93:l=20,a++;break;case 123:l=23,a++;break;case 125:l=24,a++;break;case nr:n();break;case vt:o();break;default:l=9,a++}t(l,c,c=a)}}var _e=null,D=class{static createItem(t){return{prev:null,next:null,data:t}}constructor(){this.head=null,this.tail=null,this.cursor=null}createItem(t){return D.createItem(t)}allocateCursor(t,r){let n;return _e!==null?(n=_e,_e=_e.cursor,n.prev=t,n.next=r,n.cursor=this.cursor):n={prev:t,next:r,cursor:this.cursor},this.cursor=n,n}releaseCursor(){let{cursor:t}=this;this.cursor=t.cursor,t.prev=null,t.next=null,t.cursor=_e,_e=t}updateCursors(t,r,n,o){let{cursor:i}=this;for(;i!==null;)i.prev===t&&(i.prev=r),i.next===n&&(i.next=o),i=i.cursor}*[Symbol.iterator](){for(let t=this.head;t!==null;t=t.next)yield t.data}get size(){let t=0;for(let r=this.head;r!==null;r=r.next)t++;return t}get isEmpty(){return this.head===null}get first(){return this.head&&this.head.data}get last(){return this.tail&&this.tail.data}fromArray(t){let r=null;this.head=null;for(let n of t){let o=D.createItem(n);r!==null?r.next=o:this.head=o,o.prev=r,r=o}return this.tail=r,this}toArray(){return[...this]}toJSON(){return[...this]}forEach(t,r=this){let n=this.allocateCursor(null,this.head);for(;n.next!==null;){let o=n.next;n.next=o.next,t.call(r,o.data,o,this)}this.releaseCursor()}forEachRight(t,r=this){let n=this.allocateCursor(this.tail,null);for(;n.prev!==null;){let o=n.prev;n.prev=o.prev,t.call(r,o.data,o,this)}this.releaseCursor()}reduce(t,r,n=this){let o=this.allocateCursor(null,this.head),i=r,s;for(;o.next!==null;)s=o.next,o.next=s.next,i=t.call(n,i,s.data,s,this);return this.releaseCursor(),i}reduceRight(t,r,n=this){let o=this.allocateCursor(this.tail,null),i=r,s;for(;o.prev!==null;)s=o.prev,o.prev=s.prev,i=t.call(n,i,s.data,s,this);return this.releaseCursor(),i}some(t,r=this){for(let n=this.head;n!==null;n=n.next)if(t.call(r,n.data,n,this))return!0;return!1}map(t,r=this){let n=new D;for(let o=this.head;o!==null;o=o.next)n.appendData(t.call(r,o.data,o,this));return n}filter(t,r=this){let n=new D;for(let o=this.head;o!==null;o=o.next)t.call(r,o.data,o,this)&&n.appendData(o.data);return n}nextUntil(t,r,n=this){if(t===null)return;let o=this.allocateCursor(null,t);for(;o.next!==null;){let i=o.next;if(o.next=i.next,r.call(n,i.data,i,this))break}this.releaseCursor()}prevUntil(t,r,n=this){if(t===null)return;let o=this.allocateCursor(t,null);for(;o.prev!==null;){let i=o.prev;if(o.prev=i.prev,r.call(n,i.data,i,this))break}this.releaseCursor()}clear(){this.head=null,this.tail=null}copy(){let t=new D;for(let r of this)t.appendData(r);return t}prepend(t){return this.updateCursors(null,t,this.head,t),this.head!==null?(this.head.prev=t,t.next=this.head):this.tail=t,this.head=t,this}prependData(t){return this.prepend(D.createItem(t))}append(t){return this.insert(t)}appendData(t){return this.insert(D.createItem(t))}insert(t,r=null){if(r!==null)if(this.updateCursors(r.prev,t,r,t),r.prev===null){if(this.head!==r)throw new Error("before doesn't belong to list");this.head=t,r.prev=t,t.next=r,this.updateCursors(null,t)}else r.prev.next=t,t.prev=r.prev,r.prev=t,t.next=r;else this.updateCursors(this.tail,t,null,t),this.tail!==null?(this.tail.next=t,t.prev=this.tail):this.head=t,this.tail=t;return this}insertData(t,r){return this.insert(D.createItem(t),r)}remove(t){if(this.updateCursors(t,t.prev,t,t.next),t.prev!==null)t.prev.next=t.next;else{if(this.head!==t)throw new Error("item doesn't belong to list");this.head=t.next}if(t.next!==null)t.next.prev=t.prev;else{if(this.tail!==t)throw new Error("item doesn't belong to list");this.tail=t.prev}return t.prev=null,t.next=null,t}push(t){this.insert(D.createItem(t))}pop(){return this.tail!==null?this.remove(this.tail):null}unshift(t){this.prepend(D.createItem(t))}shift(){return this.head!==null?this.remove(this.head):null}prependList(t){return this.insertList(t,this.head)}appendList(t){return this.insertList(t)}insertList(t,r){return t.head===null?this:(r!=null?(this.updateCursors(r.prev,t.tail,r,t.head),r.prev!==null?(r.prev.next=t.head,t.head.prev=r.prev):this.head=t.head,r.prev=t.tail,t.tail.next=r):(this.updateCursors(this.tail,t.tail,null,t.head),this.tail!==null?(this.tail.next=t.head,t.head.prev=this.tail):this.head=t.head,this.tail=t.tail),t.head=null,t.tail=null,this)}replace(t,r){"head"in r?this.insertList(r,t):this.insert(r,t),this.remove(t)}};function Ee(e,t){let r=Object.create(SyntaxError.prototype),n=new Error;return Object.assign(r,{name:e,message:t,get stack(){return(n.stack||"").replace(/^(.+\n){1,3}/,`${e}: ${t}
-`)}})}var ar=100,Ho=60,Yo=" ";function Go({source:e,line:t,column:r},n){function o(l,p){return i.slice(l,p).map((m,f)=>String(l+f+1).padStart(c)+" |"+m).join(`
-`)}let i=e.split(/\r\n?|\n|\f/),s=Math.max(1,t-n)-1,u=Math.min(t+n,i.length+1),c=Math.max(4,String(u).length)+1,a=0;r+=(Yo.length-1)*(i[t-1].substr(0,r-1).match(/\t/g)||[]).length,r>ar&&(a=r-Ho+3,r=Ho-2);for(let l=s;l<=u;l++)l>=0&&l<i.length&&(i[l]=i[l].replace(/\t/g,Yo),i[l]=(a>0&&i[l].length>a?"\u2026":"")+i[l].substr(a,ar-2)+(i[l].length>a+ar-1?"\u2026":""));return[o(s,t),new Array(r+c+2).join("-")+"^",o(t,u)].filter(Boolean).join(`
-`)}function sr(e,t,r,n,o){return Object.assign(Ee("SyntaxError",e),{source:t,offset:r,line:n,column:o,sourceFragment(s){return Go({source:t,line:n,column:o},isNaN(s)?0:s)},get formattedMessage(){return`Parse error: ${e}
-`+Go({source:t,line:n,column:o},2)}})}function Vo(e){let t=this.createList(),r=!1,n={recognizer:e};for(;!this.eof;){switch(this.tokenType){case 25:this.next();continue;case 13:r=!0,this.next();continue}let o=e.getNode.call(this,n);if(o===void 0)break;r&&(e.onWhiteSpace&&e.onWhiteSpace.call(this,o,t,n),r=!1),t.push(o)}return r&&e.onWhiteSpace&&e.onWhiteSpace.call(this,null,t,n),t}var Ko=()=>{},gs=33,bs=35,lr=59,Qo=123,Xo=0;function xs(e){return function(){return this[e]()}}function cr(e){let t=Object.create(null);for(let r in e){let n=e[r],o=n.parse||n;o&&(t[r]=o)}return t}function ys(e){let t={context:Object.create(null),scope:Object.assign(Object.create(null),e.scope),atrule:cr(e.atrule),pseudo:cr(e.pseudo),node:cr(e.node)};for(let r in e.parseContext)switch(typeof e.parseContext[r]){case"function":t.context[r]=e.parseContext[r];break;case"string":t.context[r]=xs(e.parseContext[r]);break}return{config:t,...t,...t.node}}function $o(e){let t="",r="<unknown>",n=!1,o=Ko,i=!1,s=new Tt,u=Object.assign(new rt,ys(e||{}),{parseAtrulePrelude:!0,parseRulePrelude:!0,parseValue:!0,parseCustomProperty:!1,readSequence:Vo,consumeUntilBalanceEnd:()=>0,consumeUntilLeftCurlyBracket(a){return a===Qo?1:0},consumeUntilLeftCurlyBracketOrSemicolon(a){return a===Qo||a===lr?1:0},consumeUntilExclamationMarkOrSemicolon(a){return a===gs||a===lr?1:0},consumeUntilSemicolonIncluded(a){return a===lr?2:0},createList(){return new D},createSingleNodeList(a){return new D().appendData(a)},getFirstListNode(a){return a&&a.first},getLastListNode(a){return a&&a.last},parseWithFallback(a,l){let p=this.tokenIndex;try{return a.call(this)}catch(m){if(i)throw m;let f=l.call(this,p);return i=!0,o(m,f),i=!1,f}},lookupNonWSType(a){let l;do if(l=this.lookupType(a++),l!==13)return l;while(l!==Xo);return Xo},charCodeAt(a){return a>=0&&a<t.length?t.charCodeAt(a):0},substring(a,l){return t.substring(a,l)},substrToCursor(a){return this.source.substring(a,this.tokenStart)},cmpChar(a,l){return de(t,a,l)},cmpStr(a,l,p){return ge(t,a,l,p)},consume(a){let l=this.tokenStart;return this.eat(a),this.substrToCursor(l)},consumeFunctionName(){let a=t.substring(this.tokenStart,this.tokenEnd-1);return this.eat(2),a},consumeNumber(a){let l=t.substring(this.tokenStart,Te(t,this.tokenStart));return this.eat(a),l},eat(a){if(this.tokenType!==a){let l=Fe[a].slice(0,-6).replace(/-/g," ").replace(/^./,f=>f.toUpperCase()),p=`${/[[\](){}]/.test(l)?`"${l}"`:l} is expected`,m=this.tokenStart;switch(a){case 1:this.tokenType===2||this.tokenType===7?(m=this.tokenEnd-1,p="Identifier is expected but function found"):p="Identifier is expected";break;case 4:this.isDelim(bs)&&(this.next(),m++,p="Name is expected");break;case 11:this.tokenType===10&&(m=this.tokenEnd,p="Percent sign is expected");break}this.error(p,m)}this.next()},eatIdent(a){(this.tokenType!==1||this.lookupValue(0,a)===!1)&&this.error(`Identifier "${a}" is expected`),this.next()},eatDelim(a){this.isDelim(a)||this.error(`Delim "${String.fromCharCode(a)}" is expected`),this.next()},getLocation(a,l){return n?s.getLocationRange(a,l,r):null},getLocationFromList(a){if(n){let l=this.getFirstListNode(a),p=this.getLastListNode(a);return s.getLocationRange(l!==null?l.loc.start.offset-s.startOffset:this.tokenStart,p!==null?p.loc.end.offset-s.startOffset:this.tokenStart,r)}return null},error(a,l){let p=typeof l<"u"&&l<t.length?s.getLocation(l):this.eof?s.getLocation(qo(t,t.length-1)):s.getLocation(this.tokenStart);throw new sr(a||"Unexpected input",t,p.offset,p.line,p.column)}});return Object.assign(function(a,l){t=a,l=l||{},u.setSource(t,ve),s.setSource(t,l.offset,l.line,l.column),r=l.filename||"<unknown>",n=Boolean(l.positions),o=typeof l.onParseError=="function"?l.onParseError:Ko,i=!1,u.parseAtrulePrelude="parseAtrulePrelude"in l?Boolean(l.parseAtrulePrelude):!0,u.parseRulePrelude="parseRulePrelude"in l?Boolean(l.parseRulePrelude):!0,u.parseValue="parseValue"in l?Boolean(l.parseValue):!0,u.parseCustomProperty="parseCustomProperty"in l?Boolean(l.parseCustomProperty):!1;let{context:p="default",onComment:m}=l;if(!(p in u.context))throw new Error("Unknown context `"+p+"`");typeof m=="function"&&u.forEachToken((P,te,X)=>{if(P===25){let S=u.getLocation(te,X),R=ge(t,X-2,X,"*/")?t.slice(te+2,X-2):t.slice(te+2,X);m(R,S)}});let f=u.context[p].call(u,l);return u.eof||u.error(),f},{SyntaxError:sr,config:u.config})}var xi=ls(gi(),1),bi=new Set(["Atrule","Selector","Declaration"]);function yi(e){let t=new xi.SourceMapGenerator,r={line:1,column:0},n={line:0,column:0},o={line:1,column:0},i={generated:o},s=1,u=0,c=!1,a=e.node;e.node=function(m){if(m.loc&&m.loc.start&&bi.has(m.type)){let f=m.loc.start.line,P=m.loc.start.column-1;(n.line!==f||n.column!==P)&&(n.line=f,n.column=P,r.line=s,r.column=u,c&&(c=!1,(r.line!==o.line||r.column!==o.column)&&t.addMapping(i)),c=!0,t.addMapping({source:m.loc.source,original:n,generated:r}))}a.call(this,m),c&&bi.has(m.type)&&(o.line=s,o.column=u)};let l=e.emit;e.emit=function(m,f,P){for(let te=0;te<m.length;te++)m.charCodeAt(te)===10?(s++,u=0):u++;l(m,f,P)};let p=e.result;return e.result=function(){return c&&t.addMapping(i),{css:p(),map:t}},e}var It={};b(It,{safe:()=>br,spec:()=>Us});var Bs=43,_s=45,gr=(e,t)=>{if(e===9&&(e=t),typeof e=="string"){let r=e.charCodeAt(0);return r>127?32768:r<<8}return e},ki=[[1,1],[1,2],[1,7],[1,8],[1,"-"],[1,10],[1,11],[1,12],[1,15],[1,21],[3,1],[3,2],[3,7],[3,8],[3,"-"],[3,10],[3,11],[3,12],[3,15],[4,1],[4,2],[4,7],[4,8],[4,"-"],[4,10],[4,11],[4,12],[4,15],[12,1],[12,2],[12,7],[12,8],[12,"-"],[12,10],[12,11],[12,12],[12,15],["#",1],["#",2],["#",7],["#",8],["#","-"],["#",10],["#",11],["#",12],["#",15],["-",1],["-",2],["-",7],["-",8],["-","-"],["-",10],["-",11],["-",12],["-",15],[10,1],[10,2],[10,7],[10,8],[10,10],[10,11],[10,12],[10,"%"],[10,15],["@",1],["@",2],["@",7],["@",8],["@","-"],["@",15],[".",10],[".",11],[".",12],["+",10],["+",11],["+",12],["/","*"]],qs=ki.concat([[1,4],[12,4],[4,4],[3,21],[3,5],[3,16],[11,11],[11,12],[11,2],[11,"-"],[22,1],[22,2],[22,11],[22,12],[22,4],[22,"-"]]);function wi(e){let t=new Set(e.map(([r,n])=>gr(r)<<16|gr(n)));return function(r,n,o){let i=gr(n,o),s=o.charCodeAt(0);return(s===_s&&n!==1&&n!==2&&n!==15||s===Bs?t.has(r<<16|s<<8):t.has(r<<16|i))&&this.emit(" ",13,!0),i}}var Us=wi(ki),br=wi(qs);var js=92;function Ws(e,t){if(typeof t=="function"){let r=null;e.children.forEach(n=>{r!==null&&t.call(this,r),this.node(n),r=n});return}e.children.forEach(this.node,this)}function Hs(e){ve(e,(t,r,n)=>{this.token(t,e.slice(r,n))})}function vi(e){let t=new Map;for(let r in e.node){let n=e.node[r];typeof(n.generate||n)=="function"&&t.set(r,n.generate||n)}return function(r,n){let o="",i=0,s={node(c){if(t.has(c.type))t.get(c.type).call(u,c);else throw new Error("Unknown node type: "+c.type)},tokenBefore:br,token(c,a){i=this.tokenBefore(i,c,a),this.emit(a,c,!1),c===9&&a.charCodeAt(0)===js&&this.emit(`
-`,13,!0)},emit(c){o+=c},result(){return o}};n&&(typeof n.decorator=="function"&&(s=n.decorator(s)),n.sourceMap&&(s=yi(s)),n.mode in It&&(s.tokenBefore=It[n.mode]));let u={node:c=>s.node(c),children:Ws,token:(c,a)=>s.token(c,a),tokenize:Hs};return s.node(r),s.result()}}function Si(e){return{fromPlainObject(t){return e(t,{enter(r){r.children&&!(r.children instanceof D)&&(r.children=new D().fromArray(r.children))}}),t},toPlainObject(t){return e(t,{leave(r){r.children&&r.children instanceof D&&(r.children=r.children.toArray())}}),t}}}var{hasOwnProperty:xr}=Object.prototype,it=function(){};function Ci(e){return typeof e=="function"?e:it}function Ai(e,t){return function(r,n,o){r.type===t&&e.call(this,r,n,o)}}function Ys(e,t){let r=t.structure,n=[];for(let o in r){if(xr.call(r,o)===!1)continue;let i=r[o],s={name:o,type:!1,nullable:!1};Array.isArray(i)||(i=[i]);for(let u of i)u===null?s.nullable=!0:typeof u=="string"?s.type="node":Array.isArray(u)&&(s.type="list");s.type&&n.push(s)}return n.length?{context:t.walkContext,fields:n}:null}function Gs(e){let t={};for(let r in e.node)if(xr.call(e.node,r)){let n=e.node[r];if(!n.structure)throw new Error("Missed `structure` field in `"+r+"` node type definition");t[r]=Ys(r,n)}return t}function Ti(e,t){let r=e.fields.slice(),n=e.context,o=typeof n=="string";return t&&r.reverse(),function(i,s,u,c){let a;o&&(a=s[n],s[n]=i);for(let l of r){let p=i[l.name];if(!l.nullable||p){if(l.type==="list"){if(t?p.reduceRight(c,!1):p.reduce(c,!1))return!0}else if(u(p))return!0}}o&&(s[n]=a)}}function Ei({StyleSheet:e,Atrule:t,Rule:r,Block:n,DeclarationList:o}){return{Atrule:{StyleSheet:e,Atrule:t,Rule:r,Block:n},Rule:{StyleSheet:e,Atrule:t,Rule:r,Block:n},Declaration:{StyleSheet:e,Atrule:t,Rule:r,Block:n,DeclarationList:o}}}function Li(e){let t=Gs(e),r={},n={},o=Symbol("break-walk"),i=Symbol("skip-node");for(let a in t)xr.call(t,a)&&t[a]!==null&&(r[a]=Ti(t[a],!1),n[a]=Ti(t[a],!0));let s=Ei(r),u=Ei(n),c=function(a,l){function p(S,R,ke){let z=m.call(X,S,R,ke);return z===o?!0:z===i?!1:!!(P.hasOwnProperty(S.type)&&P[S.type](S,X,p,te)||f.call(X,S,R,ke)===o)}let m=it,f=it,P=r,te=(S,R,ke,z)=>S||p(R,ke,z),X={break:o,skip:i,root:a,stylesheet:null,atrule:null,atrulePrelude:null,rule:null,selector:null,block:null,declaration:null,function:null};if(typeof l=="function")m=l;else if(l&&(m=Ci(l.enter),f=Ci(l.leave),l.reverse&&(P=n),l.visit)){if(s.hasOwnProperty(l.visit))P=l.reverse?u[l.visit]:s[l.visit];else if(!t.hasOwnProperty(l.visit))throw new Error("Bad value `"+l.visit+"` for `visit` option (should be: "+Object.keys(t).sort().join(", ")+")");m=Ai(m,l.visit),f=Ai(f,l.visit)}if(m===it&&f===it)throw new Error("Neither `enter` nor `leave` walker handler is set or both aren't a function");p(a)};return c.break=o,c.skip=i,c.find=function(a,l){let p=null;return c(a,function(m,f,P){if(l.call(this,m,f,P))return p=m,o}),p},c.findLast=function(a,l){let p=null;return c(a,{reverse:!0,enter(m,f,P){if(l.call(this,m,f,P))return p=m,o}}),p},c.findAll=function(a,l){let p=[];return c(a,function(m,f,P){l.call(this,m,f,P)&&p.push(m)}),p},c}function Vs(e){return e}function Ks(e){let{min:t,max:r,comma:n}=e;return t===0&&r===0?n?"#?":"*":t===0&&r===1?"?":t===1&&r===0?n?"#":"+":t===1&&r===1?"":(n?"#":"")+(t===r?"{"+t+"}":"{"+t+","+(r!==0?r:"")+"}")}function Qs(e){switch(e.type){case"Range":return" ["+(e.min===null?"-\u221E":e.min)+","+(e.max===null?"\u221E":e.max)+"]";default:throw new Error("Unknown node type `"+e.type+"`")}}function Xs(e,t,r,n){let o=e.combinator===" "||n?e.combinator:" "+e.combinator+" ",i=e.terms.map(s=>yr(s,t,r,n)).join(o);return e.explicit||r?(n||i[0]===","?"[":"[ ")+i+(n?"]":" ]"):i}function yr(e,t,r,n){let o;switch(e.type){case"Group":o=Xs(e,t,r,n)+(e.disallowEmpty?"!":"");break;case"Multiplier":return yr(e.term,t,r,n)+t(Ks(e),e);case"Type":o="<"+e.name+(e.opts?t(Qs(e.opts),e.opts):"")+">";break;case"Property":o="<'"+e.name+"'>";break;case"Keyword":o=e.name;break;case"AtKeyword":o="@"+e.name;break;case"Function":o=e.name+"(";break;case"String":case"Token":o=e.value;break;case"Comma":o=",";break;default:throw new Error("Unknown node type `"+e.type+"`")}return t(o,e)}function Pe(e,t){let r=Vs,n=!1,o=!1;return typeof t=="function"?r=t:t&&(n=Boolean(t.forceBraces),o=Boolean(t.compact),typeof t.decorate=="function"&&(r=t.decorate)),yr(e,r,n,o)}var Pi={offset:0,line:1,column:1};function $s(e,t){let r=e.tokens,n=e.longestMatch,o=n<r.length&&r[n].node||null,i=o!==t?o:null,s=0,u=0,c=0,a="",l,p;for(let m=0;m<r.length;m++){let f=r[m].value;m===n&&(u=f.length,s=a.length),i!==null&&r[m].node===i&&(m<=n?c++:c=0),a+=f}return n===r.length||c>1?(l=Dt(i||t,"end")||at(Pi,a),p=at(l)):(l=Dt(i,"start")||at(Dt(t,"start")||Pi,a.slice(0,s)),p=Dt(i,"end")||at(l,a.substr(s,u))),{css:a,mismatchOffset:s,mismatchLength:u,start:l,end:p}}function Dt(e,t){let r=e&&e.loc&&e.loc[t];return r?"line"in r?at(r):r:null}function at({offset:e,line:t,column:r},n){let o={offset:e,line:t,column:r};if(n){let i=n.split(/\n|\r\n?|\f/);o.offset+=n.length,o.line+=i.length-1,o.column=i.length===1?o.column+n.length:i.pop().length+1}return o}var Ue=function(e,t){let r=Ee("SyntaxReferenceError",e+(t?" `"+t+"`":""));return r.reference=t,r},Ii=function(e,t,r,n){let o=Ee("SyntaxMatchError",e),{css:i,mismatchOffset:s,mismatchLength:u,start:c,end:a}=$s(n,r);return o.rawMessage=e,o.syntax=t?Pe(t):"<generic>",o.css=i,o.mismatchOffset=s,o.mismatchLength=u,o.message=e+`
- syntax: `+o.syntax+`
- value: `+(i||"<empty string>")+`
- --------`+new Array(o.mismatchOffset+1).join("-")+"^",Object.assign(o,c),o.loc={source:r&&r.loc&&r.loc.source||"<unknown>",start:c,end:a},o};var Ot=new Map,je=new Map,Nt=45,zt=Zs,kr=Js,Ym=wr;function Mt(e,t){return t=t||0,e.length-t>=2&&e.charCodeAt(t)===Nt&&e.charCodeAt(t+1)===Nt}function wr(e,t){if(t=t||0,e.length-t>=3&&e.charCodeAt(t)===Nt&&e.charCodeAt(t+1)!==Nt){let r=e.indexOf("-",t+2);if(r!==-1)return e.substring(t,r+1)}return""}function Zs(e){if(Ot.has(e))return Ot.get(e);let t=e.toLowerCase(),r=Ot.get(t);if(r===void 0){let n=Mt(t,0),o=n?"":wr(t,0);r=Object.freeze({basename:t.substr(o.length),name:t,prefix:o,vendor:o,custom:n})}return Ot.set(e,r),r}function Js(e){if(je.has(e))return je.get(e);let t=e,r=e[0];r==="/"?r=e[1]==="/"?"//":"/":r!=="_"&&r!=="*"&&r!=="$"&&r!=="#"&&r!=="+"&&r!=="&"&&(r="");let n=Mt(t,r.length);if(!n&&(t=t.toLowerCase(),je.has(t))){let u=je.get(t);return je.set(e,u),u}let o=n?"":wr(t,r.length),i=t.substr(0,r.length+o.length),s=Object.freeze({basename:t.substr(i.length),name:t.substr(r.length),hack:r,vendor:o,prefix:i,custom:n});return je.set(e,s),s}var Rt=["initial","inherit","unset","revert","revert-layer"];var lt=43,he=45,vr=110,We=!0,tl=!1;function Cr(e,t){return e!==null&&e.type===9&&e.value.charCodeAt(0)===t}function st(e,t,r){for(;e!==null&&(e.type===13||e.type===25);)e=r(++t);return t}function Se(e,t,r,n){if(!e)return 0;let o=e.value.charCodeAt(t);if(o===lt||o===he){if(r)return 0;t++}for(;t<e.value.length;t++)if(!B(e.value.charCodeAt(t)))return 0;return n+1}function Sr(e,t,r){let n=!1,o=st(e,t,r);if(e=r(o),e===null)return t;if(e.type!==10)if(Cr(e,lt)||Cr(e,he)){if(n=!0,o=st(r(++o),o,r),e=r(o),e===null||e.type!==10)return 0}else return t;if(!n){let i=e.value.charCodeAt(0);if(i!==lt&&i!==he)return 0}return Se(e,n?0:1,n,o)}function Ar(e,t){let r=0;if(!e)return 0;if(e.type===10)return Se(e,0,tl,r);if(e.type===1&&e.value.charCodeAt(0)===he){if(!de(e.value,1,vr))return 0;switch(e.value.length){case 2:return Sr(t(++r),r,t);case 3:return e.value.charCodeAt(2)!==he?0:(r=st(t(++r),r,t),e=t(r),Se(e,0,We,r));default:return e.value.charCodeAt(2)!==he?0:Se(e,3,We,r)}}else if(e.type===1||Cr(e,lt)&&t(r+1).type===1){if(e.type!==1&&(e=t(++r)),e===null||!de(e.value,0,vr))return 0;switch(e.value.length){case 1:return Sr(t(++r),r,t);case 2:return e.value.charCodeAt(1)!==he?0:(r=st(t(++r),r,t),e=t(r),Se(e,0,We,r));default:return e.value.charCodeAt(1)!==he?0:Se(e,2,We,r)}}else if(e.type===12){let n=e.value.charCodeAt(0),o=n===lt||n===he?1:0,i=o;for(;i<e.value.length&&B(e.value.charCodeAt(i));i++);return i===o||!de(e.value,i,vr)?0:i+1===e.value.length?Sr(t(++r),r,t):e.value.charCodeAt(i+1)!==he?0:i+2===e.value.length?(r=st(t(++r),r,t),e=t(r),Se(e,0,We,r)):Se(e,i+2,We,r)}return 0}var rl=43,Di=45,Oi=63,nl=117;function Tr(e,t){return e!==null&&e.type===9&&e.value.charCodeAt(0)===t}function ol(e,t){return e.value.charCodeAt(0)===t}function ct(e,t,r){let n=0;for(let o=t;o<e.value.length;o++){let i=e.value.charCodeAt(o);if(i===Di&&r&&n!==0)return ct(e,t+n+1,!1),6;if(!ee(i)||++n>6)return 0}return n}function Ft(e,t,r){if(!e)return 0;for(;Tr(r(t),Oi);){if(++e>6)return 0;t++}return t}function Er(e,t){let r=0;if(e===null||e.type!==1||!de(e.value,0,nl)||(e=t(++r),e===null))return 0;if(Tr(e,rl))return e=t(++r),e===null?0:e.type===1?Ft(ct(e,0,!0),++r,t):Tr(e,Oi)?Ft(1,++r,t):0;if(e.type===10){let n=ct(e,1,!0);return n===0?0:(e=t(++r),e===null?r:e.type===12||e.type===10?!ol(e,Di)||!ct(e,1,!1)?0:r+1:Ft(n,r,t))}return e.type===12?Ft(ct(e,1,!0),++r,t):0}var il=["calc(","-moz-calc(","-webkit-calc("],Lr=new Map([[2,22],[21,22],[19,20],[23,24]]);function le(e,t){return t<e.length?e.charCodeAt(t):0}function Ni(e,t){return ge(e,0,e.length,t)}function zi(e,t){for(let r=0;r<t.length;r++)if(Ni(e,t[r]))return!0;return!1}function Mi(e,t){return t!==e.length-2?!1:le(e,t)===92&&B(le(e,t+1))}function Bt(e,t,r){if(e&&e.type==="Range"){let n=Number(r!==void 0&&r!==t.length?t.substr(0,r):t);if(isNaN(n)||e.min!==null&&n<e.min&&typeof e.min!="string"||e.max!==null&&n>e.max&&typeof e.max!="string")return!0}return!1}function al(e,t){let r=0,n=[],o=0;e:do{switch(e.type){case 24:case 22:case 20:if(e.type!==r)break e;if(r=n.pop(),n.length===0){o++;break e}break;case 2:case 21:case 19:case 23:n.push(r),r=Lr.get(e.type);break}o++}while(e=t(o));return o}function ie(e){return function(t,r,n){return t===null?0:t.type===2&&zi(t.value,il)?al(t,r):e(t,r,n)}}function N(e){return function(t){return t===null||t.type!==e?0:1}}function sl(e){if(e===null||e.type!==1)return 0;let t=e.value.toLowerCase();return zi(t,Rt)||Ni(t,"default")?0:1}function ll(e){return e===null||e.type!==1||le(e.value,0)!==45||le(e.value,1)!==45?0:1}function cl(e){if(e===null||e.type!==4)return 0;let t=e.value.length;if(t!==4&&t!==5&&t!==7&&t!==9)return 0;for(let r=1;r<t;r++)if(!ee(le(e.value,r)))return 0;return 1}function ul(e){return e===null||e.type!==4||!ze(le(e.value,1),le(e.value,2),le(e.value,3))?0:1}function pl(e,t){if(!e)return 0;let r=0,n=[],o=0;e:do{switch(e.type){case 6:case 8:break e;case 24:case 22:case 20:if(e.type!==r)break e;r=n.pop();break;case 17:if(r===0)break e;break;case 9:if(r===0&&e.value==="!")break e;break;case 2:case 21:case 19:case 23:n.push(r),r=Lr.get(e.type);break}o++}while(e=t(o));return o}function hl(e,t){if(!e)return 0;let r=0,n=[],o=0;e:do{switch(e.type){case 6:case 8:break e;case 24:case 22:case 20:if(e.type!==r)break e;r=n.pop();break;case 2:case 21:case 19:case 23:n.push(r),r=Lr.get(e.type);break}o++}while(e=t(o));return o}function ye(e){return e&&(e=new Set(e)),function(t,r,n){if(t===null||t.type!==12)return 0;let o=Te(t.value,0);if(e!==null){let i=t.value.indexOf("\\",o),s=i===-1||!Mi(t.value,i)?t.value.substr(o):t.value.substring(o,i);if(e.has(s.toLowerCase())===!1)return 0}return Bt(n,t.value,o)?0:1}}function ml(e,t,r){return e===null||e.type!==11||Bt(r,e.value,e.value.length-1)?0:1}function Ri(e){return typeof e!="function"&&(e=function(){return 0}),function(t,r,n){return t!==null&&t.type===10&&Number(t.value)===0?1:e(t,r,n)}}function fl(e,t,r){if(e===null)return 0;let n=Te(e.value,0);return!(n===e.value.length)&&!Mi(e.value,n)||Bt(r,e.value,n)?0:1}function dl(e,t,r){if(e===null||e.type!==10)return 0;let n=le(e.value,0)===43||le(e.value,0)===45?1:0;for(;n<e.value.length;n++)if(!B(le(e.value,n)))return 0;return Bt(r,e.value,n)?0:1}var gl={"ident-token":N(1),"function-token":N(2),"at-keyword-token":N(3),"hash-token":N(4),"string-token":N(5),"bad-string-token":N(6),"url-token":N(7),"bad-url-token":N(8),"delim-token":N(9),"number-token":N(10),"percentage-token":N(11),"dimension-token":N(12),"whitespace-token":N(13),"CDO-token":N(14),"CDC-token":N(15),"colon-token":N(16),"semicolon-token":N(17),"comma-token":N(18),"[-token":N(19),"]-token":N(20),"(-token":N(21),")-token":N(22),"{-token":N(23),"}-token":N(24)},bl={string:N(5),ident:N(1),percentage:ie(ml),zero:Ri(),number:ie(fl),integer:ie(dl),"custom-ident":sl,"custom-property-name":ll,"hex-color":cl,"id-selector":ul,"an-plus-b":Ar,urange:Er,"declaration-value":pl,"any-value":hl};function xl(e){let{angle:t,decibel:r,frequency:n,flex:o,length:i,resolution:s,semitones:u,time:c}=e||{};return{dimension:ie(ye(null)),angle:ie(ye(t)),decibel:ie(ye(r)),frequency:ie(ye(n)),flex:ie(ye(o)),length:ie(Ri(ye(i))),resolution:ie(ye(s)),semitones:ie(ye(u)),time:ie(ye(c))}}function Fi(e){return{...gl,...bl,...xl(e)}}var _t={};b(_t,{angle:()=>kl,decibel:()=>Al,flex:()=>Cl,frequency:()=>vl,length:()=>yl,resolution:()=>Sl,semitones:()=>Tl,time:()=>wl});var yl=["cm","mm","q","in","pt","pc","px","em","rem","ex","rex","cap","rcap","ch","rch","ic","ric","lh","rlh","vw","svw","lvw","dvw","vh","svh","lvh","dvh","vi","svi","lvi","dvi","vb","svb","lvb","dvb","vmin","svmin","lvmin","dvmin","vmax","svmax","lvmax","dvmax","cqw","cqh","cqi","cqb","cqmin","cqmax"],kl=["deg","grad","rad","turn"],wl=["s","ms"],vl=["hz","khz"],Sl=["dpi","dpcm","dppx","x"],Cl=["fr"],Al=["db"],Tl=["st"];var $i={};b($i,{SyntaxError:()=>qt,generate:()=>Pe,parse:()=>Ge,walk:()=>Vt});function qt(e,t,r){return Object.assign(Ee("SyntaxError",e),{input:t,offset:r,rawMessage:e,message:e+`
- `+t+`
---`+new Array((r||t.length)+1).join("-")+"^"})}var El=9,Ll=10,Pl=12,Il=13,Dl=32,Ut=class{constructor(t){this.str=t,this.pos=0}charCodeAt(t){return t<this.str.length?this.str.charCodeAt(t):0}charCode(){return this.charCodeAt(this.pos)}nextCharCode(){return this.charCodeAt(this.pos+1)}nextNonWsCode(t){return this.charCodeAt(this.findWsEnd(t))}findWsEnd(t){for(;t<this.str.length;t++){let r=this.str.charCodeAt(t);if(r!==Il&&r!==Ll&&r!==Pl&&r!==Dl&&r!==El)break}return t}substringToPos(t){return this.str.substring(this.pos,this.pos=t)}eat(t){this.charCode()!==t&&this.error("Expect `"+String.fromCharCode(t)+"`"),this.pos++}peek(){return this.pos<this.str.length?this.str.charAt(this.pos++):""}error(t){throw new qt(t,this.str,this.pos)}};var Ol=9,Nl=10,zl=12,Ml=13,Rl=32,Yi=33,Dr=35,Bi=38,jt=39,Gi=40,Fl=41,Vi=42,Or=43,Nr=44,_i=45,zr=60,Ki=62,Ir=63,Bl=64,Gt=91,Mr=93,Wt=123,qi=124,Ui=125,ji=8734,ut=new Uint8Array(128).map((e,t)=>/[a-zA-Z0-9\-]/.test(String.fromCharCode(t))?1:0),Wi={" ":1,"&&":2,"||":3,"|":4};function Ht(e){return e.substringToPos(e.findWsEnd(e.pos))}function He(e){let t=e.pos;for(;t<e.str.length;t++){let r=e.str.charCodeAt(t);if(r>=128||ut[r]===0)break}return e.pos===t&&e.error("Expect a keyword"),e.substringToPos(t)}function Yt(e){let t=e.pos;for(;t<e.str.length;t++){let r=e.str.charCodeAt(t);if(r<48||r>57)break}return e.pos===t&&e.error("Expect a number"),e.substringToPos(t)}function _l(e){let t=e.str.indexOf("'",e.pos+1);return t===-1&&(e.pos=e.str.length,e.error("Expect an apostrophe")),e.substringToPos(t+1)}function Hi(e){let t=null,r=null;return e.eat(Wt),t=Yt(e),e.charCode()===Nr?(e.pos++,e.charCode()!==Ui&&(r=Yt(e))):r=t,e.eat(Ui),{min:Number(t),max:r?Number(r):0}}function ql(e){let t=null,r=!1;switch(e.charCode()){case Vi:e.pos++,t={min:0,max:0};break;case Or:e.pos++,t={min:1,max:0};break;case Ir:e.pos++,t={min:0,max:1};break;case Dr:e.pos++,r=!0,e.charCode()===Wt?t=Hi(e):e.charCode()===Ir?(e.pos++,t={min:0,max:0}):t={min:1,max:0};break;case Wt:t=Hi(e);break;default:return null}return{type:"Multiplier",comma:r,min:t.min,max:t.max,term:null}}function Ye(e,t){let r=ql(e);return r!==null?(r.term=t,e.charCode()===Dr&&e.charCodeAt(e.pos-1)===Or?Ye(e,r):r):t}function Pr(e){let t=e.peek();return t===""?null:{type:"Token",value:t}}function Ul(e){let t;return e.eat(zr),e.eat(jt),t=He(e),e.eat(jt),e.eat(Ki),Ye(e,{type:"Property",name:t})}function jl(e){let t=null,r=null,n=1;return e.eat(Gt),e.charCode()===_i&&(e.peek(),n=-1),n==-1&&e.charCode()===ji?e.peek():(t=n*Number(Yt(e)),ut[e.charCode()]!==0&&(t+=He(e))),Ht(e),e.eat(Nr),Ht(e),e.charCode()===ji?e.peek():(n=1,e.charCode()===_i&&(e.peek(),n=-1),r=n*Number(Yt(e)),ut[e.charCode()]!==0&&(r+=He(e))),e.eat(Mr),{type:"Range",min:t,max:r}}function Wl(e){let t,r=null;return e.eat(zr),t=He(e),e.charCode()===Gi&&e.nextCharCode()===Fl&&(e.pos+=2,t+="()"),e.charCodeAt(e.findWsEnd(e.pos))===Gt&&(Ht(e),r=jl(e)),e.eat(Ki),Ye(e,{type:"Type",name:t,opts:r})}function Hl(e){let t=He(e);return e.charCode()===Gi?(e.pos++,{type:"Function",name:t}):Ye(e,{type:"Keyword",name:t})}function Yl(e,t){function r(o,i){return{type:"Group",terms:o,combinator:i,disallowEmpty:!1,explicit:!1}}let n;for(t=Object.keys(t).sort((o,i)=>Wi[o]-Wi[i]);t.length>0;){n=t.shift();let o=0,i=0;for(;o<e.length;o++){let s=e[o];s.type==="Combinator"&&(s.value===n?(i===-1&&(i=o-1),e.splice(o,1),o--):(i!==-1&&o-i>1&&(e.splice(i,o-i,r(e.slice(i,o),n)),o=i+1),i=-1))}i!==-1&&t.length&&e.splice(i,o-i,r(e.slice(i,o),n))}return n}function Qi(e){let t=[],r={},n,o=null,i=e.pos;for(;n=Vl(e);)n.type!=="Spaces"&&(n.type==="Combinator"?((o===null||o.type==="Combinator")&&(e.pos=i,e.error("Unexpected combinator")),r[n.value]=!0):o!==null&&o.type!=="Combinator"&&(r[" "]=!0,t.push({type:"Combinator",value:" "})),t.push(n),o=n,i=e.pos);return o!==null&&o.type==="Combinator"&&(e.pos-=i,e.error("Unexpected combinator")),{type:"Group",terms:t,combinator:Yl(t,r)||" ",disallowEmpty:!1,explicit:!1}}function Gl(e){let t;return e.eat(Gt),t=Qi(e),e.eat(Mr),t.explicit=!0,e.charCode()===Yi&&(e.pos++,t.disallowEmpty=!0),t}function Vl(e){let t=e.charCode();if(t<128&&ut[t]===1)return Hl(e);switch(t){case Mr:break;case Gt:return Ye(e,Gl(e));case zr:return e.nextCharCode()===jt?Ul(e):Wl(e);case qi:return{type:"Combinator",value:e.substringToPos(e.pos+(e.nextCharCode()===qi?2:1))};case Bi:return e.pos++,e.eat(Bi),{type:"Combinator",value:"&&"};case Nr:return e.pos++,{type:"Comma"};case jt:return Ye(e,{type:"String",value:_l(e)});case Rl:case Ol:case Nl:case Ml:case zl:return{type:"Spaces",value:Ht(e)};case Bl:return t=e.nextCharCode(),t<128&&ut[t]===1?(e.pos++,{type:"AtKeyword",name:He(e)}):Pr(e);case Vi:case Or:case Ir:case Dr:case Yi:break;case Wt:if(t=e.nextCharCode(),t<48||t>57)return Pr(e);break;default:return Pr(e)}}function Ge(e){let t=new Ut(e),r=Qi(t);return t.pos!==e.length&&t.error("Unexpected input"),r.terms.length===1&&r.terms[0].type==="Group"?r.terms[0]:r}var pt=function(){};function Xi(e){return typeof e=="function"?e:pt}function Vt(e,t,r){function n(s){switch(o.call(r,s),s.type){case"Group":s.terms.forEach(n);break;case"Multiplier":n(s.term);break;case"Type":case"Property":case"Keyword":case"AtKeyword":case"Function":case"String":case"Token":case"Comma":break;default:throw new Error("Unknown type: "+s.type)}i.call(r,s)}let o=pt,i=pt;if(typeof t=="function"?o=t:t&&(o=Xi(t.enter),i=Xi(t.leave)),o===pt&&i===pt)throw new Error("Neither `enter` nor `leave` walker handler is set or both aren't a function");n(e,r)}var Kl={decorator(e){let t=[],r=null;return{...e,node(n){let o=r;r=n,e.node.call(this,n),r=o},emit(n,o,i){t.push({type:o,value:n,node:i?null:r})},result(){return t}}}};function Ql(e){let t=[];return ve(e,(r,n,o)=>t.push({type:r,value:e.slice(n,o),node:null})),t}function Zi(e,t){return typeof e=="string"?Ql(e):t.generate(e,Kl)}var C={type:"Match"},L={type:"Mismatch"},Kt={type:"DisallowEmpty"},Xl=40,$l=41;function Z(e,t,r){return t===C&&r===L||e===C&&t===C&&r===C?e:(e.type==="If"&&e.else===L&&t===C&&(t=e.then,e=e.match),{type:"If",match:e,then:t,else:r})}function ea(e){return e.length>2&&e.charCodeAt(e.length-2)===Xl&&e.charCodeAt(e.length-1)===$l}function Ji(e){return e.type==="Keyword"||e.type==="AtKeyword"||e.type==="Function"||e.type==="Type"&&ea(e.name)}function Rr(e,t,r){switch(e){case" ":{let n=C;for(let o=t.length-1;o>=0;o--){let i=t[o];n=Z(i,n,L)}return n}case"|":{let n=L,o=null;for(let i=t.length-1;i>=0;i--){let s=t[i];if(Ji(s)&&(o===null&&i>0&&Ji(t[i-1])&&(o=Object.create(null),n=Z({type:"Enum",map:o},C,n)),o!==null)){let u=(ea(s.name)?s.name.slice(0,-1):s.name).toLowerCase();if(!(u in o)){o[u]=s;continue}}o=null,n=Z(s,C,n)}return n}case"&&":{if(t.length>5)return{type:"MatchOnce",terms:t,all:!0};let n=L;for(let o=t.length-1;o>=0;o--){let i=t[o],s;t.length>1?s=Rr(e,t.filter(function(u){return u!==i}),!1):s=C,n=Z(i,s,n)}return n}case"||":{if(t.length>5)return{type:"MatchOnce",terms:t,all:!1};let n=r?C:L;for(let o=t.length-1;o>=0;o--){let i=t[o],s;t.length>1?s=Rr(e,t.filter(function(u){return u!==i}),!0):s=C,n=Z(i,s,n)}return n}}}function Zl(e){let t=C,r=Fr(e.term);if(e.max===0)r=Z(r,Kt,L),t=Z(r,null,L),t.then=Z(C,C,t),e.comma&&(t.then.else=Z({type:"Comma",syntax:e},t,L));else for(let n=e.min||1;n<=e.max;n++)e.comma&&t!==C&&(t=Z({type:"Comma",syntax:e},t,L)),t=Z(r,Z(C,C,t),L);if(e.min===0)t=Z(C,C,t);else for(let n=0;n<e.min-1;n++)e.comma&&t!==C&&(t=Z({type:"Comma",syntax:e},t,L)),t=Z(r,t,L);return t}function Fr(e){if(typeof e=="function")return{type:"Generic",fn:e};switch(e.type){case"Group":{let t=Rr(e.combinator,e.terms.map(Fr),!1);return e.disallowEmpty&&(t=Z(t,Kt,L)),t}case"Multiplier":return Zl(e);case"Type":case"Property":return{type:e.type,name:e.name,syntax:e};case"Keyword":return{type:e.type,name:e.name.toLowerCase(),syntax:e};case"AtKeyword":return{type:e.type,name:"@"+e.name.toLowerCase(),syntax:e};case"Function":return{type:e.type,name:e.name.toLowerCase()+"(",syntax:e};case"String":return e.value.length===3?{type:"Token",value:e.value.charAt(1),syntax:e}:{type:e.type,value:e.value.substr(1,e.value.length-2).replace(/\\'/g,"'"),syntax:e};case"Token":return{type:e.type,value:e.value,syntax:e};case"Comma":return{type:e.type,syntax:e};default:throw new Error("Unknown node type:",e.type)}}function Qt(e,t){return typeof e=="string"&&(e=Ge(e)),{type:"MatchGraph",match:Fr(e),syntax:t||null,source:e}}var{hasOwnProperty:ta}=Object.prototype,Jl=0,ec=1,_r=2,aa=3,ra="Match",tc="Mismatch",rc="Maximum iteration number exceeded (please fill an issue on https://github.com/csstree/csstree/issues)",na=15e3,nc=0;function oc(e){let t=null,r=null,n=e;for(;n!==null;)r=n.prev,n.prev=t,t=n,n=r;return t}function Br(e,t){if(e.length!==t.length)return!1;for(let r=0;r<e.length;r++){let n=t.charCodeAt(r),o=e.charCodeAt(r);if(o>=65&&o<=90&&(o=o|32),o!==n)return!1}return!0}function ic(e){return e.type!==9?!1:e.value!=="?"}function oa(e){return e===null?!0:e.type===18||e.type===2||e.type===21||e.type===19||e.type===23||ic(e)}function ia(e){return e===null?!0:e.type===22||e.type===20||e.type===24||e.type===9&&e.value==="/"}function ac(e,t,r){function n(){do R++,S=R<e.length?e[R]:null;while(S!==null&&(S.type===13||S.type===25))}function o(ae){let fe=R+ae;return fe<e.length?e[fe]:null}function i(ae,fe){return{nextState:ae,matchStack:z,syntaxStack:p,thenStack:m,tokenIndex:R,prev:fe}}function s(ae){m={nextState:ae,matchStack:z,syntaxStack:p,prev:m}}function u(ae){f=i(ae,f)}function c(){z={type:ec,syntax:t.syntax,token:S,prev:z},n(),P=null,R>ke&&(ke=R)}function a(){p={syntax:t.syntax,opts:t.syntax.opts||p!==null&&p.opts||null,prev:p},z={type:_r,syntax:t.syntax,token:z.token,prev:z}}function l(){z.type===_r?z=z.prev:z={type:aa,syntax:p.syntax,token:z.token,prev:z},p=p.prev}let p=null,m=null,f=null,P=null,te=0,X=null,S=null,R=-1,ke=0,z={type:Jl,syntax:null,token:null,prev:null};for(n();X===null&&++te<na;)switch(t.type){case"Match":if(m===null){if(S!==null&&(R!==e.length-1||S.value!=="\\0"&&S.value!=="\\9")){t=L;break}X=ra;break}if(t=m.nextState,t===Kt)if(m.matchStack===z){t=L;break}else t=C;for(;m.syntaxStack!==p;)l();m=m.prev;break;case"Mismatch":if(P!==null&&P!==!1)(f===null||R>f.tokenIndex)&&(f=P,P=!1);else if(f===null){X=tc;break}t=f.nextState,m=f.thenStack,p=f.syntaxStack,z=f.matchStack,R=f.tokenIndex,S=R<e.length?e[R]:null,f=f.prev;break;case"MatchGraph":t=t.match;break;case"If":t.else!==L&&u(t.else),t.then!==C&&s(t.then),t=t.match;break;case"MatchOnce":t={type:"MatchOnceBuffer",syntax:t,index:0,mask:0};break;case"MatchOnceBuffer":{let Q=t.syntax.terms;if(t.index===Q.length){if(t.mask===0||t.syntax.all){t=L;break}t=C;break}if(t.mask===(1<<Q.length)-1){t=C;break}for(;t.index<Q.length;t.index++){let J=1<<t.index;if((t.mask&J)===0){u(t),s({type:"AddMatchOnce",syntax:t.syntax,mask:t.mask|J}),t=Q[t.index++];break}}break}case"AddMatchOnce":t={type:"MatchOnceBuffer",syntax:t.syntax,index:0,mask:t.mask};break;case"Enum":if(S!==null){let Q=S.value.toLowerCase();if(Q.indexOf("\\")!==-1&&(Q=Q.replace(/\\[09].*$/,"")),ta.call(t.map,Q)){t=t.map[Q];break}}t=L;break;case"Generic":{let Q=p!==null?p.opts:null,J=R+Math.floor(t.fn(S,o,Q));if(!isNaN(J)&&J>R){for(;R<J;)c();t=C}else t=L;break}case"Type":case"Property":{let Q=t.type==="Type"?"types":"properties",J=ta.call(r,Q)?r[Q][t.name]:null;if(!J||!J.match)throw new Error("Bad syntax reference: "+(t.type==="Type"?"<"+t.name+">":"<'"+t.name+"'>"));if(P!==!1&&S!==null&&t.type==="Type"&&(t.name==="custom-ident"&&S.type===1||t.name==="length"&&S.value==="0")){P===null&&(P=i(t,f)),t=L;break}a(),t=J.match;break}case"Keyword":{let Q=t.name;if(S!==null){let J=S.value;if(J.indexOf("\\")!==-1&&(J=J.replace(/\\[09].*$/,"")),Br(J,Q)){c(),t=C;break}}t=L;break}case"AtKeyword":case"Function":if(S!==null&&Br(S.value,t.name)){c(),t=C;break}t=L;break;case"Token":if(S!==null&&S.value===t.value){c(),t=C;break}t=L;break;case"Comma":S!==null&&S.type===18?oa(z.token)?t=L:(c(),t=ia(S)?L:C):t=oa(z.token)||ia(S)?C:L;break;case"String":let ae="",fe=R;for(;fe<e.length&&ae.length<t.value.length;fe++)ae+=e[fe].value;if(Br(ae,t.value)){for(;R<fe;)c();t=C}else t=L;break;default:throw new Error("Unknown node type: "+t.type)}switch(nc+=te,X){case null:console.warn("[csstree-match] BREAK after "+na+" iterations"),X=rc,z=null;break;case ra:for(;p!==null;)l();break;default:z=null}return{tokens:e,reason:X,iterations:te,match:z,longestMatch:ke}}function qr(e,t,r){let n=ac(e,t,r||{});if(n.match===null)return n;let o=n.match,i=n.match={syntax:t.syntax||null,match:[]},s=[i];for(o=oc(o).prev;o!==null;){switch(o.type){case _r:i.match.push(i={syntax:o.syntax,match:[]}),s.push(i);break;case aa:s.pop(),i=s[s.length-1];break;default:i.match.push({syntax:o.syntax||null,token:o.token.value,node:o.token.node})}o=o.prev}return n}var jr={};b(jr,{getTrace:()=>sa,isKeyword:()=>cc,isProperty:()=>lc,isType:()=>sc});function sa(e){function t(o){return o===null?!1:o.type==="Type"||o.type==="Property"||o.type==="Keyword"}function r(o){if(Array.isArray(o.match)){for(let i=0;i<o.match.length;i++)if(r(o.match[i]))return t(o.syntax)&&n.unshift(o.syntax),!0}else if(o.node===e)return n=t(o.syntax)?[o.syntax]:[],!0;return!1}let n=null;return this.matched!==null&&r(this.matched),n}function sc(e,t){return Ur(this,e,r=>r.type==="Type"&&r.name===t)}function lc(e,t){return Ur(this,e,r=>r.type==="Property"&&r.name===t)}function cc(e){return Ur(this,e,t=>t.type==="Keyword")}function Ur(e,t,r){let n=sa.call(e,t);return n===null?!1:n.some(r)}function la(e){return"node"in e?e.node:la(e.match[0])}function ca(e){return"node"in e?e.node:ca(e.match[e.match.length-1])}function Wr(e,t,r,n,o){function i(u){if(u.syntax!==null&&u.syntax.type===n&&u.syntax.name===o){let c=la(u),a=ca(u);e.syntax.walk(t,function(l,p,m){if(l===c){let f=new D;do{if(f.appendData(p.data),p.data===a)break;p=p.next}while(p!==null);s.push({parent:m,nodes:f})}})}Array.isArray(u.match)&&u.match.forEach(i)}let s=[];return r.matched!==null&&i(r.matched),s}var{hasOwnProperty:ht}=Object.prototype;function Hr(e){return typeof e=="number"&&isFinite(e)&&Math.floor(e)===e&&e>=0}function ua(e){return Boolean(e)&&Hr(e.offset)&&Hr(e.line)&&Hr(e.column)}function uc(e,t){return function(n,o){if(!n||n.constructor!==Object)return o(n,"Type of node should be an Object");for(let i in n){let s=!0;if(ht.call(n,i)!==!1){if(i==="type")n.type!==e&&o(n,"Wrong node type `"+n.type+"`, expected `"+e+"`");else if(i==="loc"){if(n.loc===null)continue;if(n.loc&&n.loc.constructor===Object)if(typeof n.loc.source!="string")i+=".source";else if(!ua(n.loc.start))i+=".start";else if(!ua(n.loc.end))i+=".end";else continue;s=!1}else if(t.hasOwnProperty(i)){s=!1;for(let u=0;!s&&u<t[i].length;u++){let c=t[i][u];switch(c){case String:s=typeof n[i]=="string";break;case Boolean:s=typeof n[i]=="boolean";break;case null:s=n[i]===null;break;default:typeof c=="string"?s=n[i]&&n[i].type===c:Array.isArray(c)&&(s=n[i]instanceof D)}}}else o(n,"Unknown field `"+i+"` for "+e+" node type");s||o(n,"Bad value for `"+e+"."+i+"`")}}for(let i in t)ht.call(t,i)&&ht.call(n,i)===!1&&o(n,"Field `"+e+"."+i+"` is missed")}}function pc(e,t){let r=t.structure,n={type:String,loc:!0},o={type:'"'+e+'"'};for(let i in r){if(ht.call(r,i)===!1)continue;let s=[],u=n[i]=Array.isArray(r[i])?r[i].slice():[r[i]];for(let c=0;c<u.length;c++){let a=u[c];if(a===String||a===Boolean)s.push(a.name);else if(a===null)s.push("null");else if(typeof a=="string")s.push("<"+a+">");else if(Array.isArray(a))s.push("List");else throw new Error("Wrong value `"+a+"` in `"+e+"."+i+"` structure definition")}o[i]=s.join(" | ")}return{docs:o,check:uc(e,n)}}function pa(e){let t={};if(e.node){for(let r in e.node)if(ht.call(e.node,r)){let n=e.node[r];if(n.structure)t[r]=pc(r,n);else throw new Error("Missed `structure` field in `"+r+"` node type definition")}}return t}var hc=Qt(Rt.join(" | "));function Yr(e,t,r){let n={};for(let o in e)e[o].syntax&&(n[o]=r?e[o].syntax:Pe(e[o].syntax,{compact:t}));return n}function mc(e,t,r){let n={};for(let[o,i]of Object.entries(e))n[o]={prelude:i.prelude&&(r?i.prelude.syntax:Pe(i.prelude.syntax,{compact:t})),descriptors:i.descriptors&&Yr(i.descriptors,t,r)};return n}function fc(e){for(let t=0;t<e.length;t++)if(e[t].value.toLowerCase()==="var(")return!0;return!1}function ce(e,t,r){return{matched:e,iterations:r,error:t,...jr}}function Ve(e,t,r,n){let o=Zi(r,e.syntax),i;return fc(o)?ce(null,new Error("Matching for a tree with var() is not supported")):(n&&(i=qr(o,e.cssWideKeywordsSyntax,e)),(!n||!i.match)&&(i=qr(o,t.match,e),!i.match)?ce(null,new Ii(i.reason,t.syntax,r,i),i.iterations):ce(i.match,null,i.iterations))}var Ke=class{constructor(t,r,n){if(this.cssWideKeywordsSyntax=hc,this.syntax=r,this.generic=!1,this.units={..._t},this.atrules=Object.create(null),this.properties=Object.create(null),this.types=Object.create(null),this.structure=n||pa(t),t){if(t.units)for(let o of Object.keys(_t))Array.isArray(t.units[o])&&(this.units[o]=t.units[o]);if(t.types)for(let o in t.types)this.addType_(o,t.types[o]);if(t.generic){this.generic=!0;for(let[o,i]of Object.entries(Fi(this.units)))this.addType_(o,i)}if(t.atrules)for(let o in t.atrules)this.addAtrule_(o,t.atrules[o]);if(t.properties)for(let o in t.properties)this.addProperty_(o,t.properties[o])}}checkStructure(t){function r(i,s){o.push({node:i,message:s})}let n=this.structure,o=[];return this.syntax.walk(t,function(i){n.hasOwnProperty(i.type)?n[i.type].check(i,r):r(i,"Unknown node type `"+i.type+"`")}),o.length?o:!1}createDescriptor(t,r,n,o=null){let i={type:r,name:n},s={type:r,name:n,parent:o,serializable:typeof t=="string"||t&&typeof t.type=="string",syntax:null,match:null};return typeof t=="function"?s.match=Qt(t,i):(typeof t=="string"?Object.defineProperty(s,"syntax",{get(){return Object.defineProperty(s,"syntax",{value:Ge(t)}),s.syntax}}):s.syntax=t,Object.defineProperty(s,"match",{get(){return Object.defineProperty(s,"match",{value:Qt(s.syntax,i)}),s.match}})),s}addAtrule_(t,r){!r||(this.atrules[t]={type:"Atrule",name:t,prelude:r.prelude?this.createDescriptor(r.prelude,"AtrulePrelude",t):null,descriptors:r.descriptors?Object.keys(r.descriptors).reduce((n,o)=>(n[o]=this.createDescriptor(r.descriptors[o],"AtruleDescriptor",o,t),n),Object.create(null)):null})}addProperty_(t,r){!r||(this.properties[t]=this.createDescriptor(r,"Property",t))}addType_(t,r){!r||(this.types[t]=this.createDescriptor(r,"Type",t))}checkAtruleName(t){if(!this.getAtrule(t))return new Ue("Unknown at-rule","@"+t)}checkAtrulePrelude(t,r){let n=this.checkAtruleName(t);if(n)return n;let o=this.getAtrule(t);if(!o.prelude&&r)return new SyntaxError("At-rule `@"+t+"` should not contain a prelude");if(o.prelude&&!r&&!Ve(this,o.prelude,"",!1).matched)return new SyntaxError("At-rule `@"+t+"` should contain a prelude")}checkAtruleDescriptorName(t,r){let n=this.checkAtruleName(t);if(n)return n;let o=this.getAtrule(t),i=zt(r);if(!o.descriptors)return new SyntaxError("At-rule `@"+t+"` has no known descriptors");if(!o.descriptors[i.name]&&!o.descriptors[i.basename])return new Ue("Unknown at-rule descriptor",r)}checkPropertyName(t){if(!this.getProperty(t))return new Ue("Unknown property",t)}matchAtrulePrelude(t,r){let n=this.checkAtrulePrelude(t,r);if(n)return ce(null,n);let o=this.getAtrule(t);return o.prelude?Ve(this,o.prelude,r||"",!1):ce(null,null)}matchAtruleDescriptor(t,r,n){let o=this.checkAtruleDescriptorName(t,r);if(o)return ce(null,o);let i=this.getAtrule(t),s=zt(r);return Ve(this,i.descriptors[s.name]||i.descriptors[s.basename],n,!1)}matchDeclaration(t){return t.type!=="Declaration"?ce(null,new Error("Not a Declaration node")):this.matchProperty(t.property,t.value)}matchProperty(t,r){if(kr(t).custom)return ce(null,new Error("Lexer matching doesn't applicable for custom properties"));let n=this.checkPropertyName(t);return n?ce(null,n):Ve(this,this.getProperty(t),r,!0)}matchType(t,r){let n=this.getType(t);return n?Ve(this,n,r,!1):ce(null,new Ue("Unknown type",t))}match(t,r){return typeof t!="string"&&(!t||!t.type)?ce(null,new Ue("Bad syntax")):((typeof t=="string"||!t.match)&&(t=this.createDescriptor(t,"Type","anonymous")),Ve(this,t,r,!1))}findValueFragments(t,r,n,o){return Wr(this,r,this.matchProperty(t,r),n,o)}findDeclarationValueFragments(t,r,n){return Wr(this,t.value,this.matchDeclaration(t),r,n)}findAllFragments(t,r,n){let o=[];return this.syntax.walk(t,{visit:"Declaration",enter:i=>{o.push.apply(o,this.findDeclarationValueFragments(i,r,n))}}),o}getAtrule(t,r=!0){let n=zt(t);return(n.vendor&&r?this.atrules[n.name]||this.atrules[n.basename]:this.atrules[n.name])||null}getAtrulePrelude(t,r=!0){let n=this.getAtrule(t,r);return n&&n.prelude||null}getAtruleDescriptor(t,r){return this.atrules.hasOwnProperty(t)&&this.atrules.declarators&&this.atrules[t].declarators[r]||null}getProperty(t,r=!0){let n=kr(t);return(n.vendor&&r?this.properties[n.name]||this.properties[n.basename]:this.properties[n.name])||null}getType(t){return hasOwnProperty.call(this.types,t)?this.types[t]:null}validate(){function t(o,i,s,u){if(s.has(i))return s.get(i);s.set(i,!1),u.syntax!==null&&Vt(u.syntax,function(c){if(c.type!=="Type"&&c.type!=="Property")return;let a=c.type==="Type"?o.types:o.properties,l=c.type==="Type"?r:n;(!hasOwnProperty.call(a,c.name)||t(o,c.name,l,a[c.name]))&&s.set(i,!0)},this)}let r=new Map,n=new Map;for(let o in this.types)t(this,o,r,this.types[o]);for(let o in this.properties)t(this,o,n,this.properties[o]);return r=[...r.keys()].filter(o=>r.get(o)),n=[...n.keys()].filter(o=>n.get(o)),r.length||n.length?{types:r,properties:n}:null}dump(t,r){return{generic:this.generic,units:this.units,types:Yr(this.types,!r,t),properties:Yr(this.properties,!r,t),atrules:mc(this.atrules,!r,t)}}toString(){return JSON.stringify(this.dump())}};function Gr(e,t){return typeof t=="string"&&/^\s*\|/.test(t)?typeof e=="string"?e+t:t.replace(/^\s*\|\s*/,""):t||null}function ha(e,t){let r=Object.create(null);for(let[n,o]of Object.entries(e))if(o){r[n]={};for(let i of Object.keys(o))t.includes(i)&&(r[n][i]=o[i])}return r}function mt(e,t){let r={...e};for(let[n,o]of Object.entries(t))switch(n){case"generic":r[n]=Boolean(o);break;case"units":r[n]={...e[n]};for(let[i,s]of Object.entries(o))r[n][i]=Array.isArray(s)?s:[];break;case"atrules":r[n]={...e[n]};for(let[i,s]of Object.entries(o)){let u=r[n][i]||{},c=r[n][i]={prelude:u.prelude||null,descriptors:{...u.descriptors}};if(!!s){c.prelude=s.prelude?Gr(c.prelude,s.prelude):c.prelude||null;for(let[a,l]of Object.entries(s.descriptors||{}))c.descriptors[a]=l?Gr(c.descriptors[a],l):null;Object.keys(c.descriptors).length||(c.descriptors=null)}}break;case"types":case"properties":r[n]={...e[n]};for(let[i,s]of Object.entries(o))r[n][i]=Gr(r[n][i],s);break;case"scope":r[n]={...e[n]};for(let[i,s]of Object.entries(o))r[n][i]={...r[n][i],...s};break;case"parseContext":r[n]={...e[n],...o};break;case"atrule":case"pseudo":r[n]={...e[n],...ha(o,["parse"])};break;case"node":r[n]={...e[n],...ha(o,["name","structure","parse","generate","walkContext"])};break}return r}function ma(e){let t=$o(e),r=Li(e),n=vi(e),{fromPlainObject:o,toPlainObject:i}=Si(r),s={lexer:null,createLexer:u=>new Ke(u,s,s.lexer.structure),tokenize:ve,parse:t,generate:n,walk:r,find:r.find,findLast:r.findLast,findAll:r.findAll,fromPlainObject:o,toPlainObject:i,fork(u){let c=mt({},e);return ma(typeof u=="function"?u(c,Object.assign):mt(c,u))}};return s.lexer=new Ke({generic:!0,units:e.units,types:e.types,atrules:e.atrules,properties:e.properties,node:e.node},s),s}var Vr=e=>ma(mt({},e));var fa={generic:!0,units:{angle:["deg","grad","rad","turn"],decibel:["db"],flex:["fr"],frequency:["hz","khz"],length:["cm","mm","q","in","pt","pc","px","em","rem","ex","rex","cap","rcap","ch","rch","ic","ric","lh","rlh","vw","svw","lvw","dvw","vh","svh","lvh","dvh","vi","svi","lvi","dvi","vb","svb","lvb","dvb","vmin","svmin","lvmin","dvmin","vmax","svmax","lvmax","dvmax","cqw","cqh","cqi","cqb","cqmin","cqmax"],resolution:["dpi","dpcm","dppx","x"],semitones:["st"],time:["s","ms"]},types:{"abs()":"abs( <calc-sum> )","absolute-size":"xx-small|x-small|small|medium|large|x-large|xx-large|xxx-large","acos()":"acos( <calc-sum> )","alpha-value":"<number>|<percentage>","angle-percentage":"<angle>|<percentage>","angular-color-hint":"<angle-percentage>","angular-color-stop":"<color>&&<color-stop-angle>?","angular-color-stop-list":"[<angular-color-stop> [, <angular-color-hint>]?]# , <angular-color-stop>","animateable-feature":"scroll-position|contents|<custom-ident>","asin()":"asin( <calc-sum> )","atan()":"atan( <calc-sum> )","atan2()":"atan2( <calc-sum> , <calc-sum> )",attachment:"scroll|fixed|local","attr()":"attr( <attr-name> <type-or-unit>? [, <attr-fallback>]? )","attr-matcher":"['~'|'|'|'^'|'$'|'*']? '='","attr-modifier":"i|s","attribute-selector":"'[' <wq-name> ']'|'[' <wq-name> <attr-matcher> [<string-token>|<ident-token>] <attr-modifier>? ']'","auto-repeat":"repeat( [auto-fill|auto-fit] , [<line-names>? <fixed-size>]+ <line-names>? )","auto-track-list":"[<line-names>? [<fixed-size>|<fixed-repeat>]]* <line-names>? <auto-repeat> [<line-names>? [<fixed-size>|<fixed-repeat>]]* <line-names>?",axis:"block|inline|vertical|horizontal","baseline-position":"[first|last]? baseline","basic-shape":"<inset()>|<circle()>|<ellipse()>|<polygon()>|<path()>","bg-image":"none|<image>","bg-layer":"<bg-image>||<bg-position> [/ <bg-size>]?||<repeat-style>||<attachment>||<box>||<box>","bg-position":"[[left|center|right|top|bottom|<length-percentage>]|[left|center|right|<length-percentage>] [top|center|bottom|<length-percentage>]|[center|[left|right] <length-percentage>?]&&[center|[top|bottom] <length-percentage>?]]","bg-size":"[<length-percentage>|auto]{1,2}|cover|contain","blur()":"blur( <length> )","blend-mode":"normal|multiply|screen|overlay|darken|lighten|color-dodge|color-burn|hard-light|soft-light|difference|exclusion|hue|saturation|color|luminosity",box:"border-box|padding-box|content-box","brightness()":"brightness( <number-percentage> )","calc()":"calc( <calc-sum> )","calc-sum":"<calc-product> [['+'|'-'] <calc-product>]*","calc-product":"<calc-value> ['*' <calc-value>|'/' <number>]*","calc-value":"<number>|<dimension>|<percentage>|<calc-constant>|( <calc-sum> )","calc-constant":"e|pi|infinity|-infinity|NaN","cf-final-image":"<image>|<color>","cf-mixing-image":"<percentage>?&&<image>","circle()":"circle( [<shape-radius>]? [at <position>]? )","clamp()":"clamp( <calc-sum>#{3} )","class-selector":"'.' <ident-token>","clip-source":"<url>",color:"<rgb()>|<rgba()>|<hsl()>|<hsla()>|<hwb()>|<lab()>|<lch()>|<hex-color>|<named-color>|currentcolor|<deprecated-system-color>","color-stop":"<color-stop-length>|<color-stop-angle>","color-stop-angle":"<angle-percentage>{1,2}","color-stop-length":"<length-percentage>{1,2}","color-stop-list":"[<linear-color-stop> [, <linear-color-hint>]?]# , <linear-color-stop>",combinator:"'>'|'+'|'~'|['||']","common-lig-values":"[common-ligatures|no-common-ligatures]","compat-auto":"searchfield|textarea|push-button|slider-horizontal|checkbox|radio|square-button|menulist|listbox|meter|progress-bar|button","composite-style":"clear|copy|source-over|source-in|source-out|source-atop|destination-over|destination-in|destination-out|destination-atop|xor","compositing-operator":"add|subtract|intersect|exclude","compound-selector":"[<type-selector>? <subclass-selector>* [<pseudo-element-selector> <pseudo-class-selector>*]*]!","compound-selector-list":"<compound-selector>#","complex-selector":"<compound-selector> [<combinator>? <compound-selector>]*","complex-selector-list":"<complex-selector>#","conic-gradient()":"conic-gradient( [from <angle>]? [at <position>]? , <angular-color-stop-list> )","contextual-alt-values":"[contextual|no-contextual]","content-distribution":"space-between|space-around|space-evenly|stretch","content-list":"[<string>|contents|<image>|<counter>|<quote>|<target>|<leader()>|<attr()>]+","content-position":"center|start|end|flex-start|flex-end","content-replacement":"<image>","contrast()":"contrast( [<number-percentage>] )","cos()":"cos( <calc-sum> )",counter:"<counter()>|<counters()>","counter()":"counter( <counter-name> , <counter-style>? )","counter-name":"<custom-ident>","counter-style":"<counter-style-name>|symbols( )","counter-style-name":"<custom-ident>","counters()":"counters( <counter-name> , <string> , <counter-style>? )","cross-fade()":"cross-fade( <cf-mixing-image> , <cf-final-image>? )","cubic-bezier-timing-function":"ease|ease-in|ease-out|ease-in-out|cubic-bezier( <number [0,1]> , <number> , <number [0,1]> , <number> )","deprecated-system-color":"ActiveBorder|ActiveCaption|AppWorkspace|Background|ButtonFace|ButtonHighlight|ButtonShadow|ButtonText|CaptionText|GrayText|Highlight|HighlightText|InactiveBorder|InactiveCaption|InactiveCaptionText|InfoBackground|InfoText|Menu|MenuText|Scrollbar|ThreeDDarkShadow|ThreeDFace|ThreeDHighlight|ThreeDLightShadow|ThreeDShadow|Window|WindowFrame|WindowText","discretionary-lig-values":"[discretionary-ligatures|no-discretionary-ligatures]","display-box":"contents|none","display-inside":"flow|flow-root|table|flex|grid|ruby","display-internal":"table-row-group|table-header-group|table-footer-group|table-row|table-cell|table-column-group|table-column|table-caption|ruby-base|ruby-text|ruby-base-container|ruby-text-container","display-legacy":"inline-block|inline-list-item|inline-table|inline-flex|inline-grid","display-listitem":"<display-outside>?&&[flow|flow-root]?&&list-item","display-outside":"block|inline|run-in","drop-shadow()":"drop-shadow( <length>{2,3} <color>? )","east-asian-variant-values":"[jis78|jis83|jis90|jis04|simplified|traditional]","east-asian-width-values":"[full-width|proportional-width]","element()":"element( <custom-ident> , [first|start|last|first-except]? )|element( <id-selector> )","ellipse()":"ellipse( [<shape-radius>{2}]? [at <position>]? )","ending-shape":"circle|ellipse","env()":"env( <custom-ident> , <declaration-value>? )","exp()":"exp( <calc-sum> )","explicit-track-list":"[<line-names>? <track-size>]+ <line-names>?","family-name":"<string>|<custom-ident>+","feature-tag-value":"<string> [<integer>|on|off]?","feature-type":"@stylistic|@historical-forms|@styleset|@character-variant|@swash|@ornaments|@annotation","feature-value-block":"<feature-type> '{' <feature-value-declaration-list> '}'","feature-value-block-list":"<feature-value-block>+","feature-value-declaration":"<custom-ident> : <integer>+ ;","feature-value-declaration-list":"<feature-value-declaration>","feature-value-name":"<custom-ident>","fill-rule":"nonzero|evenodd","filter-function":"<blur()>|<brightness()>|<contrast()>|<drop-shadow()>|<grayscale()>|<hue-rotate()>|<invert()>|<opacity()>|<saturate()>|<sepia()>","filter-function-list":"[<filter-function>|<url>]+","final-bg-layer":"<'background-color'>||<bg-image>||<bg-position> [/ <bg-size>]?||<repeat-style>||<attachment>||<box>||<box>","fixed-breadth":"<length-percentage>","fixed-repeat":"repeat( [<integer [1,\u221E]>] , [<line-names>? <fixed-size>]+ <line-names>? )","fixed-size":"<fixed-breadth>|minmax( <fixed-breadth> , <track-breadth> )|minmax( <inflexible-breadth> , <fixed-breadth> )","font-stretch-absolute":"normal|ultra-condensed|extra-condensed|condensed|semi-condensed|semi-expanded|expanded|extra-expanded|ultra-expanded|<percentage>","font-variant-css21":"[normal|small-caps]","font-weight-absolute":"normal|bold|<number [1,1000]>","frequency-percentage":"<frequency>|<percentage>","general-enclosed":"[<function-token> <any-value> )]|( <ident> <any-value> )","generic-family":"serif|sans-serif|cursive|fantasy|monospace|-apple-system","generic-name":"serif|sans-serif|cursive|fantasy|monospace","geometry-box":"<shape-box>|fill-box|stroke-box|view-box",gradient:"<linear-gradient()>|<repeating-linear-gradient()>|<radial-gradient()>|<repeating-radial-gradient()>|<conic-gradient()>|<repeating-conic-gradient()>|<-legacy-gradient>","grayscale()":"grayscale( <number-percentage> )","grid-line":"auto|<custom-ident>|[<integer>&&<custom-ident>?]|[span&&[<integer>||<custom-ident>]]","historical-lig-values":"[historical-ligatures|no-historical-ligatures]","hsl()":"hsl( <hue> <percentage> <percentage> [/ <alpha-value>]? )|hsl( <hue> , <percentage> , <percentage> , <alpha-value>? )","hsla()":"hsla( <hue> <percentage> <percentage> [/ <alpha-value>]? )|hsla( <hue> , <percentage> , <percentage> , <alpha-value>? )",hue:"<number>|<angle>","hue-rotate()":"hue-rotate( <angle> )","hwb()":"hwb( [<hue>|none] [<percentage>|none] [<percentage>|none] [/ [<alpha-value>|none]]? )","hypot()":"hypot( <calc-sum># )",image:"<url>|<image()>|<image-set()>|<element()>|<paint()>|<cross-fade()>|<gradient>","image()":"image( <image-tags>? [<image-src>? , <color>?]! )","image-set()":"image-set( <image-set-option># )","image-set-option":"[<image>|<string>] [<resolution>||type( <string> )]","image-src":"<url>|<string>","image-tags":"ltr|rtl","inflexible-breadth":"<length-percentage>|min-content|max-content|auto","inset()":"inset( <length-percentage>{1,4} [round <'border-radius'>]? )","invert()":"invert( <number-percentage> )","keyframes-name":"<custom-ident>|<string>","keyframe-block":"<keyframe-selector># { <declaration-list> }","keyframe-block-list":"<keyframe-block>+","keyframe-selector":"from|to|<percentage>","lab()":"lab( [<percentage>|<number>|none] [<percentage>|<number>|none] [<percentage>|<number>|none] [/ [<alpha-value>|none]]? )","layer()":"layer( <layer-name> )","layer-name":"<ident> ['.' <ident>]*","lch()":"lch( [<percentage>|<number>|none] [<percentage>|<number>|none] [<hue>|none] [/ [<alpha-value>|none]]? )","leader()":"leader( <leader-type> )","leader-type":"dotted|solid|space|<string>","length-percentage":"<length>|<percentage>","line-names":"'[' <custom-ident>* ']'","line-name-list":"[<line-names>|<name-repeat>]+","line-style":"none|hidden|dotted|dashed|solid|double|groove|ridge|inset|outset","line-width":"<length>|thin|medium|thick","linear-color-hint":"<length-percentage>","linear-color-stop":"<color> <color-stop-length>?","linear-gradient()":"linear-gradient( [<angle>|to <side-or-corner>]? , <color-stop-list> )","log()":"log( <calc-sum> , <calc-sum>? )","mask-layer":"<mask-reference>||<position> [/ <bg-size>]?||<repeat-style>||<geometry-box>||[<geometry-box>|no-clip]||<compositing-operator>||<masking-mode>","mask-position":"[<length-percentage>|left|center|right] [<length-percentage>|top|center|bottom]?","mask-reference":"none|<image>|<mask-source>","mask-source":"<url>","masking-mode":"alpha|luminance|match-source","matrix()":"matrix( <number>#{6} )","matrix3d()":"matrix3d( <number>#{16} )","max()":"max( <calc-sum># )","media-and":"<media-in-parens> [and <media-in-parens>]+","media-condition":"<media-not>|<media-and>|<media-or>|<media-in-parens>","media-condition-without-or":"<media-not>|<media-and>|<media-in-parens>","media-feature":"( [<mf-plain>|<mf-boolean>|<mf-range>] )","media-in-parens":"( <media-condition> )|<media-feature>|<general-enclosed>","media-not":"not <media-in-parens>","media-or":"<media-in-parens> [or <media-in-parens>]+","media-query":"<media-condition>|[not|only]? <media-type> [and <media-condition-without-or>]?","media-query-list":"<media-query>#","media-type":"<ident>","mf-boolean":"<mf-name>","mf-name":"<ident>","mf-plain":"<mf-name> : <mf-value>","mf-range":"<mf-name> ['<'|'>']? '='? <mf-value>|<mf-value> ['<'|'>']? '='? <mf-name>|<mf-value> '<' '='? <mf-name> '<' '='? <mf-value>|<mf-value> '>' '='? <mf-name> '>' '='? <mf-value>","mf-value":"<number>|<dimension>|<ident>|<ratio>","min()":"min( <calc-sum># )","minmax()":"minmax( [<length-percentage>|min-content|max-content|auto] , [<length-percentage>|<flex>|min-content|max-content|auto] )","mod()":"mod( <calc-sum> , <calc-sum> )","name-repeat":"repeat( [<integer [1,\u221E]>|auto-fill] , <line-names>+ )","named-color":"transparent|aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen|<-non-standard-color>","namespace-prefix":"<ident>","ns-prefix":"[<ident-token>|'*']? '|'","number-percentage":"<number>|<percentage>","numeric-figure-values":"[lining-nums|oldstyle-nums]","numeric-fraction-values":"[diagonal-fractions|stacked-fractions]","numeric-spacing-values":"[proportional-nums|tabular-nums]",nth:"<an-plus-b>|even|odd","opacity()":"opacity( [<number-percentage>] )","overflow-position":"unsafe|safe","outline-radius":"<length>|<percentage>","page-body":"<declaration>? [; <page-body>]?|<page-margin-box> <page-body>","page-margin-box":"<page-margin-box-type> '{' <declaration-list> '}'","page-margin-box-type":"@top-left-corner|@top-left|@top-center|@top-right|@top-right-corner|@bottom-left-corner|@bottom-left|@bottom-center|@bottom-right|@bottom-right-corner|@left-top|@left-middle|@left-bottom|@right-top|@right-middle|@right-bottom","page-selector-list":"[<page-selector>#]?","page-selector":"<pseudo-page>+|<ident> <pseudo-page>*","page-size":"A5|A4|A3|B5|B4|JIS-B5|JIS-B4|letter|legal|ledger","path()":"path( [<fill-rule> ,]? <string> )","paint()":"paint( <ident> , <declaration-value>? )","perspective()":"perspective( [<length [0,\u221E]>|none] )","polygon()":"polygon( <fill-rule>? , [<length-percentage> <length-percentage>]# )",position:"[[left|center|right]||[top|center|bottom]|[left|center|right|<length-percentage>] [top|center|bottom|<length-percentage>]?|[[left|right] <length-percentage>]&&[[top|bottom] <length-percentage>]]","pow()":"pow( <calc-sum> , <calc-sum> )","pseudo-class-selector":"':' <ident-token>|':' <function-token> <any-value> ')'","pseudo-element-selector":"':' <pseudo-class-selector>","pseudo-page":": [left|right|first|blank]",quote:"open-quote|close-quote|no-open-quote|no-close-quote","radial-gradient()":"radial-gradient( [<ending-shape>||<size>]? [at <position>]? , <color-stop-list> )",ratio:"<number [0,\u221E]> [/ <number [0,\u221E]>]?","relative-selector":"<combinator>? <complex-selector>","relative-selector-list":"<relative-selector>#","relative-size":"larger|smaller","rem()":"rem( <calc-sum> , <calc-sum> )","repeat-style":"repeat-x|repeat-y|[repeat|space|round|no-repeat]{1,2}","repeating-conic-gradient()":"repeating-conic-gradient( [from <angle>]? [at <position>]? , <angular-color-stop-list> )","repeating-linear-gradient()":"repeating-linear-gradient( [<angle>|to <side-or-corner>]? , <color-stop-list> )","repeating-radial-gradient()":"repeating-radial-gradient( [<ending-shape>||<size>]? [at <position>]? , <color-stop-list> )","reversed-counter-name":"reversed( <counter-name> )","rgb()":"rgb( <percentage>{3} [/ <alpha-value>]? )|rgb( <number>{3} [/ <alpha-value>]? )|rgb( <percentage>#{3} , <alpha-value>? )|rgb( <number>#{3} , <alpha-value>? )","rgba()":"rgba( <percentage>{3} [/ <alpha-value>]? )|rgba( <number>{3} [/ <alpha-value>]? )|rgba( <percentage>#{3} , <alpha-value>? )|rgba( <number>#{3} , <alpha-value>? )","rotate()":"rotate( [<angle>|<zero>] )","rotate3d()":"rotate3d( <number> , <number> , <number> , [<angle>|<zero>] )","rotateX()":"rotateX( [<angle>|<zero>] )","rotateY()":"rotateY( [<angle>|<zero>] )","rotateZ()":"rotateZ( [<angle>|<zero>] )","round()":"round( <rounding-strategy>? , <calc-sum> , <calc-sum> )","rounding-strategy":"nearest|up|down|to-zero","saturate()":"saturate( <number-percentage> )","scale()":"scale( [<number>|<percentage>]#{1,2} )","scale3d()":"scale3d( [<number>|<percentage>]#{3} )","scaleX()":"scaleX( [<number>|<percentage>] )","scaleY()":"scaleY( [<number>|<percentage>] )","scaleZ()":"scaleZ( [<number>|<percentage>] )",scroller:"root|nearest","self-position":"center|start|end|self-start|self-end|flex-start|flex-end","shape-radius":"<length-percentage>|closest-side|farthest-side","sign()":"sign( <calc-sum> )","skew()":"skew( [<angle>|<zero>] , [<angle>|<zero>]? )","skewX()":"skewX( [<angle>|<zero>] )","skewY()":"skewY( [<angle>|<zero>] )","sepia()":"sepia( <number-percentage> )",shadow:"inset?&&<length>{2,4}&&<color>?","shadow-t":"[<length>{2,3}&&<color>?]",shape:"rect( <top> , <right> , <bottom> , <left> )|rect( <top> <right> <bottom> <left> )","shape-box":"<box>|margin-box","side-or-corner":"[left|right]||[top|bottom]","sin()":"sin( <calc-sum> )","single-animation":"<time>||<easing-function>||<time>||<single-animation-iteration-count>||<single-animation-direction>||<single-animation-fill-mode>||<single-animation-play-state>||[none|<keyframes-name>]","single-animation-direction":"normal|reverse|alternate|alternate-reverse","single-animation-fill-mode":"none|forwards|backwards|both","single-animation-iteration-count":"infinite|<number>","single-animation-play-state":"running|paused","single-animation-timeline":"auto|none|<timeline-name>|scroll( <axis>? <scroller>? )","single-transition":"[none|<single-transition-property>]||<time>||<easing-function>||<time>","single-transition-property":"all|<custom-ident>",size:"closest-side|farthest-side|closest-corner|farthest-corner|<length>|<length-percentage>{2}","sqrt()":"sqrt( <calc-sum> )","step-position":"jump-start|jump-end|jump-none|jump-both|start|end","step-timing-function":"step-start|step-end|steps( <integer> [, <step-position>]? )","subclass-selector":"<id-selector>|<class-selector>|<attribute-selector>|<pseudo-class-selector>","supports-condition":"not <supports-in-parens>|<supports-in-parens> [and <supports-in-parens>]*|<supports-in-parens> [or <supports-in-parens>]*","supports-in-parens":"( <supports-condition> )|<supports-feature>|<general-enclosed>","supports-feature":"<supports-decl>|<supports-selector-fn>","supports-decl":"( <declaration> )","supports-selector-fn":"selector( <complex-selector> )",symbol:"<string>|<image>|<custom-ident>","tan()":"tan( <calc-sum> )",target:"<target-counter()>|<target-counters()>|<target-text()>","target-counter()":"target-counter( [<string>|<url>] , <custom-ident> , <counter-style>? )","target-counters()":"target-counters( [<string>|<url>] , <custom-ident> , <string> , <counter-style>? )","target-text()":"target-text( [<string>|<url>] , [content|before|after|first-letter]? )","time-percentage":"<time>|<percentage>","timeline-name":"<custom-ident>|<string>","easing-function":"linear|<cubic-bezier-timing-function>|<step-timing-function>","track-breadth":"<length-percentage>|<flex>|min-content|max-content|auto","track-list":"[<line-names>? [<track-size>|<track-repeat>]]+ <line-names>?","track-repeat":"repeat( [<integer [1,\u221E]>] , [<line-names>? <track-size>]+ <line-names>? )","track-size":"<track-breadth>|minmax( <inflexible-breadth> , <track-breadth> )|fit-content( <length-percentage> )","transform-function":"<matrix()>|<translate()>|<translateX()>|<translateY()>|<scale()>|<scaleX()>|<scaleY()>|<rotate()>|<skew()>|<skewX()>|<skewY()>|<matrix3d()>|<translate3d()>|<translateZ()>|<scale3d()>|<scaleZ()>|<rotate3d()>|<rotateX()>|<rotateY()>|<rotateZ()>|<perspective()>","transform-list":"<transform-function>+","translate()":"translate( <length-percentage> , <length-percentage>? )","translate3d()":"translate3d( <length-percentage> , <length-percentage> , <length> )","translateX()":"translateX( <length-percentage> )","translateY()":"translateY( <length-percentage> )","translateZ()":"translateZ( <length> )","type-or-unit":"string|color|url|integer|number|length|angle|time|frequency|cap|ch|em|ex|ic|lh|rlh|rem|vb|vi|vw|vh|vmin|vmax|mm|Q|cm|in|pt|pc|px|deg|grad|rad|turn|ms|s|Hz|kHz|%","type-selector":"<wq-name>|<ns-prefix>? '*'","var()":"var( <custom-property-name> , <declaration-value>? )","viewport-length":"auto|<length-percentage>","visual-box":"content-box|padding-box|border-box","wq-name":"<ns-prefix>? <ident-token>","-legacy-gradient":"<-webkit-gradient()>|<-legacy-linear-gradient>|<-legacy-repeating-linear-gradient>|<-legacy-radial-gradient>|<-legacy-repeating-radial-gradient>","-legacy-linear-gradient":"-moz-linear-gradient( <-legacy-linear-gradient-arguments> )|-webkit-linear-gradient( <-legacy-linear-gradient-arguments> )|-o-linear-gradient( <-legacy-linear-gradient-arguments> )","-legacy-repeating-linear-gradient":"-moz-repeating-linear-gradient( <-legacy-linear-gradient-arguments> )|-webkit-repeating-linear-gradient( <-legacy-linear-gradient-arguments> )|-o-repeating-linear-gradient( <-legacy-linear-gradient-arguments> )","-legacy-linear-gradient-arguments":"[<angle>|<side-or-corner>]? , <color-stop-list>","-legacy-radial-gradient":"-moz-radial-gradient( <-legacy-radial-gradient-arguments> )|-webkit-radial-gradient( <-legacy-radial-gradient-arguments> )|-o-radial-gradient( <-legacy-radial-gradient-arguments> )","-legacy-repeating-radial-gradient":"-moz-repeating-radial-gradient( <-legacy-radial-gradient-arguments> )|-webkit-repeating-radial-gradient( <-legacy-radial-gradient-arguments> )|-o-repeating-radial-gradient( <-legacy-radial-gradient-arguments> )","-legacy-radial-gradient-arguments":"[<position> ,]? [[[<-legacy-radial-gradient-shape>||<-legacy-radial-gradient-size>]|[<length>|<percentage>]{2}] ,]? <color-stop-list>","-legacy-radial-gradient-size":"closest-side|closest-corner|farthest-side|farthest-corner|contain|cover","-legacy-radial-gradient-shape":"circle|ellipse","-non-standard-font":"-apple-system-body|-apple-system-headline|-apple-system-subheadline|-apple-system-caption1|-apple-system-caption2|-apple-system-footnote|-apple-system-short-body|-apple-system-short-headline|-apple-system-short-subheadline|-apple-system-short-caption1|-apple-system-short-footnote|-apple-system-tall-body","-non-standard-color":"-moz-ButtonDefault|-moz-ButtonHoverFace|-moz-ButtonHoverText|-moz-CellHighlight|-moz-CellHighlightText|-moz-Combobox|-moz-ComboboxText|-moz-Dialog|-moz-DialogText|-moz-dragtargetzone|-moz-EvenTreeRow|-moz-Field|-moz-FieldText|-moz-html-CellHighlight|-moz-html-CellHighlightText|-moz-mac-accentdarkestshadow|-moz-mac-accentdarkshadow|-moz-mac-accentface|-moz-mac-accentlightesthighlight|-moz-mac-accentlightshadow|-moz-mac-accentregularhighlight|-moz-mac-accentregularshadow|-moz-mac-chrome-active|-moz-mac-chrome-inactive|-moz-mac-focusring|-moz-mac-menuselect|-moz-mac-menushadow|-moz-mac-menutextselect|-moz-MenuHover|-moz-MenuHoverText|-moz-MenuBarText|-moz-MenuBarHoverText|-moz-nativehyperlinktext|-moz-OddTreeRow|-moz-win-communicationstext|-moz-win-mediatext|-moz-activehyperlinktext|-moz-default-background-color|-moz-default-color|-moz-hyperlinktext|-moz-visitedhyperlinktext|-webkit-activelink|-webkit-focus-ring-color|-webkit-link|-webkit-text","-non-standard-image-rendering":"optimize-contrast|-moz-crisp-edges|-o-crisp-edges|-webkit-optimize-contrast","-non-standard-overflow":"-moz-scrollbars-none|-moz-scrollbars-horizontal|-moz-scrollbars-vertical|-moz-hidden-unscrollable","-non-standard-width":"fill-available|min-intrinsic|intrinsic|-moz-available|-moz-fit-content|-moz-min-content|-moz-max-content|-webkit-min-content|-webkit-max-content","-webkit-gradient()":"-webkit-gradient( <-webkit-gradient-type> , <-webkit-gradient-point> [, <-webkit-gradient-point>|, <-webkit-gradient-radius> , <-webkit-gradient-point>] [, <-webkit-gradient-radius>]? [, <-webkit-gradient-color-stop>]* )","-webkit-gradient-color-stop":"from( <color> )|color-stop( [<number-zero-one>|<percentage>] , <color> )|to( <color> )","-webkit-gradient-point":"[left|center|right|<length-percentage>] [top|center|bottom|<length-percentage>]","-webkit-gradient-radius":"<length>|<percentage>","-webkit-gradient-type":"linear|radial","-webkit-mask-box-repeat":"repeat|stretch|round","-webkit-mask-clip-style":"border|border-box|padding|padding-box|content|content-box|text","-ms-filter-function-list":"<-ms-filter-function>+","-ms-filter-function":"<-ms-filter-function-progid>|<-ms-filter-function-legacy>","-ms-filter-function-progid":"'progid:' [<ident-token> '.']* [<ident-token>|<function-token> <any-value>? )]","-ms-filter-function-legacy":"<ident-token>|<function-token> <any-value>? )","-ms-filter":"<string>",age:"child|young|old","attr-name":"<wq-name>","attr-fallback":"<any-value>","bg-clip":"<box>|border|text",bottom:"<length>|auto","container-name":"<custom-ident>","container-condition":"not <query-in-parens>|<query-in-parens> [[and <query-in-parens>]*|[or <query-in-parens>]*]","generic-voice":"[<age>? <gender> <integer>?]",gender:"male|female|neutral",left:"<length>|auto","mask-image":"<mask-reference>#",paint:"none|<color>|<url> [none|<color>]?|context-fill|context-stroke",right:"<length>|auto","scroll-timeline-axis":"block|inline|vertical|horizontal","scroll-timeline-name":"none|<custom-ident>","single-animation-composition":"replace|add|accumulate","svg-length":"<percentage>|<length>|<number>","svg-writing-mode":"lr-tb|rl-tb|tb-rl|lr|rl|tb",top:"<length>|auto",x:"<number>",y:"<number>",declaration:"<ident-token> : <declaration-value>? ['!' important]?","declaration-list":"[<declaration>? ';']* <declaration>?",url:"url( <string> <url-modifier>* )|<url-token>","url-modifier":"<ident>|<function-token> <any-value> )","number-zero-one":"<number [0,1]>","number-one-or-greater":"<number [1,\u221E]>","query-in-parens":"( <container-condition> )|( <size-feature> )|style( <style-query> )|<general-enclosed>","size-feature":"<mf-plain>|<mf-boolean>|<mf-range>","style-feature":"<declaration>","style-query":"<style-condition>|<style-feature>","style-condition":"not <style-in-parens>|<style-in-parens> [[and <style-in-parens>]*|[or <style-in-parens>]*]","style-in-parens":"( <style-condition> )|( <style-feature> )|<general-enclosed>","-non-standard-display":"-ms-inline-flexbox|-ms-grid|-ms-inline-grid|-webkit-flex|-webkit-inline-flex|-webkit-box|-webkit-inline-box|-moz-inline-stack|-moz-box|-moz-inline-box"},properties:{"--*":"<declaration-value>","-ms-accelerator":"false|true","-ms-block-progression":"tb|rl|bt|lr","-ms-content-zoom-chaining":"none|chained","-ms-content-zooming":"none|zoom","-ms-content-zoom-limit":"<'-ms-content-zoom-limit-min'> <'-ms-content-zoom-limit-max'>","-ms-content-zoom-limit-max":"<percentage>","-ms-content-zoom-limit-min":"<percentage>","-ms-content-zoom-snap":"<'-ms-content-zoom-snap-type'>||<'-ms-content-zoom-snap-points'>","-ms-content-zoom-snap-points":"snapInterval( <percentage> , <percentage> )|snapList( <percentage># )","-ms-content-zoom-snap-type":"none|proximity|mandatory","-ms-filter":"<string>","-ms-flow-from":"[none|<custom-ident>]#","-ms-flow-into":"[none|<custom-ident>]#","-ms-grid-columns":"none|<track-list>|<auto-track-list>","-ms-grid-rows":"none|<track-list>|<auto-track-list>","-ms-high-contrast-adjust":"auto|none","-ms-hyphenate-limit-chars":"auto|<integer>{1,3}","-ms-hyphenate-limit-lines":"no-limit|<integer>","-ms-hyphenate-limit-zone":"<percentage>|<length>","-ms-ime-align":"auto|after","-ms-overflow-style":"auto|none|scrollbar|-ms-autohiding-scrollbar","-ms-scrollbar-3dlight-color":"<color>","-ms-scrollbar-arrow-color":"<color>","-ms-scrollbar-base-color":"<color>","-ms-scrollbar-darkshadow-color":"<color>","-ms-scrollbar-face-color":"<color>","-ms-scrollbar-highlight-color":"<color>","-ms-scrollbar-shadow-color":"<color>","-ms-scrollbar-track-color":"<color>","-ms-scroll-chaining":"chained|none","-ms-scroll-limit":"<'-ms-scroll-limit-x-min'> <'-ms-scroll-limit-y-min'> <'-ms-scroll-limit-x-max'> <'-ms-scroll-limit-y-max'>","-ms-scroll-limit-x-max":"auto|<length>","-ms-scroll-limit-x-min":"<length>","-ms-scroll-limit-y-max":"auto|<length>","-ms-scroll-limit-y-min":"<length>","-ms-scroll-rails":"none|railed","-ms-scroll-snap-points-x":"snapInterval( <length-percentage> , <length-percentage> )|snapList( <length-percentage># )","-ms-scroll-snap-points-y":"snapInterval( <length-percentage> , <length-percentage> )|snapList( <length-percentage># )","-ms-scroll-snap-type":"none|proximity|mandatory","-ms-scroll-snap-x":"<'-ms-scroll-snap-type'> <'-ms-scroll-snap-points-x'>","-ms-scroll-snap-y":"<'-ms-scroll-snap-type'> <'-ms-scroll-snap-points-y'>","-ms-scroll-translation":"none|vertical-to-horizontal","-ms-text-autospace":"none|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space","-ms-touch-select":"grippers|none","-ms-user-select":"none|element|text","-ms-wrap-flow":"auto|both|start|end|maximum|clear","-ms-wrap-margin":"<length>","-ms-wrap-through":"wrap|none","-moz-appearance":"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","-moz-binding":"<url>|none","-moz-border-bottom-colors":"<color>+|none","-moz-border-left-colors":"<color>+|none","-moz-border-right-colors":"<color>+|none","-moz-border-top-colors":"<color>+|none","-moz-context-properties":"none|[fill|fill-opacity|stroke|stroke-opacity]#","-moz-float-edge":"border-box|content-box|margin-box|padding-box","-moz-force-broken-image-icon":"0|1","-moz-image-region":"<shape>|auto","-moz-orient":"inline|block|horizontal|vertical","-moz-outline-radius":"<outline-radius>{1,4} [/ <outline-radius>{1,4}]?","-moz-outline-radius-bottomleft":"<outline-radius>","-moz-outline-radius-bottomright":"<outline-radius>","-moz-outline-radius-topleft":"<outline-radius>","-moz-outline-radius-topright":"<outline-radius>","-moz-stack-sizing":"ignore|stretch-to-fit","-moz-text-blink":"none|blink","-moz-user-focus":"ignore|normal|select-after|select-before|select-menu|select-same|select-all|none","-moz-user-input":"auto|none|enabled|disabled","-moz-user-modify":"read-only|read-write|write-only","-moz-window-dragging":"drag|no-drag","-moz-window-shadow":"default|menu|tooltip|sheet|none","-webkit-appearance":"none|button|button-bevel|caps-lock-indicator|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|scrollbarbutton-down|scrollbarbutton-left|scrollbarbutton-right|scrollbarbutton-up|scrollbargripper-horizontal|scrollbargripper-vertical|scrollbarthumb-horizontal|scrollbarthumb-vertical|scrollbartrack-horizontal|scrollbartrack-vertical|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","-webkit-border-before":"<'border-width'>||<'border-style'>||<color>","-webkit-border-before-color":"<color>","-webkit-border-before-style":"<'border-style'>","-webkit-border-before-width":"<'border-width'>","-webkit-box-reflect":"[above|below|right|left]? <length>? <image>?","-webkit-line-clamp":"none|<integer>","-webkit-mask":"[<mask-reference>||<position> [/ <bg-size>]?||<repeat-style>||[<box>|border|padding|content|text]||[<box>|border|padding|content]]#","-webkit-mask-attachment":"<attachment>#","-webkit-mask-clip":"[<box>|border|padding|content|text]#","-webkit-mask-composite":"<composite-style>#","-webkit-mask-image":"<mask-reference>#","-webkit-mask-origin":"[<box>|border|padding|content]#","-webkit-mask-position":"<position>#","-webkit-mask-position-x":"[<length-percentage>|left|center|right]#","-webkit-mask-position-y":"[<length-percentage>|top|center|bottom]#","-webkit-mask-repeat":"<repeat-style>#","-webkit-mask-repeat-x":"repeat|no-repeat|space|round","-webkit-mask-repeat-y":"repeat|no-repeat|space|round","-webkit-mask-size":"<bg-size>#","-webkit-overflow-scrolling":"auto|touch","-webkit-tap-highlight-color":"<color>","-webkit-text-fill-color":"<color>","-webkit-text-stroke":"<length>||<color>","-webkit-text-stroke-color":"<color>","-webkit-text-stroke-width":"<length>","-webkit-touch-callout":"default|none","-webkit-user-modify":"read-only|read-write|read-write-plaintext-only","accent-color":"auto|<color>","align-content":"normal|<baseline-position>|<content-distribution>|<overflow-position>? <content-position>","align-items":"normal|stretch|<baseline-position>|[<overflow-position>? <self-position>]","align-self":"auto|normal|stretch|<baseline-position>|<overflow-position>? <self-position>","align-tracks":"[normal|<baseline-position>|<content-distribution>|<overflow-position>? <content-position>]#",all:"initial|inherit|unset|revert|revert-layer",animation:"<single-animation>#","animation-composition":"<single-animation-composition>#","animation-delay":"<time>#","animation-direction":"<single-animation-direction>#","animation-duration":"<time>#","animation-fill-mode":"<single-animation-fill-mode>#","animation-iteration-count":"<single-animation-iteration-count>#","animation-name":"[none|<keyframes-name>]#","animation-play-state":"<single-animation-play-state>#","animation-timing-function":"<easing-function>#","animation-timeline":"<single-animation-timeline>#",appearance:"none|auto|textfield|menulist-button|<compat-auto>","aspect-ratio":"auto|<ratio>",azimuth:"<angle>|[[left-side|far-left|left|center-left|center|center-right|right|far-right|right-side]||behind]|leftwards|rightwards","backdrop-filter":"none|<filter-function-list>","backface-visibility":"visible|hidden",background:"[<bg-layer> ,]* <final-bg-layer>","background-attachment":"<attachment>#","background-blend-mode":"<blend-mode>#","background-clip":"<bg-clip>#","background-color":"<color>","background-image":"<bg-image>#","background-origin":"<box>#","background-position":"<bg-position>#","background-position-x":"[center|[[left|right|x-start|x-end]? <length-percentage>?]!]#","background-position-y":"[center|[[top|bottom|y-start|y-end]? <length-percentage>?]!]#","background-repeat":"<repeat-style>#","background-size":"<bg-size>#","block-overflow":"clip|ellipsis|<string>","block-size":"<'width'>",border:"<line-width>||<line-style>||<color>","border-block":"<'border-top-width'>||<'border-top-style'>||<color>","border-block-color":"<'border-top-color'>{1,2}","border-block-style":"<'border-top-style'>","border-block-width":"<'border-top-width'>","border-block-end":"<'border-top-width'>||<'border-top-style'>||<color>","border-block-end-color":"<'border-top-color'>","border-block-end-style":"<'border-top-style'>","border-block-end-width":"<'border-top-width'>","border-block-start":"<'border-top-width'>||<'border-top-style'>||<color>","border-block-start-color":"<'border-top-color'>","border-block-start-style":"<'border-top-style'>","border-block-start-width":"<'border-top-width'>","border-bottom":"<line-width>||<line-style>||<color>","border-bottom-color":"<'border-top-color'>","border-bottom-left-radius":"<length-percentage>{1,2}","border-bottom-right-radius":"<length-percentage>{1,2}","border-bottom-style":"<line-style>","border-bottom-width":"<line-width>","border-collapse":"collapse|separate","border-color":"<color>{1,4}","border-end-end-radius":"<length-percentage>{1,2}","border-end-start-radius":"<length-percentage>{1,2}","border-image":"<'border-image-source'>||<'border-image-slice'> [/ <'border-image-width'>|/ <'border-image-width'>? / <'border-image-outset'>]?||<'border-image-repeat'>","border-image-outset":"[<length>|<number>]{1,4}","border-image-repeat":"[stretch|repeat|round|space]{1,2}","border-image-slice":"<number-percentage>{1,4}&&fill?","border-image-source":"none|<image>","border-image-width":"[<length-percentage>|<number>|auto]{1,4}","border-inline":"<'border-top-width'>||<'border-top-style'>||<color>","border-inline-end":"<'border-top-width'>||<'border-top-style'>||<color>","border-inline-color":"<'border-top-color'>{1,2}","border-inline-style":"<'border-top-style'>","border-inline-width":"<'border-top-width'>","border-inline-end-color":"<'border-top-color'>","border-inline-end-style":"<'border-top-style'>","border-inline-end-width":"<'border-top-width'>","border-inline-start":"<'border-top-width'>||<'border-top-style'>||<color>","border-inline-start-color":"<'border-top-color'>","border-inline-start-style":"<'border-top-style'>","border-inline-start-width":"<'border-top-width'>","border-left":"<line-width>||<line-style>||<color>","border-left-color":"<color>","border-left-style":"<line-style>","border-left-width":"<line-width>","border-radius":"<length-percentage>{1,4} [/ <length-percentage>{1,4}]?","border-right":"<line-width>||<line-style>||<color>","border-right-color":"<color>","border-right-style":"<line-style>","border-right-width":"<line-width>","border-spacing":"<length> <length>?","border-start-end-radius":"<length-percentage>{1,2}","border-start-start-radius":"<length-percentage>{1,2}","border-style":"<line-style>{1,4}","border-top":"<line-width>||<line-style>||<color>","border-top-color":"<color>","border-top-left-radius":"<length-percentage>{1,2}","border-top-right-radius":"<length-percentage>{1,2}","border-top-style":"<line-style>","border-top-width":"<line-width>","border-width":"<line-width>{1,4}",bottom:"<length>|<percentage>|auto","box-align":"start|center|end|baseline|stretch","box-decoration-break":"slice|clone","box-direction":"normal|reverse|inherit","box-flex":"<number>","box-flex-group":"<integer>","box-lines":"single|multiple","box-ordinal-group":"<integer>","box-orient":"horizontal|vertical|inline-axis|block-axis|inherit","box-pack":"start|center|end|justify","box-shadow":"none|<shadow>#","box-sizing":"content-box|border-box","break-after":"auto|avoid|always|all|avoid-page|page|left|right|recto|verso|avoid-column|column|avoid-region|region","break-before":"auto|avoid|always|all|avoid-page|page|left|right|recto|verso|avoid-column|column|avoid-region|region","break-inside":"auto|avoid|avoid-page|avoid-column|avoid-region","caption-side":"top|bottom|block-start|block-end|inline-start|inline-end",caret:"<'caret-color'>||<'caret-shape'>","caret-color":"auto|<color>","caret-shape":"auto|bar|block|underscore",clear:"none|left|right|both|inline-start|inline-end",clip:"<shape>|auto","clip-path":"<clip-source>|[<basic-shape>||<geometry-box>]|none",color:"<color>","print-color-adjust":"economy|exact","color-scheme":"normal|[light|dark|<custom-ident>]+&&only?","column-count":"<integer>|auto","column-fill":"auto|balance|balance-all","column-gap":"normal|<length-percentage>","column-rule":"<'column-rule-width'>||<'column-rule-style'>||<'column-rule-color'>","column-rule-color":"<color>","column-rule-style":"<'border-style'>","column-rule-width":"<'border-width'>","column-span":"none|all","column-width":"<length>|auto",columns:"<'column-width'>||<'column-count'>",contain:"none|strict|content|[[size||inline-size]||layout||style||paint]","contain-intrinsic-size":"[none|<length>|auto <length>]{1,2}","contain-intrinsic-block-size":"none|<length>|auto <length>","contain-intrinsic-height":"none|<length>|auto <length>","contain-intrinsic-inline-size":"none|<length>|auto <length>","contain-intrinsic-width":"none|<length>|auto <length>",content:"normal|none|[<content-replacement>|<content-list>] [/ [<string>|<counter>]+]?","content-visibility":"visible|auto|hidden","counter-increment":"[<counter-name> <integer>?]+|none","counter-reset":"[<counter-name> <integer>?|<reversed-counter-name> <integer>?]+|none","counter-set":"[<counter-name> <integer>?]+|none",cursor:"[[<url> [<x> <y>]? ,]* [auto|default|none|context-menu|help|pointer|progress|wait|cell|crosshair|text|vertical-text|alias|copy|move|no-drop|not-allowed|e-resize|n-resize|ne-resize|nw-resize|s-resize|se-resize|sw-resize|w-resize|ew-resize|ns-resize|nesw-resize|nwse-resize|col-resize|row-resize|all-scroll|zoom-in|zoom-out|grab|grabbing|hand|-webkit-grab|-webkit-grabbing|-webkit-zoom-in|-webkit-zoom-out|-moz-grab|-moz-grabbing|-moz-zoom-in|-moz-zoom-out]]",direction:"ltr|rtl",display:"[<display-outside>||<display-inside>]|<display-listitem>|<display-internal>|<display-box>|<display-legacy>|<-non-standard-display>","empty-cells":"show|hide",filter:"none|<filter-function-list>|<-ms-filter-function-list>",flex:"none|[<'flex-grow'> <'flex-shrink'>?||<'flex-basis'>]","flex-basis":"content|<'width'>","flex-direction":"row|row-reverse|column|column-reverse","flex-flow":"<'flex-direction'>||<'flex-wrap'>","flex-grow":"<number>","flex-shrink":"<number>","flex-wrap":"nowrap|wrap|wrap-reverse",float:"left|right|none|inline-start|inline-end",font:"[[<'font-style'>||<font-variant-css21>||<'font-weight'>||<'font-stretch'>]? <'font-size'> [/ <'line-height'>]? <'font-family'>]|caption|icon|menu|message-box|small-caption|status-bar","font-family":"[<family-name>|<generic-family>]#","font-feature-settings":"normal|<feature-tag-value>#","font-kerning":"auto|normal|none","font-language-override":"normal|<string>","font-optical-sizing":"auto|none","font-variation-settings":"normal|[<string> <number>]#","font-size":"<absolute-size>|<relative-size>|<length-percentage>","font-size-adjust":"none|[ex-height|cap-height|ch-width|ic-width|ic-height]? [from-font|<number>]","font-smooth":"auto|never|always|<absolute-size>|<length>","font-stretch":"<font-stretch-absolute>","font-style":"normal|italic|oblique <angle>?","font-synthesis":"none|[weight||style||small-caps]","font-variant":"normal|none|[<common-lig-values>||<discretionary-lig-values>||<historical-lig-values>||<contextual-alt-values>||stylistic( <feature-value-name> )||historical-forms||styleset( <feature-value-name># )||character-variant( <feature-value-name># )||swash( <feature-value-name> )||ornaments( <feature-value-name> )||annotation( <feature-value-name> )||[small-caps|all-small-caps|petite-caps|all-petite-caps|unicase|titling-caps]||<numeric-figure-values>||<numeric-spacing-values>||<numeric-fraction-values>||ordinal||slashed-zero||<east-asian-variant-values>||<east-asian-width-values>||ruby]","font-variant-alternates":"normal|[stylistic( <feature-value-name> )||historical-forms||styleset( <feature-value-name># )||character-variant( <feature-value-name># )||swash( <feature-value-name> )||ornaments( <feature-value-name> )||annotation( <feature-value-name> )]","font-variant-caps":"normal|small-caps|all-small-caps|petite-caps|all-petite-caps|unicase|titling-caps","font-variant-east-asian":"normal|[<east-asian-variant-values>||<east-asian-width-values>||ruby]","font-variant-ligatures":"normal|none|[<common-lig-values>||<discretionary-lig-values>||<historical-lig-values>||<contextual-alt-values>]","font-variant-numeric":"normal|[<numeric-figure-values>||<numeric-spacing-values>||<numeric-fraction-values>||ordinal||slashed-zero]","font-variant-position":"normal|sub|super","font-weight":"<font-weight-absolute>|bolder|lighter","forced-color-adjust":"auto|none",gap:"<'row-gap'> <'column-gap'>?",grid:"<'grid-template'>|<'grid-template-rows'> / [auto-flow&&dense?] <'grid-auto-columns'>?|[auto-flow&&dense?] <'grid-auto-rows'>? / <'grid-template-columns'>","grid-area":"<grid-line> [/ <grid-line>]{0,3}","grid-auto-columns":"<track-size>+","grid-auto-flow":"[row|column]||dense","grid-auto-rows":"<track-size>+","grid-column":"<grid-line> [/ <grid-line>]?","grid-column-end":"<grid-line>","grid-column-gap":"<length-percentage>","grid-column-start":"<grid-line>","grid-gap":"<'grid-row-gap'> <'grid-column-gap'>?","grid-row":"<grid-line> [/ <grid-line>]?","grid-row-end":"<grid-line>","grid-row-gap":"<length-percentage>","grid-row-start":"<grid-line>","grid-template":"none|[<'grid-template-rows'> / <'grid-template-columns'>]|[<line-names>? <string> <track-size>? <line-names>?]+ [/ <explicit-track-list>]?","grid-template-areas":"none|<string>+","grid-template-columns":"none|<track-list>|<auto-track-list>|subgrid <line-name-list>?","grid-template-rows":"none|<track-list>|<auto-track-list>|subgrid <line-name-list>?","hanging-punctuation":"none|[first||[force-end|allow-end]||last]",height:"auto|<length>|<percentage>|min-content|max-content|fit-content|fit-content( <length-percentage> )","hyphenate-character":"auto|<string>",hyphens:"none|manual|auto","image-orientation":"from-image|<angle>|[<angle>? flip]","image-rendering":"auto|crisp-edges|pixelated|optimizeSpeed|optimizeQuality|<-non-standard-image-rendering>","image-resolution":"[from-image||<resolution>]&&snap?","ime-mode":"auto|normal|active|inactive|disabled","initial-letter":"normal|[<number> <integer>?]","initial-letter-align":"[auto|alphabetic|hanging|ideographic]","inline-size":"<'width'>","input-security":"auto|none",inset:"<'top'>{1,4}","inset-block":"<'top'>{1,2}","inset-block-end":"<'top'>","inset-block-start":"<'top'>","inset-inline":"<'top'>{1,2}","inset-inline-end":"<'top'>","inset-inline-start":"<'top'>",isolation:"auto|isolate","justify-content":"normal|<content-distribution>|<overflow-position>? [<content-position>|left|right]","justify-items":"normal|stretch|<baseline-position>|<overflow-position>? [<self-position>|left|right]|legacy|legacy&&[left|right|center]","justify-self":"auto|normal|stretch|<baseline-position>|<overflow-position>? [<self-position>|left|right]","justify-tracks":"[normal|<content-distribution>|<overflow-position>? [<content-position>|left|right]]#",left:"<length>|<percentage>|auto","letter-spacing":"normal|<length-percentage>","line-break":"auto|loose|normal|strict|anywhere","line-clamp":"none|<integer>","line-height":"normal|<number>|<length>|<percentage>","line-height-step":"<length>","list-style":"<'list-style-type'>||<'list-style-position'>||<'list-style-image'>","list-style-image":"<image>|none","list-style-position":"inside|outside","list-style-type":"<counter-style>|<string>|none",margin:"[<length>|<percentage>|auto]{1,4}","margin-block":"<'margin-left'>{1,2}","margin-block-end":"<'margin-left'>","margin-block-start":"<'margin-left'>","margin-bottom":"<length>|<percentage>|auto","margin-inline":"<'margin-left'>{1,2}","margin-inline-end":"<'margin-left'>","margin-inline-start":"<'margin-left'>","margin-left":"<length>|<percentage>|auto","margin-right":"<length>|<percentage>|auto","margin-top":"<length>|<percentage>|auto","margin-trim":"none|in-flow|all",mask:"<mask-layer>#","mask-border":"<'mask-border-source'>||<'mask-border-slice'> [/ <'mask-border-width'>? [/ <'mask-border-outset'>]?]?||<'mask-border-repeat'>||<'mask-border-mode'>","mask-border-mode":"luminance|alpha","mask-border-outset":"[<length>|<number>]{1,4}","mask-border-repeat":"[stretch|repeat|round|space]{1,2}","mask-border-slice":"<number-percentage>{1,4} fill?","mask-border-source":"none|<image>","mask-border-width":"[<length-percentage>|<number>|auto]{1,4}","mask-clip":"[<geometry-box>|no-clip]#","mask-composite":"<compositing-operator>#","mask-image":"<mask-reference>#","mask-mode":"<masking-mode>#","mask-origin":"<geometry-box>#","mask-position":"<position>#","mask-repeat":"<repeat-style>#","mask-size":"<bg-size>#","mask-type":"luminance|alpha","masonry-auto-flow":"[pack|next]||[definite-first|ordered]","math-depth":"auto-add|add( <integer> )|<integer>","math-shift":"normal|compact","math-style":"normal|compact","max-block-size":"<'max-width'>","max-height":"none|<length-percentage>|min-content|max-content|fit-content|fit-content( <length-percentage> )","max-inline-size":"<'max-width'>","max-lines":"none|<integer>","max-width":"none|<length-percentage>|min-content|max-content|fit-content|fit-content( <length-percentage> )|<-non-standard-width>","min-block-size":"<'min-width'>","min-height":"auto|<length>|<percentage>|min-content|max-content|fit-content|fit-content( <length-percentage> )","min-inline-size":"<'min-width'>","min-width":"auto|<length>|<percentage>|min-content|max-content|fit-content|fit-content( <length-percentage> )|<-non-standard-width>","mix-blend-mode":"<blend-mode>|plus-lighter","object-fit":"fill|contain|cover|none|scale-down","object-position":"<position>",offset:"[<'offset-position'>? [<'offset-path'> [<'offset-distance'>||<'offset-rotate'>]?]?]! [/ <'offset-anchor'>]?","offset-anchor":"auto|<position>","offset-distance":"<length-percentage>","offset-path":"none|ray( [<angle>&&<size>&&contain?] )|<path()>|<url>|[<basic-shape>||<geometry-box>]","offset-position":"auto|<position>","offset-rotate":"[auto|reverse]||<angle>",opacity:"<alpha-value>",order:"<integer>",orphans:"<integer>",outline:"[<'outline-color'>||<'outline-style'>||<'outline-width'>]","outline-color":"<color>|invert","outline-offset":"<length>","outline-style":"auto|<'border-style'>","outline-width":"<line-width>",overflow:"[visible|hidden|clip|scroll|auto]{1,2}|<-non-standard-overflow>","overflow-anchor":"auto|none","overflow-block":"visible|hidden|clip|scroll|auto","overflow-clip-box":"padding-box|content-box","overflow-clip-margin":"<visual-box>||<length [0,\u221E]>","overflow-inline":"visible|hidden|clip|scroll|auto","overflow-wrap":"normal|break-word|anywhere","overflow-x":"visible|hidden|clip|scroll|auto","overflow-y":"visible|hidden|clip|scroll|auto","overscroll-behavior":"[contain|none|auto]{1,2}","overscroll-behavior-block":"contain|none|auto","overscroll-behavior-inline":"contain|none|auto","overscroll-behavior-x":"contain|none|auto","overscroll-behavior-y":"contain|none|auto",padding:"[<length>|<percentage>]{1,4}","padding-block":"<'padding-left'>{1,2}","padding-block-end":"<'padding-left'>","padding-block-start":"<'padding-left'>","padding-bottom":"<length>|<percentage>","padding-inline":"<'padding-left'>{1,2}","padding-inline-end":"<'padding-left'>","padding-inline-start":"<'padding-left'>","padding-left":"<length>|<percentage>","padding-right":"<length>|<percentage>","padding-top":"<length>|<percentage>","page-break-after":"auto|always|avoid|left|right|recto|verso","page-break-before":"auto|always|avoid|left|right|recto|verso","page-break-inside":"auto|avoid","paint-order":"normal|[fill||stroke||markers]",perspective:"none|<length>","perspective-origin":"<position>","place-content":"<'align-content'> <'justify-content'>?","place-items":"<'align-items'> <'justify-items'>?","place-self":"<'align-self'> <'justify-self'>?","pointer-events":"auto|none|visiblePainted|visibleFill|visibleStroke|visible|painted|fill|stroke|all|inherit",position:"static|relative|absolute|sticky|fixed|-webkit-sticky",quotes:"none|auto|[<string> <string>]+",resize:"none|both|horizontal|vertical|block|inline",right:"<length>|<percentage>|auto",rotate:"none|<angle>|[x|y|z|<number>{3}]&&<angle>","row-gap":"normal|<length-percentage>","ruby-align":"start|center|space-between|space-around","ruby-merge":"separate|collapse|auto","ruby-position":"[alternate||[over|under]]|inter-character",scale:"none|<number>{1,3}","scrollbar-color":"auto|<color>{2}","scrollbar-gutter":"auto|stable&&both-edges?","scrollbar-width":"auto|thin|none","scroll-behavior":"auto|smooth","scroll-margin":"<length>{1,4}","scroll-margin-block":"<length>{1,2}","scroll-margin-block-start":"<length>","scroll-margin-block-end":"<length>","scroll-margin-bottom":"<length>","scroll-margin-inline":"<length>{1,2}","scroll-margin-inline-start":"<length>","scroll-margin-inline-end":"<length>","scroll-margin-left":"<length>","scroll-margin-right":"<length>","scroll-margin-top":"<length>","scroll-padding":"[auto|<length-percentage>]{1,4}","scroll-padding-block":"[auto|<length-percentage>]{1,2}","scroll-padding-block-start":"auto|<length-percentage>","scroll-padding-block-end":"auto|<length-percentage>","scroll-padding-bottom":"auto|<length-percentage>","scroll-padding-inline":"[auto|<length-percentage>]{1,2}","scroll-padding-inline-start":"auto|<length-percentage>","scroll-padding-inline-end":"auto|<length-percentage>","scroll-padding-left":"auto|<length-percentage>","scroll-padding-right":"auto|<length-percentage>","scroll-padding-top":"auto|<length-percentage>","scroll-snap-align":"[none|start|end|center]{1,2}","scroll-snap-coordinate":"none|<position>#","scroll-snap-destination":"<position>","scroll-snap-points-x":"none|repeat( <length-percentage> )","scroll-snap-points-y":"none|repeat( <length-percentage> )","scroll-snap-stop":"normal|always","scroll-snap-type":"none|[x|y|block|inline|both] [mandatory|proximity]?","scroll-snap-type-x":"none|mandatory|proximity","scroll-snap-type-y":"none|mandatory|proximity","scroll-timeline":"<scroll-timeline-name>||<scroll-timeline-axis>","scroll-timeline-axis":"block|inline|vertical|horizontal","scroll-timeline-name":"none|<custom-ident>","shape-image-threshold":"<alpha-value>","shape-margin":"<length-percentage>","shape-outside":"none|[<shape-box>||<basic-shape>]|<image>","tab-size":"<integer>|<length>","table-layout":"auto|fixed","text-align":"start|end|left|right|center|justify|match-parent","text-align-last":"auto|start|end|left|right|center|justify","text-combine-upright":"none|all|[digits <integer>?]","text-decoration":"<'text-decoration-line'>||<'text-decoration-style'>||<'text-decoration-color'>||<'text-decoration-thickness'>","text-decoration-color":"<color>","text-decoration-line":"none|[underline||overline||line-through||blink]|spelling-error|grammar-error","text-decoration-skip":"none|[objects||[spaces|[leading-spaces||trailing-spaces]]||edges||box-decoration]","text-decoration-skip-ink":"auto|all|none","text-decoration-style":"solid|double|dotted|dashed|wavy","text-decoration-thickness":"auto|from-font|<length>|<percentage>","text-emphasis":"<'text-emphasis-style'>||<'text-emphasis-color'>","text-emphasis-color":"<color>","text-emphasis-position":"[over|under]&&[right|left]","text-emphasis-style":"none|[[filled|open]||[dot|circle|double-circle|triangle|sesame]]|<string>","text-indent":"<length-percentage>&&hanging?&&each-line?","text-justify":"auto|inter-character|inter-word|none","text-orientation":"mixed|upright|sideways","text-overflow":"[clip|ellipsis|<string>]{1,2}","text-rendering":"auto|optimizeSpeed|optimizeLegibility|geometricPrecision","text-shadow":"none|<shadow-t>#","text-size-adjust":"none|auto|<percentage>","text-transform":"none|capitalize|uppercase|lowercase|full-width|full-size-kana","text-underline-offset":"auto|<length>|<percentage>","text-underline-position":"auto|from-font|[under||[left|right]]",top:"<length>|<percentage>|auto","touch-action":"auto|none|[[pan-x|pan-left|pan-right]||[pan-y|pan-up|pan-down]||pinch-zoom]|manipulation",transform:"none|<transform-list>","transform-box":"content-box|border-box|fill-box|stroke-box|view-box","transform-origin":"[<length-percentage>|left|center|right|top|bottom]|[[<length-percentage>|left|center|right]&&[<length-percentage>|top|center|bottom]] <length>?","transform-style":"flat|preserve-3d",transition:"<single-transition>#","transition-delay":"<time>#","transition-duration":"<time>#","transition-property":"none|<single-transition-property>#","transition-timing-function":"<easing-function>#",translate:"none|<length-percentage> [<length-percentage> <length>?]?","unicode-bidi":"normal|embed|isolate|bidi-override|isolate-override|plaintext|-moz-isolate|-moz-isolate-override|-moz-plaintext|-webkit-isolate|-webkit-isolate-override|-webkit-plaintext","user-select":"auto|text|none|contain|all","vertical-align":"baseline|sub|super|text-top|text-bottom|middle|top|bottom|<percentage>|<length>",visibility:"visible|hidden|collapse","white-space":"normal|pre|nowrap|pre-wrap|pre-line|break-spaces",widows:"<integer>",width:"auto|<length>|<percentage>|min-content|max-content|fit-content|fit-content( <length-percentage> )|fill|stretch|intrinsic|-moz-max-content|-webkit-max-content|-moz-fit-content|-webkit-fit-content","will-change":"auto|<animateable-feature>#","word-break":"normal|break-all|keep-all|break-word","word-spacing":"normal|<length>","word-wrap":"normal|break-word","writing-mode":"horizontal-tb|vertical-rl|vertical-lr|sideways-rl|sideways-lr|<svg-writing-mode>","z-index":"auto|<integer>",zoom:"normal|reset|<number>|<percentage>","-moz-background-clip":"padding|border","-moz-border-radius-bottomleft":"<'border-bottom-left-radius'>","-moz-border-radius-bottomright":"<'border-bottom-right-radius'>","-moz-border-radius-topleft":"<'border-top-left-radius'>","-moz-border-radius-topright":"<'border-bottom-right-radius'>","-moz-control-character-visibility":"visible|hidden","-moz-osx-font-smoothing":"auto|grayscale","-moz-user-select":"none|text|all|-moz-none","-ms-flex-align":"start|end|center|baseline|stretch","-ms-flex-item-align":"auto|start|end|center|baseline|stretch","-ms-flex-line-pack":"start|end|center|justify|distribute|stretch","-ms-flex-negative":"<'flex-shrink'>","-ms-flex-pack":"start|end|center|justify|distribute","-ms-flex-order":"<integer>","-ms-flex-positive":"<'flex-grow'>","-ms-flex-preferred-size":"<'flex-basis'>","-ms-interpolation-mode":"nearest-neighbor|bicubic","-ms-grid-column-align":"start|end|center|stretch","-ms-grid-row-align":"start|end|center|stretch","-ms-hyphenate-limit-last":"none|always|column|page|spread","-webkit-background-clip":"[<box>|border|padding|content|text]#","-webkit-column-break-after":"always|auto|avoid","-webkit-column-break-before":"always|auto|avoid","-webkit-column-break-inside":"always|auto|avoid","-webkit-font-smoothing":"auto|none|antialiased|subpixel-antialiased","-webkit-mask-box-image":"[<url>|<gradient>|none] [<length-percentage>{4} <-webkit-mask-box-repeat>{2}]?","-webkit-print-color-adjust":"economy|exact","-webkit-text-security":"none|circle|disc|square","-webkit-user-drag":"none|element|auto","-webkit-user-select":"auto|none|text|all","alignment-baseline":"auto|baseline|before-edge|text-before-edge|middle|central|after-edge|text-after-edge|ideographic|alphabetic|hanging|mathematical","baseline-shift":"baseline|sub|super|<svg-length>",behavior:"<url>+","clip-rule":"nonzero|evenodd",container:"<'container-name'> [/ <'container-type'>]?","container-name":"none|<custom-ident>+","container-type":"normal||[size|inline-size]",cue:"<'cue-before'> <'cue-after'>?","cue-after":"<url> <decibel>?|none","cue-before":"<url> <decibel>?|none","dominant-baseline":"auto|use-script|no-change|reset-size|ideographic|alphabetic|hanging|mathematical|central|middle|text-after-edge|text-before-edge",fill:"<paint>","fill-opacity":"<number-zero-one>","fill-rule":"nonzero|evenodd","glyph-orientation-horizontal":"<angle>","glyph-orientation-vertical":"<angle>",kerning:"auto|<svg-length>",marker:"none|<url>","marker-end":"none|<url>","marker-mid":"none|<url>","marker-start":"none|<url>",pause:"<'pause-before'> <'pause-after'>?","pause-after":"<time>|none|x-weak|weak|medium|strong|x-strong","pause-before":"<time>|none|x-weak|weak|medium|strong|x-strong",rest:"<'rest-before'> <'rest-after'>?","rest-after":"<time>|none|x-weak|weak|medium|strong|x-strong","rest-before":"<time>|none|x-weak|weak|medium|strong|x-strong","shape-rendering":"auto|optimizeSpeed|crispEdges|geometricPrecision",src:"[<url> [format( <string># )]?|local( <family-name> )]#",speak:"auto|none|normal","speak-as":"normal|spell-out||digits||[literal-punctuation|no-punctuation]",stroke:"<paint>","stroke-dasharray":"none|[<svg-length>+]#","stroke-dashoffset":"<svg-length>","stroke-linecap":"butt|round|square","stroke-linejoin":"miter|round|bevel","stroke-miterlimit":"<number-one-or-greater>","stroke-opacity":"<number-zero-one>","stroke-width":"<svg-length>","text-anchor":"start|middle|end","unicode-range":"<urange>#","voice-balance":"<number>|left|center|right|leftwards|rightwards","voice-duration":"auto|<time>","voice-family":"[[<family-name>|<generic-voice>] ,]* [<family-name>|<generic-voice>]|preserve","voice-pitch":"<frequency>&&absolute|[[x-low|low|medium|high|x-high]||[<frequency>|<semitones>|<percentage>]]","voice-range":"<frequency>&&absolute|[[x-low|low|medium|high|x-high]||[<frequency>|<semitones>|<percentage>]]","voice-rate":"[normal|x-slow|slow|medium|fast|x-fast]||<percentage>","voice-stress":"normal|strong|moderate|none|reduced","voice-volume":"silent|[[x-soft|soft|medium|loud|x-loud]||<decibel>]"},atrules:{charset:{prelude:"<string>",descriptors:null},"counter-style":{prelude:"<counter-style-name>",descriptors:{"additive-symbols":"[<integer>&&<symbol>]#",fallback:"<counter-style-name>",negative:"<symbol> <symbol>?",pad:"<integer>&&<symbol>",prefix:"<symbol>",range:"[[<integer>|infinite]{2}]#|auto","speak-as":"auto|bullets|numbers|words|spell-out|<counter-style-name>",suffix:"<symbol>",symbols:"<symbol>+",system:"cyclic|numeric|alphabetic|symbolic|additive|[fixed <integer>?]|[extends <counter-style-name>]"}},document:{prelude:"[<url>|url-prefix( <string> )|domain( <string> )|media-document( <string> )|regexp( <string> )]#",descriptors:null},"font-face":{prelude:null,descriptors:{"ascent-override":"normal|<percentage>","descent-override":"normal|<percentage>","font-display":"[auto|block|swap|fallback|optional]","font-family":"<family-name>","font-feature-settings":"normal|<feature-tag-value>#","font-variation-settings":"normal|[<string> <number>]#","font-stretch":"<font-stretch-absolute>{1,2}","font-style":"normal|italic|oblique <angle>{0,2}","font-weight":"<font-weight-absolute>{1,2}","font-variant":"normal|none|[<common-lig-values>||<discretionary-lig-values>||<historical-lig-values>||<contextual-alt-values>||stylistic( <feature-value-name> )||historical-forms||styleset( <feature-value-name># )||character-variant( <feature-value-name># )||swash( <feature-value-name> )||ornaments( <feature-value-name> )||annotation( <feature-value-name> )||[small-caps|all-small-caps|petite-caps|all-petite-caps|unicase|titling-caps]||<numeric-figure-values>||<numeric-spacing-values>||<numeric-fraction-values>||ordinal||slashed-zero||<east-asian-variant-values>||<east-asian-width-values>||ruby]","line-gap-override":"normal|<percentage>","size-adjust":"<percentage>",src:"[<url> [format( <string># )]?|local( <family-name> )]#","unicode-range":"<urange>#"}},"font-feature-values":{prelude:"<family-name>#",descriptors:null},import:{prelude:"[<string>|<url>] [layer|layer( <layer-name> )]? [supports( [<supports-condition>|<declaration>] )]? <media-query-list>?",descriptors:null},keyframes:{prelude:"<keyframes-name>",descriptors:null},layer:{prelude:"[<layer-name>#|<layer-name>?]",descriptors:null},media:{prelude:"<media-query-list>",descriptors:null},namespace:{prelude:"<namespace-prefix>? [<string>|<url>]",descriptors:null},page:{prelude:"<page-selector-list>",descriptors:{bleed:"auto|<length>",marks:"none|[crop||cross]",size:"<length>{1,2}|auto|[<page-size>||[portrait|landscape]]"}},property:{prelude:"<custom-property-name>",descriptors:{syntax:"<string>",inherits:"true|false","initial-value":"<string>"}},"scroll-timeline":{prelude:"<timeline-name>",descriptors:null},supports:{prelude:"<supports-condition>",descriptors:null},viewport:{prelude:null,descriptors:{height:"<viewport-length>{1,2}","max-height":"<viewport-length>","max-width":"<viewport-length>","max-zoom":"auto|<number>|<percentage>","min-height":"<viewport-length>","min-width":"<viewport-length>","min-zoom":"auto|<number>|<percentage>",orientation:"auto|portrait|landscape","user-zoom":"zoom|fixed","viewport-fit":"auto|contain|cover",width:"<viewport-length>{1,2}",zoom:"auto|<number>|<percentage>"}},container:{prelude:"[<container-name>]? <container-condition>",descriptors:null},nest:{prelude:"<complex-selector-list>",descriptors:null}}};var gt={};b(gt,{AnPlusB:()=>Xr,Atrule:()=>Zr,AtrulePrelude:()=>en,AttributeSelector:()=>nn,Block:()=>an,Brackets:()=>ln,CDC:()=>un,CDO:()=>hn,ClassSelector:()=>fn,Combinator:()=>gn,Comment:()=>xn,Declaration:()=>kn,DeclarationList:()=>Sn,Dimension:()=>An,Function:()=>En,Hash:()=>Pn,IdSelector:()=>Nn,Identifier:()=>Dn,MediaFeature:()=>Mn,MediaQuery:()=>Fn,MediaQueryList:()=>_n,NestingSelector:()=>Un,Nth:()=>Wn,Number:()=>Yn,Operator:()=>Vn,Parentheses:()=>Qn,Percentage:()=>$n,PseudoClassSelector:()=>Jn,PseudoElementSelector:()=>to,Ratio:()=>no,Raw:()=>io,Rule:()=>so,Selector:()=>co,SelectorList:()=>po,String:()=>bo,StyleSheet:()=>yo,TypeSelector:()=>vo,UnicodeRange:()=>Ao,Url:()=>Do,Value:()=>No,WhiteSpace:()=>Mo});var Xr={};b(Xr,{generate:()=>xc,name:()=>gc,parse:()=>Qr,structure:()=>bc});var me=43,re=45,Xt=110,Ie=!0,dc=!1;function $t(e,t){let r=this.tokenStart+e,n=this.charCodeAt(r);for((n===me||n===re)&&(t&&this.error("Number sign is not allowed"),r++);r<this.tokenEnd;r++)B(this.charCodeAt(r))||this.error("Integer is expected",r)}function Qe(e){return $t.call(this,0,e)}function Ce(e,t){if(!this.cmpChar(this.tokenStart+e,t)){let r="";switch(t){case Xt:r="N is expected";break;case re:r="HyphenMinus is expected";break}this.error(r,this.tokenStart+e)}}function Kr(){let e=0,t=0,r=this.tokenType;for(;r===13||r===25;)r=this.lookupType(++e);if(r!==10)if(this.isDelim(me,e)||this.isDelim(re,e)){t=this.isDelim(me,e)?me:re;do r=this.lookupType(++e);while(r===13||r===25);r!==10&&(this.skip(e),Qe.call(this,Ie))}else return null;return e>0&&this.skip(e),t===0&&(r=this.charCodeAt(this.tokenStart),r!==me&&r!==re&&this.error("Number sign is expected")),Qe.call(this,t!==0),t===re?"-"+this.consume(10):this.consume(10)}var gc="AnPlusB",bc={a:[String,null],b:[String,null]};function Qr(){let e=this.tokenStart,t=null,r=null;if(this.tokenType===10)Qe.call(this,dc),r=this.consume(10);else if(this.tokenType===1&&this.cmpChar(this.tokenStart,re))switch(t="-1",Ce.call(this,1,Xt),this.tokenEnd-this.tokenStart){case 2:this.next(),r=Kr.call(this);break;case 3:Ce.call(this,2,re),this.next(),this.skipSC(),Qe.call(this,Ie),r="-"+this.consume(10);break;default:Ce.call(this,2,re),$t.call(this,3,Ie),this.next(),r=this.substrToCursor(e+2)}else if(this.tokenType===1||this.isDelim(me)&&this.lookupType(1)===1){let n=0;switch(t="1",this.isDelim(me)&&(n=1,this.next()),Ce.call(this,0,Xt),this.tokenEnd-this.tokenStart){case 1:this.next(),r=Kr.call(this);break;case 2:Ce.call(this,1,re),this.next(),this.skipSC(),Qe.call(this,Ie),r="-"+this.consume(10);break;default:Ce.call(this,1,re),$t.call(this,2,Ie),this.next(),r=this.substrToCursor(e+n+1)}}else if(this.tokenType===12){let n=this.charCodeAt(this.tokenStart),o=n===me||n===re,i=this.tokenStart+o;for(;i<this.tokenEnd&&B(this.charCodeAt(i));i++);i===this.tokenStart+o&&this.error("Integer is expected",this.tokenStart+o),Ce.call(this,i-this.tokenStart,Xt),t=this.substring(e,i),i+1===this.tokenEnd?(this.next(),r=Kr.call(this)):(Ce.call(this,i-this.tokenStart+1,re),i+2===this.tokenEnd?(this.next(),this.skipSC(),Qe.call(this,Ie),r="-"+this.consume(10)):($t.call(this,i-this.tokenStart+2,Ie),this.next(),r=this.substrToCursor(i+1)))}else this.error();return t!==null&&t.charCodeAt(0)===me&&(t=t.substr(1)),r!==null&&r.charCodeAt(0)===me&&(r=r.substr(1)),{type:"AnPlusB",loc:this.getLocation(e,this.tokenStart),a:t,b:r}}function xc(e){if(e.a){let t=e.a==="+1"&&"n"||e.a==="1"&&"n"||e.a==="-1"&&"-n"||e.a+"n";if(e.b){let r=e.b[0]==="-"||e.b[0]==="+"?e.b:"+"+e.b;this.tokenize(t+r)}else this.tokenize(t)}else this.tokenize(e.b)}var Zr={};b(Zr,{generate:()=>Sc,name:()=>kc,parse:()=>$r,structure:()=>vc,walkContext:()=>wc});function da(e){return this.Raw(e,this.consumeUntilLeftCurlyBracketOrSemicolon,!0)}function yc(){for(let e=1,t;t=this.lookupType(e);e++){if(t===24)return!0;if(t===23||t===3)return!1}return!1}var kc="Atrule",wc="atrule",vc={name:String,prelude:["AtrulePrelude","Raw",null],block:["Block",null]};function $r(e=!1){let t=this.tokenStart,r,n,o=null,i=null;switch(this.eat(3),r=this.substrToCursor(t+1),n=r.toLowerCase(),this.skipSC(),this.eof===!1&&this.tokenType!==23&&this.tokenType!==17&&(this.parseAtrulePrelude?o=this.parseWithFallback(this.AtrulePrelude.bind(this,r,e),da):o=da.call(this,this.tokenIndex),this.skipSC()),this.tokenType){case 17:this.next();break;case 23:hasOwnProperty.call(this.atrule,n)&&typeof this.atrule[n].block=="function"?i=this.atrule[n].block.call(this,e):i=this.Block(yc.call(this));break}return{type:"Atrule",loc:this.getLocation(t,this.tokenStart),name:r,prelude:o,block:i}}function Sc(e){this.token(3,"@"+e.name),e.prelude!==null&&this.node(e.prelude),e.block?this.node(e.block):this.token(17,";")}var en={};b(en,{generate:()=>Ec,name:()=>Cc,parse:()=>Jr,structure:()=>Tc,walkContext:()=>Ac});var Cc="AtrulePrelude",Ac="atrulePrelude",Tc={children:[[]]};function Jr(e){let t=null;return e!==null&&(e=e.toLowerCase()),this.skipSC(),hasOwnProperty.call(this.atrule,e)&&typeof this.atrule[e].prelude=="function"?t=this.atrule[e].prelude.call(this):t=this.readSequence(this.scope.AtrulePrelude),this.skipSC(),this.eof!==!0&&this.tokenType!==23&&this.tokenType!==17&&this.error("Semicolon or block is expected"),{type:"AtrulePrelude",loc:this.getLocationFromList(t),children:t}}function Ec(e){this.children(e)}var nn={};b(nn,{generate:()=>Mc,name:()=>Nc,parse:()=>rn,structure:()=>zc});var Lc=36,ga=42,Zt=61,Pc=94,tn=124,Ic=126;function Dc(){this.eof&&this.error("Unexpected end of input");let e=this.tokenStart,t=!1;return this.isDelim(ga)?(t=!0,this.next()):this.isDelim(tn)||this.eat(1),this.isDelim(tn)?this.charCodeAt(this.tokenStart+1)!==Zt?(this.next(),this.eat(1)):t&&this.error("Identifier is expected",this.tokenEnd):t&&this.error("Vertical line is expected"),{type:"Identifier",loc:this.getLocation(e,this.tokenStart),name:this.substrToCursor(e)}}function Oc(){let e=this.tokenStart,t=this.charCodeAt(e);return t!==Zt&&t!==Ic&&t!==Pc&&t!==Lc&&t!==ga&&t!==tn&&this.error("Attribute selector (=, ~=, ^=, $=, *=, |=) is expected"),this.next(),t!==Zt&&(this.isDelim(Zt)||this.error("Equal sign is expected"),this.next()),this.substrToCursor(e)}var Nc="AttributeSelector",zc={name:"Identifier",matcher:[String,null],value:["String","Identifier",null],flags:[String,null]};function rn(){let e=this.tokenStart,t,r=null,n=null,o=null;return this.eat(19),this.skipSC(),t=Dc.call(this),this.skipSC(),this.tokenType!==20&&(this.tokenType!==1&&(r=Oc.call(this),this.skipSC(),n=this.tokenType===5?this.String():this.Identifier(),this.skipSC()),this.tokenType===1&&(o=this.consume(1),this.skipSC())),this.eat(20),{type:"AttributeSelector",loc:this.getLocation(e,this.tokenStart),name:t,matcher:r,value:n,flags:o}}function Mc(e){this.token(9,"["),this.node(e.name),e.matcher!==null&&(this.tokenize(e.matcher),this.node(e.value)),e.flags!==null&&this.token(1,e.flags),this.token(9,"]")}var an={};b(an,{generate:()=>Uc,name:()=>Bc,parse:()=>on,structure:()=>qc,walkContext:()=>_c});var Rc=38;function ya(e){return this.Raw(e,null,!0)}function ba(){return this.parseWithFallback(this.Rule,ya)}function xa(e){return this.Raw(e,this.consumeUntilSemicolonIncluded,!0)}function Fc(){if(this.tokenType===17)return xa.call(this,this.tokenIndex);let e=this.parseWithFallback(this.Declaration,xa);return this.tokenType===17&&this.next(),e}var Bc="Block",_c="block",qc={children:[["Atrule","Rule","Declaration"]]};function on(e){let t=e?Fc:ba,r=this.tokenStart,n=this.createList();this.eat(23);e:for(;!this.eof;)switch(this.tokenType){case 24:break e;case 13:case 25:this.next();break;case 3:n.push(this.parseWithFallback(this.Atrule.bind(this,e),ya));break;default:e&&this.isDelim(Rc)?n.push(ba.call(this)):n.push(t.call(this))}return this.eof||this.eat(24),{type:"Block",loc:this.getLocation(r,this.tokenStart),children:n}}function Uc(e){this.token(23,"{"),this.children(e,t=>{t.type==="Declaration"&&this.token(17,";")}),this.token(24,"}")}var ln={};b(ln,{generate:()=>Hc,name:()=>jc,parse:()=>sn,structure:()=>Wc});var jc="Brackets",Wc={children:[[]]};function sn(e,t){let r=this.tokenStart,n=null;return this.eat(19),n=e.call(this,t),this.eof||this.eat(20),{type:"Brackets",loc:this.getLocation(r,this.tokenStart),children:n}}function Hc(e){this.token(9,"["),this.children(e),this.token(9,"]")}var un={};b(un,{generate:()=>Vc,name:()=>Yc,parse:()=>cn,structure:()=>Gc});var Yc="CDC",Gc=[];function cn(){let e=this.tokenStart;return this.eat(15),{type:"CDC",loc:this.getLocation(e,this.tokenStart)}}function Vc(){this.token(15,"-->")}var hn={};b(hn,{generate:()=>Xc,name:()=>Kc,parse:()=>pn,structure:()=>Qc});var Kc="CDO",Qc=[];function pn(){let e=this.tokenStart;return this.eat(14),{type:"CDO",loc:this.getLocation(e,this.tokenStart)}}function Xc(){this.token(14,"<!--")}var fn={};b(fn,{generate:()=>eu,name:()=>Zc,parse:()=>mn,structure:()=>Jc});var $c=46,Zc="ClassSelector",Jc={name:String};function mn(){return this.eatDelim($c),{type:"ClassSelector",loc:this.getLocation(this.tokenStart-1,this.tokenEnd),name:this.consume(1)}}function eu(e){this.token(9,"."),this.token(1,e.name)}var gn={};b(gn,{generate:()=>au,name:()=>ou,parse:()=>dn,structure:()=>iu});var tu=43,ka=47,ru=62,nu=126,ou="Combinator",iu={name:String};function dn(){let e=this.tokenStart,t;switch(this.tokenType){case 13:t=" ";break;case 9:switch(this.charCodeAt(this.tokenStart)){case ru:case tu:case nu:this.next();break;case ka:this.next(),this.eatIdent("deep"),this.eatDelim(ka);break;default:this.error("Combinator is expected")}t=this.substrToCursor(e);break}return{type:"Combinator",loc:this.getLocation(e,this.tokenStart),name:t}}function au(e){this.tokenize(e.name)}var xn={};b(xn,{generate:()=>pu,name:()=>cu,parse:()=>bn,structure:()=>uu});var su=42,lu=47,cu="Comment",uu={value:String};function bn(){let e=this.tokenStart,t=this.tokenEnd;return this.eat(25),t-e+2>=2&&this.charCodeAt(t-2)===su&&this.charCodeAt(t-1)===lu&&(t-=2),{type:"Comment",loc:this.getLocation(e,this.tokenStart),value:this.substring(e+2,t)}}function pu(e){this.token(25,"/*"+e.value+"*/")}var kn={};b(kn,{generate:()=>Su,name:()=>ku,parse:()=>yn,structure:()=>vu,walkContext:()=>wu});var va=33,hu=35,mu=36,fu=38,du=42,gu=43,wa=47;function bu(e){return this.Raw(e,this.consumeUntilExclamationMarkOrSemicolon,!0)}function xu(e){return this.Raw(e,this.consumeUntilExclamationMarkOrSemicolon,!1)}function yu(){let e=this.tokenIndex,t=this.Value();return t.type!=="Raw"&&this.eof===!1&&this.tokenType!==17&&this.isDelim(va)===!1&&this.isBalanceEdge(e)===!1&&this.error(),t}var ku="Declaration",wu="declaration",vu={important:[Boolean,String],property:String,value:["Value","Raw"]};function yn(){let e=this.tokenStart,t=this.tokenIndex,r=Cu.call(this),n=Mt(r),o=n?this.parseCustomProperty:this.parseValue,i=n?xu:bu,s=!1,u;this.skipSC(),this.eat(16);let c=this.tokenIndex;if(n||this.skipSC(),o?u=this.parseWithFallback(yu,i):u=i.call(this,this.tokenIndex),n&&u.type==="Value"&&u.children.isEmpty){for(let a=c-this.tokenIndex;a<=0;a++)if(this.lookupType(a)===13){u.children.appendData({type:"WhiteSpace",loc:null,value:" "});break}}return this.isDelim(va)&&(s=Au.call(this),this.skipSC()),this.eof===!1&&this.tokenType!==17&&this.isBalanceEdge(t)===!1&&this.error(),{type:"Declaration",loc:this.getLocation(e,this.tokenStart),important:s,property:r,value:u}}function Su(e){this.token(1,e.property),this.token(16,":"),this.node(e.value),e.important&&(this.token(9,"!"),this.token(1,e.important===!0?"important":e.important))}function Cu(){let e=this.tokenStart;if(this.tokenType===9)switch(this.charCodeAt(this.tokenStart)){case du:case mu:case gu:case hu:case fu:this.next();break;case wa:this.next(),this.isDelim(wa)&&this.next();break}return this.tokenType===4?this.eat(4):this.eat(1),this.substrToCursor(e)}function Au(){this.eat(9),this.skipSC();let e=this.consume(1);return e==="important"?!0:e}var Sn={};b(Sn,{generate:()=>Pu,name:()=>Eu,parse:()=>vn,structure:()=>Lu});var Tu=38;function wn(e){return this.Raw(e,this.consumeUntilSemicolonIncluded,!0)}var Eu="DeclarationList",Lu={children:[["Declaration","Atrule","Rule"]]};function vn(){let e=this.createList();e:for(;!this.eof;)switch(this.tokenType){case 13:case 25:case 17:this.next();break;case 3:e.push(this.parseWithFallback(this.Atrule.bind(this,!0),wn));break;default:this.isDelim(Tu)?e.push(this.parseWithFallback(this.Rule,wn)):e.push(this.parseWithFallback(this.Declaration,wn))}return{type:"DeclarationList",loc:this.getLocationFromList(e),children:e}}function Pu(e){this.children(e,t=>{t.type==="Declaration"&&this.token(17,";")})}var An={};b(An,{generate:()=>Ou,name:()=>Iu,parse:()=>Cn,structure:()=>Du});var Iu="Dimension",Du={value:String,unit:String};function Cn(){let e=this.tokenStart,t=this.consumeNumber(12);return{type:"Dimension",loc:this.getLocation(e,this.tokenStart),value:t,unit:this.substring(e+t.length,this.tokenStart)}}function Ou(e){this.token(12,e.value+e.unit)}var En={};b(En,{generate:()=>Ru,name:()=>Nu,parse:()=>Tn,structure:()=>Mu,walkContext:()=>zu});var Nu="Function",zu="function",Mu={name:String,children:[[]]};function Tn(e,t){let r=this.tokenStart,n=this.consumeFunctionName(),o=n.toLowerCase(),i;return i=t.hasOwnProperty(o)?t[o].call(this,t):e.call(this,t),this.eof||this.eat(22),{type:"Function",loc:this.getLocation(r,this.tokenStart),name:n,children:i}}function Ru(e){this.token(2,e.name+"("),this.children(e),this.token(22,")")}var Pn={};b(Pn,{generate:()=>qu,name:()=>Bu,parse:()=>Ln,structure:()=>_u,xxx:()=>Fu});var Fu="XXX",Bu="Hash",_u={value:String};function Ln(){let e=this.tokenStart;return this.eat(4),{type:"Hash",loc:this.getLocation(e,this.tokenStart),value:this.substrToCursor(e+1)}}function qu(e){this.token(4,"#"+e.value)}var Dn={};b(Dn,{generate:()=>Wu,name:()=>Uu,parse:()=>In,structure:()=>ju});var Uu="Identifier",ju={name:String};function In(){return{type:"Identifier",loc:this.getLocation(this.tokenStart,this.tokenEnd),name:this.consume(1)}}function Wu(e){this.token(1,e.name)}var Nn={};b(Nn,{generate:()=>Gu,name:()=>Hu,parse:()=>On,structure:()=>Yu});var Hu="IdSelector",Yu={name:String};function On(){let e=this.tokenStart;return this.eat(4),{type:"IdSelector",loc:this.getLocation(e,this.tokenStart),name:this.substrToCursor(e+1)}}function Gu(e){this.token(9,"#"+e.name)}var Mn={};b(Mn,{generate:()=>Qu,name:()=>Vu,parse:()=>zn,structure:()=>Ku});var Vu="MediaFeature",Ku={name:String,value:["Identifier","Number","Dimension","Ratio",null]};function zn(){let e=this.tokenStart,t,r=null;if(this.eat(21),this.skipSC(),t=this.consume(1),this.skipSC(),this.tokenType!==22){switch(this.eat(16),this.skipSC(),this.tokenType){case 10:this.lookupNonWSType(1)===9?r=this.Ratio():r=this.Number();break;case 12:r=this.Dimension();break;case 1:r=this.Identifier();break;default:this.error("Number, dimension, ratio or identifier is expected")}this.skipSC()}return this.eat(22),{type:"MediaFeature",loc:this.getLocation(e,this.tokenStart),name:t,value:r}}function Qu(e){this.token(21,"("),this.token(1,e.name),e.value!==null&&(this.token(16,":"),this.node(e.value)),this.token(22,")")}var Fn={};b(Fn,{generate:()=>Zu,name:()=>Xu,parse:()=>Rn,structure:()=>$u});var Xu="MediaQuery",$u={children:[["Identifier","MediaFeature","WhiteSpace"]]};function Rn(){let e=this.createList(),t=null;this.skipSC();e:for(;!this.eof;){switch(this.tokenType){case 25:case 13:this.next();continue;case 1:t=this.Identifier();break;case 21:t=this.MediaFeature();break;default:break e}e.push(t)}return t===null&&this.error("Identifier or parenthesis is expected"),{type:"MediaQuery",loc:this.getLocationFromList(e),children:e}}function Zu(e){this.children(e)}var _n={};b(_n,{generate:()=>tp,name:()=>Ju,parse:()=>Bn,structure:()=>ep});var Ju="MediaQueryList",ep={children:[["MediaQuery"]]};function Bn(){let e=this.createList();for(this.skipSC();!this.eof&&(e.push(this.MediaQuery()),this.tokenType===18);)this.next();return{type:"MediaQueryList",loc:this.getLocationFromList(e),children:e}}function tp(e){this.children(e,()=>this.token(18,","))}var Un={};b(Un,{generate:()=>ip,name:()=>np,parse:()=>qn,structure:()=>op});var rp=38,np="NestingSelector",op={};function qn(){let e=this.tokenStart;return this.eatDelim(rp),{type:"NestingSelector",loc:this.getLocation(e,this.tokenStart)}}function ip(){this.token(9,"&")}var Wn={};b(Wn,{generate:()=>lp,name:()=>ap,parse:()=>jn,structure:()=>sp});var ap="Nth",sp={nth:["AnPlusB","Identifier"],selector:["SelectorList",null]};function jn(){this.skipSC();let e=this.tokenStart,t=e,r=null,n;return this.lookupValue(0,"odd")||this.lookupValue(0,"even")?n=this.Identifier():n=this.AnPlusB(),t=this.tokenStart,this.skipSC(),this.lookupValue(0,"of")&&(this.next(),r=this.SelectorList(),t=this.tokenStart),{type:"Nth",loc:this.getLocation(e,t),nth:n,selector:r}}function lp(e){this.node(e.nth),e.selector!==null&&(this.token(1,"of"),this.node(e.selector))}var Yn={};b(Yn,{generate:()=>pp,name:()=>cp,parse:()=>Hn,structure:()=>up});var cp="Number",up={value:String};function Hn(){return{type:"Number",loc:this.getLocation(this.tokenStart,this.tokenEnd),value:this.consume(10)}}function pp(e){this.token(10,e.value)}var Vn={};b(Vn,{generate:()=>fp,name:()=>hp,parse:()=>Gn,structure:()=>mp});var hp="Operator",mp={value:String};function Gn(){let e=this.tokenStart;return this.next(),{type:"Operator",loc:this.getLocation(e,this.tokenStart),value:this.substrToCursor(e)}}function fp(e){this.tokenize(e.value)}var Qn={};b(Qn,{generate:()=>bp,name:()=>dp,parse:()=>Kn,structure:()=>gp});var dp="Parentheses",gp={children:[[]]};function Kn(e,t){let r=this.tokenStart,n=null;return this.eat(21),n=e.call(this,t),this.eof||this.eat(22),{type:"Parentheses",loc:this.getLocation(r,this.tokenStart),children:n}}function bp(e){this.token(21,"("),this.children(e),this.token(22,")")}var $n={};b($n,{generate:()=>kp,name:()=>xp,parse:()=>Xn,structure:()=>yp});var xp="Percentage",yp={value:String};function Xn(){return{type:"Percentage",loc:this.getLocation(this.tokenStart,this.tokenEnd),value:this.consumeNumber(11)}}function kp(e){this.token(11,e.value+"%")}var Jn={};b(Jn,{generate:()=>Cp,name:()=>wp,parse:()=>Zn,structure:()=>Sp,walkContext:()=>vp});var wp="PseudoClassSelector",vp="function",Sp={name:String,children:[["Raw"],null]};function Zn(){let e=this.tokenStart,t=null,r,n;return this.eat(16),this.tokenType===2?(r=this.consumeFunctionName(),n=r.toLowerCase(),hasOwnProperty.call(this.pseudo,n)?(this.skipSC(),t=this.pseudo[n].call(this),this.skipSC()):(t=this.createList(),t.push(this.Raw(this.tokenIndex,null,!1))),this.eat(22)):r=this.consume(1),{type:"PseudoClassSelector",loc:this.getLocation(e,this.tokenStart),name:r,children:t}}function Cp(e){this.token(16,":"),e.children===null?this.token(1,e.name):(this.token(2,e.name+"("),this.children(e),this.token(22,")"))}var to={};b(to,{generate:()=>Lp,name:()=>Ap,parse:()=>eo,structure:()=>Ep,walkContext:()=>Tp});var Ap="PseudoElementSelector",Tp="function",Ep={name:String,children:[["Raw"],null]};function eo(){let e=this.tokenStart,t=null,r,n;return this.eat(16),this.eat(16),this.tokenType===2?(r=this.consumeFunctionName(),n=r.toLowerCase(),hasOwnProperty.call(this.pseudo,n)?(this.skipSC(),t=this.pseudo[n].call(this),this.skipSC()):(t=this.createList(),t.push(this.Raw(this.tokenIndex,null,!1))),this.eat(22)):r=this.consume(1),{type:"PseudoElementSelector",loc:this.getLocation(e,this.tokenStart),name:r,children:t}}function Lp(e){this.token(16,":"),this.token(16,":"),e.children===null?this.token(1,e.name):(this.token(2,e.name+"("),this.children(e),this.token(22,")"))}var no={};b(no,{generate:()=>Np,name:()=>Dp,parse:()=>ro,structure:()=>Op});var Pp=47,Ip=46;function Sa(){this.skipSC();let e=this.consume(10);for(let t=0;t<e.length;t++){let r=e.charCodeAt(t);!B(r)&&r!==Ip&&this.error("Unsigned number is expected",this.tokenStart-e.length+t)}return Number(e)===0&&this.error("Zero number is not allowed",this.tokenStart-e.length),e}var Dp="Ratio",Op={left:String,right:String};function ro(){let e=this.tokenStart,t=Sa.call(this),r;return this.skipSC(),this.eatDelim(Pp),r=Sa.call(this),{type:"Ratio",loc:this.getLocation(e,this.tokenStart),left:t,right:r}}function Np(e){this.token(10,e.left),this.token(9,"/"),this.token(10,e.right)}var io={};b(io,{generate:()=>Fp,name:()=>Mp,parse:()=>oo,structure:()=>Rp});function zp(){return this.tokenIndex>0&&this.lookupType(-1)===13?this.tokenIndex>1?this.getTokenStart(this.tokenIndex-1):this.firstCharOffset:this.tokenStart}var Mp="Raw",Rp={value:String};function oo(e,t,r){let n=this.getTokenStart(e),o;return this.skipUntilBalanced(e,t||this.consumeUntilBalanceEnd),r&&this.tokenStart>n?o=zp.call(this):o=this.tokenStart,{type:"Raw",loc:this.getLocation(n,o),value:this.substring(n,o)}}function Fp(e){this.tokenize(e.value)}var so={};b(so,{generate:()=>jp,name:()=>_p,parse:()=>ao,structure:()=>Up,walkContext:()=>qp});function Ca(e){return this.Raw(e,this.consumeUntilLeftCurlyBracket,!0)}function Bp(){let e=this.SelectorList();return e.type!=="Raw"&&this.eof===!1&&this.tokenType!==23&&this.error(),e}var _p="Rule",qp="rule",Up={prelude:["SelectorList","Raw"],block:["Block"]};function ao(){let e=this.tokenIndex,t=this.tokenStart,r,n;return this.parseRulePrelude?r=this.parseWithFallback(Bp,Ca):r=Ca.call(this,e),n=this.Block(!0),{type:"Rule",loc:this.getLocation(t,this.tokenStart),prelude:r,block:n}}function jp(e){this.node(e.prelude),this.node(e.block)}var co={};b(co,{generate:()=>Yp,name:()=>Wp,parse:()=>lo,structure:()=>Hp});var Wp="Selector",Hp={children:[["TypeSelector","IdSelector","ClassSelector","AttributeSelector","PseudoClassSelector","PseudoElementSelector","Combinator","WhiteSpace"]]};function lo(){let e=this.readSequence(this.scope.Selector);return this.getFirstListNode(e)===null&&this.error("Selector is expected"),{type:"Selector",loc:this.getLocationFromList(e),children:e}}function Yp(e){this.children(e)}var po={};b(po,{generate:()=>Qp,name:()=>Gp,parse:()=>uo,structure:()=>Kp,walkContext:()=>Vp});var Gp="SelectorList",Vp="selector",Kp={children:[["Selector","Raw"]]};function uo(){let e=this.createList();for(;!this.eof;){if(e.push(this.Selector()),this.tokenType===18){this.next();continue}break}return{type:"SelectorList",loc:this.getLocationFromList(e),children:e}}function Qp(e){this.children(e,()=>this.token(18,","))}var bo={};b(bo,{generate:()=>Zp,name:()=>Xp,parse:()=>go,structure:()=>$p});var fo={};b(fo,{decode:()=>ft,encode:()=>mo});var ho=92,Aa=34,Ta=39;function ft(e){let t=e.length,r=e.charCodeAt(0),n=r===Aa||r===Ta?1:0,o=n===1&&t>1&&e.charCodeAt(t-1)===r?t-2:t-1,i="";for(let s=n;s<=o;s++){let u=e.charCodeAt(s);if(u===ho){if(s===o){s!==t-1&&(i=e.substr(s+1));break}if(u=e.charCodeAt(++s),$(ho,u)){let c=s-1,a=se(e,c);s=a-1,i+=Re(e.substring(c+1,a))}else u===13&&e.charCodeAt(s+1)===10&&s++}else i+=e[s]}return i}function mo(e,t){let r=t?"'":'"',n=t?Ta:Aa,o="",i=!1;for(let s=0;s<e.length;s++){let u=e.charCodeAt(s);if(u===0){o+="\uFFFD";continue}if(u<=31||u===127){o+="\\"+u.toString(16),i=!0;continue}u===n||u===ho?(o+="\\"+e.charAt(s),i=!1):(i&&(ee(u)||pe(u))&&(o+=" "),o+=e.charAt(s),i=!1)}return r+o+r}var Xp="String",$p={value:String};function go(){return{type:"String",loc:this.getLocation(this.tokenStart,this.tokenEnd),value:ft(this.consume(5))}}function Zp(e){this.token(5,mo(e.value))}var yo={};b(yo,{generate:()=>nh,name:()=>eh,parse:()=>xo,structure:()=>rh,walkContext:()=>th});var Jp=33;function Ea(e){return this.Raw(e,null,!1)}var eh="StyleSheet",th="stylesheet",rh={children:[["Comment","CDO","CDC","Atrule","Rule","Raw"]]};function xo(){let e=this.tokenStart,t=this.createList(),r;e:for(;!this.eof;){switch(this.tokenType){case 13:this.next();continue;case 25:if(this.charCodeAt(this.tokenStart+2)!==Jp){this.next();continue}r=this.Comment();break;case 14:r=this.CDO();break;case 15:r=this.CDC();break;case 3:r=this.parseWithFallback(this.Atrule,Ea);break;default:r=this.parseWithFallback(this.Rule,Ea)}t.push(r)}return{type:"StyleSheet",loc:this.getLocation(e,this.tokenStart),children:t}}function nh(e){this.children(e)}var vo={};b(vo,{generate:()=>sh,name:()=>ih,parse:()=>wo,structure:()=>ah});var oh=42,La=124;function ko(){this.tokenType!==1&&this.isDelim(oh)===!1&&this.error("Identifier or asterisk is expected"),this.next()}var ih="TypeSelector",ah={name:String};function wo(){let e=this.tokenStart;return this.isDelim(La)?(this.next(),ko.call(this)):(ko.call(this),this.isDelim(La)&&(this.next(),ko.call(this))),{type:"TypeSelector",loc:this.getLocation(e,this.tokenStart),name:this.substrToCursor(e)}}function sh(e){this.tokenize(e.name)}var Ao={};b(Ao,{generate:()=>hh,name:()=>uh,parse:()=>Co,structure:()=>ph});var Pa=43,Ia=45,So=63;function dt(e,t){let r=0;for(let n=this.tokenStart+e;n<this.tokenEnd;n++){let o=this.charCodeAt(n);if(o===Ia&&t&&r!==0)return dt.call(this,e+r+1,!1),-1;ee(o)||this.error(t&&r!==0?"Hyphen minus"+(r<6?" or hex digit":"")+" is expected":r<6?"Hex digit is expected":"Unexpected input",n),++r>6&&this.error("Too many hex digits",n)}return this.next(),r}function Jt(e){let t=0;for(;this.isDelim(So);)++t>e&&this.error("Too many question marks"),this.next()}function lh(e){this.charCodeAt(this.tokenStart)!==e&&this.error((e===Pa?"Plus sign":"Hyphen minus")+" is expected")}function ch(){let e=0;switch(this.tokenType){case 10:if(e=dt.call(this,1,!0),this.isDelim(So)){Jt.call(this,6-e);break}if(this.tokenType===12||this.tokenType===10){lh.call(this,Ia),dt.call(this,1,!1);break}break;case 12:e=dt.call(this,1,!0),e>0&&Jt.call(this,6-e);break;default:if(this.eatDelim(Pa),this.tokenType===1){e=dt.call(this,0,!0),e>0&&Jt.call(this,6-e);break}if(this.isDelim(So)){this.next(),Jt.call(this,5);break}this.error("Hex digit or question mark is expected")}}var uh="UnicodeRange",ph={value:String};function Co(){let e=this.tokenStart;return this.eatIdent("u"),ch.call(this),{type:"UnicodeRange",loc:this.getLocation(e,this.tokenStart),value:this.substrToCursor(e)}}function hh(e){this.tokenize(e.value)}var Do={};b(Do,{generate:()=>yh,name:()=>bh,parse:()=>Io,structure:()=>xh});var Po={};b(Po,{decode:()=>Eo,encode:()=>Lo});var mh=32,To=92,fh=34,dh=39,gh=40,Da=41;function Eo(e){let t=e.length,r=4,n=e.charCodeAt(t-1)===Da?t-2:t-1,o="";for(;r<n&&pe(e.charCodeAt(r));)r++;for(;r<n&&pe(e.charCodeAt(n));)n--;for(let i=r;i<=n;i++){let s=e.charCodeAt(i);if(s===To){if(i===n){i!==t-1&&(o=e.substr(i+1));break}if(s=e.charCodeAt(++i),$(To,s)){let u=i-1,c=se(e,u);i=c-1,o+=Re(e.substring(u+1,c))}else s===13&&e.charCodeAt(i+1)===10&&i++}else o+=e[i]}return o}function Lo(e){let t="",r=!1;for(let n=0;n<e.length;n++){let o=e.charCodeAt(n);if(o===0){t+="\uFFFD";continue}if(o<=31||o===127){t+="\\"+o.toString(16),r=!0;continue}o===mh||o===To||o===fh||o===dh||o===gh||o===Da?(t+="\\"+e.charAt(n),r=!1):(r&&ee(o)&&(t+=" "),t+=e.charAt(n),r=!1)}return"url("+t+")"}var bh="Url",xh={value:String};function Io(){let e=this.tokenStart,t;switch(this.tokenType){case 7:t=Eo(this.consume(7));break;case 2:this.cmpStr(this.tokenStart,this.tokenEnd,"url(")||this.error("Function name must be `url`"),this.eat(2),this.skipSC(),t=ft(this.consume(5)),this.skipSC(),this.eof||this.eat(22);break;default:this.error("Url or Function is expected")}return{type:"Url",loc:this.getLocation(e,this.tokenStart),value:t}}function yh(e){this.token(7,Lo(e.value))}var No={};b(No,{generate:()=>vh,name:()=>kh,parse:()=>Oo,structure:()=>wh});var kh="Value",wh={children:[[]]};function Oo(){let e=this.tokenStart,t=this.readSequence(this.scope.Value);return{type:"Value",loc:this.getLocation(e,this.tokenStart),children:t}}function vh(e){this.children(e)}var Mo={};b(Mo,{generate:()=>Th,name:()=>Ch,parse:()=>zo,structure:()=>Ah});var Sh=Object.freeze({type:"WhiteSpace",loc:null,value:" "}),Ch="WhiteSpace",Ah={value:String};function zo(){return this.eat(13),Sh}function Th(e){this.token(13,e.value)}var Oa={generic:!0,...fa,node:gt};var Ro={};b(Ro,{AtrulePrelude:()=>za,Selector:()=>Ra,Value:()=>qa});var Eh=35,Lh=42,Na=43,Ph=45,Ih=47,Dh=117;function bt(e){switch(this.tokenType){case 4:return this.Hash();case 18:return this.Operator();case 21:return this.Parentheses(this.readSequence,e.recognizer);case 19:return this.Brackets(this.readSequence,e.recognizer);case 5:return this.String();case 12:return this.Dimension();case 11:return this.Percentage();case 10:return this.Number();case 2:return this.cmpStr(this.tokenStart,this.tokenEnd,"url(")?this.Url():this.Function(this.readSequence,e.recognizer);case 7:return this.Url();case 1:return this.cmpChar(this.tokenStart,Dh)&&this.cmpChar(this.tokenStart+1,Na)?this.UnicodeRange():this.Identifier();case 9:{let t=this.charCodeAt(this.tokenStart);if(t===Ih||t===Lh||t===Na||t===Ph)return this.Operator();t===Eh&&this.error("Hex or identifier is expected",this.tokenStart+1);break}}}var za={getNode:bt};var Oh=35,Nh=38,zh=42,Mh=43,Rh=47,Ma=46,Fh=62,Bh=124,_h=126;function qh(e,t){t.last!==null&&t.last.type!=="Combinator"&&e!==null&&e.type!=="Combinator"&&t.push({type:"Combinator",loc:null,name:" "})}function Uh(){switch(this.tokenType){case 19:return this.AttributeSelector();case 4:return this.IdSelector();case 16:return this.lookupType(1)===16?this.PseudoElementSelector():this.PseudoClassSelector();case 1:return this.TypeSelector();case 10:case 11:return this.Percentage();case 12:this.charCodeAt(this.tokenStart)===Ma&&this.error("Identifier is expected",this.tokenStart+1);break;case 9:{switch(this.charCodeAt(this.tokenStart)){case Mh:case Fh:case _h:case Rh:return this.Combinator();case Ma:return this.ClassSelector();case zh:case Bh:return this.TypeSelector();case Oh:return this.IdSelector();case Nh:return this.NestingSelector()}break}}}var Ra={onWhiteSpace:qh,getNode:Uh};function Fa(){return this.createSingleNodeList(this.Raw(this.tokenIndex,null,!1))}function Ba(){let e=this.createList();if(this.skipSC(),e.push(this.Identifier()),this.skipSC(),this.tokenType===18){e.push(this.Operator());let t=this.tokenIndex,r=this.parseCustomProperty?this.Value(null):this.Raw(this.tokenIndex,this.consumeUntilExclamationMarkOrSemicolon,!1);if(r.type==="Value"&&r.children.isEmpty){for(let n=t-this.tokenIndex;n<=0;n++)if(this.lookupType(n)===13){r.children.appendData({type:"WhiteSpace",loc:null,value:" "});break}}e.push(r)}return e}function _a(e){return e!==null&&e.type==="Operator"&&(e.value[e.value.length-1]==="-"||e.value[e.value.length-1]==="+")}var qa={getNode:bt,onWhiteSpace(e,t){_a(e)&&(e.value=" "+e.value),_a(t.last)&&(t.last.value+=" ")},expression:Fa,var:Ba};var Ua={parse:{prelude:null,block(){return this.Block(!0)}}};var ja={parse:{prelude(){let e=this.createList();switch(this.skipSC(),this.tokenType){case 5:e.push(this.String());break;case 7:case 2:e.push(this.Url());break;default:this.error("String or url() is expected")}return(this.lookupNonWSType(0)===1||this.lookupNonWSType(0)===21)&&e.push(this.MediaQueryList()),e},block:null}};var Wa={parse:{prelude(){return this.createSingleNodeList(this.MediaQueryList())},block(e=!1){return this.Block(e)}}};var Ha={parse:{prelude(){return this.createSingleNodeList(this.SelectorList())},block(){return this.Block(!0)}}};var Ya={parse:{prelude(){return this.createSingleNodeList(this.SelectorList())},block(){return this.Block(!0)}}};function jh(){return this.createSingleNodeList(this.Raw(this.tokenIndex,null,!1))}function Wh(){return this.skipSC(),this.tokenType===1&&this.lookupNonWSType(1)===16?this.createSingleNodeList(this.Declaration()):Ga.call(this)}function Ga(){let e=this.createList(),t;this.skipSC();e:for(;!this.eof;){switch(this.tokenType){case 25:case 13:this.next();continue;case 2:t=this.Function(jh,this.scope.AtrulePrelude);break;case 1:t=this.Identifier();break;case 21:t=this.Parentheses(Wh,this.scope.AtrulePrelude);break;default:break e}e.push(t)}return e}var Va={parse:{prelude(){let e=Ga.call(this);return this.getFirstListNode(e)===null&&this.error("Condition is expected"),e},block(e=!1){return this.Block(e)}}};var Ka={"font-face":Ua,import:ja,media:Wa,nest:Ha,page:Ya,supports:Va};var De={parse(){return this.createSingleNodeList(this.SelectorList())}},Fo={parse(){return this.createSingleNodeList(this.Selector())}},Qa={parse(){return this.createSingleNodeList(this.Identifier())}},er={parse(){return this.createSingleNodeList(this.Nth())}},Xa={dir:Qa,has:De,lang:Qa,matches:De,is:De,"-moz-any":De,"-webkit-any":De,where:De,not:De,"nth-child":er,"nth-last-child":er,"nth-last-of-type":er,"nth-of-type":er,slotted:Fo,host:Fo,"host-context":Fo};var Bo={};b(Bo,{AnPlusB:()=>Qr,Atrule:()=>$r,AtrulePrelude:()=>Jr,AttributeSelector:()=>rn,Block:()=>on,Brackets:()=>sn,CDC:()=>cn,CDO:()=>pn,ClassSelector:()=>mn,Combinator:()=>dn,Comment:()=>bn,Declaration:()=>yn,DeclarationList:()=>vn,Dimension:()=>Cn,Function:()=>Tn,Hash:()=>Ln,IdSelector:()=>On,Identifier:()=>In,MediaFeature:()=>zn,MediaQuery:()=>Rn,MediaQueryList:()=>Bn,NestingSelector:()=>qn,Nth:()=>jn,Number:()=>Hn,Operator:()=>Gn,Parentheses:()=>Kn,Percentage:()=>Xn,PseudoClassSelector:()=>Zn,PseudoElementSelector:()=>eo,Ratio:()=>ro,Raw:()=>oo,Rule:()=>ao,Selector:()=>lo,SelectorList:()=>uo,String:()=>go,StyleSheet:()=>xo,TypeSelector:()=>wo,UnicodeRange:()=>Co,Url:()=>Io,Value:()=>Oo,WhiteSpace:()=>zo});var $a={parseContext:{default:"StyleSheet",stylesheet:"StyleSheet",atrule:"Atrule",atrulePrelude(e){return this.AtrulePrelude(e.atrule?String(e.atrule):null)},mediaQueryList:"MediaQueryList",mediaQuery:"MediaQuery",rule:"Rule",selectorList:"SelectorList",selector:"Selector",block(){return this.Block(!0)},declarationList:"DeclarationList",declaration:"Declaration",value:"Value"},scope:Ro,atrule:Ka,pseudo:Xa,node:Bo};var Za={node:gt};var Ja=Vr({...Oa,...$a,...Za});var lb="2.3.0";function _o(e){let t={};for(let r in e){let n=e[r];n&&(Array.isArray(n)||n instanceof D?n=n.map(_o):n.constructor===Object&&(n=_o(n))),t[r]=n}return t}var ts={};b(ts,{decode:()=>Hh,encode:()=>Yh});var es=92;function Hh(e){let t=e.length-1,r="";for(let n=0;n<e.length;n++){let o=e.charCodeAt(n);if(o===es){if(n===t)break;if(o=e.charCodeAt(++n),$(es,o)){let i=n-1,s=se(e,i);n=s-1,r+=Re(e.substring(i+1,s))}else o===13&&e.charCodeAt(n+1)===10&&n++}else r+=e[n]}return r}function Yh(e){let t="";if(e.length===1&&e.charCodeAt(0)===45)return"\\-";for(let r=0;r<e.length;r++){let n=e.charCodeAt(r);if(n===0){t+="\uFFFD";continue}if(n<=31||n===127||n>=48&&n<=57&&(r===0||r===1&&e.charCodeAt(0)===45)){t+="\\"+n.toString(16)+" ";continue}Ne(n)?t+=e.charAt(r):t+="\\"+e.charAt(r)}return t}var{tokenize:fb,parse:db,generate:gb,lexer:bb,createLexer:xb,walk:yb,find:kb,findLast:wb,findAll:vb,toPlainObject:Sb,fromPlainObject:Cb,fork:Ab}=Ja;export{Ke as Lexer,D as List,rt as TokenStream,_o as clone,xb as createLexer,Vr as createSyntax,$i as definitionSyntax,kb as find,vb as findAll,wb as findLast,Ab as fork,Cb as fromPlainObject,gb as generate,ts as ident,Mt as isCustomProperty,zt as keyword,bb as lexer,db as parse,kr as property,fo as string,Sb as toPlainObject,Fe as tokenNames,$e as tokenTypes,fb as tokenize,Po as url,Ym as vendorPrefix,lb as version,yb as walk};
diff --git a/node_modules/css-tree/dist/csstree.js b/node_modules/css-tree/dist/csstree.js
deleted file mode 100644
index ba24d21c..00000000
--- a/node_modules/css-tree/dist/csstree.js
+++ /dev/null
@@ -1,11 +0,0 @@
-var csstree=(()=>{var ns=Object.create;var kt=Object.defineProperty;var os=Object.getOwnPropertyDescriptor;var is=Object.getOwnPropertyNames;var as=Object.getPrototypeOf,ss=Object.prototype.hasOwnProperty;var ze=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),b=(e,t)=>{for(var r in t)kt(e,r,{get:t[r],enumerable:!0})},jo=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of is(t))!ss.call(e,o)&&o!==r&&kt(e,o,{get:()=>t[o],enumerable:!(n=os(t,o))||n.enumerable});return e};var ls=(e,t,r)=>(r=e!=null?ns(as(e)):{},jo(t||!e||!e.__esModule?kt(r,"default",{value:e,enumerable:!0}):r,e)),cs=e=>jo(kt({},"__esModule",{value:!0}),e);var ri=ze(dr=>{var ti="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("");dr.encode=function(e){if(0<=e&&e<ti.length)return ti[e];throw new TypeError("Must be between 0 and 63: "+e)};dr.decode=function(e){var t=65,r=90,n=97,o=122,i=48,s=57,u=43,c=47,a=26,l=52;return t<=e&&e<=r?e-t:n<=e&&e<=o?e-n+a:i<=e&&e<=s?e-i+l:e==u?62:e==c?63:-1}});var si=ze(br=>{var ni=ri(),gr=5,oi=1<<gr,ii=oi-1,ai=oi;function ws(e){return e<0?(-e<<1)+1:(e<<1)+0}function vs(e){var t=(e&1)===1,r=e>>1;return t?-r:r}br.encode=function(t){var r="",n,o=ws(t);do n=o&ii,o>>>=gr,o>0&&(n|=ai),r+=ni.encode(n);while(o>0);return r};br.decode=function(t,r,n){var o=t.length,i=0,s=0,u,c;do{if(r>=o)throw new Error("Expected more digits in base 64 VLQ value.");if(c=ni.decode(t.charCodeAt(r++)),c===-1)throw new Error("Invalid base64 digit: "+t.charAt(r-1));u=!!(c&ai),c&=ii,i=i+(c<<s),s+=gr}while(u);n.value=vs(i),n.rest=r}});var It=ze(K=>{function Ss(e,t,r){if(t in e)return e[t];if(arguments.length===3)return r;throw new Error('"'+t+'" is a required argument.')}K.getArg=Ss;var li=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.-]*)(?::(\d+))?(.*)$/,Cs=/^data:.+\,.+$/;function nt(e){var t=e.match(li);return t?{scheme:t[1],auth:t[2],host:t[3],port:t[4],path:t[5]}:null}K.urlParse=nt;function We(e){var t="";return e.scheme&&(t+=e.scheme+":"),t+="//",e.auth&&(t+=e.auth+"@"),e.host&&(t+=e.host),e.port&&(t+=":"+e.port),e.path&&(t+=e.path),t}K.urlGenerate=We;var As=32;function Ts(e){var t=[];return function(r){for(var n=0;n<t.length;n++)if(t[n].input===r){var o=t[0];return t[0]=t[n],t[n]=o,t[0].result}var i=e(r);return t.unshift({input:r,result:i}),t.length>As&&t.pop(),i}}var xr=Ts(function(t){var r=t,n=nt(t);if(n){if(!n.path)return t;r=n.path}for(var o=K.isAbsolute(r),i=[],s=0,u=0;;)if(s=u,u=r.indexOf("/",s),u===-1){i.push(r.slice(s));break}else for(i.push(r.slice(s,u));u<r.length&&r[u]==="/";)u++;for(var c,a=0,u=i.length-1;u>=0;u--)c=i[u],c==="."?i.splice(u,1):c===".."?a++:a>0&&(c===""?(i.splice(u+1,a),a=0):(i.splice(u,2),a--));return r=i.join("/"),r===""&&(r=o?"/":"."),n?(n.path=r,We(n)):r});K.normalize=xr;function ci(e,t){e===""&&(e="."),t===""&&(t=".");var r=nt(t),n=nt(e);if(n&&(e=n.path||"/"),r&&!r.scheme)return n&&(r.scheme=n.scheme),We(r);if(r||t.match(Cs))return t;if(n&&!n.host&&!n.path)return n.host=t,We(n);var o=t.charAt(0)==="/"?t:xr(e.replace(/\/+$/,"")+"/"+t);return n?(n.path=o,We(n)):o}K.join=ci;K.isAbsolute=function(e){return e.charAt(0)==="/"||li.test(e)};function Es(e,t){e===""&&(e="."),e=e.replace(/\/$/,"");for(var r=0;t.indexOf(e+"/")!==0;){var n=e.lastIndexOf("/");if(n<0||(e=e.slice(0,n),e.match(/^([^\/]+:\/)?\/*$/)))return t;++r}return Array(r+1).join("../")+t.substr(e.length+1)}K.relative=Es;var ui=function(){var e=Object.create(null);return!("__proto__"in e)}();function pi(e){return e}function Ls(e){return hi(e)?"$"+e:e}K.toSetString=ui?pi:Ls;function Ps(e){return hi(e)?e.slice(1):e}K.fromSetString=ui?pi:Ps;function hi(e){if(!e)return!1;var t=e.length;if(t<9||e.charCodeAt(t-1)!==95||e.charCodeAt(t-2)!==95||e.charCodeAt(t-3)!==111||e.charCodeAt(t-4)!==116||e.charCodeAt(t-5)!==111||e.charCodeAt(t-6)!==114||e.charCodeAt(t-7)!==112||e.charCodeAt(t-8)!==95||e.charCodeAt(t-9)!==95)return!1;for(var r=t-10;r>=0;r--)if(e.charCodeAt(r)!==36)return!1;return!0}function Is(e,t,r){var n=be(e.source,t.source);return n!==0||(n=e.originalLine-t.originalLine,n!==0)||(n=e.originalColumn-t.originalColumn,n!==0||r)||(n=e.generatedColumn-t.generatedColumn,n!==0)||(n=e.generatedLine-t.generatedLine,n!==0)?n:be(e.name,t.name)}K.compareByOriginalPositions=Is;function Ds(e,t,r){var n;return n=e.originalLine-t.originalLine,n!==0||(n=e.originalColumn-t.originalColumn,n!==0||r)||(n=e.generatedColumn-t.generatedColumn,n!==0)||(n=e.generatedLine-t.generatedLine,n!==0)?n:be(e.name,t.name)}K.compareByOriginalPositionsNoSource=Ds;function Os(e,t,r){var n=e.generatedLine-t.generatedLine;return n!==0||(n=e.generatedColumn-t.generatedColumn,n!==0||r)||(n=be(e.source,t.source),n!==0)||(n=e.originalLine-t.originalLine,n!==0)||(n=e.originalColumn-t.originalColumn,n!==0)?n:be(e.name,t.name)}K.compareByGeneratedPositionsDeflated=Os;function Ns(e,t,r){var n=e.generatedColumn-t.generatedColumn;return n!==0||r||(n=be(e.source,t.source),n!==0)||(n=e.originalLine-t.originalLine,n!==0)||(n=e.originalColumn-t.originalColumn,n!==0)?n:be(e.name,t.name)}K.compareByGeneratedPositionsDeflatedNoLine=Ns;function be(e,t){return e===t?0:e===null?1:t===null?-1:e>t?1:-1}function zs(e,t){var r=e.generatedLine-t.generatedLine;return r!==0||(r=e.generatedColumn-t.generatedColumn,r!==0)||(r=be(e.source,t.source),r!==0)||(r=e.originalLine-t.originalLine,r!==0)||(r=e.originalColumn-t.originalColumn,r!==0)?r:be(e.name,t.name)}K.compareByGeneratedPositionsInflated=zs;function Ms(e){return JSON.parse(e.replace(/^\)]}'[^\n]*\n/,""))}K.parseSourceMapInput=Ms;function Rs(e,t,r){if(t=t||"",e&&(e[e.length-1]!=="/"&&t[0]!=="/"&&(e+="/"),t=e+t),r){var n=nt(r);if(!n)throw new Error("sourceMapURL could not be parsed");if(n.path){var o=n.path.lastIndexOf("/");o>=0&&(n.path=n.path.substring(0,o+1))}t=ci(We(n),t)}return xr(t)}K.computeSourceURL=Rs});var fi=ze(mi=>{var yr=It(),kr=Object.prototype.hasOwnProperty,Pe=typeof Map<"u";function xe(){this._array=[],this._set=Pe?new Map:Object.create(null)}xe.fromArray=function(t,r){for(var n=new xe,o=0,i=t.length;o<i;o++)n.add(t[o],r);return n};xe.prototype.size=function(){return Pe?this._set.size:Object.getOwnPropertyNames(this._set).length};xe.prototype.add=function(t,r){var n=Pe?t:yr.toSetString(t),o=Pe?this.has(t):kr.call(this._set,n),i=this._array.length;(!o||r)&&this._array.push(t),o||(Pe?this._set.set(t,i):this._set[n]=i)};xe.prototype.has=function(t){if(Pe)return this._set.has(t);var r=yr.toSetString(t);return kr.call(this._set,r)};xe.prototype.indexOf=function(t){if(Pe){var r=this._set.get(t);if(r>=0)return r}else{var n=yr.toSetString(t);if(kr.call(this._set,n))return this._set[n]}throw new Error('"'+t+'" is not in the set.')};xe.prototype.at=function(t){if(t>=0&&t<this._array.length)return this._array[t];throw new Error("No element indexed by "+t)};xe.prototype.toArray=function(){return this._array.slice()};mi.ArraySet=xe});var bi=ze(gi=>{var di=It();function Fs(e,t){var r=e.generatedLine,n=t.generatedLine,o=e.generatedColumn,i=t.generatedColumn;return n>r||n==r&&i>=o||di.compareByGeneratedPositionsInflated(e,t)<=0}function Dt(){this._array=[],this._sorted=!0,this._last={generatedLine:-1,generatedColumn:0}}Dt.prototype.unsortedForEach=function(t,r){this._array.forEach(t,r)};Dt.prototype.add=function(t){Fs(this._last,t)?(this._last=t,this._array.push(t)):(this._sorted=!1,this._array.push(t))};Dt.prototype.toArray=function(){return this._sorted||(this._array.sort(di.compareByGeneratedPositionsInflated),this._sorted=!0),this._array};gi.MappingList=Dt});var yi=ze(xi=>{var ot=si(),j=It(),Ot=fi().ArraySet,Bs=bi().MappingList;function oe(e){e||(e={}),this._file=j.getArg(e,"file",null),this._sourceRoot=j.getArg(e,"sourceRoot",null),this._skipValidation=j.getArg(e,"skipValidation",!1),this._sources=new Ot,this._names=new Ot,this._mappings=new Bs,this._sourcesContents=null}oe.prototype._version=3;oe.fromSourceMap=function(t){var r=t.sourceRoot,n=new oe({file:t.file,sourceRoot:r});return t.eachMapping(function(o){var i={generated:{line:o.generatedLine,column:o.generatedColumn}};o.source!=null&&(i.source=o.source,r!=null&&(i.source=j.relative(r,i.source)),i.original={line:o.originalLine,column:o.originalColumn},o.name!=null&&(i.name=o.name)),n.addMapping(i)}),t.sources.forEach(function(o){var i=o;r!==null&&(i=j.relative(r,o)),n._sources.has(i)||n._sources.add(i);var s=t.sourceContentFor(o);s!=null&&n.setSourceContent(o,s)}),n};oe.prototype.addMapping=function(t){var r=j.getArg(t,"generated"),n=j.getArg(t,"original",null),o=j.getArg(t,"source",null),i=j.getArg(t,"name",null);this._skipValidation||this._validateMapping(r,n,o,i),o!=null&&(o=String(o),this._sources.has(o)||this._sources.add(o)),i!=null&&(i=String(i),this._names.has(i)||this._names.add(i)),this._mappings.add({generatedLine:r.line,generatedColumn:r.column,originalLine:n!=null&&n.line,originalColumn:n!=null&&n.column,source:o,name:i})};oe.prototype.setSourceContent=function(t,r){var n=t;this._sourceRoot!=null&&(n=j.relative(this._sourceRoot,n)),r!=null?(this._sourcesContents||(this._sourcesContents=Object.create(null)),this._sourcesContents[j.toSetString(n)]=r):this._sourcesContents&&(delete this._sourcesContents[j.toSetString(n)],Object.keys(this._sourcesContents).length===0&&(this._sourcesContents=null))};oe.prototype.applySourceMap=function(t,r,n){var o=r;if(r==null){if(t.file==null)throw new Error(`SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, or the source map's "file" property. Both were omitted.`);o=t.file}var i=this._sourceRoot;i!=null&&(o=j.relative(i,o));var s=new Ot,u=new Ot;this._mappings.unsortedForEach(function(c){if(c.source===o&&c.originalLine!=null){var a=t.originalPositionFor({line:c.originalLine,column:c.originalColumn});a.source!=null&&(c.source=a.source,n!=null&&(c.source=j.join(n,c.source)),i!=null&&(c.source=j.relative(i,c.source)),c.originalLine=a.line,c.originalColumn=a.column,a.name!=null&&(c.name=a.name))}var l=c.source;l!=null&&!s.has(l)&&s.add(l);var p=c.name;p!=null&&!u.has(p)&&u.add(p)},this),this._sources=s,this._names=u,t.sources.forEach(function(c){var a=t.sourceContentFor(c);a!=null&&(n!=null&&(c=j.join(n,c)),i!=null&&(c=j.relative(i,c)),this.setSourceContent(c,a))},this)};oe.prototype._validateMapping=function(t,r,n,o){if(r&&typeof r.line!="number"&&typeof r.column!="number")throw new Error("original.line and original.column are not numbers -- you probably meant to omit the original mapping entirely and only map the generated position. If so, pass null for the original mapping instead of an object with empty or null values.");if(!(t&&"line"in t&&"column"in t&&t.line>0&&t.column>=0&&!r&&!n&&!o)){if(t&&"line"in t&&"column"in t&&r&&"line"in r&&"column"in r&&t.line>0&&t.column>=0&&r.line>0&&r.column>=0&&n)return;throw new Error("Invalid mapping: "+JSON.stringify({generated:t,source:n,original:r,name:o}))}};oe.prototype._serializeMappings=function(){for(var t=0,r=1,n=0,o=0,i=0,s=0,u="",c,a,l,p,m=this._mappings.toArray(),f=0,P=m.length;f<P;f++){if(a=m[f],c="",a.generatedLine!==r)for(t=0;a.generatedLine!==r;)c+=";",r++;else if(f>0){if(!j.compareByGeneratedPositionsInflated(a,m[f-1]))continue;c+=","}c+=ot.encode(a.generatedColumn-t),t=a.generatedColumn,a.source!=null&&(p=this._sources.indexOf(a.source),c+=ot.encode(p-s),s=p,c+=ot.encode(a.originalLine-1-o),o=a.originalLine-1,c+=ot.encode(a.originalColumn-n),n=a.originalColumn,a.name!=null&&(l=this._names.indexOf(a.name),c+=ot.encode(l-i),i=l)),u+=c}return u};oe.prototype._generateSourcesContent=function(t,r){return t.map(function(n){if(!this._sourcesContents)return null;r!=null&&(n=j.relative(r,n));var o=j.toSetString(n);return Object.prototype.hasOwnProperty.call(this._sourcesContents,o)?this._sourcesContents[o]:null},this)};oe.prototype.toJSON=function(){var t={version:this._version,sources:this._sources.toArray(),names:this._names.toArray(),mappings:this._serializeMappings()};return this._file!=null&&(t.file=this._file),this._sourceRoot!=null&&(t.sourceRoot=this._sourceRoot),this._sourcesContents&&(t.sourcesContent=this._generateSourcesContent(t.sources,t.sourceRoot)),t};oe.prototype.toString=function(){return JSON.stringify(this.toJSON())};xi.SourceMapGenerator=oe});var sm={};b(sm,{Lexer:()=>De,List:()=>D,TokenStream:()=>Ue,clone:()=>ar,createLexer:()=>Jh,createSyntax:()=>Zt,definitionSyntax:()=>qr,find:()=>tm,findAll:()=>nm,findLast:()=>rm,fork:()=>am,fromPlainObject:()=>im,generate:()=>$h,ident:()=>Uo,isCustomProperty:()=>lt,keyword:()=>st,lexer:()=>Zh,parse:()=>Xh,property:()=>Ft,string:()=>rr,toPlainObject:()=>om,tokenNames:()=>Ee,tokenTypes:()=>Me,tokenize:()=>Qh,url:()=>or,vendorPrefix:()=>Js,version:()=>Gh,walk:()=>em});var Me={};b(Me,{AtKeyword:()=>I,BadString:()=>Ae,BadUrl:()=>Y,CDC:()=>U,CDO:()=>ue,Colon:()=>O,Comma:()=>G,Comment:()=>E,Delim:()=>g,Dimension:()=>y,EOF:()=>Ze,Function:()=>x,Hash:()=>v,Ident:()=>h,LeftCurlyBracket:()=>M,LeftParenthesis:()=>T,LeftSquareBracket:()=>q,Number:()=>d,Percentage:()=>A,RightCurlyBracket:()=>H,RightParenthesis:()=>w,RightSquareBracket:()=>V,Semicolon:()=>_,String:()=>W,Url:()=>F,WhiteSpace:()=>k});var Ze=0,h=1,x=2,I=3,v=4,W=5,Ae=6,F=7,Y=8,g=9,d=10,A=11,y=12,k=13,ue=14,U=15,O=16,_=17,G=18,q=19,V=20,T=21,w=22,M=23,H=24,E=25;function B(e){return e>=48&&e<=57}function ee(e){return B(e)||e>=65&&e<=70||e>=97&&e<=102}function vt(e){return e>=65&&e<=90}function us(e){return e>=97&&e<=122}function ps(e){return vt(e)||us(e)}function hs(e){return e>=128}function wt(e){return ps(e)||hs(e)||e===95}function Re(e){return wt(e)||B(e)||e===45}function ms(e){return e>=0&&e<=8||e===11||e>=14&&e<=31||e===127}function Je(e){return e===10||e===13||e===12}function pe(e){return Je(e)||e===32||e===9}function $(e,t){return!(e!==92||Je(t)||t===0)}function Fe(e,t,r){return e===45?wt(t)||t===45||$(t,r):wt(e)?!0:e===92?$(e,t):!1}function St(e,t,r){return e===43||e===45?B(t)?2:t===46&&B(r)?3:0:e===46?B(t)?2:0:B(e)?1:0}function Ct(e){return e===65279||e===65534?1:0}var sr=new Array(128),fs=128,et=130,lr=131,At=132,cr=133;for(let e=0;e<sr.length;e++)sr[e]=pe(e)&&et||B(e)&&lr||wt(e)&&At||ms(e)&&cr||e||fs;function Tt(e){return e<128?sr[e]:At}function Be(e,t){return t<e.length?e.charCodeAt(t):0}function Et(e,t,r){return r===13&&Be(e,t+1)===10?2:1}function de(e,t,r){let n=e.charCodeAt(t);return vt(n)&&(n=n|32),n===r}function ge(e,t,r,n){if(r-t!==n.length||t<0||r>e.length)return!1;for(let o=t;o<r;o++){let i=n.charCodeAt(o-t),s=e.charCodeAt(o);if(vt(s)&&(s=s|32),s!==i)return!1}return!0}function Wo(e,t){for(;t>=0&&pe(e.charCodeAt(t));t--);return t+1}function tt(e,t){for(;t<e.length&&pe(e.charCodeAt(t));t++);return t}function ur(e,t){for(;t<e.length&&B(e.charCodeAt(t));t++);return t}function se(e,t){if(t+=2,ee(Be(e,t-1))){for(let n=Math.min(e.length,t+5);t<n&&ee(Be(e,t));t++);let r=Be(e,t);pe(r)&&(t+=Et(e,t,r))}return t}function rt(e,t){for(;t<e.length;t++){let r=e.charCodeAt(t);if(!Re(r)){if($(r,Be(e,t+1))){t=se(e,t)-1;continue}break}}return t}function Te(e,t){let r=e.charCodeAt(t);if((r===43||r===45)&&(r=e.charCodeAt(t+=1)),B(r)&&(t=ur(e,t+1),r=e.charCodeAt(t)),r===46&&B(e.charCodeAt(t+1))&&(t+=2,t=ur(e,t)),de(e,t,101)){let n=0;r=e.charCodeAt(t+1),(r===45||r===43)&&(n=1,r=e.charCodeAt(t+2)),B(r)&&(t=ur(e,t+1+n+1))}return t}function Lt(e,t){for(;t<e.length;t++){let r=e.charCodeAt(t);if(r===41){t++;break}$(r,Be(e,t+1))&&(t=se(e,t))}return t}function _e(e){if(e.length===1&&!ee(e.charCodeAt(0)))return e[0];let t=parseInt(e,16);return(t===0||t>=55296&&t<=57343||t>1114111)&&(t=65533),String.fromCodePoint(t)}var Ee=["EOF-token","ident-token","function-token","at-keyword-token","hash-token","string-token","bad-string-token","url-token","bad-url-token","delim-token","number-token","percentage-token","dimension-token","whitespace-token","CDO-token","CDC-token","colon-token","semicolon-token","comma-token","[-token","]-token","(-token",")-token","{-token","}-token"];function qe(e=null,t){return e===null||e.length<t?new Uint32Array(Math.max(t+1024,16384)):e}var Ho=10,ds=12,Yo=13;function Go(e){let t=e.source,r=t.length,n=t.length>0?Ct(t.charCodeAt(0)):0,o=qe(e.lines,r),i=qe(e.columns,r),s=e.startLine,u=e.startColumn;for(let c=n;c<r;c++){let a=t.charCodeAt(c);o[c]=s,i[c]=u++,(a===Ho||a===Yo||a===ds)&&(a===Yo&&c+1<r&&t.charCodeAt(c+1)===Ho&&(c++,o[c]=s,i[c]=u),s++,u=1)}o[r]=s,i[r]=u,e.lines=o,e.columns=i,e.computed=!0}var Pt=class{constructor(){this.lines=null,this.columns=null,this.computed=!1}setSource(t,r=0,n=1,o=1){this.source=t,this.startOffset=r,this.startLine=n,this.startColumn=o,this.computed=!1}getLocation(t,r){return this.computed||Go(this),{source:r,offset:this.startOffset+t,line:this.lines[t],column:this.columns[t]}}getLocationRange(t,r,n){return this.computed||Go(this),{source:n,start:{offset:this.startOffset+t,line:this.lines[t],column:this.columns[t]},end:{offset:this.startOffset+r,line:this.lines[r],column:this.columns[r]}}}};var ne=16777215,we=24,gs=new Map([[2,22],[21,22],[19,20],[23,24]]),Ue=class{constructor(t,r){this.setSource(t,r)}reset(){this.eof=!1,this.tokenIndex=-1,this.tokenType=0,this.tokenStart=this.firstCharOffset,this.tokenEnd=this.firstCharOffset}setSource(t="",r=()=>{}){t=String(t||"");let n=t.length,o=qe(this.offsetAndType,t.length+1),i=qe(this.balance,t.length+1),s=0,u=0,c=0,a=-1;for(this.offsetAndType=null,this.balance=null,r(t,(l,p,m)=>{switch(l){default:i[s]=n;break;case u:{let f=c&ne;for(c=i[f],u=c>>we,i[s]=f,i[f++]=s;f<s;f++)i[f]===n&&(i[f]=s);break}case 21:case 2:case 19:case 23:i[s]=c,u=gs.get(l),c=u<<we|s;break}o[s++]=l<<we|m,a===-1&&(a=p)}),o[s]=0<<we|n,i[s]=n,i[n]=n;c!==0;){let l=c&ne;c=i[l],i[l]=n}this.source=t,this.firstCharOffset=a===-1?0:a,this.tokenCount=s,this.offsetAndType=o,this.balance=i,this.reset(),this.next()}lookupType(t){return t+=this.tokenIndex,t<this.tokenCount?this.offsetAndType[t]>>we:0}lookupOffset(t){return t+=this.tokenIndex,t<this.tokenCount?this.offsetAndType[t-1]&ne:this.source.length}lookupValue(t,r){return t+=this.tokenIndex,t<this.tokenCount?ge(this.source,this.offsetAndType[t-1]&ne,this.offsetAndType[t]&ne,r):!1}getTokenStart(t){return t===this.tokenIndex?this.tokenStart:t>0?t<this.tokenCount?this.offsetAndType[t-1]&ne:this.offsetAndType[this.tokenCount]&ne:this.firstCharOffset}substrToCursor(t){return this.source.substring(t,this.tokenStart)}isBalanceEdge(t){return this.balance[this.tokenIndex]<t}isDelim(t,r){return r?this.lookupType(r)===9&&this.source.charCodeAt(this.lookupOffset(r))===t:this.tokenType===9&&this.source.charCodeAt(this.tokenStart)===t}skip(t){let r=this.tokenIndex+t;r<this.tokenCount?(this.tokenIndex=r,this.tokenStart=this.offsetAndType[r-1]&ne,r=this.offsetAndType[r],this.tokenType=r>>we,this.tokenEnd=r&ne):(this.tokenIndex=this.tokenCount,this.next())}next(){let t=this.tokenIndex+1;t<this.tokenCount?(this.tokenIndex=t,this.tokenStart=this.tokenEnd,t=this.offsetAndType[t],this.tokenType=t>>we,this.tokenEnd=t&ne):(this.eof=!0,this.tokenIndex=this.tokenCount,this.tokenType=0,this.tokenStart=this.tokenEnd=this.source.length)}skipSC(){for(;this.tokenType===13||this.tokenType===25;)this.next()}skipUntilBalanced(t,r){let n=t,o,i;e:for(;n<this.tokenCount;n++){if(o=this.balance[n],o<t)break e;switch(i=n>0?this.offsetAndType[n-1]&ne:this.firstCharOffset,r(this.source.charCodeAt(i))){case 1:break e;case 2:n++;break e;default:this.balance[o]===n&&(n=o)}}this.skip(n-this.tokenIndex)}forEachToken(t){for(let r=0,n=this.firstCharOffset;r<this.tokenCount;r++){let o=n,i=this.offsetAndType[r],s=i&ne,u=i>>we;n=s,t(u,o,s,r)}}dump(){let t=new Array(this.tokenCount);return this.forEachToken((r,n,o,i)=>{t[i]={idx:i,type:Ee[r],chunk:this.source.substring(n,o),balance:this.balance[i]}}),t}};function ve(e,t){function r(p){return p<u?e.charCodeAt(p):0}function n(){if(a=Te(e,a),Fe(r(a),r(a+1),r(a+2))){l=12,a=rt(e,a);return}if(r(a)===37){l=11,a++;return}l=10}function o(){let p=a;if(a=rt(e,a),ge(e,p,a,"url")&&r(a)===40){if(a=tt(e,a+1),r(a)===34||r(a)===39){l=2,a=p+4;return}s();return}if(r(a)===40){l=2,a++;return}l=1}function i(p){for(p||(p=r(a++)),l=5;a<e.length;a++){let m=e.charCodeAt(a);switch(Tt(m)){case p:a++;return;case et:if(Je(m)){a+=Et(e,a,m),l=6;return}break;case 92:if(a===e.length-1)break;let f=r(a+1);Je(f)?a+=Et(e,a+1,f):$(m,f)&&(a=se(e,a)-1);break}}}function s(){for(l=7,a=tt(e,a);a<e.length;a++){let p=e.charCodeAt(a);switch(Tt(p)){case 41:a++;return;case et:if(a=tt(e,a),r(a)===41||a>=e.length){a<e.length&&a++;return}a=Lt(e,a),l=8;return;case 34:case 39:case 40:case cr:a=Lt(e,a),l=8;return;case 92:if($(p,r(a+1))){a=se(e,a)-1;break}a=Lt(e,a),l=8;return}}}e=String(e||"");let u=e.length,c=Ct(r(0)),a=c,l;for(;a<u;){let p=e.charCodeAt(a);switch(Tt(p)){case et:l=13,a=tt(e,a+1);break;case 34:i();break;case 35:Re(r(a+1))||$(r(a+1),r(a+2))?(l=4,a=rt(e,a+1)):(l=9,a++);break;case 39:i();break;case 40:l=21,a++;break;case 41:l=22,a++;break;case 43:St(p,r(a+1),r(a+2))?n():(l=9,a++);break;case 44:l=18,a++;break;case 45:St(p,r(a+1),r(a+2))?n():r(a+1)===45&&r(a+2)===62?(l=15,a=a+3):Fe(p,r(a+1),r(a+2))?o():(l=9,a++);break;case 46:St(p,r(a+1),r(a+2))?n():(l=9,a++);break;case 47:r(a+1)===42?(l=25,a=e.indexOf("*/",a+2),a=a===-1?e.length:a+2):(l=9,a++);break;case 58:l=16,a++;break;case 59:l=17,a++;break;case 60:r(a+1)===33&&r(a+2)===45&&r(a+3)===45?(l=14,a=a+4):(l=9,a++);break;case 64:Fe(r(a+1),r(a+2),r(a+3))?(l=3,a=rt(e,a+1)):(l=9,a++);break;case 91:l=19,a++;break;case 92:$(p,r(a+1))?o():(l=9,a++);break;case 93:l=20,a++;break;case 123:l=23,a++;break;case 125:l=24,a++;break;case lr:n();break;case At:o();break;default:l=9,a++}t(l,c,c=a)}}var je=null,D=class{static createItem(t){return{prev:null,next:null,data:t}}constructor(){this.head=null,this.tail=null,this.cursor=null}createItem(t){return D.createItem(t)}allocateCursor(t,r){let n;return je!==null?(n=je,je=je.cursor,n.prev=t,n.next=r,n.cursor=this.cursor):n={prev:t,next:r,cursor:this.cursor},this.cursor=n,n}releaseCursor(){let{cursor:t}=this;this.cursor=t.cursor,t.prev=null,t.next=null,t.cursor=je,je=t}updateCursors(t,r,n,o){let{cursor:i}=this;for(;i!==null;)i.prev===t&&(i.prev=r),i.next===n&&(i.next=o),i=i.cursor}*[Symbol.iterator](){for(let t=this.head;t!==null;t=t.next)yield t.data}get size(){let t=0;for(let r=this.head;r!==null;r=r.next)t++;return t}get isEmpty(){return this.head===null}get first(){return this.head&&this.head.data}get last(){return this.tail&&this.tail.data}fromArray(t){let r=null;this.head=null;for(let n of t){let o=D.createItem(n);r!==null?r.next=o:this.head=o,o.prev=r,r=o}return this.tail=r,this}toArray(){return[...this]}toJSON(){return[...this]}forEach(t,r=this){let n=this.allocateCursor(null,this.head);for(;n.next!==null;){let o=n.next;n.next=o.next,t.call(r,o.data,o,this)}this.releaseCursor()}forEachRight(t,r=this){let n=this.allocateCursor(this.tail,null);for(;n.prev!==null;){let o=n.prev;n.prev=o.prev,t.call(r,o.data,o,this)}this.releaseCursor()}reduce(t,r,n=this){let o=this.allocateCursor(null,this.head),i=r,s;for(;o.next!==null;)s=o.next,o.next=s.next,i=t.call(n,i,s.data,s,this);return this.releaseCursor(),i}reduceRight(t,r,n=this){let o=this.allocateCursor(this.tail,null),i=r,s;for(;o.prev!==null;)s=o.prev,o.prev=s.prev,i=t.call(n,i,s.data,s,this);return this.releaseCursor(),i}some(t,r=this){for(let n=this.head;n!==null;n=n.next)if(t.call(r,n.data,n,this))return!0;return!1}map(t,r=this){let n=new D;for(let o=this.head;o!==null;o=o.next)n.appendData(t.call(r,o.data,o,this));return n}filter(t,r=this){let n=new D;for(let o=this.head;o!==null;o=o.next)t.call(r,o.data,o,this)&&n.appendData(o.data);return n}nextUntil(t,r,n=this){if(t===null)return;let o=this.allocateCursor(null,t);for(;o.next!==null;){let i=o.next;if(o.next=i.next,r.call(n,i.data,i,this))break}this.releaseCursor()}prevUntil(t,r,n=this){if(t===null)return;let o=this.allocateCursor(t,null);for(;o.prev!==null;){let i=o.prev;if(o.prev=i.prev,r.call(n,i.data,i,this))break}this.releaseCursor()}clear(){this.head=null,this.tail=null}copy(){let t=new D;for(let r of this)t.appendData(r);return t}prepend(t){return this.updateCursors(null,t,this.head,t),this.head!==null?(this.head.prev=t,t.next=this.head):this.tail=t,this.head=t,this}prependData(t){return this.prepend(D.createItem(t))}append(t){return this.insert(t)}appendData(t){return this.insert(D.createItem(t))}insert(t,r=null){if(r!==null)if(this.updateCursors(r.prev,t,r,t),r.prev===null){if(this.head!==r)throw new Error("before doesn't belong to list");this.head=t,r.prev=t,t.next=r,this.updateCursors(null,t)}else r.prev.next=t,t.prev=r.prev,r.prev=t,t.next=r;else this.updateCursors(this.tail,t,null,t),this.tail!==null?(this.tail.next=t,t.prev=this.tail):this.head=t,this.tail=t;return this}insertData(t,r){return this.insert(D.createItem(t),r)}remove(t){if(this.updateCursors(t,t.prev,t,t.next),t.prev!==null)t.prev.next=t.next;else{if(this.head!==t)throw new Error("item doesn't belong to list");this.head=t.next}if(t.next!==null)t.next.prev=t.prev;else{if(this.tail!==t)throw new Error("item doesn't belong to list");this.tail=t.prev}return t.prev=null,t.next=null,t}push(t){this.insert(D.createItem(t))}pop(){return this.tail!==null?this.remove(this.tail):null}unshift(t){this.prepend(D.createItem(t))}shift(){return this.head!==null?this.remove(this.head):null}prependList(t){return this.insertList(t,this.head)}appendList(t){return this.insertList(t)}insertList(t,r){return t.head===null?this:(r!=null?(this.updateCursors(r.prev,t.tail,r,t.head),r.prev!==null?(r.prev.next=t.head,t.head.prev=r.prev):this.head=t.head,r.prev=t.tail,t.tail.next=r):(this.updateCursors(this.tail,t.tail,null,t.head),this.tail!==null?(this.tail.next=t.head,t.head.prev=this.tail):this.head=t.head,this.tail=t.tail),t.head=null,t.tail=null,this)}replace(t,r){"head"in r?this.insertList(r,t):this.insert(r,t),this.remove(t)}};function Le(e,t){let r=Object.create(SyntaxError.prototype),n=new Error;return Object.assign(r,{name:e,message:t,get stack(){return(n.stack||"").replace(/^(.+\n){1,3}/,`${e}: ${t}
-`)}})}var pr=100,Vo=60,Ko=" ";function Qo({source:e,line:t,column:r},n){function o(l,p){return i.slice(l,p).map((m,f)=>String(l+f+1).padStart(c)+" |"+m).join(`
-`)}let i=e.split(/\r\n?|\n|\f/),s=Math.max(1,t-n)-1,u=Math.min(t+n,i.length+1),c=Math.max(4,String(u).length)+1,a=0;r+=(Ko.length-1)*(i[t-1].substr(0,r-1).match(/\t/g)||[]).length,r>pr&&(a=r-Vo+3,r=Vo-2);for(let l=s;l<=u;l++)l>=0&&l<i.length&&(i[l]=i[l].replace(/\t/g,Ko),i[l]=(a>0&&i[l].length>a?"\u2026":"")+i[l].substr(a,pr-2)+(i[l].length>a+pr-1?"\u2026":""));return[o(s,t),new Array(r+c+2).join("-")+"^",o(t,u)].filter(Boolean).join(`
-`)}function hr(e,t,r,n,o){return Object.assign(Le("SyntaxError",e),{source:t,offset:r,line:n,column:o,sourceFragment(s){return Qo({source:t,line:n,column:o},isNaN(s)?0:s)},get formattedMessage(){return`Parse error: ${e}
-`+Qo({source:t,line:n,column:o},2)}})}function Xo(e){let t=this.createList(),r=!1,n={recognizer:e};for(;!this.eof;){switch(this.tokenType){case 25:this.next();continue;case 13:r=!0,this.next();continue}let o=e.getNode.call(this,n);if(o===void 0)break;r&&(e.onWhiteSpace&&e.onWhiteSpace.call(this,o,t,n),r=!1),t.push(o)}return r&&e.onWhiteSpace&&e.onWhiteSpace.call(this,null,t,n),t}var $o=()=>{},bs=33,xs=35,mr=59,Zo=123,Jo=0;function ys(e){return function(){return this[e]()}}function fr(e){let t=Object.create(null);for(let r in e){let n=e[r],o=n.parse||n;o&&(t[r]=o)}return t}function ks(e){let t={context:Object.create(null),scope:Object.assign(Object.create(null),e.scope),atrule:fr(e.atrule),pseudo:fr(e.pseudo),node:fr(e.node)};for(let r in e.parseContext)switch(typeof e.parseContext[r]){case"function":t.context[r]=e.parseContext[r];break;case"string":t.context[r]=ys(e.parseContext[r]);break}return{config:t,...t,...t.node}}function ei(e){let t="",r="<unknown>",n=!1,o=$o,i=!1,s=new Pt,u=Object.assign(new Ue,ks(e||{}),{parseAtrulePrelude:!0,parseRulePrelude:!0,parseValue:!0,parseCustomProperty:!1,readSequence:Xo,consumeUntilBalanceEnd:()=>0,consumeUntilLeftCurlyBracket(a){return a===Zo?1:0},consumeUntilLeftCurlyBracketOrSemicolon(a){return a===Zo||a===mr?1:0},consumeUntilExclamationMarkOrSemicolon(a){return a===bs||a===mr?1:0},consumeUntilSemicolonIncluded(a){return a===mr?2:0},createList(){return new D},createSingleNodeList(a){return new D().appendData(a)},getFirstListNode(a){return a&&a.first},getLastListNode(a){return a&&a.last},parseWithFallback(a,l){let p=this.tokenIndex;try{return a.call(this)}catch(m){if(i)throw m;let f=l.call(this,p);return i=!0,o(m,f),i=!1,f}},lookupNonWSType(a){let l;do if(l=this.lookupType(a++),l!==13)return l;while(l!==Jo);return Jo},charCodeAt(a){return a>=0&&a<t.length?t.charCodeAt(a):0},substring(a,l){return t.substring(a,l)},substrToCursor(a){return this.source.substring(a,this.tokenStart)},cmpChar(a,l){return de(t,a,l)},cmpStr(a,l,p){return ge(t,a,l,p)},consume(a){let l=this.tokenStart;return this.eat(a),this.substrToCursor(l)},consumeFunctionName(){let a=t.substring(this.tokenStart,this.tokenEnd-1);return this.eat(2),a},consumeNumber(a){let l=t.substring(this.tokenStart,Te(t,this.tokenStart));return this.eat(a),l},eat(a){if(this.tokenType!==a){let l=Ee[a].slice(0,-6).replace(/-/g," ").replace(/^./,f=>f.toUpperCase()),p=`${/[[\](){}]/.test(l)?`"${l}"`:l} is expected`,m=this.tokenStart;switch(a){case 1:this.tokenType===2||this.tokenType===7?(m=this.tokenEnd-1,p="Identifier is expected but function found"):p="Identifier is expected";break;case 4:this.isDelim(xs)&&(this.next(),m++,p="Name is expected");break;case 11:this.tokenType===10&&(m=this.tokenEnd,p="Percent sign is expected");break}this.error(p,m)}this.next()},eatIdent(a){(this.tokenType!==1||this.lookupValue(0,a)===!1)&&this.error(`Identifier "${a}" is expected`),this.next()},eatDelim(a){this.isDelim(a)||this.error(`Delim "${String.fromCharCode(a)}" is expected`),this.next()},getLocation(a,l){return n?s.getLocationRange(a,l,r):null},getLocationFromList(a){if(n){let l=this.getFirstListNode(a),p=this.getLastListNode(a);return s.getLocationRange(l!==null?l.loc.start.offset-s.startOffset:this.tokenStart,p!==null?p.loc.end.offset-s.startOffset:this.tokenStart,r)}return null},error(a,l){let p=typeof l<"u"&&l<t.length?s.getLocation(l):this.eof?s.getLocation(Wo(t,t.length-1)):s.getLocation(this.tokenStart);throw new hr(a||"Unexpected input",t,p.offset,p.line,p.column)}});return Object.assign(function(a,l){t=a,l=l||{},u.setSource(t,ve),s.setSource(t,l.offset,l.line,l.column),r=l.filename||"<unknown>",n=Boolean(l.positions),o=typeof l.onParseError=="function"?l.onParseError:$o,i=!1,u.parseAtrulePrelude="parseAtrulePrelude"in l?Boolean(l.parseAtrulePrelude):!0,u.parseRulePrelude="parseRulePrelude"in l?Boolean(l.parseRulePrelude):!0,u.parseValue="parseValue"in l?Boolean(l.parseValue):!0,u.parseCustomProperty="parseCustomProperty"in l?Boolean(l.parseCustomProperty):!1;let{context:p="default",onComment:m}=l;if(!(p in u.context))throw new Error("Unknown context `"+p+"`");typeof m=="function"&&u.forEachToken((P,te,X)=>{if(P===25){let S=u.getLocation(te,X),R=ge(t,X-2,X,"*/")?t.slice(te+2,X-2):t.slice(te+2,X);m(R,S)}});let f=u.context[p].call(u,l);return u.eof||u.error(),f},{SyntaxError:hr,config:u.config})}var wi=ls(yi(),1),ki=new Set(["Atrule","Selector","Declaration"]);function vi(e){let t=new wi.SourceMapGenerator,r={line:1,column:0},n={line:0,column:0},o={line:1,column:0},i={generated:o},s=1,u=0,c=!1,a=e.node;e.node=function(m){if(m.loc&&m.loc.start&&ki.has(m.type)){let f=m.loc.start.line,P=m.loc.start.column-1;(n.line!==f||n.column!==P)&&(n.line=f,n.column=P,r.line=s,r.column=u,c&&(c=!1,(r.line!==o.line||r.column!==o.column)&&t.addMapping(i)),c=!0,t.addMapping({source:m.loc.source,original:n,generated:r}))}a.call(this,m),c&&ki.has(m.type)&&(o.line=s,o.column=u)};let l=e.emit;e.emit=function(m,f,P){for(let te=0;te<m.length;te++)m.charCodeAt(te)===10?(s++,u=0):u++;l(m,f,P)};let p=e.result;return e.result=function(){return c&&t.addMapping(i),{css:p(),map:t}},e}var Nt={};b(Nt,{safe:()=>vr,spec:()=>js});var _s=43,qs=45,wr=(e,t)=>{if(e===9&&(e=t),typeof e=="string"){let r=e.charCodeAt(0);return r>127?32768:r<<8}return e},Si=[[1,1],[1,2],[1,7],[1,8],[1,"-"],[1,10],[1,11],[1,12],[1,15],[1,21],[3,1],[3,2],[3,7],[3,8],[3,"-"],[3,10],[3,11],[3,12],[3,15],[4,1],[4,2],[4,7],[4,8],[4,"-"],[4,10],[4,11],[4,12],[4,15],[12,1],[12,2],[12,7],[12,8],[12,"-"],[12,10],[12,11],[12,12],[12,15],["#",1],["#",2],["#",7],["#",8],["#","-"],["#",10],["#",11],["#",12],["#",15],["-",1],["-",2],["-",7],["-",8],["-","-"],["-",10],["-",11],["-",12],["-",15],[10,1],[10,2],[10,7],[10,8],[10,10],[10,11],[10,12],[10,"%"],[10,15],["@",1],["@",2],["@",7],["@",8],["@","-"],["@",15],[".",10],[".",11],[".",12],["+",10],["+",11],["+",12],["/","*"]],Us=Si.concat([[1,4],[12,4],[4,4],[3,21],[3,5],[3,16],[11,11],[11,12],[11,2],[11,"-"],[22,1],[22,2],[22,11],[22,12],[22,4],[22,"-"]]);function Ci(e){let t=new Set(e.map(([r,n])=>wr(r)<<16|wr(n)));return function(r,n,o){let i=wr(n,o),s=o.charCodeAt(0);return(s===qs&&n!==1&&n!==2&&n!==15||s===_s?t.has(r<<16|s<<8):t.has(r<<16|i))&&this.emit(" ",13,!0),i}}var js=Ci(Si),vr=Ci(Us);var Ws=92;function Hs(e,t){if(typeof t=="function"){let r=null;e.children.forEach(n=>{r!==null&&t.call(this,r),this.node(n),r=n});return}e.children.forEach(this.node,this)}function Ys(e){ve(e,(t,r,n)=>{this.token(t,e.slice(r,n))})}function Ai(e){let t=new Map;for(let r in e.node){let n=e.node[r];typeof(n.generate||n)=="function"&&t.set(r,n.generate||n)}return function(r,n){let o="",i=0,s={node(c){if(t.has(c.type))t.get(c.type).call(u,c);else throw new Error("Unknown node type: "+c.type)},tokenBefore:vr,token(c,a){i=this.tokenBefore(i,c,a),this.emit(a,c,!1),c===9&&a.charCodeAt(0)===Ws&&this.emit(`
-`,13,!0)},emit(c){o+=c},result(){return o}};n&&(typeof n.decorator=="function"&&(s=n.decorator(s)),n.sourceMap&&(s=vi(s)),n.mode in Nt&&(s.tokenBefore=Nt[n.mode]));let u={node:c=>s.node(c),children:Hs,token:(c,a)=>s.token(c,a),tokenize:Ys};return s.node(r),s.result()}}function Ti(e){return{fromPlainObject(t){return e(t,{enter(r){r.children&&!(r.children instanceof D)&&(r.children=new D().fromArray(r.children))}}),t},toPlainObject(t){return e(t,{leave(r){r.children&&r.children instanceof D&&(r.children=r.children.toArray())}}),t}}}var{hasOwnProperty:Sr}=Object.prototype,it=function(){};function Ei(e){return typeof e=="function"?e:it}function Li(e,t){return function(r,n,o){r.type===t&&e.call(this,r,n,o)}}function Gs(e,t){let r=t.structure,n=[];for(let o in r){if(Sr.call(r,o)===!1)continue;let i=r[o],s={name:o,type:!1,nullable:!1};Array.isArray(i)||(i=[i]);for(let u of i)u===null?s.nullable=!0:typeof u=="string"?s.type="node":Array.isArray(u)&&(s.type="list");s.type&&n.push(s)}return n.length?{context:t.walkContext,fields:n}:null}function Vs(e){let t={};for(let r in e.node)if(Sr.call(e.node,r)){let n=e.node[r];if(!n.structure)throw new Error("Missed `structure` field in `"+r+"` node type definition");t[r]=Gs(r,n)}return t}function Pi(e,t){let r=e.fields.slice(),n=e.context,o=typeof n=="string";return t&&r.reverse(),function(i,s,u,c){let a;o&&(a=s[n],s[n]=i);for(let l of r){let p=i[l.name];if(!l.nullable||p){if(l.type==="list"){if(t?p.reduceRight(c,!1):p.reduce(c,!1))return!0}else if(u(p))return!0}}o&&(s[n]=a)}}function Ii({StyleSheet:e,Atrule:t,Rule:r,Block:n,DeclarationList:o}){return{Atrule:{StyleSheet:e,Atrule:t,Rule:r,Block:n},Rule:{StyleSheet:e,Atrule:t,Rule:r,Block:n},Declaration:{StyleSheet:e,Atrule:t,Rule:r,Block:n,DeclarationList:o}}}function Di(e){let t=Vs(e),r={},n={},o=Symbol("break-walk"),i=Symbol("skip-node");for(let a in t)Sr.call(t,a)&&t[a]!==null&&(r[a]=Pi(t[a],!1),n[a]=Pi(t[a],!0));let s=Ii(r),u=Ii(n),c=function(a,l){function p(S,R,ke){let z=m.call(X,S,R,ke);return z===o?!0:z===i?!1:!!(P.hasOwnProperty(S.type)&&P[S.type](S,X,p,te)||f.call(X,S,R,ke)===o)}let m=it,f=it,P=r,te=(S,R,ke,z)=>S||p(R,ke,z),X={break:o,skip:i,root:a,stylesheet:null,atrule:null,atrulePrelude:null,rule:null,selector:null,block:null,declaration:null,function:null};if(typeof l=="function")m=l;else if(l&&(m=Ei(l.enter),f=Ei(l.leave),l.reverse&&(P=n),l.visit)){if(s.hasOwnProperty(l.visit))P=l.reverse?u[l.visit]:s[l.visit];else if(!t.hasOwnProperty(l.visit))throw new Error("Bad value `"+l.visit+"` for `visit` option (should be: "+Object.keys(t).sort().join(", ")+")");m=Li(m,l.visit),f=Li(f,l.visit)}if(m===it&&f===it)throw new Error("Neither `enter` nor `leave` walker handler is set or both aren't a function");p(a)};return c.break=o,c.skip=i,c.find=function(a,l){let p=null;return c(a,function(m,f,P){if(l.call(this,m,f,P))return p=m,o}),p},c.findLast=function(a,l){let p=null;return c(a,{reverse:!0,enter(m,f,P){if(l.call(this,m,f,P))return p=m,o}}),p},c.findAll=function(a,l){let p=[];return c(a,function(m,f,P){l.call(this,m,f,P)&&p.push(m)}),p},c}function Ks(e){return e}function Qs(e){let{min:t,max:r,comma:n}=e;return t===0&&r===0?n?"#?":"*":t===0&&r===1?"?":t===1&&r===0?n?"#":"+":t===1&&r===1?"":(n?"#":"")+(t===r?"{"+t+"}":"{"+t+","+(r!==0?r:"")+"}")}function Xs(e){switch(e.type){case"Range":return" ["+(e.min===null?"-\u221E":e.min)+","+(e.max===null?"\u221E":e.max)+"]";default:throw new Error("Unknown node type `"+e.type+"`")}}function $s(e,t,r,n){let o=e.combinator===" "||n?e.combinator:" "+e.combinator+" ",i=e.terms.map(s=>Cr(s,t,r,n)).join(o);return e.explicit||r?(n||i[0]===","?"[":"[ ")+i+(n?"]":" ]"):i}function Cr(e,t,r,n){let o;switch(e.type){case"Group":o=$s(e,t,r,n)+(e.disallowEmpty?"!":"");break;case"Multiplier":return Cr(e.term,t,r,n)+t(Qs(e),e);case"Type":o="<"+e.name+(e.opts?t(Xs(e.opts),e.opts):"")+">";break;case"Property":o="<'"+e.name+"'>";break;case"Keyword":o=e.name;break;case"AtKeyword":o="@"+e.name;break;case"Function":o=e.name+"(";break;case"String":case"Token":o=e.value;break;case"Comma":o=",";break;default:throw new Error("Unknown node type `"+e.type+"`")}return t(o,e)}function Ie(e,t){let r=Ks,n=!1,o=!1;return typeof t=="function"?r=t:t&&(n=Boolean(t.forceBraces),o=Boolean(t.compact),typeof t.decorate=="function"&&(r=t.decorate)),Cr(e,r,n,o)}var Oi={offset:0,line:1,column:1};function Zs(e,t){let r=e.tokens,n=e.longestMatch,o=n<r.length&&r[n].node||null,i=o!==t?o:null,s=0,u=0,c=0,a="",l,p;for(let m=0;m<r.length;m++){let f=r[m].value;m===n&&(u=f.length,s=a.length),i!==null&&r[m].node===i&&(m<=n?c++:c=0),a+=f}return n===r.length||c>1?(l=zt(i||t,"end")||at(Oi,a),p=at(l)):(l=zt(i,"start")||at(zt(t,"start")||Oi,a.slice(0,s)),p=zt(i,"end")||at(l,a.substr(s,u))),{css:a,mismatchOffset:s,mismatchLength:u,start:l,end:p}}function zt(e,t){let r=e&&e.loc&&e.loc[t];return r?"line"in r?at(r):r:null}function at({offset:e,line:t,column:r},n){let o={offset:e,line:t,column:r};if(n){let i=n.split(/\n|\r\n?|\f/);o.offset+=n.length,o.line+=i.length-1,o.column=i.length===1?o.column+n.length:i.pop().length+1}return o}var He=function(e,t){let r=Le("SyntaxReferenceError",e+(t?" `"+t+"`":""));return r.reference=t,r},Ni=function(e,t,r,n){let o=Le("SyntaxMatchError",e),{css:i,mismatchOffset:s,mismatchLength:u,start:c,end:a}=Zs(n,r);return o.rawMessage=e,o.syntax=t?Ie(t):"<generic>",o.css=i,o.mismatchOffset=s,o.mismatchLength=u,o.message=e+`
- syntax: `+o.syntax+`
- value: `+(i||"<empty string>")+`
- --------`+new Array(o.mismatchOffset+1).join("-")+"^",Object.assign(o,c),o.loc={source:r&&r.loc&&r.loc.source||"<unknown>",start:c,end:a},o};var Mt=new Map,Ye=new Map,Rt=45,st=el,Ft=tl,Js=Ar;function lt(e,t){return t=t||0,e.length-t>=2&&e.charCodeAt(t)===Rt&&e.charCodeAt(t+1)===Rt}function Ar(e,t){if(t=t||0,e.length-t>=3&&e.charCodeAt(t)===Rt&&e.charCodeAt(t+1)!==Rt){let r=e.indexOf("-",t+2);if(r!==-1)return e.substring(t,r+1)}return""}function el(e){if(Mt.has(e))return Mt.get(e);let t=e.toLowerCase(),r=Mt.get(t);if(r===void 0){let n=lt(t,0),o=n?"":Ar(t,0);r=Object.freeze({basename:t.substr(o.length),name:t,prefix:o,vendor:o,custom:n})}return Mt.set(e,r),r}function tl(e){if(Ye.has(e))return Ye.get(e);let t=e,r=e[0];r==="/"?r=e[1]==="/"?"//":"/":r!=="_"&&r!=="*"&&r!=="$"&&r!=="#"&&r!=="+"&&r!=="&"&&(r="");let n=lt(t,r.length);if(!n&&(t=t.toLowerCase(),Ye.has(t))){let u=Ye.get(t);return Ye.set(e,u),u}let o=n?"":Ar(t,r.length),i=t.substr(0,r.length+o.length),s=Object.freeze({basename:t.substr(i.length),name:t.substr(r.length),hack:r,vendor:o,prefix:i,custom:n});return Ye.set(e,s),s}var Bt=["initial","inherit","unset","revert","revert-layer"];var ut=43,he=45,Tr=110,Ge=!0,nl=!1;function Lr(e,t){return e!==null&&e.type===9&&e.value.charCodeAt(0)===t}function ct(e,t,r){for(;e!==null&&(e.type===13||e.type===25);)e=r(++t);return t}function Se(e,t,r,n){if(!e)return 0;let o=e.value.charCodeAt(t);if(o===ut||o===he){if(r)return 0;t++}for(;t<e.value.length;t++)if(!B(e.value.charCodeAt(t)))return 0;return n+1}function Er(e,t,r){let n=!1,o=ct(e,t,r);if(e=r(o),e===null)return t;if(e.type!==10)if(Lr(e,ut)||Lr(e,he)){if(n=!0,o=ct(r(++o),o,r),e=r(o),e===null||e.type!==10)return 0}else return t;if(!n){let i=e.value.charCodeAt(0);if(i!==ut&&i!==he)return 0}return Se(e,n?0:1,n,o)}function Pr(e,t){let r=0;if(!e)return 0;if(e.type===10)return Se(e,0,nl,r);if(e.type===1&&e.value.charCodeAt(0)===he){if(!de(e.value,1,Tr))return 0;switch(e.value.length){case 2:return Er(t(++r),r,t);case 3:return e.value.charCodeAt(2)!==he?0:(r=ct(t(++r),r,t),e=t(r),Se(e,0,Ge,r));default:return e.value.charCodeAt(2)!==he?0:Se(e,3,Ge,r)}}else if(e.type===1||Lr(e,ut)&&t(r+1).type===1){if(e.type!==1&&(e=t(++r)),e===null||!de(e.value,0,Tr))return 0;switch(e.value.length){case 1:return Er(t(++r),r,t);case 2:return e.value.charCodeAt(1)!==he?0:(r=ct(t(++r),r,t),e=t(r),Se(e,0,Ge,r));default:return e.value.charCodeAt(1)!==he?0:Se(e,2,Ge,r)}}else if(e.type===12){let n=e.value.charCodeAt(0),o=n===ut||n===he?1:0,i=o;for(;i<e.value.length&&B(e.value.charCodeAt(i));i++);return i===o||!de(e.value,i,Tr)?0:i+1===e.value.length?Er(t(++r),r,t):e.value.charCodeAt(i+1)!==he?0:i+2===e.value.length?(r=ct(t(++r),r,t),e=t(r),Se(e,0,Ge,r)):Se(e,i+2,Ge,r)}return 0}var ol=43,zi=45,Mi=63,il=117;function Ir(e,t){return e!==null&&e.type===9&&e.value.charCodeAt(0)===t}function al(e,t){return e.value.charCodeAt(0)===t}function pt(e,t,r){let n=0;for(let o=t;o<e.value.length;o++){let i=e.value.charCodeAt(o);if(i===zi&&r&&n!==0)return pt(e,t+n+1,!1),6;if(!ee(i)||++n>6)return 0}return n}function _t(e,t,r){if(!e)return 0;for(;Ir(r(t),Mi);){if(++e>6)return 0;t++}return t}function Dr(e,t){let r=0;if(e===null||e.type!==1||!de(e.value,0,il)||(e=t(++r),e===null))return 0;if(Ir(e,ol))return e=t(++r),e===null?0:e.type===1?_t(pt(e,0,!0),++r,t):Ir(e,Mi)?_t(1,++r,t):0;if(e.type===10){let n=pt(e,1,!0);return n===0?0:(e=t(++r),e===null?r:e.type===12||e.type===10?!al(e,zi)||!pt(e,1,!1)?0:r+1:_t(n,r,t))}return e.type===12?_t(pt(e,1,!0),++r,t):0}var sl=["calc(","-moz-calc(","-webkit-calc("],Or=new Map([[2,22],[21,22],[19,20],[23,24]]);function le(e,t){return t<e.length?e.charCodeAt(t):0}function Ri(e,t){return ge(e,0,e.length,t)}function Fi(e,t){for(let r=0;r<t.length;r++)if(Ri(e,t[r]))return!0;return!1}function Bi(e,t){return t!==e.length-2?!1:le(e,t)===92&&B(le(e,t+1))}function qt(e,t,r){if(e&&e.type==="Range"){let n=Number(r!==void 0&&r!==t.length?t.substr(0,r):t);if(isNaN(n)||e.min!==null&&n<e.min&&typeof e.min!="string"||e.max!==null&&n>e.max&&typeof e.max!="string")return!0}return!1}function ll(e,t){let r=0,n=[],o=0;e:do{switch(e.type){case 24:case 22:case 20:if(e.type!==r)break e;if(r=n.pop(),n.length===0){o++;break e}break;case 2:case 21:case 19:case 23:n.push(r),r=Or.get(e.type);break}o++}while(e=t(o));return o}function ie(e){return function(t,r,n){return t===null?0:t.type===2&&Fi(t.value,sl)?ll(t,r):e(t,r,n)}}function N(e){return function(t){return t===null||t.type!==e?0:1}}function cl(e){if(e===null||e.type!==1)return 0;let t=e.value.toLowerCase();return Fi(t,Bt)||Ri(t,"default")?0:1}function ul(e){return e===null||e.type!==1||le(e.value,0)!==45||le(e.value,1)!==45?0:1}function pl(e){if(e===null||e.type!==4)return 0;let t=e.value.length;if(t!==4&&t!==5&&t!==7&&t!==9)return 0;for(let r=1;r<t;r++)if(!ee(le(e.value,r)))return 0;return 1}function hl(e){return e===null||e.type!==4||!Fe(le(e.value,1),le(e.value,2),le(e.value,3))?0:1}function ml(e,t){if(!e)return 0;let r=0,n=[],o=0;e:do{switch(e.type){case 6:case 8:break e;case 24:case 22:case 20:if(e.type!==r)break e;r=n.pop();break;case 17:if(r===0)break e;break;case 9:if(r===0&&e.value==="!")break e;break;case 2:case 21:case 19:case 23:n.push(r),r=Or.get(e.type);break}o++}while(e=t(o));return o}function fl(e,t){if(!e)return 0;let r=0,n=[],o=0;e:do{switch(e.type){case 6:case 8:break e;case 24:case 22:case 20:if(e.type!==r)break e;r=n.pop();break;case 2:case 21:case 19:case 23:n.push(r),r=Or.get(e.type);break}o++}while(e=t(o));return o}function ye(e){return e&&(e=new Set(e)),function(t,r,n){if(t===null||t.type!==12)return 0;let o=Te(t.value,0);if(e!==null){let i=t.value.indexOf("\\",o),s=i===-1||!Bi(t.value,i)?t.value.substr(o):t.value.substring(o,i);if(e.has(s.toLowerCase())===!1)return 0}return qt(n,t.value,o)?0:1}}function dl(e,t,r){return e===null||e.type!==11||qt(r,e.value,e.value.length-1)?0:1}function _i(e){return typeof e!="function"&&(e=function(){return 0}),function(t,r,n){return t!==null&&t.type===10&&Number(t.value)===0?1:e(t,r,n)}}function gl(e,t,r){if(e===null)return 0;let n=Te(e.value,0);return!(n===e.value.length)&&!Bi(e.value,n)||qt(r,e.value,n)?0:1}function bl(e,t,r){if(e===null||e.type!==10)return 0;let n=le(e.value,0)===43||le(e.value,0)===45?1:0;for(;n<e.value.length;n++)if(!B(le(e.value,n)))return 0;return qt(r,e.value,n)?0:1}var xl={"ident-token":N(1),"function-token":N(2),"at-keyword-token":N(3),"hash-token":N(4),"string-token":N(5),"bad-string-token":N(6),"url-token":N(7),"bad-url-token":N(8),"delim-token":N(9),"number-token":N(10),"percentage-token":N(11),"dimension-token":N(12),"whitespace-token":N(13),"CDO-token":N(14),"CDC-token":N(15),"colon-token":N(16),"semicolon-token":N(17),"comma-token":N(18),"[-token":N(19),"]-token":N(20),"(-token":N(21),")-token":N(22),"{-token":N(23),"}-token":N(24)},yl={string:N(5),ident:N(1),percentage:ie(dl),zero:_i(),number:ie(gl),integer:ie(bl),"custom-ident":cl,"custom-property-name":ul,"hex-color":pl,"id-selector":hl,"an-plus-b":Pr,urange:Dr,"declaration-value":ml,"any-value":fl};function kl(e){let{angle:t,decibel:r,frequency:n,flex:o,length:i,resolution:s,semitones:u,time:c}=e||{};return{dimension:ie(ye(null)),angle:ie(ye(t)),decibel:ie(ye(r)),frequency:ie(ye(n)),flex:ie(ye(o)),length:ie(_i(ye(i))),resolution:ie(ye(s)),semitones:ie(ye(u)),time:ie(ye(c))}}function qi(e){return{...xl,...yl,...kl(e)}}var Ut={};b(Ut,{angle:()=>vl,decibel:()=>El,flex:()=>Tl,frequency:()=>Cl,length:()=>wl,resolution:()=>Al,semitones:()=>Ll,time:()=>Sl});var wl=["cm","mm","q","in","pt","pc","px","em","rem","ex","rex","cap","rcap","ch","rch","ic","ric","lh","rlh","vw","svw","lvw","dvw","vh","svh","lvh","dvh","vi","svi","lvi","dvi","vb","svb","lvb","dvb","vmin","svmin","lvmin","dvmin","vmax","svmax","lvmax","dvmax","cqw","cqh","cqi","cqb","cqmin","cqmax"],vl=["deg","grad","rad","turn"],Sl=["s","ms"],Cl=["hz","khz"],Al=["dpi","dpcm","dppx","x"],Tl=["fr"],El=["db"],Ll=["st"];var qr={};b(qr,{SyntaxError:()=>jt,generate:()=>Ie,parse:()=>Qe,walk:()=>Qt});function jt(e,t,r){return Object.assign(Le("SyntaxError",e),{input:t,offset:r,rawMessage:e,message:e+`
- `+t+`
---`+new Array((r||t.length)+1).join("-")+"^"})}var Pl=9,Il=10,Dl=12,Ol=13,Nl=32,Wt=class{constructor(t){this.str=t,this.pos=0}charCodeAt(t){return t<this.str.length?this.str.charCodeAt(t):0}charCode(){return this.charCodeAt(this.pos)}nextCharCode(){return this.charCodeAt(this.pos+1)}nextNonWsCode(t){return this.charCodeAt(this.findWsEnd(t))}findWsEnd(t){for(;t<this.str.length;t++){let r=this.str.charCodeAt(t);if(r!==Ol&&r!==Il&&r!==Dl&&r!==Nl&&r!==Pl)break}return t}substringToPos(t){return this.str.substring(this.pos,this.pos=t)}eat(t){this.charCode()!==t&&this.error("Expect `"+String.fromCharCode(t)+"`"),this.pos++}peek(){return this.pos<this.str.length?this.str.charAt(this.pos++):""}error(t){throw new jt(t,this.str,this.pos)}};var zl=9,Ml=10,Rl=12,Fl=13,Bl=32,Ki=33,Mr=35,Ui=38,Ht=39,Qi=40,_l=41,Xi=42,Rr=43,Fr=44,ji=45,Br=60,$i=62,zr=63,ql=64,Kt=91,_r=93,Yt=123,Wi=124,Hi=125,Yi=8734,ht=new Uint8Array(128).map((e,t)=>/[a-zA-Z0-9\-]/.test(String.fromCharCode(t))?1:0),Gi={" ":1,"&&":2,"||":3,"|":4};function Gt(e){return e.substringToPos(e.findWsEnd(e.pos))}function Ve(e){let t=e.pos;for(;t<e.str.length;t++){let r=e.str.charCodeAt(t);if(r>=128||ht[r]===0)break}return e.pos===t&&e.error("Expect a keyword"),e.substringToPos(t)}function Vt(e){let t=e.pos;for(;t<e.str.length;t++){let r=e.str.charCodeAt(t);if(r<48||r>57)break}return e.pos===t&&e.error("Expect a number"),e.substringToPos(t)}function Ul(e){let t=e.str.indexOf("'",e.pos+1);return t===-1&&(e.pos=e.str.length,e.error("Expect an apostrophe")),e.substringToPos(t+1)}function Vi(e){let t=null,r=null;return e.eat(Yt),t=Vt(e),e.charCode()===Fr?(e.pos++,e.charCode()!==Hi&&(r=Vt(e))):r=t,e.eat(Hi),{min:Number(t),max:r?Number(r):0}}function jl(e){let t=null,r=!1;switch(e.charCode()){case Xi:e.pos++,t={min:0,max:0};break;case Rr:e.pos++,t={min:1,max:0};break;case zr:e.pos++,t={min:0,max:1};break;case Mr:e.pos++,r=!0,e.charCode()===Yt?t=Vi(e):e.charCode()===zr?(e.pos++,t={min:0,max:0}):t={min:1,max:0};break;case Yt:t=Vi(e);break;default:return null}return{type:"Multiplier",comma:r,min:t.min,max:t.max,term:null}}function Ke(e,t){let r=jl(e);return r!==null?(r.term=t,e.charCode()===Mr&&e.charCodeAt(e.pos-1)===Rr?Ke(e,r):r):t}function Nr(e){let t=e.peek();return t===""?null:{type:"Token",value:t}}function Wl(e){let t;return e.eat(Br),e.eat(Ht),t=Ve(e),e.eat(Ht),e.eat($i),Ke(e,{type:"Property",name:t})}function Hl(e){let t=null,r=null,n=1;return e.eat(Kt),e.charCode()===ji&&(e.peek(),n=-1),n==-1&&e.charCode()===Yi?e.peek():(t=n*Number(Vt(e)),ht[e.charCode()]!==0&&(t+=Ve(e))),Gt(e),e.eat(Fr),Gt(e),e.charCode()===Yi?e.peek():(n=1,e.charCode()===ji&&(e.peek(),n=-1),r=n*Number(Vt(e)),ht[e.charCode()]!==0&&(r+=Ve(e))),e.eat(_r),{type:"Range",min:t,max:r}}function Yl(e){let t,r=null;return e.eat(Br),t=Ve(e),e.charCode()===Qi&&e.nextCharCode()===_l&&(e.pos+=2,t+="()"),e.charCodeAt(e.findWsEnd(e.pos))===Kt&&(Gt(e),r=Hl(e)),e.eat($i),Ke(e,{type:"Type",name:t,opts:r})}function Gl(e){let t=Ve(e);return e.charCode()===Qi?(e.pos++,{type:"Function",name:t}):Ke(e,{type:"Keyword",name:t})}function Vl(e,t){function r(o,i){return{type:"Group",terms:o,combinator:i,disallowEmpty:!1,explicit:!1}}let n;for(t=Object.keys(t).sort((o,i)=>Gi[o]-Gi[i]);t.length>0;){n=t.shift();let o=0,i=0;for(;o<e.length;o++){let s=e[o];s.type==="Combinator"&&(s.value===n?(i===-1&&(i=o-1),e.splice(o,1),o--):(i!==-1&&o-i>1&&(e.splice(i,o-i,r(e.slice(i,o),n)),o=i+1),i=-1))}i!==-1&&t.length&&e.splice(i,o-i,r(e.slice(i,o),n))}return n}function Zi(e){let t=[],r={},n,o=null,i=e.pos;for(;n=Ql(e);)n.type!=="Spaces"&&(n.type==="Combinator"?((o===null||o.type==="Combinator")&&(e.pos=i,e.error("Unexpected combinator")),r[n.value]=!0):o!==null&&o.type!=="Combinator"&&(r[" "]=!0,t.push({type:"Combinator",value:" "})),t.push(n),o=n,i=e.pos);return o!==null&&o.type==="Combinator"&&(e.pos-=i,e.error("Unexpected combinator")),{type:"Group",terms:t,combinator:Vl(t,r)||" ",disallowEmpty:!1,explicit:!1}}function Kl(e){let t;return e.eat(Kt),t=Zi(e),e.eat(_r),t.explicit=!0,e.charCode()===Ki&&(e.pos++,t.disallowEmpty=!0),t}function Ql(e){let t=e.charCode();if(t<128&&ht[t]===1)return Gl(e);switch(t){case _r:break;case Kt:return Ke(e,Kl(e));case Br:return e.nextCharCode()===Ht?Wl(e):Yl(e);case Wi:return{type:"Combinator",value:e.substringToPos(e.pos+(e.nextCharCode()===Wi?2:1))};case Ui:return e.pos++,e.eat(Ui),{type:"Combinator",value:"&&"};case Fr:return e.pos++,{type:"Comma"};case Ht:return Ke(e,{type:"String",value:Ul(e)});case Bl:case zl:case Ml:case Fl:case Rl:return{type:"Spaces",value:Gt(e)};case ql:return t=e.nextCharCode(),t<128&&ht[t]===1?(e.pos++,{type:"AtKeyword",name:Ve(e)}):Nr(e);case Xi:case Rr:case zr:case Mr:case Ki:break;case Yt:if(t=e.nextCharCode(),t<48||t>57)return Nr(e);break;default:return Nr(e)}}function Qe(e){let t=new Wt(e),r=Zi(t);return t.pos!==e.length&&t.error("Unexpected input"),r.terms.length===1&&r.terms[0].type==="Group"?r.terms[0]:r}var mt=function(){};function Ji(e){return typeof e=="function"?e:mt}function Qt(e,t,r){function n(s){switch(o.call(r,s),s.type){case"Group":s.terms.forEach(n);break;case"Multiplier":n(s.term);break;case"Type":case"Property":case"Keyword":case"AtKeyword":case"Function":case"String":case"Token":case"Comma":break;default:throw new Error("Unknown type: "+s.type)}i.call(r,s)}let o=mt,i=mt;if(typeof t=="function"?o=t:t&&(o=Ji(t.enter),i=Ji(t.leave)),o===mt&&i===mt)throw new Error("Neither `enter` nor `leave` walker handler is set or both aren't a function");n(e,r)}var Xl={decorator(e){let t=[],r=null;return{...e,node(n){let o=r;r=n,e.node.call(this,n),r=o},emit(n,o,i){t.push({type:o,value:n,node:i?null:r})},result(){return t}}}};function $l(e){let t=[];return ve(e,(r,n,o)=>t.push({type:r,value:e.slice(n,o),node:null})),t}function ea(e,t){return typeof e=="string"?$l(e):t.generate(e,Xl)}var C={type:"Match"},L={type:"Mismatch"},Xt={type:"DisallowEmpty"},Zl=40,Jl=41;function Z(e,t,r){return t===C&&r===L||e===C&&t===C&&r===C?e:(e.type==="If"&&e.else===L&&t===C&&(t=e.then,e=e.match),{type:"If",match:e,then:t,else:r})}function ra(e){return e.length>2&&e.charCodeAt(e.length-2)===Zl&&e.charCodeAt(e.length-1)===Jl}function ta(e){return e.type==="Keyword"||e.type==="AtKeyword"||e.type==="Function"||e.type==="Type"&&ra(e.name)}function Ur(e,t,r){switch(e){case" ":{let n=C;for(let o=t.length-1;o>=0;o--){let i=t[o];n=Z(i,n,L)}return n}case"|":{let n=L,o=null;for(let i=t.length-1;i>=0;i--){let s=t[i];if(ta(s)&&(o===null&&i>0&&ta(t[i-1])&&(o=Object.create(null),n=Z({type:"Enum",map:o},C,n)),o!==null)){let u=(ra(s.name)?s.name.slice(0,-1):s.name).toLowerCase();if(!(u in o)){o[u]=s;continue}}o=null,n=Z(s,C,n)}return n}case"&&":{if(t.length>5)return{type:"MatchOnce",terms:t,all:!0};let n=L;for(let o=t.length-1;o>=0;o--){let i=t[o],s;t.length>1?s=Ur(e,t.filter(function(u){return u!==i}),!1):s=C,n=Z(i,s,n)}return n}case"||":{if(t.length>5)return{type:"MatchOnce",terms:t,all:!1};let n=r?C:L;for(let o=t.length-1;o>=0;o--){let i=t[o],s;t.length>1?s=Ur(e,t.filter(function(u){return u!==i}),!0):s=C,n=Z(i,s,n)}return n}}}function ec(e){let t=C,r=jr(e.term);if(e.max===0)r=Z(r,Xt,L),t=Z(r,null,L),t.then=Z(C,C,t),e.comma&&(t.then.else=Z({type:"Comma",syntax:e},t,L));else for(let n=e.min||1;n<=e.max;n++)e.comma&&t!==C&&(t=Z({type:"Comma",syntax:e},t,L)),t=Z(r,Z(C,C,t),L);if(e.min===0)t=Z(C,C,t);else for(let n=0;n<e.min-1;n++)e.comma&&t!==C&&(t=Z({type:"Comma",syntax:e},t,L)),t=Z(r,t,L);return t}function jr(e){if(typeof e=="function")return{type:"Generic",fn:e};switch(e.type){case"Group":{let t=Ur(e.combinator,e.terms.map(jr),!1);return e.disallowEmpty&&(t=Z(t,Xt,L)),t}case"Multiplier":return ec(e);case"Type":case"Property":return{type:e.type,name:e.name,syntax:e};case"Keyword":return{type:e.type,name:e.name.toLowerCase(),syntax:e};case"AtKeyword":return{type:e.type,name:"@"+e.name.toLowerCase(),syntax:e};case"Function":return{type:e.type,name:e.name.toLowerCase()+"(",syntax:e};case"String":return e.value.length===3?{type:"Token",value:e.value.charAt(1),syntax:e}:{type:e.type,value:e.value.substr(1,e.value.length-2).replace(/\\'/g,"'"),syntax:e};case"Token":return{type:e.type,value:e.value,syntax:e};case"Comma":return{type:e.type,syntax:e};default:throw new Error("Unknown node type:",e.type)}}function $t(e,t){return typeof e=="string"&&(e=Qe(e)),{type:"MatchGraph",match:jr(e),syntax:t||null,source:e}}var{hasOwnProperty:na}=Object.prototype,tc=0,rc=1,Hr=2,la=3,oa="Match",nc="Mismatch",oc="Maximum iteration number exceeded (please fill an issue on https://github.com/csstree/csstree/issues)",ia=15e3,ic=0;function ac(e){let t=null,r=null,n=e;for(;n!==null;)r=n.prev,n.prev=t,t=n,n=r;return t}function Wr(e,t){if(e.length!==t.length)return!1;for(let r=0;r<e.length;r++){let n=t.charCodeAt(r),o=e.charCodeAt(r);if(o>=65&&o<=90&&(o=o|32),o!==n)return!1}return!0}function sc(e){return e.type!==9?!1:e.value!=="?"}function aa(e){return e===null?!0:e.type===18||e.type===2||e.type===21||e.type===19||e.type===23||sc(e)}function sa(e){return e===null?!0:e.type===22||e.type===20||e.type===24||e.type===9&&e.value==="/"}function lc(e,t,r){function n(){do R++,S=R<e.length?e[R]:null;while(S!==null&&(S.type===13||S.type===25))}function o(ae){let fe=R+ae;return fe<e.length?e[fe]:null}function i(ae,fe){return{nextState:ae,matchStack:z,syntaxStack:p,thenStack:m,tokenIndex:R,prev:fe}}function s(ae){m={nextState:ae,matchStack:z,syntaxStack:p,prev:m}}function u(ae){f=i(ae,f)}function c(){z={type:rc,syntax:t.syntax,token:S,prev:z},n(),P=null,R>ke&&(ke=R)}function a(){p={syntax:t.syntax,opts:t.syntax.opts||p!==null&&p.opts||null,prev:p},z={type:Hr,syntax:t.syntax,token:z.token,prev:z}}function l(){z.type===Hr?z=z.prev:z={type:la,syntax:p.syntax,token:z.token,prev:z},p=p.prev}let p=null,m=null,f=null,P=null,te=0,X=null,S=null,R=-1,ke=0,z={type:tc,syntax:null,token:null,prev:null};for(n();X===null&&++te<ia;)switch(t.type){case"Match":if(m===null){if(S!==null&&(R!==e.length-1||S.value!=="\\0"&&S.value!=="\\9")){t=L;break}X=oa;break}if(t=m.nextState,t===Xt)if(m.matchStack===z){t=L;break}else t=C;for(;m.syntaxStack!==p;)l();m=m.prev;break;case"Mismatch":if(P!==null&&P!==!1)(f===null||R>f.tokenIndex)&&(f=P,P=!1);else if(f===null){X=nc;break}t=f.nextState,m=f.thenStack,p=f.syntaxStack,z=f.matchStack,R=f.tokenIndex,S=R<e.length?e[R]:null,f=f.prev;break;case"MatchGraph":t=t.match;break;case"If":t.else!==L&&u(t.else),t.then!==C&&s(t.then),t=t.match;break;case"MatchOnce":t={type:"MatchOnceBuffer",syntax:t,index:0,mask:0};break;case"MatchOnceBuffer":{let Q=t.syntax.terms;if(t.index===Q.length){if(t.mask===0||t.syntax.all){t=L;break}t=C;break}if(t.mask===(1<<Q.length)-1){t=C;break}for(;t.index<Q.length;t.index++){let J=1<<t.index;if((t.mask&J)===0){u(t),s({type:"AddMatchOnce",syntax:t.syntax,mask:t.mask|J}),t=Q[t.index++];break}}break}case"AddMatchOnce":t={type:"MatchOnceBuffer",syntax:t.syntax,index:0,mask:t.mask};break;case"Enum":if(S!==null){let Q=S.value.toLowerCase();if(Q.indexOf("\\")!==-1&&(Q=Q.replace(/\\[09].*$/,"")),na.call(t.map,Q)){t=t.map[Q];break}}t=L;break;case"Generic":{let Q=p!==null?p.opts:null,J=R+Math.floor(t.fn(S,o,Q));if(!isNaN(J)&&J>R){for(;R<J;)c();t=C}else t=L;break}case"Type":case"Property":{let Q=t.type==="Type"?"types":"properties",J=na.call(r,Q)?r[Q][t.name]:null;if(!J||!J.match)throw new Error("Bad syntax reference: "+(t.type==="Type"?"<"+t.name+">":"<'"+t.name+"'>"));if(P!==!1&&S!==null&&t.type==="Type"&&(t.name==="custom-ident"&&S.type===1||t.name==="length"&&S.value==="0")){P===null&&(P=i(t,f)),t=L;break}a(),t=J.match;break}case"Keyword":{let Q=t.name;if(S!==null){let J=S.value;if(J.indexOf("\\")!==-1&&(J=J.replace(/\\[09].*$/,"")),Wr(J,Q)){c(),t=C;break}}t=L;break}case"AtKeyword":case"Function":if(S!==null&&Wr(S.value,t.name)){c(),t=C;break}t=L;break;case"Token":if(S!==null&&S.value===t.value){c(),t=C;break}t=L;break;case"Comma":S!==null&&S.type===18?aa(z.token)?t=L:(c(),t=sa(S)?L:C):t=aa(z.token)||sa(S)?C:L;break;case"String":let ae="",fe=R;for(;fe<e.length&&ae.length<t.value.length;fe++)ae+=e[fe].value;if(Wr(ae,t.value)){for(;R<fe;)c();t=C}else t=L;break;default:throw new Error("Unknown node type: "+t.type)}switch(ic+=te,X){case null:console.warn("[csstree-match] BREAK after "+ia+" iterations"),X=oc,z=null;break;case oa:for(;p!==null;)l();break;default:z=null}return{tokens:e,reason:X,iterations:te,match:z,longestMatch:ke}}function Yr(e,t,r){let n=lc(e,t,r||{});if(n.match===null)return n;let o=n.match,i=n.match={syntax:t.syntax||null,match:[]},s=[i];for(o=ac(o).prev;o!==null;){switch(o.type){case Hr:i.match.push(i={syntax:o.syntax,match:[]}),s.push(i);break;case la:s.pop(),i=s[s.length-1];break;default:i.match.push({syntax:o.syntax||null,token:o.token.value,node:o.token.node})}o=o.prev}return n}var Vr={};b(Vr,{getTrace:()=>ca,isKeyword:()=>pc,isProperty:()=>uc,isType:()=>cc});function ca(e){function t(o){return o===null?!1:o.type==="Type"||o.type==="Property"||o.type==="Keyword"}function r(o){if(Array.isArray(o.match)){for(let i=0;i<o.match.length;i++)if(r(o.match[i]))return t(o.syntax)&&n.unshift(o.syntax),!0}else if(o.node===e)return n=t(o.syntax)?[o.syntax]:[],!0;return!1}let n=null;return this.matched!==null&&r(this.matched),n}function cc(e,t){return Gr(this,e,r=>r.type==="Type"&&r.name===t)}function uc(e,t){return Gr(this,e,r=>r.type==="Property"&&r.name===t)}function pc(e){return Gr(this,e,t=>t.type==="Keyword")}function Gr(e,t,r){let n=ca.call(e,t);return n===null?!1:n.some(r)}function ua(e){return"node"in e?e.node:ua(e.match[0])}function pa(e){return"node"in e?e.node:pa(e.match[e.match.length-1])}function Kr(e,t,r,n,o){function i(u){if(u.syntax!==null&&u.syntax.type===n&&u.syntax.name===o){let c=ua(u),a=pa(u);e.syntax.walk(t,function(l,p,m){if(l===c){let f=new D;do{if(f.appendData(p.data),p.data===a)break;p=p.next}while(p!==null);s.push({parent:m,nodes:f})}})}Array.isArray(u.match)&&u.match.forEach(i)}let s=[];return r.matched!==null&&i(r.matched),s}var{hasOwnProperty:ft}=Object.prototype;function Qr(e){return typeof e=="number"&&isFinite(e)&&Math.floor(e)===e&&e>=0}function ha(e){return Boolean(e)&&Qr(e.offset)&&Qr(e.line)&&Qr(e.column)}function hc(e,t){return function(n,o){if(!n||n.constructor!==Object)return o(n,"Type of node should be an Object");for(let i in n){let s=!0;if(ft.call(n,i)!==!1){if(i==="type")n.type!==e&&o(n,"Wrong node type `"+n.type+"`, expected `"+e+"`");else if(i==="loc"){if(n.loc===null)continue;if(n.loc&&n.loc.constructor===Object)if(typeof n.loc.source!="string")i+=".source";else if(!ha(n.loc.start))i+=".start";else if(!ha(n.loc.end))i+=".end";else continue;s=!1}else if(t.hasOwnProperty(i)){s=!1;for(let u=0;!s&&u<t[i].length;u++){let c=t[i][u];switch(c){case String:s=typeof n[i]=="string";break;case Boolean:s=typeof n[i]=="boolean";break;case null:s=n[i]===null;break;default:typeof c=="string"?s=n[i]&&n[i].type===c:Array.isArray(c)&&(s=n[i]instanceof D)}}}else o(n,"Unknown field `"+i+"` for "+e+" node type");s||o(n,"Bad value for `"+e+"."+i+"`")}}for(let i in t)ft.call(t,i)&&ft.call(n,i)===!1&&o(n,"Field `"+e+"."+i+"` is missed")}}function mc(e,t){let r=t.structure,n={type:String,loc:!0},o={type:'"'+e+'"'};for(let i in r){if(ft.call(r,i)===!1)continue;let s=[],u=n[i]=Array.isArray(r[i])?r[i].slice():[r[i]];for(let c=0;c<u.length;c++){let a=u[c];if(a===String||a===Boolean)s.push(a.name);else if(a===null)s.push("null");else if(typeof a=="string")s.push("<"+a+">");else if(Array.isArray(a))s.push("List");else throw new Error("Wrong value `"+a+"` in `"+e+"."+i+"` structure definition")}o[i]=s.join(" | ")}return{docs:o,check:hc(e,n)}}function ma(e){let t={};if(e.node){for(let r in e.node)if(ft.call(e.node,r)){let n=e.node[r];if(n.structure)t[r]=mc(r,n);else throw new Error("Missed `structure` field in `"+r+"` node type definition")}}return t}var fc=$t(Bt.join(" | "));function Xr(e,t,r){let n={};for(let o in e)e[o].syntax&&(n[o]=r?e[o].syntax:Ie(e[o].syntax,{compact:t}));return n}function dc(e,t,r){let n={};for(let[o,i]of Object.entries(e))n[o]={prelude:i.prelude&&(r?i.prelude.syntax:Ie(i.prelude.syntax,{compact:t})),descriptors:i.descriptors&&Xr(i.descriptors,t,r)};return n}function gc(e){for(let t=0;t<e.length;t++)if(e[t].value.toLowerCase()==="var(")return!0;return!1}function ce(e,t,r){return{matched:e,iterations:r,error:t,...Vr}}function Xe(e,t,r,n){let o=ea(r,e.syntax),i;return gc(o)?ce(null,new Error("Matching for a tree with var() is not supported")):(n&&(i=Yr(o,e.cssWideKeywordsSyntax,e)),(!n||!i.match)&&(i=Yr(o,t.match,e),!i.match)?ce(null,new Ni(i.reason,t.syntax,r,i),i.iterations):ce(i.match,null,i.iterations))}var De=class{constructor(t,r,n){if(this.cssWideKeywordsSyntax=fc,this.syntax=r,this.generic=!1,this.units={...Ut},this.atrules=Object.create(null),this.properties=Object.create(null),this.types=Object.create(null),this.structure=n||ma(t),t){if(t.units)for(let o of Object.keys(Ut))Array.isArray(t.units[o])&&(this.units[o]=t.units[o]);if(t.types)for(let o in t.types)this.addType_(o,t.types[o]);if(t.generic){this.generic=!0;for(let[o,i]of Object.entries(qi(this.units)))this.addType_(o,i)}if(t.atrules)for(let o in t.atrules)this.addAtrule_(o,t.atrules[o]);if(t.properties)for(let o in t.properties)this.addProperty_(o,t.properties[o])}}checkStructure(t){function r(i,s){o.push({node:i,message:s})}let n=this.structure,o=[];return this.syntax.walk(t,function(i){n.hasOwnProperty(i.type)?n[i.type].check(i,r):r(i,"Unknown node type `"+i.type+"`")}),o.length?o:!1}createDescriptor(t,r,n,o=null){let i={type:r,name:n},s={type:r,name:n,parent:o,serializable:typeof t=="string"||t&&typeof t.type=="string",syntax:null,match:null};return typeof t=="function"?s.match=$t(t,i):(typeof t=="string"?Object.defineProperty(s,"syntax",{get(){return Object.defineProperty(s,"syntax",{value:Qe(t)}),s.syntax}}):s.syntax=t,Object.defineProperty(s,"match",{get(){return Object.defineProperty(s,"match",{value:$t(s.syntax,i)}),s.match}})),s}addAtrule_(t,r){!r||(this.atrules[t]={type:"Atrule",name:t,prelude:r.prelude?this.createDescriptor(r.prelude,"AtrulePrelude",t):null,descriptors:r.descriptors?Object.keys(r.descriptors).reduce((n,o)=>(n[o]=this.createDescriptor(r.descriptors[o],"AtruleDescriptor",o,t),n),Object.create(null)):null})}addProperty_(t,r){!r||(this.properties[t]=this.createDescriptor(r,"Property",t))}addType_(t,r){!r||(this.types[t]=this.createDescriptor(r,"Type",t))}checkAtruleName(t){if(!this.getAtrule(t))return new He("Unknown at-rule","@"+t)}checkAtrulePrelude(t,r){let n=this.checkAtruleName(t);if(n)return n;let o=this.getAtrule(t);if(!o.prelude&&r)return new SyntaxError("At-rule `@"+t+"` should not contain a prelude");if(o.prelude&&!r&&!Xe(this,o.prelude,"",!1).matched)return new SyntaxError("At-rule `@"+t+"` should contain a prelude")}checkAtruleDescriptorName(t,r){let n=this.checkAtruleName(t);if(n)return n;let o=this.getAtrule(t),i=st(r);if(!o.descriptors)return new SyntaxError("At-rule `@"+t+"` has no known descriptors");if(!o.descriptors[i.name]&&!o.descriptors[i.basename])return new He("Unknown at-rule descriptor",r)}checkPropertyName(t){if(!this.getProperty(t))return new He("Unknown property",t)}matchAtrulePrelude(t,r){let n=this.checkAtrulePrelude(t,r);if(n)return ce(null,n);let o=this.getAtrule(t);return o.prelude?Xe(this,o.prelude,r||"",!1):ce(null,null)}matchAtruleDescriptor(t,r,n){let o=this.checkAtruleDescriptorName(t,r);if(o)return ce(null,o);let i=this.getAtrule(t),s=st(r);return Xe(this,i.descriptors[s.name]||i.descriptors[s.basename],n,!1)}matchDeclaration(t){return t.type!=="Declaration"?ce(null,new Error("Not a Declaration node")):this.matchProperty(t.property,t.value)}matchProperty(t,r){if(Ft(t).custom)return ce(null,new Error("Lexer matching doesn't applicable for custom properties"));let n=this.checkPropertyName(t);return n?ce(null,n):Xe(this,this.getProperty(t),r,!0)}matchType(t,r){let n=this.getType(t);return n?Xe(this,n,r,!1):ce(null,new He("Unknown type",t))}match(t,r){return typeof t!="string"&&(!t||!t.type)?ce(null,new He("Bad syntax")):((typeof t=="string"||!t.match)&&(t=this.createDescriptor(t,"Type","anonymous")),Xe(this,t,r,!1))}findValueFragments(t,r,n,o){return Kr(this,r,this.matchProperty(t,r),n,o)}findDeclarationValueFragments(t,r,n){return Kr(this,t.value,this.matchDeclaration(t),r,n)}findAllFragments(t,r,n){let o=[];return this.syntax.walk(t,{visit:"Declaration",enter:i=>{o.push.apply(o,this.findDeclarationValueFragments(i,r,n))}}),o}getAtrule(t,r=!0){let n=st(t);return(n.vendor&&r?this.atrules[n.name]||this.atrules[n.basename]:this.atrules[n.name])||null}getAtrulePrelude(t,r=!0){let n=this.getAtrule(t,r);return n&&n.prelude||null}getAtruleDescriptor(t,r){return this.atrules.hasOwnProperty(t)&&this.atrules.declarators&&this.atrules[t].declarators[r]||null}getProperty(t,r=!0){let n=Ft(t);return(n.vendor&&r?this.properties[n.name]||this.properties[n.basename]:this.properties[n.name])||null}getType(t){return hasOwnProperty.call(this.types,t)?this.types[t]:null}validate(){function t(o,i,s,u){if(s.has(i))return s.get(i);s.set(i,!1),u.syntax!==null&&Qt(u.syntax,function(c){if(c.type!=="Type"&&c.type!=="Property")return;let a=c.type==="Type"?o.types:o.properties,l=c.type==="Type"?r:n;(!hasOwnProperty.call(a,c.name)||t(o,c.name,l,a[c.name]))&&s.set(i,!0)},this)}let r=new Map,n=new Map;for(let o in this.types)t(this,o,r,this.types[o]);for(let o in this.properties)t(this,o,n,this.properties[o]);return r=[...r.keys()].filter(o=>r.get(o)),n=[...n.keys()].filter(o=>n.get(o)),r.length||n.length?{types:r,properties:n}:null}dump(t,r){return{generic:this.generic,units:this.units,types:Xr(this.types,!r,t),properties:Xr(this.properties,!r,t),atrules:dc(this.atrules,!r,t)}}toString(){return JSON.stringify(this.dump())}};function $r(e,t){return typeof t=="string"&&/^\s*\|/.test(t)?typeof e=="string"?e+t:t.replace(/^\s*\|\s*/,""):t||null}function fa(e,t){let r=Object.create(null);for(let[n,o]of Object.entries(e))if(o){r[n]={};for(let i of Object.keys(o))t.includes(i)&&(r[n][i]=o[i])}return r}function dt(e,t){let r={...e};for(let[n,o]of Object.entries(t))switch(n){case"generic":r[n]=Boolean(o);break;case"units":r[n]={...e[n]};for(let[i,s]of Object.entries(o))r[n][i]=Array.isArray(s)?s:[];break;case"atrules":r[n]={...e[n]};for(let[i,s]of Object.entries(o)){let u=r[n][i]||{},c=r[n][i]={prelude:u.prelude||null,descriptors:{...u.descriptors}};if(!!s){c.prelude=s.prelude?$r(c.prelude,s.prelude):c.prelude||null;for(let[a,l]of Object.entries(s.descriptors||{}))c.descriptors[a]=l?$r(c.descriptors[a],l):null;Object.keys(c.descriptors).length||(c.descriptors=null)}}break;case"types":case"properties":r[n]={...e[n]};for(let[i,s]of Object.entries(o))r[n][i]=$r(r[n][i],s);break;case"scope":r[n]={...e[n]};for(let[i,s]of Object.entries(o))r[n][i]={...r[n][i],...s};break;case"parseContext":r[n]={...e[n],...o};break;case"atrule":case"pseudo":r[n]={...e[n],...fa(o,["parse"])};break;case"node":r[n]={...e[n],...fa(o,["name","structure","parse","generate","walkContext"])};break}return r}function da(e){let t=ei(e),r=Di(e),n=Ai(e),{fromPlainObject:o,toPlainObject:i}=Ti(r),s={lexer:null,createLexer:u=>new De(u,s,s.lexer.structure),tokenize:ve,parse:t,generate:n,walk:r,find:r.find,findLast:r.findLast,findAll:r.findAll,fromPlainObject:o,toPlainObject:i,fork(u){let c=dt({},e);return da(typeof u=="function"?u(c,Object.assign):dt(c,u))}};return s.lexer=new De({generic:!0,units:e.units,types:e.types,atrules:e.atrules,properties:e.properties,node:e.node},s),s}var Zt=e=>da(dt({},e));var ga={generic:!0,units:{angle:["deg","grad","rad","turn"],decibel:["db"],flex:["fr"],frequency:["hz","khz"],length:["cm","mm","q","in","pt","pc","px","em","rem","ex","rex","cap","rcap","ch","rch","ic","ric","lh","rlh","vw","svw","lvw","dvw","vh","svh","lvh","dvh","vi","svi","lvi","dvi","vb","svb","lvb","dvb","vmin","svmin","lvmin","dvmin","vmax","svmax","lvmax","dvmax","cqw","cqh","cqi","cqb","cqmin","cqmax"],resolution:["dpi","dpcm","dppx","x"],semitones:["st"],time:["s","ms"]},types:{"abs()":"abs( <calc-sum> )","absolute-size":"xx-small|x-small|small|medium|large|x-large|xx-large|xxx-large","acos()":"acos( <calc-sum> )","alpha-value":"<number>|<percentage>","angle-percentage":"<angle>|<percentage>","angular-color-hint":"<angle-percentage>","angular-color-stop":"<color>&&<color-stop-angle>?","angular-color-stop-list":"[<angular-color-stop> [, <angular-color-hint>]?]# , <angular-color-stop>","animateable-feature":"scroll-position|contents|<custom-ident>","asin()":"asin( <calc-sum> )","atan()":"atan( <calc-sum> )","atan2()":"atan2( <calc-sum> , <calc-sum> )",attachment:"scroll|fixed|local","attr()":"attr( <attr-name> <type-or-unit>? [, <attr-fallback>]? )","attr-matcher":"['~'|'|'|'^'|'$'|'*']? '='","attr-modifier":"i|s","attribute-selector":"'[' <wq-name> ']'|'[' <wq-name> <attr-matcher> [<string-token>|<ident-token>] <attr-modifier>? ']'","auto-repeat":"repeat( [auto-fill|auto-fit] , [<line-names>? <fixed-size>]+ <line-names>? )","auto-track-list":"[<line-names>? [<fixed-size>|<fixed-repeat>]]* <line-names>? <auto-repeat> [<line-names>? [<fixed-size>|<fixed-repeat>]]* <line-names>?",axis:"block|inline|vertical|horizontal","baseline-position":"[first|last]? baseline","basic-shape":"<inset()>|<circle()>|<ellipse()>|<polygon()>|<path()>","bg-image":"none|<image>","bg-layer":"<bg-image>||<bg-position> [/ <bg-size>]?||<repeat-style>||<attachment>||<box>||<box>","bg-position":"[[left|center|right|top|bottom|<length-percentage>]|[left|center|right|<length-percentage>] [top|center|bottom|<length-percentage>]|[center|[left|right] <length-percentage>?]&&[center|[top|bottom] <length-percentage>?]]","bg-size":"[<length-percentage>|auto]{1,2}|cover|contain","blur()":"blur( <length> )","blend-mode":"normal|multiply|screen|overlay|darken|lighten|color-dodge|color-burn|hard-light|soft-light|difference|exclusion|hue|saturation|color|luminosity",box:"border-box|padding-box|content-box","brightness()":"brightness( <number-percentage> )","calc()":"calc( <calc-sum> )","calc-sum":"<calc-product> [['+'|'-'] <calc-product>]*","calc-product":"<calc-value> ['*' <calc-value>|'/' <number>]*","calc-value":"<number>|<dimension>|<percentage>|<calc-constant>|( <calc-sum> )","calc-constant":"e|pi|infinity|-infinity|NaN","cf-final-image":"<image>|<color>","cf-mixing-image":"<percentage>?&&<image>","circle()":"circle( [<shape-radius>]? [at <position>]? )","clamp()":"clamp( <calc-sum>#{3} )","class-selector":"'.' <ident-token>","clip-source":"<url>",color:"<rgb()>|<rgba()>|<hsl()>|<hsla()>|<hwb()>|<lab()>|<lch()>|<hex-color>|<named-color>|currentcolor|<deprecated-system-color>","color-stop":"<color-stop-length>|<color-stop-angle>","color-stop-angle":"<angle-percentage>{1,2}","color-stop-length":"<length-percentage>{1,2}","color-stop-list":"[<linear-color-stop> [, <linear-color-hint>]?]# , <linear-color-stop>",combinator:"'>'|'+'|'~'|['||']","common-lig-values":"[common-ligatures|no-common-ligatures]","compat-auto":"searchfield|textarea|push-button|slider-horizontal|checkbox|radio|square-button|menulist|listbox|meter|progress-bar|button","composite-style":"clear|copy|source-over|source-in|source-out|source-atop|destination-over|destination-in|destination-out|destination-atop|xor","compositing-operator":"add|subtract|intersect|exclude","compound-selector":"[<type-selector>? <subclass-selector>* [<pseudo-element-selector> <pseudo-class-selector>*]*]!","compound-selector-list":"<compound-selector>#","complex-selector":"<compound-selector> [<combinator>? <compound-selector>]*","complex-selector-list":"<complex-selector>#","conic-gradient()":"conic-gradient( [from <angle>]? [at <position>]? , <angular-color-stop-list> )","contextual-alt-values":"[contextual|no-contextual]","content-distribution":"space-between|space-around|space-evenly|stretch","content-list":"[<string>|contents|<image>|<counter>|<quote>|<target>|<leader()>|<attr()>]+","content-position":"center|start|end|flex-start|flex-end","content-replacement":"<image>","contrast()":"contrast( [<number-percentage>] )","cos()":"cos( <calc-sum> )",counter:"<counter()>|<counters()>","counter()":"counter( <counter-name> , <counter-style>? )","counter-name":"<custom-ident>","counter-style":"<counter-style-name>|symbols( )","counter-style-name":"<custom-ident>","counters()":"counters( <counter-name> , <string> , <counter-style>? )","cross-fade()":"cross-fade( <cf-mixing-image> , <cf-final-image>? )","cubic-bezier-timing-function":"ease|ease-in|ease-out|ease-in-out|cubic-bezier( <number [0,1]> , <number> , <number [0,1]> , <number> )","deprecated-system-color":"ActiveBorder|ActiveCaption|AppWorkspace|Background|ButtonFace|ButtonHighlight|ButtonShadow|ButtonText|CaptionText|GrayText|Highlight|HighlightText|InactiveBorder|InactiveCaption|InactiveCaptionText|InfoBackground|InfoText|Menu|MenuText|Scrollbar|ThreeDDarkShadow|ThreeDFace|ThreeDHighlight|ThreeDLightShadow|ThreeDShadow|Window|WindowFrame|WindowText","discretionary-lig-values":"[discretionary-ligatures|no-discretionary-ligatures]","display-box":"contents|none","display-inside":"flow|flow-root|table|flex|grid|ruby","display-internal":"table-row-group|table-header-group|table-footer-group|table-row|table-cell|table-column-group|table-column|table-caption|ruby-base|ruby-text|ruby-base-container|ruby-text-container","display-legacy":"inline-block|inline-list-item|inline-table|inline-flex|inline-grid","display-listitem":"<display-outside>?&&[flow|flow-root]?&&list-item","display-outside":"block|inline|run-in","drop-shadow()":"drop-shadow( <length>{2,3} <color>? )","east-asian-variant-values":"[jis78|jis83|jis90|jis04|simplified|traditional]","east-asian-width-values":"[full-width|proportional-width]","element()":"element( <custom-ident> , [first|start|last|first-except]? )|element( <id-selector> )","ellipse()":"ellipse( [<shape-radius>{2}]? [at <position>]? )","ending-shape":"circle|ellipse","env()":"env( <custom-ident> , <declaration-value>? )","exp()":"exp( <calc-sum> )","explicit-track-list":"[<line-names>? <track-size>]+ <line-names>?","family-name":"<string>|<custom-ident>+","feature-tag-value":"<string> [<integer>|on|off]?","feature-type":"@stylistic|@historical-forms|@styleset|@character-variant|@swash|@ornaments|@annotation","feature-value-block":"<feature-type> '{' <feature-value-declaration-list> '}'","feature-value-block-list":"<feature-value-block>+","feature-value-declaration":"<custom-ident> : <integer>+ ;","feature-value-declaration-list":"<feature-value-declaration>","feature-value-name":"<custom-ident>","fill-rule":"nonzero|evenodd","filter-function":"<blur()>|<brightness()>|<contrast()>|<drop-shadow()>|<grayscale()>|<hue-rotate()>|<invert()>|<opacity()>|<saturate()>|<sepia()>","filter-function-list":"[<filter-function>|<url>]+","final-bg-layer":"<'background-color'>||<bg-image>||<bg-position> [/ <bg-size>]?||<repeat-style>||<attachment>||<box>||<box>","fixed-breadth":"<length-percentage>","fixed-repeat":"repeat( [<integer [1,\u221E]>] , [<line-names>? <fixed-size>]+ <line-names>? )","fixed-size":"<fixed-breadth>|minmax( <fixed-breadth> , <track-breadth> )|minmax( <inflexible-breadth> , <fixed-breadth> )","font-stretch-absolute":"normal|ultra-condensed|extra-condensed|condensed|semi-condensed|semi-expanded|expanded|extra-expanded|ultra-expanded|<percentage>","font-variant-css21":"[normal|small-caps]","font-weight-absolute":"normal|bold|<number [1,1000]>","frequency-percentage":"<frequency>|<percentage>","general-enclosed":"[<function-token> <any-value> )]|( <ident> <any-value> )","generic-family":"serif|sans-serif|cursive|fantasy|monospace|-apple-system","generic-name":"serif|sans-serif|cursive|fantasy|monospace","geometry-box":"<shape-box>|fill-box|stroke-box|view-box",gradient:"<linear-gradient()>|<repeating-linear-gradient()>|<radial-gradient()>|<repeating-radial-gradient()>|<conic-gradient()>|<repeating-conic-gradient()>|<-legacy-gradient>","grayscale()":"grayscale( <number-percentage> )","grid-line":"auto|<custom-ident>|[<integer>&&<custom-ident>?]|[span&&[<integer>||<custom-ident>]]","historical-lig-values":"[historical-ligatures|no-historical-ligatures]","hsl()":"hsl( <hue> <percentage> <percentage> [/ <alpha-value>]? )|hsl( <hue> , <percentage> , <percentage> , <alpha-value>? )","hsla()":"hsla( <hue> <percentage> <percentage> [/ <alpha-value>]? )|hsla( <hue> , <percentage> , <percentage> , <alpha-value>? )",hue:"<number>|<angle>","hue-rotate()":"hue-rotate( <angle> )","hwb()":"hwb( [<hue>|none] [<percentage>|none] [<percentage>|none] [/ [<alpha-value>|none]]? )","hypot()":"hypot( <calc-sum># )",image:"<url>|<image()>|<image-set()>|<element()>|<paint()>|<cross-fade()>|<gradient>","image()":"image( <image-tags>? [<image-src>? , <color>?]! )","image-set()":"image-set( <image-set-option># )","image-set-option":"[<image>|<string>] [<resolution>||type( <string> )]","image-src":"<url>|<string>","image-tags":"ltr|rtl","inflexible-breadth":"<length-percentage>|min-content|max-content|auto","inset()":"inset( <length-percentage>{1,4} [round <'border-radius'>]? )","invert()":"invert( <number-percentage> )","keyframes-name":"<custom-ident>|<string>","keyframe-block":"<keyframe-selector># { <declaration-list> }","keyframe-block-list":"<keyframe-block>+","keyframe-selector":"from|to|<percentage>","lab()":"lab( [<percentage>|<number>|none] [<percentage>|<number>|none] [<percentage>|<number>|none] [/ [<alpha-value>|none]]? )","layer()":"layer( <layer-name> )","layer-name":"<ident> ['.' <ident>]*","lch()":"lch( [<percentage>|<number>|none] [<percentage>|<number>|none] [<hue>|none] [/ [<alpha-value>|none]]? )","leader()":"leader( <leader-type> )","leader-type":"dotted|solid|space|<string>","length-percentage":"<length>|<percentage>","line-names":"'[' <custom-ident>* ']'","line-name-list":"[<line-names>|<name-repeat>]+","line-style":"none|hidden|dotted|dashed|solid|double|groove|ridge|inset|outset","line-width":"<length>|thin|medium|thick","linear-color-hint":"<length-percentage>","linear-color-stop":"<color> <color-stop-length>?","linear-gradient()":"linear-gradient( [<angle>|to <side-or-corner>]? , <color-stop-list> )","log()":"log( <calc-sum> , <calc-sum>? )","mask-layer":"<mask-reference>||<position> [/ <bg-size>]?||<repeat-style>||<geometry-box>||[<geometry-box>|no-clip]||<compositing-operator>||<masking-mode>","mask-position":"[<length-percentage>|left|center|right] [<length-percentage>|top|center|bottom]?","mask-reference":"none|<image>|<mask-source>","mask-source":"<url>","masking-mode":"alpha|luminance|match-source","matrix()":"matrix( <number>#{6} )","matrix3d()":"matrix3d( <number>#{16} )","max()":"max( <calc-sum># )","media-and":"<media-in-parens> [and <media-in-parens>]+","media-condition":"<media-not>|<media-and>|<media-or>|<media-in-parens>","media-condition-without-or":"<media-not>|<media-and>|<media-in-parens>","media-feature":"( [<mf-plain>|<mf-boolean>|<mf-range>] )","media-in-parens":"( <media-condition> )|<media-feature>|<general-enclosed>","media-not":"not <media-in-parens>","media-or":"<media-in-parens> [or <media-in-parens>]+","media-query":"<media-condition>|[not|only]? <media-type> [and <media-condition-without-or>]?","media-query-list":"<media-query>#","media-type":"<ident>","mf-boolean":"<mf-name>","mf-name":"<ident>","mf-plain":"<mf-name> : <mf-value>","mf-range":"<mf-name> ['<'|'>']? '='? <mf-value>|<mf-value> ['<'|'>']? '='? <mf-name>|<mf-value> '<' '='? <mf-name> '<' '='? <mf-value>|<mf-value> '>' '='? <mf-name> '>' '='? <mf-value>","mf-value":"<number>|<dimension>|<ident>|<ratio>","min()":"min( <calc-sum># )","minmax()":"minmax( [<length-percentage>|min-content|max-content|auto] , [<length-percentage>|<flex>|min-content|max-content|auto] )","mod()":"mod( <calc-sum> , <calc-sum> )","name-repeat":"repeat( [<integer [1,\u221E]>|auto-fill] , <line-names>+ )","named-color":"transparent|aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen|<-non-standard-color>","namespace-prefix":"<ident>","ns-prefix":"[<ident-token>|'*']? '|'","number-percentage":"<number>|<percentage>","numeric-figure-values":"[lining-nums|oldstyle-nums]","numeric-fraction-values":"[diagonal-fractions|stacked-fractions]","numeric-spacing-values":"[proportional-nums|tabular-nums]",nth:"<an-plus-b>|even|odd","opacity()":"opacity( [<number-percentage>] )","overflow-position":"unsafe|safe","outline-radius":"<length>|<percentage>","page-body":"<declaration>? [; <page-body>]?|<page-margin-box> <page-body>","page-margin-box":"<page-margin-box-type> '{' <declaration-list> '}'","page-margin-box-type":"@top-left-corner|@top-left|@top-center|@top-right|@top-right-corner|@bottom-left-corner|@bottom-left|@bottom-center|@bottom-right|@bottom-right-corner|@left-top|@left-middle|@left-bottom|@right-top|@right-middle|@right-bottom","page-selector-list":"[<page-selector>#]?","page-selector":"<pseudo-page>+|<ident> <pseudo-page>*","page-size":"A5|A4|A3|B5|B4|JIS-B5|JIS-B4|letter|legal|ledger","path()":"path( [<fill-rule> ,]? <string> )","paint()":"paint( <ident> , <declaration-value>? )","perspective()":"perspective( [<length [0,\u221E]>|none] )","polygon()":"polygon( <fill-rule>? , [<length-percentage> <length-percentage>]# )",position:"[[left|center|right]||[top|center|bottom]|[left|center|right|<length-percentage>] [top|center|bottom|<length-percentage>]?|[[left|right] <length-percentage>]&&[[top|bottom] <length-percentage>]]","pow()":"pow( <calc-sum> , <calc-sum> )","pseudo-class-selector":"':' <ident-token>|':' <function-token> <any-value> ')'","pseudo-element-selector":"':' <pseudo-class-selector>","pseudo-page":": [left|right|first|blank]",quote:"open-quote|close-quote|no-open-quote|no-close-quote","radial-gradient()":"radial-gradient( [<ending-shape>||<size>]? [at <position>]? , <color-stop-list> )",ratio:"<number [0,\u221E]> [/ <number [0,\u221E]>]?","relative-selector":"<combinator>? <complex-selector>","relative-selector-list":"<relative-selector>#","relative-size":"larger|smaller","rem()":"rem( <calc-sum> , <calc-sum> )","repeat-style":"repeat-x|repeat-y|[repeat|space|round|no-repeat]{1,2}","repeating-conic-gradient()":"repeating-conic-gradient( [from <angle>]? [at <position>]? , <angular-color-stop-list> )","repeating-linear-gradient()":"repeating-linear-gradient( [<angle>|to <side-or-corner>]? , <color-stop-list> )","repeating-radial-gradient()":"repeating-radial-gradient( [<ending-shape>||<size>]? [at <position>]? , <color-stop-list> )","reversed-counter-name":"reversed( <counter-name> )","rgb()":"rgb( <percentage>{3} [/ <alpha-value>]? )|rgb( <number>{3} [/ <alpha-value>]? )|rgb( <percentage>#{3} , <alpha-value>? )|rgb( <number>#{3} , <alpha-value>? )","rgba()":"rgba( <percentage>{3} [/ <alpha-value>]? )|rgba( <number>{3} [/ <alpha-value>]? )|rgba( <percentage>#{3} , <alpha-value>? )|rgba( <number>#{3} , <alpha-value>? )","rotate()":"rotate( [<angle>|<zero>] )","rotate3d()":"rotate3d( <number> , <number> , <number> , [<angle>|<zero>] )","rotateX()":"rotateX( [<angle>|<zero>] )","rotateY()":"rotateY( [<angle>|<zero>] )","rotateZ()":"rotateZ( [<angle>|<zero>] )","round()":"round( <rounding-strategy>? , <calc-sum> , <calc-sum> )","rounding-strategy":"nearest|up|down|to-zero","saturate()":"saturate( <number-percentage> )","scale()":"scale( [<number>|<percentage>]#{1,2} )","scale3d()":"scale3d( [<number>|<percentage>]#{3} )","scaleX()":"scaleX( [<number>|<percentage>] )","scaleY()":"scaleY( [<number>|<percentage>] )","scaleZ()":"scaleZ( [<number>|<percentage>] )",scroller:"root|nearest","self-position":"center|start|end|self-start|self-end|flex-start|flex-end","shape-radius":"<length-percentage>|closest-side|farthest-side","sign()":"sign( <calc-sum> )","skew()":"skew( [<angle>|<zero>] , [<angle>|<zero>]? )","skewX()":"skewX( [<angle>|<zero>] )","skewY()":"skewY( [<angle>|<zero>] )","sepia()":"sepia( <number-percentage> )",shadow:"inset?&&<length>{2,4}&&<color>?","shadow-t":"[<length>{2,3}&&<color>?]",shape:"rect( <top> , <right> , <bottom> , <left> )|rect( <top> <right> <bottom> <left> )","shape-box":"<box>|margin-box","side-or-corner":"[left|right]||[top|bottom]","sin()":"sin( <calc-sum> )","single-animation":"<time>||<easing-function>||<time>||<single-animation-iteration-count>||<single-animation-direction>||<single-animation-fill-mode>||<single-animation-play-state>||[none|<keyframes-name>]","single-animation-direction":"normal|reverse|alternate|alternate-reverse","single-animation-fill-mode":"none|forwards|backwards|both","single-animation-iteration-count":"infinite|<number>","single-animation-play-state":"running|paused","single-animation-timeline":"auto|none|<timeline-name>|scroll( <axis>? <scroller>? )","single-transition":"[none|<single-transition-property>]||<time>||<easing-function>||<time>","single-transition-property":"all|<custom-ident>",size:"closest-side|farthest-side|closest-corner|farthest-corner|<length>|<length-percentage>{2}","sqrt()":"sqrt( <calc-sum> )","step-position":"jump-start|jump-end|jump-none|jump-both|start|end","step-timing-function":"step-start|step-end|steps( <integer> [, <step-position>]? )","subclass-selector":"<id-selector>|<class-selector>|<attribute-selector>|<pseudo-class-selector>","supports-condition":"not <supports-in-parens>|<supports-in-parens> [and <supports-in-parens>]*|<supports-in-parens> [or <supports-in-parens>]*","supports-in-parens":"( <supports-condition> )|<supports-feature>|<general-enclosed>","supports-feature":"<supports-decl>|<supports-selector-fn>","supports-decl":"( <declaration> )","supports-selector-fn":"selector( <complex-selector> )",symbol:"<string>|<image>|<custom-ident>","tan()":"tan( <calc-sum> )",target:"<target-counter()>|<target-counters()>|<target-text()>","target-counter()":"target-counter( [<string>|<url>] , <custom-ident> , <counter-style>? )","target-counters()":"target-counters( [<string>|<url>] , <custom-ident> , <string> , <counter-style>? )","target-text()":"target-text( [<string>|<url>] , [content|before|after|first-letter]? )","time-percentage":"<time>|<percentage>","timeline-name":"<custom-ident>|<string>","easing-function":"linear|<cubic-bezier-timing-function>|<step-timing-function>","track-breadth":"<length-percentage>|<flex>|min-content|max-content|auto","track-list":"[<line-names>? [<track-size>|<track-repeat>]]+ <line-names>?","track-repeat":"repeat( [<integer [1,\u221E]>] , [<line-names>? <track-size>]+ <line-names>? )","track-size":"<track-breadth>|minmax( <inflexible-breadth> , <track-breadth> )|fit-content( <length-percentage> )","transform-function":"<matrix()>|<translate()>|<translateX()>|<translateY()>|<scale()>|<scaleX()>|<scaleY()>|<rotate()>|<skew()>|<skewX()>|<skewY()>|<matrix3d()>|<translate3d()>|<translateZ()>|<scale3d()>|<scaleZ()>|<rotate3d()>|<rotateX()>|<rotateY()>|<rotateZ()>|<perspective()>","transform-list":"<transform-function>+","translate()":"translate( <length-percentage> , <length-percentage>? )","translate3d()":"translate3d( <length-percentage> , <length-percentage> , <length> )","translateX()":"translateX( <length-percentage> )","translateY()":"translateY( <length-percentage> )","translateZ()":"translateZ( <length> )","type-or-unit":"string|color|url|integer|number|length|angle|time|frequency|cap|ch|em|ex|ic|lh|rlh|rem|vb|vi|vw|vh|vmin|vmax|mm|Q|cm|in|pt|pc|px|deg|grad|rad|turn|ms|s|Hz|kHz|%","type-selector":"<wq-name>|<ns-prefix>? '*'","var()":"var( <custom-property-name> , <declaration-value>? )","viewport-length":"auto|<length-percentage>","visual-box":"content-box|padding-box|border-box","wq-name":"<ns-prefix>? <ident-token>","-legacy-gradient":"<-webkit-gradient()>|<-legacy-linear-gradient>|<-legacy-repeating-linear-gradient>|<-legacy-radial-gradient>|<-legacy-repeating-radial-gradient>","-legacy-linear-gradient":"-moz-linear-gradient( <-legacy-linear-gradient-arguments> )|-webkit-linear-gradient( <-legacy-linear-gradient-arguments> )|-o-linear-gradient( <-legacy-linear-gradient-arguments> )","-legacy-repeating-linear-gradient":"-moz-repeating-linear-gradient( <-legacy-linear-gradient-arguments> )|-webkit-repeating-linear-gradient( <-legacy-linear-gradient-arguments> )|-o-repeating-linear-gradient( <-legacy-linear-gradient-arguments> )","-legacy-linear-gradient-arguments":"[<angle>|<side-or-corner>]? , <color-stop-list>","-legacy-radial-gradient":"-moz-radial-gradient( <-legacy-radial-gradient-arguments> )|-webkit-radial-gradient( <-legacy-radial-gradient-arguments> )|-o-radial-gradient( <-legacy-radial-gradient-arguments> )","-legacy-repeating-radial-gradient":"-moz-repeating-radial-gradient( <-legacy-radial-gradient-arguments> )|-webkit-repeating-radial-gradient( <-legacy-radial-gradient-arguments> )|-o-repeating-radial-gradient( <-legacy-radial-gradient-arguments> )","-legacy-radial-gradient-arguments":"[<position> ,]? [[[<-legacy-radial-gradient-shape>||<-legacy-radial-gradient-size>]|[<length>|<percentage>]{2}] ,]? <color-stop-list>","-legacy-radial-gradient-size":"closest-side|closest-corner|farthest-side|farthest-corner|contain|cover","-legacy-radial-gradient-shape":"circle|ellipse","-non-standard-font":"-apple-system-body|-apple-system-headline|-apple-system-subheadline|-apple-system-caption1|-apple-system-caption2|-apple-system-footnote|-apple-system-short-body|-apple-system-short-headline|-apple-system-short-subheadline|-apple-system-short-caption1|-apple-system-short-footnote|-apple-system-tall-body","-non-standard-color":"-moz-ButtonDefault|-moz-ButtonHoverFace|-moz-ButtonHoverText|-moz-CellHighlight|-moz-CellHighlightText|-moz-Combobox|-moz-ComboboxText|-moz-Dialog|-moz-DialogText|-moz-dragtargetzone|-moz-EvenTreeRow|-moz-Field|-moz-FieldText|-moz-html-CellHighlight|-moz-html-CellHighlightText|-moz-mac-accentdarkestshadow|-moz-mac-accentdarkshadow|-moz-mac-accentface|-moz-mac-accentlightesthighlight|-moz-mac-accentlightshadow|-moz-mac-accentregularhighlight|-moz-mac-accentregularshadow|-moz-mac-chrome-active|-moz-mac-chrome-inactive|-moz-mac-focusring|-moz-mac-menuselect|-moz-mac-menushadow|-moz-mac-menutextselect|-moz-MenuHover|-moz-MenuHoverText|-moz-MenuBarText|-moz-MenuBarHoverText|-moz-nativehyperlinktext|-moz-OddTreeRow|-moz-win-communicationstext|-moz-win-mediatext|-moz-activehyperlinktext|-moz-default-background-color|-moz-default-color|-moz-hyperlinktext|-moz-visitedhyperlinktext|-webkit-activelink|-webkit-focus-ring-color|-webkit-link|-webkit-text","-non-standard-image-rendering":"optimize-contrast|-moz-crisp-edges|-o-crisp-edges|-webkit-optimize-contrast","-non-standard-overflow":"-moz-scrollbars-none|-moz-scrollbars-horizontal|-moz-scrollbars-vertical|-moz-hidden-unscrollable","-non-standard-width":"fill-available|min-intrinsic|intrinsic|-moz-available|-moz-fit-content|-moz-min-content|-moz-max-content|-webkit-min-content|-webkit-max-content","-webkit-gradient()":"-webkit-gradient( <-webkit-gradient-type> , <-webkit-gradient-point> [, <-webkit-gradient-point>|, <-webkit-gradient-radius> , <-webkit-gradient-point>] [, <-webkit-gradient-radius>]? [, <-webkit-gradient-color-stop>]* )","-webkit-gradient-color-stop":"from( <color> )|color-stop( [<number-zero-one>|<percentage>] , <color> )|to( <color> )","-webkit-gradient-point":"[left|center|right|<length-percentage>] [top|center|bottom|<length-percentage>]","-webkit-gradient-radius":"<length>|<percentage>","-webkit-gradient-type":"linear|radial","-webkit-mask-box-repeat":"repeat|stretch|round","-webkit-mask-clip-style":"border|border-box|padding|padding-box|content|content-box|text","-ms-filter-function-list":"<-ms-filter-function>+","-ms-filter-function":"<-ms-filter-function-progid>|<-ms-filter-function-legacy>","-ms-filter-function-progid":"'progid:' [<ident-token> '.']* [<ident-token>|<function-token> <any-value>? )]","-ms-filter-function-legacy":"<ident-token>|<function-token> <any-value>? )","-ms-filter":"<string>",age:"child|young|old","attr-name":"<wq-name>","attr-fallback":"<any-value>","bg-clip":"<box>|border|text",bottom:"<length>|auto","container-name":"<custom-ident>","container-condition":"not <query-in-parens>|<query-in-parens> [[and <query-in-parens>]*|[or <query-in-parens>]*]","generic-voice":"[<age>? <gender> <integer>?]",gender:"male|female|neutral",left:"<length>|auto","mask-image":"<mask-reference>#",paint:"none|<color>|<url> [none|<color>]?|context-fill|context-stroke",right:"<length>|auto","scroll-timeline-axis":"block|inline|vertical|horizontal","scroll-timeline-name":"none|<custom-ident>","single-animation-composition":"replace|add|accumulate","svg-length":"<percentage>|<length>|<number>","svg-writing-mode":"lr-tb|rl-tb|tb-rl|lr|rl|tb",top:"<length>|auto",x:"<number>",y:"<number>",declaration:"<ident-token> : <declaration-value>? ['!' important]?","declaration-list":"[<declaration>? ';']* <declaration>?",url:"url( <string> <url-modifier>* )|<url-token>","url-modifier":"<ident>|<function-token> <any-value> )","number-zero-one":"<number [0,1]>","number-one-or-greater":"<number [1,\u221E]>","query-in-parens":"( <container-condition> )|( <size-feature> )|style( <style-query> )|<general-enclosed>","size-feature":"<mf-plain>|<mf-boolean>|<mf-range>","style-feature":"<declaration>","style-query":"<style-condition>|<style-feature>","style-condition":"not <style-in-parens>|<style-in-parens> [[and <style-in-parens>]*|[or <style-in-parens>]*]","style-in-parens":"( <style-condition> )|( <style-feature> )|<general-enclosed>","-non-standard-display":"-ms-inline-flexbox|-ms-grid|-ms-inline-grid|-webkit-flex|-webkit-inline-flex|-webkit-box|-webkit-inline-box|-moz-inline-stack|-moz-box|-moz-inline-box"},properties:{"--*":"<declaration-value>","-ms-accelerator":"false|true","-ms-block-progression":"tb|rl|bt|lr","-ms-content-zoom-chaining":"none|chained","-ms-content-zooming":"none|zoom","-ms-content-zoom-limit":"<'-ms-content-zoom-limit-min'> <'-ms-content-zoom-limit-max'>","-ms-content-zoom-limit-max":"<percentage>","-ms-content-zoom-limit-min":"<percentage>","-ms-content-zoom-snap":"<'-ms-content-zoom-snap-type'>||<'-ms-content-zoom-snap-points'>","-ms-content-zoom-snap-points":"snapInterval( <percentage> , <percentage> )|snapList( <percentage># )","-ms-content-zoom-snap-type":"none|proximity|mandatory","-ms-filter":"<string>","-ms-flow-from":"[none|<custom-ident>]#","-ms-flow-into":"[none|<custom-ident>]#","-ms-grid-columns":"none|<track-list>|<auto-track-list>","-ms-grid-rows":"none|<track-list>|<auto-track-list>","-ms-high-contrast-adjust":"auto|none","-ms-hyphenate-limit-chars":"auto|<integer>{1,3}","-ms-hyphenate-limit-lines":"no-limit|<integer>","-ms-hyphenate-limit-zone":"<percentage>|<length>","-ms-ime-align":"auto|after","-ms-overflow-style":"auto|none|scrollbar|-ms-autohiding-scrollbar","-ms-scrollbar-3dlight-color":"<color>","-ms-scrollbar-arrow-color":"<color>","-ms-scrollbar-base-color":"<color>","-ms-scrollbar-darkshadow-color":"<color>","-ms-scrollbar-face-color":"<color>","-ms-scrollbar-highlight-color":"<color>","-ms-scrollbar-shadow-color":"<color>","-ms-scrollbar-track-color":"<color>","-ms-scroll-chaining":"chained|none","-ms-scroll-limit":"<'-ms-scroll-limit-x-min'> <'-ms-scroll-limit-y-min'> <'-ms-scroll-limit-x-max'> <'-ms-scroll-limit-y-max'>","-ms-scroll-limit-x-max":"auto|<length>","-ms-scroll-limit-x-min":"<length>","-ms-scroll-limit-y-max":"auto|<length>","-ms-scroll-limit-y-min":"<length>","-ms-scroll-rails":"none|railed","-ms-scroll-snap-points-x":"snapInterval( <length-percentage> , <length-percentage> )|snapList( <length-percentage># )","-ms-scroll-snap-points-y":"snapInterval( <length-percentage> , <length-percentage> )|snapList( <length-percentage># )","-ms-scroll-snap-type":"none|proximity|mandatory","-ms-scroll-snap-x":"<'-ms-scroll-snap-type'> <'-ms-scroll-snap-points-x'>","-ms-scroll-snap-y":"<'-ms-scroll-snap-type'> <'-ms-scroll-snap-points-y'>","-ms-scroll-translation":"none|vertical-to-horizontal","-ms-text-autospace":"none|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space","-ms-touch-select":"grippers|none","-ms-user-select":"none|element|text","-ms-wrap-flow":"auto|both|start|end|maximum|clear","-ms-wrap-margin":"<length>","-ms-wrap-through":"wrap|none","-moz-appearance":"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","-moz-binding":"<url>|none","-moz-border-bottom-colors":"<color>+|none","-moz-border-left-colors":"<color>+|none","-moz-border-right-colors":"<color>+|none","-moz-border-top-colors":"<color>+|none","-moz-context-properties":"none|[fill|fill-opacity|stroke|stroke-opacity]#","-moz-float-edge":"border-box|content-box|margin-box|padding-box","-moz-force-broken-image-icon":"0|1","-moz-image-region":"<shape>|auto","-moz-orient":"inline|block|horizontal|vertical","-moz-outline-radius":"<outline-radius>{1,4} [/ <outline-radius>{1,4}]?","-moz-outline-radius-bottomleft":"<outline-radius>","-moz-outline-radius-bottomright":"<outline-radius>","-moz-outline-radius-topleft":"<outline-radius>","-moz-outline-radius-topright":"<outline-radius>","-moz-stack-sizing":"ignore|stretch-to-fit","-moz-text-blink":"none|blink","-moz-user-focus":"ignore|normal|select-after|select-before|select-menu|select-same|select-all|none","-moz-user-input":"auto|none|enabled|disabled","-moz-user-modify":"read-only|read-write|write-only","-moz-window-dragging":"drag|no-drag","-moz-window-shadow":"default|menu|tooltip|sheet|none","-webkit-appearance":"none|button|button-bevel|caps-lock-indicator|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|scrollbarbutton-down|scrollbarbutton-left|scrollbarbutton-right|scrollbarbutton-up|scrollbargripper-horizontal|scrollbargripper-vertical|scrollbarthumb-horizontal|scrollbarthumb-vertical|scrollbartrack-horizontal|scrollbartrack-vertical|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","-webkit-border-before":"<'border-width'>||<'border-style'>||<color>","-webkit-border-before-color":"<color>","-webkit-border-before-style":"<'border-style'>","-webkit-border-before-width":"<'border-width'>","-webkit-box-reflect":"[above|below|right|left]? <length>? <image>?","-webkit-line-clamp":"none|<integer>","-webkit-mask":"[<mask-reference>||<position> [/ <bg-size>]?||<repeat-style>||[<box>|border|padding|content|text]||[<box>|border|padding|content]]#","-webkit-mask-attachment":"<attachment>#","-webkit-mask-clip":"[<box>|border|padding|content|text]#","-webkit-mask-composite":"<composite-style>#","-webkit-mask-image":"<mask-reference>#","-webkit-mask-origin":"[<box>|border|padding|content]#","-webkit-mask-position":"<position>#","-webkit-mask-position-x":"[<length-percentage>|left|center|right]#","-webkit-mask-position-y":"[<length-percentage>|top|center|bottom]#","-webkit-mask-repeat":"<repeat-style>#","-webkit-mask-repeat-x":"repeat|no-repeat|space|round","-webkit-mask-repeat-y":"repeat|no-repeat|space|round","-webkit-mask-size":"<bg-size>#","-webkit-overflow-scrolling":"auto|touch","-webkit-tap-highlight-color":"<color>","-webkit-text-fill-color":"<color>","-webkit-text-stroke":"<length>||<color>","-webkit-text-stroke-color":"<color>","-webkit-text-stroke-width":"<length>","-webkit-touch-callout":"default|none","-webkit-user-modify":"read-only|read-write|read-write-plaintext-only","accent-color":"auto|<color>","align-content":"normal|<baseline-position>|<content-distribution>|<overflow-position>? <content-position>","align-items":"normal|stretch|<baseline-position>|[<overflow-position>? <self-position>]","align-self":"auto|normal|stretch|<baseline-position>|<overflow-position>? <self-position>","align-tracks":"[normal|<baseline-position>|<content-distribution>|<overflow-position>? <content-position>]#",all:"initial|inherit|unset|revert|revert-layer",animation:"<single-animation>#","animation-composition":"<single-animation-composition>#","animation-delay":"<time>#","animation-direction":"<single-animation-direction>#","animation-duration":"<time>#","animation-fill-mode":"<single-animation-fill-mode>#","animation-iteration-count":"<single-animation-iteration-count>#","animation-name":"[none|<keyframes-name>]#","animation-play-state":"<single-animation-play-state>#","animation-timing-function":"<easing-function>#","animation-timeline":"<single-animation-timeline>#",appearance:"none|auto|textfield|menulist-button|<compat-auto>","aspect-ratio":"auto|<ratio>",azimuth:"<angle>|[[left-side|far-left|left|center-left|center|center-right|right|far-right|right-side]||behind]|leftwards|rightwards","backdrop-filter":"none|<filter-function-list>","backface-visibility":"visible|hidden",background:"[<bg-layer> ,]* <final-bg-layer>","background-attachment":"<attachment>#","background-blend-mode":"<blend-mode>#","background-clip":"<bg-clip>#","background-color":"<color>","background-image":"<bg-image>#","background-origin":"<box>#","background-position":"<bg-position>#","background-position-x":"[center|[[left|right|x-start|x-end]? <length-percentage>?]!]#","background-position-y":"[center|[[top|bottom|y-start|y-end]? <length-percentage>?]!]#","background-repeat":"<repeat-style>#","background-size":"<bg-size>#","block-overflow":"clip|ellipsis|<string>","block-size":"<'width'>",border:"<line-width>||<line-style>||<color>","border-block":"<'border-top-width'>||<'border-top-style'>||<color>","border-block-color":"<'border-top-color'>{1,2}","border-block-style":"<'border-top-style'>","border-block-width":"<'border-top-width'>","border-block-end":"<'border-top-width'>||<'border-top-style'>||<color>","border-block-end-color":"<'border-top-color'>","border-block-end-style":"<'border-top-style'>","border-block-end-width":"<'border-top-width'>","border-block-start":"<'border-top-width'>||<'border-top-style'>||<color>","border-block-start-color":"<'border-top-color'>","border-block-start-style":"<'border-top-style'>","border-block-start-width":"<'border-top-width'>","border-bottom":"<line-width>||<line-style>||<color>","border-bottom-color":"<'border-top-color'>","border-bottom-left-radius":"<length-percentage>{1,2}","border-bottom-right-radius":"<length-percentage>{1,2}","border-bottom-style":"<line-style>","border-bottom-width":"<line-width>","border-collapse":"collapse|separate","border-color":"<color>{1,4}","border-end-end-radius":"<length-percentage>{1,2}","border-end-start-radius":"<length-percentage>{1,2}","border-image":"<'border-image-source'>||<'border-image-slice'> [/ <'border-image-width'>|/ <'border-image-width'>? / <'border-image-outset'>]?||<'border-image-repeat'>","border-image-outset":"[<length>|<number>]{1,4}","border-image-repeat":"[stretch|repeat|round|space]{1,2}","border-image-slice":"<number-percentage>{1,4}&&fill?","border-image-source":"none|<image>","border-image-width":"[<length-percentage>|<number>|auto]{1,4}","border-inline":"<'border-top-width'>||<'border-top-style'>||<color>","border-inline-end":"<'border-top-width'>||<'border-top-style'>||<color>","border-inline-color":"<'border-top-color'>{1,2}","border-inline-style":"<'border-top-style'>","border-inline-width":"<'border-top-width'>","border-inline-end-color":"<'border-top-color'>","border-inline-end-style":"<'border-top-style'>","border-inline-end-width":"<'border-top-width'>","border-inline-start":"<'border-top-width'>||<'border-top-style'>||<color>","border-inline-start-color":"<'border-top-color'>","border-inline-start-style":"<'border-top-style'>","border-inline-start-width":"<'border-top-width'>","border-left":"<line-width>||<line-style>||<color>","border-left-color":"<color>","border-left-style":"<line-style>","border-left-width":"<line-width>","border-radius":"<length-percentage>{1,4} [/ <length-percentage>{1,4}]?","border-right":"<line-width>||<line-style>||<color>","border-right-color":"<color>","border-right-style":"<line-style>","border-right-width":"<line-width>","border-spacing":"<length> <length>?","border-start-end-radius":"<length-percentage>{1,2}","border-start-start-radius":"<length-percentage>{1,2}","border-style":"<line-style>{1,4}","border-top":"<line-width>||<line-style>||<color>","border-top-color":"<color>","border-top-left-radius":"<length-percentage>{1,2}","border-top-right-radius":"<length-percentage>{1,2}","border-top-style":"<line-style>","border-top-width":"<line-width>","border-width":"<line-width>{1,4}",bottom:"<length>|<percentage>|auto","box-align":"start|center|end|baseline|stretch","box-decoration-break":"slice|clone","box-direction":"normal|reverse|inherit","box-flex":"<number>","box-flex-group":"<integer>","box-lines":"single|multiple","box-ordinal-group":"<integer>","box-orient":"horizontal|vertical|inline-axis|block-axis|inherit","box-pack":"start|center|end|justify","box-shadow":"none|<shadow>#","box-sizing":"content-box|border-box","break-after":"auto|avoid|always|all|avoid-page|page|left|right|recto|verso|avoid-column|column|avoid-region|region","break-before":"auto|avoid|always|all|avoid-page|page|left|right|recto|verso|avoid-column|column|avoid-region|region","break-inside":"auto|avoid|avoid-page|avoid-column|avoid-region","caption-side":"top|bottom|block-start|block-end|inline-start|inline-end",caret:"<'caret-color'>||<'caret-shape'>","caret-color":"auto|<color>","caret-shape":"auto|bar|block|underscore",clear:"none|left|right|both|inline-start|inline-end",clip:"<shape>|auto","clip-path":"<clip-source>|[<basic-shape>||<geometry-box>]|none",color:"<color>","print-color-adjust":"economy|exact","color-scheme":"normal|[light|dark|<custom-ident>]+&&only?","column-count":"<integer>|auto","column-fill":"auto|balance|balance-all","column-gap":"normal|<length-percentage>","column-rule":"<'column-rule-width'>||<'column-rule-style'>||<'column-rule-color'>","column-rule-color":"<color>","column-rule-style":"<'border-style'>","column-rule-width":"<'border-width'>","column-span":"none|all","column-width":"<length>|auto",columns:"<'column-width'>||<'column-count'>",contain:"none|strict|content|[[size||inline-size]||layout||style||paint]","contain-intrinsic-size":"[none|<length>|auto <length>]{1,2}","contain-intrinsic-block-size":"none|<length>|auto <length>","contain-intrinsic-height":"none|<length>|auto <length>","contain-intrinsic-inline-size":"none|<length>|auto <length>","contain-intrinsic-width":"none|<length>|auto <length>",content:"normal|none|[<content-replacement>|<content-list>] [/ [<string>|<counter>]+]?","content-visibility":"visible|auto|hidden","counter-increment":"[<counter-name> <integer>?]+|none","counter-reset":"[<counter-name> <integer>?|<reversed-counter-name> <integer>?]+|none","counter-set":"[<counter-name> <integer>?]+|none",cursor:"[[<url> [<x> <y>]? ,]* [auto|default|none|context-menu|help|pointer|progress|wait|cell|crosshair|text|vertical-text|alias|copy|move|no-drop|not-allowed|e-resize|n-resize|ne-resize|nw-resize|s-resize|se-resize|sw-resize|w-resize|ew-resize|ns-resize|nesw-resize|nwse-resize|col-resize|row-resize|all-scroll|zoom-in|zoom-out|grab|grabbing|hand|-webkit-grab|-webkit-grabbing|-webkit-zoom-in|-webkit-zoom-out|-moz-grab|-moz-grabbing|-moz-zoom-in|-moz-zoom-out]]",direction:"ltr|rtl",display:"[<display-outside>||<display-inside>]|<display-listitem>|<display-internal>|<display-box>|<display-legacy>|<-non-standard-display>","empty-cells":"show|hide",filter:"none|<filter-function-list>|<-ms-filter-function-list>",flex:"none|[<'flex-grow'> <'flex-shrink'>?||<'flex-basis'>]","flex-basis":"content|<'width'>","flex-direction":"row|row-reverse|column|column-reverse","flex-flow":"<'flex-direction'>||<'flex-wrap'>","flex-grow":"<number>","flex-shrink":"<number>","flex-wrap":"nowrap|wrap|wrap-reverse",float:"left|right|none|inline-start|inline-end",font:"[[<'font-style'>||<font-variant-css21>||<'font-weight'>||<'font-stretch'>]? <'font-size'> [/ <'line-height'>]? <'font-family'>]|caption|icon|menu|message-box|small-caption|status-bar","font-family":"[<family-name>|<generic-family>]#","font-feature-settings":"normal|<feature-tag-value>#","font-kerning":"auto|normal|none","font-language-override":"normal|<string>","font-optical-sizing":"auto|none","font-variation-settings":"normal|[<string> <number>]#","font-size":"<absolute-size>|<relative-size>|<length-percentage>","font-size-adjust":"none|[ex-height|cap-height|ch-width|ic-width|ic-height]? [from-font|<number>]","font-smooth":"auto|never|always|<absolute-size>|<length>","font-stretch":"<font-stretch-absolute>","font-style":"normal|italic|oblique <angle>?","font-synthesis":"none|[weight||style||small-caps]","font-variant":"normal|none|[<common-lig-values>||<discretionary-lig-values>||<historical-lig-values>||<contextual-alt-values>||stylistic( <feature-value-name> )||historical-forms||styleset( <feature-value-name># )||character-variant( <feature-value-name># )||swash( <feature-value-name> )||ornaments( <feature-value-name> )||annotation( <feature-value-name> )||[small-caps|all-small-caps|petite-caps|all-petite-caps|unicase|titling-caps]||<numeric-figure-values>||<numeric-spacing-values>||<numeric-fraction-values>||ordinal||slashed-zero||<east-asian-variant-values>||<east-asian-width-values>||ruby]","font-variant-alternates":"normal|[stylistic( <feature-value-name> )||historical-forms||styleset( <feature-value-name># )||character-variant( <feature-value-name># )||swash( <feature-value-name> )||ornaments( <feature-value-name> )||annotation( <feature-value-name> )]","font-variant-caps":"normal|small-caps|all-small-caps|petite-caps|all-petite-caps|unicase|titling-caps","font-variant-east-asian":"normal|[<east-asian-variant-values>||<east-asian-width-values>||ruby]","font-variant-ligatures":"normal|none|[<common-lig-values>||<discretionary-lig-values>||<historical-lig-values>||<contextual-alt-values>]","font-variant-numeric":"normal|[<numeric-figure-values>||<numeric-spacing-values>||<numeric-fraction-values>||ordinal||slashed-zero]","font-variant-position":"normal|sub|super","font-weight":"<font-weight-absolute>|bolder|lighter","forced-color-adjust":"auto|none",gap:"<'row-gap'> <'column-gap'>?",grid:"<'grid-template'>|<'grid-template-rows'> / [auto-flow&&dense?] <'grid-auto-columns'>?|[auto-flow&&dense?] <'grid-auto-rows'>? / <'grid-template-columns'>","grid-area":"<grid-line> [/ <grid-line>]{0,3}","grid-auto-columns":"<track-size>+","grid-auto-flow":"[row|column]||dense","grid-auto-rows":"<track-size>+","grid-column":"<grid-line> [/ <grid-line>]?","grid-column-end":"<grid-line>","grid-column-gap":"<length-percentage>","grid-column-start":"<grid-line>","grid-gap":"<'grid-row-gap'> <'grid-column-gap'>?","grid-row":"<grid-line> [/ <grid-line>]?","grid-row-end":"<grid-line>","grid-row-gap":"<length-percentage>","grid-row-start":"<grid-line>","grid-template":"none|[<'grid-template-rows'> / <'grid-template-columns'>]|[<line-names>? <string> <track-size>? <line-names>?]+ [/ <explicit-track-list>]?","grid-template-areas":"none|<string>+","grid-template-columns":"none|<track-list>|<auto-track-list>|subgrid <line-name-list>?","grid-template-rows":"none|<track-list>|<auto-track-list>|subgrid <line-name-list>?","hanging-punctuation":"none|[first||[force-end|allow-end]||last]",height:"auto|<length>|<percentage>|min-content|max-content|fit-content|fit-content( <length-percentage> )","hyphenate-character":"auto|<string>",hyphens:"none|manual|auto","image-orientation":"from-image|<angle>|[<angle>? flip]","image-rendering":"auto|crisp-edges|pixelated|optimizeSpeed|optimizeQuality|<-non-standard-image-rendering>","image-resolution":"[from-image||<resolution>]&&snap?","ime-mode":"auto|normal|active|inactive|disabled","initial-letter":"normal|[<number> <integer>?]","initial-letter-align":"[auto|alphabetic|hanging|ideographic]","inline-size":"<'width'>","input-security":"auto|none",inset:"<'top'>{1,4}","inset-block":"<'top'>{1,2}","inset-block-end":"<'top'>","inset-block-start":"<'top'>","inset-inline":"<'top'>{1,2}","inset-inline-end":"<'top'>","inset-inline-start":"<'top'>",isolation:"auto|isolate","justify-content":"normal|<content-distribution>|<overflow-position>? [<content-position>|left|right]","justify-items":"normal|stretch|<baseline-position>|<overflow-position>? [<self-position>|left|right]|legacy|legacy&&[left|right|center]","justify-self":"auto|normal|stretch|<baseline-position>|<overflow-position>? [<self-position>|left|right]","justify-tracks":"[normal|<content-distribution>|<overflow-position>? [<content-position>|left|right]]#",left:"<length>|<percentage>|auto","letter-spacing":"normal|<length-percentage>","line-break":"auto|loose|normal|strict|anywhere","line-clamp":"none|<integer>","line-height":"normal|<number>|<length>|<percentage>","line-height-step":"<length>","list-style":"<'list-style-type'>||<'list-style-position'>||<'list-style-image'>","list-style-image":"<image>|none","list-style-position":"inside|outside","list-style-type":"<counter-style>|<string>|none",margin:"[<length>|<percentage>|auto]{1,4}","margin-block":"<'margin-left'>{1,2}","margin-block-end":"<'margin-left'>","margin-block-start":"<'margin-left'>","margin-bottom":"<length>|<percentage>|auto","margin-inline":"<'margin-left'>{1,2}","margin-inline-end":"<'margin-left'>","margin-inline-start":"<'margin-left'>","margin-left":"<length>|<percentage>|auto","margin-right":"<length>|<percentage>|auto","margin-top":"<length>|<percentage>|auto","margin-trim":"none|in-flow|all",mask:"<mask-layer>#","mask-border":"<'mask-border-source'>||<'mask-border-slice'> [/ <'mask-border-width'>? [/ <'mask-border-outset'>]?]?||<'mask-border-repeat'>||<'mask-border-mode'>","mask-border-mode":"luminance|alpha","mask-border-outset":"[<length>|<number>]{1,4}","mask-border-repeat":"[stretch|repeat|round|space]{1,2}","mask-border-slice":"<number-percentage>{1,4} fill?","mask-border-source":"none|<image>","mask-border-width":"[<length-percentage>|<number>|auto]{1,4}","mask-clip":"[<geometry-box>|no-clip]#","mask-composite":"<compositing-operator>#","mask-image":"<mask-reference>#","mask-mode":"<masking-mode>#","mask-origin":"<geometry-box>#","mask-position":"<position>#","mask-repeat":"<repeat-style>#","mask-size":"<bg-size>#","mask-type":"luminance|alpha","masonry-auto-flow":"[pack|next]||[definite-first|ordered]","math-depth":"auto-add|add( <integer> )|<integer>","math-shift":"normal|compact","math-style":"normal|compact","max-block-size":"<'max-width'>","max-height":"none|<length-percentage>|min-content|max-content|fit-content|fit-content( <length-percentage> )","max-inline-size":"<'max-width'>","max-lines":"none|<integer>","max-width":"none|<length-percentage>|min-content|max-content|fit-content|fit-content( <length-percentage> )|<-non-standard-width>","min-block-size":"<'min-width'>","min-height":"auto|<length>|<percentage>|min-content|max-content|fit-content|fit-content( <length-percentage> )","min-inline-size":"<'min-width'>","min-width":"auto|<length>|<percentage>|min-content|max-content|fit-content|fit-content( <length-percentage> )|<-non-standard-width>","mix-blend-mode":"<blend-mode>|plus-lighter","object-fit":"fill|contain|cover|none|scale-down","object-position":"<position>",offset:"[<'offset-position'>? [<'offset-path'> [<'offset-distance'>||<'offset-rotate'>]?]?]! [/ <'offset-anchor'>]?","offset-anchor":"auto|<position>","offset-distance":"<length-percentage>","offset-path":"none|ray( [<angle>&&<size>&&contain?] )|<path()>|<url>|[<basic-shape>||<geometry-box>]","offset-position":"auto|<position>","offset-rotate":"[auto|reverse]||<angle>",opacity:"<alpha-value>",order:"<integer>",orphans:"<integer>",outline:"[<'outline-color'>||<'outline-style'>||<'outline-width'>]","outline-color":"<color>|invert","outline-offset":"<length>","outline-style":"auto|<'border-style'>","outline-width":"<line-width>",overflow:"[visible|hidden|clip|scroll|auto]{1,2}|<-non-standard-overflow>","overflow-anchor":"auto|none","overflow-block":"visible|hidden|clip|scroll|auto","overflow-clip-box":"padding-box|content-box","overflow-clip-margin":"<visual-box>||<length [0,\u221E]>","overflow-inline":"visible|hidden|clip|scroll|auto","overflow-wrap":"normal|break-word|anywhere","overflow-x":"visible|hidden|clip|scroll|auto","overflow-y":"visible|hidden|clip|scroll|auto","overscroll-behavior":"[contain|none|auto]{1,2}","overscroll-behavior-block":"contain|none|auto","overscroll-behavior-inline":"contain|none|auto","overscroll-behavior-x":"contain|none|auto","overscroll-behavior-y":"contain|none|auto",padding:"[<length>|<percentage>]{1,4}","padding-block":"<'padding-left'>{1,2}","padding-block-end":"<'padding-left'>","padding-block-start":"<'padding-left'>","padding-bottom":"<length>|<percentage>","padding-inline":"<'padding-left'>{1,2}","padding-inline-end":"<'padding-left'>","padding-inline-start":"<'padding-left'>","padding-left":"<length>|<percentage>","padding-right":"<length>|<percentage>","padding-top":"<length>|<percentage>","page-break-after":"auto|always|avoid|left|right|recto|verso","page-break-before":"auto|always|avoid|left|right|recto|verso","page-break-inside":"auto|avoid","paint-order":"normal|[fill||stroke||markers]",perspective:"none|<length>","perspective-origin":"<position>","place-content":"<'align-content'> <'justify-content'>?","place-items":"<'align-items'> <'justify-items'>?","place-self":"<'align-self'> <'justify-self'>?","pointer-events":"auto|none|visiblePainted|visibleFill|visibleStroke|visible|painted|fill|stroke|all|inherit",position:"static|relative|absolute|sticky|fixed|-webkit-sticky",quotes:"none|auto|[<string> <string>]+",resize:"none|both|horizontal|vertical|block|inline",right:"<length>|<percentage>|auto",rotate:"none|<angle>|[x|y|z|<number>{3}]&&<angle>","row-gap":"normal|<length-percentage>","ruby-align":"start|center|space-between|space-around","ruby-merge":"separate|collapse|auto","ruby-position":"[alternate||[over|under]]|inter-character",scale:"none|<number>{1,3}","scrollbar-color":"auto|<color>{2}","scrollbar-gutter":"auto|stable&&both-edges?","scrollbar-width":"auto|thin|none","scroll-behavior":"auto|smooth","scroll-margin":"<length>{1,4}","scroll-margin-block":"<length>{1,2}","scroll-margin-block-start":"<length>","scroll-margin-block-end":"<length>","scroll-margin-bottom":"<length>","scroll-margin-inline":"<length>{1,2}","scroll-margin-inline-start":"<length>","scroll-margin-inline-end":"<length>","scroll-margin-left":"<length>","scroll-margin-right":"<length>","scroll-margin-top":"<length>","scroll-padding":"[auto|<length-percentage>]{1,4}","scroll-padding-block":"[auto|<length-percentage>]{1,2}","scroll-padding-block-start":"auto|<length-percentage>","scroll-padding-block-end":"auto|<length-percentage>","scroll-padding-bottom":"auto|<length-percentage>","scroll-padding-inline":"[auto|<length-percentage>]{1,2}","scroll-padding-inline-start":"auto|<length-percentage>","scroll-padding-inline-end":"auto|<length-percentage>","scroll-padding-left":"auto|<length-percentage>","scroll-padding-right":"auto|<length-percentage>","scroll-padding-top":"auto|<length-percentage>","scroll-snap-align":"[none|start|end|center]{1,2}","scroll-snap-coordinate":"none|<position>#","scroll-snap-destination":"<position>","scroll-snap-points-x":"none|repeat( <length-percentage> )","scroll-snap-points-y":"none|repeat( <length-percentage> )","scroll-snap-stop":"normal|always","scroll-snap-type":"none|[x|y|block|inline|both] [mandatory|proximity]?","scroll-snap-type-x":"none|mandatory|proximity","scroll-snap-type-y":"none|mandatory|proximity","scroll-timeline":"<scroll-timeline-name>||<scroll-timeline-axis>","scroll-timeline-axis":"block|inline|vertical|horizontal","scroll-timeline-name":"none|<custom-ident>","shape-image-threshold":"<alpha-value>","shape-margin":"<length-percentage>","shape-outside":"none|[<shape-box>||<basic-shape>]|<image>","tab-size":"<integer>|<length>","table-layout":"auto|fixed","text-align":"start|end|left|right|center|justify|match-parent","text-align-last":"auto|start|end|left|right|center|justify","text-combine-upright":"none|all|[digits <integer>?]","text-decoration":"<'text-decoration-line'>||<'text-decoration-style'>||<'text-decoration-color'>||<'text-decoration-thickness'>","text-decoration-color":"<color>","text-decoration-line":"none|[underline||overline||line-through||blink]|spelling-error|grammar-error","text-decoration-skip":"none|[objects||[spaces|[leading-spaces||trailing-spaces]]||edges||box-decoration]","text-decoration-skip-ink":"auto|all|none","text-decoration-style":"solid|double|dotted|dashed|wavy","text-decoration-thickness":"auto|from-font|<length>|<percentage>","text-emphasis":"<'text-emphasis-style'>||<'text-emphasis-color'>","text-emphasis-color":"<color>","text-emphasis-position":"[over|under]&&[right|left]","text-emphasis-style":"none|[[filled|open]||[dot|circle|double-circle|triangle|sesame]]|<string>","text-indent":"<length-percentage>&&hanging?&&each-line?","text-justify":"auto|inter-character|inter-word|none","text-orientation":"mixed|upright|sideways","text-overflow":"[clip|ellipsis|<string>]{1,2}","text-rendering":"auto|optimizeSpeed|optimizeLegibility|geometricPrecision","text-shadow":"none|<shadow-t>#","text-size-adjust":"none|auto|<percentage>","text-transform":"none|capitalize|uppercase|lowercase|full-width|full-size-kana","text-underline-offset":"auto|<length>|<percentage>","text-underline-position":"auto|from-font|[under||[left|right]]",top:"<length>|<percentage>|auto","touch-action":"auto|none|[[pan-x|pan-left|pan-right]||[pan-y|pan-up|pan-down]||pinch-zoom]|manipulation",transform:"none|<transform-list>","transform-box":"content-box|border-box|fill-box|stroke-box|view-box","transform-origin":"[<length-percentage>|left|center|right|top|bottom]|[[<length-percentage>|left|center|right]&&[<length-percentage>|top|center|bottom]] <length>?","transform-style":"flat|preserve-3d",transition:"<single-transition>#","transition-delay":"<time>#","transition-duration":"<time>#","transition-property":"none|<single-transition-property>#","transition-timing-function":"<easing-function>#",translate:"none|<length-percentage> [<length-percentage> <length>?]?","unicode-bidi":"normal|embed|isolate|bidi-override|isolate-override|plaintext|-moz-isolate|-moz-isolate-override|-moz-plaintext|-webkit-isolate|-webkit-isolate-override|-webkit-plaintext","user-select":"auto|text|none|contain|all","vertical-align":"baseline|sub|super|text-top|text-bottom|middle|top|bottom|<percentage>|<length>",visibility:"visible|hidden|collapse","white-space":"normal|pre|nowrap|pre-wrap|pre-line|break-spaces",widows:"<integer>",width:"auto|<length>|<percentage>|min-content|max-content|fit-content|fit-content( <length-percentage> )|fill|stretch|intrinsic|-moz-max-content|-webkit-max-content|-moz-fit-content|-webkit-fit-content","will-change":"auto|<animateable-feature>#","word-break":"normal|break-all|keep-all|break-word","word-spacing":"normal|<length>","word-wrap":"normal|break-word","writing-mode":"horizontal-tb|vertical-rl|vertical-lr|sideways-rl|sideways-lr|<svg-writing-mode>","z-index":"auto|<integer>",zoom:"normal|reset|<number>|<percentage>","-moz-background-clip":"padding|border","-moz-border-radius-bottomleft":"<'border-bottom-left-radius'>","-moz-border-radius-bottomright":"<'border-bottom-right-radius'>","-moz-border-radius-topleft":"<'border-top-left-radius'>","-moz-border-radius-topright":"<'border-bottom-right-radius'>","-moz-control-character-visibility":"visible|hidden","-moz-osx-font-smoothing":"auto|grayscale","-moz-user-select":"none|text|all|-moz-none","-ms-flex-align":"start|end|center|baseline|stretch","-ms-flex-item-align":"auto|start|end|center|baseline|stretch","-ms-flex-line-pack":"start|end|center|justify|distribute|stretch","-ms-flex-negative":"<'flex-shrink'>","-ms-flex-pack":"start|end|center|justify|distribute","-ms-flex-order":"<integer>","-ms-flex-positive":"<'flex-grow'>","-ms-flex-preferred-size":"<'flex-basis'>","-ms-interpolation-mode":"nearest-neighbor|bicubic","-ms-grid-column-align":"start|end|center|stretch","-ms-grid-row-align":"start|end|center|stretch","-ms-hyphenate-limit-last":"none|always|column|page|spread","-webkit-background-clip":"[<box>|border|padding|content|text]#","-webkit-column-break-after":"always|auto|avoid","-webkit-column-break-before":"always|auto|avoid","-webkit-column-break-inside":"always|auto|avoid","-webkit-font-smoothing":"auto|none|antialiased|subpixel-antialiased","-webkit-mask-box-image":"[<url>|<gradient>|none] [<length-percentage>{4} <-webkit-mask-box-repeat>{2}]?","-webkit-print-color-adjust":"economy|exact","-webkit-text-security":"none|circle|disc|square","-webkit-user-drag":"none|element|auto","-webkit-user-select":"auto|none|text|all","alignment-baseline":"auto|baseline|before-edge|text-before-edge|middle|central|after-edge|text-after-edge|ideographic|alphabetic|hanging|mathematical","baseline-shift":"baseline|sub|super|<svg-length>",behavior:"<url>+","clip-rule":"nonzero|evenodd",container:"<'container-name'> [/ <'container-type'>]?","container-name":"none|<custom-ident>+","container-type":"normal||[size|inline-size]",cue:"<'cue-before'> <'cue-after'>?","cue-after":"<url> <decibel>?|none","cue-before":"<url> <decibel>?|none","dominant-baseline":"auto|use-script|no-change|reset-size|ideographic|alphabetic|hanging|mathematical|central|middle|text-after-edge|text-before-edge",fill:"<paint>","fill-opacity":"<number-zero-one>","fill-rule":"nonzero|evenodd","glyph-orientation-horizontal":"<angle>","glyph-orientation-vertical":"<angle>",kerning:"auto|<svg-length>",marker:"none|<url>","marker-end":"none|<url>","marker-mid":"none|<url>","marker-start":"none|<url>",pause:"<'pause-before'> <'pause-after'>?","pause-after":"<time>|none|x-weak|weak|medium|strong|x-strong","pause-before":"<time>|none|x-weak|weak|medium|strong|x-strong",rest:"<'rest-before'> <'rest-after'>?","rest-after":"<time>|none|x-weak|weak|medium|strong|x-strong","rest-before":"<time>|none|x-weak|weak|medium|strong|x-strong","shape-rendering":"auto|optimizeSpeed|crispEdges|geometricPrecision",src:"[<url> [format( <string># )]?|local( <family-name> )]#",speak:"auto|none|normal","speak-as":"normal|spell-out||digits||[literal-punctuation|no-punctuation]",stroke:"<paint>","stroke-dasharray":"none|[<svg-length>+]#","stroke-dashoffset":"<svg-length>","stroke-linecap":"butt|round|square","stroke-linejoin":"miter|round|bevel","stroke-miterlimit":"<number-one-or-greater>","stroke-opacity":"<number-zero-one>","stroke-width":"<svg-length>","text-anchor":"start|middle|end","unicode-range":"<urange>#","voice-balance":"<number>|left|center|right|leftwards|rightwards","voice-duration":"auto|<time>","voice-family":"[[<family-name>|<generic-voice>] ,]* [<family-name>|<generic-voice>]|preserve","voice-pitch":"<frequency>&&absolute|[[x-low|low|medium|high|x-high]||[<frequency>|<semitones>|<percentage>]]","voice-range":"<frequency>&&absolute|[[x-low|low|medium|high|x-high]||[<frequency>|<semitones>|<percentage>]]","voice-rate":"[normal|x-slow|slow|medium|fast|x-fast]||<percentage>","voice-stress":"normal|strong|moderate|none|reduced","voice-volume":"silent|[[x-soft|soft|medium|loud|x-loud]||<decibel>]"},atrules:{charset:{prelude:"<string>",descriptors:null},"counter-style":{prelude:"<counter-style-name>",descriptors:{"additive-symbols":"[<integer>&&<symbol>]#",fallback:"<counter-style-name>",negative:"<symbol> <symbol>?",pad:"<integer>&&<symbol>",prefix:"<symbol>",range:"[[<integer>|infinite]{2}]#|auto","speak-as":"auto|bullets|numbers|words|spell-out|<counter-style-name>",suffix:"<symbol>",symbols:"<symbol>+",system:"cyclic|numeric|alphabetic|symbolic|additive|[fixed <integer>?]|[extends <counter-style-name>]"}},document:{prelude:"[<url>|url-prefix( <string> )|domain( <string> )|media-document( <string> )|regexp( <string> )]#",descriptors:null},"font-face":{prelude:null,descriptors:{"ascent-override":"normal|<percentage>","descent-override":"normal|<percentage>","font-display":"[auto|block|swap|fallback|optional]","font-family":"<family-name>","font-feature-settings":"normal|<feature-tag-value>#","font-variation-settings":"normal|[<string> <number>]#","font-stretch":"<font-stretch-absolute>{1,2}","font-style":"normal|italic|oblique <angle>{0,2}","font-weight":"<font-weight-absolute>{1,2}","font-variant":"normal|none|[<common-lig-values>||<discretionary-lig-values>||<historical-lig-values>||<contextual-alt-values>||stylistic( <feature-value-name> )||historical-forms||styleset( <feature-value-name># )||character-variant( <feature-value-name># )||swash( <feature-value-name> )||ornaments( <feature-value-name> )||annotation( <feature-value-name> )||[small-caps|all-small-caps|petite-caps|all-petite-caps|unicase|titling-caps]||<numeric-figure-values>||<numeric-spacing-values>||<numeric-fraction-values>||ordinal||slashed-zero||<east-asian-variant-values>||<east-asian-width-values>||ruby]","line-gap-override":"normal|<percentage>","size-adjust":"<percentage>",src:"[<url> [format( <string># )]?|local( <family-name> )]#","unicode-range":"<urange>#"}},"font-feature-values":{prelude:"<family-name>#",descriptors:null},import:{prelude:"[<string>|<url>] [layer|layer( <layer-name> )]? [supports( [<supports-condition>|<declaration>] )]? <media-query-list>?",descriptors:null},keyframes:{prelude:"<keyframes-name>",descriptors:null},layer:{prelude:"[<layer-name>#|<layer-name>?]",descriptors:null},media:{prelude:"<media-query-list>",descriptors:null},namespace:{prelude:"<namespace-prefix>? [<string>|<url>]",descriptors:null},page:{prelude:"<page-selector-list>",descriptors:{bleed:"auto|<length>",marks:"none|[crop||cross]",size:"<length>{1,2}|auto|[<page-size>||[portrait|landscape]]"}},property:{prelude:"<custom-property-name>",descriptors:{syntax:"<string>",inherits:"true|false","initial-value":"<string>"}},"scroll-timeline":{prelude:"<timeline-name>",descriptors:null},supports:{prelude:"<supports-condition>",descriptors:null},viewport:{prelude:null,descriptors:{height:"<viewport-length>{1,2}","max-height":"<viewport-length>","max-width":"<viewport-length>","max-zoom":"auto|<number>|<percentage>","min-height":"<viewport-length>","min-width":"<viewport-length>","min-zoom":"auto|<number>|<percentage>",orientation:"auto|portrait|landscape","user-zoom":"zoom|fixed","viewport-fit":"auto|contain|cover",width:"<viewport-length>{1,2}",zoom:"auto|<number>|<percentage>"}},container:{prelude:"[<container-name>]? <container-condition>",descriptors:null},nest:{prelude:"<complex-selector-list>",descriptors:null}}};var xt={};b(xt,{AnPlusB:()=>en,Atrule:()=>rn,AtrulePrelude:()=>on,AttributeSelector:()=>ln,Block:()=>un,Brackets:()=>hn,CDC:()=>fn,CDO:()=>gn,ClassSelector:()=>xn,Combinator:()=>kn,Comment:()=>vn,Declaration:()=>Cn,DeclarationList:()=>En,Dimension:()=>Pn,Function:()=>Dn,Hash:()=>Nn,IdSelector:()=>Fn,Identifier:()=>Mn,MediaFeature:()=>_n,MediaQuery:()=>Un,MediaQueryList:()=>Wn,NestingSelector:()=>Yn,Nth:()=>Vn,Number:()=>Qn,Operator:()=>$n,Parentheses:()=>Jn,Percentage:()=>to,PseudoClassSelector:()=>no,PseudoElementSelector:()=>io,Ratio:()=>so,Raw:()=>co,Rule:()=>po,Selector:()=>mo,SelectorList:()=>go,String:()=>ko,StyleSheet:()=>vo,TypeSelector:()=>Ao,UnicodeRange:()=>Lo,Url:()=>No,Value:()=>Mo,WhiteSpace:()=>Fo});var en={};b(en,{generate:()=>kc,name:()=>xc,parse:()=>Jr,structure:()=>yc});var me=43,re=45,Jt=110,Oe=!0,bc=!1;function er(e,t){let r=this.tokenStart+e,n=this.charCodeAt(r);for((n===me||n===re)&&(t&&this.error("Number sign is not allowed"),r++);r<this.tokenEnd;r++)B(this.charCodeAt(r))||this.error("Integer is expected",r)}function $e(e){return er.call(this,0,e)}function Ce(e,t){if(!this.cmpChar(this.tokenStart+e,t)){let r="";switch(t){case Jt:r="N is expected";break;case re:r="HyphenMinus is expected";break}this.error(r,this.tokenStart+e)}}function Zr(){let e=0,t=0,r=this.tokenType;for(;r===13||r===25;)r=this.lookupType(++e);if(r!==10)if(this.isDelim(me,e)||this.isDelim(re,e)){t=this.isDelim(me,e)?me:re;do r=this.lookupType(++e);while(r===13||r===25);r!==10&&(this.skip(e),$e.call(this,Oe))}else return null;return e>0&&this.skip(e),t===0&&(r=this.charCodeAt(this.tokenStart),r!==me&&r!==re&&this.error("Number sign is expected")),$e.call(this,t!==0),t===re?"-"+this.consume(10):this.consume(10)}var xc="AnPlusB",yc={a:[String,null],b:[String,null]};function Jr(){let e=this.tokenStart,t=null,r=null;if(this.tokenType===10)$e.call(this,bc),r=this.consume(10);else if(this.tokenType===1&&this.cmpChar(this.tokenStart,re))switch(t="-1",Ce.call(this,1,Jt),this.tokenEnd-this.tokenStart){case 2:this.next(),r=Zr.call(this);break;case 3:Ce.call(this,2,re),this.next(),this.skipSC(),$e.call(this,Oe),r="-"+this.consume(10);break;default:Ce.call(this,2,re),er.call(this,3,Oe),this.next(),r=this.substrToCursor(e+2)}else if(this.tokenType===1||this.isDelim(me)&&this.lookupType(1)===1){let n=0;switch(t="1",this.isDelim(me)&&(n=1,this.next()),Ce.call(this,0,Jt),this.tokenEnd-this.tokenStart){case 1:this.next(),r=Zr.call(this);break;case 2:Ce.call(this,1,re),this.next(),this.skipSC(),$e.call(this,Oe),r="-"+this.consume(10);break;default:Ce.call(this,1,re),er.call(this,2,Oe),this.next(),r=this.substrToCursor(e+n+1)}}else if(this.tokenType===12){let n=this.charCodeAt(this.tokenStart),o=n===me||n===re,i=this.tokenStart+o;for(;i<this.tokenEnd&&B(this.charCodeAt(i));i++);i===this.tokenStart+o&&this.error("Integer is expected",this.tokenStart+o),Ce.call(this,i-this.tokenStart,Jt),t=this.substring(e,i),i+1===this.tokenEnd?(this.next(),r=Zr.call(this)):(Ce.call(this,i-this.tokenStart+1,re),i+2===this.tokenEnd?(this.next(),this.skipSC(),$e.call(this,Oe),r="-"+this.consume(10)):(er.call(this,i-this.tokenStart+2,Oe),this.next(),r=this.substrToCursor(i+1)))}else this.error();return t!==null&&t.charCodeAt(0)===me&&(t=t.substr(1)),r!==null&&r.charCodeAt(0)===me&&(r=r.substr(1)),{type:"AnPlusB",loc:this.getLocation(e,this.tokenStart),a:t,b:r}}function kc(e){if(e.a){let t=e.a==="+1"&&"n"||e.a==="1"&&"n"||e.a==="-1"&&"-n"||e.a+"n";if(e.b){let r=e.b[0]==="-"||e.b[0]==="+"?e.b:"+"+e.b;this.tokenize(t+r)}else this.tokenize(t)}else this.tokenize(e.b)}var rn={};b(rn,{generate:()=>Ac,name:()=>vc,parse:()=>tn,structure:()=>Cc,walkContext:()=>Sc});function ba(e){return this.Raw(e,this.consumeUntilLeftCurlyBracketOrSemicolon,!0)}function wc(){for(let e=1,t;t=this.lookupType(e);e++){if(t===24)return!0;if(t===23||t===3)return!1}return!1}var vc="Atrule",Sc="atrule",Cc={name:String,prelude:["AtrulePrelude","Raw",null],block:["Block",null]};function tn(e=!1){let t=this.tokenStart,r,n,o=null,i=null;switch(this.eat(3),r=this.substrToCursor(t+1),n=r.toLowerCase(),this.skipSC(),this.eof===!1&&this.tokenType!==23&&this.tokenType!==17&&(this.parseAtrulePrelude?o=this.parseWithFallback(this.AtrulePrelude.bind(this,r,e),ba):o=ba.call(this,this.tokenIndex),this.skipSC()),this.tokenType){case 17:this.next();break;case 23:hasOwnProperty.call(this.atrule,n)&&typeof this.atrule[n].block=="function"?i=this.atrule[n].block.call(this,e):i=this.Block(wc.call(this));break}return{type:"Atrule",loc:this.getLocation(t,this.tokenStart),name:r,prelude:o,block:i}}function Ac(e){this.token(3,"@"+e.name),e.prelude!==null&&this.node(e.prelude),e.block?this.node(e.block):this.token(17,";")}var on={};b(on,{generate:()=>Pc,name:()=>Tc,parse:()=>nn,structure:()=>Lc,walkContext:()=>Ec});var Tc="AtrulePrelude",Ec="atrulePrelude",Lc={children:[[]]};function nn(e){let t=null;return e!==null&&(e=e.toLowerCase()),this.skipSC(),hasOwnProperty.call(this.atrule,e)&&typeof this.atrule[e].prelude=="function"?t=this.atrule[e].prelude.call(this):t=this.readSequence(this.scope.AtrulePrelude),this.skipSC(),this.eof!==!0&&this.tokenType!==23&&this.tokenType!==17&&this.error("Semicolon or block is expected"),{type:"AtrulePrelude",loc:this.getLocationFromList(t),children:t}}function Pc(e){this.children(e)}var ln={};b(ln,{generate:()=>Fc,name:()=>Mc,parse:()=>sn,structure:()=>Rc});var Ic=36,xa=42,tr=61,Dc=94,an=124,Oc=126;function Nc(){this.eof&&this.error("Unexpected end of input");let e=this.tokenStart,t=!1;return this.isDelim(xa)?(t=!0,this.next()):this.isDelim(an)||this.eat(1),this.isDelim(an)?this.charCodeAt(this.tokenStart+1)!==tr?(this.next(),this.eat(1)):t&&this.error("Identifier is expected",this.tokenEnd):t&&this.error("Vertical line is expected"),{type:"Identifier",loc:this.getLocation(e,this.tokenStart),name:this.substrToCursor(e)}}function zc(){let e=this.tokenStart,t=this.charCodeAt(e);return t!==tr&&t!==Oc&&t!==Dc&&t!==Ic&&t!==xa&&t!==an&&this.error("Attribute selector (=, ~=, ^=, $=, *=, |=) is expected"),this.next(),t!==tr&&(this.isDelim(tr)||this.error("Equal sign is expected"),this.next()),this.substrToCursor(e)}var Mc="AttributeSelector",Rc={name:"Identifier",matcher:[String,null],value:["String","Identifier",null],flags:[String,null]};function sn(){let e=this.tokenStart,t,r=null,n=null,o=null;return this.eat(19),this.skipSC(),t=Nc.call(this),this.skipSC(),this.tokenType!==20&&(this.tokenType!==1&&(r=zc.call(this),this.skipSC(),n=this.tokenType===5?this.String():this.Identifier(),this.skipSC()),this.tokenType===1&&(o=this.consume(1),this.skipSC())),this.eat(20),{type:"AttributeSelector",loc:this.getLocation(e,this.tokenStart),name:t,matcher:r,value:n,flags:o}}function Fc(e){this.token(9,"["),this.node(e.name),e.matcher!==null&&(this.tokenize(e.matcher),this.node(e.value)),e.flags!==null&&this.token(1,e.flags),this.token(9,"]")}var un={};b(un,{generate:()=>Wc,name:()=>qc,parse:()=>cn,structure:()=>jc,walkContext:()=>Uc});var Bc=38;function wa(e){return this.Raw(e,null,!0)}function ya(){return this.parseWithFallback(this.Rule,wa)}function ka(e){return this.Raw(e,this.consumeUntilSemicolonIncluded,!0)}function _c(){if(this.tokenType===17)return ka.call(this,this.tokenIndex);let e=this.parseWithFallback(this.Declaration,ka);return this.tokenType===17&&this.next(),e}var qc="Block",Uc="block",jc={children:[["Atrule","Rule","Declaration"]]};function cn(e){let t=e?_c:ya,r=this.tokenStart,n=this.createList();this.eat(23);e:for(;!this.eof;)switch(this.tokenType){case 24:break e;case 13:case 25:this.next();break;case 3:n.push(this.parseWithFallback(this.Atrule.bind(this,e),wa));break;default:e&&this.isDelim(Bc)?n.push(ya.call(this)):n.push(t.call(this))}return this.eof||this.eat(24),{type:"Block",loc:this.getLocation(r,this.tokenStart),children:n}}function Wc(e){this.token(23,"{"),this.children(e,t=>{t.type==="Declaration"&&this.token(17,";")}),this.token(24,"}")}var hn={};b(hn,{generate:()=>Gc,name:()=>Hc,parse:()=>pn,structure:()=>Yc});var Hc="Brackets",Yc={children:[[]]};function pn(e,t){let r=this.tokenStart,n=null;return this.eat(19),n=e.call(this,t),this.eof||this.eat(20),{type:"Brackets",loc:this.getLocation(r,this.tokenStart),children:n}}function Gc(e){this.token(9,"["),this.children(e),this.token(9,"]")}var fn={};b(fn,{generate:()=>Qc,name:()=>Vc,parse:()=>mn,structure:()=>Kc});var Vc="CDC",Kc=[];function mn(){let e=this.tokenStart;return this.eat(15),{type:"CDC",loc:this.getLocation(e,this.tokenStart)}}function Qc(){this.token(15,"-->")}var gn={};b(gn,{generate:()=>Zc,name:()=>Xc,parse:()=>dn,structure:()=>$c});var Xc="CDO",$c=[];function dn(){let e=this.tokenStart;return this.eat(14),{type:"CDO",loc:this.getLocation(e,this.tokenStart)}}function Zc(){this.token(14,"<!--")}var xn={};b(xn,{generate:()=>ru,name:()=>eu,parse:()=>bn,structure:()=>tu});var Jc=46,eu="ClassSelector",tu={name:String};function bn(){return this.eatDelim(Jc),{type:"ClassSelector",loc:this.getLocation(this.tokenStart-1,this.tokenEnd),name:this.consume(1)}}function ru(e){this.token(9,"."),this.token(1,e.name)}var kn={};b(kn,{generate:()=>lu,name:()=>au,parse:()=>yn,structure:()=>su});var nu=43,va=47,ou=62,iu=126,au="Combinator",su={name:String};function yn(){let e=this.tokenStart,t;switch(this.tokenType){case 13:t=" ";break;case 9:switch(this.charCodeAt(this.tokenStart)){case ou:case nu:case iu:this.next();break;case va:this.next(),this.eatIdent("deep"),this.eatDelim(va);break;default:this.error("Combinator is expected")}t=this.substrToCursor(e);break}return{type:"Combinator",loc:this.getLocation(e,this.tokenStart),name:t}}function lu(e){this.tokenize(e.name)}var vn={};b(vn,{generate:()=>mu,name:()=>pu,parse:()=>wn,structure:()=>hu});var cu=42,uu=47,pu="Comment",hu={value:String};function wn(){let e=this.tokenStart,t=this.tokenEnd;return this.eat(25),t-e+2>=2&&this.charCodeAt(t-2)===cu&&this.charCodeAt(t-1)===uu&&(t-=2),{type:"Comment",loc:this.getLocation(e,this.tokenStart),value:this.substring(e+2,t)}}function mu(e){this.token(25,"/*"+e.value+"*/")}var Cn={};b(Cn,{generate:()=>Au,name:()=>vu,parse:()=>Sn,structure:()=>Cu,walkContext:()=>Su});var Ca=33,fu=35,du=36,gu=38,bu=42,xu=43,Sa=47;function yu(e){return this.Raw(e,this.consumeUntilExclamationMarkOrSemicolon,!0)}function ku(e){return this.Raw(e,this.consumeUntilExclamationMarkOrSemicolon,!1)}function wu(){let e=this.tokenIndex,t=this.Value();return t.type!=="Raw"&&this.eof===!1&&this.tokenType!==17&&this.isDelim(Ca)===!1&&this.isBalanceEdge(e)===!1&&this.error(),t}var vu="Declaration",Su="declaration",Cu={important:[Boolean,String],property:String,value:["Value","Raw"]};function Sn(){let e=this.tokenStart,t=this.tokenIndex,r=Tu.call(this),n=lt(r),o=n?this.parseCustomProperty:this.parseValue,i=n?ku:yu,s=!1,u;this.skipSC(),this.eat(16);let c=this.tokenIndex;if(n||this.skipSC(),o?u=this.parseWithFallback(wu,i):u=i.call(this,this.tokenIndex),n&&u.type==="Value"&&u.children.isEmpty){for(let a=c-this.tokenIndex;a<=0;a++)if(this.lookupType(a)===13){u.children.appendData({type:"WhiteSpace",loc:null,value:" "});break}}return this.isDelim(Ca)&&(s=Eu.call(this),this.skipSC()),this.eof===!1&&this.tokenType!==17&&this.isBalanceEdge(t)===!1&&this.error(),{type:"Declaration",loc:this.getLocation(e,this.tokenStart),important:s,property:r,value:u}}function Au(e){this.token(1,e.property),this.token(16,":"),this.node(e.value),e.important&&(this.token(9,"!"),this.token(1,e.important===!0?"important":e.important))}function Tu(){let e=this.tokenStart;if(this.tokenType===9)switch(this.charCodeAt(this.tokenStart)){case bu:case du:case xu:case fu:case gu:this.next();break;case Sa:this.next(),this.isDelim(Sa)&&this.next();break}return this.tokenType===4?this.eat(4):this.eat(1),this.substrToCursor(e)}function Eu(){this.eat(9),this.skipSC();let e=this.consume(1);return e==="important"?!0:e}var En={};b(En,{generate:()=>Du,name:()=>Pu,parse:()=>Tn,structure:()=>Iu});var Lu=38;function An(e){return this.Raw(e,this.consumeUntilSemicolonIncluded,!0)}var Pu="DeclarationList",Iu={children:[["Declaration","Atrule","Rule"]]};function Tn(){let e=this.createList();e:for(;!this.eof;)switch(this.tokenType){case 13:case 25:case 17:this.next();break;case 3:e.push(this.parseWithFallback(this.Atrule.bind(this,!0),An));break;default:this.isDelim(Lu)?e.push(this.parseWithFallback(this.Rule,An)):e.push(this.parseWithFallback(this.Declaration,An))}return{type:"DeclarationList",loc:this.getLocationFromList(e),children:e}}function Du(e){this.children(e,t=>{t.type==="Declaration"&&this.token(17,";")})}var Pn={};b(Pn,{generate:()=>zu,name:()=>Ou,parse:()=>Ln,structure:()=>Nu});var Ou="Dimension",Nu={value:String,unit:String};function Ln(){let e=this.tokenStart,t=this.consumeNumber(12);return{type:"Dimension",loc:this.getLocation(e,this.tokenStart),value:t,unit:this.substring(e+t.length,this.tokenStart)}}function zu(e){this.token(12,e.value+e.unit)}var Dn={};b(Dn,{generate:()=>Bu,name:()=>Mu,parse:()=>In,structure:()=>Fu,walkContext:()=>Ru});var Mu="Function",Ru="function",Fu={name:String,children:[[]]};function In(e,t){let r=this.tokenStart,n=this.consumeFunctionName(),o=n.toLowerCase(),i;return i=t.hasOwnProperty(o)?t[o].call(this,t):e.call(this,t),this.eof||this.eat(22),{type:"Function",loc:this.getLocation(r,this.tokenStart),name:n,children:i}}function Bu(e){this.token(2,e.name+"("),this.children(e),this.token(22,")")}var Nn={};b(Nn,{generate:()=>ju,name:()=>qu,parse:()=>On,structure:()=>Uu,xxx:()=>_u});var _u="XXX",qu="Hash",Uu={value:String};function On(){let e=this.tokenStart;return this.eat(4),{type:"Hash",loc:this.getLocation(e,this.tokenStart),value:this.substrToCursor(e+1)}}function ju(e){this.token(4,"#"+e.value)}var Mn={};b(Mn,{generate:()=>Yu,name:()=>Wu,parse:()=>zn,structure:()=>Hu});var Wu="Identifier",Hu={name:String};function zn(){return{type:"Identifier",loc:this.getLocation(this.tokenStart,this.tokenEnd),name:this.consume(1)}}function Yu(e){this.token(1,e.name)}var Fn={};b(Fn,{generate:()=>Ku,name:()=>Gu,parse:()=>Rn,structure:()=>Vu});var Gu="IdSelector",Vu={name:String};function Rn(){let e=this.tokenStart;return this.eat(4),{type:"IdSelector",loc:this.getLocation(e,this.tokenStart),name:this.substrToCursor(e+1)}}function Ku(e){this.token(9,"#"+e.name)}var _n={};b(_n,{generate:()=>$u,name:()=>Qu,parse:()=>Bn,structure:()=>Xu});var Qu="MediaFeature",Xu={name:String,value:["Identifier","Number","Dimension","Ratio",null]};function Bn(){let e=this.tokenStart,t,r=null;if(this.eat(21),this.skipSC(),t=this.consume(1),this.skipSC(),this.tokenType!==22){switch(this.eat(16),this.skipSC(),this.tokenType){case 10:this.lookupNonWSType(1)===9?r=this.Ratio():r=this.Number();break;case 12:r=this.Dimension();break;case 1:r=this.Identifier();break;default:this.error("Number, dimension, ratio or identifier is expected")}this.skipSC()}return this.eat(22),{type:"MediaFeature",loc:this.getLocation(e,this.tokenStart),name:t,value:r}}function $u(e){this.token(21,"("),this.token(1,e.name),e.value!==null&&(this.token(16,":"),this.node(e.value)),this.token(22,")")}var Un={};b(Un,{generate:()=>ep,name:()=>Zu,parse:()=>qn,structure:()=>Ju});var Zu="MediaQuery",Ju={children:[["Identifier","MediaFeature","WhiteSpace"]]};function qn(){let e=this.createList(),t=null;this.skipSC();e:for(;!this.eof;){switch(this.tokenType){case 25:case 13:this.next();continue;case 1:t=this.Identifier();break;case 21:t=this.MediaFeature();break;default:break e}e.push(t)}return t===null&&this.error("Identifier or parenthesis is expected"),{type:"MediaQuery",loc:this.getLocationFromList(e),children:e}}function ep(e){this.children(e)}var Wn={};b(Wn,{generate:()=>np,name:()=>tp,parse:()=>jn,structure:()=>rp});var tp="MediaQueryList",rp={children:[["MediaQuery"]]};function jn(){let e=this.createList();for(this.skipSC();!this.eof&&(e.push(this.MediaQuery()),this.tokenType===18);)this.next();return{type:"MediaQueryList",loc:this.getLocationFromList(e),children:e}}function np(e){this.children(e,()=>this.token(18,","))}var Yn={};b(Yn,{generate:()=>sp,name:()=>ip,parse:()=>Hn,structure:()=>ap});var op=38,ip="NestingSelector",ap={};function Hn(){let e=this.tokenStart;return this.eatDelim(op),{type:"NestingSelector",loc:this.getLocation(e,this.tokenStart)}}function sp(){this.token(9,"&")}var Vn={};b(Vn,{generate:()=>up,name:()=>lp,parse:()=>Gn,structure:()=>cp});var lp="Nth",cp={nth:["AnPlusB","Identifier"],selector:["SelectorList",null]};function Gn(){this.skipSC();let e=this.tokenStart,t=e,r=null,n;return this.lookupValue(0,"odd")||this.lookupValue(0,"even")?n=this.Identifier():n=this.AnPlusB(),t=this.tokenStart,this.skipSC(),this.lookupValue(0,"of")&&(this.next(),r=this.SelectorList(),t=this.tokenStart),{type:"Nth",loc:this.getLocation(e,t),nth:n,selector:r}}function up(e){this.node(e.nth),e.selector!==null&&(this.token(1,"of"),this.node(e.selector))}var Qn={};b(Qn,{generate:()=>mp,name:()=>pp,parse:()=>Kn,structure:()=>hp});var pp="Number",hp={value:String};function Kn(){return{type:"Number",loc:this.getLocation(this.tokenStart,this.tokenEnd),value:this.consume(10)}}function mp(e){this.token(10,e.value)}var $n={};b($n,{generate:()=>gp,name:()=>fp,parse:()=>Xn,structure:()=>dp});var fp="Operator",dp={value:String};function Xn(){let e=this.tokenStart;return this.next(),{type:"Operator",loc:this.getLocation(e,this.tokenStart),value:this.substrToCursor(e)}}function gp(e){this.tokenize(e.value)}var Jn={};b(Jn,{generate:()=>yp,name:()=>bp,parse:()=>Zn,structure:()=>xp});var bp="Parentheses",xp={children:[[]]};function Zn(e,t){let r=this.tokenStart,n=null;return this.eat(21),n=e.call(this,t),this.eof||this.eat(22),{type:"Parentheses",loc:this.getLocation(r,this.tokenStart),children:n}}function yp(e){this.token(21,"("),this.children(e),this.token(22,")")}var to={};b(to,{generate:()=>vp,name:()=>kp,parse:()=>eo,structure:()=>wp});var kp="Percentage",wp={value:String};function eo(){return{type:"Percentage",loc:this.getLocation(this.tokenStart,this.tokenEnd),value:this.consumeNumber(11)}}function vp(e){this.token(11,e.value+"%")}var no={};b(no,{generate:()=>Tp,name:()=>Sp,parse:()=>ro,structure:()=>Ap,walkContext:()=>Cp});var Sp="PseudoClassSelector",Cp="function",Ap={name:String,children:[["Raw"],null]};function ro(){let e=this.tokenStart,t=null,r,n;return this.eat(16),this.tokenType===2?(r=this.consumeFunctionName(),n=r.toLowerCase(),hasOwnProperty.call(this.pseudo,n)?(this.skipSC(),t=this.pseudo[n].call(this),this.skipSC()):(t=this.createList(),t.push(this.Raw(this.tokenIndex,null,!1))),this.eat(22)):r=this.consume(1),{type:"PseudoClassSelector",loc:this.getLocation(e,this.tokenStart),name:r,children:t}}function Tp(e){this.token(16,":"),e.children===null?this.token(1,e.name):(this.token(2,e.name+"("),this.children(e),this.token(22,")"))}var io={};b(io,{generate:()=>Ip,name:()=>Ep,parse:()=>oo,structure:()=>Pp,walkContext:()=>Lp});var Ep="PseudoElementSelector",Lp="function",Pp={name:String,children:[["Raw"],null]};function oo(){let e=this.tokenStart,t=null,r,n;return this.eat(16),this.eat(16),this.tokenType===2?(r=this.consumeFunctionName(),n=r.toLowerCase(),hasOwnProperty.call(this.pseudo,n)?(this.skipSC(),t=this.pseudo[n].call(this),this.skipSC()):(t=this.createList(),t.push(this.Raw(this.tokenIndex,null,!1))),this.eat(22)):r=this.consume(1),{type:"PseudoElementSelector",loc:this.getLocation(e,this.tokenStart),name:r,children:t}}function Ip(e){this.token(16,":"),this.token(16,":"),e.children===null?this.token(1,e.name):(this.token(2,e.name+"("),this.children(e),this.token(22,")"))}var so={};b(so,{generate:()=>Mp,name:()=>Np,parse:()=>ao,structure:()=>zp});var Dp=47,Op=46;function Aa(){this.skipSC();let e=this.consume(10);for(let t=0;t<e.length;t++){let r=e.charCodeAt(t);!B(r)&&r!==Op&&this.error("Unsigned number is expected",this.tokenStart-e.length+t)}return Number(e)===0&&this.error("Zero number is not allowed",this.tokenStart-e.length),e}var Np="Ratio",zp={left:String,right:String};function ao(){let e=this.tokenStart,t=Aa.call(this),r;return this.skipSC(),this.eatDelim(Dp),r=Aa.call(this),{type:"Ratio",loc:this.getLocation(e,this.tokenStart),left:t,right:r}}function Mp(e){this.token(10,e.left),this.token(9,"/"),this.token(10,e.right)}var co={};b(co,{generate:()=>_p,name:()=>Fp,parse:()=>lo,structure:()=>Bp});function Rp(){return this.tokenIndex>0&&this.lookupType(-1)===13?this.tokenIndex>1?this.getTokenStart(this.tokenIndex-1):this.firstCharOffset:this.tokenStart}var Fp="Raw",Bp={value:String};function lo(e,t,r){let n=this.getTokenStart(e),o;return this.skipUntilBalanced(e,t||this.consumeUntilBalanceEnd),r&&this.tokenStart>n?o=Rp.call(this):o=this.tokenStart,{type:"Raw",loc:this.getLocation(n,o),value:this.substring(n,o)}}function _p(e){this.tokenize(e.value)}var po={};b(po,{generate:()=>Hp,name:()=>Up,parse:()=>uo,structure:()=>Wp,walkContext:()=>jp});function Ta(e){return this.Raw(e,this.consumeUntilLeftCurlyBracket,!0)}function qp(){let e=this.SelectorList();return e.type!=="Raw"&&this.eof===!1&&this.tokenType!==23&&this.error(),e}var Up="Rule",jp="rule",Wp={prelude:["SelectorList","Raw"],block:["Block"]};function uo(){let e=this.tokenIndex,t=this.tokenStart,r,n;return this.parseRulePrelude?r=this.parseWithFallback(qp,Ta):r=Ta.call(this,e),n=this.Block(!0),{type:"Rule",loc:this.getLocation(t,this.tokenStart),prelude:r,block:n}}function Hp(e){this.node(e.prelude),this.node(e.block)}var mo={};b(mo,{generate:()=>Vp,name:()=>Yp,parse:()=>ho,structure:()=>Gp});var Yp="Selector",Gp={children:[["TypeSelector","IdSelector","ClassSelector","AttributeSelector","PseudoClassSelector","PseudoElementSelector","Combinator","WhiteSpace"]]};function ho(){let e=this.readSequence(this.scope.Selector);return this.getFirstListNode(e)===null&&this.error("Selector is expected"),{type:"Selector",loc:this.getLocationFromList(e),children:e}}function Vp(e){this.children(e)}var go={};b(go,{generate:()=>$p,name:()=>Kp,parse:()=>fo,structure:()=>Xp,walkContext:()=>Qp});var Kp="SelectorList",Qp="selector",Xp={children:[["Selector","Raw"]]};function fo(){let e=this.createList();for(;!this.eof;){if(e.push(this.Selector()),this.tokenType===18){this.next();continue}break}return{type:"SelectorList",loc:this.getLocationFromList(e),children:e}}function $p(e){this.children(e,()=>this.token(18,","))}var ko={};b(ko,{generate:()=>eh,name:()=>Zp,parse:()=>yo,structure:()=>Jp});var rr={};b(rr,{decode:()=>gt,encode:()=>xo});var bo=92,Ea=34,La=39;function gt(e){let t=e.length,r=e.charCodeAt(0),n=r===Ea||r===La?1:0,o=n===1&&t>1&&e.charCodeAt(t-1)===r?t-2:t-1,i="";for(let s=n;s<=o;s++){let u=e.charCodeAt(s);if(u===bo){if(s===o){s!==t-1&&(i=e.substr(s+1));break}if(u=e.charCodeAt(++s),$(bo,u)){let c=s-1,a=se(e,c);s=a-1,i+=_e(e.substring(c+1,a))}else u===13&&e.charCodeAt(s+1)===10&&s++}else i+=e[s]}return i}function xo(e,t){let r=t?"'":'"',n=t?La:Ea,o="",i=!1;for(let s=0;s<e.length;s++){let u=e.charCodeAt(s);if(u===0){o+="\uFFFD";continue}if(u<=31||u===127){o+="\\"+u.toString(16),i=!0;continue}u===n||u===bo?(o+="\\"+e.charAt(s),i=!1):(i&&(ee(u)||pe(u))&&(o+=" "),o+=e.charAt(s),i=!1)}return r+o+r}var Zp="String",Jp={value:String};function yo(){return{type:"String",loc:this.getLocation(this.tokenStart,this.tokenEnd),value:gt(this.consume(5))}}function eh(e){this.token(5,xo(e.value))}var vo={};b(vo,{generate:()=>ih,name:()=>rh,parse:()=>wo,structure:()=>oh,walkContext:()=>nh});var th=33;function Pa(e){return this.Raw(e,null,!1)}var rh="StyleSheet",nh="stylesheet",oh={children:[["Comment","CDO","CDC","Atrule","Rule","Raw"]]};function wo(){let e=this.tokenStart,t=this.createList(),r;e:for(;!this.eof;){switch(this.tokenType){case 13:this.next();continue;case 25:if(this.charCodeAt(this.tokenStart+2)!==th){this.next();continue}r=this.Comment();break;case 14:r=this.CDO();break;case 15:r=this.CDC();break;case 3:r=this.parseWithFallback(this.Atrule,Pa);break;default:r=this.parseWithFallback(this.Rule,Pa)}t.push(r)}return{type:"StyleSheet",loc:this.getLocation(e,this.tokenStart),children:t}}function ih(e){this.children(e)}var Ao={};b(Ao,{generate:()=>ch,name:()=>sh,parse:()=>Co,structure:()=>lh});var ah=42,Ia=124;function So(){this.tokenType!==1&&this.isDelim(ah)===!1&&this.error("Identifier or asterisk is expected"),this.next()}var sh="TypeSelector",lh={name:String};function Co(){let e=this.tokenStart;return this.isDelim(Ia)?(this.next(),So.call(this)):(So.call(this),this.isDelim(Ia)&&(this.next(),So.call(this))),{type:"TypeSelector",loc:this.getLocation(e,this.tokenStart),name:this.substrToCursor(e)}}function ch(e){this.tokenize(e.name)}var Lo={};b(Lo,{generate:()=>fh,name:()=>hh,parse:()=>Eo,structure:()=>mh});var Da=43,Oa=45,To=63;function bt(e,t){let r=0;for(let n=this.tokenStart+e;n<this.tokenEnd;n++){let o=this.charCodeAt(n);if(o===Oa&&t&&r!==0)return bt.call(this,e+r+1,!1),-1;ee(o)||this.error(t&&r!==0?"Hyphen minus"+(r<6?" or hex digit":"")+" is expected":r<6?"Hex digit is expected":"Unexpected input",n),++r>6&&this.error("Too many hex digits",n)}return this.next(),r}function nr(e){let t=0;for(;this.isDelim(To);)++t>e&&this.error("Too many question marks"),this.next()}function uh(e){this.charCodeAt(this.tokenStart)!==e&&this.error((e===Da?"Plus sign":"Hyphen minus")+" is expected")}function ph(){let e=0;switch(this.tokenType){case 10:if(e=bt.call(this,1,!0),this.isDelim(To)){nr.call(this,6-e);break}if(this.tokenType===12||this.tokenType===10){uh.call(this,Oa),bt.call(this,1,!1);break}break;case 12:e=bt.call(this,1,!0),e>0&&nr.call(this,6-e);break;default:if(this.eatDelim(Da),this.tokenType===1){e=bt.call(this,0,!0),e>0&&nr.call(this,6-e);break}if(this.isDelim(To)){this.next(),nr.call(this,5);break}this.error("Hex digit or question mark is expected")}}var hh="UnicodeRange",mh={value:String};function Eo(){let e=this.tokenStart;return this.eatIdent("u"),ph.call(this),{type:"UnicodeRange",loc:this.getLocation(e,this.tokenStart),value:this.substrToCursor(e)}}function fh(e){this.tokenize(e.value)}var No={};b(No,{generate:()=>wh,name:()=>yh,parse:()=>Oo,structure:()=>kh});var or={};b(or,{decode:()=>Io,encode:()=>Do});var dh=32,Po=92,gh=34,bh=39,xh=40,Na=41;function Io(e){let t=e.length,r=4,n=e.charCodeAt(t-1)===Na?t-2:t-1,o="";for(;r<n&&pe(e.charCodeAt(r));)r++;for(;r<n&&pe(e.charCodeAt(n));)n--;for(let i=r;i<=n;i++){let s=e.charCodeAt(i);if(s===Po){if(i===n){i!==t-1&&(o=e.substr(i+1));break}if(s=e.charCodeAt(++i),$(Po,s)){let u=i-1,c=se(e,u);i=c-1,o+=_e(e.substring(u+1,c))}else s===13&&e.charCodeAt(i+1)===10&&i++}else o+=e[i]}return o}function Do(e){let t="",r=!1;for(let n=0;n<e.length;n++){let o=e.charCodeAt(n);if(o===0){t+="\uFFFD";continue}if(o<=31||o===127){t+="\\"+o.toString(16),r=!0;continue}o===dh||o===Po||o===gh||o===bh||o===xh||o===Na?(t+="\\"+e.charAt(n),r=!1):(r&&ee(o)&&(t+=" "),t+=e.charAt(n),r=!1)}return"url("+t+")"}var yh="Url",kh={value:String};function Oo(){let e=this.tokenStart,t;switch(this.tokenType){case 7:t=Io(this.consume(7));break;case 2:this.cmpStr(this.tokenStart,this.tokenEnd,"url(")||this.error("Function name must be `url`"),this.eat(2),this.skipSC(),t=gt(this.consume(5)),this.skipSC(),this.eof||this.eat(22);break;default:this.error("Url or Function is expected")}return{type:"Url",loc:this.getLocation(e,this.tokenStart),value:t}}function wh(e){this.token(7,Do(e.value))}var Mo={};b(Mo,{generate:()=>Ch,name:()=>vh,parse:()=>zo,structure:()=>Sh});var vh="Value",Sh={children:[[]]};function zo(){let e=this.tokenStart,t=this.readSequence(this.scope.Value);return{type:"Value",loc:this.getLocation(e,this.tokenStart),children:t}}function Ch(e){this.children(e)}var Fo={};b(Fo,{generate:()=>Lh,name:()=>Th,parse:()=>Ro,structure:()=>Eh});var Ah=Object.freeze({type:"WhiteSpace",loc:null,value:" "}),Th="WhiteSpace",Eh={value:String};function Ro(){return this.eat(13),Ah}function Lh(e){this.token(13,e.value)}var za={generic:!0,...ga,node:xt};var Bo={};b(Bo,{AtrulePrelude:()=>Ra,Selector:()=>Ba,Value:()=>ja});var Ph=35,Ih=42,Ma=43,Dh=45,Oh=47,Nh=117;function yt(e){switch(this.tokenType){case 4:return this.Hash();case 18:return this.Operator();case 21:return this.Parentheses(this.readSequence,e.recognizer);case 19:return this.Brackets(this.readSequence,e.recognizer);case 5:return this.String();case 12:return this.Dimension();case 11:return this.Percentage();case 10:return this.Number();case 2:return this.cmpStr(this.tokenStart,this.tokenEnd,"url(")?this.Url():this.Function(this.readSequence,e.recognizer);case 7:return this.Url();case 1:return this.cmpChar(this.tokenStart,Nh)&&this.cmpChar(this.tokenStart+1,Ma)?this.UnicodeRange():this.Identifier();case 9:{let t=this.charCodeAt(this.tokenStart);if(t===Oh||t===Ih||t===Ma||t===Dh)return this.Operator();t===Ph&&this.error("Hex or identifier is expected",this.tokenStart+1);break}}}var Ra={getNode:yt};var zh=35,Mh=38,Rh=42,Fh=43,Bh=47,Fa=46,_h=62,qh=124,Uh=126;function jh(e,t){t.last!==null&&t.last.type!=="Combinator"&&e!==null&&e.type!=="Combinator"&&t.push({type:"Combinator",loc:null,name:" "})}function Wh(){switch(this.tokenType){case 19:return this.AttributeSelector();case 4:return this.IdSelector();case 16:return this.lookupType(1)===16?this.PseudoElementSelector():this.PseudoClassSelector();case 1:return this.TypeSelector();case 10:case 11:return this.Percentage();case 12:this.charCodeAt(this.tokenStart)===Fa&&this.error("Identifier is expected",this.tokenStart+1);break;case 9:{switch(this.charCodeAt(this.tokenStart)){case Fh:case _h:case Uh:case Bh:return this.Combinator();case Fa:return this.ClassSelector();case Rh:case qh:return this.TypeSelector();case zh:return this.IdSelector();case Mh:return this.NestingSelector()}break}}}var Ba={onWhiteSpace:jh,getNode:Wh};function _a(){return this.createSingleNodeList(this.Raw(this.tokenIndex,null,!1))}function qa(){let e=this.createList();if(this.skipSC(),e.push(this.Identifier()),this.skipSC(),this.tokenType===18){e.push(this.Operator());let t=this.tokenIndex,r=this.parseCustomProperty?this.Value(null):this.Raw(this.tokenIndex,this.consumeUntilExclamationMarkOrSemicolon,!1);if(r.type==="Value"&&r.children.isEmpty){for(let n=t-this.tokenIndex;n<=0;n++)if(this.lookupType(n)===13){r.children.appendData({type:"WhiteSpace",loc:null,value:" "});break}}e.push(r)}return e}function Ua(e){return e!==null&&e.type==="Operator"&&(e.value[e.value.length-1]==="-"||e.value[e.value.length-1]==="+")}var ja={getNode:yt,onWhiteSpace(e,t){Ua(e)&&(e.value=" "+e.value),Ua(t.last)&&(t.last.value+=" ")},expression:_a,var:qa};var Wa={parse:{prelude:null,block(){return this.Block(!0)}}};var Ha={parse:{prelude(){let e=this.createList();switch(this.skipSC(),this.tokenType){case 5:e.push(this.String());break;case 7:case 2:e.push(this.Url());break;default:this.error("String or url() is expected")}return(this.lookupNonWSType(0)===1||this.lookupNonWSType(0)===21)&&e.push(this.MediaQueryList()),e},block:null}};var Ya={parse:{prelude(){return this.createSingleNodeList(this.MediaQueryList())},block(e=!1){return this.Block(e)}}};var Ga={parse:{prelude(){return this.createSingleNodeList(this.SelectorList())},block(){return this.Block(!0)}}};var Va={parse:{prelude(){return this.createSingleNodeList(this.SelectorList())},block(){return this.Block(!0)}}};function Hh(){return this.createSingleNodeList(this.Raw(this.tokenIndex,null,!1))}function Yh(){return this.skipSC(),this.tokenType===1&&this.lookupNonWSType(1)===16?this.createSingleNodeList(this.Declaration()):Ka.call(this)}function Ka(){let e=this.createList(),t;this.skipSC();e:for(;!this.eof;){switch(this.tokenType){case 25:case 13:this.next();continue;case 2:t=this.Function(Hh,this.scope.AtrulePrelude);break;case 1:t=this.Identifier();break;case 21:t=this.Parentheses(Yh,this.scope.AtrulePrelude);break;default:break e}e.push(t)}return e}var Qa={parse:{prelude(){let e=Ka.call(this);return this.getFirstListNode(e)===null&&this.error("Condition is expected"),e},block(e=!1){return this.Block(e)}}};var Xa={"font-face":Wa,import:Ha,media:Ya,nest:Ga,page:Va,supports:Qa};var Ne={parse(){return this.createSingleNodeList(this.SelectorList())}},_o={parse(){return this.createSingleNodeList(this.Selector())}},$a={parse(){return this.createSingleNodeList(this.Identifier())}},ir={parse(){return this.createSingleNodeList(this.Nth())}},Za={dir:$a,has:Ne,lang:$a,matches:Ne,is:Ne,"-moz-any":Ne,"-webkit-any":Ne,where:Ne,not:Ne,"nth-child":ir,"nth-last-child":ir,"nth-last-of-type":ir,"nth-of-type":ir,slotted:_o,host:_o,"host-context":_o};var qo={};b(qo,{AnPlusB:()=>Jr,Atrule:()=>tn,AtrulePrelude:()=>nn,AttributeSelector:()=>sn,Block:()=>cn,Brackets:()=>pn,CDC:()=>mn,CDO:()=>dn,ClassSelector:()=>bn,Combinator:()=>yn,Comment:()=>wn,Declaration:()=>Sn,DeclarationList:()=>Tn,Dimension:()=>Ln,Function:()=>In,Hash:()=>On,IdSelector:()=>Rn,Identifier:()=>zn,MediaFeature:()=>Bn,MediaQuery:()=>qn,MediaQueryList:()=>jn,NestingSelector:()=>Hn,Nth:()=>Gn,Number:()=>Kn,Operator:()=>Xn,Parentheses:()=>Zn,Percentage:()=>eo,PseudoClassSelector:()=>ro,PseudoElementSelector:()=>oo,Ratio:()=>ao,Raw:()=>lo,Rule:()=>uo,Selector:()=>ho,SelectorList:()=>fo,String:()=>yo,StyleSheet:()=>wo,TypeSelector:()=>Co,UnicodeRange:()=>Eo,Url:()=>Oo,Value:()=>zo,WhiteSpace:()=>Ro});var Ja={parseContext:{default:"StyleSheet",stylesheet:"StyleSheet",atrule:"Atrule",atrulePrelude(e){return this.AtrulePrelude(e.atrule?String(e.atrule):null)},mediaQueryList:"MediaQueryList",mediaQuery:"MediaQuery",rule:"Rule",selectorList:"SelectorList",selector:"Selector",block(){return this.Block(!0)},declarationList:"DeclarationList",declaration:"Declaration",value:"Value"},scope:Bo,atrule:Xa,pseudo:Za,node:qo};var es={node:xt};var ts=Zt({...za,...Ja,...es});var Gh="2.3.0";function ar(e){let t={};for(let r in e){let n=e[r];n&&(Array.isArray(n)||n instanceof D?n=n.map(ar):n.constructor===Object&&(n=ar(n))),t[r]=n}return t}var Uo={};b(Uo,{decode:()=>Vh,encode:()=>Kh});var rs=92;function Vh(e){let t=e.length-1,r="";for(let n=0;n<e.length;n++){let o=e.charCodeAt(n);if(o===rs){if(n===t)break;if(o=e.charCodeAt(++n),$(rs,o)){let i=n-1,s=se(e,i);n=s-1,r+=_e(e.substring(i+1,s))}else o===13&&e.charCodeAt(n+1)===10&&n++}else r+=e[n]}return r}function Kh(e){let t="";if(e.length===1&&e.charCodeAt(0)===45)return"\\-";for(let r=0;r<e.length;r++){let n=e.charCodeAt(r);if(n===0){t+="\uFFFD";continue}if(n<=31||n===127||n>=48&&n<=57&&(r===0||r===1&&e.charCodeAt(0)===45)){t+="\\"+n.toString(16)+" ";continue}Re(n)?t+=e.charAt(r):t+="\\"+e.charAt(r)}return t}var{tokenize:Qh,parse:Xh,generate:$h,lexer:Zh,createLexer:Jh,walk:em,find:tm,findLast:rm,findAll:nm,toPlainObject:om,fromPlainObject:im,fork:am}=ts;return cs(sm);})();
diff --git a/node_modules/css-tree/dist/data.cjs b/node_modules/css-tree/dist/data.cjs
deleted file mode 100644
index 56dbd155..00000000
--- a/node_modules/css-tree/dist/data.cjs
+++ /dev/null
@@ -1,1145 +0,0 @@
-module.exports = {
- "generic": true,
- "units": {
- "angle": [
- "deg",
- "grad",
- "rad",
- "turn"
- ],
- "decibel": [
- "db"
- ],
- "flex": [
- "fr"
- ],
- "frequency": [
- "hz",
- "khz"
- ],
- "length": [
- "cm",
- "mm",
- "q",
- "in",
- "pt",
- "pc",
- "px",
- "em",
- "rem",
- "ex",
- "rex",
- "cap",
- "rcap",
- "ch",
- "rch",
- "ic",
- "ric",
- "lh",
- "rlh",
- "vw",
- "svw",
- "lvw",
- "dvw",
- "vh",
- "svh",
- "lvh",
- "dvh",
- "vi",
- "svi",
- "lvi",
- "dvi",
- "vb",
- "svb",
- "lvb",
- "dvb",
- "vmin",
- "svmin",
- "lvmin",
- "dvmin",
- "vmax",
- "svmax",
- "lvmax",
- "dvmax",
- "cqw",
- "cqh",
- "cqi",
- "cqb",
- "cqmin",
- "cqmax"
- ],
- "resolution": [
- "dpi",
- "dpcm",
- "dppx",
- "x"
- ],
- "semitones": [
- "st"
- ],
- "time": [
- "s",
- "ms"
- ]
- },
- "types": {
- "abs()": "abs( <calc-sum> )",
- "absolute-size": "xx-small|x-small|small|medium|large|x-large|xx-large|xxx-large",
- "acos()": "acos( <calc-sum> )",
- "alpha-value": "<number>|<percentage>",
- "angle-percentage": "<angle>|<percentage>",
- "angular-color-hint": "<angle-percentage>",
- "angular-color-stop": "<color>&&<color-stop-angle>?",
- "angular-color-stop-list": "[<angular-color-stop> [, <angular-color-hint>]?]# , <angular-color-stop>",
- "animateable-feature": "scroll-position|contents|<custom-ident>",
- "asin()": "asin( <calc-sum> )",
- "atan()": "atan( <calc-sum> )",
- "atan2()": "atan2( <calc-sum> , <calc-sum> )",
- "attachment": "scroll|fixed|local",
- "attr()": "attr( <attr-name> <type-or-unit>? [, <attr-fallback>]? )",
- "attr-matcher": "['~'|'|'|'^'|'$'|'*']? '='",
- "attr-modifier": "i|s",
- "attribute-selector": "'[' <wq-name> ']'|'[' <wq-name> <attr-matcher> [<string-token>|<ident-token>] <attr-modifier>? ']'",
- "auto-repeat": "repeat( [auto-fill|auto-fit] , [<line-names>? <fixed-size>]+ <line-names>? )",
- "auto-track-list": "[<line-names>? [<fixed-size>|<fixed-repeat>]]* <line-names>? <auto-repeat> [<line-names>? [<fixed-size>|<fixed-repeat>]]* <line-names>?",
- "axis": "block|inline|vertical|horizontal",
- "baseline-position": "[first|last]? baseline",
- "basic-shape": "<inset()>|<circle()>|<ellipse()>|<polygon()>|<path()>",
- "bg-image": "none|<image>",
- "bg-layer": "<bg-image>||<bg-position> [/ <bg-size>]?||<repeat-style>||<attachment>||<box>||<box>",
- "bg-position": "[[left|center|right|top|bottom|<length-percentage>]|[left|center|right|<length-percentage>] [top|center|bottom|<length-percentage>]|[center|[left|right] <length-percentage>?]&&[center|[top|bottom] <length-percentage>?]]",
- "bg-size": "[<length-percentage>|auto]{1,2}|cover|contain",
- "blur()": "blur( <length> )",
- "blend-mode": "normal|multiply|screen|overlay|darken|lighten|color-dodge|color-burn|hard-light|soft-light|difference|exclusion|hue|saturation|color|luminosity",
- "box": "border-box|padding-box|content-box",
- "brightness()": "brightness( <number-percentage> )",
- "calc()": "calc( <calc-sum> )",
- "calc-sum": "<calc-product> [['+'|'-'] <calc-product>]*",
- "calc-product": "<calc-value> ['*' <calc-value>|'/' <number>]*",
- "calc-value": "<number>|<dimension>|<percentage>|<calc-constant>|( <calc-sum> )",
- "calc-constant": "e|pi|infinity|-infinity|NaN",
- "cf-final-image": "<image>|<color>",
- "cf-mixing-image": "<percentage>?&&<image>",
- "circle()": "circle( [<shape-radius>]? [at <position>]? )",
- "clamp()": "clamp( <calc-sum>#{3} )",
- "class-selector": "'.' <ident-token>",
- "clip-source": "<url>",
- "color": "<rgb()>|<rgba()>|<hsl()>|<hsla()>|<hwb()>|<lab()>|<lch()>|<hex-color>|<named-color>|currentcolor|<deprecated-system-color>",
- "color-stop": "<color-stop-length>|<color-stop-angle>",
- "color-stop-angle": "<angle-percentage>{1,2}",
- "color-stop-length": "<length-percentage>{1,2}",
- "color-stop-list": "[<linear-color-stop> [, <linear-color-hint>]?]# , <linear-color-stop>",
- "combinator": "'>'|'+'|'~'|['||']",
- "common-lig-values": "[common-ligatures|no-common-ligatures]",
- "compat-auto": "searchfield|textarea|push-button|slider-horizontal|checkbox|radio|square-button|menulist|listbox|meter|progress-bar|button",
- "composite-style": "clear|copy|source-over|source-in|source-out|source-atop|destination-over|destination-in|destination-out|destination-atop|xor",
- "compositing-operator": "add|subtract|intersect|exclude",
- "compound-selector": "[<type-selector>? <subclass-selector>* [<pseudo-element-selector> <pseudo-class-selector>*]*]!",
- "compound-selector-list": "<compound-selector>#",
- "complex-selector": "<compound-selector> [<combinator>? <compound-selector>]*",
- "complex-selector-list": "<complex-selector>#",
- "conic-gradient()": "conic-gradient( [from <angle>]? [at <position>]? , <angular-color-stop-list> )",
- "contextual-alt-values": "[contextual|no-contextual]",
- "content-distribution": "space-between|space-around|space-evenly|stretch",
- "content-list": "[<string>|contents|<image>|<counter>|<quote>|<target>|<leader()>|<attr()>]+",
- "content-position": "center|start|end|flex-start|flex-end",
- "content-replacement": "<image>",
- "contrast()": "contrast( [<number-percentage>] )",
- "cos()": "cos( <calc-sum> )",
- "counter": "<counter()>|<counters()>",
- "counter()": "counter( <counter-name> , <counter-style>? )",
- "counter-name": "<custom-ident>",
- "counter-style": "<counter-style-name>|symbols( )",
- "counter-style-name": "<custom-ident>",
- "counters()": "counters( <counter-name> , <string> , <counter-style>? )",
- "cross-fade()": "cross-fade( <cf-mixing-image> , <cf-final-image>? )",
- "cubic-bezier-timing-function": "ease|ease-in|ease-out|ease-in-out|cubic-bezier( <number [0,1]> , <number> , <number [0,1]> , <number> )",
- "deprecated-system-color": "ActiveBorder|ActiveCaption|AppWorkspace|Background|ButtonFace|ButtonHighlight|ButtonShadow|ButtonText|CaptionText|GrayText|Highlight|HighlightText|InactiveBorder|InactiveCaption|InactiveCaptionText|InfoBackground|InfoText|Menu|MenuText|Scrollbar|ThreeDDarkShadow|ThreeDFace|ThreeDHighlight|ThreeDLightShadow|ThreeDShadow|Window|WindowFrame|WindowText",
- "discretionary-lig-values": "[discretionary-ligatures|no-discretionary-ligatures]",
- "display-box": "contents|none",
- "display-inside": "flow|flow-root|table|flex|grid|ruby",
- "display-internal": "table-row-group|table-header-group|table-footer-group|table-row|table-cell|table-column-group|table-column|table-caption|ruby-base|ruby-text|ruby-base-container|ruby-text-container",
- "display-legacy": "inline-block|inline-list-item|inline-table|inline-flex|inline-grid",
- "display-listitem": "<display-outside>?&&[flow|flow-root]?&&list-item",
- "display-outside": "block|inline|run-in",
- "drop-shadow()": "drop-shadow( <length>{2,3} <color>? )",
- "east-asian-variant-values": "[jis78|jis83|jis90|jis04|simplified|traditional]",
- "east-asian-width-values": "[full-width|proportional-width]",
- "element()": "element( <custom-ident> , [first|start|last|first-except]? )|element( <id-selector> )",
- "ellipse()": "ellipse( [<shape-radius>{2}]? [at <position>]? )",
- "ending-shape": "circle|ellipse",
- "env()": "env( <custom-ident> , <declaration-value>? )",
- "exp()": "exp( <calc-sum> )",
- "explicit-track-list": "[<line-names>? <track-size>]+ <line-names>?",
- "family-name": "<string>|<custom-ident>+",
- "feature-tag-value": "<string> [<integer>|on|off]?",
- "feature-type": "@stylistic|@historical-forms|@styleset|@character-variant|@swash|@ornaments|@annotation",
- "feature-value-block": "<feature-type> '{' <feature-value-declaration-list> '}'",
- "feature-value-block-list": "<feature-value-block>+",
- "feature-value-declaration": "<custom-ident> : <integer>+ ;",
- "feature-value-declaration-list": "<feature-value-declaration>",
- "feature-value-name": "<custom-ident>",
- "fill-rule": "nonzero|evenodd",
- "filter-function": "<blur()>|<brightness()>|<contrast()>|<drop-shadow()>|<grayscale()>|<hue-rotate()>|<invert()>|<opacity()>|<saturate()>|<sepia()>",
- "filter-function-list": "[<filter-function>|<url>]+",
- "final-bg-layer": "<'background-color'>||<bg-image>||<bg-position> [/ <bg-size>]?||<repeat-style>||<attachment>||<box>||<box>",
- "fixed-breadth": "<length-percentage>",
- "fixed-repeat": "repeat( [<integer [1,∞]>] , [<line-names>? <fixed-size>]+ <line-names>? )",
- "fixed-size": "<fixed-breadth>|minmax( <fixed-breadth> , <track-breadth> )|minmax( <inflexible-breadth> , <fixed-breadth> )",
- "font-stretch-absolute": "normal|ultra-condensed|extra-condensed|condensed|semi-condensed|semi-expanded|expanded|extra-expanded|ultra-expanded|<percentage>",
- "font-variant-css21": "[normal|small-caps]",
- "font-weight-absolute": "normal|bold|<number [1,1000]>",
- "frequency-percentage": "<frequency>|<percentage>",
- "general-enclosed": "[<function-token> <any-value> )]|( <ident> <any-value> )",
- "generic-family": "serif|sans-serif|cursive|fantasy|monospace|-apple-system",
- "generic-name": "serif|sans-serif|cursive|fantasy|monospace",
- "geometry-box": "<shape-box>|fill-box|stroke-box|view-box",
- "gradient": "<linear-gradient()>|<repeating-linear-gradient()>|<radial-gradient()>|<repeating-radial-gradient()>|<conic-gradient()>|<repeating-conic-gradient()>|<-legacy-gradient>",
- "grayscale()": "grayscale( <number-percentage> )",
- "grid-line": "auto|<custom-ident>|[<integer>&&<custom-ident>?]|[span&&[<integer>||<custom-ident>]]",
- "historical-lig-values": "[historical-ligatures|no-historical-ligatures]",
- "hsl()": "hsl( <hue> <percentage> <percentage> [/ <alpha-value>]? )|hsl( <hue> , <percentage> , <percentage> , <alpha-value>? )",
- "hsla()": "hsla( <hue> <percentage> <percentage> [/ <alpha-value>]? )|hsla( <hue> , <percentage> , <percentage> , <alpha-value>? )",
- "hue": "<number>|<angle>",
- "hue-rotate()": "hue-rotate( <angle> )",
- "hwb()": "hwb( [<hue>|none] [<percentage>|none] [<percentage>|none] [/ [<alpha-value>|none]]? )",
- "hypot()": "hypot( <calc-sum># )",
- "image": "<url>|<image()>|<image-set()>|<element()>|<paint()>|<cross-fade()>|<gradient>",
- "image()": "image( <image-tags>? [<image-src>? , <color>?]! )",
- "image-set()": "image-set( <image-set-option># )",
- "image-set-option": "[<image>|<string>] [<resolution>||type( <string> )]",
- "image-src": "<url>|<string>",
- "image-tags": "ltr|rtl",
- "inflexible-breadth": "<length-percentage>|min-content|max-content|auto",
- "inset()": "inset( <length-percentage>{1,4} [round <'border-radius'>]? )",
- "invert()": "invert( <number-percentage> )",
- "keyframes-name": "<custom-ident>|<string>",
- "keyframe-block": "<keyframe-selector># { <declaration-list> }",
- "keyframe-block-list": "<keyframe-block>+",
- "keyframe-selector": "from|to|<percentage>",
- "lab()": "lab( [<percentage>|<number>|none] [<percentage>|<number>|none] [<percentage>|<number>|none] [/ [<alpha-value>|none]]? )",
- "layer()": "layer( <layer-name> )",
- "layer-name": "<ident> ['.' <ident>]*",
- "lch()": "lch( [<percentage>|<number>|none] [<percentage>|<number>|none] [<hue>|none] [/ [<alpha-value>|none]]? )",
- "leader()": "leader( <leader-type> )",
- "leader-type": "dotted|solid|space|<string>",
- "length-percentage": "<length>|<percentage>",
- "line-names": "'[' <custom-ident>* ']'",
- "line-name-list": "[<line-names>|<name-repeat>]+",
- "line-style": "none|hidden|dotted|dashed|solid|double|groove|ridge|inset|outset",
- "line-width": "<length>|thin|medium|thick",
- "linear-color-hint": "<length-percentage>",
- "linear-color-stop": "<color> <color-stop-length>?",
- "linear-gradient()": "linear-gradient( [<angle>|to <side-or-corner>]? , <color-stop-list> )",
- "log()": "log( <calc-sum> , <calc-sum>? )",
- "mask-layer": "<mask-reference>||<position> [/ <bg-size>]?||<repeat-style>||<geometry-box>||[<geometry-box>|no-clip]||<compositing-operator>||<masking-mode>",
- "mask-position": "[<length-percentage>|left|center|right] [<length-percentage>|top|center|bottom]?",
- "mask-reference": "none|<image>|<mask-source>",
- "mask-source": "<url>",
- "masking-mode": "alpha|luminance|match-source",
- "matrix()": "matrix( <number>#{6} )",
- "matrix3d()": "matrix3d( <number>#{16} )",
- "max()": "max( <calc-sum># )",
- "media-and": "<media-in-parens> [and <media-in-parens>]+",
- "media-condition": "<media-not>|<media-and>|<media-or>|<media-in-parens>",
- "media-condition-without-or": "<media-not>|<media-and>|<media-in-parens>",
- "media-feature": "( [<mf-plain>|<mf-boolean>|<mf-range>] )",
- "media-in-parens": "( <media-condition> )|<media-feature>|<general-enclosed>",
- "media-not": "not <media-in-parens>",
- "media-or": "<media-in-parens> [or <media-in-parens>]+",
- "media-query": "<media-condition>|[not|only]? <media-type> [and <media-condition-without-or>]?",
- "media-query-list": "<media-query>#",
- "media-type": "<ident>",
- "mf-boolean": "<mf-name>",
- "mf-name": "<ident>",
- "mf-plain": "<mf-name> : <mf-value>",
- "mf-range": "<mf-name> ['<'|'>']? '='? <mf-value>|<mf-value> ['<'|'>']? '='? <mf-name>|<mf-value> '<' '='? <mf-name> '<' '='? <mf-value>|<mf-value> '>' '='? <mf-name> '>' '='? <mf-value>",
- "mf-value": "<number>|<dimension>|<ident>|<ratio>",
- "min()": "min( <calc-sum># )",
- "minmax()": "minmax( [<length-percentage>|min-content|max-content|auto] , [<length-percentage>|<flex>|min-content|max-content|auto] )",
- "mod()": "mod( <calc-sum> , <calc-sum> )",
- "name-repeat": "repeat( [<integer [1,∞]>|auto-fill] , <line-names>+ )",
- "named-color": "transparent|aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen|<-non-standard-color>",
- "namespace-prefix": "<ident>",
- "ns-prefix": "[<ident-token>|'*']? '|'",
- "number-percentage": "<number>|<percentage>",
- "numeric-figure-values": "[lining-nums|oldstyle-nums]",
- "numeric-fraction-values": "[diagonal-fractions|stacked-fractions]",
- "numeric-spacing-values": "[proportional-nums|tabular-nums]",
- "nth": "<an-plus-b>|even|odd",
- "opacity()": "opacity( [<number-percentage>] )",
- "overflow-position": "unsafe|safe",
- "outline-radius": "<length>|<percentage>",
- "page-body": "<declaration>? [; <page-body>]?|<page-margin-box> <page-body>",
- "page-margin-box": "<page-margin-box-type> '{' <declaration-list> '}'",
- "page-margin-box-type": "@top-left-corner|@top-left|@top-center|@top-right|@top-right-corner|@bottom-left-corner|@bottom-left|@bottom-center|@bottom-right|@bottom-right-corner|@left-top|@left-middle|@left-bottom|@right-top|@right-middle|@right-bottom",
- "page-selector-list": "[<page-selector>#]?",
- "page-selector": "<pseudo-page>+|<ident> <pseudo-page>*",
- "page-size": "A5|A4|A3|B5|B4|JIS-B5|JIS-B4|letter|legal|ledger",
- "path()": "path( [<fill-rule> ,]? <string> )",
- "paint()": "paint( <ident> , <declaration-value>? )",
- "perspective()": "perspective( [<length [0,∞]>|none] )",
- "polygon()": "polygon( <fill-rule>? , [<length-percentage> <length-percentage>]# )",
- "position": "[[left|center|right]||[top|center|bottom]|[left|center|right|<length-percentage>] [top|center|bottom|<length-percentage>]?|[[left|right] <length-percentage>]&&[[top|bottom] <length-percentage>]]",
- "pow()": "pow( <calc-sum> , <calc-sum> )",
- "pseudo-class-selector": "':' <ident-token>|':' <function-token> <any-value> ')'",
- "pseudo-element-selector": "':' <pseudo-class-selector>",
- "pseudo-page": ": [left|right|first|blank]",
- "quote": "open-quote|close-quote|no-open-quote|no-close-quote",
- "radial-gradient()": "radial-gradient( [<ending-shape>||<size>]? [at <position>]? , <color-stop-list> )",
- "ratio": "<number [0,∞]> [/ <number [0,∞]>]?",
- "relative-selector": "<combinator>? <complex-selector>",
- "relative-selector-list": "<relative-selector>#",
- "relative-size": "larger|smaller",
- "rem()": "rem( <calc-sum> , <calc-sum> )",
- "repeat-style": "repeat-x|repeat-y|[repeat|space|round|no-repeat]{1,2}",
- "repeating-conic-gradient()": "repeating-conic-gradient( [from <angle>]? [at <position>]? , <angular-color-stop-list> )",
- "repeating-linear-gradient()": "repeating-linear-gradient( [<angle>|to <side-or-corner>]? , <color-stop-list> )",
- "repeating-radial-gradient()": "repeating-radial-gradient( [<ending-shape>||<size>]? [at <position>]? , <color-stop-list> )",
- "reversed-counter-name": "reversed( <counter-name> )",
- "rgb()": "rgb( <percentage>{3} [/ <alpha-value>]? )|rgb( <number>{3} [/ <alpha-value>]? )|rgb( <percentage>#{3} , <alpha-value>? )|rgb( <number>#{3} , <alpha-value>? )",
- "rgba()": "rgba( <percentage>{3} [/ <alpha-value>]? )|rgba( <number>{3} [/ <alpha-value>]? )|rgba( <percentage>#{3} , <alpha-value>? )|rgba( <number>#{3} , <alpha-value>? )",
- "rotate()": "rotate( [<angle>|<zero>] )",
- "rotate3d()": "rotate3d( <number> , <number> , <number> , [<angle>|<zero>] )",
- "rotateX()": "rotateX( [<angle>|<zero>] )",
- "rotateY()": "rotateY( [<angle>|<zero>] )",
- "rotateZ()": "rotateZ( [<angle>|<zero>] )",
- "round()": "round( <rounding-strategy>? , <calc-sum> , <calc-sum> )",
- "rounding-strategy": "nearest|up|down|to-zero",
- "saturate()": "saturate( <number-percentage> )",
- "scale()": "scale( [<number>|<percentage>]#{1,2} )",
- "scale3d()": "scale3d( [<number>|<percentage>]#{3} )",
- "scaleX()": "scaleX( [<number>|<percentage>] )",
- "scaleY()": "scaleY( [<number>|<percentage>] )",
- "scaleZ()": "scaleZ( [<number>|<percentage>] )",
- "scroller": "root|nearest",
- "self-position": "center|start|end|self-start|self-end|flex-start|flex-end",
- "shape-radius": "<length-percentage>|closest-side|farthest-side",
- "sign()": "sign( <calc-sum> )",
- "skew()": "skew( [<angle>|<zero>] , [<angle>|<zero>]? )",
- "skewX()": "skewX( [<angle>|<zero>] )",
- "skewY()": "skewY( [<angle>|<zero>] )",
- "sepia()": "sepia( <number-percentage> )",
- "shadow": "inset?&&<length>{2,4}&&<color>?",
- "shadow-t": "[<length>{2,3}&&<color>?]",
- "shape": "rect( <top> , <right> , <bottom> , <left> )|rect( <top> <right> <bottom> <left> )",
- "shape-box": "<box>|margin-box",
- "side-or-corner": "[left|right]||[top|bottom]",
- "sin()": "sin( <calc-sum> )",
- "single-animation": "<time>||<easing-function>||<time>||<single-animation-iteration-count>||<single-animation-direction>||<single-animation-fill-mode>||<single-animation-play-state>||[none|<keyframes-name>]",
- "single-animation-direction": "normal|reverse|alternate|alternate-reverse",
- "single-animation-fill-mode": "none|forwards|backwards|both",
- "single-animation-iteration-count": "infinite|<number>",
- "single-animation-play-state": "running|paused",
- "single-animation-timeline": "auto|none|<timeline-name>|scroll( <axis>? <scroller>? )",
- "single-transition": "[none|<single-transition-property>]||<time>||<easing-function>||<time>",
- "single-transition-property": "all|<custom-ident>",
- "size": "closest-side|farthest-side|closest-corner|farthest-corner|<length>|<length-percentage>{2}",
- "sqrt()": "sqrt( <calc-sum> )",
- "step-position": "jump-start|jump-end|jump-none|jump-both|start|end",
- "step-timing-function": "step-start|step-end|steps( <integer> [, <step-position>]? )",
- "subclass-selector": "<id-selector>|<class-selector>|<attribute-selector>|<pseudo-class-selector>",
- "supports-condition": "not <supports-in-parens>|<supports-in-parens> [and <supports-in-parens>]*|<supports-in-parens> [or <supports-in-parens>]*",
- "supports-in-parens": "( <supports-condition> )|<supports-feature>|<general-enclosed>",
- "supports-feature": "<supports-decl>|<supports-selector-fn>",
- "supports-decl": "( <declaration> )",
- "supports-selector-fn": "selector( <complex-selector> )",
- "symbol": "<string>|<image>|<custom-ident>",
- "tan()": "tan( <calc-sum> )",
- "target": "<target-counter()>|<target-counters()>|<target-text()>",
- "target-counter()": "target-counter( [<string>|<url>] , <custom-ident> , <counter-style>? )",
- "target-counters()": "target-counters( [<string>|<url>] , <custom-ident> , <string> , <counter-style>? )",
- "target-text()": "target-text( [<string>|<url>] , [content|before|after|first-letter]? )",
- "time-percentage": "<time>|<percentage>",
- "timeline-name": "<custom-ident>|<string>",
- "easing-function": "linear|<cubic-bezier-timing-function>|<step-timing-function>",
- "track-breadth": "<length-percentage>|<flex>|min-content|max-content|auto",
- "track-list": "[<line-names>? [<track-size>|<track-repeat>]]+ <line-names>?",
- "track-repeat": "repeat( [<integer [1,∞]>] , [<line-names>? <track-size>]+ <line-names>? )",
- "track-size": "<track-breadth>|minmax( <inflexible-breadth> , <track-breadth> )|fit-content( <length-percentage> )",
- "transform-function": "<matrix()>|<translate()>|<translateX()>|<translateY()>|<scale()>|<scaleX()>|<scaleY()>|<rotate()>|<skew()>|<skewX()>|<skewY()>|<matrix3d()>|<translate3d()>|<translateZ()>|<scale3d()>|<scaleZ()>|<rotate3d()>|<rotateX()>|<rotateY()>|<rotateZ()>|<perspective()>",
- "transform-list": "<transform-function>+",
- "translate()": "translate( <length-percentage> , <length-percentage>? )",
- "translate3d()": "translate3d( <length-percentage> , <length-percentage> , <length> )",
- "translateX()": "translateX( <length-percentage> )",
- "translateY()": "translateY( <length-percentage> )",
- "translateZ()": "translateZ( <length> )",
- "type-or-unit": "string|color|url|integer|number|length|angle|time|frequency|cap|ch|em|ex|ic|lh|rlh|rem|vb|vi|vw|vh|vmin|vmax|mm|Q|cm|in|pt|pc|px|deg|grad|rad|turn|ms|s|Hz|kHz|%",
- "type-selector": "<wq-name>|<ns-prefix>? '*'",
- "var()": "var( <custom-property-name> , <declaration-value>? )",
- "viewport-length": "auto|<length-percentage>",
- "visual-box": "content-box|padding-box|border-box",
- "wq-name": "<ns-prefix>? <ident-token>",
- "-legacy-gradient": "<-webkit-gradient()>|<-legacy-linear-gradient>|<-legacy-repeating-linear-gradient>|<-legacy-radial-gradient>|<-legacy-repeating-radial-gradient>",
- "-legacy-linear-gradient": "-moz-linear-gradient( <-legacy-linear-gradient-arguments> )|-webkit-linear-gradient( <-legacy-linear-gradient-arguments> )|-o-linear-gradient( <-legacy-linear-gradient-arguments> )",
- "-legacy-repeating-linear-gradient": "-moz-repeating-linear-gradient( <-legacy-linear-gradient-arguments> )|-webkit-repeating-linear-gradient( <-legacy-linear-gradient-arguments> )|-o-repeating-linear-gradient( <-legacy-linear-gradient-arguments> )",
- "-legacy-linear-gradient-arguments": "[<angle>|<side-or-corner>]? , <color-stop-list>",
- "-legacy-radial-gradient": "-moz-radial-gradient( <-legacy-radial-gradient-arguments> )|-webkit-radial-gradient( <-legacy-radial-gradient-arguments> )|-o-radial-gradient( <-legacy-radial-gradient-arguments> )",
- "-legacy-repeating-radial-gradient": "-moz-repeating-radial-gradient( <-legacy-radial-gradient-arguments> )|-webkit-repeating-radial-gradient( <-legacy-radial-gradient-arguments> )|-o-repeating-radial-gradient( <-legacy-radial-gradient-arguments> )",
- "-legacy-radial-gradient-arguments": "[<position> ,]? [[[<-legacy-radial-gradient-shape>||<-legacy-radial-gradient-size>]|[<length>|<percentage>]{2}] ,]? <color-stop-list>",
- "-legacy-radial-gradient-size": "closest-side|closest-corner|farthest-side|farthest-corner|contain|cover",
- "-legacy-radial-gradient-shape": "circle|ellipse",
- "-non-standard-font": "-apple-system-body|-apple-system-headline|-apple-system-subheadline|-apple-system-caption1|-apple-system-caption2|-apple-system-footnote|-apple-system-short-body|-apple-system-short-headline|-apple-system-short-subheadline|-apple-system-short-caption1|-apple-system-short-footnote|-apple-system-tall-body",
- "-non-standard-color": "-moz-ButtonDefault|-moz-ButtonHoverFace|-moz-ButtonHoverText|-moz-CellHighlight|-moz-CellHighlightText|-moz-Combobox|-moz-ComboboxText|-moz-Dialog|-moz-DialogText|-moz-dragtargetzone|-moz-EvenTreeRow|-moz-Field|-moz-FieldText|-moz-html-CellHighlight|-moz-html-CellHighlightText|-moz-mac-accentdarkestshadow|-moz-mac-accentdarkshadow|-moz-mac-accentface|-moz-mac-accentlightesthighlight|-moz-mac-accentlightshadow|-moz-mac-accentregularhighlight|-moz-mac-accentregularshadow|-moz-mac-chrome-active|-moz-mac-chrome-inactive|-moz-mac-focusring|-moz-mac-menuselect|-moz-mac-menushadow|-moz-mac-menutextselect|-moz-MenuHover|-moz-MenuHoverText|-moz-MenuBarText|-moz-MenuBarHoverText|-moz-nativehyperlinktext|-moz-OddTreeRow|-moz-win-communicationstext|-moz-win-mediatext|-moz-activehyperlinktext|-moz-default-background-color|-moz-default-color|-moz-hyperlinktext|-moz-visitedhyperlinktext|-webkit-activelink|-webkit-focus-ring-color|-webkit-link|-webkit-text",
- "-non-standard-image-rendering": "optimize-contrast|-moz-crisp-edges|-o-crisp-edges|-webkit-optimize-contrast",
- "-non-standard-overflow": "-moz-scrollbars-none|-moz-scrollbars-horizontal|-moz-scrollbars-vertical|-moz-hidden-unscrollable",
- "-non-standard-width": "fill-available|min-intrinsic|intrinsic|-moz-available|-moz-fit-content|-moz-min-content|-moz-max-content|-webkit-min-content|-webkit-max-content",
- "-webkit-gradient()": "-webkit-gradient( <-webkit-gradient-type> , <-webkit-gradient-point> [, <-webkit-gradient-point>|, <-webkit-gradient-radius> , <-webkit-gradient-point>] [, <-webkit-gradient-radius>]? [, <-webkit-gradient-color-stop>]* )",
- "-webkit-gradient-color-stop": "from( <color> )|color-stop( [<number-zero-one>|<percentage>] , <color> )|to( <color> )",
- "-webkit-gradient-point": "[left|center|right|<length-percentage>] [top|center|bottom|<length-percentage>]",
- "-webkit-gradient-radius": "<length>|<percentage>",
- "-webkit-gradient-type": "linear|radial",
- "-webkit-mask-box-repeat": "repeat|stretch|round",
- "-webkit-mask-clip-style": "border|border-box|padding|padding-box|content|content-box|text",
- "-ms-filter-function-list": "<-ms-filter-function>+",
- "-ms-filter-function": "<-ms-filter-function-progid>|<-ms-filter-function-legacy>",
- "-ms-filter-function-progid": "'progid:' [<ident-token> '.']* [<ident-token>|<function-token> <any-value>? )]",
- "-ms-filter-function-legacy": "<ident-token>|<function-token> <any-value>? )",
- "-ms-filter": "<string>",
- "age": "child|young|old",
- "attr-name": "<wq-name>",
- "attr-fallback": "<any-value>",
- "bg-clip": "<box>|border|text",
- "bottom": "<length>|auto",
- "generic-voice": "[<age>? <gender> <integer>?]",
- "gender": "male|female|neutral",
- "left": "<length>|auto",
- "mask-image": "<mask-reference>#",
- "paint": "none|<color>|<url> [none|<color>]?|context-fill|context-stroke",
- "right": "<length>|auto",
- "scroll-timeline-axis": "block|inline|vertical|horizontal",
- "scroll-timeline-name": "none|<custom-ident>",
- "single-animation-composition": "replace|add|accumulate",
- "svg-length": "<percentage>|<length>|<number>",
- "svg-writing-mode": "lr-tb|rl-tb|tb-rl|lr|rl|tb",
- "top": "<length>|auto",
- "x": "<number>",
- "y": "<number>",
- "declaration": "<ident-token> : <declaration-value>? ['!' important]?",
- "declaration-list": "[<declaration>? ';']* <declaration>?",
- "url": "url( <string> <url-modifier>* )|<url-token>",
- "url-modifier": "<ident>|<function-token> <any-value> )",
- "number-zero-one": "<number [0,1]>",
- "number-one-or-greater": "<number [1,∞]>",
- "-non-standard-display": "-ms-inline-flexbox|-ms-grid|-ms-inline-grid|-webkit-flex|-webkit-inline-flex|-webkit-box|-webkit-inline-box|-moz-inline-stack|-moz-box|-moz-inline-box"
- },
- "properties": {
- "--*": "<declaration-value>",
- "-ms-accelerator": "false|true",
- "-ms-block-progression": "tb|rl|bt|lr",
- "-ms-content-zoom-chaining": "none|chained",
- "-ms-content-zooming": "none|zoom",
- "-ms-content-zoom-limit": "<'-ms-content-zoom-limit-min'> <'-ms-content-zoom-limit-max'>",
- "-ms-content-zoom-limit-max": "<percentage>",
- "-ms-content-zoom-limit-min": "<percentage>",
- "-ms-content-zoom-snap": "<'-ms-content-zoom-snap-type'>||<'-ms-content-zoom-snap-points'>",
- "-ms-content-zoom-snap-points": "snapInterval( <percentage> , <percentage> )|snapList( <percentage># )",
- "-ms-content-zoom-snap-type": "none|proximity|mandatory",
- "-ms-filter": "<string>",
- "-ms-flow-from": "[none|<custom-ident>]#",
- "-ms-flow-into": "[none|<custom-ident>]#",
- "-ms-grid-columns": "none|<track-list>|<auto-track-list>",
- "-ms-grid-rows": "none|<track-list>|<auto-track-list>",
- "-ms-high-contrast-adjust": "auto|none",
- "-ms-hyphenate-limit-chars": "auto|<integer>{1,3}",
- "-ms-hyphenate-limit-lines": "no-limit|<integer>",
- "-ms-hyphenate-limit-zone": "<percentage>|<length>",
- "-ms-ime-align": "auto|after",
- "-ms-overflow-style": "auto|none|scrollbar|-ms-autohiding-scrollbar",
- "-ms-scrollbar-3dlight-color": "<color>",
- "-ms-scrollbar-arrow-color": "<color>",
- "-ms-scrollbar-base-color": "<color>",
- "-ms-scrollbar-darkshadow-color": "<color>",
- "-ms-scrollbar-face-color": "<color>",
- "-ms-scrollbar-highlight-color": "<color>",
- "-ms-scrollbar-shadow-color": "<color>",
- "-ms-scrollbar-track-color": "<color>",
- "-ms-scroll-chaining": "chained|none",
- "-ms-scroll-limit": "<'-ms-scroll-limit-x-min'> <'-ms-scroll-limit-y-min'> <'-ms-scroll-limit-x-max'> <'-ms-scroll-limit-y-max'>",
- "-ms-scroll-limit-x-max": "auto|<length>",
- "-ms-scroll-limit-x-min": "<length>",
- "-ms-scroll-limit-y-max": "auto|<length>",
- "-ms-scroll-limit-y-min": "<length>",
- "-ms-scroll-rails": "none|railed",
- "-ms-scroll-snap-points-x": "snapInterval( <length-percentage> , <length-percentage> )|snapList( <length-percentage># )",
- "-ms-scroll-snap-points-y": "snapInterval( <length-percentage> , <length-percentage> )|snapList( <length-percentage># )",
- "-ms-scroll-snap-type": "none|proximity|mandatory",
- "-ms-scroll-snap-x": "<'-ms-scroll-snap-type'> <'-ms-scroll-snap-points-x'>",
- "-ms-scroll-snap-y": "<'-ms-scroll-snap-type'> <'-ms-scroll-snap-points-y'>",
- "-ms-scroll-translation": "none|vertical-to-horizontal",
- "-ms-text-autospace": "none|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space",
- "-ms-touch-select": "grippers|none",
- "-ms-user-select": "none|element|text",
- "-ms-wrap-flow": "auto|both|start|end|maximum|clear",
- "-ms-wrap-margin": "<length>",
- "-ms-wrap-through": "wrap|none",
- "-moz-appearance": "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",
- "-moz-binding": "<url>|none",
- "-moz-border-bottom-colors": "<color>+|none",
- "-moz-border-left-colors": "<color>+|none",
- "-moz-border-right-colors": "<color>+|none",
- "-moz-border-top-colors": "<color>+|none",
- "-moz-context-properties": "none|[fill|fill-opacity|stroke|stroke-opacity]#",
- "-moz-float-edge": "border-box|content-box|margin-box|padding-box",
- "-moz-force-broken-image-icon": "0|1",
- "-moz-image-region": "<shape>|auto",
- "-moz-orient": "inline|block|horizontal|vertical",
- "-moz-outline-radius": "<outline-radius>{1,4} [/ <outline-radius>{1,4}]?",
- "-moz-outline-radius-bottomleft": "<outline-radius>",
- "-moz-outline-radius-bottomright": "<outline-radius>",
- "-moz-outline-radius-topleft": "<outline-radius>",
- "-moz-outline-radius-topright": "<outline-radius>",
- "-moz-stack-sizing": "ignore|stretch-to-fit",
- "-moz-text-blink": "none|blink",
- "-moz-user-focus": "ignore|normal|select-after|select-before|select-menu|select-same|select-all|none",
- "-moz-user-input": "auto|none|enabled|disabled",
- "-moz-user-modify": "read-only|read-write|write-only",
- "-moz-window-dragging": "drag|no-drag",
- "-moz-window-shadow": "default|menu|tooltip|sheet|none",
- "-webkit-appearance": "none|button|button-bevel|caps-lock-indicator|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|scrollbarbutton-down|scrollbarbutton-left|scrollbarbutton-right|scrollbarbutton-up|scrollbargripper-horizontal|scrollbargripper-vertical|scrollbarthumb-horizontal|scrollbarthumb-vertical|scrollbartrack-horizontal|scrollbartrack-vertical|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",
- "-webkit-border-before": "<'border-width'>||<'border-style'>||<color>",
- "-webkit-border-before-color": "<color>",
- "-webkit-border-before-style": "<'border-style'>",
- "-webkit-border-before-width": "<'border-width'>",
- "-webkit-box-reflect": "[above|below|right|left]? <length>? <image>?",
- "-webkit-line-clamp": "none|<integer>",
- "-webkit-mask": "[<mask-reference>||<position> [/ <bg-size>]?||<repeat-style>||[<box>|border|padding|content|text]||[<box>|border|padding|content]]#",
- "-webkit-mask-attachment": "<attachment>#",
- "-webkit-mask-clip": "[<box>|border|padding|content|text]#",
- "-webkit-mask-composite": "<composite-style>#",
- "-webkit-mask-image": "<mask-reference>#",
- "-webkit-mask-origin": "[<box>|border|padding|content]#",
- "-webkit-mask-position": "<position>#",
- "-webkit-mask-position-x": "[<length-percentage>|left|center|right]#",
- "-webkit-mask-position-y": "[<length-percentage>|top|center|bottom]#",
- "-webkit-mask-repeat": "<repeat-style>#",
- "-webkit-mask-repeat-x": "repeat|no-repeat|space|round",
- "-webkit-mask-repeat-y": "repeat|no-repeat|space|round",
- "-webkit-mask-size": "<bg-size>#",
- "-webkit-overflow-scrolling": "auto|touch",
- "-webkit-tap-highlight-color": "<color>",
- "-webkit-text-fill-color": "<color>",
- "-webkit-text-stroke": "<length>||<color>",
- "-webkit-text-stroke-color": "<color>",
- "-webkit-text-stroke-width": "<length>",
- "-webkit-touch-callout": "default|none",
- "-webkit-user-modify": "read-only|read-write|read-write-plaintext-only",
- "accent-color": "auto|<color>",
- "align-content": "normal|<baseline-position>|<content-distribution>|<overflow-position>? <content-position>",
- "align-items": "normal|stretch|<baseline-position>|[<overflow-position>? <self-position>]",
- "align-self": "auto|normal|stretch|<baseline-position>|<overflow-position>? <self-position>",
- "align-tracks": "[normal|<baseline-position>|<content-distribution>|<overflow-position>? <content-position>]#",
- "all": "initial|inherit|unset|revert|revert-layer",
- "animation": "<single-animation>#",
- "animation-composition": "<single-animation-composition>#",
- "animation-delay": "<time>#",
- "animation-direction": "<single-animation-direction>#",
- "animation-duration": "<time>#",
- "animation-fill-mode": "<single-animation-fill-mode>#",
- "animation-iteration-count": "<single-animation-iteration-count>#",
- "animation-name": "[none|<keyframes-name>]#",
- "animation-play-state": "<single-animation-play-state>#",
- "animation-timing-function": "<easing-function>#",
- "animation-timeline": "<single-animation-timeline>#",
- "appearance": "none|auto|textfield|menulist-button|<compat-auto>",
- "aspect-ratio": "auto|<ratio>",
- "azimuth": "<angle>|[[left-side|far-left|left|center-left|center|center-right|right|far-right|right-side]||behind]|leftwards|rightwards",
- "backdrop-filter": "none|<filter-function-list>",
- "backface-visibility": "visible|hidden",
- "background": "[<bg-layer> ,]* <final-bg-layer>",
- "background-attachment": "<attachment>#",
- "background-blend-mode": "<blend-mode>#",
- "background-clip": "<bg-clip>#",
- "background-color": "<color>",
- "background-image": "<bg-image>#",
- "background-origin": "<box>#",
- "background-position": "<bg-position>#",
- "background-position-x": "[center|[[left|right|x-start|x-end]? <length-percentage>?]!]#",
- "background-position-y": "[center|[[top|bottom|y-start|y-end]? <length-percentage>?]!]#",
- "background-repeat": "<repeat-style>#",
- "background-size": "<bg-size>#",
- "block-overflow": "clip|ellipsis|<string>",
- "block-size": "<'width'>",
- "border": "<line-width>||<line-style>||<color>",
- "border-block": "<'border-top-width'>||<'border-top-style'>||<color>",
- "border-block-color": "<'border-top-color'>{1,2}",
- "border-block-style": "<'border-top-style'>",
- "border-block-width": "<'border-top-width'>",
- "border-block-end": "<'border-top-width'>||<'border-top-style'>||<color>",
- "border-block-end-color": "<'border-top-color'>",
- "border-block-end-style": "<'border-top-style'>",
- "border-block-end-width": "<'border-top-width'>",
- "border-block-start": "<'border-top-width'>||<'border-top-style'>||<color>",
- "border-block-start-color": "<'border-top-color'>",
- "border-block-start-style": "<'border-top-style'>",
- "border-block-start-width": "<'border-top-width'>",
- "border-bottom": "<line-width>||<line-style>||<color>",
- "border-bottom-color": "<'border-top-color'>",
- "border-bottom-left-radius": "<length-percentage>{1,2}",
- "border-bottom-right-radius": "<length-percentage>{1,2}",
- "border-bottom-style": "<line-style>",
- "border-bottom-width": "<line-width>",
- "border-collapse": "collapse|separate",
- "border-color": "<color>{1,4}",
- "border-end-end-radius": "<length-percentage>{1,2}",
- "border-end-start-radius": "<length-percentage>{1,2}",
- "border-image": "<'border-image-source'>||<'border-image-slice'> [/ <'border-image-width'>|/ <'border-image-width'>? / <'border-image-outset'>]?||<'border-image-repeat'>",
- "border-image-outset": "[<length>|<number>]{1,4}",
- "border-image-repeat": "[stretch|repeat|round|space]{1,2}",
- "border-image-slice": "<number-percentage>{1,4}&&fill?",
- "border-image-source": "none|<image>",
- "border-image-width": "[<length-percentage>|<number>|auto]{1,4}",
- "border-inline": "<'border-top-width'>||<'border-top-style'>||<color>",
- "border-inline-end": "<'border-top-width'>||<'border-top-style'>||<color>",
- "border-inline-color": "<'border-top-color'>{1,2}",
- "border-inline-style": "<'border-top-style'>",
- "border-inline-width": "<'border-top-width'>",
- "border-inline-end-color": "<'border-top-color'>",
- "border-inline-end-style": "<'border-top-style'>",
- "border-inline-end-width": "<'border-top-width'>",
- "border-inline-start": "<'border-top-width'>||<'border-top-style'>||<color>",
- "border-inline-start-color": "<'border-top-color'>",
- "border-inline-start-style": "<'border-top-style'>",
- "border-inline-start-width": "<'border-top-width'>",
- "border-left": "<line-width>||<line-style>||<color>",
- "border-left-color": "<color>",
- "border-left-style": "<line-style>",
- "border-left-width": "<line-width>",
- "border-radius": "<length-percentage>{1,4} [/ <length-percentage>{1,4}]?",
- "border-right": "<line-width>||<line-style>||<color>",
- "border-right-color": "<color>",
- "border-right-style": "<line-style>",
- "border-right-width": "<line-width>",
- "border-spacing": "<length> <length>?",
- "border-start-end-radius": "<length-percentage>{1,2}",
- "border-start-start-radius": "<length-percentage>{1,2}",
- "border-style": "<line-style>{1,4}",
- "border-top": "<line-width>||<line-style>||<color>",
- "border-top-color": "<color>",
- "border-top-left-radius": "<length-percentage>{1,2}",
- "border-top-right-radius": "<length-percentage>{1,2}",
- "border-top-style": "<line-style>",
- "border-top-width": "<line-width>",
- "border-width": "<line-width>{1,4}",
- "bottom": "<length>|<percentage>|auto",
- "box-align": "start|center|end|baseline|stretch",
- "box-decoration-break": "slice|clone",
- "box-direction": "normal|reverse|inherit",
- "box-flex": "<number>",
- "box-flex-group": "<integer>",
- "box-lines": "single|multiple",
- "box-ordinal-group": "<integer>",
- "box-orient": "horizontal|vertical|inline-axis|block-axis|inherit",
- "box-pack": "start|center|end|justify",
- "box-shadow": "none|<shadow>#",
- "box-sizing": "content-box|border-box",
- "break-after": "auto|avoid|always|all|avoid-page|page|left|right|recto|verso|avoid-column|column|avoid-region|region",
- "break-before": "auto|avoid|always|all|avoid-page|page|left|right|recto|verso|avoid-column|column|avoid-region|region",
- "break-inside": "auto|avoid|avoid-page|avoid-column|avoid-region",
- "caption-side": "top|bottom|block-start|block-end|inline-start|inline-end",
- "caret": "<'caret-color'>||<'caret-shape'>",
- "caret-color": "auto|<color>",
- "caret-shape": "auto|bar|block|underscore",
- "clear": "none|left|right|both|inline-start|inline-end",
- "clip": "<shape>|auto",
- "clip-path": "<clip-source>|[<basic-shape>||<geometry-box>]|none",
- "color": "<color>",
- "print-color-adjust": "economy|exact",
- "color-scheme": "normal|[light|dark|<custom-ident>]+&&only?",
- "column-count": "<integer>|auto",
- "column-fill": "auto|balance|balance-all",
- "column-gap": "normal|<length-percentage>",
- "column-rule": "<'column-rule-width'>||<'column-rule-style'>||<'column-rule-color'>",
- "column-rule-color": "<color>",
- "column-rule-style": "<'border-style'>",
- "column-rule-width": "<'border-width'>",
- "column-span": "none|all",
- "column-width": "<length>|auto",
- "columns": "<'column-width'>||<'column-count'>",
- "contain": "none|strict|content|[[size||inline-size]||layout||style||paint]",
- "contain-intrinsic-size": "[none|<length>|auto <length>]{1,2}",
- "contain-intrinsic-block-size": "none|<length>|auto <length>",
- "contain-intrinsic-height": "none|<length>|auto <length>",
- "contain-intrinsic-inline-size": "none|<length>|auto <length>",
- "contain-intrinsic-width": "none|<length>|auto <length>",
- "content": "normal|none|[<content-replacement>|<content-list>] [/ [<string>|<counter>]+]?",
- "content-visibility": "visible|auto|hidden",
- "counter-increment": "[<counter-name> <integer>?]+|none",
- "counter-reset": "[<counter-name> <integer>?|<reversed-counter-name> <integer>?]+|none",
- "counter-set": "[<counter-name> <integer>?]+|none",
- "cursor": "[[<url> [<x> <y>]? ,]* [auto|default|none|context-menu|help|pointer|progress|wait|cell|crosshair|text|vertical-text|alias|copy|move|no-drop|not-allowed|e-resize|n-resize|ne-resize|nw-resize|s-resize|se-resize|sw-resize|w-resize|ew-resize|ns-resize|nesw-resize|nwse-resize|col-resize|row-resize|all-scroll|zoom-in|zoom-out|grab|grabbing|hand|-webkit-grab|-webkit-grabbing|-webkit-zoom-in|-webkit-zoom-out|-moz-grab|-moz-grabbing|-moz-zoom-in|-moz-zoom-out]]",
- "direction": "ltr|rtl",
- "display": "[<display-outside>||<display-inside>]|<display-listitem>|<display-internal>|<display-box>|<display-legacy>|<-non-standard-display>",
- "empty-cells": "show|hide",
- "filter": "none|<filter-function-list>|<-ms-filter-function-list>",
- "flex": "none|[<'flex-grow'> <'flex-shrink'>?||<'flex-basis'>]",
- "flex-basis": "content|<'width'>",
- "flex-direction": "row|row-reverse|column|column-reverse",
- "flex-flow": "<'flex-direction'>||<'flex-wrap'>",
- "flex-grow": "<number>",
- "flex-shrink": "<number>",
- "flex-wrap": "nowrap|wrap|wrap-reverse",
- "float": "left|right|none|inline-start|inline-end",
- "font": "[[<'font-style'>||<font-variant-css21>||<'font-weight'>||<'font-stretch'>]? <'font-size'> [/ <'line-height'>]? <'font-family'>]|caption|icon|menu|message-box|small-caption|status-bar",
- "font-family": "[<family-name>|<generic-family>]#",
- "font-feature-settings": "normal|<feature-tag-value>#",
- "font-kerning": "auto|normal|none",
- "font-language-override": "normal|<string>",
- "font-optical-sizing": "auto|none",
- "font-variation-settings": "normal|[<string> <number>]#",
- "font-size": "<absolute-size>|<relative-size>|<length-percentage>",
- "font-size-adjust": "none|[ex-height|cap-height|ch-width|ic-width|ic-height]? [from-font|<number>]",
- "font-smooth": "auto|never|always|<absolute-size>|<length>",
- "font-stretch": "<font-stretch-absolute>",
- "font-style": "normal|italic|oblique <angle>?",
- "font-synthesis": "none|[weight||style||small-caps]",
- "font-variant": "normal|none|[<common-lig-values>||<discretionary-lig-values>||<historical-lig-values>||<contextual-alt-values>||stylistic( <feature-value-name> )||historical-forms||styleset( <feature-value-name># )||character-variant( <feature-value-name># )||swash( <feature-value-name> )||ornaments( <feature-value-name> )||annotation( <feature-value-name> )||[small-caps|all-small-caps|petite-caps|all-petite-caps|unicase|titling-caps]||<numeric-figure-values>||<numeric-spacing-values>||<numeric-fraction-values>||ordinal||slashed-zero||<east-asian-variant-values>||<east-asian-width-values>||ruby]",
- "font-variant-alternates": "normal|[stylistic( <feature-value-name> )||historical-forms||styleset( <feature-value-name># )||character-variant( <feature-value-name># )||swash( <feature-value-name> )||ornaments( <feature-value-name> )||annotation( <feature-value-name> )]",
- "font-variant-caps": "normal|small-caps|all-small-caps|petite-caps|all-petite-caps|unicase|titling-caps",
- "font-variant-east-asian": "normal|[<east-asian-variant-values>||<east-asian-width-values>||ruby]",
- "font-variant-ligatures": "normal|none|[<common-lig-values>||<discretionary-lig-values>||<historical-lig-values>||<contextual-alt-values>]",
- "font-variant-numeric": "normal|[<numeric-figure-values>||<numeric-spacing-values>||<numeric-fraction-values>||ordinal||slashed-zero]",
- "font-variant-position": "normal|sub|super",
- "font-weight": "<font-weight-absolute>|bolder|lighter",
- "forced-color-adjust": "auto|none",
- "gap": "<'row-gap'> <'column-gap'>?",
- "grid": "<'grid-template'>|<'grid-template-rows'> / [auto-flow&&dense?] <'grid-auto-columns'>?|[auto-flow&&dense?] <'grid-auto-rows'>? / <'grid-template-columns'>",
- "grid-area": "<grid-line> [/ <grid-line>]{0,3}",
- "grid-auto-columns": "<track-size>+",
- "grid-auto-flow": "[row|column]||dense",
- "grid-auto-rows": "<track-size>+",
- "grid-column": "<grid-line> [/ <grid-line>]?",
- "grid-column-end": "<grid-line>",
- "grid-column-gap": "<length-percentage>",
- "grid-column-start": "<grid-line>",
- "grid-gap": "<'grid-row-gap'> <'grid-column-gap'>?",
- "grid-row": "<grid-line> [/ <grid-line>]?",
- "grid-row-end": "<grid-line>",
- "grid-row-gap": "<length-percentage>",
- "grid-row-start": "<grid-line>",
- "grid-template": "none|[<'grid-template-rows'> / <'grid-template-columns'>]|[<line-names>? <string> <track-size>? <line-names>?]+ [/ <explicit-track-list>]?",
- "grid-template-areas": "none|<string>+",
- "grid-template-columns": "none|<track-list>|<auto-track-list>|subgrid <line-name-list>?",
- "grid-template-rows": "none|<track-list>|<auto-track-list>|subgrid <line-name-list>?",
- "hanging-punctuation": "none|[first||[force-end|allow-end]||last]",
- "height": "auto|<length>|<percentage>|min-content|max-content|fit-content|fit-content( <length-percentage> )",
- "hyphenate-character": "auto|<string>",
- "hyphens": "none|manual|auto",
- "image-orientation": "from-image|<angle>|[<angle>? flip]",
- "image-rendering": "auto|crisp-edges|pixelated|optimizeSpeed|optimizeQuality|<-non-standard-image-rendering>",
- "image-resolution": "[from-image||<resolution>]&&snap?",
- "ime-mode": "auto|normal|active|inactive|disabled",
- "initial-letter": "normal|[<number> <integer>?]",
- "initial-letter-align": "[auto|alphabetic|hanging|ideographic]",
- "inline-size": "<'width'>",
- "input-security": "auto|none",
- "inset": "<'top'>{1,4}",
- "inset-block": "<'top'>{1,2}",
- "inset-block-end": "<'top'>",
- "inset-block-start": "<'top'>",
- "inset-inline": "<'top'>{1,2}",
- "inset-inline-end": "<'top'>",
- "inset-inline-start": "<'top'>",
- "isolation": "auto|isolate",
- "justify-content": "normal|<content-distribution>|<overflow-position>? [<content-position>|left|right]",
- "justify-items": "normal|stretch|<baseline-position>|<overflow-position>? [<self-position>|left|right]|legacy|legacy&&[left|right|center]",
- "justify-self": "auto|normal|stretch|<baseline-position>|<overflow-position>? [<self-position>|left|right]",
- "justify-tracks": "[normal|<content-distribution>|<overflow-position>? [<content-position>|left|right]]#",
- "left": "<length>|<percentage>|auto",
- "letter-spacing": "normal|<length-percentage>",
- "line-break": "auto|loose|normal|strict|anywhere",
- "line-clamp": "none|<integer>",
- "line-height": "normal|<number>|<length>|<percentage>",
- "line-height-step": "<length>",
- "list-style": "<'list-style-type'>||<'list-style-position'>||<'list-style-image'>",
- "list-style-image": "<image>|none",
- "list-style-position": "inside|outside",
- "list-style-type": "<counter-style>|<string>|none",
- "margin": "[<length>|<percentage>|auto]{1,4}",
- "margin-block": "<'margin-left'>{1,2}",
- "margin-block-end": "<'margin-left'>",
- "margin-block-start": "<'margin-left'>",
- "margin-bottom": "<length>|<percentage>|auto",
- "margin-inline": "<'margin-left'>{1,2}",
- "margin-inline-end": "<'margin-left'>",
- "margin-inline-start": "<'margin-left'>",
- "margin-left": "<length>|<percentage>|auto",
- "margin-right": "<length>|<percentage>|auto",
- "margin-top": "<length>|<percentage>|auto",
- "margin-trim": "none|in-flow|all",
- "mask": "<mask-layer>#",
- "mask-border": "<'mask-border-source'>||<'mask-border-slice'> [/ <'mask-border-width'>? [/ <'mask-border-outset'>]?]?||<'mask-border-repeat'>||<'mask-border-mode'>",
- "mask-border-mode": "luminance|alpha",
- "mask-border-outset": "[<length>|<number>]{1,4}",
- "mask-border-repeat": "[stretch|repeat|round|space]{1,2}",
- "mask-border-slice": "<number-percentage>{1,4} fill?",
- "mask-border-source": "none|<image>",
- "mask-border-width": "[<length-percentage>|<number>|auto]{1,4}",
- "mask-clip": "[<geometry-box>|no-clip]#",
- "mask-composite": "<compositing-operator>#",
- "mask-image": "<mask-reference>#",
- "mask-mode": "<masking-mode>#",
- "mask-origin": "<geometry-box>#",
- "mask-position": "<position>#",
- "mask-repeat": "<repeat-style>#",
- "mask-size": "<bg-size>#",
- "mask-type": "luminance|alpha",
- "masonry-auto-flow": "[pack|next]||[definite-first|ordered]",
- "math-depth": "auto-add|add( <integer> )|<integer>",
- "math-shift": "normal|compact",
- "math-style": "normal|compact",
- "max-block-size": "<'max-width'>",
- "max-height": "none|<length-percentage>|min-content|max-content|fit-content|fit-content( <length-percentage> )",
- "max-inline-size": "<'max-width'>",
- "max-lines": "none|<integer>",
- "max-width": "none|<length-percentage>|min-content|max-content|fit-content|fit-content( <length-percentage> )|<-non-standard-width>",
- "min-block-size": "<'min-width'>",
- "min-height": "auto|<length>|<percentage>|min-content|max-content|fit-content|fit-content( <length-percentage> )",
- "min-inline-size": "<'min-width'>",
- "min-width": "auto|<length>|<percentage>|min-content|max-content|fit-content|fit-content( <length-percentage> )|<-non-standard-width>",
- "mix-blend-mode": "<blend-mode>|plus-lighter",
- "object-fit": "fill|contain|cover|none|scale-down",
- "object-position": "<position>",
- "offset": "[<'offset-position'>? [<'offset-path'> [<'offset-distance'>||<'offset-rotate'>]?]?]! [/ <'offset-anchor'>]?",
- "offset-anchor": "auto|<position>",
- "offset-distance": "<length-percentage>",
- "offset-path": "none|ray( [<angle>&&<size>&&contain?] )|<path()>|<url>|[<basic-shape>||<geometry-box>]",
- "offset-position": "auto|<position>",
- "offset-rotate": "[auto|reverse]||<angle>",
- "opacity": "<alpha-value>",
- "order": "<integer>",
- "orphans": "<integer>",
- "outline": "[<'outline-color'>||<'outline-style'>||<'outline-width'>]",
- "outline-color": "<color>|invert",
- "outline-offset": "<length>",
- "outline-style": "auto|<'border-style'>",
- "outline-width": "<line-width>",
- "overflow": "[visible|hidden|clip|scroll|auto]{1,2}|<-non-standard-overflow>",
- "overflow-anchor": "auto|none",
- "overflow-block": "visible|hidden|clip|scroll|auto",
- "overflow-clip-box": "padding-box|content-box",
- "overflow-clip-margin": "<visual-box>||<length [0,∞]>",
- "overflow-inline": "visible|hidden|clip|scroll|auto",
- "overflow-wrap": "normal|break-word|anywhere",
- "overflow-x": "visible|hidden|clip|scroll|auto",
- "overflow-y": "visible|hidden|clip|scroll|auto",
- "overscroll-behavior": "[contain|none|auto]{1,2}",
- "overscroll-behavior-block": "contain|none|auto",
- "overscroll-behavior-inline": "contain|none|auto",
- "overscroll-behavior-x": "contain|none|auto",
- "overscroll-behavior-y": "contain|none|auto",
- "padding": "[<length>|<percentage>]{1,4}",
- "padding-block": "<'padding-left'>{1,2}",
- "padding-block-end": "<'padding-left'>",
- "padding-block-start": "<'padding-left'>",
- "padding-bottom": "<length>|<percentage>",
- "padding-inline": "<'padding-left'>{1,2}",
- "padding-inline-end": "<'padding-left'>",
- "padding-inline-start": "<'padding-left'>",
- "padding-left": "<length>|<percentage>",
- "padding-right": "<length>|<percentage>",
- "padding-top": "<length>|<percentage>",
- "page-break-after": "auto|always|avoid|left|right|recto|verso",
- "page-break-before": "auto|always|avoid|left|right|recto|verso",
- "page-break-inside": "auto|avoid",
- "paint-order": "normal|[fill||stroke||markers]",
- "perspective": "none|<length>",
- "perspective-origin": "<position>",
- "place-content": "<'align-content'> <'justify-content'>?",
- "place-items": "<'align-items'> <'justify-items'>?",
- "place-self": "<'align-self'> <'justify-self'>?",
- "pointer-events": "auto|none|visiblePainted|visibleFill|visibleStroke|visible|painted|fill|stroke|all|inherit",
- "position": "static|relative|absolute|sticky|fixed|-webkit-sticky",
- "quotes": "none|auto|[<string> <string>]+",
- "resize": "none|both|horizontal|vertical|block|inline",
- "right": "<length>|<percentage>|auto",
- "rotate": "none|<angle>|[x|y|z|<number>{3}]&&<angle>",
- "row-gap": "normal|<length-percentage>",
- "ruby-align": "start|center|space-between|space-around",
- "ruby-merge": "separate|collapse|auto",
- "ruby-position": "[alternate||[over|under]]|inter-character",
- "scale": "none|<number>{1,3}",
- "scrollbar-color": "auto|<color>{2}",
- "scrollbar-gutter": "auto|stable&&both-edges?",
- "scrollbar-width": "auto|thin|none",
- "scroll-behavior": "auto|smooth",
- "scroll-margin": "<length>{1,4}",
- "scroll-margin-block": "<length>{1,2}",
- "scroll-margin-block-start": "<length>",
- "scroll-margin-block-end": "<length>",
- "scroll-margin-bottom": "<length>",
- "scroll-margin-inline": "<length>{1,2}",
- "scroll-margin-inline-start": "<length>",
- "scroll-margin-inline-end": "<length>",
- "scroll-margin-left": "<length>",
- "scroll-margin-right": "<length>",
- "scroll-margin-top": "<length>",
- "scroll-padding": "[auto|<length-percentage>]{1,4}",
- "scroll-padding-block": "[auto|<length-percentage>]{1,2}",
- "scroll-padding-block-start": "auto|<length-percentage>",
- "scroll-padding-block-end": "auto|<length-percentage>",
- "scroll-padding-bottom": "auto|<length-percentage>",
- "scroll-padding-inline": "[auto|<length-percentage>]{1,2}",
- "scroll-padding-inline-start": "auto|<length-percentage>",
- "scroll-padding-inline-end": "auto|<length-percentage>",
- "scroll-padding-left": "auto|<length-percentage>",
- "scroll-padding-right": "auto|<length-percentage>",
- "scroll-padding-top": "auto|<length-percentage>",
- "scroll-snap-align": "[none|start|end|center]{1,2}",
- "scroll-snap-coordinate": "none|<position>#",
- "scroll-snap-destination": "<position>",
- "scroll-snap-points-x": "none|repeat( <length-percentage> )",
- "scroll-snap-points-y": "none|repeat( <length-percentage> )",
- "scroll-snap-stop": "normal|always",
- "scroll-snap-type": "none|[x|y|block|inline|both] [mandatory|proximity]?",
- "scroll-snap-type-x": "none|mandatory|proximity",
- "scroll-snap-type-y": "none|mandatory|proximity",
- "scroll-timeline": "<scroll-timeline-name>||<scroll-timeline-axis>",
- "scroll-timeline-axis": "block|inline|vertical|horizontal",
- "scroll-timeline-name": "none|<custom-ident>",
- "shape-image-threshold": "<alpha-value>",
- "shape-margin": "<length-percentage>",
- "shape-outside": "none|[<shape-box>||<basic-shape>]|<image>",
- "tab-size": "<integer>|<length>",
- "table-layout": "auto|fixed",
- "text-align": "start|end|left|right|center|justify|match-parent",
- "text-align-last": "auto|start|end|left|right|center|justify",
- "text-combine-upright": "none|all|[digits <integer>?]",
- "text-decoration": "<'text-decoration-line'>||<'text-decoration-style'>||<'text-decoration-color'>||<'text-decoration-thickness'>",
- "text-decoration-color": "<color>",
- "text-decoration-line": "none|[underline||overline||line-through||blink]|spelling-error|grammar-error",
- "text-decoration-skip": "none|[objects||[spaces|[leading-spaces||trailing-spaces]]||edges||box-decoration]",
- "text-decoration-skip-ink": "auto|all|none",
- "text-decoration-style": "solid|double|dotted|dashed|wavy",
- "text-decoration-thickness": "auto|from-font|<length>|<percentage>",
- "text-emphasis": "<'text-emphasis-style'>||<'text-emphasis-color'>",
- "text-emphasis-color": "<color>",
- "text-emphasis-position": "[over|under]&&[right|left]",
- "text-emphasis-style": "none|[[filled|open]||[dot|circle|double-circle|triangle|sesame]]|<string>",
- "text-indent": "<length-percentage>&&hanging?&&each-line?",
- "text-justify": "auto|inter-character|inter-word|none",
- "text-orientation": "mixed|upright|sideways",
- "text-overflow": "[clip|ellipsis|<string>]{1,2}",
- "text-rendering": "auto|optimizeSpeed|optimizeLegibility|geometricPrecision",
- "text-shadow": "none|<shadow-t>#",
- "text-size-adjust": "none|auto|<percentage>",
- "text-transform": "none|capitalize|uppercase|lowercase|full-width|full-size-kana",
- "text-underline-offset": "auto|<length>|<percentage>",
- "text-underline-position": "auto|from-font|[under||[left|right]]",
- "top": "<length>|<percentage>|auto",
- "touch-action": "auto|none|[[pan-x|pan-left|pan-right]||[pan-y|pan-up|pan-down]||pinch-zoom]|manipulation",
- "transform": "none|<transform-list>",
- "transform-box": "content-box|border-box|fill-box|stroke-box|view-box",
- "transform-origin": "[<length-percentage>|left|center|right|top|bottom]|[[<length-percentage>|left|center|right]&&[<length-percentage>|top|center|bottom]] <length>?",
- "transform-style": "flat|preserve-3d",
- "transition": "<single-transition>#",
- "transition-delay": "<time>#",
- "transition-duration": "<time>#",
- "transition-property": "none|<single-transition-property>#",
- "transition-timing-function": "<easing-function>#",
- "translate": "none|<length-percentage> [<length-percentage> <length>?]?",
- "unicode-bidi": "normal|embed|isolate|bidi-override|isolate-override|plaintext|-moz-isolate|-moz-isolate-override|-moz-plaintext|-webkit-isolate|-webkit-isolate-override|-webkit-plaintext",
- "user-select": "auto|text|none|contain|all",
- "vertical-align": "baseline|sub|super|text-top|text-bottom|middle|top|bottom|<percentage>|<length>",
- "visibility": "visible|hidden|collapse",
- "white-space": "normal|pre|nowrap|pre-wrap|pre-line|break-spaces",
- "widows": "<integer>",
- "width": "auto|<length>|<percentage>|min-content|max-content|fit-content|fit-content( <length-percentage> )|fill|stretch|intrinsic|-moz-max-content|-webkit-max-content|-moz-fit-content|-webkit-fit-content",
- "will-change": "auto|<animateable-feature>#",
- "word-break": "normal|break-all|keep-all|break-word",
- "word-spacing": "normal|<length>",
- "word-wrap": "normal|break-word",
- "writing-mode": "horizontal-tb|vertical-rl|vertical-lr|sideways-rl|sideways-lr|<svg-writing-mode>",
- "z-index": "auto|<integer>",
- "zoom": "normal|reset|<number>|<percentage>",
- "-moz-background-clip": "padding|border",
- "-moz-border-radius-bottomleft": "<'border-bottom-left-radius'>",
- "-moz-border-radius-bottomright": "<'border-bottom-right-radius'>",
- "-moz-border-radius-topleft": "<'border-top-left-radius'>",
- "-moz-border-radius-topright": "<'border-bottom-right-radius'>",
- "-moz-control-character-visibility": "visible|hidden",
- "-moz-osx-font-smoothing": "auto|grayscale",
- "-moz-user-select": "none|text|all|-moz-none",
- "-ms-flex-align": "start|end|center|baseline|stretch",
- "-ms-flex-item-align": "auto|start|end|center|baseline|stretch",
- "-ms-flex-line-pack": "start|end|center|justify|distribute|stretch",
- "-ms-flex-negative": "<'flex-shrink'>",
- "-ms-flex-pack": "start|end|center|justify|distribute",
- "-ms-flex-order": "<integer>",
- "-ms-flex-positive": "<'flex-grow'>",
- "-ms-flex-preferred-size": "<'flex-basis'>",
- "-ms-interpolation-mode": "nearest-neighbor|bicubic",
- "-ms-grid-column-align": "start|end|center|stretch",
- "-ms-grid-row-align": "start|end|center|stretch",
- "-ms-hyphenate-limit-last": "none|always|column|page|spread",
- "-webkit-background-clip": "[<box>|border|padding|content|text]#",
- "-webkit-column-break-after": "always|auto|avoid",
- "-webkit-column-break-before": "always|auto|avoid",
- "-webkit-column-break-inside": "always|auto|avoid",
- "-webkit-font-smoothing": "auto|none|antialiased|subpixel-antialiased",
- "-webkit-mask-box-image": "[<url>|<gradient>|none] [<length-percentage>{4} <-webkit-mask-box-repeat>{2}]?",
- "-webkit-print-color-adjust": "economy|exact",
- "-webkit-text-security": "none|circle|disc|square",
- "-webkit-user-drag": "none|element|auto",
- "-webkit-user-select": "auto|none|text|all",
- "alignment-baseline": "auto|baseline|before-edge|text-before-edge|middle|central|after-edge|text-after-edge|ideographic|alphabetic|hanging|mathematical",
- "baseline-shift": "baseline|sub|super|<svg-length>",
- "behavior": "<url>+",
- "clip-rule": "nonzero|evenodd",
- "cue": "<'cue-before'> <'cue-after'>?",
- "cue-after": "<url> <decibel>?|none",
- "cue-before": "<url> <decibel>?|none",
- "dominant-baseline": "auto|use-script|no-change|reset-size|ideographic|alphabetic|hanging|mathematical|central|middle|text-after-edge|text-before-edge",
- "fill": "<paint>",
- "fill-opacity": "<number-zero-one>",
- "fill-rule": "nonzero|evenodd",
- "glyph-orientation-horizontal": "<angle>",
- "glyph-orientation-vertical": "<angle>",
- "kerning": "auto|<svg-length>",
- "marker": "none|<url>",
- "marker-end": "none|<url>",
- "marker-mid": "none|<url>",
- "marker-start": "none|<url>",
- "pause": "<'pause-before'> <'pause-after'>?",
- "pause-after": "<time>|none|x-weak|weak|medium|strong|x-strong",
- "pause-before": "<time>|none|x-weak|weak|medium|strong|x-strong",
- "rest": "<'rest-before'> <'rest-after'>?",
- "rest-after": "<time>|none|x-weak|weak|medium|strong|x-strong",
- "rest-before": "<time>|none|x-weak|weak|medium|strong|x-strong",
- "shape-rendering": "auto|optimizeSpeed|crispEdges|geometricPrecision",
- "src": "[<url> [format( <string># )]?|local( <family-name> )]#",
- "speak": "auto|none|normal",
- "speak-as": "normal|spell-out||digits||[literal-punctuation|no-punctuation]",
- "stroke": "<paint>",
- "stroke-dasharray": "none|[<svg-length>+]#",
- "stroke-dashoffset": "<svg-length>",
- "stroke-linecap": "butt|round|square",
- "stroke-linejoin": "miter|round|bevel",
- "stroke-miterlimit": "<number-one-or-greater>",
- "stroke-opacity": "<number-zero-one>",
- "stroke-width": "<svg-length>",
- "text-anchor": "start|middle|end",
- "unicode-range": "<urange>#",
- "voice-balance": "<number>|left|center|right|leftwards|rightwards",
- "voice-duration": "auto|<time>",
- "voice-family": "[[<family-name>|<generic-voice>] ,]* [<family-name>|<generic-voice>]|preserve",
- "voice-pitch": "<frequency>&&absolute|[[x-low|low|medium|high|x-high]||[<frequency>|<semitones>|<percentage>]]",
- "voice-range": "<frequency>&&absolute|[[x-low|low|medium|high|x-high]||[<frequency>|<semitones>|<percentage>]]",
- "voice-rate": "[normal|x-slow|slow|medium|fast|x-fast]||<percentage>",
- "voice-stress": "normal|strong|moderate|none|reduced",
- "voice-volume": "silent|[[x-soft|soft|medium|loud|x-loud]||<decibel>]"
- },
- "atrules": {
- "charset": {
- "prelude": "<string>",
- "descriptors": null
- },
- "counter-style": {
- "prelude": "<counter-style-name>",
- "descriptors": {
- "additive-symbols": "[<integer>&&<symbol>]#",
- "fallback": "<counter-style-name>",
- "negative": "<symbol> <symbol>?",
- "pad": "<integer>&&<symbol>",
- "prefix": "<symbol>",
- "range": "[[<integer>|infinite]{2}]#|auto",
- "speak-as": "auto|bullets|numbers|words|spell-out|<counter-style-name>",
- "suffix": "<symbol>",
- "symbols": "<symbol>+",
- "system": "cyclic|numeric|alphabetic|symbolic|additive|[fixed <integer>?]|[extends <counter-style-name>]"
- }
- },
- "document": {
- "prelude": "[<url>|url-prefix( <string> )|domain( <string> )|media-document( <string> )|regexp( <string> )]#",
- "descriptors": null
- },
- "font-face": {
- "prelude": null,
- "descriptors": {
- "ascent-override": "normal|<percentage>",
- "descent-override": "normal|<percentage>",
- "font-display": "[auto|block|swap|fallback|optional]",
- "font-family": "<family-name>",
- "font-feature-settings": "normal|<feature-tag-value>#",
- "font-variation-settings": "normal|[<string> <number>]#",
- "font-stretch": "<font-stretch-absolute>{1,2}",
- "font-style": "normal|italic|oblique <angle>{0,2}",
- "font-weight": "<font-weight-absolute>{1,2}",
- "font-variant": "normal|none|[<common-lig-values>||<discretionary-lig-values>||<historical-lig-values>||<contextual-alt-values>||stylistic( <feature-value-name> )||historical-forms||styleset( <feature-value-name># )||character-variant( <feature-value-name># )||swash( <feature-value-name> )||ornaments( <feature-value-name> )||annotation( <feature-value-name> )||[small-caps|all-small-caps|petite-caps|all-petite-caps|unicase|titling-caps]||<numeric-figure-values>||<numeric-spacing-values>||<numeric-fraction-values>||ordinal||slashed-zero||<east-asian-variant-values>||<east-asian-width-values>||ruby]",
- "line-gap-override": "normal|<percentage>",
- "size-adjust": "<percentage>",
- "src": "[<url> [format( <string># )]?|local( <family-name> )]#",
- "unicode-range": "<urange>#"
- }
- },
- "font-feature-values": {
- "prelude": "<family-name>#",
- "descriptors": null
- },
- "import": {
- "prelude": "[<string>|<url>] [layer|layer( <layer-name> )]? [supports( [<supports-condition>|<declaration>] )]? <media-query-list>?",
- "descriptors": null
- },
- "keyframes": {
- "prelude": "<keyframes-name>",
- "descriptors": null
- },
- "layer": {
- "prelude": "[<layer-name>#|<layer-name>?]",
- "descriptors": null
- },
- "media": {
- "prelude": "<media-query-list>",
- "descriptors": null
- },
- "namespace": {
- "prelude": "<namespace-prefix>? [<string>|<url>]",
- "descriptors": null
- },
- "page": {
- "prelude": "<page-selector-list>",
- "descriptors": {
- "bleed": "auto|<length>",
- "marks": "none|[crop||cross]",
- "size": "<length>{1,2}|auto|[<page-size>||[portrait|landscape]]"
- }
- },
- "property": {
- "prelude": "<custom-property-name>",
- "descriptors": {
- "syntax": "<string>",
- "inherits": "true|false",
- "initial-value": "<string>"
- }
- },
- "scroll-timeline": {
- "prelude": "<timeline-name>",
- "descriptors": null
- },
- "supports": {
- "prelude": "<supports-condition>",
- "descriptors": null
- },
- "viewport": {
- "prelude": null,
- "descriptors": {
- "height": "<viewport-length>{1,2}",
- "max-height": "<viewport-length>",
- "max-width": "<viewport-length>",
- "max-zoom": "auto|<number>|<percentage>",
- "min-height": "<viewport-length>",
- "min-width": "<viewport-length>",
- "min-zoom": "auto|<number>|<percentage>",
- "orientation": "auto|portrait|landscape",
- "user-zoom": "zoom|fixed",
- "viewport-fit": "auto|contain|cover",
- "width": "<viewport-length>{1,2}",
- "zoom": "auto|<number>|<percentage>"
- }
- },
- "nest": {
- "prelude": "<complex-selector-list>",
- "descriptors": null
- }
- }
-}; \ No newline at end of file
diff --git a/node_modules/css-tree/dist/data.js b/node_modules/css-tree/dist/data.js
deleted file mode 100644
index 62f8f0a7..00000000
--- a/node_modules/css-tree/dist/data.js
+++ /dev/null
@@ -1,1145 +0,0 @@
-export default {
- "generic": true,
- "units": {
- "angle": [
- "deg",
- "grad",
- "rad",
- "turn"
- ],
- "decibel": [
- "db"
- ],
- "flex": [
- "fr"
- ],
- "frequency": [
- "hz",
- "khz"
- ],
- "length": [
- "cm",
- "mm",
- "q",
- "in",
- "pt",
- "pc",
- "px",
- "em",
- "rem",
- "ex",
- "rex",
- "cap",
- "rcap",
- "ch",
- "rch",
- "ic",
- "ric",
- "lh",
- "rlh",
- "vw",
- "svw",
- "lvw",
- "dvw",
- "vh",
- "svh",
- "lvh",
- "dvh",
- "vi",
- "svi",
- "lvi",
- "dvi",
- "vb",
- "svb",
- "lvb",
- "dvb",
- "vmin",
- "svmin",
- "lvmin",
- "dvmin",
- "vmax",
- "svmax",
- "lvmax",
- "dvmax",
- "cqw",
- "cqh",
- "cqi",
- "cqb",
- "cqmin",
- "cqmax"
- ],
- "resolution": [
- "dpi",
- "dpcm",
- "dppx",
- "x"
- ],
- "semitones": [
- "st"
- ],
- "time": [
- "s",
- "ms"
- ]
- },
- "types": {
- "abs()": "abs( <calc-sum> )",
- "absolute-size": "xx-small|x-small|small|medium|large|x-large|xx-large|xxx-large",
- "acos()": "acos( <calc-sum> )",
- "alpha-value": "<number>|<percentage>",
- "angle-percentage": "<angle>|<percentage>",
- "angular-color-hint": "<angle-percentage>",
- "angular-color-stop": "<color>&&<color-stop-angle>?",
- "angular-color-stop-list": "[<angular-color-stop> [, <angular-color-hint>]?]# , <angular-color-stop>",
- "animateable-feature": "scroll-position|contents|<custom-ident>",
- "asin()": "asin( <calc-sum> )",
- "atan()": "atan( <calc-sum> )",
- "atan2()": "atan2( <calc-sum> , <calc-sum> )",
- "attachment": "scroll|fixed|local",
- "attr()": "attr( <attr-name> <type-or-unit>? [, <attr-fallback>]? )",
- "attr-matcher": "['~'|'|'|'^'|'$'|'*']? '='",
- "attr-modifier": "i|s",
- "attribute-selector": "'[' <wq-name> ']'|'[' <wq-name> <attr-matcher> [<string-token>|<ident-token>] <attr-modifier>? ']'",
- "auto-repeat": "repeat( [auto-fill|auto-fit] , [<line-names>? <fixed-size>]+ <line-names>? )",
- "auto-track-list": "[<line-names>? [<fixed-size>|<fixed-repeat>]]* <line-names>? <auto-repeat> [<line-names>? [<fixed-size>|<fixed-repeat>]]* <line-names>?",
- "axis": "block|inline|vertical|horizontal",
- "baseline-position": "[first|last]? baseline",
- "basic-shape": "<inset()>|<circle()>|<ellipse()>|<polygon()>|<path()>",
- "bg-image": "none|<image>",
- "bg-layer": "<bg-image>||<bg-position> [/ <bg-size>]?||<repeat-style>||<attachment>||<box>||<box>",
- "bg-position": "[[left|center|right|top|bottom|<length-percentage>]|[left|center|right|<length-percentage>] [top|center|bottom|<length-percentage>]|[center|[left|right] <length-percentage>?]&&[center|[top|bottom] <length-percentage>?]]",
- "bg-size": "[<length-percentage>|auto]{1,2}|cover|contain",
- "blur()": "blur( <length> )",
- "blend-mode": "normal|multiply|screen|overlay|darken|lighten|color-dodge|color-burn|hard-light|soft-light|difference|exclusion|hue|saturation|color|luminosity",
- "box": "border-box|padding-box|content-box",
- "brightness()": "brightness( <number-percentage> )",
- "calc()": "calc( <calc-sum> )",
- "calc-sum": "<calc-product> [['+'|'-'] <calc-product>]*",
- "calc-product": "<calc-value> ['*' <calc-value>|'/' <number>]*",
- "calc-value": "<number>|<dimension>|<percentage>|<calc-constant>|( <calc-sum> )",
- "calc-constant": "e|pi|infinity|-infinity|NaN",
- "cf-final-image": "<image>|<color>",
- "cf-mixing-image": "<percentage>?&&<image>",
- "circle()": "circle( [<shape-radius>]? [at <position>]? )",
- "clamp()": "clamp( <calc-sum>#{3} )",
- "class-selector": "'.' <ident-token>",
- "clip-source": "<url>",
- "color": "<rgb()>|<rgba()>|<hsl()>|<hsla()>|<hwb()>|<lab()>|<lch()>|<hex-color>|<named-color>|currentcolor|<deprecated-system-color>",
- "color-stop": "<color-stop-length>|<color-stop-angle>",
- "color-stop-angle": "<angle-percentage>{1,2}",
- "color-stop-length": "<length-percentage>{1,2}",
- "color-stop-list": "[<linear-color-stop> [, <linear-color-hint>]?]# , <linear-color-stop>",
- "combinator": "'>'|'+'|'~'|['||']",
- "common-lig-values": "[common-ligatures|no-common-ligatures]",
- "compat-auto": "searchfield|textarea|push-button|slider-horizontal|checkbox|radio|square-button|menulist|listbox|meter|progress-bar|button",
- "composite-style": "clear|copy|source-over|source-in|source-out|source-atop|destination-over|destination-in|destination-out|destination-atop|xor",
- "compositing-operator": "add|subtract|intersect|exclude",
- "compound-selector": "[<type-selector>? <subclass-selector>* [<pseudo-element-selector> <pseudo-class-selector>*]*]!",
- "compound-selector-list": "<compound-selector>#",
- "complex-selector": "<compound-selector> [<combinator>? <compound-selector>]*",
- "complex-selector-list": "<complex-selector>#",
- "conic-gradient()": "conic-gradient( [from <angle>]? [at <position>]? , <angular-color-stop-list> )",
- "contextual-alt-values": "[contextual|no-contextual]",
- "content-distribution": "space-between|space-around|space-evenly|stretch",
- "content-list": "[<string>|contents|<image>|<counter>|<quote>|<target>|<leader()>|<attr()>]+",
- "content-position": "center|start|end|flex-start|flex-end",
- "content-replacement": "<image>",
- "contrast()": "contrast( [<number-percentage>] )",
- "cos()": "cos( <calc-sum> )",
- "counter": "<counter()>|<counters()>",
- "counter()": "counter( <counter-name> , <counter-style>? )",
- "counter-name": "<custom-ident>",
- "counter-style": "<counter-style-name>|symbols( )",
- "counter-style-name": "<custom-ident>",
- "counters()": "counters( <counter-name> , <string> , <counter-style>? )",
- "cross-fade()": "cross-fade( <cf-mixing-image> , <cf-final-image>? )",
- "cubic-bezier-timing-function": "ease|ease-in|ease-out|ease-in-out|cubic-bezier( <number [0,1]> , <number> , <number [0,1]> , <number> )",
- "deprecated-system-color": "ActiveBorder|ActiveCaption|AppWorkspace|Background|ButtonFace|ButtonHighlight|ButtonShadow|ButtonText|CaptionText|GrayText|Highlight|HighlightText|InactiveBorder|InactiveCaption|InactiveCaptionText|InfoBackground|InfoText|Menu|MenuText|Scrollbar|ThreeDDarkShadow|ThreeDFace|ThreeDHighlight|ThreeDLightShadow|ThreeDShadow|Window|WindowFrame|WindowText",
- "discretionary-lig-values": "[discretionary-ligatures|no-discretionary-ligatures]",
- "display-box": "contents|none",
- "display-inside": "flow|flow-root|table|flex|grid|ruby",
- "display-internal": "table-row-group|table-header-group|table-footer-group|table-row|table-cell|table-column-group|table-column|table-caption|ruby-base|ruby-text|ruby-base-container|ruby-text-container",
- "display-legacy": "inline-block|inline-list-item|inline-table|inline-flex|inline-grid",
- "display-listitem": "<display-outside>?&&[flow|flow-root]?&&list-item",
- "display-outside": "block|inline|run-in",
- "drop-shadow()": "drop-shadow( <length>{2,3} <color>? )",
- "east-asian-variant-values": "[jis78|jis83|jis90|jis04|simplified|traditional]",
- "east-asian-width-values": "[full-width|proportional-width]",
- "element()": "element( <custom-ident> , [first|start|last|first-except]? )|element( <id-selector> )",
- "ellipse()": "ellipse( [<shape-radius>{2}]? [at <position>]? )",
- "ending-shape": "circle|ellipse",
- "env()": "env( <custom-ident> , <declaration-value>? )",
- "exp()": "exp( <calc-sum> )",
- "explicit-track-list": "[<line-names>? <track-size>]+ <line-names>?",
- "family-name": "<string>|<custom-ident>+",
- "feature-tag-value": "<string> [<integer>|on|off]?",
- "feature-type": "@stylistic|@historical-forms|@styleset|@character-variant|@swash|@ornaments|@annotation",
- "feature-value-block": "<feature-type> '{' <feature-value-declaration-list> '}'",
- "feature-value-block-list": "<feature-value-block>+",
- "feature-value-declaration": "<custom-ident> : <integer>+ ;",
- "feature-value-declaration-list": "<feature-value-declaration>",
- "feature-value-name": "<custom-ident>",
- "fill-rule": "nonzero|evenodd",
- "filter-function": "<blur()>|<brightness()>|<contrast()>|<drop-shadow()>|<grayscale()>|<hue-rotate()>|<invert()>|<opacity()>|<saturate()>|<sepia()>",
- "filter-function-list": "[<filter-function>|<url>]+",
- "final-bg-layer": "<'background-color'>||<bg-image>||<bg-position> [/ <bg-size>]?||<repeat-style>||<attachment>||<box>||<box>",
- "fixed-breadth": "<length-percentage>",
- "fixed-repeat": "repeat( [<integer [1,∞]>] , [<line-names>? <fixed-size>]+ <line-names>? )",
- "fixed-size": "<fixed-breadth>|minmax( <fixed-breadth> , <track-breadth> )|minmax( <inflexible-breadth> , <fixed-breadth> )",
- "font-stretch-absolute": "normal|ultra-condensed|extra-condensed|condensed|semi-condensed|semi-expanded|expanded|extra-expanded|ultra-expanded|<percentage>",
- "font-variant-css21": "[normal|small-caps]",
- "font-weight-absolute": "normal|bold|<number [1,1000]>",
- "frequency-percentage": "<frequency>|<percentage>",
- "general-enclosed": "[<function-token> <any-value> )]|( <ident> <any-value> )",
- "generic-family": "serif|sans-serif|cursive|fantasy|monospace|-apple-system",
- "generic-name": "serif|sans-serif|cursive|fantasy|monospace",
- "geometry-box": "<shape-box>|fill-box|stroke-box|view-box",
- "gradient": "<linear-gradient()>|<repeating-linear-gradient()>|<radial-gradient()>|<repeating-radial-gradient()>|<conic-gradient()>|<repeating-conic-gradient()>|<-legacy-gradient>",
- "grayscale()": "grayscale( <number-percentage> )",
- "grid-line": "auto|<custom-ident>|[<integer>&&<custom-ident>?]|[span&&[<integer>||<custom-ident>]]",
- "historical-lig-values": "[historical-ligatures|no-historical-ligatures]",
- "hsl()": "hsl( <hue> <percentage> <percentage> [/ <alpha-value>]? )|hsl( <hue> , <percentage> , <percentage> , <alpha-value>? )",
- "hsla()": "hsla( <hue> <percentage> <percentage> [/ <alpha-value>]? )|hsla( <hue> , <percentage> , <percentage> , <alpha-value>? )",
- "hue": "<number>|<angle>",
- "hue-rotate()": "hue-rotate( <angle> )",
- "hwb()": "hwb( [<hue>|none] [<percentage>|none] [<percentage>|none] [/ [<alpha-value>|none]]? )",
- "hypot()": "hypot( <calc-sum># )",
- "image": "<url>|<image()>|<image-set()>|<element()>|<paint()>|<cross-fade()>|<gradient>",
- "image()": "image( <image-tags>? [<image-src>? , <color>?]! )",
- "image-set()": "image-set( <image-set-option># )",
- "image-set-option": "[<image>|<string>] [<resolution>||type( <string> )]",
- "image-src": "<url>|<string>",
- "image-tags": "ltr|rtl",
- "inflexible-breadth": "<length-percentage>|min-content|max-content|auto",
- "inset()": "inset( <length-percentage>{1,4} [round <'border-radius'>]? )",
- "invert()": "invert( <number-percentage> )",
- "keyframes-name": "<custom-ident>|<string>",
- "keyframe-block": "<keyframe-selector># { <declaration-list> }",
- "keyframe-block-list": "<keyframe-block>+",
- "keyframe-selector": "from|to|<percentage>",
- "lab()": "lab( [<percentage>|<number>|none] [<percentage>|<number>|none] [<percentage>|<number>|none] [/ [<alpha-value>|none]]? )",
- "layer()": "layer( <layer-name> )",
- "layer-name": "<ident> ['.' <ident>]*",
- "lch()": "lch( [<percentage>|<number>|none] [<percentage>|<number>|none] [<hue>|none] [/ [<alpha-value>|none]]? )",
- "leader()": "leader( <leader-type> )",
- "leader-type": "dotted|solid|space|<string>",
- "length-percentage": "<length>|<percentage>",
- "line-names": "'[' <custom-ident>* ']'",
- "line-name-list": "[<line-names>|<name-repeat>]+",
- "line-style": "none|hidden|dotted|dashed|solid|double|groove|ridge|inset|outset",
- "line-width": "<length>|thin|medium|thick",
- "linear-color-hint": "<length-percentage>",
- "linear-color-stop": "<color> <color-stop-length>?",
- "linear-gradient()": "linear-gradient( [<angle>|to <side-or-corner>]? , <color-stop-list> )",
- "log()": "log( <calc-sum> , <calc-sum>? )",
- "mask-layer": "<mask-reference>||<position> [/ <bg-size>]?||<repeat-style>||<geometry-box>||[<geometry-box>|no-clip]||<compositing-operator>||<masking-mode>",
- "mask-position": "[<length-percentage>|left|center|right] [<length-percentage>|top|center|bottom]?",
- "mask-reference": "none|<image>|<mask-source>",
- "mask-source": "<url>",
- "masking-mode": "alpha|luminance|match-source",
- "matrix()": "matrix( <number>#{6} )",
- "matrix3d()": "matrix3d( <number>#{16} )",
- "max()": "max( <calc-sum># )",
- "media-and": "<media-in-parens> [and <media-in-parens>]+",
- "media-condition": "<media-not>|<media-and>|<media-or>|<media-in-parens>",
- "media-condition-without-or": "<media-not>|<media-and>|<media-in-parens>",
- "media-feature": "( [<mf-plain>|<mf-boolean>|<mf-range>] )",
- "media-in-parens": "( <media-condition> )|<media-feature>|<general-enclosed>",
- "media-not": "not <media-in-parens>",
- "media-or": "<media-in-parens> [or <media-in-parens>]+",
- "media-query": "<media-condition>|[not|only]? <media-type> [and <media-condition-without-or>]?",
- "media-query-list": "<media-query>#",
- "media-type": "<ident>",
- "mf-boolean": "<mf-name>",
- "mf-name": "<ident>",
- "mf-plain": "<mf-name> : <mf-value>",
- "mf-range": "<mf-name> ['<'|'>']? '='? <mf-value>|<mf-value> ['<'|'>']? '='? <mf-name>|<mf-value> '<' '='? <mf-name> '<' '='? <mf-value>|<mf-value> '>' '='? <mf-name> '>' '='? <mf-value>",
- "mf-value": "<number>|<dimension>|<ident>|<ratio>",
- "min()": "min( <calc-sum># )",
- "minmax()": "minmax( [<length-percentage>|min-content|max-content|auto] , [<length-percentage>|<flex>|min-content|max-content|auto] )",
- "mod()": "mod( <calc-sum> , <calc-sum> )",
- "name-repeat": "repeat( [<integer [1,∞]>|auto-fill] , <line-names>+ )",
- "named-color": "transparent|aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen|<-non-standard-color>",
- "namespace-prefix": "<ident>",
- "ns-prefix": "[<ident-token>|'*']? '|'",
- "number-percentage": "<number>|<percentage>",
- "numeric-figure-values": "[lining-nums|oldstyle-nums]",
- "numeric-fraction-values": "[diagonal-fractions|stacked-fractions]",
- "numeric-spacing-values": "[proportional-nums|tabular-nums]",
- "nth": "<an-plus-b>|even|odd",
- "opacity()": "opacity( [<number-percentage>] )",
- "overflow-position": "unsafe|safe",
- "outline-radius": "<length>|<percentage>",
- "page-body": "<declaration>? [; <page-body>]?|<page-margin-box> <page-body>",
- "page-margin-box": "<page-margin-box-type> '{' <declaration-list> '}'",
- "page-margin-box-type": "@top-left-corner|@top-left|@top-center|@top-right|@top-right-corner|@bottom-left-corner|@bottom-left|@bottom-center|@bottom-right|@bottom-right-corner|@left-top|@left-middle|@left-bottom|@right-top|@right-middle|@right-bottom",
- "page-selector-list": "[<page-selector>#]?",
- "page-selector": "<pseudo-page>+|<ident> <pseudo-page>*",
- "page-size": "A5|A4|A3|B5|B4|JIS-B5|JIS-B4|letter|legal|ledger",
- "path()": "path( [<fill-rule> ,]? <string> )",
- "paint()": "paint( <ident> , <declaration-value>? )",
- "perspective()": "perspective( [<length [0,∞]>|none] )",
- "polygon()": "polygon( <fill-rule>? , [<length-percentage> <length-percentage>]# )",
- "position": "[[left|center|right]||[top|center|bottom]|[left|center|right|<length-percentage>] [top|center|bottom|<length-percentage>]?|[[left|right] <length-percentage>]&&[[top|bottom] <length-percentage>]]",
- "pow()": "pow( <calc-sum> , <calc-sum> )",
- "pseudo-class-selector": "':' <ident-token>|':' <function-token> <any-value> ')'",
- "pseudo-element-selector": "':' <pseudo-class-selector>",
- "pseudo-page": ": [left|right|first|blank]",
- "quote": "open-quote|close-quote|no-open-quote|no-close-quote",
- "radial-gradient()": "radial-gradient( [<ending-shape>||<size>]? [at <position>]? , <color-stop-list> )",
- "ratio": "<number [0,∞]> [/ <number [0,∞]>]?",
- "relative-selector": "<combinator>? <complex-selector>",
- "relative-selector-list": "<relative-selector>#",
- "relative-size": "larger|smaller",
- "rem()": "rem( <calc-sum> , <calc-sum> )",
- "repeat-style": "repeat-x|repeat-y|[repeat|space|round|no-repeat]{1,2}",
- "repeating-conic-gradient()": "repeating-conic-gradient( [from <angle>]? [at <position>]? , <angular-color-stop-list> )",
- "repeating-linear-gradient()": "repeating-linear-gradient( [<angle>|to <side-or-corner>]? , <color-stop-list> )",
- "repeating-radial-gradient()": "repeating-radial-gradient( [<ending-shape>||<size>]? [at <position>]? , <color-stop-list> )",
- "reversed-counter-name": "reversed( <counter-name> )",
- "rgb()": "rgb( <percentage>{3} [/ <alpha-value>]? )|rgb( <number>{3} [/ <alpha-value>]? )|rgb( <percentage>#{3} , <alpha-value>? )|rgb( <number>#{3} , <alpha-value>? )",
- "rgba()": "rgba( <percentage>{3} [/ <alpha-value>]? )|rgba( <number>{3} [/ <alpha-value>]? )|rgba( <percentage>#{3} , <alpha-value>? )|rgba( <number>#{3} , <alpha-value>? )",
- "rotate()": "rotate( [<angle>|<zero>] )",
- "rotate3d()": "rotate3d( <number> , <number> , <number> , [<angle>|<zero>] )",
- "rotateX()": "rotateX( [<angle>|<zero>] )",
- "rotateY()": "rotateY( [<angle>|<zero>] )",
- "rotateZ()": "rotateZ( [<angle>|<zero>] )",
- "round()": "round( <rounding-strategy>? , <calc-sum> , <calc-sum> )",
- "rounding-strategy": "nearest|up|down|to-zero",
- "saturate()": "saturate( <number-percentage> )",
- "scale()": "scale( [<number>|<percentage>]#{1,2} )",
- "scale3d()": "scale3d( [<number>|<percentage>]#{3} )",
- "scaleX()": "scaleX( [<number>|<percentage>] )",
- "scaleY()": "scaleY( [<number>|<percentage>] )",
- "scaleZ()": "scaleZ( [<number>|<percentage>] )",
- "scroller": "root|nearest",
- "self-position": "center|start|end|self-start|self-end|flex-start|flex-end",
- "shape-radius": "<length-percentage>|closest-side|farthest-side",
- "sign()": "sign( <calc-sum> )",
- "skew()": "skew( [<angle>|<zero>] , [<angle>|<zero>]? )",
- "skewX()": "skewX( [<angle>|<zero>] )",
- "skewY()": "skewY( [<angle>|<zero>] )",
- "sepia()": "sepia( <number-percentage> )",
- "shadow": "inset?&&<length>{2,4}&&<color>?",
- "shadow-t": "[<length>{2,3}&&<color>?]",
- "shape": "rect( <top> , <right> , <bottom> , <left> )|rect( <top> <right> <bottom> <left> )",
- "shape-box": "<box>|margin-box",
- "side-or-corner": "[left|right]||[top|bottom]",
- "sin()": "sin( <calc-sum> )",
- "single-animation": "<time>||<easing-function>||<time>||<single-animation-iteration-count>||<single-animation-direction>||<single-animation-fill-mode>||<single-animation-play-state>||[none|<keyframes-name>]",
- "single-animation-direction": "normal|reverse|alternate|alternate-reverse",
- "single-animation-fill-mode": "none|forwards|backwards|both",
- "single-animation-iteration-count": "infinite|<number>",
- "single-animation-play-state": "running|paused",
- "single-animation-timeline": "auto|none|<timeline-name>|scroll( <axis>? <scroller>? )",
- "single-transition": "[none|<single-transition-property>]||<time>||<easing-function>||<time>",
- "single-transition-property": "all|<custom-ident>",
- "size": "closest-side|farthest-side|closest-corner|farthest-corner|<length>|<length-percentage>{2}",
- "sqrt()": "sqrt( <calc-sum> )",
- "step-position": "jump-start|jump-end|jump-none|jump-both|start|end",
- "step-timing-function": "step-start|step-end|steps( <integer> [, <step-position>]? )",
- "subclass-selector": "<id-selector>|<class-selector>|<attribute-selector>|<pseudo-class-selector>",
- "supports-condition": "not <supports-in-parens>|<supports-in-parens> [and <supports-in-parens>]*|<supports-in-parens> [or <supports-in-parens>]*",
- "supports-in-parens": "( <supports-condition> )|<supports-feature>|<general-enclosed>",
- "supports-feature": "<supports-decl>|<supports-selector-fn>",
- "supports-decl": "( <declaration> )",
- "supports-selector-fn": "selector( <complex-selector> )",
- "symbol": "<string>|<image>|<custom-ident>",
- "tan()": "tan( <calc-sum> )",
- "target": "<target-counter()>|<target-counters()>|<target-text()>",
- "target-counter()": "target-counter( [<string>|<url>] , <custom-ident> , <counter-style>? )",
- "target-counters()": "target-counters( [<string>|<url>] , <custom-ident> , <string> , <counter-style>? )",
- "target-text()": "target-text( [<string>|<url>] , [content|before|after|first-letter]? )",
- "time-percentage": "<time>|<percentage>",
- "timeline-name": "<custom-ident>|<string>",
- "easing-function": "linear|<cubic-bezier-timing-function>|<step-timing-function>",
- "track-breadth": "<length-percentage>|<flex>|min-content|max-content|auto",
- "track-list": "[<line-names>? [<track-size>|<track-repeat>]]+ <line-names>?",
- "track-repeat": "repeat( [<integer [1,∞]>] , [<line-names>? <track-size>]+ <line-names>? )",
- "track-size": "<track-breadth>|minmax( <inflexible-breadth> , <track-breadth> )|fit-content( <length-percentage> )",
- "transform-function": "<matrix()>|<translate()>|<translateX()>|<translateY()>|<scale()>|<scaleX()>|<scaleY()>|<rotate()>|<skew()>|<skewX()>|<skewY()>|<matrix3d()>|<translate3d()>|<translateZ()>|<scale3d()>|<scaleZ()>|<rotate3d()>|<rotateX()>|<rotateY()>|<rotateZ()>|<perspective()>",
- "transform-list": "<transform-function>+",
- "translate()": "translate( <length-percentage> , <length-percentage>? )",
- "translate3d()": "translate3d( <length-percentage> , <length-percentage> , <length> )",
- "translateX()": "translateX( <length-percentage> )",
- "translateY()": "translateY( <length-percentage> )",
- "translateZ()": "translateZ( <length> )",
- "type-or-unit": "string|color|url|integer|number|length|angle|time|frequency|cap|ch|em|ex|ic|lh|rlh|rem|vb|vi|vw|vh|vmin|vmax|mm|Q|cm|in|pt|pc|px|deg|grad|rad|turn|ms|s|Hz|kHz|%",
- "type-selector": "<wq-name>|<ns-prefix>? '*'",
- "var()": "var( <custom-property-name> , <declaration-value>? )",
- "viewport-length": "auto|<length-percentage>",
- "visual-box": "content-box|padding-box|border-box",
- "wq-name": "<ns-prefix>? <ident-token>",
- "-legacy-gradient": "<-webkit-gradient()>|<-legacy-linear-gradient>|<-legacy-repeating-linear-gradient>|<-legacy-radial-gradient>|<-legacy-repeating-radial-gradient>",
- "-legacy-linear-gradient": "-moz-linear-gradient( <-legacy-linear-gradient-arguments> )|-webkit-linear-gradient( <-legacy-linear-gradient-arguments> )|-o-linear-gradient( <-legacy-linear-gradient-arguments> )",
- "-legacy-repeating-linear-gradient": "-moz-repeating-linear-gradient( <-legacy-linear-gradient-arguments> )|-webkit-repeating-linear-gradient( <-legacy-linear-gradient-arguments> )|-o-repeating-linear-gradient( <-legacy-linear-gradient-arguments> )",
- "-legacy-linear-gradient-arguments": "[<angle>|<side-or-corner>]? , <color-stop-list>",
- "-legacy-radial-gradient": "-moz-radial-gradient( <-legacy-radial-gradient-arguments> )|-webkit-radial-gradient( <-legacy-radial-gradient-arguments> )|-o-radial-gradient( <-legacy-radial-gradient-arguments> )",
- "-legacy-repeating-radial-gradient": "-moz-repeating-radial-gradient( <-legacy-radial-gradient-arguments> )|-webkit-repeating-radial-gradient( <-legacy-radial-gradient-arguments> )|-o-repeating-radial-gradient( <-legacy-radial-gradient-arguments> )",
- "-legacy-radial-gradient-arguments": "[<position> ,]? [[[<-legacy-radial-gradient-shape>||<-legacy-radial-gradient-size>]|[<length>|<percentage>]{2}] ,]? <color-stop-list>",
- "-legacy-radial-gradient-size": "closest-side|closest-corner|farthest-side|farthest-corner|contain|cover",
- "-legacy-radial-gradient-shape": "circle|ellipse",
- "-non-standard-font": "-apple-system-body|-apple-system-headline|-apple-system-subheadline|-apple-system-caption1|-apple-system-caption2|-apple-system-footnote|-apple-system-short-body|-apple-system-short-headline|-apple-system-short-subheadline|-apple-system-short-caption1|-apple-system-short-footnote|-apple-system-tall-body",
- "-non-standard-color": "-moz-ButtonDefault|-moz-ButtonHoverFace|-moz-ButtonHoverText|-moz-CellHighlight|-moz-CellHighlightText|-moz-Combobox|-moz-ComboboxText|-moz-Dialog|-moz-DialogText|-moz-dragtargetzone|-moz-EvenTreeRow|-moz-Field|-moz-FieldText|-moz-html-CellHighlight|-moz-html-CellHighlightText|-moz-mac-accentdarkestshadow|-moz-mac-accentdarkshadow|-moz-mac-accentface|-moz-mac-accentlightesthighlight|-moz-mac-accentlightshadow|-moz-mac-accentregularhighlight|-moz-mac-accentregularshadow|-moz-mac-chrome-active|-moz-mac-chrome-inactive|-moz-mac-focusring|-moz-mac-menuselect|-moz-mac-menushadow|-moz-mac-menutextselect|-moz-MenuHover|-moz-MenuHoverText|-moz-MenuBarText|-moz-MenuBarHoverText|-moz-nativehyperlinktext|-moz-OddTreeRow|-moz-win-communicationstext|-moz-win-mediatext|-moz-activehyperlinktext|-moz-default-background-color|-moz-default-color|-moz-hyperlinktext|-moz-visitedhyperlinktext|-webkit-activelink|-webkit-focus-ring-color|-webkit-link|-webkit-text",
- "-non-standard-image-rendering": "optimize-contrast|-moz-crisp-edges|-o-crisp-edges|-webkit-optimize-contrast",
- "-non-standard-overflow": "-moz-scrollbars-none|-moz-scrollbars-horizontal|-moz-scrollbars-vertical|-moz-hidden-unscrollable",
- "-non-standard-width": "fill-available|min-intrinsic|intrinsic|-moz-available|-moz-fit-content|-moz-min-content|-moz-max-content|-webkit-min-content|-webkit-max-content",
- "-webkit-gradient()": "-webkit-gradient( <-webkit-gradient-type> , <-webkit-gradient-point> [, <-webkit-gradient-point>|, <-webkit-gradient-radius> , <-webkit-gradient-point>] [, <-webkit-gradient-radius>]? [, <-webkit-gradient-color-stop>]* )",
- "-webkit-gradient-color-stop": "from( <color> )|color-stop( [<number-zero-one>|<percentage>] , <color> )|to( <color> )",
- "-webkit-gradient-point": "[left|center|right|<length-percentage>] [top|center|bottom|<length-percentage>]",
- "-webkit-gradient-radius": "<length>|<percentage>",
- "-webkit-gradient-type": "linear|radial",
- "-webkit-mask-box-repeat": "repeat|stretch|round",
- "-webkit-mask-clip-style": "border|border-box|padding|padding-box|content|content-box|text",
- "-ms-filter-function-list": "<-ms-filter-function>+",
- "-ms-filter-function": "<-ms-filter-function-progid>|<-ms-filter-function-legacy>",
- "-ms-filter-function-progid": "'progid:' [<ident-token> '.']* [<ident-token>|<function-token> <any-value>? )]",
- "-ms-filter-function-legacy": "<ident-token>|<function-token> <any-value>? )",
- "-ms-filter": "<string>",
- "age": "child|young|old",
- "attr-name": "<wq-name>",
- "attr-fallback": "<any-value>",
- "bg-clip": "<box>|border|text",
- "bottom": "<length>|auto",
- "generic-voice": "[<age>? <gender> <integer>?]",
- "gender": "male|female|neutral",
- "left": "<length>|auto",
- "mask-image": "<mask-reference>#",
- "paint": "none|<color>|<url> [none|<color>]?|context-fill|context-stroke",
- "right": "<length>|auto",
- "scroll-timeline-axis": "block|inline|vertical|horizontal",
- "scroll-timeline-name": "none|<custom-ident>",
- "single-animation-composition": "replace|add|accumulate",
- "svg-length": "<percentage>|<length>|<number>",
- "svg-writing-mode": "lr-tb|rl-tb|tb-rl|lr|rl|tb",
- "top": "<length>|auto",
- "x": "<number>",
- "y": "<number>",
- "declaration": "<ident-token> : <declaration-value>? ['!' important]?",
- "declaration-list": "[<declaration>? ';']* <declaration>?",
- "url": "url( <string> <url-modifier>* )|<url-token>",
- "url-modifier": "<ident>|<function-token> <any-value> )",
- "number-zero-one": "<number [0,1]>",
- "number-one-or-greater": "<number [1,∞]>",
- "-non-standard-display": "-ms-inline-flexbox|-ms-grid|-ms-inline-grid|-webkit-flex|-webkit-inline-flex|-webkit-box|-webkit-inline-box|-moz-inline-stack|-moz-box|-moz-inline-box"
- },
- "properties": {
- "--*": "<declaration-value>",
- "-ms-accelerator": "false|true",
- "-ms-block-progression": "tb|rl|bt|lr",
- "-ms-content-zoom-chaining": "none|chained",
- "-ms-content-zooming": "none|zoom",
- "-ms-content-zoom-limit": "<'-ms-content-zoom-limit-min'> <'-ms-content-zoom-limit-max'>",
- "-ms-content-zoom-limit-max": "<percentage>",
- "-ms-content-zoom-limit-min": "<percentage>",
- "-ms-content-zoom-snap": "<'-ms-content-zoom-snap-type'>||<'-ms-content-zoom-snap-points'>",
- "-ms-content-zoom-snap-points": "snapInterval( <percentage> , <percentage> )|snapList( <percentage># )",
- "-ms-content-zoom-snap-type": "none|proximity|mandatory",
- "-ms-filter": "<string>",
- "-ms-flow-from": "[none|<custom-ident>]#",
- "-ms-flow-into": "[none|<custom-ident>]#",
- "-ms-grid-columns": "none|<track-list>|<auto-track-list>",
- "-ms-grid-rows": "none|<track-list>|<auto-track-list>",
- "-ms-high-contrast-adjust": "auto|none",
- "-ms-hyphenate-limit-chars": "auto|<integer>{1,3}",
- "-ms-hyphenate-limit-lines": "no-limit|<integer>",
- "-ms-hyphenate-limit-zone": "<percentage>|<length>",
- "-ms-ime-align": "auto|after",
- "-ms-overflow-style": "auto|none|scrollbar|-ms-autohiding-scrollbar",
- "-ms-scrollbar-3dlight-color": "<color>",
- "-ms-scrollbar-arrow-color": "<color>",
- "-ms-scrollbar-base-color": "<color>",
- "-ms-scrollbar-darkshadow-color": "<color>",
- "-ms-scrollbar-face-color": "<color>",
- "-ms-scrollbar-highlight-color": "<color>",
- "-ms-scrollbar-shadow-color": "<color>",
- "-ms-scrollbar-track-color": "<color>",
- "-ms-scroll-chaining": "chained|none",
- "-ms-scroll-limit": "<'-ms-scroll-limit-x-min'> <'-ms-scroll-limit-y-min'> <'-ms-scroll-limit-x-max'> <'-ms-scroll-limit-y-max'>",
- "-ms-scroll-limit-x-max": "auto|<length>",
- "-ms-scroll-limit-x-min": "<length>",
- "-ms-scroll-limit-y-max": "auto|<length>",
- "-ms-scroll-limit-y-min": "<length>",
- "-ms-scroll-rails": "none|railed",
- "-ms-scroll-snap-points-x": "snapInterval( <length-percentage> , <length-percentage> )|snapList( <length-percentage># )",
- "-ms-scroll-snap-points-y": "snapInterval( <length-percentage> , <length-percentage> )|snapList( <length-percentage># )",
- "-ms-scroll-snap-type": "none|proximity|mandatory",
- "-ms-scroll-snap-x": "<'-ms-scroll-snap-type'> <'-ms-scroll-snap-points-x'>",
- "-ms-scroll-snap-y": "<'-ms-scroll-snap-type'> <'-ms-scroll-snap-points-y'>",
- "-ms-scroll-translation": "none|vertical-to-horizontal",
- "-ms-text-autospace": "none|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space",
- "-ms-touch-select": "grippers|none",
- "-ms-user-select": "none|element|text",
- "-ms-wrap-flow": "auto|both|start|end|maximum|clear",
- "-ms-wrap-margin": "<length>",
- "-ms-wrap-through": "wrap|none",
- "-moz-appearance": "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",
- "-moz-binding": "<url>|none",
- "-moz-border-bottom-colors": "<color>+|none",
- "-moz-border-left-colors": "<color>+|none",
- "-moz-border-right-colors": "<color>+|none",
- "-moz-border-top-colors": "<color>+|none",
- "-moz-context-properties": "none|[fill|fill-opacity|stroke|stroke-opacity]#",
- "-moz-float-edge": "border-box|content-box|margin-box|padding-box",
- "-moz-force-broken-image-icon": "0|1",
- "-moz-image-region": "<shape>|auto",
- "-moz-orient": "inline|block|horizontal|vertical",
- "-moz-outline-radius": "<outline-radius>{1,4} [/ <outline-radius>{1,4}]?",
- "-moz-outline-radius-bottomleft": "<outline-radius>",
- "-moz-outline-radius-bottomright": "<outline-radius>",
- "-moz-outline-radius-topleft": "<outline-radius>",
- "-moz-outline-radius-topright": "<outline-radius>",
- "-moz-stack-sizing": "ignore|stretch-to-fit",
- "-moz-text-blink": "none|blink",
- "-moz-user-focus": "ignore|normal|select-after|select-before|select-menu|select-same|select-all|none",
- "-moz-user-input": "auto|none|enabled|disabled",
- "-moz-user-modify": "read-only|read-write|write-only",
- "-moz-window-dragging": "drag|no-drag",
- "-moz-window-shadow": "default|menu|tooltip|sheet|none",
- "-webkit-appearance": "none|button|button-bevel|caps-lock-indicator|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|scrollbarbutton-down|scrollbarbutton-left|scrollbarbutton-right|scrollbarbutton-up|scrollbargripper-horizontal|scrollbargripper-vertical|scrollbarthumb-horizontal|scrollbarthumb-vertical|scrollbartrack-horizontal|scrollbartrack-vertical|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",
- "-webkit-border-before": "<'border-width'>||<'border-style'>||<color>",
- "-webkit-border-before-color": "<color>",
- "-webkit-border-before-style": "<'border-style'>",
- "-webkit-border-before-width": "<'border-width'>",
- "-webkit-box-reflect": "[above|below|right|left]? <length>? <image>?",
- "-webkit-line-clamp": "none|<integer>",
- "-webkit-mask": "[<mask-reference>||<position> [/ <bg-size>]?||<repeat-style>||[<box>|border|padding|content|text]||[<box>|border|padding|content]]#",
- "-webkit-mask-attachment": "<attachment>#",
- "-webkit-mask-clip": "[<box>|border|padding|content|text]#",
- "-webkit-mask-composite": "<composite-style>#",
- "-webkit-mask-image": "<mask-reference>#",
- "-webkit-mask-origin": "[<box>|border|padding|content]#",
- "-webkit-mask-position": "<position>#",
- "-webkit-mask-position-x": "[<length-percentage>|left|center|right]#",
- "-webkit-mask-position-y": "[<length-percentage>|top|center|bottom]#",
- "-webkit-mask-repeat": "<repeat-style>#",
- "-webkit-mask-repeat-x": "repeat|no-repeat|space|round",
- "-webkit-mask-repeat-y": "repeat|no-repeat|space|round",
- "-webkit-mask-size": "<bg-size>#",
- "-webkit-overflow-scrolling": "auto|touch",
- "-webkit-tap-highlight-color": "<color>",
- "-webkit-text-fill-color": "<color>",
- "-webkit-text-stroke": "<length>||<color>",
- "-webkit-text-stroke-color": "<color>",
- "-webkit-text-stroke-width": "<length>",
- "-webkit-touch-callout": "default|none",
- "-webkit-user-modify": "read-only|read-write|read-write-plaintext-only",
- "accent-color": "auto|<color>",
- "align-content": "normal|<baseline-position>|<content-distribution>|<overflow-position>? <content-position>",
- "align-items": "normal|stretch|<baseline-position>|[<overflow-position>? <self-position>]",
- "align-self": "auto|normal|stretch|<baseline-position>|<overflow-position>? <self-position>",
- "align-tracks": "[normal|<baseline-position>|<content-distribution>|<overflow-position>? <content-position>]#",
- "all": "initial|inherit|unset|revert|revert-layer",
- "animation": "<single-animation>#",
- "animation-composition": "<single-animation-composition>#",
- "animation-delay": "<time>#",
- "animation-direction": "<single-animation-direction>#",
- "animation-duration": "<time>#",
- "animation-fill-mode": "<single-animation-fill-mode>#",
- "animation-iteration-count": "<single-animation-iteration-count>#",
- "animation-name": "[none|<keyframes-name>]#",
- "animation-play-state": "<single-animation-play-state>#",
- "animation-timing-function": "<easing-function>#",
- "animation-timeline": "<single-animation-timeline>#",
- "appearance": "none|auto|textfield|menulist-button|<compat-auto>",
- "aspect-ratio": "auto|<ratio>",
- "azimuth": "<angle>|[[left-side|far-left|left|center-left|center|center-right|right|far-right|right-side]||behind]|leftwards|rightwards",
- "backdrop-filter": "none|<filter-function-list>",
- "backface-visibility": "visible|hidden",
- "background": "[<bg-layer> ,]* <final-bg-layer>",
- "background-attachment": "<attachment>#",
- "background-blend-mode": "<blend-mode>#",
- "background-clip": "<bg-clip>#",
- "background-color": "<color>",
- "background-image": "<bg-image>#",
- "background-origin": "<box>#",
- "background-position": "<bg-position>#",
- "background-position-x": "[center|[[left|right|x-start|x-end]? <length-percentage>?]!]#",
- "background-position-y": "[center|[[top|bottom|y-start|y-end]? <length-percentage>?]!]#",
- "background-repeat": "<repeat-style>#",
- "background-size": "<bg-size>#",
- "block-overflow": "clip|ellipsis|<string>",
- "block-size": "<'width'>",
- "border": "<line-width>||<line-style>||<color>",
- "border-block": "<'border-top-width'>||<'border-top-style'>||<color>",
- "border-block-color": "<'border-top-color'>{1,2}",
- "border-block-style": "<'border-top-style'>",
- "border-block-width": "<'border-top-width'>",
- "border-block-end": "<'border-top-width'>||<'border-top-style'>||<color>",
- "border-block-end-color": "<'border-top-color'>",
- "border-block-end-style": "<'border-top-style'>",
- "border-block-end-width": "<'border-top-width'>",
- "border-block-start": "<'border-top-width'>||<'border-top-style'>||<color>",
- "border-block-start-color": "<'border-top-color'>",
- "border-block-start-style": "<'border-top-style'>",
- "border-block-start-width": "<'border-top-width'>",
- "border-bottom": "<line-width>||<line-style>||<color>",
- "border-bottom-color": "<'border-top-color'>",
- "border-bottom-left-radius": "<length-percentage>{1,2}",
- "border-bottom-right-radius": "<length-percentage>{1,2}",
- "border-bottom-style": "<line-style>",
- "border-bottom-width": "<line-width>",
- "border-collapse": "collapse|separate",
- "border-color": "<color>{1,4}",
- "border-end-end-radius": "<length-percentage>{1,2}",
- "border-end-start-radius": "<length-percentage>{1,2}",
- "border-image": "<'border-image-source'>||<'border-image-slice'> [/ <'border-image-width'>|/ <'border-image-width'>? / <'border-image-outset'>]?||<'border-image-repeat'>",
- "border-image-outset": "[<length>|<number>]{1,4}",
- "border-image-repeat": "[stretch|repeat|round|space]{1,2}",
- "border-image-slice": "<number-percentage>{1,4}&&fill?",
- "border-image-source": "none|<image>",
- "border-image-width": "[<length-percentage>|<number>|auto]{1,4}",
- "border-inline": "<'border-top-width'>||<'border-top-style'>||<color>",
- "border-inline-end": "<'border-top-width'>||<'border-top-style'>||<color>",
- "border-inline-color": "<'border-top-color'>{1,2}",
- "border-inline-style": "<'border-top-style'>",
- "border-inline-width": "<'border-top-width'>",
- "border-inline-end-color": "<'border-top-color'>",
- "border-inline-end-style": "<'border-top-style'>",
- "border-inline-end-width": "<'border-top-width'>",
- "border-inline-start": "<'border-top-width'>||<'border-top-style'>||<color>",
- "border-inline-start-color": "<'border-top-color'>",
- "border-inline-start-style": "<'border-top-style'>",
- "border-inline-start-width": "<'border-top-width'>",
- "border-left": "<line-width>||<line-style>||<color>",
- "border-left-color": "<color>",
- "border-left-style": "<line-style>",
- "border-left-width": "<line-width>",
- "border-radius": "<length-percentage>{1,4} [/ <length-percentage>{1,4}]?",
- "border-right": "<line-width>||<line-style>||<color>",
- "border-right-color": "<color>",
- "border-right-style": "<line-style>",
- "border-right-width": "<line-width>",
- "border-spacing": "<length> <length>?",
- "border-start-end-radius": "<length-percentage>{1,2}",
- "border-start-start-radius": "<length-percentage>{1,2}",
- "border-style": "<line-style>{1,4}",
- "border-top": "<line-width>||<line-style>||<color>",
- "border-top-color": "<color>",
- "border-top-left-radius": "<length-percentage>{1,2}",
- "border-top-right-radius": "<length-percentage>{1,2}",
- "border-top-style": "<line-style>",
- "border-top-width": "<line-width>",
- "border-width": "<line-width>{1,4}",
- "bottom": "<length>|<percentage>|auto",
- "box-align": "start|center|end|baseline|stretch",
- "box-decoration-break": "slice|clone",
- "box-direction": "normal|reverse|inherit",
- "box-flex": "<number>",
- "box-flex-group": "<integer>",
- "box-lines": "single|multiple",
- "box-ordinal-group": "<integer>",
- "box-orient": "horizontal|vertical|inline-axis|block-axis|inherit",
- "box-pack": "start|center|end|justify",
- "box-shadow": "none|<shadow>#",
- "box-sizing": "content-box|border-box",
- "break-after": "auto|avoid|always|all|avoid-page|page|left|right|recto|verso|avoid-column|column|avoid-region|region",
- "break-before": "auto|avoid|always|all|avoid-page|page|left|right|recto|verso|avoid-column|column|avoid-region|region",
- "break-inside": "auto|avoid|avoid-page|avoid-column|avoid-region",
- "caption-side": "top|bottom|block-start|block-end|inline-start|inline-end",
- "caret": "<'caret-color'>||<'caret-shape'>",
- "caret-color": "auto|<color>",
- "caret-shape": "auto|bar|block|underscore",
- "clear": "none|left|right|both|inline-start|inline-end",
- "clip": "<shape>|auto",
- "clip-path": "<clip-source>|[<basic-shape>||<geometry-box>]|none",
- "color": "<color>",
- "print-color-adjust": "economy|exact",
- "color-scheme": "normal|[light|dark|<custom-ident>]+&&only?",
- "column-count": "<integer>|auto",
- "column-fill": "auto|balance|balance-all",
- "column-gap": "normal|<length-percentage>",
- "column-rule": "<'column-rule-width'>||<'column-rule-style'>||<'column-rule-color'>",
- "column-rule-color": "<color>",
- "column-rule-style": "<'border-style'>",
- "column-rule-width": "<'border-width'>",
- "column-span": "none|all",
- "column-width": "<length>|auto",
- "columns": "<'column-width'>||<'column-count'>",
- "contain": "none|strict|content|[[size||inline-size]||layout||style||paint]",
- "contain-intrinsic-size": "[none|<length>|auto <length>]{1,2}",
- "contain-intrinsic-block-size": "none|<length>|auto <length>",
- "contain-intrinsic-height": "none|<length>|auto <length>",
- "contain-intrinsic-inline-size": "none|<length>|auto <length>",
- "contain-intrinsic-width": "none|<length>|auto <length>",
- "content": "normal|none|[<content-replacement>|<content-list>] [/ [<string>|<counter>]+]?",
- "content-visibility": "visible|auto|hidden",
- "counter-increment": "[<counter-name> <integer>?]+|none",
- "counter-reset": "[<counter-name> <integer>?|<reversed-counter-name> <integer>?]+|none",
- "counter-set": "[<counter-name> <integer>?]+|none",
- "cursor": "[[<url> [<x> <y>]? ,]* [auto|default|none|context-menu|help|pointer|progress|wait|cell|crosshair|text|vertical-text|alias|copy|move|no-drop|not-allowed|e-resize|n-resize|ne-resize|nw-resize|s-resize|se-resize|sw-resize|w-resize|ew-resize|ns-resize|nesw-resize|nwse-resize|col-resize|row-resize|all-scroll|zoom-in|zoom-out|grab|grabbing|hand|-webkit-grab|-webkit-grabbing|-webkit-zoom-in|-webkit-zoom-out|-moz-grab|-moz-grabbing|-moz-zoom-in|-moz-zoom-out]]",
- "direction": "ltr|rtl",
- "display": "[<display-outside>||<display-inside>]|<display-listitem>|<display-internal>|<display-box>|<display-legacy>|<-non-standard-display>",
- "empty-cells": "show|hide",
- "filter": "none|<filter-function-list>|<-ms-filter-function-list>",
- "flex": "none|[<'flex-grow'> <'flex-shrink'>?||<'flex-basis'>]",
- "flex-basis": "content|<'width'>",
- "flex-direction": "row|row-reverse|column|column-reverse",
- "flex-flow": "<'flex-direction'>||<'flex-wrap'>",
- "flex-grow": "<number>",
- "flex-shrink": "<number>",
- "flex-wrap": "nowrap|wrap|wrap-reverse",
- "float": "left|right|none|inline-start|inline-end",
- "font": "[[<'font-style'>||<font-variant-css21>||<'font-weight'>||<'font-stretch'>]? <'font-size'> [/ <'line-height'>]? <'font-family'>]|caption|icon|menu|message-box|small-caption|status-bar",
- "font-family": "[<family-name>|<generic-family>]#",
- "font-feature-settings": "normal|<feature-tag-value>#",
- "font-kerning": "auto|normal|none",
- "font-language-override": "normal|<string>",
- "font-optical-sizing": "auto|none",
- "font-variation-settings": "normal|[<string> <number>]#",
- "font-size": "<absolute-size>|<relative-size>|<length-percentage>",
- "font-size-adjust": "none|[ex-height|cap-height|ch-width|ic-width|ic-height]? [from-font|<number>]",
- "font-smooth": "auto|never|always|<absolute-size>|<length>",
- "font-stretch": "<font-stretch-absolute>",
- "font-style": "normal|italic|oblique <angle>?",
- "font-synthesis": "none|[weight||style||small-caps]",
- "font-variant": "normal|none|[<common-lig-values>||<discretionary-lig-values>||<historical-lig-values>||<contextual-alt-values>||stylistic( <feature-value-name> )||historical-forms||styleset( <feature-value-name># )||character-variant( <feature-value-name># )||swash( <feature-value-name> )||ornaments( <feature-value-name> )||annotation( <feature-value-name> )||[small-caps|all-small-caps|petite-caps|all-petite-caps|unicase|titling-caps]||<numeric-figure-values>||<numeric-spacing-values>||<numeric-fraction-values>||ordinal||slashed-zero||<east-asian-variant-values>||<east-asian-width-values>||ruby]",
- "font-variant-alternates": "normal|[stylistic( <feature-value-name> )||historical-forms||styleset( <feature-value-name># )||character-variant( <feature-value-name># )||swash( <feature-value-name> )||ornaments( <feature-value-name> )||annotation( <feature-value-name> )]",
- "font-variant-caps": "normal|small-caps|all-small-caps|petite-caps|all-petite-caps|unicase|titling-caps",
- "font-variant-east-asian": "normal|[<east-asian-variant-values>||<east-asian-width-values>||ruby]",
- "font-variant-ligatures": "normal|none|[<common-lig-values>||<discretionary-lig-values>||<historical-lig-values>||<contextual-alt-values>]",
- "font-variant-numeric": "normal|[<numeric-figure-values>||<numeric-spacing-values>||<numeric-fraction-values>||ordinal||slashed-zero]",
- "font-variant-position": "normal|sub|super",
- "font-weight": "<font-weight-absolute>|bolder|lighter",
- "forced-color-adjust": "auto|none",
- "gap": "<'row-gap'> <'column-gap'>?",
- "grid": "<'grid-template'>|<'grid-template-rows'> / [auto-flow&&dense?] <'grid-auto-columns'>?|[auto-flow&&dense?] <'grid-auto-rows'>? / <'grid-template-columns'>",
- "grid-area": "<grid-line> [/ <grid-line>]{0,3}",
- "grid-auto-columns": "<track-size>+",
- "grid-auto-flow": "[row|column]||dense",
- "grid-auto-rows": "<track-size>+",
- "grid-column": "<grid-line> [/ <grid-line>]?",
- "grid-column-end": "<grid-line>",
- "grid-column-gap": "<length-percentage>",
- "grid-column-start": "<grid-line>",
- "grid-gap": "<'grid-row-gap'> <'grid-column-gap'>?",
- "grid-row": "<grid-line> [/ <grid-line>]?",
- "grid-row-end": "<grid-line>",
- "grid-row-gap": "<length-percentage>",
- "grid-row-start": "<grid-line>",
- "grid-template": "none|[<'grid-template-rows'> / <'grid-template-columns'>]|[<line-names>? <string> <track-size>? <line-names>?]+ [/ <explicit-track-list>]?",
- "grid-template-areas": "none|<string>+",
- "grid-template-columns": "none|<track-list>|<auto-track-list>|subgrid <line-name-list>?",
- "grid-template-rows": "none|<track-list>|<auto-track-list>|subgrid <line-name-list>?",
- "hanging-punctuation": "none|[first||[force-end|allow-end]||last]",
- "height": "auto|<length>|<percentage>|min-content|max-content|fit-content|fit-content( <length-percentage> )",
- "hyphenate-character": "auto|<string>",
- "hyphens": "none|manual|auto",
- "image-orientation": "from-image|<angle>|[<angle>? flip]",
- "image-rendering": "auto|crisp-edges|pixelated|optimizeSpeed|optimizeQuality|<-non-standard-image-rendering>",
- "image-resolution": "[from-image||<resolution>]&&snap?",
- "ime-mode": "auto|normal|active|inactive|disabled",
- "initial-letter": "normal|[<number> <integer>?]",
- "initial-letter-align": "[auto|alphabetic|hanging|ideographic]",
- "inline-size": "<'width'>",
- "input-security": "auto|none",
- "inset": "<'top'>{1,4}",
- "inset-block": "<'top'>{1,2}",
- "inset-block-end": "<'top'>",
- "inset-block-start": "<'top'>",
- "inset-inline": "<'top'>{1,2}",
- "inset-inline-end": "<'top'>",
- "inset-inline-start": "<'top'>",
- "isolation": "auto|isolate",
- "justify-content": "normal|<content-distribution>|<overflow-position>? [<content-position>|left|right]",
- "justify-items": "normal|stretch|<baseline-position>|<overflow-position>? [<self-position>|left|right]|legacy|legacy&&[left|right|center]",
- "justify-self": "auto|normal|stretch|<baseline-position>|<overflow-position>? [<self-position>|left|right]",
- "justify-tracks": "[normal|<content-distribution>|<overflow-position>? [<content-position>|left|right]]#",
- "left": "<length>|<percentage>|auto",
- "letter-spacing": "normal|<length-percentage>",
- "line-break": "auto|loose|normal|strict|anywhere",
- "line-clamp": "none|<integer>",
- "line-height": "normal|<number>|<length>|<percentage>",
- "line-height-step": "<length>",
- "list-style": "<'list-style-type'>||<'list-style-position'>||<'list-style-image'>",
- "list-style-image": "<image>|none",
- "list-style-position": "inside|outside",
- "list-style-type": "<counter-style>|<string>|none",
- "margin": "[<length>|<percentage>|auto]{1,4}",
- "margin-block": "<'margin-left'>{1,2}",
- "margin-block-end": "<'margin-left'>",
- "margin-block-start": "<'margin-left'>",
- "margin-bottom": "<length>|<percentage>|auto",
- "margin-inline": "<'margin-left'>{1,2}",
- "margin-inline-end": "<'margin-left'>",
- "margin-inline-start": "<'margin-left'>",
- "margin-left": "<length>|<percentage>|auto",
- "margin-right": "<length>|<percentage>|auto",
- "margin-top": "<length>|<percentage>|auto",
- "margin-trim": "none|in-flow|all",
- "mask": "<mask-layer>#",
- "mask-border": "<'mask-border-source'>||<'mask-border-slice'> [/ <'mask-border-width'>? [/ <'mask-border-outset'>]?]?||<'mask-border-repeat'>||<'mask-border-mode'>",
- "mask-border-mode": "luminance|alpha",
- "mask-border-outset": "[<length>|<number>]{1,4}",
- "mask-border-repeat": "[stretch|repeat|round|space]{1,2}",
- "mask-border-slice": "<number-percentage>{1,4} fill?",
- "mask-border-source": "none|<image>",
- "mask-border-width": "[<length-percentage>|<number>|auto]{1,4}",
- "mask-clip": "[<geometry-box>|no-clip]#",
- "mask-composite": "<compositing-operator>#",
- "mask-image": "<mask-reference>#",
- "mask-mode": "<masking-mode>#",
- "mask-origin": "<geometry-box>#",
- "mask-position": "<position>#",
- "mask-repeat": "<repeat-style>#",
- "mask-size": "<bg-size>#",
- "mask-type": "luminance|alpha",
- "masonry-auto-flow": "[pack|next]||[definite-first|ordered]",
- "math-depth": "auto-add|add( <integer> )|<integer>",
- "math-shift": "normal|compact",
- "math-style": "normal|compact",
- "max-block-size": "<'max-width'>",
- "max-height": "none|<length-percentage>|min-content|max-content|fit-content|fit-content( <length-percentage> )",
- "max-inline-size": "<'max-width'>",
- "max-lines": "none|<integer>",
- "max-width": "none|<length-percentage>|min-content|max-content|fit-content|fit-content( <length-percentage> )|<-non-standard-width>",
- "min-block-size": "<'min-width'>",
- "min-height": "auto|<length>|<percentage>|min-content|max-content|fit-content|fit-content( <length-percentage> )",
- "min-inline-size": "<'min-width'>",
- "min-width": "auto|<length>|<percentage>|min-content|max-content|fit-content|fit-content( <length-percentage> )|<-non-standard-width>",
- "mix-blend-mode": "<blend-mode>|plus-lighter",
- "object-fit": "fill|contain|cover|none|scale-down",
- "object-position": "<position>",
- "offset": "[<'offset-position'>? [<'offset-path'> [<'offset-distance'>||<'offset-rotate'>]?]?]! [/ <'offset-anchor'>]?",
- "offset-anchor": "auto|<position>",
- "offset-distance": "<length-percentage>",
- "offset-path": "none|ray( [<angle>&&<size>&&contain?] )|<path()>|<url>|[<basic-shape>||<geometry-box>]",
- "offset-position": "auto|<position>",
- "offset-rotate": "[auto|reverse]||<angle>",
- "opacity": "<alpha-value>",
- "order": "<integer>",
- "orphans": "<integer>",
- "outline": "[<'outline-color'>||<'outline-style'>||<'outline-width'>]",
- "outline-color": "<color>|invert",
- "outline-offset": "<length>",
- "outline-style": "auto|<'border-style'>",
- "outline-width": "<line-width>",
- "overflow": "[visible|hidden|clip|scroll|auto]{1,2}|<-non-standard-overflow>",
- "overflow-anchor": "auto|none",
- "overflow-block": "visible|hidden|clip|scroll|auto",
- "overflow-clip-box": "padding-box|content-box",
- "overflow-clip-margin": "<visual-box>||<length [0,∞]>",
- "overflow-inline": "visible|hidden|clip|scroll|auto",
- "overflow-wrap": "normal|break-word|anywhere",
- "overflow-x": "visible|hidden|clip|scroll|auto",
- "overflow-y": "visible|hidden|clip|scroll|auto",
- "overscroll-behavior": "[contain|none|auto]{1,2}",
- "overscroll-behavior-block": "contain|none|auto",
- "overscroll-behavior-inline": "contain|none|auto",
- "overscroll-behavior-x": "contain|none|auto",
- "overscroll-behavior-y": "contain|none|auto",
- "padding": "[<length>|<percentage>]{1,4}",
- "padding-block": "<'padding-left'>{1,2}",
- "padding-block-end": "<'padding-left'>",
- "padding-block-start": "<'padding-left'>",
- "padding-bottom": "<length>|<percentage>",
- "padding-inline": "<'padding-left'>{1,2}",
- "padding-inline-end": "<'padding-left'>",
- "padding-inline-start": "<'padding-left'>",
- "padding-left": "<length>|<percentage>",
- "padding-right": "<length>|<percentage>",
- "padding-top": "<length>|<percentage>",
- "page-break-after": "auto|always|avoid|left|right|recto|verso",
- "page-break-before": "auto|always|avoid|left|right|recto|verso",
- "page-break-inside": "auto|avoid",
- "paint-order": "normal|[fill||stroke||markers]",
- "perspective": "none|<length>",
- "perspective-origin": "<position>",
- "place-content": "<'align-content'> <'justify-content'>?",
- "place-items": "<'align-items'> <'justify-items'>?",
- "place-self": "<'align-self'> <'justify-self'>?",
- "pointer-events": "auto|none|visiblePainted|visibleFill|visibleStroke|visible|painted|fill|stroke|all|inherit",
- "position": "static|relative|absolute|sticky|fixed|-webkit-sticky",
- "quotes": "none|auto|[<string> <string>]+",
- "resize": "none|both|horizontal|vertical|block|inline",
- "right": "<length>|<percentage>|auto",
- "rotate": "none|<angle>|[x|y|z|<number>{3}]&&<angle>",
- "row-gap": "normal|<length-percentage>",
- "ruby-align": "start|center|space-between|space-around",
- "ruby-merge": "separate|collapse|auto",
- "ruby-position": "[alternate||[over|under]]|inter-character",
- "scale": "none|<number>{1,3}",
- "scrollbar-color": "auto|<color>{2}",
- "scrollbar-gutter": "auto|stable&&both-edges?",
- "scrollbar-width": "auto|thin|none",
- "scroll-behavior": "auto|smooth",
- "scroll-margin": "<length>{1,4}",
- "scroll-margin-block": "<length>{1,2}",
- "scroll-margin-block-start": "<length>",
- "scroll-margin-block-end": "<length>",
- "scroll-margin-bottom": "<length>",
- "scroll-margin-inline": "<length>{1,2}",
- "scroll-margin-inline-start": "<length>",
- "scroll-margin-inline-end": "<length>",
- "scroll-margin-left": "<length>",
- "scroll-margin-right": "<length>",
- "scroll-margin-top": "<length>",
- "scroll-padding": "[auto|<length-percentage>]{1,4}",
- "scroll-padding-block": "[auto|<length-percentage>]{1,2}",
- "scroll-padding-block-start": "auto|<length-percentage>",
- "scroll-padding-block-end": "auto|<length-percentage>",
- "scroll-padding-bottom": "auto|<length-percentage>",
- "scroll-padding-inline": "[auto|<length-percentage>]{1,2}",
- "scroll-padding-inline-start": "auto|<length-percentage>",
- "scroll-padding-inline-end": "auto|<length-percentage>",
- "scroll-padding-left": "auto|<length-percentage>",
- "scroll-padding-right": "auto|<length-percentage>",
- "scroll-padding-top": "auto|<length-percentage>",
- "scroll-snap-align": "[none|start|end|center]{1,2}",
- "scroll-snap-coordinate": "none|<position>#",
- "scroll-snap-destination": "<position>",
- "scroll-snap-points-x": "none|repeat( <length-percentage> )",
- "scroll-snap-points-y": "none|repeat( <length-percentage> )",
- "scroll-snap-stop": "normal|always",
- "scroll-snap-type": "none|[x|y|block|inline|both] [mandatory|proximity]?",
- "scroll-snap-type-x": "none|mandatory|proximity",
- "scroll-snap-type-y": "none|mandatory|proximity",
- "scroll-timeline": "<scroll-timeline-name>||<scroll-timeline-axis>",
- "scroll-timeline-axis": "block|inline|vertical|horizontal",
- "scroll-timeline-name": "none|<custom-ident>",
- "shape-image-threshold": "<alpha-value>",
- "shape-margin": "<length-percentage>",
- "shape-outside": "none|[<shape-box>||<basic-shape>]|<image>",
- "tab-size": "<integer>|<length>",
- "table-layout": "auto|fixed",
- "text-align": "start|end|left|right|center|justify|match-parent",
- "text-align-last": "auto|start|end|left|right|center|justify",
- "text-combine-upright": "none|all|[digits <integer>?]",
- "text-decoration": "<'text-decoration-line'>||<'text-decoration-style'>||<'text-decoration-color'>||<'text-decoration-thickness'>",
- "text-decoration-color": "<color>",
- "text-decoration-line": "none|[underline||overline||line-through||blink]|spelling-error|grammar-error",
- "text-decoration-skip": "none|[objects||[spaces|[leading-spaces||trailing-spaces]]||edges||box-decoration]",
- "text-decoration-skip-ink": "auto|all|none",
- "text-decoration-style": "solid|double|dotted|dashed|wavy",
- "text-decoration-thickness": "auto|from-font|<length>|<percentage>",
- "text-emphasis": "<'text-emphasis-style'>||<'text-emphasis-color'>",
- "text-emphasis-color": "<color>",
- "text-emphasis-position": "[over|under]&&[right|left]",
- "text-emphasis-style": "none|[[filled|open]||[dot|circle|double-circle|triangle|sesame]]|<string>",
- "text-indent": "<length-percentage>&&hanging?&&each-line?",
- "text-justify": "auto|inter-character|inter-word|none",
- "text-orientation": "mixed|upright|sideways",
- "text-overflow": "[clip|ellipsis|<string>]{1,2}",
- "text-rendering": "auto|optimizeSpeed|optimizeLegibility|geometricPrecision",
- "text-shadow": "none|<shadow-t>#",
- "text-size-adjust": "none|auto|<percentage>",
- "text-transform": "none|capitalize|uppercase|lowercase|full-width|full-size-kana",
- "text-underline-offset": "auto|<length>|<percentage>",
- "text-underline-position": "auto|from-font|[under||[left|right]]",
- "top": "<length>|<percentage>|auto",
- "touch-action": "auto|none|[[pan-x|pan-left|pan-right]||[pan-y|pan-up|pan-down]||pinch-zoom]|manipulation",
- "transform": "none|<transform-list>",
- "transform-box": "content-box|border-box|fill-box|stroke-box|view-box",
- "transform-origin": "[<length-percentage>|left|center|right|top|bottom]|[[<length-percentage>|left|center|right]&&[<length-percentage>|top|center|bottom]] <length>?",
- "transform-style": "flat|preserve-3d",
- "transition": "<single-transition>#",
- "transition-delay": "<time>#",
- "transition-duration": "<time>#",
- "transition-property": "none|<single-transition-property>#",
- "transition-timing-function": "<easing-function>#",
- "translate": "none|<length-percentage> [<length-percentage> <length>?]?",
- "unicode-bidi": "normal|embed|isolate|bidi-override|isolate-override|plaintext|-moz-isolate|-moz-isolate-override|-moz-plaintext|-webkit-isolate|-webkit-isolate-override|-webkit-plaintext",
- "user-select": "auto|text|none|contain|all",
- "vertical-align": "baseline|sub|super|text-top|text-bottom|middle|top|bottom|<percentage>|<length>",
- "visibility": "visible|hidden|collapse",
- "white-space": "normal|pre|nowrap|pre-wrap|pre-line|break-spaces",
- "widows": "<integer>",
- "width": "auto|<length>|<percentage>|min-content|max-content|fit-content|fit-content( <length-percentage> )|fill|stretch|intrinsic|-moz-max-content|-webkit-max-content|-moz-fit-content|-webkit-fit-content",
- "will-change": "auto|<animateable-feature>#",
- "word-break": "normal|break-all|keep-all|break-word",
- "word-spacing": "normal|<length>",
- "word-wrap": "normal|break-word",
- "writing-mode": "horizontal-tb|vertical-rl|vertical-lr|sideways-rl|sideways-lr|<svg-writing-mode>",
- "z-index": "auto|<integer>",
- "zoom": "normal|reset|<number>|<percentage>",
- "-moz-background-clip": "padding|border",
- "-moz-border-radius-bottomleft": "<'border-bottom-left-radius'>",
- "-moz-border-radius-bottomright": "<'border-bottom-right-radius'>",
- "-moz-border-radius-topleft": "<'border-top-left-radius'>",
- "-moz-border-radius-topright": "<'border-bottom-right-radius'>",
- "-moz-control-character-visibility": "visible|hidden",
- "-moz-osx-font-smoothing": "auto|grayscale",
- "-moz-user-select": "none|text|all|-moz-none",
- "-ms-flex-align": "start|end|center|baseline|stretch",
- "-ms-flex-item-align": "auto|start|end|center|baseline|stretch",
- "-ms-flex-line-pack": "start|end|center|justify|distribute|stretch",
- "-ms-flex-negative": "<'flex-shrink'>",
- "-ms-flex-pack": "start|end|center|justify|distribute",
- "-ms-flex-order": "<integer>",
- "-ms-flex-positive": "<'flex-grow'>",
- "-ms-flex-preferred-size": "<'flex-basis'>",
- "-ms-interpolation-mode": "nearest-neighbor|bicubic",
- "-ms-grid-column-align": "start|end|center|stretch",
- "-ms-grid-row-align": "start|end|center|stretch",
- "-ms-hyphenate-limit-last": "none|always|column|page|spread",
- "-webkit-background-clip": "[<box>|border|padding|content|text]#",
- "-webkit-column-break-after": "always|auto|avoid",
- "-webkit-column-break-before": "always|auto|avoid",
- "-webkit-column-break-inside": "always|auto|avoid",
- "-webkit-font-smoothing": "auto|none|antialiased|subpixel-antialiased",
- "-webkit-mask-box-image": "[<url>|<gradient>|none] [<length-percentage>{4} <-webkit-mask-box-repeat>{2}]?",
- "-webkit-print-color-adjust": "economy|exact",
- "-webkit-text-security": "none|circle|disc|square",
- "-webkit-user-drag": "none|element|auto",
- "-webkit-user-select": "auto|none|text|all",
- "alignment-baseline": "auto|baseline|before-edge|text-before-edge|middle|central|after-edge|text-after-edge|ideographic|alphabetic|hanging|mathematical",
- "baseline-shift": "baseline|sub|super|<svg-length>",
- "behavior": "<url>+",
- "clip-rule": "nonzero|evenodd",
- "cue": "<'cue-before'> <'cue-after'>?",
- "cue-after": "<url> <decibel>?|none",
- "cue-before": "<url> <decibel>?|none",
- "dominant-baseline": "auto|use-script|no-change|reset-size|ideographic|alphabetic|hanging|mathematical|central|middle|text-after-edge|text-before-edge",
- "fill": "<paint>",
- "fill-opacity": "<number-zero-one>",
- "fill-rule": "nonzero|evenodd",
- "glyph-orientation-horizontal": "<angle>",
- "glyph-orientation-vertical": "<angle>",
- "kerning": "auto|<svg-length>",
- "marker": "none|<url>",
- "marker-end": "none|<url>",
- "marker-mid": "none|<url>",
- "marker-start": "none|<url>",
- "pause": "<'pause-before'> <'pause-after'>?",
- "pause-after": "<time>|none|x-weak|weak|medium|strong|x-strong",
- "pause-before": "<time>|none|x-weak|weak|medium|strong|x-strong",
- "rest": "<'rest-before'> <'rest-after'>?",
- "rest-after": "<time>|none|x-weak|weak|medium|strong|x-strong",
- "rest-before": "<time>|none|x-weak|weak|medium|strong|x-strong",
- "shape-rendering": "auto|optimizeSpeed|crispEdges|geometricPrecision",
- "src": "[<url> [format( <string># )]?|local( <family-name> )]#",
- "speak": "auto|none|normal",
- "speak-as": "normal|spell-out||digits||[literal-punctuation|no-punctuation]",
- "stroke": "<paint>",
- "stroke-dasharray": "none|[<svg-length>+]#",
- "stroke-dashoffset": "<svg-length>",
- "stroke-linecap": "butt|round|square",
- "stroke-linejoin": "miter|round|bevel",
- "stroke-miterlimit": "<number-one-or-greater>",
- "stroke-opacity": "<number-zero-one>",
- "stroke-width": "<svg-length>",
- "text-anchor": "start|middle|end",
- "unicode-range": "<urange>#",
- "voice-balance": "<number>|left|center|right|leftwards|rightwards",
- "voice-duration": "auto|<time>",
- "voice-family": "[[<family-name>|<generic-voice>] ,]* [<family-name>|<generic-voice>]|preserve",
- "voice-pitch": "<frequency>&&absolute|[[x-low|low|medium|high|x-high]||[<frequency>|<semitones>|<percentage>]]",
- "voice-range": "<frequency>&&absolute|[[x-low|low|medium|high|x-high]||[<frequency>|<semitones>|<percentage>]]",
- "voice-rate": "[normal|x-slow|slow|medium|fast|x-fast]||<percentage>",
- "voice-stress": "normal|strong|moderate|none|reduced",
- "voice-volume": "silent|[[x-soft|soft|medium|loud|x-loud]||<decibel>]"
- },
- "atrules": {
- "charset": {
- "prelude": "<string>",
- "descriptors": null
- },
- "counter-style": {
- "prelude": "<counter-style-name>",
- "descriptors": {
- "additive-symbols": "[<integer>&&<symbol>]#",
- "fallback": "<counter-style-name>",
- "negative": "<symbol> <symbol>?",
- "pad": "<integer>&&<symbol>",
- "prefix": "<symbol>",
- "range": "[[<integer>|infinite]{2}]#|auto",
- "speak-as": "auto|bullets|numbers|words|spell-out|<counter-style-name>",
- "suffix": "<symbol>",
- "symbols": "<symbol>+",
- "system": "cyclic|numeric|alphabetic|symbolic|additive|[fixed <integer>?]|[extends <counter-style-name>]"
- }
- },
- "document": {
- "prelude": "[<url>|url-prefix( <string> )|domain( <string> )|media-document( <string> )|regexp( <string> )]#",
- "descriptors": null
- },
- "font-face": {
- "prelude": null,
- "descriptors": {
- "ascent-override": "normal|<percentage>",
- "descent-override": "normal|<percentage>",
- "font-display": "[auto|block|swap|fallback|optional]",
- "font-family": "<family-name>",
- "font-feature-settings": "normal|<feature-tag-value>#",
- "font-variation-settings": "normal|[<string> <number>]#",
- "font-stretch": "<font-stretch-absolute>{1,2}",
- "font-style": "normal|italic|oblique <angle>{0,2}",
- "font-weight": "<font-weight-absolute>{1,2}",
- "font-variant": "normal|none|[<common-lig-values>||<discretionary-lig-values>||<historical-lig-values>||<contextual-alt-values>||stylistic( <feature-value-name> )||historical-forms||styleset( <feature-value-name># )||character-variant( <feature-value-name># )||swash( <feature-value-name> )||ornaments( <feature-value-name> )||annotation( <feature-value-name> )||[small-caps|all-small-caps|petite-caps|all-petite-caps|unicase|titling-caps]||<numeric-figure-values>||<numeric-spacing-values>||<numeric-fraction-values>||ordinal||slashed-zero||<east-asian-variant-values>||<east-asian-width-values>||ruby]",
- "line-gap-override": "normal|<percentage>",
- "size-adjust": "<percentage>",
- "src": "[<url> [format( <string># )]?|local( <family-name> )]#",
- "unicode-range": "<urange>#"
- }
- },
- "font-feature-values": {
- "prelude": "<family-name>#",
- "descriptors": null
- },
- "import": {
- "prelude": "[<string>|<url>] [layer|layer( <layer-name> )]? [supports( [<supports-condition>|<declaration>] )]? <media-query-list>?",
- "descriptors": null
- },
- "keyframes": {
- "prelude": "<keyframes-name>",
- "descriptors": null
- },
- "layer": {
- "prelude": "[<layer-name>#|<layer-name>?]",
- "descriptors": null
- },
- "media": {
- "prelude": "<media-query-list>",
- "descriptors": null
- },
- "namespace": {
- "prelude": "<namespace-prefix>? [<string>|<url>]",
- "descriptors": null
- },
- "page": {
- "prelude": "<page-selector-list>",
- "descriptors": {
- "bleed": "auto|<length>",
- "marks": "none|[crop||cross]",
- "size": "<length>{1,2}|auto|[<page-size>||[portrait|landscape]]"
- }
- },
- "property": {
- "prelude": "<custom-property-name>",
- "descriptors": {
- "syntax": "<string>",
- "inherits": "true|false",
- "initial-value": "<string>"
- }
- },
- "scroll-timeline": {
- "prelude": "<timeline-name>",
- "descriptors": null
- },
- "supports": {
- "prelude": "<supports-condition>",
- "descriptors": null
- },
- "viewport": {
- "prelude": null,
- "descriptors": {
- "height": "<viewport-length>{1,2}",
- "max-height": "<viewport-length>",
- "max-width": "<viewport-length>",
- "max-zoom": "auto|<number>|<percentage>",
- "min-height": "<viewport-length>",
- "min-width": "<viewport-length>",
- "min-zoom": "auto|<number>|<percentage>",
- "orientation": "auto|portrait|landscape",
- "user-zoom": "zoom|fixed",
- "viewport-fit": "auto|contain|cover",
- "width": "<viewport-length>{1,2}",
- "zoom": "auto|<number>|<percentage>"
- }
- },
- "nest": {
- "prelude": "<complex-selector-list>",
- "descriptors": null
- }
- }
-}; \ No newline at end of file
diff --git a/node_modules/css-tree/dist/version.cjs b/node_modules/css-tree/dist/version.cjs
deleted file mode 100644
index 79529a87..00000000
--- a/node_modules/css-tree/dist/version.cjs
+++ /dev/null
@@ -1 +0,0 @@
-module.exports = "2.3.1"; \ No newline at end of file
diff --git a/node_modules/css-tree/dist/version.js b/node_modules/css-tree/dist/version.js
deleted file mode 100644
index 6d1a9eb2..00000000
--- a/node_modules/css-tree/dist/version.js
+++ /dev/null
@@ -1 +0,0 @@
-export const version = "2.3.1"; \ No newline at end of file
diff --git a/node_modules/css-tree/lib/convertor/create.js b/node_modules/css-tree/lib/convertor/create.js
deleted file mode 100644
index 56e43338..00000000
--- a/node_modules/css-tree/lib/convertor/create.js
+++ /dev/null
@@ -1,28 +0,0 @@
-import { List } from '../utils/List.js';
-
-export function createConvertor(walk) {
- return {
- fromPlainObject(ast) {
- walk(ast, {
- enter(node) {
- if (node.children && node.children instanceof List === false) {
- node.children = new List().fromArray(node.children);
- }
- }
- });
-
- return ast;
- },
- toPlainObject(ast) {
- walk(ast, {
- leave(node) {
- if (node.children && node.children instanceof List) {
- node.children = node.children.toArray();
- }
- }
- });
-
- return ast;
- }
- };
-};
diff --git a/node_modules/css-tree/lib/convertor/index.js b/node_modules/css-tree/lib/convertor/index.js
deleted file mode 100644
index 0f8d4afd..00000000
--- a/node_modules/css-tree/lib/convertor/index.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import { createConvertor } from './create.js';
-import walker from '../walker/index.js';
-
-export default createConvertor(walker);
diff --git a/node_modules/css-tree/lib/data-patch.js b/node_modules/css-tree/lib/data-patch.js
deleted file mode 100644
index cd49cbec..00000000
--- a/node_modules/css-tree/lib/data-patch.js
+++ /dev/null
@@ -1,6 +0,0 @@
-import { createRequire } from 'module';
-
-const require = createRequire(import.meta.url);
-const patch = require('../data/patch.json');
-
-export default patch;
diff --git a/node_modules/css-tree/lib/data.js b/node_modules/css-tree/lib/data.js
deleted file mode 100755
index 756e19a2..00000000
--- a/node_modules/css-tree/lib/data.js
+++ /dev/null
@@ -1,97 +0,0 @@
-import { createRequire } from 'module';
-import patch from './data-patch.js';
-
-const require = createRequire(import.meta.url);
-const mdnAtrules = require('mdn-data/css/at-rules.json');
-const mdnProperties = require('mdn-data/css/properties.json');
-const mdnSyntaxes = require('mdn-data/css/syntaxes.json');
-
-const extendSyntax = /^\s*\|\s*/;
-
-function preprocessAtrules(dict) {
- const result = Object.create(null);
-
- for (const atruleName in dict) {
- const atrule = dict[atruleName];
- let descriptors = null;
-
- if (atrule.descriptors) {
- descriptors = Object.create(null);
-
- for (const descriptor in atrule.descriptors) {
- descriptors[descriptor] = atrule.descriptors[descriptor].syntax;
- }
- }
-
- result[atruleName.substr(1)] = {
- prelude: atrule.syntax.trim().replace(/\{(.|\s)+\}/, '').match(/^@\S+\s+([^;\{]*)/)[1].trim() || null,
- descriptors
- };
- }
-
- return result;
-}
-
-function patchDictionary(dict, patchDict) {
- const result = {};
-
- // copy all syntaxes for an original dict
- for (const key in dict) {
- result[key] = dict[key].syntax || dict[key];
- }
-
- // apply a patch
- for (const key in patchDict) {
- if (key in dict) {
- if (patchDict[key].syntax) {
- result[key] = extendSyntax.test(patchDict[key].syntax)
- ? result[key] + ' ' + patchDict[key].syntax.trim()
- : patchDict[key].syntax;
- } else {
- delete result[key];
- }
- } else {
- if (patchDict[key].syntax) {
- result[key] = patchDict[key].syntax.replace(extendSyntax, '');
- }
- }
- }
-
- return result;
-}
-
-function patchAtrules(dict, patchDict) {
- const result = {};
-
- // copy all syntaxes for an original dict
- for (const key in dict) {
- const atrulePatch = patchDict[key] || {};
-
- result[key] = {
- prelude: key in patchDict && 'prelude' in atrulePatch
- ? atrulePatch.prelude
- : dict[key].prelude || null,
- descriptors: patchDictionary(dict[key].descriptors || {}, atrulePatch.descriptors || {})
- };
- }
-
- // apply a patch
- for (const key in patchDict) {
- if (!hasOwnProperty.call(dict, key)) {
- const atrulePatch = patchDict[key] || {};
-
- result[key] = {
- prelude: atrulePatch.prelude || null,
- descriptors: atrulePatch.descriptors && patchDictionary({}, atrulePatch.descriptors)
- };
- }
- }
-
- return result;
-}
-
-export default {
- types: patchDictionary(mdnSyntaxes, patch.types),
- atrules: patchAtrules(preprocessAtrules(mdnAtrules), patch.atrules),
- properties: patchDictionary(mdnProperties, patch.properties)
-};
diff --git a/node_modules/css-tree/lib/definition-syntax/SyntaxError.js b/node_modules/css-tree/lib/definition-syntax/SyntaxError.js
deleted file mode 100644
index 5f631387..00000000
--- a/node_modules/css-tree/lib/definition-syntax/SyntaxError.js
+++ /dev/null
@@ -1,12 +0,0 @@
-import { createCustomError } from '../utils/create-custom-error.js';
-
-export function SyntaxError(message, input, offset) {
- return Object.assign(createCustomError('SyntaxError', message), {
- input,
- offset,
- rawMessage: message,
- message: message + '\n' +
- ' ' + input + '\n' +
- '--' + new Array((offset || input.length) + 1).join('-') + '^'
- });
-};
diff --git a/node_modules/css-tree/lib/definition-syntax/generate.js b/node_modules/css-tree/lib/definition-syntax/generate.js
deleted file mode 100644
index 3d6c277f..00000000
--- a/node_modules/css-tree/lib/definition-syntax/generate.js
+++ /dev/null
@@ -1,131 +0,0 @@
-function noop(value) {
- return value;
-}
-
-function generateMultiplier(multiplier) {
- const { min, max, comma } = multiplier;
-
- if (min === 0 && max === 0) {
- return comma ? '#?' : '*';
- }
-
- if (min === 0 && max === 1) {
- return '?';
- }
-
- if (min === 1 && max === 0) {
- return comma ? '#' : '+';
- }
-
- if (min === 1 && max === 1) {
- return '';
- }
-
- return (
- (comma ? '#' : '') +
- (min === max
- ? '{' + min + '}'
- : '{' + min + ',' + (max !== 0 ? max : '') + '}'
- )
- );
-}
-
-function generateTypeOpts(node) {
- switch (node.type) {
- case 'Range':
- return (
- ' [' +
- (node.min === null ? '-∞' : node.min) +
- ',' +
- (node.max === null ? '∞' : node.max) +
- ']'
- );
-
- default:
- throw new Error('Unknown node type `' + node.type + '`');
- }
-}
-
-function generateSequence(node, decorate, forceBraces, compact) {
- const combinator = node.combinator === ' ' || compact ? node.combinator : ' ' + node.combinator + ' ';
- const result = node.terms
- .map(term => internalGenerate(term, decorate, forceBraces, compact))
- .join(combinator);
-
- if (node.explicit || forceBraces) {
- return (compact || result[0] === ',' ? '[' : '[ ') + result + (compact ? ']' : ' ]');
- }
-
- return result;
-}
-
-function internalGenerate(node, decorate, forceBraces, compact) {
- let result;
-
- switch (node.type) {
- case 'Group':
- result =
- generateSequence(node, decorate, forceBraces, compact) +
- (node.disallowEmpty ? '!' : '');
- break;
-
- case 'Multiplier':
- // return since node is a composition
- return (
- internalGenerate(node.term, decorate, forceBraces, compact) +
- decorate(generateMultiplier(node), node)
- );
-
- case 'Type':
- result = '<' + node.name + (node.opts ? decorate(generateTypeOpts(node.opts), node.opts) : '') + '>';
- break;
-
- case 'Property':
- result = '<\'' + node.name + '\'>';
- break;
-
- case 'Keyword':
- result = node.name;
- break;
-
- case 'AtKeyword':
- result = '@' + node.name;
- break;
-
- case 'Function':
- result = node.name + '(';
- break;
-
- case 'String':
- case 'Token':
- result = node.value;
- break;
-
- case 'Comma':
- result = ',';
- break;
-
- default:
- throw new Error('Unknown node type `' + node.type + '`');
- }
-
- return decorate(result, node);
-}
-
-export function generate(node, options) {
- let decorate = noop;
- let forceBraces = false;
- let compact = false;
-
- if (typeof options === 'function') {
- decorate = options;
- } else if (options) {
- forceBraces = Boolean(options.forceBraces);
- compact = Boolean(options.compact);
- if (typeof options.decorate === 'function') {
- decorate = options.decorate;
- }
- }
-
- return internalGenerate(node, decorate, forceBraces, compact);
-};
diff --git a/node_modules/css-tree/lib/definition-syntax/index.js b/node_modules/css-tree/lib/definition-syntax/index.js
deleted file mode 100644
index 0c24dbd8..00000000
--- a/node_modules/css-tree/lib/definition-syntax/index.js
+++ /dev/null
@@ -1,4 +0,0 @@
-export { SyntaxError } from './SyntaxError.js';
-export { generate } from './generate.js';
-export { parse } from './parse.js';
-export { walk } from './walk.js';
diff --git a/node_modules/css-tree/lib/definition-syntax/parse.js b/node_modules/css-tree/lib/definition-syntax/parse.js
deleted file mode 100644
index a3b4b73e..00000000
--- a/node_modules/css-tree/lib/definition-syntax/parse.js
+++ /dev/null
@@ -1,584 +0,0 @@
-import { Tokenizer } from './tokenizer.js';
-
-const TAB = 9;
-const N = 10;
-const F = 12;
-const R = 13;
-const SPACE = 32;
-const EXCLAMATIONMARK = 33; // !
-const NUMBERSIGN = 35; // #
-const AMPERSAND = 38; // &
-const APOSTROPHE = 39; // '
-const LEFTPARENTHESIS = 40; // (
-const RIGHTPARENTHESIS = 41; // )
-const ASTERISK = 42; // *
-const PLUSSIGN = 43; // +
-const COMMA = 44; // ,
-const HYPERMINUS = 45; // -
-const LESSTHANSIGN = 60; // <
-const GREATERTHANSIGN = 62; // >
-const QUESTIONMARK = 63; // ?
-const COMMERCIALAT = 64; // @
-const LEFTSQUAREBRACKET = 91; // [
-const RIGHTSQUAREBRACKET = 93; // ]
-const LEFTCURLYBRACKET = 123; // {
-const VERTICALLINE = 124; // |
-const RIGHTCURLYBRACKET = 125; // }
-const INFINITY = 8734; // ∞
-const NAME_CHAR = new Uint8Array(128).map((_, idx) =>
- /[a-zA-Z0-9\-]/.test(String.fromCharCode(idx)) ? 1 : 0
-);
-const COMBINATOR_PRECEDENCE = {
- ' ': 1,
- '&&': 2,
- '||': 3,
- '|': 4
-};
-
-function scanSpaces(tokenizer) {
- return tokenizer.substringToPos(
- tokenizer.findWsEnd(tokenizer.pos)
- );
-}
-
-function scanWord(tokenizer) {
- let end = tokenizer.pos;
-
- for (; end < tokenizer.str.length; end++) {
- const code = tokenizer.str.charCodeAt(end);
- if (code >= 128 || NAME_CHAR[code] === 0) {
- break;
- }
- }
-
- if (tokenizer.pos === end) {
- tokenizer.error('Expect a keyword');
- }
-
- return tokenizer.substringToPos(end);
-}
-
-function scanNumber(tokenizer) {
- let end = tokenizer.pos;
-
- for (; end < tokenizer.str.length; end++) {
- const code = tokenizer.str.charCodeAt(end);
- if (code < 48 || code > 57) {
- break;
- }
- }
-
- if (tokenizer.pos === end) {
- tokenizer.error('Expect a number');
- }
-
- return tokenizer.substringToPos(end);
-}
-
-function scanString(tokenizer) {
- const end = tokenizer.str.indexOf('\'', tokenizer.pos + 1);
-
- if (end === -1) {
- tokenizer.pos = tokenizer.str.length;
- tokenizer.error('Expect an apostrophe');
- }
-
- return tokenizer.substringToPos(end + 1);
-}
-
-function readMultiplierRange(tokenizer) {
- let min = null;
- let max = null;
-
- tokenizer.eat(LEFTCURLYBRACKET);
-
- min = scanNumber(tokenizer);
-
- if (tokenizer.charCode() === COMMA) {
- tokenizer.pos++;
- if (tokenizer.charCode() !== RIGHTCURLYBRACKET) {
- max = scanNumber(tokenizer);
- }
- } else {
- max = min;
- }
-
- tokenizer.eat(RIGHTCURLYBRACKET);
-
- return {
- min: Number(min),
- max: max ? Number(max) : 0
- };
-}
-
-function readMultiplier(tokenizer) {
- let range = null;
- let comma = false;
-
- switch (tokenizer.charCode()) {
- case ASTERISK:
- tokenizer.pos++;
-
- range = {
- min: 0,
- max: 0
- };
-
- break;
-
- case PLUSSIGN:
- tokenizer.pos++;
-
- range = {
- min: 1,
- max: 0
- };
-
- break;
-
- case QUESTIONMARK:
- tokenizer.pos++;
-
- range = {
- min: 0,
- max: 1
- };
-
- break;
-
- case NUMBERSIGN:
- tokenizer.pos++;
-
- comma = true;
-
- if (tokenizer.charCode() === LEFTCURLYBRACKET) {
- range = readMultiplierRange(tokenizer);
- } else if (tokenizer.charCode() === QUESTIONMARK) {
- // https://www.w3.org/TR/css-values-4/#component-multipliers
- // > the # and ? multipliers may be stacked as #?
- // In this case just treat "#?" as a single multiplier
- // { min: 0, max: 0, comma: true }
- tokenizer.pos++;
- range = {
- min: 0,
- max: 0
- };
- } else {
- range = {
- min: 1,
- max: 0
- };
- }
-
- break;
-
- case LEFTCURLYBRACKET:
- range = readMultiplierRange(tokenizer);
- break;
-
- default:
- return null;
- }
-
- return {
- type: 'Multiplier',
- comma,
- min: range.min,
- max: range.max,
- term: null
- };
-}
-
-function maybeMultiplied(tokenizer, node) {
- const multiplier = readMultiplier(tokenizer);
-
- if (multiplier !== null) {
- multiplier.term = node;
-
- // https://www.w3.org/TR/css-values-4/#component-multipliers
- // > The + and # multipliers may be stacked as +#;
- // Represent "+#" as nested multipliers:
- // { ...<multiplier #>,
- // term: {
- // ...<multipler +>,
- // term: node
- // }
- // }
- if (tokenizer.charCode() === NUMBERSIGN &&
- tokenizer.charCodeAt(tokenizer.pos - 1) === PLUSSIGN) {
- return maybeMultiplied(tokenizer, multiplier);
- }
-
- return multiplier;
- }
-
- return node;
-}
-
-function maybeToken(tokenizer) {
- const ch = tokenizer.peek();
-
- if (ch === '') {
- return null;
- }
-
- return {
- type: 'Token',
- value: ch
- };
-}
-
-function readProperty(tokenizer) {
- let name;
-
- tokenizer.eat(LESSTHANSIGN);
- tokenizer.eat(APOSTROPHE);
-
- name = scanWord(tokenizer);
-
- tokenizer.eat(APOSTROPHE);
- tokenizer.eat(GREATERTHANSIGN);
-
- return maybeMultiplied(tokenizer, {
- type: 'Property',
- name
- });
-}
-
-// https://drafts.csswg.org/css-values-3/#numeric-ranges
-// 4.1. Range Restrictions and Range Definition Notation
-//
-// Range restrictions can be annotated in the numeric type notation using CSS bracketed
-// range notation—[min,max]—within the angle brackets, after the identifying keyword,
-// indicating a closed range between (and including) min and max.
-// For example, <integer [0, 10]> indicates an integer between 0 and 10, inclusive.
-function readTypeRange(tokenizer) {
- // use null for Infinity to make AST format JSON serializable/deserializable
- let min = null; // -Infinity
- let max = null; // Infinity
- let sign = 1;
-
- tokenizer.eat(LEFTSQUAREBRACKET);
-
- if (tokenizer.charCode() === HYPERMINUS) {
- tokenizer.peek();
- sign = -1;
- }
-
- if (sign == -1 && tokenizer.charCode() === INFINITY) {
- tokenizer.peek();
- } else {
- min = sign * Number(scanNumber(tokenizer));
-
- if (NAME_CHAR[tokenizer.charCode()] !== 0) {
- min += scanWord(tokenizer);
- }
- }
-
- scanSpaces(tokenizer);
- tokenizer.eat(COMMA);
- scanSpaces(tokenizer);
-
- if (tokenizer.charCode() === INFINITY) {
- tokenizer.peek();
- } else {
- sign = 1;
-
- if (tokenizer.charCode() === HYPERMINUS) {
- tokenizer.peek();
- sign = -1;
- }
-
- max = sign * Number(scanNumber(tokenizer));
-
- if (NAME_CHAR[tokenizer.charCode()] !== 0) {
- max += scanWord(tokenizer);
- }
- }
-
- tokenizer.eat(RIGHTSQUAREBRACKET);
-
- return {
- type: 'Range',
- min,
- max
- };
-}
-
-function readType(tokenizer) {
- let name;
- let opts = null;
-
- tokenizer.eat(LESSTHANSIGN);
- name = scanWord(tokenizer);
-
- if (tokenizer.charCode() === LEFTPARENTHESIS &&
- tokenizer.nextCharCode() === RIGHTPARENTHESIS) {
- tokenizer.pos += 2;
- name += '()';
- }
-
- if (tokenizer.charCodeAt(tokenizer.findWsEnd(tokenizer.pos)) === LEFTSQUAREBRACKET) {
- scanSpaces(tokenizer);
- opts = readTypeRange(tokenizer);
- }
-
- tokenizer.eat(GREATERTHANSIGN);
-
- return maybeMultiplied(tokenizer, {
- type: 'Type',
- name,
- opts
- });
-}
-
-function readKeywordOrFunction(tokenizer) {
- const name = scanWord(tokenizer);
-
- if (tokenizer.charCode() === LEFTPARENTHESIS) {
- tokenizer.pos++;
-
- return {
- type: 'Function',
- name
- };
- }
-
- return maybeMultiplied(tokenizer, {
- type: 'Keyword',
- name
- });
-}
-
-function regroupTerms(terms, combinators) {
- function createGroup(terms, combinator) {
- return {
- type: 'Group',
- terms,
- combinator,
- disallowEmpty: false,
- explicit: false
- };
- }
-
- let combinator;
-
- combinators = Object.keys(combinators)
- .sort((a, b) => COMBINATOR_PRECEDENCE[a] - COMBINATOR_PRECEDENCE[b]);
-
- while (combinators.length > 0) {
- combinator = combinators.shift();
-
- let i = 0;
- let subgroupStart = 0;
-
- for (; i < terms.length; i++) {
- const term = terms[i];
-
- if (term.type === 'Combinator') {
- if (term.value === combinator) {
- if (subgroupStart === -1) {
- subgroupStart = i - 1;
- }
- terms.splice(i, 1);
- i--;
- } else {
- if (subgroupStart !== -1 && i - subgroupStart > 1) {
- terms.splice(
- subgroupStart,
- i - subgroupStart,
- createGroup(terms.slice(subgroupStart, i), combinator)
- );
- i = subgroupStart + 1;
- }
- subgroupStart = -1;
- }
- }
- }
-
- if (subgroupStart !== -1 && combinators.length) {
- terms.splice(
- subgroupStart,
- i - subgroupStart,
- createGroup(terms.slice(subgroupStart, i), combinator)
- );
- }
- }
-
- return combinator;
-}
-
-function readImplicitGroup(tokenizer) {
- const terms = [];
- const combinators = {};
- let token;
- let prevToken = null;
- let prevTokenPos = tokenizer.pos;
-
- while (token = peek(tokenizer)) {
- if (token.type !== 'Spaces') {
- if (token.type === 'Combinator') {
- // check for combinator in group beginning and double combinator sequence
- if (prevToken === null || prevToken.type === 'Combinator') {
- tokenizer.pos = prevTokenPos;
- tokenizer.error('Unexpected combinator');
- }
-
- combinators[token.value] = true;
- } else if (prevToken !== null && prevToken.type !== 'Combinator') {
- combinators[' '] = true; // a b
- terms.push({
- type: 'Combinator',
- value: ' '
- });
- }
-
- terms.push(token);
- prevToken = token;
- prevTokenPos = tokenizer.pos;
- }
- }
-
- // check for combinator in group ending
- if (prevToken !== null && prevToken.type === 'Combinator') {
- tokenizer.pos -= prevTokenPos;
- tokenizer.error('Unexpected combinator');
- }
-
- return {
- type: 'Group',
- terms,
- combinator: regroupTerms(terms, combinators) || ' ',
- disallowEmpty: false,
- explicit: false
- };
-}
-
-function readGroup(tokenizer) {
- let result;
-
- tokenizer.eat(LEFTSQUAREBRACKET);
- result = readImplicitGroup(tokenizer);
- tokenizer.eat(RIGHTSQUAREBRACKET);
-
- result.explicit = true;
-
- if (tokenizer.charCode() === EXCLAMATIONMARK) {
- tokenizer.pos++;
- result.disallowEmpty = true;
- }
-
- return result;
-}
-
-function peek(tokenizer) {
- let code = tokenizer.charCode();
-
- if (code < 128 && NAME_CHAR[code] === 1) {
- return readKeywordOrFunction(tokenizer);
- }
-
- switch (code) {
- case RIGHTSQUAREBRACKET:
- // don't eat, stop scan a group
- break;
-
- case LEFTSQUAREBRACKET:
- return maybeMultiplied(tokenizer, readGroup(tokenizer));
-
- case LESSTHANSIGN:
- return tokenizer.nextCharCode() === APOSTROPHE
- ? readProperty(tokenizer)
- : readType(tokenizer);
-
- case VERTICALLINE:
- return {
- type: 'Combinator',
- value: tokenizer.substringToPos(
- tokenizer.pos + (tokenizer.nextCharCode() === VERTICALLINE ? 2 : 1)
- )
- };
-
- case AMPERSAND:
- tokenizer.pos++;
- tokenizer.eat(AMPERSAND);
-
- return {
- type: 'Combinator',
- value: '&&'
- };
-
- case COMMA:
- tokenizer.pos++;
- return {
- type: 'Comma'
- };
-
- case APOSTROPHE:
- return maybeMultiplied(tokenizer, {
- type: 'String',
- value: scanString(tokenizer)
- });
-
- case SPACE:
- case TAB:
- case N:
- case R:
- case F:
- return {
- type: 'Spaces',
- value: scanSpaces(tokenizer)
- };
-
- case COMMERCIALAT:
- code = tokenizer.nextCharCode();
-
- if (code < 128 && NAME_CHAR[code] === 1) {
- tokenizer.pos++;
- return {
- type: 'AtKeyword',
- name: scanWord(tokenizer)
- };
- }
-
- return maybeToken(tokenizer);
-
- case ASTERISK:
- case PLUSSIGN:
- case QUESTIONMARK:
- case NUMBERSIGN:
- case EXCLAMATIONMARK:
- // prohibited tokens (used as a multiplier start)
- break;
-
- case LEFTCURLYBRACKET:
- // LEFTCURLYBRACKET is allowed since mdn/data uses it w/o quoting
- // check next char isn't a number, because it's likely a disjoined multiplier
- code = tokenizer.nextCharCode();
-
- if (code < 48 || code > 57) {
- return maybeToken(tokenizer);
- }
-
- break;
-
- default:
- return maybeToken(tokenizer);
- }
-}
-
-export function parse(source) {
- const tokenizer = new Tokenizer(source);
- const result = readImplicitGroup(tokenizer);
-
- if (tokenizer.pos !== source.length) {
- tokenizer.error('Unexpected input');
- }
-
- // reduce redundant groups with single group term
- if (result.terms.length === 1 && result.terms[0].type === 'Group') {
- return result.terms[0];
- }
-
- return result;
-};
diff --git a/node_modules/css-tree/lib/definition-syntax/tokenizer.js b/node_modules/css-tree/lib/definition-syntax/tokenizer.js
deleted file mode 100644
index 8c392627..00000000
--- a/node_modules/css-tree/lib/definition-syntax/tokenizer.js
+++ /dev/null
@@ -1,52 +0,0 @@
-import { SyntaxError } from './SyntaxError.js';
-
-const TAB = 9;
-const N = 10;
-const F = 12;
-const R = 13;
-const SPACE = 32;
-
-export class Tokenizer {
- constructor(str) {
- this.str = str;
- this.pos = 0;
- }
- charCodeAt(pos) {
- return pos < this.str.length ? this.str.charCodeAt(pos) : 0;
- }
- charCode() {
- return this.charCodeAt(this.pos);
- }
- nextCharCode() {
- return this.charCodeAt(this.pos + 1);
- }
- nextNonWsCode(pos) {
- return this.charCodeAt(this.findWsEnd(pos));
- }
- findWsEnd(pos) {
- for (; pos < this.str.length; pos++) {
- const code = this.str.charCodeAt(pos);
- if (code !== R && code !== N && code !== F && code !== SPACE && code !== TAB) {
- break;
- }
- }
-
- return pos;
- }
- substringToPos(end) {
- return this.str.substring(this.pos, this.pos = end);
- }
- eat(code) {
- if (this.charCode() !== code) {
- this.error('Expect `' + String.fromCharCode(code) + '`');
- }
-
- this.pos++;
- }
- peek() {
- return this.pos < this.str.length ? this.str.charAt(this.pos++) : '';
- }
- error(message) {
- throw new SyntaxError(message, this.str, this.pos);
- }
-};
diff --git a/node_modules/css-tree/lib/definition-syntax/walk.js b/node_modules/css-tree/lib/definition-syntax/walk.js
deleted file mode 100644
index f54e9cae..00000000
--- a/node_modules/css-tree/lib/definition-syntax/walk.js
+++ /dev/null
@@ -1,52 +0,0 @@
-const noop = function() {};
-
-function ensureFunction(value) {
- return typeof value === 'function' ? value : noop;
-}
-
-export function walk(node, options, context) {
- function walk(node) {
- enter.call(context, node);
-
- switch (node.type) {
- case 'Group':
- node.terms.forEach(walk);
- break;
-
- case 'Multiplier':
- walk(node.term);
- break;
-
- case 'Type':
- case 'Property':
- case 'Keyword':
- case 'AtKeyword':
- case 'Function':
- case 'String':
- case 'Token':
- case 'Comma':
- break;
-
- default:
- throw new Error('Unknown type: ' + node.type);
- }
-
- leave.call(context, node);
- }
-
- let enter = noop;
- let leave = noop;
-
- if (typeof options === 'function') {
- enter = options;
- } else if (options) {
- enter = ensureFunction(options.enter);
- leave = ensureFunction(options.leave);
- }
-
- if (enter === noop && leave === noop) {
- throw new Error('Neither `enter` nor `leave` walker handler is set or both aren\'t a function');
- }
-
- walk(node, context);
-};
diff --git a/node_modules/css-tree/lib/generator/create.js b/node_modules/css-tree/lib/generator/create.js
deleted file mode 100644
index 9d41657f..00000000
--- a/node_modules/css-tree/lib/generator/create.js
+++ /dev/null
@@ -1,98 +0,0 @@
-import { tokenize, Delim, WhiteSpace } from '../tokenizer/index.js';
-import { generateSourceMap } from './sourceMap.js';
-import * as tokenBefore from './token-before.js';
-
-const REVERSESOLIDUS = 0x005c; // U+005C REVERSE SOLIDUS (\)
-
-function processChildren(node, delimeter) {
- if (typeof delimeter === 'function') {
- let prev = null;
-
- node.children.forEach(node => {
- if (prev !== null) {
- delimeter.call(this, prev);
- }
-
- this.node(node);
- prev = node;
- });
-
- return;
- }
-
- node.children.forEach(this.node, this);
-}
-
-function processChunk(chunk) {
- tokenize(chunk, (type, start, end) => {
- this.token(type, chunk.slice(start, end));
- });
-}
-
-export function createGenerator(config) {
- const types = new Map();
-
- for (let name in config.node) {
- const item = config.node[name];
- const fn = item.generate || item;
-
- if (typeof fn === 'function') {
- types.set(name, item.generate || item);
- }
- }
-
- return function(node, options) {
- let buffer = '';
- let prevCode = 0;
- let handlers = {
- node(node) {
- if (types.has(node.type)) {
- types.get(node.type).call(publicApi, node);
- } else {
- throw new Error('Unknown node type: ' + node.type);
- }
- },
- tokenBefore: tokenBefore.safe,
- token(type, value) {
- prevCode = this.tokenBefore(prevCode, type, value);
-
- this.emit(value, type, false);
-
- if (type === Delim && value.charCodeAt(0) === REVERSESOLIDUS) {
- this.emit('\n', WhiteSpace, true);
- }
- },
- emit(value) {
- buffer += value;
- },
- result() {
- return buffer;
- }
- };
-
- if (options) {
- if (typeof options.decorator === 'function') {
- handlers = options.decorator(handlers);
- }
-
- if (options.sourceMap) {
- handlers = generateSourceMap(handlers);
- }
-
- if (options.mode in tokenBefore) {
- handlers.tokenBefore = tokenBefore[options.mode];
- }
- }
-
- const publicApi = {
- node: (node) => handlers.node(node),
- children: processChildren,
- token: (type, value) => handlers.token(type, value),
- tokenize: processChunk
- };
-
- handlers.node(node);
-
- return handlers.result();
- };
-};
diff --git a/node_modules/css-tree/lib/generator/index.js b/node_modules/css-tree/lib/generator/index.js
deleted file mode 100644
index dc051167..00000000
--- a/node_modules/css-tree/lib/generator/index.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import { createGenerator } from './create.js';
-import config from '../syntax/config/generator.js';
-
-export default createGenerator(config);
diff --git a/node_modules/css-tree/lib/generator/sourceMap.js b/node_modules/css-tree/lib/generator/sourceMap.js
deleted file mode 100644
index 0c5ff27e..00000000
--- a/node_modules/css-tree/lib/generator/sourceMap.js
+++ /dev/null
@@ -1,92 +0,0 @@
-import { SourceMapGenerator } from 'source-map-js/lib/source-map-generator.js';
-
-const trackNodes = new Set(['Atrule', 'Selector', 'Declaration']);
-
-export function generateSourceMap(handlers) {
- const map = new SourceMapGenerator();
- const generated = {
- line: 1,
- column: 0
- };
- const original = {
- line: 0, // should be zero to add first mapping
- column: 0
- };
- const activatedGenerated = {
- line: 1,
- column: 0
- };
- const activatedMapping = {
- generated: activatedGenerated
- };
- let line = 1;
- let column = 0;
- let sourceMappingActive = false;
-
- const origHandlersNode = handlers.node;
- handlers.node = function(node) {
- if (node.loc && node.loc.start && trackNodes.has(node.type)) {
- const nodeLine = node.loc.start.line;
- const nodeColumn = node.loc.start.column - 1;
-
- if (original.line !== nodeLine ||
- original.column !== nodeColumn) {
- original.line = nodeLine;
- original.column = nodeColumn;
-
- generated.line = line;
- generated.column = column;
-
- if (sourceMappingActive) {
- sourceMappingActive = false;
- if (generated.line !== activatedGenerated.line ||
- generated.column !== activatedGenerated.column) {
- map.addMapping(activatedMapping);
- }
- }
-
- sourceMappingActive = true;
- map.addMapping({
- source: node.loc.source,
- original,
- generated
- });
- }
- }
-
- origHandlersNode.call(this, node);
-
- if (sourceMappingActive && trackNodes.has(node.type)) {
- activatedGenerated.line = line;
- activatedGenerated.column = column;
- }
- };
-
- const origHandlersEmit = handlers.emit;
- handlers.emit = function(value, type, auto) {
- for (let i = 0; i < value.length; i++) {
- if (value.charCodeAt(i) === 10) { // \n
- line++;
- column = 0;
- } else {
- column++;
- }
- }
-
- origHandlersEmit(value, type, auto);
- };
-
- const origHandlersResult = handlers.result;
- handlers.result = function() {
- if (sourceMappingActive) {
- map.addMapping(activatedMapping);
- }
-
- return {
- css: origHandlersResult(),
- map
- };
- };
-
- return handlers;
-};
diff --git a/node_modules/css-tree/lib/generator/token-before.js b/node_modules/css-tree/lib/generator/token-before.js
deleted file mode 100644
index da3fed00..00000000
--- a/node_modules/css-tree/lib/generator/token-before.js
+++ /dev/null
@@ -1,182 +0,0 @@
-import {
- WhiteSpace,
- Delim,
- Ident,
- Function as FunctionToken,
- Url,
- BadUrl,
- AtKeyword,
- Hash,
- Percentage,
- Dimension,
- Number as NumberToken,
- String as StringToken,
- Colon,
- LeftParenthesis,
- RightParenthesis,
- CDC
-} from '../tokenizer/index.js';
-
-const PLUSSIGN = 0x002B; // U+002B PLUS SIGN (+)
-const HYPHENMINUS = 0x002D; // U+002D HYPHEN-MINUS (-)
-
-const code = (type, value) => {
- if (type === Delim) {
- type = value;
- }
-
- if (typeof type === 'string') {
- const charCode = type.charCodeAt(0);
- return charCode > 0x7F ? 0x8000 : charCode << 8;
- }
-
- return type;
-};
-
-// https://www.w3.org/TR/css-syntax-3/#serialization
-// The only requirement for serialization is that it must "round-trip" with parsing,
-// that is, parsing the stylesheet must produce the same data structures as parsing,
-// serializing, and parsing again, except for consecutive <whitespace-token>s,
-// which may be collapsed into a single token.
-
-const specPairs = [
- [Ident, Ident],
- [Ident, FunctionToken],
- [Ident, Url],
- [Ident, BadUrl],
- [Ident, '-'],
- [Ident, NumberToken],
- [Ident, Percentage],
- [Ident, Dimension],
- [Ident, CDC],
- [Ident, LeftParenthesis],
-
- [AtKeyword, Ident],
- [AtKeyword, FunctionToken],
- [AtKeyword, Url],
- [AtKeyword, BadUrl],
- [AtKeyword, '-'],
- [AtKeyword, NumberToken],
- [AtKeyword, Percentage],
- [AtKeyword, Dimension],
- [AtKeyword, CDC],
-
- [Hash, Ident],
- [Hash, FunctionToken],
- [Hash, Url],
- [Hash, BadUrl],
- [Hash, '-'],
- [Hash, NumberToken],
- [Hash, Percentage],
- [Hash, Dimension],
- [Hash, CDC],
-
- [Dimension, Ident],
- [Dimension, FunctionToken],
- [Dimension, Url],
- [Dimension, BadUrl],
- [Dimension, '-'],
- [Dimension, NumberToken],
- [Dimension, Percentage],
- [Dimension, Dimension],
- [Dimension, CDC],
-
- ['#', Ident],
- ['#', FunctionToken],
- ['#', Url],
- ['#', BadUrl],
- ['#', '-'],
- ['#', NumberToken],
- ['#', Percentage],
- ['#', Dimension],
- ['#', CDC], // https://github.com/w3c/csswg-drafts/pull/6874
-
- ['-', Ident],
- ['-', FunctionToken],
- ['-', Url],
- ['-', BadUrl],
- ['-', '-'],
- ['-', NumberToken],
- ['-', Percentage],
- ['-', Dimension],
- ['-', CDC], // https://github.com/w3c/csswg-drafts/pull/6874
-
- [NumberToken, Ident],
- [NumberToken, FunctionToken],
- [NumberToken, Url],
- [NumberToken, BadUrl],
- [NumberToken, NumberToken],
- [NumberToken, Percentage],
- [NumberToken, Dimension],
- [NumberToken, '%'],
- [NumberToken, CDC], // https://github.com/w3c/csswg-drafts/pull/6874
-
- ['@', Ident],
- ['@', FunctionToken],
- ['@', Url],
- ['@', BadUrl],
- ['@', '-'],
- ['@', CDC], // https://github.com/w3c/csswg-drafts/pull/6874
-
- ['.', NumberToken],
- ['.', Percentage],
- ['.', Dimension],
-
- ['+', NumberToken],
- ['+', Percentage],
- ['+', Dimension],
-
- ['/', '*']
-];
-// validate with scripts/generate-safe
-const safePairs = specPairs.concat([
- [Ident, Hash],
-
- [Dimension, Hash],
-
- [Hash, Hash],
-
- [AtKeyword, LeftParenthesis],
- [AtKeyword, StringToken],
- [AtKeyword, Colon],
-
- [Percentage, Percentage],
- [Percentage, Dimension],
- [Percentage, FunctionToken],
- [Percentage, '-'],
-
- [RightParenthesis, Ident],
- [RightParenthesis, FunctionToken],
- [RightParenthesis, Percentage],
- [RightParenthesis, Dimension],
- [RightParenthesis, Hash],
- [RightParenthesis, '-']
-]);
-
-function createMap(pairs) {
- const isWhiteSpaceRequired = new Set(
- pairs.map(([prev, next]) => (code(prev) << 16 | code(next)))
- );
-
- return function(prevCode, type, value) {
- const nextCode = code(type, value);
- const nextCharCode = value.charCodeAt(0);
- const emitWs =
- (nextCharCode === HYPHENMINUS &&
- type !== Ident &&
- type !== FunctionToken &&
- type !== CDC) ||
- (nextCharCode === PLUSSIGN)
- ? isWhiteSpaceRequired.has(prevCode << 16 | nextCharCode << 8)
- : isWhiteSpaceRequired.has(prevCode << 16 | nextCode);
-
- if (emitWs) {
- this.emit(' ', WhiteSpace, true);
- }
-
- return nextCode;
- };
-}
-
-export const spec = createMap(specPairs);
-export const safe = createMap(safePairs);
diff --git a/node_modules/css-tree/lib/index.js b/node_modules/css-tree/lib/index.js
deleted file mode 100644
index 019f8258..00000000
--- a/node_modules/css-tree/lib/index.js
+++ /dev/null
@@ -1,30 +0,0 @@
-import syntax from './syntax/index.js';
-
-export * from './version.js';
-export { default as createSyntax } from './syntax/create.js';
-export { List } from './utils/List.js';
-export { Lexer } from './lexer/Lexer.js';
-export { tokenTypes, tokenNames, TokenStream } from './tokenizer/index.js';
-export * as definitionSyntax from './definition-syntax/index.js';
-export { clone } from './utils/clone.js';
-export * from './utils/names.js';
-export * as ident from './utils/ident.js';
-export * as string from './utils/string.js';
-export * as url from './utils/url.js';
-export const {
- tokenize,
- parse,
- generate,
- lexer,
- createLexer,
-
- walk,
- find,
- findLast,
- findAll,
-
- toPlainObject,
- fromPlainObject,
-
- fork
-} = syntax;
diff --git a/node_modules/css-tree/lib/lexer/Lexer.js b/node_modules/css-tree/lib/lexer/Lexer.js
deleted file mode 100644
index 685e40c3..00000000
--- a/node_modules/css-tree/lib/lexer/Lexer.js
+++ /dev/null
@@ -1,464 +0,0 @@
-import { SyntaxReferenceError, SyntaxMatchError } from './error.js';
-import * as names from '../utils/names.js';
-import { cssWideKeywords } from './generic-const.js';
-import { createGenericTypes } from './generic.js';
-import * as units from './units.js';
-import { parse, generate, walk } from '../definition-syntax/index.js';
-import prepareTokens from './prepare-tokens.js';
-import { buildMatchGraph } from './match-graph.js';
-import { matchAsTree } from './match.js';
-import * as trace from './trace.js';
-import { matchFragments } from './search.js';
-import { getStructureFromConfig } from './structure.js';
-
-const cssWideKeywordsSyntax = buildMatchGraph(cssWideKeywords.join(' | '));
-
-function dumpMapSyntax(map, compact, syntaxAsAst) {
- const result = {};
-
- for (const name in map) {
- if (map[name].syntax) {
- result[name] = syntaxAsAst
- ? map[name].syntax
- : generate(map[name].syntax, { compact });
- }
- }
-
- return result;
-}
-
-function dumpAtruleMapSyntax(map, compact, syntaxAsAst) {
- const result = {};
-
- for (const [name, atrule] of Object.entries(map)) {
- result[name] = {
- prelude: atrule.prelude && (
- syntaxAsAst
- ? atrule.prelude.syntax
- : generate(atrule.prelude.syntax, { compact })
- ),
- descriptors: atrule.descriptors && dumpMapSyntax(atrule.descriptors, compact, syntaxAsAst)
- };
- }
-
- return result;
-}
-
-function valueHasVar(tokens) {
- for (let i = 0; i < tokens.length; i++) {
- if (tokens[i].value.toLowerCase() === 'var(') {
- return true;
- }
- }
-
- return false;
-}
-
-function buildMatchResult(matched, error, iterations) {
- return {
- matched,
- iterations,
- error,
- ...trace
- };
-}
-
-function matchSyntax(lexer, syntax, value, useCssWideKeywords) {
- const tokens = prepareTokens(value, lexer.syntax);
- let result;
-
- if (valueHasVar(tokens)) {
- return buildMatchResult(null, new Error('Matching for a tree with var() is not supported'));
- }
-
- if (useCssWideKeywords) {
- result = matchAsTree(tokens, lexer.cssWideKeywordsSyntax, lexer);
- }
-
- if (!useCssWideKeywords || !result.match) {
- result = matchAsTree(tokens, syntax.match, lexer);
- if (!result.match) {
- return buildMatchResult(
- null,
- new SyntaxMatchError(result.reason, syntax.syntax, value, result),
- result.iterations
- );
- }
- }
-
- return buildMatchResult(result.match, null, result.iterations);
-}
-
-export class Lexer {
- constructor(config, syntax, structure) {
- this.cssWideKeywordsSyntax = cssWideKeywordsSyntax;
- this.syntax = syntax;
- this.generic = false;
- this.units = { ...units };
- this.atrules = Object.create(null);
- this.properties = Object.create(null);
- this.types = Object.create(null);
- this.structure = structure || getStructureFromConfig(config);
-
- if (config) {
- if (config.units) {
- for (const group of Object.keys(units)) {
- if (Array.isArray(config.units[group])) {
- this.units[group] = config.units[group];
- }
- }
- }
-
- if (config.types) {
- for (const name in config.types) {
- this.addType_(name, config.types[name]);
- }
- }
-
- if (config.generic) {
- this.generic = true;
- for (const [name, value] of Object.entries(createGenericTypes(this.units))) {
- this.addType_(name, value);
- }
- }
-
- if (config.atrules) {
- for (const name in config.atrules) {
- this.addAtrule_(name, config.atrules[name]);
- }
- }
-
- if (config.properties) {
- for (const name in config.properties) {
- this.addProperty_(name, config.properties[name]);
- }
- }
- }
- }
-
- checkStructure(ast) {
- function collectWarning(node, message) {
- warns.push({ node, message });
- }
-
- const structure = this.structure;
- const warns = [];
-
- this.syntax.walk(ast, function(node) {
- if (structure.hasOwnProperty(node.type)) {
- structure[node.type].check(node, collectWarning);
- } else {
- collectWarning(node, 'Unknown node type `' + node.type + '`');
- }
- });
-
- return warns.length ? warns : false;
- }
-
- createDescriptor(syntax, type, name, parent = null) {
- const ref = {
- type,
- name
- };
- const descriptor = {
- type,
- name,
- parent,
- serializable: typeof syntax === 'string' || (syntax && typeof syntax.type === 'string'),
- syntax: null,
- match: null
- };
-
- if (typeof syntax === 'function') {
- descriptor.match = buildMatchGraph(syntax, ref);
- } else {
- if (typeof syntax === 'string') {
- // lazy parsing on first access
- Object.defineProperty(descriptor, 'syntax', {
- get() {
- Object.defineProperty(descriptor, 'syntax', {
- value: parse(syntax)
- });
-
- return descriptor.syntax;
- }
- });
- } else {
- descriptor.syntax = syntax;
- }
-
- // lazy graph build on first access
- Object.defineProperty(descriptor, 'match', {
- get() {
- Object.defineProperty(descriptor, 'match', {
- value: buildMatchGraph(descriptor.syntax, ref)
- });
-
- return descriptor.match;
- }
- });
- }
-
- return descriptor;
- }
- addAtrule_(name, syntax) {
- if (!syntax) {
- return;
- }
-
- this.atrules[name] = {
- type: 'Atrule',
- name: name,
- prelude: syntax.prelude ? this.createDescriptor(syntax.prelude, 'AtrulePrelude', name) : null,
- descriptors: syntax.descriptors
- ? Object.keys(syntax.descriptors).reduce(
- (map, descName) => {
- map[descName] = this.createDescriptor(syntax.descriptors[descName], 'AtruleDescriptor', descName, name);
- return map;
- },
- Object.create(null)
- )
- : null
- };
- }
- addProperty_(name, syntax) {
- if (!syntax) {
- return;
- }
-
- this.properties[name] = this.createDescriptor(syntax, 'Property', name);
- }
- addType_(name, syntax) {
- if (!syntax) {
- return;
- }
-
- this.types[name] = this.createDescriptor(syntax, 'Type', name);
- }
-
- checkAtruleName(atruleName) {
- if (!this.getAtrule(atruleName)) {
- return new SyntaxReferenceError('Unknown at-rule', '@' + atruleName);
- }
- }
- checkAtrulePrelude(atruleName, prelude) {
- const error = this.checkAtruleName(atruleName);
-
- if (error) {
- return error;
- }
-
- const atrule = this.getAtrule(atruleName);
-
- if (!atrule.prelude && prelude) {
- return new SyntaxError('At-rule `@' + atruleName + '` should not contain a prelude');
- }
-
- if (atrule.prelude && !prelude) {
- if (!matchSyntax(this, atrule.prelude, '', false).matched) {
- return new SyntaxError('At-rule `@' + atruleName + '` should contain a prelude');
- }
- }
- }
- checkAtruleDescriptorName(atruleName, descriptorName) {
- const error = this.checkAtruleName(atruleName);
-
- if (error) {
- return error;
- }
-
- const atrule = this.getAtrule(atruleName);
- const descriptor = names.keyword(descriptorName);
-
- if (!atrule.descriptors) {
- return new SyntaxError('At-rule `@' + atruleName + '` has no known descriptors');
- }
-
- if (!atrule.descriptors[descriptor.name] &&
- !atrule.descriptors[descriptor.basename]) {
- return new SyntaxReferenceError('Unknown at-rule descriptor', descriptorName);
- }
- }
- checkPropertyName(propertyName) {
- if (!this.getProperty(propertyName)) {
- return new SyntaxReferenceError('Unknown property', propertyName);
- }
- }
-
- matchAtrulePrelude(atruleName, prelude) {
- const error = this.checkAtrulePrelude(atruleName, prelude);
-
- if (error) {
- return buildMatchResult(null, error);
- }
-
- const atrule = this.getAtrule(atruleName);
-
- if (!atrule.prelude) {
- return buildMatchResult(null, null);
- }
-
- return matchSyntax(this, atrule.prelude, prelude || '', false);
- }
- matchAtruleDescriptor(atruleName, descriptorName, value) {
- const error = this.checkAtruleDescriptorName(atruleName, descriptorName);
-
- if (error) {
- return buildMatchResult(null, error);
- }
-
- const atrule = this.getAtrule(atruleName);
- const descriptor = names.keyword(descriptorName);
-
- return matchSyntax(this, atrule.descriptors[descriptor.name] || atrule.descriptors[descriptor.basename], value, false);
- }
- matchDeclaration(node) {
- if (node.type !== 'Declaration') {
- return buildMatchResult(null, new Error('Not a Declaration node'));
- }
-
- return this.matchProperty(node.property, node.value);
- }
- matchProperty(propertyName, value) {
- // don't match syntax for a custom property at the moment
- if (names.property(propertyName).custom) {
- return buildMatchResult(null, new Error('Lexer matching doesn\'t applicable for custom properties'));
- }
-
- const error = this.checkPropertyName(propertyName);
-
- if (error) {
- return buildMatchResult(null, error);
- }
-
- return matchSyntax(this, this.getProperty(propertyName), value, true);
- }
- matchType(typeName, value) {
- const typeSyntax = this.getType(typeName);
-
- if (!typeSyntax) {
- return buildMatchResult(null, new SyntaxReferenceError('Unknown type', typeName));
- }
-
- return matchSyntax(this, typeSyntax, value, false);
- }
- match(syntax, value) {
- if (typeof syntax !== 'string' && (!syntax || !syntax.type)) {
- return buildMatchResult(null, new SyntaxReferenceError('Bad syntax'));
- }
-
- if (typeof syntax === 'string' || !syntax.match) {
- syntax = this.createDescriptor(syntax, 'Type', 'anonymous');
- }
-
- return matchSyntax(this, syntax, value, false);
- }
-
- findValueFragments(propertyName, value, type, name) {
- return matchFragments(this, value, this.matchProperty(propertyName, value), type, name);
- }
- findDeclarationValueFragments(declaration, type, name) {
- return matchFragments(this, declaration.value, this.matchDeclaration(declaration), type, name);
- }
- findAllFragments(ast, type, name) {
- const result = [];
-
- this.syntax.walk(ast, {
- visit: 'Declaration',
- enter: (declaration) => {
- result.push.apply(result, this.findDeclarationValueFragments(declaration, type, name));
- }
- });
-
- return result;
- }
-
- getAtrule(atruleName, fallbackBasename = true) {
- const atrule = names.keyword(atruleName);
- const atruleEntry = atrule.vendor && fallbackBasename
- ? this.atrules[atrule.name] || this.atrules[atrule.basename]
- : this.atrules[atrule.name];
-
- return atruleEntry || null;
- }
- getAtrulePrelude(atruleName, fallbackBasename = true) {
- const atrule = this.getAtrule(atruleName, fallbackBasename);
-
- return atrule && atrule.prelude || null;
- }
- getAtruleDescriptor(atruleName, name) {
- return this.atrules.hasOwnProperty(atruleName) && this.atrules.declarators
- ? this.atrules[atruleName].declarators[name] || null
- : null;
- }
- getProperty(propertyName, fallbackBasename = true) {
- const property = names.property(propertyName);
- const propertyEntry = property.vendor && fallbackBasename
- ? this.properties[property.name] || this.properties[property.basename]
- : this.properties[property.name];
-
- return propertyEntry || null;
- }
- getType(name) {
- return hasOwnProperty.call(this.types, name) ? this.types[name] : null;
- }
-
- validate() {
- function validate(syntax, name, broken, descriptor) {
- if (broken.has(name)) {
- return broken.get(name);
- }
-
- broken.set(name, false);
- if (descriptor.syntax !== null) {
- walk(descriptor.syntax, function(node) {
- if (node.type !== 'Type' && node.type !== 'Property') {
- return;
- }
-
- const map = node.type === 'Type' ? syntax.types : syntax.properties;
- const brokenMap = node.type === 'Type' ? brokenTypes : brokenProperties;
-
- if (!hasOwnProperty.call(map, node.name) || validate(syntax, node.name, brokenMap, map[node.name])) {
- broken.set(name, true);
- }
- }, this);
- }
- }
-
- let brokenTypes = new Map();
- let brokenProperties = new Map();
-
- for (const key in this.types) {
- validate(this, key, brokenTypes, this.types[key]);
- }
-
- for (const key in this.properties) {
- validate(this, key, brokenProperties, this.properties[key]);
- }
-
- brokenTypes = [...brokenTypes.keys()].filter(name => brokenTypes.get(name));
- brokenProperties = [...brokenProperties.keys()].filter(name => brokenProperties.get(name));
-
- if (brokenTypes.length || brokenProperties.length) {
- return {
- types: brokenTypes,
- properties: brokenProperties
- };
- }
-
- return null;
- }
- dump(syntaxAsAst, pretty) {
- return {
- generic: this.generic,
- units: this.units,
- types: dumpMapSyntax(this.types, !pretty, syntaxAsAst),
- properties: dumpMapSyntax(this.properties, !pretty, syntaxAsAst),
- atrules: dumpAtruleMapSyntax(this.atrules, !pretty, syntaxAsAst)
- };
- }
- toString() {
- return JSON.stringify(this.dump());
- }
-};
diff --git a/node_modules/css-tree/lib/lexer/error.js b/node_modules/css-tree/lib/lexer/error.js
deleted file mode 100644
index 89a5400b..00000000
--- a/node_modules/css-tree/lib/lexer/error.js
+++ /dev/null
@@ -1,123 +0,0 @@
-import { createCustomError } from '../utils/create-custom-error.js';
-import { generate } from '../definition-syntax/generate.js';
-
-const defaultLoc = { offset: 0, line: 1, column: 1 };
-
-function locateMismatch(matchResult, node) {
- const tokens = matchResult.tokens;
- const longestMatch = matchResult.longestMatch;
- const mismatchNode = longestMatch < tokens.length ? tokens[longestMatch].node || null : null;
- const badNode = mismatchNode !== node ? mismatchNode : null;
- let mismatchOffset = 0;
- let mismatchLength = 0;
- let entries = 0;
- let css = '';
- let start;
- let end;
-
- for (let i = 0; i < tokens.length; i++) {
- const token = tokens[i].value;
-
- if (i === longestMatch) {
- mismatchLength = token.length;
- mismatchOffset = css.length;
- }
-
- if (badNode !== null && tokens[i].node === badNode) {
- if (i <= longestMatch) {
- entries++;
- } else {
- entries = 0;
- }
- }
-
- css += token;
- }
-
- if (longestMatch === tokens.length || entries > 1) { // last
- start = fromLoc(badNode || node, 'end') || buildLoc(defaultLoc, css);
- end = buildLoc(start);
- } else {
- start = fromLoc(badNode, 'start') ||
- buildLoc(fromLoc(node, 'start') || defaultLoc, css.slice(0, mismatchOffset));
- end = fromLoc(badNode, 'end') ||
- buildLoc(start, css.substr(mismatchOffset, mismatchLength));
- }
-
- return {
- css,
- mismatchOffset,
- mismatchLength,
- start,
- end
- };
-}
-
-function fromLoc(node, point) {
- const value = node && node.loc && node.loc[point];
-
- if (value) {
- return 'line' in value ? buildLoc(value) : value;
- }
-
- return null;
-}
-
-function buildLoc({ offset, line, column }, extra) {
- const loc = {
- offset,
- line,
- column
- };
-
- if (extra) {
- const lines = extra.split(/\n|\r\n?|\f/);
-
- loc.offset += extra.length;
- loc.line += lines.length - 1;
- loc.column = lines.length === 1 ? loc.column + extra.length : lines.pop().length + 1;
- }
-
- return loc;
-}
-
-export const SyntaxReferenceError = function(type, referenceName) {
- const error = createCustomError(
- 'SyntaxReferenceError',
- type + (referenceName ? ' `' + referenceName + '`' : '')
- );
-
- error.reference = referenceName;
-
- return error;
-};
-
-export const SyntaxMatchError = function(message, syntax, node, matchResult) {
- const error = createCustomError('SyntaxMatchError', message);
- const {
- css,
- mismatchOffset,
- mismatchLength,
- start,
- end
- } = locateMismatch(matchResult, node);
-
- error.rawMessage = message;
- error.syntax = syntax ? generate(syntax) : '<generic>';
- error.css = css;
- error.mismatchOffset = mismatchOffset;
- error.mismatchLength = mismatchLength;
- error.message = message + '\n' +
- ' syntax: ' + error.syntax + '\n' +
- ' value: ' + (css || '<empty string>') + '\n' +
- ' --------' + new Array(error.mismatchOffset + 1).join('-') + '^';
-
- Object.assign(error, start);
- error.loc = {
- source: (node && node.loc && node.loc.source) || '<unknown>',
- start,
- end
- };
-
- return error;
-};
diff --git a/node_modules/css-tree/lib/lexer/generic-an-plus-b.js b/node_modules/css-tree/lib/lexer/generic-an-plus-b.js
deleted file mode 100644
index 347715c2..00000000
--- a/node_modules/css-tree/lib/lexer/generic-an-plus-b.js
+++ /dev/null
@@ -1,238 +0,0 @@
-import {
- isDigit,
- cmpChar,
- Delim,
- WhiteSpace,
- Comment,
- Ident,
- Number as NumberToken,
- Dimension
-} from '../tokenizer/index.js';
-
-const PLUSSIGN = 0x002B; // U+002B PLUS SIGN (+)
-const HYPHENMINUS = 0x002D; // U+002D HYPHEN-MINUS (-)
-const N = 0x006E; // U+006E LATIN SMALL LETTER N (n)
-const DISALLOW_SIGN = true;
-const ALLOW_SIGN = false;
-
-function isDelim(token, code) {
- return token !== null && token.type === Delim && token.value.charCodeAt(0) === code;
-}
-
-function skipSC(token, offset, getNextToken) {
- while (token !== null && (token.type === WhiteSpace || token.type === Comment)) {
- token = getNextToken(++offset);
- }
-
- return offset;
-}
-
-function checkInteger(token, valueOffset, disallowSign, offset) {
- if (!token) {
- return 0;
- }
-
- const code = token.value.charCodeAt(valueOffset);
-
- if (code === PLUSSIGN || code === HYPHENMINUS) {
- if (disallowSign) {
- // Number sign is not allowed
- return 0;
- }
- valueOffset++;
- }
-
- for (; valueOffset < token.value.length; valueOffset++) {
- if (!isDigit(token.value.charCodeAt(valueOffset))) {
- // Integer is expected
- return 0;
- }
- }
-
- return offset + 1;
-}
-
-// ... <signed-integer>
-// ... ['+' | '-'] <signless-integer>
-function consumeB(token, offset_, getNextToken) {
- let sign = false;
- let offset = skipSC(token, offset_, getNextToken);
-
- token = getNextToken(offset);
-
- if (token === null) {
- return offset_;
- }
-
- if (token.type !== NumberToken) {
- if (isDelim(token, PLUSSIGN) || isDelim(token, HYPHENMINUS)) {
- sign = true;
- offset = skipSC(getNextToken(++offset), offset, getNextToken);
- token = getNextToken(offset);
-
- if (token === null || token.type !== NumberToken) {
- return 0;
- }
- } else {
- return offset_;
- }
- }
-
- if (!sign) {
- const code = token.value.charCodeAt(0);
- if (code !== PLUSSIGN && code !== HYPHENMINUS) {
- // Number sign is expected
- return 0;
- }
- }
-
- return checkInteger(token, sign ? 0 : 1, sign, offset);
-}
-
-// An+B microsyntax https://www.w3.org/TR/css-syntax-3/#anb
-export default function anPlusB(token, getNextToken) {
- /* eslint-disable brace-style*/
- let offset = 0;
-
- if (!token) {
- return 0;
- }
-
- // <integer>
- if (token.type === NumberToken) {
- return checkInteger(token, 0, ALLOW_SIGN, offset); // b
- }
-
- // -n
- // -n <signed-integer>
- // -n ['+' | '-'] <signless-integer>
- // -n- <signless-integer>
- // <dashndashdigit-ident>
- else if (token.type === Ident && token.value.charCodeAt(0) === HYPHENMINUS) {
- // expect 1st char is N
- if (!cmpChar(token.value, 1, N)) {
- return 0;
- }
-
- switch (token.value.length) {
- // -n
- // -n <signed-integer>
- // -n ['+' | '-'] <signless-integer>
- case 2:
- return consumeB(getNextToken(++offset), offset, getNextToken);
-
- // -n- <signless-integer>
- case 3:
- if (token.value.charCodeAt(2) !== HYPHENMINUS) {
- return 0;
- }
-
- offset = skipSC(getNextToken(++offset), offset, getNextToken);
- token = getNextToken(offset);
-
- return checkInteger(token, 0, DISALLOW_SIGN, offset);
-
- // <dashndashdigit-ident>
- default:
- if (token.value.charCodeAt(2) !== HYPHENMINUS) {
- return 0;
- }
-
- return checkInteger(token, 3, DISALLOW_SIGN, offset);
- }
- }
-
- // '+'? n
- // '+'? n <signed-integer>
- // '+'? n ['+' | '-'] <signless-integer>
- // '+'? n- <signless-integer>
- // '+'? <ndashdigit-ident>
- else if (token.type === Ident || (isDelim(token, PLUSSIGN) && getNextToken(offset + 1).type === Ident)) {
- // just ignore a plus
- if (token.type !== Ident) {
- token = getNextToken(++offset);
- }
-
- if (token === null || !cmpChar(token.value, 0, N)) {
- return 0;
- }
-
- switch (token.value.length) {
- // '+'? n
- // '+'? n <signed-integer>
- // '+'? n ['+' | '-'] <signless-integer>
- case 1:
- return consumeB(getNextToken(++offset), offset, getNextToken);
-
- // '+'? n- <signless-integer>
- case 2:
- if (token.value.charCodeAt(1) !== HYPHENMINUS) {
- return 0;
- }
-
- offset = skipSC(getNextToken(++offset), offset, getNextToken);
- token = getNextToken(offset);
-
- return checkInteger(token, 0, DISALLOW_SIGN, offset);
-
- // '+'? <ndashdigit-ident>
- default:
- if (token.value.charCodeAt(1) !== HYPHENMINUS) {
- return 0;
- }
-
- return checkInteger(token, 2, DISALLOW_SIGN, offset);
- }
- }
-
- // <ndashdigit-dimension>
- // <ndash-dimension> <signless-integer>
- // <n-dimension>
- // <n-dimension> <signed-integer>
- // <n-dimension> ['+' | '-'] <signless-integer>
- else if (token.type === Dimension) {
- let code = token.value.charCodeAt(0);
- let sign = code === PLUSSIGN || code === HYPHENMINUS ? 1 : 0;
- let i = sign;
-
- for (; i < token.value.length; i++) {
- if (!isDigit(token.value.charCodeAt(i))) {
- break;
- }
- }
-
- if (i === sign) {
- // Integer is expected
- return 0;
- }
-
- if (!cmpChar(token.value, i, N)) {
- return 0;
- }
-
- // <n-dimension>
- // <n-dimension> <signed-integer>
- // <n-dimension> ['+' | '-'] <signless-integer>
- if (i + 1 === token.value.length) {
- return consumeB(getNextToken(++offset), offset, getNextToken);
- } else {
- if (token.value.charCodeAt(i + 1) !== HYPHENMINUS) {
- return 0;
- }
-
- // <ndash-dimension> <signless-integer>
- if (i + 2 === token.value.length) {
- offset = skipSC(getNextToken(++offset), offset, getNextToken);
- token = getNextToken(offset);
-
- return checkInteger(token, 0, DISALLOW_SIGN, offset);
- }
- // <ndashdigit-dimension>
- else {
- return checkInteger(token, i + 2, DISALLOW_SIGN, offset);
- }
- }
- }
-
- return 0;
-};
diff --git a/node_modules/css-tree/lib/lexer/generic-const.js b/node_modules/css-tree/lib/lexer/generic-const.js
deleted file mode 100644
index 8efe6aee..00000000
--- a/node_modules/css-tree/lib/lexer/generic-const.js
+++ /dev/null
@@ -1,8 +0,0 @@
-// https://drafts.csswg.org/css-cascade-5/
-export const cssWideKeywords = [
- 'initial',
- 'inherit',
- 'unset',
- 'revert',
- 'revert-layer'
-];
diff --git a/node_modules/css-tree/lib/lexer/generic-urange.js b/node_modules/css-tree/lib/lexer/generic-urange.js
deleted file mode 100644
index d878409e..00000000
--- a/node_modules/css-tree/lib/lexer/generic-urange.js
+++ /dev/null
@@ -1,151 +0,0 @@
-import {
- isHexDigit,
- cmpChar,
- Ident,
- Delim,
- Number as NumberToken,
- Dimension
-} from '../tokenizer/index.js';
-
-const PLUSSIGN = 0x002B; // U+002B PLUS SIGN (+)
-const HYPHENMINUS = 0x002D; // U+002D HYPHEN-MINUS (-)
-const QUESTIONMARK = 0x003F; // U+003F QUESTION MARK (?)
-const U = 0x0075; // U+0075 LATIN SMALL LETTER U (u)
-
-function isDelim(token, code) {
- return token !== null && token.type === Delim && token.value.charCodeAt(0) === code;
-}
-
-function startsWith(token, code) {
- return token.value.charCodeAt(0) === code;
-}
-
-function hexSequence(token, offset, allowDash) {
- let hexlen = 0;
-
- for (let pos = offset; pos < token.value.length; pos++) {
- const code = token.value.charCodeAt(pos);
-
- if (code === HYPHENMINUS && allowDash && hexlen !== 0) {
- hexSequence(token, offset + hexlen + 1, false);
- return 6; // dissallow following question marks
- }
-
- if (!isHexDigit(code)) {
- return 0; // not a hex digit
- }
-
- if (++hexlen > 6) {
- return 0; // too many hex digits
- };
- }
-
- return hexlen;
-}
-
-function withQuestionMarkSequence(consumed, length, getNextToken) {
- if (!consumed) {
- return 0; // nothing consumed
- }
-
- while (isDelim(getNextToken(length), QUESTIONMARK)) {
- if (++consumed > 6) {
- return 0; // too many question marks
- }
-
- length++;
- }
-
- return length;
-}
-
-// https://drafts.csswg.org/css-syntax/#urange
-// Informally, the <urange> production has three forms:
-// U+0001
-// Defines a range consisting of a single code point, in this case the code point "1".
-// U+0001-00ff
-// Defines a range of codepoints between the first and the second value, in this case
-// the range between "1" and "ff" (255 in decimal) inclusive.
-// U+00??
-// Defines a range of codepoints where the "?" characters range over all hex digits,
-// in this case defining the same as the value U+0000-00ff.
-// In each form, a maximum of 6 digits is allowed for each hexadecimal number (if you treat "?" as a hexadecimal digit).
-//
-// <urange> =
-// u '+' <ident-token> '?'* |
-// u <dimension-token> '?'* |
-// u <number-token> '?'* |
-// u <number-token> <dimension-token> |
-// u <number-token> <number-token> |
-// u '+' '?'+
-export default function urange(token, getNextToken) {
- let length = 0;
-
- // should start with `u` or `U`
- if (token === null || token.type !== Ident || !cmpChar(token.value, 0, U)) {
- return 0;
- }
-
- token = getNextToken(++length);
- if (token === null) {
- return 0;
- }
-
- // u '+' <ident-token> '?'*
- // u '+' '?'+
- if (isDelim(token, PLUSSIGN)) {
- token = getNextToken(++length);
- if (token === null) {
- return 0;
- }
-
- if (token.type === Ident) {
- // u '+' <ident-token> '?'*
- return withQuestionMarkSequence(hexSequence(token, 0, true), ++length, getNextToken);
- }
-
- if (isDelim(token, QUESTIONMARK)) {
- // u '+' '?'+
- return withQuestionMarkSequence(1, ++length, getNextToken);
- }
-
- // Hex digit or question mark is expected
- return 0;
- }
-
- // u <number-token> '?'*
- // u <number-token> <dimension-token>
- // u <number-token> <number-token>
- if (token.type === NumberToken) {
- const consumedHexLength = hexSequence(token, 1, true);
- if (consumedHexLength === 0) {
- return 0;
- }
-
- token = getNextToken(++length);
- if (token === null) {
- // u <number-token> <eof>
- return length;
- }
-
- if (token.type === Dimension || token.type === NumberToken) {
- // u <number-token> <dimension-token>
- // u <number-token> <number-token>
- if (!startsWith(token, HYPHENMINUS) || !hexSequence(token, 1, false)) {
- return 0;
- }
-
- return length + 1;
- }
-
- // u <number-token> '?'*
- return withQuestionMarkSequence(consumedHexLength, length, getNextToken);
- }
-
- // u <dimension-token> '?'*
- if (token.type === Dimension) {
- return withQuestionMarkSequence(hexSequence(token, 1, true), ++length, getNextToken);
- }
-
- return 0;
-};
diff --git a/node_modules/css-tree/lib/lexer/generic.js b/node_modules/css-tree/lib/lexer/generic.js
deleted file mode 100644
index 93028206..00000000
--- a/node_modules/css-tree/lib/lexer/generic.js
+++ /dev/null
@@ -1,606 +0,0 @@
-import { cssWideKeywords } from './generic-const.js';
-import anPlusB from './generic-an-plus-b.js';
-import urange from './generic-urange.js';
-import {
- isIdentifierStart,
- isHexDigit,
- isDigit,
- cmpStr,
- consumeNumber,
-
- Ident,
- Function as FunctionToken,
- AtKeyword,
- Hash,
- String as StringToken,
- BadString,
- Url,
- BadUrl,
- Delim,
- Number as NumberToken,
- Percentage,
- Dimension,
- WhiteSpace,
- CDO,
- CDC,
- Colon,
- Semicolon,
- Comma,
- LeftSquareBracket,
- RightSquareBracket,
- LeftParenthesis,
- RightParenthesis,
- LeftCurlyBracket,
- RightCurlyBracket
-} from '../tokenizer/index.js';
-
-const calcFunctionNames = ['calc(', '-moz-calc(', '-webkit-calc('];
-const balancePair = new Map([
- [FunctionToken, RightParenthesis],
- [LeftParenthesis, RightParenthesis],
- [LeftSquareBracket, RightSquareBracket],
- [LeftCurlyBracket, RightCurlyBracket]
-]);
-
-// safe char code getter
-function charCodeAt(str, index) {
- return index < str.length ? str.charCodeAt(index) : 0;
-}
-
-function eqStr(actual, expected) {
- return cmpStr(actual, 0, actual.length, expected);
-}
-
-function eqStrAny(actual, expected) {
- for (let i = 0; i < expected.length; i++) {
- if (eqStr(actual, expected[i])) {
- return true;
- }
- }
-
- return false;
-}
-
-// IE postfix hack, i.e. 123\0 or 123px\9
-function isPostfixIeHack(str, offset) {
- if (offset !== str.length - 2) {
- return false;
- }
-
- return (
- charCodeAt(str, offset) === 0x005C && // U+005C REVERSE SOLIDUS (\)
- isDigit(charCodeAt(str, offset + 1))
- );
-}
-
-function outOfRange(opts, value, numEnd) {
- if (opts && opts.type === 'Range') {
- const num = Number(
- numEnd !== undefined && numEnd !== value.length
- ? value.substr(0, numEnd)
- : value
- );
-
- if (isNaN(num)) {
- return true;
- }
-
- // FIXME: when opts.min is a string it's a dimension, skip a range validation
- // for now since it requires a type covertation which is not implmented yet
- if (opts.min !== null && num < opts.min && typeof opts.min !== 'string') {
- return true;
- }
-
- // FIXME: when opts.max is a string it's a dimension, skip a range validation
- // for now since it requires a type covertation which is not implmented yet
- if (opts.max !== null && num > opts.max && typeof opts.max !== 'string') {
- return true;
- }
- }
-
- return false;
-}
-
-function consumeFunction(token, getNextToken) {
- let balanceCloseType = 0;
- let balanceStash = [];
- let length = 0;
-
- // balanced token consuming
- scan:
- do {
- switch (token.type) {
- case RightCurlyBracket:
- case RightParenthesis:
- case RightSquareBracket:
- if (token.type !== balanceCloseType) {
- break scan;
- }
-
- balanceCloseType = balanceStash.pop();
-
- if (balanceStash.length === 0) {
- length++;
- break scan;
- }
-
- break;
-
- case FunctionToken:
- case LeftParenthesis:
- case LeftSquareBracket:
- case LeftCurlyBracket:
- balanceStash.push(balanceCloseType);
- balanceCloseType = balancePair.get(token.type);
- break;
- }
-
- length++;
- } while (token = getNextToken(length));
-
- return length;
-}
-
-// TODO: implement
-// can be used wherever <length>, <frequency>, <angle>, <time>, <percentage>, <number>, or <integer> values are allowed
-// https://drafts.csswg.org/css-values/#calc-notation
-function calc(next) {
- return function(token, getNextToken, opts) {
- if (token === null) {
- return 0;
- }
-
- if (token.type === FunctionToken && eqStrAny(token.value, calcFunctionNames)) {
- return consumeFunction(token, getNextToken);
- }
-
- return next(token, getNextToken, opts);
- };
-}
-
-function tokenType(expectedTokenType) {
- return function(token) {
- if (token === null || token.type !== expectedTokenType) {
- return 0;
- }
-
- return 1;
- };
-}
-
-// =========================
-// Complex types
-//
-
-// https://drafts.csswg.org/css-values-4/#custom-idents
-// 4.2. Author-defined Identifiers: the <custom-ident> type
-// Some properties accept arbitrary author-defined identifiers as a component value.
-// This generic data type is denoted by <custom-ident>, and represents any valid CSS identifier
-// that would not be misinterpreted as a pre-defined keyword in that property’s value definition.
-//
-// See also: https://developer.mozilla.org/en-US/docs/Web/CSS/custom-ident
-function customIdent(token) {
- if (token === null || token.type !== Ident) {
- return 0;
- }
-
- const name = token.value.toLowerCase();
-
- // The CSS-wide keywords are not valid <custom-ident>s
- if (eqStrAny(name, cssWideKeywords)) {
- return 0;
- }
-
- // The default keyword is reserved and is also not a valid <custom-ident>
- if (eqStr(name, 'default')) {
- return 0;
- }
-
- // TODO: ignore property specific keywords (as described https://developer.mozilla.org/en-US/docs/Web/CSS/custom-ident)
- // Specifications using <custom-ident> must specify clearly what other keywords
- // are excluded from <custom-ident>, if any—for example by saying that any pre-defined keywords
- // in that property’s value definition are excluded. Excluded keywords are excluded
- // in all ASCII case permutations.
-
- return 1;
-}
-
-// https://drafts.csswg.org/css-variables/#typedef-custom-property-name
-// A custom property is any property whose name starts with two dashes (U+002D HYPHEN-MINUS), like --foo.
-// The <custom-property-name> production corresponds to this: it’s defined as any valid identifier
-// that starts with two dashes, except -- itself, which is reserved for future use by CSS.
-// NOTE: Current implementation treat `--` as a valid name since most (all?) major browsers treat it as valid.
-function customPropertyName(token) {
- // ... defined as any valid identifier
- if (token === null || token.type !== Ident) {
- return 0;
- }
-
- // ... that starts with two dashes (U+002D HYPHEN-MINUS)
- if (charCodeAt(token.value, 0) !== 0x002D || charCodeAt(token.value, 1) !== 0x002D) {
- return 0;
- }
-
- return 1;
-}
-
-// https://drafts.csswg.org/css-color-4/#hex-notation
-// The syntax of a <hex-color> is a <hash-token> token whose value consists of 3, 4, 6, or 8 hexadecimal digits.
-// In other words, a hex color is written as a hash character, "#", followed by some number of digits 0-9 or
-// letters a-f (the case of the letters doesn’t matter - #00ff00 is identical to #00FF00).
-function hexColor(token) {
- if (token === null || token.type !== Hash) {
- return 0;
- }
-
- const length = token.value.length;
-
- // valid values (length): #rgb (4), #rgba (5), #rrggbb (7), #rrggbbaa (9)
- if (length !== 4 && length !== 5 && length !== 7 && length !== 9) {
- return 0;
- }
-
- for (let i = 1; i < length; i++) {
- if (!isHexDigit(charCodeAt(token.value, i))) {
- return 0;
- }
- }
-
- return 1;
-}
-
-function idSelector(token) {
- if (token === null || token.type !== Hash) {
- return 0;
- }
-
- if (!isIdentifierStart(charCodeAt(token.value, 1), charCodeAt(token.value, 2), charCodeAt(token.value, 3))) {
- return 0;
- }
-
- return 1;
-}
-
-// https://drafts.csswg.org/css-syntax/#any-value
-// It represents the entirety of what a valid declaration can have as its value.
-function declarationValue(token, getNextToken) {
- if (!token) {
- return 0;
- }
-
- let balanceCloseType = 0;
- let balanceStash = [];
- let length = 0;
-
- // The <declaration-value> production matches any sequence of one or more tokens,
- // so long as the sequence does not contain ...
- scan:
- do {
- switch (token.type) {
- // ... <bad-string-token>, <bad-url-token>,
- case BadString:
- case BadUrl:
- break scan;
-
- // ... unmatched <)-token>, <]-token>, or <}-token>,
- case RightCurlyBracket:
- case RightParenthesis:
- case RightSquareBracket:
- if (token.type !== balanceCloseType) {
- break scan;
- }
-
- balanceCloseType = balanceStash.pop();
- break;
-
- // ... or top-level <semicolon-token> tokens
- case Semicolon:
- if (balanceCloseType === 0) {
- break scan;
- }
-
- break;
-
- // ... or <delim-token> tokens with a value of "!"
- case Delim:
- if (balanceCloseType === 0 && token.value === '!') {
- break scan;
- }
-
- break;
-
- case FunctionToken:
- case LeftParenthesis:
- case LeftSquareBracket:
- case LeftCurlyBracket:
- balanceStash.push(balanceCloseType);
- balanceCloseType = balancePair.get(token.type);
- break;
- }
-
- length++;
- } while (token = getNextToken(length));
-
- return length;
-}
-
-// https://drafts.csswg.org/css-syntax/#any-value
-// The <any-value> production is identical to <declaration-value>, but also
-// allows top-level <semicolon-token> tokens and <delim-token> tokens
-// with a value of "!". It represents the entirety of what valid CSS can be in any context.
-function anyValue(token, getNextToken) {
- if (!token) {
- return 0;
- }
-
- let balanceCloseType = 0;
- let balanceStash = [];
- let length = 0;
-
- // The <any-value> production matches any sequence of one or more tokens,
- // so long as the sequence ...
- scan:
- do {
- switch (token.type) {
- // ... does not contain <bad-string-token>, <bad-url-token>,
- case BadString:
- case BadUrl:
- break scan;
-
- // ... unmatched <)-token>, <]-token>, or <}-token>,
- case RightCurlyBracket:
- case RightParenthesis:
- case RightSquareBracket:
- if (token.type !== balanceCloseType) {
- break scan;
- }
-
- balanceCloseType = balanceStash.pop();
- break;
-
- case FunctionToken:
- case LeftParenthesis:
- case LeftSquareBracket:
- case LeftCurlyBracket:
- balanceStash.push(balanceCloseType);
- balanceCloseType = balancePair.get(token.type);
- break;
- }
-
- length++;
- } while (token = getNextToken(length));
-
- return length;
-}
-
-// =========================
-// Dimensions
-//
-
-function dimension(type) {
- if (type) {
- type = new Set(type);
- }
-
- return function(token, getNextToken, opts) {
- if (token === null || token.type !== Dimension) {
- return 0;
- }
-
- const numberEnd = consumeNumber(token.value, 0);
-
- // check unit
- if (type !== null) {
- // check for IE postfix hack, i.e. 123px\0 or 123px\9
- const reverseSolidusOffset = token.value.indexOf('\\', numberEnd);
- const unit = reverseSolidusOffset === -1 || !isPostfixIeHack(token.value, reverseSolidusOffset)
- ? token.value.substr(numberEnd)
- : token.value.substring(numberEnd, reverseSolidusOffset);
-
- if (type.has(unit.toLowerCase()) === false) {
- return 0;
- }
- }
-
- // check range if specified
- if (outOfRange(opts, token.value, numberEnd)) {
- return 0;
- }
-
- return 1;
- };
-}
-
-// =========================
-// Percentage
-//
-
-// §5.5. Percentages: the <percentage> type
-// https://drafts.csswg.org/css-values-4/#percentages
-function percentage(token, getNextToken, opts) {
- // ... corresponds to the <percentage-token> production
- if (token === null || token.type !== Percentage) {
- return 0;
- }
-
- // check range if specified
- if (outOfRange(opts, token.value, token.value.length - 1)) {
- return 0;
- }
-
- return 1;
-}
-
-// =========================
-// Numeric
-//
-
-// https://drafts.csswg.org/css-values-4/#numbers
-// The value <zero> represents a literal number with the value 0. Expressions that merely
-// evaluate to a <number> with the value 0 (for example, calc(0)) do not match <zero>;
-// only literal <number-token>s do.
-function zero(next) {
- if (typeof next !== 'function') {
- next = function() {
- return 0;
- };
- }
-
- return function(token, getNextToken, opts) {
- if (token !== null && token.type === NumberToken) {
- if (Number(token.value) === 0) {
- return 1;
- }
- }
-
- return next(token, getNextToken, opts);
- };
-}
-
-// § 5.3. Real Numbers: the <number> type
-// https://drafts.csswg.org/css-values-4/#numbers
-// Number values are denoted by <number>, and represent real numbers, possibly with a fractional component.
-// ... It corresponds to the <number-token> production
-function number(token, getNextToken, opts) {
- if (token === null) {
- return 0;
- }
-
- const numberEnd = consumeNumber(token.value, 0);
- const isNumber = numberEnd === token.value.length;
- if (!isNumber && !isPostfixIeHack(token.value, numberEnd)) {
- return 0;
- }
-
- // check range if specified
- if (outOfRange(opts, token.value, numberEnd)) {
- return 0;
- }
-
- return 1;
-}
-
-// §5.2. Integers: the <integer> type
-// https://drafts.csswg.org/css-values-4/#integers
-function integer(token, getNextToken, opts) {
- // ... corresponds to a subset of the <number-token> production
- if (token === null || token.type !== NumberToken) {
- return 0;
- }
-
- // The first digit of an integer may be immediately preceded by `-` or `+` to indicate the integer’s sign.
- let i = charCodeAt(token.value, 0) === 0x002B || // U+002B PLUS SIGN (+)
- charCodeAt(token.value, 0) === 0x002D ? 1 : 0; // U+002D HYPHEN-MINUS (-)
-
- // When written literally, an integer is one or more decimal digits 0 through 9 ...
- for (; i < token.value.length; i++) {
- if (!isDigit(charCodeAt(token.value, i))) {
- return 0;
- }
- }
-
- // check range if specified
- if (outOfRange(opts, token.value, i)) {
- return 0;
- }
-
- return 1;
-}
-
-// token types
-export const tokenTypes = {
- 'ident-token': tokenType(Ident),
- 'function-token': tokenType(FunctionToken),
- 'at-keyword-token': tokenType(AtKeyword),
- 'hash-token': tokenType(Hash),
- 'string-token': tokenType(StringToken),
- 'bad-string-token': tokenType(BadString),
- 'url-token': tokenType(Url),
- 'bad-url-token': tokenType(BadUrl),
- 'delim-token': tokenType(Delim),
- 'number-token': tokenType(NumberToken),
- 'percentage-token': tokenType(Percentage),
- 'dimension-token': tokenType(Dimension),
- 'whitespace-token': tokenType(WhiteSpace),
- 'CDO-token': tokenType(CDO),
- 'CDC-token': tokenType(CDC),
- 'colon-token': tokenType(Colon),
- 'semicolon-token': tokenType(Semicolon),
- 'comma-token': tokenType(Comma),
- '[-token': tokenType(LeftSquareBracket),
- ']-token': tokenType(RightSquareBracket),
- '(-token': tokenType(LeftParenthesis),
- ')-token': tokenType(RightParenthesis),
- '{-token': tokenType(LeftCurlyBracket),
- '}-token': tokenType(RightCurlyBracket)
-};
-
-// token production types
-export const productionTypes = {
- // token type aliases
- 'string': tokenType(StringToken),
- 'ident': tokenType(Ident),
-
- // percentage
- 'percentage': calc(percentage),
-
- // numeric
- 'zero': zero(),
- 'number': calc(number),
- 'integer': calc(integer),
-
- // complex types
- 'custom-ident': customIdent,
- 'custom-property-name': customPropertyName,
- 'hex-color': hexColor,
- 'id-selector': idSelector, // element( <id-selector> )
- 'an-plus-b': anPlusB,
- 'urange': urange,
- 'declaration-value': declarationValue,
- 'any-value': anyValue
-};
-
-export const unitGroups = [
- 'length',
- 'angle',
- 'time',
- 'frequency',
- 'resolution',
- 'flex',
- 'decibel',
- 'semitones'
-];
-
-// dimensions types depend on units set
-export function createDemensionTypes(units) {
- const {
- angle,
- decibel,
- frequency,
- flex,
- length,
- resolution,
- semitones,
- time
- } = units || {};
-
- return {
- 'dimension': calc(dimension(null)),
- 'angle': calc(dimension(angle)),
- 'decibel': calc(dimension(decibel)),
- 'frequency': calc(dimension(frequency)),
- 'flex': calc(dimension(flex)),
- 'length': calc(zero(dimension(length))),
- 'resolution': calc(dimension(resolution)),
- 'semitones': calc(dimension(semitones)),
- 'time': calc(dimension(time))
- };
-}
-
-export function createGenericTypes(units) {
- return {
- ...tokenTypes,
- ...productionTypes,
- ...createDemensionTypes(units)
- };
-};
diff --git a/node_modules/css-tree/lib/lexer/index.js b/node_modules/css-tree/lib/lexer/index.js
deleted file mode 100644
index 1661b763..00000000
--- a/node_modules/css-tree/lib/lexer/index.js
+++ /dev/null
@@ -1 +0,0 @@
-export { Lexer } from './Lexer.js';
diff --git a/node_modules/css-tree/lib/lexer/match-graph.js b/node_modules/css-tree/lib/lexer/match-graph.js
deleted file mode 100644
index b7677399..00000000
--- a/node_modules/css-tree/lib/lexer/match-graph.js
+++ /dev/null
@@ -1,456 +0,0 @@
-import { parse } from '../definition-syntax/parse.js';
-
-export const MATCH = { type: 'Match' };
-export const MISMATCH = { type: 'Mismatch' };
-export const DISALLOW_EMPTY = { type: 'DisallowEmpty' };
-
-const LEFTPARENTHESIS = 40; // (
-const RIGHTPARENTHESIS = 41; // )
-
-function createCondition(match, thenBranch, elseBranch) {
- // reduce node count
- if (thenBranch === MATCH && elseBranch === MISMATCH) {
- return match;
- }
-
- if (match === MATCH && thenBranch === MATCH && elseBranch === MATCH) {
- return match;
- }
-
- if (match.type === 'If' && match.else === MISMATCH && thenBranch === MATCH) {
- thenBranch = match.then;
- match = match.match;
- }
-
- return {
- type: 'If',
- match,
- then: thenBranch,
- else: elseBranch
- };
-}
-
-function isFunctionType(name) {
- return (
- name.length > 2 &&
- name.charCodeAt(name.length - 2) === LEFTPARENTHESIS &&
- name.charCodeAt(name.length - 1) === RIGHTPARENTHESIS
- );
-}
-
-function isEnumCapatible(term) {
- return (
- term.type === 'Keyword' ||
- term.type === 'AtKeyword' ||
- term.type === 'Function' ||
- term.type === 'Type' && isFunctionType(term.name)
- );
-}
-
-function buildGroupMatchGraph(combinator, terms, atLeastOneTermMatched) {
- switch (combinator) {
- case ' ': {
- // Juxtaposing components means that all of them must occur, in the given order.
- //
- // a b c
- // =
- // match a
- // then match b
- // then match c
- // then MATCH
- // else MISMATCH
- // else MISMATCH
- // else MISMATCH
- let result = MATCH;
-
- for (let i = terms.length - 1; i >= 0; i--) {
- const term = terms[i];
-
- result = createCondition(
- term,
- result,
- MISMATCH
- );
- };
-
- return result;
- }
-
- case '|': {
- // A bar (|) separates two or more alternatives: exactly one of them must occur.
- //
- // a | b | c
- // =
- // match a
- // then MATCH
- // else match b
- // then MATCH
- // else match c
- // then MATCH
- // else MISMATCH
-
- let result = MISMATCH;
- let map = null;
-
- for (let i = terms.length - 1; i >= 0; i--) {
- let term = terms[i];
-
- // reduce sequence of keywords into a Enum
- if (isEnumCapatible(term)) {
- if (map === null && i > 0 && isEnumCapatible(terms[i - 1])) {
- map = Object.create(null);
- result = createCondition(
- {
- type: 'Enum',
- map
- },
- MATCH,
- result
- );
- }
-
- if (map !== null) {
- const key = (isFunctionType(term.name) ? term.name.slice(0, -1) : term.name).toLowerCase();
- if (key in map === false) {
- map[key] = term;
- continue;
- }
- }
- }
-
- map = null;
-
- // create a new conditonal node
- result = createCondition(
- term,
- MATCH,
- result
- );
- };
-
- return result;
- }
-
- case '&&': {
- // A double ampersand (&&) separates two or more components,
- // all of which must occur, in any order.
-
- // Use MatchOnce for groups with a large number of terms,
- // since &&-groups produces at least N!-node trees
- if (terms.length > 5) {
- return {
- type: 'MatchOnce',
- terms,
- all: true
- };
- }
-
- // Use a combination tree for groups with small number of terms
- //
- // a && b && c
- // =
- // match a
- // then [b && c]
- // else match b
- // then [a && c]
- // else match c
- // then [a && b]
- // else MISMATCH
- //
- // a && b
- // =
- // match a
- // then match b
- // then MATCH
- // else MISMATCH
- // else match b
- // then match a
- // then MATCH
- // else MISMATCH
- // else MISMATCH
- let result = MISMATCH;
-
- for (let i = terms.length - 1; i >= 0; i--) {
- const term = terms[i];
- let thenClause;
-
- if (terms.length > 1) {
- thenClause = buildGroupMatchGraph(
- combinator,
- terms.filter(function(newGroupTerm) {
- return newGroupTerm !== term;
- }),
- false
- );
- } else {
- thenClause = MATCH;
- }
-
- result = createCondition(
- term,
- thenClause,
- result
- );
- };
-
- return result;
- }
-
- case '||': {
- // A double bar (||) separates two or more options:
- // one or more of them must occur, in any order.
-
- // Use MatchOnce for groups with a large number of terms,
- // since ||-groups produces at least N!-node trees
- if (terms.length > 5) {
- return {
- type: 'MatchOnce',
- terms,
- all: false
- };
- }
-
- // Use a combination tree for groups with small number of terms
- //
- // a || b || c
- // =
- // match a
- // then [b || c]
- // else match b
- // then [a || c]
- // else match c
- // then [a || b]
- // else MISMATCH
- //
- // a || b
- // =
- // match a
- // then match b
- // then MATCH
- // else MATCH
- // else match b
- // then match a
- // then MATCH
- // else MATCH
- // else MISMATCH
- let result = atLeastOneTermMatched ? MATCH : MISMATCH;
-
- for (let i = terms.length - 1; i >= 0; i--) {
- const term = terms[i];
- let thenClause;
-
- if (terms.length > 1) {
- thenClause = buildGroupMatchGraph(
- combinator,
- terms.filter(function(newGroupTerm) {
- return newGroupTerm !== term;
- }),
- true
- );
- } else {
- thenClause = MATCH;
- }
-
- result = createCondition(
- term,
- thenClause,
- result
- );
- };
-
- return result;
- }
- }
-}
-
-function buildMultiplierMatchGraph(node) {
- let result = MATCH;
- let matchTerm = buildMatchGraphInternal(node.term);
-
- if (node.max === 0) {
- // disable repeating of empty match to prevent infinite loop
- matchTerm = createCondition(
- matchTerm,
- DISALLOW_EMPTY,
- MISMATCH
- );
-
- // an occurrence count is not limited, make a cycle;
- // to collect more terms on each following matching mismatch
- result = createCondition(
- matchTerm,
- null, // will be a loop
- MISMATCH
- );
-
- result.then = createCondition(
- MATCH,
- MATCH,
- result // make a loop
- );
-
- if (node.comma) {
- result.then.else = createCondition(
- { type: 'Comma', syntax: node },
- result,
- MISMATCH
- );
- }
- } else {
- // create a match node chain for [min .. max] interval with optional matches
- for (let i = node.min || 1; i <= node.max; i++) {
- if (node.comma && result !== MATCH) {
- result = createCondition(
- { type: 'Comma', syntax: node },
- result,
- MISMATCH
- );
- }
-
- result = createCondition(
- matchTerm,
- createCondition(
- MATCH,
- MATCH,
- result
- ),
- MISMATCH
- );
- }
- }
-
- if (node.min === 0) {
- // allow zero match
- result = createCondition(
- MATCH,
- MATCH,
- result
- );
- } else {
- // create a match node chain to collect [0 ... min - 1] required matches
- for (let i = 0; i < node.min - 1; i++) {
- if (node.comma && result !== MATCH) {
- result = createCondition(
- { type: 'Comma', syntax: node },
- result,
- MISMATCH
- );
- }
-
- result = createCondition(
- matchTerm,
- result,
- MISMATCH
- );
- }
- }
-
- return result;
-}
-
-function buildMatchGraphInternal(node) {
- if (typeof node === 'function') {
- return {
- type: 'Generic',
- fn: node
- };
- }
-
- switch (node.type) {
- case 'Group': {
- let result = buildGroupMatchGraph(
- node.combinator,
- node.terms.map(buildMatchGraphInternal),
- false
- );
-
- if (node.disallowEmpty) {
- result = createCondition(
- result,
- DISALLOW_EMPTY,
- MISMATCH
- );
- }
-
- return result;
- }
-
- case 'Multiplier':
- return buildMultiplierMatchGraph(node);
-
- case 'Type':
- case 'Property':
- return {
- type: node.type,
- name: node.name,
- syntax: node
- };
-
- case 'Keyword':
- return {
- type: node.type,
- name: node.name.toLowerCase(),
- syntax: node
- };
-
- case 'AtKeyword':
- return {
- type: node.type,
- name: '@' + node.name.toLowerCase(),
- syntax: node
- };
-
- case 'Function':
- return {
- type: node.type,
- name: node.name.toLowerCase() + '(',
- syntax: node
- };
-
- case 'String':
- // convert a one char length String to a Token
- if (node.value.length === 3) {
- return {
- type: 'Token',
- value: node.value.charAt(1),
- syntax: node
- };
- }
-
- // otherwise use it as is
- return {
- type: node.type,
- value: node.value.substr(1, node.value.length - 2).replace(/\\'/g, '\''),
- syntax: node
- };
-
- case 'Token':
- return {
- type: node.type,
- value: node.value,
- syntax: node
- };
-
- case 'Comma':
- return {
- type: node.type,
- syntax: node
- };
-
- default:
- throw new Error('Unknown node type:', node.type);
- }
-}
-
-export function buildMatchGraph(syntaxTree, ref) {
- if (typeof syntaxTree === 'string') {
- syntaxTree = parse(syntaxTree);
- }
-
- return {
- type: 'MatchGraph',
- match: buildMatchGraphInternal(syntaxTree),
- syntax: ref || null,
- source: syntaxTree
- };
-}
diff --git a/node_modules/css-tree/lib/lexer/match.js b/node_modules/css-tree/lib/lexer/match.js
deleted file mode 100644
index 9efe5ca9..00000000
--- a/node_modules/css-tree/lib/lexer/match.js
+++ /dev/null
@@ -1,630 +0,0 @@
-import { MATCH, MISMATCH, DISALLOW_EMPTY } from './match-graph.js';
-import * as TYPE from '../tokenizer/types.js';
-
-const { hasOwnProperty } = Object.prototype;
-const STUB = 0;
-const TOKEN = 1;
-const OPEN_SYNTAX = 2;
-const CLOSE_SYNTAX = 3;
-
-const EXIT_REASON_MATCH = 'Match';
-const EXIT_REASON_MISMATCH = 'Mismatch';
-const EXIT_REASON_ITERATION_LIMIT = 'Maximum iteration number exceeded (please fill an issue on https://github.com/csstree/csstree/issues)';
-
-const ITERATION_LIMIT = 15000;
-export let totalIterationCount = 0;
-
-function reverseList(list) {
- let prev = null;
- let next = null;
- let item = list;
-
- while (item !== null) {
- next = item.prev;
- item.prev = prev;
- prev = item;
- item = next;
- }
-
- return prev;
-}
-
-function areStringsEqualCaseInsensitive(testStr, referenceStr) {
- if (testStr.length !== referenceStr.length) {
- return false;
- }
-
- for (let i = 0; i < testStr.length; i++) {
- const referenceCode = referenceStr.charCodeAt(i);
- let testCode = testStr.charCodeAt(i);
-
- // testCode.toLowerCase() for U+0041 LATIN CAPITAL LETTER A (A) .. U+005A LATIN CAPITAL LETTER Z (Z).
- if (testCode >= 0x0041 && testCode <= 0x005A) {
- testCode = testCode | 32;
- }
-
- if (testCode !== referenceCode) {
- return false;
- }
- }
-
- return true;
-}
-
-function isContextEdgeDelim(token) {
- if (token.type !== TYPE.Delim) {
- return false;
- }
-
- // Fix matching for unicode-range: U+30??, U+FF00-FF9F
- // Probably we need to check out previous match instead
- return token.value !== '?';
-}
-
-function isCommaContextStart(token) {
- if (token === null) {
- return true;
- }
-
- return (
- token.type === TYPE.Comma ||
- token.type === TYPE.Function ||
- token.type === TYPE.LeftParenthesis ||
- token.type === TYPE.LeftSquareBracket ||
- token.type === TYPE.LeftCurlyBracket ||
- isContextEdgeDelim(token)
- );
-}
-
-function isCommaContextEnd(token) {
- if (token === null) {
- return true;
- }
-
- return (
- token.type === TYPE.RightParenthesis ||
- token.type === TYPE.RightSquareBracket ||
- token.type === TYPE.RightCurlyBracket ||
- (token.type === TYPE.Delim && token.value === '/')
- );
-}
-
-function internalMatch(tokens, state, syntaxes) {
- function moveToNextToken() {
- do {
- tokenIndex++;
- token = tokenIndex < tokens.length ? tokens[tokenIndex] : null;
- } while (token !== null && (token.type === TYPE.WhiteSpace || token.type === TYPE.Comment));
- }
-
- function getNextToken(offset) {
- const nextIndex = tokenIndex + offset;
-
- return nextIndex < tokens.length ? tokens[nextIndex] : null;
- }
-
- function stateSnapshotFromSyntax(nextState, prev) {
- return {
- nextState,
- matchStack,
- syntaxStack,
- thenStack,
- tokenIndex,
- prev
- };
- }
-
- function pushThenStack(nextState) {
- thenStack = {
- nextState,
- matchStack,
- syntaxStack,
- prev: thenStack
- };
- }
-
- function pushElseStack(nextState) {
- elseStack = stateSnapshotFromSyntax(nextState, elseStack);
- }
-
- function addTokenToMatch() {
- matchStack = {
- type: TOKEN,
- syntax: state.syntax,
- token,
- prev: matchStack
- };
-
- moveToNextToken();
- syntaxStash = null;
-
- if (tokenIndex > longestMatch) {
- longestMatch = tokenIndex;
- }
- }
-
- function openSyntax() {
- syntaxStack = {
- syntax: state.syntax,
- opts: state.syntax.opts || (syntaxStack !== null && syntaxStack.opts) || null,
- prev: syntaxStack
- };
-
- matchStack = {
- type: OPEN_SYNTAX,
- syntax: state.syntax,
- token: matchStack.token,
- prev: matchStack
- };
- }
-
- function closeSyntax() {
- if (matchStack.type === OPEN_SYNTAX) {
- matchStack = matchStack.prev;
- } else {
- matchStack = {
- type: CLOSE_SYNTAX,
- syntax: syntaxStack.syntax,
- token: matchStack.token,
- prev: matchStack
- };
- }
-
- syntaxStack = syntaxStack.prev;
- }
-
- let syntaxStack = null;
- let thenStack = null;
- let elseStack = null;
-
- // null – stashing allowed, nothing stashed
- // false – stashing disabled, nothing stashed
- // anithing else – fail stashable syntaxes, some syntax stashed
- let syntaxStash = null;
-
- let iterationCount = 0; // count iterations and prevent infinite loop
- let exitReason = null;
-
- let token = null;
- let tokenIndex = -1;
- let longestMatch = 0;
- let matchStack = {
- type: STUB,
- syntax: null,
- token: null,
- prev: null
- };
-
- moveToNextToken();
-
- while (exitReason === null && ++iterationCount < ITERATION_LIMIT) {
- // function mapList(list, fn) {
- // const result = [];
- // while (list) {
- // result.unshift(fn(list));
- // list = list.prev;
- // }
- // return result;
- // }
- // console.log('--\n',
- // '#' + iterationCount,
- // require('util').inspect({
- // match: mapList(matchStack, x => x.type === TOKEN ? x.token && x.token.value : x.syntax ? ({ [OPEN_SYNTAX]: '<', [CLOSE_SYNTAX]: '</' }[x.type] || x.type) + '!' + x.syntax.name : null),
- // token: token && token.value,
- // tokenIndex,
- // syntax: syntax.type + (syntax.id ? ' #' + syntax.id : '')
- // }, { depth: null })
- // );
- switch (state.type) {
- case 'Match':
- if (thenStack === null) {
- // turn to MISMATCH when some tokens left unmatched
- if (token !== null) {
- // doesn't mismatch if just one token left and it's an IE hack
- if (tokenIndex !== tokens.length - 1 || (token.value !== '\\0' && token.value !== '\\9')) {
- state = MISMATCH;
- break;
- }
- }
-
- // break the main loop, return a result - MATCH
- exitReason = EXIT_REASON_MATCH;
- break;
- }
-
- // go to next syntax (`then` branch)
- state = thenStack.nextState;
-
- // check match is not empty
- if (state === DISALLOW_EMPTY) {
- if (thenStack.matchStack === matchStack) {
- state = MISMATCH;
- break;
- } else {
- state = MATCH;
- }
- }
-
- // close syntax if needed
- while (thenStack.syntaxStack !== syntaxStack) {
- closeSyntax();
- }
-
- // pop stack
- thenStack = thenStack.prev;
- break;
-
- case 'Mismatch':
- // when some syntax is stashed
- if (syntaxStash !== null && syntaxStash !== false) {
- // there is no else branches or a branch reduce match stack
- if (elseStack === null || tokenIndex > elseStack.tokenIndex) {
- // restore state from the stash
- elseStack = syntaxStash;
- syntaxStash = false; // disable stashing
- }
- } else if (elseStack === null) {
- // no else branches -> break the main loop
- // return a result - MISMATCH
- exitReason = EXIT_REASON_MISMATCH;
- break;
- }
-
- // go to next syntax (`else` branch)
- state = elseStack.nextState;
-
- // restore all the rest stack states
- thenStack = elseStack.thenStack;
- syntaxStack = elseStack.syntaxStack;
- matchStack = elseStack.matchStack;
- tokenIndex = elseStack.tokenIndex;
- token = tokenIndex < tokens.length ? tokens[tokenIndex] : null;
-
- // pop stack
- elseStack = elseStack.prev;
- break;
-
- case 'MatchGraph':
- state = state.match;
- break;
-
- case 'If':
- // IMPORTANT: else stack push must go first,
- // since it stores the state of thenStack before changes
- if (state.else !== MISMATCH) {
- pushElseStack(state.else);
- }
-
- if (state.then !== MATCH) {
- pushThenStack(state.then);
- }
-
- state = state.match;
- break;
-
- case 'MatchOnce':
- state = {
- type: 'MatchOnceBuffer',
- syntax: state,
- index: 0,
- mask: 0
- };
- break;
-
- case 'MatchOnceBuffer': {
- const terms = state.syntax.terms;
-
- if (state.index === terms.length) {
- // no matches at all or it's required all terms to be matched
- if (state.mask === 0 || state.syntax.all) {
- state = MISMATCH;
- break;
- }
-
- // a partial match is ok
- state = MATCH;
- break;
- }
-
- // all terms are matched
- if (state.mask === (1 << terms.length) - 1) {
- state = MATCH;
- break;
- }
-
- for (; state.index < terms.length; state.index++) {
- const matchFlag = 1 << state.index;
-
- if ((state.mask & matchFlag) === 0) {
- // IMPORTANT: else stack push must go first,
- // since it stores the state of thenStack before changes
- pushElseStack(state);
- pushThenStack({
- type: 'AddMatchOnce',
- syntax: state.syntax,
- mask: state.mask | matchFlag
- });
-
- // match
- state = terms[state.index++];
- break;
- }
- }
- break;
- }
-
- case 'AddMatchOnce':
- state = {
- type: 'MatchOnceBuffer',
- syntax: state.syntax,
- index: 0,
- mask: state.mask
- };
- break;
-
- case 'Enum':
- if (token !== null) {
- let name = token.value.toLowerCase();
-
- // drop \0 and \9 hack from keyword name
- if (name.indexOf('\\') !== -1) {
- name = name.replace(/\\[09].*$/, '');
- }
-
- if (hasOwnProperty.call(state.map, name)) {
- state = state.map[name];
- break;
- }
- }
-
- state = MISMATCH;
- break;
-
- case 'Generic': {
- const opts = syntaxStack !== null ? syntaxStack.opts : null;
- const lastTokenIndex = tokenIndex + Math.floor(state.fn(token, getNextToken, opts));
-
- if (!isNaN(lastTokenIndex) && lastTokenIndex > tokenIndex) {
- while (tokenIndex < lastTokenIndex) {
- addTokenToMatch();
- }
-
- state = MATCH;
- } else {
- state = MISMATCH;
- }
-
- break;
- }
-
- case 'Type':
- case 'Property': {
- const syntaxDict = state.type === 'Type' ? 'types' : 'properties';
- const dictSyntax = hasOwnProperty.call(syntaxes, syntaxDict) ? syntaxes[syntaxDict][state.name] : null;
-
- if (!dictSyntax || !dictSyntax.match) {
- throw new Error(
- 'Bad syntax reference: ' +
- (state.type === 'Type'
- ? '<' + state.name + '>'
- : '<\'' + state.name + '\'>')
- );
- }
-
- // stash a syntax for types with low priority
- if (syntaxStash !== false && token !== null && state.type === 'Type') {
- const lowPriorityMatching =
- // https://drafts.csswg.org/css-values-4/#custom-idents
- // When parsing positionally-ambiguous keywords in a property value, a <custom-ident> production
- // can only claim the keyword if no other unfulfilled production can claim it.
- (state.name === 'custom-ident' && token.type === TYPE.Ident) ||
-
- // https://drafts.csswg.org/css-values-4/#lengths
- // ... if a `0` could be parsed as either a <number> or a <length> in a property (such as line-height),
- // it must parse as a <number>
- (state.name === 'length' && token.value === '0');
-
- if (lowPriorityMatching) {
- if (syntaxStash === null) {
- syntaxStash = stateSnapshotFromSyntax(state, elseStack);
- }
-
- state = MISMATCH;
- break;
- }
- }
-
- openSyntax();
- state = dictSyntax.match;
- break;
- }
-
- case 'Keyword': {
- const name = state.name;
-
- if (token !== null) {
- let keywordName = token.value;
-
- // drop \0 and \9 hack from keyword name
- if (keywordName.indexOf('\\') !== -1) {
- keywordName = keywordName.replace(/\\[09].*$/, '');
- }
-
- if (areStringsEqualCaseInsensitive(keywordName, name)) {
- addTokenToMatch();
- state = MATCH;
- break;
- }
- }
-
- state = MISMATCH;
- break;
- }
-
- case 'AtKeyword':
- case 'Function':
- if (token !== null && areStringsEqualCaseInsensitive(token.value, state.name)) {
- addTokenToMatch();
- state = MATCH;
- break;
- }
-
- state = MISMATCH;
- break;
-
- case 'Token':
- if (token !== null && token.value === state.value) {
- addTokenToMatch();
- state = MATCH;
- break;
- }
-
- state = MISMATCH;
- break;
-
- case 'Comma':
- if (token !== null && token.type === TYPE.Comma) {
- if (isCommaContextStart(matchStack.token)) {
- state = MISMATCH;
- } else {
- addTokenToMatch();
- state = isCommaContextEnd(token) ? MISMATCH : MATCH;
- }
- } else {
- state = isCommaContextStart(matchStack.token) || isCommaContextEnd(token) ? MATCH : MISMATCH;
- }
-
- break;
-
- case 'String':
- let string = '';
- let lastTokenIndex = tokenIndex;
-
- for (; lastTokenIndex < tokens.length && string.length < state.value.length; lastTokenIndex++) {
- string += tokens[lastTokenIndex].value;
- }
-
- if (areStringsEqualCaseInsensitive(string, state.value)) {
- while (tokenIndex < lastTokenIndex) {
- addTokenToMatch();
- }
-
- state = MATCH;
- } else {
- state = MISMATCH;
- }
-
- break;
-
- default:
- throw new Error('Unknown node type: ' + state.type);
- }
- }
-
- totalIterationCount += iterationCount;
-
- switch (exitReason) {
- case null:
- console.warn('[csstree-match] BREAK after ' + ITERATION_LIMIT + ' iterations');
- exitReason = EXIT_REASON_ITERATION_LIMIT;
- matchStack = null;
- break;
-
- case EXIT_REASON_MATCH:
- while (syntaxStack !== null) {
- closeSyntax();
- }
- break;
-
- default:
- matchStack = null;
- }
-
- return {
- tokens,
- reason: exitReason,
- iterations: iterationCount,
- match: matchStack,
- longestMatch
- };
-}
-
-export function matchAsList(tokens, matchGraph, syntaxes) {
- const matchResult = internalMatch(tokens, matchGraph, syntaxes || {});
-
- if (matchResult.match !== null) {
- let item = reverseList(matchResult.match).prev;
-
- matchResult.match = [];
-
- while (item !== null) {
- switch (item.type) {
- case OPEN_SYNTAX:
- case CLOSE_SYNTAX:
- matchResult.match.push({
- type: item.type,
- syntax: item.syntax
- });
- break;
-
- default:
- matchResult.match.push({
- token: item.token.value,
- node: item.token.node
- });
- break;
- }
-
- item = item.prev;
- }
- }
-
- return matchResult;
-}
-
-export function matchAsTree(tokens, matchGraph, syntaxes) {
- const matchResult = internalMatch(tokens, matchGraph, syntaxes || {});
-
- if (matchResult.match === null) {
- return matchResult;
- }
-
- let item = matchResult.match;
- let host = matchResult.match = {
- syntax: matchGraph.syntax || null,
- match: []
- };
- const hostStack = [host];
-
- // revert a list and start with 2nd item since 1st is a stub item
- item = reverseList(item).prev;
-
- // build a tree
- while (item !== null) {
- switch (item.type) {
- case OPEN_SYNTAX:
- host.match.push(host = {
- syntax: item.syntax,
- match: []
- });
- hostStack.push(host);
- break;
-
- case CLOSE_SYNTAX:
- hostStack.pop();
- host = hostStack[hostStack.length - 1];
- break;
-
- default:
- host.match.push({
- syntax: item.syntax || null,
- token: item.token.value,
- node: item.token.node
- });
- }
-
- item = item.prev;
- }
-
- return matchResult;
-}
diff --git a/node_modules/css-tree/lib/lexer/prepare-tokens.js b/node_modules/css-tree/lib/lexer/prepare-tokens.js
deleted file mode 100644
index 4243fa88..00000000
--- a/node_modules/css-tree/lib/lexer/prepare-tokens.js
+++ /dev/null
@@ -1,50 +0,0 @@
-import { tokenize } from '../tokenizer/index.js';
-
-const astToTokens = {
- decorator(handlers) {
- const tokens = [];
- let curNode = null;
-
- return {
- ...handlers,
- node(node) {
- const tmp = curNode;
- curNode = node;
- handlers.node.call(this, node);
- curNode = tmp;
- },
- emit(value, type, auto) {
- tokens.push({
- type,
- value,
- node: auto ? null : curNode
- });
- },
- result() {
- return tokens;
- }
- };
- }
-};
-
-function stringToTokens(str) {
- const tokens = [];
-
- tokenize(str, (type, start, end) =>
- tokens.push({
- type,
- value: str.slice(start, end),
- node: null
- })
- );
-
- return tokens;
-}
-
-export default function(value, syntax) {
- if (typeof value === 'string') {
- return stringToTokens(value);
- }
-
- return syntax.generate(value, astToTokens);
-};
diff --git a/node_modules/css-tree/lib/lexer/search.js b/node_modules/css-tree/lib/lexer/search.js
deleted file mode 100644
index ee68e2d6..00000000
--- a/node_modules/css-tree/lib/lexer/search.js
+++ /dev/null
@@ -1,61 +0,0 @@
-import { List } from '../utils/List.js';
-
-function getFirstMatchNode(matchNode) {
- if ('node' in matchNode) {
- return matchNode.node;
- }
-
- return getFirstMatchNode(matchNode.match[0]);
-}
-
-function getLastMatchNode(matchNode) {
- if ('node' in matchNode) {
- return matchNode.node;
- }
-
- return getLastMatchNode(matchNode.match[matchNode.match.length - 1]);
-}
-
-export function matchFragments(lexer, ast, match, type, name) {
- function findFragments(matchNode) {
- if (matchNode.syntax !== null &&
- matchNode.syntax.type === type &&
- matchNode.syntax.name === name) {
- const start = getFirstMatchNode(matchNode);
- const end = getLastMatchNode(matchNode);
-
- lexer.syntax.walk(ast, function(node, item, list) {
- if (node === start) {
- const nodes = new List();
-
- do {
- nodes.appendData(item.data);
-
- if (item.data === end) {
- break;
- }
-
- item = item.next;
- } while (item !== null);
-
- fragments.push({
- parent: list,
- nodes
- });
- }
- });
- }
-
- if (Array.isArray(matchNode.match)) {
- matchNode.match.forEach(findFragments);
- }
- }
-
- const fragments = [];
-
- if (match.matched !== null) {
- findFragments(match.matched);
- }
-
- return fragments;
-}
diff --git a/node_modules/css-tree/lib/lexer/structure.js b/node_modules/css-tree/lib/lexer/structure.js
deleted file mode 100644
index 0c8ee62f..00000000
--- a/node_modules/css-tree/lib/lexer/structure.js
+++ /dev/null
@@ -1,164 +0,0 @@
-import { List } from '../utils/List.js';
-
-const { hasOwnProperty } = Object.prototype;
-
-function isValidNumber(value) {
- // Number.isInteger(value) && value >= 0
- return (
- typeof value === 'number' &&
- isFinite(value) &&
- Math.floor(value) === value &&
- value >= 0
- );
-}
-
-function isValidLocation(loc) {
- return (
- Boolean(loc) &&
- isValidNumber(loc.offset) &&
- isValidNumber(loc.line) &&
- isValidNumber(loc.column)
- );
-}
-
-function createNodeStructureChecker(type, fields) {
- return function checkNode(node, warn) {
- if (!node || node.constructor !== Object) {
- return warn(node, 'Type of node should be an Object');
- }
-
- for (let key in node) {
- let valid = true;
-
- if (hasOwnProperty.call(node, key) === false) {
- continue;
- }
-
- if (key === 'type') {
- if (node.type !== type) {
- warn(node, 'Wrong node type `' + node.type + '`, expected `' + type + '`');
- }
- } else if (key === 'loc') {
- if (node.loc === null) {
- continue;
- } else if (node.loc && node.loc.constructor === Object) {
- if (typeof node.loc.source !== 'string') {
- key += '.source';
- } else if (!isValidLocation(node.loc.start)) {
- key += '.start';
- } else if (!isValidLocation(node.loc.end)) {
- key += '.end';
- } else {
- continue;
- }
- }
-
- valid = false;
- } else if (fields.hasOwnProperty(key)) {
- valid = false;
-
- for (let i = 0; !valid && i < fields[key].length; i++) {
- const fieldType = fields[key][i];
-
- switch (fieldType) {
- case String:
- valid = typeof node[key] === 'string';
- break;
-
- case Boolean:
- valid = typeof node[key] === 'boolean';
- break;
-
- case null:
- valid = node[key] === null;
- break;
-
- default:
- if (typeof fieldType === 'string') {
- valid = node[key] && node[key].type === fieldType;
- } else if (Array.isArray(fieldType)) {
- valid = node[key] instanceof List;
- }
- }
- }
- } else {
- warn(node, 'Unknown field `' + key + '` for ' + type + ' node type');
- }
-
- if (!valid) {
- warn(node, 'Bad value for `' + type + '.' + key + '`');
- }
- }
-
- for (const key in fields) {
- if (hasOwnProperty.call(fields, key) &&
- hasOwnProperty.call(node, key) === false) {
- warn(node, 'Field `' + type + '.' + key + '` is missed');
- }
- }
- };
-}
-
-function processStructure(name, nodeType) {
- const structure = nodeType.structure;
- const fields = {
- type: String,
- loc: true
- };
- const docs = {
- type: '"' + name + '"'
- };
-
- for (const key in structure) {
- if (hasOwnProperty.call(structure, key) === false) {
- continue;
- }
-
- const docsTypes = [];
- const fieldTypes = fields[key] = Array.isArray(structure[key])
- ? structure[key].slice()
- : [structure[key]];
-
- for (let i = 0; i < fieldTypes.length; i++) {
- const fieldType = fieldTypes[i];
- if (fieldType === String || fieldType === Boolean) {
- docsTypes.push(fieldType.name);
- } else if (fieldType === null) {
- docsTypes.push('null');
- } else if (typeof fieldType === 'string') {
- docsTypes.push('<' + fieldType + '>');
- } else if (Array.isArray(fieldType)) {
- docsTypes.push('List'); // TODO: use type enum
- } else {
- throw new Error('Wrong value `' + fieldType + '` in `' + name + '.' + key + '` structure definition');
- }
- }
-
- docs[key] = docsTypes.join(' | ');
- }
-
- return {
- docs,
- check: createNodeStructureChecker(name, fields)
- };
-}
-
-export function getStructureFromConfig(config) {
- const structure = {};
-
- if (config.node) {
- for (const name in config.node) {
- if (hasOwnProperty.call(config.node, name)) {
- const nodeType = config.node[name];
-
- if (nodeType.structure) {
- structure[name] = processStructure(name, nodeType);
- } else {
- throw new Error('Missed `structure` field in `' + name + '` node type definition');
- }
- }
- }
- }
-
- return structure;
-};
diff --git a/node_modules/css-tree/lib/lexer/trace.js b/node_modules/css-tree/lib/lexer/trace.js
deleted file mode 100644
index 959813c5..00000000
--- a/node_modules/css-tree/lib/lexer/trace.js
+++ /dev/null
@@ -1,66 +0,0 @@
-export function getTrace(node) {
- function shouldPutToTrace(syntax) {
- if (syntax === null) {
- return false;
- }
-
- return (
- syntax.type === 'Type' ||
- syntax.type === 'Property' ||
- syntax.type === 'Keyword'
- );
- }
-
- function hasMatch(matchNode) {
- if (Array.isArray(matchNode.match)) {
- // use for-loop for better perfomance
- for (let i = 0; i < matchNode.match.length; i++) {
- if (hasMatch(matchNode.match[i])) {
- if (shouldPutToTrace(matchNode.syntax)) {
- result.unshift(matchNode.syntax);
- }
-
- return true;
- }
- }
- } else if (matchNode.node === node) {
- result = shouldPutToTrace(matchNode.syntax)
- ? [matchNode.syntax]
- : [];
-
- return true;
- }
-
- return false;
- }
-
- let result = null;
-
- if (this.matched !== null) {
- hasMatch(this.matched);
- }
-
- return result;
-}
-
-export function isType(node, type) {
- return testNode(this, node, match => match.type === 'Type' && match.name === type);
-}
-
-export function isProperty(node, property) {
- return testNode(this, node, match => match.type === 'Property' && match.name === property);
-}
-
-export function isKeyword(node) {
- return testNode(this, node, match => match.type === 'Keyword');
-}
-
-function testNode(match, node, fn) {
- const trace = getTrace.call(match, node);
-
- if (trace === null) {
- return false;
- }
-
- return trace.some(fn);
-}
diff --git a/node_modules/css-tree/lib/lexer/units.js b/node_modules/css-tree/lib/lexer/units.js
deleted file mode 100644
index 88b1f691..00000000
--- a/node_modules/css-tree/lib/lexer/units.js
+++ /dev/null
@@ -1,27 +0,0 @@
-export const length = [
- // absolute length units https://www.w3.org/TR/css-values-3/#lengths
- 'cm', 'mm', 'q', 'in', 'pt', 'pc', 'px',
- // font-relative length units https://drafts.csswg.org/css-values-4/#font-relative-lengths
- 'em', 'rem',
- 'ex', 'rex',
- 'cap', 'rcap',
- 'ch', 'rch',
- 'ic', 'ric',
- 'lh', 'rlh',
- // viewport-percentage lengths https://drafts.csswg.org/css-values-4/#viewport-relative-lengths
- 'vw', 'svw', 'lvw', 'dvw',
- 'vh', 'svh', 'lvh', 'dvh',
- 'vi', 'svi', 'lvi', 'dvi',
- 'vb', 'svb', 'lvb', 'dvb',
- 'vmin', 'svmin', 'lvmin', 'dvmin',
- 'vmax', 'svmax', 'lvmax', 'dvmax',
- // container relative lengths https://drafts.csswg.org/css-contain-3/#container-lengths
- 'cqw', 'cqh', 'cqi', 'cqb', 'cqmin', 'cqmax'
-];
-export const angle = ['deg', 'grad', 'rad', 'turn']; // https://www.w3.org/TR/css-values-3/#angles
-export const time = ['s', 'ms']; // https://www.w3.org/TR/css-values-3/#time
-export const frequency = ['hz', 'khz']; // https://www.w3.org/TR/css-values-3/#frequency
-export const resolution = ['dpi', 'dpcm', 'dppx', 'x']; // https://www.w3.org/TR/css-values-3/#resolution
-export const flex = ['fr']; // https://drafts.csswg.org/css-grid/#fr-unit
-export const decibel = ['db']; // https://www.w3.org/TR/css3-speech/#mixing-props-voice-volume
-export const semitones = ['st']; // https://www.w3.org/TR/css3-speech/#voice-props-voice-pitch
diff --git a/node_modules/css-tree/lib/parser/SyntaxError.js b/node_modules/css-tree/lib/parser/SyntaxError.js
deleted file mode 100644
index 324b67e2..00000000
--- a/node_modules/css-tree/lib/parser/SyntaxError.js
+++ /dev/null
@@ -1,65 +0,0 @@
-import { createCustomError } from '../utils/create-custom-error.js';
-
-const MAX_LINE_LENGTH = 100;
-const OFFSET_CORRECTION = 60;
-const TAB_REPLACEMENT = ' ';
-
-function sourceFragment({ source, line, column }, extraLines) {
- function processLines(start, end) {
- return lines
- .slice(start, end)
- .map((line, idx) =>
- String(start + idx + 1).padStart(maxNumLength) + ' |' + line
- ).join('\n');
- }
-
- const lines = source.split(/\r\n?|\n|\f/);
- const startLine = Math.max(1, line - extraLines) - 1;
- const endLine = Math.min(line + extraLines, lines.length + 1);
- const maxNumLength = Math.max(4, String(endLine).length) + 1;
- let cutLeft = 0;
-
- // column correction according to replaced tab before column
- column += (TAB_REPLACEMENT.length - 1) * (lines[line - 1].substr(0, column - 1).match(/\t/g) || []).length;
-
- if (column > MAX_LINE_LENGTH) {
- cutLeft = column - OFFSET_CORRECTION + 3;
- column = OFFSET_CORRECTION - 2;
- }
-
- for (let i = startLine; i <= endLine; i++) {
- if (i >= 0 && i < lines.length) {
- lines[i] = lines[i].replace(/\t/g, TAB_REPLACEMENT);
- lines[i] =
- (cutLeft > 0 && lines[i].length > cutLeft ? '\u2026' : '') +
- lines[i].substr(cutLeft, MAX_LINE_LENGTH - 2) +
- (lines[i].length > cutLeft + MAX_LINE_LENGTH - 1 ? '\u2026' : '');
- }
- }
-
- return [
- processLines(startLine, line),
- new Array(column + maxNumLength + 2).join('-') + '^',
- processLines(line, endLine)
- ].filter(Boolean).join('\n');
-}
-
-export function SyntaxError(message, source, offset, line, column) {
- const error = Object.assign(createCustomError('SyntaxError', message), {
- source,
- offset,
- line,
- column,
- sourceFragment(extraLines) {
- return sourceFragment({ source, line, column }, isNaN(extraLines) ? 0 : extraLines);
- },
- get formattedMessage() {
- return (
- `Parse error: ${message}\n` +
- sourceFragment({ source, line, column }, 2)
- );
- }
- });
-
- return error;
-}
diff --git a/node_modules/css-tree/lib/parser/create.js b/node_modules/css-tree/lib/parser/create.js
deleted file mode 100644
index 3cd3df11..00000000
--- a/node_modules/css-tree/lib/parser/create.js
+++ /dev/null
@@ -1,346 +0,0 @@
-import { List } from '../utils/List.js';
-import { SyntaxError } from './SyntaxError.js';
-import {
- tokenize,
- OffsetToLocation,
- TokenStream,
- tokenNames,
-
- consumeNumber,
- findWhiteSpaceStart,
- cmpChar,
- cmpStr,
-
- WhiteSpace,
- Comment,
- Ident,
- Function as FunctionToken,
- Url,
- Hash,
- Percentage,
- Number as NumberToken
-} from '../tokenizer/index.js';
-import { readSequence } from './sequence.js';
-
-const NOOP = () => {};
-const EXCLAMATIONMARK = 0x0021; // U+0021 EXCLAMATION MARK (!)
-const NUMBERSIGN = 0x0023; // U+0023 NUMBER SIGN (#)
-const SEMICOLON = 0x003B; // U+003B SEMICOLON (;)
-const LEFTCURLYBRACKET = 0x007B; // U+007B LEFT CURLY BRACKET ({)
-const NULL = 0;
-
-function createParseContext(name) {
- return function() {
- return this[name]();
- };
-}
-
-function fetchParseValues(dict) {
- const result = Object.create(null);
-
- for (const name in dict) {
- const item = dict[name];
- const fn = item.parse || item;
-
- if (fn) {
- result[name] = fn;
- }
- }
-
- return result;
-}
-
-function processConfig(config) {
- const parseConfig = {
- context: Object.create(null),
- scope: Object.assign(Object.create(null), config.scope),
- atrule: fetchParseValues(config.atrule),
- pseudo: fetchParseValues(config.pseudo),
- node: fetchParseValues(config.node)
- };
-
- for (const name in config.parseContext) {
- switch (typeof config.parseContext[name]) {
- case 'function':
- parseConfig.context[name] = config.parseContext[name];
- break;
-
- case 'string':
- parseConfig.context[name] = createParseContext(config.parseContext[name]);
- break;
- }
- }
-
- return {
- config: parseConfig,
- ...parseConfig,
- ...parseConfig.node
- };
-}
-
-export function createParser(config) {
- let source = '';
- let filename = '<unknown>';
- let needPositions = false;
- let onParseError = NOOP;
- let onParseErrorThrow = false;
-
- const locationMap = new OffsetToLocation();
- const parser = Object.assign(new TokenStream(), processConfig(config || {}), {
- parseAtrulePrelude: true,
- parseRulePrelude: true,
- parseValue: true,
- parseCustomProperty: false,
-
- readSequence,
-
- consumeUntilBalanceEnd: () => 0,
- consumeUntilLeftCurlyBracket(code) {
- return code === LEFTCURLYBRACKET ? 1 : 0;
- },
- consumeUntilLeftCurlyBracketOrSemicolon(code) {
- return code === LEFTCURLYBRACKET || code === SEMICOLON ? 1 : 0;
- },
- consumeUntilExclamationMarkOrSemicolon(code) {
- return code === EXCLAMATIONMARK || code === SEMICOLON ? 1 : 0;
- },
- consumeUntilSemicolonIncluded(code) {
- return code === SEMICOLON ? 2 : 0;
- },
-
- createList() {
- return new List();
- },
- createSingleNodeList(node) {
- return new List().appendData(node);
- },
- getFirstListNode(list) {
- return list && list.first;
- },
- getLastListNode(list) {
- return list && list.last;
- },
-
- parseWithFallback(consumer, fallback) {
- const startToken = this.tokenIndex;
-
- try {
- return consumer.call(this);
- } catch (e) {
- if (onParseErrorThrow) {
- throw e;
- }
-
- const fallbackNode = fallback.call(this, startToken);
-
- onParseErrorThrow = true;
- onParseError(e, fallbackNode);
- onParseErrorThrow = false;
-
- return fallbackNode;
- }
- },
-
- lookupNonWSType(offset) {
- let type;
-
- do {
- type = this.lookupType(offset++);
- if (type !== WhiteSpace) {
- return type;
- }
- } while (type !== NULL);
-
- return NULL;
- },
-
- charCodeAt(offset) {
- return offset >= 0 && offset < source.length ? source.charCodeAt(offset) : 0;
- },
- substring(offsetStart, offsetEnd) {
- return source.substring(offsetStart, offsetEnd);
- },
- substrToCursor(start) {
- return this.source.substring(start, this.tokenStart);
- },
-
- cmpChar(offset, charCode) {
- return cmpChar(source, offset, charCode);
- },
- cmpStr(offsetStart, offsetEnd, str) {
- return cmpStr(source, offsetStart, offsetEnd, str);
- },
-
- consume(tokenType) {
- const start = this.tokenStart;
-
- this.eat(tokenType);
-
- return this.substrToCursor(start);
- },
- consumeFunctionName() {
- const name = source.substring(this.tokenStart, this.tokenEnd - 1);
-
- this.eat(FunctionToken);
-
- return name;
- },
- consumeNumber(type) {
- const number = source.substring(this.tokenStart, consumeNumber(source, this.tokenStart));
-
- this.eat(type);
-
- return number;
- },
-
- eat(tokenType) {
- if (this.tokenType !== tokenType) {
- const tokenName = tokenNames[tokenType].slice(0, -6).replace(/-/g, ' ').replace(/^./, m => m.toUpperCase());
- let message = `${/[[\](){}]/.test(tokenName) ? `"${tokenName}"` : tokenName} is expected`;
- let offset = this.tokenStart;
-
- // tweak message and offset
- switch (tokenType) {
- case Ident:
- // when identifier is expected but there is a function or url
- if (this.tokenType === FunctionToken || this.tokenType === Url) {
- offset = this.tokenEnd - 1;
- message = 'Identifier is expected but function found';
- } else {
- message = 'Identifier is expected';
- }
- break;
-
- case Hash:
- if (this.isDelim(NUMBERSIGN)) {
- this.next();
- offset++;
- message = 'Name is expected';
- }
- break;
-
- case Percentage:
- if (this.tokenType === NumberToken) {
- offset = this.tokenEnd;
- message = 'Percent sign is expected';
- }
- break;
- }
-
- this.error(message, offset);
- }
-
- this.next();
- },
- eatIdent(name) {
- if (this.tokenType !== Ident || this.lookupValue(0, name) === false) {
- this.error(`Identifier "${name}" is expected`);
- }
-
- this.next();
- },
- eatDelim(code) {
- if (!this.isDelim(code)) {
- this.error(`Delim "${String.fromCharCode(code)}" is expected`);
- }
-
- this.next();
- },
-
- getLocation(start, end) {
- if (needPositions) {
- return locationMap.getLocationRange(
- start,
- end,
- filename
- );
- }
-
- return null;
- },
- getLocationFromList(list) {
- if (needPositions) {
- const head = this.getFirstListNode(list);
- const tail = this.getLastListNode(list);
- return locationMap.getLocationRange(
- head !== null ? head.loc.start.offset - locationMap.startOffset : this.tokenStart,
- tail !== null ? tail.loc.end.offset - locationMap.startOffset : this.tokenStart,
- filename
- );
- }
-
- return null;
- },
-
- error(message, offset) {
- const location = typeof offset !== 'undefined' && offset < source.length
- ? locationMap.getLocation(offset)
- : this.eof
- ? locationMap.getLocation(findWhiteSpaceStart(source, source.length - 1))
- : locationMap.getLocation(this.tokenStart);
-
- throw new SyntaxError(
- message || 'Unexpected input',
- source,
- location.offset,
- location.line,
- location.column
- );
- }
- });
-
- const parse = function(source_, options) {
- source = source_;
- options = options || {};
-
- parser.setSource(source, tokenize);
- locationMap.setSource(
- source,
- options.offset,
- options.line,
- options.column
- );
-
- filename = options.filename || '<unknown>';
- needPositions = Boolean(options.positions);
- onParseError = typeof options.onParseError === 'function' ? options.onParseError : NOOP;
- onParseErrorThrow = false;
-
- parser.parseAtrulePrelude = 'parseAtrulePrelude' in options ? Boolean(options.parseAtrulePrelude) : true;
- parser.parseRulePrelude = 'parseRulePrelude' in options ? Boolean(options.parseRulePrelude) : true;
- parser.parseValue = 'parseValue' in options ? Boolean(options.parseValue) : true;
- parser.parseCustomProperty = 'parseCustomProperty' in options ? Boolean(options.parseCustomProperty) : false;
-
- const { context = 'default', onComment } = options;
-
- if (context in parser.context === false) {
- throw new Error('Unknown context `' + context + '`');
- }
-
- if (typeof onComment === 'function') {
- parser.forEachToken((type, start, end) => {
- if (type === Comment) {
- const loc = parser.getLocation(start, end);
- const value = cmpStr(source, end - 2, end, '*/')
- ? source.slice(start + 2, end - 2)
- : source.slice(start + 2, end);
-
- onComment(value, loc);
- }
- });
- }
-
- const ast = parser.context[context].call(parser, options);
-
- if (!parser.eof) {
- parser.error();
- }
-
- return ast;
- };
-
- return Object.assign(parse, {
- SyntaxError,
- config: parser.config
- });
-};
diff --git a/node_modules/css-tree/lib/parser/index.js b/node_modules/css-tree/lib/parser/index.js
deleted file mode 100644
index 7cee62ec..00000000
--- a/node_modules/css-tree/lib/parser/index.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import { createParser } from './create.js';
-import config from '../syntax/config/parser.js';
-
-export default createParser(config);
diff --git a/node_modules/css-tree/lib/parser/parse-selector.js b/node_modules/css-tree/lib/parser/parse-selector.js
deleted file mode 100644
index 05b539a1..00000000
--- a/node_modules/css-tree/lib/parser/parse-selector.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import { createParser } from './create.js';
-import config from '../syntax/config/parser-selector.js';
-
-export default createParser(config);
diff --git a/node_modules/css-tree/lib/parser/sequence.js b/node_modules/css-tree/lib/parser/sequence.js
deleted file mode 100644
index 47d1ccd2..00000000
--- a/node_modules/css-tree/lib/parser/sequence.js
+++ /dev/null
@@ -1,43 +0,0 @@
-import { WhiteSpace, Comment } from '../tokenizer/index.js';
-
-export function readSequence(recognizer) {
- const children = this.createList();
- let space = false;
- const context = {
- recognizer
- };
-
- while (!this.eof) {
- switch (this.tokenType) {
- case Comment:
- this.next();
- continue;
-
- case WhiteSpace:
- space = true;
- this.next();
- continue;
- }
-
- let child = recognizer.getNode.call(this, context);
-
- if (child === undefined) {
- break;
- }
-
- if (space) {
- if (recognizer.onWhiteSpace) {
- recognizer.onWhiteSpace.call(this, child, children, context);
- }
- space = false;
- }
-
- children.push(child);
- }
-
- if (space && recognizer.onWhiteSpace) {
- recognizer.onWhiteSpace.call(this, null, children, context);
- }
-
- return children;
-};
diff --git a/node_modules/css-tree/lib/syntax/atrule/font-face.js b/node_modules/css-tree/lib/syntax/atrule/font-face.js
deleted file mode 100644
index 48a0570a..00000000
--- a/node_modules/css-tree/lib/syntax/atrule/font-face.js
+++ /dev/null
@@ -1,8 +0,0 @@
-export default {
- parse: {
- prelude: null,
- block() {
- return this.Block(true);
- }
- }
-};
diff --git a/node_modules/css-tree/lib/syntax/atrule/import.js b/node_modules/css-tree/lib/syntax/atrule/import.js
deleted file mode 100644
index 7403ad9e..00000000
--- a/node_modules/css-tree/lib/syntax/atrule/import.js
+++ /dev/null
@@ -1,39 +0,0 @@
-import {
- String as StringToken,
- Ident,
- Url,
- Function as FunctionToken,
- LeftParenthesis
-} from '../../tokenizer/index.js';
-
-export default {
- parse: {
- prelude() {
- const children = this.createList();
-
- this.skipSC();
-
- switch (this.tokenType) {
- case StringToken:
- children.push(this.String());
- break;
-
- case Url:
- case FunctionToken:
- children.push(this.Url());
- break;
-
- default:
- this.error('String or url() is expected');
- }
-
- if (this.lookupNonWSType(0) === Ident ||
- this.lookupNonWSType(0) === LeftParenthesis) {
- children.push(this.MediaQueryList());
- }
-
- return children;
- },
- block: null
- }
-};
diff --git a/node_modules/css-tree/lib/syntax/atrule/index.js b/node_modules/css-tree/lib/syntax/atrule/index.js
deleted file mode 100644
index ff600e34..00000000
--- a/node_modules/css-tree/lib/syntax/atrule/index.js
+++ /dev/null
@@ -1,15 +0,0 @@
-import fontFace from './font-face.js';
-import importAtrule from './import.js';
-import media from './media.js';
-import nest from './nest.js';
-import page from './page.js';
-import supports from './supports.js';
-
-export default {
- 'font-face': fontFace,
- 'import': importAtrule,
- media,
- nest,
- page,
- supports
-};
diff --git a/node_modules/css-tree/lib/syntax/atrule/media.js b/node_modules/css-tree/lib/syntax/atrule/media.js
deleted file mode 100644
index a9b0eb6e..00000000
--- a/node_modules/css-tree/lib/syntax/atrule/media.js
+++ /dev/null
@@ -1,12 +0,0 @@
-export default {
- parse: {
- prelude() {
- return this.createSingleNodeList(
- this.MediaQueryList()
- );
- },
- block(isStyleBlock = false) {
- return this.Block(isStyleBlock);
- }
- }
-};
diff --git a/node_modules/css-tree/lib/syntax/atrule/nest.js b/node_modules/css-tree/lib/syntax/atrule/nest.js
deleted file mode 100644
index 99fc15e5..00000000
--- a/node_modules/css-tree/lib/syntax/atrule/nest.js
+++ /dev/null
@@ -1,12 +0,0 @@
-export default {
- parse: {
- prelude() {
- return this.createSingleNodeList(
- this.SelectorList()
- );
- },
- block() {
- return this.Block(true);
- }
- }
-};
diff --git a/node_modules/css-tree/lib/syntax/atrule/page.js b/node_modules/css-tree/lib/syntax/atrule/page.js
deleted file mode 100644
index 99fc15e5..00000000
--- a/node_modules/css-tree/lib/syntax/atrule/page.js
+++ /dev/null
@@ -1,12 +0,0 @@
-export default {
- parse: {
- prelude() {
- return this.createSingleNodeList(
- this.SelectorList()
- );
- },
- block() {
- return this.Block(true);
- }
- }
-};
diff --git a/node_modules/css-tree/lib/syntax/atrule/supports.js b/node_modules/css-tree/lib/syntax/atrule/supports.js
deleted file mode 100644
index 9f8b56c6..00000000
--- a/node_modules/css-tree/lib/syntax/atrule/supports.js
+++ /dev/null
@@ -1,80 +0,0 @@
-import {
- WhiteSpace,
- Comment,
- Ident,
- Function,
- Colon,
- LeftParenthesis
-} from '../../tokenizer/index.js';
-
-function consumeRaw() {
- return this.createSingleNodeList(
- this.Raw(this.tokenIndex, null, false)
- );
-}
-
-function parentheses() {
- this.skipSC();
-
- if (this.tokenType === Ident &&
- this.lookupNonWSType(1) === Colon) {
- return this.createSingleNodeList(
- this.Declaration()
- );
- }
-
- return readSequence.call(this);
-}
-
-function readSequence() {
- const children = this.createList();
- let child;
-
- this.skipSC();
-
- scan:
- while (!this.eof) {
- switch (this.tokenType) {
- case Comment:
- case WhiteSpace:
- this.next();
- continue;
-
- case Function:
- child = this.Function(consumeRaw, this.scope.AtrulePrelude);
- break;
-
- case Ident:
- child = this.Identifier();
- break;
-
- case LeftParenthesis:
- child = this.Parentheses(parentheses, this.scope.AtrulePrelude);
- break;
-
- default:
- break scan;
- }
-
- children.push(child);
- }
-
- return children;
-}
-
-export default {
- parse: {
- prelude() {
- const children = readSequence.call(this);
-
- if (this.getFirstListNode(children) === null) {
- this.error('Condition is expected');
- }
-
- return children;
- },
- block(isStyleBlock = false) {
- return this.Block(isStyleBlock);
- }
- }
-};
diff --git a/node_modules/css-tree/lib/syntax/config/generator.js b/node_modules/css-tree/lib/syntax/config/generator.js
deleted file mode 100644
index 82e874c4..00000000
--- a/node_modules/css-tree/lib/syntax/config/generator.js
+++ /dev/null
@@ -1,5 +0,0 @@
-import * as node from '../node/index-generate.js';
-
-export default {
- node
-};
diff --git a/node_modules/css-tree/lib/syntax/config/lexer.js b/node_modules/css-tree/lib/syntax/config/lexer.js
deleted file mode 100644
index d2119147..00000000
--- a/node_modules/css-tree/lib/syntax/config/lexer.js
+++ /dev/null
@@ -1,8 +0,0 @@
-import definitions from '../../data.js';
-import * as node from '../node/index.js';
-
-export default {
- generic: true,
- ...definitions,
- node
-};
diff --git a/node_modules/css-tree/lib/syntax/config/mix.js b/node_modules/css-tree/lib/syntax/config/mix.js
deleted file mode 100644
index 40c00e5f..00000000
--- a/node_modules/css-tree/lib/syntax/config/mix.js
+++ /dev/null
@@ -1,115 +0,0 @@
-function appendOrSet(a, b) {
- if (typeof b === 'string' && /^\s*\|/.test(b)) {
- return typeof a === 'string'
- ? a + b
- : b.replace(/^\s*\|\s*/, '');
- }
-
- return b || null;
-}
-
-function sliceProps(obj, props) {
- const result = Object.create(null);
-
- for (const [key, value] of Object.entries(obj)) {
- if (value) {
- result[key] = {};
- for (const prop of Object.keys(value)) {
- if (props.includes(prop)) {
- result[key][prop] = value[prop];
- }
- }
- }
- }
-
- return result;
-}
-
-export default function mix(dest, src) {
- const result = { ...dest };
-
- for (const [prop, value] of Object.entries(src)) {
- switch (prop) {
- case 'generic':
- result[prop] = Boolean(value);
- break;
-
- case 'units':
- result[prop] = { ...dest[prop] };
- for (const [name, patch] of Object.entries(value)) {
- result[prop][name] = Array.isArray(patch) ? patch : [];
- }
- break;
-
- case 'atrules':
- result[prop] = { ...dest[prop] };
-
- for (const [name, atrule] of Object.entries(value)) {
- const exists = result[prop][name] || {};
- const current = result[prop][name] = {
- prelude: exists.prelude || null,
- descriptors: {
- ...exists.descriptors
- }
- };
-
- if (!atrule) {
- continue;
- }
-
- current.prelude = atrule.prelude
- ? appendOrSet(current.prelude, atrule.prelude)
- : current.prelude || null;
-
- for (const [descriptorName, descriptorValue] of Object.entries(atrule.descriptors || {})) {
- current.descriptors[descriptorName] = descriptorValue
- ? appendOrSet(current.descriptors[descriptorName], descriptorValue)
- : null;
- }
-
- if (!Object.keys(current.descriptors).length) {
- current.descriptors = null;
- }
- }
- break;
-
- case 'types':
- case 'properties':
- result[prop] = { ...dest[prop] };
- for (const [name, syntax] of Object.entries(value)) {
- result[prop][name] = appendOrSet(result[prop][name], syntax);
- }
- break;
-
- case 'scope':
- result[prop] = { ...dest[prop] };
- for (const [name, props] of Object.entries(value)) {
- result[prop][name] = { ...result[prop][name], ...props };
- }
- break;
-
- case 'parseContext':
- result[prop] = {
- ...dest[prop],
- ...value
- };
- break;
-
- case 'atrule':
- case 'pseudo':
- result[prop] = {
- ...dest[prop],
- ...sliceProps(value, ['parse']) };
- break;
-
- case 'node':
- result[prop] = {
- ...dest[prop],
- ...sliceProps(value, ['name', 'structure', 'parse', 'generate', 'walkContext'])
- };
- break;
- }
- }
-
- return result;
-}
diff --git a/node_modules/css-tree/lib/syntax/config/parser-selector.js b/node_modules/css-tree/lib/syntax/config/parser-selector.js
deleted file mode 100644
index c9e0ee2b..00000000
--- a/node_modules/css-tree/lib/syntax/config/parser-selector.js
+++ /dev/null
@@ -1,15 +0,0 @@
-import { Selector } from '../scope/index.js';
-import pseudo from '../pseudo/index.js';
-import * as node from '../node/index-parse-selector.js';
-
-export default {
- parseContext: {
- default: 'SelectorList',
- selectorList: 'SelectorList',
- selector: 'Selector'
- },
- scope: { Selector },
- atrule: {},
- pseudo,
- node
-};
diff --git a/node_modules/css-tree/lib/syntax/config/parser.js b/node_modules/css-tree/lib/syntax/config/parser.js
deleted file mode 100644
index fe2cae23..00000000
--- a/node_modules/css-tree/lib/syntax/config/parser.js
+++ /dev/null
@@ -1,30 +0,0 @@
-import * as scope from '../scope/index.js';
-import atrule from '../atrule/index.js';
-import pseudo from '../pseudo/index.js';
-import * as node from '../node/index-parse.js';
-
-export default {
- parseContext: {
- default: 'StyleSheet',
- stylesheet: 'StyleSheet',
- atrule: 'Atrule',
- atrulePrelude(options) {
- return this.AtrulePrelude(options.atrule ? String(options.atrule) : null);
- },
- mediaQueryList: 'MediaQueryList',
- mediaQuery: 'MediaQuery',
- rule: 'Rule',
- selectorList: 'SelectorList',
- selector: 'Selector',
- block() {
- return this.Block(true);
- },
- declarationList: 'DeclarationList',
- declaration: 'Declaration',
- value: 'Value'
- },
- scope,
- atrule,
- pseudo,
- node
-};
diff --git a/node_modules/css-tree/lib/syntax/config/walker.js b/node_modules/css-tree/lib/syntax/config/walker.js
deleted file mode 100644
index 215d0248..00000000
--- a/node_modules/css-tree/lib/syntax/config/walker.js
+++ /dev/null
@@ -1,5 +0,0 @@
-import * as node from '../node/index.js';
-
-export default {
- node
-};
diff --git a/node_modules/css-tree/lib/syntax/create.js b/node_modules/css-tree/lib/syntax/create.js
deleted file mode 100644
index 73e6cf7d..00000000
--- a/node_modules/css-tree/lib/syntax/create.js
+++ /dev/null
@@ -1,54 +0,0 @@
-import { tokenize } from '../tokenizer/index.js';
-import { createParser } from '../parser/create.js';
-import { createGenerator } from '../generator/create.js';
-import { createConvertor } from '../convertor/create.js';
-import { createWalker } from '../walker/create.js';
-import { Lexer } from '../lexer/Lexer.js';
-import mix from './config/mix.js';
-
-function createSyntax(config) {
- const parse = createParser(config);
- const walk = createWalker(config);
- const generate = createGenerator(config);
- const { fromPlainObject, toPlainObject } = createConvertor(walk);
-
- const syntax = {
- lexer: null,
- createLexer: config => new Lexer(config, syntax, syntax.lexer.structure),
-
- tokenize,
- parse,
- generate,
-
- walk,
- find: walk.find,
- findLast: walk.findLast,
- findAll: walk.findAll,
-
- fromPlainObject,
- toPlainObject,
-
- fork(extension) {
- const base = mix({}, config); // copy of config
-
- return createSyntax(
- typeof extension === 'function'
- ? extension(base, Object.assign)
- : mix(base, extension)
- );
- }
- };
-
- syntax.lexer = new Lexer({
- generic: true,
- units: config.units,
- types: config.types,
- atrules: config.atrules,
- properties: config.properties,
- node: config.node
- }, syntax);
-
- return syntax;
-};
-
-export default config => createSyntax(mix({}, config));
diff --git a/node_modules/css-tree/lib/syntax/function/expression.js b/node_modules/css-tree/lib/syntax/function/expression.js
deleted file mode 100644
index c311c255..00000000
--- a/node_modules/css-tree/lib/syntax/function/expression.js
+++ /dev/null
@@ -1,7 +0,0 @@
-// legacy IE function
-// expression( <any-value> )
-export default function() {
- return this.createSingleNodeList(
- this.Raw(this.tokenIndex, null, false)
- );
-}
diff --git a/node_modules/css-tree/lib/syntax/function/var.js b/node_modules/css-tree/lib/syntax/function/var.js
deleted file mode 100644
index 8da7efe5..00000000
--- a/node_modules/css-tree/lib/syntax/function/var.js
+++ /dev/null
@@ -1,39 +0,0 @@
-import { Comma, WhiteSpace } from '../../tokenizer/index.js';
-
-// var( <ident> , <value>? )
-export default function() {
- const children = this.createList();
-
- this.skipSC();
-
- // NOTE: Don't check more than a first argument is an ident, rest checks are for lexer
- children.push(this.Identifier());
-
- this.skipSC();
-
- if (this.tokenType === Comma) {
- children.push(this.Operator());
-
- const startIndex = this.tokenIndex;
- const value = this.parseCustomProperty
- ? this.Value(null)
- : this.Raw(this.tokenIndex, this.consumeUntilExclamationMarkOrSemicolon, false);
-
- if (value.type === 'Value' && value.children.isEmpty) {
- for (let offset = startIndex - this.tokenIndex; offset <= 0; offset++) {
- if (this.lookupType(offset) === WhiteSpace) {
- value.children.appendData({
- type: 'WhiteSpace',
- loc: null,
- value: ' '
- });
- break;
- }
- }
- }
-
- children.push(value);
- }
-
- return children;
-};
diff --git a/node_modules/css-tree/lib/syntax/index.js b/node_modules/css-tree/lib/syntax/index.js
deleted file mode 100644
index c8c9152e..00000000
--- a/node_modules/css-tree/lib/syntax/index.js
+++ /dev/null
@@ -1,10 +0,0 @@
-import createSyntax from './create.js';
-import lexerConfig from './config/lexer.js';
-import parserConfig from './config/parser.js';
-import walkerConfig from './config/walker.js';
-
-export default createSyntax({
- ...lexerConfig,
- ...parserConfig,
- ...walkerConfig
-});
diff --git a/node_modules/css-tree/lib/syntax/node/AnPlusB.js b/node_modules/css-tree/lib/syntax/node/AnPlusB.js
deleted file mode 100644
index 05c7e44f..00000000
--- a/node_modules/css-tree/lib/syntax/node/AnPlusB.js
+++ /dev/null
@@ -1,292 +0,0 @@
-import {
- isDigit,
- WhiteSpace,
- Comment,
- Ident,
- Number,
- Dimension
-} from '../../tokenizer/index.js';
-
-const PLUSSIGN = 0x002B; // U+002B PLUS SIGN (+)
-const HYPHENMINUS = 0x002D; // U+002D HYPHEN-MINUS (-)
-const N = 0x006E; // U+006E LATIN SMALL LETTER N (n)
-const DISALLOW_SIGN = true;
-const ALLOW_SIGN = false;
-
-function checkInteger(offset, disallowSign) {
- let pos = this.tokenStart + offset;
- const code = this.charCodeAt(pos);
-
- if (code === PLUSSIGN || code === HYPHENMINUS) {
- if (disallowSign) {
- this.error('Number sign is not allowed');
- }
- pos++;
- }
-
- for (; pos < this.tokenEnd; pos++) {
- if (!isDigit(this.charCodeAt(pos))) {
- this.error('Integer is expected', pos);
- }
- }
-}
-
-function checkTokenIsInteger(disallowSign) {
- return checkInteger.call(this, 0, disallowSign);
-}
-
-function expectCharCode(offset, code) {
- if (!this.cmpChar(this.tokenStart + offset, code)) {
- let msg = '';
-
- switch (code) {
- case N:
- msg = 'N is expected';
- break;
- case HYPHENMINUS:
- msg = 'HyphenMinus is expected';
- break;
- }
-
- this.error(msg, this.tokenStart + offset);
- }
-}
-
-// ... <signed-integer>
-// ... ['+' | '-'] <signless-integer>
-function consumeB() {
- let offset = 0;
- let sign = 0;
- let type = this.tokenType;
-
- while (type === WhiteSpace || type === Comment) {
- type = this.lookupType(++offset);
- }
-
- if (type !== Number) {
- if (this.isDelim(PLUSSIGN, offset) ||
- this.isDelim(HYPHENMINUS, offset)) {
- sign = this.isDelim(PLUSSIGN, offset) ? PLUSSIGN : HYPHENMINUS;
-
- do {
- type = this.lookupType(++offset);
- } while (type === WhiteSpace || type === Comment);
-
- if (type !== Number) {
- this.skip(offset);
- checkTokenIsInteger.call(this, DISALLOW_SIGN);
- }
- } else {
- return null;
- }
- }
-
- if (offset > 0) {
- this.skip(offset);
- }
-
- if (sign === 0) {
- type = this.charCodeAt(this.tokenStart);
- if (type !== PLUSSIGN && type !== HYPHENMINUS) {
- this.error('Number sign is expected');
- }
- }
-
- checkTokenIsInteger.call(this, sign !== 0);
- return sign === HYPHENMINUS ? '-' + this.consume(Number) : this.consume(Number);
-}
-
-// An+B microsyntax https://www.w3.org/TR/css-syntax-3/#anb
-export const name = 'AnPlusB';
-export const structure = {
- a: [String, null],
- b: [String, null]
-};
-
-export function parse() {
- /* eslint-disable brace-style*/
- const start = this.tokenStart;
- let a = null;
- let b = null;
-
- // <integer>
- if (this.tokenType === Number) {
- checkTokenIsInteger.call(this, ALLOW_SIGN);
- b = this.consume(Number);
- }
-
- // -n
- // -n <signed-integer>
- // -n ['+' | '-'] <signless-integer>
- // -n- <signless-integer>
- // <dashndashdigit-ident>
- else if (this.tokenType === Ident && this.cmpChar(this.tokenStart, HYPHENMINUS)) {
- a = '-1';
-
- expectCharCode.call(this, 1, N);
-
- switch (this.tokenEnd - this.tokenStart) {
- // -n
- // -n <signed-integer>
- // -n ['+' | '-'] <signless-integer>
- case 2:
- this.next();
- b = consumeB.call(this);
- break;
-
- // -n- <signless-integer>
- case 3:
- expectCharCode.call(this, 2, HYPHENMINUS);
-
- this.next();
- this.skipSC();
-
- checkTokenIsInteger.call(this, DISALLOW_SIGN);
-
- b = '-' + this.consume(Number);
- break;
-
- // <dashndashdigit-ident>
- default:
- expectCharCode.call(this, 2, HYPHENMINUS);
- checkInteger.call(this, 3, DISALLOW_SIGN);
- this.next();
-
- b = this.substrToCursor(start + 2);
- }
- }
-
- // '+'? n
- // '+'? n <signed-integer>
- // '+'? n ['+' | '-'] <signless-integer>
- // '+'? n- <signless-integer>
- // '+'? <ndashdigit-ident>
- else if (this.tokenType === Ident || (this.isDelim(PLUSSIGN) && this.lookupType(1) === Ident)) {
- let sign = 0;
- a = '1';
-
- // just ignore a plus
- if (this.isDelim(PLUSSIGN)) {
- sign = 1;
- this.next();
- }
-
- expectCharCode.call(this, 0, N);
-
- switch (this.tokenEnd - this.tokenStart) {
- // '+'? n
- // '+'? n <signed-integer>
- // '+'? n ['+' | '-'] <signless-integer>
- case 1:
- this.next();
- b = consumeB.call(this);
- break;
-
- // '+'? n- <signless-integer>
- case 2:
- expectCharCode.call(this, 1, HYPHENMINUS);
-
- this.next();
- this.skipSC();
-
- checkTokenIsInteger.call(this, DISALLOW_SIGN);
-
- b = '-' + this.consume(Number);
- break;
-
- // '+'? <ndashdigit-ident>
- default:
- expectCharCode.call(this, 1, HYPHENMINUS);
- checkInteger.call(this, 2, DISALLOW_SIGN);
- this.next();
-
- b = this.substrToCursor(start + sign + 1);
- }
- }
-
- // <ndashdigit-dimension>
- // <ndash-dimension> <signless-integer>
- // <n-dimension>
- // <n-dimension> <signed-integer>
- // <n-dimension> ['+' | '-'] <signless-integer>
- else if (this.tokenType === Dimension) {
- const code = this.charCodeAt(this.tokenStart);
- const sign = code === PLUSSIGN || code === HYPHENMINUS;
- let i = this.tokenStart + sign;
-
- for (; i < this.tokenEnd; i++) {
- if (!isDigit(this.charCodeAt(i))) {
- break;
- }
- }
-
- if (i === this.tokenStart + sign) {
- this.error('Integer is expected', this.tokenStart + sign);
- }
-
- expectCharCode.call(this, i - this.tokenStart, N);
- a = this.substring(start, i);
-
- // <n-dimension>
- // <n-dimension> <signed-integer>
- // <n-dimension> ['+' | '-'] <signless-integer>
- if (i + 1 === this.tokenEnd) {
- this.next();
- b = consumeB.call(this);
- } else {
- expectCharCode.call(this, i - this.tokenStart + 1, HYPHENMINUS);
-
- // <ndash-dimension> <signless-integer>
- if (i + 2 === this.tokenEnd) {
- this.next();
- this.skipSC();
- checkTokenIsInteger.call(this, DISALLOW_SIGN);
- b = '-' + this.consume(Number);
- }
- // <ndashdigit-dimension>
- else {
- checkInteger.call(this, i - this.tokenStart + 2, DISALLOW_SIGN);
- this.next();
- b = this.substrToCursor(i + 1);
- }
- }
- } else {
- this.error();
- }
-
- if (a !== null && a.charCodeAt(0) === PLUSSIGN) {
- a = a.substr(1);
- }
-
- if (b !== null && b.charCodeAt(0) === PLUSSIGN) {
- b = b.substr(1);
- }
-
- return {
- type: 'AnPlusB',
- loc: this.getLocation(start, this.tokenStart),
- a,
- b
- };
-}
-
-export function generate(node) {
- if (node.a) {
- const a =
- node.a === '+1' && 'n' ||
- node.a === '1' && 'n' ||
- node.a === '-1' && '-n' ||
- node.a + 'n';
-
- if (node.b) {
- const b = node.b[0] === '-' || node.b[0] === '+'
- ? node.b
- : '+' + node.b;
- this.tokenize(a + b);
- } else {
- this.tokenize(a);
- }
- } else {
- this.tokenize(node.b);
- }
-}
diff --git a/node_modules/css-tree/lib/syntax/node/Atrule.js b/node_modules/css-tree/lib/syntax/node/Atrule.js
deleted file mode 100644
index c289b6eb..00000000
--- a/node_modules/css-tree/lib/syntax/node/Atrule.js
+++ /dev/null
@@ -1,100 +0,0 @@
-import {
- AtKeyword,
- Semicolon,
- LeftCurlyBracket,
- RightCurlyBracket
-} from '../../tokenizer/index.js';
-
-function consumeRaw(startToken) {
- return this.Raw(startToken, this.consumeUntilLeftCurlyBracketOrSemicolon, true);
-}
-
-function isDeclarationBlockAtrule() {
- for (let offset = 1, type; type = this.lookupType(offset); offset++) {
- if (type === RightCurlyBracket) {
- return true;
- }
-
- if (type === LeftCurlyBracket ||
- type === AtKeyword) {
- return false;
- }
- }
-
- return false;
-}
-
-
-export const name = 'Atrule';
-export const walkContext = 'atrule';
-export const structure = {
- name: String,
- prelude: ['AtrulePrelude', 'Raw', null],
- block: ['Block', null]
-};
-
-export function parse(isDeclaration = false) {
- const start = this.tokenStart;
- let name;
- let nameLowerCase;
- let prelude = null;
- let block = null;
-
- this.eat(AtKeyword);
-
- name = this.substrToCursor(start + 1);
- nameLowerCase = name.toLowerCase();
- this.skipSC();
-
- // parse prelude
- if (this.eof === false &&
- this.tokenType !== LeftCurlyBracket &&
- this.tokenType !== Semicolon) {
- if (this.parseAtrulePrelude) {
- prelude = this.parseWithFallback(this.AtrulePrelude.bind(this, name, isDeclaration), consumeRaw);
- } else {
- prelude = consumeRaw.call(this, this.tokenIndex);
- }
-
- this.skipSC();
- }
-
- switch (this.tokenType) {
- case Semicolon:
- this.next();
- break;
-
- case LeftCurlyBracket:
- if (hasOwnProperty.call(this.atrule, nameLowerCase) &&
- typeof this.atrule[nameLowerCase].block === 'function') {
- block = this.atrule[nameLowerCase].block.call(this, isDeclaration);
- } else {
- // TODO: should consume block content as Raw?
- block = this.Block(isDeclarationBlockAtrule.call(this));
- }
-
- break;
- }
-
- return {
- type: 'Atrule',
- loc: this.getLocation(start, this.tokenStart),
- name,
- prelude,
- block
- };
-}
-
-export function generate(node) {
- this.token(AtKeyword, '@' + node.name);
-
- if (node.prelude !== null) {
- this.node(node.prelude);
- }
-
- if (node.block) {
- this.node(node.block);
- } else {
- this.token(Semicolon, ';');
- }
-}
diff --git a/node_modules/css-tree/lib/syntax/node/AtrulePrelude.js b/node_modules/css-tree/lib/syntax/node/AtrulePrelude.js
deleted file mode 100644
index 5b5645a0..00000000
--- a/node_modules/css-tree/lib/syntax/node/AtrulePrelude.js
+++ /dev/null
@@ -1,47 +0,0 @@
-import {
- Semicolon,
- LeftCurlyBracket
-} from '../../tokenizer/index.js';
-
-export const name = 'AtrulePrelude';
-export const walkContext = 'atrulePrelude';
-export const structure = {
- children: [[]]
-};
-
-export function parse(name) {
- let children = null;
-
- if (name !== null) {
- name = name.toLowerCase();
- }
-
- this.skipSC();
-
- if (hasOwnProperty.call(this.atrule, name) &&
- typeof this.atrule[name].prelude === 'function') {
- // custom consumer
- children = this.atrule[name].prelude.call(this);
- } else {
- // default consumer
- children = this.readSequence(this.scope.AtrulePrelude);
- }
-
- this.skipSC();
-
- if (this.eof !== true &&
- this.tokenType !== LeftCurlyBracket &&
- this.tokenType !== Semicolon) {
- this.error('Semicolon or block is expected');
- }
-
- return {
- type: 'AtrulePrelude',
- loc: this.getLocationFromList(children),
- children
- };
-}
-
-export function generate(node) {
- this.children(node);
-}
diff --git a/node_modules/css-tree/lib/syntax/node/AttributeSelector.js b/node_modules/css-tree/lib/syntax/node/AttributeSelector.js
deleted file mode 100644
index 8578dada..00000000
--- a/node_modules/css-tree/lib/syntax/node/AttributeSelector.js
+++ /dev/null
@@ -1,147 +0,0 @@
-import {
- Ident,
- String as StringToken,
- Delim,
- LeftSquareBracket,
- RightSquareBracket
-} from '../../tokenizer/index.js';
-
-const DOLLARSIGN = 0x0024; // U+0024 DOLLAR SIGN ($)
-const ASTERISK = 0x002A; // U+002A ASTERISK (*)
-const EQUALSSIGN = 0x003D; // U+003D EQUALS SIGN (=)
-const CIRCUMFLEXACCENT = 0x005E; // U+005E (^)
-const VERTICALLINE = 0x007C; // U+007C VERTICAL LINE (|)
-const TILDE = 0x007E; // U+007E TILDE (~)
-
-function getAttributeName() {
- if (this.eof) {
- this.error('Unexpected end of input');
- }
-
- const start = this.tokenStart;
- let expectIdent = false;
-
- if (this.isDelim(ASTERISK)) {
- expectIdent = true;
- this.next();
- } else if (!this.isDelim(VERTICALLINE)) {
- this.eat(Ident);
- }
-
- if (this.isDelim(VERTICALLINE)) {
- if (this.charCodeAt(this.tokenStart + 1) !== EQUALSSIGN) {
- this.next();
- this.eat(Ident);
- } else if (expectIdent) {
- this.error('Identifier is expected', this.tokenEnd);
- }
- } else if (expectIdent) {
- this.error('Vertical line is expected');
- }
-
- return {
- type: 'Identifier',
- loc: this.getLocation(start, this.tokenStart),
- name: this.substrToCursor(start)
- };
-}
-
-function getOperator() {
- const start = this.tokenStart;
- const code = this.charCodeAt(start);
-
- if (code !== EQUALSSIGN && // =
- code !== TILDE && // ~=
- code !== CIRCUMFLEXACCENT && // ^=
- code !== DOLLARSIGN && // $=
- code !== ASTERISK && // *=
- code !== VERTICALLINE // |=
- ) {
- this.error('Attribute selector (=, ~=, ^=, $=, *=, |=) is expected');
- }
-
- this.next();
-
- if (code !== EQUALSSIGN) {
- if (!this.isDelim(EQUALSSIGN)) {
- this.error('Equal sign is expected');
- }
-
- this.next();
- }
-
- return this.substrToCursor(start);
-}
-
-// '[' <wq-name> ']'
-// '[' <wq-name> <attr-matcher> [ <string-token> | <ident-token> ] <attr-modifier>? ']'
-export const name = 'AttributeSelector';
-export const structure = {
- name: 'Identifier',
- matcher: [String, null],
- value: ['String', 'Identifier', null],
- flags: [String, null]
-};
-
-export function parse() {
- const start = this.tokenStart;
- let name;
- let matcher = null;
- let value = null;
- let flags = null;
-
- this.eat(LeftSquareBracket);
- this.skipSC();
-
- name = getAttributeName.call(this);
- this.skipSC();
-
- if (this.tokenType !== RightSquareBracket) {
- // avoid case `[name i]`
- if (this.tokenType !== Ident) {
- matcher = getOperator.call(this);
-
- this.skipSC();
-
- value = this.tokenType === StringToken
- ? this.String()
- : this.Identifier();
-
- this.skipSC();
- }
-
- // attribute flags
- if (this.tokenType === Ident) {
- flags = this.consume(Ident);
-
- this.skipSC();
- }
- }
-
- this.eat(RightSquareBracket);
-
- return {
- type: 'AttributeSelector',
- loc: this.getLocation(start, this.tokenStart),
- name,
- matcher,
- value,
- flags
- };
-}
-
-export function generate(node) {
- this.token(Delim, '[');
- this.node(node.name);
-
- if (node.matcher !== null) {
- this.tokenize(node.matcher);
- this.node(node.value);
- }
-
- if (node.flags !== null) {
- this.token(Ident, node.flags);
- }
-
- this.token(Delim, ']');
-}
diff --git a/node_modules/css-tree/lib/syntax/node/Block.js b/node_modules/css-tree/lib/syntax/node/Block.js
deleted file mode 100644
index d0b1a2f5..00000000
--- a/node_modules/css-tree/lib/syntax/node/Block.js
+++ /dev/null
@@ -1,95 +0,0 @@
-import {
- WhiteSpace,
- Comment,
- Semicolon,
- AtKeyword,
- LeftCurlyBracket,
- RightCurlyBracket
-} from '../../tokenizer/index.js';
-
-const AMPERSAND = 0x0026; // U+0026 AMPERSAND (&)
-
-function consumeRaw(startToken) {
- return this.Raw(startToken, null, true);
-}
-function consumeRule() {
- return this.parseWithFallback(this.Rule, consumeRaw);
-}
-function consumeRawDeclaration(startToken) {
- return this.Raw(startToken, this.consumeUntilSemicolonIncluded, true);
-}
-function consumeDeclaration() {
- if (this.tokenType === Semicolon) {
- return consumeRawDeclaration.call(this, this.tokenIndex);
- }
-
- const node = this.parseWithFallback(this.Declaration, consumeRawDeclaration);
-
- if (this.tokenType === Semicolon) {
- this.next();
- }
-
- return node;
-}
-
-export const name = 'Block';
-export const walkContext = 'block';
-export const structure = {
- children: [[
- 'Atrule',
- 'Rule',
- 'Declaration'
- ]]
-};
-
-export function parse(isStyleBlock) {
- const consumer = isStyleBlock ? consumeDeclaration : consumeRule;
- const start = this.tokenStart;
- let children = this.createList();
-
- this.eat(LeftCurlyBracket);
-
- scan:
- while (!this.eof) {
- switch (this.tokenType) {
- case RightCurlyBracket:
- break scan;
-
- case WhiteSpace:
- case Comment:
- this.next();
- break;
-
- case AtKeyword:
- children.push(this.parseWithFallback(this.Atrule.bind(this, isStyleBlock), consumeRaw));
- break;
-
- default:
- if (isStyleBlock && this.isDelim(AMPERSAND)) {
- children.push(consumeRule.call(this));
- } else {
- children.push(consumer.call(this));
- }
- }
- }
-
- if (!this.eof) {
- this.eat(RightCurlyBracket);
- }
-
- return {
- type: 'Block',
- loc: this.getLocation(start, this.tokenStart),
- children
- };
-}
-
-export function generate(node) {
- this.token(LeftCurlyBracket, '{');
- this.children(node, prev => {
- if (prev.type === 'Declaration') {
- this.token(Semicolon, ';');
- }
- });
- this.token(RightCurlyBracket, '}');
-}
diff --git a/node_modules/css-tree/lib/syntax/node/Brackets.js b/node_modules/css-tree/lib/syntax/node/Brackets.js
deleted file mode 100644
index 1d97a4c0..00000000
--- a/node_modules/css-tree/lib/syntax/node/Brackets.js
+++ /dev/null
@@ -1,35 +0,0 @@
-import {
- Delim,
- LeftSquareBracket,
- RightSquareBracket
-} from '../../tokenizer/index.js';
-
-export const name = 'Brackets';
-export const structure = {
- children: [[]]
-};
-
-export function parse(readSequence, recognizer) {
- const start = this.tokenStart;
- let children = null;
-
- this.eat(LeftSquareBracket);
-
- children = readSequence.call(this, recognizer);
-
- if (!this.eof) {
- this.eat(RightSquareBracket);
- }
-
- return {
- type: 'Brackets',
- loc: this.getLocation(start, this.tokenStart),
- children
- };
-}
-
-export function generate(node) {
- this.token(Delim, '[');
- this.children(node);
- this.token(Delim, ']');
-}
diff --git a/node_modules/css-tree/lib/syntax/node/CDC.js b/node_modules/css-tree/lib/syntax/node/CDC.js
deleted file mode 100644
index efed4a66..00000000
--- a/node_modules/css-tree/lib/syntax/node/CDC.js
+++ /dev/null
@@ -1,19 +0,0 @@
-import { CDC } from '../../tokenizer/index.js';
-
-export const name = 'CDC';
-export const structure = [];
-
-export function parse() {
- const start = this.tokenStart;
-
- this.eat(CDC); // -->
-
- return {
- type: 'CDC',
- loc: this.getLocation(start, this.tokenStart)
- };
-}
-
-export function generate() {
- this.token(CDC, '-->');
-}
diff --git a/node_modules/css-tree/lib/syntax/node/CDO.js b/node_modules/css-tree/lib/syntax/node/CDO.js
deleted file mode 100644
index 3a9de89f..00000000
--- a/node_modules/css-tree/lib/syntax/node/CDO.js
+++ /dev/null
@@ -1,19 +0,0 @@
-import { CDO } from '../../tokenizer/index.js';
-
-export const name = 'CDO';
-export const structure = [];
-
-export function parse() {
- const start = this.tokenStart;
-
- this.eat(CDO); // <!--
-
- return {
- type: 'CDO',
- loc: this.getLocation(start, this.tokenStart)
- };
-}
-
-export function generate() {
- this.token(CDO, '<!--');
-}
diff --git a/node_modules/css-tree/lib/syntax/node/ClassSelector.js b/node_modules/css-tree/lib/syntax/node/ClassSelector.js
deleted file mode 100644
index febb0d96..00000000
--- a/node_modules/css-tree/lib/syntax/node/ClassSelector.js
+++ /dev/null
@@ -1,24 +0,0 @@
-import { Delim, Ident } from '../../tokenizer/index.js';
-
-const FULLSTOP = 0x002E; // U+002E FULL STOP (.)
-
-// '.' ident
-export const name = 'ClassSelector';
-export const structure = {
- name: String
-};
-
-export function parse() {
- this.eatDelim(FULLSTOP);
-
- return {
- type: 'ClassSelector',
- loc: this.getLocation(this.tokenStart - 1, this.tokenEnd),
- name: this.consume(Ident)
- };
-}
-
-export function generate(node) {
- this.token(Delim, '.');
- this.token(Ident, node.name);
-}
diff --git a/node_modules/css-tree/lib/syntax/node/Combinator.js b/node_modules/css-tree/lib/syntax/node/Combinator.js
deleted file mode 100644
index 2e5bb1fe..00000000
--- a/node_modules/css-tree/lib/syntax/node/Combinator.js
+++ /dev/null
@@ -1,54 +0,0 @@
-import { WhiteSpace, Delim } from '../../tokenizer/index.js';
-
-const PLUSSIGN = 0x002B; // U+002B PLUS SIGN (+)
-const SOLIDUS = 0x002F; // U+002F SOLIDUS (/)
-const GREATERTHANSIGN = 0x003E; // U+003E GREATER-THAN SIGN (>)
-const TILDE = 0x007E; // U+007E TILDE (~)
-
-export const name = 'Combinator';
-export const structure = {
- name: String
-};
-
-// + | > | ~ | /deep/
-export function parse() {
- const start = this.tokenStart;
- let name;
-
- switch (this.tokenType) {
- case WhiteSpace:
- name = ' ';
- break;
-
- case Delim:
- switch (this.charCodeAt(this.tokenStart)) {
- case GREATERTHANSIGN:
- case PLUSSIGN:
- case TILDE:
- this.next();
- break;
-
- case SOLIDUS:
- this.next();
- this.eatIdent('deep');
- this.eatDelim(SOLIDUS);
- break;
-
- default:
- this.error('Combinator is expected');
- }
-
- name = this.substrToCursor(start);
- break;
- }
-
- return {
- type: 'Combinator',
- loc: this.getLocation(start, this.tokenStart),
- name
- };
-}
-
-export function generate(node) {
- this.tokenize(node.name);
-}
diff --git a/node_modules/css-tree/lib/syntax/node/Comment.js b/node_modules/css-tree/lib/syntax/node/Comment.js
deleted file mode 100644
index 8a9d291c..00000000
--- a/node_modules/css-tree/lib/syntax/node/Comment.js
+++ /dev/null
@@ -1,33 +0,0 @@
-import { Comment } from '../../tokenizer/index.js';
-
-const ASTERISK = 0x002A; // U+002A ASTERISK (*)
-const SOLIDUS = 0x002F; // U+002F SOLIDUS (/)
-
-
-export const name = 'Comment';
-export const structure = {
- value: String
-};
-
-export function parse() {
- const start = this.tokenStart;
- let end = this.tokenEnd;
-
- this.eat(Comment);
-
- if ((end - start + 2) >= 2 &&
- this.charCodeAt(end - 2) === ASTERISK &&
- this.charCodeAt(end - 1) === SOLIDUS) {
- end -= 2;
- }
-
- return {
- type: 'Comment',
- loc: this.getLocation(start, this.tokenStart),
- value: this.substring(start + 2, end)
- };
-}
-
-export function generate(node) {
- this.token(Comment, '/*' + node.value + '*/');
-}
diff --git a/node_modules/css-tree/lib/syntax/node/Declaration.js b/node_modules/css-tree/lib/syntax/node/Declaration.js
deleted file mode 100644
index 49326d58..00000000
--- a/node_modules/css-tree/lib/syntax/node/Declaration.js
+++ /dev/null
@@ -1,165 +0,0 @@
-import { isCustomProperty } from '../../utils/names.js';
-import {
- Ident,
- Hash,
- Colon,
- Semicolon,
- Delim,
- WhiteSpace
-} from '../../tokenizer/index.js';
-
-const EXCLAMATIONMARK = 0x0021; // U+0021 EXCLAMATION MARK (!)
-const NUMBERSIGN = 0x0023; // U+0023 NUMBER SIGN (#)
-const DOLLARSIGN = 0x0024; // U+0024 DOLLAR SIGN ($)
-const AMPERSAND = 0x0026; // U+0026 AMPERSAND (&)
-const ASTERISK = 0x002A; // U+002A ASTERISK (*)
-const PLUSSIGN = 0x002B; // U+002B PLUS SIGN (+)
-const SOLIDUS = 0x002F; // U+002F SOLIDUS (/)
-
-function consumeValueRaw(startToken) {
- return this.Raw(startToken, this.consumeUntilExclamationMarkOrSemicolon, true);
-}
-
-function consumeCustomPropertyRaw(startToken) {
- return this.Raw(startToken, this.consumeUntilExclamationMarkOrSemicolon, false);
-}
-
-function consumeValue() {
- const startValueToken = this.tokenIndex;
- const value = this.Value();
-
- if (value.type !== 'Raw' &&
- this.eof === false &&
- this.tokenType !== Semicolon &&
- this.isDelim(EXCLAMATIONMARK) === false &&
- this.isBalanceEdge(startValueToken) === false) {
- this.error();
- }
-
- return value;
-}
-
-export const name = 'Declaration';
-export const walkContext = 'declaration';
-export const structure = {
- important: [Boolean, String],
- property: String,
- value: ['Value', 'Raw']
-};
-
-export function parse() {
- const start = this.tokenStart;
- const startToken = this.tokenIndex;
- const property = readProperty.call(this);
- const customProperty = isCustomProperty(property);
- const parseValue = customProperty ? this.parseCustomProperty : this.parseValue;
- const consumeRaw = customProperty ? consumeCustomPropertyRaw : consumeValueRaw;
- let important = false;
- let value;
-
- this.skipSC();
- this.eat(Colon);
-
- const valueStart = this.tokenIndex;
-
- if (!customProperty) {
- this.skipSC();
- }
-
- if (parseValue) {
- value = this.parseWithFallback(consumeValue, consumeRaw);
- } else {
- value = consumeRaw.call(this, this.tokenIndex);
- }
-
- if (customProperty && value.type === 'Value' && value.children.isEmpty) {
- for (let offset = valueStart - this.tokenIndex; offset <= 0; offset++) {
- if (this.lookupType(offset) === WhiteSpace) {
- value.children.appendData({
- type: 'WhiteSpace',
- loc: null,
- value: ' '
- });
- break;
- }
- }
- }
-
- if (this.isDelim(EXCLAMATIONMARK)) {
- important = getImportant.call(this);
- this.skipSC();
- }
-
- // Do not include semicolon to range per spec
- // https://drafts.csswg.org/css-syntax/#declaration-diagram
-
- if (this.eof === false &&
- this.tokenType !== Semicolon &&
- this.isBalanceEdge(startToken) === false) {
- this.error();
- }
-
- return {
- type: 'Declaration',
- loc: this.getLocation(start, this.tokenStart),
- important,
- property,
- value
- };
-}
-
-export function generate(node) {
- this.token(Ident, node.property);
- this.token(Colon, ':');
- this.node(node.value);
-
- if (node.important) {
- this.token(Delim, '!');
- this.token(Ident, node.important === true ? 'important' : node.important);
- }
-}
-
-function readProperty() {
- const start = this.tokenStart;
-
- // hacks
- if (this.tokenType === Delim) {
- switch (this.charCodeAt(this.tokenStart)) {
- case ASTERISK:
- case DOLLARSIGN:
- case PLUSSIGN:
- case NUMBERSIGN:
- case AMPERSAND:
- this.next();
- break;
-
- // TODO: not sure we should support this hack
- case SOLIDUS:
- this.next();
- if (this.isDelim(SOLIDUS)) {
- this.next();
- }
- break;
- }
- }
-
- if (this.tokenType === Hash) {
- this.eat(Hash);
- } else {
- this.eat(Ident);
- }
-
- return this.substrToCursor(start);
-}
-
-// ! ws* important
-function getImportant() {
- this.eat(Delim);
- this.skipSC();
-
- const important = this.consume(Ident);
-
- // store original value in case it differ from `important`
- // for better original source restoring and hacks like `!ie` support
- return important === 'important' ? true : important;
-}
diff --git a/node_modules/css-tree/lib/syntax/node/DeclarationList.js b/node_modules/css-tree/lib/syntax/node/DeclarationList.js
deleted file mode 100644
index 132a9cc7..00000000
--- a/node_modules/css-tree/lib/syntax/node/DeclarationList.js
+++ /dev/null
@@ -1,62 +0,0 @@
-import {
- WhiteSpace,
- Comment,
- Semicolon,
- AtKeyword
-} from '../../tokenizer/index.js';
-
-const AMPERSAND = 0x0026; // U+0026 AMPERSAND (&)
-
-function consumeRaw(startToken) {
- return this.Raw(startToken, this.consumeUntilSemicolonIncluded, true);
-}
-
-export const name = 'DeclarationList';
-export const structure = {
- children: [[
- 'Declaration',
- 'Atrule',
- 'Rule'
- ]]
-};
-
-export function parse() {
- const children = this.createList();
-
- scan:
- while (!this.eof) {
- switch (this.tokenType) {
- case WhiteSpace:
- case Comment:
- case Semicolon:
- this.next();
- break;
-
- case AtKeyword:
- children.push(this.parseWithFallback(this.Atrule.bind(this, true), consumeRaw));
- break;
-
- default:
- if (this.isDelim(AMPERSAND)) {
- children.push(this.parseWithFallback(this.Rule, consumeRaw));
- } else {
- children.push(this.parseWithFallback(this.Declaration, consumeRaw));
- }
- }
- }
-
- return {
- type: 'DeclarationList',
- loc: this.getLocationFromList(children),
- children
- };
-}
-
-export function generate(node) {
- this.children(node, prev => {
- if (prev.type === 'Declaration') {
- this.token(Semicolon, ';');
- }
- });
-}
-
diff --git a/node_modules/css-tree/lib/syntax/node/Dimension.js b/node_modules/css-tree/lib/syntax/node/Dimension.js
deleted file mode 100644
index 4b9bffc7..00000000
--- a/node_modules/css-tree/lib/syntax/node/Dimension.js
+++ /dev/null
@@ -1,23 +0,0 @@
-import { Dimension } from '../../tokenizer/index.js';
-
-export const name = 'Dimension';
-export const structure = {
- value: String,
- unit: String
-};
-
-export function parse() {
- const start = this.tokenStart;
- const value = this.consumeNumber(Dimension);
-
- return {
- type: 'Dimension',
- loc: this.getLocation(start, this.tokenStart),
- value,
- unit: this.substring(start + value.length, this.tokenStart)
- };
-}
-
-export function generate(node) {
- this.token(Dimension, node.value + node.unit);
-}
diff --git a/node_modules/css-tree/lib/syntax/node/Function.js b/node_modules/css-tree/lib/syntax/node/Function.js
deleted file mode 100644
index 1fdc4140..00000000
--- a/node_modules/css-tree/lib/syntax/node/Function.js
+++ /dev/null
@@ -1,41 +0,0 @@
-import {
- Function as FunctionToken,
- RightParenthesis
-} from '../../tokenizer/index.js';
-
-
-export const name = 'Function';
-export const walkContext = 'function';
-export const structure = {
- name: String,
- children: [[]]
-};
-
-// <function-token> <sequence> )
-export function parse(readSequence, recognizer) {
- const start = this.tokenStart;
- const name = this.consumeFunctionName();
- const nameLowerCase = name.toLowerCase();
- let children;
-
- children = recognizer.hasOwnProperty(nameLowerCase)
- ? recognizer[nameLowerCase].call(this, recognizer)
- : readSequence.call(this, recognizer);
-
- if (!this.eof) {
- this.eat(RightParenthesis);
- }
-
- return {
- type: 'Function',
- loc: this.getLocation(start, this.tokenStart),
- name,
- children
- };
-}
-
-export function generate(node) {
- this.token(FunctionToken, node.name + '(');
- this.children(node);
- this.token(RightParenthesis, ')');
-}
diff --git a/node_modules/css-tree/lib/syntax/node/Hash.js b/node_modules/css-tree/lib/syntax/node/Hash.js
deleted file mode 100644
index b752752c..00000000
--- a/node_modules/css-tree/lib/syntax/node/Hash.js
+++ /dev/null
@@ -1,23 +0,0 @@
-import { Hash } from '../../tokenizer/index.js';
-
-// '#' ident
-export const xxx = 'XXX';
-export const name = 'Hash';
-export const structure = {
- value: String
-};
-export function parse() {
- const start = this.tokenStart;
-
- this.eat(Hash);
-
- return {
- type: 'Hash',
- loc: this.getLocation(start, this.tokenStart),
- value: this.substrToCursor(start + 1)
- };
-}
-export function generate(node) {
- this.token(Hash, '#' + node.value);
-}
-
diff --git a/node_modules/css-tree/lib/syntax/node/IdSelector.js b/node_modules/css-tree/lib/syntax/node/IdSelector.js
deleted file mode 100644
index c85c1b2f..00000000
--- a/node_modules/css-tree/lib/syntax/node/IdSelector.js
+++ /dev/null
@@ -1,26 +0,0 @@
-import { Hash, Delim } from '../../tokenizer/index.js';
-
-export const name = 'IdSelector';
-export const structure = {
- name: String
-};
-
-export function parse() {
- const start = this.tokenStart;
-
- // TODO: check value is an ident
- this.eat(Hash);
-
- return {
- type: 'IdSelector',
- loc: this.getLocation(start, this.tokenStart),
- name: this.substrToCursor(start + 1)
- };
-}
-
-export function generate(node) {
- // Using Delim instead of Hash is a hack to avoid for a whitespace between ident and id-selector
- // in safe mode (e.g. "a#id"), because IE11 doesn't allow a sequence <ident-token> <hash-token>
- // without a whitespace in values (e.g. "1px solid#000")
- this.token(Delim, '#' + node.name);
-}
diff --git a/node_modules/css-tree/lib/syntax/node/Identifier.js b/node_modules/css-tree/lib/syntax/node/Identifier.js
deleted file mode 100644
index 067c2d02..00000000
--- a/node_modules/css-tree/lib/syntax/node/Identifier.js
+++ /dev/null
@@ -1,18 +0,0 @@
-import { Ident } from '../../tokenizer/index.js';
-
-export const name = 'Identifier';
-export const structure = {
- name: String
-};
-
-export function parse() {
- return {
- type: 'Identifier',
- loc: this.getLocation(this.tokenStart, this.tokenEnd),
- name: this.consume(Ident)
- };
-}
-
-export function generate(node) {
- this.token(Ident, node.name);
-}
diff --git a/node_modules/css-tree/lib/syntax/node/MediaFeature.js b/node_modules/css-tree/lib/syntax/node/MediaFeature.js
deleted file mode 100644
index 6776daab..00000000
--- a/node_modules/css-tree/lib/syntax/node/MediaFeature.js
+++ /dev/null
@@ -1,77 +0,0 @@
-import {
- Ident,
- Number,
- Dimension,
- LeftParenthesis,
- RightParenthesis,
- Colon,
- Delim
-} from '../../tokenizer/index.js';
-
-export const name = 'MediaFeature';
-export const structure = {
- name: String,
- value: ['Identifier', 'Number', 'Dimension', 'Ratio', null]
-};
-
-export function parse() {
- const start = this.tokenStart;
- let name;
- let value = null;
-
- this.eat(LeftParenthesis);
- this.skipSC();
-
- name = this.consume(Ident);
- this.skipSC();
-
- if (this.tokenType !== RightParenthesis) {
- this.eat(Colon);
- this.skipSC();
-
- switch (this.tokenType) {
- case Number:
- if (this.lookupNonWSType(1) === Delim) {
- value = this.Ratio();
- } else {
- value = this.Number();
- }
-
- break;
-
- case Dimension:
- value = this.Dimension();
- break;
-
- case Ident:
- value = this.Identifier();
- break;
-
- default:
- this.error('Number, dimension, ratio or identifier is expected');
- }
-
- this.skipSC();
- }
-
- this.eat(RightParenthesis);
-
- return {
- type: 'MediaFeature',
- loc: this.getLocation(start, this.tokenStart),
- name,
- value
- };
-}
-
-export function generate(node) {
- this.token(LeftParenthesis, '(');
- this.token(Ident, node.name);
-
- if (node.value !== null) {
- this.token(Colon, ':');
- this.node(node.value);
- }
-
- this.token(RightParenthesis, ')');
-}
diff --git a/node_modules/css-tree/lib/syntax/node/MediaQuery.js b/node_modules/css-tree/lib/syntax/node/MediaQuery.js
deleted file mode 100644
index 6817b49f..00000000
--- a/node_modules/css-tree/lib/syntax/node/MediaQuery.js
+++ /dev/null
@@ -1,60 +0,0 @@
-import {
- WhiteSpace,
- Comment,
- Ident,
- LeftParenthesis
-} from '../../tokenizer/index.js';
-
-export const name = 'MediaQuery';
-export const structure = {
- children: [[
- 'Identifier',
- 'MediaFeature',
- 'WhiteSpace'
- ]]
-};
-
-export function parse() {
- const children = this.createList();
- let child = null;
-
- this.skipSC();
-
- scan:
- while (!this.eof) {
- switch (this.tokenType) {
- case Comment:
- case WhiteSpace:
- this.next();
- continue;
-
- case Ident:
- child = this.Identifier();
- break;
-
- case LeftParenthesis:
- child = this.MediaFeature();
- break;
-
- default:
- break scan;
- }
-
- children.push(child);
- }
-
- if (child === null) {
- this.error('Identifier or parenthesis is expected');
- }
-
- return {
- type: 'MediaQuery',
- loc: this.getLocationFromList(children),
- children
- };
-}
-
-export function generate(node) {
- this.children(node);
-}
-
diff --git a/node_modules/css-tree/lib/syntax/node/MediaQueryList.js b/node_modules/css-tree/lib/syntax/node/MediaQueryList.js
deleted file mode 100644
index 1c16bcd2..00000000
--- a/node_modules/css-tree/lib/syntax/node/MediaQueryList.js
+++ /dev/null
@@ -1,34 +0,0 @@
-import { Comma } from '../../tokenizer/index.js';
-
-export const name = 'MediaQueryList';
-export const structure = {
- children: [[
- 'MediaQuery'
- ]]
-};
-
-export function parse() {
- const children = this.createList();
-
- this.skipSC();
-
- while (!this.eof) {
- children.push(this.MediaQuery());
-
- if (this.tokenType !== Comma) {
- break;
- }
-
- this.next();
- }
-
- return {
- type: 'MediaQueryList',
- loc: this.getLocationFromList(children),
- children
- };
-}
-
-export function generate(node) {
- this.children(node, () => this.token(Comma, ','));
-}
diff --git a/node_modules/css-tree/lib/syntax/node/NestingSelector.js b/node_modules/css-tree/lib/syntax/node/NestingSelector.js
deleted file mode 100644
index 33c8b6a9..00000000
--- a/node_modules/css-tree/lib/syntax/node/NestingSelector.js
+++ /dev/null
@@ -1,22 +0,0 @@
-import { Delim } from '../../tokenizer/index.js';
-
-const AMPERSAND = 0x0026; // U+0026 AMPERSAND (&)
-
-export const name = 'NestingSelector';
-export const structure = {
-};
-
-export function parse() {
- const start = this.tokenStart;
-
- this.eatDelim(AMPERSAND);
-
- return {
- type: 'NestingSelector',
- loc: this.getLocation(start, this.tokenStart)
- };
-}
-
-export function generate() {
- this.token(Delim, '&');
-}
diff --git a/node_modules/css-tree/lib/syntax/node/Nth.js b/node_modules/css-tree/lib/syntax/node/Nth.js
deleted file mode 100644
index bfd74a15..00000000
--- a/node_modules/css-tree/lib/syntax/node/Nth.js
+++ /dev/null
@@ -1,47 +0,0 @@
-import { Ident } from '../../tokenizer/index.js';
-
-export const name = 'Nth';
-export const structure = {
- nth: ['AnPlusB', 'Identifier'],
- selector: ['SelectorList', null]
-};
-
-export function parse() {
- this.skipSC();
-
- const start = this.tokenStart;
- let end = start;
- let selector = null;
- let nth;
-
- if (this.lookupValue(0, 'odd') || this.lookupValue(0, 'even')) {
- nth = this.Identifier();
- } else {
- nth = this.AnPlusB();
- }
-
- end = this.tokenStart;
- this.skipSC();
-
- if (this.lookupValue(0, 'of')) {
- this.next();
-
- selector = this.SelectorList();
- end = this.tokenStart;
- }
-
- return {
- type: 'Nth',
- loc: this.getLocation(start, end),
- nth,
- selector
- };
-}
-
-export function generate(node) {
- this.node(node.nth);
- if (node.selector !== null) {
- this.token(Ident, 'of');
- this.node(node.selector);
- }
-}
diff --git a/node_modules/css-tree/lib/syntax/node/Number.js b/node_modules/css-tree/lib/syntax/node/Number.js
deleted file mode 100644
index a9d8f0af..00000000
--- a/node_modules/css-tree/lib/syntax/node/Number.js
+++ /dev/null
@@ -1,18 +0,0 @@
-import { Number as NumberToken } from '../../tokenizer/index.js';
-
-export const name = 'Number';
-export const structure = {
- value: String
-};
-
-export function parse() {
- return {
- type: 'Number',
- loc: this.getLocation(this.tokenStart, this.tokenEnd),
- value: this.consume(NumberToken)
- };
-}
-
-export function generate(node) {
- this.token(NumberToken, node.value);
-}
diff --git a/node_modules/css-tree/lib/syntax/node/Operator.js b/node_modules/css-tree/lib/syntax/node/Operator.js
deleted file mode 100644
index 4f1238b9..00000000
--- a/node_modules/css-tree/lib/syntax/node/Operator.js
+++ /dev/null
@@ -1,21 +0,0 @@
-// '/' | '*' | ',' | ':' | '+' | '-'
-export const name = 'Operator';
-export const structure = {
- value: String
-};
-
-export function parse() {
- const start = this.tokenStart;
-
- this.next();
-
- return {
- type: 'Operator',
- loc: this.getLocation(start, this.tokenStart),
- value: this.substrToCursor(start)
- };
-}
-
-export function generate(node) {
- this.tokenize(node.value);
-}
diff --git a/node_modules/css-tree/lib/syntax/node/Parentheses.js b/node_modules/css-tree/lib/syntax/node/Parentheses.js
deleted file mode 100644
index 8c6cdb52..00000000
--- a/node_modules/css-tree/lib/syntax/node/Parentheses.js
+++ /dev/null
@@ -1,34 +0,0 @@
-import {
- LeftParenthesis,
- RightParenthesis
-} from '../../tokenizer/index.js';
-
-export const name = 'Parentheses';
-export const structure = {
- children: [[]]
-};
-
-export function parse(readSequence, recognizer) {
- const start = this.tokenStart;
- let children = null;
-
- this.eat(LeftParenthesis);
-
- children = readSequence.call(this, recognizer);
-
- if (!this.eof) {
- this.eat(RightParenthesis);
- }
-
- return {
- type: 'Parentheses',
- loc: this.getLocation(start, this.tokenStart),
- children
- };
-}
-
-export function generate(node) {
- this.token(LeftParenthesis, '(');
- this.children(node);
- this.token(RightParenthesis, ')');
-}
diff --git a/node_modules/css-tree/lib/syntax/node/Percentage.js b/node_modules/css-tree/lib/syntax/node/Percentage.js
deleted file mode 100644
index 3c8b628b..00000000
--- a/node_modules/css-tree/lib/syntax/node/Percentage.js
+++ /dev/null
@@ -1,18 +0,0 @@
-import { Percentage } from '../../tokenizer/index.js';
-
-export const name = 'Percentage';
-export const structure = {
- value: String
-};
-
-export function parse() {
- return {
- type: 'Percentage',
- loc: this.getLocation(this.tokenStart, this.tokenEnd),
- value: this.consumeNumber(Percentage)
- };
-}
-
-export function generate(node) {
- this.token(Percentage, node.value + '%');
-}
diff --git a/node_modules/css-tree/lib/syntax/node/PseudoClassSelector.js b/node_modules/css-tree/lib/syntax/node/PseudoClassSelector.js
deleted file mode 100644
index 8b4196f6..00000000
--- a/node_modules/css-tree/lib/syntax/node/PseudoClassSelector.js
+++ /dev/null
@@ -1,63 +0,0 @@
-import {
- Ident,
- Function as FunctionToken,
- Colon,
- RightParenthesis
-} from '../../tokenizer/index.js';
-
-
-export const name = 'PseudoClassSelector';
-export const walkContext = 'function';
-export const structure = {
- name: String,
- children: [['Raw'], null]
-};
-
-// : [ <ident> | <function-token> <any-value>? ) ]
-export function parse() {
- const start = this.tokenStart;
- let children = null;
- let name;
- let nameLowerCase;
-
- this.eat(Colon);
-
- if (this.tokenType === FunctionToken) {
- name = this.consumeFunctionName();
- nameLowerCase = name.toLowerCase();
-
- if (hasOwnProperty.call(this.pseudo, nameLowerCase)) {
- this.skipSC();
- children = this.pseudo[nameLowerCase].call(this);
- this.skipSC();
- } else {
- children = this.createList();
- children.push(
- this.Raw(this.tokenIndex, null, false)
- );
- }
-
- this.eat(RightParenthesis);
- } else {
- name = this.consume(Ident);
- }
-
- return {
- type: 'PseudoClassSelector',
- loc: this.getLocation(start, this.tokenStart),
- name,
- children
- };
-}
-
-export function generate(node) {
- this.token(Colon, ':');
-
- if (node.children === null) {
- this.token(Ident, node.name);
- } else {
- this.token(FunctionToken, node.name + '(');
- this.children(node);
- this.token(RightParenthesis, ')');
- }
-}
diff --git a/node_modules/css-tree/lib/syntax/node/PseudoElementSelector.js b/node_modules/css-tree/lib/syntax/node/PseudoElementSelector.js
deleted file mode 100644
index fa17d2e0..00000000
--- a/node_modules/css-tree/lib/syntax/node/PseudoElementSelector.js
+++ /dev/null
@@ -1,64 +0,0 @@
-import {
- Ident,
- Function as FunctionToken,
- Colon,
- RightParenthesis
-} from '../../tokenizer/index.js';
-
-export const name = 'PseudoElementSelector';
-export const walkContext = 'function';
-export const structure = {
- name: String,
- children: [['Raw'], null]
-};
-
-// :: [ <ident> | <function-token> <any-value>? ) ]
-export function parse() {
- const start = this.tokenStart;
- let children = null;
- let name;
- let nameLowerCase;
-
- this.eat(Colon);
- this.eat(Colon);
-
- if (this.tokenType === FunctionToken) {
- name = this.consumeFunctionName();
- nameLowerCase = name.toLowerCase();
-
- if (hasOwnProperty.call(this.pseudo, nameLowerCase)) {
- this.skipSC();
- children = this.pseudo[nameLowerCase].call(this);
- this.skipSC();
- } else {
- children = this.createList();
- children.push(
- this.Raw(this.tokenIndex, null, false)
- );
- }
-
- this.eat(RightParenthesis);
- } else {
- name = this.consume(Ident);
- }
-
- return {
- type: 'PseudoElementSelector',
- loc: this.getLocation(start, this.tokenStart),
- name,
- children
- };
-}
-
-export function generate(node) {
- this.token(Colon, ':');
- this.token(Colon, ':');
-
- if (node.children === null) {
- this.token(Ident, node.name);
- } else {
- this.token(FunctionToken, node.name + '(');
- this.children(node);
- this.token(RightParenthesis, ')');
- }
-}
diff --git a/node_modules/css-tree/lib/syntax/node/Ratio.js b/node_modules/css-tree/lib/syntax/node/Ratio.js
deleted file mode 100644
index c2e08a51..00000000
--- a/node_modules/css-tree/lib/syntax/node/Ratio.js
+++ /dev/null
@@ -1,59 +0,0 @@
-import { isDigit, Delim, Number as NumberToken } from '../../tokenizer/index.js';
-
-const SOLIDUS = 0x002F; // U+002F SOLIDUS (/)
-const FULLSTOP = 0x002E; // U+002E FULL STOP (.)
-
-// Terms of <ratio> should be a positive numbers (not zero or negative)
-// (see https://drafts.csswg.org/mediaqueries-3/#values)
-// However, -o-min-device-pixel-ratio takes fractional values as a ratio's term
-// and this is using by various sites. Therefore we relax checking on parse
-// to test a term is unsigned number without an exponent part.
-// Additional checking may be applied on lexer validation.
-function consumeNumber() {
- this.skipSC();
-
- const value = this.consume(NumberToken);
-
- for (let i = 0; i < value.length; i++) {
- const code = value.charCodeAt(i);
- if (!isDigit(code) && code !== FULLSTOP) {
- this.error('Unsigned number is expected', this.tokenStart - value.length + i);
- }
- }
-
- if (Number(value) === 0) {
- this.error('Zero number is not allowed', this.tokenStart - value.length);
- }
-
- return value;
-}
-
-export const name = 'Ratio';
-export const structure = {
- left: String,
- right: String
-};
-
-// <positive-integer> S* '/' S* <positive-integer>
-export function parse() {
- const start = this.tokenStart;
- const left = consumeNumber.call(this);
- let right;
-
- this.skipSC();
- this.eatDelim(SOLIDUS);
- right = consumeNumber.call(this);
-
- return {
- type: 'Ratio',
- loc: this.getLocation(start, this.tokenStart),
- left,
- right
- };
-}
-
-export function generate(node) {
- this.token(NumberToken, node.left);
- this.token(Delim, '/');
- this.token(NumberToken, node.right);
-}
diff --git a/node_modules/css-tree/lib/syntax/node/Raw.js b/node_modules/css-tree/lib/syntax/node/Raw.js
deleted file mode 100644
index ebc422f7..00000000
--- a/node_modules/css-tree/lib/syntax/node/Raw.js
+++ /dev/null
@@ -1,41 +0,0 @@
-import { WhiteSpace } from '../../tokenizer/index.js';
-
-function getOffsetExcludeWS() {
- if (this.tokenIndex > 0) {
- if (this.lookupType(-1) === WhiteSpace) {
- return this.tokenIndex > 1
- ? this.getTokenStart(this.tokenIndex - 1)
- : this.firstCharOffset;
- }
- }
-
- return this.tokenStart;
-}
-
-export const name = 'Raw';
-export const structure = {
- value: String
-};
-
-export function parse(startToken, consumeUntil, excludeWhiteSpace) {
- const startOffset = this.getTokenStart(startToken);
- let endOffset;
-
- this.skipUntilBalanced(startToken, consumeUntil || this.consumeUntilBalanceEnd);
-
- if (excludeWhiteSpace && this.tokenStart > startOffset) {
- endOffset = getOffsetExcludeWS.call(this);
- } else {
- endOffset = this.tokenStart;
- }
-
- return {
- type: 'Raw',
- loc: this.getLocation(startOffset, endOffset),
- value: this.substring(startOffset, endOffset)
- };
-}
-
-export function generate(node) {
- this.tokenize(node.value);
-}
diff --git a/node_modules/css-tree/lib/syntax/node/Rule.js b/node_modules/css-tree/lib/syntax/node/Rule.js
deleted file mode 100644
index 08c8f989..00000000
--- a/node_modules/css-tree/lib/syntax/node/Rule.js
+++ /dev/null
@@ -1,51 +0,0 @@
-import { LeftCurlyBracket } from '../../tokenizer/index.js';
-
-function consumeRaw(startToken) {
- return this.Raw(startToken, this.consumeUntilLeftCurlyBracket, true);
-}
-
-function consumePrelude() {
- const prelude = this.SelectorList();
-
- if (prelude.type !== 'Raw' &&
- this.eof === false &&
- this.tokenType !== LeftCurlyBracket) {
- this.error();
- }
-
- return prelude;
-}
-
-export const name = 'Rule';
-export const walkContext = 'rule';
-export const structure = {
- prelude: ['SelectorList', 'Raw'],
- block: ['Block']
-};
-
-export function parse() {
- const startToken = this.tokenIndex;
- const startOffset = this.tokenStart;
- let prelude;
- let block;
-
- if (this.parseRulePrelude) {
- prelude = this.parseWithFallback(consumePrelude, consumeRaw);
- } else {
- prelude = consumeRaw.call(this, startToken);
- }
-
- block = this.Block(true);
-
- return {
- type: 'Rule',
- loc: this.getLocation(startOffset, this.tokenStart),
- prelude,
- block
- };
-}
-export function generate(node) {
- this.node(node.prelude);
- this.node(node.block);
-}
-
diff --git a/node_modules/css-tree/lib/syntax/node/Selector.js b/node_modules/css-tree/lib/syntax/node/Selector.js
deleted file mode 100644
index 3ef44718..00000000
--- a/node_modules/css-tree/lib/syntax/node/Selector.js
+++ /dev/null
@@ -1,32 +0,0 @@
-export const name = 'Selector';
-export const structure = {
- children: [[
- 'TypeSelector',
- 'IdSelector',
- 'ClassSelector',
- 'AttributeSelector',
- 'PseudoClassSelector',
- 'PseudoElementSelector',
- 'Combinator',
- 'WhiteSpace'
- ]]
-};
-
-export function parse() {
- const children = this.readSequence(this.scope.Selector);
-
- // nothing were consumed
- if (this.getFirstListNode(children) === null) {
- this.error('Selector is expected');
- }
-
- return {
- type: 'Selector',
- loc: this.getLocationFromList(children),
- children
- };
-}
-
-export function generate(node) {
- this.children(node);
-}
diff --git a/node_modules/css-tree/lib/syntax/node/SelectorList.js b/node_modules/css-tree/lib/syntax/node/SelectorList.js
deleted file mode 100644
index ebba3cdd..00000000
--- a/node_modules/css-tree/lib/syntax/node/SelectorList.js
+++ /dev/null
@@ -1,35 +0,0 @@
-import { Comma } from '../../tokenizer/index.js';
-
-export const name = 'SelectorList';
-export const walkContext = 'selector';
-export const structure = {
- children: [[
- 'Selector',
- 'Raw'
- ]]
-};
-
-export function parse() {
- const children = this.createList();
-
- while (!this.eof) {
- children.push(this.Selector());
-
- if (this.tokenType === Comma) {
- this.next();
- continue;
- }
-
- break;
- }
-
- return {
- type: 'SelectorList',
- loc: this.getLocationFromList(children),
- children
- };
-}
-
-export function generate(node) {
- this.children(node, () => this.token(Comma, ','));
-}
diff --git a/node_modules/css-tree/lib/syntax/node/String.js b/node_modules/css-tree/lib/syntax/node/String.js
deleted file mode 100644
index 95e1aaa5..00000000
--- a/node_modules/css-tree/lib/syntax/node/String.js
+++ /dev/null
@@ -1,19 +0,0 @@
-import { String as StringToken } from '../../tokenizer/index.js';
-import { decode, encode } from '../../utils/string.js';
-
-export const name = 'String';
-export const structure = {
- value: String
-};
-
-export function parse() {
- return {
- type: 'String',
- loc: this.getLocation(this.tokenStart, this.tokenEnd),
- value: decode(this.consume(StringToken))
- };
-}
-
-export function generate(node) {
- this.token(StringToken, encode(node.value));
-}
diff --git a/node_modules/css-tree/lib/syntax/node/StyleSheet.js b/node_modules/css-tree/lib/syntax/node/StyleSheet.js
deleted file mode 100644
index 02c41fbf..00000000
--- a/node_modules/css-tree/lib/syntax/node/StyleSheet.js
+++ /dev/null
@@ -1,82 +0,0 @@
-import {
- WhiteSpace,
- Comment,
- AtKeyword,
- CDO,
- CDC
-} from '../../tokenizer/index.js';
-
-const EXCLAMATIONMARK = 0x0021; // U+0021 EXCLAMATION MARK (!)
-
-function consumeRaw(startToken) {
- return this.Raw(startToken, null, false);
-}
-
-export const name = 'StyleSheet';
-export const walkContext = 'stylesheet';
-export const structure = {
- children: [[
- 'Comment',
- 'CDO',
- 'CDC',
- 'Atrule',
- 'Rule',
- 'Raw'
- ]]
-};
-
-export function parse() {
- const start = this.tokenStart;
- const children = this.createList();
- let child;
-
- scan:
- while (!this.eof) {
- switch (this.tokenType) {
- case WhiteSpace:
- this.next();
- continue;
-
- case Comment:
- // ignore comments except exclamation comments (i.e. /*! .. */) on top level
- if (this.charCodeAt(this.tokenStart + 2) !== EXCLAMATIONMARK) {
- this.next();
- continue;
- }
-
- child = this.Comment();
- break;
-
- case CDO: // <!--
- child = this.CDO();
- break;
-
- case CDC: // -->
- child = this.CDC();
- break;
-
- // CSS Syntax Module Level 3
- // §2.2 Error handling
- // At the "top level" of a stylesheet, an <at-keyword-token> starts an at-rule.
- case AtKeyword:
- child = this.parseWithFallback(this.Atrule, consumeRaw);
- break;
-
- // Anything else starts a qualified rule ...
- default:
- child = this.parseWithFallback(this.Rule, consumeRaw);
- }
-
- children.push(child);
- }
-
- return {
- type: 'StyleSheet',
- loc: this.getLocation(start, this.tokenStart),
- children
- };
-}
-
-export function generate(node) {
- this.children(node);
-}
diff --git a/node_modules/css-tree/lib/syntax/node/TypeSelector.js b/node_modules/css-tree/lib/syntax/node/TypeSelector.js
deleted file mode 100644
index 272e195d..00000000
--- a/node_modules/css-tree/lib/syntax/node/TypeSelector.js
+++ /dev/null
@@ -1,52 +0,0 @@
-import { Ident } from '../../tokenizer/index.js';
-
-const ASTERISK = 0x002A; // U+002A ASTERISK (*)
-const VERTICALLINE = 0x007C; // U+007C VERTICAL LINE (|)
-
-function eatIdentifierOrAsterisk() {
- if (this.tokenType !== Ident &&
- this.isDelim(ASTERISK) === false) {
- this.error('Identifier or asterisk is expected');
- }
-
- this.next();
-}
-
-export const name = 'TypeSelector';
-export const structure = {
- name: String
-};
-
-// ident
-// ident|ident
-// ident|*
-// *
-// *|ident
-// *|*
-// |ident
-// |*
-export function parse() {
- const start = this.tokenStart;
-
- if (this.isDelim(VERTICALLINE)) {
- this.next();
- eatIdentifierOrAsterisk.call(this);
- } else {
- eatIdentifierOrAsterisk.call(this);
-
- if (this.isDelim(VERTICALLINE)) {
- this.next();
- eatIdentifierOrAsterisk.call(this);
- }
- }
-
- return {
- type: 'TypeSelector',
- loc: this.getLocation(start, this.tokenStart),
- name: this.substrToCursor(start)
- };
-}
-
-export function generate(node) {
- this.tokenize(node.name);
-}
diff --git a/node_modules/css-tree/lib/syntax/node/UnicodeRange.js b/node_modules/css-tree/lib/syntax/node/UnicodeRange.js
deleted file mode 100644
index 95ee8b96..00000000
--- a/node_modules/css-tree/lib/syntax/node/UnicodeRange.js
+++ /dev/null
@@ -1,156 +0,0 @@
-import {
- isHexDigit,
- Ident,
- Number,
- Dimension
-} from '../../tokenizer/index.js';
-
-const PLUSSIGN = 0x002B; // U+002B PLUS SIGN (+)
-const HYPHENMINUS = 0x002D; // U+002D HYPHEN-MINUS (-)
-const QUESTIONMARK = 0x003F; // U+003F QUESTION MARK (?)
-
-function eatHexSequence(offset, allowDash) {
- let len = 0;
-
- for (let pos = this.tokenStart + offset; pos < this.tokenEnd; pos++) {
- const code = this.charCodeAt(pos);
-
- if (code === HYPHENMINUS && allowDash && len !== 0) {
- eatHexSequence.call(this, offset + len + 1, false);
- return -1;
- }
-
- if (!isHexDigit(code)) {
- this.error(
- allowDash && len !== 0
- ? 'Hyphen minus' + (len < 6 ? ' or hex digit' : '') + ' is expected'
- : (len < 6 ? 'Hex digit is expected' : 'Unexpected input'),
- pos
- );
- }
-
- if (++len > 6) {
- this.error('Too many hex digits', pos);
- };
- }
-
- this.next();
- return len;
-}
-
-function eatQuestionMarkSequence(max) {
- let count = 0;
-
- while (this.isDelim(QUESTIONMARK)) {
- if (++count > max) {
- this.error('Too many question marks');
- }
-
- this.next();
- }
-}
-
-function startsWith(code) {
- if (this.charCodeAt(this.tokenStart) !== code) {
- this.error((code === PLUSSIGN ? 'Plus sign' : 'Hyphen minus') + ' is expected');
- }
-}
-
-// https://drafts.csswg.org/css-syntax/#urange
-// Informally, the <urange> production has three forms:
-// U+0001
-// Defines a range consisting of a single code point, in this case the code point "1".
-// U+0001-00ff
-// Defines a range of codepoints between the first and the second value, in this case
-// the range between "1" and "ff" (255 in decimal) inclusive.
-// U+00??
-// Defines a range of codepoints where the "?" characters range over all hex digits,
-// in this case defining the same as the value U+0000-00ff.
-// In each form, a maximum of 6 digits is allowed for each hexadecimal number (if you treat "?" as a hexadecimal digit).
-//
-// <urange> =
-// u '+' <ident-token> '?'* |
-// u <dimension-token> '?'* |
-// u <number-token> '?'* |
-// u <number-token> <dimension-token> |
-// u <number-token> <number-token> |
-// u '+' '?'+
-function scanUnicodeRange() {
- let hexLength = 0;
-
- switch (this.tokenType) {
- case Number:
- // u <number-token> '?'*
- // u <number-token> <dimension-token>
- // u <number-token> <number-token>
- hexLength = eatHexSequence.call(this, 1, true);
-
- if (this.isDelim(QUESTIONMARK)) {
- eatQuestionMarkSequence.call(this, 6 - hexLength);
- break;
- }
-
- if (this.tokenType === Dimension ||
- this.tokenType === Number) {
- startsWith.call(this, HYPHENMINUS);
- eatHexSequence.call(this, 1, false);
- break;
- }
-
- break;
-
- case Dimension:
- // u <dimension-token> '?'*
- hexLength = eatHexSequence.call(this, 1, true);
-
- if (hexLength > 0) {
- eatQuestionMarkSequence.call(this, 6 - hexLength);
- }
-
- break;
-
- default:
- // u '+' <ident-token> '?'*
- // u '+' '?'+
- this.eatDelim(PLUSSIGN);
-
- if (this.tokenType === Ident) {
- hexLength = eatHexSequence.call(this, 0, true);
- if (hexLength > 0) {
- eatQuestionMarkSequence.call(this, 6 - hexLength);
- }
- break;
- }
-
- if (this.isDelim(QUESTIONMARK)) {
- this.next();
- eatQuestionMarkSequence.call(this, 5);
- break;
- }
-
- this.error('Hex digit or question mark is expected');
- }
-}
-
-export const name = 'UnicodeRange';
-export const structure = {
- value: String
-};
-
-export function parse() {
- const start = this.tokenStart;
-
- // U or u
- this.eatIdent('u');
- scanUnicodeRange.call(this);
-
- return {
- type: 'UnicodeRange',
- loc: this.getLocation(start, this.tokenStart),
- value: this.substrToCursor(start)
- };
-}
-
-export function generate(node) {
- this.tokenize(node.value);
-}
diff --git a/node_modules/css-tree/lib/syntax/node/Url.js b/node_modules/css-tree/lib/syntax/node/Url.js
deleted file mode 100644
index ac52c9d9..00000000
--- a/node_modules/css-tree/lib/syntax/node/Url.js
+++ /dev/null
@@ -1,52 +0,0 @@
-import * as url from '../../utils/url.js';
-import * as string from '../../utils/string.js';
-import {
- Function as FunctionToken,
- String as StringToken,
- Url,
- RightParenthesis
-} from '../../tokenizer/index.js';
-
-export const name = 'Url';
-export const structure = {
- value: String
-};
-
-// <url-token> | <function-token> <string> )
-export function parse() {
- const start = this.tokenStart;
- let value;
-
- switch (this.tokenType) {
- case Url:
- value = url.decode(this.consume(Url));
- break;
-
- case FunctionToken:
- if (!this.cmpStr(this.tokenStart, this.tokenEnd, 'url(')) {
- this.error('Function name must be `url`');
- }
-
- this.eat(FunctionToken);
- this.skipSC();
- value = string.decode(this.consume(StringToken));
- this.skipSC();
- if (!this.eof) {
- this.eat(RightParenthesis);
- }
- break;
-
- default:
- this.error('Url or Function is expected');
- }
-
- return {
- type: 'Url',
- loc: this.getLocation(start, this.tokenStart),
- value
- };
-}
-
-export function generate(node) {
- this.token(Url, url.encode(node.value));
-}
diff --git a/node_modules/css-tree/lib/syntax/node/Value.js b/node_modules/css-tree/lib/syntax/node/Value.js
deleted file mode 100644
index ba465bc0..00000000
--- a/node_modules/css-tree/lib/syntax/node/Value.js
+++ /dev/null
@@ -1,19 +0,0 @@
-export const name = 'Value';
-export const structure = {
- children: [[]]
-};
-
-export function parse() {
- const start = this.tokenStart;
- const children = this.readSequence(this.scope.Value);
-
- return {
- type: 'Value',
- loc: this.getLocation(start, this.tokenStart),
- children
- };
-}
-
-export function generate(node) {
- this.children(node);
-}
diff --git a/node_modules/css-tree/lib/syntax/node/WhiteSpace.js b/node_modules/css-tree/lib/syntax/node/WhiteSpace.js
deleted file mode 100644
index df34e6f7..00000000
--- a/node_modules/css-tree/lib/syntax/node/WhiteSpace.js
+++ /dev/null
@@ -1,27 +0,0 @@
-import { WhiteSpace } from '../../tokenizer/index.js';
-
-const SPACE = Object.freeze({
- type: 'WhiteSpace',
- loc: null,
- value: ' '
-});
-
-export const name = 'WhiteSpace';
-export const structure = {
- value: String
-};
-
-export function parse() {
- this.eat(WhiteSpace);
- return SPACE;
-
- // return {
- // type: 'WhiteSpace',
- // loc: this.getLocation(this.tokenStart, this.tokenEnd),
- // value: this.consume(WHITESPACE)
- // };
-}
-
-export function generate(node) {
- this.token(WhiteSpace, node.value);
-}
diff --git a/node_modules/css-tree/lib/syntax/node/index-generate.js b/node_modules/css-tree/lib/syntax/node/index-generate.js
deleted file mode 100644
index c007ced5..00000000
--- a/node_modules/css-tree/lib/syntax/node/index-generate.js
+++ /dev/null
@@ -1,41 +0,0 @@
-export { generate as AnPlusB } from './AnPlusB.js';
-export { generate as Atrule } from './Atrule.js';
-export { generate as AtrulePrelude } from './AtrulePrelude.js';
-export { generate as AttributeSelector } from './AttributeSelector.js';
-export { generate as Block } from './Block.js';
-export { generate as Brackets } from './Brackets.js';
-export { generate as CDC } from './CDC.js';
-export { generate as CDO } from './CDO.js';
-export { generate as ClassSelector } from './ClassSelector.js';
-export { generate as Combinator } from './Combinator.js';
-export { generate as Comment } from './Comment.js';
-export { generate as Declaration } from './Declaration.js';
-export { generate as DeclarationList } from './DeclarationList.js';
-export { generate as Dimension } from './Dimension.js';
-export { generate as Function } from './Function.js';
-export { generate as Hash } from './Hash.js';
-export { generate as Identifier } from './Identifier.js';
-export { generate as IdSelector } from './IdSelector.js';
-export { generate as MediaFeature } from './MediaFeature.js';
-export { generate as MediaQuery } from './MediaQuery.js';
-export { generate as MediaQueryList } from './MediaQueryList.js';
-export { generate as NestingSelector } from './NestingSelector.js';
-export { generate as Nth } from './Nth.js';
-export { generate as Number } from './Number.js';
-export { generate as Operator } from './Operator.js';
-export { generate as Parentheses } from './Parentheses.js';
-export { generate as Percentage } from './Percentage.js';
-export { generate as PseudoClassSelector } from './PseudoClassSelector.js';
-export { generate as PseudoElementSelector } from './PseudoElementSelector.js';
-export { generate as Ratio } from './Ratio.js';
-export { generate as Raw } from './Raw.js';
-export { generate as Rule } from './Rule.js';
-export { generate as Selector } from './Selector.js';
-export { generate as SelectorList } from './SelectorList.js';
-export { generate as String } from './String.js';
-export { generate as StyleSheet } from './StyleSheet.js';
-export { generate as TypeSelector } from './TypeSelector.js';
-export { generate as UnicodeRange } from './UnicodeRange.js';
-export { generate as Url } from './Url.js';
-export { generate as Value } from './Value.js';
-export { generate as WhiteSpace } from './WhiteSpace.js';
diff --git a/node_modules/css-tree/lib/syntax/node/index-parse-selector.js b/node_modules/css-tree/lib/syntax/node/index-parse-selector.js
deleted file mode 100644
index 8bb224eb..00000000
--- a/node_modules/css-tree/lib/syntax/node/index-parse-selector.js
+++ /dev/null
@@ -1,16 +0,0 @@
-export { parse as AnPlusB } from './AnPlusB.js';
-export { parse as AttributeSelector } from './AttributeSelector.js';
-export { parse as ClassSelector } from './ClassSelector.js';
-export { parse as Combinator } from './Combinator.js';
-export { parse as Identifier } from './Identifier.js';
-export { parse as IdSelector } from './IdSelector.js';
-export { parse as NestingSelector } from './NestingSelector.js';
-export { parse as Nth } from './Nth.js';
-export { parse as Percentage } from './Percentage.js';
-export { parse as PseudoClassSelector } from './PseudoClassSelector.js';
-export { parse as PseudoElementSelector } from './PseudoElementSelector.js';
-export { parse as Raw } from './Raw.js';
-export { parse as Selector } from './Selector.js';
-export { parse as SelectorList } from './SelectorList.js';
-export { parse as String } from './String.js';
-export { parse as TypeSelector } from './TypeSelector.js';
diff --git a/node_modules/css-tree/lib/syntax/node/index-parse.js b/node_modules/css-tree/lib/syntax/node/index-parse.js
deleted file mode 100644
index 2384830d..00000000
--- a/node_modules/css-tree/lib/syntax/node/index-parse.js
+++ /dev/null
@@ -1,41 +0,0 @@
-export { parse as AnPlusB } from './AnPlusB.js';
-export { parse as Atrule } from './Atrule.js';
-export { parse as AtrulePrelude } from './AtrulePrelude.js';
-export { parse as AttributeSelector } from './AttributeSelector.js';
-export { parse as Block } from './Block.js';
-export { parse as Brackets } from './Brackets.js';
-export { parse as CDC } from './CDC.js';
-export { parse as CDO } from './CDO.js';
-export { parse as ClassSelector } from './ClassSelector.js';
-export { parse as Combinator } from './Combinator.js';
-export { parse as Comment } from './Comment.js';
-export { parse as Declaration } from './Declaration.js';
-export { parse as DeclarationList } from './DeclarationList.js';
-export { parse as Dimension } from './Dimension.js';
-export { parse as Function } from './Function.js';
-export { parse as Hash } from './Hash.js';
-export { parse as Identifier } from './Identifier.js';
-export { parse as IdSelector } from './IdSelector.js';
-export { parse as MediaFeature } from './MediaFeature.js';
-export { parse as MediaQuery } from './MediaQuery.js';
-export { parse as MediaQueryList } from './MediaQueryList.js';
-export { parse as NestingSelector } from './NestingSelector.js';
-export { parse as Nth } from './Nth.js';
-export { parse as Number } from './Number.js';
-export { parse as Operator } from './Operator.js';
-export { parse as Parentheses } from './Parentheses.js';
-export { parse as Percentage } from './Percentage.js';
-export { parse as PseudoClassSelector } from './PseudoClassSelector.js';
-export { parse as PseudoElementSelector } from './PseudoElementSelector.js';
-export { parse as Ratio } from './Ratio.js';
-export { parse as Raw } from './Raw.js';
-export { parse as Rule } from './Rule.js';
-export { parse as Selector } from './Selector.js';
-export { parse as SelectorList } from './SelectorList.js';
-export { parse as String } from './String.js';
-export { parse as StyleSheet } from './StyleSheet.js';
-export { parse as TypeSelector } from './TypeSelector.js';
-export { parse as UnicodeRange } from './UnicodeRange.js';
-export { parse as Url } from './Url.js';
-export { parse as Value } from './Value.js';
-export { parse as WhiteSpace } from './WhiteSpace.js';
diff --git a/node_modules/css-tree/lib/syntax/node/index.js b/node_modules/css-tree/lib/syntax/node/index.js
deleted file mode 100644
index 61f2f46a..00000000
--- a/node_modules/css-tree/lib/syntax/node/index.js
+++ /dev/null
@@ -1,41 +0,0 @@
-export * as AnPlusB from './AnPlusB.js';
-export * as Atrule from './Atrule.js';
-export * as AtrulePrelude from './AtrulePrelude.js';
-export * as AttributeSelector from './AttributeSelector.js';
-export * as Block from './Block.js';
-export * as Brackets from './Brackets.js';
-export * as CDC from './CDC.js';
-export * as CDO from './CDO.js';
-export * as ClassSelector from './ClassSelector.js';
-export * as Combinator from './Combinator.js';
-export * as Comment from './Comment.js';
-export * as Declaration from './Declaration.js';
-export * as DeclarationList from './DeclarationList.js';
-export * as Dimension from './Dimension.js';
-export * as Function from './Function.js';
-export * as Hash from './Hash.js';
-export * as Identifier from './Identifier.js';
-export * as IdSelector from './IdSelector.js';
-export * as MediaFeature from './MediaFeature.js';
-export * as MediaQuery from './MediaQuery.js';
-export * as MediaQueryList from './MediaQueryList.js';
-export * as NestingSelector from './NestingSelector.js';
-export * as Nth from './Nth.js';
-export * as Number from './Number.js';
-export * as Operator from './Operator.js';
-export * as Parentheses from './Parentheses.js';
-export * as Percentage from './Percentage.js';
-export * as PseudoClassSelector from './PseudoClassSelector.js';
-export * as PseudoElementSelector from './PseudoElementSelector.js';
-export * as Ratio from './Ratio.js';
-export * as Raw from './Raw.js';
-export * as Rule from './Rule.js';
-export * as Selector from './Selector.js';
-export * as SelectorList from './SelectorList.js';
-export * as String from './String.js';
-export * as StyleSheet from './StyleSheet.js';
-export * as TypeSelector from './TypeSelector.js';
-export * as UnicodeRange from './UnicodeRange.js';
-export * as Url from './Url.js';
-export * as Value from './Value.js';
-export * as WhiteSpace from './WhiteSpace.js';
diff --git a/node_modules/css-tree/lib/syntax/pseudo/index.js b/node_modules/css-tree/lib/syntax/pseudo/index.js
deleted file mode 100644
index 148c7aed..00000000
--- a/node_modules/css-tree/lib/syntax/pseudo/index.js
+++ /dev/null
@@ -1,50 +0,0 @@
-const selectorList = {
- parse() {
- return this.createSingleNodeList(
- this.SelectorList()
- );
- }
-};
-
-const selector = {
- parse() {
- return this.createSingleNodeList(
- this.Selector()
- );
- }
-};
-
-const identList = {
- parse() {
- return this.createSingleNodeList(
- this.Identifier()
- );
- }
-};
-
-const nth = {
- parse() {
- return this.createSingleNodeList(
- this.Nth()
- );
- }
-};
-
-export default {
- 'dir': identList,
- 'has': selectorList,
- 'lang': identList,
- 'matches': selectorList,
- 'is': selectorList,
- '-moz-any': selectorList,
- '-webkit-any': selectorList,
- 'where': selectorList,
- 'not': selectorList,
- 'nth-child': nth,
- 'nth-last-child': nth,
- 'nth-last-of-type': nth,
- 'nth-of-type': nth,
- 'slotted': selector,
- 'host': selector,
- 'host-context': selector
-};
diff --git a/node_modules/css-tree/lib/syntax/scope/atrulePrelude.js b/node_modules/css-tree/lib/syntax/scope/atrulePrelude.js
deleted file mode 100644
index c9035552..00000000
--- a/node_modules/css-tree/lib/syntax/scope/atrulePrelude.js
+++ /dev/null
@@ -1,5 +0,0 @@
-import getNode from './default.js';
-
-export default {
- getNode
-};
diff --git a/node_modules/css-tree/lib/syntax/scope/default.js b/node_modules/css-tree/lib/syntax/scope/default.js
deleted file mode 100644
index 8f14035e..00000000
--- a/node_modules/css-tree/lib/syntax/scope/default.js
+++ /dev/null
@@ -1,85 +0,0 @@
-import {
- Ident,
- String as StringToken,
- Number as NumberToken,
- Function as FunctionToken,
- Url,
- Hash,
- Dimension,
- Percentage,
- LeftParenthesis,
- LeftSquareBracket,
- Comma,
- Delim
-} from '../../tokenizer/index.js';
-
-const NUMBERSIGN = 0x0023; // U+0023 NUMBER SIGN (#)
-const ASTERISK = 0x002A; // U+002A ASTERISK (*)
-const PLUSSIGN = 0x002B; // U+002B PLUS SIGN (+)
-const HYPHENMINUS = 0x002D; // U+002D HYPHEN-MINUS (-)
-const SOLIDUS = 0x002F; // U+002F SOLIDUS (/)
-const U = 0x0075; // U+0075 LATIN SMALL LETTER U (u)
-
-export default function defaultRecognizer(context) {
- switch (this.tokenType) {
- case Hash:
- return this.Hash();
-
- case Comma:
- return this.Operator();
-
- case LeftParenthesis:
- return this.Parentheses(this.readSequence, context.recognizer);
-
- case LeftSquareBracket:
- return this.Brackets(this.readSequence, context.recognizer);
-
- case StringToken:
- return this.String();
-
- case Dimension:
- return this.Dimension();
-
- case Percentage:
- return this.Percentage();
-
- case NumberToken:
- return this.Number();
-
- case FunctionToken:
- return this.cmpStr(this.tokenStart, this.tokenEnd, 'url(')
- ? this.Url()
- : this.Function(this.readSequence, context.recognizer);
-
- case Url:
- return this.Url();
-
- case Ident:
- // check for unicode range, it should start with u+ or U+
- if (this.cmpChar(this.tokenStart, U) &&
- this.cmpChar(this.tokenStart + 1, PLUSSIGN)) {
- return this.UnicodeRange();
- } else {
- return this.Identifier();
- }
-
- case Delim: {
- const code = this.charCodeAt(this.tokenStart);
-
- if (code === SOLIDUS ||
- code === ASTERISK ||
- code === PLUSSIGN ||
- code === HYPHENMINUS) {
- return this.Operator(); // TODO: replace with Delim
- }
-
- // TODO: produce a node with Delim node type
-
- if (code === NUMBERSIGN) {
- this.error('Hex or identifier is expected', this.tokenStart + 1);
- }
-
- break;
- }
- }
-};
diff --git a/node_modules/css-tree/lib/syntax/scope/index.js b/node_modules/css-tree/lib/syntax/scope/index.js
deleted file mode 100644
index 6dabbbe1..00000000
--- a/node_modules/css-tree/lib/syntax/scope/index.js
+++ /dev/null
@@ -1,3 +0,0 @@
-export { default as AtrulePrelude } from './atrulePrelude.js';
-export { default as Selector } from './selector.js';
-export { default as Value } from './value.js';
diff --git a/node_modules/css-tree/lib/syntax/scope/selector.js b/node_modules/css-tree/lib/syntax/scope/selector.js
deleted file mode 100644
index a8efcd52..00000000
--- a/node_modules/css-tree/lib/syntax/scope/selector.js
+++ /dev/null
@@ -1,94 +0,0 @@
-import {
- Delim,
- Ident,
- Dimension,
- Percentage,
- Number as NumberToken,
- Hash,
- Colon,
- LeftSquareBracket
-} from '../../tokenizer/index.js';
-
-const NUMBERSIGN = 0x0023; // U+0023 NUMBER SIGN (#)
-const AMPERSAND = 0x0026; // U+0026 AMPERSAND (&)
-const ASTERISK = 0x002A; // U+002A ASTERISK (*)
-const PLUSSIGN = 0x002B; // U+002B PLUS SIGN (+)
-const SOLIDUS = 0x002F; // U+002F SOLIDUS (/)
-const FULLSTOP = 0x002E; // U+002E FULL STOP (.)
-const GREATERTHANSIGN = 0x003E; // U+003E GREATER-THAN SIGN (>)
-const VERTICALLINE = 0x007C; // U+007C VERTICAL LINE (|)
-const TILDE = 0x007E; // U+007E TILDE (~)
-
-function onWhiteSpace(next, children) {
- if (children.last !== null && children.last.type !== 'Combinator' &&
- next !== null && next.type !== 'Combinator') {
- children.push({ // FIXME: this.Combinator() should be used instead
- type: 'Combinator',
- loc: null,
- name: ' '
- });
- }
-}
-
-function getNode() {
- switch (this.tokenType) {
- case LeftSquareBracket:
- return this.AttributeSelector();
-
- case Hash:
- return this.IdSelector();
-
- case Colon:
- if (this.lookupType(1) === Colon) {
- return this.PseudoElementSelector();
- } else {
- return this.PseudoClassSelector();
- }
-
- case Ident:
- return this.TypeSelector();
-
- case NumberToken:
- case Percentage:
- return this.Percentage();
-
- case Dimension:
- // throws when .123ident
- if (this.charCodeAt(this.tokenStart) === FULLSTOP) {
- this.error('Identifier is expected', this.tokenStart + 1);
- }
- break;
-
- case Delim: {
- const code = this.charCodeAt(this.tokenStart);
-
- switch (code) {
- case PLUSSIGN:
- case GREATERTHANSIGN:
- case TILDE:
- case SOLIDUS: // /deep/
- return this.Combinator();
-
- case FULLSTOP:
- return this.ClassSelector();
-
- case ASTERISK:
- case VERTICALLINE:
- return this.TypeSelector();
-
- case NUMBERSIGN:
- return this.IdSelector();
-
- case AMPERSAND:
- return this.NestingSelector();
- }
-
- break;
- }
- }
-};
-
-export default {
- onWhiteSpace,
- getNode
-};
diff --git a/node_modules/css-tree/lib/syntax/scope/value.js b/node_modules/css-tree/lib/syntax/scope/value.js
deleted file mode 100644
index dc94219b..00000000
--- a/node_modules/css-tree/lib/syntax/scope/value.js
+++ /dev/null
@@ -1,25 +0,0 @@
-import getNode from './default.js';
-import expressionFn from '../function/expression.js';
-import varFn from '../function/var.js';
-
-function isPlusMinusOperator(node) {
- return (
- node !== null &&
- node.type === 'Operator' &&
- (node.value[node.value.length - 1] === '-' || node.value[node.value.length - 1] === '+')
- );
-}
-
-export default {
- getNode,
- onWhiteSpace(next, children) {
- if (isPlusMinusOperator(next)) {
- next.value = ' ' + next.value;
- }
- if (isPlusMinusOperator(children.last)) {
- children.last.value += ' ';
- }
- },
- 'expression': expressionFn,
- 'var': varFn
-};
diff --git a/node_modules/css-tree/lib/tokenizer/OffsetToLocation.js b/node_modules/css-tree/lib/tokenizer/OffsetToLocation.js
deleted file mode 100644
index 4ff49031..00000000
--- a/node_modules/css-tree/lib/tokenizer/OffsetToLocation.js
+++ /dev/null
@@ -1,87 +0,0 @@
-import { adoptBuffer } from './adopt-buffer.js';
-import { isBOM } from './char-code-definitions.js';
-
-const N = 10;
-const F = 12;
-const R = 13;
-
-function computeLinesAndColumns(host) {
- const source = host.source;
- const sourceLength = source.length;
- const startOffset = source.length > 0 ? isBOM(source.charCodeAt(0)) : 0;
- const lines = adoptBuffer(host.lines, sourceLength);
- const columns = adoptBuffer(host.columns, sourceLength);
- let line = host.startLine;
- let column = host.startColumn;
-
- for (let i = startOffset; i < sourceLength; i++) {
- const code = source.charCodeAt(i);
-
- lines[i] = line;
- columns[i] = column++;
-
- if (code === N || code === R || code === F) {
- if (code === R && i + 1 < sourceLength && source.charCodeAt(i + 1) === N) {
- i++;
- lines[i] = line;
- columns[i] = column;
- }
-
- line++;
- column = 1;
- }
- }
-
- lines[sourceLength] = line;
- columns[sourceLength] = column;
-
- host.lines = lines;
- host.columns = columns;
- host.computed = true;
-}
-
-export class OffsetToLocation {
- constructor() {
- this.lines = null;
- this.columns = null;
- this.computed = false;
- }
- setSource(source, startOffset = 0, startLine = 1, startColumn = 1) {
- this.source = source;
- this.startOffset = startOffset;
- this.startLine = startLine;
- this.startColumn = startColumn;
- this.computed = false;
- }
- getLocation(offset, filename) {
- if (!this.computed) {
- computeLinesAndColumns(this);
- }
-
- return {
- source: filename,
- offset: this.startOffset + offset,
- line: this.lines[offset],
- column: this.columns[offset]
- };
- }
- getLocationRange(start, end, filename) {
- if (!this.computed) {
- computeLinesAndColumns(this);
- }
-
- return {
- source: filename,
- start: {
- offset: this.startOffset + start,
- line: this.lines[start],
- column: this.columns[start]
- },
- end: {
- offset: this.startOffset + end,
- line: this.lines[end],
- column: this.columns[end]
- }
- };
- }
-};
diff --git a/node_modules/css-tree/lib/tokenizer/TokenStream.js b/node_modules/css-tree/lib/tokenizer/TokenStream.js
deleted file mode 100644
index 5dd52755..00000000
--- a/node_modules/css-tree/lib/tokenizer/TokenStream.js
+++ /dev/null
@@ -1,272 +0,0 @@
-import { adoptBuffer } from './adopt-buffer.js';
-import { cmpStr } from './utils.js';
-import tokenNames from './names.js';
-import {
- WhiteSpace,
- Comment,
- Delim,
- EOF,
- Function as FunctionToken,
- LeftParenthesis,
- RightParenthesis,
- LeftSquareBracket,
- RightSquareBracket,
- LeftCurlyBracket,
- RightCurlyBracket
-} from './types.js';
-
-const OFFSET_MASK = 0x00FFFFFF;
-const TYPE_SHIFT = 24;
-const balancePair = new Map([
- [FunctionToken, RightParenthesis],
- [LeftParenthesis, RightParenthesis],
- [LeftSquareBracket, RightSquareBracket],
- [LeftCurlyBracket, RightCurlyBracket]
-]);
-
-export class TokenStream {
- constructor(source, tokenize) {
- this.setSource(source, tokenize);
- }
- reset() {
- this.eof = false;
- this.tokenIndex = -1;
- this.tokenType = 0;
- this.tokenStart = this.firstCharOffset;
- this.tokenEnd = this.firstCharOffset;
- }
- setSource(source = '', tokenize = () => {}) {
- source = String(source || '');
-
- const sourceLength = source.length;
- const offsetAndType = adoptBuffer(this.offsetAndType, source.length + 1); // +1 because of eof-token
- const balance = adoptBuffer(this.balance, source.length + 1);
- let tokenCount = 0;
- let balanceCloseType = 0;
- let balanceStart = 0;
- let firstCharOffset = -1;
-
- // capture buffers
- this.offsetAndType = null;
- this.balance = null;
-
- tokenize(source, (type, start, end) => {
- switch (type) {
- default:
- balance[tokenCount] = sourceLength;
- break;
-
- case balanceCloseType: {
- let balancePrev = balanceStart & OFFSET_MASK;
- balanceStart = balance[balancePrev];
- balanceCloseType = balanceStart >> TYPE_SHIFT;
- balance[tokenCount] = balancePrev;
- balance[balancePrev++] = tokenCount;
- for (; balancePrev < tokenCount; balancePrev++) {
- if (balance[balancePrev] === sourceLength) {
- balance[balancePrev] = tokenCount;
- }
- }
- break;
- }
-
- case LeftParenthesis:
- case FunctionToken:
- case LeftSquareBracket:
- case LeftCurlyBracket:
- balance[tokenCount] = balanceStart;
- balanceCloseType = balancePair.get(type);
- balanceStart = (balanceCloseType << TYPE_SHIFT) | tokenCount;
- break;
- }
-
- offsetAndType[tokenCount++] = (type << TYPE_SHIFT) | end;
- if (firstCharOffset === -1) {
- firstCharOffset = start;
- }
- });
-
- // finalize buffers
- offsetAndType[tokenCount] = (EOF << TYPE_SHIFT) | sourceLength; // <EOF-token>
- balance[tokenCount] = sourceLength;
- balance[sourceLength] = sourceLength; // prevents false positive balance match with any token
- while (balanceStart !== 0) {
- const balancePrev = balanceStart & OFFSET_MASK;
- balanceStart = balance[balancePrev];
- balance[balancePrev] = sourceLength;
- }
-
- this.source = source;
- this.firstCharOffset = firstCharOffset === -1 ? 0 : firstCharOffset;
- this.tokenCount = tokenCount;
- this.offsetAndType = offsetAndType;
- this.balance = balance;
-
- this.reset();
- this.next();
- }
-
- lookupType(offset) {
- offset += this.tokenIndex;
-
- if (offset < this.tokenCount) {
- return this.offsetAndType[offset] >> TYPE_SHIFT;
- }
-
- return EOF;
- }
- lookupOffset(offset) {
- offset += this.tokenIndex;
-
- if (offset < this.tokenCount) {
- return this.offsetAndType[offset - 1] & OFFSET_MASK;
- }
-
- return this.source.length;
- }
- lookupValue(offset, referenceStr) {
- offset += this.tokenIndex;
-
- if (offset < this.tokenCount) {
- return cmpStr(
- this.source,
- this.offsetAndType[offset - 1] & OFFSET_MASK,
- this.offsetAndType[offset] & OFFSET_MASK,
- referenceStr
- );
- }
-
- return false;
- }
- getTokenStart(tokenIndex) {
- if (tokenIndex === this.tokenIndex) {
- return this.tokenStart;
- }
-
- if (tokenIndex > 0) {
- return tokenIndex < this.tokenCount
- ? this.offsetAndType[tokenIndex - 1] & OFFSET_MASK
- : this.offsetAndType[this.tokenCount] & OFFSET_MASK;
- }
-
- return this.firstCharOffset;
- }
- substrToCursor(start) {
- return this.source.substring(start, this.tokenStart);
- }
-
- isBalanceEdge(pos) {
- return this.balance[this.tokenIndex] < pos;
- }
- isDelim(code, offset) {
- if (offset) {
- return (
- this.lookupType(offset) === Delim &&
- this.source.charCodeAt(this.lookupOffset(offset)) === code
- );
- }
-
- return (
- this.tokenType === Delim &&
- this.source.charCodeAt(this.tokenStart) === code
- );
- }
-
- skip(tokenCount) {
- let next = this.tokenIndex + tokenCount;
-
- if (next < this.tokenCount) {
- this.tokenIndex = next;
- this.tokenStart = this.offsetAndType[next - 1] & OFFSET_MASK;
- next = this.offsetAndType[next];
- this.tokenType = next >> TYPE_SHIFT;
- this.tokenEnd = next & OFFSET_MASK;
- } else {
- this.tokenIndex = this.tokenCount;
- this.next();
- }
- }
- next() {
- let next = this.tokenIndex + 1;
-
- if (next < this.tokenCount) {
- this.tokenIndex = next;
- this.tokenStart = this.tokenEnd;
- next = this.offsetAndType[next];
- this.tokenType = next >> TYPE_SHIFT;
- this.tokenEnd = next & OFFSET_MASK;
- } else {
- this.eof = true;
- this.tokenIndex = this.tokenCount;
- this.tokenType = EOF;
- this.tokenStart = this.tokenEnd = this.source.length;
- }
- }
- skipSC() {
- while (this.tokenType === WhiteSpace || this.tokenType === Comment) {
- this.next();
- }
- }
- skipUntilBalanced(startToken, stopConsume) {
- let cursor = startToken;
- let balanceEnd;
- let offset;
-
- loop:
- for (; cursor < this.tokenCount; cursor++) {
- balanceEnd = this.balance[cursor];
-
- // stop scanning on balance edge that points to offset before start token
- if (balanceEnd < startToken) {
- break loop;
- }
-
- offset = cursor > 0 ? this.offsetAndType[cursor - 1] & OFFSET_MASK : this.firstCharOffset;
-
- // check stop condition
- switch (stopConsume(this.source.charCodeAt(offset))) {
- case 1: // just stop
- break loop;
-
- case 2: // stop & included
- cursor++;
- break loop;
-
- default:
- // fast forward to the end of balanced block
- if (this.balance[balanceEnd] === cursor) {
- cursor = balanceEnd;
- }
- }
- }
-
- this.skip(cursor - this.tokenIndex);
- }
-
- forEachToken(fn) {
- for (let i = 0, offset = this.firstCharOffset; i < this.tokenCount; i++) {
- const start = offset;
- const item = this.offsetAndType[i];
- const end = item & OFFSET_MASK;
- const type = item >> TYPE_SHIFT;
-
- offset = end;
-
- fn(type, start, end, i);
- }
- }
- dump() {
- const tokens = new Array(this.tokenCount);
-
- this.forEachToken((type, start, end, index) => {
- tokens[index] = {
- idx: index,
- type: tokenNames[type],
- chunk: this.source.substring(start, end),
- balance: this.balance[index]
- };
- });
-
- return tokens;
- }
-};
diff --git a/node_modules/css-tree/lib/tokenizer/adopt-buffer.js b/node_modules/css-tree/lib/tokenizer/adopt-buffer.js
deleted file mode 100644
index ab4566da..00000000
--- a/node_modules/css-tree/lib/tokenizer/adopt-buffer.js
+++ /dev/null
@@ -1,9 +0,0 @@
-const MIN_SIZE = 16 * 1024;
-
-export function adoptBuffer(buffer = null, size) {
- if (buffer === null || buffer.length < size) {
- return new Uint32Array(Math.max(size + 1024, MIN_SIZE));
- }
-
- return buffer;
-};
diff --git a/node_modules/css-tree/lib/tokenizer/char-code-definitions.js b/node_modules/css-tree/lib/tokenizer/char-code-definitions.js
deleted file mode 100644
index ea4f42d2..00000000
--- a/node_modules/css-tree/lib/tokenizer/char-code-definitions.js
+++ /dev/null
@@ -1,207 +0,0 @@
-const EOF = 0;
-
-// https://drafts.csswg.org/css-syntax-3/
-// § 4.2. Definitions
-
-// digit
-// A code point between U+0030 DIGIT ZERO (0) and U+0039 DIGIT NINE (9).
-export function isDigit(code) {
- return code >= 0x0030 && code <= 0x0039;
-}
-
-// hex digit
-// A digit, or a code point between U+0041 LATIN CAPITAL LETTER A (A) and U+0046 LATIN CAPITAL LETTER F (F),
-// or a code point between U+0061 LATIN SMALL LETTER A (a) and U+0066 LATIN SMALL LETTER F (f).
-export function isHexDigit(code) {
- return (
- isDigit(code) || // 0 .. 9
- (code >= 0x0041 && code <= 0x0046) || // A .. F
- (code >= 0x0061 && code <= 0x0066) // a .. f
- );
-}
-
-// uppercase letter
-// A code point between U+0041 LATIN CAPITAL LETTER A (A) and U+005A LATIN CAPITAL LETTER Z (Z).
-export function isUppercaseLetter(code) {
- return code >= 0x0041 && code <= 0x005A;
-}
-
-// lowercase letter
-// A code point between U+0061 LATIN SMALL LETTER A (a) and U+007A LATIN SMALL LETTER Z (z).
-export function isLowercaseLetter(code) {
- return code >= 0x0061 && code <= 0x007A;
-}
-
-// letter
-// An uppercase letter or a lowercase letter.
-export function isLetter(code) {
- return isUppercaseLetter(code) || isLowercaseLetter(code);
-}
-
-// non-ASCII code point
-// A code point with a value equal to or greater than U+0080 <control>.
-export function isNonAscii(code) {
- return code >= 0x0080;
-}
-
-// name-start code point
-// A letter, a non-ASCII code point, or U+005F LOW LINE (_).
-export function isNameStart(code) {
- return isLetter(code) || isNonAscii(code) || code === 0x005F;
-}
-
-// name code point
-// A name-start code point, a digit, or U+002D HYPHEN-MINUS (-).
-export function isName(code) {
- return isNameStart(code) || isDigit(code) || code === 0x002D;
-}
-
-// non-printable code point
-// A code point between U+0000 NULL and U+0008 BACKSPACE, or U+000B LINE TABULATION,
-// or a code point between U+000E SHIFT OUT and U+001F INFORMATION SEPARATOR ONE, or U+007F DELETE.
-export function isNonPrintable(code) {
- return (
- (code >= 0x0000 && code <= 0x0008) ||
- (code === 0x000B) ||
- (code >= 0x000E && code <= 0x001F) ||
- (code === 0x007F)
- );
-}
-
-// newline
-// U+000A LINE FEED. Note that U+000D CARRIAGE RETURN and U+000C FORM FEED are not included in this definition,
-// as they are converted to U+000A LINE FEED during preprocessing.
-// TODO: we doesn't do a preprocessing, so check a code point for U+000D CARRIAGE RETURN and U+000C FORM FEED
-export function isNewline(code) {
- return code === 0x000A || code === 0x000D || code === 0x000C;
-}
-
-// whitespace
-// A newline, U+0009 CHARACTER TABULATION, or U+0020 SPACE.
-export function isWhiteSpace(code) {
- return isNewline(code) || code === 0x0020 || code === 0x0009;
-}
-
-// § 4.3.8. Check if two code points are a valid escape
-export function isValidEscape(first, second) {
- // If the first code point is not U+005C REVERSE SOLIDUS (\), return false.
- if (first !== 0x005C) {
- return false;
- }
-
- // Otherwise, if the second code point is a newline or EOF, return false.
- if (isNewline(second) || second === EOF) {
- return false;
- }
-
- // Otherwise, return true.
- return true;
-}
-
-// § 4.3.9. Check if three code points would start an identifier
-export function isIdentifierStart(first, second, third) {
- // Look at the first code point:
-
- // U+002D HYPHEN-MINUS
- if (first === 0x002D) {
- // If the second code point is a name-start code point or a U+002D HYPHEN-MINUS,
- // or the second and third code points are a valid escape, return true. Otherwise, return false.
- return (
- isNameStart(second) ||
- second === 0x002D ||
- isValidEscape(second, third)
- );
- }
-
- // name-start code point
- if (isNameStart(first)) {
- // Return true.
- return true;
- }
-
- // U+005C REVERSE SOLIDUS (\)
- if (first === 0x005C) {
- // If the first and second code points are a valid escape, return true. Otherwise, return false.
- return isValidEscape(first, second);
- }
-
- // anything else
- // Return false.
- return false;
-}
-
-// § 4.3.10. Check if three code points would start a number
-export function isNumberStart(first, second, third) {
- // Look at the first code point:
-
- // U+002B PLUS SIGN (+)
- // U+002D HYPHEN-MINUS (-)
- if (first === 0x002B || first === 0x002D) {
- // If the second code point is a digit, return true.
- if (isDigit(second)) {
- return 2;
- }
-
- // Otherwise, if the second code point is a U+002E FULL STOP (.)
- // and the third code point is a digit, return true.
- // Otherwise, return false.
- return second === 0x002E && isDigit(third) ? 3 : 0;
- }
-
- // U+002E FULL STOP (.)
- if (first === 0x002E) {
- // If the second code point is a digit, return true. Otherwise, return false.
- return isDigit(second) ? 2 : 0;
- }
-
- // digit
- if (isDigit(first)) {
- // Return true.
- return 1;
- }
-
- // anything else
- // Return false.
- return 0;
-}
-
-//
-// Misc
-//
-
-// detect BOM (https://en.wikipedia.org/wiki/Byte_order_mark)
-export function isBOM(code) {
- // UTF-16BE
- if (code === 0xFEFF) {
- return 1;
- }
-
- // UTF-16LE
- if (code === 0xFFFE) {
- return 1;
- }
-
- return 0;
-}
-
-// Fast code category
-// Only ASCII code points has a special meaning, that's why we define a maps for 0..127 codes only
-const CATEGORY = new Array(0x80);
-export const EofCategory = 0x80;
-export const WhiteSpaceCategory = 0x82;
-export const DigitCategory = 0x83;
-export const NameStartCategory = 0x84;
-export const NonPrintableCategory = 0x85;
-
-for (let i = 0; i < CATEGORY.length; i++) {
- CATEGORY[i] =
- isWhiteSpace(i) && WhiteSpaceCategory ||
- isDigit(i) && DigitCategory ||
- isNameStart(i) && NameStartCategory ||
- isNonPrintable(i) && NonPrintableCategory ||
- i || EofCategory;
-}
-
-export function charCodeCategory(code) {
- return code < 0x80 ? CATEGORY[code] : NameStartCategory;
-}
diff --git a/node_modules/css-tree/lib/tokenizer/index.js b/node_modules/css-tree/lib/tokenizer/index.js
deleted file mode 100644
index 16df44cc..00000000
--- a/node_modules/css-tree/lib/tokenizer/index.js
+++ /dev/null
@@ -1,513 +0,0 @@
-import * as TYPE from './types.js';
-import {
- isNewline,
- isName,
- isValidEscape,
- isNumberStart,
- isIdentifierStart,
- isBOM,
- charCodeCategory,
- WhiteSpaceCategory,
- DigitCategory,
- NameStartCategory,
- NonPrintableCategory
-} from './char-code-definitions.js';
-import {
- cmpStr,
- getNewlineLength,
- findWhiteSpaceEnd,
- consumeEscaped,
- consumeName,
- consumeNumber,
- consumeBadUrlRemnants
-} from './utils.js';
-
-export function tokenize(source, onToken) {
- function getCharCode(offset) {
- return offset < sourceLength ? source.charCodeAt(offset) : 0;
- }
-
- // § 4.3.3. Consume a numeric token
- function consumeNumericToken() {
- // Consume a number and let number be the result.
- offset = consumeNumber(source, offset);
-
- // If the next 3 input code points would start an identifier, then:
- if (isIdentifierStart(getCharCode(offset), getCharCode(offset + 1), getCharCode(offset + 2))) {
- // Create a <dimension-token> with the same value and type flag as number, and a unit set initially to the empty string.
- // Consume a name. Set the <dimension-token>’s unit to the returned value.
- // Return the <dimension-token>.
- type = TYPE.Dimension;
- offset = consumeName(source, offset);
- return;
- }
-
- // Otherwise, if the next input code point is U+0025 PERCENTAGE SIGN (%), consume it.
- if (getCharCode(offset) === 0x0025) {
- // Create a <percentage-token> with the same value as number, and return it.
- type = TYPE.Percentage;
- offset++;
- return;
- }
-
- // Otherwise, create a <number-token> with the same value and type flag as number, and return it.
- type = TYPE.Number;
- }
-
- // § 4.3.4. Consume an ident-like token
- function consumeIdentLikeToken() {
- const nameStartOffset = offset;
-
- // Consume a name, and let string be the result.
- offset = consumeName(source, offset);
-
- // If string’s value is an ASCII case-insensitive match for "url",
- // and the next input code point is U+0028 LEFT PARENTHESIS ((), consume it.
- if (cmpStr(source, nameStartOffset, offset, 'url') && getCharCode(offset) === 0x0028) {
- // While the next two input code points are whitespace, consume the next input code point.
- offset = findWhiteSpaceEnd(source, offset + 1);
-
- // If the next one or two input code points are U+0022 QUOTATION MARK ("), U+0027 APOSTROPHE ('),
- // or whitespace followed by U+0022 QUOTATION MARK (") or U+0027 APOSTROPHE ('),
- // then create a <function-token> with its value set to string and return it.
- if (getCharCode(offset) === 0x0022 ||
- getCharCode(offset) === 0x0027) {
- type = TYPE.Function;
- offset = nameStartOffset + 4;
- return;
- }
-
- // Otherwise, consume a url token, and return it.
- consumeUrlToken();
- return;
- }
-
- // Otherwise, if the next input code point is U+0028 LEFT PARENTHESIS ((), consume it.
- // Create a <function-token> with its value set to string and return it.
- if (getCharCode(offset) === 0x0028) {
- type = TYPE.Function;
- offset++;
- return;
- }
-
- // Otherwise, create an <ident-token> with its value set to string and return it.
- type = TYPE.Ident;
- }
-
- // § 4.3.5. Consume a string token
- function consumeStringToken(endingCodePoint) {
- // This algorithm may be called with an ending code point, which denotes the code point
- // that ends the string. If an ending code point is not specified,
- // the current input code point is used.
- if (!endingCodePoint) {
- endingCodePoint = getCharCode(offset++);
- }
-
- // Initially create a <string-token> with its value set to the empty string.
- type = TYPE.String;
-
- // Repeatedly consume the next input code point from the stream:
- for (; offset < source.length; offset++) {
- const code = source.charCodeAt(offset);
-
- switch (charCodeCategory(code)) {
- // ending code point
- case endingCodePoint:
- // Return the <string-token>.
- offset++;
- return;
-
- // EOF
- // case EofCategory:
- // This is a parse error. Return the <string-token>.
- // return;
-
- // newline
- case WhiteSpaceCategory:
- if (isNewline(code)) {
- // This is a parse error. Reconsume the current input code point,
- // create a <bad-string-token>, and return it.
- offset += getNewlineLength(source, offset, code);
- type = TYPE.BadString;
- return;
- }
- break;
-
- // U+005C REVERSE SOLIDUS (\)
- case 0x005C:
- // If the next input code point is EOF, do nothing.
- if (offset === source.length - 1) {
- break;
- }
-
- const nextCode = getCharCode(offset + 1);
-
- // Otherwise, if the next input code point is a newline, consume it.
- if (isNewline(nextCode)) {
- offset += getNewlineLength(source, offset + 1, nextCode);
- } else if (isValidEscape(code, nextCode)) {
- // Otherwise, (the stream starts with a valid escape) consume
- // an escaped code point and append the returned code point to
- // the <string-token>’s value.
- offset = consumeEscaped(source, offset) - 1;
- }
- break;
-
- // anything else
- // Append the current input code point to the <string-token>’s value.
- }
- }
- }
-
- // § 4.3.6. Consume a url token
- // Note: This algorithm assumes that the initial "url(" has already been consumed.
- // This algorithm also assumes that it’s being called to consume an "unquoted" value, like url(foo).
- // A quoted value, like url("foo"), is parsed as a <function-token>. Consume an ident-like token
- // automatically handles this distinction; this algorithm shouldn’t be called directly otherwise.
- function consumeUrlToken() {
- // Initially create a <url-token> with its value set to the empty string.
- type = TYPE.Url;
-
- // Consume as much whitespace as possible.
- offset = findWhiteSpaceEnd(source, offset);
-
- // Repeatedly consume the next input code point from the stream:
- for (; offset < source.length; offset++) {
- const code = source.charCodeAt(offset);
-
- switch (charCodeCategory(code)) {
- // U+0029 RIGHT PARENTHESIS ())
- case 0x0029:
- // Return the <url-token>.
- offset++;
- return;
-
- // EOF
- // case EofCategory:
- // This is a parse error. Return the <url-token>.
- // return;
-
- // whitespace
- case WhiteSpaceCategory:
- // Consume as much whitespace as possible.
- offset = findWhiteSpaceEnd(source, offset);
-
- // If the next input code point is U+0029 RIGHT PARENTHESIS ()) or EOF,
- // consume it and return the <url-token>
- // (if EOF was encountered, this is a parse error);
- if (getCharCode(offset) === 0x0029 || offset >= source.length) {
- if (offset < source.length) {
- offset++;
- }
- return;
- }
-
- // otherwise, consume the remnants of a bad url, create a <bad-url-token>,
- // and return it.
- offset = consumeBadUrlRemnants(source, offset);
- type = TYPE.BadUrl;
- return;
-
- // U+0022 QUOTATION MARK (")
- // U+0027 APOSTROPHE (')
- // U+0028 LEFT PARENTHESIS (()
- // non-printable code point
- case 0x0022:
- case 0x0027:
- case 0x0028:
- case NonPrintableCategory:
- // This is a parse error. Consume the remnants of a bad url,
- // create a <bad-url-token>, and return it.
- offset = consumeBadUrlRemnants(source, offset);
- type = TYPE.BadUrl;
- return;
-
- // U+005C REVERSE SOLIDUS (\)
- case 0x005C:
- // If the stream starts with a valid escape, consume an escaped code point and
- // append the returned code point to the <url-token>’s value.
- if (isValidEscape(code, getCharCode(offset + 1))) {
- offset = consumeEscaped(source, offset) - 1;
- break;
- }
-
- // Otherwise, this is a parse error. Consume the remnants of a bad url,
- // create a <bad-url-token>, and return it.
- offset = consumeBadUrlRemnants(source, offset);
- type = TYPE.BadUrl;
- return;
-
- // anything else
- // Append the current input code point to the <url-token>’s value.
- }
- }
- }
-
- // ensure source is a string
- source = String(source || '');
-
- const sourceLength = source.length;
- let start = isBOM(getCharCode(0));
- let offset = start;
- let type;
-
- // https://drafts.csswg.org/css-syntax-3/#consume-token
- // § 4.3.1. Consume a token
- while (offset < sourceLength) {
- const code = source.charCodeAt(offset);
-
- switch (charCodeCategory(code)) {
- // whitespace
- case WhiteSpaceCategory:
- // Consume as much whitespace as possible. Return a <whitespace-token>.
- type = TYPE.WhiteSpace;
- offset = findWhiteSpaceEnd(source, offset + 1);
- break;
-
- // U+0022 QUOTATION MARK (")
- case 0x0022:
- // Consume a string token and return it.
- consumeStringToken();
- break;
-
- // U+0023 NUMBER SIGN (#)
- case 0x0023:
- // If the next input code point is a name code point or the next two input code points are a valid escape, then:
- if (isName(getCharCode(offset + 1)) || isValidEscape(getCharCode(offset + 1), getCharCode(offset + 2))) {
- // Create a <hash-token>.
- type = TYPE.Hash;
-
- // If the next 3 input code points would start an identifier, set the <hash-token>’s type flag to "id".
- // if (isIdentifierStart(getCharCode(offset + 1), getCharCode(offset + 2), getCharCode(offset + 3))) {
- // // TODO: set id flag
- // }
-
- // Consume a name, and set the <hash-token>’s value to the returned string.
- offset = consumeName(source, offset + 1);
-
- // Return the <hash-token>.
- } else {
- // Otherwise, return a <delim-token> with its value set to the current input code point.
- type = TYPE.Delim;
- offset++;
- }
-
- break;
-
- // U+0027 APOSTROPHE (')
- case 0x0027:
- // Consume a string token and return it.
- consumeStringToken();
- break;
-
- // U+0028 LEFT PARENTHESIS (()
- case 0x0028:
- // Return a <(-token>.
- type = TYPE.LeftParenthesis;
- offset++;
- break;
-
- // U+0029 RIGHT PARENTHESIS ())
- case 0x0029:
- // Return a <)-token>.
- type = TYPE.RightParenthesis;
- offset++;
- break;
-
- // U+002B PLUS SIGN (+)
- case 0x002B:
- // If the input stream starts with a number, ...
- if (isNumberStart(code, getCharCode(offset + 1), getCharCode(offset + 2))) {
- // ... reconsume the current input code point, consume a numeric token, and return it.
- consumeNumericToken();
- } else {
- // Otherwise, return a <delim-token> with its value set to the current input code point.
- type = TYPE.Delim;
- offset++;
- }
- break;
-
- // U+002C COMMA (,)
- case 0x002C:
- // Return a <comma-token>.
- type = TYPE.Comma;
- offset++;
- break;
-
- // U+002D HYPHEN-MINUS (-)
- case 0x002D:
- // If the input stream starts with a number, reconsume the current input code point, consume a numeric token, and return it.
- if (isNumberStart(code, getCharCode(offset + 1), getCharCode(offset + 2))) {
- consumeNumericToken();
- } else {
- // Otherwise, if the next 2 input code points are U+002D HYPHEN-MINUS U+003E GREATER-THAN SIGN (->), consume them and return a <CDC-token>.
- if (getCharCode(offset + 1) === 0x002D &&
- getCharCode(offset + 2) === 0x003E) {
- type = TYPE.CDC;
- offset = offset + 3;
- } else {
- // Otherwise, if the input stream starts with an identifier, ...
- if (isIdentifierStart(code, getCharCode(offset + 1), getCharCode(offset + 2))) {
- // ... reconsume the current input code point, consume an ident-like token, and return it.
- consumeIdentLikeToken();
- } else {
- // Otherwise, return a <delim-token> with its value set to the current input code point.
- type = TYPE.Delim;
- offset++;
- }
- }
- }
- break;
-
- // U+002E FULL STOP (.)
- case 0x002E:
- // If the input stream starts with a number, ...
- if (isNumberStart(code, getCharCode(offset + 1), getCharCode(offset + 2))) {
- // ... reconsume the current input code point, consume a numeric token, and return it.
- consumeNumericToken();
- } else {
- // Otherwise, return a <delim-token> with its value set to the current input code point.
- type = TYPE.Delim;
- offset++;
- }
-
- break;
-
- // U+002F SOLIDUS (/)
- case 0x002F:
- // If the next two input code point are U+002F SOLIDUS (/) followed by a U+002A ASTERISK (*),
- if (getCharCode(offset + 1) === 0x002A) {
- // ... consume them and all following code points up to and including the first U+002A ASTERISK (*)
- // followed by a U+002F SOLIDUS (/), or up to an EOF code point.
- type = TYPE.Comment;
- offset = source.indexOf('*/', offset + 2);
- offset = offset === -1 ? source.length : offset + 2;
- } else {
- type = TYPE.Delim;
- offset++;
- }
- break;
-
- // U+003A COLON (:)
- case 0x003A:
- // Return a <colon-token>.
- type = TYPE.Colon;
- offset++;
- break;
-
- // U+003B SEMICOLON (;)
- case 0x003B:
- // Return a <semicolon-token>.
- type = TYPE.Semicolon;
- offset++;
- break;
-
- // U+003C LESS-THAN SIGN (<)
- case 0x003C:
- // If the next 3 input code points are U+0021 EXCLAMATION MARK U+002D HYPHEN-MINUS U+002D HYPHEN-MINUS (!--), ...
- if (getCharCode(offset + 1) === 0x0021 &&
- getCharCode(offset + 2) === 0x002D &&
- getCharCode(offset + 3) === 0x002D) {
- // ... consume them and return a <CDO-token>.
- type = TYPE.CDO;
- offset = offset + 4;
- } else {
- // Otherwise, return a <delim-token> with its value set to the current input code point.
- type = TYPE.Delim;
- offset++;
- }
-
- break;
-
- // U+0040 COMMERCIAL AT (@)
- case 0x0040:
- // If the next 3 input code points would start an identifier, ...
- if (isIdentifierStart(getCharCode(offset + 1), getCharCode(offset + 2), getCharCode(offset + 3))) {
- // ... consume a name, create an <at-keyword-token> with its value set to the returned value, and return it.
- type = TYPE.AtKeyword;
- offset = consumeName(source, offset + 1);
- } else {
- // Otherwise, return a <delim-token> with its value set to the current input code point.
- type = TYPE.Delim;
- offset++;
- }
-
- break;
-
- // U+005B LEFT SQUARE BRACKET ([)
- case 0x005B:
- // Return a <[-token>.
- type = TYPE.LeftSquareBracket;
- offset++;
- break;
-
- // U+005C REVERSE SOLIDUS (\)
- case 0x005C:
- // If the input stream starts with a valid escape, ...
- if (isValidEscape(code, getCharCode(offset + 1))) {
- // ... reconsume the current input code point, consume an ident-like token, and return it.
- consumeIdentLikeToken();
- } else {
- // Otherwise, this is a parse error. Return a <delim-token> with its value set to the current input code point.
- type = TYPE.Delim;
- offset++;
- }
- break;
-
- // U+005D RIGHT SQUARE BRACKET (])
- case 0x005D:
- // Return a <]-token>.
- type = TYPE.RightSquareBracket;
- offset++;
- break;
-
- // U+007B LEFT CURLY BRACKET ({)
- case 0x007B:
- // Return a <{-token>.
- type = TYPE.LeftCurlyBracket;
- offset++;
- break;
-
- // U+007D RIGHT CURLY BRACKET (})
- case 0x007D:
- // Return a <}-token>.
- type = TYPE.RightCurlyBracket;
- offset++;
- break;
-
- // digit
- case DigitCategory:
- // Reconsume the current input code point, consume a numeric token, and return it.
- consumeNumericToken();
- break;
-
- // name-start code point
- case NameStartCategory:
- // Reconsume the current input code point, consume an ident-like token, and return it.
- consumeIdentLikeToken();
- break;
-
- // EOF
- // case EofCategory:
- // Return an <EOF-token>.
- // break;
-
- // anything else
- default:
- // Return a <delim-token> with its value set to the current input code point.
- type = TYPE.Delim;
- offset++;
- }
-
- // put token to stream
- onToken(type, start, start = offset);
- }
-}
-
-export * from './types.js';
-export * as tokenTypes from './types.js';
-export { default as tokenNames } from './names.js';
-export * from './char-code-definitions.js';
-export * from './utils.js';
-export * from './OffsetToLocation.js';
-export * from './TokenStream.js';
diff --git a/node_modules/css-tree/lib/tokenizer/names.js b/node_modules/css-tree/lib/tokenizer/names.js
deleted file mode 100644
index 297c73e6..00000000
--- a/node_modules/css-tree/lib/tokenizer/names.js
+++ /dev/null
@@ -1,27 +0,0 @@
-export default [
- 'EOF-token',
- 'ident-token',
- 'function-token',
- 'at-keyword-token',
- 'hash-token',
- 'string-token',
- 'bad-string-token',
- 'url-token',
- 'bad-url-token',
- 'delim-token',
- 'number-token',
- 'percentage-token',
- 'dimension-token',
- 'whitespace-token',
- 'CDO-token',
- 'CDC-token',
- 'colon-token',
- 'semicolon-token',
- 'comma-token',
- '[-token',
- ']-token',
- '(-token',
- ')-token',
- '{-token',
- '}-token'
-];
diff --git a/node_modules/css-tree/lib/tokenizer/types.js b/node_modules/css-tree/lib/tokenizer/types.js
deleted file mode 100644
index 5018569a..00000000
--- a/node_modules/css-tree/lib/tokenizer/types.js
+++ /dev/null
@@ -1,28 +0,0 @@
-// CSS Syntax Module Level 3
-// https://www.w3.org/TR/css-syntax-3/
-export const EOF = 0; // <EOF-token>
-export const Ident = 1; // <ident-token>
-export const Function = 2; // <function-token>
-export const AtKeyword = 3; // <at-keyword-token>
-export const Hash = 4; // <hash-token>
-export const String = 5; // <string-token>
-export const BadString = 6; // <bad-string-token>
-export const Url = 7; // <url-token>
-export const BadUrl = 8; // <bad-url-token>
-export const Delim = 9; // <delim-token>
-export const Number = 10; // <number-token>
-export const Percentage = 11; // <percentage-token>
-export const Dimension = 12; // <dimension-token>
-export const WhiteSpace = 13; // <whitespace-token>
-export const CDO = 14; // <CDO-token>
-export const CDC = 15; // <CDC-token>
-export const Colon = 16; // <colon-token> :
-export const Semicolon = 17; // <semicolon-token> ;
-export const Comma = 18; // <comma-token> ,
-export const LeftSquareBracket = 19; // <[-token>
-export const RightSquareBracket = 20; // <]-token>
-export const LeftParenthesis = 21; // <(-token>
-export const RightParenthesis = 22; // <)-token>
-export const LeftCurlyBracket = 23; // <{-token>
-export const RightCurlyBracket = 24; // <}-token>
-export const Comment = 25;
diff --git a/node_modules/css-tree/lib/tokenizer/utils.js b/node_modules/css-tree/lib/tokenizer/utils.js
deleted file mode 100644
index c131ec5b..00000000
--- a/node_modules/css-tree/lib/tokenizer/utils.js
+++ /dev/null
@@ -1,254 +0,0 @@
-import {
- isDigit,
- isHexDigit,
- isUppercaseLetter,
- isName,
- isWhiteSpace,
- isValidEscape
-} from './char-code-definitions.js';
-
-function getCharCode(source, offset) {
- return offset < source.length ? source.charCodeAt(offset) : 0;
-}
-
-export function getNewlineLength(source, offset, code) {
- if (code === 13 /* \r */ && getCharCode(source, offset + 1) === 10 /* \n */) {
- return 2;
- }
-
- return 1;
-}
-
-export function cmpChar(testStr, offset, referenceCode) {
- let code = testStr.charCodeAt(offset);
-
- // code.toLowerCase() for A..Z
- if (isUppercaseLetter(code)) {
- code = code | 32;
- }
-
- return code === referenceCode;
-}
-
-export function cmpStr(testStr, start, end, referenceStr) {
- if (end - start !== referenceStr.length) {
- return false;
- }
-
- if (start < 0 || end > testStr.length) {
- return false;
- }
-
- for (let i = start; i < end; i++) {
- const referenceCode = referenceStr.charCodeAt(i - start);
- let testCode = testStr.charCodeAt(i);
-
- // testCode.toLowerCase() for A..Z
- if (isUppercaseLetter(testCode)) {
- testCode = testCode | 32;
- }
-
- if (testCode !== referenceCode) {
- return false;
- }
- }
-
- return true;
-}
-
-export function findWhiteSpaceStart(source, offset) {
- for (; offset >= 0; offset--) {
- if (!isWhiteSpace(source.charCodeAt(offset))) {
- break;
- }
- }
-
- return offset + 1;
-}
-
-export function findWhiteSpaceEnd(source, offset) {
- for (; offset < source.length; offset++) {
- if (!isWhiteSpace(source.charCodeAt(offset))) {
- break;
- }
- }
-
- return offset;
-}
-
-export function findDecimalNumberEnd(source, offset) {
- for (; offset < source.length; offset++) {
- if (!isDigit(source.charCodeAt(offset))) {
- break;
- }
- }
-
- return offset;
-}
-
-// § 4.3.7. Consume an escaped code point
-export function consumeEscaped(source, offset) {
- // It assumes that the U+005C REVERSE SOLIDUS (\) has already been consumed and
- // that the next input code point has already been verified to be part of a valid escape.
- offset += 2;
-
- // hex digit
- if (isHexDigit(getCharCode(source, offset - 1))) {
- // Consume as many hex digits as possible, but no more than 5.
- // Note that this means 1-6 hex digits have been consumed in total.
- for (const maxOffset = Math.min(source.length, offset + 5); offset < maxOffset; offset++) {
- if (!isHexDigit(getCharCode(source, offset))) {
- break;
- }
- }
-
- // If the next input code point is whitespace, consume it as well.
- const code = getCharCode(source, offset);
- if (isWhiteSpace(code)) {
- offset += getNewlineLength(source, offset, code);
- }
- }
-
- return offset;
-}
-
-// §4.3.11. Consume a name
-// Note: This algorithm does not do the verification of the first few code points that are necessary
-// to ensure the returned code points would constitute an <ident-token>. If that is the intended use,
-// ensure that the stream starts with an identifier before calling this algorithm.
-export function consumeName(source, offset) {
- // Let result initially be an empty string.
- // Repeatedly consume the next input code point from the stream:
- for (; offset < source.length; offset++) {
- const code = source.charCodeAt(offset);
-
- // name code point
- if (isName(code)) {
- // Append the code point to result.
- continue;
- }
-
- // the stream starts with a valid escape
- if (isValidEscape(code, getCharCode(source, offset + 1))) {
- // Consume an escaped code point. Append the returned code point to result.
- offset = consumeEscaped(source, offset) - 1;
- continue;
- }
-
- // anything else
- // Reconsume the current input code point. Return result.
- break;
- }
-
- return offset;
-}
-
-// §4.3.12. Consume a number
-export function consumeNumber(source, offset) {
- let code = source.charCodeAt(offset);
-
- // 2. If the next input code point is U+002B PLUS SIGN (+) or U+002D HYPHEN-MINUS (-),
- // consume it and append it to repr.
- if (code === 0x002B || code === 0x002D) {
- code = source.charCodeAt(offset += 1);
- }
-
- // 3. While the next input code point is a digit, consume it and append it to repr.
- if (isDigit(code)) {
- offset = findDecimalNumberEnd(source, offset + 1);
- code = source.charCodeAt(offset);
- }
-
- // 4. If the next 2 input code points are U+002E FULL STOP (.) followed by a digit, then:
- if (code === 0x002E && isDigit(source.charCodeAt(offset + 1))) {
- // 4.1 Consume them.
- // 4.2 Append them to repr.
- offset += 2;
-
- // 4.3 Set type to "number".
- // TODO
-
- // 4.4 While the next input code point is a digit, consume it and append it to repr.
-
- offset = findDecimalNumberEnd(source, offset);
- }
-
- // 5. If the next 2 or 3 input code points are U+0045 LATIN CAPITAL LETTER E (E)
- // or U+0065 LATIN SMALL LETTER E (e), ... , followed by a digit, then:
- if (cmpChar(source, offset, 101 /* e */)) {
- let sign = 0;
- code = source.charCodeAt(offset + 1);
-
- // ... optionally followed by U+002D HYPHEN-MINUS (-) or U+002B PLUS SIGN (+) ...
- if (code === 0x002D || code === 0x002B) {
- sign = 1;
- code = source.charCodeAt(offset + 2);
- }
-
- // ... followed by a digit
- if (isDigit(code)) {
- // 5.1 Consume them.
- // 5.2 Append them to repr.
-
- // 5.3 Set type to "number".
- // TODO
-
- // 5.4 While the next input code point is a digit, consume it and append it to repr.
- offset = findDecimalNumberEnd(source, offset + 1 + sign + 1);
- }
- }
-
- return offset;
-}
-
-// § 4.3.14. Consume the remnants of a bad url
-// ... its sole use is to consume enough of the input stream to reach a recovery point
-// where normal tokenizing can resume.
-export function consumeBadUrlRemnants(source, offset) {
- // Repeatedly consume the next input code point from the stream:
- for (; offset < source.length; offset++) {
- const code = source.charCodeAt(offset);
-
- // U+0029 RIGHT PARENTHESIS ())
- // EOF
- if (code === 0x0029) {
- // Return.
- offset++;
- break;
- }
-
- if (isValidEscape(code, getCharCode(source, offset + 1))) {
- // Consume an escaped code point.
- // Note: This allows an escaped right parenthesis ("\)") to be encountered
- // without ending the <bad-url-token>. This is otherwise identical to
- // the "anything else" clause.
- offset = consumeEscaped(source, offset);
- }
- }
-
- return offset;
-}
-
-// § 4.3.7. Consume an escaped code point
-// Note: This algorithm assumes that escaped is valid without leading U+005C REVERSE SOLIDUS (\)
-export function decodeEscaped(escaped) {
- // Single char escaped that's not a hex digit
- if (escaped.length === 1 && !isHexDigit(escaped.charCodeAt(0))) {
- return escaped[0];
- }
-
- // Interpret the hex digits as a hexadecimal number.
- let code = parseInt(escaped, 16);
-
- if (
- (code === 0) || // If this number is zero,
- (code >= 0xD800 && code <= 0xDFFF) || // or is for a surrogate,
- (code > 0x10FFFF) // or is greater than the maximum allowed code point
- ) {
- // ... return U+FFFD REPLACEMENT CHARACTER
- code = 0xFFFD;
- }
-
- // Otherwise, return the code point with that value.
- return String.fromCodePoint(code);
-}
diff --git a/node_modules/css-tree/lib/utils/List.js b/node_modules/css-tree/lib/utils/List.js
deleted file mode 100644
index 89532649..00000000
--- a/node_modules/css-tree/lib/utils/List.js
+++ /dev/null
@@ -1,469 +0,0 @@
-//
-// list
-// ┌──────┐
-// ┌──────────────┼─head │
-// │ │ tail─┼──────────────┐
-// │ └──────┘ │
-// ▼ ▼
-// item item item item
-// ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐
-// null ◀──┼─prev │◀───┼─prev │◀───┼─prev │◀───┼─prev │
-// │ next─┼───▶│ next─┼───▶│ next─┼───▶│ next─┼──▶ null
-// ├──────┤ ├──────┤ ├──────┤ ├──────┤
-// │ data │ │ data │ │ data │ │ data │
-// └──────┘ └──────┘ └──────┘ └──────┘
-//
-
-let releasedCursors = null;
-
-export class List {
- static createItem(data) {
- return {
- prev: null,
- next: null,
- data
- };
- }
-
- constructor() {
- this.head = null;
- this.tail = null;
- this.cursor = null;
- }
- createItem(data) {
- return List.createItem(data);
- }
-
- // cursor helpers
- allocateCursor(prev, next) {
- let cursor;
-
- if (releasedCursors !== null) {
- cursor = releasedCursors;
- releasedCursors = releasedCursors.cursor;
- cursor.prev = prev;
- cursor.next = next;
- cursor.cursor = this.cursor;
- } else {
- cursor = {
- prev,
- next,
- cursor: this.cursor
- };
- }
-
- this.cursor = cursor;
-
- return cursor;
- }
- releaseCursor() {
- const { cursor } = this;
-
- this.cursor = cursor.cursor;
- cursor.prev = null;
- cursor.next = null;
- cursor.cursor = releasedCursors;
- releasedCursors = cursor;
- }
- updateCursors(prevOld, prevNew, nextOld, nextNew) {
- let { cursor } = this;
-
- while (cursor !== null) {
- if (cursor.prev === prevOld) {
- cursor.prev = prevNew;
- }
-
- if (cursor.next === nextOld) {
- cursor.next = nextNew;
- }
-
- cursor = cursor.cursor;
- }
- }
- *[Symbol.iterator]() {
- for (let cursor = this.head; cursor !== null; cursor = cursor.next) {
- yield cursor.data;
- }
- }
-
- // getters
- get size() {
- let size = 0;
-
- for (let cursor = this.head; cursor !== null; cursor = cursor.next) {
- size++;
- }
-
- return size;
- }
- get isEmpty() {
- return this.head === null;
- }
- get first() {
- return this.head && this.head.data;
- }
- get last() {
- return this.tail && this.tail.data;
- }
-
- // convertors
- fromArray(array) {
- let cursor = null;
- this.head = null;
-
- for (let data of array) {
- const item = List.createItem(data);
-
- if (cursor !== null) {
- cursor.next = item;
- } else {
- this.head = item;
- }
-
- item.prev = cursor;
- cursor = item;
- }
-
- this.tail = cursor;
- return this;
- }
- toArray() {
- return [...this];
- }
- toJSON() {
- return [...this];
- }
-
- // array-like methods
- forEach(fn, thisArg = this) {
- // push cursor
- const cursor = this.allocateCursor(null, this.head);
-
- while (cursor.next !== null) {
- const item = cursor.next;
- cursor.next = item.next;
- fn.call(thisArg, item.data, item, this);
- }
-
- // pop cursor
- this.releaseCursor();
- }
- forEachRight(fn, thisArg = this) {
- // push cursor
- const cursor = this.allocateCursor(this.tail, null);
-
- while (cursor.prev !== null) {
- const item = cursor.prev;
- cursor.prev = item.prev;
- fn.call(thisArg, item.data, item, this);
- }
-
- // pop cursor
- this.releaseCursor();
- }
- reduce(fn, initialValue, thisArg = this) {
- // push cursor
- let cursor = this.allocateCursor(null, this.head);
- let acc = initialValue;
- let item;
-
- while (cursor.next !== null) {
- item = cursor.next;
- cursor.next = item.next;
-
- acc = fn.call(thisArg, acc, item.data, item, this);
- }
-
- // pop cursor
- this.releaseCursor();
-
- return acc;
- }
- reduceRight(fn, initialValue, thisArg = this) {
- // push cursor
- let cursor = this.allocateCursor(this.tail, null);
- let acc = initialValue;
- let item;
-
- while (cursor.prev !== null) {
- item = cursor.prev;
- cursor.prev = item.prev;
-
- acc = fn.call(thisArg, acc, item.data, item, this);
- }
-
- // pop cursor
- this.releaseCursor();
-
- return acc;
- }
- some(fn, thisArg = this) {
- for (let cursor = this.head; cursor !== null; cursor = cursor.next) {
- if (fn.call(thisArg, cursor.data, cursor, this)) {
- return true;
- }
- }
-
- return false;
- }
- map(fn, thisArg = this) {
- const result = new List();
-
- for (let cursor = this.head; cursor !== null; cursor = cursor.next) {
- result.appendData(fn.call(thisArg, cursor.data, cursor, this));
- }
-
- return result;
- }
- filter(fn, thisArg = this) {
- const result = new List();
-
- for (let cursor = this.head; cursor !== null; cursor = cursor.next) {
- if (fn.call(thisArg, cursor.data, cursor, this)) {
- result.appendData(cursor.data);
- }
- }
-
- return result;
- }
-
- nextUntil(start, fn, thisArg = this) {
- if (start === null) {
- return;
- }
-
- // push cursor
- const cursor = this.allocateCursor(null, start);
-
- while (cursor.next !== null) {
- const item = cursor.next;
- cursor.next = item.next;
- if (fn.call(thisArg, item.data, item, this)) {
- break;
- }
- }
-
- // pop cursor
- this.releaseCursor();
- }
- prevUntil(start, fn, thisArg = this) {
- if (start === null) {
- return;
- }
-
- // push cursor
- const cursor = this.allocateCursor(start, null);
-
- while (cursor.prev !== null) {
- const item = cursor.prev;
- cursor.prev = item.prev;
- if (fn.call(thisArg, item.data, item, this)) {
- break;
- }
- }
-
- // pop cursor
- this.releaseCursor();
- }
-
- // mutation
- clear() {
- this.head = null;
- this.tail = null;
- }
- copy() {
- const result = new List();
-
- for (let data of this) {
- result.appendData(data);
- }
-
- return result;
- }
- prepend(item) {
- // head
- // ^
- // item
- this.updateCursors(null, item, this.head, item);
-
- // insert to the beginning of the list
- if (this.head !== null) {
- // new item <- first item
- this.head.prev = item;
- // new item -> first item
- item.next = this.head;
- } else {
- // if list has no head, then it also has no tail
- // in this case tail points to the new item
- this.tail = item;
- }
-
- // head always points to new item
- this.head = item;
- return this;
- }
- prependData(data) {
- return this.prepend(List.createItem(data));
- }
- append(item) {
- return this.insert(item);
- }
- appendData(data) {
- return this.insert(List.createItem(data));
- }
- insert(item, before = null) {
- if (before !== null) {
- // prev before
- // ^
- // item
- this.updateCursors(before.prev, item, before, item);
-
- if (before.prev === null) {
- // insert to the beginning of list
- if (this.head !== before) {
- throw new Error('before doesn\'t belong to list');
- }
- // since head points to before therefore list doesn't empty
- // no need to check tail
- this.head = item;
- before.prev = item;
- item.next = before;
- this.updateCursors(null, item);
- } else {
- // insert between two items
- before.prev.next = item;
- item.prev = before.prev;
- before.prev = item;
- item.next = before;
- }
- } else {
- // tail
- // ^
- // item
- this.updateCursors(this.tail, item, null, item);
-
- // insert to the ending of the list
- if (this.tail !== null) {
- // last item -> new item
- this.tail.next = item;
- // last item <- new item
- item.prev = this.tail;
- } else {
- // if list has no tail, then it also has no head
- // in this case head points to new item
- this.head = item;
- }
-
- // tail always points to new item
- this.tail = item;
- }
-
- return this;
- }
- insertData(data, before) {
- return this.insert(List.createItem(data), before);
- }
- remove(item) {
- // item
- // ^
- // prev next
- this.updateCursors(item, item.prev, item, item.next);
-
- if (item.prev !== null) {
- item.prev.next = item.next;
- } else {
- if (this.head !== item) {
- throw new Error('item doesn\'t belong to list');
- }
-
- this.head = item.next;
- }
-
- if (item.next !== null) {
- item.next.prev = item.prev;
- } else {
- if (this.tail !== item) {
- throw new Error('item doesn\'t belong to list');
- }
-
- this.tail = item.prev;
- }
-
- item.prev = null;
- item.next = null;
-
- return item;
- }
- push(data) {
- this.insert(List.createItem(data));
- }
- pop() {
- return this.tail !== null ? this.remove(this.tail) : null;
- }
- unshift(data) {
- this.prepend(List.createItem(data));
- }
- shift() {
- return this.head !== null ? this.remove(this.head) : null;
- }
- prependList(list) {
- return this.insertList(list, this.head);
- }
- appendList(list) {
- return this.insertList(list);
- }
- insertList(list, before) {
- // ignore empty lists
- if (list.head === null) {
- return this;
- }
-
- if (before !== undefined && before !== null) {
- this.updateCursors(before.prev, list.tail, before, list.head);
-
- // insert in the middle of dist list
- if (before.prev !== null) {
- // before.prev <-> list.head
- before.prev.next = list.head;
- list.head.prev = before.prev;
- } else {
- this.head = list.head;
- }
-
- before.prev = list.tail;
- list.tail.next = before;
- } else {
- this.updateCursors(this.tail, list.tail, null, list.head);
-
- // insert to end of the list
- if (this.tail !== null) {
- // if destination list has a tail, then it also has a head,
- // but head doesn't change
- // dest tail -> source head
- this.tail.next = list.head;
- // dest tail <- source head
- list.head.prev = this.tail;
- } else {
- // if list has no a tail, then it also has no a head
- // in this case points head to new item
- this.head = list.head;
- }
-
- // tail always start point to new item
- this.tail = list.tail;
- }
-
- list.head = null;
- list.tail = null;
- return this;
- }
- replace(oldItem, newItemOrList) {
- if ('head' in newItemOrList) {
- this.insertList(newItemOrList, oldItem);
- } else {
- this.insert(newItemOrList, oldItem);
- }
-
- this.remove(oldItem);
- }
-}
diff --git a/node_modules/css-tree/lib/utils/clone.js b/node_modules/css-tree/lib/utils/clone.js
deleted file mode 100644
index b2565a7f..00000000
--- a/node_modules/css-tree/lib/utils/clone.js
+++ /dev/null
@@ -1,21 +0,0 @@
-import { List } from './List.js';
-
-export function clone(node) {
- const result = {};
-
- for (const key in node) {
- let value = node[key];
-
- if (value) {
- if (Array.isArray(value) || value instanceof List) {
- value = value.map(clone);
- } else if (value.constructor === Object) {
- value = clone(value);
- }
- }
-
- result[key] = value;
- }
-
- return result;
-}
diff --git a/node_modules/css-tree/lib/utils/create-custom-error.js b/node_modules/css-tree/lib/utils/create-custom-error.js
deleted file mode 100644
index dba122f4..00000000
--- a/node_modules/css-tree/lib/utils/create-custom-error.js
+++ /dev/null
@@ -1,14 +0,0 @@
-export function createCustomError(name, message) {
- // use Object.create(), because some VMs prevent setting line/column otherwise
- // (iOS Safari 10 even throws an exception)
- const error = Object.create(SyntaxError.prototype);
- const errorStack = new Error();
-
- return Object.assign(error, {
- name,
- message,
- get stack() {
- return (errorStack.stack || '').replace(/^(.+\n){1,3}/, `${name}: ${message}\n`);
- }
- });
-};
diff --git a/node_modules/css-tree/lib/utils/ident.js b/node_modules/css-tree/lib/utils/ident.js
deleted file mode 100644
index 9cbe0f86..00000000
--- a/node_modules/css-tree/lib/utils/ident.js
+++ /dev/null
@@ -1,101 +0,0 @@
-import {
- isName,
- isValidEscape,
- consumeEscaped,
- decodeEscaped
-} from '../tokenizer/index.js';
-
-const REVERSE_SOLIDUS = 0x005c; // U+005C REVERSE SOLIDUS (\)
-
-export function decode(str) {
- const end = str.length - 1;
- let decoded = '';
-
- for (let i = 0; i < str.length; i++) {
- let code = str.charCodeAt(i);
-
- if (code === REVERSE_SOLIDUS) {
- // special case at the ending
- if (i === end) {
- // if the next input code point is EOF, do nothing
- break;
- }
-
- code = str.charCodeAt(++i);
-
- // consume escaped
- if (isValidEscape(REVERSE_SOLIDUS, code)) {
- const escapeStart = i - 1;
- const escapeEnd = consumeEscaped(str, escapeStart);
-
- i = escapeEnd - 1;
- decoded += decodeEscaped(str.substring(escapeStart + 1, escapeEnd));
- } else {
- // \r\n
- if (code === 0x000d && str.charCodeAt(i + 1) === 0x000a) {
- i++;
- }
- }
- } else {
- decoded += str[i];
- }
- }
-
- return decoded;
-}
-
-// https://drafts.csswg.org/cssom/#serialize-an-identifier
-// § 2.1. Common Serializing Idioms
-export function encode(str) {
- let encoded = '';
-
- // If the character is the first character and is a "-" (U+002D),
- // and there is no second character, then the escaped character.
- // Note: That's means a single dash string "-" return as escaped dash,
- // so move the condition out of the main loop
- if (str.length === 1 && str.charCodeAt(0) === 0x002D) {
- return '\\-';
- }
-
- // To serialize an identifier means to create a string represented
- // by the concatenation of, for each character of the identifier:
- for (let i = 0; i < str.length; i++) {
- const code = str.charCodeAt(i);
-
- // If the character is NULL (U+0000), then the REPLACEMENT CHARACTER (U+FFFD).
- if (code === 0x0000) {
- encoded += '\uFFFD';
- continue;
- }
-
- if (
- // If the character is in the range [\1-\1f] (U+0001 to U+001F) or is U+007F ...
- // Note: Do not compare with 0x0001 since 0x0000 is precessed before
- code <= 0x001F || code === 0x007F ||
- // [or] ... is in the range [0-9] (U+0030 to U+0039),
- (code >= 0x0030 && code <= 0x0039 && (
- // If the character is the first character ...
- i === 0 ||
- // If the character is the second character ... and the first character is a "-" (U+002D)
- i === 1 && str.charCodeAt(0) === 0x002D
- ))
- ) {
- // ... then the character escaped as code point.
- encoded += '\\' + code.toString(16) + ' ';
- continue;
- }
-
- // If the character is not handled by one of the above rules and is greater
- // than or equal to U+0080, is "-" (U+002D) or "_" (U+005F), or is in one
- // of the ranges [0-9] (U+0030 to U+0039), [A-Z] (U+0041 to U+005A),
- // or \[a-z] (U+0061 to U+007A), then the character itself.
- if (isName(code)) {
- encoded += str.charAt(i);
- } else {
- // Otherwise, the escaped character.
- encoded += '\\' + str.charAt(i);
- }
- }
-
- return encoded;
-}
diff --git a/node_modules/css-tree/lib/utils/index.js b/node_modules/css-tree/lib/utils/index.js
deleted file mode 100644
index 07bf0f93..00000000
--- a/node_modules/css-tree/lib/utils/index.js
+++ /dev/null
@@ -1,6 +0,0 @@
-export * from './clone.js';
-export * as ident from './ident.js';
-export * from './List.js';
-export * from './names.js';
-export * as string from './string.js';
-export * as url from './url.js';
diff --git a/node_modules/css-tree/lib/utils/names.js b/node_modules/css-tree/lib/utils/names.js
deleted file mode 100644
index b4f74b91..00000000
--- a/node_modules/css-tree/lib/utils/names.js
+++ /dev/null
@@ -1,106 +0,0 @@
-const keywords = new Map();
-const properties = new Map();
-const HYPHENMINUS = 45; // '-'.charCodeAt()
-
-export const keyword = getKeywordDescriptor;
-export const property = getPropertyDescriptor;
-export const vendorPrefix = getVendorPrefix;
-export function isCustomProperty(str, offset) {
- offset = offset || 0;
-
- return str.length - offset >= 2 &&
- str.charCodeAt(offset) === HYPHENMINUS &&
- str.charCodeAt(offset + 1) === HYPHENMINUS;
-}
-
-function getVendorPrefix(str, offset) {
- offset = offset || 0;
-
- // verdor prefix should be at least 3 chars length
- if (str.length - offset >= 3) {
- // vendor prefix starts with hyper minus following non-hyper minus
- if (str.charCodeAt(offset) === HYPHENMINUS &&
- str.charCodeAt(offset + 1) !== HYPHENMINUS) {
- // vendor prefix should contain a hyper minus at the ending
- const secondDashIndex = str.indexOf('-', offset + 2);
-
- if (secondDashIndex !== -1) {
- return str.substring(offset, secondDashIndex + 1);
- }
- }
- }
-
- return '';
-}
-
-function getKeywordDescriptor(keyword) {
- if (keywords.has(keyword)) {
- return keywords.get(keyword);
- }
-
- const name = keyword.toLowerCase();
- let descriptor = keywords.get(name);
-
- if (descriptor === undefined) {
- const custom = isCustomProperty(name, 0);
- const vendor = !custom ? getVendorPrefix(name, 0) : '';
- descriptor = Object.freeze({
- basename: name.substr(vendor.length),
- name,
- prefix: vendor,
- vendor,
- custom
- });
- }
-
- keywords.set(keyword, descriptor);
-
- return descriptor;
-}
-
-function getPropertyDescriptor(property) {
- if (properties.has(property)) {
- return properties.get(property);
- }
-
- let name = property;
- let hack = property[0];
-
- if (hack === '/') {
- hack = property[1] === '/' ? '//' : '/';
- } else if (hack !== '_' &&
- hack !== '*' &&
- hack !== '$' &&
- hack !== '#' &&
- hack !== '+' &&
- hack !== '&') {
- hack = '';
- }
-
- const custom = isCustomProperty(name, hack.length);
-
- // re-use result when possible (the same as for lower case)
- if (!custom) {
- name = name.toLowerCase();
- if (properties.has(name)) {
- const descriptor = properties.get(name);
- properties.set(property, descriptor);
- return descriptor;
- }
- }
-
- const vendor = !custom ? getVendorPrefix(name, hack.length) : '';
- const prefix = name.substr(0, hack.length + vendor.length);
- const descriptor = Object.freeze({
- basename: name.substr(prefix.length),
- name: name.substr(hack.length),
- hack,
- vendor,
- prefix,
- custom
- });
-
- properties.set(property, descriptor);
-
- return descriptor;
-}
diff --git a/node_modules/css-tree/lib/utils/string.js b/node_modules/css-tree/lib/utils/string.js
deleted file mode 100644
index 928a85bc..00000000
--- a/node_modules/css-tree/lib/utils/string.js
+++ /dev/null
@@ -1,99 +0,0 @@
-import {
- isHexDigit,
- isWhiteSpace,
- isValidEscape,
- consumeEscaped,
- decodeEscaped
-} from '../tokenizer/index.js';
-
-const REVERSE_SOLIDUS = 0x005c; // U+005C REVERSE SOLIDUS (\)
-const QUOTATION_MARK = 0x0022; // "
-const APOSTROPHE = 0x0027; // '
-
-export function decode(str) {
- const len = str.length;
- const firstChar = str.charCodeAt(0);
- const start = firstChar === QUOTATION_MARK || firstChar === APOSTROPHE ? 1 : 0;
- const end = start === 1 && len > 1 && str.charCodeAt(len - 1) === firstChar ? len - 2 : len - 1;
- let decoded = '';
-
- for (let i = start; i <= end; i++) {
- let code = str.charCodeAt(i);
-
- if (code === REVERSE_SOLIDUS) {
- // special case at the ending
- if (i === end) {
- // if the next input code point is EOF, do nothing
- // otherwise include last quote as escaped
- if (i !== len - 1) {
- decoded = str.substr(i + 1);
- }
- break;
- }
-
- code = str.charCodeAt(++i);
-
- // consume escaped
- if (isValidEscape(REVERSE_SOLIDUS, code)) {
- const escapeStart = i - 1;
- const escapeEnd = consumeEscaped(str, escapeStart);
-
- i = escapeEnd - 1;
- decoded += decodeEscaped(str.substring(escapeStart + 1, escapeEnd));
- } else {
- // \r\n
- if (code === 0x000d && str.charCodeAt(i + 1) === 0x000a) {
- i++;
- }
- }
- } else {
- decoded += str[i];
- }
- }
-
- return decoded;
-}
-
-// https://drafts.csswg.org/cssom/#serialize-a-string
-// § 2.1. Common Serializing Idioms
-export function encode(str, apostrophe) {
- const quote = apostrophe ? '\'' : '"';
- const quoteCode = apostrophe ? APOSTROPHE : QUOTATION_MARK;
- let encoded = '';
- let wsBeforeHexIsNeeded = false;
-
- for (let i = 0; i < str.length; i++) {
- const code = str.charCodeAt(i);
-
- // If the character is NULL (U+0000), then the REPLACEMENT CHARACTER (U+FFFD).
- if (code === 0x0000) {
- encoded += '\uFFFD';
- continue;
- }
-
- // If the character is in the range [\1-\1f] (U+0001 to U+001F) or is U+007F,
- // the character escaped as code point.
- // Note: Do not compare with 0x0001 since 0x0000 is precessed before
- if (code <= 0x001f || code === 0x007F) {
- encoded += '\\' + code.toString(16);
- wsBeforeHexIsNeeded = true;
- continue;
- }
-
- // If the character is '"' (U+0022) or "\" (U+005C), the escaped character.
- if (code === quoteCode || code === REVERSE_SOLIDUS) {
- encoded += '\\' + str.charAt(i);
- wsBeforeHexIsNeeded = false;
- } else {
- if (wsBeforeHexIsNeeded && (isHexDigit(code) || isWhiteSpace(code))) {
- encoded += ' ';
- }
-
- // Otherwise, the character itself.
- encoded += str.charAt(i);
- wsBeforeHexIsNeeded = false;
- }
- }
-
- return quote + encoded + quote;
-}
diff --git a/node_modules/css-tree/lib/utils/url.js b/node_modules/css-tree/lib/utils/url.js
deleted file mode 100644
index cce5709d..00000000
--- a/node_modules/css-tree/lib/utils/url.js
+++ /dev/null
@@ -1,108 +0,0 @@
-import {
- isHexDigit,
- isWhiteSpace,
- isValidEscape,
- consumeEscaped,
- decodeEscaped
-} from '../tokenizer/index.js';
-
-const SPACE = 0x0020; // U+0020 SPACE
-const REVERSE_SOLIDUS = 0x005c; // U+005C REVERSE SOLIDUS (\)
-const QUOTATION_MARK = 0x0022; // "
-const APOSTROPHE = 0x0027; // '
-const LEFTPARENTHESIS = 0x0028; // U+0028 LEFT PARENTHESIS (()
-const RIGHTPARENTHESIS = 0x0029; // U+0029 RIGHT PARENTHESIS ())
-
-export function decode(str) {
- const len = str.length;
- let start = 4; // length of "url("
- let end = str.charCodeAt(len - 1) === RIGHTPARENTHESIS ? len - 2 : len - 1;
- let decoded = '';
-
- while (start < end && isWhiteSpace(str.charCodeAt(start))) {
- start++;
- }
-
- while (start < end && isWhiteSpace(str.charCodeAt(end))) {
- end--;
- }
-
- for (let i = start; i <= end; i++) {
- let code = str.charCodeAt(i);
-
- if (code === REVERSE_SOLIDUS) {
- // special case at the ending
- if (i === end) {
- // if the next input code point is EOF, do nothing
- // otherwise include last left parenthesis as escaped
- if (i !== len - 1) {
- decoded = str.substr(i + 1);
- }
- break;
- }
-
- code = str.charCodeAt(++i);
-
- // consume escaped
- if (isValidEscape(REVERSE_SOLIDUS, code)) {
- const escapeStart = i - 1;
- const escapeEnd = consumeEscaped(str, escapeStart);
-
- i = escapeEnd - 1;
- decoded += decodeEscaped(str.substring(escapeStart + 1, escapeEnd));
- } else {
- // \r\n
- if (code === 0x000d && str.charCodeAt(i + 1) === 0x000a) {
- i++;
- }
- }
- } else {
- decoded += str[i];
- }
- }
-
- return decoded;
-}
-
-export function encode(str) {
- let encoded = '';
- let wsBeforeHexIsNeeded = false;
-
- for (let i = 0; i < str.length; i++) {
- const code = str.charCodeAt(i);
-
- // If the character is NULL (U+0000), then the REPLACEMENT CHARACTER (U+FFFD).
- if (code === 0x0000) {
- encoded += '\uFFFD';
- continue;
- }
-
- // If the character is in the range [\1-\1f] (U+0001 to U+001F) or is U+007F,
- // the character escaped as code point.
- // Note: Do not compare with 0x0001 since 0x0000 is precessed before
- if (code <= 0x001f || code === 0x007F) {
- encoded += '\\' + code.toString(16);
- wsBeforeHexIsNeeded = true;
- continue;
- }
-
- if (code === SPACE ||
- code === REVERSE_SOLIDUS ||
- code === QUOTATION_MARK ||
- code === APOSTROPHE ||
- code === LEFTPARENTHESIS ||
- code === RIGHTPARENTHESIS) {
- encoded += '\\' + str.charAt(i);
- wsBeforeHexIsNeeded = false;
- } else {
- if (wsBeforeHexIsNeeded && isHexDigit(code)) {
- encoded += ' ';
- }
-
- encoded += str.charAt(i);
- wsBeforeHexIsNeeded = false;
- }
- }
-
- return 'url(' + encoded + ')';
-}
diff --git a/node_modules/css-tree/lib/version.js b/node_modules/css-tree/lib/version.js
deleted file mode 100644
index dde3a83f..00000000
--- a/node_modules/css-tree/lib/version.js
+++ /dev/null
@@ -1,5 +0,0 @@
-import { createRequire } from 'module';
-
-const require = createRequire(import.meta.url);
-
-export const { version } = require('../package.json');
diff --git a/node_modules/css-tree/lib/walker/create.js b/node_modules/css-tree/lib/walker/create.js
deleted file mode 100644
index ca76e030..00000000
--- a/node_modules/css-tree/lib/walker/create.js
+++ /dev/null
@@ -1,287 +0,0 @@
-const { hasOwnProperty } = Object.prototype;
-const noop = function() {};
-
-function ensureFunction(value) {
- return typeof value === 'function' ? value : noop;
-}
-
-function invokeForType(fn, type) {
- return function(node, item, list) {
- if (node.type === type) {
- fn.call(this, node, item, list);
- }
- };
-}
-
-function getWalkersFromStructure(name, nodeType) {
- const structure = nodeType.structure;
- const walkers = [];
-
- for (const key in structure) {
- if (hasOwnProperty.call(structure, key) === false) {
- continue;
- }
-
- let fieldTypes = structure[key];
- const walker = {
- name: key,
- type: false,
- nullable: false
- };
-
- if (!Array.isArray(fieldTypes)) {
- fieldTypes = [fieldTypes];
- }
-
- for (const fieldType of fieldTypes) {
- if (fieldType === null) {
- walker.nullable = true;
- } else if (typeof fieldType === 'string') {
- walker.type = 'node';
- } else if (Array.isArray(fieldType)) {
- walker.type = 'list';
- }
- }
-
- if (walker.type) {
- walkers.push(walker);
- }
- }
-
- if (walkers.length) {
- return {
- context: nodeType.walkContext,
- fields: walkers
- };
- }
-
- return null;
-}
-
-function getTypesFromConfig(config) {
- const types = {};
-
- for (const name in config.node) {
- if (hasOwnProperty.call(config.node, name)) {
- const nodeType = config.node[name];
-
- if (!nodeType.structure) {
- throw new Error('Missed `structure` field in `' + name + '` node type definition');
- }
-
- types[name] = getWalkersFromStructure(name, nodeType);
- }
- }
-
- return types;
-}
-
-function createTypeIterator(config, reverse) {
- const fields = config.fields.slice();
- const contextName = config.context;
- const useContext = typeof contextName === 'string';
-
- if (reverse) {
- fields.reverse();
- }
-
- return function(node, context, walk, walkReducer) {
- let prevContextValue;
-
- if (useContext) {
- prevContextValue = context[contextName];
- context[contextName] = node;
- }
-
- for (const field of fields) {
- const ref = node[field.name];
-
- if (!field.nullable || ref) {
- if (field.type === 'list') {
- const breakWalk = reverse
- ? ref.reduceRight(walkReducer, false)
- : ref.reduce(walkReducer, false);
-
- if (breakWalk) {
- return true;
- }
- } else if (walk(ref)) {
- return true;
- }
- }
- }
-
- if (useContext) {
- context[contextName] = prevContextValue;
- }
- };
-}
-
-function createFastTraveralMap({
- StyleSheet,
- Atrule,
- Rule,
- Block,
- DeclarationList
-}) {
- return {
- Atrule: {
- StyleSheet,
- Atrule,
- Rule,
- Block
- },
- Rule: {
- StyleSheet,
- Atrule,
- Rule,
- Block
- },
- Declaration: {
- StyleSheet,
- Atrule,
- Rule,
- Block,
- DeclarationList
- }
- };
-}
-
-export function createWalker(config) {
- const types = getTypesFromConfig(config);
- const iteratorsNatural = {};
- const iteratorsReverse = {};
- const breakWalk = Symbol('break-walk');
- const skipNode = Symbol('skip-node');
-
- for (const name in types) {
- if (hasOwnProperty.call(types, name) && types[name] !== null) {
- iteratorsNatural[name] = createTypeIterator(types[name], false);
- iteratorsReverse[name] = createTypeIterator(types[name], true);
- }
- }
-
- const fastTraversalIteratorsNatural = createFastTraveralMap(iteratorsNatural);
- const fastTraversalIteratorsReverse = createFastTraveralMap(iteratorsReverse);
-
- const walk = function(root, options) {
- function walkNode(node, item, list) {
- const enterRet = enter.call(context, node, item, list);
-
- if (enterRet === breakWalk) {
- return true;
- }
-
- if (enterRet === skipNode) {
- return false;
- }
-
- if (iterators.hasOwnProperty(node.type)) {
- if (iterators[node.type](node, context, walkNode, walkReducer)) {
- return true;
- }
- }
-
- if (leave.call(context, node, item, list) === breakWalk) {
- return true;
- }
-
- return false;
- }
-
- let enter = noop;
- let leave = noop;
- let iterators = iteratorsNatural;
- let walkReducer = (ret, data, item, list) => ret || walkNode(data, item, list);
- const context = {
- break: breakWalk,
- skip: skipNode,
-
- root,
- stylesheet: null,
- atrule: null,
- atrulePrelude: null,
- rule: null,
- selector: null,
- block: null,
- declaration: null,
- function: null
- };
-
- if (typeof options === 'function') {
- enter = options;
- } else if (options) {
- enter = ensureFunction(options.enter);
- leave = ensureFunction(options.leave);
-
- if (options.reverse) {
- iterators = iteratorsReverse;
- }
-
- if (options.visit) {
- if (fastTraversalIteratorsNatural.hasOwnProperty(options.visit)) {
- iterators = options.reverse
- ? fastTraversalIteratorsReverse[options.visit]
- : fastTraversalIteratorsNatural[options.visit];
- } else if (!types.hasOwnProperty(options.visit)) {
- throw new Error('Bad value `' + options.visit + '` for `visit` option (should be: ' + Object.keys(types).sort().join(', ') + ')');
- }
-
- enter = invokeForType(enter, options.visit);
- leave = invokeForType(leave, options.visit);
- }
- }
-
- if (enter === noop && leave === noop) {
- throw new Error('Neither `enter` nor `leave` walker handler is set or both aren\'t a function');
- }
-
- walkNode(root);
- };
-
- walk.break = breakWalk;
- walk.skip = skipNode;
-
- walk.find = function(ast, fn) {
- let found = null;
-
- walk(ast, function(node, item, list) {
- if (fn.call(this, node, item, list)) {
- found = node;
- return breakWalk;
- }
- });
-
- return found;
- };
-
- walk.findLast = function(ast, fn) {
- let found = null;
-
- walk(ast, {
- reverse: true,
- enter(node, item, list) {
- if (fn.call(this, node, item, list)) {
- found = node;
- return breakWalk;
- }
- }
- });
-
- return found;
- };
-
- walk.findAll = function(ast, fn) {
- const found = [];
-
- walk(ast, function(node, item, list) {
- if (fn.call(this, node, item, list)) {
- found.push(node);
- }
- });
-
- return found;
- };
-
- return walk;
-};
diff --git a/node_modules/css-tree/lib/walker/index.js b/node_modules/css-tree/lib/walker/index.js
deleted file mode 100644
index 24cb4774..00000000
--- a/node_modules/css-tree/lib/walker/index.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import { createWalker } from './create.js';
-import config from '../syntax/config/walker.js';
-
-export default createWalker(config);
diff --git a/node_modules/css-tree/node_modules/source-map-js/LICENSE b/node_modules/css-tree/node_modules/source-map-js/LICENSE
deleted file mode 100644
index ed1b7cf2..00000000
--- a/node_modules/css-tree/node_modules/source-map-js/LICENSE
+++ /dev/null
@@ -1,28 +0,0 @@
-
-Copyright (c) 2009-2011, Mozilla Foundation and contributors
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-* Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
-* Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
-* Neither the names of the Mozilla Foundation nor the names of project
- contributors may be used to endorse or promote products derived from this
- software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/node_modules/css-tree/node_modules/source-map-js/README.md b/node_modules/css-tree/node_modules/source-map-js/README.md
deleted file mode 100644
index 614962d7..00000000
--- a/node_modules/css-tree/node_modules/source-map-js/README.md
+++ /dev/null
@@ -1,765 +0,0 @@
-# Source Map JS
-
-[![NPM](https://nodei.co/npm/source-map-js.png?downloads=true&downloadRank=true)](https://www.npmjs.com/package/source-map-js)
-
-Difference between original [source-map](https://github.com/mozilla/source-map):
-
-> TL,DR: it's fork of original source-map@0.6, but with perfomance optimizations.
-
-This journey starts from [source-map@0.7.0](https://github.com/mozilla/source-map/blob/master/CHANGELOG.md#070). Some part of it was rewritten to Rust and WASM and API became async.
-
-It's still a major block for many libraries like PostCSS or Sass for example because they need to migrate the whole API to the async way. This is the reason why 0.6.1 has 2x more downloads than 0.7.3 while it's faster several times.
-
-![Downloads count](media/downloads.png)
-
-More important that WASM version has some optimizations in JS code too. This is why [community asked to create branch for 0.6 version](https://github.com/mozilla/source-map/issues/324) and port these optimizations but, sadly, the answer was «no». A bit later I discovered [the issue](https://github.com/mozilla/source-map/issues/370) created by [Ben Rothman (@benthemonkey)](https://github.com/benthemonkey) with no response at all.
-
-[Roman Dvornov (@lahmatiy)](https://github.com/lahmatiy) wrote a [serveral posts](https://t.me/gorshochekvarit/76) (russian, only, sorry) about source-map library in his own Telegram channel. He mentioned the article [«Maybe you don't need Rust and WASM to speed up your JS»](https://mrale.ph/blog/2018/02/03/maybe-you-dont-need-rust-to-speed-up-your-js.html) written by [Vyacheslav Egorov (@mraleph)](https://github.com/mraleph). This article contains optimizations and hacks that lead to almost the same performance compare to WASM implementation.
-
-I decided to fork the original source-map and port these optimizations from the article and several others PR from the original source-map.
-
----------
-
-This is a library to generate and consume the source map format
-[described here][format].
-
-[format]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit
-
-## Use with Node
-
- $ npm install source-map-js
-
-<!-- ## Use on the Web
-
- <script src="https://raw.githubusercontent.com/mozilla/source-map/master/dist/source-map.min.js" defer></script> -->
-
---------------------------------------------------------------------------------
-
-<!-- `npm run toc` to regenerate the Table of Contents -->
-
-<!-- START doctoc generated TOC please keep comment here to allow auto update -->
-<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
-## Table of Contents
-
-- [Examples](#examples)
- - [Consuming a source map](#consuming-a-source-map)
- - [Generating a source map](#generating-a-source-map)
- - [With SourceNode (high level API)](#with-sourcenode-high-level-api)
- - [With SourceMapGenerator (low level API)](#with-sourcemapgenerator-low-level-api)
-- [API](#api)
- - [SourceMapConsumer](#sourcemapconsumer)
- - [new SourceMapConsumer(rawSourceMap)](#new-sourcemapconsumerrawsourcemap)
- - [SourceMapConsumer.prototype.computeColumnSpans()](#sourcemapconsumerprototypecomputecolumnspans)
- - [SourceMapConsumer.prototype.originalPositionFor(generatedPosition)](#sourcemapconsumerprototypeoriginalpositionforgeneratedposition)
- - [SourceMapConsumer.prototype.generatedPositionFor(originalPosition)](#sourcemapconsumerprototypegeneratedpositionfororiginalposition)
- - [SourceMapConsumer.prototype.allGeneratedPositionsFor(originalPosition)](#sourcemapconsumerprototypeallgeneratedpositionsfororiginalposition)
- - [SourceMapConsumer.prototype.hasContentsOfAllSources()](#sourcemapconsumerprototypehascontentsofallsources)
- - [SourceMapConsumer.prototype.sourceContentFor(source[, returnNullOnMissing])](#sourcemapconsumerprototypesourcecontentforsource-returnnullonmissing)
- - [SourceMapConsumer.prototype.eachMapping(callback, context, order)](#sourcemapconsumerprototypeeachmappingcallback-context-order)
- - [SourceMapGenerator](#sourcemapgenerator)
- - [new SourceMapGenerator([startOfSourceMap])](#new-sourcemapgeneratorstartofsourcemap)
- - [SourceMapGenerator.fromSourceMap(sourceMapConsumer)](#sourcemapgeneratorfromsourcemapsourcemapconsumer)
- - [SourceMapGenerator.prototype.addMapping(mapping)](#sourcemapgeneratorprototypeaddmappingmapping)
- - [SourceMapGenerator.prototype.setSourceContent(sourceFile, sourceContent)](#sourcemapgeneratorprototypesetsourcecontentsourcefile-sourcecontent)
- - [SourceMapGenerator.prototype.applySourceMap(sourceMapConsumer[, sourceFile[, sourceMapPath]])](#sourcemapgeneratorprototypeapplysourcemapsourcemapconsumer-sourcefile-sourcemappath)
- - [SourceMapGenerator.prototype.toString()](#sourcemapgeneratorprototypetostring)
- - [SourceNode](#sourcenode)
- - [new SourceNode([line, column, source[, chunk[, name]]])](#new-sourcenodeline-column-source-chunk-name)
- - [SourceNode.fromStringWithSourceMap(code, sourceMapConsumer[, relativePath])](#sourcenodefromstringwithsourcemapcode-sourcemapconsumer-relativepath)
- - [SourceNode.prototype.add(chunk)](#sourcenodeprototypeaddchunk)
- - [SourceNode.prototype.prepend(chunk)](#sourcenodeprototypeprependchunk)
- - [SourceNode.prototype.setSourceContent(sourceFile, sourceContent)](#sourcenodeprototypesetsourcecontentsourcefile-sourcecontent)
- - [SourceNode.prototype.walk(fn)](#sourcenodeprototypewalkfn)
- - [SourceNode.prototype.walkSourceContents(fn)](#sourcenodeprototypewalksourcecontentsfn)
- - [SourceNode.prototype.join(sep)](#sourcenodeprototypejoinsep)
- - [SourceNode.prototype.replaceRight(pattern, replacement)](#sourcenodeprototypereplacerightpattern-replacement)
- - [SourceNode.prototype.toString()](#sourcenodeprototypetostring)
- - [SourceNode.prototype.toStringWithSourceMap([startOfSourceMap])](#sourcenodeprototypetostringwithsourcemapstartofsourcemap)
-
-<!-- END doctoc generated TOC please keep comment here to allow auto update -->
-
-## Examples
-
-### Consuming a source map
-
-```js
-var rawSourceMap = {
- version: 3,
- file: 'min.js',
- names: ['bar', 'baz', 'n'],
- sources: ['one.js', 'two.js'],
- sourceRoot: 'http://example.com/www/js/',
- mappings: 'CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOC,IAAID;CCDb,IAAI,IAAM,SAAUE,GAClB,OAAOA'
-};
-
-var smc = new SourceMapConsumer(rawSourceMap);
-
-console.log(smc.sources);
-// [ 'http://example.com/www/js/one.js',
-// 'http://example.com/www/js/two.js' ]
-
-console.log(smc.originalPositionFor({
- line: 2,
- column: 28
-}));
-// { source: 'http://example.com/www/js/two.js',
-// line: 2,
-// column: 10,
-// name: 'n' }
-
-console.log(smc.generatedPositionFor({
- source: 'http://example.com/www/js/two.js',
- line: 2,
- column: 10
-}));
-// { line: 2, column: 28 }
-
-smc.eachMapping(function (m) {
- // ...
-});
-```
-
-### Generating a source map
-
-In depth guide:
-[**Compiling to JavaScript, and Debugging with Source Maps**](https://hacks.mozilla.org/2013/05/compiling-to-javascript-and-debugging-with-source-maps/)
-
-#### With SourceNode (high level API)
-
-```js
-function compile(ast) {
- switch (ast.type) {
- case 'BinaryExpression':
- return new SourceNode(
- ast.location.line,
- ast.location.column,
- ast.location.source,
- [compile(ast.left), " + ", compile(ast.right)]
- );
- case 'Literal':
- return new SourceNode(
- ast.location.line,
- ast.location.column,
- ast.location.source,
- String(ast.value)
- );
- // ...
- default:
- throw new Error("Bad AST");
- }
-}
-
-var ast = parse("40 + 2", "add.js");
-console.log(compile(ast).toStringWithSourceMap({
- file: 'add.js'
-}));
-// { code: '40 + 2',
-// map: [object SourceMapGenerator] }
-```
-
-#### With SourceMapGenerator (low level API)
-
-```js
-var map = new SourceMapGenerator({
- file: "source-mapped.js"
-});
-
-map.addMapping({
- generated: {
- line: 10,
- column: 35
- },
- source: "foo.js",
- original: {
- line: 33,
- column: 2
- },
- name: "christopher"
-});
-
-console.log(map.toString());
-// '{"version":3,"file":"source-mapped.js","sources":["foo.js"],"names":["christopher"],"mappings":";;;;;;;;;mCAgCEA"}'
-```
-
-## API
-
-Get a reference to the module:
-
-```js
-// Node.js
-var sourceMap = require('source-map');
-
-// Browser builds
-var sourceMap = window.sourceMap;
-
-// Inside Firefox
-const sourceMap = require("devtools/toolkit/sourcemap/source-map.js");
-```
-
-### SourceMapConsumer
-
-A SourceMapConsumer instance represents a parsed source map which we can query
-for information about the original file positions by giving it a file position
-in the generated source.
-
-#### new SourceMapConsumer(rawSourceMap)
-
-The only parameter is the raw source map (either as a string which can be
-`JSON.parse`'d, or an object). According to the spec, source maps have the
-following attributes:
-
-* `version`: Which version of the source map spec this map is following.
-
-* `sources`: An array of URLs to the original source files.
-
-* `names`: An array of identifiers which can be referenced by individual
- mappings.
-
-* `sourceRoot`: Optional. The URL root from which all sources are relative.
-
-* `sourcesContent`: Optional. An array of contents of the original source files.
-
-* `mappings`: A string of base64 VLQs which contain the actual mappings.
-
-* `file`: Optional. The generated filename this source map is associated with.
-
-```js
-var consumer = new sourceMap.SourceMapConsumer(rawSourceMapJsonData);
-```
-
-#### SourceMapConsumer.prototype.computeColumnSpans()
-
-Compute the last column for each generated mapping. The last column is
-inclusive.
-
-```js
-// Before:
-consumer.allGeneratedPositionsFor({ line: 2, source: "foo.coffee" })
-// [ { line: 2,
-// column: 1 },
-// { line: 2,
-// column: 10 },
-// { line: 2,
-// column: 20 } ]
-
-consumer.computeColumnSpans();
-
-// After:
-consumer.allGeneratedPositionsFor({ line: 2, source: "foo.coffee" })
-// [ { line: 2,
-// column: 1,
-// lastColumn: 9 },
-// { line: 2,
-// column: 10,
-// lastColumn: 19 },
-// { line: 2,
-// column: 20,
-// lastColumn: Infinity } ]
-
-```
-
-#### SourceMapConsumer.prototype.originalPositionFor(generatedPosition)
-
-Returns the original source, line, and column information for the generated
-source's line and column positions provided. The only argument is an object with
-the following properties:
-
-* `line`: The line number in the generated source. Line numbers in
- this library are 1-based (note that the underlying source map
- specification uses 0-based line numbers -- this library handles the
- translation).
-
-* `column`: The column number in the generated source. Column numbers
- in this library are 0-based.
-
-* `bias`: Either `SourceMapConsumer.GREATEST_LOWER_BOUND` or
- `SourceMapConsumer.LEAST_UPPER_BOUND`. Specifies whether to return the closest
- element that is smaller than or greater than the one we are searching for,
- respectively, if the exact element cannot be found. Defaults to
- `SourceMapConsumer.GREATEST_LOWER_BOUND`.
-
-and an object is returned with the following properties:
-
-* `source`: The original source file, or null if this information is not
- available.
-
-* `line`: The line number in the original source, or null if this information is
- not available. The line number is 1-based.
-
-* `column`: The column number in the original source, or null if this
- information is not available. The column number is 0-based.
-
-* `name`: The original identifier, or null if this information is not available.
-
-```js
-consumer.originalPositionFor({ line: 2, column: 10 })
-// { source: 'foo.coffee',
-// line: 2,
-// column: 2,
-// name: null }
-
-consumer.originalPositionFor({ line: 99999999999999999, column: 999999999999999 })
-// { source: null,
-// line: null,
-// column: null,
-// name: null }
-```
-
-#### SourceMapConsumer.prototype.generatedPositionFor(originalPosition)
-
-Returns the generated line and column information for the original source,
-line, and column positions provided. The only argument is an object with
-the following properties:
-
-* `source`: The filename of the original source.
-
-* `line`: The line number in the original source. The line number is
- 1-based.
-
-* `column`: The column number in the original source. The column
- number is 0-based.
-
-and an object is returned with the following properties:
-
-* `line`: The line number in the generated source, or null. The line
- number is 1-based.
-
-* `column`: The column number in the generated source, or null. The
- column number is 0-based.
-
-```js
-consumer.generatedPositionFor({ source: "example.js", line: 2, column: 10 })
-// { line: 1,
-// column: 56 }
-```
-
-#### SourceMapConsumer.prototype.allGeneratedPositionsFor(originalPosition)
-
-Returns all generated line and column information for the original source, line,
-and column provided. If no column is provided, returns all mappings
-corresponding to a either the line we are searching for or the next closest line
-that has any mappings. Otherwise, returns all mappings corresponding to the
-given line and either the column we are searching for or the next closest column
-that has any offsets.
-
-The only argument is an object with the following properties:
-
-* `source`: The filename of the original source.
-
-* `line`: The line number in the original source. The line number is
- 1-based.
-
-* `column`: Optional. The column number in the original source. The
- column number is 0-based.
-
-and an array of objects is returned, each with the following properties:
-
-* `line`: The line number in the generated source, or null. The line
- number is 1-based.
-
-* `column`: The column number in the generated source, or null. The
- column number is 0-based.
-
-```js
-consumer.allGeneratedpositionsfor({ line: 2, source: "foo.coffee" })
-// [ { line: 2,
-// column: 1 },
-// { line: 2,
-// column: 10 },
-// { line: 2,
-// column: 20 } ]
-```
-
-#### SourceMapConsumer.prototype.hasContentsOfAllSources()
-
-Return true if we have the embedded source content for every source listed in
-the source map, false otherwise.
-
-In other words, if this method returns `true`, then
-`consumer.sourceContentFor(s)` will succeed for every source `s` in
-`consumer.sources`.
-
-```js
-// ...
-if (consumer.hasContentsOfAllSources()) {
- consumerReadyCallback(consumer);
-} else {
- fetchSources(consumer, consumerReadyCallback);
-}
-// ...
-```
-
-#### SourceMapConsumer.prototype.sourceContentFor(source[, returnNullOnMissing])
-
-Returns the original source content for the source provided. The only
-argument is the URL of the original source file.
-
-If the source content for the given source is not found, then an error is
-thrown. Optionally, pass `true` as the second param to have `null` returned
-instead.
-
-```js
-consumer.sources
-// [ "my-cool-lib.clj" ]
-
-consumer.sourceContentFor("my-cool-lib.clj")
-// "..."
-
-consumer.sourceContentFor("this is not in the source map");
-// Error: "this is not in the source map" is not in the source map
-
-consumer.sourceContentFor("this is not in the source map", true);
-// null
-```
-
-#### SourceMapConsumer.prototype.eachMapping(callback, context, order)
-
-Iterate over each mapping between an original source/line/column and a
-generated line/column in this source map.
-
-* `callback`: The function that is called with each mapping. Mappings have the
- form `{ source, generatedLine, generatedColumn, originalLine, originalColumn,
- name }`
-
-* `context`: Optional. If specified, this object will be the value of `this`
- every time that `callback` is called.
-
-* `order`: Either `SourceMapConsumer.GENERATED_ORDER` or
- `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to iterate over
- the mappings sorted by the generated file's line/column order or the
- original's source/line/column order, respectively. Defaults to
- `SourceMapConsumer.GENERATED_ORDER`.
-
-```js
-consumer.eachMapping(function (m) { console.log(m); })
-// ...
-// { source: 'illmatic.js',
-// generatedLine: 1,
-// generatedColumn: 0,
-// originalLine: 1,
-// originalColumn: 0,
-// name: null }
-// { source: 'illmatic.js',
-// generatedLine: 2,
-// generatedColumn: 0,
-// originalLine: 2,
-// originalColumn: 0,
-// name: null }
-// ...
-```
-### SourceMapGenerator
-
-An instance of the SourceMapGenerator represents a source map which is being
-built incrementally.
-
-#### new SourceMapGenerator([startOfSourceMap])
-
-You may pass an object with the following properties:
-
-* `file`: The filename of the generated source that this source map is
- associated with.
-
-* `sourceRoot`: A root for all relative URLs in this source map.
-
-* `skipValidation`: Optional. When `true`, disables validation of mappings as
- they are added. This can improve performance but should be used with
- discretion, as a last resort. Even then, one should avoid using this flag when
- running tests, if possible.
-
-* `ignoreInvalidMapping`: Optional. When `true`, instead of throwing error on
- invalid mapping, it will be ignored.
-
-```js
-var generator = new sourceMap.SourceMapGenerator({
- file: "my-generated-javascript-file.js",
- sourceRoot: "http://example.com/app/js/"
-});
-```
-
-#### SourceMapGenerator.fromSourceMap(sourceMapConsumer, sourceMapGeneratorOptions)
-
-Creates a new `SourceMapGenerator` from an existing `SourceMapConsumer` instance.
-
-* `sourceMapConsumer` The SourceMap.
-
-* `sourceMapGeneratorOptions` options that will be passed to the SourceMapGenerator constructor which used under the hood.
-
-```js
-var generator = sourceMap.SourceMapGenerator.fromSourceMap(consumer, {
- ignoreInvalidMapping: true,
-});
-```
-
-#### SourceMapGenerator.prototype.addMapping(mapping)
-
-Add a single mapping from original source line and column to the generated
-source's line and column for this source map being created. The mapping object
-should have the following properties:
-
-* `generated`: An object with the generated line and column positions.
-
-* `original`: An object with the original line and column positions.
-
-* `source`: The original source file (relative to the sourceRoot).
-
-* `name`: An optional original token name for this mapping.
-
-```js
-generator.addMapping({
- source: "module-one.scm",
- original: { line: 128, column: 0 },
- generated: { line: 3, column: 456 }
-})
-```
-
-#### SourceMapGenerator.prototype.setSourceContent(sourceFile, sourceContent)
-
-Set the source content for an original source file.
-
-* `sourceFile` the URL of the original source file.
-
-* `sourceContent` the content of the source file.
-
-```js
-generator.setSourceContent("module-one.scm",
- fs.readFileSync("path/to/module-one.scm"))
-```
-
-#### SourceMapGenerator.prototype.applySourceMap(sourceMapConsumer[, sourceFile[, sourceMapPath]])
-
-Applies a SourceMap for a source file to the SourceMap.
-Each mapping to the supplied source file is rewritten using the
-supplied SourceMap. Note: The resolution for the resulting mappings
-is the minimum of this map and the supplied map.
-
-* `sourceMapConsumer`: The SourceMap to be applied.
-
-* `sourceFile`: Optional. The filename of the source file.
- If omitted, sourceMapConsumer.file will be used, if it exists.
- Otherwise an error will be thrown.
-
-* `sourceMapPath`: Optional. The dirname of the path to the SourceMap
- to be applied. If relative, it is relative to the SourceMap.
-
- This parameter is needed when the two SourceMaps aren't in the same
- directory, and the SourceMap to be applied contains relative source
- paths. If so, those relative source paths need to be rewritten
- relative to the SourceMap.
-
- If omitted, it is assumed that both SourceMaps are in the same directory,
- thus not needing any rewriting. (Supplying `'.'` has the same effect.)
-
-#### SourceMapGenerator.prototype.toString()
-
-Renders the source map being generated to a string.
-
-```js
-generator.toString()
-// '{"version":3,"sources":["module-one.scm"],"names":[],"mappings":"...snip...","file":"my-generated-javascript-file.js","sourceRoot":"http://example.com/app/js/"}'
-```
-
-### SourceNode
-
-SourceNodes provide a way to abstract over interpolating and/or concatenating
-snippets of generated JavaScript source code, while maintaining the line and
-column information associated between those snippets and the original source
-code. This is useful as the final intermediate representation a compiler might
-use before outputting the generated JS and source map.
-
-#### new SourceNode([line, column, source[, chunk[, name]]])
-
-* `line`: The original line number associated with this source node, or null if
- it isn't associated with an original line. The line number is 1-based.
-
-* `column`: The original column number associated with this source node, or null
- if it isn't associated with an original column. The column number
- is 0-based.
-
-* `source`: The original source's filename; null if no filename is provided.
-
-* `chunk`: Optional. Is immediately passed to `SourceNode.prototype.add`, see
- below.
-
-* `name`: Optional. The original identifier.
-
-```js
-var node = new SourceNode(1, 2, "a.cpp", [
- new SourceNode(3, 4, "b.cpp", "extern int status;\n"),
- new SourceNode(5, 6, "c.cpp", "std::string* make_string(size_t n);\n"),
- new SourceNode(7, 8, "d.cpp", "int main(int argc, char** argv) {}\n"),
-]);
-```
-
-#### SourceNode.fromStringWithSourceMap(code, sourceMapConsumer[, relativePath])
-
-Creates a SourceNode from generated code and a SourceMapConsumer.
-
-* `code`: The generated code
-
-* `sourceMapConsumer` The SourceMap for the generated code
-
-* `relativePath` The optional path that relative sources in `sourceMapConsumer`
- should be relative to.
-
-```js
-var consumer = new SourceMapConsumer(fs.readFileSync("path/to/my-file.js.map", "utf8"));
-var node = SourceNode.fromStringWithSourceMap(fs.readFileSync("path/to/my-file.js"),
- consumer);
-```
-
-#### SourceNode.prototype.add(chunk)
-
-Add a chunk of generated JS to this source node.
-
-* `chunk`: A string snippet of generated JS code, another instance of
- `SourceNode`, or an array where each member is one of those things.
-
-```js
-node.add(" + ");
-node.add(otherNode);
-node.add([leftHandOperandNode, " + ", rightHandOperandNode]);
-```
-
-#### SourceNode.prototype.prepend(chunk)
-
-Prepend a chunk of generated JS to this source node.
-
-* `chunk`: A string snippet of generated JS code, another instance of
- `SourceNode`, or an array where each member is one of those things.
-
-```js
-node.prepend("/** Build Id: f783haef86324gf **/\n\n");
-```
-
-#### SourceNode.prototype.setSourceContent(sourceFile, sourceContent)
-
-Set the source content for a source file. This will be added to the
-`SourceMap` in the `sourcesContent` field.
-
-* `sourceFile`: The filename of the source file
-
-* `sourceContent`: The content of the source file
-
-```js
-node.setSourceContent("module-one.scm",
- fs.readFileSync("path/to/module-one.scm"))
-```
-
-#### SourceNode.prototype.walk(fn)
-
-Walk over the tree of JS snippets in this node and its children. The walking
-function is called once for each snippet of JS and is passed that snippet and
-the its original associated source's line/column location.
-
-* `fn`: The traversal function.
-
-```js
-var node = new SourceNode(1, 2, "a.js", [
- new SourceNode(3, 4, "b.js", "uno"),
- "dos",
- [
- "tres",
- new SourceNode(5, 6, "c.js", "quatro")
- ]
-]);
-
-node.walk(function (code, loc) { console.log("WALK:", code, loc); })
-// WALK: uno { source: 'b.js', line: 3, column: 4, name: null }
-// WALK: dos { source: 'a.js', line: 1, column: 2, name: null }
-// WALK: tres { source: 'a.js', line: 1, column: 2, name: null }
-// WALK: quatro { source: 'c.js', line: 5, column: 6, name: null }
-```
-
-#### SourceNode.prototype.walkSourceContents(fn)
-
-Walk over the tree of SourceNodes. The walking function is called for each
-source file content and is passed the filename and source content.
-
-* `fn`: The traversal function.
-
-```js
-var a = new SourceNode(1, 2, "a.js", "generated from a");
-a.setSourceContent("a.js", "original a");
-var b = new SourceNode(1, 2, "b.js", "generated from b");
-b.setSourceContent("b.js", "original b");
-var c = new SourceNode(1, 2, "c.js", "generated from c");
-c.setSourceContent("c.js", "original c");
-
-var node = new SourceNode(null, null, null, [a, b, c]);
-node.walkSourceContents(function (source, contents) { console.log("WALK:", source, ":", contents); })
-// WALK: a.js : original a
-// WALK: b.js : original b
-// WALK: c.js : original c
-```
-
-#### SourceNode.prototype.join(sep)
-
-Like `Array.prototype.join` except for SourceNodes. Inserts the separator
-between each of this source node's children.
-
-* `sep`: The separator.
-
-```js
-var lhs = new SourceNode(1, 2, "a.rs", "my_copy");
-var operand = new SourceNode(3, 4, "a.rs", "=");
-var rhs = new SourceNode(5, 6, "a.rs", "orig.clone()");
-
-var node = new SourceNode(null, null, null, [ lhs, operand, rhs ]);
-var joinedNode = node.join(" ");
-```
-
-#### SourceNode.prototype.replaceRight(pattern, replacement)
-
-Call `String.prototype.replace` on the very right-most source snippet. Useful
-for trimming white space from the end of a source node, etc.
-
-* `pattern`: The pattern to replace.
-
-* `replacement`: The thing to replace the pattern with.
-
-```js
-// Trim trailing white space.
-node.replaceRight(/\s*$/, "");
-```
-
-#### SourceNode.prototype.toString()
-
-Return the string representation of this source node. Walks over the tree and
-concatenates all the various snippets together to one string.
-
-```js
-var node = new SourceNode(1, 2, "a.js", [
- new SourceNode(3, 4, "b.js", "uno"),
- "dos",
- [
- "tres",
- new SourceNode(5, 6, "c.js", "quatro")
- ]
-]);
-
-node.toString()
-// 'unodostresquatro'
-```
-
-#### SourceNode.prototype.toStringWithSourceMap([startOfSourceMap])
-
-Returns the string representation of this tree of source nodes, plus a
-SourceMapGenerator which contains all the mappings between the generated and
-original sources.
-
-The arguments are the same as those to `new SourceMapGenerator`.
-
-```js
-var node = new SourceNode(1, 2, "a.js", [
- new SourceNode(3, 4, "b.js", "uno"),
- "dos",
- [
- "tres",
- new SourceNode(5, 6, "c.js", "quatro")
- ]
-]);
-
-node.toStringWithSourceMap({ file: "my-output-file.js" })
-// { code: 'unodostresquatro',
-// map: [object SourceMapGenerator] }
-```
diff --git a/node_modules/css-tree/node_modules/source-map-js/lib/array-set.js b/node_modules/css-tree/node_modules/source-map-js/lib/array-set.js
deleted file mode 100644
index fbd5c81c..00000000
--- a/node_modules/css-tree/node_modules/source-map-js/lib/array-set.js
+++ /dev/null
@@ -1,121 +0,0 @@
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
-var util = require('./util');
-var has = Object.prototype.hasOwnProperty;
-var hasNativeMap = typeof Map !== "undefined";
-
-/**
- * A data structure which is a combination of an array and a set. Adding a new
- * member is O(1), testing for membership is O(1), and finding the index of an
- * element is O(1). Removing elements from the set is not supported. Only
- * strings are supported for membership.
- */
-function ArraySet() {
- this._array = [];
- this._set = hasNativeMap ? new Map() : Object.create(null);
-}
-
-/**
- * Static method for creating ArraySet instances from an existing array.
- */
-ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {
- var set = new ArraySet();
- for (var i = 0, len = aArray.length; i < len; i++) {
- set.add(aArray[i], aAllowDuplicates);
- }
- return set;
-};
-
-/**
- * Return how many unique items are in this ArraySet. If duplicates have been
- * added, than those do not count towards the size.
- *
- * @returns Number
- */
-ArraySet.prototype.size = function ArraySet_size() {
- return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;
-};
-
-/**
- * Add the given string to this set.
- *
- * @param String aStr
- */
-ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {
- var sStr = hasNativeMap ? aStr : util.toSetString(aStr);
- var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);
- var idx = this._array.length;
- if (!isDuplicate || aAllowDuplicates) {
- this._array.push(aStr);
- }
- if (!isDuplicate) {
- if (hasNativeMap) {
- this._set.set(aStr, idx);
- } else {
- this._set[sStr] = idx;
- }
- }
-};
-
-/**
- * Is the given string a member of this set?
- *
- * @param String aStr
- */
-ArraySet.prototype.has = function ArraySet_has(aStr) {
- if (hasNativeMap) {
- return this._set.has(aStr);
- } else {
- var sStr = util.toSetString(aStr);
- return has.call(this._set, sStr);
- }
-};
-
-/**
- * What is the index of the given string in the array?
- *
- * @param String aStr
- */
-ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {
- if (hasNativeMap) {
- var idx = this._set.get(aStr);
- if (idx >= 0) {
- return idx;
- }
- } else {
- var sStr = util.toSetString(aStr);
- if (has.call(this._set, sStr)) {
- return this._set[sStr];
- }
- }
-
- throw new Error('"' + aStr + '" is not in the set.');
-};
-
-/**
- * What is the element at the given index?
- *
- * @param Number aIdx
- */
-ArraySet.prototype.at = function ArraySet_at(aIdx) {
- if (aIdx >= 0 && aIdx < this._array.length) {
- return this._array[aIdx];
- }
- throw new Error('No element indexed by ' + aIdx);
-};
-
-/**
- * Returns the array representation of this set (which has the proper indices
- * indicated by indexOf). Note that this is a copy of the internal array used
- * for storing the members so that no one can mess with internal state.
- */
-ArraySet.prototype.toArray = function ArraySet_toArray() {
- return this._array.slice();
-};
-
-exports.ArraySet = ArraySet;
diff --git a/node_modules/css-tree/node_modules/source-map-js/lib/base64-vlq.js b/node_modules/css-tree/node_modules/source-map-js/lib/base64-vlq.js
deleted file mode 100644
index 612b4040..00000000
--- a/node_modules/css-tree/node_modules/source-map-js/lib/base64-vlq.js
+++ /dev/null
@@ -1,140 +0,0 @@
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- *
- * Based on the Base 64 VLQ implementation in Closure Compiler:
- * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java
- *
- * Copyright 2011 The Closure Compiler Authors. All rights reserved.
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials provided
- * with the distribution.
- * * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-var base64 = require('./base64');
-
-// A single base 64 digit can contain 6 bits of data. For the base 64 variable
-// length quantities we use in the source map spec, the first bit is the sign,
-// the next four bits are the actual value, and the 6th bit is the
-// continuation bit. The continuation bit tells us whether there are more
-// digits in this value following this digit.
-//
-// Continuation
-// | Sign
-// | |
-// V V
-// 101011
-
-var VLQ_BASE_SHIFT = 5;
-
-// binary: 100000
-var VLQ_BASE = 1 << VLQ_BASE_SHIFT;
-
-// binary: 011111
-var VLQ_BASE_MASK = VLQ_BASE - 1;
-
-// binary: 100000
-var VLQ_CONTINUATION_BIT = VLQ_BASE;
-
-/**
- * Converts from a two-complement value to a value where the sign bit is
- * placed in the least significant bit. For example, as decimals:
- * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary)
- * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary)
- */
-function toVLQSigned(aValue) {
- return aValue < 0
- ? ((-aValue) << 1) + 1
- : (aValue << 1) + 0;
-}
-
-/**
- * Converts to a two-complement value from a value where the sign bit is
- * placed in the least significant bit. For example, as decimals:
- * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1
- * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2
- */
-function fromVLQSigned(aValue) {
- var isNegative = (aValue & 1) === 1;
- var shifted = aValue >> 1;
- return isNegative
- ? -shifted
- : shifted;
-}
-
-/**
- * Returns the base 64 VLQ encoded value.
- */
-exports.encode = function base64VLQ_encode(aValue) {
- var encoded = "";
- var digit;
-
- var vlq = toVLQSigned(aValue);
-
- do {
- digit = vlq & VLQ_BASE_MASK;
- vlq >>>= VLQ_BASE_SHIFT;
- if (vlq > 0) {
- // There are still more digits in this value, so we must make sure the
- // continuation bit is marked.
- digit |= VLQ_CONTINUATION_BIT;
- }
- encoded += base64.encode(digit);
- } while (vlq > 0);
-
- return encoded;
-};
-
-/**
- * Decodes the next base 64 VLQ value from the given string and returns the
- * value and the rest of the string via the out parameter.
- */
-exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {
- var strLen = aStr.length;
- var result = 0;
- var shift = 0;
- var continuation, digit;
-
- do {
- if (aIndex >= strLen) {
- throw new Error("Expected more digits in base 64 VLQ value.");
- }
-
- digit = base64.decode(aStr.charCodeAt(aIndex++));
- if (digit === -1) {
- throw new Error("Invalid base64 digit: " + aStr.charAt(aIndex - 1));
- }
-
- continuation = !!(digit & VLQ_CONTINUATION_BIT);
- digit &= VLQ_BASE_MASK;
- result = result + (digit << shift);
- shift += VLQ_BASE_SHIFT;
- } while (continuation);
-
- aOutParam.value = fromVLQSigned(result);
- aOutParam.rest = aIndex;
-};
diff --git a/node_modules/css-tree/node_modules/source-map-js/lib/base64.js b/node_modules/css-tree/node_modules/source-map-js/lib/base64.js
deleted file mode 100644
index 8aa86b30..00000000
--- a/node_modules/css-tree/node_modules/source-map-js/lib/base64.js
+++ /dev/null
@@ -1,67 +0,0 @@
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
-var intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');
-
-/**
- * Encode an integer in the range of 0 to 63 to a single base 64 digit.
- */
-exports.encode = function (number) {
- if (0 <= number && number < intToCharMap.length) {
- return intToCharMap[number];
- }
- throw new TypeError("Must be between 0 and 63: " + number);
-};
-
-/**
- * Decode a single base 64 character code digit to an integer. Returns -1 on
- * failure.
- */
-exports.decode = function (charCode) {
- var bigA = 65; // 'A'
- var bigZ = 90; // 'Z'
-
- var littleA = 97; // 'a'
- var littleZ = 122; // 'z'
-
- var zero = 48; // '0'
- var nine = 57; // '9'
-
- var plus = 43; // '+'
- var slash = 47; // '/'
-
- var littleOffset = 26;
- var numberOffset = 52;
-
- // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ
- if (bigA <= charCode && charCode <= bigZ) {
- return (charCode - bigA);
- }
-
- // 26 - 51: abcdefghijklmnopqrstuvwxyz
- if (littleA <= charCode && charCode <= littleZ) {
- return (charCode - littleA + littleOffset);
- }
-
- // 52 - 61: 0123456789
- if (zero <= charCode && charCode <= nine) {
- return (charCode - zero + numberOffset);
- }
-
- // 62: +
- if (charCode == plus) {
- return 62;
- }
-
- // 63: /
- if (charCode == slash) {
- return 63;
- }
-
- // Invalid base64 digit.
- return -1;
-};
diff --git a/node_modules/css-tree/node_modules/source-map-js/lib/binary-search.js b/node_modules/css-tree/node_modules/source-map-js/lib/binary-search.js
deleted file mode 100644
index 010ac941..00000000
--- a/node_modules/css-tree/node_modules/source-map-js/lib/binary-search.js
+++ /dev/null
@@ -1,111 +0,0 @@
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
-exports.GREATEST_LOWER_BOUND = 1;
-exports.LEAST_UPPER_BOUND = 2;
-
-/**
- * Recursive implementation of binary search.
- *
- * @param aLow Indices here and lower do not contain the needle.
- * @param aHigh Indices here and higher do not contain the needle.
- * @param aNeedle The element being searched for.
- * @param aHaystack The non-empty array being searched.
- * @param aCompare Function which takes two elements and returns -1, 0, or 1.
- * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
- * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
- * closest element that is smaller than or greater than the one we are
- * searching for, respectively, if the exact element cannot be found.
- */
-function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {
- // This function terminates when one of the following is true:
- //
- // 1. We find the exact element we are looking for.
- //
- // 2. We did not find the exact element, but we can return the index of
- // the next-closest element.
- //
- // 3. We did not find the exact element, and there is no next-closest
- // element than the one we are searching for, so we return -1.
- var mid = Math.floor((aHigh - aLow) / 2) + aLow;
- var cmp = aCompare(aNeedle, aHaystack[mid], true);
- if (cmp === 0) {
- // Found the element we are looking for.
- return mid;
- }
- else if (cmp > 0) {
- // Our needle is greater than aHaystack[mid].
- if (aHigh - mid > 1) {
- // The element is in the upper half.
- return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);
- }
-
- // The exact needle element was not found in this haystack. Determine if
- // we are in termination case (3) or (2) and return the appropriate thing.
- if (aBias == exports.LEAST_UPPER_BOUND) {
- return aHigh < aHaystack.length ? aHigh : -1;
- } else {
- return mid;
- }
- }
- else {
- // Our needle is less than aHaystack[mid].
- if (mid - aLow > 1) {
- // The element is in the lower half.
- return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);
- }
-
- // we are in termination case (3) or (2) and return the appropriate thing.
- if (aBias == exports.LEAST_UPPER_BOUND) {
- return mid;
- } else {
- return aLow < 0 ? -1 : aLow;
- }
- }
-}
-
-/**
- * This is an implementation of binary search which will always try and return
- * the index of the closest element if there is no exact hit. This is because
- * mappings between original and generated line/col pairs are single points,
- * and there is an implicit region between each of them, so a miss just means
- * that you aren't on the very start of a region.
- *
- * @param aNeedle The element you are looking for.
- * @param aHaystack The array that is being searched.
- * @param aCompare A function which takes the needle and an element in the
- * array and returns -1, 0, or 1 depending on whether the needle is less
- * than, equal to, or greater than the element, respectively.
- * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
- * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
- * closest element that is smaller than or greater than the one we are
- * searching for, respectively, if the exact element cannot be found.
- * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.
- */
-exports.search = function search(aNeedle, aHaystack, aCompare, aBias) {
- if (aHaystack.length === 0) {
- return -1;
- }
-
- var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,
- aCompare, aBias || exports.GREATEST_LOWER_BOUND);
- if (index < 0) {
- return -1;
- }
-
- // We have found either the exact element, or the next-closest element than
- // the one we are searching for. However, there may be more than one such
- // element. Make sure we always return the smallest of these.
- while (index - 1 >= 0) {
- if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {
- break;
- }
- --index;
- }
-
- return index;
-};
diff --git a/node_modules/css-tree/node_modules/source-map-js/lib/mapping-list.js b/node_modules/css-tree/node_modules/source-map-js/lib/mapping-list.js
deleted file mode 100644
index 06d1274a..00000000
--- a/node_modules/css-tree/node_modules/source-map-js/lib/mapping-list.js
+++ /dev/null
@@ -1,79 +0,0 @@
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2014 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
-var util = require('./util');
-
-/**
- * Determine whether mappingB is after mappingA with respect to generated
- * position.
- */
-function generatedPositionAfter(mappingA, mappingB) {
- // Optimized for most common case
- var lineA = mappingA.generatedLine;
- var lineB = mappingB.generatedLine;
- var columnA = mappingA.generatedColumn;
- var columnB = mappingB.generatedColumn;
- return lineB > lineA || lineB == lineA && columnB >= columnA ||
- util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;
-}
-
-/**
- * A data structure to provide a sorted view of accumulated mappings in a
- * performance conscious manner. It trades a neglibable overhead in general
- * case for a large speedup in case of mappings being added in order.
- */
-function MappingList() {
- this._array = [];
- this._sorted = true;
- // Serves as infimum
- this._last = {generatedLine: -1, generatedColumn: 0};
-}
-
-/**
- * Iterate through internal items. This method takes the same arguments that
- * `Array.prototype.forEach` takes.
- *
- * NOTE: The order of the mappings is NOT guaranteed.
- */
-MappingList.prototype.unsortedForEach =
- function MappingList_forEach(aCallback, aThisArg) {
- this._array.forEach(aCallback, aThisArg);
- };
-
-/**
- * Add the given source mapping.
- *
- * @param Object aMapping
- */
-MappingList.prototype.add = function MappingList_add(aMapping) {
- if (generatedPositionAfter(this._last, aMapping)) {
- this._last = aMapping;
- this._array.push(aMapping);
- } else {
- this._sorted = false;
- this._array.push(aMapping);
- }
-};
-
-/**
- * Returns the flat, sorted array of mappings. The mappings are sorted by
- * generated position.
- *
- * WARNING: This method returns internal data without copying, for
- * performance. The return value must NOT be mutated, and should be treated as
- * an immutable borrow. If you want to take ownership, you must make your own
- * copy.
- */
-MappingList.prototype.toArray = function MappingList_toArray() {
- if (!this._sorted) {
- this._array.sort(util.compareByGeneratedPositionsInflated);
- this._sorted = true;
- }
- return this._array;
-};
-
-exports.MappingList = MappingList;
diff --git a/node_modules/css-tree/node_modules/source-map-js/lib/quick-sort.js b/node_modules/css-tree/node_modules/source-map-js/lib/quick-sort.js
deleted file mode 100644
index 23f9eda5..00000000
--- a/node_modules/css-tree/node_modules/source-map-js/lib/quick-sort.js
+++ /dev/null
@@ -1,132 +0,0 @@
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
-// It turns out that some (most?) JavaScript engines don't self-host
-// `Array.prototype.sort`. This makes sense because C++ will likely remain
-// faster than JS when doing raw CPU-intensive sorting. However, when using a
-// custom comparator function, calling back and forth between the VM's C++ and
-// JIT'd JS is rather slow *and* loses JIT type information, resulting in
-// worse generated code for the comparator function than would be optimal. In
-// fact, when sorting with a comparator, these costs outweigh the benefits of
-// sorting in C++. By using our own JS-implemented Quick Sort (below), we get
-// a ~3500ms mean speed-up in `bench/bench.html`.
-
-function SortTemplate(comparator) {
-
-/**
- * Swap the elements indexed by `x` and `y` in the array `ary`.
- *
- * @param {Array} ary
- * The array.
- * @param {Number} x
- * The index of the first item.
- * @param {Number} y
- * The index of the second item.
- */
-function swap(ary, x, y) {
- var temp = ary[x];
- ary[x] = ary[y];
- ary[y] = temp;
-}
-
-/**
- * Returns a random integer within the range `low .. high` inclusive.
- *
- * @param {Number} low
- * The lower bound on the range.
- * @param {Number} high
- * The upper bound on the range.
- */
-function randomIntInRange(low, high) {
- return Math.round(low + (Math.random() * (high - low)));
-}
-
-/**
- * The Quick Sort algorithm.
- *
- * @param {Array} ary
- * An array to sort.
- * @param {function} comparator
- * Function to use to compare two items.
- * @param {Number} p
- * Start index of the array
- * @param {Number} r
- * End index of the array
- */
-function doQuickSort(ary, comparator, p, r) {
- // If our lower bound is less than our upper bound, we (1) partition the
- // array into two pieces and (2) recurse on each half. If it is not, this is
- // the empty array and our base case.
-
- if (p < r) {
- // (1) Partitioning.
- //
- // The partitioning chooses a pivot between `p` and `r` and moves all
- // elements that are less than or equal to the pivot to the before it, and
- // all the elements that are greater than it after it. The effect is that
- // once partition is done, the pivot is in the exact place it will be when
- // the array is put in sorted order, and it will not need to be moved
- // again. This runs in O(n) time.
-
- // Always choose a random pivot so that an input array which is reverse
- // sorted does not cause O(n^2) running time.
- var pivotIndex = randomIntInRange(p, r);
- var i = p - 1;
-
- swap(ary, pivotIndex, r);
- var pivot = ary[r];
-
- // Immediately after `j` is incremented in this loop, the following hold
- // true:
- //
- // * Every element in `ary[p .. i]` is less than or equal to the pivot.
- //
- // * Every element in `ary[i+1 .. j-1]` is greater than the pivot.
- for (var j = p; j < r; j++) {
- if (comparator(ary[j], pivot, false) <= 0) {
- i += 1;
- swap(ary, i, j);
- }
- }
-
- swap(ary, i + 1, j);
- var q = i + 1;
-
- // (2) Recurse on each half.
-
- doQuickSort(ary, comparator, p, q - 1);
- doQuickSort(ary, comparator, q + 1, r);
- }
-}
-
- return doQuickSort;
-}
-
-function cloneSort(comparator) {
- let template = SortTemplate.toString();
- let templateFn = new Function(`return ${template}`)();
- return templateFn(comparator);
-}
-
-/**
- * Sort the given array in-place with the given comparator function.
- *
- * @param {Array} ary
- * An array to sort.
- * @param {function} comparator
- * Function to use to compare two items.
- */
-
-let sortCache = new WeakMap();
-exports.quickSort = function (ary, comparator, start = 0) {
- let doQuickSort = sortCache.get(comparator);
- if (doQuickSort === void 0) {
- doQuickSort = cloneSort(comparator);
- sortCache.set(comparator, doQuickSort);
- }
- doQuickSort(ary, comparator, start, ary.length - 1);
-};
diff --git a/node_modules/css-tree/node_modules/source-map-js/lib/source-map-consumer.js b/node_modules/css-tree/node_modules/source-map-js/lib/source-map-consumer.js
deleted file mode 100644
index db0a5324..00000000
--- a/node_modules/css-tree/node_modules/source-map-js/lib/source-map-consumer.js
+++ /dev/null
@@ -1,1184 +0,0 @@
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
-var util = require('./util');
-var binarySearch = require('./binary-search');
-var ArraySet = require('./array-set').ArraySet;
-var base64VLQ = require('./base64-vlq');
-var quickSort = require('./quick-sort').quickSort;
-
-function SourceMapConsumer(aSourceMap, aSourceMapURL) {
- var sourceMap = aSourceMap;
- if (typeof aSourceMap === 'string') {
- sourceMap = util.parseSourceMapInput(aSourceMap);
- }
-
- return sourceMap.sections != null
- ? new IndexedSourceMapConsumer(sourceMap, aSourceMapURL)
- : new BasicSourceMapConsumer(sourceMap, aSourceMapURL);
-}
-
-SourceMapConsumer.fromSourceMap = function(aSourceMap, aSourceMapURL) {
- return BasicSourceMapConsumer.fromSourceMap(aSourceMap, aSourceMapURL);
-}
-
-/**
- * The version of the source mapping spec that we are consuming.
- */
-SourceMapConsumer.prototype._version = 3;
-
-// `__generatedMappings` and `__originalMappings` are arrays that hold the
-// parsed mapping coordinates from the source map's "mappings" attribute. They
-// are lazily instantiated, accessed via the `_generatedMappings` and
-// `_originalMappings` getters respectively, and we only parse the mappings
-// and create these arrays once queried for a source location. We jump through
-// these hoops because there can be many thousands of mappings, and parsing
-// them is expensive, so we only want to do it if we must.
-//
-// Each object in the arrays is of the form:
-//
-// {
-// generatedLine: The line number in the generated code,
-// generatedColumn: The column number in the generated code,
-// source: The path to the original source file that generated this
-// chunk of code,
-// originalLine: The line number in the original source that
-// corresponds to this chunk of generated code,
-// originalColumn: The column number in the original source that
-// corresponds to this chunk of generated code,
-// name: The name of the original symbol which generated this chunk of
-// code.
-// }
-//
-// All properties except for `generatedLine` and `generatedColumn` can be
-// `null`.
-//
-// `_generatedMappings` is ordered by the generated positions.
-//
-// `_originalMappings` is ordered by the original positions.
-
-SourceMapConsumer.prototype.__generatedMappings = null;
-Object.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {
- configurable: true,
- enumerable: true,
- get: function () {
- if (!this.__generatedMappings) {
- this._parseMappings(this._mappings, this.sourceRoot);
- }
-
- return this.__generatedMappings;
- }
-});
-
-SourceMapConsumer.prototype.__originalMappings = null;
-Object.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {
- configurable: true,
- enumerable: true,
- get: function () {
- if (!this.__originalMappings) {
- this._parseMappings(this._mappings, this.sourceRoot);
- }
-
- return this.__originalMappings;
- }
-});
-
-SourceMapConsumer.prototype._charIsMappingSeparator =
- function SourceMapConsumer_charIsMappingSeparator(aStr, index) {
- var c = aStr.charAt(index);
- return c === ";" || c === ",";
- };
-
-/**
- * Parse the mappings in a string in to a data structure which we can easily
- * query (the ordered arrays in the `this.__generatedMappings` and
- * `this.__originalMappings` properties).
- */
-SourceMapConsumer.prototype._parseMappings =
- function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
- throw new Error("Subclasses must implement _parseMappings");
- };
-
-SourceMapConsumer.GENERATED_ORDER = 1;
-SourceMapConsumer.ORIGINAL_ORDER = 2;
-
-SourceMapConsumer.GREATEST_LOWER_BOUND = 1;
-SourceMapConsumer.LEAST_UPPER_BOUND = 2;
-
-/**
- * Iterate over each mapping between an original source/line/column and a
- * generated line/column in this source map.
- *
- * @param Function aCallback
- * The function that is called with each mapping.
- * @param Object aContext
- * Optional. If specified, this object will be the value of `this` every
- * time that `aCallback` is called.
- * @param aOrder
- * Either `SourceMapConsumer.GENERATED_ORDER` or
- * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to
- * iterate over the mappings sorted by the generated file's line/column
- * order or the original's source/line/column order, respectively. Defaults to
- * `SourceMapConsumer.GENERATED_ORDER`.
- */
-SourceMapConsumer.prototype.eachMapping =
- function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {
- var context = aContext || null;
- var order = aOrder || SourceMapConsumer.GENERATED_ORDER;
-
- var mappings;
- switch (order) {
- case SourceMapConsumer.GENERATED_ORDER:
- mappings = this._generatedMappings;
- break;
- case SourceMapConsumer.ORIGINAL_ORDER:
- mappings = this._originalMappings;
- break;
- default:
- throw new Error("Unknown order of iteration.");
- }
-
- var sourceRoot = this.sourceRoot;
- var boundCallback = aCallback.bind(context);
- var names = this._names;
- var sources = this._sources;
- var sourceMapURL = this._sourceMapURL;
-
- for (var i = 0, n = mappings.length; i < n; i++) {
- var mapping = mappings[i];
- var source = mapping.source === null ? null : sources.at(mapping.source);
- source = util.computeSourceURL(sourceRoot, source, sourceMapURL);
- boundCallback({
- source: source,
- generatedLine: mapping.generatedLine,
- generatedColumn: mapping.generatedColumn,
- originalLine: mapping.originalLine,
- originalColumn: mapping.originalColumn,
- name: mapping.name === null ? null : names.at(mapping.name)
- });
- }
- };
-
-/**
- * Returns all generated line and column information for the original source,
- * line, and column provided. If no column is provided, returns all mappings
- * corresponding to a either the line we are searching for or the next
- * closest line that has any mappings. Otherwise, returns all mappings
- * corresponding to the given line and either the column we are searching for
- * or the next closest column that has any offsets.
- *
- * The only argument is an object with the following properties:
- *
- * - source: The filename of the original source.
- * - line: The line number in the original source. The line number is 1-based.
- * - column: Optional. the column number in the original source.
- * The column number is 0-based.
- *
- * and an array of objects is returned, each with the following properties:
- *
- * - line: The line number in the generated source, or null. The
- * line number is 1-based.
- * - column: The column number in the generated source, or null.
- * The column number is 0-based.
- */
-SourceMapConsumer.prototype.allGeneratedPositionsFor =
- function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {
- var line = util.getArg(aArgs, 'line');
-
- // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping
- // returns the index of the closest mapping less than the needle. By
- // setting needle.originalColumn to 0, we thus find the last mapping for
- // the given line, provided such a mapping exists.
- var needle = {
- source: util.getArg(aArgs, 'source'),
- originalLine: line,
- originalColumn: util.getArg(aArgs, 'column', 0)
- };
-
- needle.source = this._findSourceIndex(needle.source);
- if (needle.source < 0) {
- return [];
- }
-
- var mappings = [];
-
- var index = this._findMapping(needle,
- this._originalMappings,
- "originalLine",
- "originalColumn",
- util.compareByOriginalPositions,
- binarySearch.LEAST_UPPER_BOUND);
- if (index >= 0) {
- var mapping = this._originalMappings[index];
-
- if (aArgs.column === undefined) {
- var originalLine = mapping.originalLine;
-
- // Iterate until either we run out of mappings, or we run into
- // a mapping for a different line than the one we found. Since
- // mappings are sorted, this is guaranteed to find all mappings for
- // the line we found.
- while (mapping && mapping.originalLine === originalLine) {
- mappings.push({
- line: util.getArg(mapping, 'generatedLine', null),
- column: util.getArg(mapping, 'generatedColumn', null),
- lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
- });
-
- mapping = this._originalMappings[++index];
- }
- } else {
- var originalColumn = mapping.originalColumn;
-
- // Iterate until either we run out of mappings, or we run into
- // a mapping for a different line than the one we were searching for.
- // Since mappings are sorted, this is guaranteed to find all mappings for
- // the line we are searching for.
- while (mapping &&
- mapping.originalLine === line &&
- mapping.originalColumn == originalColumn) {
- mappings.push({
- line: util.getArg(mapping, 'generatedLine', null),
- column: util.getArg(mapping, 'generatedColumn', null),
- lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
- });
-
- mapping = this._originalMappings[++index];
- }
- }
- }
-
- return mappings;
- };
-
-exports.SourceMapConsumer = SourceMapConsumer;
-
-/**
- * A BasicSourceMapConsumer instance represents a parsed source map which we can
- * query for information about the original file positions by giving it a file
- * position in the generated source.
- *
- * The first parameter is the raw source map (either as a JSON string, or
- * already parsed to an object). According to the spec, source maps have the
- * following attributes:
- *
- * - version: Which version of the source map spec this map is following.
- * - sources: An array of URLs to the original source files.
- * - names: An array of identifiers which can be referrenced by individual mappings.
- * - sourceRoot: Optional. The URL root from which all sources are relative.
- * - sourcesContent: Optional. An array of contents of the original source files.
- * - mappings: A string of base64 VLQs which contain the actual mappings.
- * - file: Optional. The generated file this source map is associated with.
- *
- * Here is an example source map, taken from the source map spec[0]:
- *
- * {
- * version : 3,
- * file: "out.js",
- * sourceRoot : "",
- * sources: ["foo.js", "bar.js"],
- * names: ["src", "maps", "are", "fun"],
- * mappings: "AA,AB;;ABCDE;"
- * }
- *
- * The second parameter, if given, is a string whose value is the URL
- * at which the source map was found. This URL is used to compute the
- * sources array.
- *
- * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#
- */
-function BasicSourceMapConsumer(aSourceMap, aSourceMapURL) {
- var sourceMap = aSourceMap;
- if (typeof aSourceMap === 'string') {
- sourceMap = util.parseSourceMapInput(aSourceMap);
- }
-
- var version = util.getArg(sourceMap, 'version');
- var sources = util.getArg(sourceMap, 'sources');
- // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which
- // requires the array) to play nice here.
- var names = util.getArg(sourceMap, 'names', []);
- var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);
- var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);
- var mappings = util.getArg(sourceMap, 'mappings');
- var file = util.getArg(sourceMap, 'file', null);
-
- // Once again, Sass deviates from the spec and supplies the version as a
- // string rather than a number, so we use loose equality checking here.
- if (version != this._version) {
- throw new Error('Unsupported version: ' + version);
- }
-
- if (sourceRoot) {
- sourceRoot = util.normalize(sourceRoot);
- }
-
- sources = sources
- .map(String)
- // Some source maps produce relative source paths like "./foo.js" instead of
- // "foo.js". Normalize these first so that future comparisons will succeed.
- // See bugzil.la/1090768.
- .map(util.normalize)
- // Always ensure that absolute sources are internally stored relative to
- // the source root, if the source root is absolute. Not doing this would
- // be particularly problematic when the source root is a prefix of the
- // source (valid, but why??). See github issue #199 and bugzil.la/1188982.
- .map(function (source) {
- return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)
- ? util.relative(sourceRoot, source)
- : source;
- });
-
- // Pass `true` below to allow duplicate names and sources. While source maps
- // are intended to be compressed and deduplicated, the TypeScript compiler
- // sometimes generates source maps with duplicates in them. See Github issue
- // #72 and bugzil.la/889492.
- this._names = ArraySet.fromArray(names.map(String), true);
- this._sources = ArraySet.fromArray(sources, true);
-
- this._absoluteSources = this._sources.toArray().map(function (s) {
- return util.computeSourceURL(sourceRoot, s, aSourceMapURL);
- });
-
- this.sourceRoot = sourceRoot;
- this.sourcesContent = sourcesContent;
- this._mappings = mappings;
- this._sourceMapURL = aSourceMapURL;
- this.file = file;
-}
-
-BasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);
-BasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;
-
-/**
- * Utility function to find the index of a source. Returns -1 if not
- * found.
- */
-BasicSourceMapConsumer.prototype._findSourceIndex = function(aSource) {
- var relativeSource = aSource;
- if (this.sourceRoot != null) {
- relativeSource = util.relative(this.sourceRoot, relativeSource);
- }
-
- if (this._sources.has(relativeSource)) {
- return this._sources.indexOf(relativeSource);
- }
-
- // Maybe aSource is an absolute URL as returned by |sources|. In
- // this case we can't simply undo the transform.
- var i;
- for (i = 0; i < this._absoluteSources.length; ++i) {
- if (this._absoluteSources[i] == aSource) {
- return i;
- }
- }
-
- return -1;
-};
-
-/**
- * Create a BasicSourceMapConsumer from a SourceMapGenerator.
- *
- * @param SourceMapGenerator aSourceMap
- * The source map that will be consumed.
- * @param String aSourceMapURL
- * The URL at which the source map can be found (optional)
- * @returns BasicSourceMapConsumer
- */
-BasicSourceMapConsumer.fromSourceMap =
- function SourceMapConsumer_fromSourceMap(aSourceMap, aSourceMapURL) {
- var smc = Object.create(BasicSourceMapConsumer.prototype);
-
- var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);
- var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);
- smc.sourceRoot = aSourceMap._sourceRoot;
- smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),
- smc.sourceRoot);
- smc.file = aSourceMap._file;
- smc._sourceMapURL = aSourceMapURL;
- smc._absoluteSources = smc._sources.toArray().map(function (s) {
- return util.computeSourceURL(smc.sourceRoot, s, aSourceMapURL);
- });
-
- // Because we are modifying the entries (by converting string sources and
- // names to indices into the sources and names ArraySets), we have to make
- // a copy of the entry or else bad things happen. Shared mutable state
- // strikes again! See github issue #191.
-
- var generatedMappings = aSourceMap._mappings.toArray().slice();
- var destGeneratedMappings = smc.__generatedMappings = [];
- var destOriginalMappings = smc.__originalMappings = [];
-
- for (var i = 0, length = generatedMappings.length; i < length; i++) {
- var srcMapping = generatedMappings[i];
- var destMapping = new Mapping;
- destMapping.generatedLine = srcMapping.generatedLine;
- destMapping.generatedColumn = srcMapping.generatedColumn;
-
- if (srcMapping.source) {
- destMapping.source = sources.indexOf(srcMapping.source);
- destMapping.originalLine = srcMapping.originalLine;
- destMapping.originalColumn = srcMapping.originalColumn;
-
- if (srcMapping.name) {
- destMapping.name = names.indexOf(srcMapping.name);
- }
-
- destOriginalMappings.push(destMapping);
- }
-
- destGeneratedMappings.push(destMapping);
- }
-
- quickSort(smc.__originalMappings, util.compareByOriginalPositions);
-
- return smc;
- };
-
-/**
- * The version of the source mapping spec that we are consuming.
- */
-BasicSourceMapConsumer.prototype._version = 3;
-
-/**
- * The list of original sources.
- */
-Object.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {
- get: function () {
- return this._absoluteSources.slice();
- }
-});
-
-/**
- * Provide the JIT with a nice shape / hidden class.
- */
-function Mapping() {
- this.generatedLine = 0;
- this.generatedColumn = 0;
- this.source = null;
- this.originalLine = null;
- this.originalColumn = null;
- this.name = null;
-}
-
-/**
- * Parse the mappings in a string in to a data structure which we can easily
- * query (the ordered arrays in the `this.__generatedMappings` and
- * `this.__originalMappings` properties).
- */
-
-const compareGenerated = util.compareByGeneratedPositionsDeflatedNoLine;
-function sortGenerated(array, start) {
- let l = array.length;
- let n = array.length - start;
- if (n <= 1) {
- return;
- } else if (n == 2) {
- let a = array[start];
- let b = array[start + 1];
- if (compareGenerated(a, b) > 0) {
- array[start] = b;
- array[start + 1] = a;
- }
- } else if (n < 20) {
- for (let i = start; i < l; i++) {
- for (let j = i; j > start; j--) {
- let a = array[j - 1];
- let b = array[j];
- if (compareGenerated(a, b) <= 0) {
- break;
- }
- array[j - 1] = b;
- array[j] = a;
- }
- }
- } else {
- quickSort(array, compareGenerated, start);
- }
-}
-BasicSourceMapConsumer.prototype._parseMappings =
- function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
- var generatedLine = 1;
- var previousGeneratedColumn = 0;
- var previousOriginalLine = 0;
- var previousOriginalColumn = 0;
- var previousSource = 0;
- var previousName = 0;
- var length = aStr.length;
- var index = 0;
- var cachedSegments = {};
- var temp = {};
- var originalMappings = [];
- var generatedMappings = [];
- var mapping, str, segment, end, value;
-
- let subarrayStart = 0;
- while (index < length) {
- if (aStr.charAt(index) === ';') {
- generatedLine++;
- index++;
- previousGeneratedColumn = 0;
-
- sortGenerated(generatedMappings, subarrayStart);
- subarrayStart = generatedMappings.length;
- }
- else if (aStr.charAt(index) === ',') {
- index++;
- }
- else {
- mapping = new Mapping();
- mapping.generatedLine = generatedLine;
-
- for (end = index; end < length; end++) {
- if (this._charIsMappingSeparator(aStr, end)) {
- break;
- }
- }
- str = aStr.slice(index, end);
-
- segment = [];
- while (index < end) {
- base64VLQ.decode(aStr, index, temp);
- value = temp.value;
- index = temp.rest;
- segment.push(value);
- }
-
- if (segment.length === 2) {
- throw new Error('Found a source, but no line and column');
- }
-
- if (segment.length === 3) {
- throw new Error('Found a source and line, but no column');
- }
-
- // Generated column.
- mapping.generatedColumn = previousGeneratedColumn + segment[0];
- previousGeneratedColumn = mapping.generatedColumn;
-
- if (segment.length > 1) {
- // Original source.
- mapping.source = previousSource + segment[1];
- previousSource += segment[1];
-
- // Original line.
- mapping.originalLine = previousOriginalLine + segment[2];
- previousOriginalLine = mapping.originalLine;
- // Lines are stored 0-based
- mapping.originalLine += 1;
-
- // Original column.
- mapping.originalColumn = previousOriginalColumn + segment[3];
- previousOriginalColumn = mapping.originalColumn;
-
- if (segment.length > 4) {
- // Original name.
- mapping.name = previousName + segment[4];
- previousName += segment[4];
- }
- }
-
- generatedMappings.push(mapping);
- if (typeof mapping.originalLine === 'number') {
- let currentSource = mapping.source;
- while (originalMappings.length <= currentSource) {
- originalMappings.push(null);
- }
- if (originalMappings[currentSource] === null) {
- originalMappings[currentSource] = [];
- }
- originalMappings[currentSource].push(mapping);
- }
- }
- }
-
- sortGenerated(generatedMappings, subarrayStart);
- this.__generatedMappings = generatedMappings;
-
- for (var i = 0; i < originalMappings.length; i++) {
- if (originalMappings[i] != null) {
- quickSort(originalMappings[i], util.compareByOriginalPositionsNoSource);
- }
- }
- this.__originalMappings = [].concat(...originalMappings);
- };
-
-/**
- * Find the mapping that best matches the hypothetical "needle" mapping that
- * we are searching for in the given "haystack" of mappings.
- */
-BasicSourceMapConsumer.prototype._findMapping =
- function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,
- aColumnName, aComparator, aBias) {
- // To return the position we are searching for, we must first find the
- // mapping for the given position and then return the opposite position it
- // points to. Because the mappings are sorted, we can use binary search to
- // find the best mapping.
-
- if (aNeedle[aLineName] <= 0) {
- throw new TypeError('Line must be greater than or equal to 1, got '
- + aNeedle[aLineName]);
- }
- if (aNeedle[aColumnName] < 0) {
- throw new TypeError('Column must be greater than or equal to 0, got '
- + aNeedle[aColumnName]);
- }
-
- return binarySearch.search(aNeedle, aMappings, aComparator, aBias);
- };
-
-/**
- * Compute the last column for each generated mapping. The last column is
- * inclusive.
- */
-BasicSourceMapConsumer.prototype.computeColumnSpans =
- function SourceMapConsumer_computeColumnSpans() {
- for (var index = 0; index < this._generatedMappings.length; ++index) {
- var mapping = this._generatedMappings[index];
-
- // Mappings do not contain a field for the last generated columnt. We
- // can come up with an optimistic estimate, however, by assuming that
- // mappings are contiguous (i.e. given two consecutive mappings, the
- // first mapping ends where the second one starts).
- if (index + 1 < this._generatedMappings.length) {
- var nextMapping = this._generatedMappings[index + 1];
-
- if (mapping.generatedLine === nextMapping.generatedLine) {
- mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;
- continue;
- }
- }
-
- // The last mapping for each line spans the entire line.
- mapping.lastGeneratedColumn = Infinity;
- }
- };
-
-/**
- * Returns the original source, line, and column information for the generated
- * source's line and column positions provided. The only argument is an object
- * with the following properties:
- *
- * - line: The line number in the generated source. The line number
- * is 1-based.
- * - column: The column number in the generated source. The column
- * number is 0-based.
- * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or
- * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the
- * closest element that is smaller than or greater than the one we are
- * searching for, respectively, if the exact element cannot be found.
- * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.
- *
- * and an object is returned with the following properties:
- *
- * - source: The original source file, or null.
- * - line: The line number in the original source, or null. The
- * line number is 1-based.
- * - column: The column number in the original source, or null. The
- * column number is 0-based.
- * - name: The original identifier, or null.
- */
-BasicSourceMapConsumer.prototype.originalPositionFor =
- function SourceMapConsumer_originalPositionFor(aArgs) {
- var needle = {
- generatedLine: util.getArg(aArgs, 'line'),
- generatedColumn: util.getArg(aArgs, 'column')
- };
-
- var index = this._findMapping(
- needle,
- this._generatedMappings,
- "generatedLine",
- "generatedColumn",
- util.compareByGeneratedPositionsDeflated,
- util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)
- );
-
- if (index >= 0) {
- var mapping = this._generatedMappings[index];
-
- if (mapping.generatedLine === needle.generatedLine) {
- var source = util.getArg(mapping, 'source', null);
- if (source !== null) {
- source = this._sources.at(source);
- source = util.computeSourceURL(this.sourceRoot, source, this._sourceMapURL);
- }
- var name = util.getArg(mapping, 'name', null);
- if (name !== null) {
- name = this._names.at(name);
- }
- return {
- source: source,
- line: util.getArg(mapping, 'originalLine', null),
- column: util.getArg(mapping, 'originalColumn', null),
- name: name
- };
- }
- }
-
- return {
- source: null,
- line: null,
- column: null,
- name: null
- };
- };
-
-/**
- * Return true if we have the source content for every source in the source
- * map, false otherwise.
- */
-BasicSourceMapConsumer.prototype.hasContentsOfAllSources =
- function BasicSourceMapConsumer_hasContentsOfAllSources() {
- if (!this.sourcesContent) {
- return false;
- }
- return this.sourcesContent.length >= this._sources.size() &&
- !this.sourcesContent.some(function (sc) { return sc == null; });
- };
-
-/**
- * Returns the original source content. The only argument is the url of the
- * original source file. Returns null if no original source content is
- * available.
- */
-BasicSourceMapConsumer.prototype.sourceContentFor =
- function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
- if (!this.sourcesContent) {
- return null;
- }
-
- var index = this._findSourceIndex(aSource);
- if (index >= 0) {
- return this.sourcesContent[index];
- }
-
- var relativeSource = aSource;
- if (this.sourceRoot != null) {
- relativeSource = util.relative(this.sourceRoot, relativeSource);
- }
-
- var url;
- if (this.sourceRoot != null
- && (url = util.urlParse(this.sourceRoot))) {
- // XXX: file:// URIs and absolute paths lead to unexpected behavior for
- // many users. We can help them out when they expect file:// URIs to
- // behave like it would if they were running a local HTTP server. See
- // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.
- var fileUriAbsPath = relativeSource.replace(/^file:\/\//, "");
- if (url.scheme == "file"
- && this._sources.has(fileUriAbsPath)) {
- return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]
- }
-
- if ((!url.path || url.path == "/")
- && this._sources.has("/" + relativeSource)) {
- return this.sourcesContent[this._sources.indexOf("/" + relativeSource)];
- }
- }
-
- // This function is used recursively from
- // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we
- // don't want to throw if we can't find the source - we just want to
- // return null, so we provide a flag to exit gracefully.
- if (nullOnMissing) {
- return null;
- }
- else {
- throw new Error('"' + relativeSource + '" is not in the SourceMap.');
- }
- };
-
-/**
- * Returns the generated line and column information for the original source,
- * line, and column positions provided. The only argument is an object with
- * the following properties:
- *
- * - source: The filename of the original source.
- * - line: The line number in the original source. The line number
- * is 1-based.
- * - column: The column number in the original source. The column
- * number is 0-based.
- * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or
- * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the
- * closest element that is smaller than or greater than the one we are
- * searching for, respectively, if the exact element cannot be found.
- * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.
- *
- * and an object is returned with the following properties:
- *
- * - line: The line number in the generated source, or null. The
- * line number is 1-based.
- * - column: The column number in the generated source, or null.
- * The column number is 0-based.
- */
-BasicSourceMapConsumer.prototype.generatedPositionFor =
- function SourceMapConsumer_generatedPositionFor(aArgs) {
- var source = util.getArg(aArgs, 'source');
- source = this._findSourceIndex(source);
- if (source < 0) {
- return {
- line: null,
- column: null,
- lastColumn: null
- };
- }
-
- var needle = {
- source: source,
- originalLine: util.getArg(aArgs, 'line'),
- originalColumn: util.getArg(aArgs, 'column')
- };
-
- var index = this._findMapping(
- needle,
- this._originalMappings,
- "originalLine",
- "originalColumn",
- util.compareByOriginalPositions,
- util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)
- );
-
- if (index >= 0) {
- var mapping = this._originalMappings[index];
-
- if (mapping.source === needle.source) {
- return {
- line: util.getArg(mapping, 'generatedLine', null),
- column: util.getArg(mapping, 'generatedColumn', null),
- lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
- };
- }
- }
-
- return {
- line: null,
- column: null,
- lastColumn: null
- };
- };
-
-exports.BasicSourceMapConsumer = BasicSourceMapConsumer;
-
-/**
- * An IndexedSourceMapConsumer instance represents a parsed source map which
- * we can query for information. It differs from BasicSourceMapConsumer in
- * that it takes "indexed" source maps (i.e. ones with a "sections" field) as
- * input.
- *
- * The first parameter is a raw source map (either as a JSON string, or already
- * parsed to an object). According to the spec for indexed source maps, they
- * have the following attributes:
- *
- * - version: Which version of the source map spec this map is following.
- * - file: Optional. The generated file this source map is associated with.
- * - sections: A list of section definitions.
- *
- * Each value under the "sections" field has two fields:
- * - offset: The offset into the original specified at which this section
- * begins to apply, defined as an object with a "line" and "column"
- * field.
- * - map: A source map definition. This source map could also be indexed,
- * but doesn't have to be.
- *
- * Instead of the "map" field, it's also possible to have a "url" field
- * specifying a URL to retrieve a source map from, but that's currently
- * unsupported.
- *
- * Here's an example source map, taken from the source map spec[0], but
- * modified to omit a section which uses the "url" field.
- *
- * {
- * version : 3,
- * file: "app.js",
- * sections: [{
- * offset: {line:100, column:10},
- * map: {
- * version : 3,
- * file: "section.js",
- * sources: ["foo.js", "bar.js"],
- * names: ["src", "maps", "are", "fun"],
- * mappings: "AAAA,E;;ABCDE;"
- * }
- * }],
- * }
- *
- * The second parameter, if given, is a string whose value is the URL
- * at which the source map was found. This URL is used to compute the
- * sources array.
- *
- * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt
- */
-function IndexedSourceMapConsumer(aSourceMap, aSourceMapURL) {
- var sourceMap = aSourceMap;
- if (typeof aSourceMap === 'string') {
- sourceMap = util.parseSourceMapInput(aSourceMap);
- }
-
- var version = util.getArg(sourceMap, 'version');
- var sections = util.getArg(sourceMap, 'sections');
-
- if (version != this._version) {
- throw new Error('Unsupported version: ' + version);
- }
-
- this._sources = new ArraySet();
- this._names = new ArraySet();
-
- var lastOffset = {
- line: -1,
- column: 0
- };
- this._sections = sections.map(function (s) {
- if (s.url) {
- // The url field will require support for asynchronicity.
- // See https://github.com/mozilla/source-map/issues/16
- throw new Error('Support for url field in sections not implemented.');
- }
- var offset = util.getArg(s, 'offset');
- var offsetLine = util.getArg(offset, 'line');
- var offsetColumn = util.getArg(offset, 'column');
-
- if (offsetLine < lastOffset.line ||
- (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {
- throw new Error('Section offsets must be ordered and non-overlapping.');
- }
- lastOffset = offset;
-
- return {
- generatedOffset: {
- // The offset fields are 0-based, but we use 1-based indices when
- // encoding/decoding from VLQ.
- generatedLine: offsetLine + 1,
- generatedColumn: offsetColumn + 1
- },
- consumer: new SourceMapConsumer(util.getArg(s, 'map'), aSourceMapURL)
- }
- });
-}
-
-IndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);
-IndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;
-
-/**
- * The version of the source mapping spec that we are consuming.
- */
-IndexedSourceMapConsumer.prototype._version = 3;
-
-/**
- * The list of original sources.
- */
-Object.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {
- get: function () {
- var sources = [];
- for (var i = 0; i < this._sections.length; i++) {
- for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {
- sources.push(this._sections[i].consumer.sources[j]);
- }
- }
- return sources;
- }
-});
-
-/**
- * Returns the original source, line, and column information for the generated
- * source's line and column positions provided. The only argument is an object
- * with the following properties:
- *
- * - line: The line number in the generated source. The line number
- * is 1-based.
- * - column: The column number in the generated source. The column
- * number is 0-based.
- *
- * and an object is returned with the following properties:
- *
- * - source: The original source file, or null.
- * - line: The line number in the original source, or null. The
- * line number is 1-based.
- * - column: The column number in the original source, or null. The
- * column number is 0-based.
- * - name: The original identifier, or null.
- */
-IndexedSourceMapConsumer.prototype.originalPositionFor =
- function IndexedSourceMapConsumer_originalPositionFor(aArgs) {
- var needle = {
- generatedLine: util.getArg(aArgs, 'line'),
- generatedColumn: util.getArg(aArgs, 'column')
- };
-
- // Find the section containing the generated position we're trying to map
- // to an original position.
- var sectionIndex = binarySearch.search(needle, this._sections,
- function(needle, section) {
- var cmp = needle.generatedLine - section.generatedOffset.generatedLine;
- if (cmp) {
- return cmp;
- }
-
- return (needle.generatedColumn -
- section.generatedOffset.generatedColumn);
- });
- var section = this._sections[sectionIndex];
-
- if (!section) {
- return {
- source: null,
- line: null,
- column: null,
- name: null
- };
- }
-
- return section.consumer.originalPositionFor({
- line: needle.generatedLine -
- (section.generatedOffset.generatedLine - 1),
- column: needle.generatedColumn -
- (section.generatedOffset.generatedLine === needle.generatedLine
- ? section.generatedOffset.generatedColumn - 1
- : 0),
- bias: aArgs.bias
- });
- };
-
-/**
- * Return true if we have the source content for every source in the source
- * map, false otherwise.
- */
-IndexedSourceMapConsumer.prototype.hasContentsOfAllSources =
- function IndexedSourceMapConsumer_hasContentsOfAllSources() {
- return this._sections.every(function (s) {
- return s.consumer.hasContentsOfAllSources();
- });
- };
-
-/**
- * Returns the original source content. The only argument is the url of the
- * original source file. Returns null if no original source content is
- * available.
- */
-IndexedSourceMapConsumer.prototype.sourceContentFor =
- function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
- for (var i = 0; i < this._sections.length; i++) {
- var section = this._sections[i];
-
- var content = section.consumer.sourceContentFor(aSource, true);
- if (content || content === '') {
- return content;
- }
- }
- if (nullOnMissing) {
- return null;
- }
- else {
- throw new Error('"' + aSource + '" is not in the SourceMap.');
- }
- };
-
-/**
- * Returns the generated line and column information for the original source,
- * line, and column positions provided. The only argument is an object with
- * the following properties:
- *
- * - source: The filename of the original source.
- * - line: The line number in the original source. The line number
- * is 1-based.
- * - column: The column number in the original source. The column
- * number is 0-based.
- *
- * and an object is returned with the following properties:
- *
- * - line: The line number in the generated source, or null. The
- * line number is 1-based.
- * - column: The column number in the generated source, or null.
- * The column number is 0-based.
- */
-IndexedSourceMapConsumer.prototype.generatedPositionFor =
- function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {
- for (var i = 0; i < this._sections.length; i++) {
- var section = this._sections[i];
-
- // Only consider this section if the requested source is in the list of
- // sources of the consumer.
- if (section.consumer._findSourceIndex(util.getArg(aArgs, 'source')) === -1) {
- continue;
- }
- var generatedPosition = section.consumer.generatedPositionFor(aArgs);
- if (generatedPosition) {
- var ret = {
- line: generatedPosition.line +
- (section.generatedOffset.generatedLine - 1),
- column: generatedPosition.column +
- (section.generatedOffset.generatedLine === generatedPosition.line
- ? section.generatedOffset.generatedColumn - 1
- : 0)
- };
- return ret;
- }
- }
-
- return {
- line: null,
- column: null
- };
- };
-
-/**
- * Parse the mappings in a string in to a data structure which we can easily
- * query (the ordered arrays in the `this.__generatedMappings` and
- * `this.__originalMappings` properties).
- */
-IndexedSourceMapConsumer.prototype._parseMappings =
- function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {
- this.__generatedMappings = [];
- this.__originalMappings = [];
- for (var i = 0; i < this._sections.length; i++) {
- var section = this._sections[i];
- var sectionMappings = section.consumer._generatedMappings;
- for (var j = 0; j < sectionMappings.length; j++) {
- var mapping = sectionMappings[j];
-
- var source = section.consumer._sources.at(mapping.source);
- source = util.computeSourceURL(section.consumer.sourceRoot, source, this._sourceMapURL);
- this._sources.add(source);
- source = this._sources.indexOf(source);
-
- var name = null;
- if (mapping.name) {
- name = section.consumer._names.at(mapping.name);
- this._names.add(name);
- name = this._names.indexOf(name);
- }
-
- // The mappings coming from the consumer for the section have
- // generated positions relative to the start of the section, so we
- // need to offset them to be relative to the start of the concatenated
- // generated file.
- var adjustedMapping = {
- source: source,
- generatedLine: mapping.generatedLine +
- (section.generatedOffset.generatedLine - 1),
- generatedColumn: mapping.generatedColumn +
- (section.generatedOffset.generatedLine === mapping.generatedLine
- ? section.generatedOffset.generatedColumn - 1
- : 0),
- originalLine: mapping.originalLine,
- originalColumn: mapping.originalColumn,
- name: name
- };
-
- this.__generatedMappings.push(adjustedMapping);
- if (typeof adjustedMapping.originalLine === 'number') {
- this.__originalMappings.push(adjustedMapping);
- }
- }
- }
-
- quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);
- quickSort(this.__originalMappings, util.compareByOriginalPositions);
- };
-
-exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;
diff --git a/node_modules/css-tree/node_modules/source-map-js/lib/source-map-generator.js b/node_modules/css-tree/node_modules/source-map-js/lib/source-map-generator.js
deleted file mode 100644
index bab04ff8..00000000
--- a/node_modules/css-tree/node_modules/source-map-js/lib/source-map-generator.js
+++ /dev/null
@@ -1,444 +0,0 @@
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
-var base64VLQ = require('./base64-vlq');
-var util = require('./util');
-var ArraySet = require('./array-set').ArraySet;
-var MappingList = require('./mapping-list').MappingList;
-
-/**
- * An instance of the SourceMapGenerator represents a source map which is
- * being built incrementally. You may pass an object with the following
- * properties:
- *
- * - file: The filename of the generated source.
- * - sourceRoot: A root for all relative URLs in this source map.
- */
-function SourceMapGenerator(aArgs) {
- if (!aArgs) {
- aArgs = {};
- }
- this._file = util.getArg(aArgs, 'file', null);
- this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);
- this._skipValidation = util.getArg(aArgs, 'skipValidation', false);
- this._ignoreInvalidMapping = util.getArg(aArgs, 'ignoreInvalidMapping', false);
- this._sources = new ArraySet();
- this._names = new ArraySet();
- this._mappings = new MappingList();
- this._sourcesContents = null;
-}
-
-SourceMapGenerator.prototype._version = 3;
-
-/**
- * Creates a new SourceMapGenerator based on a SourceMapConsumer
- *
- * @param aSourceMapConsumer The SourceMap.
- */
-SourceMapGenerator.fromSourceMap =
- function SourceMapGenerator_fromSourceMap(aSourceMapConsumer, generatorOps) {
- var sourceRoot = aSourceMapConsumer.sourceRoot;
- var generator = new SourceMapGenerator(Object.assign(generatorOps || {}, {
- file: aSourceMapConsumer.file,
- sourceRoot: sourceRoot
- }));
- aSourceMapConsumer.eachMapping(function (mapping) {
- var newMapping = {
- generated: {
- line: mapping.generatedLine,
- column: mapping.generatedColumn
- }
- };
-
- if (mapping.source != null) {
- newMapping.source = mapping.source;
- if (sourceRoot != null) {
- newMapping.source = util.relative(sourceRoot, newMapping.source);
- }
-
- newMapping.original = {
- line: mapping.originalLine,
- column: mapping.originalColumn
- };
-
- if (mapping.name != null) {
- newMapping.name = mapping.name;
- }
- }
-
- generator.addMapping(newMapping);
- });
- aSourceMapConsumer.sources.forEach(function (sourceFile) {
- var sourceRelative = sourceFile;
- if (sourceRoot !== null) {
- sourceRelative = util.relative(sourceRoot, sourceFile);
- }
-
- if (!generator._sources.has(sourceRelative)) {
- generator._sources.add(sourceRelative);
- }
-
- var content = aSourceMapConsumer.sourceContentFor(sourceFile);
- if (content != null) {
- generator.setSourceContent(sourceFile, content);
- }
- });
- return generator;
- };
-
-/**
- * Add a single mapping from original source line and column to the generated
- * source's line and column for this source map being created. The mapping
- * object should have the following properties:
- *
- * - generated: An object with the generated line and column positions.
- * - original: An object with the original line and column positions.
- * - source: The original source file (relative to the sourceRoot).
- * - name: An optional original token name for this mapping.
- */
-SourceMapGenerator.prototype.addMapping =
- function SourceMapGenerator_addMapping(aArgs) {
- var generated = util.getArg(aArgs, 'generated');
- var original = util.getArg(aArgs, 'original', null);
- var source = util.getArg(aArgs, 'source', null);
- var name = util.getArg(aArgs, 'name', null);
-
- if (!this._skipValidation) {
- if (this._validateMapping(generated, original, source, name) === false) {
- return;
- }
- }
-
- if (source != null) {
- source = String(source);
- if (!this._sources.has(source)) {
- this._sources.add(source);
- }
- }
-
- if (name != null) {
- name = String(name);
- if (!this._names.has(name)) {
- this._names.add(name);
- }
- }
-
- this._mappings.add({
- generatedLine: generated.line,
- generatedColumn: generated.column,
- originalLine: original != null && original.line,
- originalColumn: original != null && original.column,
- source: source,
- name: name
- });
- };
-
-/**
- * Set the source content for a source file.
- */
-SourceMapGenerator.prototype.setSourceContent =
- function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {
- var source = aSourceFile;
- if (this._sourceRoot != null) {
- source = util.relative(this._sourceRoot, source);
- }
-
- if (aSourceContent != null) {
- // Add the source content to the _sourcesContents map.
- // Create a new _sourcesContents map if the property is null.
- if (!this._sourcesContents) {
- this._sourcesContents = Object.create(null);
- }
- this._sourcesContents[util.toSetString(source)] = aSourceContent;
- } else if (this._sourcesContents) {
- // Remove the source file from the _sourcesContents map.
- // If the _sourcesContents map is empty, set the property to null.
- delete this._sourcesContents[util.toSetString(source)];
- if (Object.keys(this._sourcesContents).length === 0) {
- this._sourcesContents = null;
- }
- }
- };
-
-/**
- * Applies the mappings of a sub-source-map for a specific source file to the
- * source map being generated. Each mapping to the supplied source file is
- * rewritten using the supplied source map. Note: The resolution for the
- * resulting mappings is the minimium of this map and the supplied map.
- *
- * @param aSourceMapConsumer The source map to be applied.
- * @param aSourceFile Optional. The filename of the source file.
- * If omitted, SourceMapConsumer's file property will be used.
- * @param aSourceMapPath Optional. The dirname of the path to the source map
- * to be applied. If relative, it is relative to the SourceMapConsumer.
- * This parameter is needed when the two source maps aren't in the same
- * directory, and the source map to be applied contains relative source
- * paths. If so, those relative source paths need to be rewritten
- * relative to the SourceMapGenerator.
- */
-SourceMapGenerator.prototype.applySourceMap =
- function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {
- var sourceFile = aSourceFile;
- // If aSourceFile is omitted, we will use the file property of the SourceMap
- if (aSourceFile == null) {
- if (aSourceMapConsumer.file == null) {
- throw new Error(
- 'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +
- 'or the source map\'s "file" property. Both were omitted.'
- );
- }
- sourceFile = aSourceMapConsumer.file;
- }
- var sourceRoot = this._sourceRoot;
- // Make "sourceFile" relative if an absolute Url is passed.
- if (sourceRoot != null) {
- sourceFile = util.relative(sourceRoot, sourceFile);
- }
- // Applying the SourceMap can add and remove items from the sources and
- // the names array.
- var newSources = new ArraySet();
- var newNames = new ArraySet();
-
- // Find mappings for the "sourceFile"
- this._mappings.unsortedForEach(function (mapping) {
- if (mapping.source === sourceFile && mapping.originalLine != null) {
- // Check if it can be mapped by the source map, then update the mapping.
- var original = aSourceMapConsumer.originalPositionFor({
- line: mapping.originalLine,
- column: mapping.originalColumn
- });
- if (original.source != null) {
- // Copy mapping
- mapping.source = original.source;
- if (aSourceMapPath != null) {
- mapping.source = util.join(aSourceMapPath, mapping.source)
- }
- if (sourceRoot != null) {
- mapping.source = util.relative(sourceRoot, mapping.source);
- }
- mapping.originalLine = original.line;
- mapping.originalColumn = original.column;
- if (original.name != null) {
- mapping.name = original.name;
- }
- }
- }
-
- var source = mapping.source;
- if (source != null && !newSources.has(source)) {
- newSources.add(source);
- }
-
- var name = mapping.name;
- if (name != null && !newNames.has(name)) {
- newNames.add(name);
- }
-
- }, this);
- this._sources = newSources;
- this._names = newNames;
-
- // Copy sourcesContents of applied map.
- aSourceMapConsumer.sources.forEach(function (sourceFile) {
- var content = aSourceMapConsumer.sourceContentFor(sourceFile);
- if (content != null) {
- if (aSourceMapPath != null) {
- sourceFile = util.join(aSourceMapPath, sourceFile);
- }
- if (sourceRoot != null) {
- sourceFile = util.relative(sourceRoot, sourceFile);
- }
- this.setSourceContent(sourceFile, content);
- }
- }, this);
- };
-
-/**
- * A mapping can have one of the three levels of data:
- *
- * 1. Just the generated position.
- * 2. The Generated position, original position, and original source.
- * 3. Generated and original position, original source, as well as a name
- * token.
- *
- * To maintain consistency, we validate that any new mapping being added falls
- * in to one of these categories.
- */
-SourceMapGenerator.prototype._validateMapping =
- function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,
- aName) {
- // When aOriginal is truthy but has empty values for .line and .column,
- // it is most likely a programmer error. In this case we throw a very
- // specific error message to try to guide them the right way.
- // For example: https://github.com/Polymer/polymer-bundler/pull/519
- if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') {
- var message = 'original.line and original.column are not numbers -- you probably meant to omit ' +
- 'the original mapping entirely and only map the generated position. If so, pass ' +
- 'null for the original mapping instead of an object with empty or null values.'
-
- if (this._ignoreInvalidMapping) {
- if (typeof console !== 'undefined' && console.warn) {
- console.warn(message);
- }
- return false;
- } else {
- throw new Error(message);
- }
- }
-
- if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
- && aGenerated.line > 0 && aGenerated.column >= 0
- && !aOriginal && !aSource && !aName) {
- // Case 1.
- return;
- }
- else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
- && aOriginal && 'line' in aOriginal && 'column' in aOriginal
- && aGenerated.line > 0 && aGenerated.column >= 0
- && aOriginal.line > 0 && aOriginal.column >= 0
- && aSource) {
- // Cases 2 and 3.
- return;
- }
- else {
- var message = 'Invalid mapping: ' + JSON.stringify({
- generated: aGenerated,
- source: aSource,
- original: aOriginal,
- name: aName
- });
-
- if (this._ignoreInvalidMapping) {
- if (typeof console !== 'undefined' && console.warn) {
- console.warn(message);
- }
- return false;
- } else {
- throw new Error(message)
- }
- }
- };
-
-/**
- * Serialize the accumulated mappings in to the stream of base 64 VLQs
- * specified by the source map format.
- */
-SourceMapGenerator.prototype._serializeMappings =
- function SourceMapGenerator_serializeMappings() {
- var previousGeneratedColumn = 0;
- var previousGeneratedLine = 1;
- var previousOriginalColumn = 0;
- var previousOriginalLine = 0;
- var previousName = 0;
- var previousSource = 0;
- var result = '';
- var next;
- var mapping;
- var nameIdx;
- var sourceIdx;
-
- var mappings = this._mappings.toArray();
- for (var i = 0, len = mappings.length; i < len; i++) {
- mapping = mappings[i];
- next = ''
-
- if (mapping.generatedLine !== previousGeneratedLine) {
- previousGeneratedColumn = 0;
- while (mapping.generatedLine !== previousGeneratedLine) {
- next += ';';
- previousGeneratedLine++;
- }
- }
- else {
- if (i > 0) {
- if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {
- continue;
- }
- next += ',';
- }
- }
-
- next += base64VLQ.encode(mapping.generatedColumn
- - previousGeneratedColumn);
- previousGeneratedColumn = mapping.generatedColumn;
-
- if (mapping.source != null) {
- sourceIdx = this._sources.indexOf(mapping.source);
- next += base64VLQ.encode(sourceIdx - previousSource);
- previousSource = sourceIdx;
-
- // lines are stored 0-based in SourceMap spec version 3
- next += base64VLQ.encode(mapping.originalLine - 1
- - previousOriginalLine);
- previousOriginalLine = mapping.originalLine - 1;
-
- next += base64VLQ.encode(mapping.originalColumn
- - previousOriginalColumn);
- previousOriginalColumn = mapping.originalColumn;
-
- if (mapping.name != null) {
- nameIdx = this._names.indexOf(mapping.name);
- next += base64VLQ.encode(nameIdx - previousName);
- previousName = nameIdx;
- }
- }
-
- result += next;
- }
-
- return result;
- };
-
-SourceMapGenerator.prototype._generateSourcesContent =
- function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {
- return aSources.map(function (source) {
- if (!this._sourcesContents) {
- return null;
- }
- if (aSourceRoot != null) {
- source = util.relative(aSourceRoot, source);
- }
- var key = util.toSetString(source);
- return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)
- ? this._sourcesContents[key]
- : null;
- }, this);
- };
-
-/**
- * Externalize the source map.
- */
-SourceMapGenerator.prototype.toJSON =
- function SourceMapGenerator_toJSON() {
- var map = {
- version: this._version,
- sources: this._sources.toArray(),
- names: this._names.toArray(),
- mappings: this._serializeMappings()
- };
- if (this._file != null) {
- map.file = this._file;
- }
- if (this._sourceRoot != null) {
- map.sourceRoot = this._sourceRoot;
- }
- if (this._sourcesContents) {
- map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);
- }
-
- return map;
- };
-
-/**
- * Render the source map being generated to a string.
- */
-SourceMapGenerator.prototype.toString =
- function SourceMapGenerator_toString() {
- return JSON.stringify(this.toJSON());
- };
-
-exports.SourceMapGenerator = SourceMapGenerator;
diff --git a/node_modules/css-tree/node_modules/source-map-js/lib/source-node.js b/node_modules/css-tree/node_modules/source-map-js/lib/source-node.js
deleted file mode 100644
index 8bcdbe38..00000000
--- a/node_modules/css-tree/node_modules/source-map-js/lib/source-node.js
+++ /dev/null
@@ -1,413 +0,0 @@
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
-var SourceMapGenerator = require('./source-map-generator').SourceMapGenerator;
-var util = require('./util');
-
-// Matches a Windows-style `\r\n` newline or a `\n` newline used by all other
-// operating systems these days (capturing the result).
-var REGEX_NEWLINE = /(\r?\n)/;
-
-// Newline character code for charCodeAt() comparisons
-var NEWLINE_CODE = 10;
-
-// Private symbol for identifying `SourceNode`s when multiple versions of
-// the source-map library are loaded. This MUST NOT CHANGE across
-// versions!
-var isSourceNode = "$$$isSourceNode$$$";
-
-/**
- * SourceNodes provide a way to abstract over interpolating/concatenating
- * snippets of generated JavaScript source code while maintaining the line and
- * column information associated with the original source code.
- *
- * @param aLine The original line number.
- * @param aColumn The original column number.
- * @param aSource The original source's filename.
- * @param aChunks Optional. An array of strings which are snippets of
- * generated JS, or other SourceNodes.
- * @param aName The original identifier.
- */
-function SourceNode(aLine, aColumn, aSource, aChunks, aName) {
- this.children = [];
- this.sourceContents = {};
- this.line = aLine == null ? null : aLine;
- this.column = aColumn == null ? null : aColumn;
- this.source = aSource == null ? null : aSource;
- this.name = aName == null ? null : aName;
- this[isSourceNode] = true;
- if (aChunks != null) this.add(aChunks);
-}
-
-/**
- * Creates a SourceNode from generated code and a SourceMapConsumer.
- *
- * @param aGeneratedCode The generated code
- * @param aSourceMapConsumer The SourceMap for the generated code
- * @param aRelativePath Optional. The path that relative sources in the
- * SourceMapConsumer should be relative to.
- */
-SourceNode.fromStringWithSourceMap =
- function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {
- // The SourceNode we want to fill with the generated code
- // and the SourceMap
- var node = new SourceNode();
-
- // All even indices of this array are one line of the generated code,
- // while all odd indices are the newlines between two adjacent lines
- // (since `REGEX_NEWLINE` captures its match).
- // Processed fragments are accessed by calling `shiftNextLine`.
- var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);
- var remainingLinesIndex = 0;
- var shiftNextLine = function() {
- var lineContents = getNextLine();
- // The last line of a file might not have a newline.
- var newLine = getNextLine() || "";
- return lineContents + newLine;
-
- function getNextLine() {
- return remainingLinesIndex < remainingLines.length ?
- remainingLines[remainingLinesIndex++] : undefined;
- }
- };
-
- // We need to remember the position of "remainingLines"
- var lastGeneratedLine = 1, lastGeneratedColumn = 0;
-
- // The generate SourceNodes we need a code range.
- // To extract it current and last mapping is used.
- // Here we store the last mapping.
- var lastMapping = null;
-
- aSourceMapConsumer.eachMapping(function (mapping) {
- if (lastMapping !== null) {
- // We add the code from "lastMapping" to "mapping":
- // First check if there is a new line in between.
- if (lastGeneratedLine < mapping.generatedLine) {
- // Associate first line with "lastMapping"
- addMappingWithCode(lastMapping, shiftNextLine());
- lastGeneratedLine++;
- lastGeneratedColumn = 0;
- // The remaining code is added without mapping
- } else {
- // There is no new line in between.
- // Associate the code between "lastGeneratedColumn" and
- // "mapping.generatedColumn" with "lastMapping"
- var nextLine = remainingLines[remainingLinesIndex] || '';
- var code = nextLine.substr(0, mapping.generatedColumn -
- lastGeneratedColumn);
- remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn -
- lastGeneratedColumn);
- lastGeneratedColumn = mapping.generatedColumn;
- addMappingWithCode(lastMapping, code);
- // No more remaining code, continue
- lastMapping = mapping;
- return;
- }
- }
- // We add the generated code until the first mapping
- // to the SourceNode without any mapping.
- // Each line is added as separate string.
- while (lastGeneratedLine < mapping.generatedLine) {
- node.add(shiftNextLine());
- lastGeneratedLine++;
- }
- if (lastGeneratedColumn < mapping.generatedColumn) {
- var nextLine = remainingLines[remainingLinesIndex] || '';
- node.add(nextLine.substr(0, mapping.generatedColumn));
- remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);
- lastGeneratedColumn = mapping.generatedColumn;
- }
- lastMapping = mapping;
- }, this);
- // We have processed all mappings.
- if (remainingLinesIndex < remainingLines.length) {
- if (lastMapping) {
- // Associate the remaining code in the current line with "lastMapping"
- addMappingWithCode(lastMapping, shiftNextLine());
- }
- // and add the remaining lines without any mapping
- node.add(remainingLines.splice(remainingLinesIndex).join(""));
- }
-
- // Copy sourcesContent into SourceNode
- aSourceMapConsumer.sources.forEach(function (sourceFile) {
- var content = aSourceMapConsumer.sourceContentFor(sourceFile);
- if (content != null) {
- if (aRelativePath != null) {
- sourceFile = util.join(aRelativePath, sourceFile);
- }
- node.setSourceContent(sourceFile, content);
- }
- });
-
- return node;
-
- function addMappingWithCode(mapping, code) {
- if (mapping === null || mapping.source === undefined) {
- node.add(code);
- } else {
- var source = aRelativePath
- ? util.join(aRelativePath, mapping.source)
- : mapping.source;
- node.add(new SourceNode(mapping.originalLine,
- mapping.originalColumn,
- source,
- code,
- mapping.name));
- }
- }
- };
-
-/**
- * Add a chunk of generated JS to this source node.
- *
- * @param aChunk A string snippet of generated JS code, another instance of
- * SourceNode, or an array where each member is one of those things.
- */
-SourceNode.prototype.add = function SourceNode_add(aChunk) {
- if (Array.isArray(aChunk)) {
- aChunk.forEach(function (chunk) {
- this.add(chunk);
- }, this);
- }
- else if (aChunk[isSourceNode] || typeof aChunk === "string") {
- if (aChunk) {
- this.children.push(aChunk);
- }
- }
- else {
- throw new TypeError(
- "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
- );
- }
- return this;
-};
-
-/**
- * Add a chunk of generated JS to the beginning of this source node.
- *
- * @param aChunk A string snippet of generated JS code, another instance of
- * SourceNode, or an array where each member is one of those things.
- */
-SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {
- if (Array.isArray(aChunk)) {
- for (var i = aChunk.length-1; i >= 0; i--) {
- this.prepend(aChunk[i]);
- }
- }
- else if (aChunk[isSourceNode] || typeof aChunk === "string") {
- this.children.unshift(aChunk);
- }
- else {
- throw new TypeError(
- "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
- );
- }
- return this;
-};
-
-/**
- * Walk over the tree of JS snippets in this node and its children. The
- * walking function is called once for each snippet of JS and is passed that
- * snippet and the its original associated source's line/column location.
- *
- * @param aFn The traversal function.
- */
-SourceNode.prototype.walk = function SourceNode_walk(aFn) {
- var chunk;
- for (var i = 0, len = this.children.length; i < len; i++) {
- chunk = this.children[i];
- if (chunk[isSourceNode]) {
- chunk.walk(aFn);
- }
- else {
- if (chunk !== '') {
- aFn(chunk, { source: this.source,
- line: this.line,
- column: this.column,
- name: this.name });
- }
- }
- }
-};
-
-/**
- * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between
- * each of `this.children`.
- *
- * @param aSep The separator.
- */
-SourceNode.prototype.join = function SourceNode_join(aSep) {
- var newChildren;
- var i;
- var len = this.children.length;
- if (len > 0) {
- newChildren = [];
- for (i = 0; i < len-1; i++) {
- newChildren.push(this.children[i]);
- newChildren.push(aSep);
- }
- newChildren.push(this.children[i]);
- this.children = newChildren;
- }
- return this;
-};
-
-/**
- * Call String.prototype.replace on the very right-most source snippet. Useful
- * for trimming whitespace from the end of a source node, etc.
- *
- * @param aPattern The pattern to replace.
- * @param aReplacement The thing to replace the pattern with.
- */
-SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {
- var lastChild = this.children[this.children.length - 1];
- if (lastChild[isSourceNode]) {
- lastChild.replaceRight(aPattern, aReplacement);
- }
- else if (typeof lastChild === 'string') {
- this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);
- }
- else {
- this.children.push(''.replace(aPattern, aReplacement));
- }
- return this;
-};
-
-/**
- * Set the source content for a source file. This will be added to the SourceMapGenerator
- * in the sourcesContent field.
- *
- * @param aSourceFile The filename of the source file
- * @param aSourceContent The content of the source file
- */
-SourceNode.prototype.setSourceContent =
- function SourceNode_setSourceContent(aSourceFile, aSourceContent) {
- this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;
- };
-
-/**
- * Walk over the tree of SourceNodes. The walking function is called for each
- * source file content and is passed the filename and source content.
- *
- * @param aFn The traversal function.
- */
-SourceNode.prototype.walkSourceContents =
- function SourceNode_walkSourceContents(aFn) {
- for (var i = 0, len = this.children.length; i < len; i++) {
- if (this.children[i][isSourceNode]) {
- this.children[i].walkSourceContents(aFn);
- }
- }
-
- var sources = Object.keys(this.sourceContents);
- for (var i = 0, len = sources.length; i < len; i++) {
- aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);
- }
- };
-
-/**
- * Return the string representation of this source node. Walks over the tree
- * and concatenates all the various snippets together to one string.
- */
-SourceNode.prototype.toString = function SourceNode_toString() {
- var str = "";
- this.walk(function (chunk) {
- str += chunk;
- });
- return str;
-};
-
-/**
- * Returns the string representation of this source node along with a source
- * map.
- */
-SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {
- var generated = {
- code: "",
- line: 1,
- column: 0
- };
- var map = new SourceMapGenerator(aArgs);
- var sourceMappingActive = false;
- var lastOriginalSource = null;
- var lastOriginalLine = null;
- var lastOriginalColumn = null;
- var lastOriginalName = null;
- this.walk(function (chunk, original) {
- generated.code += chunk;
- if (original.source !== null
- && original.line !== null
- && original.column !== null) {
- if(lastOriginalSource !== original.source
- || lastOriginalLine !== original.line
- || lastOriginalColumn !== original.column
- || lastOriginalName !== original.name) {
- map.addMapping({
- source: original.source,
- original: {
- line: original.line,
- column: original.column
- },
- generated: {
- line: generated.line,
- column: generated.column
- },
- name: original.name
- });
- }
- lastOriginalSource = original.source;
- lastOriginalLine = original.line;
- lastOriginalColumn = original.column;
- lastOriginalName = original.name;
- sourceMappingActive = true;
- } else if (sourceMappingActive) {
- map.addMapping({
- generated: {
- line: generated.line,
- column: generated.column
- }
- });
- lastOriginalSource = null;
- sourceMappingActive = false;
- }
- for (var idx = 0, length = chunk.length; idx < length; idx++) {
- if (chunk.charCodeAt(idx) === NEWLINE_CODE) {
- generated.line++;
- generated.column = 0;
- // Mappings end at eol
- if (idx + 1 === length) {
- lastOriginalSource = null;
- sourceMappingActive = false;
- } else if (sourceMappingActive) {
- map.addMapping({
- source: original.source,
- original: {
- line: original.line,
- column: original.column
- },
- generated: {
- line: generated.line,
- column: generated.column
- },
- name: original.name
- });
- }
- } else {
- generated.column++;
- }
- }
- });
- this.walkSourceContents(function (sourceFile, sourceContent) {
- map.setSourceContent(sourceFile, sourceContent);
- });
-
- return { code: generated.code, map: map };
-};
-
-exports.SourceNode = SourceNode;
diff --git a/node_modules/css-tree/node_modules/source-map-js/lib/util.js b/node_modules/css-tree/node_modules/source-map-js/lib/util.js
deleted file mode 100644
index 430e2d0f..00000000
--- a/node_modules/css-tree/node_modules/source-map-js/lib/util.js
+++ /dev/null
@@ -1,594 +0,0 @@
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
-/**
- * This is a helper function for getting values from parameter/options
- * objects.
- *
- * @param args The object we are extracting values from
- * @param name The name of the property we are getting.
- * @param defaultValue An optional value to return if the property is missing
- * from the object. If this is not specified and the property is missing, an
- * error will be thrown.
- */
-function getArg(aArgs, aName, aDefaultValue) {
- if (aName in aArgs) {
- return aArgs[aName];
- } else if (arguments.length === 3) {
- return aDefaultValue;
- } else {
- throw new Error('"' + aName + '" is a required argument.');
- }
-}
-exports.getArg = getArg;
-
-var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.-]*)(?::(\d+))?(.*)$/;
-var dataUrlRegexp = /^data:.+\,.+$/;
-
-function urlParse(aUrl) {
- var match = aUrl.match(urlRegexp);
- if (!match) {
- return null;
- }
- return {
- scheme: match[1],
- auth: match[2],
- host: match[3],
- port: match[4],
- path: match[5]
- };
-}
-exports.urlParse = urlParse;
-
-function urlGenerate(aParsedUrl) {
- var url = '';
- if (aParsedUrl.scheme) {
- url += aParsedUrl.scheme + ':';
- }
- url += '//';
- if (aParsedUrl.auth) {
- url += aParsedUrl.auth + '@';
- }
- if (aParsedUrl.host) {
- url += aParsedUrl.host;
- }
- if (aParsedUrl.port) {
- url += ":" + aParsedUrl.port
- }
- if (aParsedUrl.path) {
- url += aParsedUrl.path;
- }
- return url;
-}
-exports.urlGenerate = urlGenerate;
-
-var MAX_CACHED_INPUTS = 32;
-
-/**
- * Takes some function `f(input) -> result` and returns a memoized version of
- * `f`.
- *
- * We keep at most `MAX_CACHED_INPUTS` memoized results of `f` alive. The
- * memoization is a dumb-simple, linear least-recently-used cache.
- */
-function lruMemoize(f) {
- var cache = [];
-
- return function(input) {
- for (var i = 0; i < cache.length; i++) {
- if (cache[i].input === input) {
- var temp = cache[0];
- cache[0] = cache[i];
- cache[i] = temp;
- return cache[0].result;
- }
- }
-
- var result = f(input);
-
- cache.unshift({
- input,
- result,
- });
-
- if (cache.length > MAX_CACHED_INPUTS) {
- cache.pop();
- }
-
- return result;
- };
-}
-
-/**
- * Normalizes a path, or the path portion of a URL:
- *
- * - Replaces consecutive slashes with one slash.
- * - Removes unnecessary '.' parts.
- * - Removes unnecessary '<dir>/..' parts.
- *
- * Based on code in the Node.js 'path' core module.
- *
- * @param aPath The path or url to normalize.
- */
-var normalize = lruMemoize(function normalize(aPath) {
- var path = aPath;
- var url = urlParse(aPath);
- if (url) {
- if (!url.path) {
- return aPath;
- }
- path = url.path;
- }
- var isAbsolute = exports.isAbsolute(path);
- // Split the path into parts between `/` characters. This is much faster than
- // using `.split(/\/+/g)`.
- var parts = [];
- var start = 0;
- var i = 0;
- while (true) {
- start = i;
- i = path.indexOf("/", start);
- if (i === -1) {
- parts.push(path.slice(start));
- break;
- } else {
- parts.push(path.slice(start, i));
- while (i < path.length && path[i] === "/") {
- i++;
- }
- }
- }
-
- for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {
- part = parts[i];
- if (part === '.') {
- parts.splice(i, 1);
- } else if (part === '..') {
- up++;
- } else if (up > 0) {
- if (part === '') {
- // The first part is blank if the path is absolute. Trying to go
- // above the root is a no-op. Therefore we can remove all '..' parts
- // directly after the root.
- parts.splice(i + 1, up);
- up = 0;
- } else {
- parts.splice(i, 2);
- up--;
- }
- }
- }
- path = parts.join('/');
-
- if (path === '') {
- path = isAbsolute ? '/' : '.';
- }
-
- if (url) {
- url.path = path;
- return urlGenerate(url);
- }
- return path;
-});
-exports.normalize = normalize;
-
-/**
- * Joins two paths/URLs.
- *
- * @param aRoot The root path or URL.
- * @param aPath The path or URL to be joined with the root.
- *
- * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a
- * scheme-relative URL: Then the scheme of aRoot, if any, is prepended
- * first.
- * - Otherwise aPath is a path. If aRoot is a URL, then its path portion
- * is updated with the result and aRoot is returned. Otherwise the result
- * is returned.
- * - If aPath is absolute, the result is aPath.
- * - Otherwise the two paths are joined with a slash.
- * - Joining for example 'http://' and 'www.example.com' is also supported.
- */
-function join(aRoot, aPath) {
- if (aRoot === "") {
- aRoot = ".";
- }
- if (aPath === "") {
- aPath = ".";
- }
- var aPathUrl = urlParse(aPath);
- var aRootUrl = urlParse(aRoot);
- if (aRootUrl) {
- aRoot = aRootUrl.path || '/';
- }
-
- // `join(foo, '//www.example.org')`
- if (aPathUrl && !aPathUrl.scheme) {
- if (aRootUrl) {
- aPathUrl.scheme = aRootUrl.scheme;
- }
- return urlGenerate(aPathUrl);
- }
-
- if (aPathUrl || aPath.match(dataUrlRegexp)) {
- return aPath;
- }
-
- // `join('http://', 'www.example.com')`
- if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {
- aRootUrl.host = aPath;
- return urlGenerate(aRootUrl);
- }
-
- var joined = aPath.charAt(0) === '/'
- ? aPath
- : normalize(aRoot.replace(/\/+$/, '') + '/' + aPath);
-
- if (aRootUrl) {
- aRootUrl.path = joined;
- return urlGenerate(aRootUrl);
- }
- return joined;
-}
-exports.join = join;
-
-exports.isAbsolute = function (aPath) {
- return aPath.charAt(0) === '/' || urlRegexp.test(aPath);
-};
-
-/**
- * Make a path relative to a URL or another path.
- *
- * @param aRoot The root path or URL.
- * @param aPath The path or URL to be made relative to aRoot.
- */
-function relative(aRoot, aPath) {
- if (aRoot === "") {
- aRoot = ".";
- }
-
- aRoot = aRoot.replace(/\/$/, '');
-
- // It is possible for the path to be above the root. In this case, simply
- // checking whether the root is a prefix of the path won't work. Instead, we
- // need to remove components from the root one by one, until either we find
- // a prefix that fits, or we run out of components to remove.
- var level = 0;
- while (aPath.indexOf(aRoot + '/') !== 0) {
- var index = aRoot.lastIndexOf("/");
- if (index < 0) {
- return aPath;
- }
-
- // If the only part of the root that is left is the scheme (i.e. http://,
- // file:///, etc.), one or more slashes (/), or simply nothing at all, we
- // have exhausted all components, so the path is not relative to the root.
- aRoot = aRoot.slice(0, index);
- if (aRoot.match(/^([^\/]+:\/)?\/*$/)) {
- return aPath;
- }
-
- ++level;
- }
-
- // Make sure we add a "../" for each component we removed from the root.
- return Array(level + 1).join("../") + aPath.substr(aRoot.length + 1);
-}
-exports.relative = relative;
-
-var supportsNullProto = (function () {
- var obj = Object.create(null);
- return !('__proto__' in obj);
-}());
-
-function identity (s) {
- return s;
-}
-
-/**
- * Because behavior goes wacky when you set `__proto__` on objects, we
- * have to prefix all the strings in our set with an arbitrary character.
- *
- * See https://github.com/mozilla/source-map/pull/31 and
- * https://github.com/mozilla/source-map/issues/30
- *
- * @param String aStr
- */
-function toSetString(aStr) {
- if (isProtoString(aStr)) {
- return '$' + aStr;
- }
-
- return aStr;
-}
-exports.toSetString = supportsNullProto ? identity : toSetString;
-
-function fromSetString(aStr) {
- if (isProtoString(aStr)) {
- return aStr.slice(1);
- }
-
- return aStr;
-}
-exports.fromSetString = supportsNullProto ? identity : fromSetString;
-
-function isProtoString(s) {
- if (!s) {
- return false;
- }
-
- var length = s.length;
-
- if (length < 9 /* "__proto__".length */) {
- return false;
- }
-
- if (s.charCodeAt(length - 1) !== 95 /* '_' */ ||
- s.charCodeAt(length - 2) !== 95 /* '_' */ ||
- s.charCodeAt(length - 3) !== 111 /* 'o' */ ||
- s.charCodeAt(length - 4) !== 116 /* 't' */ ||
- s.charCodeAt(length - 5) !== 111 /* 'o' */ ||
- s.charCodeAt(length - 6) !== 114 /* 'r' */ ||
- s.charCodeAt(length - 7) !== 112 /* 'p' */ ||
- s.charCodeAt(length - 8) !== 95 /* '_' */ ||
- s.charCodeAt(length - 9) !== 95 /* '_' */) {
- return false;
- }
-
- for (var i = length - 10; i >= 0; i--) {
- if (s.charCodeAt(i) !== 36 /* '$' */) {
- return false;
- }
- }
-
- return true;
-}
-
-/**
- * Comparator between two mappings where the original positions are compared.
- *
- * Optionally pass in `true` as `onlyCompareGenerated` to consider two
- * mappings with the same original source/line/column, but different generated
- * line and column the same. Useful when searching for a mapping with a
- * stubbed out mapping.
- */
-function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {
- var cmp = strcmp(mappingA.source, mappingB.source);
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.originalLine - mappingB.originalLine;
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.originalColumn - mappingB.originalColumn;
- if (cmp !== 0 || onlyCompareOriginal) {
- return cmp;
- }
-
- cmp = mappingA.generatedColumn - mappingB.generatedColumn;
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.generatedLine - mappingB.generatedLine;
- if (cmp !== 0) {
- return cmp;
- }
-
- return strcmp(mappingA.name, mappingB.name);
-}
-exports.compareByOriginalPositions = compareByOriginalPositions;
-
-function compareByOriginalPositionsNoSource(mappingA, mappingB, onlyCompareOriginal) {
- var cmp
-
- cmp = mappingA.originalLine - mappingB.originalLine;
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.originalColumn - mappingB.originalColumn;
- if (cmp !== 0 || onlyCompareOriginal) {
- return cmp;
- }
-
- cmp = mappingA.generatedColumn - mappingB.generatedColumn;
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.generatedLine - mappingB.generatedLine;
- if (cmp !== 0) {
- return cmp;
- }
-
- return strcmp(mappingA.name, mappingB.name);
-}
-exports.compareByOriginalPositionsNoSource = compareByOriginalPositionsNoSource;
-
-/**
- * Comparator between two mappings with deflated source and name indices where
- * the generated positions are compared.
- *
- * Optionally pass in `true` as `onlyCompareGenerated` to consider two
- * mappings with the same generated line and column, but different
- * source/name/original line and column the same. Useful when searching for a
- * mapping with a stubbed out mapping.
- */
-function compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {
- var cmp = mappingA.generatedLine - mappingB.generatedLine;
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.generatedColumn - mappingB.generatedColumn;
- if (cmp !== 0 || onlyCompareGenerated) {
- return cmp;
- }
-
- cmp = strcmp(mappingA.source, mappingB.source);
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.originalLine - mappingB.originalLine;
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.originalColumn - mappingB.originalColumn;
- if (cmp !== 0) {
- return cmp;
- }
-
- return strcmp(mappingA.name, mappingB.name);
-}
-exports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;
-
-function compareByGeneratedPositionsDeflatedNoLine(mappingA, mappingB, onlyCompareGenerated) {
- var cmp = mappingA.generatedColumn - mappingB.generatedColumn;
- if (cmp !== 0 || onlyCompareGenerated) {
- return cmp;
- }
-
- cmp = strcmp(mappingA.source, mappingB.source);
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.originalLine - mappingB.originalLine;
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.originalColumn - mappingB.originalColumn;
- if (cmp !== 0) {
- return cmp;
- }
-
- return strcmp(mappingA.name, mappingB.name);
-}
-exports.compareByGeneratedPositionsDeflatedNoLine = compareByGeneratedPositionsDeflatedNoLine;
-
-function strcmp(aStr1, aStr2) {
- if (aStr1 === aStr2) {
- return 0;
- }
-
- if (aStr1 === null) {
- return 1; // aStr2 !== null
- }
-
- if (aStr2 === null) {
- return -1; // aStr1 !== null
- }
-
- if (aStr1 > aStr2) {
- return 1;
- }
-
- return -1;
-}
-
-/**
- * Comparator between two mappings with inflated source and name strings where
- * the generated positions are compared.
- */
-function compareByGeneratedPositionsInflated(mappingA, mappingB) {
- var cmp = mappingA.generatedLine - mappingB.generatedLine;
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.generatedColumn - mappingB.generatedColumn;
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = strcmp(mappingA.source, mappingB.source);
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.originalLine - mappingB.originalLine;
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.originalColumn - mappingB.originalColumn;
- if (cmp !== 0) {
- return cmp;
- }
-
- return strcmp(mappingA.name, mappingB.name);
-}
-exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;
-
-/**
- * Strip any JSON XSSI avoidance prefix from the string (as documented
- * in the source maps specification), and then parse the string as
- * JSON.
- */
-function parseSourceMapInput(str) {
- return JSON.parse(str.replace(/^\)]}'[^\n]*\n/, ''));
-}
-exports.parseSourceMapInput = parseSourceMapInput;
-
-/**
- * Compute the URL of a source given the the source root, the source's
- * URL, and the source map's URL.
- */
-function computeSourceURL(sourceRoot, sourceURL, sourceMapURL) {
- sourceURL = sourceURL || '';
-
- if (sourceRoot) {
- // This follows what Chrome does.
- if (sourceRoot[sourceRoot.length - 1] !== '/' && sourceURL[0] !== '/') {
- sourceRoot += '/';
- }
- // The spec says:
- // Line 4: An optional source root, useful for relocating source
- // files on a server or removing repeated values in the
- // “sources” entry. This value is prepended to the individual
- // entries in the “source” field.
- sourceURL = sourceRoot + sourceURL;
- }
-
- // Historically, SourceMapConsumer did not take the sourceMapURL as
- // a parameter. This mode is still somewhat supported, which is why
- // this code block is conditional. However, it's preferable to pass
- // the source map URL to SourceMapConsumer, so that this function
- // can implement the source URL resolution algorithm as outlined in
- // the spec. This block is basically the equivalent of:
- // new URL(sourceURL, sourceMapURL).toString()
- // ... except it avoids using URL, which wasn't available in the
- // older releases of node still supported by this library.
- //
- // The spec says:
- // If the sources are not absolute URLs after prepending of the
- // “sourceRoot”, the sources are resolved relative to the
- // SourceMap (like resolving script src in a html document).
- if (sourceMapURL) {
- var parsed = urlParse(sourceMapURL);
- if (!parsed) {
- throw new Error("sourceMapURL could not be parsed");
- }
- if (parsed.path) {
- // Strip the last path component, but keep the "/".
- var index = parsed.path.lastIndexOf('/');
- if (index >= 0) {
- parsed.path = parsed.path.substring(0, index + 1);
- }
- }
- sourceURL = join(urlGenerate(parsed), sourceURL);
- }
-
- return normalize(sourceURL);
-}
-exports.computeSourceURL = computeSourceURL;
diff --git a/node_modules/css-tree/node_modules/source-map-js/package.json b/node_modules/css-tree/node_modules/source-map-js/package.json
deleted file mode 100644
index f16eb36f..00000000
--- a/node_modules/css-tree/node_modules/source-map-js/package.json
+++ /dev/null
@@ -1,71 +0,0 @@
-{
- "name": "source-map-js",
- "description": "Generates and consumes source maps",
- "version": "1.2.0",
- "homepage": "https://github.com/7rulnik/source-map-js",
- "author": "Valentin 7rulnik Semirulnik <v7rulnik@gmail.com>",
- "contributors": [
- "Nick Fitzgerald <nfitzgerald@mozilla.com>",
- "Tobias Koppers <tobias.koppers@googlemail.com>",
- "Duncan Beevers <duncan@dweebd.com>",
- "Stephen Crane <scrane@mozilla.com>",
- "Ryan Seddon <seddon.ryan@gmail.com>",
- "Miles Elam <miles.elam@deem.com>",
- "Mihai Bazon <mihai.bazon@gmail.com>",
- "Michael Ficarra <github.public.email@michael.ficarra.me>",
- "Todd Wolfson <todd@twolfson.com>",
- "Alexander Solovyov <alexander@solovyov.net>",
- "Felix Gnass <fgnass@gmail.com>",
- "Conrad Irwin <conrad.irwin@gmail.com>",
- "usrbincc <usrbincc@yahoo.com>",
- "David Glasser <glasser@davidglasser.net>",
- "Chase Douglas <chase@newrelic.com>",
- "Evan Wallace <evan.exe@gmail.com>",
- "Heather Arthur <fayearthur@gmail.com>",
- "Hugh Kennedy <hughskennedy@gmail.com>",
- "David Glasser <glasser@davidglasser.net>",
- "Simon Lydell <simon.lydell@gmail.com>",
- "Jmeas Smith <jellyes2@gmail.com>",
- "Michael Z Goddard <mzgoddard@gmail.com>",
- "azu <azu@users.noreply.github.com>",
- "John Gozde <john@gozde.ca>",
- "Adam Kirkton <akirkton@truefitinnovation.com>",
- "Chris Montgomery <christopher.montgomery@dowjones.com>",
- "J. Ryan Stinnett <jryans@gmail.com>",
- "Jack Herrington <jherrington@walmartlabs.com>",
- "Chris Truter <jeffpalentine@gmail.com>",
- "Daniel Espeset <daniel@danielespeset.com>",
- "Jamie Wong <jamie.lf.wong@gmail.com>",
- "Eddy Bruël <ejpbruel@mozilla.com>",
- "Hawken Rives <hawkrives@gmail.com>",
- "Gilad Peleg <giladp007@gmail.com>",
- "djchie <djchie.dev@gmail.com>",
- "Gary Ye <garysye@gmail.com>",
- "Nicolas Lalevée <nicolas.lalevee@hibnet.org>"
- ],
- "repository": "7rulnik/source-map-js",
- "main": "./source-map.js",
- "files": [
- "source-map.js",
- "source-map.d.ts",
- "lib/"
- ],
- "engines": {
- "node": ">=0.10.0"
- },
- "license": "BSD-3-Clause",
- "scripts": {
- "test": "npm run build && node test/run-tests.js",
- "build": "webpack --color",
- "toc": "doctoc --title '## Table of Contents' README.md && doctoc --title '## Table of Contents' CONTRIBUTING.md"
- },
- "devDependencies": {
- "clean-publish": "^3.1.0",
- "doctoc": "^0.15.0",
- "webpack": "^1.12.0"
- },
- "clean-publish": {
- "cleanDocs": true
- },
- "typings": "source-map.d.ts"
-}
diff --git a/node_modules/css-tree/node_modules/source-map-js/source-map.d.ts b/node_modules/css-tree/node_modules/source-map-js/source-map.d.ts
deleted file mode 100644
index 9f8a4b38..00000000
--- a/node_modules/css-tree/node_modules/source-map-js/source-map.d.ts
+++ /dev/null
@@ -1,115 +0,0 @@
-declare module 'source-map-js' {
- export interface StartOfSourceMap {
- file?: string;
- sourceRoot?: string;
- }
-
- export interface RawSourceMap extends StartOfSourceMap {
- version: string;
- sources: string[];
- names: string[];
- sourcesContent?: string[];
- mappings: string;
- }
-
- export interface Position {
- line: number;
- column: number;
- }
-
- export interface LineRange extends Position {
- lastColumn: number;
- }
-
- export interface FindPosition extends Position {
- // SourceMapConsumer.GREATEST_LOWER_BOUND or SourceMapConsumer.LEAST_UPPER_BOUND
- bias?: number;
- }
-
- export interface SourceFindPosition extends FindPosition {
- source: string;
- }
-
- export interface MappedPosition extends Position {
- source: string;
- name?: string;
- }
-
- export interface MappingItem {
- source: string;
- generatedLine: number;
- generatedColumn: number;
- originalLine: number;
- originalColumn: number;
- name: string;
- }
-
- export class SourceMapConsumer {
- static GENERATED_ORDER: number;
- static ORIGINAL_ORDER: number;
-
- static GREATEST_LOWER_BOUND: number;
- static LEAST_UPPER_BOUND: number;
-
- constructor(rawSourceMap: RawSourceMap);
- computeColumnSpans(): void;
- originalPositionFor(generatedPosition: FindPosition): MappedPosition;
- generatedPositionFor(originalPosition: SourceFindPosition): LineRange;
- allGeneratedPositionsFor(originalPosition: MappedPosition): Position[];
- hasContentsOfAllSources(): boolean;
- sourceContentFor(source: string, returnNullOnMissing?: boolean): string;
- eachMapping(callback: (mapping: MappingItem) => void, context?: any, order?: number): void;
- }
-
- export interface Mapping {
- generated: Position;
- original: Position;
- source: string;
- name?: string;
- }
-
- export class SourceMapGenerator {
- constructor(startOfSourceMap?: StartOfSourceMap);
- static fromSourceMap(sourceMapConsumer: SourceMapConsumer): SourceMapGenerator;
- addMapping(mapping: Mapping): void;
- setSourceContent(sourceFile: string, sourceContent: string): void;
- applySourceMap(sourceMapConsumer: SourceMapConsumer, sourceFile?: string, sourceMapPath?: string): void;
- toString(): string;
- }
-
- export interface CodeWithSourceMap {
- code: string;
- map: SourceMapGenerator;
- }
-
- export class SourceNode {
- constructor();
- constructor(line: number, column: number, source: string);
- constructor(line: number, column: number, source: string, chunk?: string, name?: string);
- static fromStringWithSourceMap(code: string, sourceMapConsumer: SourceMapConsumer, relativePath?: string): SourceNode;
- add(chunk: string): void;
- prepend(chunk: string): void;
- setSourceContent(sourceFile: string, sourceContent: string): void;
- walk(fn: (chunk: string, mapping: MappedPosition) => void): void;
- walkSourceContents(fn: (file: string, content: string) => void): void;
- join(sep: string): SourceNode;
- replaceRight(pattern: string, replacement: string): SourceNode;
- toString(): string;
- toStringWithSourceMap(startOfSourceMap?: StartOfSourceMap): CodeWithSourceMap;
- }
-}
-
-declare module 'source-map-js/lib/source-map-generator' {
- import { SourceMapGenerator } from 'source-map-js'
- export { SourceMapGenerator }
-}
-
-declare module 'source-map-js/lib/source-map-consumer' {
- import { SourceMapConsumer } from 'source-map-js'
- export { SourceMapConsumer }
-}
-
-declare module 'source-map-js/lib/source-node' {
- import { SourceNode } from 'source-map-js'
- export { SourceNode }
-}
diff --git a/node_modules/css-tree/node_modules/source-map-js/source-map.js b/node_modules/css-tree/node_modules/source-map-js/source-map.js
deleted file mode 100644
index bc88fe82..00000000
--- a/node_modules/css-tree/node_modules/source-map-js/source-map.js
+++ /dev/null
@@ -1,8 +0,0 @@
-/*
- * Copyright 2009-2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE.txt or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-exports.SourceMapGenerator = require('./lib/source-map-generator').SourceMapGenerator;
-exports.SourceMapConsumer = require('./lib/source-map-consumer').SourceMapConsumer;
-exports.SourceNode = require('./lib/source-node').SourceNode;
diff --git a/node_modules/css-tree/package.json b/node_modules/css-tree/package.json
deleted file mode 100644
index 934e699f..00000000
--- a/node_modules/css-tree/package.json
+++ /dev/null
@@ -1,126 +0,0 @@
-{
- "name": "css-tree",
- "version": "2.3.1",
- "description": "A tool set for CSS: fast detailed parser (CSS → AST), walker (AST traversal), generator (AST → CSS) and lexer (validation and matching) based on specs and browser implementations",
- "author": "Roman Dvornov <rdvornov@gmail.com> (https://github.com/lahmatiy)",
- "license": "MIT",
- "repository": "csstree/csstree",
- "keywords": [
- "css",
- "ast",
- "tokenizer",
- "parser",
- "walker",
- "lexer",
- "generator",
- "utils",
- "syntax",
- "validation"
- ],
- "type": "module",
- "module": "./lib/index.js",
- "main": "./cjs/index.cjs",
- "exports": {
- ".": {
- "import": "./lib/index.js",
- "require": "./cjs/index.cjs"
- },
- "./dist/*": "./dist/*.js",
- "./package.json": "./package.json",
- "./tokenizer": {
- "import": "./lib/tokenizer/index.js",
- "require": "./cjs/tokenizer/index.cjs"
- },
- "./parser": {
- "import": "./lib/parser/index.js",
- "require": "./cjs/parser/index.cjs"
- },
- "./selector-parser": {
- "import": "./lib/parser/parse-selector.js",
- "require": "./cjs/parser/parse-selector.cjs"
- },
- "./generator": {
- "import": "./lib/generator/index.js",
- "require": "./cjs/generator/index.cjs"
- },
- "./walker": {
- "import": "./lib/walker/index.js",
- "require": "./cjs/walker/index.cjs"
- },
- "./convertor": {
- "import": "./lib/convertor/index.js",
- "require": "./cjs/convertor/index.cjs"
- },
- "./lexer": {
- "import": "./lib/lexer/index.js",
- "require": "./cjs/lexer/index.cjs"
- },
- "./definition-syntax": {
- "import": "./lib/definition-syntax/index.js",
- "require": "./cjs/definition-syntax/index.cjs"
- },
- "./definition-syntax-data": {
- "import": "./lib/data.js",
- "require": "./cjs/data.cjs"
- },
- "./definition-syntax-data-patch": {
- "import": "./lib/data-patch.js",
- "require": "./cjs/data-patch.cjs"
- },
- "./utils": {
- "import": "./lib/utils/index.js",
- "require": "./cjs/utils/index.cjs"
- }
- },
- "browser": {
- "./cjs/data.cjs": "./dist/data.cjs",
- "./cjs/version.cjs": "./dist/version.cjs",
- "./lib/data.js": "./dist/data.js",
- "./lib/version.js": "./dist/version.js"
- },
- "unpkg": "dist/csstree.esm.js",
- "jsdelivr": "dist/csstree.esm.js",
- "scripts": {
- "watch": "npm run build -- --watch",
- "build": "npm run bundle && npm run esm-to-cjs --",
- "build-and-test": "npm run build && npm run test:dist && npm run test:cjs",
- "bundle": "node scripts/bundle",
- "bundle-and-test": "npm run bundle && npm run test:dist",
- "esm-to-cjs": "node scripts/esm-to-cjs.cjs",
- "esm-to-cjs-and-test": "npm run esm-to-cjs && npm run test:cjs",
- "lint": "eslint lib scripts && node scripts/review-syntax-patch --lint && node scripts/update-docs --lint",
- "lint-and-test": "npm run lint && npm test",
- "update:docs": "node scripts/update-docs",
- "review:syntax-patch": "node scripts/review-syntax-patch",
- "test": "mocha lib/__tests --reporter ${REPORTER:-progress}",
- "test:cjs": "mocha cjs/__tests --reporter ${REPORTER:-progress}",
- "test:dist": "mocha dist/__tests --reporter ${REPORTER:-progress}",
- "coverage": "c8 --exclude lib/__tests --reporter=lcovonly npm test",
- "prepublishOnly": "npm run lint-and-test && npm run build-and-test",
- "hydrogen": "node --trace-hydrogen --trace-phase=Z --trace-deopt --code-comments --hydrogen-track-positions --redirect-code-traces --redirect-code-traces-to=code.asm --trace_hydrogen_file=code.cfg --print-opt-code bin/parse --stat -o /dev/null"
- },
- "dependencies": {
- "mdn-data": "2.0.30",
- "source-map-js": "^1.0.1"
- },
- "devDependencies": {
- "c8": "^7.12.0",
- "clap": "^2.0.1",
- "esbuild": "^0.14.53",
- "eslint": "^8.4.1",
- "json-to-ast": "^2.1.0",
- "mocha": "^9.2.2",
- "rollup": "^2.68.0"
- },
- "engines": {
- "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
- },
- "files": [
- "data",
- "dist",
- "cjs",
- "!cjs/__tests",
- "lib",
- "!lib/__tests"
- ]
-}